From 0ba05b64347b312cf23c5293dd087a15ffc0ae44 Mon Sep 17 00:00:00 2001 From: Ste Vaidis Date: Sat, 18 Feb 2023 11:48:45 +0200 Subject: [PATCH] more code --- .../[slug]/components/Description.tsx | 8 ++--- app/restaurant/[slug]/components/Header.tsx | 13 ++++++-- app/restaurant/[slug]/components/Images.tsx | 30 ++++--------------- app/restaurant/[slug]/components/Menu.tsx | 17 ++++++++--- app/restaurant/[slug]/components/MenuCard.tsx | 12 ++++---- .../[slug]/components/RestaurantNavBar.tsx | 6 ++-- app/restaurant/[slug]/components/Title.tsx | 4 +-- app/restaurant/[slug]/layout.tsx | 4 ++- app/restaurant/[slug]/menu/page.tsx | 27 +++++++++++++++-- app/restaurant/[slug]/page.tsx | 8 ++--- 10 files changed, 73 insertions(+), 56 deletions(-) diff --git a/app/restaurant/[slug]/components/Description.tsx b/app/restaurant/[slug]/components/Description.tsx index 87eb302..2858dac 100644 --- a/app/restaurant/[slug]/components/Description.tsx +++ b/app/restaurant/[slug]/components/Description.tsx @@ -1,12 +1,8 @@ -export default function Description() { +export default function Description({description}: {description: string}) { return (

- The classics you love prepared with a perfect twist, all served up in an - atmosphere that feels just right. That’s the Milestones promise. So, - whether you’re celebrating a milestone, making the most of Happy Hour or - enjoying brunch with friends, you can be sure that every Milestones - experience is a simple and perfectly memorable one. + {description}

); diff --git a/app/restaurant/[slug]/components/Header.tsx b/app/restaurant/[slug]/components/Header.tsx index 3cdda7c..196f14f 100644 --- a/app/restaurant/[slug]/components/Header.tsx +++ b/app/restaurant/[slug]/components/Header.tsx @@ -1,9 +1,16 @@ -export default function Header() { +export default function Header({name}: {name: string}) { + + const renderTitle = () => { + const nameArray = name.split("-"); + nameArray[nameArray.length - 1 ] = `(${nameArray[nameArray.length - 1 ]})` + return nameArray.join(" "); + } + return (
-

- Milestones Grill (Toronto) +

+ {renderTitle()}

diff --git a/app/restaurant/[slug]/components/Images.tsx b/app/restaurant/[slug]/components/Images.tsx index bc51edf..b88426e 100644 --- a/app/restaurant/[slug]/components/Images.tsx +++ b/app/restaurant/[slug]/components/Images.tsx @@ -1,33 +1,15 @@ -export default function Images() { +export default function Images({images}: {images: string[]}) { return (
-

5 photos

+

{images.length} photo{images.length > 1 ? "s" : ""}

- ( + - - - - + ))}
); diff --git a/app/restaurant/[slug]/components/Menu.tsx b/app/restaurant/[slug]/components/Menu.tsx index 6920b77..965cb93 100644 --- a/app/restaurant/[slug]/components/Menu.tsx +++ b/app/restaurant/[slug]/components/Menu.tsx @@ -1,15 +1,24 @@ import MenuCard from "./MenuCard"; +import { Item } from "@prisma/client"; -export default function Menu() { +export default function Menu({ menu }: { menu: Item[] }) { return (

Menu

-
- -
+ {menu.length ? ( +
+ {menu.map((item) => { + return ; + })} +
+ ) : ( +
+

This restaurant does not have a menu

+
+ )}
); diff --git a/app/restaurant/[slug]/components/MenuCard.tsx b/app/restaurant/[slug]/components/MenuCard.tsx index 3692e83..0e974db 100644 --- a/app/restaurant/[slug]/components/MenuCard.tsx +++ b/app/restaurant/[slug]/components/MenuCard.tsx @@ -1,11 +1,11 @@ -export default function MenuCard() { +import { Item } from "@prisma/client"; + +export default function MenuCard({item}: {item: Item}) { return (
-

Surf and Turf

-

- A well done steak with lobster and rice -

-

$80.00

+

{item.name}

+

{item.description}

+

{item.price}

); } diff --git a/app/restaurant/[slug]/components/RestaurantNavBar.tsx b/app/restaurant/[slug]/components/RestaurantNavBar.tsx index 2914385..2e0f9ba 100644 --- a/app/restaurant/[slug]/components/RestaurantNavBar.tsx +++ b/app/restaurant/[slug]/components/RestaurantNavBar.tsx @@ -1,12 +1,12 @@ import Link from "next/link"; -export default function RestaurantNavBar() { +export default function RestaurantNavBar({slug}: {slug: string} ) { return ( diff --git a/app/restaurant/[slug]/components/Title.tsx b/app/restaurant/[slug]/components/Title.tsx index 4d39c52..d9c43dc 100644 --- a/app/restaurant/[slug]/components/Title.tsx +++ b/app/restaurant/[slug]/components/Title.tsx @@ -1,7 +1,7 @@ -export default function Title() { +export default function Title({name}: {name:string}) { return (
-

Milesstone Grill

+

{name}

); } diff --git a/app/restaurant/[slug]/layout.tsx b/app/restaurant/[slug]/layout.tsx index abcb3f2..2d33681 100644 --- a/app/restaurant/[slug]/layout.tsx +++ b/app/restaurant/[slug]/layout.tsx @@ -2,12 +2,14 @@ import Header from "./components/Header"; export default function RestorantLayout({ children, + params }: { children: React.ReactNode; + params: {slug: string} }) { return (
-
+
{children}
diff --git a/app/restaurant/[slug]/menu/page.tsx b/app/restaurant/[slug]/menu/page.tsx index da63f5d..b87cd25 100644 --- a/app/restaurant/[slug]/menu/page.tsx +++ b/app/restaurant/[slug]/menu/page.tsx @@ -1,12 +1,33 @@ +import { PrismaClient } from "@prisma/client"; import Header from "../components/Header"; import Menu from "../components/Menu"; import RestaurantNavBar from "../components/RestaurantNavBar"; -export default function RestaurantMenu() { +const prisma = new PrismaClient(); + +const fetchRestaurantMenu = async (slug: string) => { + const restaurant = await prisma.restaurant.findUnique({ + where: { + slug + }, + select: { + items: true + } + }) + + if (!restaurant) { + throw new Error + } + + return restaurant.items +} + +export default async function RestaurantMenu({params}: {params: {slug: string}}) { + const menu = await fetchRestaurantMenu(params.slug) return (
- - + +
); } diff --git a/app/restaurant/[slug]/page.tsx b/app/restaurant/[slug]/page.tsx index f984350..49f71db 100644 --- a/app/restaurant/[slug]/page.tsx +++ b/app/restaurant/[slug]/page.tsx @@ -47,11 +47,11 @@ export default async function RestaurantDetails({ return ( <>
- - + <RestaurantNavBar slug={restaurant.slug}/> + <Title name={restaurant.name}/> <Rating /> - <Description /> - <Images /> + <Description description={restaurant.description}/> + <Images images={restaurant.images}/> <Reviews /> </div> <div className="w-[27%] relative text-reg">