@wordpress/dataviews 6.0.0 → 7.0.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 (194) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/README.md +42 -14
  3. package/build/components/dataviews/index.js +38 -6
  4. package/build/components/dataviews/index.js.map +1 -1
  5. package/build/components/dataviews-context/index.js +4 -1
  6. package/build/components/dataviews-context/index.js.map +1 -1
  7. package/build/components/dataviews-item-actions/index.js +1 -10
  8. package/build/components/dataviews-item-actions/index.js.map +1 -1
  9. package/build/components/dataviews-pagination/index.js +1 -1
  10. package/build/components/dataviews-pagination/index.js.map +1 -1
  11. package/build/components/dataviews-view-config/index.js +8 -5
  12. package/build/components/dataviews-view-config/index.js.map +1 -1
  13. package/build/components/dataviews-view-config/infinite-scroll-toggle.js +47 -0
  14. package/build/components/dataviews-view-config/infinite-scroll-toggle.js.map +1 -0
  15. package/build/dataform-controls/array.js +70 -0
  16. package/build/dataform-controls/array.js.map +1 -0
  17. package/build/dataform-controls/boolean.js +15 -7
  18. package/build/dataform-controls/boolean.js.map +1 -1
  19. package/build/dataform-controls/email.js +14 -7
  20. package/build/dataform-controls/email.js.map +1 -1
  21. package/build/dataform-controls/index.js +3 -1
  22. package/build/dataform-controls/index.js.map +1 -1
  23. package/build/dataform-controls/integer.js +14 -7
  24. package/build/dataform-controls/integer.js.map +1 -1
  25. package/build/dataform-controls/text.js +14 -7
  26. package/build/dataform-controls/text.js.map +1 -1
  27. package/build/dataforms-layouts/card/index.js +137 -0
  28. package/build/dataforms-layouts/card/index.js.map +1 -0
  29. package/build/dataforms-layouts/data-form-layout.js +2 -2
  30. package/build/dataforms-layouts/data-form-layout.js.map +1 -1
  31. package/build/dataforms-layouts/index.js +4 -0
  32. package/build/dataforms-layouts/index.js.map +1 -1
  33. package/build/dataforms-layouts/panel/dropdown.js +124 -0
  34. package/build/dataforms-layouts/panel/dropdown.js.map +1 -0
  35. package/build/dataforms-layouts/panel/index.js +34 -149
  36. package/build/dataforms-layouts/panel/index.js.map +1 -1
  37. package/build/dataforms-layouts/panel/modal.js +125 -0
  38. package/build/dataforms-layouts/panel/modal.js.map +1 -0
  39. package/build/dataforms-layouts/regular/index.js +10 -21
  40. package/build/dataforms-layouts/regular/index.js.map +1 -1
  41. package/build/dataviews-layouts/grid/index.js +24 -7
  42. package/build/dataviews-layouts/grid/index.js.map +1 -1
  43. package/build/dataviews-layouts/grid/preview-size-picker.js +11 -11
  44. package/build/dataviews-layouts/grid/preview-size-picker.js.map +1 -1
  45. package/build/dataviews-layouts/list/index.js +45 -27
  46. package/build/dataviews-layouts/list/index.js.map +1 -1
  47. package/build/dataviews-layouts/table/column-header-menu.js +3 -0
  48. package/build/dataviews-layouts/table/column-header-menu.js.map +1 -1
  49. package/build/dataviews-layouts/table/index.js +23 -8
  50. package/build/dataviews-layouts/table/index.js.map +1 -1
  51. package/build/field-types/array.js +2 -2
  52. package/build/field-types/array.js.map +1 -1
  53. package/build/normalize-form-fields.js +52 -13
  54. package/build/normalize-form-fields.js.map +1 -1
  55. package/build/types.js.map +1 -1
  56. package/build-module/components/dataviews/index.js +40 -8
  57. package/build-module/components/dataviews/index.js.map +1 -1
  58. package/build-module/components/dataviews-context/index.js +4 -1
  59. package/build-module/components/dataviews-context/index.js.map +1 -1
  60. package/build-module/components/dataviews-item-actions/index.js +1 -10
  61. package/build-module/components/dataviews-item-actions/index.js.map +1 -1
  62. package/build-module/components/dataviews-pagination/index.js +1 -1
  63. package/build-module/components/dataviews-pagination/index.js.map +1 -1
  64. package/build-module/components/dataviews-view-config/index.js +8 -5
  65. package/build-module/components/dataviews-view-config/index.js.map +1 -1
  66. package/build-module/components/dataviews-view-config/infinite-scroll-toggle.js +39 -0
  67. package/build-module/components/dataviews-view-config/infinite-scroll-toggle.js.map +1 -0
  68. package/build-module/dataform-controls/array.js +63 -0
  69. package/build-module/dataform-controls/array.js.map +1 -0
  70. package/build-module/dataform-controls/boolean.js +15 -7
  71. package/build-module/dataform-controls/boolean.js.map +1 -1
  72. package/build-module/dataform-controls/email.js +15 -8
  73. package/build-module/dataform-controls/email.js.map +1 -1
  74. package/build-module/dataform-controls/index.js +3 -1
  75. package/build-module/dataform-controls/index.js.map +1 -1
  76. package/build-module/dataform-controls/integer.js +15 -8
  77. package/build-module/dataform-controls/integer.js.map +1 -1
  78. package/build-module/dataform-controls/text.js +15 -8
  79. package/build-module/dataform-controls/text.js.map +1 -1
  80. package/build-module/dataforms-layouts/card/index.js +128 -0
  81. package/build-module/dataforms-layouts/card/index.js.map +1 -0
  82. package/build-module/dataforms-layouts/data-form-layout.js +2 -2
  83. package/build-module/dataforms-layouts/data-form-layout.js.map +1 -1
  84. package/build-module/dataforms-layouts/index.js +4 -0
  85. package/build-module/dataforms-layouts/index.js.map +1 -1
  86. package/build-module/dataforms-layouts/panel/dropdown.js +118 -0
  87. package/build-module/dataforms-layouts/panel/dropdown.js.map +1 -0
  88. package/build-module/dataforms-layouts/panel/index.js +37 -152
  89. package/build-module/dataforms-layouts/panel/index.js.map +1 -1
  90. package/build-module/dataforms-layouts/panel/modal.js +119 -0
  91. package/build-module/dataforms-layouts/panel/modal.js.map +1 -0
  92. package/build-module/dataforms-layouts/regular/index.js +10 -21
  93. package/build-module/dataforms-layouts/regular/index.js.map +1 -1
  94. package/build-module/dataviews-layouts/grid/index.js +25 -8
  95. package/build-module/dataviews-layouts/grid/index.js.map +1 -1
  96. package/build-module/dataviews-layouts/grid/preview-size-picker.js +11 -11
  97. package/build-module/dataviews-layouts/grid/preview-size-picker.js.map +1 -1
  98. package/build-module/dataviews-layouts/list/index.js +47 -29
  99. package/build-module/dataviews-layouts/list/index.js.map +1 -1
  100. package/build-module/dataviews-layouts/table/column-header-menu.js +3 -0
  101. package/build-module/dataviews-layouts/table/column-header-menu.js.map +1 -1
  102. package/build-module/dataviews-layouts/table/index.js +23 -8
  103. package/build-module/dataviews-layouts/table/index.js.map +1 -1
  104. package/build-module/field-types/array.js +2 -2
  105. package/build-module/field-types/array.js.map +1 -1
  106. package/build-module/normalize-form-fields.js +50 -13
  107. package/build-module/normalize-form-fields.js.map +1 -1
  108. package/build-module/types.js.map +1 -1
  109. package/build-style/style-rtl.css +53 -16
  110. package/build-style/style.css +53 -16
  111. package/build-types/components/dataform/stories/index.story.d.ts +41 -17
  112. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
  113. package/build-types/components/dataviews/index.d.ts +5 -2
  114. package/build-types/components/dataviews/index.d.ts.map +1 -1
  115. package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
  116. package/build-types/components/dataviews/stories/index.story.d.ts +2 -1
  117. package/build-types/components/dataviews/stories/index.story.d.ts.map +1 -1
  118. package/build-types/components/dataviews-context/index.d.ts +4 -1
  119. package/build-types/components/dataviews-context/index.d.ts.map +1 -1
  120. package/build-types/components/dataviews-item-actions/index.d.ts.map +1 -1
  121. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  122. package/build-types/components/dataviews-view-config/infinite-scroll-toggle.d.ts +2 -0
  123. package/build-types/components/dataviews-view-config/infinite-scroll-toggle.d.ts.map +1 -0
  124. package/build-types/dataform-controls/array.d.ts +6 -0
  125. package/build-types/dataform-controls/array.d.ts.map +1 -0
  126. package/build-types/dataform-controls/boolean.d.ts.map +1 -1
  127. package/build-types/dataform-controls/email.d.ts.map +1 -1
  128. package/build-types/dataform-controls/index.d.ts.map +1 -1
  129. package/build-types/dataform-controls/integer.d.ts.map +1 -1
  130. package/build-types/dataform-controls/text.d.ts.map +1 -1
  131. package/build-types/dataforms-layouts/card/index.d.ts +13 -0
  132. package/build-types/dataforms-layouts/card/index.d.ts.map +1 -0
  133. package/build-types/dataforms-layouts/index.d.ts.map +1 -1
  134. package/build-types/dataforms-layouts/panel/dropdown.d.ts +14 -0
  135. package/build-types/dataforms-layouts/panel/dropdown.d.ts.map +1 -0
  136. package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
  137. package/build-types/dataforms-layouts/panel/modal.d.ts +13 -0
  138. package/build-types/dataforms-layouts/panel/modal.d.ts.map +1 -0
  139. package/build-types/dataforms-layouts/regular/index.d.ts.map +1 -1
  140. package/build-types/dataviews-layouts/grid/index.d.ts.map +1 -1
  141. package/build-types/dataviews-layouts/grid/preview-size-picker.d.ts +1 -1
  142. package/build-types/dataviews-layouts/grid/preview-size-picker.d.ts.map +1 -1
  143. package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
  144. package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
  145. package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
  146. package/build-types/field-types/boolean.d.ts +1 -1
  147. package/build-types/normalize-form-fields.d.ts +10 -3
  148. package/build-types/normalize-form-fields.d.ts.map +1 -1
  149. package/build-types/test/normalize-form-fields.d.ts +2 -0
  150. package/build-types/test/normalize-form-fields.d.ts.map +1 -0
  151. package/build-types/types.d.ts +54 -6
  152. package/build-types/types.d.ts.map +1 -1
  153. package/build-wp/index.js +3062 -1147
  154. package/package.json +15 -15
  155. package/src/components/dataform/stories/index.story.tsx +478 -91
  156. package/src/components/dataviews/index.tsx +50 -14
  157. package/src/components/dataviews/stories/fixtures.tsx +98 -7
  158. package/src/components/dataviews/stories/index.story.tsx +137 -4
  159. package/src/components/dataviews/style.scss +4 -0
  160. package/src/components/dataviews-context/index.ts +6 -2
  161. package/src/components/dataviews-item-actions/index.tsx +7 -16
  162. package/src/components/dataviews-pagination/index.tsx +1 -1
  163. package/src/components/dataviews-view-config/index.tsx +13 -5
  164. package/src/components/dataviews-view-config/infinite-scroll-toggle.tsx +39 -0
  165. package/src/dataform-controls/array.tsx +85 -0
  166. package/src/dataform-controls/boolean.tsx +24 -10
  167. package/src/dataform-controls/email.tsx +24 -11
  168. package/src/dataform-controls/index.tsx +3 -1
  169. package/src/dataform-controls/integer.tsx +27 -13
  170. package/src/dataform-controls/text.tsx +24 -11
  171. package/src/dataforms-layouts/card/index.tsx +154 -0
  172. package/src/dataforms-layouts/card/style.scss +3 -0
  173. package/src/dataforms-layouts/data-form-layout.tsx +2 -2
  174. package/src/dataforms-layouts/index.tsx +5 -0
  175. package/src/dataforms-layouts/panel/dropdown.tsx +160 -0
  176. package/src/dataforms-layouts/panel/index.tsx +49 -189
  177. package/src/dataforms-layouts/panel/modal.tsx +165 -0
  178. package/src/dataforms-layouts/panel/style.scss +4 -0
  179. package/src/dataforms-layouts/regular/index.tsx +20 -23
  180. package/src/dataviews-layouts/grid/index.tsx +32 -5
  181. package/src/dataviews-layouts/grid/preview-size-picker.tsx +15 -13
  182. package/src/dataviews-layouts/grid/style.scss +3 -1
  183. package/src/dataviews-layouts/list/index.tsx +65 -31
  184. package/src/dataviews-layouts/list/style.scss +7 -3
  185. package/src/dataviews-layouts/table/column-header-menu.tsx +4 -0
  186. package/src/dataviews-layouts/table/index.tsx +27 -1
  187. package/src/field-types/array.tsx +1 -1
  188. package/src/normalize-form-fields.ts +63 -17
  189. package/src/test/dataform.tsx +181 -3
  190. package/src/test/dataviews.tsx +38 -0
  191. package/src/test/filter-and-sort-data-view.js +123 -64
  192. package/src/test/normalize-form-fields.ts +247 -0
  193. package/src/types.ts +72 -6
  194. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,118 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __experimentalVStack as VStack, __experimentalHStack as HStack, __experimentalHeading as Heading, __experimentalSpacer as Spacer, Dropdown, Button } from '@wordpress/components';
