Skip to content

Commit eb16c27

Browse files
committed
feat(core): apply default doc mode setting (#8083)
1 parent 01b2339 commit eb16c27

File tree

6 files changed

+51
-38
lines changed

6 files changed

+51
-38
lines changed

packages/frontend/core/src/components/affine/setting-modal/general-setting/editor/general.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,8 +406,9 @@ export const General = () => {
406406
<FontFamilySettings />
407407
<CustomFontFamilySettings />
408408
<NewDocDefaultModeSettings />
409+
{/* //TODO(@akumatus): implement these settings
409410
<DeFaultCodeBlockSettings />
410-
<SpellCheckSettings />
411+
<SpellCheckSettings /> */}
411412
</SettingWrapper>
412413
);
413414
};

packages/frontend/core/src/components/blocksuite/block-suite-page-list/utils.tsx

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,41 @@
11
import { toast } from '@affine/component';
22
import { useDocCollectionHelper } from '@affine/core/hooks/use-block-suite-workspace-helper';
3-
import { EditorSettingService } from '@affine/core/modules/editor-settting';
43
import { WorkbenchService } from '@affine/core/modules/workbench';
54
import type { DocMode } from '@blocksuite/blocks';
6-
import {
7-
DocsService,
8-
initEmptyPage,
9-
useLiveData,
10-
useServices,
11-
} from '@toeverything/infra';
5+
import { DocsService, initEmptyPage, useServices } from '@toeverything/infra';
126
import { useCallback, useMemo } from 'react';
137

148
import type { DocCollection } from '../../../shared';
159

