@wordpress/dataviews 9.0.1-next.6f42e1382.0 → 9.1.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 (286) hide show
  1. package/CHANGELOG.md +25 -2
  2. package/README.md +112 -15
  3. package/build/components/dataviews/index.js +4 -6
  4. package/build/components/dataviews/index.js.map +1 -1
  5. package/build/components/dataviews-filters/filters-toggled.js +32 -0
  6. package/build/components/dataviews-filters/filters-toggled.js.map +1 -0
  7. package/build/components/dataviews-filters/filters.js +73 -0
  8. package/build/components/dataviews-filters/filters.js.map +1 -0
  9. package/build/components/dataviews-filters/index.js +26 -190
  10. package/build/components/dataviews-filters/index.js.map +1 -1
  11. package/build/components/dataviews-filters/input-widget.js +48 -4
  12. package/build/components/dataviews-filters/input-widget.js.map +1 -1
  13. package/build/components/dataviews-filters/toggle.js +99 -0
  14. package/build/components/dataviews-filters/toggle.js.map +1 -0
  15. package/build/components/dataviews-filters/use-filters.js +63 -0
  16. package/build/components/dataviews-filters/use-filters.js.map +1 -0
  17. package/build/components/dataviews-picker/index.js +4 -6
  18. package/build/components/dataviews-picker/index.js.map +1 -1
  19. package/build/components/dataviews-view-config/index.js +22 -3
  20. package/build/components/dataviews-view-config/index.js.map +1 -1
  21. package/build/dataform-controls/array.js +117 -29
  22. package/build/dataform-controls/array.js.map +1 -1
  23. package/build/dataform-controls/checkbox.js +31 -20
  24. package/build/dataform-controls/checkbox.js.map +1 -1
  25. package/build/dataform-controls/color.js +29 -24
  26. package/build/dataform-controls/color.js.map +1 -1
  27. package/build/dataform-controls/date.js +32 -24
  28. package/build/dataform-controls/date.js.map +1 -1
  29. package/build/dataform-controls/datetime.js +133 -19
  30. package/build/dataform-controls/datetime.js.map +1 -1
  31. package/build/dataform-controls/email.js +7 -1
  32. package/build/dataform-controls/email.js.map +1 -1
  33. package/build/dataform-controls/index.js +25 -0
  34. package/build/dataform-controls/index.js.map +1 -1
  35. package/build/dataform-controls/integer.js +7 -106
  36. package/build/dataform-controls/integer.js.map +1 -1
  37. package/build/dataform-controls/number.js +21 -0
  38. package/build/dataform-controls/number.js.map +1 -0
  39. package/build/dataform-controls/radio.js +42 -9
  40. package/build/dataform-controls/radio.js.map +1 -1
  41. package/build/dataform-controls/relative-date-control.js +6 -10
  42. package/build/dataform-controls/relative-date-control.js.map +1 -1
  43. package/build/dataform-controls/select.js +41 -10
  44. package/build/dataform-controls/select.js.map +1 -1
  45. package/build/dataform-controls/telephone.js +7 -1
  46. package/build/dataform-controls/telephone.js.map +1 -1
  47. package/build/dataform-controls/text.js +14 -2
  48. package/build/dataform-controls/text.js.map +1 -1
  49. package/build/dataform-controls/textarea.js +33 -20
  50. package/build/dataform-controls/textarea.js.map +1 -1
  51. package/build/dataform-controls/toggle-group.js +36 -6
  52. package/build/dataform-controls/toggle-group.js.map +1 -1
  53. package/build/dataform-controls/toggle.js +33 -22
  54. package/build/dataform-controls/toggle.js.map +1 -1
  55. package/build/dataform-controls/url.js +7 -1
  56. package/build/dataform-controls/url.js.map +1 -1
  57. package/build/dataform-controls/utils/validated-input.js +34 -32
  58. package/build/dataform-controls/utils/validated-input.js.map +1 -1
  59. package/build/dataform-controls/utils/validated-number.js +146 -0
  60. package/build/dataform-controls/utils/validated-number.js.map +1 -0
  61. package/build/dataforms-layouts/panel/dropdown.js +10 -14
  62. package/build/dataforms-layouts/panel/dropdown.js.map +1 -1
  63. package/build/dataforms-layouts/panel/index.js +24 -11
  64. package/build/dataforms-layouts/panel/index.js.map +1 -1
  65. package/build/dataforms-layouts/panel/modal.js +22 -27
  66. package/build/dataforms-layouts/panel/modal.js.map +1 -1
  67. package/build/dataforms-layouts/panel/summary-button.js +67 -0
  68. package/build/dataforms-layouts/panel/summary-button.js.map +1 -0
  69. package/build/dataviews-layouts/picker-grid/index.js +4 -1
  70. package/build/dataviews-layouts/picker-grid/index.js.map +1 -1
  71. package/build/field-types/array.js +0 -6
  72. package/build/field-types/array.js.map +1 -1
  73. package/build/field-types/index.js +4 -0
  74. package/build/field-types/index.js.map +1 -1
  75. package/build/field-types/number.js +71 -0
  76. package/build/field-types/number.js.map +1 -0
  77. package/build/index.js +7 -0
  78. package/build/index.js.map +1 -1
  79. package/build/normalize-fields.js +17 -0
  80. package/build/normalize-fields.js.map +1 -1
  81. package/build/types.js.map +1 -1
  82. package/build/validation.js +18 -1
  83. package/build/validation.js.map +1 -1
  84. package/build-module/components/dataviews/index.js +5 -7
  85. package/build-module/components/dataviews/index.js.map +1 -1
  86. package/build-module/components/dataviews-filters/filters-toggled.js +24 -0
  87. package/build-module/components/dataviews-filters/filters-toggled.js.map +1 -0
  88. package/build-module/components/dataviews-filters/filters.js +65 -0
  89. package/build-module/components/dataviews-filters/filters.js.map +1 -0
  90. package/build-module/components/dataviews-filters/index.js +4 -186
  91. package/build-module/components/dataviews-filters/index.js.map +1 -1
  92. package/build-module/components/dataviews-filters/input-widget.js +48 -4
  93. package/build-module/components/dataviews-filters/input-widget.js.map +1 -1
  94. package/build-module/components/dataviews-filters/toggle.js +91 -0
  95. package/build-module/components/dataviews-filters/toggle.js.map +1 -0
  96. package/build-module/components/dataviews-filters/use-filters.js +56 -0
  97. package/build-module/components/dataviews-filters/use-filters.js.map +1 -0
  98. package/build-module/components/dataviews-picker/index.js +5 -7
  99. package/build-module/components/dataviews-picker/index.js.map +1 -1
  100. package/build-module/components/dataviews-view-config/index.js +22 -3
  101. package/build-module/components/dataviews-view-config/index.js.map +1 -1
  102. package/build-module/dataform-controls/array.js +120 -32
  103. package/build-module/dataform-controls/array.js.map +1 -1
  104. package/build-module/dataform-controls/checkbox.js +31 -21
  105. package/build-module/dataform-controls/checkbox.js.map +1 -1
  106. package/build-module/dataform-controls/color.js +28 -24
  107. package/build-module/dataform-controls/color.js.map +1 -1
  108. package/build-module/dataform-controls/date.js +32 -24
  109. package/build-module/dataform-controls/date.js.map +1 -1
  110. package/build-module/dataform-controls/datetime.js +135 -21
  111. package/build-module/dataform-controls/datetime.js.map +1 -1
  112. package/build-module/dataform-controls/email.js +7 -1
  113. package/build-module/dataform-controls/email.js.map +1 -1
  114. package/build-module/dataform-controls/index.js +25 -0
  115. package/build-module/dataform-controls/index.js.map +1 -1
  116. package/build-module/dataform-controls/integer.js +7 -106
  117. package/build-module/dataform-controls/integer.js.map +1 -1
  118. package/build-module/dataform-controls/number.js +14 -0
  119. package/build-module/dataform-controls/number.js.map +1 -0
  120. package/build-module/dataform-controls/radio.js +44 -11
  121. package/build-module/dataform-controls/radio.js.map +1 -1
  122. package/build-module/dataform-controls/relative-date-control.js +6 -10
  123. package/build-module/dataform-controls/relative-date-control.js.map +1 -1
  124. package/build-module/dataform-controls/select.js +43 -12
  125. package/build-module/dataform-controls/select.js.map +1 -1
  126. package/build-module/dataform-controls/telephone.js +7 -1
  127. package/build-module/dataform-controls/telephone.js.map +1 -1
  128. package/build-module/dataform-controls/text.js +14 -2
  129. package/build-module/dataform-controls/text.js.map +1 -1
  130. package/build-module/dataform-controls/textarea.js +32 -20
  131. package/build-module/dataform-controls/textarea.js.map +1 -1
  132. package/build-module/dataform-controls/toggle-group.js +38 -8
  133. package/build-module/dataform-controls/toggle-group.js.map +1 -1
  134. package/build-module/dataform-controls/toggle.js +33 -23
  135. package/build-module/dataform-controls/toggle.js.map +1 -1
  136. package/build-module/dataform-controls/url.js +7 -1
  137. package/build-module/dataform-controls/url.js.map +1 -1
  138. package/build-module/dataform-controls/utils/validated-input.js +34 -33
  139. package/build-module/dataform-controls/utils/validated-input.js.map +1 -1
  140. package/build-module/dataform-controls/utils/validated-number.js +138 -0
  141. package/build-module/dataform-controls/utils/validated-number.js.map +1 -0
  142. package/build-module/dataforms-layouts/panel/dropdown.js +10 -15
  143. package/build-module/dataforms-layouts/panel/dropdown.js.map +1 -1
  144. package/build-module/dataforms-layouts/panel/index.js +24 -11
  145. package/build-module/dataforms-layouts/panel/index.js.map +1 -1
  146. package/build-module/dataforms-layouts/panel/modal.js +22 -28
  147. package/build-module/dataforms-layouts/panel/modal.js.map +1 -1
  148. package/build-module/dataforms-layouts/panel/summary-button.js +60 -0
  149. package/build-module/dataforms-layouts/panel/summary-button.js.map +1 -0
  150. package/build-module/dataviews-layouts/picker-grid/index.js +4 -1
  151. package/build-module/dataviews-layouts/picker-grid/index.js.map +1 -1
  152. package/build-module/field-types/array.js +0 -6
  153. package/build-module/field-types/array.js.map +1 -1
  154. package/build-module/field-types/index.js +4 -0
  155. package/build-module/field-types/index.js.map +1 -1
  156. package/build-module/field-types/number.js +65 -0
  157. package/build-module/field-types/number.js.map +1 -0
  158. package/build-module/index.js +1 -0
  159. package/build-module/index.js.map +1 -1
  160. package/build-module/normalize-fields.js +15 -0
  161. package/build-module/normalize-fields.js.map +1 -1
  162. package/build-module/types.js.map +1 -1
  163. package/build-module/validation.js +18 -1
  164. package/build-module/validation.js.map +1 -1
  165. package/build-types/components/dataform/stories/index.story.d.ts +3 -0
  166. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
  167. package/build-types/components/dataviews/index.d.ts +3 -2
  168. package/build-types/components/dataviews/index.d.ts.map +1 -1
  169. package/build-types/components/dataviews/stories/fixtures.d.ts +4 -2
  170. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
  171. package/build-types/components/dataviews-filters/filters-toggled.d.ts +5 -0
  172. package/build-types/components/dataviews-filters/filters-toggled.d.ts.map +1 -0
  173. package/build-types/components/dataviews-filters/filters.d.ts +6 -0
  174. package/build-types/components/dataviews-filters/filters.d.ts.map +1 -0
  175. package/build-types/components/dataviews-filters/index.d.ts +4 -8
  176. package/build-types/components/dataviews-filters/index.d.ts.map +1 -1
  177. package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -1
  178. package/build-types/components/dataviews-filters/toggle.d.ts +3 -0
  179. package/build-types/components/dataviews-filters/toggle.d.ts.map +1 -0
  180. package/build-types/components/dataviews-filters/use-filters.d.ts +4 -0
  181. package/build-types/components/dataviews-filters/use-filters.d.ts.map +1 -0
  182. package/build-types/components/dataviews-picker/index.d.ts +3 -2
  183. package/build-types/components/dataviews-picker/index.d.ts.map +1 -1
  184. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  185. package/build-types/dataform-controls/array.d.ts.map +1 -1
  186. package/build-types/dataform-controls/checkbox.d.ts.map +1 -1
  187. package/build-types/dataform-controls/color.d.ts.map +1 -1
  188. package/build-types/dataform-controls/date.d.ts.map +1 -1
  189. package/build-types/dataform-controls/datetime.d.ts.map +1 -1
  190. package/build-types/dataform-controls/email.d.ts.map +1 -1
  191. package/build-types/dataform-controls/index.d.ts +1 -1
  192. package/build-types/dataform-controls/index.d.ts.map +1 -1
  193. package/build-types/dataform-controls/integer.d.ts +4 -1
  194. package/build-types/dataform-controls/integer.d.ts.map +1 -1
  195. package/build-types/dataform-controls/number.d.ts +6 -0
  196. package/build-types/dataform-controls/number.d.ts.map +1 -0
  197. package/build-types/dataform-controls/radio.d.ts.map +1 -1
  198. package/build-types/dataform-controls/relative-date-control.d.ts +6 -5
  199. package/build-types/dataform-controls/relative-date-control.d.ts.map +1 -1
  200. package/build-types/dataform-controls/select.d.ts.map +1 -1
  201. package/build-types/dataform-controls/telephone.d.ts.map +1 -1
  202. package/build-types/dataform-controls/text.d.ts +1 -1
  203. package/build-types/dataform-controls/text.d.ts.map +1 -1
  204. package/build-types/dataform-controls/textarea.d.ts +1 -1
  205. package/build-types/dataform-controls/textarea.d.ts.map +1 -1
  206. package/build-types/dataform-controls/toggle-group.d.ts.map +1 -1
  207. package/build-types/dataform-controls/toggle.d.ts.map +1 -1
  208. package/build-types/dataform-controls/url.d.ts.map +1 -1
  209. package/build-types/dataform-controls/utils/validated-input.d.ts +4 -4
  210. package/build-types/dataform-controls/utils/validated-input.d.ts.map +1 -1
  211. package/build-types/dataform-controls/utils/validated-number.d.ts +9 -0
  212. package/build-types/dataform-controls/utils/validated-number.d.ts.map +1 -0
  213. package/build-types/dataforms-layouts/panel/dropdown.d.ts +2 -1
  214. package/build-types/dataforms-layouts/panel/dropdown.d.ts.map +1 -1
  215. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
  216. package/build-types/dataforms-layouts/panel/modal.d.ts +2 -1
  217. package/build-types/dataforms-layouts/panel/modal.d.ts.map +1 -1
  218. package/build-types/dataforms-layouts/panel/summary-button.d.ts +15 -0
  219. package/build-types/dataforms-layouts/panel/summary-button.d.ts.map +1 -0
  220. package/build-types/dataviews-layouts/picker-grid/index.d.ts.map +1 -1
  221. package/build-types/field-types/array.d.ts.map +1 -1
  222. package/build-types/field-types/index.d.ts.map +1 -1
  223. package/build-types/field-types/number.d.ts +20 -0
  224. package/build-types/field-types/number.d.ts.map +1 -0
  225. package/build-types/field-types/stories/index.story.d.ts +106 -57
  226. package/build-types/field-types/stories/index.story.d.ts.map +1 -1
  227. package/build-types/index.d.ts +1 -0
  228. package/build-types/index.d.ts.map +1 -1
  229. package/build-types/normalize-fields.d.ts +3 -0
  230. package/build-types/normalize-fields.d.ts.map +1 -1
  231. package/build-types/types.d.ts +69 -5
  232. package/build-types/types.d.ts.map +1 -1
  233. package/build-types/validation.d.ts.map +1 -1
  234. package/build-wp/index.js +2354 -1717
  235. package/package.json +16 -15
  236. package/src/components/dataform/stories/index.story.tsx +528 -8
  237. package/src/components/dataviews/index.tsx +8 -14
  238. package/src/components/dataviews/stories/fixtures.tsx +99 -41
  239. package/src/components/dataviews/stories/index.story.tsx +2 -2
  240. package/src/components/dataviews-filters/filters-toggled.tsx +20 -0
  241. package/src/components/dataviews-filters/filters.tsx +73 -0
  242. package/src/components/dataviews-filters/index.tsx +4 -246
  243. package/src/components/dataviews-filters/input-widget.tsx +44 -5
  244. package/src/components/dataviews-filters/toggle.tsx +118 -0
  245. package/src/components/dataviews-filters/use-filters.ts +73 -0
  246. package/src/components/dataviews-picker/index.tsx +8 -14
  247. package/src/components/dataviews-picker/stories/index.story.tsx +1 -1
  248. package/src/components/dataviews-view-config/index.tsx +18 -3
  249. package/src/dataform-controls/array.tsx +139 -44
  250. package/src/dataform-controls/checkbox.tsx +41 -24
  251. package/src/dataform-controls/color.tsx +33 -24
  252. package/src/dataform-controls/date.tsx +47 -21
  253. package/src/dataform-controls/datetime.tsx +171 -23
  254. package/src/dataform-controls/email.tsx +9 -1
  255. package/src/dataform-controls/index.tsx +28 -0
  256. package/src/dataform-controls/integer.tsx +3 -146
  257. package/src/dataform-controls/number.tsx +10 -0
  258. package/src/dataform-controls/radio.tsx +53 -11
  259. package/src/dataform-controls/relative-date-control.tsx +11 -10
  260. package/src/dataform-controls/select.tsx +53 -10
  261. package/src/dataform-controls/telephone.tsx +9 -1
  262. package/src/dataform-controls/text.tsx +18 -1
  263. package/src/dataform-controls/textarea.tsx +38 -24
  264. package/src/dataform-controls/toggle-group.tsx +50 -10
  265. package/src/dataform-controls/toggle.tsx +41 -24
  266. package/src/dataform-controls/url.tsx +9 -1
  267. package/src/dataform-controls/utils/validated-input.tsx +50 -50
  268. package/src/dataform-controls/utils/validated-number.tsx +209 -0
  269. package/src/dataforms-layouts/panel/dropdown.tsx +12 -23
  270. package/src/dataforms-layouts/panel/index.tsx +39 -16
  271. package/src/dataforms-layouts/panel/modal.tsx +24 -30
  272. package/src/dataforms-layouts/panel/summary-button.tsx +92 -0
  273. package/src/dataviews-layouts/picker-grid/index.tsx +15 -8
  274. package/src/field-types/array.tsx +0 -8
  275. package/src/field-types/index.tsx +5 -0
  276. package/src/field-types/number.tsx +104 -0
  277. package/src/field-types/stories/index.story.tsx +170 -16
  278. package/src/index.ts +1 -0
  279. package/src/normalize-fields.ts +18 -0
  280. package/src/test/dataform.tsx +36 -0
  281. package/src/test/filter-and-sort-data-view.js +182 -138
  282. package/src/test/normalize-fields.ts +136 -0
  283. package/src/test/validation.ts +235 -0
  284. package/src/types.ts +76 -4
  285. package/src/validation.ts +32 -0
  286. package/tsconfig.tsbuildinfo +1 -1
