+ {filtered.length > 0 ? (
+ filtered.map(page => {
+ return (
+
+ );
+ })
+ ) : (
+
+ {t['com.affine.collection.emptyCollection']()}
+
+ )}
+
+ );
+};
+
export const CollectionsList = ({
docCollection: workspace,
onCreate,
diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/styles.css.ts b/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/styles.css.ts
index 5ecdb5601d..3810a90e7d 100644
--- a/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/styles.css.ts
+++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/styles.css.ts
@@ -156,3 +156,10 @@ export const docsListContainer = style({
flexDirection: 'column',
gap: 4,
});
+export const emptyCollection = style({
+ fontSize: cssVar('fontSm'),
+ textAlign: 'left',
+ paddingLeft: '32px',
+ color: cssVar('black30'),
+ userSelect: 'none',
+});
diff --git a/packages/frontend/core/src/hooks/affine/use-all-page-list-config.tsx b/packages/frontend/core/src/hooks/affine/use-all-page-list-config.tsx
index 6455f61376..ca648cfd5d 100644
--- a/packages/frontend/core/src/hooks/affine/use-all-page-list-config.tsx
+++ b/packages/frontend/core/src/hooks/affine/use-all-page-list-config.tsx
@@ -12,6 +12,9 @@ import { useCallback, useEffect, useMemo } from 'react';
import { usePageHelper } from '../../components/blocksuite/block-suite-page-list/utils';
+/**
+ * @deprecated very poor performance
+ */
export const useAllPageListConfig = () => {
const currentWorkspace = useService(WorkspaceService).workspace;
const shareDocService = useService(ShareDocsService);
diff --git a/packages/frontend/core/src/hooks/affine/use-register-blocksuite-editor-commands.tsx b/packages/frontend/core/src/hooks/affine/use-register-blocksuite-editor-commands.tsx
index aacc9bc8a3..19873f4a77 100644
--- a/packages/frontend/core/src/hooks/affine/use-register-blocksuite-editor-commands.tsx
+++ b/packages/frontend/core/src/hooks/affine/use-register-blocksuite-editor-commands.tsx
@@ -3,12 +3,10 @@ import {
PreconditionStrategy,
registerAffineCommand,
} from '@affine/core/commands';
-import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { FavoriteItemsAdapter } from '@affine/core/modules/properties';
import { mixpanel } from '@affine/core/utils';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useI18n } from '@affine/i18n';
-import { assertExists } from '@blocksuite/global/utils';
import { EdgelessIcon, HistoryIcon, PageIcon } from '@blocksuite/icons/rc';
import {
DocService,
@@ -31,15 +29,10 @@ export function useRegisterBlocksuiteEditorCommands() {
const t = useI18n();
const workspace = useService(WorkspaceService).workspace;
const docCollection = workspace.docCollection;
- const { getDocMeta } = useDocMetaHelper(docCollection);
- const currentPage = docCollection.getDoc(docId);
- assertExists(currentPage);
- const pageMeta = getDocMeta(docId);
- assertExists(pageMeta);
const favAdapter = useService(FavoriteItemsAdapter);
const favorite = useLiveData(favAdapter.isFavorite$(docId, 'doc'));
- const trash = pageMeta.trash ?? false;
+ const trash = useLiveData(doc.trash$);
const setPageHistoryModalState = useSetAtom(pageHistoryModalAtom);
@@ -52,15 +45,18 @@ export function useRegisterBlocksuiteEditorCommands() {
const { restoreFromTrash, duplicate } =
useBlockSuiteMetaHelper(docCollection);
- const exportHandler = useExportPage(currentPage);
+ const exportHandler = useExportPage(doc.blockSuiteDoc);
const { setTrashModal } = useTrashModalHelper(docCollection);
- const onClickDelete = useCallback(() => {
- setTrashModal({
- open: true,
- pageIds: [docId],
- pageTitles: [pageMeta.title],
- });
- }, [docId, pageMeta.title, setTrashModal]);
+ const onClickDelete = useCallback(
+ (title: string) => {
+ setTrashModal({
+ open: true,
+ pageIds: [docId],
+ pageTitles: [title],
+ });
+ },
+ [docId, setTrashModal]
+ );
const isCloudWorkspace = workspace.flavour === WorkspaceFlavour.AFFINE_CLOUD;
@@ -213,7 +209,7 @@ export function useRegisterBlocksuiteEditorCommands() {
icon: mode === 'page' ?