diff --git a/invokeai/frontend/web/src/common/components/Picker/Picker.tsx b/invokeai/frontend/web/src/common/components/Picker/Picker.tsx index e5ff35971e..f50a28f2fc 100644 --- a/invokeai/frontend/web/src/common/components/Picker/Picker.tsx +++ b/invokeai/frontend/web/src/common/components/Picker/Picker.tsx @@ -87,14 +87,10 @@ export const buildGroup = (group: Omit, typeof unique [uniqueGroupKey]: true, }); -const isGroup = (optionOrGroup: OptionOrGroup): optionOrGroup is Group => { +export const isGroup = (optionOrGroup: OptionOrGroup): optionOrGroup is Group => { return uniqueGroupKey in optionOrGroup && optionOrGroup[uniqueGroupKey] === true; }; -export const isOption = (optionOrGroup: OptionOrGroup): optionOrGroup is T => { - return !(uniqueGroupKey in optionOrGroup); -}; - const DefaultOptionComponent = typedMemo(({ option }: { option: T }) => { const { getOptionId } = usePickerContext(); return {getOptionId(option)}; diff --git a/invokeai/frontend/web/src/features/parameters/components/ModelPicker.tsx b/invokeai/frontend/web/src/features/parameters/components/ModelPicker.tsx index b921f9a1c8..768980fbef 100644 --- a/invokeai/frontend/web/src/features/parameters/components/ModelPicker.tsx +++ b/invokeai/frontend/web/src/features/parameters/components/ModelPicker.tsx @@ -18,7 +18,7 @@ import { createMemoizedSelector } from 'app/store/createMemoizedSelector'; import { $onClickGoToModelManager } from 'app/store/nanostores/onClickGoToModelManager'; import { useAppSelector } from 'app/store/storeHooks'; import type { Group, PickerContextState } from 'common/components/Picker/Picker'; -import { buildGroup, getRegex, isOption, Picker, usePickerContext } from 'common/components/Picker/Picker'; +import { buildGroup, getRegex, isGroup, Picker, usePickerContext } from 'common/components/Picker/Picker'; import { useDisclosure } from 'common/hooks/useBoolean'; import { typedMemo } from 'common/util/typedMemo'; import { uniq } from 'es-toolkit/compat'; @@ -277,8 +277,19 @@ export const ModelPicker = typedMemo( if (!selectedModelConfig) { return undefined; } + let _selectedOption: WithStarred | undefined = undefined; - return options.filter(isOption).find((o) => o.key === selectedModelConfig.key); + for (const optionOrGroup of options) { + if (isGroup(optionOrGroup)) { + _selectedOption = optionOrGroup.options.find((o) => o.key === selectedModelConfig.key); + break; + } else if (optionOrGroup.key === selectedModelConfig.key) { + _selectedOption = optionOrGroup; + break; + } + } + + return _selectedOption; }, [options, selectedModelConfig]); const onClose = useCallback(() => { @@ -362,6 +373,12 @@ const optionSx: SystemStyleObject = { borderRadius: 'base', '&[data-selected="true"]': { bg: 'base.700', + '.picker-option': { + fontWeight: 'bold', + '&[data-is-compact="true"]': { + fontWeight: 'semibold', + }, + }, '&[data-active="true"]': { bg: 'base.650', }, @@ -400,7 +417,7 @@ const PickerOptionComponent = typedMemo( {option.starred && } - + {option.name}