@@ -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 = ValidatedText;
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
  */
@@ -25,38 +31,42 @@ function ValidatedText({
25
31
  onChange,
26
32
  hideLabelFromVision,
27
33
  type,
28
- icon,
34
+ prefix,
29
35
  suffix
30
36
  }) {
31
37
  const {
32
- id,
33
38
  label,
34
39
  placeholder,
35
- description
40
+ description,
41
+ getValue,
42
+ setValue,
43
+ isValid
36
44
  } = field;
37
- const value = field.getValue({
45
+ const value = getValue({
38
46
  item: data
39
47
  });
40
48
  const [customValidity, setCustomValidity] = (0, _element.useState)(undefined);
41
- const onChangeControl = (0, _element.useCallback)(newValue => onChange({
42
- [id]: newValue
43
- }), [id, onChange]);
49
+ const onChangeControl = (0, _element.useCallback)(newValue => onChange(setValue({
50
+ item: data,
51
+ value: newValue
52
+ })), [data, setValue, onChange]);
53
+ const onValidateControl = (0, _element.useCallback)(newValue => {
54
+ const message = isValid?.custom?.((0, _deepmerge.default)(data, setValue({
55
+ item: data,
56
+ value: newValue
57
+ })), field);
58
+ if (message) {
59
+ setCustomValidity({
60
+ type: 'invalid',
61
+ message
62
+ });
63
+ return;
64
+ }
65
+ setCustomValidity(undefined);
66
+ }, [data, field, isValid, setValue]);
44
67
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(ValidatedInputControl, {
45
- required: !!field.isValid?.required,
46
- onValidate: newValue => {
47
- const message = field.isValid?.custom?.({
48
- ...data,
49
- [id]: newValue
50
- }, field);
51
- if (message) {
52
- setCustomValidity({
53
- type: 'invalid',
54
- message
55
- });
56
- return;
57
- }
58
- setCustomValidity(undefined);
59
- },
68
+ required: !!isValid?.required,
69
+ onValidate: onValidateControl,
60
70
  customValidity: customValidity,
61
71
  label: label,
62
72
  placeholder: placeholder,
@@ -65,16 +75,8 @@ function ValidatedText({
65
75
  onChange: onChangeControl,
66
76
  hideLabelFromVision: hideLabelFromVision,
67
77
  type: type,
68
- prefix: icon ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalInputControlPrefixWrapper, {
69
- variant: "icon",
70
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Icon, {
71
- icon: icon
72
- })
73
- }) : undefined,
74
- suffix: suffix ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalInputControlSuffixWrapper, {
75
- variant: "control",
76
- children: suffix
77
- }) : undefined,
78
+ prefix: prefix,
79
+ suffix: suffix,
78
80
  __next40pxDefaultSize: true
79
81
  });
80
82
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_components","require","_element","_lockUnlock","_jsxRuntime","ValidatedInputControl","unlock","privateApis","ValidatedText","data","field","onChange","hideLabelFromVision","type","icon","suffix","id","label","placeholder","description","value","getValue","item","customValidity","setCustomValidity","useState","undefined","onChangeControl","useCallback","newValue","jsx","required","isValid","onValidate","message","custom","help","prefix","__experimentalInputControlPrefixWrapper","variant","children","Icon","__experimentalInputControlSuffixWrapper","__next40pxDefaultSize"],"sources":["@wordpress/dataviews/src/dataform-controls/utils/validated-input.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tIcon,\n\tprivateApis,\n\t__experimentalInputControlPrefixWrapper as InputControlPrefixWrapper,\n\t__experimentalInputControlSuffixWrapper as InputControlSuffixWrapper,\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 } = unlock( privateApis );\n\nexport type DataFormValidatedTextControlProps< Item > =\n\tDataFormControlProps< Item > & {\n\t\t/**\n\t\t * The input type of the control.\n\t\t */\n\t\ttype?: 'text' | 'email' | 'tel' | 'url' | 'password';\n\t\t/**\n\t\t * Optional icon to display as prefix.\n\t\t */\n\t\ticon?: React.ComponentType | React.ReactElement;\n\t\t/**\n\t\t * Optional icon to display as suffix.\n\t\t */\n\t\tsuffix?: React.ReactElement;\n\t};\n\nexport default function ValidatedText< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n\ttype,\n\ticon,\n\tsuffix,\n}: DataFormValidatedTextControlProps< 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 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\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={ onChangeControl }\n\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\ttype={ type }\n\t\t\tprefix={\n\t\t\t\ticon ? (\n\t\t\t\t\t<InputControlPrefixWrapper variant=\"icon\">\n\t\t\t\t\t\t<Icon icon={ icon } />\n\t\t\t\t\t</InputControlPrefixWrapper>\n\t\t\t\t) : undefined\n\t\t\t}\n\t\t\tsuffix={\n\t\t\t\tsuffix ? (\n\t\t\t\t\t<InputControlSuffixWrapper variant=\"control\">\n\t\t\t\t\t\t{ suffix }\n\t\t\t\t\t</InputControlSuffixWrapper>\n\t\t\t\t) : undefined\n\t\t\t}\n\t\t\t__next40pxDefaultSize\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AAMA,IAAAC,QAAA,GAAAD,OAAA;AAMA,IAAAE,WAAA,GAAAF,OAAA;AAA2C,IAAAG,WAAA,GAAAH,OAAA;AAf3C;AACA;AACA;;AASA;AACA;AACA;;AAIA,MAAM;EAAEI;AAAsB,CAAC,GAAG,IAAAC,kBAAM,EAAEC,uBAAY,CAAC;AAkBxC,SAASC,aAAaA,CAAU;EAC9CC,IAAI;EACJC,KAAK;EACLC,QAAQ;EACRC,mBAAmB;EACnBC,IAAI;EACJC,IAAI;EACJC;AAC0C,CAAC,EAAG;EAC9C,MAAM;IAAEC,EAAE;IAAEC,KAAK;IAAEC,WAAW;IAAEC;EAAY,CAAC,GAAGT,KAAK;EACrD,MAAMU,KAAK,GAAGV,KAAK,CAACW,QAAQ,CAAE;IAAEC,IAAI,EAAEb;EAAK,CAAE,CAAC;EAC9C,MAAM,CAAEc,cAAc,EAAEC,iBAAiB,CAAE,GAC1C,IAAAC,iBAAQ,EAILC,SAAU,CAAC;EAEf,MAAMC,eAAe,GAAG,IAAAC,oBAAW,EAChCC,QAAgB,IACjBlB,QAAQ,CAAE;IACT,CAAEK,EAAE,GAAIa;EACT,CAAE,CAAC,EACJ,CAAEb,EAAE,EAAEL,QAAQ,CACf,CAAC;EAED,oBACC,IAAAP,WAAA,CAAA0B,GAAA,EAACzB,qBAAqB;IACrB0B,QAAQ,EAAG,CAAC,CAAErB,KAAK,CAACsB,OAAO,EAAED,QAAU;IACvCE,UAAU,EAAKJ,QAAa,IAAM;MACjC,MAAMK,OAAO,GAAGxB,KAAK,CAACsB,OAAO,EAAEG,MAAM,GACpC;QACC,GAAG1B,IAAI;QACP,CAAEO,EAAE,GAAIa;MACT,CAAC,EACDnB,KACD,CAAC;MAED,IAAKwB,OAAO,EAAG;QACdV,iBAAiB,CAAE;UAClBX,IAAI,EAAE,SAAS;UACfqB;QACD,CAAE,CAAC;QACH;MACD;MAEAV,iBAAiB,CAAEE,SAAU,CAAC;IAC/B,CAAG;IACHH,cAAc,EAAGA,cAAgB;IACjCN,KAAK,EAAGA,KAAO;IACfC,WAAW,EAAGA,WAAa;IAC3BE,KAAK,EAAGA,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAI;IACrBgB,IAAI,EAAGjB,WAAa;IACpBR,QAAQ,EAAGgB,eAAiB;IAC5Bf,mBAAmB,EAAGA,mBAAqB;IAC3CC,IAAI,EAAGA,IAAM;IACbwB,MAAM,EACLvB,IAAI,gBACH,IAAAV,WAAA,CAAA0B,GAAA,EAAC9B,WAAA,CAAAsC,uCAAyB;MAACC,OAAO,EAAC,MAAM;MAAAC,QAAA,eACxC,IAAApC,WAAA,CAAA0B,GAAA,EAAC9B,WAAA,CAAAyC,IAAI;QAAC3B,IAAI,EAAGA;MAAM,CAAE;IAAC,CACI,CAAC,GACzBY,SACJ;IACDX,MAAM,EACLA,MAAM,gBACL,IAAAX,WAAA,CAAA0B,GAAA,EAAC9B,WAAA,CAAA0C,uCAAyB;MAACH,OAAO,EAAC,SAAS;MAAAC,QAAA,EACzCzB;IAAM,CACkB,CAAC,GACzBW,SACJ;IACDiB,qBAAqB;EAAA,CACrB,CAAC;AAEJ","ignoreList":[]}
1
+ {"version":3,"names":["_deepmerge","_interopRequireDefault","require","_components","_element","_lockUnlock","_jsxRuntime","ValidatedInputControl","unlock","privateApis","ValidatedText","data","field","onChange","hideLabelFromVision","type","prefix","suffix","label","placeholder","description","getValue","setValue","isValid","value","item","customValidity","setCustomValidity","useState","undefined","onChangeControl","useCallback","newValue","onValidateControl","message","custom","deepMerge","jsx","required","onValidate","help","__next40pxDefaultSize"],"sources":["@wordpress/dataviews/src/dataform-controls/utils/validated-input.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 { ValidatedInputControl } = unlock( privateApis );\n\nexport type DataFormValidatedTextControlProps< Item > =\n\tDataFormControlProps< Item > & {\n\t\t/**\n\t\t * The input type of the control.\n\t\t */\n\t\ttype?: 'text' | 'email' | 'tel' | 'url' | 'password';\n\t\t/**\n\t\t * Optional prefix element to display before the input.\n\t\t */\n\t\tprefix?: React.ReactElement;\n\t\t/**\n\t\t * Optional suffix element to display after the input.\n\t\t */\n\t\tsuffix?: React.ReactElement;\n\t};\n\nexport default function ValidatedText< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n\ttype,\n\tprefix,\n\tsuffix,\n}: DataFormValidatedTextControlProps< Item > ) {\n\tconst { label, placeholder, description, getValue, setValue, isValid } =\n\t\tfield;\n\tconst value = 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 onChangeControl = useCallback(\n\t\t( newValue: string ) =>\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[ data, setValue, onChange ]\n\t);\n\n\tconst onValidateControl = useCallback(\n\t\t( newValue: any ) => {\n\t\t\tconst message = 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, isValid, setValue ]\n\t);\n\n\treturn (\n\t\t<ValidatedInputControl\n\t\t\trequired={ !! 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={ onChangeControl }\n\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\ttype={ type }\n\t\t\tprefix={ prefix }\n\t\t\tsuffix={ suffix }\n\t\t\t__next40pxDefaultSize\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;AAA2C,IAAAI,WAAA,GAAAJ,OAAA;AAf3C;AACA;AACA;;AAGA;AACA;AACA;;AAIA;AACA;AACA;;AAIA,MAAM;EAAEK;AAAsB,CAAC,GAAG,IAAAC,kBAAM,EAAEC,uBAAY,CAAC;AAkBxC,SAASC,aAAaA,CAAU;EAC9CC,IAAI;EACJC,KAAK;EACLC,QAAQ;EACRC,mBAAmB;EACnBC,IAAI;EACJC,MAAM;EACNC;AAC0C,CAAC,EAAG;EAC9C,MAAM;IAAEC,KAAK;IAAEC,WAAW;IAAEC,WAAW;IAAEC,QAAQ;IAAEC,QAAQ;IAAEC;EAAQ,CAAC,GACrEX,KAAK;EACN,MAAMY,KAAK,GAAGH,QAAQ,CAAE;IAAEI,IAAI,EAAEd;EAAK,CAAE,CAAC;EACxC,MAAM,CAAEe,cAAc,EAAEC,iBAAiB,CAAE,GAC1C,IAAAC,iBAAQ,EAILC,SAAU,CAAC;EAEf,MAAMC,eAAe,GAAG,IAAAC,oBAAW,EAChCC,QAAgB,IACjBnB,QAAQ,CACPS,QAAQ,CAAE;IACTG,IAAI,EAAEd,IAAI;IACVa,KAAK,EAAEQ;EACR,CAAE,CACH,CAAC,EACF,CAAErB,IAAI,EAAEW,QAAQ,EAAET,QAAQ,CAC3B,CAAC;EAED,MAAMoB,iBAAiB,GAAG,IAAAF,oBAAW,EAClCC,QAAa,IAAM;IACpB,MAAME,OAAO,GAAGX,OAAO,EAAEY,MAAM,GAC9B,IAAAC,kBAAS,EACRzB,IAAI,EACJW,QAAQ,CAAE;MACTG,IAAI,EAAEd,IAAI;MACVa,KAAK,EAAEQ;IACR,CAAE,CACH,CAAC,EACDpB,KACD,CAAC;IAED,IAAKsB,OAAO,EAAG;MACdP,iBAAiB,CAAE;QAClBZ,IAAI,EAAE,SAAS;QACfmB;MACD,CAAE,CAAC;MACH;IACD;IAEAP,iBAAiB,CAAEE,SAAU,CAAC;EAC/B,CAAC,EACD,CAAElB,IAAI,EAAEC,KAAK,EAAEW,OAAO,EAAED,QAAQ,CACjC,CAAC;EAED,oBACC,IAAAhB,WAAA,CAAA+B,GAAA,EAAC9B,qBAAqB;IACrB+B,QAAQ,EAAG,CAAC,CAAEf,OAAO,EAAEe,QAAU;IACjCC,UAAU,EAAGN,iBAAmB;IAChCP,cAAc,EAAGA,cAAgB;IACjCR,KAAK,EAAGA,KAAO;IACfC,WAAW,EAAGA,WAAa;IAC3BK,KAAK,EAAGA,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAI;IACrBgB,IAAI,EAAGpB,WAAa;IACpBP,QAAQ,EAAGiB,eAAiB;IAC5BhB,mBAAmB,EAAGA,mBAAqB;IAC3CC,IAAI,EAAGA,IAAM;IACbC,MAAM,EAAGA,MAAQ;IACjBC,MAAM,EAAGA,MAAQ;IACjBwB,qBAAqB;EAAA,CACrB,CAAC;AAEJ","ignoreList":[]}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = ValidatedNumber;
8
+ var _deepmerge = _interopRequireDefault(require("deepmerge"));
9
+ var _components = require("@wordpress/components");
10
+ var _element = require("@wordpress/element");
11
+ var _i18n = require("@wordpress/i18n");
12
+ var _constants = require("../../constants");
13
+ var _lockUnlock = require("../../lock-unlock");
14
+ var _jsxRuntime = require("react/jsx-runtime");
15
+ /**
16
+ * External dependencies
17
+ */
18
+
19
+ /**
20
+ * WordPress dependencies
21
+ */
22
+
23
+ /**
24
+ * Internal dependencies
25
+ */
26
+
27
+ const {
28
+ ValidatedNumberControl
29
+ } = (0, _lockUnlock.unlock)(_components.privateApis);
30
+ function toNumberOrEmpty(value) {
31
+ if (value === '' || value === undefined) {
32
+ return '';
33
+ }
34
+ const number = Number(value);
35
+ return Number.isFinite(number) ? number : '';
36
+ }
37
+ function BetweenControls({
38
+ value,
39
+ onChange,
40
+ hideLabelFromVision,
41
+ step
42
+ }) {
43
+ const [min = '', max = ''] = value;
44
+ const onChangeMin = (0, _element.useCallback)(newValue => onChange([toNumberOrEmpty(newValue), max]), [onChange, max]);
45
+ const onChangeMax = (0, _element.useCallback)(newValue => onChange([min, toNumberOrEmpty(newValue)]), [onChange, min]);
46
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.BaseControl, {
47
+ __nextHasNoMarginBottom: true,
48
+ help: (0, _i18n.__)('The max. value must be greater than the min. value.'),
49
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.Flex, {
50
+ direction: "row",
51
+ gap: 4,
52
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalNumberControl, {
53
+ label: (0, _i18n.__)('Min.'),
54
+ value: min,
55
+ max: max ? Number(max) - step : undefined,
56
+ onChange: onChangeMin,
57
+ __next40pxDefaultSize: true,
58
+ hideLabelFromVision: hideLabelFromVision,
59
+ step: step
60
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalNumberControl, {
61
+ label: (0, _i18n.__)('Max.'),
62
+ value: max,
63
+ min: min ? Number(min) + step : undefined,
64
+ onChange: onChangeMax,
65
+ __next40pxDefaultSize: true,
66
+ hideLabelFromVision: hideLabelFromVision,
67
+ step: step
68
+ })]
69
+ })
70
+ });
71
+ }
72
+ function ValidatedNumber({
73
+ data,
74
+ field,
75
+ onChange,
76
+ hideLabelFromVision,
77
+ operator,
78
+ decimals
79
+ }) {
80
+ var _getValue;
81
+ const step = Math.pow(10, Math.abs(decimals) * -1);
82
+ const {
83
+ label,
84
+ description,
85
+ getValue,
86
+ setValue
87
+ } = field;
88
+ const value = (_getValue = getValue({
89
+ item: data
90
+ })) !== null && _getValue !== void 0 ? _getValue : '';
91
+ const [customValidity, setCustomValidity] = (0, _element.useState)(undefined);
92
+ const onChangeControl = (0, _element.useCallback)(newValue => {
93
+ onChange(setValue({
94
+ item: data,
95
+ // Do not convert an empty string or undefined to a number,
96
+ // otherwise there's a mismatch between the UI control (empty)
97
+ // and the data relied by onChange (0).
98
+ value: ['', undefined].includes(newValue) ? undefined : Number(newValue)
99
+ }));
100
+ }, [data, onChange, setValue]);
101
+ const onChangeBetweenControls = (0, _element.useCallback)(newValue => {
102
+ onChange(setValue({
103
+ item: data,
104
+ value: newValue
105
+ }));
106
+ }, [data, onChange, setValue]);
107
+ const onValidateControl = (0, _element.useCallback)(newValue => {
108
+ const message = field.isValid?.custom?.((0, _deepmerge.default)(data, setValue({
109
+ item: data,
110
+ value: [undefined, '', null].includes(newValue) ? undefined : Number(newValue)
111
+ })), field);
112
+ if (message) {
113
+ setCustomValidity({
114
+ type: 'invalid',
115
+ message
116
+ });
117
+ return;
118
+ }
119
+ setCustomValidity(undefined);
120
+ }, [data, field, setValue]);
121
+ if (operator === _constants.OPERATOR_BETWEEN) {
122
+ let valueBetween = ['', ''];
123
+ if (Array.isArray(value) && value.length === 2 && value.every(element => typeof element === 'number' || element === '')) {
124
+ valueBetween = value;
125
+ }
126
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(BetweenControls, {
127
+ value: valueBetween,
128
+ onChange: onChangeBetweenControls,
129
+ hideLabelFromVision: hideLabelFromVision,
130
+ step: step
131
+ });
132
+ }
133
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(ValidatedNumberControl, {
134
+ required: !!field.isValid?.required,
135
+ onValidate: onValidateControl,
136
+ customValidity: customValidity,
137
+ label: label,
138
+ help: description,
139
+ value: value,
140
+ onChange: onChangeControl,
141
+ __next40pxDefaultSize: true,
142
+ hideLabelFromVision: hideLabelFromVision,
143
+ step: step
144
+ });
145
+ }
146
+ //# sourceMappingURL=validated-number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_deepmerge","_interopRequireDefault","require","_components","_element","_i18n","_constants","_lockUnlock","_jsxRuntime","ValidatedNumberControl","unlock","privateApis","toNumberOrEmpty","value","undefined","number","Number","isFinite","BetweenControls","onChange","hideLabelFromVision","step","min","max","onChangeMin","useCallback","newValue","onChangeMax","jsx","BaseControl","__nextHasNoMarginBottom","help","__","children","jsxs","Flex","direction","gap","__experimentalNumberControl","label","__next40pxDefaultSize","ValidatedNumber","data","field","operator","decimals","_getValue","Math","pow","abs","description","getValue","setValue","item","customValidity","setCustomValidity","useState","onChangeControl","includes","onChangeBetweenControls","onValidateControl","message","isValid","custom","deepMerge","type","OPERATOR_BETWEEN","valueBetween","Array","isArray","length","every","element","required","onValidate"],"sources":["@wordpress/dataviews/src/dataform-controls/utils/validated-number.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 NumberBetween = [ number | string, number | string ];\n\nfunction toNumberOrEmpty( value?: string ) {\n\tif ( value === '' || value === undefined ) {\n\t\treturn '';\n\t}\n\tconst number = Number( value );\n\treturn Number.isFinite( number ) ? number : '';\n}\n\nfunction BetweenControls( {\n\tvalue,\n\tonChange,\n\thideLabelFromVision,\n\tstep,\n}: {\n\tvalue: NumberBetween;\n\tonChange: ( [ min, max ]: NumberBetween ) => void;\n\thideLabelFromVision?: boolean;\n\tstep: number;\n} ) {\n\tconst [ min = '', max = '' ] = value;\n\n\tconst onChangeMin = useCallback(\n\t\t( newValue: string | undefined ) =>\n\t\t\tonChange( [ toNumberOrEmpty( 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, toNumberOrEmpty( 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 ) - step : 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\tstep={ step }\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 ) + step : 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\tstep={ step }\n\t\t\t\t/>\n\t\t\t</Flex>\n\t\t</BaseControl>\n\t);\n}\n\nexport type DataFormValidatedNumberControlProps< Item > =\n\tDataFormControlProps< Item > & {\n\t\t/**\n\t\t * Number of decimals, acceps non-negative integer.\n\t\t */\n\t\tdecimals: number;\n\t};\n\nexport default function ValidatedNumber< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n\toperator,\n\tdecimals,\n}: DataFormValidatedNumberControlProps< Item > ) {\n\tconst step = Math.pow( 10, Math.abs( decimals ) * -1 );\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: NumberBetween ) => {\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: NumberBetween = [ '', '' ];\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 NumberBetween;\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\tstep={ step }\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\tstep={ step }\n\t\t/>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,6 @@
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
  });
