Skip to content

Commit

Permalink
fix(core): add linked doc button
Browse files Browse the repository at this point in the history
  • Loading branch information
EYHN committed Feb 25, 2025
1 parent 1bb5b07 commit d58dd8d
Showing 1 changed file with 34 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
IconButton,
MenuItem,
MenuSeparator,
toast,
Expand All @@ -22,10 +23,11 @@ import {
InformationIcon,
LinkedPageIcon,
OpenInNewIcon,
PlusIcon,
SplitViewIcon,
} from '@blocksuite/icons/rc';
import { useLiveData, useServices } from '@toeverything/infra';
import { useCallback, useMemo } from 'react';
import { useCallback, useMemo, useState } from 'react';

import type { NodeOperation } from '../../tree/types';

Expand All @@ -52,6 +54,7 @@ export const useExplorerDocNodeOperations = (
});
const { openConfirmModal } = useConfirmModal();

const [addLinkedPageLoading, setAddLinkedPageLoading] = useState(false);
const docRecord = useLiveData(docsService.list.doc$(docId));

const { createPage } = usePageHelper(
Expand Down Expand Up @@ -117,17 +120,22 @@ export const useExplorerDocNodeOperations = (
}, [docId, workbenchService.workbench]);

const handleAddLinkedPage = useAsyncCallback(async () => {
const canEdit = await guardService.can('Doc_Update', docId);
if (!canEdit) {
toast(t['com.affine.no-permission']());
return;
setAddLinkedPageLoading(true);
try {
const canEdit = await guardService.can('Doc_Update', docId);
if (!canEdit) {
toast(t['com.affine.no-permission']());
return;
}
const newDoc = createPage();
// TODO: handle timeout & error
await docsService.addLinkedDoc(docId, newDoc.id);
track.$.navigationPanel.docs.createDoc({ control: 'linkDoc' });
track.$.navigationPanel.docs.linkDoc({ control: 'createDoc' });
options.openNodeCollapsed();
} finally {
setAddLinkedPageLoading(false);
}
const newDoc = createPage();
// TODO: handle timeout & error
await docsService.addLinkedDoc(docId, newDoc.id);
track.$.navigationPanel.docs.createDoc({ control: 'linkDoc' });
track.$.navigationPanel.docs.linkDoc({ control: 'createDoc' });
options.openNodeCollapsed();
}, [createPage, guardService, docId, docsService, options, t]);

const handleToggleFavoriteDoc = useCallback(() => {
Expand All @@ -139,6 +147,20 @@ export const useExplorerDocNodeOperations = (

return useMemo(
() => [
{
index: 0,
inline: true,
view: (
<IconButton
size="16"
icon={<PlusIcon />}
tooltip={t['com.affine.rootAppSidebar.explorer.doc-add-tooltip']()}
onClick={handleAddLinkedPage}
loading={addLinkedPageLoading}
disabled={addLinkedPageLoading}
/>
),
},
{
index: 50,
view: (
Expand Down Expand Up @@ -233,6 +255,7 @@ export const useExplorerDocNodeOperations = (
},
],
[
addLinkedPageLoading,
docId,
favorite,
handleAddLinkedPage,
Expand Down

0 comments on commit d58dd8d

Please sign in to comment.