5
+ import { sprintf, __, _x } from '@wordpress/i18n';
6
+ import { useMemo } from '@wordpress/element';
7
+ import { closeSmall } from '@wordpress/icons';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+
13
+ import { DataFormLayout } from '../data-form-layout';
14
+ import { isCombinedField } from '../is-combined-field';
15
+ import { DEFAULT_LAYOUT } from '../../normalize-form-fields';
16
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
17
+ function DropdownHeader({
18
+ title,
19
+ onClose
20
+ }) {
21
+ return /*#__PURE__*/_jsx(VStack, {
22
+ className: "dataforms-layouts-panel__dropdown-header",
23
+ spacing: 4,
24
+ children: /*#__PURE__*/_jsxs(HStack, {
25
+ alignment: "center",
26
+ children: [title && /*#__PURE__*/_jsx(Heading, {
27
+ level: 2,
28
+ size: 13,
29
+ children: title
30
+ }), /*#__PURE__*/_jsx(Spacer, {}), onClose && /*#__PURE__*/_jsx(Button, {
31
+ label: __('Close'),
32
+ icon: closeSmall,
33
+ onClick: onClose,
34
+ size: "small"
35
+ })]
36
+ })
37
+ });
38
+ }
39
+ function PanelDropdown({
40
+ fieldDefinition,
41
+ popoverAnchor,
42
+ labelPosition = 'side',
43
+ data,
44
+ onChange,
45
+ field
46
+ }) {
47
+ const fieldLabel = isCombinedField(field) ? field.label : fieldDefinition?.label;
48
+ const form = useMemo(() => ({
49
+ layout: DEFAULT_LAYOUT,
50
+ fields: isCombinedField(field) ? field.children :
51
+ // If not explicit children return the field id itself.
52
+ [{
53
+ id: field.id
54
+ }]
55
+ }), [field]);
56
+
57
+ // Memoize popoverProps to avoid returning a new object every time.
58
+ const popoverProps = useMemo(() => ({
59
+ // Anchor the popover to the middle of the entire row so that it doesn't
60
+ // move around when the label changes.
61
+ anchor: popoverAnchor,
62
+ placement: 'left-start',
63
+ offset: 36,
64
+ shift: true
65
+ }), [popoverAnchor]);
66
+ return /*#__PURE__*/_jsx(Dropdown, {
67
+ contentClassName: "dataforms-layouts-panel__field-dropdown",
68
+ popoverProps: popoverProps,
69
+ focusOnMount: true,
70
+ toggleProps: {
71
+ size: 'compact',
72
+ variant: 'tertiary',
73
+ tooltipPosition: 'middle left'
74
+ },
75
+ renderToggle: ({
76
+ isOpen,
77
+ onToggle
78
+ }) => /*#__PURE__*/_jsx(Button, {
79
+ className: "dataforms-layouts-panel__field-control",
80
+ size: "compact",
81
+ variant: ['none', 'top'].includes(labelPosition) ? 'link' : 'tertiary',
82
+ "aria-expanded": isOpen,
83
+ "aria-label": sprintf(
84
+ // translators: %s: Field name.
85
+ _x('Edit %s', 'field'), fieldLabel || ''),
86
+ onClick: onToggle,
87
+ disabled: fieldDefinition.readOnly === true,
88
+ accessibleWhenDisabled: true,
89
+ children: /*#__PURE__*/_jsx(fieldDefinition.render, {
90
+ item: data,
91
+ field: fieldDefinition
92
+ })
93
+ }),
94
+ renderContent: ({
95
+ onClose
96
+ }) => /*#__PURE__*/_jsxs(_Fragment, {
97
+ children: [/*#__PURE__*/_jsx(DropdownHeader, {
98
+ title: fieldLabel,
99
+ onClose: onClose
100
+ }), /*#__PURE__*/_jsx(DataFormLayout, {
101
+ data: data,
102
+ form: form,
103
+ onChange: onChange,
104
+ children: (FieldLayout, nestedField) => {
105
+ var _form$fields;
106
+ return /*#__PURE__*/_jsx(FieldLayout, {
107
+ data: data,
108
+ field: nestedField,
109
+ onChange: onChange,
110
+ hideLabelFromVision: ((_form$fields = form?.fields) !== null && _form$fields !== void 0 ? _form$fields : []).length < 2
111
+ }, nestedField.id);
112
+ }
113
+ })]
114
+ })
115
+ });
116
+ }
117
+ export default PanelDropdown;
118
+ //# sourceMappingURL=dropdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__experimentalVStack","VStack","__experimentalHStack","HStack","__experimentalHeading","Heading","__experimentalSpacer","Spacer","Dropdown","Button","sprintf","__","_x","useMemo","closeSmall","DataFormLayout","isCombinedField","DEFAULT_LAYOUT","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","DropdownHeader","title","onClose","className","spacing","children","alignment","level","size","label","icon","onClick","PanelDropdown","fieldDefinition","popoverAnchor","labelPosition","data","onChange","field","fieldLabel","form","layout","fields","id","popoverProps","anchor","placement","offset","shift","contentClassName","focusOnMount","toggleProps","variant","tooltipPosition","renderToggle","isOpen","onToggle","includes","disabled","readOnly","accessibleWhenDisabled","render","item","renderContent","FieldLayout","nestedField","_form$fields","hideLabelFromVision","length"],"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":[]}
@@ -6,150 +6,38 @@ import clsx from 'clsx';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { __experimentalVStack as VStack, __experimentalHStack as HStack, __experimentalHeading as Heading, __experimentalSpacer as Spacer, Dropdown, Button } from '@wordpress/components';
10
- import { sprintf, __, _x } from '@wordpress/i18n';
11
- import { useState, useMemo, useContext } from '@wordpress/element';
12
- import { closeSmall } from '@wordpress/icons';
9
+ import { __experimentalVStack as VStack, __experimentalHStack as HStack } from '@wordpress/components';
10
+ import { useState, useContext } from '@wordpress/element';
13
11
 
