import getBreweryPostById from '@/services/BreweryPost/getBreweryPostById'; import BreweryPostQueryResult from '@/services/BreweryPost/types/BreweryPostQueryResult'; import { GetServerSideProps, NextPage } from 'next'; import 'mapbox-gl/dist/mapbox-gl.css'; import MapGL, { Marker } from 'react-map-gl'; import { z } from 'zod'; import { FC, useContext } from 'react'; import Head from 'next/head'; import Image from 'next/image'; import 'react-responsive-carousel/lib/styles/carousel.min.css'; // requires a loader import { Carousel } from 'react-responsive-carousel'; import useGetBreweryPostLikeCount from '@/hooks/useGetBreweryPostLikeCount'; import useTimeDistance from '@/hooks/useTimeDistance'; import UserContext from '@/contexts/userContext'; import Link from 'next/link'; import { FaRegEdit } from 'react-icons/fa'; import format from 'date-fns/format'; import BreweryPostLikeButton from '@/components/BreweryIndex/BreweryPostLikeButton'; interface BreweryPageProps { breweryPost: z.infer; } interface BreweryInfoHeaderProps { breweryPost: z.infer; } const BreweryInfoHeader: FC = ({ breweryPost }) => { const createdAt = new Date(breweryPost.createdAt); const timeDistance = useTimeDistance(createdAt); const { user } = useContext(UserContext); const idMatches = user && breweryPost.postedBy.id === user.id; const isPostOwner = !!(user && idMatches); const { likeCount, mutate } = useGetBreweryPostLikeCount(breweryPost.id); return (

{breweryPost.name}

Located in {` ${breweryPost.city}, ${ breweryPost.stateOrProvince || breweryPost.country }`}

{' posted by '} {`${breweryPost.postedBy.username} `} {timeDistance && ( {`${timeDistance} ago`} )}

{isPostOwner && (
)}

{breweryPost.description}

{(!!likeCount || likeCount === 0) && ( Liked by {likeCount} user{likeCount !== 1 && 's'} )}
{user && ( )}
); }; interface BreweryMapProps { latitude: number; longitude: number; } const BreweryMap: FC = ({ latitude, longitude }) => { return ( ); }; const BreweryByIdPage: NextPage = ({ breweryPost }) => { const [longitude, latitude] = breweryPost.coordinates; return ( <> {breweryPost.name} <> {breweryPost.breweryImages.length ? breweryPost.breweryImages.map((image, index) => (
{image.alt}
)) : Array.from({ length: 1 }).map((_, i) => (
))}
); }; export const getServerSideProps: GetServerSideProps = async ( context, ) => { const breweryPost = await getBreweryPostById(context.params!.id! as string); return !breweryPost ? { notFound: true } : { props: { breweryPost: JSON.parse(JSON.stringify(breweryPost)) } }; }; export default BreweryByIdPage;