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:
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
},
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user