1
Fork 0
mirror of https://github.com/Steffo99/festa.git synced 2024-10-16 15:07:27 +00:00
festa/pages/events/[slug].tsx

97 lines
3.8 KiB
TypeScript
Raw Normal View History

2022-06-03 02:54:09 +00:00
import { Event, User } from "@prisma/client";
2022-06-03 01:55:02 +00:00
import { NextPageContext } from "next";
import { useTranslation } from "next-i18next";
import { serverSideTranslations } from "next-i18next/serverSideTranslations";
2022-06-08 02:52:41 +00:00
import { default as Head } from "next/head";
import { ChangeEvent, useCallback, useState } from "react";
2022-06-04 03:13:19 +00:00
import { ToolBar } from "../../components/tools/ToolBar";
import { EditableMarkdown } from "../../components/editable/EditableMarkdown";
import { EditableText } from "../../components/editable/EditableText";
import { ToolToggleEditing } from "../../components/tools/ToolToggleEditing";
2022-06-08 16:00:39 +00:00
import { EditingContext } from "../../components/editable/EditingContext";
2022-06-03 01:55:02 +00:00
import { database } from "../../utils/prismaClient";
2022-06-08 17:14:00 +00:00
import { EditableFile } from "../../components/editable/EditableFile";
2022-06-06 00:10:04 +00:00
import { ViewEvent } from "../../components/view/ViewEvent";
import { ToolToggleVisible } from "../../components/tools/ToolToggleVisible";
2022-06-07 11:41:26 +00:00
import { EditableDateRange } from "../../components/editable/EditableDateRange";
import { WorkInProgress } from "../../components/WorkInProgress";
2022-06-08 17:14:00 +00:00
import { FormDateRange } from "../../components/form/FormDateRange";
import { Postcard } from "../../components/postcard/Postcard";
import { useFileState } from "../../hooks/useFileState";
2022-06-03 01:55:02 +00:00
export async function getServerSideProps(context: NextPageContext) {
const slug = context.query.slug as string
2022-06-08 17:14:00 +00:00
if (typeof slug === "object") {
return { notFound: true }
2022-06-03 01:55:02 +00:00
}
2022-06-03 02:54:09 +00:00
const event = await database.event.findUnique({
2022-06-08 17:14:00 +00:00
where: { slug },
include: { creator: true }
2022-06-03 02:54:09 +00:00
})
2022-06-08 17:14:00 +00:00
if (!event) {
return { notFound: true }
2022-06-03 01:55:02 +00:00
}
return {
props: {
event,
...(await serverSideTranslations(context.locale ?? "it-IT", ["common"]))
}
}
}
type PageEventDetailProps = {
2022-06-08 17:14:00 +00:00
event: Event & { creator: User }
2022-06-03 01:55:02 +00:00
}
2022-06-08 17:14:00 +00:00
export default function PageEventDetail({ event }: PageEventDetailProps) {
const { t } = useTranslation()
2022-06-04 03:13:19 +00:00
const editState = useState<boolean>(false)
2022-06-06 00:10:04 +00:00
const [title, setTitle] = useState<string>(event.name)
2022-06-05 21:03:48 +00:00
const [description, setDescription] = useState<string>(event.description)
2022-06-08 17:14:00 +00:00
const postcard = useFileState()
2022-06-08 15:31:34 +00:00
const [startingAt, setStartingAt] = useState<string>(event.startingAt?.toISOString() ?? "")
const [endingAt, setEndingAt] = useState<string>(event.endingAt?.toISOString() ?? "")
2022-06-05 21:03:48 +00:00
2022-06-04 03:13:19 +00:00
return <>
<Head>
<title key="title">{event.name} - {t("siteTitle")}</title>
</Head>
2022-06-08 17:14:00 +00:00
<WorkInProgress />
<Postcard src={postcard.file ? URL.createObjectURL(postcard.file) : event.postcard ?? undefined} />
2022-06-04 03:13:19 +00:00
<EditingContext.Provider value={editState}>
<ToolBar vertical="vadapt" horizontal="right">
2022-06-08 17:14:00 +00:00
<ToolToggleEditing />
<ToolToggleVisible />
2022-06-04 03:13:19 +00:00
</ToolBar>
2022-06-06 00:10:04 +00:00
<ViewEvent
2022-06-04 03:13:19 +00:00
title={
2022-06-08 17:14:00 +00:00
<EditableText
2022-06-06 00:10:04 +00:00
value={title}
onChange={(e: ChangeEvent<HTMLInputElement>) => setTitle(e.target.value)}
placeholder={t("eventDetailsTitlePlaceholder")}
2022-06-04 03:13:19 +00:00
/>
2022-06-06 00:10:04 +00:00
}
postcard={
2022-06-08 17:14:00 +00:00
<EditableFile
value={postcard.value}
onChange={postcard.onChange}
2022-06-06 00:10:04 +00:00
placeholder={t("eventDetailsPostcardPlaceholder")}
2022-06-05 21:03:48 +00:00
/>
2022-06-06 00:10:04 +00:00
}
description={<>
2022-06-08 17:14:00 +00:00
<EditableMarkdown
value={description}
2022-06-06 00:10:04 +00:00
onChange={(e: ChangeEvent<HTMLTextAreaElement>) => setDescription(e.target.value)}
placeholder={t("eventDetailsDescriptionPlaceholder")}
/>
</>}
2022-06-08 17:14:00 +00:00
daterange={<></>}
2022-06-04 03:13:19 +00:00
/>
</EditingContext.Provider>
</>
2022-06-03 01:55:02 +00:00
}