"use client"; import React from "react"; import { useUIState, getEditorPageKey } from "src/useUIState"; import { useSearchParams } from "next/navigation"; import { useEntity } from "src/replicache"; import { useCardBorderHidden } from "./useCardBorderHidden"; import { BookendSpacer, SandwichSpacer } from "components/LeafletLayout"; import { LeafletSidebar } from "app/(app)/[leaflet_id]/Sidebar"; import { Page } from "./Page"; import { IframePageView } from "./IframePageView"; import { PageOptionButton } from "./PageOptions"; import { CloseTiny } from "components/Icons/CloseTiny"; import { scrollIntoViewIfNeeded } from "src/utils/scrollIntoViewIfNeeded"; export function Pages(props: { rootPage: string; flow?: boolean }) { let rootPage = useEntity(props.rootPage, "root/page")[0]; let pages = useUIState((s) => s.openPages); let params = useSearchParams(); let queryRoot = params.get("page"); let firstPage = queryRoot || rootPage?.data.value || props.rootPage; let cardBorderHidden = useCardBorderHidden(rootPage.id); let firstPageIsCanvas = useEntity(firstPage, "page/type"); let fullPageScroll = !!cardBorderHidden && pages.length === 0 && !firstPageIsCanvas; return ( <> {!fullPageScroll && !props.flow && ( { e.currentTarget === e.target && blurPage(); }} /> )} {pages.map((page) => { let key = getEditorPageKey(page); if (typeof page === "object") { return ( { e.currentTarget === e.target && blurPage(); }} /> { useUIState .getState() .openPage(page, { type: "iframe", url }); requestAnimationFrame(() => { requestAnimationFrame(() => { scrollIntoViewIfNeeded( document.getElementById(`iframe-page-${url}`), false, "smooth", 0.8, ); }); }); }} pageOptions={
useUIState.getState().closePage(page) } >
} />
); } return ( { e.currentTarget === e.target && blurPage(); }} /> ); })} {!fullPageScroll && !props.flow && ( { e.currentTarget === e.target && blurPage(); }} /> )} ); } const blurPage = () => { useUIState.setState(() => ({ focusedEntity: null, selectedBlocks: [], })); };