From 5bbef1866b987545802f058c07631e6be419c9b2 Mon Sep 17 00:00:00 2001 From: Patryk Omiotek <patryk.omiotek@gmail.com> Date: Thu, 1 Feb 2024 20:11:44 +0100 Subject: [PATCH] feat: offer page --- .../(public)/job-offers/[publicId]/page.tsx | 39 +++++++++++++++++++ .../src/app/(public)/job-offers/page.tsx | 9 ++++- apps/jobboard/src/services/offers.ts | 5 +++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 apps/jobboard/src/app/(public)/job-offers/[publicId]/page.tsx diff --git a/apps/jobboard/src/app/(public)/job-offers/[publicId]/page.tsx b/apps/jobboard/src/app/(public)/job-offers/[publicId]/page.tsx new file mode 100644 index 0000000..87305b1 --- /dev/null +++ b/apps/jobboard/src/app/(public)/job-offers/[publicId]/page.tsx @@ -0,0 +1,39 @@ +import { Metadata } from 'next'; + +import { Header } from '@jobboard/common-ui'; + +import Link from 'next/link'; +import { fetchOffer } from '../../../../services/offers'; +import { notFound } from 'next/navigation'; + +// export const metadata: Metadata = { +// title: 'Job Offers', +// }; + +type Params = { + params: { + publicId: string; + }; +}; + +export default async function JobOfferPage({ params }: Params) { + console.log(params.publicId); + const offer = await fetchOffer(params.publicId); + console.log(offer); + + if (!offer) { + notFound(); + } + + return ( + <div> + <Header>Job Offer</Header> + <Link href="/job-offers">Back to list</Link> + <div key={offer.public_id} className="my-4"> + <h2 className="font-bold text-2xl">{offer.title}</h2> + <p>{offer.description}</p> + <p>Salary: {offer.salary} PLN</p> + </div> + </div> + ); +} diff --git a/apps/jobboard/src/app/(public)/job-offers/page.tsx b/apps/jobboard/src/app/(public)/job-offers/page.tsx index c8ad0dc..abc3cf3 100644 --- a/apps/jobboard/src/app/(public)/job-offers/page.tsx +++ b/apps/jobboard/src/app/(public)/job-offers/page.tsx @@ -18,7 +18,14 @@ export default async function JobOffersPage() { <Link href="/job-offers/create">Create offer</Link> {jobOffers.map((offer) => ( <div key={offer.public_id} className="my-4"> - <h2 className="font-bold text-2xl">{offer.title}</h2> + <h2 className="font-bold text-2xl"> + <Link + href={`/job-offers/${offer.public_id}`} + className="text-blue-600" + > + {offer.title} + </Link> + </h2> <p>{offer.description}</p> <p>Salary: {offer.salary} PLN</p> </div> diff --git a/apps/jobboard/src/services/offers.ts b/apps/jobboard/src/services/offers.ts index e1365e0..1ecdefe 100644 --- a/apps/jobboard/src/services/offers.ts +++ b/apps/jobboard/src/services/offers.ts @@ -1,3 +1,4 @@ +import { JobOffer } from '@prisma/client'; import db from '@jobboard/prisma-client'; export const fetchJobOffers = async () => { @@ -10,3 +11,7 @@ export const fetchJobOffers = async () => { }, }); }; + +export const fetchOffer = async (publicId: JobOffer['public_id']) => { + return db.jobOffer.findUnique({ where: { public_id: publicId } }); +};