mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-12 04:18:54 +00:00
fix(core): restore lost activation state of sidebar menu items (#6520)
https://github.com/toeverything/AFFiNE/assets/102217452/41a53a43-e17d-41b5-b8e5-2ca42bcfae0a
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import { useBlockSuitePageReferences } from '@affine/core/hooks/use-block-suite-page-references';
|
import { useBlockSuitePageReferences } from '@affine/core/hooks/use-block-suite-page-references';
|
||||||
|
import { Workbench } from '@affine/core/modules/workbench';
|
||||||
import { useAFFiNEI18N } from '@affine/i18n/hooks';
|
import { useAFFiNEI18N } from '@affine/i18n/hooks';
|
||||||
import { EdgelessIcon, PageIcon } from '@blocksuite/icons';
|
import { EdgelessIcon, PageIcon } from '@blocksuite/icons';
|
||||||
import type { DocCollection, DocMeta } from '@blocksuite/store';
|
import type { DocCollection, DocMeta } from '@blocksuite/store';
|
||||||
@@ -6,7 +7,6 @@ import { useDraggable } from '@dnd-kit/core';
|
|||||||
import * as Collapsible from '@radix-ui/react-collapsible';
|
import * as Collapsible from '@radix-ui/react-collapsible';
|
||||||
import { PageRecordList, useLiveData, useService } from '@toeverything/infra';
|
import { PageRecordList, useLiveData, useService } from '@toeverything/infra';
|
||||||
import React, { useCallback, useMemo } from 'react';
|
import React, { useCallback, useMemo } from 'react';
|
||||||
import { useParams } from 'react-router-dom';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
type DNDIdentifier,
|
type DNDIdentifier,
|
||||||
@@ -35,12 +35,13 @@ export const Page = ({
|
|||||||
allPageMeta: Record<string, DocMeta>;
|
allPageMeta: Record<string, DocMeta>;
|
||||||
}) => {
|
}) => {
|
||||||
const [collapsed, setCollapsed] = React.useState(true);
|
const [collapsed, setCollapsed] = React.useState(true);
|
||||||
const params = useParams();
|
const workbench = useService(Workbench);
|
||||||
|
const location = useLiveData(workbench.location$);
|
||||||
|
|
||||||
const t = useAFFiNEI18N();
|
const t = useAFFiNEI18N();
|
||||||
|
|
||||||
const pageId = page.id;
|
const pageId = page.id;
|
||||||
const active = params.pageId === pageId;
|
const active = location.pathname === '/' + pageId;
|
||||||
const pageRecord = useLiveData(useService(PageRecordList).record$(pageId));
|
const pageRecord = useLiveData(useService(PageRecordList).record$(pageId));
|
||||||
const pageMode = useLiveData(pageRecord?.mode$);
|
const pageMode = useLiveData(pageRecord?.mode$);
|
||||||
const dragItemId = getDNDId('collection-list', 'doc', pageId, parentId);
|
const dragItemId = getDNDId('collection-list', 'doc', pageId, parentId);
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import { useBlockSuitePageReferences } from '@affine/core/hooks/use-block-suite-page-references';
|
import { useBlockSuitePageReferences } from '@affine/core/hooks/use-block-suite-page-references';
|
||||||
|
import { Workbench } from '@affine/core/modules/workbench';
|
||||||
import { useAFFiNEI18N } from '@affine/i18n/hooks';
|
import { useAFFiNEI18N } from '@affine/i18n/hooks';
|
||||||
import { EdgelessIcon, PageIcon } from '@blocksuite/icons';
|
import { EdgelessIcon, PageIcon } from '@blocksuite/icons';
|
||||||
import type { DocCollection, DocMeta } from '@blocksuite/store';
|
import type { DocCollection, DocMeta } from '@blocksuite/store';
|
||||||
import * as Collapsible from '@radix-ui/react-collapsible';
|
import * as Collapsible from '@radix-ui/react-collapsible';
|
||||||
import { PageRecordList, useLiveData, useService } from '@toeverything/infra';
|
import { PageRecordList, useLiveData, useService } from '@toeverything/infra';
|
||||||
import { useMemo, useState } from 'react';
|
import { useMemo, useState } from 'react';
|
||||||
import { useParams } from 'react-router-dom';
|
|
||||||
|
|
||||||
import { MenuLinkItem } from '../../../app-sidebar';
|
import { MenuLinkItem } from '../../../app-sidebar';
|
||||||
import * as styles from '../favorite/styles.css';
|
import * as styles from '../favorite/styles.css';
|
||||||
@@ -24,8 +24,9 @@ export const ReferencePage = ({
|
|||||||
parentIds,
|
parentIds,
|
||||||
}: ReferencePageProps) => {
|
}: ReferencePageProps) => {
|
||||||
const t = useAFFiNEI18N();
|
const t = useAFFiNEI18N();
|
||||||
const params = useParams();
|
const workbench = useService(Workbench);
|
||||||
const active = params.pageId === pageId;
|
const location = useLiveData(workbench.location$);
|
||||||
|
const active = location.pathname === '/' + pageId;
|
||||||
|
|
||||||
const pageRecord = useLiveData(useService(PageRecordList).record$(pageId));
|
const pageRecord = useLiveData(useService(PageRecordList).record$(pageId));
|
||||||
const pageMode = useLiveData(pageRecord?.mode$);
|
const pageMode = useLiveData(pageRecord?.mode$);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import {
|
|||||||
parseDNDId,
|
parseDNDId,
|
||||||
} from '@affine/core/hooks/affine/use-global-dnd-helper';
|
} from '@affine/core/hooks/affine/use-global-dnd-helper';
|
||||||
import { useBlockSuitePageReferences } from '@affine/core/hooks/use-block-suite-page-references';
|
import { useBlockSuitePageReferences } from '@affine/core/hooks/use-block-suite-page-references';
|
||||||
|
import { Workbench } from '@affine/core/modules/workbench';
|
||||||
import { useAFFiNEI18N } from '@affine/i18n/hooks';
|
import { useAFFiNEI18N } from '@affine/i18n/hooks';
|
||||||
import { EdgelessIcon, PageIcon } from '@blocksuite/icons';
|
import { EdgelessIcon, PageIcon } from '@blocksuite/icons';
|
||||||
import { type AnimateLayoutChanges, useSortable } from '@dnd-kit/sortable';
|
import { type AnimateLayoutChanges, useSortable } from '@dnd-kit/sortable';
|
||||||
@@ -10,7 +11,6 @@ import { CSS } from '@dnd-kit/utilities';
|
|||||||
import * as Collapsible from '@radix-ui/react-collapsible';
|
import * as Collapsible from '@radix-ui/react-collapsible';
|
||||||
import { PageRecordList, useLiveData, useService } from '@toeverything/infra';
|
import { PageRecordList, useLiveData, useService } from '@toeverything/infra';
|
||||||
import { useMemo, useState } from 'react';
|
import { useMemo, useState } from 'react';
|
||||||
import { useParams } from 'react-router-dom';
|
|
||||||
|
|
||||||
import { MenuLinkItem } from '../../../app-sidebar';
|
import { MenuLinkItem } from '../../../app-sidebar';
|
||||||
import { DragMenuItemOverlay } from '../components/drag-menu-item-overlay';
|
import { DragMenuItemOverlay } from '../components/drag-menu-item-overlay';
|
||||||
@@ -33,8 +33,9 @@ export const FavouriteDocSidebarNavItem = ({
|
|||||||
sortable?: boolean;
|
sortable?: boolean;
|
||||||
}) => {
|
}) => {
|
||||||
const t = useAFFiNEI18N();
|
const t = useAFFiNEI18N();
|
||||||
const params = useParams();
|
const workbench = useService(Workbench);
|
||||||
const linkActive = params.pageId === pageId;
|
const location = useLiveData(workbench.location$);
|
||||||
|
const linkActive = location.pathname === '/' + pageId;
|
||||||
const pageRecord = useLiveData(useService(PageRecordList).record$(pageId));
|
const pageRecord = useLiveData(useService(PageRecordList).record$(pageId));
|
||||||
const pageMode = useLiveData(pageRecord?.mode$);
|
const pageMode = useLiveData(pageRecord?.mode$);
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,11 @@ import {
|
|||||||
useJournalInfoHelper,
|
useJournalInfoHelper,
|
||||||
useJournalRouteHelper,
|
useJournalRouteHelper,
|
||||||
} from '@affine/core/hooks/use-journal';
|
} from '@affine/core/hooks/use-journal';
|
||||||
|
import { Workbench } from '@affine/core/modules/workbench';
|
||||||
import type { DocCollection } from '@affine/core/shared';
|
import type { DocCollection } from '@affine/core/shared';
|
||||||
import { useAFFiNEI18N } from '@affine/i18n/hooks';
|
import { useAFFiNEI18N } from '@affine/i18n/hooks';
|
||||||
import { TodayIcon, TomorrowIcon, YesterdayIcon } from '@blocksuite/icons';
|
import { TodayIcon, TomorrowIcon, YesterdayIcon } from '@blocksuite/icons';
|
||||||
import { Doc, useServiceOptional } from '@toeverything/infra';
|
import { useLiveData, useService } from '@toeverything/infra';
|
||||||
import { useParams } from 'react-router-dom';
|
|
||||||
|
|
||||||
import { MenuItem } from '../app-sidebar';
|
import { MenuItem } from '../app-sidebar';
|
||||||
|
|
||||||
@@ -18,17 +18,16 @@ export const AppSidebarJournalButton = ({
|
|||||||
docCollection,
|
docCollection,
|
||||||
}: AppSidebarJournalButtonProps) => {
|
}: AppSidebarJournalButtonProps) => {
|
||||||
const t = useAFFiNEI18N();
|
const t = useAFFiNEI18N();
|
||||||
const currentPage = useServiceOptional(Doc);
|
const workbench = useService(Workbench);
|
||||||
|
const location = useLiveData(workbench.location$);
|
||||||
const { openToday } = useJournalRouteHelper(docCollection);
|
const { openToday } = useJournalRouteHelper(docCollection);
|
||||||
const { journalDate, isJournal } = useJournalInfoHelper(
|
const { journalDate, isJournal } = useJournalInfoHelper(
|
||||||
docCollection,
|
docCollection,
|
||||||
currentPage?.id
|
location.pathname.split('/')[1]
|
||||||
);
|
);
|
||||||
const params = useParams();
|
|
||||||
const isJournalActive = isJournal && !!params.pageId;
|
|
||||||
|
|
||||||
const Icon =
|
const Icon =
|
||||||
isJournalActive && journalDate
|
isJournal && journalDate
|
||||||
? journalDate.isBefore(new Date(), 'day')
|
? journalDate.isBefore(new Date(), 'day')
|
||||||
? YesterdayIcon
|
? YesterdayIcon
|
||||||
: journalDate.isAfter(new Date(), 'day')
|
: journalDate.isAfter(new Date(), 'day')
|
||||||
@@ -39,7 +38,7 @@ export const AppSidebarJournalButton = ({
|
|||||||
return (
|
return (
|
||||||
<MenuItem
|
<MenuItem
|
||||||
data-testid="slider-bar-journals-button"
|
data-testid="slider-bar-journals-button"
|
||||||
active={isJournalActive}
|
active={isJournal}
|
||||||
onClick={openToday}
|
onClick={openToday}
|
||||||
icon={<Icon />}
|
icon={<Icon />}
|
||||||
>
|
>
|
||||||
|
|||||||
Reference in New Issue
Block a user