@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.
Files changed (175) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +106 -11
  3. package/build/components/dataviews-filters/input-widget.js +48 -4
  4. package/build/components/dataviews-filters/input-widget.js.map +1 -1
  5. package/build/dataform-controls/array.js +9 -7
  6. package/build/dataform-controls/array.js.map +1 -1
  7. package/build/dataform-controls/checkbox.js +31 -20
  8. package/build/dataform-controls/checkbox.js.map +1 -1
  9. package/build/dataform-controls/color.js +29 -24
  10. package/build/dataform-controls/color.js.map +1 -1
  11. package/build/dataform-controls/date.js +32 -24
  12. package/build/dataform-controls/date.js.map +1 -1
  13. package/build/dataform-controls/datetime.js +133 -19
  14. package/build/dataform-controls/datetime.js.map +1 -1
  15. package/build/dataform-controls/email.js +7 -1
  16. package/build/dataform-controls/email.js.map +1 -1
  17. package/build/dataform-controls/index.js +23 -0
  18. package/build/dataform-controls/index.js.map +1 -1
  19. package/build/dataform-controls/integer.js +47 -34
  20. package/build/dataform-controls/integer.js.map +1 -1
  21. package/build/dataform-controls/radio.js +42 -9
  22. package/build/dataform-controls/radio.js.map +1 -1
  23. package/build/dataform-controls/relative-date-control.js +6 -10
  24. package/build/dataform-controls/relative-date-control.js.map +1 -1
  25. package/build/dataform-controls/select.js +41 -10
  26. package/build/dataform-controls/select.js.map +1 -1
  27. package/build/dataform-controls/telephone.js +7 -1
  28. package/build/dataform-controls/telephone.js.map +1 -1
  29. package/build/dataform-controls/text.js +14 -2
  30. package/build/dataform-controls/text.js.map +1 -1
  31. package/build/dataform-controls/textarea.js +33 -20
  32. package/build/dataform-controls/textarea.js.map +1 -1
  33. package/build/dataform-controls/toggle-group.js +36 -6
  34. package/build/dataform-controls/toggle-group.js.map +1 -1
  35. package/build/dataform-controls/toggle.js +33 -22
  36. package/build/dataform-controls/toggle.js.map +1 -1
  37. package/build/dataform-controls/url.js +7 -1
  38. package/build/dataform-controls/url.js.map +1 -1
  39. package/build/dataform-controls/utils/validated-input.js +34 -32
  40. package/build/dataform-controls/utils/validated-input.js.map +1 -1
  41. package/build/dataforms-layouts/panel/dropdown.js +10 -14
  42. package/build/dataforms-layouts/panel/dropdown.js.map +1 -1
  43. package/build/dataforms-layouts/panel/index.js +24 -11
  44. package/build/dataforms-layouts/panel/index.js.map +1 -1
  45. package/build/dataforms-layouts/panel/modal.js +22 -27
  46. package/build/dataforms-layouts/panel/modal.js.map +1 -1
  47. package/build/dataforms-layouts/panel/summary-button.js +67 -0
  48. package/build/dataforms-layouts/panel/summary-button.js.map +1 -0
  49. package/build/normalize-fields.js +17 -0
  50. package/build/normalize-fields.js.map +1 -1
  51. package/build/types.js.map +1 -1
  52. package/build-module/components/dataviews-filters/input-widget.js +48 -4
  53. package/build-module/components/dataviews-filters/input-widget.js.map +1 -1
  54. package/build-module/dataform-controls/array.js +9 -7
  55. package/build-module/dataform-controls/array.js.map +1 -1
  56. package/build-module/dataform-controls/checkbox.js +31 -21
  57. package/build-module/dataform-controls/checkbox.js.map +1 -1
  58. package/build-module/dataform-controls/color.js +28 -24
  59. package/build-module/dataform-controls/color.js.map +1 -1
  60. package/build-module/dataform-controls/date.js +32 -24
  61. package/build-module/dataform-controls/date.js.map +1 -1
  62. package/build-module/dataform-controls/datetime.js +135 -21
  63. package/build-module/dataform-controls/datetime.js.map +1 -1
  64. package/build-module/dataform-controls/email.js +7 -1
  65. package/build-module/dataform-controls/email.js.map +1 -1
  66. package/build-module/dataform-controls/index.js +23 -0
  67. package/build-module/dataform-controls/index.js.map +1 -1
  68. package/build-module/dataform-controls/integer.js +46 -34
  69. package/build-module/dataform-controls/integer.js.map +1 -1
  70. package/build-module/dataform-controls/radio.js +44 -11
  71. package/build-module/dataform-controls/radio.js.map +1 -1
  72. package/build-module/dataform-controls/relative-date-control.js +6 -10
  73. package/build-module/dataform-controls/relative-date-control.js.map +1 -1
  74. package/build-module/dataform-controls/select.js +43 -12
  75. package/build-module/dataform-controls/select.js.map +1 -1
  76. package/build-module/dataform-controls/telephone.js +7 -1
  77. package/build-module/dataform-controls/telephone.js.map +1 -1
  78. package/build-module/dataform-controls/text.js +14 -2
  79. package/build-module/dataform-controls/text.js.map +1 -1
  80. package/build-module/dataform-controls/textarea.js +32 -20
  81. package/build-module/dataform-controls/textarea.js.map +1 -1
  82. package/build-module/dataform-controls/toggle-group.js +38 -8
  83. package/build-module/dataform-controls/toggle-group.js.map +1 -1
  84. package/build-module/dataform-controls/toggle.js +33 -23
  85. package/build-module/dataform-controls/toggle.js.map +1 -1
  86. package/build-module/dataform-controls/url.js +7 -1
  87. package/build-module/dataform-controls/url.js.map +1 -1
  88. package/build-module/dataform-controls/utils/validated-input.js +34 -33
  89. package/build-module/dataform-controls/utils/validated-input.js.map +1 -1
  90. package/build-module/dataforms-layouts/panel/dropdown.js +10 -15
  91. package/build-module/dataforms-layouts/panel/dropdown.js.map +1 -1
  92. package/build-module/dataforms-layouts/panel/index.js +24 -11
  93. package/build-module/dataforms-layouts/panel/index.js.map +1 -1
  94. package/build-module/dataforms-layouts/panel/modal.js +22 -28
  95. package/build-module/dataforms-layouts/panel/modal.js.map +1 -1
  96. package/build-module/dataforms-layouts/panel/summary-button.js +60 -0
  97. package/build-module/dataforms-layouts/panel/summary-button.js.map +1 -0
  98. package/build-module/normalize-fields.js +15 -0
  99. package/build-module/normalize-fields.js.map +1 -1
  100. package/build-module/types.js.map +1 -1
  101. package/build-types/components/dataform/stories/index.story.d.ts +3 -0
  102. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
  103. package/build-types/components/dataviews/stories/fixtures.d.ts +4 -2
  104. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
  105. package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -1
  106. package/build-types/dataform-controls/array.d.ts.map +1 -1
  107. package/build-types/dataform-controls/checkbox.d.ts.map +1 -1
  108. package/build-types/dataform-controls/color.d.ts.map +1 -1
  109. package/build-types/dataform-controls/date.d.ts.map +1 -1
  110. package/build-types/dataform-controls/datetime.d.ts.map +1 -1
  111. package/build-types/dataform-controls/email.d.ts.map +1 -1
  112. package/build-types/dataform-controls/index.d.ts +1 -1
  113. package/build-types/dataform-controls/index.d.ts.map +1 -1
  114. package/build-types/dataform-controls/integer.d.ts.map +1 -1
  115. package/build-types/dataform-controls/radio.d.ts.map +1 -1
  116. package/build-types/dataform-controls/relative-date-control.d.ts +6 -5
  117. package/build-types/dataform-controls/relative-date-control.d.ts.map +1 -1
  118. package/build-types/dataform-controls/select.d.ts.map +1 -1
  119. package/build-types/dataform-controls/telephone.d.ts.map +1 -1
  120. package/build-types/dataform-controls/text.d.ts +1 -1
  121. package/build-types/dataform-controls/text.d.ts.map +1 -1
  122. package/build-types/dataform-controls/textarea.d.ts +1 -1
  123. package/build-types/dataform-controls/textarea.d.ts.map +1 -1
  124. package/build-types/dataform-controls/toggle-group.d.ts.map +1 -1
  125. package/build-types/dataform-controls/toggle.d.ts.map +1 -1
  126. package/build-types/dataform-controls/url.d.ts.map +1 -1
  127. package/build-types/dataform-controls/utils/validated-input.d.ts +4 -4
  128. package/build-types/dataform-controls/utils/validated-input.d.ts.map +1 -1
  129. package/build-types/dataforms-layouts/panel/dropdown.d.ts +2 -1
  130. package/build-types/dataforms-layouts/panel/dropdown.d.ts.map +1 -1
  131. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
  132. package/build-types/dataforms-layouts/panel/modal.d.ts +2 -1
  133. package/build-types/dataforms-layouts/panel/modal.d.ts.map +1 -1
  134. package/build-types/dataforms-layouts/panel/summary-button.d.ts +15 -0
  135. package/build-types/dataforms-layouts/panel/summary-button.d.ts.map +1 -0
  136. package/build-types/field-types/stories/index.story.d.ts.map +1 -1
  137. package/build-types/normalize-fields.d.ts +3 -0
  138. package/build-types/normalize-fields.d.ts.map +1 -1
  139. package/build-types/types.d.ts +66 -3
  140. package/build-types/types.d.ts.map +1 -1
  141. package/build-wp/index.js +1468 -1422
  142. package/package.json +16 -15
  143. package/src/components/dataform/stories/index.story.tsx +436 -7
  144. package/src/components/dataviews/stories/fixtures.tsx +99 -41
  145. package/src/components/dataviews/stories/index.story.tsx +1 -1
  146. package/src/components/dataviews-filters/input-widget.tsx +44 -5
  147. package/src/components/dataviews-picker/stories/index.story.tsx +1 -1
  148. package/src/dataform-controls/array.tsx +4 -6
  149. package/src/dataform-controls/checkbox.tsx +41 -24
  150. package/src/dataform-controls/color.tsx +33 -24
  151. package/src/dataform-controls/date.tsx +47 -21
  152. package/src/dataform-controls/datetime.tsx +171 -23
  153. package/src/dataform-controls/email.tsx +9 -1
  154. package/src/dataform-controls/index.tsx +26 -0
  155. package/src/dataform-controls/integer.tsx +82 -49
  156. package/src/dataform-controls/radio.tsx +53 -11
  157. package/src/dataform-controls/relative-date-control.tsx +11 -10
  158. package/src/dataform-controls/select.tsx +53 -10
  159. package/src/dataform-controls/telephone.tsx +9 -1
  160. package/src/dataform-controls/text.tsx +18 -1
  161. package/src/dataform-controls/textarea.tsx +38 -24
  162. package/src/dataform-controls/toggle-group.tsx +50 -10
  163. package/src/dataform-controls/toggle.tsx +41 -24
  164. package/src/dataform-controls/url.tsx +9 -1
  165. package/src/dataform-controls/utils/validated-input.tsx +50 -50
  166. package/src/dataforms-layouts/panel/dropdown.tsx +12 -23
  167. package/src/dataforms-layouts/panel/index.tsx +39 -16
  168. package/src/dataforms-layouts/panel/modal.tsx +24 -30
  169. package/src/dataforms-layouts/panel/summary-button.tsx +92 -0
  170. package/src/field-types/stories/index.story.tsx +89 -1
  171. package/src/normalize-fields.ts +18 -0
  172. package/src/test/filter-and-sort-data-view.js +148 -138
  173. package/src/test/normalize-fields.ts +114 -0
  174. package/src/types.ts +73 -3
  175. package/tsconfig.tsbuildinfo +1 -1