1610
export const usePageHelper = (docCollection: DocCollection) => {
17-
const { docsService, workbenchService, editorSettingService } = useServices({
11+
const { docsService, workbenchService } = useServices({
1812
DocsService,
1913
WorkbenchService,
20-
EditorSettingService,
2114
});
2215
const workbench = workbenchService.workbench;
2316
const { createDoc } = useDocCollectionHelper(docCollection);
2417
const docRecordList = docsService.list;
25-
const settings = useLiveData(editorSettingService.editorSetting.settings$);
2618

2719
const createPageAndOpen = useCallback(
2820
(mode?: DocMode, open?: boolean | 'new-tab') => {
2921
const page = createDoc();
3022
initEmptyPage(page);
31-
const primaryMode = mode || settings.newDocDefaultMode;
32-
docRecordList.doc$(page.id).value?.setPrimaryMode(primaryMode as DocMode);
23+
if (mode) {
24+
docRecordList.doc$(page.id).value?.setPrimaryMode(mode);
25+
}
26+
3327
if (open !== false)
3428
workbench.openDoc(page.id, {
3529
at: open === 'new-tab' ? 'new-tab' : 'active',
3630
});
3731
return page;
3832
},
39-
[createDoc, docRecordList, settings.newDocDefaultMode, workbench]
33+
[createDoc, docRecordList, workbench]
4034
);
4135

4236
const createEdgelessAndOpen = useCallback(
4337
(open?: boolean | 'new-tab') => {
44-
return createPageAndOpen('edgeless' as DocMode, open);
38+
return createPageAndOpen('edgeless', open);
4539
},
4640
[createPageAndOpen]
4741
);

packages/frontend/core/src/components/root-app-sidebar/index.tsx

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { openSettingModalAtom } from '@affine/core/atoms';
22
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
33
import { track } from '@affine/core/mixpanel';
4-
import { EditorSettingService } from '@affine/core/modules/editor-settting';
54
import {
65
ExplorerCollections,
76
ExplorerFavorites,
@@ -13,7 +12,6 @@ import { CMDKQuickSearchService } from '@affine/core/modules/quicksearch/service
1312
import { isNewTabTrigger } from '@affine/core/utils';
1413
import { apis, events } from '@affine/electron-api';
1514
import { useI18n } from '@affine/i18n';
16-
import type { DocMode } from '@blocksuite/blocks';
1715
import {
1816
AllDocsIcon,
1917
GithubIcon,
@@ -79,17 +77,12 @@ export type RootAppSidebarProps = {
7977
*
8078
*/
8179
export const RootAppSidebar = (): ReactElement => {
82-
const {
83-
workbenchService,
84-
workspaceService,
85-
cMDKQuickSearchService,
86-
editorSettingService,
87-
} = useServices({
88-
WorkspaceService,
89-
WorkbenchService,
90-
CMDKQuickSearchService,
91-
EditorSettingService,
92-
});
80+
const { workbenchService, workspaceService, cMDKQuickSearchService } =
81+
useServices({
82+
WorkspaceService,
83+
WorkbenchService,
84+
CMDKQuickSearchService,
85+
});
9386
const currentWorkspace = workspaceService.workspace;
9487
const { appSettings } = useAppSettingHelper();
9588
const docCollection = currentWorkspace.docCollection;
@@ -106,18 +99,16 @@ export const RootAppSidebar = (): ReactElement => {
10699

107100
const pageHelper = usePageHelper(currentWorkspace.docCollection);
108101

109-
const settings = useLiveData(editorSettingService.editorSetting.settings$);
110-
111102
const onClickNewPage = useAsyncCallback(
112103
async (e?: MouseEvent) => {
113104
const page = pageHelper.createPage(
114-
settings.newDocDefaultMode as DocMode,
105+
undefined,
115106
isNewTabTrigger(e) ? 'new-tab' : true
116107
);
117108
page.load();
118-
track.$.navigationPanel.$.createDoc({ mode: settings.newDocDefaultMode });
109+
track.$.navigationPanel.$.createDoc();
119110
},
120-
[pageHelper, settings.newDocDefaultMode]
111+
[pageHelper]
121112
);
122113

123114
useEffect(() => {

packages/frontend/core/src/hooks/use-journal.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { i18nTime } from '@affine/i18n';
2-
import { initEmptyPage, useService } from '@toeverything/infra';
2+
import { DocsService, initEmptyPage, useService } from '@toeverything/infra';
33
import dayjs from 'dayjs';
44
import { useCallback, useMemo } from 'react';
55

@@ -24,6 +24,7 @@ function toDayjs(j?: string | false) {
2424

2525
export const useJournalHelper = (docCollection: DocCollection) => {
2626
const bsWorkspaceHelper = useDocCollectionHelper(docCollection);
27+
const docsService = useService(DocsService);
2728
const adapter = useCurrentWorkspacePropertiesAdapter();
2829

2930
/**
@@ -34,6 +35,7 @@ export const useJournalHelper = (docCollection: DocCollection) => {
3435
const day = dayjs(maybeDate);
3536
const title = day.format(JOURNAL_DATE_FORMAT);
3637
const page = bsWorkspaceHelper.createDoc();
38+
docsService.list.setPrimaryMode(page.id, 'page');
3739
// set created date to match the journal date
3840
page.collection.setDocMeta(page.id, {
3941
createDate: dayjs()
@@ -47,7 +49,7 @@ export const useJournalHelper = (docCollection: DocCollection) => {
4749
adapter.setJournalPageDateString(page.id, title);
4850
return page;
4951
},
50-
[adapter, bsWorkspaceHelper]
52+
[adapter, bsWorkspaceHelper, docsService.list]
5153
);
5254

5355
const isPageJournal = useCallback(

packages/frontend/core/src/layouts/workspace-layout.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
throwIfAborted,
1515
useLiveData,
1616
useService,
17+
useServices,
1718
WorkspaceService,
1819
} from '@toeverything/infra';
1920
import { useAtomValue, useSetAtom } from 'jotai';
@@ -46,6 +47,7 @@ import { useRegisterFindInPageCommands } from '../hooks/affine/use-register-find
4647
import { useSubscriptionNotifyReader } from '../hooks/affine/use-subscription-notify';
4748
import { useRegisterWorkspaceCommands } from '../hooks/use-register-workspace-commands';
4849
import { AppTabsHeader } from '../modules/app-tabs-header';
50+
import { EditorSettingService } from '../modules/editor-settting';
4951
import { NavigationButtons } from '../modules/navigation';
5052
import { useRegisterNavigationCommands } from '../modules/navigation/view/use-register-navigation-commands';
5153
import { QuickSearchContainer } from '../modules/quicksearch';
@@ -73,8 +75,13 @@ export const WorkspaceLayoutProviders = ({ children }: PropsWithChildren) => {
7375
const t = useI18n();
7476
const pushGlobalLoadingEvent = useSetAtom(pushGlobalLoadingEventAtom);
7577
const resolveGlobalLoadingEvent = useSetAtom(resolveGlobalLoadingEventAtom);
76-
const currentWorkspace = useService(WorkspaceService).workspace;
77-
const docsList = useService(DocsService).list;
78+
const { workspaceService, docsService } = useServices({
79+
WorkspaceService,
80+
DocsService,
81+
EditorSettingService,
82+
});
83+
const currentWorkspace = workspaceService.workspace;
84+
const docsList = docsService.list;
7885

7986
const workbench = useService(WorkbenchService).workbench;
8087
useEffect(() => {
Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,25 @@
1-
import { Service } from '@toeverything/infra';
1+
import type { Workspace } from '@toeverything/infra';
2+
import {
3+
DocsService,
4+
OnEvent,
5+
Service,
6+
WorkspaceInitialized,
7+
} from '@toeverything/infra';
28

39
import { EditorSetting } from '../entities/editor-setting';
410

11+
@OnEvent(WorkspaceInitialized, e => e.onWorkspaceInitialized)
512
export class EditorSettingService extends Service {
613
editorSetting = this.framework.createEntity(EditorSetting);
14+
15+
onWorkspaceInitialized(workspace: Workspace) {
16+
// set default mode for new doc
17+
18+
workspace.docCollection.slots.docCreated.on(docId => {
19+
const preferMode = this.editorSetting.settings$.value.newDocDefaultMode;
20+
const docsService = workspace.scope.get(DocsService);
21+
docsService.list.setPrimaryMode(docId, preferMode);
22+
});
23+
// never dispose, because this service always live longer than workspace
24+
}
725
}

0 commit comments

Comments
 (0)