From c29ddc1c0e7f02bd2b2b63e93c3bd4bf306f0b44 Mon Sep 17 00:00:00 2001 From: celine Date: Thu, 15 Jan 2026 16:51:48 -0500 Subject: [PATCH] wire up updating pubish date on published post --- app/[leaflet_id]/actions/PublishButton.tsx | 12 ++++---- components/Pages/Backdater.tsx | 35 ++++++++++------------ components/Pages/PublicationMetadata.tsx | 4 ++- 3 files changed, 24 insertions(+), 27 deletions(-) diff --git a/app/[leaflet_id]/actions/PublishButton.tsx b/app/[leaflet_id]/actions/PublishButton.tsx index ee739b60..72e2c76a 100644 --- a/app/[leaflet_id]/actions/PublishButton.tsx +++ b/app/[leaflet_id]/actions/PublishButton.tsx @@ -24,7 +24,7 @@ import { useToaster } from "components/Toast"; import { DotLoader } from "components/utils/DotLoader"; import { PubLeafletPublication } from "lexicons/api"; import { useParams, useRouter, useSearchParams } from "next/navigation"; -import { useState, useMemo } from "react"; +import { useState, useMemo, useEffect } from "react"; import { useIsMobile } from "src/hooks/isMobile"; import { useReplicache, useEntity } from "src/replicache"; import { useSubscribe } from "src/replicache/useSubscribe"; @@ -40,6 +40,7 @@ import { BlueskyLogin } from "app/login/LoginForm"; import { moveLeafletToPublication } from "actions/publications/moveLeafletToPublication"; import { AddTiny } from "components/Icons/AddTiny"; import { OAuthErrorMessage, isOAuthSessionError } from "components/OAuthError"; +import { useLocalPublishedAt } from "components/Pages/Backdater"; export const PublishButton = (props: { entityID: string }) => { let { data: pub } = useLeafletPublicationData(); @@ -95,11 +96,10 @@ const UpdateButton = () => { tx.get("publication_cover_image"), ); - // Get localPublishedAt from Replicache state - let localPublishedAt = useSubscribe(rep, (tx) => - tx.get("publication_local_published_at"), + // Get local published at from Replicache (session-only state, not persisted to DB) + let publishedAt = useLocalPublishedAt((s) => + pub?.doc ? s[pub?.doc] : undefined, ); - console.log("local: " + localPublishedAt); return ( { description: currentDescription, tags: currentTags, cover_image: coverImage, - ...(localPublishedAt && { publishedAt: localPublishedAt }), + publishedAt: publishedAt?.toISOString(), }); setIsLoading(false); mutate(); diff --git a/components/Pages/Backdater.tsx b/components/Pages/Backdater.tsx index e630efd6..261f153d 100644 --- a/components/Pages/Backdater.tsx +++ b/components/Pages/Backdater.tsx @@ -1,15 +1,21 @@ "use client"; import { DatePicker, TimePicker } from "components/DatePicker"; -import { useState } from "react"; +import { useMemo, useState } from "react"; import { timeAgo } from "src/utils/timeAgo"; import { Popover } from "components/Popover"; import { Separator } from "react-aria-components"; import { useReplicache } from "src/replicache"; +import { create } from "zustand"; -export const Backdater = (props: { publishedAt: string }) => { +export const useLocalPublishedAt = create<{ [uri: string]: Date }>(() => ({})); +export const Backdater = (props: { publishedAt: string; docURI: string }) => { let { rep } = useReplicache(); - let [localPublishedAt, setLocalPublishedAt] = useState( - new Date(props.publishedAt), + let localPublishedAtDate = useLocalPublishedAt((s) => + s[props.docURI] ? s[props.docURI] : null, + ); + let localPublishedAt = useMemo( + () => localPublishedAtDate || new Date(props.publishedAt), + [localPublishedAtDate, props.publishedAt], ); let [timeValue, setTimeValue] = useState( @@ -27,16 +33,10 @@ export const Backdater = (props: { publishedAt: string }) => { let currentDate = new Date(); if (newDate > currentDate) { - setLocalPublishedAt(currentDate); + useLocalPublishedAt.setState({ [props.docURI]: currentDate }); setTimeValue(currentTime); - await rep?.mutate.updatePublicationDraft({ - localPublishedAt: currentDate.toISOString(), - }); } else { - setLocalPublishedAt(newDate); - await rep?.mutate.updatePublicationDraft({ - localPublishedAt: newDate.toISOString(), - }); + useLocalPublishedAt.setState({ [props.docURI]: newDate }); } }; @@ -51,16 +51,11 @@ export const Backdater = (props: { publishedAt: string }) => { let currentDate = new Date(); if (newDate > currentDate) { - setLocalPublishedAt(currentDate); + useLocalPublishedAt.setState({ [props.docURI]: currentDate }); + setTimeValue(currentTime); - await rep?.mutate.updatePublicationDraft({ - localPublishedAt: currentDate.toISOString(), - }); } else { - setLocalPublishedAt(newDate); - await rep?.mutate.updatePublicationDraft({ - localPublishedAt: newDate.toISOString(), - }); + useLocalPublishedAt.setState({ [props.docURI]: newDate }); } }; diff --git a/components/Pages/PublicationMetadata.tsx b/components/Pages/PublicationMetadata.tsx index 3502b371..b57db72e 100644 --- a/components/Pages/PublicationMetadata.tsx +++ b/components/Pages/PublicationMetadata.tsx @@ -99,7 +99,9 @@ export const PublicationMetadata = () => {

Published{" "} - {publishedAt && } + {publishedAt && ( + + )}