fix(core): selectAtom crash on isEqual (#4780)

This commit is contained in:
Peng Xiao
2023-10-31 11:29:18 +08:00
committed by GitHub
parent a015dc42bb
commit 9e3c79526c
2 changed files with 21 additions and 35 deletions

View File

@@ -8,7 +8,6 @@ import * as Collapsible from '@radix-ui/react-collapsible';
import clsx from 'clsx';
import { useAtomValue } from 'jotai';
import { selectAtom } from 'jotai/utils';
import { isEqual } from 'lodash-es';
import { type MouseEventHandler, useCallback, useMemo, useState } from 'react';
import { PagePreview } from './page-content-preview';
@@ -186,15 +185,11 @@ type RequiredProps = Pick<PageListProps, (typeof requiredPropNames)[number]> & {
selectable: boolean;
};
const listPropsAtom = selectAtom(
pageListPropsAtom,
props => {
return Object.fromEntries(
requiredPropNames.map(name => [name, props[name]])
) as RequiredProps;
},
isEqual
);
const listPropsAtom = selectAtom(pageListPropsAtom, props => {
return Object.fromEntries(
requiredPropNames.map(name => [name, props[name]])
) as RequiredProps;
});
const PageMetaListItemRenderer = (pageMeta: PageMeta) => {
const props = useAtomValue(listPropsAtom);

View File

@@ -2,7 +2,6 @@ import { DEFAULT_SORT_KEY } from '@affine/env/constant';
import type { PageMeta } from '@blocksuite/store';
import { atom } from 'jotai';
import { selectAtom } from 'jotai/utils';
import { isEqual } from 'lodash-es';
import { pagesToPageGroups } from './page-group';
import type { PageListProps, PageMetaRecord } from './types';
@@ -17,18 +16,14 @@ const selectionActiveAtom = atom(false);
export const selectionStateAtom = atom(
get => {
const baseAtom = selectAtom(
pageListPropsAtom,
props => {
const { selectable, selectedPageIds, onSelectedPageIdsChange } = props;
return {
selectable,
selectedPageIds,
onSelectedPageIdsChange,
};
},
isEqual
);
const baseAtom = selectAtom(pageListPropsAtom, props => {
const { selectable, selectedPageIds, onSelectedPageIdsChange } = props;
return {
selectable,
selectedPageIds,
onSelectedPageIdsChange,
};
});
const baseState = get(baseAtom);
const selectionActive =
baseState.selectable === 'toggle'
@@ -45,19 +40,15 @@ export const selectionStateAtom = atom(
);
// get handlers from pageListPropsAtom
export const pageListHandlersAtom = selectAtom(
pageListPropsAtom,
props => {
const { onSelectedPageIdsChange, onDragStart, onDragEnd } = props;
export const pageListHandlersAtom = selectAtom(pageListPropsAtom, props => {
const { onSelectedPageIdsChange, onDragStart, onDragEnd } = props;
return {
onSelectedPageIdsChange,
onDragStart,
onDragEnd,
};
},
isEqual
);
return {
onSelectedPageIdsChange,
onDragStart,
onDragEnd,
};
});
export const pagesAtom = selectAtom(pageListPropsAtom, props => props.pages);