From 63a94f5937ea7b44881c6d929242be2ca564e286 Mon Sep 17 00:00:00 2001 From: Arjun Komath Date: Sat, 5 Oct 2024 21:13:45 +1000 Subject: [PATCH 1/4] Move email notification to post settings --- .../components/forms/post-form.component.tsx | 33 ++++++++++++------- apps/web/pages/api/posts/index.ts | 2 ++ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/apps/web/components/forms/post-form.component.tsx b/apps/web/components/forms/post-form.component.tsx index 5101f61..41ad0b4 100644 --- a/apps/web/components/forms/post-form.component.tsx +++ b/apps/web/components/forms/post-form.component.tsx @@ -50,7 +50,8 @@ export const NewPostSchema = object().shape({ images_folder: string(), publish_at: string().optional().nullable(), publication_date: string().optional().nullable(), - allow_reactions: boolean().optional().nullable(), + allow_reactions: boolean(), + email_notified: boolean(), notes: string().optional().nullable(), }); @@ -80,18 +81,13 @@ export default function PostFormComponent({ const [promptProofRead, setPromptProofRead] = useState(false); const [customPublishDate, setCustomPublishDate] = useState(false); - // For email notifications - const [emailNotified, setEmailNotified] = useState(false); // Internal notes const [editNotes, setEditNotes] = useState(false); const publishingOptions = useMemo( () => [ { - name: - settings?.email_notifications && !emailNotified - ? "Publish & email" - : "Publish", + name: "Publish", description: "This post will be published and can be viewed on the page.", value: PostStatus.published, @@ -108,7 +104,7 @@ export default function PostFormComponent({ value: PostStatus.draft, }, ], - [settings?.email_notifications, emailNotified] + [] ); const PostStatusToAction = useMemo( @@ -131,6 +127,7 @@ export default function PostFormComponent({ publish_at: null, publication_date: null, allow_reactions: true, + email_notified: false, notes: "", }, validationSchema: NewPostSchema, @@ -144,7 +141,6 @@ export default function PostFormComponent({ for (let key in post) { formik.setFieldValue(key, post[key]); } - setEmailNotified(post.email_notified ?? false); } else { formik.setFieldValue("page_id", pageId); formik.setFieldValue("images_folder", v4()); @@ -216,7 +212,7 @@ export default function PostFormComponent({ Add a label{" "}
- + @@ -537,7 +533,22 @@ export default function PostFormComponent({

-
+ {settings?.email_notifications && !(post?.email_notified ?? false) ? ( +
+
+ { + formik.setFieldValue("email_notified", !v); + }} + /> +
+
+ ) : null} + +
{ publish_at, notes, allow_reactions, + email_notified, publication_date, } = req.body; @@ -47,6 +48,7 @@ const createNewPost = async (req: NextApiRequest, res: NextApiResponse) => { (status === PostStatus.published ? new Date().toISOString() : null), notes: notes ?? "", allow_reactions: allow_reactions ?? false, + email_notified: email_notified ?? false, }); return res.status(201).json({ post }); From 9fba4f1307399379d00b7255d9c63ff0db35ac7e Mon Sep 17 00:00:00 2001 From: Arjun Komath Date: Sun, 6 Oct 2024 09:19:41 +1100 Subject: [PATCH 2/4] Disable ISR --- apps/page/pages/_sites/[site]/index.tsx | 19 +++++++++---------- apps/page/pages/_sites/[site]/plain.tsx | 7 +++++-- apps/page/pages/api/revalidate.ts | 1 + 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/apps/page/pages/_sites/[site]/index.tsx b/apps/page/pages/_sites/[site]/index.tsx index bd262a1..6c1f827 100644 --- a/apps/page/pages/_sites/[site]/index.tsx +++ b/apps/page/pages/_sites/[site]/index.tsx @@ -1,3 +1,5 @@ +import { IPage, IPageSettings, IPost } from "@changes-page/supabase/types/page"; +import { Timeline } from "@changes-page/ui"; import classNames from "classnames"; import { useTheme } from "next-themes"; import { useCallback, useEffect, useMemo, useState } from "react"; @@ -6,8 +8,6 @@ import PageHeader from "../../../components/page-header"; import Post from "../../../components/post"; import SeoTags from "../../../components/seo-tags"; import SubscribePrompt from "../../../components/subscribe-prompt"; -import { Timeline } from "@changes-page/ui"; -import { IPage, IPageSettings, IPost } from "@changes-page/supabase/types/page"; import { BLACKLISTED_SLUGS, fetchPosts, @@ -156,14 +156,14 @@ export default function Index({ ); } -export async function getStaticPaths() { - return { - paths: [], - fallback: "blocking", - }; -} +// export async function getStaticPaths() { +// return { +// paths: [], +// fallback: "blocking", +// }; +// } -export async function getStaticProps({ +export async function getServerSideProps({ params: { site }, }: { params: { site: string }; @@ -210,6 +210,5 @@ export async function getStaticProps({ postsCount, settings, }, - revalidate: 5, }; } diff --git a/apps/page/pages/_sites/[site]/plain.tsx b/apps/page/pages/_sites/[site]/plain.tsx index a0a2001..250cb01 100644 --- a/apps/page/pages/_sites/[site]/plain.tsx +++ b/apps/page/pages/_sites/[site]/plain.tsx @@ -5,6 +5,7 @@ import { PostTypeToLabel, } from "@changes-page/supabase/types/page"; import { DateTime } from "@changes-page/utils"; +import { GetServerSidePropsContext } from "next"; import { useRouter } from "next/router"; import { useEffect } from "react"; import ReactMarkdown from "react-markdown"; @@ -82,10 +83,12 @@ export default function Index({ ); } -export async function getServerSideProps(context: any) { +export async function getServerSideProps(context: GetServerSidePropsContext) { const hostname = context?.req?.headers?.host; const { limit } = context?.query; - const { domain, page: url_slug } = translateHostToPageIdentifier(hostname); + const { domain, page: url_slug } = translateHostToPageIdentifier( + hostname ?? "" + ); const site = url_slug || domain; console.log("handle site ->", site); diff --git a/apps/page/pages/api/revalidate.ts b/apps/page/pages/api/revalidate.ts index 2e49cd3..c6c0e7e 100644 --- a/apps/page/pages/api/revalidate.ts +++ b/apps/page/pages/api/revalidate.ts @@ -9,6 +9,7 @@ export default async function handler( req: NextApiRequest, res: NextApiResponse<{ revalidated: boolean } | { message: string } | string> ) { + return res.json({ revalidated: true }); const { secret } = req.query; const { path } = req.body; From 4d7019295c8d39d0bba8a190fb01c3d198f66a35 Mon Sep 17 00:00:00 2001 From: Arjun Komath Date: Sun, 6 Oct 2024 09:21:20 +1100 Subject: [PATCH 3/4] Fix build --- apps/page/pages/_sites/[site]/plain.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/page/pages/_sites/[site]/plain.tsx b/apps/page/pages/_sites/[site]/plain.tsx index 250cb01..356164c 100644 --- a/apps/page/pages/_sites/[site]/plain.tsx +++ b/apps/page/pages/_sites/[site]/plain.tsx @@ -99,7 +99,7 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { const { page, settings } = await fetchRenderData(site); const { posts, postsCount } = await fetchPosts(String(page?.id), { - limit, + limit: Number(limit ?? 25), pinned_post_id: settings?.pinned_post_id, }); From 9b7fd08a00e3ac7f56e4b45e4103017f5524af6b Mon Sep 17 00:00:00 2001 From: Arjun Komath Date: Sun, 6 Oct 2024 09:24:01 +1100 Subject: [PATCH 4/4] Add 404 status to 404 page --- apps/web/pages/404.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/web/pages/404.tsx b/apps/web/pages/404.tsx index 0c4930c..b2af1c9 100644 --- a/apps/web/pages/404.tsx +++ b/apps/web/pages/404.tsx @@ -1,7 +1,7 @@ import Link from "next/link"; import { ROUTES } from "../data/routes.data"; -export default function FourOhFour() { +function FourOhFour() { return (
@@ -39,3 +39,9 @@ export default function FourOhFour() {
); } + +FourOhFour.getInitialProps = () => { + return { statusCode: 404 }; +}; + +export default FourOhFour;