a tool for shared writing and social publishing

improve useLeafletPublicationData typing

+19 -28
+2 -3
app/[leaflet_id]/Actions.tsx
··· 43 43 44 44 export const PublishButton = () => { 45 45 let [isLoading, setIsLoading] = useState(false); 46 - let { data, mutate } = useLeafletPublicationData(); 46 + let { data: pub, mutate } = useLeafletPublicationData(); 47 47 let identity = useIdentityData(); 48 48 let { permission_token, rootEntity } = useReplicache(); 49 49 let rootPage = useEntity(rootEntity, "root/page")[0]; 50 50 let blocks = useBlocks(rootPage?.data.value); 51 51 let toaster = useToaster(); 52 - let pub = data[0]; 53 52 return ( 54 53 <ActionButton 55 54 primary 56 55 icon={<PublishSmall className="shrink-0" />} 57 - label={isLoading ? <DotLoader /> : pub.doc ? "Update!" : "Publish!"} 56 + label={isLoading ? <DotLoader /> : pub?.doc ? "Update!" : "Publish!"} 58 57 onClick={async () => { 59 58 if (!pub || !pub.publications) return; 60 59 setIsLoading(true);
+1 -2
app/[leaflet_id]/Footer.tsx
··· 17 17 let focusedBlock = useUIState((s) => s.focusedEntity); 18 18 let entity_set = useEntitySetContext(); 19 19 let { identity } = useIdentityData(); 20 - let { data: publicationData } = useLeafletPublicationData(); 21 - let pub = publicationData?.[0]; 20 + let { data: pub } = useLeafletPublicationData(); 22 21 23 22 return ( 24 23 <Media mobile className="mobileFooter w-full z-10 touch-none -mt-4 ">
+1 -2
app/[leaflet_id]/Sidebar.tsx
··· 15 15 16 16 export function LeafletSidebar(props: { leaflet_id: string }) { 17 17 let entity_set = useEntitySetContext(); 18 - let { data: publicationData } = useLeafletPublicationData(); 18 + let { data: pub } = useLeafletPublicationData(); 19 19 let { identity } = useIdentityData(); 20 - let pub = publicationData?.[0]; 21 20 22 21 return ( 23 22 <div
+1 -2
components/Blocks/BlockCommandBar.tsx
··· 30 30 31 31 let { rep, undoManager } = useReplicache(); 32 32 let entity_set = useEntitySetContext(); 33 - let { data: publicationData } = useLeafletPublicationData(); 34 - let pub = publicationData?.[0]; 33 + let { data: pub } = useLeafletPublicationData(); 35 34 36 35 let commandResults = blockCommands.filter((command) => { 37 36 const matchesSearch = command.name
+1 -2
components/Blocks/TextBlock/index.tsx
··· 472 472 const CommandOptions = (props: BlockProps & { className?: string }) => { 473 473 let rep = useReplicache(); 474 474 let entity_set = useEntitySetContext(); 475 - let { data: publicationData } = useLeafletPublicationData(); 476 - let pub = publicationData?.[0]; 475 + let { data: pub } = useLeafletPublicationData(); 477 476 478 477 return ( 479 478 <div
+1 -1
components/PageSWRDataProvider.tsx
··· 58 58 export function useLeafletPublicationData() { 59 59 let { data, mutate } = useLeafletData(); 60 60 return { 61 - data: data?.data?.leaflets_in_publications || [], 61 + data: data?.data?.leaflets_in_publications?.[0] || null, 62 62 mutate, 63 63 }; 64 64 }
+2 -4
components/Pages/PublicationMetadata.tsx
··· 21 21 cardBorderHidden: boolean; 22 22 }) => { 23 23 let { permission_token } = useReplicache(); 24 - let { data: publicationData, mutate } = useLeafletPublicationData(); 25 - let pub = publicationData?.[0]; 24 + let { data: pub, mutate } = useLeafletPublicationData(); 26 25 let [titleState, setTitleState] = useState(pub?.title || ""); 27 26 let [descriptionState, setDescriptionState] = useState( 28 27 pub?.description || "", ··· 114 113 }; 115 114 116 115 export const PublicationMetadataPreview = () => { 117 - let { data: publicationData } = useLeafletPublicationData(); 118 - let pub = publicationData?.[0]; 116 + let { data: pub } = useLeafletPublicationData(); 119 117 let record = pub?.documents?.data as PubLeafletDocument.Record | null; 120 118 let publishedAt = record?.publishedAt; 121 119
+1 -2
components/Pages/index.tsx
··· 347 347 let { permissions } = useEntitySetContext(); 348 348 if (!permissions.write) return null; 349 349 350 - let { data: publicationData, mutate } = useLeafletPublicationData(); 351 - let pub = publicationData?.[0]; 350 + let { data: pub, mutate } = useLeafletPublicationData(); 352 351 if (pub && props.first) return; 353 352 return ( 354 353 <Menu
+2 -2
components/Pages/useCardBorderHidden.ts
··· 3 3 4 4 export function useCardBorderHidden(entityID: string) { 5 5 let { rootEntity } = useReplicache(); 6 - let { data } = useLeafletPublicationData(); 6 + let { data: pub } = useLeafletPublicationData(); 7 7 let rootCardBorderHidden = useEntity(rootEntity, "theme/card-border-hidden"); 8 8 9 9 let cardBorderHidden = 10 10 useEntity(entityID, "theme/card-border-hidden") || rootCardBorderHidden; 11 11 if (!cardBorderHidden && !rootCardBorderHidden) { 12 - if (data?.[0]) return true; 12 + if (pub) return true; 13 13 return false; 14 14 } 15 15 return (cardBorderHidden || rootCardBorderHidden)?.data.value;
+1 -2
components/ShareOptions/index.tsx
··· 42 42 43 43 export function ShareOptions() { 44 44 let [menuState, setMenuState] = useState<ShareMenuStates>("default"); 45 - let { data: publicationData } = useLeafletPublicationData(); 46 - let pub = publicationData?.[0]; 45 + let { data: pub } = useLeafletPublicationData(); 47 46 48 47 return ( 49 48 <Menu
+2 -2
components/ThemeManager/ThemeProvider.tsx
··· 54 54 local?: boolean; 55 55 children: React.ReactNode; 56 56 }) { 57 - let { data } = useLeafletPublicationData(); 58 - if (!data[0]) return <LeafletThemeProvider {...props} />; 57 + let { data: pub } = useLeafletPublicationData(); 58 + if (!pub) return <LeafletThemeProvider {...props} />; 59 59 return <PublicationThemeProvider {...props} />; 60 60 } 61 61 export function PublicationThemeProvider(props: {
+4 -4
components/utils/UpdateLeafletTitle.tsx
··· 15 15 import { useLeafletPublicationData } from "components/PageSWRDataProvider"; 16 16 17 17 export function UpdateLeafletTitle(props: { entityID: string }) { 18 - let { data: pubData } = useLeafletPublicationData(); 18 + let { data: pub } = useLeafletPublicationData(); 19 19 let firstPage = useEntity(props.entityID, "root/page")[0]; 20 20 let entityID = firstPage?.data.value || props.entityID; 21 21 ··· 25 25 let firstBlock = blocks[0]; 26 26 let title = usePageTitle(entityID); 27 27 useEffect(() => { 28 - if (pubData?.[0]?.title) { 29 - document.title = pubData[0].title; 28 + if (pub?.title) { 29 + document.title = pub.title; 30 30 } 31 31 if (title) { 32 32 document.title = title; 33 33 } 34 - }, [title, pubData]); 34 + }, [title, pub]); 35 35 let params = useSearchParams(); 36 36 let focusFirstBlock = params.get("focusFirstBlock"); 37 37 let router = useRouter();