feat(core): drop doc onto split view (#9487)

fix AF-2068, AF-2069, AF-1175, AF-2061, AF-2079, AF-2034, AF-2080, AF-1960, AF-2081

1. replace `dnd-kit` with `@atlaskit/pragmatic-drag-and-drop`
2. allow creating split views by drag & drop the following
   a. WorkbenchLinks (route links), like journals, trash, all docs
   b. doc refs
   c. tags/collection
3. style adjustments to split view
4. remove split view's feature flag and make it GA for electron

https://github.com/user-attachments/assets/6a3e4a25-faa2-4215-8eb0-983f44db6e8c
This commit is contained in:
pengx17
2025-01-08 05:05:33 +00:00
parent c0ed74dfed
commit a4841bbfa3
53 changed files with 1574 additions and 905 deletions

View File

@@ -11,7 +11,6 @@ import { IsFavoriteIcon } from '@affine/core/components/pure/icons';
import { CollectionService } from '@affine/core/modules/collection';
import type { NodeOperation } from '@affine/core/modules/explorer';
import { CompatibleFavoriteItemsAdapter } from '@affine/core/modules/favorite';
import { FeatureFlagService } from '@affine/core/modules/feature-flag';
import { WorkbenchService } from '@affine/core/modules/workbench';
import { WorkspaceService } from '@affine/core/modules/workspace';
import { useI18n } from '@affine/i18n';
@@ -161,10 +160,6 @@ export const useExplorerCollectionNodeOperationsMenu = (
onOpenEdit: () => void
): NodeOperation[] => {
const t = useI18n();
const { featureFlagService } = useServices({ FeatureFlagService });
const enableMultiView = useLiveData(
featureFlagService.flags.enable_multi_view.$
);
const {
favorite,
@@ -246,7 +241,7 @@ export const useExplorerCollectionNodeOperationsMenu = (
</MenuItem>
),
},
...(BUILD_CONFIG.isElectron && enableMultiView
...(BUILD_CONFIG.isElectron
? [
{
index: 99,
@@ -279,7 +274,6 @@ export const useExplorerCollectionNodeOperationsMenu = (
},
],
[
enableMultiView,
favorite,
handleAddDocToCollection,
handleDeleteCollection,

View File

@@ -13,7 +13,6 @@ import { IsFavoriteIcon } from '@affine/core/components/pure/icons';
import { DocsService } from '@affine/core/modules/doc';
import type { NodeOperation } from '@affine/core/modules/explorer';
import { CompatibleFavoriteItemsAdapter } from '@affine/core/modules/favorite';
import { FeatureFlagService } from '@affine/core/modules/feature-flag';
import { WorkbenchService } from '@affine/core/modules/workbench';
import { WorkspaceService } from '@affine/core/modules/workspace';
import { preventDefault } from '@affine/core/utils';
@@ -171,7 +170,6 @@ export const useExplorerDocNodeOperationsMenu = (
}
): NodeOperation[] => {
const t = useI18n();
const featureFlagService = useService(FeatureFlagService);
const {
favorite,
handleAddLinkedPage,
@@ -186,9 +184,6 @@ export const useExplorerDocNodeOperationsMenu = (
const docService = useService(DocsService);
const docRecord = useLiveData(docService.list.doc$(docId));
const title = useLiveData(docRecord?.title$);
const enableMultiView = useLiveData(
featureFlagService.flags.enable_multi_view.$
);
return useMemo(
() => [
@@ -258,7 +253,7 @@ export const useExplorerDocNodeOperationsMenu = (
</MenuItem>
),
},
...(BUILD_CONFIG.isElectron && enableMultiView
...(BUILD_CONFIG.isElectron
? [
{
index: 100,
@@ -305,7 +300,6 @@ export const useExplorerDocNodeOperationsMenu = (
],
[
docId,
enableMultiView,
favorite,
handleAddLinkedPage,
handleDuplicate,

View File

@@ -11,7 +11,6 @@ import { WorkspaceDialogService } from '@affine/core/modules/dialogs';
import { DocsService } from '@affine/core/modules/doc';
import type { NodeOperation } from '@affine/core/modules/explorer';
import { FavoriteService } from '@affine/core/modules/favorite';
import { FeatureFlagService } from '@affine/core/modules/feature-flag';
import { GlobalCacheService } from '@affine/core/modules/storage';
import { TagService } from '@affine/core/modules/tag';
import { WorkbenchService } from '@affine/core/modules/workbench';
@@ -24,7 +23,7 @@ import {
PlusIcon,
SplitViewIcon,
} from '@blocksuite/icons/rc';
import { useLiveData, useService, useServices } from '@toeverything/infra';
import { useLiveData, useServices } from '@toeverything/infra';
import { useCallback, useMemo } from 'react';
import { TagRenameSubMenu } from './dialog';
@@ -219,10 +218,6 @@ export const useExplorerTagNodeOperationsMenu = (
}
): NodeOperation[] => {
const t = useI18n();
const featureFlagService = useService(FeatureFlagService);
const enableMultiView = useLiveData(
featureFlagService.flags.enable_multi_view.$
);
const {
favorite,
handleNewDoc,
@@ -266,7 +261,7 @@ export const useExplorerTagNodeOperationsMenu = (
</MenuItem>
),
},
...(BUILD_CONFIG.isElectron && enableMultiView
...(BUILD_CONFIG.isElectron
? [
{
index: 100,
@@ -312,7 +307,6 @@ export const useExplorerTagNodeOperationsMenu = (
},
],
[
enableMultiView,
favorite,
handleChangeNameOrColor,
handleMoveToTrash,