@@ -11,11 +11,13 @@ import {
11
11
Text ,
12
12
} from '@invoke-ai/ui-library' ;
13
13
import { useStore } from '@nanostores/react' ;
14
+ import { createSelector } from '@reduxjs/toolkit' ;
14
15
import { useAppDispatch , useAppSelector } from 'app/store/storeHooks' ;
15
16
import ScrollableContent from 'common/components/OverlayScrollbars/ScrollableContent' ;
16
17
import { typedMemo } from 'common/util/typedMemo' ;
17
18
import { NO_DRAG_CLASS , NO_WHEEL_CLASS } from 'features/nodes/types/constants' ;
18
- import { selectModelPickerCompactViewStates , setModelPickerCompactView } from 'features/ui/store/uiSlice' ;
19
+ import { selectPickerCompactViewStates } from 'features/ui/store/uiSelectors' ;
20
+ import { pickerCompactViewStateChanged } from 'features/ui/store/uiSlice' ;
19
21
import type { AnyStore , ReadableAtom , Task , WritableAtom } from 'nanostores' ;
20
22
import { atom , computed } from 'nanostores' ;
21
23
import type { StoreValues } from 'nanostores/computed' ;
@@ -210,6 +212,14 @@ type PickerProps<T extends object> = {
210
212
initialGroupStates ?: GroupStatusMap ;
211
213
} ;
212
214
215
+ const buildSelectIsCompactView = ( pickerId ?: string ) =>
216
+ createSelector ( [ selectPickerCompactViewStates ] , ( compactViewStates ) => {
217
+ if ( ! pickerId ) {
218
+ return true ;
219
+ }
220
+ return compactViewStates [ pickerId ] ?? true ;
221
+ } ) ;
222
+
213
223
export type PickerContextState < T extends object > = {
214
224
$optionsOrGroups : WritableAtom < OptionOrGroup < T > [ ] > ;
215
225
$groupStatusMap : WritableAtom < GroupStatusMap > ;
@@ -529,7 +539,6 @@ export const Picker = typedMemo(<T extends object>(props: PickerProps<T>) => {
529
539
} = props ;
530
540
const rootRef = useRef < HTMLDivElement > ( null ) ;
531
541
const inputRef = useRef < HTMLInputElement > ( null ) ;
532
- const compactViewStates = useAppSelector ( selectModelPickerCompactViewStates ) ;
533
542
534
543
const { $groupStatusMap, $areAllGroupsDisabled, toggleGroup } = useTogglableGroups (
535
544
optionsOrGroups ,
@@ -547,8 +556,8 @@ export const Picker = typedMemo(<T extends object>(props: PickerProps<T>) => {
547
556
const $searchTerm = useAtom ( '' ) ;
548
557
const $selectedItemId = useComputed ( [ $selectedItem ] , ( item ) => ( item ? getOptionId ( item ) : undefined ) ) ;
549
558
550
- // Use Redux state for compact view, defaulting to true if no pickerId or no saved state
551
- const isCompactView = pickerId ? ( compactViewStates [ pickerId ] ?? true ) : true ;
559
+ const selectIsCompactView = useMemo ( ( ) => buildSelectIsCompactView ( pickerId ) , [ pickerId ] ) ;
560
+ const isCompactView = useAppSelector ( selectIsCompactView ) ;
552
561
553
562
const onSelectById = useCallback (
554
563
( id : string ) => {
@@ -888,7 +897,7 @@ const CompactViewToggleButton = typedMemo(<T extends object>() => {
888
897
889
898
const onClick = useCallback ( ( ) => {
890
899
if ( pickerId ) {
891
- dispatch ( setModelPickerCompactView ( { pickerId, isCompact : ! isCompactView } ) ) ;
900
+ dispatch ( pickerCompactViewStateChanged ( { pickerId, isCompact : ! isCompactView } ) ) ;
892
901
}
893
902
} , [ dispatch , pickerId , isCompactView ] ) ;
894
903
0 commit comments