fix(core): selectAtom crash on isEqual (#4780)
This commit is contained in:
@@ -8,7 +8,6 @@ import * as Collapsible from '@radix-ui/react-collapsible';
|
|||||||
import clsx from 'clsx';
|
import clsx from 'clsx';
|
||||||
import { useAtomValue } from 'jotai';
|
import { useAtomValue } from 'jotai';
|
||||||
import { selectAtom } from 'jotai/utils';
|
import { selectAtom } from 'jotai/utils';
|
||||||
import { isEqual } from 'lodash-es';
|
|
||||||
import { type MouseEventHandler, useCallback, useMemo, useState } from 'react';
|
import { type MouseEventHandler, useCallback, useMemo, useState } from 'react';
|
||||||
|
|
||||||
import { PagePreview } from './page-content-preview';
|
import { PagePreview } from './page-content-preview';
|
||||||
@@ -186,15 +185,11 @@ type RequiredProps = Pick<PageListProps, (typeof requiredPropNames)[number]> & {
|
|||||||
selectable: boolean;
|
selectable: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
const listPropsAtom = selectAtom(
|
const listPropsAtom = selectAtom(pageListPropsAtom, props => {
|
||||||
pageListPropsAtom,
|
return Object.fromEntries(
|
||||||
props => {
|
requiredPropNames.map(name => [name, props[name]])
|
||||||
return Object.fromEntries(
|
) as RequiredProps;
|
||||||
requiredPropNames.map(name => [name, props[name]])
|
});
|
||||||
) as RequiredProps;
|
|
||||||
},
|
|
||||||
isEqual
|
|
||||||
);
|
|
||||||
|
|
||||||
const PageMetaListItemRenderer = (pageMeta: PageMeta) => {
|
const PageMetaListItemRenderer = (pageMeta: PageMeta) => {
|
||||||
const props = useAtomValue(listPropsAtom);
|
const props = useAtomValue(listPropsAtom);
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import { DEFAULT_SORT_KEY } from '@affine/env/constant';
|
|||||||
import type { PageMeta } from '@blocksuite/store';
|
import type { PageMeta } from '@blocksuite/store';
|
||||||
import { atom } from 'jotai';
|
import { atom } from 'jotai';
|
||||||
import { selectAtom } from 'jotai/utils';
|
import { selectAtom } from 'jotai/utils';
|
||||||
import { isEqual } from 'lodash-es';
|
|
||||||
|
|
||||||
import { pagesToPageGroups } from './page-group';
|
import { pagesToPageGroups } from './page-group';
|
||||||
import type { PageListProps, PageMetaRecord } from './types';
|
import type { PageListProps, PageMetaRecord } from './types';
|
||||||
@@ -17,18 +16,14 @@ const selectionActiveAtom = atom(false);
|
|||||||
|
|
||||||
export const selectionStateAtom = atom(
|
export const selectionStateAtom = atom(
|
||||||
get => {
|
get => {
|
||||||
const baseAtom = selectAtom(
|
const baseAtom = selectAtom(pageListPropsAtom, props => {
|
||||||
pageListPropsAtom,
|
const { selectable, selectedPageIds, onSelectedPageIdsChange } = props;
|
||||||
props => {
|
return {
|
||||||
const { selectable, selectedPageIds, onSelectedPageIdsChange } = props;
|
selectable,
|
||||||
return {
|
selectedPageIds,
|
||||||
selectable,
|
onSelectedPageIdsChange,
|
||||||
selectedPageIds,
|
};
|
||||||
onSelectedPageIdsChange,
|
});
|
||||||
};
|
|
||||||
},
|
|
||||||
isEqual
|
|
||||||
);
|
|
||||||
const baseState = get(baseAtom);
|
const baseState = get(baseAtom);
|
||||||
const selectionActive =
|
const selectionActive =
|
||||||
baseState.selectable === 'toggle'
|
baseState.selectable === 'toggle'
|
||||||
@@ -45,19 +40,15 @@ export const selectionStateAtom = atom(
|
|||||||
);
|
);
|
||||||
|
|
||||||
// get handlers from pageListPropsAtom
|
// get handlers from pageListPropsAtom
|
||||||
export const pageListHandlersAtom = selectAtom(
|
export const pageListHandlersAtom = selectAtom(pageListPropsAtom, props => {
|
||||||
pageListPropsAtom,
|
const { onSelectedPageIdsChange, onDragStart, onDragEnd } = props;
|
||||||
props => {
|
|
||||||
const { onSelectedPageIdsChange, onDragStart, onDragEnd } = props;
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
onSelectedPageIdsChange,
|
onSelectedPageIdsChange,
|
||||||
onDragStart,
|
onDragStart,
|
||||||
onDragEnd,
|
onDragEnd,
|
||||||
};
|
};
|
||||||
},
|
});
|
||||||
isEqual
|
|
||||||
);
|
|
||||||
|
|
||||||
export const pagesAtom = selectAtom(pageListPropsAtom, props => props.pages);
|
export const pagesAtom = selectAtom(pageListPropsAtom, props => props.pages);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user