feat(core): add notification list (#10480)

This commit is contained in:
EYHN
2025-03-11 06:23:33 +00:00
parent 06889295e0
commit ea07aa8607
30 changed files with 906 additions and 59 deletions

View File

@@ -0,0 +1,23 @@
import { NotificationCountService } from '@affine/core/modules/notification';
import { WorkbenchService } from '@affine/core/modules/workbench';
import { useLiveData, useService } from '@toeverything/infra';
import { useEffect } from 'react';
export const DocumentTitle = () => {
const notificationCountService = useService(NotificationCountService);
const notificationCount = useLiveData(notificationCountService.count$);
const workbenchService = useService(WorkbenchService);
const workbenchView = useLiveData(workbenchService.workbench.activeView$);
const viewTitle = useLiveData(workbenchView.title$);
useEffect(() => {
const prefix = notificationCount > 0 ? `(${notificationCount}) ` : '';
document.title = prefix + (viewTitle ? `${viewTitle} · AFFiNE` : 'AFFiNE');
return () => {
document.title = 'AFFiNE';
};
}, [notificationCount, viewTitle]);
return null;
};

View File

@@ -44,7 +44,6 @@ import { AffineErrorBoundary } from '../../../../components/affine/affine-error-
import { GlobalPageHistoryModal } from '../../../../components/affine/page-history-modal';
import { useRegisterBlocksuiteEditorCommands } from '../../../../components/hooks/affine/use-register-blocksuite-editor-commands';
import { useActiveBlocksuiteEditor } from '../../../../components/hooks/use-block-suite-editor';
import { usePageDocumentTitle } from '../../../../components/hooks/use-global-state';
import { PageDetailEditor } from '../../../../components/page-detail-editor';
import { TrashPageFooter } from '../../../../components/pure/trash-page-footer';
import { TopTip } from '../../../../components/top-tip';
@@ -160,8 +159,6 @@ const DetailPageImpl = memo(function DetailPageImpl() {
}, [globalContext, isActiveView, isInTrash]);
useRegisterBlocksuiteEditorCommands(editor, isActiveView);
const title = useLiveData(doc.title$);
usePageDocumentTitle(title);
const onLoad = useCallback(
(editorContainer: AffineEditorContainer) => {

View File

@@ -8,6 +8,7 @@ import { SWRConfigProvider } from '@affine/core/components/providers/swr-config-
import { WorkspaceSideEffects } from '@affine/core/components/providers/workspace-side-effects';
import { AIIsland } from '@affine/core/desktop/components/ai-island';
import { AppContainer } from '@affine/core/desktop/components/app-container';
import { DocumentTitle } from '@affine/core/desktop/components/document-title';
import { WorkspaceDialogs } from '@affine/core/desktop/dialogs';
import { PeekViewManagerModal } from '@affine/core/modules/peek-view';
import { QuotaCheck } from '@affine/core/modules/quota';
@@ -36,6 +37,7 @@ export const WorkspaceLayout = function WorkspaceLayout({
<AiLoginRequiredModal />
<WorkspaceSideEffects />
<PeekViewManagerModal />
<DocumentTitle />
<WorkspaceLayoutInner>{children}</WorkspaceLayoutInner>
{/* should show after workspace loaded */}

View File

@@ -2,7 +2,6 @@ import { Scrollable } from '@affine/component';
import type { AffineEditorContainer } from '@affine/core/blocksuite/block-suite-editor';
import { EditorOutlineViewer } from '@affine/core/blocksuite/outline-viewer';
import { useActiveBlocksuiteEditor } from '@affine/core/components/hooks/use-block-suite-editor';
import { usePageDocumentTitle } from '@affine/core/components/hooks/use-global-state';
import { useNavigateHelper } from '@affine/core/components/hooks/use-navigate-helper';
import { PageDetailEditor } from '@affine/core/components/page-detail-editor';
import { AppContainer } from '@affine/core/desktop/components/app-container';
@@ -189,8 +188,6 @@ const SharePageInner = ({
const pageTitle = useLiveData(page?.title$);
const { jumpToPageBlock, openPage } = useNavigateHelper();
usePageDocumentTitle(pageTitle);
const onEditorLoad = useCallback(
(editorContainer: AffineEditorContainer) => {
setActiveBlocksuiteEditor(editorContainer);