@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
@@ -1 +1 @@
1
- {"version":3,"names":["_components","require","_element","_i18n","_constants","_lockUnlock","_jsxRuntime","ValidatedNumberControl","unlock","privateApis","BetweenControls","id","value","onChange","hideLabelFromVision","min","max","Array","isArray","onChangeMin","useCallback","newValue","Number","onChangeMax","jsx","BaseControl","__nextHasNoMarginBottom","help","__","children","jsxs","Flex","direction","gap","__experimentalNumberControl","label","undefined","__next40pxDefaultSize","Integer","data","field","operator","_field$getValue","description","getValue","item","onChangeControl","includes","OPERATOR_BETWEEN","required","isValid","customValidator","custom"],"sources":["@wordpress/dataviews/src/dataform-controls/integer.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tFlex,\n\tBaseControl,\n\t__experimentalNumberControl as NumberControl,\n\tprivateApis,\n} from '@wordpress/components';\nimport { useCallback } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { OPERATOR_BETWEEN } from '../constants';\nimport type { DataFormControlProps } from '../types';\nimport { unlock } from '../lock-unlock';\n\nconst { ValidatedNumberControl } = unlock( privateApis );\n\nfunction BetweenControls< Item >( {\n\tid,\n\tvalue,\n\tonChange,\n\thideLabelFromVision,\n}: {\n\tid: string;\n\tvalue: any;\n\tonChange: DataFormControlProps< Item >[ 'onChange' ];\n\thideLabelFromVision?: boolean;\n} ) {\n\tconst [ min = '', max = '' ] = Array.isArray( value ) ? value : [];\n\n\tconst onChangeMin = useCallback(\n\t\t( newValue: string | undefined ) =>\n\t\t\tonChange( {\n\t\t\t\t[ id ]: [ Number( newValue ), max ],\n\t\t\t} ),\n\t\t[ id, onChange, max ]\n\t);\n\n\tconst onChangeMax = useCallback(\n\t\t( newValue: string | undefined ) =>\n\t\t\tonChange( {\n\t\t\t\t[ id ]: [ min, Number( newValue ) ],\n\t\t\t} ),\n\t\t[ id, onChange, min ]\n\t);\n\n\treturn (\n\t\t<BaseControl\n\t\t\t__nextHasNoMarginBottom\n\t\t\thelp={ __( 'The max. value must be greater than the min. value.' ) }\n\t\t>\n\t\t\t<Flex direction=\"row\" gap={ 4 }>\n\t\t\t\t<NumberControl\n\t\t\t\t\tlabel={ __( 'Min.' ) }\n\t\t\t\t\tvalue={ min }\n\t\t\t\t\tmax={ max ? Number( max ) - 1 : undefined }\n\t\t\t\t\tonChange={ onChangeMin }\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\t\t/>\n\t\t\t\t<NumberControl\n\t\t\t\t\tlabel={ __( 'Max.' ) }\n\t\t\t\t\tvalue={ max }\n\t\t\t\t\tmin={ min ? Number( min ) + 1 : undefined }\n\t\t\t\t\tonChange={ onChangeMax }\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\t\t/>\n\t\t\t</Flex>\n\t\t</BaseControl>\n\t);\n}\n\nexport default function Integer< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n\toperator,\n}: DataFormControlProps< Item > ) {\n\tconst { id, label, description } = field;\n\tconst value = field.getValue( { item: data } ) ?? '';\n\tconst onChangeControl = useCallback(\n\t\t( newValue: string | undefined ) => {\n\t\t\tonChange( {\n\t\t\t\t// Do not convert an empty string or undefined to a number,\n\t\t\t\t// otherwise there's a mismatch between the UI control (empty)\n\t\t\t\t// and the data relied by onChange (0).\n\t\t\t\t[ id ]: [ '', undefined ].includes( newValue )\n\t\t\t\t\t? undefined\n\t\t\t\t\t: Number( newValue ),\n\t\t\t} );\n\t\t},\n\t\t[ id, onChange ]\n\t);\n\n\tif ( operator === OPERATOR_BETWEEN ) {\n\t\treturn (\n\t\t\t<BetweenControls\n\t\t\t\tid={ id }\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\n\t\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ValidatedNumberControl\n\t\t\trequired={ !! field.isValid?.required }\n\t\t\tcustomValidator={ ( newValue: any ) => {\n\t\t\t\tif ( field.isValid?.custom ) {\n\t\t\t\t\treturn field.isValid.custom(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...data,\n\t\t\t\t\t\t\t[ id ]: [ undefined, '', null ].includes( newValue )\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: Number( newValue ),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfield\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t} }\n\t\t\tlabel={ label }\n\t\t\thelp={ description }\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChangeControl }\n\t\t\t__next40pxDefaultSize\n\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t/>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_components","require","_element","_i18n","_constants","_lockUnlock","_jsxRuntime","ValidatedNumberControl","unlock","privateApis","BetweenControls","id","value","onChange","hideLabelFromVision","min","max","Array","isArray","onChangeMin","useCallback","newValue","Number","onChangeMax","jsx","BaseControl","__nextHasNoMarginBottom","help","__","children","jsxs","Flex","direction","gap","__experimentalNumberControl","label","undefined","__next40pxDefaultSize","Integer","data","field","operator","_field$getValue","description","getValue","item","customValidity","setCustomValidity","useState","onChangeControl","includes","OPERATOR_BETWEEN","required","isValid","onValidate","message","custom","type"],"sources":["@wordpress/dataviews/src/dataform-controls/integer.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tFlex,\n\tBaseControl,\n\t__experimentalNumberControl as NumberControl,\n\tprivateApis,\n} from '@wordpress/components';\nimport { useCallback, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { OPERATOR_BETWEEN } from '../constants';\nimport type { DataFormControlProps } from '../types';\nimport { unlock } from '../lock-unlock';\n\nconst { ValidatedNumberControl } = unlock( privateApis );\n\nfunction BetweenControls< Item >( {\n\tid,\n\tvalue,\n\tonChange,\n\thideLabelFromVision,\n}: {\n\tid: string;\n\tvalue: any;\n\tonChange: DataFormControlProps< Item >[ 'onChange' ];\n\thideLabelFromVision?: boolean;\n} ) {\n\tconst [ min = '', max = '' ] = Array.isArray( value ) ? value : [];\n\n\tconst onChangeMin = useCallback(\n\t\t( newValue: string | undefined ) =>\n\t\t\tonChange( {\n\t\t\t\t[ id ]: [ Number( newValue ), max ],\n\t\t\t} ),\n\t\t[ id, onChange, max ]\n\t);\n\n\tconst onChangeMax = useCallback(\n\t\t( newValue: string | undefined ) =>\n\t\t\tonChange( {\n\t\t\t\t[ id ]: [ min, Number( newValue ) ],\n\t\t\t} ),\n\t\t[ id, onChange, min ]\n\t);\n\n\treturn (\n\t\t<BaseControl\n\t\t\t__nextHasNoMarginBottom\n\t\t\thelp={ __( 'The max. value must be greater than the min. value.' ) }\n\t\t>\n\t\t\t<Flex direction=\"row\" gap={ 4 }>\n\t\t\t\t<NumberControl\n\t\t\t\t\tlabel={ __( 'Min.' ) }\n\t\t\t\t\tvalue={ min }\n\t\t\t\t\tmax={ max ? Number( max ) - 1 : undefined }\n\t\t\t\t\tonChange={ onChangeMin }\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\t\t/>\n\t\t\t\t<NumberControl\n\t\t\t\t\tlabel={ __( 'Max.' ) }\n\t\t\t\t\tvalue={ max }\n\t\t\t\t\tmin={ min ? Number( min ) + 1 : undefined }\n\t\t\t\t\tonChange={ onChangeMax }\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\t\t/>\n\t\t\t</Flex>\n\t\t</BaseControl>\n\t);\n}\n\nexport default function Integer< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n\toperator,\n}: DataFormControlProps< Item > ) {\n\tconst { id, label, description } = field;\n\tconst value = field.getValue( { item: data } ) ?? '';\n\tconst [ customValidity, setCustomValidity ] =\n\t\tuseState<\n\t\t\tReact.ComponentProps<\n\t\t\t\ttypeof ValidatedNumberControl\n\t\t\t>[ 'customValidity' ]\n\t\t>( undefined );\n\n\tconst onChangeControl = useCallback(\n\t\t( newValue: string | undefined ) => {\n\t\t\tonChange( {\n\t\t\t\t// Do not convert an empty string or undefined to a number,\n\t\t\t\t// otherwise there's a mismatch between the UI control (empty)\n\t\t\t\t// and the data relied by onChange (0).\n\t\t\t\t[ id ]: [ '', undefined ].includes( newValue )\n\t\t\t\t\t? undefined\n\t\t\t\t\t: Number( newValue ),\n\t\t\t} );\n\t\t},\n\t\t[ id, onChange ]\n\t);\n\n\tif ( operator === OPERATOR_BETWEEN ) {\n\t\treturn (\n\t\t\t<BetweenControls\n\t\t\t\tid={ id }\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\n\t\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ValidatedNumberControl\n\t\t\trequired={ !! field.isValid?.required }\n\t\t\tonValidate={ ( newValue: any ) => {\n\t\t\t\tconst message = field.isValid?.custom?.(\n\t\t\t\t\t{\n\t\t\t\t\t\t...data,\n\t\t\t\t\t\t[ id ]: [ undefined, '', null ].includes( newValue )\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: Number( newValue ),\n\t\t\t\t\t},\n\t\t\t\t\tfield\n\t\t\t\t);\n\n\t\t\t\tif ( message ) {\n\t\t\t\t\tsetCustomValidity( {\n\t\t\t\t\t\ttype: 'invalid',\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetCustomValidity( undefined );\n\t\t\t} }\n\t\t\tcustomValidity={ customValidity }\n\t\t\tlabel={ label }\n\t\t\thelp={ description }\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChangeControl }\n\t\t\t__next40pxDefaultSize\n\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t/>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -34,20 +34,27 @@ function Text({
34
34
  const value = field.getValue({
35
35
  item: data
36
36
  });
37
+ const [customValidity, setCustomValidity] = (0, _element.useState)(undefined);
37
38
  const onChangeControl = (0, _element.useCallback)(newValue => onChange({
38
39
  [id]: newValue
39
40
  }), [id, onChange]);
40
41
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(ValidatedTextControl, {
41
42
  required: !!field.isValid?.required,
42
- customValidator: newValue => {
43
- if (field.isValid?.custom) {
44
- return field.isValid.custom({
45
- ...data,
46
- [id]: newValue
47
- }, field);
43
+ onValidate: newValue => {
44
+ const message = field.isValid?.custom?.({
45
+ ...data,
46
+ [id]: newValue
47
+ }, field);
48
+ if (message) {
49
+ setCustomValidity({
50
+ type: 'invalid',
51
+ message
52
+ });
53
+ return;
48
54
  }
49
- return null;
55
+ setCustomValidity(undefined);
50
56
  },
57
+ customValidity: customValidity,
51
58
  label: label,
52
59
  placeholder: placeholder,
53
60
  value: value !== null && value !== void 0 ? value : '',
@@ -1 +1 @@
1
- {"version":3,"names":["_components","require","_element","_lockUnlock","_jsxRuntime","ValidatedTextControl","unlock","privateApis","Text","data","field","onChange","hideLabelFromVision","id","label","placeholder","description","value","getValue","item","onChangeControl","useCallback","newValue","jsx","required","isValid","customValidator","custom","help","__next40pxDefaultSize","__nextHasNoMarginBottom"],"sources":["@wordpress/dataviews/src/dataform-controls/text.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { privateApis } from '@wordpress/components';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\nimport { unlock } from '../lock-unlock';\n\nconst { ValidatedTextControl } = unlock( privateApis );\n\nexport default function Text< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { id, label, placeholder, description } = field;\n\tconst value = field.getValue( { item: data } );\n\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<ValidatedTextControl\n\t\t\trequired={ !! field.isValid?.required }\n\t\t\tcustomValidator={ ( newValue: any ) => {\n\t\t\t\tif ( field.isValid?.custom ) {\n\t\t\t\t\treturn field.isValid.custom(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...data,\n\t\t\t\t\t\t\t[ id ]: newValue,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfield\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t} }\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\t__next40pxDefaultSize\n\t\t\t__nextHasNoMarginBottom\n\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAMA,IAAAE,WAAA,GAAAF,OAAA;AAAwC,IAAAG,WAAA,GAAAH,OAAA;AAVxC;AACA;AACA;;AAIA;AACA;AACA;;AAIA,MAAM;EAAEI;AAAqB,CAAC,GAAG,IAAAC,kBAAM,EAAEC,uBAAY,CAAC;AAEvC,SAASC,IAAIA,CAAU;EACrCC,IAAI;EACJC,KAAK;EACLC,QAAQ;EACRC;AAC6B,CAAC,EAAG;EACjC,MAAM;IAAEC,EAAE;IAAEC,KAAK;IAAEC,WAAW;IAAEC;EAAY,CAAC,GAAGN,KAAK;EACrD,MAAMO,KAAK,GAAGP,KAAK,CAACQ,QAAQ,CAAE;IAAEC,IAAI,EAAEV;EAAK,CAAE,CAAC;EAE9C,MAAMW,eAAe,GAAG,IAAAC,oBAAW,EAChCC,QAAgB,IACjBX,QAAQ,CAAE;IACT,CAAEE,EAAE,GAAIS;EACT,CAAE,CAAC,EACJ,CAAET,EAAE,EAAEF,QAAQ,CACf,CAAC;EAED,oBACC,IAAAP,WAAA,CAAAmB,GAAA,EAAClB,oBAAoB;IACpBmB,QAAQ,EAAG,CAAC,CAAEd,KAAK,CAACe,OAAO,EAAED,QAAU;IACvCE,eAAe,EAAKJ,QAAa,IAAM;MACtC,IAAKZ,KAAK,CAACe,OAAO,EAAEE,MAAM,EAAG;QAC5B,OAAOjB,KAAK,CAACe,OAAO,CAACE,MAAM,CAC1B;UACC,GAAGlB,IAAI;UACP,CAAEI,EAAE,GAAIS;QACT,CAAC,EACDZ,KACD,CAAC;MACF;MAEA,OAAO,IAAI;IACZ,CAAG;IACHI,KAAK,EAAGA,KAAO;IACfC,WAAW,EAAGA,WAAa;IAC3BE,KAAK,EAAGA,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAI;IACrBW,IAAI,EAAGZ,WAAa;IACpBL,QAAQ,EAAGS,eAAiB;IAC5BS,qBAAqB;IACrBC,uBAAuB;IACvBlB,mBAAmB,EAAGA;EAAqB,CAC3C,CAAC;AAEJ","ignoreList":[]}
1
+ {"version":3,"names":["_components","require","_element","_lockUnlock","_jsxRuntime","ValidatedTextControl","unlock","privateApis","Text","data","field","onChange","hideLabelFromVision","id","label","placeholder","description","value","getValue","item","customValidity","setCustomValidity","useState","undefined","onChangeControl","useCallback","newValue","jsx","required","isValid","onValidate","message","custom","type","help","__next40pxDefaultSize","__nextHasNoMarginBottom"],"sources":["@wordpress/dataviews/src/dataform-controls/text.tsx"],"sourcesContent":["/**\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 { ValidatedTextControl } = unlock( privateApis );\n\nexport default function Text< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { id, label, placeholder, description } = field;\n\tconst value = field.getValue( { item: data } );\n\tconst [ customValidity, setCustomValidity ] =\n\t\tuseState<\n\t\t\tReact.ComponentProps<\n\t\t\t\ttypeof ValidatedTextControl\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<ValidatedTextControl\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\t__next40pxDefaultSize\n\t\t\t__nextHasNoMarginBottom\n\t\t\thideLabelFromVision={ hideLabelFromVision }\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAMA,IAAAE,WAAA,GAAAF,OAAA;AAAwC,IAAAG,WAAA,GAAAH,OAAA;AAVxC;AACA;AACA;;AAIA;AACA;AACA;;AAIA,MAAM;EAAEI;AAAqB,CAAC,GAAG,IAAAC,kBAAM,EAAEC,uBAAY,CAAC;AAEvC,SAASC,IAAIA,CAAU;EACrCC,IAAI;EACJC,KAAK;EACLC,QAAQ;EACRC;AAC6B,CAAC,EAAG;EACjC,MAAM;IAAEC,EAAE;IAAEC,KAAK;IAAEC,WAAW;IAAEC;EAAY,CAAC,GAAGN,KAAK;EACrD,MAAMO,KAAK,GAAGP,KAAK,CAACQ,QAAQ,CAAE;IAAEC,IAAI,EAAEV;EAAK,CAAE,CAAC;EAC9C,MAAM,CAAEW,cAAc,EAAEC,iBAAiB,CAAE,GAC1C,IAAAC,iBAAQ,EAILC,SAAU,CAAC;EAEf,MAAMC,eAAe,GAAG,IAAAC,oBAAW,EAChCC,QAAgB,IACjBf,QAAQ,CAAE;IACT,CAAEE,EAAE,GAAIa;EACT,CAAE,CAAC,EACJ,CAAEb,EAAE,EAAEF,QAAQ,CACf,CAAC;EAED,oBACC,IAAAP,WAAA,CAAAuB,GAAA,EAACtB,oBAAoB;IACpBuB,QAAQ,EAAG,CAAC,CAAElB,KAAK,CAACmB,OAAO,EAAED,QAAU;IACvCE,UAAU,EAAKJ,QAAa,IAAM;MACjC,MAAMK,OAAO,GAAGrB,KAAK,CAACmB,OAAO,EAAEG,MAAM,GACpC;QACC,GAAGvB,IAAI;QACP,CAAEI,EAAE,GAAIa;MACT,CAAC,EACDhB,KACD,CAAC;MAED,IAAKqB,OAAO,EAAG;QACdV,iBAAiB,CAAE;UAClBY,IAAI,EAAE,SAAS;UACfF;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;IACrBiB,IAAI,EAAGlB,WAAa;IACpBL,QAAQ,EAAGa,eAAiB;IAC5BW,qBAAqB;IACrBC,uBAAuB;IACvBxB,mBAAmB,EAAGA;EAAqB,CAC3C,CAAC;AAEJ","ignoreList":[]}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = FormCardField;
8
+ exports.useCollapsibleCard = useCollapsibleCard;
9
+ var _components = require("@wordpress/components");
10
+ var _element = require("@wordpress/element");
11
+ var _icons = require("@wordpress/icons");
12
+ var _ = require("..");
13
+ var _dataformContext = _interopRequireDefault(require("../../components/dataform-context"));
14
+ var _dataFormLayout = require("../data-form-layout");
15
+ var _isCombinedField = require("../is-combined-field");
16
+ var _normalizeFormFields = require("../../normalize-form-fields");
17
+ var _jsxRuntime = require("react/jsx-runtime");
18
+ /**
19
+ * External dependencies
20
+ */
21
+
22
+ /**
23
+ * WordPress dependencies
24
+ */
25
+
26
+ /**
27
+ * Internal dependencies
28
+ */
29
+
30
+ function useCollapsibleCard(initialIsOpen = true) {
31
+ const [isOpen, setIsOpen] = (0, _element.useState)(initialIsOpen);
32
+ const toggle = (0, _element.useCallback)(() => {
33
+ setIsOpen(prev => !prev);
34
+ }, []);
35
+ const CollapsibleCardHeader = (0, _element.useCallback)(({
36
+ children,
37
+ ...props
38
+ }) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.CardHeader, {
39
+ ...props,
40
+ onClick: toggle,
41
+ style: {
42
+ cursor: 'pointer',
43
+ ...props.style
44
+ },
45
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
46
+ style: {
47
+ width: '100%',
48
+ display: 'flex',
49
+ justifyContent: 'space-between',
50
+ alignItems: 'center'
51
+ },
52
+ children: children
53
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
54
+ __next40pxDefaultSize: true,
55
+ variant: "tertiary",
56
+ icon: isOpen ? _icons.chevronUp : _icons.chevronDown,
57
+ "aria-expanded": isOpen,
58
+ "aria-label": isOpen ? 'Collapse' : 'Expand'
59
+ })]
60
+ }), [toggle, isOpen]);
61
+ return {
62
+ isOpen,
63
+ CollapsibleCardHeader
64
+ };
65
+ }
66
+ function FormCardField({
67
+ data,
68
+ field,
69
+ onChange,
70
+ hideLabelFromVision
71
+ }) {
72
+ const {
73
+ fields
74
+ } = (0, _element.useContext)(_dataformContext.default);
75
+ const layout = (0, _normalizeFormFields.normalizeLayout)({
76
+ ...field.layout,
77
+ type: 'card'
78
+ });
79
+ const form = (0, _element.useMemo)(() => ({
80
+ layout: _normalizeFormFields.DEFAULT_LAYOUT,
81
+ fields: (0, _isCombinedField.isCombinedField)(field) ? field.children : []
82
+ }), [field]);
83
+ const {
84
+ isOpen,
85
+ CollapsibleCardHeader
86
+ } = useCollapsibleCard(layout.isOpened);
87
+ if ((0, _isCombinedField.isCombinedField)(field)) {
88
+ const withHeader = !!field.label && layout.withHeader;
89
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.Card, {
90
+ className: "dataforms-layouts-card__field",
91
+ children: [withHeader && /*#__PURE__*/(0, _jsxRuntime.jsx)(CollapsibleCardHeader, {
92
+ className: "dataforms-layouts-card__field-label",
93
+ children: field.label
94
+ }), (isOpen || !withHeader) &&
95
+ /*#__PURE__*/
96
+ // If it doesn't have a header, keep it open.
97
+ // Otherwise, the card will not be visible.
98
+ (0, _jsxRuntime.jsx)(_components.CardBody, {
99
+ className: "dataforms-layouts-card__field-control",
100
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_dataFormLayout.DataFormLayout, {
101
+ data: data,
102
+ form: form,
103
+ onChange: onChange
104
+ })
105
+ })]
106
+ });
107
+ }
108
+ const fieldDefinition = fields.find(fieldDef => fieldDef.id === field.id);
109
+ if (!fieldDefinition || !fieldDefinition.Edit) {
110
+ return null;
111
+ }
112
+ const RegularLayout = (0, _.getFormFieldLayout)('regular')?.component;
113
+ if (!RegularLayout) {
114
+ return null;
115
+ }
116
+ const withHeader = !!fieldDefinition.label && layout.withHeader;
117
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.Card, {
118
+ className: "dataforms-layouts-card__field",
119
+ children: [withHeader && /*#__PURE__*/(0, _jsxRuntime.jsx)(CollapsibleCardHeader, {
120
+ className: "dataforms-layouts-card__field-label",
121
+ children: fieldDefinition.label
122
+ }), (isOpen || !withHeader) &&
123
+ /*#__PURE__*/
124
+ // If it doesn't have a header, keep it open.
125
+ // Otherwise, the card will not be visible.
126
+ (0, _jsxRuntime.jsx)(_components.CardBody, {
127
+ className: "dataforms-layouts-card__field-control",
128
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(RegularLayout, {
129
+ data: data,
130
+ field: field,
131
+ onChange: onChange,
132
+ hideLabelFromVision: hideLabelFromVision || withHeader
133
+ })
134
+ })]
135
+ });
136
+ }
137
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_components","require","_element","_icons","_","_dataformContext","_interopRequireDefault","_dataFormLayout","_isCombinedField","_normalizeFormFields","_jsxRuntime","useCollapsibleCard","initialIsOpen","isOpen","setIsOpen","useState","toggle","useCallback","prev","CollapsibleCardHeader","children","props","jsxs","CardHeader","onClick","style","cursor","jsx","width","display","justifyContent","alignItems","Button","__next40pxDefaultSize","variant","icon","chevronUp","chevronDown","FormCardField","data","field","onChange","hideLabelFromVision","fields","useContext","DataFormContext","layout","normalizeLayout","type","form","useMemo","DEFAULT_LAYOUT","isCombinedField","isOpened","withHeader","label","Card","className","CardBody","DataFormLayout","fieldDefinition","find","fieldDef","id","Edit","RegularLayout","getFormFieldLayout","component"],"sources":["@wordpress/dataviews/src/dataforms-layouts/card/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\n\n/**\n * WordPress dependencies\n */\nimport { Button, Card, CardBody, CardHeader } from '@wordpress/components';\nimport { useCallback, useContext, useMemo, useState } from '@wordpress/element';\nimport { chevronDown, chevronUp } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { getFormFieldLayout } from '..';\nimport DataFormContext from '../../components/dataform-context';\nimport type { NormalizedCardLayout, FieldLayoutProps, Form } from '../../types';\nimport { DataFormLayout } from '../data-form-layout';\nimport { isCombinedField } from '../is-combined-field';\nimport { DEFAULT_LAYOUT, normalizeLayout } from '../../normalize-form-fields';\n\nexport function useCollapsibleCard( initialIsOpen: boolean = true ) {\n\tconst [ isOpen, setIsOpen ] = useState( initialIsOpen );\n\n\tconst toggle = useCallback( () => {\n\t\tsetIsOpen( ( prev ) => ! prev );\n\t}, [] );\n\n\tconst CollapsibleCardHeader = useCallback(\n\t\t( {\n\t\t\tchildren,\n\t\t\t...props\n\t\t}: {\n\t\t\tchildren: React.ReactNode;\n\t\t\t[ key: string ]: any;\n\t\t} ) => (\n\t\t\t<CardHeader\n\t\t\t\t{ ...props }\n\t\t\t\tonClick={ toggle }\n\t\t\t\tstyle={ {\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t...props.style,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tstyle={ {\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ children }\n\t\t\t\t</div>\n\t\t\t\t<Button\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\ticon={ isOpen ? chevronUp : chevronDown }\n\t\t\t\t\taria-expanded={ isOpen }\n\t\t\t\t\taria-label={ isOpen ? 'Collapse' : 'Expand' }\n\t\t\t\t/>\n\t\t\t</CardHeader>\n\t\t),\n\t\t[ toggle, isOpen ]\n\t);\n\n\treturn { isOpen, CollapsibleCardHeader };\n}\n\nexport default function FormCardField< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n}: FieldLayoutProps< Item > ) {\n\tconst { fields } = useContext( DataFormContext );\n\n\tconst layout: NormalizedCardLayout = normalizeLayout( {\n\t\t...field.layout,\n\t\ttype: 'card',\n\t} ) as NormalizedCardLayout;\n\n\tconst form: Form = useMemo(\n\t\t(): Form => ( {\n\t\t\tlayout: DEFAULT_LAYOUT,\n\t\t\tfields: isCombinedField( field ) ? field.children : [],\n\t\t} ),\n\t\t[ field ]\n\t);\n\n\tconst { isOpen, CollapsibleCardHeader } = useCollapsibleCard(\n\t\tlayout.isOpened\n\t);\n\tif ( isCombinedField( field ) ) {\n\t\tconst withHeader = !! field.label && layout.withHeader;\n\t\treturn (\n\t\t\t<Card className=\"dataforms-layouts-card__field\">\n\t\t\t\t{ withHeader && (\n\t\t\t\t\t<CollapsibleCardHeader className=\"dataforms-layouts-card__field-label\">\n\t\t\t\t\t\t{ field.label }\n\t\t\t\t\t</CollapsibleCardHeader>\n\t\t\t\t) }\n\t\t\t\t{ ( isOpen || ! withHeader ) && (\n\t\t\t\t\t// If it doesn't have a header, keep it open.\n\t\t\t\t\t// Otherwise, the card will not be visible.\n\t\t\t\t\t<CardBody className=\"dataforms-layouts-card__field-control\">\n\t\t\t\t\t\t<DataFormLayout\n\t\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\t\tform={ form }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</CardBody>\n\t\t\t\t) }\n\t\t\t</Card>\n\t\t);\n\t}\n\n\tconst fieldDefinition = fields.find(\n\t\t( fieldDef ) => fieldDef.id === field.id\n\t);\n\n\tif ( ! fieldDefinition || ! fieldDefinition.Edit ) {\n\t\treturn null;\n\t}\n\n\tconst RegularLayout = getFormFieldLayout( 'regular' )?.component;\n\tif ( ! RegularLayout ) {\n\t\treturn null;\n\t}\n\tconst withHeader = !! fieldDefinition.label && layout.withHeader;\n\treturn (\n\t\t<Card className=\"dataforms-layouts-card__field\">\n\t\t\t{ withHeader && (\n\t\t\t\t<CollapsibleCardHeader className=\"dataforms-layouts-card__field-label\">\n\t\t\t\t\t{ fieldDefinition.label }\n\t\t\t\t</CollapsibleCardHeader>\n\t\t\t) }\n\t\t\t{ ( isOpen || ! withHeader ) && (\n\t\t\t\t// If it doesn't have a header, keep it open.\n\t\t\t\t// Otherwise, the card will not be visible.\n\t\t\t\t<CardBody className=\"dataforms-layouts-card__field-control\">\n\t\t\t\t\t<RegularLayout\n\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\tfield={ field }\n\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\thideLabelFromVision={\n\t\t\t\t\t\t\thideLabelFromVision || withHeader\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</CardBody>\n\t\t\t) }\n\t\t</Card>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -35,9 +35,9 @@ function DataFormLayout({
35
35
  }
36
36
  const normalizedFormFields = (0, _element.useMemo)(() => (0, _normalizeFormFields.default)(form), [form]);
37
37
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalVStack, {
38
- spacing: form?.type === 'panel' ? 2 : 4,
38
+ spacing: form.layout?.type === 'panel' ? 2 : 4,
39
39
  children: normalizedFormFields.map(formField => {
40
- const FieldLayout = (0, _index.getFormFieldLayout)(formField.layout)?.component;
40
+ const FieldLayout = (0, _index.getFormFieldLayout)(formField.layout.type)?.component;
41
41
  if (!FieldLayout) {
42
42
  return null;
43
43
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_components","require","_element","_index","_dataformContext","_interopRequireDefault","_isCombinedField","_normalizeFormFields","_jsxRuntime","DataFormLayout","data","form","onChange","children","fields","fieldDefinitions","useContext","DataFormContext","getFieldDefinition","field","fieldId","id","find","fieldDefinition","normalizedFormFields","useMemo","normalizeFormFields","jsx","__experimentalVStack","spacing","type","map","formField","FieldLayout","getFormFieldLayout","layout","component","isCombinedField","undefined","isVisible"],"sources":["@wordpress/dataviews/src/dataforms-layouts/data-form-layout.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __experimentalVStack as VStack } from '@wordpress/components';\nimport { useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { Form, FormField, SimpleFormField } from '../types';\nimport { getFormFieldLayout } from './index';\nimport DataFormContext from '../components/dataform-context';\nimport { isCombinedField } from './is-combined-field';\nimport normalizeFormFields from '../normalize-form-fields';\n\nexport function DataFormLayout< Item >( {\n\tdata,\n\tform,\n\tonChange,\n\tchildren,\n}: {\n\tdata: Item;\n\tform: Form;\n\tonChange: ( value: any ) => void;\n\tchildren?: (\n\t\tFieldLayout: ( props: {\n\t\t\tdata: Item;\n\t\t\tfield: FormField;\n\t\t\tonChange: ( value: any ) => void;\n\t\t\thideLabelFromVision?: boolean;\n\t\t} ) => React.JSX.Element | null,\n\t\tfield: FormField\n\t) => React.JSX.Element;\n} ) {\n\tconst { fields: fieldDefinitions } = useContext( DataFormContext );\n\n\tfunction getFieldDefinition( field: SimpleFormField | string ) {\n\t\tconst fieldId = typeof field === 'string' ? field : field.id;\n\n\t\treturn fieldDefinitions.find(\n\t\t\t( fieldDefinition ) => fieldDefinition.id === fieldId\n\t\t);\n\t}\n\n\tconst normalizedFormFields = useMemo(\n\t\t() => normalizeFormFields( form ),\n\t\t[ form ]\n\t);\n\n\treturn (\n\t\t<VStack spacing={ form?.type === 'panel' ? 2 : 4 }>\n\t\t\t{ normalizedFormFields.map( ( formField ) => {\n\t\t\t\tconst FieldLayout = getFormFieldLayout( formField.layout )\n\t\t\t\t\t?.component;\n\n\t\t\t\tif ( ! FieldLayout ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst fieldDefinition = ! isCombinedField( formField )\n\t\t\t\t\t? getFieldDefinition( formField )\n\t\t\t\t\t: undefined;\n\n\t\t\t\tif (\n\t\t\t\t\tfieldDefinition &&\n\t\t\t\t\tfieldDefinition.isVisible &&\n\t\t\t\t\t! fieldDefinition.isVisible( data )\n\t\t\t\t) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif ( children ) {\n\t\t\t\t\treturn children( FieldLayout, formField );\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<FieldLayout\n\t\t\t\t\t\tkey={ formField.id }\n\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\tfield={ formField }\n\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</VStack>\n\t);\n}\n"],"mappings":";;;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAMA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAC,sBAAA,CAAAJ,OAAA;AACA,IAAAK,gBAAA,GAAAL,OAAA;AACA,IAAAM,oBAAA,GAAAF,sBAAA,CAAAJ,OAAA;AAA2D,IAAAO,WAAA,GAAAP,OAAA;AAb3D;AACA;AACA;;AAIA;AACA;AACA;;AAOO,SAASQ,cAAcA,CAAU;EACvCC,IAAI;EACJC,IAAI;EACJC,QAAQ;EACRC;AAcD,CAAC,EAAG;EACH,MAAM;IAAEC,MAAM,EAAEC;EAAiB,CAAC,GAAG,IAAAC,mBAAU,EAAEC,wBAAgB,CAAC;EAElE,SAASC,kBAAkBA,CAAEC,KAA+B,EAAG;IAC9D,MAAMC,OAAO,GAAG,OAAOD,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAGA,KAAK,CAACE,EAAE;IAE5D,OAAON,gBAAgB,CAACO,IAAI,CACzBC,eAAe,IAAMA,eAAe,CAACF,EAAE,KAAKD,OAC/C,CAAC;EACF;EAEA,MAAMI,oBAAoB,GAAG,IAAAC,gBAAO,EACnC,MAAM,IAAAC,4BAAmB,EAAEf,IAAK,CAAC,EACjC,CAAEA,IAAI,CACP,CAAC;EAED,oBACC,IAAAH,WAAA,CAAAmB,GAAA,EAAC3B,WAAA,CAAA4B,oBAAM;IAACC,OAAO,EAAGlB,IAAI,EAAEmB,IAAI,KAAK,OAAO,GAAG,CAAC,GAAG,CAAG;IAAAjB,QAAA,EAC/CW,oBAAoB,CAACO,GAAG,CAAIC,SAAS,IAAM;MAC5C,MAAMC,WAAW,GAAG,IAAAC,yBAAkB,EAAEF,SAAS,CAACG,MAAO,CAAC,EACvDC,SAAS;MAEZ,IAAK,CAAEH,WAAW,EAAG;QACpB,OAAO,IAAI;MACZ;MAEA,MAAMV,eAAe,GAAG,CAAE,IAAAc,gCAAe,EAAEL,SAAU,CAAC,GACnDd,kBAAkB,CAAEc,SAAU,CAAC,GAC/BM,SAAS;MAEZ,IACCf,eAAe,IACfA,eAAe,CAACgB,SAAS,IACzB,CAAEhB,eAAe,CAACgB,SAAS,CAAE7B,IAAK,CAAC,EAClC;QACD,OAAO,IAAI;MACZ;MAEA,IAAKG,QAAQ,EAAG;QACf,OAAOA,QAAQ,CAAEoB,WAAW,EAAED,SAAU,CAAC;MAC1C;MAEA,oBACC,IAAAxB,WAAA,CAAAmB,GAAA,EAACM,WAAW;QAEXvB,IAAI,EAAGA,IAAM;QACbS,KAAK,EAAGa,SAAW;QACnBpB,QAAQ,EAAGA;MAAU,GAHfoB,SAAS,CAACX,EAIhB,CAAC;IAEJ,CAAE;EAAC,CACI,CAAC;AAEX","ignoreList":[]}
1
+ {"version":3,"names":["_components","require","_element","_index","_dataformContext","_interopRequireDefault","_isCombinedField","_normalizeFormFields","_jsxRuntime","DataFormLayout","data","form","onChange","children","fields","fieldDefinitions","useContext","DataFormContext","getFieldDefinition","field","fieldId","id","find","fieldDefinition","normalizedFormFields","useMemo","normalizeFormFields","jsx","__experimentalVStack","spacing","layout","type","map","formField","FieldLayout","getFormFieldLayout","component","isCombinedField","undefined","isVisible"],"sources":["@wordpress/dataviews/src/dataforms-layouts/data-form-layout.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __experimentalVStack as VStack } from '@wordpress/components';\nimport { useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { Form, FormField, SimpleFormField } from '../types';\nimport { getFormFieldLayout } from './index';\nimport DataFormContext from '../components/dataform-context';\nimport { isCombinedField } from './is-combined-field';\nimport normalizeFormFields from '../normalize-form-fields';\n\nexport function DataFormLayout< Item >( {\n\tdata,\n\tform,\n\tonChange,\n\tchildren,\n}: {\n\tdata: Item;\n\tform: Form;\n\tonChange: ( value: any ) => void;\n\tchildren?: (\n\t\tFieldLayout: ( props: {\n\t\t\tdata: Item;\n\t\t\tfield: FormField;\n\t\t\tonChange: ( value: any ) => void;\n\t\t\thideLabelFromVision?: boolean;\n\t\t} ) => React.JSX.Element | null,\n\t\tfield: FormField\n\t) => React.JSX.Element;\n} ) {\n\tconst { fields: fieldDefinitions } = useContext( DataFormContext );\n\n\tfunction getFieldDefinition( field: SimpleFormField | string ) {\n\t\tconst fieldId = typeof field === 'string' ? field : field.id;\n\n\t\treturn fieldDefinitions.find(\n\t\t\t( fieldDefinition ) => fieldDefinition.id === fieldId\n\t\t);\n\t}\n\n\tconst normalizedFormFields = useMemo(\n\t\t() => normalizeFormFields( form ),\n\t\t[ form ]\n\t);\n\n\treturn (\n\t\t<VStack spacing={ form.layout?.type === 'panel' ? 2 : 4 }>\n\t\t\t{ normalizedFormFields.map( ( formField ) => {\n\t\t\t\tconst FieldLayout = getFormFieldLayout( formField.layout.type )\n\t\t\t\t\t?.component;\n\n\t\t\t\tif ( ! FieldLayout ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst fieldDefinition = ! isCombinedField( formField )\n\t\t\t\t\t? getFieldDefinition( formField )\n\t\t\t\t\t: undefined;\n\n\t\t\t\tif (\n\t\t\t\t\tfieldDefinition &&\n\t\t\t\t\tfieldDefinition.isVisible &&\n\t\t\t\t\t! fieldDefinition.isVisible( data )\n\t\t\t\t) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif ( children ) {\n\t\t\t\t\treturn children( FieldLayout, formField );\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<FieldLayout\n\t\t\t\t\t\tkey={ formField.id }\n\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\tfield={ formField }\n\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</VStack>\n\t);\n}\n"],"mappings":";;;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAMA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAC,sBAAA,CAAAJ,OAAA;AACA,IAAAK,gBAAA,GAAAL,OAAA;AACA,IAAAM,oBAAA,GAAAF,sBAAA,CAAAJ,OAAA;AAA2D,IAAAO,WAAA,GAAAP,OAAA;AAb3D;AACA;AACA;;AAIA;AACA;AACA;;AAOO,SAASQ,cAAcA,CAAU;EACvCC,IAAI;EACJC,IAAI;EACJC,QAAQ;EACRC;AAcD,CAAC,EAAG;EACH,MAAM;IAAEC,MAAM,EAAEC;EAAiB,CAAC,GAAG,IAAAC,mBAAU,EAAEC,wBAAgB,CAAC;EAElE,SAASC,kBAAkBA,CAAEC,KAA+B,EAAG;IAC9D,MAAMC,OAAO,GAAG,OAAOD,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAGA,KAAK,CAACE,EAAE;IAE5D,OAAON,gBAAgB,CAACO,IAAI,CACzBC,eAAe,IAAMA,eAAe,CAACF,EAAE,KAAKD,OAC/C,CAAC;EACF;EAEA,MAAMI,oBAAoB,GAAG,IAAAC,gBAAO,EACnC,MAAM,IAAAC,4BAAmB,EAAEf,IAAK,CAAC,EACjC,CAAEA,IAAI,CACP,CAAC;EAED,oBACC,IAAAH,WAAA,CAAAmB,GAAA,EAAC3B,WAAA,CAAA4B,oBAAM;IAACC,OAAO,EAAGlB,IAAI,CAACmB,MAAM,EAAEC,IAAI,KAAK,OAAO,GAAG,CAAC,GAAG,CAAG;IAAAlB,QAAA,EACtDW,oBAAoB,CAACQ,GAAG,CAAIC,SAAS,IAAM;MAC5C,MAAMC,WAAW,GAAG,IAAAC,yBAAkB,EAAEF,SAAS,CAACH,MAAM,CAACC,IAAK,CAAC,EAC5DK,SAAS;MAEZ,IAAK,CAAEF,WAAW,EAAG;QACpB,OAAO,IAAI;MACZ;MAEA,MAAMX,eAAe,GAAG,CAAE,IAAAc,gCAAe,EAAEJ,SAAU,CAAC,GACnDf,kBAAkB,CAAEe,SAAU,CAAC,GAC/BK,SAAS;MAEZ,IACCf,eAAe,IACfA,eAAe,CAACgB,SAAS,IACzB,CAAEhB,eAAe,CAACgB,SAAS,CAAE7B,IAAK,CAAC,EAClC;QACD,OAAO,IAAI;MACZ;MAEA,IAAKG,QAAQ,EAAG;QACf,OAAOA,QAAQ,CAAEqB,WAAW,EAAED,SAAU,CAAC;MAC1C;MAEA,oBACC,IAAAzB,WAAA,CAAAmB,GAAA,EAACO,WAAW;QAEXxB,IAAI,EAAGA,IAAM;QACbS,KAAK,EAAGc,SAAW;QACnBrB,QAAQ,EAAGA;MAAU,GAHfqB,SAAS,CAACZ,EAIhB,CAAC;IAEJ,CAAE;EAAC,CACI,CAAC;AAEX","ignoreList":[]}
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.getFormFieldLayout = getFormFieldLayout;
8
8
  var _regular = _interopRequireDefault(require("./regular"));
9
9
  var _panel = _interopRequireDefault(require("./panel"));
10
+ var _card = _interopRequireDefault(require("./card"));
10
11
  /**
11
12
  * Internal dependencies
12
13
  */
@@ -17,6 +18,9 @@ const FORM_FIELD_LAYOUTS = [{
17
18
  }, {
18
19
  type: 'panel',
19
20
  component: _panel.default
21
+ }, {
22
+ type: 'card',
23
+ component: _card.default
20
24
  }];
21
25
  function getFormFieldLayout(type) {
22
26
  return FORM_FIELD_LAYOUTS.find(layout => layout.type === type);
@@ -1 +1 @@
1
- {"version":3,"names":["_regular","_interopRequireDefault","require","_panel","FORM_FIELD_LAYOUTS","type","component","FormRegularField","FormPanelField","getFormFieldLayout","find","layout"],"sources":["@wordpress/dataviews/src/dataforms-layouts/index.tsx"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport FormRegularField from './regular';\nimport FormPanelField from './panel';\n\nconst FORM_FIELD_LAYOUTS = [\n\t{\n\t\ttype: 'regular',\n\t\tcomponent: FormRegularField,\n\t},\n\t{\n\t\ttype: 'panel',\n\t\tcomponent: FormPanelField,\n\t},\n];\n\nexport function getFormFieldLayout( type: string ) {\n\treturn FORM_FIELD_LAYOUTS.find( ( layout ) => layout.type === type );\n}\n"],"mappings":";;;;;;;AAGA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAJA;AACA;AACA;;AAIA,MAAME,kBAAkB,GAAG,CAC1B;EACCC,IAAI,EAAE,SAAS;EACfC,SAAS,EAAEC;AACZ,CAAC,EACD;EACCF,IAAI,EAAE,OAAO;EACbC,SAAS,EAAEE;AACZ,CAAC,CACD;AAEM,SAASC,kBAAkBA,CAAEJ,IAAY,EAAG;EAClD,OAAOD,kBAAkB,CAACM,IAAI,CAAIC,MAAM,IAAMA,MAAM,CAACN,IAAI,KAAKA,IAAK,CAAC;AACrE","ignoreList":[]}
1
+ {"version":3,"names":["_regular","_interopRequireDefault","require","_panel","_card","FORM_FIELD_LAYOUTS","type","component","FormRegularField","FormPanelField","FormCardField","getFormFieldLayout","find","layout"],"sources":["@wordpress/dataviews/src/dataforms-layouts/index.tsx"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport FormRegularField from './regular';\nimport FormPanelField from './panel';\nimport FormCardField from './card';\n\nconst FORM_FIELD_LAYOUTS = [\n\t{\n\t\ttype: 'regular',\n\t\tcomponent: FormRegularField,\n\t},\n\t{\n\t\ttype: 'panel',\n\t\tcomponent: FormPanelField,\n\t},\n\t{\n\t\ttype: 'card',\n\t\tcomponent: FormCardField,\n\t},\n];\n\nexport function getFormFieldLayout( type: string ) {\n\treturn FORM_FIELD_LAYOUTS.find( ( layout ) => layout.type === type );\n}\n"],"mappings":";;;;;;;AAGA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAH,sBAAA,CAAAC,OAAA;AALA;AACA;AACA;;AAKA,MAAMG,kBAAkB,GAAG,CAC1B;EACCC,IAAI,EAAE,SAAS;EACfC,SAAS,EAAEC;AACZ,CAAC,EACD;EACCF,IAAI,EAAE,OAAO;EACbC,SAAS,EAAEE;AACZ,CAAC,EACD;EACCH,IAAI,EAAE,MAAM;EACZC,SAAS,EAAEG;AACZ,CAAC,CACD;AAEM,SAASC,kBAAkBA,CAAEL,IAAY,EAAG;EAClD,OAAOD,kBAAkB,CAACO,IAAI,CAAIC,MAAM,IAAMA,MAAM,CAACP,IAAI,KAAKA,IAAK,CAAC;AACrE","ignoreList":[]}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _components = require("@wordpress/components");
8
+ var _i18n = require("@wordpress/i18n");
9
+ var _element = require("@wordpress/element");
10
+ var _icons = require("@wordpress/icons");
11
+ var _dataFormLayout = require("../data-form-layout");
12
+ var _isCombinedField = require("../is-combined-field");
13
+ var _normalizeFormFields = require("../../normalize-form-fields");
14
+ var _jsxRuntime = require("react/jsx-runtime");
15
+ /**
16
+ * WordPress dependencies
17
+ */
18
+
19
+ /**
20
+ * Internal dependencies
21
+ */
22
+
23
+ function DropdownHeader({
24
+ title,
25
+ onClose
26
+ }) {
27
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalVStack, {
28
+ className: "dataforms-layouts-panel__dropdown-header",
29
+ spacing: 4,
30
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.__experimentalHStack, {
31
+ alignment: "center",
32
+ children: [title && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalHeading, {
33
+ level: 2,
34
+ size: 13,
35
+ children: title
36
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalSpacer, {}), onClose && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Button, {
37
+ label: (0, _i18n.__)('Close'),
38
+ icon: _icons.closeSmall,
39
+ onClick: onClose,
40
+ size: "small"
41
+ })]
42
+ })
43
+ });
44
+ }
45
+ function PanelDropdown({
46
+ fieldDefinition,
47
+ popoverAnchor,
48
+ labelPosition = 'side',
49
+ data,
50
+ onChange,
51
+ field
52
+ }) {
53
+ const fieldLabel = (0, _isCombinedField.isCombinedField)(field) ? field.label : fieldDefinition?.label;
54
+ const form = (0, _element.useMemo)(() => ({
55
+ layout: _normalizeFormFields.DEFAULT_LAYOUT,
56
+ fields: (0, _isCombinedField.isCombinedField)(field) ? field.children :
57
+ // If not explicit children return the field id itself.
58
+ [{
59
+ id: field.id
60
+ }]
61
+ }), [field]);
62
+
63
+ // Memoize popoverProps to avoid returning a new object every time.
64
+ const popoverProps = (0, _element.useMemo)(() => ({
65
+ // Anchor the popover to the middle of the entire row so that it doesn't
66
+ // move around when the label changes.
67
+ anchor: popoverAnchor,
68
+ placement: 'left-start',
69
+ offset: 36,
70
+ shift: true
71
+ }), [popoverAnchor]);
72
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Dropdown, {
73
+ contentClassName: "dataforms-layouts-panel__field-dropdown",
74
+ popoverProps: popoverProps,
75
+ focusOnMount: true,
76
+ toggleProps: {
77
+ size: 'compact',
78
+ variant: 'tertiary',
79
+ tooltipPosition: 'middle left'
80
+ },
81
+ renderToggle: ({
82
+ isOpen,
83
+ 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,
93
+ disabled: fieldDefinition.readOnly === true,
94
+ accessibleWhenDisabled: true,
95
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(fieldDefinition.render, {
96
+ item: data,
97
+ field: fieldDefinition
98
+ })
99
+ }),
100
+ renderContent: ({
101
+ onClose
102
+ }) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
103
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownHeader, {
104
+ title: fieldLabel,
105
+ onClose: onClose
106
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_dataFormLayout.DataFormLayout, {
107
+ data: data,
108
+ form: form,
109
+ onChange: onChange,
110
+ children: (FieldLayout, nestedField) => {
111
+ var _form$fields;
112
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(FieldLayout, {
113
+ data: data,
114
+ field: nestedField,
115
+ onChange: onChange,
116
+ hideLabelFromVision: ((_form$fields = form?.fields) !== null && _form$fields !== void 0 ? _form$fields : []).length < 2
117
+ }, nestedField.id);
118
+ }
119
+ })]
120
+ })
121
+ });
122
+ }
123
+ var _default = exports.default = PanelDropdown;
124
+ //# sourceMappingURL=dropdown.js.map
@@ -0,0 +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":[]}