mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-02-16 18:52:06 +00:00
67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
import { NextPage } from 'next';
|
|
import Head from 'next/head';
|
|
import React from 'react';
|
|
|
|
import Layout from '@/components/ui/Layout';
|
|
import withPageAuthRequired from '@/getServerSideProps/withPageAuthRequired';
|
|
import getBeerPostById from '@/services/BeerPost/getBeerPostById';
|
|
import beerPostQueryResult from '@/services/BeerPost/schema/BeerPostQueryResult';
|
|
import EditBeerPostForm from '@/components/EditBeerPostForm';
|
|
import FormPageLayout from '@/components/ui/forms/FormPageLayout';
|
|
import { BiBeer } from 'react-icons/bi';
|
|
import { z } from 'zod';
|
|
|
|
interface EditPageProps {
|
|
beerPost: z.infer<typeof beerPostQueryResult>;
|
|
}
|
|
|
|
const EditPage: NextPage<EditPageProps> = ({ beerPost }) => {
|
|
const pageTitle = `Edit "${beerPost.name}"`;
|
|
|
|
return (
|
|
<Layout>
|
|
<Head>
|
|
<title>{pageTitle}</title>
|
|
<meta name="description" content={pageTitle} />
|
|
</Head>
|
|
|
|
<FormPageLayout
|
|
headingText={pageTitle}
|
|
headingIcon={BiBeer}
|
|
backLink={`/beers/${beerPost.id}`}
|
|
backLinkText={`Back to "${beerPost.name}"`}
|
|
>
|
|
<EditBeerPostForm
|
|
previousValues={{
|
|
name: beerPost.name,
|
|
abv: beerPost.abv,
|
|
ibu: beerPost.ibu,
|
|
description: beerPost.description,
|
|
id: beerPost.id,
|
|
}}
|
|
/>
|
|
</FormPageLayout>
|
|
</Layout>
|
|
);
|
|
};
|
|
|
|
export default EditPage;
|
|
|
|
export const getServerSideProps = withPageAuthRequired<EditPageProps>(
|
|
async (context, session) => {
|
|
const beerPostId = context.params?.id as string;
|
|
const beerPost = await getBeerPostById(beerPostId);
|
|
const { id: userId } = session;
|
|
|
|
if (!beerPost) {
|
|
return { notFound: true };
|
|
}
|
|
|
|
const isBeerPostOwner = beerPost.postedBy.id === userId;
|
|
|
|
return isBeerPostOwner
|
|
? { props: { beerPost: JSON.parse(JSON.stringify(beerPost)) } }
|
|
: { redirect: { destination: `/beers/${beerPostId}`, permanent: false } };
|
|
},
|
|
);
|