Skip to content

Commit 00527a4

Browse files
feat(ui): port more comboboxes
1 parent c2ad867 commit 00527a4

File tree

3 files changed

+49
-27
lines changed

3 files changed

+49
-27
lines changed

invokeai/frontend/web/src/features/controlLayers/components/Filters/FilterDepthAnythingDepthEstimation.tsx

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import type { ComboboxOnChange } from '@invoke-ai/ui-library';
2-
import { Combobox, FormControl, FormLabel } from '@invoke-ai/ui-library';
1+
import { FormControl, FormLabel, Select } from '@invoke-ai/ui-library';
32
import type { DepthAnythingFilterConfig, DepthAnythingModelSize } from 'features/controlLayers/store/filters';
43
import { isDepthAnythingModelSize } from 'features/controlLayers/store/filters';
4+
import type { ChangeEventHandler } from 'react';
55
import { memo, useCallback, useMemo } from 'react';
66
import { useTranslation } from 'react-i18next';
77

@@ -11,12 +11,13 @@ type Props = FilterComponentProps<DepthAnythingFilterConfig>;
1111

1212
export const FilterDepthAnythingDepthEstimation = memo(({ onChange, config }: Props) => {
1313
const { t } = useTranslation();
14-
const handleModelSizeChange = useCallback<ComboboxOnChange>(
15-
(v) => {
16-
if (!isDepthAnythingModelSize(v?.value)) {
14+
const handleModelSizeChange = useCallback<ChangeEventHandler<HTMLSelectElement>>(
15+
(e) => {
16+
const model_size = e.target.value;
17+
if (!isDepthAnythingModelSize(model_size)) {
1718
return;
1819
}
19-
onChange({ ...config, model_size: v.value });
20+
onChange({ ...config, model_size });
2021
},
2122
[config, onChange]
2223
);
@@ -31,13 +32,17 @@ export const FilterDepthAnythingDepthEstimation = memo(({ onChange, config }: Pr
3132
[t]
3233
);
3334

34-
const value = useMemo(() => options.filter((o) => o.value === config.model_size)[0], [options, config.model_size]);
35-
3635
return (
3736
<>
3837
<FormControl>
3938
<FormLabel m={0}>{t('controlLayers.filter.depth_anything_depth_estimation.model_size')}</FormLabel>
40-
<Combobox value={value} options={options} onChange={handleModelSizeChange} isSearchable={false} />
39+
<Select size="sm" value={config.model_size} onChange={handleModelSizeChange}>
40+
{options.map((option) => (
41+
<option key={option.value} value={option.value}>
42+
{option.label}
43+
</option>
44+
))}
45+
</Select>
4146
</FormControl>
4247
</>
4348
);

invokeai/frontend/web/src/features/controlLayers/components/Filters/FilterNoise.tsx

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1-
import type { ComboboxOnChange } from '@invoke-ai/ui-library';
2-
import { Combobox, CompositeNumberInput, CompositeSlider, FormControl, FormLabel, Switch } from '@invoke-ai/ui-library';
1+
import {
2+
CompositeNumberInput,
3+
CompositeSlider,
4+
FormControl,
5+
FormLabel,
6+
Select,
7+
Switch,
8+
} from '@invoke-ai/ui-library';
39
import type { NoiseFilterConfig, NoiseTypes } from 'features/controlLayers/store/filters';
410
import { IMAGE_FILTERS, isNoiseTypes } from 'features/controlLayers/store/filters';
5-
import type { ChangeEvent } from 'react';
11+
import type { ChangeEvent, ChangeEventHandler } from 'react';
612
import { memo, useCallback, useMemo } from 'react';
713
import { useTranslation } from 'react-i18next';
814

@@ -13,12 +19,13 @@ const DEFAULTS = IMAGE_FILTERS.img_noise.buildDefaults();
1319

1420
export const FilterNoise = memo(({ onChange, config }: Props) => {
1521
const { t } = useTranslation();
16-
const handleNoiseTypeChange = useCallback<ComboboxOnChange>(
17-
(v) => {
18-
if (!isNoiseTypes(v?.value)) {
22+
const handleNoiseTypeChange = useCallback<ChangeEventHandler<HTMLSelectElement>>(
23+
(e) => {
24+
const noise_type = e.target.value;
25+
if (!isNoiseTypes(noise_type)) {
1926
return;
2027
}
21-
onChange({ ...config, noise_type: v.value });
28+
onChange({ ...config, noise_type });
2229
},
2330
[config, onChange]
2431
);
@@ -52,13 +59,17 @@ export const FilterNoise = memo(({ onChange, config }: Props) => {
5259
[t]
5360
);
5461

55-
const value = useMemo(() => options.filter((o) => o.value === config.noise_type)[0], [options, config.noise_type]);
56-
5762
return (
5863
<>
5964
<FormControl>
6065
<FormLabel m={0}>{t('controlLayers.filter.img_noise.noise_type')}</FormLabel>
61-
<Combobox value={value} options={options} onChange={handleNoiseTypeChange} isSearchable={false} />
66+
<Select size="sm" value={config.noise_type} onChange={handleNoiseTypeChange}>
67+
{options.map((option) => (
68+
<option key={option.value} value={option.value}>
69+
{option.label}
70+
</option>
71+
))}
72+
</Select>
6273
</FormControl>
6374
<FormControl>
6475
<FormLabel m={0}>{t('controlLayers.filter.img_noise.noise_amount')}</FormLabel>

invokeai/frontend/web/src/features/controlLayers/components/IPAdapter/FLUXReduxImageInfluence.tsx

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import type { ComboboxOnChange } from '@invoke-ai/ui-library';
2-
import { Combobox, FormControl, FormLabel } from '@invoke-ai/ui-library';
1+
import { FormControl, FormLabel, Select } from '@invoke-ai/ui-library';
32
import type { FLUXReduxImageInfluence as FLUXReduxImageInfluenceType } from 'features/controlLayers/store/types';
43
import { isFLUXReduxImageInfluence } from 'features/controlLayers/store/types';
4+
import type { ChangeEventHandler } from 'react';
55
import { memo, useCallback, useMemo } from 'react';
66
import { useTranslation } from 'react-i18next';
77
import { assert } from 'tsafe';
@@ -40,19 +40,25 @@ export const FLUXReduxImageInfluence = memo(({ imageInfluence, onChange }: Props
4040
] satisfies { label: string; value: FLUXReduxImageInfluenceType }[],
4141
[t]
4242
);
43-
const _onChange = useCallback<ComboboxOnChange>(
44-
(v) => {
45-
assert(isFLUXReduxImageInfluence(v?.value));
46-
onChange(v.value);
43+
const _onChange = useCallback<ChangeEventHandler<HTMLSelectElement>>(
44+
(e) => {
45+
const imageInfluence = e.target.value;
46+
assert(isFLUXReduxImageInfluence(imageInfluence));
47+
onChange(imageInfluence);
4748
},
4849
[onChange]
4950
);
50-
const value = useMemo(() => options.find((o) => o.value === imageInfluence), [options, imageInfluence]);
5151

5252
return (
5353
<FormControl>
5454
<FormLabel m={0}>{t('controlLayers.fluxReduxImageInfluence.imageInfluence')}</FormLabel>
55-
<Combobox value={value} options={options} onChange={_onChange} />
55+
<Select size="sm" value={imageInfluence} onChange={_onChange}>
56+
{options.map((option) => (
57+
<option key={option.value} value={option.value}>
58+
{option.label}
59+
</option>
60+
))}
61+
</Select>
5662
</FormControl>
5763
);
5864
});

0 commit comments

Comments
 (0)