feat: bump blocksuite (#5953)

This commit is contained in:
regischen
2024-02-29 14:33:50 +08:00
committed by GitHub
parent fa534869e1
commit d1e6b23e1a
121 changed files with 665 additions and 674 deletions
@@ -10,16 +10,15 @@ import { initEmptyPage, ServiceProviderContext } from '@toeverything/infra';
import type { PropsWithChildren } from 'react';
import { beforeEach, describe, expect, test, vi } from 'vitest';
import { useBlockSuitePageMeta } from '../use-block-suite-page-meta';
import { useBlockSuiteDocMeta } from '../use-block-suite-page-meta';
import { useBlockSuiteWorkspaceHelper } from '../use-block-suite-workspace-helper';
const configureTestingWorkspace = async () => {
const { workspace } = await configureTestingEnvironment();
const blockSuiteWorkspace = workspace.blockSuiteWorkspace;
// await initEmptyPage(blockSuiteWorkspace.createPage({ id: 'page-0' }));
initEmptyPage(blockSuiteWorkspace.createPage({ id: 'page1' }));
initEmptyPage(blockSuiteWorkspace.createPage({ id: 'page2' }));
initEmptyPage(blockSuiteWorkspace.createDoc({ id: 'page1' }));
initEmptyPage(blockSuiteWorkspace.createDoc({ id: 'page2' }));
return workspace;
};
@@ -43,7 +42,7 @@ describe('useBlockSuiteWorkspaceHelper', () => {
const blockSuiteWorkspace = workspace.blockSuiteWorkspace;
const Wrapper = getWrapper(workspace);
expect(blockSuiteWorkspace.meta.pageMetas.length).toBe(3);
expect(blockSuiteWorkspace.meta.docMetas.length).toBe(3);
const helperHook = renderHook(
() => useBlockSuiteWorkspaceHelper(blockSuiteWorkspace),
{
@@ -51,17 +50,17 @@ describe('useBlockSuiteWorkspaceHelper', () => {
}
);
const pageMetaHook = renderHook(
() => useBlockSuitePageMeta(blockSuiteWorkspace),
() => useBlockSuiteDocMeta(blockSuiteWorkspace),
{
wrapper: Wrapper,
}
);
await new Promise(resolve => setTimeout(resolve));
expect(pageMetaHook.result.current.length).toBe(3);
expect(blockSuiteWorkspace.meta.pageMetas.length).toBe(3);
const page = helperHook.result.current.createPage('page4');
expect(blockSuiteWorkspace.meta.docMetas.length).toBe(3);
const page = helperHook.result.current.createDoc('page4');
expect(page.id).toBe('page4');
expect(blockSuiteWorkspace.meta.pageMetas.length).toBe(4);
expect(blockSuiteWorkspace.meta.docMetas.length).toBe(4);
pageMetaHook.rerender();
expect(pageMetaHook.result.current.length).toBe(4);
});
@@ -43,7 +43,7 @@ describe('useBlockSuiteWorkspacePageTitle', () => {
</ServiceProviderContext.Provider>
);
expect(await findByText('title: Untitled')).toBeDefined();
workspace.blockSuiteWorkspace.setPageMeta(page.id, { title: '1' });
workspace.blockSuiteWorkspace.setDocMeta(page.id, { title: '1' });
rerender(
<ServiceProviderContext.Provider value={page.services}>
<Provider store={store}>
@@ -3,9 +3,9 @@ import {
type AllPageListConfig,
FavoriteTag,
} from '@affine/core/components/page-list';
import { useBlockSuitePageMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { useBlockSuiteDocMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { PageMeta } from '@blocksuite/store';
import type { DocMeta } from '@blocksuite/store';
import { Workspace } from '@toeverything/infra';
import { useService } from '@toeverything/infra/di';
import { useCallback, useMemo } from 'react';
@@ -18,7 +18,7 @@ export const useAllPageListConfig = () => {
const currentWorkspace = useService(Workspace);
const { getPublicMode } = usePublicPages(currentWorkspace);
const workspace = currentWorkspace.blockSuiteWorkspace;
const pageMetas = useBlockSuitePageMeta(workspace);
const pageMetas = useBlockSuiteDocMeta(workspace);
const { isPreferredEdgeless } = usePageHelper(workspace);
const pageMap = useMemo(
() => Object.fromEntries(pageMetas.map(page => [page.id, page])),
@@ -29,7 +29,7 @@ export const useAllPageListConfig = () => {
);
const t = useAFFiNEI18N();
const onToggleFavoritePage = useCallback(
(page: PageMeta) => {
(page: DocMeta) => {
const status = page.favorite;
toggleFavorite(page.id);
toast(
@@ -1,5 +1,5 @@
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { usePageMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useBlockSuiteWorkspaceHelper } from '@affine/core/hooks/use-block-suite-workspace-helper';
import { CollectionService } from '@affine/core/modules/collection';
import { PageRecordList, useService } from '@toeverything/infra';
@@ -13,76 +13,76 @@ import { useReferenceLinkHelper } from './use-reference-link-helper';
export function useBlockSuiteMetaHelper(
blockSuiteWorkspace: BlockSuiteWorkspace
) {
const { setPageMeta, getPageMeta, setPageReadonly, setPageTitle } =
usePageMetaHelper(blockSuiteWorkspace);
const { setDocMeta, getDocMeta, setDocReadonly, setDocTitle } =
useDocMetaHelper(blockSuiteWorkspace);
const { addReferenceLink } = useReferenceLinkHelper(blockSuiteWorkspace);
const { createPage } = useBlockSuiteWorkspaceHelper(blockSuiteWorkspace);
const { createDoc } = useBlockSuiteWorkspaceHelper(blockSuiteWorkspace);
const { openPage } = useNavigateHelper();
const collectionService = useService(CollectionService);
const pageRecordList = useService(PageRecordList);
const addToFavorite = useCallback(
(pageId: string) => {
setPageMeta(pageId, {
setDocMeta(pageId, {
favorite: true,
});
},
[setPageMeta]
[setDocMeta]
);
const removeFromFavorite = useCallback(
(pageId: string) => {
setPageMeta(pageId, {
setDocMeta(pageId, {
favorite: false,
});
},
[setPageMeta]
[setDocMeta]
);
const toggleFavorite = useCallback(
(pageId: string) => {
const { favorite } = getPageMeta(pageId) ?? {};
setPageMeta(pageId, {
const { favorite } = getDocMeta(pageId) ?? {};
setDocMeta(pageId, {
favorite: !favorite,
});
},
[getPageMeta, setPageMeta]
[getDocMeta, setDocMeta]
);
// TODO-Doma
// "Remove" may cause ambiguity here. Consider renaming as "moveToTrash".
const removeToTrash = useCallback(
(pageId: string) => {
setPageMeta(pageId, {
setDocMeta(pageId, {
trash: true,
trashDate: Date.now(),
trashRelate: undefined,
});
setPageReadonly(pageId, true);
setDocReadonly(pageId, true);
collectionService.deletePagesFromCollections([pageId]);
},
[collectionService, setPageMeta, setPageReadonly]
[collectionService, setDocMeta, setDocReadonly]
);
const restoreFromTrash = useCallback(
(pageId: string) => {
const { trashRelate } = getPageMeta(pageId) ?? {};
const { trashRelate } = getDocMeta(pageId) ?? {};
if (trashRelate) {
addReferenceLink(trashRelate, pageId);
}
setPageMeta(pageId, {
setDocMeta(pageId, {
trash: false,
trashDate: undefined,
trashRelate: undefined,
});
setPageReadonly(pageId, false);
setDocReadonly(pageId, false);
},
[addReferenceLink, getPageMeta, setPageMeta, setPageReadonly]
[addReferenceLink, getDocMeta, setDocMeta, setDocReadonly]
);
const permanentlyDeletePage = useCallback(
(pageId: string) => {
blockSuiteWorkspace.removePage(pageId);
blockSuiteWorkspace.removeDoc(pageId);
},
[blockSuiteWorkspace]
);
@@ -92,11 +92,11 @@ export function useBlockSuiteMetaHelper(
*/
const publicPage = useCallback(
(pageId: string) => {
setPageMeta(pageId, {
setDocMeta(pageId, {
isPublic: true,
});
},
[setPageMeta]
[setDocMeta]
);
/**
@@ -104,21 +104,21 @@ export function useBlockSuiteMetaHelper(
*/
const cancelPublicPage = useCallback(
(pageId: string) => {
setPageMeta(pageId, {
setDocMeta(pageId, {
isPublic: false,
});
},
[setPageMeta]
[setDocMeta]
);
const duplicate = useAsyncCallback(
async (pageId: string, openPageAfterDuplication: boolean = true) => {
const currentPageMode = pageRecordList.record(pageId).value?.mode.value;
const currentPageMeta = getPageMeta(pageId);
const newPage = createPage();
const currentPage = blockSuiteWorkspace.getPage(pageId);
const currentPageMeta = getDocMeta(pageId);
const newPage = createDoc();
const currentPage = blockSuiteWorkspace.getDoc(pageId);
newPage.waitForLoaded();
newPage.load();
if (!currentPageMeta || !currentPage) {
return;
}
@@ -126,7 +126,7 @@ export function useBlockSuiteMetaHelper(
const update = encodeStateAsUpdate(currentPage.spaceDoc);
applyUpdate(newPage.spaceDoc, update);
setPageMeta(newPage.id, {
setDocMeta(newPage.id, {
tags: currentPageMeta.tags,
favorite: currentPageMeta.favorite,
});
@@ -141,17 +141,17 @@ export function useBlockSuiteMetaHelper(
pageRecordList
.record(newPage.id)
.value?.setMode(currentPageMode || 'page');
setPageTitle(newPage.id, newPageTitle);
setDocTitle(newPage.id, newPageTitle);
openPageAfterDuplication && openPage(blockSuiteWorkspace.id, newPage.id);
},
[
blockSuiteWorkspace,
createPage,
getPageMeta,
createDoc,
getDocMeta,
openPage,
pageRecordList,
setPageMeta,
setPageTitle,
setDocMeta,
setDocTitle,
]
);
@@ -5,13 +5,13 @@ import {
import { pushNotificationAtom } from '@affine/component/notification-center';
import { apis } from '@affine/electron-api';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { PageService } from '@blocksuite/blocks';
import type { PageRootService } from '@blocksuite/blocks';
import {
HtmlTransformer,
MarkdownTransformer,
type PageBlockModel,
type RootBlockModel,
} from '@blocksuite/blocks';
import type { Page } from '@blocksuite/store';
import type { Doc } from '@blocksuite/store';
import { useSetAtom } from 'jotai';
import { nanoid } from 'nanoid';
import { useCallback } from 'react';
@@ -19,27 +19,27 @@ import { useCallback } from 'react';
type ExportType = 'pdf' | 'html' | 'png' | 'markdown';
interface ExportHandlerOptions {
page: Page;
page: Doc;
type: ExportType;
}
async function exportHandler({ page, type }: ExportHandlerOptions) {
const editorRoot = document.querySelector('editor-host');
let pageService: PageService | null = null;
let pageService: PageRootService | null = null;
if (editorRoot) {
pageService = editorRoot.spec.getService('affine:page') as PageService;
pageService = editorRoot.spec.getService<PageRootService>('affine:page');
}
switch (type) {
case 'html':
await HtmlTransformer.exportPage(page);
await HtmlTransformer.exportDoc(page);
break;
case 'markdown':
await MarkdownTransformer.exportPage(page);
await MarkdownTransformer.exportDoc(page);
break;
case 'pdf':
if (environment.isDesktop && page.meta.mode === 'page') {
if (environment.isDesktop && page.meta?.mode === 'page') {
await apis?.export.savePDFFileAs(
(page.root as PageBlockModel).title.toString()
(page.root as RootBlockModel).title.toString()
);
} else {
if (!pageService) return;
@@ -54,7 +54,7 @@ async function exportHandler({ page, type }: ExportHandlerOptions) {
}
}
export const useExportPage = (page: Page) => {
export const useExportPage = (page: Doc) => {
const pushNotification = useSetAtom(pushNotificationAtom);
const pushGlobalLoadingEvent = useSetAtom(pushGlobalLoadingEventAtom);
const resolveGlobalLoadingEvent = useSetAtom(resolveGlobalLoadingEventAtom);
@@ -7,7 +7,7 @@ export function useReferenceLinkHelper(
) {
const addReferenceLink = useCallback(
(pageId: string, referenceId: string) => {
const page = blockSuiteWorkspace?.getPage(pageId);
const page = blockSuiteWorkspace?.getDoc(pageId);
if (!page) {
return;
}
@@ -1,10 +1,10 @@
import { toast } from '@affine/component';
import { usePageMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { assertExists } from '@blocksuite/global/utils';
import { EdgelessIcon, HistoryIcon, PageIcon } from '@blocksuite/icons';
import { Page, useLiveData, Workspace } from '@toeverything/infra';
import { Doc, useLiveData, Workspace } from '@toeverything/infra';
import {
PreconditionStrategy,
registerAffineCommand,
@@ -19,16 +19,16 @@ import { useExportPage } from './use-export-page';
import { useTrashModalHelper } from './use-trash-modal-helper';
export function useRegisterBlocksuiteEditorCommands() {
const page = useService(Page);
const page = useService(Doc);
const pageId = page.id;
const mode = useLiveData(page.mode);
const t = useAFFiNEI18N();
const workspace = useService(Workspace);
const blockSuiteWorkspace = workspace.blockSuiteWorkspace;
const { getPageMeta } = usePageMetaHelper(blockSuiteWorkspace);
const currentPage = blockSuiteWorkspace.getPage(pageId);
const { getDocMeta } = useDocMetaHelper(blockSuiteWorkspace);
const currentPage = blockSuiteWorkspace.getDoc(pageId);
assertExists(currentPage);
const pageMeta = getPageMeta(pageId);
const pageMeta = getDocMeta(pageId);
assertExists(pageMeta);
const favorite = pageMeta.favorite ?? false;
const trash = pageMeta.trash ?? false;
@@ -1,6 +1,6 @@
import { toast } from '@affine/component';
import type { DraggableTitleCellData } from '@affine/core/components/page-list';
import { usePageMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { DragEndEvent, UniqueIdentifier } from '@dnd-kit/core';
import { Workspace } from '@toeverything/infra';
@@ -74,7 +74,7 @@ export const useSidebarDrag = () => {
const { setTrashModal } = useTrashModalHelper(workspace);
const { addToFavorite, removeFromFavorite } =
useBlockSuiteMetaHelper(workspace);
const { getPageMeta } = usePageMetaHelper(workspace);
const { getDocMeta } = useDocMetaHelper(workspace);
const isDropArea = useCallback(
(id: UniqueIdentifier | undefined, prefix: string) => {
@@ -109,7 +109,7 @@ export const useSidebarDrag = () => {
const processMoveToTrashDrag = useCallback(
(e: DragEndEvent) => {
const { pageId } = e.active.data.current as DraggableTitleCellData;
const pageTitle = getPageMeta(pageId)?.title ?? t['Untitled']();
const pageTitle = getDocMeta(pageId)?.title ?? t['Untitled']();
processDrag(e, DropPrefix.SidebarTrash, pageId => {
setTrashModal({
open: true,
@@ -118,13 +118,13 @@ export const useSidebarDrag = () => {
});
});
},
[getPageMeta, processDrag, setTrashModal, t]
[getDocMeta, processDrag, setTrashModal, t]
);
const processFavouritesDrag = useCallback(
(e: DragEndEvent) => {
const { pageId } = e.active.data.current as DraggableTitleCellData;
const isFavourited = getPageMeta(pageId)?.favorite;
const isFavourited = getDocMeta(pageId)?.favorite;
const isFavouriteDrag = String(e.over?.id).startsWith(
DropPrefix.SidebarFavorites
);
@@ -136,7 +136,7 @@ export const useSidebarDrag = () => {
toast(t['com.affine.cmdk.affine.editor.add-to-favourites']());
});
},
[getPageMeta, processDrag, addToFavorite, t]
[getDocMeta, processDrag, addToFavorite, t]
);
const processRemoveDrag = useCallback(
@@ -20,7 +20,7 @@ const useReactiveAdapter = (adapter: WorkspacePropertiesAdapter) => {
}
const disposables: (() => void)[] = [];
disposables.push(
adapter.workspace.blockSuiteWorkspace.meta.pageMetasUpdated.on(observe)
adapter.workspace.blockSuiteWorkspace.meta.docMetaUpdated.on(observe)
.dispose
);
adapter.properties.observeDeep(observe);
@@ -1,25 +1,25 @@
import type { PageMeta, Workspace } from '@blocksuite/store';
import type { DocMeta, Workspace } from '@blocksuite/store';
import type { Atom } from 'jotai';
import { atom, useAtomValue } from 'jotai';
const weakMap = new WeakMap<Workspace, Atom<PageMeta[]>>();
const weakMap = new WeakMap<Workspace, Atom<DocMeta[]>>();
// this hook is extracted from './use-block-suite-page-meta.ts' to avoid circular dependency
export function useAllBlockSuitePageMeta(
export function useAllBlockSuiteDocMeta(
blockSuiteWorkspace: Workspace
): PageMeta[] {
): DocMeta[] {
if (!weakMap.has(blockSuiteWorkspace)) {
const baseAtom = atom<PageMeta[]>(blockSuiteWorkspace.meta.pageMetas);
const baseAtom = atom<DocMeta[]>(blockSuiteWorkspace.meta.docMetas);
weakMap.set(blockSuiteWorkspace, baseAtom);
baseAtom.onMount = set => {
set(blockSuiteWorkspace.meta.pageMetas);
const dispose = blockSuiteWorkspace.meta.pageMetasUpdated.on(() => {
set(blockSuiteWorkspace.meta.pageMetas);
set(blockSuiteWorkspace.meta.docMetas);
const dispose = blockSuiteWorkspace.meta.docMetaUpdated.on(() => {
set(blockSuiteWorkspace.meta.docMetas);
});
return () => {
dispose.dispose();
};
};
}
return useAtomValue(weakMap.get(blockSuiteWorkspace) as Atom<PageMeta[]>);
return useAtomValue(weakMap.get(blockSuiteWorkspace) as Atom<DocMeta[]>);
}
@@ -1,17 +1,17 @@
import type { Page, Workspace } from '@blocksuite/store';
import type { Doc, Workspace } from '@blocksuite/store';
import { type Atom, atom, useAtomValue } from 'jotai';
import { useBlockSuiteWorkspacePage } from './use-block-suite-workspace-page';
const weakMap = new WeakMap<Page, Atom<string[]>>();
function getPageBacklinks(page: Page): string[] {
const weakMap = new WeakMap<Doc, Atom<string[]>>();
function getPageBacklinks(page: Doc): string[] {
return page.workspace.indexer.backlink
.getBacklink(page.id)
.map(linkNode => linkNode.pageId)
.filter(id => id !== page.id);
}
const getPageBacklinksAtom = (page: Page | null) => {
const getPageBacklinksAtom = (page: Doc | null) => {
if (!page) {
return atom([]);
}
@@ -1,9 +1,9 @@
import type { PageBlockModel } from '@blocksuite/blocks';
import type { RootBlockModel } from '@blocksuite/blocks';
import { assertExists } from '@blocksuite/global/utils';
import type { PageMeta, Workspace } from '@blocksuite/store';
import type { DocMeta, Workspace } from '@blocksuite/store';
import { useMemo } from 'react';
import { useAllBlockSuitePageMeta } from './use-all-block-suite-page-meta';
import { useAllBlockSuiteDocMeta } from './use-all-block-suite-page-meta';
import { useJournalHelper } from './use-journal';
/**
@@ -11,8 +11,8 @@ import { useJournalHelper } from './use-journal';
* If you want to get all pageMetas, use `useAllBlockSuitePageMeta` instead
* @returns
*/
export function useBlockSuitePageMeta(blocksuiteWorkspace: Workspace) {
const pageMetas = useAllBlockSuitePageMeta(blocksuiteWorkspace);
export function useBlockSuiteDocMeta(blocksuiteWorkspace: Workspace) {
const pageMetas = useAllBlockSuiteDocMeta(blocksuiteWorkspace);
const { isPageJournal } = useJournalHelper(blocksuiteWorkspace);
return useMemo(
() =>
@@ -23,32 +23,32 @@ export function useBlockSuitePageMeta(blocksuiteWorkspace: Workspace) {
);
}
export function usePageMetaHelper(blockSuiteWorkspace: Workspace) {
export function useDocMetaHelper(blockSuiteWorkspace: Workspace) {
return useMemo(
() => ({
setPageTitle: (pageId: string, newTitle: string) => {
const page = blockSuiteWorkspace.getPage(pageId);
setDocTitle: (docId: string, newTitle: string) => {
const page = blockSuiteWorkspace.getDoc(docId);
assertExists(page);
const pageBlock = page
.getBlockByFlavour('affine:page')
.at(0) as PageBlockModel;
.at(0) as RootBlockModel;
assertExists(pageBlock);
page.transact(() => {
pageBlock.title.delete(0, pageBlock.title.length);
pageBlock.title.insert(newTitle, 0);
});
blockSuiteWorkspace.meta.setPageMeta(pageId, { title: newTitle });
blockSuiteWorkspace.meta.setDocMeta(docId, { title: newTitle });
},
setPageReadonly: (pageId: string, readonly: boolean) => {
const page = blockSuiteWorkspace.getPage(pageId);
setDocReadonly: (docId: string, readonly: boolean) => {
const page = blockSuiteWorkspace.getDoc(docId);
assertExists(page);
page.awarenessStore.setReadonly(page, readonly);
},
setPageMeta: (pageId: string, pageMeta: Partial<PageMeta>) => {
blockSuiteWorkspace.meta.setPageMeta(pageId, pageMeta);
setDocMeta: (docId: string, docMeta: Partial<DocMeta>) => {
blockSuiteWorkspace.meta.setDocMeta(docId, docMeta);
},
getPageMeta: (pageId: string) => {
return blockSuiteWorkspace.meta.getPageMeta(pageId);
getDocMeta: (docId: string) => {
return blockSuiteWorkspace.meta.getDocMeta(docId);
},
}),
[blockSuiteWorkspace]
@@ -1,16 +1,16 @@
import type { Page, Workspace } from '@blocksuite/store';
import type { Doc, Workspace } from '@blocksuite/store';
import { type Atom, atom, useAtomValue } from 'jotai';
import { useBlockSuiteWorkspacePage } from './use-block-suite-workspace-page';
const weakMap = new WeakMap<Page, Atom<string[]>>();
function getPageReferences(page: Page): string[] {
const weakMap = new WeakMap<Doc, Atom<string[]>>();
function getPageReferences(page: Doc): string[] {
return Object.values(
page.workspace.indexer.backlink.linkIndexMap[page.id] ?? {}
).flatMap(linkNodes => linkNodes.map(linkNode => linkNode.pageId));
}
const getPageReferencesAtom = (page: Page | null) => {
const getPageReferencesAtom = (page: Doc | null) => {
if (!page) {
return atom([]);
}
@@ -1,11 +1,11 @@
import type { Page, Workspace } from '@blocksuite/store';
import type { Doc, Workspace } from '@blocksuite/store';
import { useMemo } from 'react';
export function useBlockSuiteWorkspaceHelper(blockSuiteWorkspace: Workspace) {
return useMemo(
() => ({
createPage: (pageId?: string): Page => {
return blockSuiteWorkspace.createPage({ id: pageId });
createDoc: (pageId?: string): Doc => {
return blockSuiteWorkspace.createDoc({ id: pageId });
},
}),
[blockSuiteWorkspace]
@@ -15,11 +15,11 @@ function getAtom(w: Workspace, pageId: string): Atom<string> {
const map = weakMap.get(w);
assertExists(map);
if (!map.has(pageId)) {
const baseAtom = atom<string>(w.getPage(pageId)?.meta.title || 'Untitled');
const baseAtom = atom<string>(w.getDoc(pageId)?.meta?.title || 'Untitled');
baseAtom.onMount = set => {
const disposable = w.meta.pageMetasUpdated.on(() => {
const page = w.getPage(pageId);
set(page?.meta.title || 'Untitled');
const disposable = w.meta.docMetaUpdated.on(() => {
const page = w.getDoc(pageId);
set(page?.meta?.title || 'Untitled');
});
return () => {
disposable.dispose();
@@ -56,7 +56,7 @@ export function useGetBlockSuiteWorkspacePageTitle(
(pageId: string) => {
return (
getLocalizedJournalDateString(pageId) ||
blockSuiteWorkspace.getPage(pageId)?.meta.title
blockSuiteWorkspace.getDoc(pageId)?.meta?.title
);
},
[blockSuiteWorkspace, getLocalizedJournalDateString]
@@ -1,26 +1,26 @@
import { DisposableGroup } from '@blocksuite/global/utils';
import type { Page, Workspace } from '@blocksuite/store';
import type { Doc, Workspace } from '@blocksuite/store';
import { useEffect, useState } from 'react';
export function useBlockSuiteWorkspacePage(
blockSuiteWorkspace: Workspace,
pageId: string | null
): Page | null {
): Doc | null {
const [page, setPage] = useState(
pageId ? blockSuiteWorkspace.getPage(pageId) : null
pageId ? blockSuiteWorkspace.getDoc(pageId) : null
);
useEffect(() => {
const group = new DisposableGroup();
group.add(
blockSuiteWorkspace.slots.pageAdded.on(id => {
blockSuiteWorkspace.slots.docAdded.on(id => {
if (pageId === id) {
setPage(blockSuiteWorkspace.getPage(id));
setPage(blockSuiteWorkspace.getDoc(id));
}
})
);
group.add(
blockSuiteWorkspace.slots.pageRemoved.on(id => {
blockSuiteWorkspace.slots.docRemoved.on(id => {
if (pageId === id) {
setPage(null);
}
@@ -32,9 +32,9 @@ export const useJournalHelper = (workspace: BlockSuiteWorkspace) => {
const _createJournal = useCallback(
(maybeDate: MaybeDate) => {
const title = dayjs(maybeDate).format(JOURNAL_DATE_FORMAT);
const page = bsWorkspaceHelper.createPage();
const page = bsWorkspaceHelper.createDoc();
// set created date to match the journal date
page.workspace.setPageMeta(page.id, {
page.workspace.setDocMeta(page.id, {
createDate: dayjs(maybeDate).toDate().getTime(),
});
initEmptyPage(page, title);
@@ -57,16 +57,16 @@ export const useJournalHelper = (workspace: BlockSuiteWorkspace) => {
const getJournalsByDate = useCallback(
(maybeDate: MaybeDate) => {
const day = dayjs(maybeDate);
return Array.from(workspace.pages.values()).filter(page => {
return Array.from(workspace.docs.values()).filter(page => {
const pageId = page.id;
if (!isPageJournal(pageId)) return false;
if (page.meta.trash) return false;
if (page.meta?.trash) return false;
const journalDate = adapter.getJournalPageDateString(page.id);
if (!journalDate) return false;
return day.isSame(journalDate, 'day');
});
},
[adapter, isPageJournal, workspace.pages]
[adapter, isPageJournal, workspace.docs]
);
/**