refactor(core): separate editor & doc mode (#7873)

doc.mode -> primaryMode
(*new) editor.mode

New Service:
editor service

Change Mode:

```
const editor = useService(EditorService).editor;
editor.setMode('page')
```

Change primary mode

```
const editor = useService(EditorService).editor;
editor.doc.setPrimaryMode('page')
```
This commit is contained in:
EYHN
2024-08-14 11:43:03 +00:00
parent 50948318e0
commit 89537e6892
51 changed files with 453 additions and 379 deletions

View File

@@ -10,8 +10,6 @@ import type { DocMeta } from '@blocksuite/store';
import { useLiveData, useService, WorkspaceService } from '@toeverything/infra';
import { useCallback, useEffect, useMemo } from 'react';
import { usePageHelper } from '../../components/blocksuite/block-suite-page-list/utils';
/**
* @deprecated very poor performance
*/
@@ -27,7 +25,6 @@ export const useAllPageListConfig = () => {
const workspace = currentWorkspace.docCollection;
const pageMetas = useBlockSuiteDocMeta(workspace);
const { isPreferredEdgeless } = usePageHelper(workspace);
const pageMap = useMemo(
() => Object.fromEntries(pageMetas.map(page => [page.id, page])),
[pageMetas]
@@ -58,7 +55,6 @@ export const useAllPageListConfig = () => {
return useMemo<AllPageListConfig>(() => {
return {
allPages: pageMetas,
isEdgeless: isPreferredEdgeless,
getPublicMode(id) {
const mode = shareDocs?.find(shareDoc => shareDoc.id === id)?.mode;
if (mode === PublicPageMode.Edgeless) {
@@ -83,7 +79,6 @@ export const useAllPageListConfig = () => {
};
}, [
pageMetas,
isPreferredEdgeless,
currentWorkspace.docCollection,
shareDocs,
pageMap,

View File

@@ -75,7 +75,8 @@ export function useBlockSuiteMetaHelper(docCollection: DocCollection) {
const duplicate = useAsyncCallback(
async (pageId: string, openPageAfterDuplication: boolean = true) => {
const currentPageMode = pageRecordList.doc$(pageId).value?.mode$.value;
const currentPagePrimaryMode =
pageRecordList.doc$(pageId).value?.primaryMode$.value;
const currentPageMeta = getDocMeta(pageId);
const newPage = createDoc();
const currentPage = docCollection.getDoc(pageId);
@@ -99,7 +100,9 @@ export function useBlockSuiteMetaHelper(docCollection: DocCollection) {
const newPageTitle =
currentPageMeta.title.replace(lastDigitRegex, '') + `(${newNumber})`;
pageRecordList.doc$(newPage.id).value?.setMode(currentPageMode || 'page');
pageRecordList
.doc$(newPage.id)
.value?.setPrimaryMode(currentPagePrimaryMode || 'page');
setDocTitle(newPage.id, newPageTitle);
openPageAfterDuplication && openPage(docCollection.id, newPage.id);
},

View File

@@ -5,6 +5,7 @@ import {
registerAffineCommand,
} from '@affine/core/commands';
import { track } from '@affine/core/mixpanel';
import type { Editor } from '@affine/core/modules/editor';
import { CompatibleFavoriteItemsAdapter } from '@affine/core/modules/properties';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useI18n } from '@affine/i18n';
@@ -23,10 +24,10 @@ import { useBlockSuiteMetaHelper } from './use-block-suite-meta-helper';
import { useExportPage } from './use-export-page';
import { useTrashModalHelper } from './use-trash-modal-helper';
export function useRegisterBlocksuiteEditorCommands() {
export function useRegisterBlocksuiteEditorCommands(editor: Editor) {
const doc = useService(DocService).doc;
const docId = doc.id;
const mode = useLiveData(doc.mode$);
const mode = useLiveData(editor.mode$);
const t = useI18n();
const workspace = useService(WorkspaceService).workspace;
const docCollection = workspace.docCollection;
@@ -149,7 +150,7 @@ export function useRegisterBlocksuiteEditorCommands() {
mode: mode === 'page' ? 'edgeless' : 'page',
});
doc.toggleMode();
editor.toggleMode();
toast(
mode === 'page'
? t['com.affine.toastMessage.edgelessMode']()
@@ -311,6 +312,7 @@ export function useRegisterBlocksuiteEditorCommands() {
unsubs.forEach(unsub => unsub());
};
}, [
editor,
favorite,
mode,
onClickDelete,