feat(core): add new doc default mode setting (#7990)

https://github.com/user-attachments/assets/523b14f3-ee42-4061-8ca2-221e071d5cc9
This commit is contained in:
JimmFly
2024-08-28 02:35:27 +00:00
parent c53adbc7e8
commit 09ab922572
14 changed files with 191 additions and 69 deletions
@@ -4,6 +4,7 @@ import {
MenuSeparator,
useConfirmModal,
} from '@affine/component';
import { usePageHelper } from '@affine/core/components/blocksuite/block-suite-page-list/utils';
import { IsFavoriteIcon } from '@affine/core/components/pure/icons';
import { useDeleteCollectionInfo } from '@affine/core/hooks/affine/use-delete-collection-info';
import { track } from '@affine/core/mixpanel';
@@ -19,10 +20,10 @@ import {
SplitViewIcon,
} from '@blocksuite/icons/rc';
import {
DocsService,
FeatureFlagService,
useLiveData,
useServices,
WorkspaceService,
} from '@toeverything/infra';
import { useCallback, useMemo } from 'react';
@@ -36,19 +37,23 @@ export const useExplorerCollectionNodeOperations = (
const t = useI18n();
const {
workbenchService,
docsService,
workspaceService,
collectionService,
compatibleFavoriteItemsAdapter,
featureFlagService,
} = useServices({
DocsService,
WorkbenchService,
WorkspaceService,
CollectionService,
CompatibleFavoriteItemsAdapter,
FeatureFlagService,
});
const deleteInfo = useDeleteCollectionInfo();
const { createPage } = usePageHelper(
workspaceService.workspace.docCollection
);
const enableMultiView = useLiveData(
featureFlagService.flags.enable_multi_view.$
);
@@ -62,7 +67,7 @@ export const useExplorerCollectionNodeOperations = (
const { openConfirmModal } = useConfirmModal();
const createAndAddDocument = useCallback(() => {
const newDoc = docsService.createDoc();
const newDoc = createPage();
collectionService.addPageToCollection(collectionId, newDoc.id);
track.$.navigationPanel.collections.createDoc();
track.$.navigationPanel.collections.addDocToCollection({
@@ -73,7 +78,7 @@ export const useExplorerCollectionNodeOperations = (
}, [
collectionId,
collectionService,
docsService,
createPage,
onOpenCollapsed,
workbenchService.workbench,
]);
@@ -5,6 +5,7 @@ import {
toast,
useConfirmModal,
} from '@affine/component';
import { usePageHelper } from '@affine/core/components/blocksuite/block-suite-page-list/utils';
import { IsFavoriteIcon } from '@affine/core/components/pure/icons';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { track } from '@affine/core/mixpanel';
@@ -24,6 +25,7 @@ import {
FeatureFlagService,
useLiveData,
useServices,
WorkspaceService,
} from '@toeverything/infra';
import { useCallback, useMemo } from 'react';
@@ -39,12 +41,14 @@ export const useExplorerDocNodeOperations = (
const t = useI18n();
const {
workbenchService,
workspaceService,
docsService,
compatibleFavoriteItemsAdapter,
featureFlagService,
} = useServices({
DocsService,
WorkbenchService,
WorkspaceService,
CompatibleFavoriteItemsAdapter,
FeatureFlagService,
});
@@ -55,6 +59,10 @@ export const useExplorerDocNodeOperations = (
const docRecord = useLiveData(docsService.list.doc$(docId));
const { createPage } = usePageHelper(
workspaceService.workspace.docCollection
);
const favorite = useLiveData(
useMemo(() => {
return compatibleFavoriteItemsAdapter.isFavorite$(docId, 'doc');
@@ -109,14 +117,14 @@ export const useExplorerDocNodeOperations = (
}, [docId, workbenchService.workbench]);
const handleAddLinkedPage = useAsyncCallback(async () => {
const newDoc = docsService.createDoc();
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' });
workbenchService.workbench.openDoc(newDoc.id);
options.openNodeCollapsed();
}, [docsService, docId, workbenchService.workbench, options]);
}, [createPage, docsService, docId, workbenchService.workbench, options]);
const handleToggleFavoriteDoc = useCallback(() => {
compatibleFavoriteItemsAdapter.toggle(docId, 'doc');
@@ -9,6 +9,7 @@ import {
MenuSub,
notify,
} from '@affine/component';
import { usePageHelper } from '@affine/core/components/blocksuite/block-suite-page-list/utils';
import {
useSelectCollection,
useSelectDoc,
@@ -34,10 +35,10 @@ import {
TagsIcon,
} from '@blocksuite/icons/rc';
import {
DocsService,
FeatureFlagService,
useLiveData,
useServices,
WorkspaceService,
} from '@toeverything/infra';
import { difference } from 'lodash-es';
import { useCallback, useMemo, useState } from 'react';
@@ -186,12 +187,13 @@ export const ExplorerFolderNodeFolder = ({
node: FolderNode;
} & GenericExplorerNode) => {
const t = useI18n();
const { docsService, workbenchService, featureFlagService } = useServices({
DocsService,
WorkbenchService,
CompatibleFavoriteItemsAdapter,
FeatureFlagService,
});
const { workbenchService, workspaceService, featureFlagService } =
useServices({
WorkbenchService,
WorkspaceService,
CompatibleFavoriteItemsAdapter,
FeatureFlagService,
});
const openDocsSelector = useSelectDoc();
const openTagsSelector = useSelectTag();
const openCollectionsSelector = useSelectCollection();
@@ -202,6 +204,9 @@ export const ExplorerFolderNodeFolder = ({
const [collapsed, setCollapsed] = useState(true);
const [newFolderId, setNewFolderId] = useState<string | null>(null);
const { createPage } = usePageHelper(
workspaceService.workspace.docCollection
);
const handleDelete = useCallback(() => {
node.delete();
track.$.navigationPanel.organize.deleteOrganizeItem({
@@ -545,7 +550,7 @@ export const ExplorerFolderNodeFolder = ({
);
const handleNewDoc = useCallback(() => {
const newDoc = docsService.createDoc();
const newDoc = createPage();
node.createLink('doc', newDoc.id, node.indexAt('before'));
workbenchService.workbench.openDoc(newDoc.id);
track.$.navigationPanel.folders.createDoc();
@@ -554,7 +559,7 @@ export const ExplorerFolderNodeFolder = ({
target: 'doc',
});
setCollapsed(false);
}, [docsService, node, workbenchService.workbench]);
}, [createPage, node, workbenchService.workbench]);
const handleCreateSubfolder = useCallback(() => {
const newFolderId = node.createFolder(
@@ -1,4 +1,5 @@
import { IconButton, MenuItem, MenuSeparator, toast } from '@affine/component';
import { usePageHelper } from '@affine/core/components/blocksuite/block-suite-page-list/utils';
import { IsFavoriteIcon } from '@affine/core/components/pure/icons';
import { track } from '@affine/core/mixpanel';
import { FavoriteService } from '@affine/core/modules/favorite';
@@ -16,6 +17,7 @@ import {
FeatureFlagService,
useLiveData,
useServices,
WorkspaceService,
} from '@toeverything/infra';
import { useCallback, useMemo } from 'react';
@@ -31,13 +33,14 @@ export const useExplorerTagNodeOperations = (
): NodeOperation[] => {
const t = useI18n();
const {
docsService,
workbenchService,
workspaceService,
tagService,
favoriteService,
featureFlagService,
} = useServices({
WorkbenchService,
WorkspaceService,
TagService,
DocsService,
FavoriteService,
@@ -52,15 +55,19 @@ export const useExplorerTagNodeOperations = (
featureFlagService.flags.enable_multi_view.$
);
const { createPage } = usePageHelper(
workspaceService.workspace.docCollection
);
const handleNewDoc = useCallback(() => {
if (tagRecord) {
const newDoc = docsService.createDoc();
const newDoc = createPage();
tagRecord?.tag(newDoc.id);
track.$.navigationPanel.tags.createDoc();
workbenchService.workbench.openDoc(newDoc.id);
openNodeCollapsed();
}
}, [docsService, openNodeCollapsed, tagRecord, workbenchService.workbench]);
}, [createPage, openNodeCollapsed, tagRecord, workbenchService.workbench]);
const handleMoveToTrash = useCallback(() => {
tagService.tagList.deleteTag(tagId);
@@ -3,6 +3,7 @@ import {
IconButton,
useDropTarget,
} from '@affine/component';
import { usePageHelper } from '@affine/core/components/blocksuite/block-suite-page-list/utils';
import { track } from '@affine/core/mixpanel';
import {
DropEffect,
@@ -18,7 +19,11 @@ import type { AffineDNDData } from '@affine/core/types/dnd';
import { isNewTabTrigger } from '@affine/core/utils';
import { useI18n } from '@affine/i18n';
import { PlusIcon } from '@blocksuite/icons/rc';
import { DocsService, useLiveData, useServices } from '@toeverything/infra';
import {
useLiveData,
useServices,
WorkspaceService,
} from '@toeverything/infra';
import { type MouseEventHandler, useCallback } from 'react';
import { ExplorerService } from '../../../services/explorer';
@@ -36,13 +41,17 @@ import {
import { RootEmpty } from './empty';
export const ExplorerFavorites = () => {
const { favoriteService, docsService, workbenchService, explorerService } =
useServices({
FavoriteService,
DocsService,
WorkbenchService,
ExplorerService,
});
const {
favoriteService,
workspaceService,
workbenchService,
explorerService,
} = useServices({
FavoriteService,
WorkbenchService,
WorkspaceService,
ExplorerService,
});
const explorerSection = explorerService.sections.favorites;
@@ -52,6 +61,10 @@ export const ExplorerFavorites = () => {
const t = useI18n();
const { createPage } = usePageHelper(
workspaceService.workspace.docCollection
);
const handleDrop = useCallback(
(data: DropTargetDropEvent<AffineDNDData>) => {
if (
@@ -75,7 +88,7 @@ export const ExplorerFavorites = () => {
const handleCreateNewFavoriteDoc: MouseEventHandler = useCallback(
e => {
const newDoc = docsService.createDoc();
const newDoc = createPage();
favoriteService.favoriteList.add(
'doc',
newDoc.id,
@@ -87,7 +100,7 @@ export const ExplorerFavorites = () => {
explorerSection.setCollapsed(false);
},
[
docsService,
createPage,
explorerSection,
favoriteService.favoriteList,
workbenchService.workbench,