@@ -11,6 +12,7 @@ var _icons = require("@wordpress/icons");
11
12
  var _dataFormLayout = require("../data-form-layout");
12
13
  var _isCombinedField = require("../is-combined-field");
13
14
  var _normalizeFormFields = require("../../normalize-form-fields");
15
+ var _summaryButton = _interopRequireDefault(require("./summary-button"));
14
16
  var _jsxRuntime = require("react/jsx-runtime");
15
17
  /**
16
18
  * WordPress dependencies
@@ -44,6 +46,7 @@ function DropdownHeader({
44
46
  }
45
47
  function PanelDropdown({
46
48
  fieldDefinition,
49
+ summaryFields,
47
50
  popoverAnchor,
48
51
  labelPosition = 'side',
49
52
  data,
@@ -81,21 +84,14 @@ function PanelDropdown({
81
84
  renderToggle: ({
82
85
  isOpen,
83
86
  onToggle
84
- }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
85
- className: "dataforms-layouts-panel__field-control",
86
- size: "compact",
87
- variant: ['none', 'top'].includes(labelPosition) ? 'link' : 'tertiary',
88
- "aria-expanded": isOpen,
89
- "aria-label": (0, _i18n.sprintf)(
90
- // translators: %s: Field name.
91
- (0, _i18n._x)('Edit %s', 'field'), fieldLabel || ''),
92
- onClick: onToggle,
87
+ }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_summaryButton.default, {
88
+ summaryFields: summaryFields,
89
+ data: data,
90
+ labelPosition: labelPosition,
91
+ fieldLabel: fieldLabel,
93
92
  disabled: fieldDefinition.readOnly === true,
94
- accessibleWhenDisabled: true,
95
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(fieldDefinition.render, {
96
- item: data,
97
- field: fieldDefinition
98
- })
93
+ onClick: onToggle,
94
+ "aria-expanded": isOpen
99
95
  }),
100
96
  renderContent: ({
101
97
  onClose
@@ -1 +1 @@
1
- {"version":3,"names":["_components","require","_i18n","_element","_icons","_dataFormLayout","_isCombinedField","_normalizeFormFields","_jsxRuntime","DropdownHeader","title","onClose","jsx","__experimentalVStack","className","spacing","children","jsxs","__experimentalHStack","alignment","__experimentalHeading","level","size","__experimentalSpacer","Button","label","__","icon","closeSmall","onClick","PanelDropdown","fieldDefinition","popoverAnchor","labelPosition","data","onChange","field","fieldLabel","isCombinedField","form","useMemo","layout","DEFAULT_LAYOUT","fields","id","popoverProps","anchor","placement","offset","shift","Dropdown","contentClassName","focusOnMount","toggleProps","variant","tooltipPosition","renderToggle","isOpen","onToggle","includes","sprintf","_x","disabled","readOnly","accessibleWhenDisabled","render","item","renderContent","Fragment","DataFormLayout","FieldLayout","nestedField","_form$fields","hideLabelFromVision","length","_default","exports","default"],"sources":["@wordpress/dataviews/src/dataforms-layouts/panel/dropdown.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalVStack as VStack,\n\t__experimentalHStack as HStack,\n\t__experimentalHeading as Heading,\n\t__experimentalSpacer as Spacer,\n\tDropdown,\n\tButton,\n} from '@wordpress/components';\nimport { sprintf, __, _x } from '@wordpress/i18n';\nimport { useMemo } from '@wordpress/element';\nimport { closeSmall } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport type { Form, FormField, NormalizedField } from '../../types';\nimport { DataFormLayout } from '../data-form-layout';\nimport { isCombinedField } from '../is-combined-field';\nimport { DEFAULT_LAYOUT } from '../../normalize-form-fields';\n\nfunction DropdownHeader( {\n\ttitle,\n\tonClose,\n}: {\n\ttitle?: string;\n\tonClose: () => void;\n} ) {\n\treturn (\n\t\t<VStack\n\t\t\tclassName=\"dataforms-layouts-panel__dropdown-header\"\n\t\t\tspacing={ 4 }\n\t\t>\n\t\t\t<HStack alignment=\"center\">\n\t\t\t\t{ title && (\n\t\t\t\t\t<Heading level={ 2 } size={ 13 }>\n\t\t\t\t\t\t{ title }\n\t\t\t\t\t</Heading>\n\t\t\t\t) }\n\t\t\t\t<Spacer />\n\t\t\t\t{ onClose && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tlabel={ __( 'Close' ) }\n\t\t\t\t\t\ticon={ closeSmall }\n\t\t\t\t\t\tonClick={ onClose }\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</HStack>\n\t\t</VStack>\n\t);\n}\n\nfunction PanelDropdown< Item >( {\n\tfieldDefinition,\n\tpopoverAnchor,\n\tlabelPosition = 'side',\n\tdata,\n\tonChange,\n\tfield,\n}: {\n\tfieldDefinition: NormalizedField< Item >;\n\tpopoverAnchor: HTMLElement | null;\n\tlabelPosition: 'side' | 'top' | 'none';\n\tdata: Item;\n\tonChange: ( value: any ) => void;\n\tfield: FormField;\n} ) {\n\tconst fieldLabel = isCombinedField( field )\n\t\t? field.label\n\t\t: fieldDefinition?.label;\n\n\tconst form: Form = useMemo(\n\t\t(): Form => ( {\n\t\t\tlayout: DEFAULT_LAYOUT,\n\t\t\tfields: isCombinedField( field )\n\t\t\t\t? field.children\n\t\t\t\t: // If not explicit children return the field id itself.\n\t\t\t\t [ { id: field.id } ],\n\t\t} ),\n\t\t[ field ]\n\t);\n\n\t// Memoize popoverProps to avoid returning a new object every time.\n\tconst popoverProps = useMemo(\n\t\t() => ( {\n\t\t\t// Anchor the popover to the middle of the entire row so that it doesn't\n\t\t\t// move around when the label changes.\n\t\t\tanchor: popoverAnchor,\n\t\t\tplacement: 'left-start',\n\t\t\toffset: 36,\n\t\t\tshift: true,\n\t\t} ),\n\t\t[ popoverAnchor ]\n\t);\n\n\treturn (\n\t\t<Dropdown\n\t\t\tcontentClassName=\"dataforms-layouts-panel__field-dropdown\"\n\t\t\tpopoverProps={ popoverProps }\n\t\t\tfocusOnMount\n\t\t\ttoggleProps={ {\n\t\t\t\tsize: 'compact',\n\t\t\t\tvariant: 'tertiary',\n\t\t\t\ttooltipPosition: 'middle left',\n\t\t\t} }\n\t\t\trenderToggle={ ( { isOpen, onToggle } ) => (\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"dataforms-layouts-panel__field-control\"\n\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\tvariant={\n\t\t\t\t\t\t[ 'none', 'top' ].includes( labelPosition )\n\t\t\t\t\t\t\t? 'link'\n\t\t\t\t\t\t\t: 'tertiary'\n\t\t\t\t\t}\n\t\t\t\t\taria-expanded={ isOpen }\n\t\t\t\t\taria-label={ sprintf(\n\t\t\t\t\t\t// translators: %s: Field name.\n\t\t\t\t\t\t_x( 'Edit %s', 'field' ),\n\t\t\t\t\t\tfieldLabel || ''\n\t\t\t\t\t) }\n\t\t\t\t\tonClick={ onToggle }\n\t\t\t\t\tdisabled={ fieldDefinition.readOnly === true }\n\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t>\n\t\t\t\t\t<fieldDefinition.render\n\t\t\t\t\t\titem={ data }\n\t\t\t\t\t\tfield={ fieldDefinition }\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t) }\n\t\t\trenderContent={ ( { onClose } ) => (\n\t\t\t\t<>\n\t\t\t\t\t<DropdownHeader title={ fieldLabel } onClose={ onClose } />\n\t\t\t\t\t<DataFormLayout\n\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\tform={ form }\n\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ ( FieldLayout, nestedField ) => (\n\t\t\t\t\t\t\t<FieldLayout\n\t\t\t\t\t\t\t\tkey={ nestedField.id }\n\t\t\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\t\t\tfield={ nestedField }\n\t\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\t\thideLabelFromVision={\n\t\t\t\t\t\t\t\t\t( form?.fields ?? [] ).length < 2\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</DataFormLayout>\n\t\t\t\t</>\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nexport default PanelDropdown;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_components","require","_i18n","_element","_icons","_dataFormLayout","_isCombinedField","_normalizeFormFields","_summaryButton","_interopRequireDefault","_jsxRuntime","DropdownHeader","title","onClose","jsx","__experimentalVStack","className","spacing","children","jsxs","__experimentalHStack","alignment","__experimentalHeading","level","size","__experimentalSpacer","Button","label","__","icon","closeSmall","onClick","PanelDropdown","fieldDefinition","summaryFields","popoverAnchor","labelPosition","data","onChange","field","fieldLabel","isCombinedField","form","useMemo","layout","DEFAULT_LAYOUT","fields","id","popoverProps","anchor","placement","offset","shift","Dropdown","contentClassName","focusOnMount","toggleProps","variant","tooltipPosition","renderToggle","isOpen","onToggle","default","disabled","readOnly","renderContent","Fragment","DataFormLayout","FieldLayout","nestedField","_form$fields","hideLabelFromVision","length","_default","exports"],"sources":["@wordpress/dataviews/src/dataforms-layouts/panel/dropdown.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalVStack as VStack,\n\t__experimentalHStack as HStack,\n\t__experimentalHeading as Heading,\n\t__experimentalSpacer as Spacer,\n\tDropdown,\n\tButton,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useMemo } from '@wordpress/element';\nimport { closeSmall } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport type { Form, FormField, NormalizedField } from '../../types';\nimport { DataFormLayout } from '../data-form-layout';\nimport { isCombinedField } from '../is-combined-field';\nimport { DEFAULT_LAYOUT } from '../../normalize-form-fields';\nimport SummaryButton from './summary-button';\n\nfunction DropdownHeader( {\n\ttitle,\n\tonClose,\n}: {\n\ttitle?: string;\n\tonClose: () => void;\n} ) {\n\treturn (\n\t\t<VStack\n\t\t\tclassName=\"dataforms-layouts-panel__dropdown-header\"\n\t\t\tspacing={ 4 }\n\t\t>\n\t\t\t<HStack alignment=\"center\">\n\t\t\t\t{ title && (\n\t\t\t\t\t<Heading level={ 2 } size={ 13 }>\n\t\t\t\t\t\t{ title }\n\t\t\t\t\t</Heading>\n\t\t\t\t) }\n\t\t\t\t<Spacer />\n\t\t\t\t{ onClose && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tlabel={ __( 'Close' ) }\n\t\t\t\t\t\ticon={ closeSmall }\n\t\t\t\t\t\tonClick={ onClose }\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</HStack>\n\t\t</VStack>\n\t);\n}\n\nfunction PanelDropdown< Item >( {\n\tfieldDefinition,\n\tsummaryFields,\n\tpopoverAnchor,\n\tlabelPosition = 'side',\n\tdata,\n\tonChange,\n\tfield,\n}: {\n\tfieldDefinition: NormalizedField< Item >;\n\tsummaryFields: NormalizedField< Item >[];\n\tpopoverAnchor: HTMLElement | null;\n\tlabelPosition: 'side' | 'top' | 'none';\n\tdata: Item;\n\tonChange: ( value: any ) => void;\n\tfield: FormField;\n} ) {\n\tconst fieldLabel = isCombinedField( field )\n\t\t? field.label\n\t\t: fieldDefinition?.label;\n\n\tconst form: Form = useMemo(\n\t\t(): Form => ( {\n\t\t\tlayout: DEFAULT_LAYOUT,\n\t\t\tfields: isCombinedField( field )\n\t\t\t\t? field.children\n\t\t\t\t: // If not explicit children return the field id itself.\n\t\t\t\t [ { id: field.id } ],\n\t\t} ),\n\t\t[ field ]\n\t);\n\n\t// Memoize popoverProps to avoid returning a new object every time.\n\tconst popoverProps = useMemo(\n\t\t() => ( {\n\t\t\t// Anchor the popover to the middle of the entire row so that it doesn't\n\t\t\t// move around when the label changes.\n\t\t\tanchor: popoverAnchor,\n\t\t\tplacement: 'left-start',\n\t\t\toffset: 36,\n\t\t\tshift: true,\n\t\t} ),\n\t\t[ popoverAnchor ]\n\t);\n\n\treturn (\n\t\t<Dropdown\n\t\t\tcontentClassName=\"dataforms-layouts-panel__field-dropdown\"\n\t\t\tpopoverProps={ popoverProps }\n\t\t\tfocusOnMount\n\t\t\ttoggleProps={ {\n\t\t\t\tsize: 'compact',\n\t\t\t\tvariant: 'tertiary',\n\t\t\t\ttooltipPosition: 'middle left',\n\t\t\t} }\n\t\t\trenderToggle={ ( { isOpen, onToggle } ) => (\n\t\t\t\t<SummaryButton\n\t\t\t\t\tsummaryFields={ summaryFields }\n\t\t\t\t\tdata={ data }\n\t\t\t\t\tlabelPosition={ labelPosition }\n\t\t\t\t\tfieldLabel={ fieldLabel }\n\t\t\t\t\tdisabled={ fieldDefinition.readOnly === true }\n\t\t\t\t\tonClick={ onToggle }\n\t\t\t\t\taria-expanded={ isOpen }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\trenderContent={ ( { onClose } ) => (\n\t\t\t\t<>\n\t\t\t\t\t<DropdownHeader title={ fieldLabel } onClose={ onClose } />\n\t\t\t\t\t<DataFormLayout\n\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\tform={ form }\n\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ ( FieldLayout, nestedField ) => (\n\t\t\t\t\t\t\t<FieldLayout\n\t\t\t\t\t\t\t\tkey={ nestedField.id }\n\t\t\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\t\t\tfield={ nestedField }\n\t\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\t\thideLabelFromVision={\n\t\t\t\t\t\t\t\t\t( form?.fields ?? [] ).length < 2\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</DataFormLayout>\n\t\t\t\t</>\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nexport default PanelDropdown;\n"],"mappings":"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","ignoreList":[]}
@@ -34,18 +34,29 @@ function FormPanelField({
34
34
  const {
35
35
  fields
36
36
  } = (0, _element.useContext)(_dataformContext.default);
37
- const fieldDefinition = fields.find(_field => {
38
- // Default to the first simple child if it is a combined field.
39
- if ((0, _isCombinedField.isCombinedField)(field)) {
40
- const simpleChildren = field.children.filter(child => typeof child === 'string' || !(0, _isCombinedField.isCombinedField)(child));
41
- if (simpleChildren.length === 0) {
42
- return false;
43
- }
44
- const firstChildFieldId = typeof simpleChildren[0] === 'string' ? simpleChildren[0] : simpleChildren[0].id;
45
- return _field.id === firstChildFieldId;
37
+ const getSummaryFields = () => {
38
+ if (!(0, _isCombinedField.isCombinedField)(field)) {
39
+ const fieldDef = fields.find(_field => _field.id === field.id);
40
+ return fieldDef ? [fieldDef] : [];
46
41
  }
47
- return _field.id === field.id;
48
- });
42
+
43
+ // Use summary field(s) if specified for combined fields
44
+ if (field.summary) {
45
+ const summaryIds = Array.isArray(field.summary) ? field.summary : [field.summary];
46
+ return summaryIds.map(summaryId => fields.find(_field => _field.id === summaryId)).filter(_field => _field !== undefined);
47
+ }
48
+
49
+ // Default to the first simple child
50
+ const simpleChildren = field.children.filter(child => typeof child === 'string' || !(0, _isCombinedField.isCombinedField)(child));
51
+ if (simpleChildren.length === 0) {
52
+ return [];
53
+ }
54
+ const firstChildFieldId = typeof simpleChildren[0] === 'string' ? simpleChildren[0] : simpleChildren[0].id;
55
+ const fieldDef = fields.find(_field => _field.id === firstChildFieldId);
56
+ return fieldDef ? [fieldDef] : [];
57
+ };
58
+ const summaryFields = getSummaryFields();
59
+ const fieldDefinition = summaryFields[0]; // For backward compatibility
49
60
 
50
61
  // Use internal state instead of a ref to make sure that the component
51
62
  // re-renders when the popover's anchor updates.
@@ -63,6 +74,7 @@ function FormPanelField({
63
74
  const renderedControl = layout.openAs === 'modal' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_modal.default, {
64
75
  field: field,
65
76
  fieldDefinition: fieldDefinition,
77
+ summaryFields: summaryFields,
66
78
  data: data,
67
79
  onChange: onChange,
68
80
  labelPosition: labelPosition
@@ -70,6 +82,7 @@ function FormPanelField({
70
82
  field: field,
71
83
  popoverAnchor: popoverAnchor,
72
84
  fieldDefinition: fieldDefinition,
85
+ summaryFields: summaryFields,
73
86
  data: data,
74
87
  onChange: onChange,
75
88
  labelPosition: labelPosition
@@ -1 +1 @@
1
- {"version":3,"names":["_clsx","_interopRequireDefault","require","_components","_element","_dataformContext","_isCombinedField","_normalizeFormFields","_dropdown","_modal","_jsxRuntime","FormPanelField","data","field","onChange","fields","useContext","DataFormContext","fieldDefinition","find","_field","isCombinedField","simpleChildren","children","filter","child","length","firstChildFieldId","id","popoverAnchor","setPopoverAnchor","useState","layout","normalizeLayout","type","labelPosition","labelClassName","clsx","fieldLabel","label","renderedControl","openAs","jsx","default","jsxs","__experimentalVStack","className","spacing","style","paddingBottom","__experimentalHStack","ref"],"sources":["@wordpress/dataviews/src/dataforms-layouts/panel/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalVStack as VStack,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { useState, useContext } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type {\n\tFieldLayoutProps,\n\tNormalizedPanelLayout,\n\tSimpleFormField,\n} from '../../types';\nimport DataFormContext from '../../components/dataform-context';\nimport { isCombinedField } from '../is-combined-field';\nimport { normalizeLayout } from '../../normalize-form-fields';\nimport PanelDropdown from './dropdown';\nimport PanelModal from './modal';\n\nexport default function FormPanelField< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n}: FieldLayoutProps< Item > ) {\n\tconst { fields } = useContext( DataFormContext );\n\tconst fieldDefinition = fields.find( ( _field ) => {\n\t\t// Default to the first simple child if it is a combined field.\n\t\tif ( isCombinedField( field ) ) {\n\t\t\tconst simpleChildren = field.children.filter(\n\t\t\t\t( child ): child is string | SimpleFormField =>\n\t\t\t\t\ttypeof child === 'string' || ! isCombinedField( child )\n\t\t\t);\n\n\t\t\tif ( simpleChildren.length === 0 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst firstChildFieldId =\n\t\t\t\ttypeof simpleChildren[ 0 ] === 'string'\n\t\t\t\t\t? simpleChildren[ 0 ]\n\t\t\t\t\t: simpleChildren[ 0 ].id;\n\n\t\t\treturn _field.id === firstChildFieldId;\n\t\t}\n\n\t\treturn _field.id === field.id;\n\t} );\n\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState< HTMLElement | null >(\n\t\tnull\n\t);\n\n\tif ( ! fieldDefinition ) {\n\t\treturn null;\n\t}\n\n\tconst layout: NormalizedPanelLayout = normalizeLayout( {\n\t\t...field.layout,\n\t\ttype: 'panel',\n\t} ) as NormalizedPanelLayout;\n\n\tconst labelPosition = layout.labelPosition;\n\tconst labelClassName = clsx(\n\t\t'dataforms-layouts-panel__field-label',\n\t\t`dataforms-layouts-panel__field-label--label-position-${ labelPosition }`\n\t);\n\tconst fieldLabel = isCombinedField( field )\n\t\t? field.label\n\t\t: fieldDefinition?.label;\n\n\tconst renderedControl =\n\t\tlayout.openAs === 'modal' ? (\n\t\t\t<PanelModal\n\t\t\t\tfield={ field }\n\t\t\t\tfieldDefinition={ fieldDefinition }\n\t\t\t\tdata={ data }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tlabelPosition={ labelPosition }\n\t\t\t/>\n\t\t) : (\n\t\t\t<PanelDropdown\n\t\t\t\tfield={ field }\n\t\t\t\tpopoverAnchor={ popoverAnchor }\n\t\t\t\tfieldDefinition={ fieldDefinition }\n\t\t\t\tdata={ data }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tlabelPosition={ labelPosition }\n\t\t\t/>\n\t\t);\n\n\tif ( labelPosition === 'top' ) {\n\t\treturn (\n\t\t\t<VStack className=\"dataforms-layouts-panel__field\" spacing={ 0 }>\n\t\t\t\t<div\n\t\t\t\t\tclassName={ labelClassName }\n\t\t\t\t\tstyle={ { paddingBottom: 0 } }\n\t\t\t\t>\n\t\t\t\t\t{ fieldLabel }\n\t\t\t\t</div>\n\t\t\t\t<div className=\"dataforms-layouts-panel__field-control\">\n\t\t\t\t\t{ renderedControl }\n\t\t\t\t</div>\n\t\t\t</VStack>\n\t\t);\n\t}\n\n\tif ( labelPosition === 'none' ) {\n\t\treturn (\n\t\t\t<div className=\"dataforms-layouts-panel__field\">\n\t\t\t\t{ renderedControl }\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Defaults to label position side.\n\treturn (\n\t\t<HStack\n\t\t\tref={ setPopoverAnchor }\n\t\t\tclassName=\"dataforms-layouts-panel__field\"\n\t\t>\n\t\t\t<div className={ labelClassName }>{ fieldLabel }</div>\n\t\t\t<div className=\"dataforms-layouts-panel__field-control\">\n\t\t\t\t{ renderedControl }\n\t\t\t</div>\n\t\t</HStack>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_clsx","_interopRequireDefault","require","_components","_element","_dataformContext","_isCombinedField","_normalizeFormFields","_dropdown","_modal","_jsxRuntime","FormPanelField","data","field","onChange","fields","useContext","DataFormContext","getSummaryFields","isCombinedField","fieldDef","find","_field","id","summary","summaryIds","Array","isArray","map","summaryId","filter","undefined","simpleChildren","children","child","length","firstChildFieldId","summaryFields","fieldDefinition","popoverAnchor","setPopoverAnchor","useState","layout","normalizeLayout","type","labelPosition","labelClassName","clsx","fieldLabel","label","renderedControl","openAs","jsx","default","jsxs","__experimentalVStack","className","spacing","style","paddingBottom","__experimentalHStack","ref"],"sources":["@wordpress/dataviews/src/dataforms-layouts/panel/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalVStack as VStack,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { useState, useContext } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type {\n\tFieldLayoutProps,\n\tNormalizedPanelLayout,\n\tSimpleFormField,\n} from '../../types';\nimport DataFormContext from '../../components/dataform-context';\nimport { isCombinedField } from '../is-combined-field';\nimport { normalizeLayout } from '../../normalize-form-fields';\nimport PanelDropdown from './dropdown';\nimport PanelModal from './modal';\n\nexport default function FormPanelField< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n}: FieldLayoutProps< Item > ) {\n\tconst { fields } = useContext( DataFormContext );\n\tconst getSummaryFields = () => {\n\t\tif ( ! isCombinedField( field ) ) {\n\t\t\tconst fieldDef = fields.find(\n\t\t\t\t( _field ) => _field.id === field.id\n\t\t\t);\n\t\t\treturn fieldDef ? [ fieldDef ] : [];\n\t\t}\n\n\t\t// Use summary field(s) if specified for combined fields\n\t\tif ( field.summary ) {\n\t\t\tconst summaryIds = Array.isArray( field.summary )\n\t\t\t\t? field.summary\n\t\t\t\t: [ field.summary ];\n\t\t\treturn summaryIds\n\t\t\t\t.map( ( summaryId ) =>\n\t\t\t\t\tfields.find( ( _field ) => _field.id === summaryId )\n\t\t\t\t)\n\t\t\t\t.filter( ( _field ) => _field !== undefined );\n\t\t}\n\n\t\t// Default to the first simple child\n\t\tconst simpleChildren = field.children.filter(\n\t\t\t( child ): child is string | SimpleFormField =>\n\t\t\t\ttypeof child === 'string' || ! isCombinedField( child )\n\t\t);\n\n\t\tif ( simpleChildren.length === 0 ) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst firstChildFieldId =\n\t\t\ttypeof simpleChildren[ 0 ] === 'string'\n\t\t\t\t? simpleChildren[ 0 ]\n\t\t\t\t: simpleChildren[ 0 ].id;\n\n\t\tconst fieldDef = fields.find(\n\t\t\t( _field ) => _field.id === firstChildFieldId\n\t\t);\n\t\treturn fieldDef ? [ fieldDef ] : [];\n\t};\n\n\tconst summaryFields = getSummaryFields();\n\tconst fieldDefinition = summaryFields[ 0 ]; // For backward compatibility\n\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState< HTMLElement | null >(\n\t\tnull\n\t);\n\n\tif ( ! fieldDefinition ) {\n\t\treturn null;\n\t}\n\n\tconst layout: NormalizedPanelLayout = normalizeLayout( {\n\t\t...field.layout,\n\t\ttype: 'panel',\n\t} ) as NormalizedPanelLayout;\n\n\tconst labelPosition = layout.labelPosition;\n\tconst labelClassName = clsx(\n\t\t'dataforms-layouts-panel__field-label',\n\t\t`dataforms-layouts-panel__field-label--label-position-${ labelPosition }`\n\t);\n\tconst fieldLabel = isCombinedField( field )\n\t\t? field.label\n\t\t: fieldDefinition?.label;\n\n\tconst renderedControl =\n\t\tlayout.openAs === 'modal' ? (\n\t\t\t<PanelModal\n\t\t\t\tfield={ field }\n\t\t\t\tfieldDefinition={ fieldDefinition }\n\t\t\t\tsummaryFields={ summaryFields }\n\t\t\t\tdata={ data }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tlabelPosition={ labelPosition }\n\t\t\t/>\n\t\t) : (\n\t\t\t<PanelDropdown\n\t\t\t\tfield={ field }\n\t\t\t\tpopoverAnchor={ popoverAnchor }\n\t\t\t\tfieldDefinition={ fieldDefinition }\n\t\t\t\tsummaryFields={ summaryFields }\n\t\t\t\tdata={ data }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tlabelPosition={ labelPosition }\n\t\t\t/>\n\t\t);\n\n\tif ( labelPosition === 'top' ) {\n\t\treturn (\n\t\t\t<VStack className=\"dataforms-layouts-panel__field\" spacing={ 0 }>\n\t\t\t\t<div\n\t\t\t\t\tclassName={ labelClassName }\n\t\t\t\t\tstyle={ { paddingBottom: 0 } }\n\t\t\t\t>\n\t\t\t\t\t{ fieldLabel }\n\t\t\t\t</div>\n\t\t\t\t<div className=\"dataforms-layouts-panel__field-control\">\n\t\t\t\t\t{ renderedControl }\n\t\t\t\t</div>\n\t\t\t</VStack>\n\t\t);\n\t}\n\n\tif ( labelPosition === 'none' ) {\n\t\treturn (\n\t\t\t<div className=\"dataforms-layouts-panel__field\">\n\t\t\t\t{ renderedControl }\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Defaults to label position side.\n\treturn (\n\t\t<HStack\n\t\t\tref={ setPopoverAnchor }\n\t\t\tclassName=\"dataforms-layouts-panel__field\"\n\t\t>\n\t\t\t<div className={ labelClassName }>{ fieldLabel }</div>\n\t\t\t<div className=\"dataforms-layouts-panel__field-control\">\n\t\t\t\t{ renderedControl }\n\t\t\t</div>\n\t\t</HStack>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,16 +1,23 @@
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 = void 0;
8
+ var _deepmerge = _interopRequireDefault(require("deepmerge"));
7
9
  var _components = require("@wordpress/components");
8
10
  var _i18n = require("@wordpress/i18n");
9
11
  var _element = require("@wordpress/element");
10
12
  var _dataFormLayout = require("../data-form-layout");
11
13
  var _isCombinedField = require("../is-combined-field");
12
14
  var _normalizeFormFields = require("../../normalize-form-fields");
15
+ var _summaryButton = _interopRequireDefault(require("./summary-button"));
13
16
  var _jsxRuntime = require("react/jsx-runtime");
17
+ /**
18
+ * External dependencies
19
+ */
20
+
14
21
  /**
15
22
  * WordPress dependencies
16
23
  */
