import { BlockProps, BlockLayout } from "../Block"; import { useEntity, useReplicache } from "src/replicache"; import { useUIState } from "src/useUIState"; import { Popover } from "components/Popover"; import { Toggle } from "components/Toggle"; import { SettingsTriggerButton } from "../SettingsTriggerButton"; import { StandardSitePostItem, WithStandardSitePostPublicationTheme, type StandardSitePostSize, } from "./StandardSitePostItem"; import { useStandardSitePost } from "components/StandardSitePostDataProvider"; import { useLeafletPublicationData } from "components/PageSWRDataProvider"; export const StandardSitePostBlock = ( props: BlockProps & { preview?: boolean }, ) => { let isSelected = useUIState((s) => s.selectedBlocks.find((b) => b.value === props.entityID), ); let uri = useEntity(props.entityID, "block/standard-site-post")?.data.value; let sizeFact = useEntity(props.entityID, "standard-site-post/size"); let size: StandardSitePostSize = sizeFact?.data.value ?? "medium"; let showPubThemeFact = useEntity( props.entityID, "standard-site-post/show-publication-theme", ); let showPubTheme = showPubThemeFact?.data.value !== false; let editorPub = useLeafletPublicationData(); let currentPublicationUri = editorPub.data?.publications?.uri ?? null; let { data: post } = useStandardSitePost(uri); if (!uri) return null; if (!post) return ( ); return ( } >
); }; function StandardSitePostSettingsButton(props: { entityID: string }) { let { rep } = useReplicache(); let sizeFact = useEntity(props.entityID, "standard-site-post/size"); let size: StandardSitePostSize = sizeFact?.data.value ?? "medium"; let showPubThemeFact = useEntity( props.entityID, "standard-site-post/show-publication-theme", ); let showPubTheme = showPubThemeFact?.data.value !== false; let popoverKey = `${props.entityID}-settings`; let setOpenPopover = useUIState((s) => s.setOpenPopover); let isOpen = useUIState((s) => s.openPopover === popoverKey); return ( setOpenPopover(o ? popoverKey : null)} onOpenAutoFocus={(e) => e.preventDefault()} trigger={ } >

Post Size

{( [ { value: "small", Icon: SmallIcon }, { value: "medium", Icon: MedIcon }, { value: "large", Icon: LargeIcon }, ] as { value: StandardSitePostSize; Icon: (props: { selected: boolean }) => React.ReactNode; }[] ).map((option) => { let selected = size === option.value || (option.value === "medium" && size !== "small" && size !== "large"); return ( ); })}

{ if (!rep) return; rep.mutate.assertFact({ entity: props.entityID, attribute: "standard-site-post/show-publication-theme", data: { type: "boolean", value: !showPubTheme }, }); }} >
Use Publication Theme
); } function PlaceholderText(size: "sm" | "md" | "lg", width?: string) { return (
); } const SmallIcon = ({ selected }: { selected: boolean }) => { return (
{PlaceholderText("lg")}
{PlaceholderText("sm", "60%")}
); }; const MedIcon = ({ selected }: { selected: boolean }) => { return (
{PlaceholderText("lg")} {PlaceholderText("md")} {PlaceholderText("md", "80%")}
{PlaceholderText("sm", "60%")}
); }; const LargeIcon = ({ selected }: { selected: boolean }) => { return (
{PlaceholderText("lg")} {PlaceholderText("md")} {PlaceholderText("md", "80%")}
{PlaceholderText("sm", "60%")}
); };