feat(core): add confirm modal to add new doc button (#6436)

This commit is contained in:
JimmFly
2024-04-03 03:14:06 +00:00
parent f93ffbeb6f
commit dde4e165c6
2 changed files with 46 additions and 12 deletions

View File

@@ -1,4 +1,10 @@
import { Button, Divider, Menu, Scrollable } from '@affine/component'; import {
Button,
Divider,
Menu,
Scrollable,
useConfirmModal,
} from '@affine/component';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks'; import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { useNavigateHelper } from '@affine/core/hooks/use-navigate-helper'; import { useNavigateHelper } from '@affine/core/hooks/use-navigate-helper';
import type { Tag } from '@affine/core/modules/tag'; import type { Tag } from '@affine/core/modules/tag';
@@ -10,6 +16,7 @@ import {
SearchIcon, SearchIcon,
ViewLayersIcon, ViewLayersIcon,
} from '@blocksuite/icons'; } from '@blocksuite/icons';
import type { Doc } from '@blocksuite/store';
import { useLiveData, useService, Workspace } from '@toeverything/infra'; import { useLiveData, useService, Workspace } from '@toeverything/infra';
import clsx from 'clsx'; import clsx from 'clsx';
import { nanoid } from 'nanoid'; import { nanoid } from 'nanoid';
@@ -80,15 +87,40 @@ export const CollectionPageListHeader = ({
const workspace = useService(Workspace); const workspace = useService(Workspace);
const { createEdgeless, createPage } = usePageHelper(workspace.docCollection); const { createEdgeless, createPage } = usePageHelper(workspace.docCollection);
const { openConfirmModal } = useConfirmModal();
const handleCreateEdgeless = useCallback(() => { const createAndAddDocument = useCallback(
const newDoc = createEdgeless(); (createDocumentFn: () => Doc) => {
collectionService.addPageToCollection(collection.id, newDoc.id); const newDoc = createDocumentFn();
}, [collection.id, collectionService, createEdgeless]); collectionService.addPageToCollection(collection.id, newDoc.id);
const handleCreatePage = useCallback(() => { },
const newDoc = createPage(); [collection.id, collectionService]
collectionService.addPageToCollection(collection.id, newDoc.id); );
}, [collection.id, collectionService, createPage]);
const onConfirmAddDocument = useCallback(
(createDocumentFn: () => Doc) => {
openConfirmModal({
title: t['com.affine.collection.add-doc.confirm.title'](),
description: t['com.affine.collection.add-doc.confirm.description'](),
cancelText: t['Cancel'](),
confirmButtonOptions: {
type: 'primary',
children: t['Confirm'](),
},
onConfirm: () => createAndAddDocument(createDocumentFn),
});
},
[openConfirmModal, t, createAndAddDocument]
);
const onCreateEdgeless = useCallback(
() => onConfirmAddDocument(createEdgeless),
[createEdgeless, onConfirmAddDocument]
);
const onCreatePage = useCallback(
() => onConfirmAddDocument(createPage),
[createPage, onConfirmAddDocument]
);
return ( return (
<> <>
@@ -110,8 +142,8 @@ export const CollectionPageListHeader = ({
<PageListNewPageButton <PageListNewPageButton
size="small" size="small"
testId="new-page-button-trigger" testId="new-page-button-trigger"
onCreateEdgeless={handleCreateEdgeless} onCreateEdgeless={onCreateEdgeless}
onCreatePage={handleCreatePage} onCreatePage={onCreatePage}
> >
<div className={styles.buttonText}>{t['New Page']()}</div> <div className={styles.buttonText}>{t['New Page']()}</div>
</PageListNewPageButton> </PageListNewPageButton>

View File

@@ -1191,5 +1191,7 @@
"unnamed": "unnamed", "unnamed": "unnamed",
"upgradeBrowser": "Please upgrade to the latest version of Chrome for the best experience.", "upgradeBrowser": "Please upgrade to the latest version of Chrome for the best experience.",
"will be moved to Trash": "{{title}} will be moved to Trash", "will be moved to Trash": "{{title}} will be moved to Trash",
"will delete member": "will delete member" "will delete member": "will delete member",
"com.affine.collection.add-doc.confirm.title": "Add new doc to this collection",
"com.affine.collection.add-doc.confirm.description": "Do you want to add a document to the current collection? If it is filtered based on rules, this will add a set of included rules."
} }