tangled
alpha
login
or
join now
leaflet.pub
/
leaflet
289
fork
atom
a tool for shared writing and social publishing
289
fork
atom
overview
issues
28
pulls
pipelines
improve useLeafletPublicationData typing
awarm.space
10 months ago
e1209165
8bafe666
+19
-28
12 changed files
expand all
collapse all
unified
split
app
[leaflet_id]
Actions.tsx
Footer.tsx
Sidebar.tsx
components
Blocks
BlockCommandBar.tsx
TextBlock
index.tsx
PageSWRDataProvider.tsx
Pages
PublicationMetadata.tsx
index.tsx
useCardBorderHidden.ts
ShareOptions
index.tsx
ThemeManager
ThemeProvider.tsx
utils
UpdateLeafletTitle.tsx
+2
-3
app/[leaflet_id]/Actions.tsx
···
43
43
44
44
export const PublishButton = () => {
45
45
let [isLoading, setIsLoading] = useState(false);
46
46
-
let { data, mutate } = useLeafletPublicationData();
46
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
52
-
let pub = data[0];
53
52
return (
54
53
<ActionButton
55
54
primary
56
55
icon={<PublishSmall className="shrink-0" />}
57
57
-
label={isLoading ? <DotLoader /> : pub.doc ? "Update!" : "Publish!"}
56
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
20
-
let { data: publicationData } = useLeafletPublicationData();
21
21
-
let pub = publicationData?.[0];
20
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
18
-
let { data: publicationData } = useLeafletPublicationData();
18
18
+
let { data: pub } = useLeafletPublicationData();
19
19
let { identity } = useIdentityData();
20
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
33
-
let { data: publicationData } = useLeafletPublicationData();
34
34
-
let pub = publicationData?.[0];
33
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
475
-
let { data: publicationData } = useLeafletPublicationData();
476
476
-
let pub = publicationData?.[0];
475
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
61
-
data: data?.data?.leaflets_in_publications || [],
61
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
24
-
let { data: publicationData, mutate } = useLeafletPublicationData();
25
25
-
let pub = publicationData?.[0];
24
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
117
-
let { data: publicationData } = useLeafletPublicationData();
118
118
-
let pub = publicationData?.[0];
116
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
350
-
let { data: publicationData, mutate } = useLeafletPublicationData();
351
351
-
let pub = publicationData?.[0];
350
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
6
-
let { data } = useLeafletPublicationData();
6
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
12
-
if (data?.[0]) return true;
12
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
45
-
let { data: publicationData } = useLeafletPublicationData();
46
46
-
let pub = publicationData?.[0];
45
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
57
-
let { data } = useLeafletPublicationData();
58
58
-
if (!data[0]) return <LeafletThemeProvider {...props} />;
57
57
+
let { data: pub } = useLeafletPublicationData();
58
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
18
-
let { data: pubData } = useLeafletPublicationData();
18
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
28
-
if (pubData?.[0]?.title) {
29
29
-
document.title = pubData[0].title;
28
28
+
if (pub?.title) {
29
29
+
document.title = pub.title;
30
30
}
31
31
if (title) {
32
32
document.title = title;
33
33
}
34
34
-
}, [title, pubData]);
34
34
+
}, [title, pub]);
35
35
let params = useSearchParams();
36
36
let focusFirstBlock = params.get("focusFirstBlock");
37
37
let router = useRouter();