diff --git a/app/[leaflet_id]/page.tsx b/app/[leaflet_id]/page.tsx index 81376965..44265a4e 100644 --- a/app/[leaflet_id]/page.tsx +++ b/app/[leaflet_id]/page.tsx @@ -13,6 +13,7 @@ import { getPollData } from "actions/pollActions"; import { supabaseServerClient } from "supabase/serverClient"; import { get_leaflet_data } from "app/api/rpc/[command]/get_leaflet_data"; import { NotFoundLayout } from "components/PageLayouts/NotFoundLayout"; +import { getPublicationMetadataFromLeafletData } from "src/utils/getPublicationMetadataFromLeafletData"; export const preferredRegion = ["sfo1"]; export const dynamic = "force-dynamic"; @@ -70,11 +71,7 @@ export async function generateMetadata(props: Props): Promise { ); let rootEntity = res.data?.root_entity; if (!rootEntity || !res.data) return { title: "Leaflet not found" }; - let publication_data = - res.data?.leaflets_in_publications?.[0] || - res.data?.permission_token_rights[0].entity_sets?.permission_tokens?.find( - (p) => p.leaflets_in_publications.length, - )?.leaflets_in_publications?.[0]; + let publication_data = getPublicationMetadataFromLeafletData(res.data); if (publication_data) { return { title: publication_data.title || "Untitled", diff --git a/app/lish/[did]/[publication]/[rkey]/PublishedPageBlock.tsx b/app/lish/[did]/[publication]/[rkey]/PublishedPageBlock.tsx index aad2a8d5..33c2c54d 100644 --- a/app/lish/[did]/[publication]/[rkey]/PublishedPageBlock.tsx +++ b/app/lish/[did]/[publication]/[rkey]/PublishedPageBlock.tsx @@ -151,10 +151,9 @@ export function PagePreview(props: { let previewRef = useRef(null); let { rootEntity } = useReplicache(); let data = useContext(PostPageContext); - let theme = data?.documents_in_publications[0]?.publications - ?.record as PubLeafletPublication.Record; + let theme = data?.theme; let pageWidth = `var(--page-width-unitless)`; - let cardBorderHidden = !theme.theme?.showPageBackground; + let cardBorderHidden = !theme?.showPageBackground; return (
p.leaflets_in_publications.length, - )?.leaflets_in_publications?.[0]; - - // If not found, check for standalone documents - let standaloneDoc = - data?.leaflets_to_documents?.[0] || - data?.permission_token_rights[0].entity_sets?.permission_tokens.find( - (p) => p.leaflets_to_documents.length, - )?.leaflets_to_documents?.[0]; - if (!pubData && standaloneDoc) { - // Transform standalone document data to match the expected format - pubData = { - ...standaloneDoc, - publications: null, // No publication for standalone docs - doc: standaloneDoc.document, - } as any; - } + let pubData = getPublicationMetadataFromLeafletData(data); return { data: pubData || null, diff --git a/src/utils/getPublicationMetadataFromLeafletData.ts b/src/utils/getPublicationMetadataFromLeafletData.ts new file mode 100644 index 00000000..76cff88c --- /dev/null +++ b/src/utils/getPublicationMetadataFromLeafletData.ts @@ -0,0 +1,50 @@ +import { GetLeafletDataReturnType } from "app/api/rpc/[command]/get_leaflet_data"; +import { Json } from "supabase/database.types"; + +export function getPublicationMetadataFromLeafletData( + data?: GetLeafletDataReturnType["result"]["data"], +) { + if (!data) return null; + + let pubData: + | { + description: string; + title: string; + leaflet: string; + doc: string | null; + publications: { + identity_did: string; + name: string; + indexed_at: string; + record: Json | null; + uri: string; + } | null; + documents: { + data: Json; + indexed_at: string; + uri: string; + } | null; + } + | undefined + | null = + data?.leaflets_in_publications?.[0] || + data?.permission_token_rights[0].entity_sets?.permission_tokens?.find( + (p) => p.leaflets_in_publications.length, + )?.leaflets_in_publications?.[0]; + + // If not found, check for standalone documents + let standaloneDoc = + data?.leaflets_to_documents?.[0] || + data?.permission_token_rights[0].entity_sets?.permission_tokens.find( + (p) => p.leaflets_to_documents.length, + )?.leaflets_to_documents?.[0]; + if (!pubData && standaloneDoc) { + // Transform standalone document data to match the expected format + pubData = { + ...standaloneDoc, + publications: null, // No publication for standalone docs + doc: standaloneDoc.document, + }; + } + return pubData; +}