a tool for shared writing and social publishing
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};