diff --git a/apps/web/src/pages/workspace/[workspaceId]/[pageId].tsx b/apps/web/src/pages/workspace/[workspaceId]/[pageId].tsx
index 2bc29df93a..8e3cad4c31 100644
--- a/apps/web/src/pages/workspace/[workspaceId]/[pageId].tsx
+++ b/apps/web/src/pages/workspace/[workspaceId]/[pageId].tsx
@@ -9,7 +9,7 @@ import { PageLoading } from '../../../components/pure/loading';
import { useReferenceLink } from '../../../hooks/affine/use-reference-link';
import { useCurrentPageId } from '../../../hooks/current/use-current-page-id';
import { useCurrentWorkspace } from '../../../hooks/current/use-current-workspace';
-import { usePageMeta } from '../../../hooks/use-page-meta';
+import { usePageMeta, usePageMetaHelper } from '../../../hooks/use-page-meta';
import { usePinboardHandler } from '../../../hooks/use-pinboard-handler';
import { useSyncRecentViewsWithRouter } from '../../../hooks/use-recent-views';
import { useRouterHelper } from '../../../hooks/use-router-helper';
@@ -32,11 +32,12 @@ function enableFullFlags(blockSuiteWorkspace: BlockSuiteWorkspace) {
const WorkspaceDetail: React.FC = () => {
const router = useRouter();
const { openPage } = useRouterHelper(router);
- const [pageId] = useCurrentPageId();
+ const [currentPageId] = useCurrentPageId();
const [currentWorkspace] = useCurrentWorkspace();
-
+ const blockSuiteWorkspace = currentWorkspace?.blockSuiteWorkspace ?? null;
+ const { setPageMeta, getPageMeta } = usePageMetaHelper(blockSuiteWorkspace);
const { deletePin } = usePinboardHandler({
- blockSuiteWorkspace: currentWorkspace?.blockSuiteWorkspace ?? null,
+ blockSuiteWorkspace,
metas: usePageMeta(currentWorkspace?.blockSuiteWorkspace ?? null ?? null),
});
@@ -56,7 +57,20 @@ const WorkspaceDetail: React.FC = () => {
},
[deletePin]
),
+ subpageLinked: useCallback(
+ ({ pageId }: { pageId: string }) => {
+ const meta = currentPageId && getPageMeta(currentPageId);
+ if (!meta || meta.subpageIds?.includes(pageId)) {
+ return;
+ }
+ setPageMeta(currentPageId, {
+ subpageIds: [...(meta.subpageIds ?? []), pageId],
+ });
+ },
+ [currentPageId, getPageMeta, setPageMeta]
+ ),
});
+
useEffect(() => {
if (currentWorkspace) {
enableFullFlags(currentWorkspace.blockSuiteWorkspace);
@@ -65,18 +79,24 @@ const WorkspaceDetail: React.FC = () => {
if (currentWorkspace === null) {
return ;
}
- if (!pageId) {
+ if (!currentPageId) {
return ;
}
if (currentWorkspace.flavour === WorkspaceFlavour.AFFINE) {
const PageDetail = WorkspacePlugins[currentWorkspace.flavour].UI.PageDetail;
return (
-
+
);
} else if (currentWorkspace.flavour === WorkspaceFlavour.LOCAL) {
const PageDetail = WorkspacePlugins[currentWorkspace.flavour].UI.PageDetail;
return (
-
+
);
}
throw new Unreachable();