mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-01 01:29:31 +08:00
fix(core): fix duplicate in all page (#11229)
This commit is contained in:
@@ -1,20 +1,15 @@
|
||||
import { useAsyncCallback } from '@affine/core/components/hooks/affine-async-hooks';
|
||||
import { useDocMetaHelper } from '@affine/core/components/hooks/use-block-suite-page-meta';
|
||||
import { useDocCollectionHelper } from '@affine/core/components/hooks/use-block-suite-workspace-helper';
|
||||
import { DocsService } from '@affine/core/modules/doc';
|
||||
import { WorkspaceService } from '@affine/core/modules/workspace';
|
||||
import type { DocMode } from '@blocksuite/affine/model';
|
||||
import { useService } from '@toeverything/infra';
|
||||
import { useCallback } from 'react';
|
||||
import { applyUpdate, encodeStateAsUpdate } from 'yjs';
|
||||
|
||||
import { useNavigateHelper } from '../use-navigate-helper';
|
||||
|
||||
export function useBlockSuiteMetaHelper() {
|
||||
const workspace = useService(WorkspaceService).workspace;
|
||||
const { setDocMeta, getDocMeta, setDocTitle } = useDocMetaHelper();
|
||||
const { createDoc } = useDocCollectionHelper(workspace.docCollection);
|
||||
const { openPage } = useNavigateHelper();
|
||||
const docsService = useService(DocsService);
|
||||
const docRecordList = useService(DocsService).list;
|
||||
|
||||
// TODO-Doma
|
||||
@@ -48,47 +43,11 @@ export function useBlockSuiteMetaHelper() {
|
||||
|
||||
const duplicate = useAsyncCallback(
|
||||
async (pageId: string, openPageAfterDuplication: boolean = true) => {
|
||||
const currentPagePrimaryMode =
|
||||
docRecordList.doc$(pageId).value?.primaryMode$.value;
|
||||
const currentPageMeta = getDocMeta(pageId);
|
||||
const newPage = createDoc();
|
||||
const currentPage = workspace.docCollection.getDoc(pageId);
|
||||
|
||||
newPage.load();
|
||||
if (!currentPageMeta || !currentPage) {
|
||||
return;
|
||||
}
|
||||
|
||||
const update = encodeStateAsUpdate(currentPage.spaceDoc);
|
||||
applyUpdate(newPage.spaceDoc, update);
|
||||
|
||||
setDocMeta(newPage.id, {
|
||||
tags: currentPageMeta.tags,
|
||||
});
|
||||
|
||||
const lastDigitRegex = /\((\d+)\)$/;
|
||||
const match = currentPageMeta?.title?.match(lastDigitRegex);
|
||||
const newNumber = match ? parseInt(match[1], 10) + 1 : 1;
|
||||
|
||||
const newPageTitle =
|
||||
currentPageMeta?.title?.replace(lastDigitRegex, '') + `(${newNumber})`;
|
||||
|
||||
docRecordList
|
||||
.doc$(newPage.id)
|
||||
.value?.setPrimaryMode(currentPagePrimaryMode || ('page' as DocMode));
|
||||
setDocTitle(newPage.id, newPageTitle);
|
||||
const newPageId = await docsService.duplicate(pageId);
|
||||
openPageAfterDuplication &&
|
||||
openPage(workspace.docCollection.id, newPage.id);
|
||||
openPage(workspace.docCollection.id, newPageId);
|
||||
},
|
||||
[
|
||||
docRecordList,
|
||||
getDocMeta,
|
||||
createDoc,
|
||||
workspace.docCollection,
|
||||
setDocMeta,
|
||||
setDocTitle,
|
||||
openPage,
|
||||
]
|
||||
[docsService, openPage, workspace.docCollection.id]
|
||||
);
|
||||
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user