diff --git a/apps/journal/app/components/ClientDate.tsx b/apps/journal/app/components/ClientDate.tsx new file mode 100644 index 0000000..e2fcf06 --- /dev/null +++ b/apps/journal/app/components/ClientDate.tsx @@ -0,0 +1,15 @@ +import { useState, useEffect } from "react"; + +/** + * Renders a date only on the client to avoid SSR hydration mismatches. + * Server renders empty, client fills in with user's locale. + */ +export function ClientDate({ iso }: { iso: string }) { + const [formatted, setFormatted] = useState(new Date(iso).toLocaleDateString("en-US")); + + useEffect(() => { + setFormatted(new Date(iso).toLocaleDateString()); + }, [iso]); + + return ; +} diff --git a/apps/journal/app/routes/routes.$id.tsx b/apps/journal/app/routes/routes.$id.tsx index 378d747..6e90df0 100644 --- a/apps/journal/app/routes/routes.$id.tsx +++ b/apps/journal/app/routes/routes.$id.tsx @@ -3,6 +3,7 @@ import { data, redirect } from "react-router"; import type { Route } from "./+types/routes.$id"; import { getSessionUser } from "~/lib/auth.server"; import { getRouteWithVersions, deleteRoute, updateRoute } from "~/lib/routes.server"; +import { ClientDate } from "~/components/ClientDate"; export async function loader({ params, request }: Route.LoaderArgs) { @@ -156,7 +157,7 @@ export default function RouteDetailPage({ loaderData }: Route.ComponentProps) {