File size: 1,911 Bytes
8a37e0a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | import type { ComboboxOnChange, ComboboxOption } from '@invoke-ai/ui-library';
import { Combobox, FormControl, FormLabel } from '@invoke-ai/ui-library';
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
import { InformationalPopover } from 'common/components/InformationalPopover/InformationalPopover';
import {
isSeedBehaviour,
seedBehaviourChanged,
selectDynamicPromptsSeedBehaviour,
} from 'features/dynamicPrompts/store/dynamicPromptsSlice';
import { memo, useCallback, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
const ParamDynamicPromptsSeedBehaviour = () => {
const dispatch = useAppDispatch();
const { t } = useTranslation();
const seedBehaviour = useAppSelector(selectDynamicPromptsSeedBehaviour);
const options = useMemo<ComboboxOption[]>(() => {
return [
{
value: 'PER_ITERATION',
label: t('dynamicPrompts.seedBehaviour.perIterationLabel'),
description: t('dynamicPrompts.seedBehaviour.perIterationDesc'),
},
{
value: 'PER_PROMPT',
label: t('dynamicPrompts.seedBehaviour.perPromptLabel'),
description: t('dynamicPrompts.seedBehaviour.perPromptDesc'),
},
];
}, [t]);
const handleChange = useCallback<ComboboxOnChange>(
(v) => {
if (!isSeedBehaviour(v?.value)) {
return;
}
dispatch(seedBehaviourChanged(v.value));
},
[dispatch]
);
const value = useMemo(() => options.find((o) => o.value === seedBehaviour), [options, seedBehaviour]);
return (
<FormControl>
<InformationalPopover feature="dynamicPromptsSeedBehaviour" inPortal={false}>
<FormLabel>{t('dynamicPrompts.seedBehaviour.label')}</FormLabel>
</InformationalPopover>
<Combobox value={value} options={options} onChange={handleChange} />
</FormControl>
);
};
export default memo(ParamDynamicPromptsSeedBehaviour);
|