14
12
  /**
15
13
  * Internal dependencies
16
14
  */
17
15
 
18
16
  import DataFormContext from '../../components/dataform-context';
19
- import { DataFormLayout } from '../data-form-layout';
20
17
  import { isCombinedField } from '../is-combined-field';
21
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
22
- function DropdownHeader({
23
- title,
24
- onClose
25
- }) {
26
- return /*#__PURE__*/_jsx(VStack, {
27
- className: "dataforms-layouts-panel__dropdown-header",
28
- spacing: 4,
29
- children: /*#__PURE__*/_jsxs(HStack, {
30
- alignment: "center",
31
- children: [title && /*#__PURE__*/_jsx(Heading, {
32
- level: 2,
33
- size: 13,
34
- children: title
35
- }), /*#__PURE__*/_jsx(Spacer, {}), onClose && /*#__PURE__*/_jsx(Button, {
36
- label: __('Close'),
37
- icon: closeSmall,
38
- onClick: onClose,
39
- size: "small"
40
- })]
41
- })
42
- });
43
- }
44
- function PanelDropdown({
45
- fieldDefinition,
46
- popoverAnchor,
47
- labelPosition = 'side',
48
- data,
49
- onChange,
50
- field
51
- }) {
52
- const fieldLabel = isCombinedField(field) ? field.label : fieldDefinition?.label;
53
- const form = useMemo(() => {
54
- if (isCombinedField(field)) {
55
- return {
56
- type: 'regular',
57
- fields: field.children.map(child => {
58
- if (typeof child === 'string') {
59
- return {
60
- id: child
61
- };
62
- }
63
- return child;
64
- })
65
- };
66
- }
67
- // If not explicit children return the field id itself.
68
- return {
69
- type: 'regular',
70
- fields: [{
71
- id: field.id
72
- }]
73
- };
74
- }, [field]);
75
-
76
- // Memoize popoverProps to avoid returning a new object every time.
77
- const popoverProps = useMemo(() => ({
78
- // Anchor the popover to the middle of the entire row so that it doesn't
79
- // move around when the label changes.
80
- anchor: popoverAnchor,
81
- placement: 'left-start',
82
- offset: 36,
83
- shift: true
84
- }), [popoverAnchor]);
85
- return /*#__PURE__*/_jsx(Dropdown, {
86
- contentClassName: "dataforms-layouts-panel__field-dropdown",
87
- popoverProps: popoverProps,
88
- focusOnMount: true,
89
- toggleProps: {
90
- size: 'compact',
91
- variant: 'tertiary',
92
- tooltipPosition: 'middle left'
93
- },
94
- renderToggle: ({
95
- isOpen,
96
- onToggle
97
- }) => /*#__PURE__*/_jsx(Button, {
98
- className: "dataforms-layouts-panel__field-control",
99
- size: "compact",
100
- variant: ['none', 'top'].includes(labelPosition) ? 'link' : 'tertiary',
101
- "aria-expanded": isOpen,
102
- "aria-label": sprintf(
103
- // translators: %s: Field name.
104
- _x('Edit %s', 'field'), fieldLabel || ''),
105
- onClick: onToggle,
106
- disabled: fieldDefinition.readOnly === true,
107
- accessibleWhenDisabled: true,
108
- children: /*#__PURE__*/_jsx(fieldDefinition.render, {
109
- item: data,
110
- field: fieldDefinition
111
- })
112
- }),
113
- renderContent: ({
114
- onClose
115
- }) => /*#__PURE__*/_jsxs(_Fragment, {
116
- children: [/*#__PURE__*/_jsx(DropdownHeader, {
117
- title: fieldLabel,
118
- onClose: onClose
119
- }), /*#__PURE__*/_jsx(DataFormLayout, {
120
- data: data,
121
- form: form,
122
- onChange: onChange,
123
- children: (FieldLayout, nestedField) => {
124
- var _form$fields;
125
- return /*#__PURE__*/_jsx(FieldLayout, {
126
- data: data,
127
- field: nestedField,
128
- onChange: onChange,
129
- hideLabelFromVision: ((_form$fields = form?.fields) !== null && _form$fields !== void 0 ? _form$fields : []).length < 2
130
- }, nestedField.id);
131
- }
132
- })]
133
- })
134
- });
135
- }
18
+ import { normalizeLayout } from '../../normalize-form-fields';
19
+ import PanelDropdown from './dropdown';
20
+ import PanelModal from './modal';
21
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
136
22
  export default function FormPanelField({
137
23
  data,
138
24
  field,
139
25
  onChange
140
26
  }) {
141
- var _field$labelPosition;
142
27
  const {
143
28
  fields
144
29
  } = useContext(DataFormContext);
145
- const fieldDefinition = fields.find(fieldDef => {
146
- // Default to the first child if it is a combined field.
30
+ const fieldDefinition = fields.find(_field => {
31
+ // Default to the first simple child if it is a combined field.
147
32
  if (isCombinedField(field)) {
148
- const children = field.children.filter(child => typeof child === 'string' || !isCombinedField(child));
149
- const firstChildFieldId = typeof children[0] === 'string' ? children[0] : children[0].id;
150
- return fieldDef.id === firstChildFieldId;
33
+ const simpleChildren = field.children.filter(child => typeof child === 'string' || !isCombinedField(child));
34
+ if (simpleChildren.length === 0) {
35
+ return false;
36
+ }
37
+ const firstChildFieldId = typeof simpleChildren[0] === 'string' ? simpleChildren[0] : simpleChildren[0].id;
38
+ return _field.id === firstChildFieldId;
151
39
  }
152
- return fieldDef.id === field.id;
40
+ return _field.id === field.id;
153
41
  });
154
42
 
155
43
  // Use internal state instead of a ref to make sure that the component
@@ -158,9 +46,27 @@ export default function FormPanelField({
158
46
  if (!fieldDefinition) {
159
47
  return null;
160
48
  }
161
- const labelPosition = (_field$labelPosition = field.labelPosition) !== null && _field$labelPosition !== void 0 ? _field$labelPosition : 'side';
49
+ const layout = normalizeLayout({
50
+ ...field.layout,
51
+ type: 'panel'
52
+ });
53
+ const labelPosition = layout.labelPosition;
162
54
  const labelClassName = clsx('dataforms-layouts-panel__field-label', `dataforms-layouts-panel__field-label--label-position-${labelPosition}`);
163
55
  const fieldLabel = isCombinedField(field) ? field.label : fieldDefinition?.label;
56
+ const renderedControl = layout.openAs === 'modal' ? /*#__PURE__*/_jsx(PanelModal, {
57
+ field: field,
58
+ fieldDefinition: fieldDefinition,
59
+ data: data,
60
+ onChange: onChange,
61
+ labelPosition: labelPosition
62
+ }) : /*#__PURE__*/_jsx(PanelDropdown, {
63
+ field: field,
64
+ popoverAnchor: popoverAnchor,
65
+ fieldDefinition: fieldDefinition,
66
+ data: data,
67
+ onChange: onChange,
68
+ labelPosition: labelPosition
69
+ });
164
70
  if (labelPosition === 'top') {
165
71
  return /*#__PURE__*/_jsxs(VStack, {
166
72
  className: "dataforms-layouts-panel__field",
@@ -173,28 +79,14 @@ export default function FormPanelField({
173
79
  children: fieldLabel
174
80
  }), /*#__PURE__*/_jsx("div", {
175
81
  className: "dataforms-layouts-panel__field-control",
176
- children: /*#__PURE__*/_jsx(PanelDropdown, {
177
- field: field,
178
- popoverAnchor: popoverAnchor,
179
- fieldDefinition: fieldDefinition,
180
- data: data,
181
- onChange: onChange,
182
- labelPosition: labelPosition
183
- })
82
+ children: renderedControl
184
83
  })]
185
84
  });
186
85
  }
187
86
  if (labelPosition === 'none') {
188
87
  return /*#__PURE__*/_jsx("div", {
189
88
  className: "dataforms-layouts-panel__field",
190
- children: /*#__PURE__*/_jsx(PanelDropdown, {
191
- field: field,
192
- popoverAnchor: popoverAnchor,
193
- fieldDefinition: fieldDefinition,
194
- data: data,
195
- onChange: onChange,
196
- labelPosition: labelPosition
197
- })
89
+ children: renderedControl
198
90
  });
199
91
  }
200
92
 
@@ -207,14 +99,7 @@ export default function FormPanelField({
207
99
  children: fieldLabel
208
100
  }), /*#__PURE__*/_jsx("div", {
209
101
  className: "dataforms-layouts-panel__field-control",
210
- children: /*#__PURE__*/_jsx(PanelDropdown, {
211
- field: field,
212
- popoverAnchor: popoverAnchor,
213
- fieldDefinition: fieldDefinition,
214
- data: data,
215
- onChange: onChange,
216
- labelPosition: labelPosition
217
- })
102
+ children: renderedControl
218
103
  })]
219
104
  });
220
105
  }
