@wordpress/dataviews 9.0.1-next.6f42e1382.0 → 9.1.1-next.f56bd8138.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 (201) hide show
  1. package/CHANGELOG.md +22 -2
  2. package/README.md +107 -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/components/dataviews-view-config/index.js +22 -3
  6. package/build/components/dataviews-view-config/index.js.map +1 -1
  7. package/build/dataform-controls/array.js +117 -29
  8. package/build/dataform-controls/array.js.map +1 -1
  9. package/build/dataform-controls/checkbox.js +31 -20
  10. package/build/dataform-controls/checkbox.js.map +1 -1
  11. package/build/dataform-controls/color.js +29 -24
  12. package/build/dataform-controls/color.js.map +1 -1
  13. package/build/dataform-controls/date.js +32 -24
  14. package/build/dataform-controls/date.js.map +1 -1
  15. package/build/dataform-controls/datetime.js +133 -19
  16. package/build/dataform-controls/datetime.js.map +1 -1
  17. package/build/dataform-controls/email.js +7 -1
  18. package/build/dataform-controls/email.js.map +1 -1
  19. package/build/dataform-controls/index.js +23 -0
  20. package/build/dataform-controls/index.js.map +1 -1
  21. package/build/dataform-controls/integer.js +47 -34
  22. package/build/dataform-controls/integer.js.map +1 -1
  23. package/build/dataform-controls/radio.js +42 -9
  24. package/build/dataform-controls/radio.js.map +1 -1
  25. package/build/dataform-controls/relative-date-control.js +6 -10
  26. package/build/dataform-controls/relative-date-control.js.map +1 -1
  27. package/build/dataform-controls/select.js +41 -10
  28. package/build/dataform-controls/select.js.map +1 -1
  29. package/build/dataform-controls/telephone.js +7 -1
  30. package/build/dataform-controls/telephone.js.map +1 -1
  31. package/build/dataform-controls/text.js +14 -2
  32. package/build/dataform-controls/text.js.map +1 -1
  33. package/build/dataform-controls/textarea.js +33 -20
  34. package/build/dataform-controls/textarea.js.map +1 -1
  35. package/build/dataform-controls/toggle-group.js +36 -6
  36. package/build/dataform-controls/toggle-group.js.map +1 -1
  37. package/build/dataform-controls/toggle.js +33 -22
  38. package/build/dataform-controls/toggle.js.map +1 -1
  39. package/build/dataform-controls/url.js +7 -1
  40. package/build/dataform-controls/url.js.map +1 -1
  41. package/build/dataform-controls/utils/validated-input.js +34 -32
  42. package/build/dataform-controls/utils/validated-input.js.map +1 -1
  43. package/build/dataforms-layouts/panel/dropdown.js +10 -14
  44. package/build/dataforms-layouts/panel/dropdown.js.map +1 -1
  45. package/build/dataforms-layouts/panel/index.js +24 -11
  46. package/build/dataforms-layouts/panel/index.js.map +1 -1
  47. package/build/dataforms-layouts/panel/modal.js +22 -27
  48. package/build/dataforms-layouts/panel/modal.js.map +1 -1
  49. package/build/dataforms-layouts/panel/summary-button.js +67 -0
  50. package/build/dataforms-layouts/panel/summary-button.js.map +1 -0
  51. package/build/field-types/array.js +0 -6
  52. package/build/field-types/array.js.map +1 -1
  53. package/build/index.js +7 -0
  54. package/build/index.js.map +1 -1
  55. package/build/normalize-fields.js +17 -0
  56. package/build/normalize-fields.js.map +1 -1
  57. package/build/types.js.map +1 -1
  58. package/build/validation.js +18 -1
  59. package/build/validation.js.map +1 -1
  60. package/build-module/components/dataviews-filters/input-widget.js +48 -4
  61. package/build-module/components/dataviews-filters/input-widget.js.map +1 -1
  62. package/build-module/components/dataviews-view-config/index.js +22 -3
  63. package/build-module/components/dataviews-view-config/index.js.map +1 -1
  64. package/build-module/dataform-controls/array.js +120 -32
  65. package/build-module/dataform-controls/array.js.map +1 -1
  66. package/build-module/dataform-controls/checkbox.js +31 -21
  67. package/build-module/dataform-controls/checkbox.js.map +1 -1
  68. package/build-module/dataform-controls/color.js +28 -24
  69. package/build-module/dataform-controls/color.js.map +1 -1
  70. package/build-module/dataform-controls/date.js +32 -24
  71. package/build-module/dataform-controls/date.js.map +1 -1
  72. package/build-module/dataform-controls/datetime.js +135 -21
  73. package/build-module/dataform-controls/datetime.js.map +1 -1
  74. package/build-module/dataform-controls/email.js +7 -1
  75. package/build-module/dataform-controls/email.js.map +1 -1
  76. package/build-module/dataform-controls/index.js +23 -0
  77. package/build-module/dataform-controls/index.js.map +1 -1
  78. package/build-module/dataform-controls/integer.js +46 -34
  79. package/build-module/dataform-controls/integer.js.map +1 -1
  80. package/build-module/dataform-controls/radio.js +44 -11
  81. package/build-module/dataform-controls/radio.js.map +1 -1
  82. package/build-module/dataform-controls/relative-date-control.js +6 -10
  83. package/build-module/dataform-controls/relative-date-control.js.map +1 -1
  84. package/build-module/dataform-controls/select.js +43 -12
  85. package/build-module/dataform-controls/select.js.map +1 -1
  86. package/build-module/dataform-controls/telephone.js +7 -1
  87. package/build-module/dataform-controls/telephone.js.map +1 -1
  88. package/build-module/dataform-controls/text.js +14 -2
  89. package/build-module/dataform-controls/text.js.map +1 -1
  90. package/build-module/dataform-controls/textarea.js +32 -20
  91. package/build-module/dataform-controls/textarea.js.map +1 -1
  92. package/build-module/dataform-controls/toggle-group.js +38 -8
  93. package/build-module/dataform-controls/toggle-group.js.map +1 -1
  94. package/build-module/dataform-controls/toggle.js +33 -23
  95. package/build-module/dataform-controls/toggle.js.map +1 -1
  96. package/build-module/dataform-controls/url.js +7 -1
  97. package/build-module/dataform-controls/url.js.map +1 -1
  98. package/build-module/dataform-controls/utils/validated-input.js +34 -33
  99. package/build-module/dataform-controls/utils/validated-input.js.map +1 -1
  100. package/build-module/dataforms-layouts/panel/dropdown.js +10 -15
  101. package/build-module/dataforms-layouts/panel/dropdown.js.map +1 -1
  102. package/build-module/dataforms-layouts/panel/index.js +24 -11
  103. package/build-module/dataforms-layouts/panel/index.js.map +1 -1
  104. package/build-module/dataforms-layouts/panel/modal.js +22 -28
  105. package/build-module/dataforms-layouts/panel/modal.js.map +1 -1
  106. package/build-module/dataforms-layouts/panel/summary-button.js +60 -0
  107. package/build-module/dataforms-layouts/panel/summary-button.js.map +1 -0
  108. package/build-module/field-types/array.js +0 -6
  109. package/build-module/field-types/array.js.map +1 -1
  110. package/build-module/index.js +1 -0
  111. package/build-module/index.js.map +1 -1
  112. package/build-module/normalize-fields.js +15 -0
  113. package/build-module/normalize-fields.js.map +1 -1
  114. package/build-module/types.js.map +1 -1
  115. package/build-module/validation.js +18 -1
  116. package/build-module/validation.js.map +1 -1
  117. package/build-types/components/dataform/stories/index.story.d.ts +3 -0
  118. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
  119. package/build-types/components/dataviews/stories/fixtures.d.ts +4 -2
  120. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
  121. package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -1
  122. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  123. package/build-types/dataform-controls/array.d.ts.map +1 -1
  124. package/build-types/dataform-controls/checkbox.d.ts.map +1 -1
  125. package/build-types/dataform-controls/color.d.ts.map +1 -1
  126. package/build-types/dataform-controls/date.d.ts.map +1 -1
  127. package/build-types/dataform-controls/datetime.d.ts.map +1 -1
  128. package/build-types/dataform-controls/email.d.ts.map +1 -1
  129. package/build-types/dataform-controls/index.d.ts +1 -1
  130. package/build-types/dataform-controls/index.d.ts.map +1 -1
  131. package/build-types/dataform-controls/integer.d.ts.map +1 -1
  132. package/build-types/dataform-controls/radio.d.ts.map +1 -1
  133. package/build-types/dataform-controls/relative-date-control.d.ts +6 -5
  134. package/build-types/dataform-controls/relative-date-control.d.ts.map +1 -1
  135. package/build-types/dataform-controls/select.d.ts.map +1 -1
  136. package/build-types/dataform-controls/telephone.d.ts.map +1 -1
  137. package/build-types/dataform-controls/text.d.ts +1 -1
  138. package/build-types/dataform-controls/text.d.ts.map +1 -1
  139. package/build-types/dataform-controls/textarea.d.ts +1 -1
  140. package/build-types/dataform-controls/textarea.d.ts.map +1 -1
  141. package/build-types/dataform-controls/toggle-group.d.ts.map +1 -1
  142. package/build-types/dataform-controls/toggle.d.ts.map +1 -1
  143. package/build-types/dataform-controls/url.d.ts.map +1 -1
  144. package/build-types/dataform-controls/utils/validated-input.d.ts +4 -4
  145. package/build-types/dataform-controls/utils/validated-input.d.ts.map +1 -1
  146. package/build-types/dataforms-layouts/panel/dropdown.d.ts +2 -1
  147. package/build-types/dataforms-layouts/panel/dropdown.d.ts.map +1 -1
  148. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
  149. package/build-types/dataforms-layouts/panel/modal.d.ts +2 -1
  150. package/build-types/dataforms-layouts/panel/modal.d.ts.map +1 -1
  151. package/build-types/dataforms-layouts/panel/summary-button.d.ts +15 -0
  152. package/build-types/dataforms-layouts/panel/summary-button.d.ts.map +1 -0
  153. package/build-types/field-types/array.d.ts.map +1 -1
  154. package/build-types/field-types/stories/index.story.d.ts.map +1 -1
  155. package/build-types/index.d.ts +1 -0
  156. package/build-types/index.d.ts.map +1 -1
  157. package/build-types/normalize-fields.d.ts +3 -0
  158. package/build-types/normalize-fields.d.ts.map +1 -1
  159. package/build-types/types.d.ts +68 -4
  160. package/build-types/types.d.ts.map +1 -1
  161. package/build-types/validation.d.ts.map +1 -1
  162. package/build-wp/index.js +2009 -1489
  163. package/package.json +16 -15
  164. package/src/components/dataform/stories/index.story.tsx +509 -8
  165. package/src/components/dataviews/stories/fixtures.tsx +99 -41
  166. package/src/components/dataviews/stories/index.story.tsx +1 -1
  167. package/src/components/dataviews-filters/input-widget.tsx +44 -5
  168. package/src/components/dataviews-picker/stories/index.story.tsx +1 -1
  169. package/src/components/dataviews-view-config/index.tsx +18 -3
  170. package/src/dataform-controls/array.tsx +139 -44
  171. package/src/dataform-controls/checkbox.tsx +41 -24
  172. package/src/dataform-controls/color.tsx +33 -24
  173. package/src/dataform-controls/date.tsx +47 -21
  174. package/src/dataform-controls/datetime.tsx +171 -23
  175. package/src/dataform-controls/email.tsx +9 -1
  176. package/src/dataform-controls/index.tsx +26 -0
  177. package/src/dataform-controls/integer.tsx +82 -49
  178. package/src/dataform-controls/radio.tsx +53 -11
  179. package/src/dataform-controls/relative-date-control.tsx +11 -10
  180. package/src/dataform-controls/select.tsx +53 -10
  181. package/src/dataform-controls/telephone.tsx +9 -1
  182. package/src/dataform-controls/text.tsx +18 -1
  183. package/src/dataform-controls/textarea.tsx +38 -24
  184. package/src/dataform-controls/toggle-group.tsx +50 -10
  185. package/src/dataform-controls/toggle.tsx +41 -24
  186. package/src/dataform-controls/url.tsx +9 -1
  187. package/src/dataform-controls/utils/validated-input.tsx +50 -50
  188. package/src/dataforms-layouts/panel/dropdown.tsx +12 -23
  189. package/src/dataforms-layouts/panel/index.tsx +39 -16
  190. package/src/dataforms-layouts/panel/modal.tsx +24 -30
  191. package/src/dataforms-layouts/panel/summary-button.tsx +92 -0
  192. package/src/field-types/array.tsx +0 -8
  193. package/src/field-types/stories/index.story.tsx +89 -1
  194. package/src/index.ts +1 -0
  195. package/src/normalize-fields.ts +18 -0
  196. package/src/test/filter-and-sort-data-view.js +148 -138
  197. package/src/test/normalize-fields.ts +114 -0
  198. package/src/test/validation.ts +192 -0
  199. package/src/types.ts +75 -4
  200. package/src/validation.ts +30 -0
  201. package/tsconfig.tsbuildinfo +1 -1