@@ -1,8 +1,15 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { BaseControl, TimePicker, VisuallyHidden } from '@wordpress/components';
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 = field.getValue({
139
+ const value = getValue({
26
140
  item: data
27
141
  });
28
- const onChangeControl = useCallback(newValue => onChange({
29
- [id]: newValue
30
- }), [id, onChange]);
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: 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__*/_jsxs("fieldset", {
42
- className: "dataviews-controls__datetime",
43
- children: [!hideLabelFromVision && /*#__PURE__*/_jsx(BaseControl.VisualLabel, {
44
- as: "legend",
45
- children: label
46
- }), hideLabelFromVision && /*#__PURE__*/_jsx(VisuallyHidden, {
47
- as: "legend",
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
- icon: atSymbol
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\ticon: atSymbol,\n\t\t\t} }\n\t\t/>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,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,IAAI,EAAEV;EAAQ,CAEf,CAAC;AAEJ","ignoreList":[]}
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","getControlByType","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} 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\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 ( 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\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;;AAMA,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;AAMjC,MAAMC,aAA2B,GAAG;EACnCH,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,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,OAAOC,gBAAgB,CAAEH,KAAK,CAACE,IAAK,CAAC;EACtC;EAEA,IAAKF,KAAK,CAACI,QAAQ,IAAIJ,KAAK,CAACK,IAAI,KAAK,OAAO,EAAG;IAC/C,OAAOF,gBAAgB,CAAE,QAAS,CAAC;EACpC;EAEA,IAAK,OAAOF,mBAAmB,CAACC,IAAI,KAAK,QAAQ,EAAG;IACnD,OAAOC,gBAAgB,CAAEF,mBAAmB,CAACC,IAAK,CAAC;EACpD;EAEA,OAAOD,mBAAmB,CAACC,IAAI;AAChC;AAEA,OAAO,SAASC,gBAAgBA,CAAEE,IAAY,EAAG;EAChD,IAAKC,MAAM,CAACC,IAAI,CAAET,aAAc,CAAC,CAACU,QAAQ,CAAEH,IAAK,CAAC,EAAG;IACpD,OAAOP,aAAa,CAAEO,IAAI,CAAE;EAC7B;EAEA,MAAM,UAAU,GAAGA,IAAI,GAAG,YAAY;AACvC","ignoreList":[]}
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 = ''] = Array.isArray(value) ? value : [];
24
- const onChangeMin = useCallback(newValue => onChange({
25
- [id]: [Number(newValue), max]
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 _field$getValue;
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 = (_field$getValue = field.getValue({
68
+ const value = (_getValue = getValue({
68
69
  item: data
69
- })) !== null && _field$getValue !== void 0 ? _field$getValue : '';
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
- [id]: ['', undefined].includes(newValue) ? undefined : Number(newValue)
77
- });
78
- }, [id, onChange]);
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
- id: id,
82
- value: value,
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: newValue => {
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","id","value","onChange","hideLabelFromVision","min","max","Array","isArray","onChangeMin","newValue","Number","onChangeMax","__nextHasNoMarginBottom","help","children","direction","gap","label","undefined","__next40pxDefaultSize","Integer","data","field","operator","_field$getValue","description","getValue","item","customValidity","setCustomValidity","onChangeControl","includes","required","isValid","onValidate","message","custom","type"],"sources":["@wordpress/dataviews/src/dataform-controls/integer.tsx"],"sourcesContent":["/**\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\nfunction BetweenControls< Item >( {\n\tid,\n\tvalue,\n\tonChange,\n\thideLabelFromVision,\n}: {\n\tid: string;\n\tvalue: any;\n\tonChange: DataFormControlProps< Item >[ 'onChange' ];\n\thideLabelFromVision?: boolean;\n} ) {\n\tconst [ min = '', max = '' ] = Array.isArray( value ) ? value : [];\n\n\tconst onChangeMin = useCallback(\n\t\t( newValue: string | undefined ) =>\n\t\t\tonChange( {\n\t\t\t\t[ id ]: [ Number( newValue ), max ],\n\t\t\t} ),\n\t\t[ id, onChange, max ]\n\t);\n\n\tconst onChangeMax = useCallback(\n\t\t( newValue: string | undefined ) =>\n\t\t\tonChange( {\n\t\t\t\t[ id ]: [ min, Number( newValue ) ],\n\t\t\t} ),\n\t\t[ id, 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 { id, label, description } = field;\n\tconst value = field.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\t// Do not convert an empty string or undefined to a number,\n\t\t\t\t// otherwise there's a mismatch between the UI control (empty)\n\t\t\t\t// and the data relied by onChange (0).\n\t\t\t\t[ id ]: [ '', undefined ].includes( newValue )\n\t\t\t\t\t? undefined\n\t\t\t\t\t: Number( newValue ),\n\t\t\t} );\n\t\t},\n\t\t[ id, onChange ]\n\t);\n\n\tif ( operator === OPERATOR_BETWEEN ) {\n\t\treturn (\n\t\t\t<BetweenControls\n\t\t\t\tid={ id }\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\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={ ( newValue: any ) => {\n\t\t\t\tconst message = field.isValid?.custom?.(\n\t\t\t\t\t{\n\t\t\t\t\t\t...data,\n\t\t\t\t\t\t[ id ]: [ 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},\n\t\t\t\t\tfield\n\t\t\t\t);\n\n\t\t\t\tif ( message ) {\n\t\t\t\t\tsetCustomValidity( {\n\t\t\t\t\t\ttype: 'invalid',\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetCustomValidity( undefined );\n\t\t\t} }\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
+ {"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 { RadioControl } from '@wordpress/components';
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
- id,
19
- label
28
+ label,
29
+ description,
30
+ elements,
31
+ getValue,
32
+ setValue
20
33
  } = field;
21
- const value = field.getValue({
34
+ const value = getValue({
22
35
  item: data
23
36
  });
24
- const onChangeControl = useCallback(newValue => onChange({
25
- [id]: newValue
26
- }), [id, onChange]);
27
- if (field.elements) {
28
- return /*#__PURE__*/_jsx(RadioControl, {
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: field.elements,
64
+ options: elements,
32
65
  selected: value,
33
66
  hideLabelFromVision: hideLabelFromVision
34
67
  });
@@ -1 +1 @@
1
- {"version":3,"names":["RadioControl","useCallback","jsx","_jsx","Radio","data","field","onChange","hideLabelFromVision","id","label","value","getValue","item","onChangeControl","newValue","elements","options","selected"],"sources":["@wordpress/dataviews/src/dataform-controls/radio.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { RadioControl } from '@wordpress/components';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\n\nexport default function Radio< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\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 ) =>\n\t\t\tonChange( {\n\t\t\t\t[ id ]: newValue,\n\t\t\t} ),\n\t\t[ id, onChange ]\n\t);\n\n\tif ( field.elements ) {\n\t\treturn (\n\t\t\t<RadioControl\n\t\t\t\tlabel={ label }\n\t\t\t\tonChange={ onChangeControl }\n\t\t\t\toptions={ field.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,SAASA,YAAY,QAAQ,uBAAuB;AACpD,SAASC,WAAW,QAAQ,oBAAoB;;AAEhD;AACA;AACA;AAFA,SAAAC,GAAA,IAAAC,IAAA;AAKA,eAAe,SAASC,KAAKA,CAAU;EACtCC,IAAI;EACJC,KAAK;EACLC,QAAQ;EACRC;AAC6B,CAAC,EAAG;EACjC,MAAM;IAAEC,EAAE;IAAEC;EAAM,CAAC,GAAGJ,KAAK;EAC3B,MAAMK,KAAK,GAAGL,KAAK,CAACM,QAAQ,CAAE;IAAEC,IAAI,EAAER;EAAK,CAAE,CAAC;EAE9C,MAAMS,eAAe,GAAGb,WAAW,CAChCc,QAAgB,IACjBR,QAAQ,CAAE;IACT,CAAEE,EAAE,GAAIM;EACT,CAAE,CAAC,EACJ,CAAEN,EAAE,EAAEF,QAAQ,CACf,CAAC;EAED,IAAKD,KAAK,CAACU,QAAQ,EAAG;IACrB,oBACCb,IAAA,CAACH,YAAY;MACZU,KAAK,EAAGA,KAAO;MACfH,QAAQ,EAAGO,eAAiB;MAC5BG,OAAO,EAAGX,KAAK,CAACU,QAAU;MAC1BE,QAAQ,EAAGP,KAAO;MAClBH,mBAAmB,EAAGA;IAAqB,CAC3C,CAAC;EAEJ;EAEA,OAAO,IAAI;AACZ","ignoreList":[]}
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
- [id]: {
61
- value: Number(newValue),
62
- unit
63
- }
64
- }), [id, onChange, unit]);
60
+ value: Number(newValue),
61
+ unit
62
+ }), [onChange, unit]);
65
63
  const onChangeUnit = useCallback(newUnit => onChange({
66
- [id]: {
67
- value: relValue,
68
- unit: newUnit
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,