@wordpress/dataviews 9.0.1-next.6f42e1382.0 → 9.0.1-next.a730c9c8c.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -1
- package/README.md +106 -11
- package/build/components/dataviews-filters/input-widget.js +48 -4
- package/build/components/dataviews-filters/input-widget.js.map +1 -1
- package/build/dataform-controls/array.js +9 -7
- package/build/dataform-controls/array.js.map +1 -1
- package/build/dataform-controls/checkbox.js +31 -20
- package/build/dataform-controls/checkbox.js.map +1 -1
- package/build/dataform-controls/color.js +29 -24
- package/build/dataform-controls/color.js.map +1 -1
- package/build/dataform-controls/date.js +32 -24
- package/build/dataform-controls/date.js.map +1 -1
- package/build/dataform-controls/datetime.js +133 -19
- package/build/dataform-controls/datetime.js.map +1 -1
- package/build/dataform-controls/email.js +7 -1
- package/build/dataform-controls/email.js.map +1 -1
- package/build/dataform-controls/index.js +23 -0
- package/build/dataform-controls/index.js.map +1 -1
- package/build/dataform-controls/integer.js +47 -34
- package/build/dataform-controls/integer.js.map +1 -1
- package/build/dataform-controls/radio.js +42 -9
- package/build/dataform-controls/radio.js.map +1 -1
- package/build/dataform-controls/relative-date-control.js +6 -10
- package/build/dataform-controls/relative-date-control.js.map +1 -1
- package/build/dataform-controls/select.js +41 -10
- package/build/dataform-controls/select.js.map +1 -1
- package/build/dataform-controls/telephone.js +7 -1
- package/build/dataform-controls/telephone.js.map +1 -1
- package/build/dataform-controls/text.js +14 -2
- package/build/dataform-controls/text.js.map +1 -1
- package/build/dataform-controls/textarea.js +33 -20
- package/build/dataform-controls/textarea.js.map +1 -1
- package/build/dataform-controls/toggle-group.js +36 -6
- package/build/dataform-controls/toggle-group.js.map +1 -1
- package/build/dataform-controls/toggle.js +33 -22
- package/build/dataform-controls/toggle.js.map +1 -1
- package/build/dataform-controls/url.js +7 -1
- package/build/dataform-controls/url.js.map +1 -1
- package/build/dataform-controls/utils/validated-input.js +34 -32
- package/build/dataform-controls/utils/validated-input.js.map +1 -1
- package/build/dataforms-layouts/panel/dropdown.js +10 -14
- package/build/dataforms-layouts/panel/dropdown.js.map +1 -1
- package/build/dataforms-layouts/panel/index.js +24 -11
- package/build/dataforms-layouts/panel/index.js.map +1 -1
- package/build/dataforms-layouts/panel/modal.js +22 -27
- package/build/dataforms-layouts/panel/modal.js.map +1 -1
- package/build/dataforms-layouts/panel/summary-button.js +67 -0
- package/build/dataforms-layouts/panel/summary-button.js.map +1 -0
- package/build/normalize-fields.js +17 -0
- package/build/normalize-fields.js.map +1 -1
- package/build/types.js.map +1 -1
- package/build-module/components/dataviews-filters/input-widget.js +48 -4
- package/build-module/components/dataviews-filters/input-widget.js.map +1 -1
- package/build-module/dataform-controls/array.js +9 -7
- package/build-module/dataform-controls/array.js.map +1 -1
- package/build-module/dataform-controls/checkbox.js +31 -21
- package/build-module/dataform-controls/checkbox.js.map +1 -1
- package/build-module/dataform-controls/color.js +28 -24
- package/build-module/dataform-controls/color.js.map +1 -1
- package/build-module/dataform-controls/date.js +32 -24
- package/build-module/dataform-controls/date.js.map +1 -1
- package/build-module/dataform-controls/datetime.js +135 -21
- package/build-module/dataform-controls/datetime.js.map +1 -1
- package/build-module/dataform-controls/email.js +7 -1
- package/build-module/dataform-controls/email.js.map +1 -1
- package/build-module/dataform-controls/index.js +23 -0
- package/build-module/dataform-controls/index.js.map +1 -1
- package/build-module/dataform-controls/integer.js +46 -34
- package/build-module/dataform-controls/integer.js.map +1 -1
- package/build-module/dataform-controls/radio.js +44 -11
- package/build-module/dataform-controls/radio.js.map +1 -1
- package/build-module/dataform-controls/relative-date-control.js +6 -10
- package/build-module/dataform-controls/relative-date-control.js.map +1 -1
- package/build-module/dataform-controls/select.js +43 -12
- package/build-module/dataform-controls/select.js.map +1 -1
- package/build-module/dataform-controls/telephone.js +7 -1
- package/build-module/dataform-controls/telephone.js.map +1 -1
- package/build-module/dataform-controls/text.js +14 -2
- package/build-module/dataform-controls/text.js.map +1 -1
- package/build-module/dataform-controls/textarea.js +32 -20
- package/build-module/dataform-controls/textarea.js.map +1 -1
- package/build-module/dataform-controls/toggle-group.js +38 -8
- package/build-module/dataform-controls/toggle-group.js.map +1 -1
- package/build-module/dataform-controls/toggle.js +33 -23
- package/build-module/dataform-controls/toggle.js.map +1 -1
- package/build-module/dataform-controls/url.js +7 -1
- package/build-module/dataform-controls/url.js.map +1 -1
- package/build-module/dataform-controls/utils/validated-input.js +34 -33
- package/build-module/dataform-controls/utils/validated-input.js.map +1 -1
- package/build-module/dataforms-layouts/panel/dropdown.js +10 -15
- package/build-module/dataforms-layouts/panel/dropdown.js.map +1 -1
- package/build-module/dataforms-layouts/panel/index.js +24 -11
- package/build-module/dataforms-layouts/panel/index.js.map +1 -1
- package/build-module/dataforms-layouts/panel/modal.js +22 -28
- package/build-module/dataforms-layouts/panel/modal.js.map +1 -1
- package/build-module/dataforms-layouts/panel/summary-button.js +60 -0
- package/build-module/dataforms-layouts/panel/summary-button.js.map +1 -0
- package/build-module/normalize-fields.js +15 -0
- package/build-module/normalize-fields.js.map +1 -1
- package/build-module/types.js.map +1 -1
- package/build-types/components/dataform/stories/index.story.d.ts +3 -0
- package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
- package/build-types/components/dataviews/stories/fixtures.d.ts +4 -2
- package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
- package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -1
- package/build-types/dataform-controls/array.d.ts.map +1 -1
- package/build-types/dataform-controls/checkbox.d.ts.map +1 -1
- package/build-types/dataform-controls/color.d.ts.map +1 -1
- package/build-types/dataform-controls/date.d.ts.map +1 -1
- package/build-types/dataform-controls/datetime.d.ts.map +1 -1
- package/build-types/dataform-controls/email.d.ts.map +1 -1
- package/build-types/dataform-controls/index.d.ts +1 -1
- package/build-types/dataform-controls/index.d.ts.map +1 -1
- package/build-types/dataform-controls/integer.d.ts.map +1 -1
- package/build-types/dataform-controls/radio.d.ts.map +1 -1
- package/build-types/dataform-controls/relative-date-control.d.ts +6 -5
- package/build-types/dataform-controls/relative-date-control.d.ts.map +1 -1
- package/build-types/dataform-controls/select.d.ts.map +1 -1
- package/build-types/dataform-controls/telephone.d.ts.map +1 -1
- package/build-types/dataform-controls/text.d.ts +1 -1
- package/build-types/dataform-controls/text.d.ts.map +1 -1
- package/build-types/dataform-controls/textarea.d.ts +1 -1
- package/build-types/dataform-controls/textarea.d.ts.map +1 -1
- package/build-types/dataform-controls/toggle-group.d.ts.map +1 -1
- package/build-types/dataform-controls/toggle.d.ts.map +1 -1
- package/build-types/dataform-controls/url.d.ts.map +1 -1
- package/build-types/dataform-controls/utils/validated-input.d.ts +4 -4
- package/build-types/dataform-controls/utils/validated-input.d.ts.map +1 -1
- package/build-types/dataforms-layouts/panel/dropdown.d.ts +2 -1
- package/build-types/dataforms-layouts/panel/dropdown.d.ts.map +1 -1
- package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
- package/build-types/dataforms-layouts/panel/modal.d.ts +2 -1
- package/build-types/dataforms-layouts/panel/modal.d.ts.map +1 -1
- package/build-types/dataforms-layouts/panel/summary-button.d.ts +15 -0
- package/build-types/dataforms-layouts/panel/summary-button.d.ts.map +1 -0
- package/build-types/field-types/stories/index.story.d.ts.map +1 -1
- package/build-types/normalize-fields.d.ts +3 -0
- package/build-types/normalize-fields.d.ts.map +1 -1
- package/build-types/types.d.ts +66 -3
- package/build-types/types.d.ts.map +1 -1
- package/build-wp/index.js +1468 -1422
- package/package.json +16 -15
- package/src/components/dataform/stories/index.story.tsx +436 -7
- package/src/components/dataviews/stories/fixtures.tsx +99 -41
- package/src/components/dataviews/stories/index.story.tsx +1 -1
- package/src/components/dataviews-filters/input-widget.tsx +44 -5
- package/src/components/dataviews-picker/stories/index.story.tsx +1 -1
- package/src/dataform-controls/array.tsx +4 -6
- package/src/dataform-controls/checkbox.tsx +41 -24
- package/src/dataform-controls/color.tsx +33 -24
- package/src/dataform-controls/date.tsx +47 -21
- package/src/dataform-controls/datetime.tsx +171 -23
- package/src/dataform-controls/email.tsx +9 -1
- package/src/dataform-controls/index.tsx +26 -0
- package/src/dataform-controls/integer.tsx +82 -49
- package/src/dataform-controls/radio.tsx +53 -11
- package/src/dataform-controls/relative-date-control.tsx +11 -10
- package/src/dataform-controls/select.tsx +53 -10
- package/src/dataform-controls/telephone.tsx +9 -1
- package/src/dataform-controls/text.tsx +18 -1
- package/src/dataform-controls/textarea.tsx +38 -24
- package/src/dataform-controls/toggle-group.tsx +50 -10
- package/src/dataform-controls/toggle.tsx +41 -24
- package/src/dataform-controls/url.tsx +9 -1
- package/src/dataform-controls/utils/validated-input.tsx +50 -50
- package/src/dataforms-layouts/panel/dropdown.tsx +12 -23
- package/src/dataforms-layouts/panel/index.tsx +39 -16
- package/src/dataforms-layouts/panel/modal.tsx +24 -30
- package/src/dataforms-layouts/panel/summary-button.tsx +92 -0
- package/src/field-types/stories/index.story.tsx +89 -1
- package/src/normalize-fields.ts +18 -0
- package/src/test/filter-and-sort-data-view.js +148 -138
- package/src/test/normalize-fields.ts +114 -0
- package/src/types.ts +73 -3
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { BaseControl,
|
|
5
|
-
import { useCallback } from '@wordpress/element';
|
|
4
|
+
import { BaseControl, privateApis as componentsPrivateApis, __experimentalInputControl as InputControl, __experimentalVStack as VStack } from '@wordpress/components';
|
|
5
|
+
import { useCallback, useState } from '@wordpress/element';
|
|
6
|
+
import { __ } from '@wordpress/i18n';
|
|
7
|
+
import { getDate, getSettings } from '@wordpress/date';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* External dependencies
|
|
11
|
+
*/
|
|
12
|
+
import { format, isValid } from 'date-fns';
|
|
6
13
|
|
|
7
14
|
/**
|
|
8
15
|
* Internal dependencies
|
|
@@ -10,7 +17,111 @@ import { useCallback } from '@wordpress/element';
|
|
|
10
17
|
|
|
11
18
|
import { OPERATOR_IN_THE_PAST, OPERATOR_OVER } from '../constants';
|
|
12
19
|
import RelativeDateControl, { TIME_UNITS_OPTIONS } from './relative-date-control';
|
|
20
|
+
import { unlock } from '../lock-unlock';
|
|
13
21
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
|
+
const {
|
|
23
|
+
DateCalendar
|
|
24
|
+
} = unlock(componentsPrivateApis);
|
|
25
|
+
const parseDateTime = dateTimeString => {
|
|
26
|
+
if (!dateTimeString) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const parsed = getDate(dateTimeString);
|
|
30
|
+
return parsed && isValid(parsed) ? parsed : null;
|
|
31
|
+
};
|
|
32
|
+
const formatDateTime = date => {
|
|
33
|
+
if (!date) {
|
|
34
|
+
return '';
|
|
35
|
+
}
|
|
36
|
+
if (typeof date === 'string') {
|
|
37
|
+
return date;
|
|
38
|
+
}
|
|
39
|
+
// Format as datetime-local input expects: YYYY-MM-DDTHH:mm
|
|
40
|
+
return format(date, "yyyy-MM-dd'T'HH:mm");
|
|
41
|
+
};
|
|
42
|
+
function CalendarDateTimeControl({
|
|
43
|
+
id,
|
|
44
|
+
value,
|
|
45
|
+
onChange,
|
|
46
|
+
label,
|
|
47
|
+
description,
|
|
48
|
+
hideLabelFromVision
|
|
49
|
+
}) {
|
|
50
|
+
const [calendarMonth, setCalendarMonth] = useState(() => {
|
|
51
|
+
const parsedDate = parseDateTime(value);
|
|
52
|
+
return parsedDate || new Date(); // Default to current month
|
|
53
|
+
});
|
|
54
|
+
const onSelectDate = useCallback(newDate => {
|
|
55
|
+
if (newDate) {
|
|
56
|
+
// Preserve time if it exists in current value, otherwise use current time
|
|
57
|
+
let finalDateTime = newDate;
|
|
58
|
+
if (value) {
|
|
59
|
+
const currentDateTime = parseDateTime(value);
|
|
60
|
+
if (currentDateTime) {
|
|
61
|
+
// Preserve the time part
|
|
62
|
+
finalDateTime = new Date(newDate);
|
|
63
|
+
finalDateTime.setHours(currentDateTime.getHours());
|
|
64
|
+
finalDateTime.setMinutes(currentDateTime.getMinutes());
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const dateTimeValue = finalDateTime.toISOString();
|
|
68
|
+
onChange(dateTimeValue);
|
|
69
|
+
} else {
|
|
70
|
+
onChange(undefined);
|
|
71
|
+
}
|
|
72
|
+
}, [onChange, value]);
|
|
73
|
+
const handleManualDateTimeChange = useCallback(newValue => {
|
|
74
|
+
if (newValue) {
|
|
75
|
+
// Convert from datetime-local format to ISO string
|
|
76
|
+
const dateTime = new Date(newValue);
|
|
77
|
+
onChange(dateTime.toISOString());
|
|
78
|
+
|
|
79
|
+
// Update calendar month to match
|
|
80
|
+
const parsedDate = parseDateTime(dateTime.toISOString());
|
|
81
|
+
if (parsedDate) {
|
|
82
|
+
setCalendarMonth(parsedDate);
|
|
83
|
+
}
|
|
84
|
+
} else {
|
|
85
|
+
onChange(undefined);
|
|
86
|
+
}
|
|
87
|
+
}, [onChange]);
|
|
88
|
+
const {
|
|
89
|
+
timezone: {
|
|
90
|
+
string: timezoneString
|
|
91
|
+
},
|
|
92
|
+
l10n: {
|
|
93
|
+
startOfWeek
|
|
94
|
+
}
|
|
95
|
+
} = getSettings();
|
|
96
|
+
return /*#__PURE__*/_jsx(BaseControl, {
|
|
97
|
+
__nextHasNoMarginBottom: true,
|
|
98
|
+
id: id,
|
|
99
|
+
label: label,
|
|
100
|
+
help: description,
|
|
101
|
+
hideLabelFromVision: hideLabelFromVision,
|
|
102
|
+
children: /*#__PURE__*/_jsxs(VStack, {
|
|
103
|
+
spacing: 4,
|
|
104
|
+
children: [/*#__PURE__*/_jsx(DateCalendar, {
|
|
105
|
+
style: {
|
|
106
|
+
width: '100%'
|
|
107
|
+
},
|
|
108
|
+
selected: value ? parseDateTime(value) || undefined : undefined,
|
|
109
|
+
onSelect: onSelectDate,
|
|
110
|
+
month: calendarMonth,
|
|
111
|
+
onMonthChange: setCalendarMonth,
|
|
112
|
+
timeZone: timezoneString || undefined,
|
|
113
|
+
weekStartsOn: startOfWeek
|
|
114
|
+
}), /*#__PURE__*/_jsx(InputControl, {
|
|
115
|
+
__next40pxDefaultSize: true,
|
|
116
|
+
type: "datetime-local",
|
|
117
|
+
label: __('Date time'),
|
|
118
|
+
hideLabelFromVision: true,
|
|
119
|
+
value: value ? formatDateTime(parseDateTime(value) || undefined) : '',
|
|
120
|
+
onChange: handleManualDateTimeChange
|
|
121
|
+
})]
|
|
122
|
+
})
|
|
123
|
+
});
|
|
124
|
+
}
|
|
14
125
|
export default function DateTime({
|
|
15
126
|
data,
|
|
16
127
|
field,
|
|
@@ -20,37 +131,40 @@ export default function DateTime({
|
|
|
20
131
|
}) {
|
|
21
132
|
const {
|
|
22
133
|
id,
|
|
23
|
-
label
|
|
134
|
+
label,
|
|
135
|
+
description,
|
|
136
|
+
getValue,
|
|
137
|
+
setValue
|
|
24
138
|
} = field;
|
|
25
|
-
const value =
|
|
139
|
+
const value = getValue({
|
|
26
140
|
item: data
|
|
27
141
|
});
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
142
|
+
const onChangeRelativeDateControl = useCallback(newValue => onChange(setValue({
|
|
143
|
+
item: data,
|
|
144
|
+
value: newValue
|
|
145
|
+
})), [data, onChange, setValue]);
|
|
146
|
+
const onChangeCalendarDateTimeControl = useCallback(newValue => onChange(setValue({
|
|
147
|
+
item: data,
|
|
148
|
+
value: newValue
|
|
149
|
+
})), [data, onChange, setValue]);
|
|
31
150
|
if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) {
|
|
32
151
|
return /*#__PURE__*/_jsx(RelativeDateControl, {
|
|
152
|
+
className: "dataviews-controls__datetime",
|
|
33
153
|
id: id,
|
|
34
154
|
value: value && typeof value === 'object' ? value : {},
|
|
35
|
-
onChange:
|
|
155
|
+
onChange: onChangeRelativeDateControl,
|
|
36
156
|
label: label,
|
|
37
157
|
hideLabelFromVision: hideLabelFromVision,
|
|
38
158
|
options: TIME_UNITS_OPTIONS[operator]
|
|
39
159
|
});
|
|
40
160
|
}
|
|
41
|
-
return /*#__PURE__*/
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
children: label
|
|
49
|
-
}), /*#__PURE__*/_jsx(TimePicker, {
|
|
50
|
-
currentTime: typeof value === 'string' ? value : undefined,
|
|
51
|
-
onChange: onChangeControl,
|
|
52
|
-
hideLabelFromVision: true
|
|
53
|
-
})]
|
|
161
|
+
return /*#__PURE__*/_jsx(CalendarDateTimeControl, {
|
|
162
|
+
id: id,
|
|
163
|
+
value: typeof value === 'string' ? value : undefined,
|
|
164
|
+
onChange: onChangeCalendarDateTimeControl,
|
|
165
|
+
label: label,
|
|
166
|
+
description: description,
|
|
167
|
+
hideLabelFromVision: hideLabelFromVision
|
|
54
168
|
});
|
|
55
169
|
}
|
|
56
170
|
//# sourceMappingURL=datetime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BaseControl","TimePicker","VisuallyHidden","useCallback","OPERATOR_IN_THE_PAST","OPERATOR_OVER","RelativeDateControl","TIME_UNITS_OPTIONS","jsx","_jsx","jsxs","_jsxs","DateTime","data","field","onChange","hideLabelFromVision","operator","id","label","value","getValue","item","onChangeControl","newValue","options","className","children","VisualLabel","as","currentTime","undefined"],"sources":["@wordpress/dataviews/src/dataform-controls/datetime.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { BaseControl, TimePicker, VisuallyHidden } from '@wordpress/components';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\nimport { OPERATOR_IN_THE_PAST, OPERATOR_OVER } from '../constants';\nimport RelativeDateControl, {\n\tTIME_UNITS_OPTIONS,\n} from './relative-date-control';\n\nexport default function DateTime< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n\toperator,\n}: DataFormControlProps< Item > ) {\n\tconst { id, label } = field;\n\tconst value = field.getValue( { item: data } );\n\n\tconst onChangeControl = useCallback(\n\t\t( newValue: string | null ) => onChange( { [ id ]: newValue } ),\n\t\t[ id, onChange ]\n\t);\n\n\tif ( operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER ) {\n\t\treturn (\n\t\t\t<RelativeDateControl\n\t\t\t\tid={ id }\n\t\t\t\tvalue={ value && typeof value === 'object' ? value : {} }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tlabel={ label }\n\t\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\t\toptions={ TIME_UNITS_OPTIONS[ operator ] }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<fieldset className=\"dataviews-controls__datetime\">\n\t\t\t{ ! hideLabelFromVision && (\n\t\t\t\t<BaseControl.VisualLabel as=\"legend\">\n\t\t\t\t\t{ label }\n\t\t\t\t</BaseControl.VisualLabel>\n\t\t\t) }\n\t\t\t{ hideLabelFromVision && (\n\t\t\t\t<VisuallyHidden as=\"legend\">{ label }</VisuallyHidden>\n\t\t\t) }\n\t\t\t<TimePicker\n\t\t\t\tcurrentTime={ typeof value === 'string' ? value : undefined }\n\t\t\t\tonChange={ onChangeControl }\n\t\t\t\thideLabelFromVision\n\t\t\t/>\n\t\t</fieldset>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAW,EAAEC,UAAU,EAAEC,cAAc,QAAQ,uBAAuB;AAC/E,SAASC,WAAW,QAAQ,oBAAoB;;AAEhD;AACA;AACA;;AAEA,SAASC,oBAAoB,EAAEC,aAAa,QAAQ,cAAc;AAClE,OAAOC,mBAAmB,IACzBC,kBAAkB,QACZ,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAEjC,eAAe,SAASC,QAAQA,CAAU;EACzCC,IAAI;EACJC,KAAK;EACLC,QAAQ;EACRC,mBAAmB;EACnBC;AAC6B,CAAC,EAAG;EACjC,MAAM;IAAEC,EAAE;IAAEC;EAAM,CAAC,GAAGL,KAAK;EAC3B,MAAMM,KAAK,GAAGN,KAAK,CAACO,QAAQ,CAAE;IAAEC,IAAI,EAAET;EAAK,CAAE,CAAC;EAE9C,MAAMU,eAAe,GAAGpB,WAAW,CAChCqB,QAAuB,IAAMT,QAAQ,CAAE;IAAE,CAAEG,EAAE,GAAIM;EAAS,CAAE,CAAC,EAC/D,CAAEN,EAAE,EAAEH,QAAQ,CACf,CAAC;EAED,IAAKE,QAAQ,KAAKb,oBAAoB,IAAIa,QAAQ,KAAKZ,aAAa,EAAG;IACtE,oBACCI,IAAA,CAACH,mBAAmB;MACnBY,EAAE,EAAGA,EAAI;MACTE,KAAK,EAAGA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,CAAC,CAAG;MACzDL,QAAQ,EAAGA,QAAU;MACrBI,KAAK,EAAGA,KAAO;MACfH,mBAAmB,EAAGA,mBAAqB;MAC3CS,OAAO,EAAGlB,kBAAkB,CAAEU,QAAQ;IAAI,CAC1C,CAAC;EAEJ;EAEA,oBACCN,KAAA;IAAUe,SAAS,EAAC,8BAA8B;IAAAC,QAAA,GAC/C,CAAEX,mBAAmB,iBACtBP,IAAA,CAACT,WAAW,CAAC4B,WAAW;MAACC,EAAE,EAAC,QAAQ;MAAAF,QAAA,EACjCR;IAAK,CACiB,CACzB,EACCH,mBAAmB,iBACpBP,IAAA,CAACP,cAAc;MAAC2B,EAAE,EAAC,QAAQ;MAAAF,QAAA,EAAGR;IAAK,CAAkB,CACrD,eACDV,IAAA,CAACR,UAAU;MACV6B,WAAW,EAAG,OAAOV,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAGW,SAAW;MAC7DhB,QAAQ,EAAGQ,eAAiB;MAC5BP,mBAAmB;IAAA,CACnB,CAAC;EAAA,CACO,CAAC;AAEb","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["BaseControl","privateApis","componentsPrivateApis","__experimentalInputControl","InputControl","__experimentalVStack","VStack","useCallback","useState","__","getDate","getSettings","format","isValid","OPERATOR_IN_THE_PAST","OPERATOR_OVER","RelativeDateControl","TIME_UNITS_OPTIONS","unlock","jsx","_jsx","jsxs","_jsxs","DateCalendar","parseDateTime","dateTimeString","parsed","formatDateTime","date","CalendarDateTimeControl","id","value","onChange","label","description","hideLabelFromVision","calendarMonth","setCalendarMonth","parsedDate","Date","onSelectDate","newDate","finalDateTime","currentDateTime","setHours","getHours","setMinutes","getMinutes","dateTimeValue","toISOString","undefined","handleManualDateTimeChange","newValue","dateTime","timezone","string","timezoneString","l10n","startOfWeek","__nextHasNoMarginBottom","help","children","spacing","style","width","selected","onSelect","month","onMonthChange","timeZone","weekStartsOn","__next40pxDefaultSize","type","DateTime","data","field","operator","getValue","setValue","item","onChangeRelativeDateControl","onChangeCalendarDateTimeControl","className","options"],"sources":["@wordpress/dataviews/src/dataform-controls/datetime.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tBaseControl,\n\tprivateApis as componentsPrivateApis,\n\t__experimentalInputControl as InputControl,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { useCallback, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { getDate, getSettings } from '@wordpress/date';\n\n/**\n * External dependencies\n */\nimport { format, isValid } from 'date-fns';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\nimport { OPERATOR_IN_THE_PAST, OPERATOR_OVER } from '../constants';\nimport RelativeDateControl, {\n\tTIME_UNITS_OPTIONS,\n\ttype DateRelative,\n} from './relative-date-control';\nimport { unlock } from '../lock-unlock';\n\nconst { DateCalendar } = unlock( componentsPrivateApis );\n\nconst parseDateTime = ( dateTimeString?: string ): Date | null => {\n\tif ( ! dateTimeString ) {\n\t\treturn null;\n\t}\n\tconst parsed = getDate( dateTimeString );\n\treturn parsed && isValid( parsed ) ? parsed : null;\n};\n\nconst formatDateTime = ( date?: Date | string ): string => {\n\tif ( ! date ) {\n\t\treturn '';\n\t}\n\tif ( typeof date === 'string' ) {\n\t\treturn date;\n\t}\n\t// Format as datetime-local input expects: YYYY-MM-DDTHH:mm\n\treturn format( date, \"yyyy-MM-dd'T'HH:mm\" );\n};\n\nfunction CalendarDateTimeControl( {\n\tid,\n\tvalue,\n\tonChange,\n\tlabel,\n\tdescription,\n\thideLabelFromVision,\n}: {\n\tid: string;\n\tvalue: string | undefined;\n\tonChange: ( value: string | undefined ) => void;\n\tlabel: string;\n\tdescription?: string;\n\thideLabelFromVision?: boolean;\n} ) {\n\tconst [ calendarMonth, setCalendarMonth ] = useState< Date >( () => {\n\t\tconst parsedDate = parseDateTime( value );\n\t\treturn parsedDate || new Date(); // Default to current month\n\t} );\n\n\tconst onSelectDate = useCallback(\n\t\t( newDate: Date | undefined | null ) => {\n\t\t\tif ( newDate ) {\n\t\t\t\t// Preserve time if it exists in current value, otherwise use current time\n\t\t\t\tlet finalDateTime = newDate;\n\n\t\t\t\tif ( value ) {\n\t\t\t\t\tconst currentDateTime = parseDateTime( value );\n\t\t\t\t\tif ( currentDateTime ) {\n\t\t\t\t\t\t// Preserve the time part\n\t\t\t\t\t\tfinalDateTime = new Date( newDate );\n\t\t\t\t\t\tfinalDateTime.setHours( currentDateTime.getHours() );\n\t\t\t\t\t\tfinalDateTime.setMinutes(\n\t\t\t\t\t\t\tcurrentDateTime.getMinutes()\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst dateTimeValue = finalDateTime.toISOString();\n\t\t\t\tonChange( dateTimeValue );\n\t\t\t} else {\n\t\t\t\tonChange( undefined );\n\t\t\t}\n\t\t},\n\t\t[ onChange, value ]\n\t);\n\n\tconst handleManualDateTimeChange = useCallback(\n\t\t( newValue?: string ) => {\n\t\t\tif ( newValue ) {\n\t\t\t\t// Convert from datetime-local format to ISO string\n\t\t\t\tconst dateTime = new Date( newValue );\n\t\t\t\tonChange( dateTime.toISOString() );\n\n\t\t\t\t// Update calendar month to match\n\t\t\t\tconst parsedDate = parseDateTime( dateTime.toISOString() );\n\t\t\t\tif ( parsedDate ) {\n\t\t\t\t\tsetCalendarMonth( parsedDate );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tonChange( undefined );\n\t\t\t}\n\t\t},\n\t\t[ onChange ]\n\t);\n\n\tconst {\n\t\ttimezone: { string: timezoneString },\n\t\tl10n: { startOfWeek },\n\t} = getSettings();\n\n\treturn (\n\t\t<BaseControl\n\t\t\t__nextHasNoMarginBottom\n\t\t\tid={ id }\n\t\t\tlabel={ label }\n\t\t\thelp={ description }\n\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t>\n\t\t\t<VStack spacing={ 4 }>\n\t\t\t\t{ /* Calendar widget */ }\n\t\t\t\t<DateCalendar\n\t\t\t\t\tstyle={ { width: '100%' } }\n\t\t\t\t\tselected={\n\t\t\t\t\t\tvalue ? parseDateTime( value ) || undefined : undefined\n\t\t\t\t\t}\n\t\t\t\t\tonSelect={ onSelectDate }\n\t\t\t\t\tmonth={ calendarMonth }\n\t\t\t\t\tonMonthChange={ setCalendarMonth }\n\t\t\t\t\ttimeZone={ timezoneString || undefined }\n\t\t\t\t\tweekStartsOn={ startOfWeek }\n\t\t\t\t/>\n\t\t\t\t{ /* Manual datetime input */ }\n\t\t\t\t<InputControl\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\ttype=\"datetime-local\"\n\t\t\t\t\tlabel={ __( 'Date time' ) }\n\t\t\t\t\thideLabelFromVision\n\t\t\t\t\tvalue={\n\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\t? formatDateTime(\n\t\t\t\t\t\t\t\t\tparseDateTime( value ) || undefined\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: ''\n\t\t\t\t\t}\n\t\t\t\t\tonChange={ handleManualDateTimeChange }\n\t\t\t\t/>\n\t\t\t</VStack>\n\t\t</BaseControl>\n\t);\n}\n\nexport default function DateTime< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n\toperator,\n}: DataFormControlProps< Item > ) {\n\tconst { id, label, description, getValue, setValue } = field;\n\tconst value = getValue( { item: data } );\n\n\tconst onChangeRelativeDateControl = useCallback(\n\t\t( newValue: DateRelative ) =>\n\t\t\tonChange( setValue( { item: data, value: newValue } ) ),\n\t\t[ data, onChange, setValue ]\n\t);\n\n\tconst onChangeCalendarDateTimeControl = useCallback(\n\t\t( newValue: string | undefined ) =>\n\t\t\tonChange( setValue( { item: data, value: newValue } ) ),\n\t\t[ data, onChange, setValue ]\n\t);\n\n\tif ( operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER ) {\n\t\treturn (\n\t\t\t<RelativeDateControl\n\t\t\t\tclassName=\"dataviews-controls__datetime\"\n\t\t\t\tid={ id }\n\t\t\t\tvalue={ value && typeof value === 'object' ? value : {} }\n\t\t\t\tonChange={ onChangeRelativeDateControl }\n\t\t\t\tlabel={ label }\n\t\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\t\toptions={ TIME_UNITS_OPTIONS[ operator ] }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<CalendarDateTimeControl\n\t\t\tid={ id }\n\t\t\tvalue={ typeof value === 'string' ? value : undefined }\n\t\t\tonChange={ onChangeCalendarDateTimeControl }\n\t\t\tlabel={ label }\n\t\t\tdescription={ description }\n\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t/>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
+
import { Icon, __experimentalInputControlPrefixWrapper as InputControlPrefixWrapper } from '@wordpress/components';
|
|
4
5
|
import { atSymbol } from '@wordpress/icons';
|
|
5
6
|
|
|
6
7
|
/**
|
|
@@ -21,7 +22,12 @@ export default function Email({
|
|
|
21
22
|
onChange,
|
|
22
23
|
hideLabelFromVision,
|
|
23
24
|
type: 'email',
|
|
24
|
-
|
|
25
|
+
prefix: /*#__PURE__*/_jsx(InputControlPrefixWrapper, {
|
|
26
|
+
variant: "icon",
|
|
27
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
28
|
+
icon: atSymbol
|
|
29
|
+
})
|
|
30
|
+
})
|
|
25
31
|
});
|
|
26
32
|
}
|
|
27
33
|
//# sourceMappingURL=email.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["atSymbol","ValidatedText","jsx","_jsx","Email","data","field","onChange","hideLabelFromVision","type","icon"],"sources":["@wordpress/dataviews/src/dataform-controls/email.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { atSymbol } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\nimport ValidatedText from './utils/validated-input';\n\nexport default function Email< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\treturn (\n\t\t<ValidatedText\n\t\t\t{ ...{\n\t\t\t\tdata,\n\t\t\t\tfield,\n\t\t\t\tonChange,\n\t\t\t\thideLabelFromVision,\n\t\t\t\ttype: 'email',\n\t\t\t\
|
|
1
|
+
{"version":3,"names":["Icon","__experimentalInputControlPrefixWrapper","InputControlPrefixWrapper","atSymbol","ValidatedText","jsx","_jsx","Email","data","field","onChange","hideLabelFromVision","type","prefix","variant","children","icon"],"sources":["@wordpress/dataviews/src/dataform-controls/email.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tIcon,\n\t__experimentalInputControlPrefixWrapper as InputControlPrefixWrapper,\n} from '@wordpress/components';\nimport { atSymbol } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\nimport ValidatedText from './utils/validated-input';\n\nexport default function Email< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\treturn (\n\t\t<ValidatedText\n\t\t\t{ ...{\n\t\t\t\tdata,\n\t\t\t\tfield,\n\t\t\t\tonChange,\n\t\t\t\thideLabelFromVision,\n\t\t\t\ttype: 'email',\n\t\t\t\tprefix: (\n\t\t\t\t\t<InputControlPrefixWrapper variant=\"icon\">\n\t\t\t\t\t\t<Icon icon={ atSymbol } />\n\t\t\t\t\t</InputControlPrefixWrapper>\n\t\t\t\t),\n\t\t\t} }\n\t\t/>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SACCA,IAAI,EACJC,uCAAuC,IAAIC,yBAAyB,QAC9D,uBAAuB;AAC9B,SAASC,QAAQ,QAAQ,kBAAkB;;AAE3C;AACA;AACA;;AAEA,OAAOC,aAAa,MAAM,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEpD,eAAe,SAASC,KAAKA,CAAU;EACtCC,IAAI;EACJC,KAAK;EACLC,QAAQ;EACRC;AAC6B,CAAC,EAAG;EACjC,oBACCL,IAAA,CAACF,aAAa;IAEZI,IAAI;IACJC,KAAK;IACLC,QAAQ;IACRC,mBAAmB;IACnBC,IAAI,EAAE,OAAO;IACbC,MAAM,eACLP,IAAA,CAACJ,yBAAyB;MAACY,OAAO,EAAC,MAAM;MAAAC,QAAA,eACxCT,IAAA,CAACN,IAAI;QAACgB,IAAI,EAAGb;MAAU,CAAE;IAAC,CACA;EAC3B,CAEF,CAAC;AAEJ","ignoreList":[]}
|
|
@@ -22,6 +22,7 @@ import toggleGroup from './toggle-group';
|
|
|
22
22
|
import array from './array';
|
|
23
23
|
import color from './color';
|
|
24
24
|
import password from './password';
|
|
25
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
25
26
|
const FORM_CONTROLS = {
|
|
26
27
|
array,
|
|
27
28
|
checkbox,
|
|
@@ -40,6 +41,22 @@ const FORM_CONTROLS = {
|
|
|
40
41
|
textarea,
|
|
41
42
|
toggleGroup
|
|
42
43
|
};
|
|
44
|
+
function isEditConfig(value) {
|
|
45
|
+
return value && typeof value === 'object' && typeof value.control === 'string';
|
|
46
|
+
}
|
|
47
|
+
function createConfiguredControl(config) {
|
|
48
|
+
const {
|
|
49
|
+
control,
|
|
50
|
+
...controlConfig
|
|
51
|
+
} = config;
|
|
52
|
+
const BaseControlType = getControlByType(control);
|
|
53
|
+
return function ConfiguredControl(props) {
|
|
54
|
+
return /*#__PURE__*/_jsx(BaseControlType, {
|
|
55
|
+
...props,
|
|
56
|
+
config: controlConfig
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
}
|
|
43
60
|
export function getControl(field, fieldTypeDefinition) {
|
|
44
61
|
if (typeof field.Edit === 'function') {
|
|
45
62
|
return field.Edit;
|
|
@@ -47,12 +64,18 @@ export function getControl(field, fieldTypeDefinition) {
|
|
|
47
64
|
if (typeof field.Edit === 'string') {
|
|
48
65
|
return getControlByType(field.Edit);
|
|
49
66
|
}
|
|
67
|
+
if (isEditConfig(field.Edit)) {
|
|
68
|
+
return createConfiguredControl(field.Edit);
|
|
69
|
+
}
|
|
50
70
|
if (field.elements && field.type !== 'array') {
|
|
51
71
|
return getControlByType('select');
|
|
52
72
|
}
|
|
53
73
|
if (typeof fieldTypeDefinition.Edit === 'string') {
|
|
54
74
|
return getControlByType(fieldTypeDefinition.Edit);
|
|
55
75
|
}
|
|
76
|
+
if (isEditConfig(fieldTypeDefinition.Edit)) {
|
|
77
|
+
return createConfiguredControl(fieldTypeDefinition.Edit);
|
|
78
|
+
}
|
|
56
79
|
return fieldTypeDefinition.Edit;
|
|
57
80
|
}
|
|
58
81
|
export function getControlByType(type) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["checkbox","datetime","date","email","telephone","url","integer","radio","select","text","toggle","textarea","toggleGroup","array","color","password","FORM_CONTROLS","getControl","field","fieldTypeDefinition","Edit","
|
|
1
|
+
{"version":3,"names":["checkbox","datetime","date","email","telephone","url","integer","radio","select","text","toggle","textarea","toggleGroup","array","color","password","jsx","_jsx","FORM_CONTROLS","isEditConfig","value","control","createConfiguredControl","config","controlConfig","BaseControlType","getControlByType","ConfiguredControl","props","getControl","field","fieldTypeDefinition","Edit","elements","type","Object","keys","includes"],"sources":["@wordpress/dataviews/src/dataform-controls/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport type { ComponentType } from 'react';\n\n/**\n * Internal dependencies\n */\nimport type {\n\tDataFormControlProps,\n\tField,\n\tFieldTypeDefinition,\n\tEditConfig,\n} from '../types';\nimport checkbox from './checkbox';\nimport datetime from './datetime';\nimport date from './date';\nimport email from './email';\nimport telephone from './telephone';\nimport url from './url';\nimport integer from './integer';\nimport radio from './radio';\nimport select from './select';\nimport text from './text';\nimport toggle from './toggle';\nimport textarea from './textarea';\nimport toggleGroup from './toggle-group';\nimport array from './array';\nimport color from './color';\nimport password from './password';\n\ninterface FormControls {\n\t[ key: string ]: ComponentType< DataFormControlProps< any > >;\n}\n\nconst FORM_CONTROLS: FormControls = {\n\tarray,\n\tcheckbox,\n\tcolor,\n\tdatetime,\n\tdate,\n\temail,\n\ttelephone,\n\turl,\n\tinteger,\n\tpassword,\n\tradio,\n\tselect,\n\ttext,\n\ttoggle,\n\ttextarea,\n\ttoggleGroup,\n};\n\nfunction isEditConfig( value: any ): value is EditConfig {\n\treturn (\n\t\tvalue && typeof value === 'object' && typeof value.control === 'string'\n\t);\n}\n\nfunction createConfiguredControl( config: EditConfig ) {\n\tconst { control, ...controlConfig } = config;\n\tconst BaseControlType = getControlByType( control );\n\n\treturn function ConfiguredControl< Item >(\n\t\tprops: DataFormControlProps< Item >\n\t) {\n\t\treturn <BaseControlType { ...props } config={ controlConfig } />;\n\t};\n}\n\nexport function getControl< Item >(\n\tfield: Field< Item >,\n\tfieldTypeDefinition: FieldTypeDefinition< Item >\n) {\n\tif ( typeof field.Edit === 'function' ) {\n\t\treturn field.Edit;\n\t}\n\n\tif ( typeof field.Edit === 'string' ) {\n\t\treturn getControlByType( field.Edit );\n\t}\n\n\tif ( isEditConfig( field.Edit ) ) {\n\t\treturn createConfiguredControl( field.Edit );\n\t}\n\n\tif ( field.elements && field.type !== 'array' ) {\n\t\treturn getControlByType( 'select' );\n\t}\n\n\tif ( typeof fieldTypeDefinition.Edit === 'string' ) {\n\t\treturn getControlByType( fieldTypeDefinition.Edit );\n\t}\n\n\tif ( isEditConfig( fieldTypeDefinition.Edit ) ) {\n\t\treturn createConfiguredControl( fieldTypeDefinition.Edit );\n\t}\n\n\treturn fieldTypeDefinition.Edit;\n}\n\nexport function getControlByType( type: string ) {\n\tif ( Object.keys( FORM_CONTROLS ).includes( type ) ) {\n\t\treturn FORM_CONTROLS[ type ];\n\t}\n\n\tthrow 'Control ' + type + ' not found';\n}\n"],"mappings":"AAAA;AACA;AACA;;AAGA;AACA;AACA;;AAOA,OAAOA,QAAQ,MAAM,YAAY;AACjC,OAAOC,QAAQ,MAAM,YAAY;AACjC,OAAOC,IAAI,MAAM,QAAQ;AACzB,OAAOC,KAAK,MAAM,SAAS;AAC3B,OAAOC,SAAS,MAAM,aAAa;AACnC,OAAOC,GAAG,MAAM,OAAO;AACvB,OAAOC,OAAO,MAAM,WAAW;AAC/B,OAAOC,KAAK,MAAM,SAAS;AAC3B,OAAOC,MAAM,MAAM,UAAU;AAC7B,OAAOC,IAAI,MAAM,QAAQ;AACzB,OAAOC,MAAM,MAAM,UAAU;AAC7B,OAAOC,QAAQ,MAAM,YAAY;AACjC,OAAOC,WAAW,MAAM,gBAAgB;AACxC,OAAOC,KAAK,MAAM,SAAS;AAC3B,OAAOC,KAAK,MAAM,SAAS;AAC3B,OAAOC,QAAQ,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAMlC,MAAMC,aAA2B,GAAG;EACnCL,KAAK;EACLb,QAAQ;EACRc,KAAK;EACLb,QAAQ;EACRC,IAAI;EACJC,KAAK;EACLC,SAAS;EACTC,GAAG;EACHC,OAAO;EACPS,QAAQ;EACRR,KAAK;EACLC,MAAM;EACNC,IAAI;EACJC,MAAM;EACNC,QAAQ;EACRC;AACD,CAAC;AAED,SAASO,YAAYA,CAAEC,KAAU,EAAwB;EACxD,OACCA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,OAAOA,KAAK,CAACC,OAAO,KAAK,QAAQ;AAEzE;AAEA,SAASC,uBAAuBA,CAAEC,MAAkB,EAAG;EACtD,MAAM;IAAEF,OAAO;IAAE,GAAGG;EAAc,CAAC,GAAGD,MAAM;EAC5C,MAAME,eAAe,GAAGC,gBAAgB,CAAEL,OAAQ,CAAC;EAEnD,OAAO,SAASM,iBAAiBA,CAChCC,KAAmC,EAClC;IACD,oBAAOX,IAAA,CAACQ,eAAe;MAAA,GAAMG,KAAK;MAAGL,MAAM,EAAGC;IAAe,CAAE,CAAC;EACjE,CAAC;AACF;AAEA,OAAO,SAASK,UAAUA,CACzBC,KAAoB,EACpBC,mBAAgD,EAC/C;EACD,IAAK,OAAOD,KAAK,CAACE,IAAI,KAAK,UAAU,EAAG;IACvC,OAAOF,KAAK,CAACE,IAAI;EAClB;EAEA,IAAK,OAAOF,KAAK,CAACE,IAAI,KAAK,QAAQ,EAAG;IACrC,OAAON,gBAAgB,CAAEI,KAAK,CAACE,IAAK,CAAC;EACtC;EAEA,IAAKb,YAAY,CAAEW,KAAK,CAACE,IAAK,CAAC,EAAG;IACjC,OAAOV,uBAAuB,CAAEQ,KAAK,CAACE,IAAK,CAAC;EAC7C;EAEA,IAAKF,KAAK,CAACG,QAAQ,IAAIH,KAAK,CAACI,IAAI,KAAK,OAAO,EAAG;IAC/C,OAAOR,gBAAgB,CAAE,QAAS,CAAC;EACpC;EAEA,IAAK,OAAOK,mBAAmB,CAACC,IAAI,KAAK,QAAQ,EAAG;IACnD,OAAON,gBAAgB,CAAEK,mBAAmB,CAACC,IAAK,CAAC;EACpD;EAEA,IAAKb,YAAY,CAAEY,mBAAmB,CAACC,IAAK,CAAC,EAAG;IAC/C,OAAOV,uBAAuB,CAAES,mBAAmB,CAACC,IAAK,CAAC;EAC3D;EAEA,OAAOD,mBAAmB,CAACC,IAAI;AAChC;AAEA,OAAO,SAASN,gBAAgBA,CAAEQ,IAAY,EAAG;EAChD,IAAKC,MAAM,CAACC,IAAI,CAAElB,aAAc,CAAC,CAACmB,QAAQ,CAAEH,IAAK,CAAC,EAAG;IACpD,OAAOhB,aAAa,CAAEgB,IAAI,CAAE;EAC7B;EAEA,MAAM,UAAU,GAAGA,IAAI,GAAG,YAAY;AACvC","ignoreList":[]}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import deepMerge from 'deepmerge';
|
|
5
|
+
|
|
1
6
|
/**
|
|
2
7
|
* WordPress dependencies
|
|
3
8
|
*/
|
|
@@ -15,18 +20,13 @@ const {
|
|
|
15
20
|
ValidatedNumberControl
|
|
16
21
|
} = unlock(privateApis);
|
|
17
22
|
function BetweenControls({
|
|
18
|
-
id,
|
|
19
23
|
value,
|
|
20
24
|
onChange,
|
|
21
25
|
hideLabelFromVision
|
|
22
26
|
}) {
|
|
23
|
-
const [min = '', max = ''] =
|
|
24
|
-
const onChangeMin = useCallback(newValue => onChange(
|
|
25
|
-
|
|
26
|
-
}), [id, onChange, max]);
|
|
27
|
-
const onChangeMax = useCallback(newValue => onChange({
|
|
28
|
-
[id]: [min, Number(newValue)]
|
|
29
|
-
}), [id, onChange, min]);
|
|
27
|
+
const [min = '', max = ''] = value;
|
|
28
|
+
const onChangeMin = useCallback(newValue => onChange([Number(newValue), max]), [onChange, max]);
|
|
29
|
+
const onChangeMax = useCallback(newValue => onChange([min, Number(newValue)]), [onChange, min]);
|
|
30
30
|
return /*#__PURE__*/_jsx(BaseControl, {
|
|
31
31
|
__nextHasNoMarginBottom: true,
|
|
32
32
|
help: __('The max. value must be greater than the min. value.'),
|
|
@@ -58,48 +58,60 @@ export default function Integer({
|
|
|
58
58
|
hideLabelFromVision,
|
|
59
59
|
operator
|
|
60
60
|
}) {
|
|
61
|
-
var
|
|
61
|
+
var _getValue;
|
|
62
62
|
const {
|
|
63
|
-
id,
|
|
64
63
|
label,
|
|
65
|
-
description
|
|
64
|
+
description,
|
|
65
|
+
getValue,
|
|
66
|
+
setValue
|
|
66
67
|
} = field;
|
|
67
|
-
const value = (
|
|
68
|
+
const value = (_getValue = getValue({
|
|
68
69
|
item: data
|
|
69
|
-
})) !== null &&
|
|
70
|
+
})) !== null && _getValue !== void 0 ? _getValue : '';
|
|
70
71
|
const [customValidity, setCustomValidity] = useState(undefined);
|
|
71
72
|
const onChangeControl = useCallback(newValue => {
|
|
72
|
-
onChange({
|
|
73
|
+
onChange(setValue({
|
|
74
|
+
item: data,
|
|
73
75
|
// Do not convert an empty string or undefined to a number,
|
|
74
76
|
// otherwise there's a mismatch between the UI control (empty)
|
|
75
77
|
// and the data relied by onChange (0).
|
|
76
|
-
|
|
77
|
-
});
|
|
78
|
-
}, [
|
|
78
|
+
value: ['', undefined].includes(newValue) ? undefined : Number(newValue)
|
|
79
|
+
}));
|
|
80
|
+
}, [data, onChange, setValue]);
|
|
81
|
+
const onChangeBetweenControls = useCallback(newValue => {
|
|
82
|
+
onChange(setValue({
|
|
83
|
+
item: data,
|
|
84
|
+
value: newValue
|
|
85
|
+
}));
|
|
86
|
+
}, [data, onChange, setValue]);
|
|
87
|
+
const onValidateControl = useCallback(newValue => {
|
|
88
|
+
const message = field.isValid?.custom?.(deepMerge(data, setValue({
|
|
89
|
+
item: data,
|
|
90
|
+
value: [undefined, '', null].includes(newValue) ? undefined : Number(newValue)
|
|
91
|
+
})), field);
|
|
92
|
+
if (message) {
|
|
93
|
+
setCustomValidity({
|
|
94
|
+
type: 'invalid',
|
|
95
|
+
message
|
|
96
|
+
});
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
setCustomValidity(undefined);
|
|
100
|
+
}, [data, field, setValue]);
|
|
79
101
|
if (operator === OPERATOR_BETWEEN) {
|
|
102
|
+
let valueBetween = ['', ''];
|
|
103
|
+
if (Array.isArray(value) && value.length === 2 && value.every(element => typeof element === 'number' || element === '')) {
|
|
104
|
+
valueBetween = value;
|
|
105
|
+
}
|
|
80
106
|
return /*#__PURE__*/_jsx(BetweenControls, {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
onChange: onChange,
|
|
107
|
+
value: valueBetween,
|
|
108
|
+
onChange: onChangeBetweenControls,
|
|
84
109
|
hideLabelFromVision: hideLabelFromVision
|
|
85
110
|
});
|
|
86
111
|
}
|
|
87
112
|
return /*#__PURE__*/_jsx(ValidatedNumberControl, {
|
|
88
113
|
required: !!field.isValid?.required,
|
|
89
|
-
onValidate:
|
|
90
|
-
const message = field.isValid?.custom?.({
|
|
91
|
-
...data,
|
|
92
|
-
[id]: [undefined, '', null].includes(newValue) ? undefined : Number(newValue)
|
|
93
|
-
}, field);
|
|
94
|
-
if (message) {
|
|
95
|
-
setCustomValidity({
|
|
96
|
-
type: 'invalid',
|
|
97
|
-
message
|
|
98
|
-
});
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
setCustomValidity(undefined);
|
|
102
|
-
},
|
|
114
|
+
onValidate: onValidateControl,
|
|
103
115
|
customValidity: customValidity,
|
|
104
116
|
label: label,
|
|
105
117
|
help: description,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Flex","BaseControl","__experimentalNumberControl","NumberControl","privateApis","useCallback","useState","__","OPERATOR_BETWEEN","unlock","jsx","_jsx","jsxs","_jsxs","ValidatedNumberControl","BetweenControls","
|
|
1
|
+
{"version":3,"names":["deepMerge","Flex","BaseControl","__experimentalNumberControl","NumberControl","privateApis","useCallback","useState","__","OPERATOR_BETWEEN","unlock","jsx","_jsx","jsxs","_jsxs","ValidatedNumberControl","BetweenControls","value","onChange","hideLabelFromVision","min","max","onChangeMin","newValue","Number","onChangeMax","__nextHasNoMarginBottom","help","children","direction","gap","label","undefined","__next40pxDefaultSize","Integer","data","field","operator","_getValue","description","getValue","setValue","item","customValidity","setCustomValidity","onChangeControl","includes","onChangeBetweenControls","onValidateControl","message","isValid","custom","type","valueBetween","Array","isArray","length","every","element","required","onValidate"],"sources":["@wordpress/dataviews/src/dataform-controls/integer.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport deepMerge from 'deepmerge';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tFlex,\n\tBaseControl,\n\t__experimentalNumberControl as NumberControl,\n\tprivateApis,\n} from '@wordpress/components';\nimport { useCallback, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { OPERATOR_BETWEEN } from '../constants';\nimport type { DataFormControlProps } from '../types';\nimport { unlock } from '../lock-unlock';\n\nconst { ValidatedNumberControl } = unlock( privateApis );\n\ntype IntegerBetween = [ number | string, number | string ];\n\nfunction BetweenControls( {\n\tvalue,\n\tonChange,\n\thideLabelFromVision,\n}: {\n\tvalue: IntegerBetween;\n\tonChange: ( [ min, max ]: IntegerBetween ) => void;\n\thideLabelFromVision?: boolean;\n} ) {\n\tconst [ min = '', max = '' ] = value;\n\n\tconst onChangeMin = useCallback(\n\t\t( newValue: string | undefined ) =>\n\t\t\tonChange( [ Number( newValue ), max ] ),\n\t\t[ onChange, max ]\n\t);\n\n\tconst onChangeMax = useCallback(\n\t\t( newValue: string | undefined ) =>\n\t\t\tonChange( [ min, Number( newValue ) ] ),\n\t\t[ onChange, min ]\n\t);\n\n\treturn (\n\t\t<BaseControl\n\t\t\t__nextHasNoMarginBottom\n\t\t\thelp={ __( 'The max. value must be greater than the min. value.' ) }\n\t\t>\n\t\t\t<Flex direction=\"row\" gap={ 4 }>\n\t\t\t\t<NumberControl\n\t\t\t\t\tlabel={ __( 'Min.' ) }\n\t\t\t\t\tvalue={ min }\n\t\t\t\t\tmax={ max ? Number( max ) - 1 : undefined }\n\t\t\t\t\tonChange={ onChangeMin }\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\t\t/>\n\t\t\t\t<NumberControl\n\t\t\t\t\tlabel={ __( 'Max.' ) }\n\t\t\t\t\tvalue={ max }\n\t\t\t\t\tmin={ min ? Number( min ) + 1 : undefined }\n\t\t\t\t\tonChange={ onChangeMax }\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\t\t/>\n\t\t\t</Flex>\n\t\t</BaseControl>\n\t);\n}\n\nexport default function Integer< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n\toperator,\n}: DataFormControlProps< Item > ) {\n\tconst { label, description, getValue, setValue } = field;\n\tconst value = getValue( { item: data } ) ?? '';\n\tconst [ customValidity, setCustomValidity ] =\n\t\tuseState<\n\t\t\tReact.ComponentProps<\n\t\t\t\ttypeof ValidatedNumberControl\n\t\t\t>[ 'customValidity' ]\n\t\t>( undefined );\n\n\tconst onChangeControl = useCallback(\n\t\t( newValue: string | undefined ) => {\n\t\t\tonChange(\n\t\t\t\tsetValue( {\n\t\t\t\t\titem: data,\n\t\t\t\t\t// Do not convert an empty string or undefined to a number,\n\t\t\t\t\t// otherwise there's a mismatch between the UI control (empty)\n\t\t\t\t\t// and the data relied by onChange (0).\n\t\t\t\t\tvalue: [ '', undefined ].includes( newValue )\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: Number( newValue ),\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\t[ data, onChange, setValue ]\n\t);\n\n\tconst onChangeBetweenControls = useCallback(\n\t\t( newValue: IntegerBetween ) => {\n\t\t\tonChange(\n\t\t\t\tsetValue( {\n\t\t\t\t\titem: data,\n\t\t\t\t\tvalue: newValue,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\t[ data, onChange, setValue ]\n\t);\n\n\tconst onValidateControl = useCallback(\n\t\t( newValue: any ) => {\n\t\t\tconst message = field.isValid?.custom?.(\n\t\t\t\tdeepMerge(\n\t\t\t\t\tdata,\n\t\t\t\t\tsetValue( {\n\t\t\t\t\t\titem: data,\n\t\t\t\t\t\tvalue: [ undefined, '', null ].includes( newValue )\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: Number( newValue ),\n\t\t\t\t\t} ) as Partial< Item >\n\t\t\t\t),\n\t\t\t\tfield\n\t\t\t);\n\n\t\t\tif ( message ) {\n\t\t\t\tsetCustomValidity( {\n\t\t\t\t\ttype: 'invalid',\n\t\t\t\t\tmessage,\n\t\t\t\t} );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetCustomValidity( undefined );\n\t\t},\n\t\t[ data, field, setValue ]\n\t);\n\n\tif ( operator === OPERATOR_BETWEEN ) {\n\t\tlet valueBetween: IntegerBetween = [ '', '' ];\n\t\tif (\n\t\t\tArray.isArray( value ) &&\n\t\t\tvalue.length === 2 &&\n\t\t\tvalue.every(\n\t\t\t\t( element ) => typeof element === 'number' || element === ''\n\t\t\t)\n\t\t) {\n\t\t\tvalueBetween = value as IntegerBetween;\n\t\t}\n\t\treturn (\n\t\t\t<BetweenControls\n\t\t\t\tvalue={ valueBetween }\n\t\t\t\tonChange={ onChangeBetweenControls }\n\t\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ValidatedNumberControl\n\t\t\trequired={ !! field.isValid?.required }\n\t\t\tonValidate={ onValidateControl }\n\t\t\tcustomValidity={ customValidity }\n\t\t\tlabel={ label }\n\t\t\thelp={ description }\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChangeControl }\n\t\t\t__next40pxDefaultSize\n\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t/>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,13 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import deepMerge from 'deepmerge';
|
|
5
|
+
|
|
1
6
|
/**
|
|
2
7
|
* WordPress dependencies
|
|
3
8
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import { useCallback } from '@wordpress/element';
|
|
9
|
+
import { privateApis } from '@wordpress/components';
|
|
10
|
+
import { useCallback, useState } from '@wordpress/element';
|
|
6
11
|
|
|
7
12
|
/**
|
|
8
13
|
* Internal dependencies
|
|
9
14
|
*/
|
|
15
|
+
|
|
16
|
+
import { unlock } from '../lock-unlock';
|
|
10
17
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
|
+
const {
|
|
19
|
+
ValidatedRadioControl
|
|
20
|
+
} = unlock(privateApis);
|
|
11
21
|
export default function Radio({
|
|
12
22
|
data,
|
|
13
23
|
field,
|
|
@@ -15,20 +25,43 @@ export default function Radio({
|
|
|
15
25
|
hideLabelFromVision
|
|
16
26
|
}) {
|
|
17
27
|
const {
|
|
18
|
-
|
|
19
|
-
|
|
28
|
+
label,
|
|
29
|
+
description,
|
|
30
|
+
elements,
|
|
31
|
+
getValue,
|
|
32
|
+
setValue
|
|
20
33
|
} = field;
|
|
21
|
-
const value =
|
|
34
|
+
const value = getValue({
|
|
22
35
|
item: data
|
|
23
36
|
});
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
37
|
+
const [customValidity, setCustomValidity] = useState(undefined);
|
|
38
|
+
const onChangeControl = useCallback(newValue => onChange(setValue({
|
|
39
|
+
item: data,
|
|
40
|
+
value: newValue
|
|
41
|
+
})), [data, onChange, setValue]);
|
|
42
|
+
const onValidateControl = useCallback(newValue => {
|
|
43
|
+
const message = field.isValid?.custom?.(deepMerge(data, setValue({
|
|
44
|
+
item: data,
|
|
45
|
+
value: newValue
|
|
46
|
+
})), field);
|
|
47
|
+
if (message) {
|
|
48
|
+
setCustomValidity({
|
|
49
|
+
type: 'invalid',
|
|
50
|
+
message
|
|
51
|
+
});
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
setCustomValidity(undefined);
|
|
55
|
+
}, [data, field, setValue]);
|
|
56
|
+
if (elements) {
|
|
57
|
+
return /*#__PURE__*/_jsx(ValidatedRadioControl, {
|
|
58
|
+
required: !!field.isValid?.required,
|
|
59
|
+
onValidate: onValidateControl,
|
|
60
|
+
customValidity: customValidity,
|
|
29
61
|
label: label,
|
|
62
|
+
help: description,
|
|
30
63
|
onChange: onChangeControl,
|
|
31
|
-
options:
|
|
64
|
+
options: elements,
|
|
32
65
|
selected: value,
|
|
33
66
|
hideLabelFromVision: hideLabelFromVision
|
|
34
67
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["deepMerge","privateApis","useCallback","useState","unlock","jsx","_jsx","ValidatedRadioControl","Radio","data","field","onChange","hideLabelFromVision","label","description","elements","getValue","setValue","value","item","customValidity","setCustomValidity","undefined","onChangeControl","newValue","onValidateControl","message","isValid","custom","type","required","onValidate","help","options","selected"],"sources":["@wordpress/dataviews/src/dataform-controls/radio.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport deepMerge from 'deepmerge';\n\n/**\n * WordPress dependencies\n */\nimport { privateApis } from '@wordpress/components';\nimport { useCallback, useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\nimport { unlock } from '../lock-unlock';\n\nconst { ValidatedRadioControl } = unlock( privateApis );\n\nexport default function Radio< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { label, description, elements, getValue, setValue } = field;\n\tconst value = getValue( { item: data } );\n\tconst [ customValidity, setCustomValidity ] =\n\t\tuseState<\n\t\t\tReact.ComponentProps<\n\t\t\t\ttypeof ValidatedRadioControl\n\t\t\t>[ 'customValidity' ]\n\t\t>( undefined );\n\n\tconst onChangeControl = useCallback(\n\t\t( newValue: string ) =>\n\t\t\tonChange( setValue( { item: data, value: newValue } ) ),\n\t\t[ data, onChange, setValue ]\n\t);\n\n\tconst onValidateControl = useCallback(\n\t\t( newValue: any ) => {\n\t\t\tconst message = field.isValid?.custom?.(\n\t\t\t\tdeepMerge(\n\t\t\t\t\tdata,\n\t\t\t\t\tsetValue( {\n\t\t\t\t\t\titem: data,\n\t\t\t\t\t\tvalue: newValue,\n\t\t\t\t\t} ) as Partial< Item >\n\t\t\t\t),\n\t\t\t\tfield\n\t\t\t);\n\n\t\t\tif ( message ) {\n\t\t\t\tsetCustomValidity( {\n\t\t\t\t\ttype: 'invalid',\n\t\t\t\t\tmessage,\n\t\t\t\t} );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetCustomValidity( undefined );\n\t\t},\n\t\t[ data, field, setValue ]\n\t);\n\n\tif ( elements ) {\n\t\treturn (\n\t\t\t<ValidatedRadioControl\n\t\t\t\trequired={ !! field.isValid?.required }\n\t\t\t\tonValidate={ onValidateControl }\n\t\t\t\tcustomValidity={ customValidity }\n\t\t\t\tlabel={ label }\n\t\t\t\thelp={ description }\n\t\t\t\tonChange={ onChangeControl }\n\t\t\t\toptions={ elements }\n\t\t\t\tselected={ value }\n\t\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn null;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,SAAS,MAAM,WAAW;;AAEjC;AACA;AACA;AACA,SAASC,WAAW,QAAQ,uBAAuB;AACnD,SAASC,WAAW,EAAEC,QAAQ,QAAQ,oBAAoB;;AAE1D;AACA;AACA;;AAEA,SAASC,MAAM,QAAQ,gBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAExC,MAAM;EAAEC;AAAsB,CAAC,GAAGH,MAAM,CAAEH,WAAY,CAAC;AAEvD,eAAe,SAASO,KAAKA,CAAU;EACtCC,IAAI;EACJC,KAAK;EACLC,QAAQ;EACRC;AAC6B,CAAC,EAAG;EACjC,MAAM;IAAEC,KAAK;IAAEC,WAAW;IAAEC,QAAQ;IAAEC,QAAQ;IAAEC;EAAS,CAAC,GAAGP,KAAK;EAClE,MAAMQ,KAAK,GAAGF,QAAQ,CAAE;IAAEG,IAAI,EAAEV;EAAK,CAAE,CAAC;EACxC,MAAM,CAAEW,cAAc,EAAEC,iBAAiB,CAAE,GAC1ClB,QAAQ,CAILmB,SAAU,CAAC;EAEf,MAAMC,eAAe,GAAGrB,WAAW,CAChCsB,QAAgB,IACjBb,QAAQ,CAAEM,QAAQ,CAAE;IAAEE,IAAI,EAAEV,IAAI;IAAES,KAAK,EAAEM;EAAS,CAAE,CAAE,CAAC,EACxD,CAAEf,IAAI,EAAEE,QAAQ,EAAEM,QAAQ,CAC3B,CAAC;EAED,MAAMQ,iBAAiB,GAAGvB,WAAW,CAClCsB,QAAa,IAAM;IACpB,MAAME,OAAO,GAAGhB,KAAK,CAACiB,OAAO,EAAEC,MAAM,GACpC5B,SAAS,CACRS,IAAI,EACJQ,QAAQ,CAAE;MACTE,IAAI,EAAEV,IAAI;MACVS,KAAK,EAAEM;IACR,CAAE,CACH,CAAC,EACDd,KACD,CAAC;IAED,IAAKgB,OAAO,EAAG;MACdL,iBAAiB,CAAE;QAClBQ,IAAI,EAAE,SAAS;QACfH;MACD,CAAE,CAAC;MACH;IACD;IAEAL,iBAAiB,CAAEC,SAAU,CAAC;EAC/B,CAAC,EACD,CAAEb,IAAI,EAAEC,KAAK,EAAEO,QAAQ,CACxB,CAAC;EAED,IAAKF,QAAQ,EAAG;IACf,oBACCT,IAAA,CAACC,qBAAqB;MACrBuB,QAAQ,EAAG,CAAC,CAAEpB,KAAK,CAACiB,OAAO,EAAEG,QAAU;MACvCC,UAAU,EAAGN,iBAAmB;MAChCL,cAAc,EAAGA,cAAgB;MACjCP,KAAK,EAAGA,KAAO;MACfmB,IAAI,EAAGlB,WAAa;MACpBH,QAAQ,EAAGY,eAAiB;MAC5BU,OAAO,EAAGlB,QAAU;MACpBmB,QAAQ,EAAGhB,KAAO;MAClBN,mBAAmB,EAAGA;IAAqB,CAC3C,CAAC;EAEJ;EAEA,OAAO,IAAI;AACZ","ignoreList":[]}
|
|
@@ -57,17 +57,13 @@ export default function RelativeDateControl({
|
|
|
57
57
|
unit = options[0].value
|
|
58
58
|
} = value;
|
|
59
59
|
const onChangeValue = useCallback(newValue => onChange({
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
}), [id, onChange, unit]);
|
|
60
|
+
value: Number(newValue),
|
|
61
|
+
unit
|
|
62
|
+
}), [onChange, unit]);
|
|
65
63
|
const onChangeUnit = useCallback(newUnit => onChange({
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
}), [id, onChange, relValue]);
|
|
64
|
+
value: relValue,
|
|
65
|
+
unit: newUnit
|
|
66
|
+
}), [onChange, relValue]);
|
|
71
67
|
return /*#__PURE__*/_jsx(BaseControl, {
|
|
72
68
|
id: id,
|
|
73
69
|
__nextHasNoMarginBottom: true,
|