diff --git a/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx b/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx
index 61fa64f673..2af73d846c 100644
--- a/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx
+++ b/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx
@@ -2,6 +2,7 @@ import { toast } from '@affine/component';
import { useBlockSuiteMetaHelper } from '@affine/core/hooks/affine/use-block-suite-meta-helper';
import { useTrashModalHelper } from '@affine/core/hooks/affine/use-trash-modal-helper';
import { useBlockSuiteDocMeta } from '@affine/core/hooks/use-block-suite-page-meta';
+import { Workbench } from '@affine/core/modules/workbench';
import type { Collection, Filter } from '@affine/env/filter';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
@@ -33,6 +34,7 @@ const usePageOperationsRenderer = () => {
currentWorkspace.docCollection
);
const t = useAFFiNEI18N();
+ const workbench = useService(Workbench);
const pageOperationsRenderer = useCallback(
(page: DocMeta) => {
@@ -48,6 +50,7 @@ const usePageOperationsRenderer = () => {
isPublic={!!page.isPublic}
onDisablePublicSharing={onDisablePublicSharing}
link={`/workspace/${currentWorkspace.id}/${page.id}`}
+ onOpenInSplitView={() => workbench.openPage(page.id, { at: 'tail' })}
onDuplicate={() => {
duplicate(page.id, false);
}}
@@ -70,7 +73,14 @@ const usePageOperationsRenderer = () => {
/>
);
},
- [currentWorkspace.id, setTrashModal, t, toggleFavorite, duplicate]
+ [
+ currentWorkspace.id,
+ workbench,
+ duplicate,
+ setTrashModal,
+ toggleFavorite,
+ t,
+ ]
);
return pageOperationsRenderer;
diff --git a/packages/frontend/core/src/components/page-list/operation-cell.tsx b/packages/frontend/core/src/components/page-list/operation-cell.tsx
index 3602ada676..9fd9328c66 100644
--- a/packages/frontend/core/src/components/page-list/operation-cell.tsx
+++ b/packages/frontend/core/src/components/page-list/operation-cell.tsx
@@ -7,6 +7,7 @@ import {
toast,
Tooltip,
} from '@affine/component';
+import { useAppSettingHelper } from '@affine/core/hooks/affine/use-app-setting-helper';
import type { Collection, DeleteCollectionInfo } from '@affine/env/filter';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import {
@@ -20,6 +21,7 @@ import {
MoreVerticalIcon,
OpenInNewIcon,
ResetIcon,
+ SplitViewIcon,
} from '@blocksuite/icons';
import { useCallback, useState } from 'react';
import { Link } from 'react-router-dom';
@@ -45,6 +47,7 @@ export interface PageOperationCellProps {
onRemoveToTrash: () => void;
onDuplicate: () => void;
onDisablePublicSharing: () => void;
+ onOpenInSplitView: () => void;
}
export const PageOperationCell = ({
@@ -55,8 +58,10 @@ export const PageOperationCell = ({
onRemoveToTrash,
onDuplicate,
onDisablePublicSharing,
+ onOpenInSplitView,
}: PageOperationCellProps) => {
const t = useAFFiNEI18N();
+ const { appSettings } = useAppSettingHelper();
const [openDisableShared, setOpenDisableShared] = useState(false);
const OperationMenu = (
<>
@@ -84,6 +89,20 @@ export const PageOperationCell = ({
? t['com.affine.favoritePageOperation.remove']()
: t['com.affine.favoritePageOperation.add']()}
+
+ {environment.isDesktop && appSettings.enableMultiView ? (
+
+ ) : null}
+
{!environment.isDesktop && (
void;
}>) => {
+ const { appSettings } = useAppSettingHelper();
const service = useService(CollectionService);
+ const workbench = useService(Workbench);
const { open: openEditCollectionModal, node: editModal } =
useEditCollection(config);
const t = useAFFiNEI18N();
@@ -71,6 +80,10 @@ export const CollectionOperations = ({
});
}, [openEditCollectionModal, collection, service]);
+ const openCollectionSplitView = useCallback(() => {
+ workbench.openCollection(collection.id, { at: 'tail' });
+ }, [collection.id, workbench]);
+
const actions = useMemo<
Array<
| {
@@ -104,6 +117,19 @@ export const CollectionOperations = ({
name: t['com.affine.collection.menu.edit'](),
click: showEdit,
},
+ ...(appSettings.enableMultiView
+ ? [
+ {
+ icon: (
+