Skip to content

Commit 703557c

Browse files
feat(ui): cleanup
1 parent d59a53b commit 703557c

File tree

1 file changed

+42
-10
lines changed
  • invokeai/frontend/web/src/common/components/Picker

1 file changed

+42
-10
lines changed

invokeai/frontend/web/src/common/components/Picker/Picker.tsx

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,9 @@ export type PickerContextState<T extends object> = {
208208
$filteredOptions: WritableAtom<OptionOrGroup<T>[]>;
209209
$flattenedFilteredOptions: ReadableAtom<T[]>;
210210
$totalOptionCount: ReadableAtom<number>;
211+
$hasOptions: ReadableAtom<boolean>;
212+
$filteredOptionsCount: ReadableAtom<number>;
213+
$hasFilteredOptions: ReadableAtom<boolean>;
211214
$areAllGroupsDisabled: ReadableAtom<boolean>;
212215
$selectedItem: WritableAtom<T | undefined>;
213216
$selectedItemId: ReadableAtom<string | undefined>;
@@ -525,9 +528,6 @@ export const Picker = typedMemo(<T extends object>(props: PickerProps<T>) => {
525528
const $searchTerm = useAtom('');
526529
const $selectedItemId = useComputed([$selectedItem], (item) => (item ? getOptionId(item) : undefined));
527530

528-
const hasOptions = useStore($hasOptions);
529-
const hasFilteredOptions = useStore($hasFilteredOptions);
530-
531531
const onSelectById = useCallback(
532532
(id: string) => {
533533
const options = $filteredOptions.get();
@@ -578,6 +578,9 @@ export const Picker = typedMemo(<T extends object>(props: PickerProps<T>) => {
578578
searchable,
579579
$areAllGroupsDisabled,
580580
$selectedItemId,
581+
$hasOptions,
582+
$hasFilteredOptions,
583+
$filteredOptionsCount,
581584
}) satisfies PickerContextState<T>,
582585
[
583586
$optionsOrGroups,
@@ -603,6 +606,9 @@ export const Picker = typedMemo(<T extends object>(props: PickerProps<T>) => {
603606
searchable,
604607
$areAllGroupsDisabled,
605608
$selectedItemId,
609+
$hasOptions,
610+
$hasFilteredOptions,
611+
$filteredOptionsCount,
606612
]
607613
);
608614

@@ -611,11 +617,11 @@ export const Picker = typedMemo(<T extends object>(props: PickerProps<T>) => {
611617
return (
612618
<PickerContext.Provider value={ctx}>
613619
<PickerContainer>
614-
{searchable && <PickerSearchBar />}
620+
<PickerSearchBar />
615621
<Flex tabIndex={-1} w="full" flexGrow={1}>
616-
{!hasOptions && <NoOptionsFallback />}
617-
{hasOptions && !hasFilteredOptions && <NoMatchesFallback />}
618-
{hasOptions && hasFilteredOptions && <PickerList />}
622+
<NoOptionsFallback />
623+
<NoMatchesFallback />
624+
<PickerList />
619625
</Flex>
620626
</PickerContainer>
621627
<PickerSyncer />
@@ -713,19 +719,41 @@ const PickerContainer = typedMemo(({ children }: PropsWithChildren) => {
713719
PickerContainer.displayName = 'PickerContainer';
714720

715721
const NoOptionsFallback = typedMemo(<T extends object>() => {
716-
const { noOptionsFallback } = usePickerContext<T>();
722+
const { noOptionsFallback, $hasOptions } = usePickerContext<T>();
723+
const hasOptions = useStore($hasOptions);
724+
725+
if (hasOptions) {
726+
return null;
727+
}
728+
717729
return <NoOptionsFallbackWrapper>{noOptionsFallback}</NoOptionsFallbackWrapper>;
718730
});
719731
NoOptionsFallback.displayName = 'NoOptionsFallback';
720732

721733
const NoMatchesFallback = typedMemo(<T extends object>() => {
722-
const { noMatchesFallback } = usePickerContext<T>();
734+
const { noMatchesFallback, $hasOptions, $hasFilteredOptions } = usePickerContext<T>();
735+
736+
const hasOptions = useStore($hasOptions);
737+
const hasFilteredOptions = useStore($hasFilteredOptions);
738+
739+
if (!hasOptions) {
740+
return null;
741+
}
742+
743+
if (hasFilteredOptions) {
744+
return null;
745+
}
746+
723747
return <NoMatchesFallbackWrapper>{noMatchesFallback}</NoMatchesFallbackWrapper>;
724748
});
725749
NoMatchesFallback.displayName = 'NoMatchesFallback';
726750

727751
const PickerSearchBar = typedMemo(<T extends object>() => {
728-
const { NextToSearchBar } = usePickerContext<T>();
752+
const { NextToSearchBar, searchable } = usePickerContext<T>();
753+
754+
if (!searchable) {
755+
return null;
756+
}
729757

730758
return (
731759
<Flex flexDir="column" w="full" gap={2}>
@@ -890,6 +918,10 @@ const PickerList = typedMemo(<T extends object>() => {
890918
const compactView = useStore($compactView);
891919
const filteredOptions = useStore($filteredOptions);
892920

921+
if (filteredOptions.length === 0) {
922+
return null;
923+
}
924+
893925
return (
894926
<ScrollableContent>
895927
<Flex sx={listSx} data-is-compact={compactView}>

0 commit comments

Comments
 (0)