mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-02-16 10:42:08 +00:00
Implement edit beer post functionality. Register, edit and create beer post forms are now using the same layout found in components/ui/forms/BeerPostFormPageLayout. All forms are now extracted into their own components and are now found in components. Added redirectIfLoggedIn getServerSidesProp fn for login and register pages.
61 lines
1.8 KiB
TypeScript
61 lines
1.8 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/BeerPostFormPageLayout';
|
|
import { BiBeer } from 'react-icons/bi';
|
|
|
|
interface EditPageProps {
|
|
beerPost: 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}>
|
|
<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 } };
|
|
},
|
|
);
|