fix(core): title could not be changed when creating a new doc (#8203)

Before change, the title could not be modified from outside the editor without refreshing:

https://github.com/user-attachments/assets/536acba1-4e31-418a-bc1a-8578e3128bba

after:

https://github.com/user-attachments/assets/30a4b270-b8b1-4787-acef-0ab2a72a8f74
This commit is contained in:
JimmFly
2024-09-12 07:55:22 +00:00
parent cc5a6e6d40
commit 2cba8a4ccd
27 changed files with 138 additions and 145 deletions
@@ -9,7 +9,7 @@ import { apis } from '@affine/electron-api';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useI18n } from '@affine/i18n';
import {
initEmptyPage,
DocsService,
useLiveData,
useService,
WorkspacesService,
@@ -179,6 +179,7 @@ export const CreateWorkspaceModal = ({
const [step, setStep] = useState<CreateWorkspaceStep>();
const t = useI18n();
const workspacesService = useService(WorkspacesService);
const docsService = useService(DocsService);
const [loading, setLoading] = useState(false);
// TODO(@Peng): maybe refactor using xstate?
@@ -242,9 +243,8 @@ export const CreateWorkspaceModal = ({
async workspace => {
workspace.meta.initialize();
workspace.meta.setName(name);
const page = workspace.createDoc();
const page = docsService.createDoc();
defaultDocId = page.id;
initEmptyPage(page);
}
);
onCreate(id, defaultDocId);
@@ -252,7 +252,7 @@ export const CreateWorkspaceModal = ({
setLoading(false);
},
[loading, onCreate, workspacesService]
[docsService, loading, onCreate, workspacesService]
);
const onOpenChange = useCallback(
@@ -39,7 +39,6 @@ export const EmptyDocs = ({
undefined,
isNewTabTrigger(e) ? 'new-tab' : true
);
doc.load();
if (tag) tag.tag(doc.id);
},
@@ -239,7 +239,7 @@ export const useRestorePage = (
const { trigger: recover, isMutating } = useMutation({
mutation: recoverDocMutation,
});
const { getDocMeta, setDocTitle } = useDocMetaHelper(docCollection);
const { getDocMeta, setDocTitle } = useDocMetaHelper();
const onRestore = useMemo(() => {
return async (version: string, update: Uint8Array) => {
@@ -95,7 +95,7 @@ export function AffinePageReference({
mode?: DocMode;
params?: URLSearchParams;
}) {
const pageMetaHelper = useDocMetaHelper(docCollection);
const pageMetaHelper = useDocMetaHelper();
const journalHelper = useJournalHelper(docCollection);
const t = useI18n();
@@ -120,7 +120,7 @@ export const AppearanceSettings = () => {
) : null}
{runtimeConfig.enableThemeEditor ? <ThemeEditorSetting /> : null}
</SettingWrapper>
{/* //TODO(@JimmFly): remove Page component when stable release */}
{/* // TODO(@JimmFly): remove Page component when stable release */}
<Page />
{runtimeConfig.enableNewSettingUnstableApi ? (
<SettingWrapper title={t['com.affine.appearanceSettings.date.title']()}>
@@ -459,7 +459,7 @@ export const General = () => {
<FontFamilySettings />
<CustomFontFamilySettings />
<NewDocDefaultModeSettings />
{/* //TODO(@akumatus): implement these settings
{/* // TODO(@akumatus): implement these settings
<DeFaultCodeBlockSettings />
<SpellCheckSettings /> */}
</SettingWrapper>
@@ -81,12 +81,12 @@ export const PageHeaderMenuButton = ({
const { favorite, toggleFavorite } = useFavorite(pageId);
const { duplicate } = useBlockSuiteMetaHelper(docCollection);
const { duplicate } = useBlockSuiteMetaHelper();
const { importFile } = usePageHelper(docCollection);
const { setTrashModal } = useTrashModalHelper(docCollection);
const { setTrashModal } = useTrashModalHelper();
const [isEditing, setEditing] = useState(!page.readonly);
const { setDocReadonly } = useDocMetaHelper(docCollection);
const { setDocReadonly } = useDocMetaHelper();
const view = useService(ViewService).view;
@@ -1,8 +1,7 @@
import { toast } from '@affine/component';
import { useDocCollectionHelper } from '@affine/core/hooks/use-block-suite-workspace-helper';
import { WorkbenchService } from '@affine/core/modules/workbench';
import type { DocMode } from '@blocksuite/blocks';
import { DocsService, initEmptyPage, useServices } from '@toeverything/infra';
import { DocsService, useServices } from '@toeverything/infra';
import { useCallback, useMemo } from 'react';
import type { DocCollection } from '../../../shared';
@@ -13,13 +12,11 @@ export const usePageHelper = (docCollection: DocCollection) => {
WorkbenchService,
});
const workbench = workbenchService.workbench;
const { createDoc } = useDocCollectionHelper(docCollection);
const docRecordList = docsService.list;
const createPageAndOpen = useCallback(
(mode?: DocMode, open?: boolean | 'new-tab') => {
const page = createDoc();
initEmptyPage(page);
const page = docsService.createDoc();
if (mode) {
docRecordList.doc$(page.id).value?.setPrimaryMode(mode);
}
@@ -30,7 +27,7 @@ export const usePageHelper = (docCollection: DocCollection) => {
});
return page;
},
[createDoc, docRecordList, workbench]
[docRecordList, docsService, workbench]
);
const createEdgelessAndOpen = useCallback(
@@ -19,7 +19,7 @@ import {
SearchIcon,
ViewLayersIcon,
} from '@blocksuite/icons/rc';
import type { Doc as BlockSuiteDoc } from '@blocksuite/store';
import type { DocRecord } from '@toeverything/infra';
import {
useLiveData,
useService,
@@ -122,7 +122,7 @@ export const CollectionPageListHeader = ({
const { openConfirmModal } = useConfirmModal();
const createAndAddDocument = useCallback(
(createDocumentFn: () => BlockSuiteDoc) => {
(createDocumentFn: () => DocRecord) => {
const newDoc = createDocumentFn();
collectionService.addPageToCollection(collection.id, newDoc.id);
},
@@ -130,7 +130,7 @@ export const CollectionPageListHeader = ({
);
const onConfirmAddDocument = useCallback(
(createDocumentFn: () => BlockSuiteDoc) => {
(createDocumentFn: () => DocRecord) => {
openConfirmModal({
title: t['com.affine.collection.add-doc.confirm.title'](),
description: t['com.affine.collection.add-doc.confirm.description'](),
@@ -122,7 +122,7 @@ export const VirtualizedPageList = ({
return <PageListHeader />;
}, [collection, currentWorkspace.id, tag]);
const { setTrashModal } = useTrashModalHelper(currentWorkspace.docCollection);
const { setTrashModal } = useTrashModalHelper();
const handleMultiDelete = useCallback(() => {
if (filteredSelectedPageIds.length === 0) {
@@ -80,10 +80,10 @@ export const PageOperationCell = ({
featureFlagService.flags.enable_multi_view.$
);
const currentWorkspace = workspaceService.workspace;
const { setTrashModal } = useTrashModalHelper(currentWorkspace.docCollection);
const { setTrashModal } = useTrashModalHelper();
const favourite = useLiveData(favAdapter.isFavorite$(page.id, 'doc'));
const workbench = workbenchService.workbench;
const { duplicate } = useBlockSuiteMetaHelper(currentWorkspace.docCollection);
const { duplicate } = useBlockSuiteMetaHelper();
const blocksuiteDoc = currentWorkspace.docCollection.getDoc(page.id);
const [openInfoModal, setOpenInfoModal] = useState(false);
@@ -93,7 +93,7 @@ export const PageOperationCell = ({
}, []);
const onDisablePublicSharing = useCallback(() => {
//TODO(@EYHN): implement disable public sharing
// TODO(@EYHN): implement disable public sharing
toast('Successfully disabled', {
portal: document.body,
});
@@ -23,7 +23,7 @@ const TagListTitleCell = ({
>
{title || t['Untitled']()}
</div>
{/* //TODO(@EYHN): when indexer is ready, add this back
{/* // TODO(@EYHN): when indexer is ready, add this back
<div
data-testid="page-list-item-preview-text"
className={styles.titleCellPreview}
@@ -18,8 +18,7 @@ import { VirtualizedList } from './virtualized-list';
export const VirtualizedTrashList = () => {
const currentWorkspace = useService(WorkspaceService).workspace;
const docCollection = currentWorkspace.docCollection;
const { restoreFromTrash, permanentlyDeletePage } =
useBlockSuiteMetaHelper(docCollection);
const { restoreFromTrash, permanentlyDeletePage } = useBlockSuiteMetaHelper();
const pageMetas = useBlockSuiteDocMeta(docCollection);
const filteredPageMetas = useFilteredPageMetas(pageMetas, {
trash: true,
@@ -19,7 +19,7 @@ export const TrashPageFooter = () => {
const t = useI18n();
const { appSettings } = useAppSettingHelper();
const { jumpToSubPath } = useNavigateHelper();
const { restoreFromTrash } = useBlockSuiteMetaHelper(docCollection);
const { restoreFromTrash } = useBlockSuiteMetaHelper();
const [open, setOpen] = useState(false);
const hintText = t['com.affine.cmdk.affine.editor.trash-footer-hint']();
@@ -99,11 +99,7 @@ export const RootAppSidebar = (): ReactElement => {
const onClickNewPage = useAsyncCallback(
async (e?: MouseEvent) => {
const page = pageHelper.createPage(
undefined,
isNewTabTrigger(e) ? 'new-tab' : true
);
page.load();
pageHelper.createPage(undefined, isNewTabTrigger(e) ? 'new-tab' : true);
track.$.navigationPanel.$.createDoc();
},
[pageHelper]