@@ -1,12 +1,20 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.default = ArrayControl;
8
+ var _deepmerge = _interopRequireDefault(require("deepmerge"));
7
9
  var _components = require("@wordpress/components");
8
10
  var _element = require("@wordpress/element");
11
+ var _i18n = require("@wordpress/i18n");
12
+ var _lockUnlock = require("../lock-unlock");
9
13
  var _jsxRuntime = require("react/jsx-runtime");
14
+ /**
15
+ * External dependencies
16
+ */
17
+
10
18
  /**
11
19
  * WordPress dependencies
12
20
  */
@@ -15,56 +23,136 @@ var _jsxRuntime = require("react/jsx-runtime");
15
23
  * Internal dependencies
16
24
  */
17
25
 
26
+ const {
27
+ ValidatedFormTokenField
28
+ } = (0, _lockUnlock.unlock)(_components.privateApis);
18
29
  function ArrayControl({
19
30
  data,
20
31
  field,
21
32
  onChange,
22
33
  hideLabelFromVision
23
34
  }) {
24
- var _elements$map;
25
35
  const {
26
- id,
27
36
  label,
28
37
  placeholder,
29
- elements
38
+ elements,
39
+ getValue,
40
+ setValue
30
41
  } = field;
31
- const value = field.getValue({
42
+ const value = getValue({
32
43
  item: data
33
44
  });
34
- const findElementByValue = (0, _element.useCallback)(suggestionValue => {
35
- return elements?.find(suggestion => suggestion.value === suggestionValue);
36
- }, [elements]);
37
- const findElementByLabel = (0, _element.useCallback)(suggestionLabel => {
38
- return elements?.find(suggestion => suggestion.label === suggestionLabel);
39
- }, [elements]);
45
+ const [customValidity, setCustomValidity] = (0, _element.useState)(undefined);
40
46
 
41
- // Ensure value is an array
42
- const arrayValue = (0, _element.useMemo)(() => Array.isArray(value) ? value.map(token => {
43
- const tokenLabel = findElementByValue(token)?.label;
44
- return tokenLabel || token;
45
- }) : [], [value, findElementByValue]);
46
- const onChangeControl = (0, _element.useCallback)(tokens => {
47
- // Convert TokenItem objects to strings
48
- const stringTokens = tokens.map(token => {
49
- if (typeof token !== 'string') {
47
+ // Convert stored values to element objects for the token field
48
+ const arrayValueAsElements = (0, _element.useMemo)(() => Array.isArray(value) ? value.map(token => {
49
+ const element = elements?.find(suggestion => suggestion.value === token);
50
+ return element || {
51
+ value: token,
52
+ label: token
53
+ };
54
+ }) : [], [value, elements]);
55
+ const validateTokens = (0, _element.useCallback)(tokens => {
56
+ // Extract actual values from tokens for validation
57
+ const tokenValues = tokens.map(token => {
58
+ if (typeof token === 'object' && 'value' in token) {
50
59
  return token.value;
51
60
  }
52
- const tokenByLabel = findElementByLabel(token);
53
- return tokenByLabel?.value || token;
61
+ return token;
54
62
  });
55
- onChange({
56
- [id]: stringTokens
63
+
64
+ // First, check if elements validation is required and any tokens are invalid
65
+ if (field.isValid?.elements && elements) {
66
+ const invalidTokens = tokenValues.filter(tokenValue => {
67
+ return !elements.some(element => element.value === tokenValue);
68
+ });
69
+ if (invalidTokens.length > 0) {
70
+ setCustomValidity({
71
+ type: 'invalid',
72
+ message: (0, _i18n.sprintf)(/* translators: %s: list of invalid tokens */
73
+ (0, _i18n._n)('Please select from the available options: %s is invalid.', 'Please select from the available options: %s are invalid.', invalidTokens.length), invalidTokens.join(', '))
74
+ });
75
+ return;
76
+ }
77
+ }
78
+
79
+ // Then check custom validation if provided.
80
+ if (field.isValid?.custom) {
81
+ const result = field.isValid?.custom?.((0, _deepmerge.default)(data, setValue({
82
+ item: data,
83
+ value: tokenValues
84
+ })), field);
85
+ if (result) {
86
+ setCustomValidity({
87
+ type: 'invalid',
88
+ message: result
89
+ });
90
+ return;
91
+ }
92
+ }
93
+
94
+ // If no validation errors, clear custom validity
95
+ setCustomValidity(undefined);
96
+ }, [elements, data, field, setValue]);
97
+ const onChangeControl = (0, _element.useCallback)(tokens => {
98
+ const valueTokens = tokens.map(token => {
99
+ if (typeof token === 'object' && 'value' in token) {
100
+ return token.value;
101
+ }
102
+ // If it's a string, it's either a new suggestion value or user input
103
+ return token;
57
104
  });
58
- }, [id, onChange, findElementByLabel]);
59
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.FormTokenField, {
105
+ onChange(setValue({
106
+ item: data,
107
+ value: valueTokens
108
+ }));
109
+ }, [onChange, setValue, data]);
110
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(ValidatedFormTokenField, {
111
+ required: !!field.isValid?.required,
112
+ onValidate: validateTokens,
113
+ customValidity: customValidity,
60
114
  label: hideLabelFromVision ? undefined : label,
61
- value: arrayValue,
115
+ value: arrayValueAsElements,
62
116
  onChange: onChangeControl,
63
117
  placeholder: placeholder,
64
- suggestions: (_elements$map = elements?.map(suggestion => suggestion.label)) !== null && _elements$map !== void 0 ? _elements$map : [],
118
+ suggestions: elements?.map(element => element.value),
119
+ __experimentalValidateInput: token => {
120
+ // If elements validation is required, check if token is valid
121
+ if (field.isValid?.elements && elements) {
122
+ return elements.some(element => element.value === token || element.label === token);
123
+ }
124
+
125
+ // For non-elements validation, allow all tokens
126
+ return true;
127
+ },
65
128
  __experimentalExpandOnFocus: elements && elements.length > 0,
66
- __next40pxDefaultSize: true,
67
- __nextHasNoMarginBottom: true
129
+ __experimentalShowHowTo: !field.isValid?.elements,
130
+ displayTransform: token => {
131
+ // For existing tokens (element objects), display their label
132
+ if (typeof token === 'object' && 'label' in token) {
133
+ return token.label;
134
+ }
135
+ // For suggestions (value strings), find the corresponding element and show its label
136
+ if (typeof token === 'string' && elements) {
137
+ const element = elements.find(el => el.value === token);
138
+ return element?.label || token;
139
+ }
140
+ return token;
141
+ },
142
+ __experimentalRenderItem: ({
143
+ item
144
+ }) => {
145
+ // Custom rendering for suggestion items (item is a value string)
146
+ if (typeof item === 'string' && elements) {
147
+ const element = elements.find(el => el.value === item);
148
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
149
+ children: element?.label || item
150
+ });
151
+ }
152
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
153
+ children: item
154
+ });
155
+ }
68
156
  });
69
157
  }
70
158
  //# sourceMappingURL=array.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_components","require","_element","_jsxRuntime","ArrayControl","data","field","onChange","hideLabelFromVision","_elements$map","id","label","placeholder","elements","value","getValue","item","findElementByValue","useCallback","suggestionValue","find","suggestion","findElementByLabel","suggestionLabel","arrayValue","useMemo","Array","isArray","map","token","tokenLabel","onChangeControl","tokens","stringTokens","tokenByLabel","jsx","FormTokenField","undefined","suggestions","__experimentalExpandOnFocus","length","__next40pxDefaultSize","__nextHasNoMarginBottom"],"sources":["@wordpress/dataviews/src/dataform-controls/array.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { FormTokenField } from '@wordpress/components';\nimport { useCallback, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\n\nexport default function ArrayControl< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { id, label, placeholder, elements } = field;\n\tconst value = field.getValue( { item: data } );\n\n\tconst findElementByValue = useCallback(\n\t\t( suggestionValue: string ) => {\n\t\t\treturn elements?.find(\n\t\t\t\t( suggestion ) => suggestion.value === suggestionValue\n\t\t\t);\n\t\t},\n\t\t[ elements ]\n\t);\n\n\tconst findElementByLabel = useCallback(\n\t\t( suggestionLabel: string ) => {\n\t\t\treturn elements?.find(\n\t\t\t\t( suggestion ) => suggestion.label === suggestionLabel\n\t\t\t);\n\t\t},\n\t\t[ elements ]\n\t);\n\n\t// Ensure value is an array\n\tconst arrayValue = useMemo(\n\t\t() =>\n\t\t\tArray.isArray( value )\n\t\t\t\t? value.map( ( token ) => {\n\t\t\t\t\t\tconst tokenLabel = findElementByValue( token )?.label;\n\t\t\t\t\t\treturn tokenLabel || token;\n\t\t\t\t } )\n\t\t\t\t: [],\n\t\t[ value, findElementByValue ]\n\t);\n\n\tconst onChangeControl = useCallback(\n\t\t( tokens: ( string | { value: string } )[] ) => {\n\t\t\t// Convert TokenItem objects to strings\n\t\t\tconst stringTokens = tokens.map( ( token ) => {\n\t\t\t\tif ( typeof token !== 'string' ) {\n\t\t\t\t\treturn token.value;\n\t\t\t\t}\n\n\t\t\t\tconst tokenByLabel = findElementByLabel( token );\n\n\t\t\t\treturn tokenByLabel?.value || token;\n\t\t\t} );\n\n\t\t\tonChange( {\n\t\t\t\t[ id ]: stringTokens,\n\t\t\t} );\n\t\t},\n\t\t[ id, onChange, findElementByLabel ]\n\t);\n\n\treturn (\n\t\t<FormTokenField\n\t\t\tlabel={ hideLabelFromVision ? undefined : label }\n\t\t\tvalue={ arrayValue }\n\t\t\tonChange={ onChangeControl }\n\t\t\tplaceholder={ placeholder }\n\t\t\tsuggestions={\n\t\t\t\telements?.map( ( suggestion ) => suggestion.label ) ?? []\n\t\t\t}\n\t\t\t__experimentalExpandOnFocus={ elements && elements.length > 0 }\n\t\t\t__next40pxDefaultSize\n\t\t\t__nextHasNoMarginBottom\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAA0D,IAAAE,WAAA,GAAAF,OAAA;AAJ1D;AACA;AACA;;AAIA;AACA;AACA;;AAGe,SAASG,YAAYA,CAAU;EAC7CC,IAAI;EACJC,KAAK;EACLC,QAAQ;EACRC;AAC6B,CAAC,EAAG;EAAA,IAAAC,aAAA;EACjC,MAAM;IAAEC,EAAE;IAAEC,KAAK;IAAEC,WAAW;IAAEC;EAAS,CAAC,GAAGP,KAAK;EAClD,MAAMQ,KAAK,GAAGR,KAAK,CAACS,QAAQ,CAAE;IAAEC,IAAI,EAAEX;EAAK,CAAE,CAAC;EAE9C,MAAMY,kBAAkB,GAAG,IAAAC,oBAAW,EACnCC,eAAuB,IAAM;IAC9B,OAAON,QAAQ,EAAEO,IAAI,CAClBC,UAAU,IAAMA,UAAU,CAACP,KAAK,KAAKK,eACxC,CAAC;EACF,CAAC,EACD,CAAEN,QAAQ,CACX,CAAC;EAED,MAAMS,kBAAkB,GAAG,IAAAJ,oBAAW,EACnCK,eAAuB,IAAM;IAC9B,OAAOV,QAAQ,EAAEO,IAAI,CAClBC,UAAU,IAAMA,UAAU,CAACV,KAAK,KAAKY,eACxC,CAAC;EACF,CAAC,EACD,CAAEV,QAAQ,CACX,CAAC;;EAED;EACA,MAAMW,UAAU,GAAG,IAAAC,gBAAO,EACzB,MACCC,KAAK,CAACC,OAAO,CAAEb,KAAM,CAAC,GACnBA,KAAK,CAACc,GAAG,CAAIC,KAAK,IAAM;IACxB,MAAMC,UAAU,GAAGb,kBAAkB,CAAEY,KAAM,CAAC,EAAElB,KAAK;IACrD,OAAOmB,UAAU,IAAID,KAAK;EAC1B,CAAE,CAAC,GACH,EAAE,EACN,CAAEf,KAAK,EAAEG,kBAAkB,CAC5B,CAAC;EAED,MAAMc,eAAe,GAAG,IAAAb,oBAAW,EAChCc,MAAwC,IAAM;IAC/C;IACA,MAAMC,YAAY,GAAGD,MAAM,CAACJ,GAAG,CAAIC,KAAK,IAAM;MAC7C,IAAK,OAAOA,KAAK,KAAK,QAAQ,EAAG;QAChC,OAAOA,KAAK,CAACf,KAAK;MACnB;MAEA,MAAMoB,YAAY,GAAGZ,kBAAkB,CAAEO,KAAM,CAAC;MAEhD,OAAOK,YAAY,EAAEpB,KAAK,IAAIe,KAAK;IACpC,CAAE,CAAC;IAEHtB,QAAQ,CAAE;MACT,CAAEG,EAAE,GAAIuB;IACT,CAAE,CAAC;EACJ,CAAC,EACD,CAAEvB,EAAE,EAAEH,QAAQ,EAAEe,kBAAkB,CACnC,CAAC;EAED,oBACC,IAAAnB,WAAA,CAAAgC,GAAA,EAACnC,WAAA,CAAAoC,cAAc;IACdzB,KAAK,EAAGH,mBAAmB,GAAG6B,SAAS,GAAG1B,KAAO;IACjDG,KAAK,EAAGU,UAAY;IACpBjB,QAAQ,EAAGwB,eAAiB;IAC5BnB,WAAW,EAAGA,WAAa;IAC3B0B,WAAW,GAAA7B,aAAA,GACVI,QAAQ,EAAEe,GAAG,CAAIP,UAAU,IAAMA,UAAU,CAACV,KAAM,CAAC,cAAAF,aAAA,cAAAA,aAAA,GAAI,EACvD;IACD8B,2BAA2B,EAAG1B,QAAQ,IAAIA,QAAQ,CAAC2B,MAAM,GAAG,CAAG;IAC/DC,qBAAqB;IACrBC,uBAAuB;EAAA,CACvB,CAAC;AAEJ","ignoreList":[]}
1
+ {"version":3,"names":["_deepmerge","_interopRequireDefault","require","_components","_element","_i18n","_lockUnlock","_jsxRuntime","ValidatedFormTokenField","unlock","privateApis","ArrayControl","data","field","onChange","hideLabelFromVision","label","placeholder","elements","getValue","setValue","value","item","customValidity","setCustomValidity","useState","undefined","arrayValueAsElements","useMemo","Array","isArray","map","token","element","find","suggestion","validateTokens","useCallback","tokens","tokenValues","isValid","invalidTokens","filter","tokenValue","some","length","type","message","sprintf","_n","join","custom","result","deepMerge","onChangeControl","valueTokens","jsx","required","onValidate","suggestions","__experimentalValidateInput","__experimentalExpandOnFocus","__experimentalShowHowTo","displayTransform","el","__experimentalRenderItem","children"],"sources":["@wordpress/dataviews/src/dataform-controls/array.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport deepMerge from 'deepmerge';\n\n/**\n * WordPress dependencies\n */\nimport { privateApis } from '@wordpress/components';\nimport { useCallback, useMemo, useState } from '@wordpress/element';\nimport { _n, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\nimport { unlock } from '../lock-unlock';\n\nconst { ValidatedFormTokenField } = unlock( privateApis );\n\nexport default function ArrayControl< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { label, placeholder, elements, getValue, setValue } = field;\n\tconst value = getValue( { item: data } );\n\n\tconst [ customValidity, setCustomValidity ] = useState<\n\t\t| {\n\t\t\t\ttype: 'validating' | 'valid' | 'invalid';\n\t\t\t\tmessage: string;\n\t\t }\n\t\t| undefined\n\t>( undefined );\n\n\t// Convert stored values to element objects for the token field\n\tconst arrayValueAsElements = useMemo(\n\t\t() =>\n\t\t\tArray.isArray( value )\n\t\t\t\t? value.map( ( token ) => {\n\t\t\t\t\t\tconst element = elements?.find(\n\t\t\t\t\t\t\t( suggestion ) => suggestion.value === token\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn element || { value: token, label: token };\n\t\t\t\t } )\n\t\t\t\t: [],\n\t\t[ value, elements ]\n\t);\n\n\tconst validateTokens = useCallback(\n\t\t( tokens: ( string | { value: string; label?: string } )[] ) => {\n\t\t\t// Extract actual values from tokens for validation\n\t\t\tconst tokenValues = tokens.map( ( token ) => {\n\t\t\t\tif ( typeof token === 'object' && 'value' in token ) {\n\t\t\t\t\treturn token.value;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t} );\n\n\t\t\t// First, check if elements validation is required and any tokens are invalid\n\t\t\tif ( field.isValid?.elements && elements ) {\n\t\t\t\tconst invalidTokens = tokenValues.filter( ( tokenValue ) => {\n\t\t\t\t\treturn ! elements.some(\n\t\t\t\t\t\t( element ) => element.value === tokenValue\n\t\t\t\t\t);\n\t\t\t\t} );\n\n\t\t\t\tif ( invalidTokens.length > 0 ) {\n\t\t\t\t\tsetCustomValidity( {\n\t\t\t\t\t\ttype: 'invalid',\n\t\t\t\t\t\tmessage: sprintf(\n\t\t\t\t\t\t\t/* translators: %s: list of invalid tokens */\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'Please select from the available options: %s is invalid.',\n\t\t\t\t\t\t\t\t'Please select from the available options: %s are invalid.',\n\t\t\t\t\t\t\t\tinvalidTokens.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tinvalidTokens.join( ', ' )\n\t\t\t\t\t\t),\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Then check custom validation if provided.\n\t\t\tif ( field.isValid?.custom ) {\n\t\t\t\tconst result = field.isValid?.custom?.(\n\t\t\t\t\tdeepMerge(\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tsetValue( {\n\t\t\t\t\t\t\titem: data,\n\t\t\t\t\t\t\tvalue: tokenValues,\n\t\t\t\t\t\t} ) as Partial< Item >\n\t\t\t\t\t),\n\t\t\t\t\tfield\n\t\t\t\t);\n\n\t\t\t\tif ( result ) {\n\t\t\t\t\tsetCustomValidity( {\n\t\t\t\t\t\ttype: 'invalid',\n\t\t\t\t\t\tmessage: result,\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If no validation errors, clear custom validity\n\t\t\tsetCustomValidity( undefined );\n\t\t},\n\t\t[ elements, data, field, setValue ]\n\t);\n\n\tconst onChangeControl = useCallback(\n\t\t( tokens: ( string | { value: string; label?: string } )[] ) => {\n\t\t\tconst valueTokens = tokens.map( ( token ) => {\n\t\t\t\tif ( typeof token === 'object' && 'value' in token ) {\n\t\t\t\t\treturn token.value;\n\t\t\t\t}\n\t\t\t\t// If it's a string, it's either a new suggestion value or user input\n\t\t\t\treturn token;\n\t\t\t} );\n\n\t\t\tonChange( setValue( { item: data, value: valueTokens } ) );\n\t\t},\n\t\t[ onChange, setValue, data ]\n\t);\n\n\treturn (\n\t\t<ValidatedFormTokenField\n\t\t\trequired={ !! field.isValid?.required }\n\t\t\tonValidate={ validateTokens }\n\t\t\tcustomValidity={ customValidity }\n\t\t\tlabel={ hideLabelFromVision ? undefined : label }\n\t\t\tvalue={ arrayValueAsElements }\n\t\t\tonChange={ onChangeControl }\n\t\t\tplaceholder={ placeholder }\n\t\t\tsuggestions={ elements?.map( ( element ) => element.value ) }\n\t\t\t__experimentalValidateInput={ ( token: string ) => {\n\t\t\t\t// If elements validation is required, check if token is valid\n\t\t\t\tif ( field.isValid?.elements && elements ) {\n\t\t\t\t\treturn elements.some(\n\t\t\t\t\t\t( element ) =>\n\t\t\t\t\t\t\telement.value === token || element.label === token\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// For non-elements validation, allow all tokens\n\t\t\t\treturn true;\n\t\t\t} }\n\t\t\t__experimentalExpandOnFocus={ elements && elements.length > 0 }\n\t\t\t__experimentalShowHowTo={ ! field.isValid?.elements }\n\t\t\tdisplayTransform={ ( token: any ) => {\n\t\t\t\t// For existing tokens (element objects), display their label\n\t\t\t\tif ( typeof token === 'object' && 'label' in token ) {\n\t\t\t\t\treturn token.label;\n\t\t\t\t}\n\t\t\t\t// For suggestions (value strings), find the corresponding element and show its label\n\t\t\t\tif ( typeof token === 'string' && elements ) {\n\t\t\t\t\tconst element = elements.find(\n\t\t\t\t\t\t( el ) => el.value === token\n\t\t\t\t\t);\n\t\t\t\t\treturn element?.label || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t} }\n\t\t\t__experimentalRenderItem={ ( { item }: { item: any } ) => {\n\t\t\t\t// Custom rendering for suggestion items (item is a value string)\n\t\t\t\tif ( typeof item === 'string' && elements ) {\n\t\t\t\t\tconst element = elements.find(\n\t\t\t\t\t\t( el ) => el.value === item\n\t\t\t\t\t);\n\t\t\t\t\treturn <span>{ element?.label || item }</span>;\n\t\t\t\t}\n\t\t\t\treturn <span>{ item }</span>;\n\t\t\t} }\n\t\t/>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,13 +1,19 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.default = Checkbox;
8
+ var _deepmerge = _interopRequireDefault(require("deepmerge"));
7
9
  var _components = require("@wordpress/components");
8
10
  var _element = require("@wordpress/element");
9
11
  var _lockUnlock = require("../lock-unlock");
10
12
  var _jsxRuntime = require("react/jsx-runtime");
13
+ /**
14
+ * External dependencies
15
+ */
16
+
11
17
  /**
12
18
  * WordPress dependencies
13
19
  */
@@ -26,28 +32,37 @@ function Checkbox({
26
32
  hideLabelFromVision
27
33
  }) {
28
34
  const {
29
- id,
30
35
  getValue,
36
+ setValue,
31
37
  label,
32
38
  description
33
39
  } = field;
34
40
  const [customValidity, setCustomValidity] = (0, _element.useState)(undefined);
41
+ const onChangeControl = (0, _element.useCallback)(() => {
42
+ onChange(setValue({
43
+ item: data,
44
+ value: !getValue({
45
+ item: data
46
+ })
47
+ }));
48
+ }, [data, getValue, onChange, setValue]);
49
+ const onValidateControl = (0, _element.useCallback)(newValue => {
50
+ const message = field.isValid?.custom?.((0, _deepmerge.default)(data, setValue({
51
+ item: data,
52
+ value: newValue
53
+ })), field);
54
+ if (message) {
55
+ setCustomValidity({
56
+ type: 'invalid',
57
+ message
58
+ });
59
+ return;
60
+ }
61
+ setCustomValidity(undefined);
62
+ }, [data, field, setValue]);
35
63
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(ValidatedCheckboxControl, {
36
64
  required: !!field.isValid?.required,
37
- onValidate: newValue => {
38
- const message = field.isValid?.custom?.({
39
- ...data,
40
- [id]: newValue
41
- }, field);
42
- if (message) {
43
- setCustomValidity({
44
- type: 'invalid',
45
- message
46
- });
47
- return;
48
- }
49
- setCustomValidity(undefined);
50
- },
65
+ onValidate: onValidateControl,
51
66
  customValidity: customValidity,
52
67
  hidden: hideLabelFromVision,
53
68
  label: label,
@@ -55,11 +70,7 @@ function Checkbox({
55
70
  checked: getValue({
56
71
  item: data
57
72
  }),
58
- onChange: () => onChange({
59
- [id]: !getValue({
60
- item: data
61
- })
62
- })
73
+ onChange: onChangeControl
63
74
  });
64
75
  }
65
76
  //# sourceMappingURL=checkbox.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_components","require","_element","_lockUnlock","_jsxRuntime","ValidatedCheckboxControl","unlock","privateApis","Checkbox","field","onChange","data","hideLabelFromVision","id","getValue","label","description","customValidity","setCustomValidity","useState","undefined","jsx","required","isValid","onValidate","newValue","message","custom","type","hidden","help","checked","item"],"sources":["@wordpress/dataviews/src/dataform-controls/checkbox.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { privateApis } from '@wordpress/components';\nimport { useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\nimport { unlock } from '../lock-unlock';\n\nconst { ValidatedCheckboxControl } = unlock( privateApis );\n\nexport default function Checkbox< Item >( {\n\tfield,\n\tonChange,\n\tdata,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { id, getValue, label, description } = field;\n\tconst [ customValidity, setCustomValidity ] =\n\t\tuseState<\n\t\t\tReact.ComponentProps<\n\t\t\t\ttypeof ValidatedCheckboxControl\n\t\t\t>[ 'customValidity' ]\n\t\t>( undefined );\n\n\treturn (\n\t\t<ValidatedCheckboxControl\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 ]: 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\thidden={ hideLabelFromVision }\n\t\t\tlabel={ label }\n\t\t\thelp={ description }\n\t\t\tchecked={ getValue( { item: data } ) }\n\t\t\tonChange={ () =>\n\t\t\t\tonChange( { [ id ]: ! getValue( { item: data } ) } )\n\t\t\t}\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAMA,IAAAE,WAAA,GAAAF,OAAA;AAAwC,IAAAG,WAAA,GAAAH,OAAA;AAVxC;AACA;AACA;;AAIA;AACA;AACA;;AAIA,MAAM;EAAEI;AAAyB,CAAC,GAAG,IAAAC,kBAAM,EAAEC,uBAAY,CAAC;AAE3C,SAASC,QAAQA,CAAU;EACzCC,KAAK;EACLC,QAAQ;EACRC,IAAI;EACJC;AAC6B,CAAC,EAAG;EACjC,MAAM;IAAEC,EAAE;IAAEC,QAAQ;IAAEC,KAAK;IAAEC;EAAY,CAAC,GAAGP,KAAK;EAClD,MAAM,CAAEQ,cAAc,EAAEC,iBAAiB,CAAE,GAC1C,IAAAC,iBAAQ,EAILC,SAAU,CAAC;EAEf,oBACC,IAAAhB,WAAA,CAAAiB,GAAA,EAAChB,wBAAwB;IACxBiB,QAAQ,EAAG,CAAC,CAAEb,KAAK,CAACc,OAAO,EAAED,QAAU;IACvCE,UAAU,EAAKC,QAAa,IAAM;MACjC,MAAMC,OAAO,GAAGjB,KAAK,CAACc,OAAO,EAAEI,MAAM,GACpC;QACC,GAAGhB,IAAI;QACP,CAAEE,EAAE,GAAIY;MACT,CAAC,EACDhB,KACD,CAAC;MAED,IAAKiB,OAAO,EAAG;QACdR,iBAAiB,CAAE;UAClBU,IAAI,EAAE,SAAS;UACfF;QACD,CAAE,CAAC;QACH;MACD;MAEAR,iBAAiB,CAAEE,SAAU,CAAC;IAC/B,CAAG;IACHH,cAAc,EAAGA,cAAgB;IACjCY,MAAM,EAAGjB,mBAAqB;IAC9BG,KAAK,EAAGA,KAAO;IACfe,IAAI,EAAGd,WAAa;IACpBe,OAAO,EAAGjB,QAAQ,CAAE;MAAEkB,IAAI,EAAErB;IAAK,CAAE,CAAG;IACtCD,QAAQ,EAAGA,CAAA,KACVA,QAAQ,CAAE;MAAE,CAAEG,EAAE,GAAI,CAAEC,QAAQ,CAAE;QAAEkB,IAAI,EAAErB;MAAK,CAAE;IAAE,CAAE;EACnD,CACD,CAAC;AAEJ","ignoreList":[]}
1
+ {"version":3,"names":["_deepmerge","_interopRequireDefault","require","_components","_element","_lockUnlock","_jsxRuntime","ValidatedCheckboxControl","unlock","privateApis","Checkbox","field","onChange","data","hideLabelFromVision","getValue","setValue","label","description","customValidity","setCustomValidity","useState","undefined","onChangeControl","useCallback","item","value","onValidateControl","newValue","message","isValid","custom","deepMerge","type","jsx","required","onValidate","hidden","help","checked"],"sources":["@wordpress/dataviews/src/dataform-controls/checkbox.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport deepMerge from 'deepmerge';\n\n/**\n * WordPress dependencies\n */\nimport { privateApis } from '@wordpress/components';\nimport { useState, useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\nimport { unlock } from '../lock-unlock';\n\nconst { ValidatedCheckboxControl } = unlock( privateApis );\n\nexport default function Checkbox< Item >( {\n\tfield,\n\tonChange,\n\tdata,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { getValue, setValue, label, description } = field;\n\tconst [ customValidity, setCustomValidity ] =\n\t\tuseState<\n\t\t\tReact.ComponentProps<\n\t\t\t\ttypeof ValidatedCheckboxControl\n\t\t\t>[ 'customValidity' ]\n\t\t>( undefined );\n\n\tconst onChangeControl = useCallback( () => {\n\t\tonChange(\n\t\t\tsetValue( { item: data, value: ! getValue( { item: data } ) } )\n\t\t);\n\t}, [ data, getValue, onChange, setValue ] );\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\treturn (\n\t\t<ValidatedCheckboxControl\n\t\t\trequired={ !! field.isValid?.required }\n\t\t\tonValidate={ onValidateControl }\n\t\t\tcustomValidity={ customValidity }\n\t\t\thidden={ hideLabelFromVision }\n\t\t\tlabel={ label }\n\t\t\thelp={ description }\n\t\t\tchecked={ getValue( { item: data } ) }\n\t\t\tonChange={ onChangeControl }\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;;AAGA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AAKA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAMA,IAAAG,WAAA,GAAAH,OAAA;AAAwC,IAAAI,WAAA,GAAAJ,OAAA;AAfxC;AACA;AACA;;AAGA;AACA;AACA;;AAIA;AACA;AACA;;AAIA,MAAM;EAAEK;AAAyB,CAAC,GAAG,IAAAC,kBAAM,EAAEC,uBAAY,CAAC;AAE3C,SAASC,QAAQA,CAAU;EACzCC,KAAK;EACLC,QAAQ;EACRC,IAAI;EACJC;AAC6B,CAAC,EAAG;EACjC,MAAM;IAAEC,QAAQ;IAAEC,QAAQ;IAAEC,KAAK;IAAEC;EAAY,CAAC,GAAGP,KAAK;EACxD,MAAM,CAAEQ,cAAc,EAAEC,iBAAiB,CAAE,GAC1C,IAAAC,iBAAQ,EAILC,SAAU,CAAC;EAEf,MAAMC,eAAe,GAAG,IAAAC,oBAAW,EAAE,MAAM;IAC1CZ,QAAQ,CACPI,QAAQ,CAAE;MAAES,IAAI,EAAEZ,IAAI;MAAEa,KAAK,EAAE,CAAEX,QAAQ,CAAE;QAAEU,IAAI,EAAEZ;MAAK,CAAE;IAAE,CAAE,CAC/D,CAAC;EACF,CAAC,EAAE,CAAEA,IAAI,EAAEE,QAAQ,EAAEH,QAAQ,EAAEI,QAAQ,CAAG,CAAC;EAE3C,MAAMW,iBAAiB,GAAG,IAAAH,oBAAW,EAClCI,QAAa,IAAM;IACpB,MAAMC,OAAO,GAAGlB,KAAK,CAACmB,OAAO,EAAEC,MAAM,GACpC,IAAAC,kBAAS,EACRnB,IAAI,EACJG,QAAQ,CAAE;MACTS,IAAI,EAAEZ,IAAI;MACVa,KAAK,EAAEE;IACR,CAAE,CACH,CAAC,EACDjB,KACD,CAAC;IAED,IAAKkB,OAAO,EAAG;MACdT,iBAAiB,CAAE;QAClBa,IAAI,EAAE,SAAS;QACfJ;MACD,CAAE,CAAC;MACH;IACD;IAEAT,iBAAiB,CAAEE,SAAU,CAAC;EAC/B,CAAC,EACD,CAAET,IAAI,EAAEF,KAAK,EAAEK,QAAQ,CACxB,CAAC;EAED,oBACC,IAAAV,WAAA,CAAA4B,GAAA,EAAC3B,wBAAwB;IACxB4B,QAAQ,EAAG,CAAC,CAAExB,KAAK,CAACmB,OAAO,EAAEK,QAAU;IACvCC,UAAU,EAAGT,iBAAmB;IAChCR,cAAc,EAAGA,cAAgB;IACjCkB,MAAM,EAAGvB,mBAAqB;IAC9BG,KAAK,EAAGA,KAAO;IACfqB,IAAI,EAAGpB,WAAa;IACpBqB,OAAO,EAAGxB,QAAQ,CAAE;MAAEU,IAAI,EAAEZ;IAAK,CAAE,CAAG;IACtCD,QAAQ,EAAGW;EAAiB,CAC5B,CAAC;AAEJ","ignoreList":[]}
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.default = Color;
7
8
  var _colord = require("colord");
9
+ var _deepmerge = _interopRequireDefault(require("deepmerge"));
8
10
  var _components = require("@wordpress/components");
9
11
  var _element = require("@wordpress/element");
10
12
  var _lockUnlock = require("../lock-unlock");
@@ -76,41 +78,44 @@ function Color({
76
78
  hideLabelFromVision
77
79
  }) {
78
80
  const {
79
- id,
80
81
  label,
81
82
  placeholder,
82
- description
83
+ description,
84
+ setValue
83
85
  } = field;
84
86
  const value = field.getValue({
85
87
  item: data
86
88
  }) || '';
87
89
  const [customValidity, setCustomValidity] = (0, _element.useState)(undefined);
88
90
  const handleColorChange = (0, _element.useCallback)(colorObject => {
89
- onChange({
90
- [id]: colorObject.toHex()
91
- });
92
- }, [id, onChange]);
91
+ onChange(setValue({
92
+ item: data,
93
+ value: colorObject.toHex()
94
+ }));
95
+ }, [data, onChange, setValue]);
93
96
  const handleInputChange = (0, _element.useCallback)(newValue => {
94
- onChange({
95
- [id]: newValue || ''
96
- });
97
- }, [id, onChange]);
97
+ onChange(setValue({
98
+ item: data,
99
+ value: newValue || ''
100
+ }));
101
+ }, [data, onChange, setValue]);
102
+ const onValidateControl = (0, _element.useCallback)(newValue => {
103
+ const message = field.isValid?.custom?.((0, _deepmerge.default)(data, setValue({
104
+ item: data,
105
+ value: newValue
106
+ })), field);
107
+ if (message) {
108
+ setCustomValidity({
109
+ type: 'invalid',
110
+ message
111
+ });
112
+ return;
113
+ }
114
+ setCustomValidity(undefined);
115
+ }, [data, field, setValue]);
98
116
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(ValidatedInputControl, {
99
117
  required: !!field.isValid?.required,
100
- onValidate: newValue => {
101
- const message = field.isValid?.custom?.({
102
- ...data,
103
- [id]: newValue
104
- }, field);
105
- if (message) {
106
- setCustomValidity({
107
- type: 'invalid',
108
- message
109
- });
110
- return;
111
- }
112
- setCustomValidity(undefined);
113
- },
118
+ onValidate: onValidateControl,
114
119
  customValidity: customValidity,
115
120
  label: label,
116
121
  placeholder: placeholder,
@@ -1 +1 @@
1
- {"version":3,"names":["_colord","require","_components","_element","_lockUnlock","_jsxRuntime","ValidatedInputControl","Picker","unlock","privateApis","ColorPicker","color","onColorChange","validColor","colord","isValid","jsx","Dropdown","renderToggle","onToggle","isOpen","__experimentalInputControlPrefixWrapper","variant","children","type","onClick","style","width","height","borderRadius","backgroundColor","border","cursor","outline","outlineOffset","display","alignItems","justifyContent","padding","margin","renderContent","onChange","enableAlpha","Color","data","field","hideLabelFromVision","id","label","placeholder","description","value","getValue","item","customValidity","setCustomValidity","useState","undefined","handleColorChange","useCallback","colorObject","toHex","handleInputChange","newValue","required","onValidate","message","custom","help","prefix"],"sources":["@wordpress/dataviews/src/dataform-controls/color.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport { colord } from 'colord';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tDropdown,\n\tprivateApis,\n\t__experimentalInputControlPrefixWrapper as InputControlPrefixWrapper,\n} 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 { ValidatedInputControl, Picker } = unlock( privateApis );\n\nconst ColorPicker = ( {\n\tcolor,\n\tonColorChange,\n}: {\n\tcolor: string;\n\tonColorChange: ( colorObject: any ) => void;\n} ) => {\n\tconst validColor = color && colord( color ).isValid() ? color : '#ffffff';\n\n\treturn (\n\t\t<Dropdown\n\t\t\trenderToggle={ ( { onToggle, isOpen } ) => (\n\t\t\t\t<InputControlPrefixWrapper variant=\"icon\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={ onToggle }\n\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\twidth: '24px',\n\t\t\t\t\t\t\theight: '24px',\n\t\t\t\t\t\t\tborderRadius: '50%',\n\t\t\t\t\t\t\tbackgroundColor: validColor,\n\t\t\t\t\t\t\tborder: '1px solid #ddd',\n\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\toutline: isOpen ? '2px solid #007cba' : 'none',\n\t\t\t\t\t\t\toutlineOffset: '2px',\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t} }\n\t\t\t\t\t\taria-label=\"Open color picker\"\n\t\t\t\t\t/>\n\t\t\t\t</InputControlPrefixWrapper>\n\t\t\t) }\n\t\t\trenderContent={ () => (\n\t\t\t\t<div style={ { padding: '16px' } }>\n\t\t\t\t\t<Picker\n\t\t\t\t\t\tcolor={ colord( validColor ) }\n\t\t\t\t\t\tonChange={ onColorChange }\n\t\t\t\t\t\tenableAlpha\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t/>\n\t);\n};\n\nexport default function Color< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { id, label, placeholder, 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 ValidatedInputControl\n\t\t\t>[ 'customValidity' ]\n\t\t>( undefined );\n\n\tconst handleColorChange = useCallback(\n\t\t( colorObject: any ) => {\n\t\t\tonChange( { [ id ]: colorObject.toHex() } );\n\t\t},\n\t\t[ id, onChange ]\n\t);\n\n\tconst handleInputChange = useCallback(\n\t\t( newValue: string | undefined ) => {\n\t\t\tonChange( { [ id ]: newValue || '' } );\n\t\t},\n\t\t[ id, onChange ]\n\t);\n\n\treturn (\n\t\t<ValidatedInputControl\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 ]: 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\tplaceholder={ placeholder }\n\t\t\tvalue={ value }\n\t\t\thelp={ description }\n\t\t\tonChange={ handleInputChange }\n\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\ttype=\"text\"\n\t\t\tprefix={\n\t\t\t\t<ColorPicker\n\t\t\t\t\tcolor={ value }\n\t\t\t\t\tonColorChange={ handleColorChange }\n\t\t\t\t/>\n\t\t\t}\n\t\t/>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_colord","require","_deepmerge","_interopRequireDefault","_components","_element","_lockUnlock","_jsxRuntime","ValidatedInputControl","Picker","unlock","privateApis","ColorPicker","color","onColorChange","validColor","colord","isValid","jsx","Dropdown","renderToggle","onToggle","isOpen","__experimentalInputControlPrefixWrapper","variant","children","type","onClick","style","width","height","borderRadius","backgroundColor","border","cursor","outline","outlineOffset","display","alignItems","justifyContent","padding","margin","renderContent","onChange","enableAlpha","Color","data","field","hideLabelFromVision","label","placeholder","description","setValue","value","getValue","item","customValidity","setCustomValidity","useState","undefined","handleColorChange","useCallback","colorObject","toHex","handleInputChange","newValue","onValidateControl","message","custom","deepMerge","required","onValidate","help","prefix"],"sources":["@wordpress/dataviews/src/dataform-controls/color.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport { colord } from 'colord';\nimport deepMerge from 'deepmerge';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tDropdown,\n\tprivateApis,\n\t__experimentalInputControlPrefixWrapper as InputControlPrefixWrapper,\n} 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 { ValidatedInputControl, Picker } = unlock( privateApis );\n\nconst ColorPicker = ( {\n\tcolor,\n\tonColorChange,\n}: {\n\tcolor: string;\n\tonColorChange: ( colorObject: any ) => void;\n} ) => {\n\tconst validColor = color && colord( color ).isValid() ? color : '#ffffff';\n\n\treturn (\n\t\t<Dropdown\n\t\t\trenderToggle={ ( { onToggle, isOpen } ) => (\n\t\t\t\t<InputControlPrefixWrapper variant=\"icon\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={ onToggle }\n\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\twidth: '24px',\n\t\t\t\t\t\t\theight: '24px',\n\t\t\t\t\t\t\tborderRadius: '50%',\n\t\t\t\t\t\t\tbackgroundColor: validColor,\n\t\t\t\t\t\t\tborder: '1px solid #ddd',\n\t\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\t\toutline: isOpen ? '2px solid #007cba' : 'none',\n\t\t\t\t\t\t\toutlineOffset: '2px',\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t} }\n\t\t\t\t\t\taria-label=\"Open color picker\"\n\t\t\t\t\t/>\n\t\t\t\t</InputControlPrefixWrapper>\n\t\t\t) }\n\t\t\trenderContent={ () => (\n\t\t\t\t<div style={ { padding: '16px' } }>\n\t\t\t\t\t<Picker\n\t\t\t\t\t\tcolor={ colord( validColor ) }\n\t\t\t\t\t\tonChange={ onColorChange }\n\t\t\t\t\t\tenableAlpha\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t/>\n\t);\n};\n\nexport default function Color< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { label, placeholder, description, setValue } = 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 ValidatedInputControl\n\t\t\t>[ 'customValidity' ]\n\t\t>( undefined );\n\n\tconst handleColorChange = useCallback(\n\t\t( colorObject: any ) => {\n\t\t\tonChange( setValue( { item: data, value: colorObject.toHex() } ) );\n\t\t},\n\t\t[ data, onChange, setValue ]\n\t);\n\n\tconst handleInputChange = useCallback(\n\t\t( newValue: string | undefined ) => {\n\t\t\tonChange( setValue( { item: data, value: newValue || '' } ) );\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: 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\treturn (\n\t\t<ValidatedInputControl\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\tplaceholder={ placeholder }\n\t\t\tvalue={ value }\n\t\t\thelp={ description }\n\t\t\tonChange={ handleInputChange }\n\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\ttype=\"text\"\n\t\t\tprefix={\n\t\t\t\t<ColorPicker\n\t\t\t\t\tcolor={ value }\n\t\t\t\t\tonColorChange={ handleColorChange }\n\t\t\t\t/>\n\t\t\t}\n\t\t/>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -121,24 +121,18 @@ function CalendarDateControl({
121
121
  });
122
122
  const onSelectDate = (0, _element.useCallback)(newDate => {
123
123
  const dateValue = newDate ? (0, _dateFns.format)(newDate, 'yyyy-MM-dd') : undefined;
124
- onChange({
125
- [id]: dateValue
126
- });
124
+ onChange(dateValue);
127
125
  setSelectedPresetId(null);
128
- }, [id, onChange]);
126
+ }, [onChange]);
129
127
  const handlePresetClick = (0, _element.useCallback)(preset => {
130
128
  const presetDate = preset.getValue();
131
129
  const dateValue = formatDate(presetDate);
132
130
  setCalendarMonth(presetDate);
133
- onChange({
134
- [id]: dateValue
135
- });
131
+ onChange(dateValue);
136
132
  setSelectedPresetId(preset.id);
137
- }, [id, onChange]);
133
+ }, [onChange]);
138
134
  const handleManualDateChange = (0, _element.useCallback)(newValue => {
139
- onChange({
140
- [id]: newValue
141
- });
135
+ onChange(newValue);
142
136
  if (newValue) {
143
137
  const parsedDate = parseDate(newValue);
144
138
  if (parsedDate) {
@@ -146,7 +140,7 @@ function CalendarDateControl({
146
140
  }
147
141
  }
148
142
  setSelectedPresetId(null);
149
- }, [id, onChange]);
143
+ }, [onChange]);
150
144
  const {
151
145
  timezone: {
152
146
  string: timezoneString
@@ -234,16 +228,12 @@ function CalendarDateRangeControl({
234
228
  });
235
229
  const updateDateRange = (0, _element.useCallback)((fromDate, toDate) => {
236
230
  if (fromDate && toDate) {
237
- onChange({
238
- [id]: [formatDate(fromDate), formatDate(toDate)]
239
- });
231
+ onChange([formatDate(fromDate), formatDate(toDate)]);
240
232
  } else if (!fromDate && !toDate) {
241
- onChange({
242
- [id]: undefined
243
- });
233
+ onChange(undefined);
244
234
  }
245
235
  // Do nothing if only one date is set - wait for both
246
- }, [id, onChange]);
236
+ }, [onChange]);
247
237
  const onSelectCalendarRange = (0, _element.useCallback)(newRange => {
248
238
  updateDateRange(newRange?.from, newRange?.to);
249
239
  setSelectedPresetId(null);
@@ -342,17 +332,35 @@ function DateControl({
342
332
  }) {
343
333
  const {
344
334
  id,
345
- label
335
+ label,
336
+ getValue,
337
+ setValue
346
338
  } = field;
347
- const value = field.getValue({
339
+ const value = getValue({
348
340
  item: data
349
341
  });
342
+ const onChangeRelativeDateControl = (0, _element.useCallback)(newValue => {
343
+ onChange(setValue({
344
+ item: data,
345
+ value: newValue
346
+ }));
347
+ }, [data, onChange, setValue]);
348
+ const onChangeCalendarDateRangeControl = (0, _element.useCallback)(newValue => {
349
+ onChange(setValue({
350
+ item: data,
351
+ value: newValue
352
+ }));
353
+ }, [data, onChange, setValue]);
354
+ const onChangeCalendarDateControl = (0, _element.useCallback)(newValue => onChange(setValue({
355
+ item: data,
356
+ value: newValue
357
+ })), [data, onChange, setValue]);
350
358
  if (operator === _constants.OPERATOR_IN_THE_PAST || operator === _constants.OPERATOR_OVER) {
351
359
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_relativeDateControl.default, {
352
360
  className: "dataviews-controls__date",
353
361
  id: id,
354
362
  value: value && typeof value === 'object' ? value : {},
355
- onChange: onChange,
363
+ onChange: onChangeRelativeDateControl,
356
364
  label: label,
357
365
  hideLabelFromVision: hideLabelFromVision,
358
366
  options: _relativeDateControl.TIME_UNITS_OPTIONS[operator]
@@ -368,7 +376,7 @@ function DateControl({
368
376
  className: "dataviews-controls__date",
369
377
  id: id,
370
378
  value: dateRangeValue,
371
- onChange: onChange,
379
+ onChange: onChangeCalendarDateRangeControl,
372
380
  label: label,
373
381
  hideLabelFromVision: hideLabelFromVision
374
382
  });
@@ -377,7 +385,7 @@ function DateControl({
377
385
  className: "dataviews-controls__date",
378
386
  id: id,
379
387
  value: typeof value === 'string' ? value : undefined,
380
- onChange: onChange,
388
+ onChange: onChangeCalendarDateControl,
381
389
  label: label,
382
390
  hideLabelFromVision: hideLabelFromVision
383
391
  });