From 6b9f77f511264c3905a424c26b873d7e7dccc475 Mon Sep 17 00:00:00 2001 From: Joooye_34 Date: Wed, 27 Dec 2023 15:25:26 +0000 Subject: [PATCH] feat(core): set document title when detail page render (#5418) --- .../frontend/core/src/hooks/use-global-state.ts | 16 ++++++++++++++++ .../pages/workspace/detail-page/detail-page.tsx | 2 ++ 2 files changed, 18 insertions(+) create mode 100644 packages/frontend/core/src/hooks/use-global-state.ts diff --git a/packages/frontend/core/src/hooks/use-global-state.ts b/packages/frontend/core/src/hooks/use-global-state.ts new file mode 100644 index 0000000000..b42becafe9 --- /dev/null +++ b/packages/frontend/core/src/hooks/use-global-state.ts @@ -0,0 +1,16 @@ +import { noop } from 'lodash-es'; +import { useEffect } from 'react'; + +export function useDocumentTitle(newTitle?: string | null) { + useEffect(() => { + if (environment.isDesktop || !newTitle) { + return noop; + } + + const oldTitle = document.title; + document.title = newTitle; + return () => { + document.title = oldTitle; + }; + }, [newTitle]); +} diff --git a/packages/frontend/core/src/pages/workspace/detail-page/detail-page.tsx b/packages/frontend/core/src/pages/workspace/detail-page/detail-page.tsx index d5ba576e7f..2716ffa861 100644 --- a/packages/frontend/core/src/pages/workspace/detail-page/detail-page.tsx +++ b/packages/frontend/core/src/pages/workspace/detail-page/detail-page.tsx @@ -35,6 +35,7 @@ import { PageDetailEditor } from '../../../components/page-detail-editor'; import { TrashPageFooter } from '../../../components/pure/trash-page-footer'; import { TopTip } from '../../../components/top-tip'; import { useRegisterBlocksuiteEditorCommands } from '../../../hooks/affine/use-register-blocksuite-editor-commands'; +import { useDocumentTitle } from '../../../hooks/use-global-state'; import { useNavigateHelper } from '../../../hooks/use-navigate-helper'; import { performanceRenderLogger } from '../../../shared'; import { PageNotFound } from '../../404'; @@ -114,6 +115,7 @@ const DetailPageImpl = memo(function DetailPageImpl({ page }: { page: Page }) { const mode = useAtomValue(currentModeAtom); const setPageMode = useSetAtom(setPageModeAtom); useRegisterBlocksuiteEditorCommands(currentPageId, mode); + useDocumentTitle(pageMeta?.title ? `${pageMeta.title} ยท AFFiNE` : null); const onLoad = useCallback( (page: Page, editor: AffineEditorContainer) => {