diff --git a/src/app/(lobby)/@modal/(.)product-preview/[productId]/layout.tsx b/src/app/(lobby)/@modal/(.)product-preview/[productId]/layout.tsx new file mode 100644 index 00000000..2ae2381e --- /dev/null +++ b/src/app/(lobby)/@modal/(.)product-preview/[productId]/layout.tsx @@ -0,0 +1,11 @@ +import { AlertDialog, AlertDialogContent } from "@/components/ui/alert-dialog" + +export default function ProductModalLayout({ + children, +}: React.PropsWithChildren) { + return ( + + {children} + + ) +} diff --git a/src/app/(lobby)/@modal/(.)product-preview/[productId]/page.tsx b/src/app/(lobby)/@modal/(.)product-preview/[productId]/page.tsx new file mode 100644 index 00000000..9849ccef --- /dev/null +++ b/src/app/(lobby)/@modal/(.)product-preview/[productId]/page.tsx @@ -0,0 +1,15 @@ +interface ProductModalPageProps { + params: { + productId: string + } +} + +export default function ProductModalPage({ params }: ProductModalPageProps) { + const productId = Number(params.productId) + + return ( +
+
Product: {productId}
+
+ ) +} diff --git a/src/app/(lobby)/@modal/default.tsx b/src/app/(lobby)/@modal/default.tsx new file mode 100644 index 00000000..86b9e9a3 --- /dev/null +++ b/src/app/(lobby)/@modal/default.tsx @@ -0,0 +1,3 @@ +export default function Default() { + return null +} diff --git a/src/app/(lobby)/layout.tsx b/src/app/(lobby)/layout.tsx index 990d7964..32cd2a75 100644 --- a/src/app/(lobby)/layout.tsx +++ b/src/app/(lobby)/layout.tsx @@ -3,15 +3,24 @@ import { currentUser } from "@clerk/nextjs" import { SiteFooter } from "@/components/layouts/site-footer" import { SiteHeader } from "@/components/layouts/site-header" +interface LobbyLayoutProps + extends React.PropsWithChildren<{ + modal: React.ReactNode + }> {} + export default async function LobbyLayout({ children, -}: React.PropsWithChildren) { + modal, +}: LobbyLayoutProps) { const user = await currentUser() return (
-
{children}
+
+ {children} + {modal} +
) diff --git a/src/app/(lobby)/product/[productId]/loading.tsx b/src/app/(lobby)/product/[productId]/loading.tsx index 23114b0b..a1596fac 100644 --- a/src/app/(lobby)/product/[productId]/loading.tsx +++ b/src/app/(lobby)/product/[productId]/loading.tsx @@ -1,10 +1,10 @@ import { cn } from "@/lib/utils" -import { AspectRatio } from "@/components/ui/aspect-ratio" -import { Card, CardContent, CardFooter, CardHeader } from "@/components/ui/card" +import { ScrollArea } from "@/components/ui/scroll-area" import { Separator } from "@/components/ui/separator" import { Skeleton } from "@/components/ui/skeleton" import { Icons } from "@/components/icons" import { Shell } from "@/components/shells/shell" +import { ProductCardSkeleton } from "@/components/skeletons/product-card-skeleton" export default function ProductLoading() { return ( @@ -75,36 +75,15 @@ export default function ProductLoading() { -
- -
+
+ +
{Array.from({ length: 4 }).map((_, i) => ( - - - -
-
-
-
- - - - - -
- - -
-
-
+ ))}
-
+
) diff --git a/src/components/skeletons/product-card-skeleton.tsx b/src/components/skeletons/product-card-skeleton.tsx index f9f603d9..8ca23ba3 100644 --- a/src/components/skeletons/product-card-skeleton.tsx +++ b/src/components/skeletons/product-card-skeleton.tsx @@ -1,11 +1,21 @@ +import { cn } from "@/lib/utils" import { AspectRatio } from "@/components/ui/aspect-ratio" import { Card, CardContent, CardFooter, CardHeader } from "@/components/ui/card" import { Skeleton } from "@/components/ui/skeleton" import { PlaceholderImage } from "@/components/placeholder-image" -export function ProductCardSkeleton() { +interface ProductCardSkeletonProps + extends React.ComponentPropsWithoutRef {} + +export function ProductCardSkeleton({ + className, + ...props +}: ProductCardSkeletonProps) { return ( - +