Skip to content

Commit e6ce7a3

Browse files
authored
Allow Dataform Select Box to have a custom empty option (#70894)
* Only define "select item" if blank value is not provided * Update storybook
1 parent b769889 commit e6ce7a3

File tree

2 files changed

+19
-11
lines changed

2 files changed

+19
-11
lines changed

packages/dataviews/src/components/dataform/stories/index.story.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ const fields = [
7171
label: 'Date as options',
7272
type: 'datetime' as const,
7373
elements: [
74+
{ value: '', label: 'Select a date' },
7475
{ value: '1970-02-23T12:00:00', label: "Jane's birth date" },
7576
{ value: '1950-02-23T12:00:00', label: "John's birth date" },
7677
],

packages/dataviews/src/dataform-controls/select.tsx

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,24 @@ export default function Select< Item >( {
2626
[ id, onChange ]
2727
);
2828

29-
const elements = [
30-
/*
31-
* Value can be undefined when:
32-
*
33-
* - the field is not required
34-
* - in bulk editing
35-
*
36-
*/
37-
{ label: __( 'Select item' ), value: '' },
38-
...( field?.elements ?? [] ),
39-
];
29+
const fieldElements = field?.elements ?? [];
30+
const hasEmptyValue = fieldElements.some(
31+
( { value: elementValue } ) => elementValue === ''
32+
);
33+
34+
const elements = hasEmptyValue
35+
? fieldElements
36+
: [
37+
/*
38+
* Value can be undefined when:
39+
*
40+
* - the field is not required
41+
* - in bulk editing
42+
*
43+
*/
44+
{ label: __( 'Select item' ), value: '' },
45+
...fieldElements,
46+
];
4047

4148
return (
4249
<SelectControl

0 commit comments

Comments
 (0)