Skip to content

Commit 24dcffe

Browse files
committed
EnumDropdown: Allow disabling some options
1 parent 4f6a26d commit 24dcffe

2 files changed

Lines changed: 6 additions & 0 deletions

File tree

ui/src/components/forms/common/EnumDropdown.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ type EnumDropdownBaseProps<TEnum extends string> = BaseFormInputProps & {
2424
// Allow string in for compatability with old untyped use sites.
2525
readonly value?: TEnum | string;
2626
readonly onChange: (newValue: TEnum) => void;
27+
readonly disabledOptions?: ReadonlyArray<TEnum>;
2728
};
2829

2930
type EnumDropdownWithNullOptionProps = {
@@ -69,6 +70,7 @@ const EnumDropdownImpl = <TEnum extends string>(
6970
buttonClassName,
7071
includeAllOption = false,
7172
includeNullOption = false,
73+
disabledOptions,
7274
...formInputProps
7375
}: EnumDropdownProps<TEnum>,
7476
ref: Ref<HTMLDivElement>,
@@ -97,6 +99,7 @@ const EnumDropdownImpl = <TEnum extends string>(
9799
(item) => ({
98100
value: item as unknown as TEnum,
99101
content: uiNameMapper(item as unknown as TEnum),
102+
disabled: disabledOptions?.includes(item as unknown as TEnum) ?? false,
100103
}),
101104
);
102105

ui/src/uiComponents/JoreListboxOptions.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ export type ListboxOptionItem<ValueType> =
2525
readonly value: ValueType;
2626
readonly render: (props: OptionRenderPropArg) => ReactNode;
2727
readonly content?: never;
28+
readonly disabled?: boolean;
2829
}
2930
| {
3031
readonly value: ValueType;
3132
readonly render?: never;
3233
readonly content: ReactNode;
34+
readonly disabled?: boolean;
3335
};
3436

3537
type JoreListboxOptionsProps<ValueType> = {
@@ -63,6 +65,7 @@ const JoreListboxOptionsImpl = <ValueType extends string>(
6365
key={item.value}
6466
value={item.value}
6567
data-testid={`${testId}::${item.value}`}
68+
disabled={item.disabled}
6669
>
6770
{'content' in item ? item.content : wrapInFragment(item.render)}
6871
</ListboxOption>

0 commit comments

Comments
 (0)