feat: bump blocksuite (#6078)

This commit is contained in:
regischen
2024-03-13 17:04:21 +08:00
committed by GitHub
parent 573528be41
commit fddbb426a6
126 changed files with 891 additions and 918 deletions

View File

@@ -11,14 +11,14 @@ import type { PropsWithChildren } from 'react';
import { beforeEach, describe, expect, test, vi } from 'vitest';
import { useBlockSuiteDocMeta } from '../use-block-suite-page-meta';
import { useBlockSuiteWorkspaceHelper } from '../use-block-suite-workspace-helper';
import { useDocCollectionHelper } from '../use-block-suite-workspace-helper';
const configureTestingWorkspace = async () => {
const { workspace } = await configureTestingEnvironment();
const blockSuiteWorkspace = workspace.blockSuiteWorkspace;
const docCollection = workspace.docCollection;
initEmptyPage(blockSuiteWorkspace.createDoc({ id: 'page1' }));
initEmptyPage(blockSuiteWorkspace.createDoc({ id: 'page2' }));
initEmptyPage(docCollection.createDoc({ id: 'page1' }));
initEmptyPage(docCollection.createDoc({ id: 'page2' }));
return workspace;
};
@@ -36,31 +36,25 @@ const getWrapper = (workspace: Workspace) =>
);
};
describe('useBlockSuiteWorkspaceHelper', () => {
describe('useDocCollectionHelper', () => {
test('should create page', async () => {
const workspace = await configureTestingWorkspace();
const blockSuiteWorkspace = workspace.blockSuiteWorkspace;
const docCollection = workspace.docCollection;
const Wrapper = getWrapper(workspace);
expect(blockSuiteWorkspace.meta.docMetas.length).toBe(3);
const helperHook = renderHook(
() => useBlockSuiteWorkspaceHelper(blockSuiteWorkspace),
{
wrapper: Wrapper,
}
);
const pageMetaHook = renderHook(
() => useBlockSuiteDocMeta(blockSuiteWorkspace),
{
wrapper: Wrapper,
}
);
expect(docCollection.meta.docMetas.length).toBe(3);
const helperHook = renderHook(() => useDocCollectionHelper(docCollection), {
wrapper: Wrapper,
});
const pageMetaHook = renderHook(() => useBlockSuiteDocMeta(docCollection), {
wrapper: Wrapper,
});
await new Promise(resolve => setTimeout(resolve));
expect(pageMetaHook.result.current.length).toBe(3);
expect(blockSuiteWorkspace.meta.docMetas.length).toBe(3);
expect(docCollection.meta.docMetas.length).toBe(3);
const page = helperHook.result.current.createDoc('page4');
expect(page.id).toBe('page4');
expect(blockSuiteWorkspace.meta.docMetas.length).toBe(4);
expect(docCollection.meta.docMetas.length).toBe(4);
pageMetaHook.rerender();
expect(pageMetaHook.result.current.length).toBe(4);
});

View File

@@ -13,16 +13,13 @@ import { describe, expect, test, vi } from 'vitest';
import { beforeEach } from 'vitest';
import { configureTestingEnvironment } from '../../testing';
import { useBlockSuiteWorkspacePageTitle } from '../use-block-suite-workspace-page-title';
import { useDocCollectionPageTitle } from '../use-block-suite-workspace-page-title';
const store = createStore();
const Component = () => {
const workspace = useService(Workspace);
const title = useBlockSuiteWorkspacePageTitle(
workspace.blockSuiteWorkspace,
'page0'
);
const title = useDocCollectionPageTitle(workspace.docCollection, 'page0');
return <div>title: {title}</div>;
};
@@ -30,7 +27,7 @@ beforeEach(async () => {
vi.useFakeTimers({ toFake: ['requestIdleCallback'] });
});
describe('useBlockSuiteWorkspacePageTitle', () => {
describe('useDocCollectionPageTitle', () => {
test('basic', async () => {
const { workspace, page } = await configureTestingEnvironment();
const { findByText, rerender } = render(
@@ -43,7 +40,7 @@ describe('useBlockSuiteWorkspacePageTitle', () => {
</ServiceProviderContext.Provider>
);
expect(await findByText('title: Untitled')).toBeDefined();
workspace.blockSuiteWorkspace.setDocMeta(page.id, { title: '1' });
workspace.docCollection.setDocMeta(page.id, { title: '1' });
rerender(
<ServiceProviderContext.Provider value={page.services}>
<Provider store={store}>

View File

@@ -17,7 +17,7 @@ import { usePublicPages } from './use-is-shared-page';
export const useAllPageListConfig = () => {
const currentWorkspace = useService(Workspace);
const { getPublicMode } = usePublicPages(currentWorkspace);
const workspace = currentWorkspace.blockSuiteWorkspace;
const workspace = currentWorkspace.docCollection;
const pageMetas = useBlockSuiteDocMeta(workspace);
const { isPreferredEdgeless } = usePageHelper(workspace);
const pageMap = useMemo(
@@ -25,7 +25,7 @@ export const useAllPageListConfig = () => {
[pageMetas]
);
const { toggleFavorite } = useBlockSuiteMetaHelper(
currentWorkspace.blockSuiteWorkspace
currentWorkspace.docCollection
);
const t = useAFFiNEI18N();
const onToggleFavoritePage = useCallback(
@@ -45,7 +45,7 @@ export const useAllPageListConfig = () => {
allPages: pageMetas,
isEdgeless: isPreferredEdgeless,
getPublicMode,
workspace: currentWorkspace.blockSuiteWorkspace,
docCollection: currentWorkspace.docCollection,
getPage: id => pageMap[id],
favoriteRender: page => {
return (
@@ -61,7 +61,7 @@ export const useAllPageListConfig = () => {
pageMetas,
isPreferredEdgeless,
getPublicMode,
currentWorkspace.blockSuiteWorkspace,
currentWorkspace.docCollection,
pageMap,
onToggleFavoritePage,
]);

View File

@@ -1,22 +1,20 @@
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useBlockSuiteWorkspaceHelper } from '@affine/core/hooks/use-block-suite-workspace-helper';
import { useDocCollectionHelper } from '@affine/core/hooks/use-block-suite-workspace-helper';
import { CollectionService } from '@affine/core/modules/collection';
import { PageRecordList, useService } from '@toeverything/infra';
import { useCallback } from 'react';
import { applyUpdate, encodeStateAsUpdate } from 'yjs';
import type { BlockSuiteWorkspace } from '../../shared';
import type { DocCollection } from '../../shared';
import { useNavigateHelper } from '../use-navigate-helper';
import { useReferenceLinkHelper } from './use-reference-link-helper';
export function useBlockSuiteMetaHelper(
blockSuiteWorkspace: BlockSuiteWorkspace
) {
export function useBlockSuiteMetaHelper(docCollection: DocCollection) {
const { setDocMeta, getDocMeta, setDocReadonly, setDocTitle } =
useDocMetaHelper(blockSuiteWorkspace);
const { addReferenceLink } = useReferenceLinkHelper(blockSuiteWorkspace);
const { createDoc } = useBlockSuiteWorkspaceHelper(blockSuiteWorkspace);
useDocMetaHelper(docCollection);
const { addReferenceLink } = useReferenceLinkHelper(docCollection);
const { createDoc } = useDocCollectionHelper(docCollection);
const { openPage } = useNavigateHelper();
const collectionService = useService(CollectionService);
const pageRecordList = useService(PageRecordList);
@@ -82,9 +80,9 @@ export function useBlockSuiteMetaHelper(
const permanentlyDeletePage = useCallback(
(pageId: string) => {
blockSuiteWorkspace.removeDoc(pageId);
docCollection.removeDoc(pageId);
},
[blockSuiteWorkspace]
[docCollection]
);
/**
@@ -116,7 +114,7 @@ export function useBlockSuiteMetaHelper(
const currentPageMode = pageRecordList.record(pageId).value?.mode.value;
const currentPageMeta = getDocMeta(pageId);
const newPage = createDoc();
const currentPage = blockSuiteWorkspace.getDoc(pageId);
const currentPage = docCollection.getDoc(pageId);
newPage.load();
if (!currentPageMeta || !currentPage) {
@@ -142,10 +140,10 @@ export function useBlockSuiteMetaHelper(
.record(newPage.id)
.value?.setMode(currentPageMode || 'page');
setDocTitle(newPage.id, newPageTitle);
openPageAfterDuplication && openPage(blockSuiteWorkspace.id, newPage.id);
openPageAfterDuplication && openPage(docCollection.id, newPage.id);
},
[
blockSuiteWorkspace,
docCollection,
createDoc,
getDocMeta,
openPage,

View File

@@ -1,13 +1,11 @@
import { useCallback } from 'react';
import type { BlockSuiteWorkspace } from '../../shared';
import type { DocCollection } from '../../shared';
export function useReferenceLinkHelper(
blockSuiteWorkspace: BlockSuiteWorkspace
) {
export function useReferenceLinkHelper(docCollection: DocCollection) {
const addReferenceLink = useCallback(
(pageId: string, referenceId: string) => {
const page = blockSuiteWorkspace?.getDoc(pageId);
const page = docCollection?.getDoc(pageId);
if (!page) {
return;
}
@@ -26,7 +24,7 @@ export function useReferenceLinkHelper(
frame && page.addBlock('affine:paragraph', { text }, frame.id);
},
[blockSuiteWorkspace]
[docCollection]
);
return {

View File

@@ -24,9 +24,9 @@ export function useRegisterBlocksuiteEditorCommands() {
const mode = useLiveData(page.mode);
const t = useAFFiNEI18N();
const workspace = useService(Workspace);
const blockSuiteWorkspace = workspace.blockSuiteWorkspace;
const { getDocMeta } = useDocMetaHelper(blockSuiteWorkspace);
const currentPage = blockSuiteWorkspace.getDoc(pageId);
const docCollection = workspace.docCollection;
const { getDocMeta } = useDocMetaHelper(docCollection);
const currentPage = docCollection.getDoc(pageId);
assertExists(currentPage);
const pageMeta = getDocMeta(pageId);
assertExists(pageMeta);
@@ -43,9 +43,9 @@ export function useRegisterBlocksuiteEditorCommands() {
}, [pageId, setPageHistoryModalState]);
const { toggleFavorite, restoreFromTrash, duplicate } =
useBlockSuiteMetaHelper(blockSuiteWorkspace);
useBlockSuiteMetaHelper(docCollection);
const exportHandler = useExportPage(currentPage);
const { setTrashModal } = useTrashModalHelper(blockSuiteWorkspace);
const { setTrashModal } = useTrashModalHelper(docCollection);
const onClickDelete = useCallback(() => {
setTrashModal({
open: true,

View File

@@ -70,7 +70,7 @@ export function getDragItemId(
export const useSidebarDrag = () => {
const t = useAFFiNEI18N();
const currentWorkspace = useService(Workspace);
const workspace = currentWorkspace.blockSuiteWorkspace;
const workspace = currentWorkspace.docCollection;
const { setTrashModal } = useTrashModalHelper(workspace);
const { addToFavorite, removeFromFavorite } =
useBlockSuiteMetaHelper(workspace);

View File

@@ -1,17 +1,17 @@
import { toast } from '@affine/component';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { Workspace } from '@blocksuite/store';
import type { DocCollection } from '@blocksuite/store';
import { useAtom } from 'jotai';
import { useCallback } from 'react';
import { trashModalAtom } from '../../atoms/trash-modal';
import { useBlockSuiteMetaHelper } from './use-block-suite-meta-helper';
export function useTrashModalHelper(blocksuiteWorkspace: Workspace) {
export function useTrashModalHelper(docCollection: DocCollection) {
const t = useAFFiNEI18N();
const [trashModal, setTrashModal] = useAtom(trashModalAtom);
const { pageIds } = trashModal;
const { removeToTrash } = useBlockSuiteMetaHelper(blocksuiteWorkspace);
const { removeToTrash } = useBlockSuiteMetaHelper(docCollection);
const handleOnConfirm = useCallback(() => {
pageIds.forEach(pageId => {

View File

@@ -20,8 +20,7 @@ const useReactiveAdapter = (adapter: WorkspacePropertiesAdapter) => {
}
const disposables: (() => void)[] = [];
disposables.push(
adapter.workspace.blockSuiteWorkspace.meta.docMetaUpdated.on(observe)
.dispose
adapter.workspace.docCollection.meta.docMetaUpdated.on(observe).dispose
);
adapter.properties.observeDeep(observe);
disposables.push(() => adapter.properties.unobserveDeep(observe));

View File

@@ -1,25 +1,25 @@
import type { DocMeta, Workspace } from '@blocksuite/store';
import type { DocCollection, DocMeta } from '@blocksuite/store';
import type { Atom } from 'jotai';
import { atom, useAtomValue } from 'jotai';
const weakMap = new WeakMap<Workspace, Atom<DocMeta[]>>();
const weakMap = new WeakMap<DocCollection, Atom<DocMeta[]>>();
// this hook is extracted from './use-block-suite-page-meta.ts' to avoid circular dependency
export function useAllBlockSuiteDocMeta(
blockSuiteWorkspace: Workspace
docCollection: DocCollection
): DocMeta[] {
if (!weakMap.has(blockSuiteWorkspace)) {
const baseAtom = atom<DocMeta[]>(blockSuiteWorkspace.meta.docMetas);
weakMap.set(blockSuiteWorkspace, baseAtom);
if (!weakMap.has(docCollection)) {
const baseAtom = atom<DocMeta[]>(docCollection.meta.docMetas);
weakMap.set(docCollection, baseAtom);
baseAtom.onMount = set => {
set(blockSuiteWorkspace.meta.docMetas);
const dispose = blockSuiteWorkspace.meta.docMetaUpdated.on(() => {
set(blockSuiteWorkspace.meta.docMetas);
set(docCollection.meta.docMetas);
const dispose = docCollection.meta.docMetaUpdated.on(() => {
set(docCollection.meta.docMetas);
});
return () => {
dispose.dispose();
};
};
}
return useAtomValue(weakMap.get(blockSuiteWorkspace) as Atom<DocMeta[]>);
return useAtomValue(weakMap.get(docCollection) as Atom<DocMeta[]>);
}

View File

@@ -1,11 +1,11 @@
import type { Doc, Workspace } from '@blocksuite/store';
import type { Doc, DocCollection } from '@blocksuite/store';
import { type Atom, atom, useAtomValue } from 'jotai';
import { useBlockSuiteWorkspacePage } from './use-block-suite-workspace-page';
import { useDocCollectionPage } from './use-block-suite-workspace-page';
const weakMap = new WeakMap<Doc, Atom<string[]>>();
function getPageBacklinks(page: Doc): string[] {
return page.workspace.indexer.backlink
return page.collection.indexer.backlink
.getBacklink(page.id)
.map(linkNode => linkNode.pageId)
.filter(id => id !== page.id);
@@ -23,7 +23,7 @@ const getPageBacklinksAtom = (page: Doc | null) => {
page.slots.ready.on(() => {
set(getPageBacklinks(page));
}),
page.workspace.indexer.backlink.slots.indexUpdated.on(() => {
page.collection.indexer.backlink.slots.indexUpdated.on(() => {
set(getPageBacklinks(page));
}),
];
@@ -38,9 +38,9 @@ const getPageBacklinksAtom = (page: Doc | null) => {
};
export function useBlockSuitePageBacklinks(
blockSuiteWorkspace: Workspace,
pageId: string
docCollection: DocCollection,
docId: string
): string[] {
const page = useBlockSuiteWorkspacePage(blockSuiteWorkspace, pageId);
return useAtomValue(getPageBacklinksAtom(page));
const doc = useDocCollectionPage(docCollection, docId);
return useAtomValue(getPageBacklinksAtom(doc));
}

View File

@@ -1,6 +1,6 @@
import type { RootBlockModel } from '@blocksuite/blocks';
import { assertExists } from '@blocksuite/global/utils';
import type { DocMeta, Workspace } from '@blocksuite/store';
import type { DocCollection, DocMeta } from '@blocksuite/store';
import { useMemo } from 'react';
import { useAllBlockSuiteDocMeta } from './use-all-block-suite-page-meta';
@@ -11,9 +11,9 @@ import { useJournalHelper } from './use-journal';
* If you want to get all pageMetas, use `useAllBlockSuitePageMeta` instead
* @returns
*/
export function useBlockSuiteDocMeta(blocksuiteWorkspace: Workspace) {
const pageMetas = useAllBlockSuiteDocMeta(blocksuiteWorkspace);
const { isPageJournal } = useJournalHelper(blocksuiteWorkspace);
export function useBlockSuiteDocMeta(docCollection: DocCollection) {
const pageMetas = useAllBlockSuiteDocMeta(docCollection);
const { isPageJournal } = useJournalHelper(docCollection);
return useMemo(
() =>
pageMetas.filter(
@@ -23,11 +23,11 @@ export function useBlockSuiteDocMeta(blocksuiteWorkspace: Workspace) {
);
}
export function useDocMetaHelper(blockSuiteWorkspace: Workspace) {
export function useDocMetaHelper(docCollection: DocCollection) {
return useMemo(
() => ({
setDocTitle: (docId: string, newTitle: string) => {
const page = blockSuiteWorkspace.getDoc(docId);
const page = docCollection.getDoc(docId);
assertExists(page);
const pageBlock = page
.getBlockByFlavour('affine:page')
@@ -37,20 +37,20 @@ export function useDocMetaHelper(blockSuiteWorkspace: Workspace) {
pageBlock.title.delete(0, pageBlock.title.length);
pageBlock.title.insert(newTitle, 0);
});
blockSuiteWorkspace.meta.setDocMeta(docId, { title: newTitle });
docCollection.meta.setDocMeta(docId, { title: newTitle });
},
setDocReadonly: (docId: string, readonly: boolean) => {
const page = blockSuiteWorkspace.getDoc(docId);
const page = docCollection.getDoc(docId);
assertExists(page);
page.awarenessStore.setReadonly(page, readonly);
},
setDocMeta: (docId: string, docMeta: Partial<DocMeta>) => {
blockSuiteWorkspace.meta.setDocMeta(docId, docMeta);
docCollection.meta.setDocMeta(docId, docMeta);
},
getDocMeta: (docId: string) => {
return blockSuiteWorkspace.meta.getDocMeta(docId);
return docCollection.meta.getDocMeta(docId);
},
}),
[blockSuiteWorkspace]
[docCollection]
);
}

View File

@@ -1,12 +1,12 @@
import type { Doc, Workspace } from '@blocksuite/store';
import type { Doc, DocCollection } from '@blocksuite/store';
import { type Atom, atom, useAtomValue } from 'jotai';
import { useBlockSuiteWorkspacePage } from './use-block-suite-workspace-page';
import { useDocCollectionPage } from './use-block-suite-workspace-page';
const weakMap = new WeakMap<Doc, Atom<string[]>>();
function getPageReferences(page: Doc): string[] {
return Object.values(
page.workspace.indexer.backlink.linkIndexMap[page.id] ?? {}
page.collection.indexer.backlink.linkIndexMap[page.id] ?? {}
).flatMap(linkNodes => linkNodes.map(linkNode => linkNode.pageId));
}
@@ -22,7 +22,7 @@ const getPageReferencesAtom = (page: Doc | null) => {
page.slots.ready.on(() => {
set(getPageReferences(page));
}),
page.workspace.indexer.backlink.slots.indexUpdated.on(() => {
page.collection.indexer.backlink.slots.indexUpdated.on(() => {
set(getPageReferences(page));
}),
];
@@ -37,9 +37,9 @@ const getPageReferencesAtom = (page: Doc | null) => {
};
export function useBlockSuitePageReferences(
blockSuiteWorkspace: Workspace,
docCollection: DocCollection,
pageId: string
): string[] {
const page = useBlockSuiteWorkspacePage(blockSuiteWorkspace, pageId);
const page = useDocCollectionPage(docCollection, pageId);
return useAtomValue(getPageReferencesAtom(page));
}

View File

@@ -1,13 +1,13 @@
import type { Doc, Workspace } from '@blocksuite/store';
import type { Doc, DocCollection } from '@blocksuite/store';
import { useMemo } from 'react';
export function useBlockSuiteWorkspaceHelper(blockSuiteWorkspace: Workspace) {
export function useDocCollectionHelper(docCollection: DocCollection) {
return useMemo(
() => ({
createDoc: (pageId?: string): Doc => {
return blockSuiteWorkspace.createDoc({ id: pageId });
return docCollection.createDoc({ id: pageId });
},
}),
[blockSuiteWorkspace]
[docCollection]
);
}

View File

@@ -1,14 +1,14 @@
import { assertExists } from '@blocksuite/global/utils';
import type { Workspace } from '@blocksuite/store';
import type { DocCollection } from '@blocksuite/store';
import type { Atom } from 'jotai';
import { atom, useAtomValue } from 'jotai';
import { useCallback } from 'react';
import { useJournalHelper, useJournalInfoHelper } from './use-journal';
const weakMap = new WeakMap<Workspace, Map<string, Atom<string>>>();
const weakMap = new WeakMap<DocCollection, Map<string, Atom<string>>>();
function getAtom(w: Workspace, pageId: string): Atom<string> {
function getAtom(w: DocCollection, pageId: string): Atom<string> {
if (!weakMap.has(w)) {
weakMap.set(w, new Map());
}
@@ -32,33 +32,27 @@ function getAtom(w: Workspace, pageId: string): Atom<string> {
}
}
export function useBlockSuiteWorkspacePageTitle(
blockSuiteWorkspace: Workspace,
export function useDocCollectionPageTitle(
docCollection: DocCollection,
pageId: string
) {
const titleAtom = getAtom(blockSuiteWorkspace, pageId);
const titleAtom = getAtom(docCollection, pageId);
assertExists(titleAtom);
const title = useAtomValue(titleAtom);
const { localizedJournalDate } = useJournalInfoHelper(
blockSuiteWorkspace,
pageId
);
const { localizedJournalDate } = useJournalInfoHelper(docCollection, pageId);
return localizedJournalDate || title;
}
// This hook is NOT reactive to the page title change
export function useGetBlockSuiteWorkspacePageTitle(
blockSuiteWorkspace: Workspace
) {
const { getLocalizedJournalDateString } =
useJournalHelper(blockSuiteWorkspace);
export function useGetDocCollectionPageTitle(docCollection: DocCollection) {
const { getLocalizedJournalDateString } = useJournalHelper(docCollection);
return useCallback(
(pageId: string) => {
return (
getLocalizedJournalDateString(pageId) ||
blockSuiteWorkspace.getDoc(pageId)?.meta?.title
docCollection.getDoc(pageId)?.meta?.title
);
},
[blockSuiteWorkspace, getLocalizedJournalDateString]
[docCollection, getLocalizedJournalDateString]
);
}

View File

@@ -1,26 +1,26 @@
import { DisposableGroup } from '@blocksuite/global/utils';
import type { Doc, Workspace } from '@blocksuite/store';
import type { Doc, DocCollection } from '@blocksuite/store';
import { useEffect, useState } from 'react';
export function useBlockSuiteWorkspacePage(
blockSuiteWorkspace: Workspace,
export function useDocCollectionPage(
docCollection: DocCollection,
pageId: string | null
): Doc | null {
const [page, setPage] = useState(
pageId ? blockSuiteWorkspace.getDoc(pageId) : null
pageId ? docCollection.getDoc(pageId) : null
);
useEffect(() => {
const group = new DisposableGroup();
group.add(
blockSuiteWorkspace.slots.docAdded.on(id => {
docCollection.slots.docAdded.on(id => {
if (pageId === id) {
setPage(blockSuiteWorkspace.getDoc(id));
setPage(docCollection.getDoc(id));
}
})
);
group.add(
blockSuiteWorkspace.slots.docRemoved.on(id => {
docCollection.slots.docRemoved.on(id => {
if (pageId === id) {
setPage(null);
}
@@ -29,7 +29,7 @@ export function useBlockSuiteWorkspacePage(
return () => {
group.dispose();
};
}, [blockSuiteWorkspace, pageId]);
}, [docCollection, pageId]);
useEffect(() => {
if (page && !page.loaded) {

View File

@@ -2,10 +2,10 @@ import { initEmptyPage } from '@toeverything/infra';
import dayjs from 'dayjs';
import { useCallback, useMemo } from 'react';
import type { BlockSuiteWorkspace } from '../shared';
import type { DocCollection } from '../shared';
import { timestampToLocalDate } from '../utils';
import { useCurrentWorkspacePropertiesAdapter } from './use-affine-adapter';
import { useBlockSuiteWorkspaceHelper } from './use-block-suite-workspace-helper';
import { useDocCollectionHelper } from './use-block-suite-workspace-helper';
import { useNavigateHelper } from './use-navigate-helper';
type MaybeDate = Date | string | number;
@@ -22,8 +22,8 @@ function toDayjs(j?: string | false) {
return day;
}
export const useJournalHelper = (workspace: BlockSuiteWorkspace) => {
const bsWorkspaceHelper = useBlockSuiteWorkspaceHelper(workspace);
export const useJournalHelper = (docCollection: DocCollection) => {
const bsWorkspaceHelper = useDocCollectionHelper(docCollection);
const adapter = useCurrentWorkspacePropertiesAdapter();
/**
@@ -35,7 +35,7 @@ export const useJournalHelper = (workspace: BlockSuiteWorkspace) => {
const title = day.format(JOURNAL_DATE_FORMAT);
const page = bsWorkspaceHelper.createDoc();
// set created date to match the journal date
page.workspace.setDocMeta(page.id, {
page.collection.setDocMeta(page.id, {
createDate: dayjs()
.set('year', day.year())
.set('month', day.month())
@@ -63,7 +63,7 @@ export const useJournalHelper = (workspace: BlockSuiteWorkspace) => {
const getJournalsByDate = useCallback(
(maybeDate: MaybeDate) => {
const day = dayjs(maybeDate);
return Array.from(workspace.docs.values()).filter(page => {
return Array.from(docCollection.docs.values()).filter(page => {
const pageId = page.id;
if (!isPageJournal(pageId)) return false;
if (page.meta?.trash) return false;
@@ -72,7 +72,7 @@ export const useJournalHelper = (workspace: BlockSuiteWorkspace) => {
return day.isSame(journalDate, 'day');
});
},
[adapter, isPageJournal, workspace.docs]
[adapter, isPageJournal, docCollection.docs]
);
/**
@@ -150,18 +150,18 @@ export const useJournalHelper = (workspace: BlockSuiteWorkspace) => {
};
// split useJournalRouteHelper since it requires a <Route /> context, which may not work in lit
export const useJournalRouteHelper = (workspace: BlockSuiteWorkspace) => {
export const useJournalRouteHelper = (docCollection: DocCollection) => {
const navigateHelper = useNavigateHelper();
const { getJournalByDate } = useJournalHelper(workspace);
const { getJournalByDate } = useJournalHelper(docCollection);
/**
* open journal by date, create one if not exist
*/
const openJournal = useCallback(
(maybeDate: MaybeDate) => {
const page = getJournalByDate(maybeDate);
navigateHelper.openPage(workspace.id, page.id);
navigateHelper.openPage(docCollection.id, page.id);
},
[getJournalByDate, navigateHelper, workspace.id]
[getJournalByDate, navigateHelper, docCollection.id]
);
/**
@@ -182,7 +182,7 @@ export const useJournalRouteHelper = (workspace: BlockSuiteWorkspace) => {
};
export const useJournalInfoHelper = (
workspace: BlockSuiteWorkspace,
docCollection: DocCollection,
pageId?: string | null
) => {
const {
@@ -190,7 +190,7 @@ export const useJournalInfoHelper = (
getJournalDateString,
getLocalizedJournalDateString,
isPageTodayJournal,
} = useJournalHelper(workspace);
} = useJournalHelper(docCollection);
return useMemo(
() => ({

View File

@@ -24,7 +24,7 @@ export function useRegisterWorkspaceCommands() {
const theme = useTheme();
const currentWorkspace = useService(Workspace);
const languageHelper = useLanguageHelper();
const pageHelper = usePageHelper(currentWorkspace.blockSuiteWorkspace);
const pageHelper = usePageHelper(currentWorkspace.docCollection);
const navigationHelper = useNavigateHelper();
const [editor] = useActiveBlocksuiteEditor();
@@ -45,14 +45,14 @@ export function useRegisterWorkspaceCommands() {
const unsub = registerAffineNavigationCommands({
store,
t,
workspace: currentWorkspace.blockSuiteWorkspace,
docCollection: currentWorkspace.docCollection,
navigationHelper,
});
return () => {
unsub();
};
}, [store, t, currentWorkspace.blockSuiteWorkspace, navigationHelper]);
}, [store, t, currentWorkspace.docCollection, navigationHelper]);
// register AffineSettingsCommands
useEffect(() => {