a tool for shared writing and social publishing
at update/reader 63 lines 1.8 kB view raw
1"use client"; 2 3import React from "react"; 4import { useUIState } from "src/useUIState"; 5import { useSearchParams } from "next/navigation"; 6 7import { useEntity } from "src/replicache"; 8 9import { useCardBorderHidden } from "./useCardBorderHidden"; 10import { BookendSpacer, SandwichSpacer } from "components/LeafletLayout"; 11import { LeafletSidebar } from "app/[leaflet_id]/Sidebar"; 12import { Page } from "./Page"; 13 14export function Pages(props: { rootPage: string }) { 15 let rootPage = useEntity(props.rootPage, "root/page")[0]; 16 let pages = useUIState((s) => s.openPages); 17 let params = useSearchParams(); 18 let queryRoot = params.get("page"); 19 let firstPage = queryRoot || rootPage?.data.value || props.rootPage; 20 let cardBorderHidden = useCardBorderHidden(rootPage.id); 21 let firstPageIsCanvas = useEntity(firstPage, "page/type"); 22 let fullPageScroll = 23 !!cardBorderHidden && pages.length === 0 && !firstPageIsCanvas; 24 25 return ( 26 <> 27 <LeafletSidebar /> 28 {!fullPageScroll && ( 29 <BookendSpacer 30 onClick={(e) => { 31 e.currentTarget === e.target && blurPage(); 32 }} 33 /> 34 )} 35 36 <Page entityID={firstPage} first fullPageScroll={fullPageScroll} /> 37 {pages.map((page) => ( 38 <React.Fragment key={page}> 39 <SandwichSpacer 40 onClick={(e) => { 41 e.currentTarget === e.target && blurPage(); 42 }} 43 /> 44 <Page entityID={page} fullPageScroll={false} /> 45 </React.Fragment> 46 ))} 47 {!fullPageScroll && ( 48 <BookendSpacer 49 onClick={(e) => { 50 e.currentTarget === e.target && blurPage(); 51 }} 52 /> 53 )} 54 </> 55 ); 56} 57 58const blurPage = () => { 59 useUIState.setState(() => ({ 60 focusedEntity: null, 61 selectedBlocks: [], 62 })); 63};