From 0c06498c9472192cac350a59ed3ba569fb7c9670 Mon Sep 17 00:00:00 2001 From: Julian Jark Date: Thu, 22 Jun 2023 23:57:32 +0200 Subject: [PATCH] :sparkles: preview mode --- .../app/components/preview-mode.tsx | 3 - .../app/is-preview-mode.server.ts | 9 -- apps/nye-julianjark.no/app/root.tsx | 27 +++++- .../app/routes/$notionPage/route.tsx | 7 +- .../app/routes/_index/route.tsx | 4 +- .../app/routes/api.preview-mode.tsx | 90 +++++++++++++++++++ .../app/routes/i-dag-l\303\246rte-jeg.tsx" | 4 +- .../app/routes/prosjekter.tsx | 4 +- 8 files changed, 123 insertions(+), 25 deletions(-) delete mode 100644 apps/nye-julianjark.no/app/components/preview-mode.tsx delete mode 100644 apps/nye-julianjark.no/app/is-preview-mode.server.ts create mode 100644 apps/nye-julianjark.no/app/routes/api.preview-mode.tsx diff --git a/apps/nye-julianjark.no/app/components/preview-mode.tsx b/apps/nye-julianjark.no/app/components/preview-mode.tsx deleted file mode 100644 index 6049b92..0000000 --- a/apps/nye-julianjark.no/app/components/preview-mode.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export function PreviewMode() { - return null; -} diff --git a/apps/nye-julianjark.no/app/is-preview-mode.server.ts b/apps/nye-julianjark.no/app/is-preview-mode.server.ts deleted file mode 100644 index 3f7c99e..0000000 --- a/apps/nye-julianjark.no/app/is-preview-mode.server.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { config } from "~/config.server"; - -export function isPreviewMode(fromRequest: Request) { - return ( - config.nodeEnv === "development" || - new URL(fromRequest.url).searchParams.get("preview") === - config.previewSecret - ); -} diff --git a/apps/nye-julianjark.no/app/root.tsx b/apps/nye-julianjark.no/app/root.tsx index 2d08550..9d25fc6 100644 --- a/apps/nye-julianjark.no/app/root.tsx +++ b/apps/nye-julianjark.no/app/root.tsx @@ -1,5 +1,6 @@ import { cssBundleHref } from "@remix-run/css-bundle"; -import { type LinksFunction } from "@remix-run/node"; +import type { LoaderArgs } from "@remix-run/node"; +import { json, type LinksFunction } from "@remix-run/node"; import { Link, Links, @@ -19,7 +20,12 @@ import backSvg from "~/assets/back.svg"; import julianFace from "~/assets/julian-face.svg"; import { ClearCacheButton } from "./routes/api.clear-cache"; import { classes } from "~/routes/$notionPage/notion-driven-page"; -import { classNames } from "./misc"; +import { classNames } from "~/misc"; +import { + getPreviewMode, + PreviewMode, + serializePreviewModeToCookie, +} from "~/routes/api.preview-mode"; export const links: LinksFunction = () => [ ...(cssBundleHref ? [{ rel: "stylesheet", href: cssBundleHref }] : []), @@ -38,6 +44,22 @@ export const links: LinksFunction = () => [ }, ]; +export const loader = async ({ request }: LoaderArgs) => { + const previewMode = await getPreviewMode(request); + const headers = previewMode + ? { "Set-Cookie": await serializePreviewModeToCookie(previewMode) } + : { "Set-Cookie": "" }; + + return json( + { + previewMode, + }, + { + headers, + } + ); +}; + // TODO: This might belong in the tailwind config export const sharedClasses /*tw*/ = { container: "pl-[7.5vw] pr-[7.5vw]", @@ -102,6 +124,7 @@ function Footer() { * Had this been a bigger site, with more people involved I could put the content in CMS/Notion instead * */}