diff --git a/apps/web/app/(use-page-wrapper)/apps/(homepage)/loading.tsx b/apps/web/app/(use-page-wrapper)/apps/(homepage)/loading.tsx new file mode 100644 index 0000000000..46bb64ba5e --- /dev/null +++ b/apps/web/app/(use-page-wrapper)/apps/(homepage)/loading.tsx @@ -0,0 +1,5 @@ +import { AppHomePageSkeleton } from "app/(use-page-wrapper)/apps/(homepage)/skeleton"; + +export default function Loading() { + return ; +} diff --git a/apps/web/app/(use-page-wrapper)/apps/page.tsx b/apps/web/app/(use-page-wrapper)/apps/(homepage)/page.tsx similarity index 100% rename from apps/web/app/(use-page-wrapper)/apps/page.tsx rename to apps/web/app/(use-page-wrapper)/apps/(homepage)/page.tsx index f15da14504..336e81deb2 100644 --- a/apps/web/app/(use-page-wrapper)/apps/page.tsx +++ b/apps/web/app/(use-page-wrapper)/apps/(homepage)/page.tsx @@ -22,8 +22,8 @@ const getData = withAppDirSsr(getServerSideProps); const ServerPage = async ({ params, searchParams }: PageProps) => { const context = buildLegacyCtx(await headers(), await cookies(), await params, await searchParams); - const props = await getData(context); + return ; }; diff --git a/apps/web/app/(use-page-wrapper)/apps/(homepage)/skeleton.tsx b/apps/web/app/(use-page-wrapper)/apps/(homepage)/skeleton.tsx new file mode 100644 index 0000000000..66066870fe --- /dev/null +++ b/apps/web/app/(use-page-wrapper)/apps/(homepage)/skeleton.tsx @@ -0,0 +1,105 @@ +"use client"; + +import { useLocale } from "@calcom/lib/hooks/useLocale"; +import { SkeletonText, SkeletonContainer, SkeletonButton } from "@calcom/ui/components/skeleton"; + +import AppsLayout from "@components/apps/layouts/AppsLayout"; + +export function AppHomePageSkeleton() { + const { t } = useLocale(); + + return ( + + + + {/* Featured Categories section */} + + + + + {/* Left arrow */} + {/* Right arrow */} + + + + {/* Category cards - 5 items based on screenshot */} + {Array(5) + .fill(0) + .map((_, i) => ( + + {/* Icon placeholder */} + {/* Category name */} + {/* Apps count */} + + ))} + + + + {/* Most Popular section */} + + + + + {/* Left arrow */} + {/* Right arrow */} + + + + {/* App cards - 3 items */} + {Array(3) + .fill(0) + .map((_, i) => ( + + + {/* App icon */} + + {/* App name */} + {/* Developer name */} + + + {/* Description line 1 */} + {/* Description line 2 */} + + {/* Details button */} + + + ))} + + + + {/* All apps section */} + + + + {/* App cards - 6 items */} + {Array(6) + .fill(0) + .map((_, i) => ( + + + {/* App icon */} + + {/* App name */} + {/* Developer name */} + + + {/* Description line 1 */} + {/* Description line 2 */} + + {/* Details button */} + + + ))} + + + + + + ); +} diff --git a/apps/web/components/apps/layouts/AppsLayout.tsx b/apps/web/components/apps/layouts/AppsLayout.tsx index d7e95db8ec..bdfd58219a 100644 --- a/apps/web/components/apps/layouts/AppsLayout.tsx +++ b/apps/web/components/apps/layouts/AppsLayout.tsx @@ -19,7 +19,6 @@ export default function AppsLayout({ children, actions, emptyStore, ...rest }: A const router = useRouter(); const isAdmin = session.data?.user.role === "ADMIN"; - if (session.status === "loading") return <>>; return (