diff --git a/apps/web/src/components/blocksuite/block-suite-page-list/index.tsx b/apps/web/src/components/blocksuite/block-suite-page-list/index.tsx index 89c6b2c20f..7740051868 100644 --- a/apps/web/src/components/blocksuite/block-suite-page-list/index.tsx +++ b/apps/web/src/components/blocksuite/block-suite-page-list/index.tsx @@ -13,6 +13,7 @@ import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { EdgelessIcon, PageIcon } from '@blocksuite/icons'; import type { PageMeta } from '@blocksuite/store'; import { useBlockSuitePageMeta } from '@toeverything/hooks/use-block-suite-page-meta'; +import { getPagePreviewText } from '@toeverything/hooks/use-block-suite-page-preview'; import { useAtom } from 'jotai'; import type React from 'react'; import { useMemo } from 'react'; @@ -123,6 +124,8 @@ export const BlockSuitePageList: React.FC = ({ if (listType === 'trash') { const pageList: TrashListData[] = list.map(pageMeta => { + const page = blockSuiteWorkspace.getPage(pageMeta.id); + const preview = page ? getPagePreviewText(page) : undefined; return { icon: isPreferredEdgeless(pageMeta.id) ? ( @@ -131,6 +134,7 @@ export const BlockSuitePageList: React.FC = ({ ), pageId: pageMeta.id, title: pageMeta.title, + preview, createDate: new Date(pageMeta.createDate), trashDate: pageMeta.trashDate ? new Date(pageMeta.trashDate) @@ -153,10 +157,13 @@ export const BlockSuitePageList: React.FC = ({ } const pageList: ListData[] = list.map(pageMeta => { + const page = blockSuiteWorkspace.getPage(pageMeta.id); + const preview = page ? getPagePreviewText(page) : undefined; return { icon: isPreferredEdgeless(pageMeta.id) ? : , pageId: pageMeta.id, title: pageMeta.title, + preview, favorite: !!pageMeta.favorite, isPublicPage: !!pageMeta.isPublic, createDate: new Date(pageMeta.createDate), diff --git a/packages/hooks/src/use-block-suite-page-preview.ts b/packages/hooks/src/use-block-suite-page-preview.ts index 276aafc77e..f9bda362fb 100644 --- a/packages/hooks/src/use-block-suite-page-preview.ts +++ b/packages/hooks/src/use-block-suite-page-preview.ts @@ -5,11 +5,15 @@ import { atom } from 'jotai'; const weakMap = new WeakMap>(); -const getPagePreviewText = (page: Page) => { +export const getPagePreviewText = (page: Page) => { + // TODO this is incorrect, since the order of blocks is not guaranteed const paragraphBlocks = page.getBlockByFlavour( 'affine:paragraph' ) as ParagraphBlockModel[]; - const text = paragraphBlocks.map(block => block.text.toString()).join('\n'); + const text = paragraphBlocks + .slice(0, 10) + .map(block => block.text.toString()) + .join('\n'); return text.slice(0, 30); };