mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-01 01:29:31 +08:00
fix: modify with new blocksuite version about subpage (#2060)
This commit is contained in:
@@ -5,11 +5,14 @@ import {
|
||||
import { useCallback } from 'react';
|
||||
|
||||
import type { BlockSuiteWorkspace } from '../../shared';
|
||||
import { useReferenceLinkHelper } from './use-reference-link-helper';
|
||||
|
||||
export function useBlockSuiteMetaHelper(
|
||||
blockSuiteWorkspace: BlockSuiteWorkspace
|
||||
) {
|
||||
const { setPageMeta, getPageMeta } = usePageMetaHelper(blockSuiteWorkspace);
|
||||
const { addReferenceLink, removeReferenceLink } =
|
||||
useReferenceLinkHelper(blockSuiteWorkspace);
|
||||
const metas = useBlockSuitePageMeta(blockSuiteWorkspace);
|
||||
|
||||
const removeToTrash = useCallback(
|
||||
@@ -29,17 +32,10 @@ export function useBlockSuiteMetaHelper(
|
||||
|
||||
// Just the trash root need delete its id from parent
|
||||
if (parentMeta && isRoot) {
|
||||
const deleteIndex = parentMeta.subpageIds.findIndex(
|
||||
id => id === pageId
|
||||
);
|
||||
const newSubpageIds = [...parentMeta.subpageIds];
|
||||
newSubpageIds.splice(deleteIndex, 1);
|
||||
setPageMeta(parentMeta.id, {
|
||||
subpageIds: newSubpageIds,
|
||||
});
|
||||
removeReferenceLink(pageId);
|
||||
}
|
||||
},
|
||||
[getPageMeta, metas, setPageMeta]
|
||||
[getPageMeta, metas, removeReferenceLink, setPageMeta]
|
||||
);
|
||||
|
||||
const restoreFromTrash = useCallback(
|
||||
@@ -47,11 +43,7 @@ export function useBlockSuiteMetaHelper(
|
||||
const { subpageIds = [], trashRelate } = getPageMeta(pageId) ?? {};
|
||||
|
||||
if (trashRelate) {
|
||||
const parentMeta = metas.find(m => m.id === trashRelate);
|
||||
parentMeta &&
|
||||
setPageMeta(parentMeta.id, {
|
||||
subpageIds: [...parentMeta.subpageIds, pageId],
|
||||
});
|
||||
addReferenceLink(trashRelate, pageId);
|
||||
}
|
||||
|
||||
setPageMeta(pageId, {
|
||||
@@ -63,7 +55,7 @@ export function useBlockSuiteMetaHelper(
|
||||
restoreFromTrash(id);
|
||||
});
|
||||
},
|
||||
[getPageMeta, metas, setPageMeta]
|
||||
[addReferenceLink, getPageMeta, setPageMeta]
|
||||
);
|
||||
|
||||
return {
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
import { useCallback } from 'react';
|
||||
|
||||
import type { BlockSuiteWorkspace } from '../../shared';
|
||||
|
||||
export function useReferenceLinkHelper(
|
||||
blockSuiteWorkspace: BlockSuiteWorkspace
|
||||
) {
|
||||
const addReferenceLink = useCallback(
|
||||
(pageId: string, referenceId: string) => {
|
||||
const page = blockSuiteWorkspace?.getPage(pageId);
|
||||
if (!page) {
|
||||
return;
|
||||
}
|
||||
const text = page.Text.fromDelta([
|
||||
{
|
||||
insert: ' ',
|
||||
attributes: {
|
||||
reference: {
|
||||
type: 'Subpage',
|
||||
pageId: referenceId,
|
||||
},
|
||||
},
|
||||
},
|
||||
]);
|
||||
const [frame] = page.getBlockByFlavour('affine:frame');
|
||||
|
||||
frame && page.addBlock('affine:paragraph', { text }, frame.id);
|
||||
},
|
||||
[blockSuiteWorkspace]
|
||||
);
|
||||
const removeReferenceLink = useCallback(
|
||||
(deleteId: string) => {
|
||||
blockSuiteWorkspace.indexer.backlink.removeSubpageNode(
|
||||
blockSuiteWorkspace,
|
||||
deleteId
|
||||
);
|
||||
},
|
||||
[blockSuiteWorkspace]
|
||||
);
|
||||
|
||||
return {
|
||||
addReferenceLink,
|
||||
removeReferenceLink,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user