diff --git a/packages/frontend/core/src/components/hooks/use-block-suite-page-meta.ts b/packages/frontend/core/src/components/hooks/use-block-suite-page-meta.ts index 9821a15a5d631..86fd016871650 100644 --- a/packages/frontend/core/src/components/hooks/use-block-suite-page-meta.ts +++ b/packages/frontend/core/src/components/hooks/use-block-suite-page-meta.ts @@ -1,12 +1,12 @@ import { DocsService } from '@affine/core/modules/doc'; +import { JournalService } from '@affine/core/modules/journal'; import { WorkspaceService } from '@affine/core/modules/workspace'; import type { DocCollection, DocMeta } from '@blocksuite/affine/store'; -import { useService } from '@toeverything/infra'; +import { LiveData, useLiveData, useService } from '@toeverything/infra'; import { useCallback, useMemo } from 'react'; import { useAsyncCallback } from './affine-async-hooks'; import { useAllBlockSuiteDocMeta } from './use-all-block-suite-page-meta'; -import { useJournalInfoHelper } from './use-journal'; /** * Get pageMetas excluding journal pages without updatedDate @@ -15,13 +15,26 @@ import { useJournalInfoHelper } from './use-journal'; */ export function useBlockSuiteDocMeta(docCollection: DocCollection) { const pageMetas = useAllBlockSuiteDocMeta(docCollection); - const { isPageJournal } = useJournalInfoHelper(); + const journalService = useService(JournalService); + + const journalIds = useLiveData( + useMemo( + () => + LiveData.computed(get => + pageMetas + .map(meta => meta.id) + .filter(id => !!get(journalService.journalDate$(id))) + ), + [pageMetas, journalService] + ) + ); + return useMemo( () => pageMetas.filter( - pageMeta => !isPageJournal(pageMeta.id) || !!pageMeta.updatedDate + pageMeta => !journalIds.includes(pageMeta.id) || !!pageMeta.updatedDate ), - [isPageJournal, pageMetas] + [journalIds, pageMetas] ); } diff --git a/tests/affine-local/e2e/all-page.spec.ts b/tests/affine-local/e2e/all-page.spec.ts index 89a67f34cf838..2b3d1374a4ebb 100644 --- a/tests/affine-local/e2e/all-page.spec.ts +++ b/tests/affine-local/e2e/all-page.spec.ts @@ -1,4 +1,3 @@ -/* eslint-disable unicorn/prefer-dom-node-dataset */ import { test } from '@affine-test/kit/playwright'; import { changeFilter, @@ -12,7 +11,10 @@ import { selectMonthFromMonthPicker, selectTag, } from '@affine-test/kit/utils/filter'; -import { openHomePage } from '@affine-test/kit/utils/load-page'; +import { + openHomePage, + openJournalsPage, +} from '@affine-test/kit/utils/load-page'; import { clickNewPageButton, clickPageMoreActions, @@ -20,7 +22,12 @@ import { getBlockSuiteEditorTitle, waitForAllPagesLoad, waitForEditorLoad, + waitForEmptyEditor, } from '@affine-test/kit/utils/page-logic'; +import { + ensurePagePropertiesVisible, + togglePropertyListVisibility, +} from '@affine-test/kit/utils/properties'; import { clickSideBarAllPageButton } from '@affine-test/kit/utils/sidebar'; import { expect } from '@playwright/test'; @@ -457,3 +464,29 @@ test('create a tag and delete it', async ({ page }) => { const newCell = page.getByTestId('tag-list-item').getByText('test-tag'); await expect(newCell).not.toBeVisible(); }); + +test('create a empty page and turn it into journal, should disappear in all docs', async ({ + page, +}) => { + await openHomePage(page); + await waitForEditorLoad(page); + await clickNewPageButton(page); + await clickSideBarAllPageButton(page); + const docItem = page + .locator('[data-testid="page-list-item-title-text"]') + .first(); + const docTitle = await docItem.textContent(); + await expect(docTitle).toBe('Untitled'); + // open and turn it into journal + await docItem.click(); + await waitForEmptyEditor(page); + await ensurePagePropertiesVisible(page); + await togglePropertyListVisibility(page); + const journalProperty = page.locator('[data-info-id="journal"]').first(); + await journalProperty.locator('[data-property-value="true"]').click(); + // back to all docs, the journal page should disappear + await clickSideBarAllPageButton(page); + await waitForAllPagesLoad(page); + const newDocTitle = await docItem.textContent(); + await expect(newDocTitle).not.toBe(docTitle); +});