@@ -27,21 +34,15 @@ function ModalContent({
27
34
  onClose
28
35
  }) {
29
36
  const [changes, setChanges] = (0, _element.useState)({});
37
+ const modalData = (0, _element.useMemo)(() => {
38
+ return (0, _deepmerge.default)(data, changes);
39
+ }, [data, changes]);
30
40
  const onApply = () => {
31
41
  onChange(changes);
32
42
  onClose();
33
43
  };
34
- const handleOnChange = value => {
35
- setChanges(prev => ({
36
- ...prev,
37
- ...value
38
- }));
39
- };
40
-
41
- // Merge original data with local changes for display
42
- const displayData = {
43
- ...data,
44
- ...changes
44
+ const handleOnChange = newValue => {
45
+ setChanges(prev => (0, _deepmerge.default)(prev, newValue));
45
46
  };
46
47
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.Modal, {
47
48
  className: "dataforms-layouts-panel__modal",
@@ -50,13 +51,13 @@ function ModalContent({
50
51
  title: fieldLabel,
51
52
  size: "medium",
52
53
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_dataFormLayout.DataFormLayout, {
53
- data: displayData,
54
+ data: modalData,
54
55
  form: form,
55
56
  onChange: handleOnChange,
56
57
  children: (FieldLayout, nestedField) => {
57
58
  var _form$fields;
58
59
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(FieldLayout, {
59
- data: displayData,
60
+ data: modalData,
60
61
  field: nestedField,
61
62
  onChange: handleOnChange,
62
63
  hideLabelFromVision: ((_form$fields = form?.fields) !== null && _form$fields !== void 0 ? _form$fields : []).length < 2
@@ -81,6 +82,7 @@ function ModalContent({
81
82
  }
82
83
  function PanelModal({
83
84
  fieldDefinition,
85
+ summaryFields,
84
86
  labelPosition,
85
87
  data,
86
88
  onChange,
@@ -97,21 +99,14 @@ function PanelModal({
97
99
  }]
98
100
  }), [field]);
99
101
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
100
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
101
- className: "dataforms-layouts-modal__field-control",
102
- size: "compact",
103
- variant: ['none', 'top'].includes(labelPosition) ? 'link' : 'tertiary',
104
- "aria-expanded": isOpen,
105
- "aria-label": (0, _i18n.sprintf)(
106
- // translators: %s: Field name.
107
- (0, _i18n._x)('Edit %s', 'field'), fieldLabel || ''),
108
- onClick: () => setIsOpen(true),
102
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_summaryButton.default, {
103
+ summaryFields: summaryFields,
104
+ data: data,
105
+ labelPosition: labelPosition,
106
+ fieldLabel: fieldLabel,
109
107
  disabled: fieldDefinition.readOnly === true,
110
- accessibleWhenDisabled: true,
111
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(fieldDefinition.render, {
112
- item: data,
113
- field: fieldDefinition
114
- })
108
+ onClick: () => setIsOpen(true),
109
+ "aria-expanded": isOpen
115
110
  }), isOpen && /*#__PURE__*/(0, _jsxRuntime.jsx)(ModalContent, {
116
111
  data: data,
117
112
  form: form,