Skip to content

Commit 6c4b39b

Browse files
committed
Clarify by creating showPlaceholderOption variable in all changed themes
1 parent 89621ac commit 6c4b39b

File tree

8 files changed

+25
-16
lines changed

8 files changed

+25
-16
lines changed

packages/antd/src/widgets/SelectWidget/index.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,12 @@ export default function SelectWidget<
6969
name: id,
7070
};
7171

72+
const showPlaceholderOption = !multiple && schema.default === undefined;
73+
7274
const selectOptions: DefaultOptionType[] | undefined = useMemo(() => {
7375
if (Array.isArray(enumOptions)) {
7476
const options = [...enumOptions];
75-
if (!multiple && schema.default === undefined) {
77+
if (showPlaceholderOption) {
7678
options.unshift({ value: '', label: placeholder || '' });
7779
}
7880
return options.map(({ value: optionValue, label: optionLabel }, index) => ({

packages/bootstrap-4/src/SelectWidget/SelectWidget.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export default function SelectWidget<
4545
}
4646
}
4747
const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions, multiple);
48+
const showPlaceholderOption = !multiple && schema.default === undefined;
4849

4950
return (
5051
<Form.Control
@@ -78,7 +79,7 @@ export default function SelectWidget<
7879
}}
7980
aria-describedby={ariaDescribedByIds<T>(id)}
8081
>
81-
{!multiple && schema.default === undefined && <option value=''>{placeholder}</option>}
82+
{showPlaceholderOption && <option value=''>{placeholder}</option>}
8283
{(enumOptions as any).map(({ value, label }: any, i: number) => {
8384
const disabled: any = Array.isArray(enumDisabled) && (enumDisabled as any).indexOf(value) != -1;
8485
return (

packages/chakra-ui/src/SelectWidget/SelectWidget.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,12 @@ export default function SelectWidget<T = any, S extends StrictRJSFSchema = RJSFS
6161
const _onFocus = ({ target }: FocusEvent<HTMLInputElement>) =>
6262
onFocus(id, enumOptionsValueForIndex<S>(target && target.value, enumOptions, emptyValue));
6363

64+
const showPlaceholderOption = !multiple && schema.default === undefined;
6465
const _valueLabelMap: any = {};
6566
const displayEnumOptions: OptionsOrGroups<any, any> = useMemo(() => {
6667
if (Array.isArray(enumOptions)) {
6768
const options = [...enumOptions];
68-
if (!multiple && schema.default === undefined) {
69+
if (showPlaceholderOption) {
6970
options.unshift({ value: '', label: placeholder || '' });
7071
}
7172
return options.map((option: EnumOptionsType<S>, index: number) => {

packages/core/src/components/widgets/SelectWidget.tsx

+5-4
Original file line numberDiff line numberDiff line change
@@ -47,26 +47,27 @@ function SelectWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extend
4747
const newValue = getValue(event, multiple);
4848
return onFocus(id, enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyVal));
4949
},
50-
[onFocus, id, schema, multiple, options]
50+
[onFocus, id, schema, multiple, enumOptions, optEmptyVal]
5151
);
5252

5353
const handleBlur = useCallback(
5454
(event: FocusEvent<HTMLSelectElement>) => {
5555
const newValue = getValue(event, multiple);
5656
return onBlur(id, enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyVal));
5757
},
58-
[onBlur, id, schema, multiple, options]
58+
[onBlur, id, schema, multiple, enumOptions, optEmptyVal]
5959
);
6060

6161
const handleChange = useCallback(
6262
(event: ChangeEvent<HTMLSelectElement>) => {
6363
const newValue = getValue(event, multiple);
6464
return onChange(enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyVal));
6565
},
66-
[onChange, schema, multiple, options]
66+
[onChange, schema, multiple, enumOptions, optEmptyVal]
6767
);
6868

6969
const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions, multiple);
70+
const showPlaceholderOption = !multiple && schema.default === undefined;
7071

7172
return (
7273
<select
@@ -83,7 +84,7 @@ function SelectWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extend
8384
onChange={handleChange}
8485
aria-describedby={ariaDescribedByIds<T>(id)}
8586
>
86-
{!multiple && schema.default === undefined && <option value=''>{placeholder}</option>}
87+
{showPlaceholderOption && <option value=''>{placeholder}</option>}
8788
{Array.isArray(enumOptions) &&
8889
enumOptions.map(({ value, label }, i) => {
8990
const disabled = enumDisabled && enumDisabled.indexOf(value) !== -1;

packages/fluentui-rc/src/SelectWidget/SelectWidget.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ function SelectWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extend
6262
const newValue = getValue(data, multiple);
6363
return onChange(enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyVal));
6464
};
65+
const showPlaceholderOption = !multiple && schema.default === undefined;
6566

6667
return (
6768
<Field
@@ -83,7 +84,7 @@ function SelectWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extend
8384
selectedOptions={selectedIndexesAsArray}
8485
aria-describedby={ariaDescribedByIds<T>(id)}
8586
>
86-
{!multiple && schema.default === undefined && <Option value=''>{placeholder || ''}</Option>}
87+
{showPlaceholderOption && <Option value=''>{placeholder || ''}</Option>}
8788
{Array.isArray(enumOptions) &&
8889
enumOptions.map(({ value, label }, i) => {
8990
const disabled = enumDisabled && enumDisabled.indexOf(value) !== -1;

packages/material-ui/src/SelectWidget/SelectWidget.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ export default function SelectWidget<
5959
const _onFocus = ({ target }: FocusEvent<HTMLInputElement>) =>
6060
onFocus(id, enumOptionsValueForIndex<S>(target && target.value, enumOptions, optEmptyVal));
6161
const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions, multiple);
62+
const showPlaceholderOption = !multiple && schema.default === undefined;
6263

6364
return (
6465
<TextField
@@ -86,7 +87,7 @@ export default function SelectWidget<
8687
}}
8788
aria-describedby={ariaDescribedByIds<T>(id)}
8889
>
89-
{!multiple && schema.default === undefined && <MenuItem value=''>{placeholder}</MenuItem>}
90+
{showPlaceholderOption && <MenuItem value=''>{placeholder}</MenuItem>}
9091
{Array.isArray(enumOptions) &&
9192
enumOptions.map(({ value, label }, i: number) => {
9293
const disabled: boolean = Array.isArray(enumDisabled) && enumDisabled.indexOf(value) !== -1;

packages/mui/src/SelectWidget/SelectWidget.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ export default function SelectWidget<
6161
onFocus(id, enumOptionsValueForIndex<S>(target && target.value, enumOptions, optEmptyVal));
6262
const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions, multiple);
6363
const { InputLabelProps, SelectProps, autocomplete, ...textFieldRemainingProps } = textFieldProps;
64+
const showPlaceholderOption = !multiple && schema.default === undefined;
6465

6566
return (
6667
<TextField
@@ -89,7 +90,7 @@ export default function SelectWidget<
8990
}}
9091
aria-describedby={ariaDescribedByIds<T>(id)}
9192
>
92-
{!multiple && schema.default === undefined && <MenuItem value=''>{placeholder}</MenuItem>}
93+
{showPlaceholderOption && <MenuItem value=''>{placeholder}</MenuItem>}
9394
{Array.isArray(enumOptions) &&
9495
enumOptions.map(({ value, label }, i: number) => {
9596
const disabled: boolean = Array.isArray(enumDisabled) && enumDisabled.indexOf(value) !== -1;

packages/semantic-ui/src/SelectWidget/SelectWidget.tsx

+7-6
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,21 @@ import { getSemanticProps } from '../util';
1717

1818
/**
1919
* Returns and creates an array format required for semantic drop down
20-
* @param {array} enumOptions- array of items for the dropdown
20+
* @param {array} enumOptions - array of items for the dropdown
2121
* @param {array} enumDisabled - array of enum option values to disable
22+
* @param {boolean} showPlaceholderOption - whether to show a placeholder option
23+
* @param {string} placeholder - placeholder option label
2224
* @returns {*}
2325
*/
2426
function createDefaultValueOptionsForDropDown<S extends StrictRJSFSchema = RJSFSchema>(
25-
schema: S,
2627
enumOptions?: EnumOptionsType<S>[],
2728
enumDisabled?: UIOptionsType['enumDisabled'],
28-
multiple?: boolean,
29+
showPlaceholderOption?: boolean,
2930
placeholder?: string
3031
) {
3132
const disabledOptions = enumDisabled || [];
3233
const options: DropdownItemProps[] = [];
33-
if (!multiple && schema.default === undefined) {
34+
if (showPlaceholderOption) {
3435
options.push({ value: '', text: placeholder || '' });
3536
}
3637
options.push(
@@ -86,11 +87,11 @@ export default function SelectWidget<T = any, S extends StrictRJSFSchema = RJSFS
8687
});
8788
const { enumDisabled, enumOptions, emptyValue: optEmptyVal } = options;
8889
const emptyValue = multiple ? [] : '';
90+
const showPlaceholderOption = !multiple && schema.default === undefined;
8991
const dropdownOptions = createDefaultValueOptionsForDropDown<S>(
90-
schema,
9192
enumOptions,
9293
enumDisabled,
93-
multiple,
94+
showPlaceholderOption,
9495
placeholder
9596
);
9697
const _onChange = (_: SyntheticEvent<HTMLElement>, { value }: DropdownProps) =>

0 commit comments

Comments
 (0)