@@ -1 +1 @@
1
- {"version":3,"names":["clsx","__experimentalVStack","VStack","__experimentalHStack","HStack","__experimentalHeading","Heading","__experimentalSpacer","Spacer","Dropdown","Button","sprintf","__","_x","useState","useMemo","useContext","closeSmall","DataFormContext","DataFormLayout","isCombinedField","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","DropdownHeader","title","onClose","className","spacing","children","alignment","level","size","label","icon","onClick","PanelDropdown","fieldDefinition","popoverAnchor","labelPosition","data","onChange","field","fieldLabel","form","type","fields","map","child","id","popoverProps","anchor","placement","offset","shift","contentClassName","focusOnMount","toggleProps","variant","tooltipPosition","renderToggle","isOpen","onToggle","includes","disabled","readOnly","accessibleWhenDisabled","render","item","renderContent","FieldLayout","nestedField","_form$fields","hideLabelFromVision","length","FormPanelField","_field$labelPosition","find","fieldDef","filter","firstChildFieldId","setPopoverAnchor","labelClassName","style","paddingBottom","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\t__experimentalHeading as Heading,\n\t__experimentalSpacer as Spacer,\n\tDropdown,\n\tButton,\n} from '@wordpress/components';\nimport { sprintf, __, _x } from '@wordpress/i18n';\nimport { useState, useMemo, useContext } from '@wordpress/element';\nimport { closeSmall } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport type {\n\tForm,\n\tFormField,\n\tFieldLayoutProps,\n\tNormalizedField,\n\tSimpleFormField,\n} from '../../types';\nimport DataFormContext from '../../components/dataform-context';\nimport { DataFormLayout } from '../data-form-layout';\nimport { isCombinedField } from '../is-combined-field';\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\tconst form = useMemo( () => {\n\t\tif ( isCombinedField( field ) ) {\n\t\t\treturn {\n\t\t\t\ttype: 'regular' as const,\n\t\t\t\tfields: field.children.map( ( child ) => {\n\t\t\t\t\tif ( typeof child === 'string' ) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid: child,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn child;\n\t\t\t\t} ),\n\t\t\t};\n\t\t}\n\t\t// If not explicit children return the field id itself.\n\t\treturn {\n\t\t\ttype: 'regular' as const,\n\t\t\tfields: [ { id: field.id } ],\n\t\t};\n\t}, [ field ] );\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 as 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 function FormPanelField< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n}: FieldLayoutProps< Item > ) {\n\tconst { fields } = useContext( DataFormContext );\n\tconst fieldDefinition = fields.find( ( fieldDef ) => {\n\t\t// Default to the first child if it is a combined field.\n\t\tif ( isCombinedField( field ) ) {\n\t\t\tconst children = 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\t\t\tconst firstChildFieldId =\n\t\t\t\ttypeof children[ 0 ] === 'string'\n\t\t\t\t\t? children[ 0 ]\n\t\t\t\t\t: children[ 0 ].id;\n\t\t\treturn fieldDef.id === firstChildFieldId;\n\t\t}\n\t\treturn fieldDef.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 labelPosition = field.labelPosition ?? 'side';\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\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<PanelDropdown\n\t\t\t\t\t\tfield={ field }\n\t\t\t\t\t\tpopoverAnchor={ popoverAnchor }\n\t\t\t\t\t\tfieldDefinition={ fieldDefinition }\n\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\tlabelPosition={ labelPosition }\n\t\t\t\t\t/>\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<PanelDropdown\n\t\t\t\t\tfield={ field }\n\t\t\t\t\tpopoverAnchor={ popoverAnchor }\n\t\t\t\t\tfieldDefinition={ fieldDefinition }\n\t\t\t\t\tdata={ data }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tlabelPosition={ labelPosition }\n\t\t\t\t/>\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<PanelDropdown\n\t\t\t\t\tfield={ field }\n\t\t\t\t\tpopoverAnchor={ popoverAnchor }\n\t\t\t\t\tfieldDefinition={ fieldDefinition }\n\t\t\t\t\tdata={ data }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tlabelPosition={ labelPosition }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</HStack>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["clsx","__experimentalVStack","VStack","__experimentalHStack","HStack","useState","useContext","DataFormContext","isCombinedField","normalizeLayout","PanelDropdown","PanelModal","jsx","_jsx","jsxs","_jsxs","FormPanelField","data","field","onChange","fields","fieldDefinition","find","_field","simpleChildren","children","filter","child","length","firstChildFieldId","id","popoverAnchor","setPopoverAnchor","layout","type","labelPosition","labelClassName","fieldLabel","label","renderedControl","openAs","className","spacing","style","paddingBottom","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":[]}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __experimentalHStack as HStack, __experimentalSpacer as Spacer, Button, Modal } from '@wordpress/components';
5
+ import { __, sprintf, _x } from '@wordpress/i18n';
6
+ import { useState, useMemo } from '@wordpress/element';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+
12
+ import { DataFormLayout } from '../data-form-layout';
13
+ import { isCombinedField } from '../is-combined-field';
14
+ import { DEFAULT_LAYOUT } from '../../normalize-form-fields';
15
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
16
+ function ModalContent({
17
+ data,
18
+ form,
19
+ fieldLabel,
20
+ onChange,
21
+ onClose
22
+ }) {
23
+ const [changes, setChanges] = useState({});
24
+ const onApply = () => {
25
+ onChange(changes);
26
+ onClose();
27
+ };
28
+ const handleOnChange = value => {
29
+ setChanges(prev => ({
30
+ ...prev,
31
+ ...value
32
+ }));
33
+ };
34
+
35
+ // Merge original data with local changes for display
36
+ const displayData = {
37
+ ...data,
38
+ ...changes
39
+ };
40
+ return /*#__PURE__*/_jsxs(Modal, {
41
+ className: "dataforms-layouts-panel__modal",
42
+ onRequestClose: onClose,
43
+ isFullScreen: false,
44
+ title: fieldLabel,
45
+ size: "medium",
46
+ children: [/*#__PURE__*/_jsx(DataFormLayout, {
47
+ data: displayData,
48
+ form: form,
49
+ onChange: handleOnChange,
50
+ children: (FieldLayout, nestedField) => {
51
+ var _form$fields;
52
+ return /*#__PURE__*/_jsx(FieldLayout, {
53
+ data: displayData,
54
+ field: nestedField,
55
+ onChange: handleOnChange,
56
+ hideLabelFromVision: ((_form$fields = form?.fields) !== null && _form$fields !== void 0 ? _form$fields : []).length < 2
57
+ }, nestedField.id);
58
+ }
59
+ }), /*#__PURE__*/_jsxs(HStack, {
60
+ className: "dataforms-layouts-panel__modal-footer",
61
+ spacing: 3,
62
+ children: [/*#__PURE__*/_jsx(Spacer, {}), /*#__PURE__*/_jsx(Button, {
63
+ variant: "tertiary",
64
+ onClick: onClose,
65
+ __next40pxDefaultSize: true,
66
+ children: __('Cancel')
67
+ }), /*#__PURE__*/_jsx(Button, {
68
+ variant: "primary",
69
+ onClick: onApply,
70
+ __next40pxDefaultSize: true,
71
+ children: __('Apply')
72
+ })]
73
+ })]
74
+ });
75
+ }
76
+ function PanelModal({
77
+ fieldDefinition,
78
+ labelPosition,
79
+ data,
80
+ onChange,
81
+ field
82
+ }) {
83
+ const [isOpen, setIsOpen] = useState(false);
84
+ const fieldLabel = isCombinedField(field) ? field.label : fieldDefinition?.label;
85
+ const form = useMemo(() => ({
86
+ layout: DEFAULT_LAYOUT,
87
+ fields: isCombinedField(field) ? field.children :
88
+ // If not explicit children return the field id itself.
89
+ [{
90
+ id: field.id
91
+ }]
92
+ }), [field]);
93
+ return /*#__PURE__*/_jsxs(_Fragment, {
94
+ children: [/*#__PURE__*/_jsx(Button, {
95
+ className: "dataforms-layouts-modal__field-control",
96
+ size: "compact",
97
+ variant: ['none', 'top'].includes(labelPosition) ? 'link' : 'tertiary',
98
+ "aria-expanded": isOpen,
99
+ "aria-label": sprintf(
100
+ // translators: %s: Field name.
101
+ _x('Edit %s', 'field'), fieldLabel || ''),
102
+ onClick: () => setIsOpen(true),
103
+ disabled: fieldDefinition.readOnly === true,
104
+ accessibleWhenDisabled: true,
105
+ children: /*#__PURE__*/_jsx(fieldDefinition.render, {
106
+ item: data,
107
+ field: fieldDefinition
108
+ })
109
+ }), isOpen && /*#__PURE__*/_jsx(ModalContent, {
110
+ data: data,
111
+ form: form,
112
+ fieldLabel: fieldLabel !== null && fieldLabel !== void 0 ? fieldLabel : '',
113
+ onChange: onChange,
114
+ onClose: () => setIsOpen(false)
115
+ })]
116
+ });
117
+ }
118
+ export default PanelModal;
119
+ //# sourceMappingURL=modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__experimentalHStack","HStack","__experimentalSpacer","Spacer","Button","Modal","__","sprintf","_x","useState","useMemo","DataFormLayout","isCombinedField","DEFAULT_LAYOUT","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","ModalContent","data","form","fieldLabel","onChange","onClose","changes","setChanges","onApply","handleOnChange","value","prev","displayData","className","onRequestClose","isFullScreen","title","size","children","FieldLayout","nestedField","_form$fields","field","hideLabelFromVision","fields","length","id","spacing","variant","onClick","__next40pxDefaultSize","PanelModal","fieldDefinition","labelPosition","isOpen","setIsOpen","label","layout","includes","disabled","readOnly","accessibleWhenDisabled","render","item"],"sources":["@wordpress/dataviews/src/dataforms-layouts/panel/modal.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalHStack as HStack,\n\t__experimentalSpacer as Spacer,\n\tButton,\n\tModal,\n} from '@wordpress/components';\nimport { __, sprintf, _x } from '@wordpress/i18n';\nimport { useState, useMemo } from '@wordpress/element';\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 ModalContent< Item >( {\n\tdata,\n\tform,\n\tfieldLabel,\n\tonChange,\n\tonClose,\n}: {\n\tdata: Item;\n\tform: Form;\n\tfieldLabel: string;\n\tonChange: ( data: Partial< Item > ) => void;\n\tonClose: () => void;\n} ) {\n\tconst [ changes, setChanges ] = useState< Partial< Item > >( {} );\n\n\tconst onApply = () => {\n\t\tonChange( changes );\n\t\tonClose();\n\t};\n\n\tconst handleOnChange = ( value: Partial< Item > ) => {\n\t\tsetChanges( ( prev ) => ( { ...prev, ...value } ) );\n\t};\n\n\t// Merge original data with local changes for display\n\tconst displayData = { ...data, ...changes };\n\n\treturn (\n\t\t<Modal\n\t\t\tclassName=\"dataforms-layouts-panel__modal\"\n\t\t\tonRequestClose={ onClose }\n\t\t\tisFullScreen={ false }\n\t\t\ttitle={ fieldLabel }\n\t\t\tsize=\"medium\"\n\t\t>\n\t\t\t<DataFormLayout\n\t\t\t\tdata={ displayData }\n\t\t\t\tform={ form }\n\t\t\t\tonChange={ handleOnChange }\n\t\t\t>\n\t\t\t\t{ ( FieldLayout, nestedField ) => (\n\t\t\t\t\t<FieldLayout\n\t\t\t\t\t\tkey={ nestedField.id }\n\t\t\t\t\t\tdata={ displayData }\n\t\t\t\t\t\tfield={ nestedField }\n\t\t\t\t\t\tonChange={ handleOnChange }\n\t\t\t\t\t\thideLabelFromVision={\n\t\t\t\t\t\t\t( form?.fields ?? [] ).length < 2\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</DataFormLayout>\n\t\t\t<HStack\n\t\t\t\tclassName=\"dataforms-layouts-panel__modal-footer\"\n\t\t\t\tspacing={ 3 }\n\t\t\t>\n\t\t\t\t<Spacer />\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\tonClick={ onClose }\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\tonClick={ onApply }\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\t</Button>\n\t\t\t</HStack>\n\t\t</Modal>\n\t);\n}\n\nfunction PanelModal< Item >( {\n\tfieldDefinition,\n\tlabelPosition,\n\tdata,\n\tonChange,\n\tfield,\n}: {\n\tfieldDefinition: NormalizedField< Item >;\n\tlabelPosition: 'side' | 'top' | 'none';\n\tdata: Item;\n\tonChange: ( value: any ) => void;\n\tfield: FormField;\n} ) {\n\tconst [ isOpen, setIsOpen ] = useState( false );\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\treturn (\n\t\t<>\n\t\t\t<Button\n\t\t\t\tclassName=\"dataforms-layouts-modal__field-control\"\n\t\t\t\tsize=\"compact\"\n\t\t\t\tvariant={\n\t\t\t\t\t[ 'none', 'top' ].includes( labelPosition )\n\t\t\t\t\t\t? 'link'\n\t\t\t\t\t\t: 'tertiary'\n\t\t\t\t}\n\t\t\t\taria-expanded={ isOpen }\n\t\t\t\taria-label={ sprintf(\n\t\t\t\t\t// translators: %s: Field name.\n\t\t\t\t\t_x( 'Edit %s', 'field' ),\n\t\t\t\t\tfieldLabel || ''\n\t\t\t\t) }\n\t\t\t\tonClick={ () => setIsOpen( true ) }\n\t\t\t\tdisabled={ fieldDefinition.readOnly === true }\n\t\t\t\taccessibleWhenDisabled\n\t\t\t>\n\t\t\t\t<fieldDefinition.render\n\t\t\t\t\titem={ data }\n\t\t\t\t\tfield={ fieldDefinition }\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t{ isOpen && (\n\t\t\t\t<ModalContent\n\t\t\t\t\tdata={ data }\n\t\t\t\t\tform={ form as Form }\n\t\t\t\t\tfieldLabel={ fieldLabel ?? '' }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tonClose={ () => setIsOpen( false ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default PanelModal;\n"],"mappings":"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","ignoreList":[]}
@@ -16,6 +16,7 @@ import { __experimentalHStack as HStack, __experimentalVStack as VStack, __exper
16
16
  import DataFormContext from '../../components/dataform-context';
17
17
  import { DataFormLayout } from '../data-form-layout';
18
18
  import { isCombinedField } from '../is-combined-field';
19
+ import { DEFAULT_LAYOUT, normalizeLayout } from '../../normalize-form-fields';
19
20
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
20
21
  function Header({
21
22
  title
@@ -39,29 +40,13 @@ export default function FormRegularField({
39
40
  onChange,
40
41
  hideLabelFromVision
41
42
  }) {
42
- var _field$labelPosition;
43
43
  const {
44
44
  fields
45
45
  } = useContext(DataFormContext);
46
- const form = useMemo(() => {
47
- if (isCombinedField(field)) {
48
- return {
49
- fields: field.children.map(child => {
50
- if (typeof child === 'string') {
51
- return {
52
- id: child
53
- };
54
- }
55
- return child;
56
- }),
57
- type: 'regular'
58
- };
59
- }
60
- return {
61
- type: 'regular',
62
- fields: []
63
- };
64
- }, [field]);
46
+ const form = useMemo(() => ({
47
+ layout: DEFAULT_LAYOUT,
48
+ fields: isCombinedField(field) ? field.children : []
49
+ }), [field]);
65
50
  if (isCombinedField(field)) {
66
51
  return /*#__PURE__*/_jsxs(_Fragment, {
67
52
  children: [!hideLabelFromVision && field.label && /*#__PURE__*/_jsx(Header, {
@@ -73,7 +58,11 @@ export default function FormRegularField({
73
58
  })]
74
59
  });
75
60
  }
76
- const labelPosition = (_field$labelPosition = field.labelPosition) !== null && _field$labelPosition !== void 0 ? _field$labelPosition : 'top';
61
+ const layout = normalizeLayout({
62
+ ...field.layout,
63
+ type: 'regular'
64
+ });
65
+ const labelPosition = layout.labelPosition;
77
66
  const fieldDefinition = fields.find(fieldDef => fieldDef.id === field.id);
78
67
  if (!fieldDefinition || !fieldDefinition.Edit) {
79
68
  return null;