@wordpress/dataviews 8.0.2-next.836ecdcae.0 → 9.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.
- package/CHANGELOG.md +23 -1
- package/README.md +127 -13
- package/build/components/dataviews-filters/input-widget.js +48 -4
- package/build/components/dataviews-filters/input-widget.js.map +1 -1
- package/build/components/dataviews-layout/index.js +3 -1
- package/build/components/dataviews-layout/index.js.map +1 -1
- package/build/dataform-controls/array.js +9 -7
- package/build/dataform-controls/array.js.map +1 -1
- package/build/dataform-controls/checkbox.js +40 -8
- package/build/dataform-controls/checkbox.js.map +1 -1
- package/build/dataform-controls/color.js +133 -0
- package/build/dataform-controls/color.js.map +1 -0
- package/build/dataform-controls/date.js +32 -24
- package/build/dataform-controls/date.js.map +1 -1
- package/build/dataform-controls/datetime.js +133 -19
- package/build/dataform-controls/datetime.js.map +1 -1
- package/build/dataform-controls/email.js +15 -3
- package/build/dataform-controls/email.js.map +1 -1
- package/build/dataform-controls/index.js +33 -2
- package/build/dataform-controls/index.js.map +1 -1
- package/build/dataform-controls/integer.js +47 -34
- package/build/dataform-controls/integer.js.map +1 -1
- package/build/dataform-controls/password.js +47 -0
- package/build/dataform-controls/password.js.map +1 -0
- package/build/dataform-controls/radio.js +42 -9
- package/build/dataform-controls/radio.js.map +1 -1
- package/build/dataform-controls/relative-date-control.js +6 -10
- package/build/dataform-controls/relative-date-control.js.map +1 -1
- package/build/dataform-controls/select.js +41 -10
- package/build/dataform-controls/select.js.map +1 -1
- package/build/dataform-controls/telephone.js +15 -3
- package/build/dataform-controls/telephone.js.map +1 -1
- package/build/dataform-controls/text.js +16 -4
- package/build/dataform-controls/text.js.map +1 -1
- package/build/dataform-controls/textarea.js +81 -0
- package/build/dataform-controls/textarea.js.map +1 -0
- package/build/dataform-controls/toggle-group.js +36 -6
- package/build/dataform-controls/toggle-group.js.map +1 -1
- package/build/dataform-controls/toggle.js +77 -0
- package/build/dataform-controls/toggle.js.map +1 -0
- package/build/dataform-controls/url.js +40 -0
- package/build/dataform-controls/url.js.map +1 -0
- package/build/dataform-controls/utils/validated-input.js +83 -0
- package/build/dataform-controls/utils/validated-input.js.map +1 -0
- package/build/dataforms-layouts/card/index.js +0 -4
- package/build/dataforms-layouts/card/index.js.map +1 -1
- package/build/dataforms-layouts/data-form-layout.js +16 -4
- package/build/dataforms-layouts/data-form-layout.js.map +1 -1
- package/build/dataforms-layouts/index.js +31 -1
- package/build/dataforms-layouts/index.js.map +1 -1
- package/build/dataforms-layouts/panel/dropdown.js +10 -14
- package/build/dataforms-layouts/panel/dropdown.js.map +1 -1
- package/build/dataforms-layouts/panel/index.js +24 -11
- package/build/dataforms-layouts/panel/index.js.map +1 -1
- package/build/dataforms-layouts/panel/modal.js +22 -27
- package/build/dataforms-layouts/panel/modal.js.map +1 -1
- package/build/dataforms-layouts/panel/summary-button.js +67 -0
- package/build/dataforms-layouts/panel/summary-button.js.map +1 -0
- package/build/dataforms-layouts/regular/index.js +7 -9
- package/build/dataforms-layouts/regular/index.js.map +1 -1
- package/build/dataforms-layouts/row/index.js +113 -0
- package/build/dataforms-layouts/row/index.js.map +1 -0
- package/build/dataviews-layouts/grid/index.js +5 -15
- package/build/dataviews-layouts/grid/index.js.map +1 -1
- package/build/dataviews-layouts/list/index.js +47 -2
- package/build/dataviews-layouts/list/index.js.map +1 -1
- package/build/dataviews-layouts/picker-grid/index.js +5 -15
- package/build/dataviews-layouts/picker-grid/index.js.map +1 -1
- package/build/dataviews-layouts/table/index.js +5 -17
- package/build/dataviews-layouts/table/index.js.map +1 -1
- package/build/dataviews-layouts/utils/get-data-by-group.js +23 -0
- package/build/dataviews-layouts/utils/get-data-by-group.js.map +1 -0
- package/build/field-types/boolean.js +1 -1
- package/build/field-types/boolean.js.map +1 -1
- package/build/field-types/color.js +113 -0
- package/build/field-types/color.js.map +1 -0
- package/build/field-types/index.js +12 -0
- package/build/field-types/index.js.map +1 -1
- package/build/field-types/password.js +51 -0
- package/build/field-types/password.js.map +1 -0
- package/build/field-types/url.js +57 -0
- package/build/field-types/url.js.map +1 -0
- package/build/normalize-fields.js +17 -0
- package/build/normalize-fields.js.map +1 -1
- package/build/normalize-form-fields.js +6 -0
- package/build/normalize-form-fields.js.map +1 -1
- package/build/types.js.map +1 -1
- package/build/validation.js +1 -1
- package/build/validation.js.map +1 -1
- package/build-module/components/dataviews-filters/input-widget.js +48 -4
- package/build-module/components/dataviews-filters/input-widget.js.map +1 -1
- package/build-module/components/dataviews-layout/index.js +3 -1
- package/build-module/components/dataviews-layout/index.js.map +1 -1
- package/build-module/dataform-controls/array.js +9 -7
- package/build-module/dataform-controls/array.js.map +1 -1
- package/build-module/dataform-controls/checkbox.js +41 -9
- package/build-module/dataform-controls/checkbox.js.map +1 -1
- package/build-module/dataform-controls/color.js +126 -0
- package/build-module/dataform-controls/color.js.map +1 -0
- package/build-module/dataform-controls/date.js +32 -24
- package/build-module/dataform-controls/date.js.map +1 -1
- package/build-module/dataform-controls/datetime.js +135 -21
- package/build-module/dataform-controls/datetime.js.map +1 -1
- package/build-module/dataform-controls/email.js +14 -2
- package/build-module/dataform-controls/email.js.map +1 -1
- package/build-module/dataform-controls/index.js +33 -2
- package/build-module/dataform-controls/index.js.map +1 -1
- package/build-module/dataform-controls/integer.js +46 -34
- package/build-module/dataform-controls/integer.js.map +1 -1
- package/build-module/dataform-controls/password.js +38 -0
- package/build-module/dataform-controls/password.js.map +1 -0
- package/build-module/dataform-controls/radio.js +44 -11
- package/build-module/dataform-controls/radio.js.map +1 -1
- package/build-module/dataform-controls/relative-date-control.js +6 -10
- package/build-module/dataform-controls/relative-date-control.js.map +1 -1
- package/build-module/dataform-controls/select.js +43 -12
- package/build-module/dataform-controls/select.js.map +1 -1
- package/build-module/dataform-controls/telephone.js +14 -2
- package/build-module/dataform-controls/telephone.js.map +1 -1
- package/build-module/dataform-controls/text.js +15 -3
- package/build-module/dataform-controls/text.js.map +1 -1
- package/build-module/dataform-controls/textarea.js +74 -0
- package/build-module/dataform-controls/textarea.js.map +1 -0
- package/build-module/dataform-controls/toggle-group.js +38 -8
- package/build-module/dataform-controls/toggle-group.js.map +1 -1
- package/build-module/dataform-controls/toggle.js +70 -0
- package/build-module/dataform-controls/toggle.js.map +1 -0
- package/build-module/dataform-controls/url.js +33 -0
- package/build-module/dataform-controls/url.js.map +1 -0
- package/build-module/dataform-controls/utils/validated-input.js +76 -0
- package/build-module/dataform-controls/utils/validated-input.js.map +1 -0
- package/build-module/dataforms-layouts/card/index.js +0 -4
- package/build-module/dataforms-layouts/card/index.js.map +1 -1
- package/build-module/dataforms-layouts/data-form-layout.js +14 -4
- package/build-module/dataforms-layouts/data-form-layout.js.map +1 -1
- package/build-module/dataforms-layouts/index.js +32 -1
- package/build-module/dataforms-layouts/index.js.map +1 -1
- package/build-module/dataforms-layouts/panel/dropdown.js +10 -15
- package/build-module/dataforms-layouts/panel/dropdown.js.map +1 -1
- package/build-module/dataforms-layouts/panel/index.js +24 -11
- package/build-module/dataforms-layouts/panel/index.js.map +1 -1
- package/build-module/dataforms-layouts/panel/modal.js +22 -28
- package/build-module/dataforms-layouts/panel/modal.js.map +1 -1
- package/build-module/dataforms-layouts/panel/summary-button.js +60 -0
- package/build-module/dataforms-layouts/panel/summary-button.js.map +1 -0
- package/build-module/dataforms-layouts/regular/index.js +8 -10
- package/build-module/dataforms-layouts/regular/index.js.map +1 -1
- package/build-module/dataforms-layouts/row/index.js +106 -0
- package/build-module/dataforms-layouts/row/index.js.map +1 -0
- package/build-module/dataviews-layouts/grid/index.js +6 -16
- package/build-module/dataviews-layouts/grid/index.js.map +1 -1
- package/build-module/dataviews-layouts/list/index.js +48 -3
- package/build-module/dataviews-layouts/list/index.js.map +1 -1
- package/build-module/dataviews-layouts/picker-grid/index.js +6 -16
- package/build-module/dataviews-layouts/picker-grid/index.js.map +1 -1
- package/build-module/dataviews-layouts/table/index.js +5 -17
- package/build-module/dataviews-layouts/table/index.js.map +1 -1
- package/build-module/dataviews-layouts/utils/get-data-by-group.js +17 -0
- package/build-module/dataviews-layouts/utils/get-data-by-group.js.map +1 -0
- package/build-module/field-types/boolean.js +1 -1
- package/build-module/field-types/boolean.js.map +1 -1
- package/build-module/field-types/color.js +107 -0
- package/build-module/field-types/color.js.map +1 -0
- package/build-module/field-types/index.js +12 -0
- package/build-module/field-types/index.js.map +1 -1
- package/build-module/field-types/password.js +46 -0
- package/build-module/field-types/password.js.map +1 -0
- package/build-module/field-types/url.js +51 -0
- package/build-module/field-types/url.js.map +1 -0
- package/build-module/normalize-fields.js +15 -0
- package/build-module/normalize-fields.js.map +1 -1
- package/build-module/normalize-form-fields.js +6 -0
- package/build-module/normalize-form-fields.js.map +1 -1
- package/build-module/types.js.map +1 -1
- package/build-module/validation.js +1 -1
- package/build-module/validation.js.map +1 -1
- package/build-style/style-rtl.css +13 -6
- package/build-style/style.css +13 -6
- package/build-types/components/dataform/stories/index.story.d.ts +21 -17
- package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
- package/build-types/components/dataviews/stories/fixtures.d.ts +4 -2
- package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
- package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -1
- package/build-types/dataform-controls/array.d.ts.map +1 -1
- package/build-types/dataform-controls/checkbox.d.ts.map +1 -1
- package/build-types/dataform-controls/color.d.ts +6 -0
- package/build-types/dataform-controls/color.d.ts.map +1 -0
- package/build-types/dataform-controls/date.d.ts.map +1 -1
- package/build-types/dataform-controls/datetime.d.ts.map +1 -1
- package/build-types/dataform-controls/email.d.ts.map +1 -1
- package/build-types/dataform-controls/index.d.ts +1 -1
- package/build-types/dataform-controls/index.d.ts.map +1 -1
- package/build-types/dataform-controls/integer.d.ts.map +1 -1
- package/build-types/dataform-controls/password.d.ts +3 -0
- package/build-types/dataform-controls/password.d.ts.map +1 -0
- package/build-types/dataform-controls/radio.d.ts.map +1 -1
- package/build-types/dataform-controls/relative-date-control.d.ts +6 -5
- package/build-types/dataform-controls/relative-date-control.d.ts.map +1 -1
- package/build-types/dataform-controls/select.d.ts.map +1 -1
- package/build-types/dataform-controls/telephone.d.ts.map +1 -1
- package/build-types/dataform-controls/text.d.ts +1 -1
- package/build-types/dataform-controls/text.d.ts.map +1 -1
- package/build-types/dataform-controls/textarea.d.ts +6 -0
- package/build-types/dataform-controls/textarea.d.ts.map +1 -0
- package/build-types/dataform-controls/toggle-group.d.ts.map +1 -1
- package/build-types/dataform-controls/toggle.d.ts +6 -0
- package/build-types/dataform-controls/toggle.d.ts.map +1 -0
- package/build-types/dataform-controls/url.d.ts +6 -0
- package/build-types/dataform-controls/url.d.ts.map +1 -0
- package/build-types/dataform-controls/utils/validated-input.d.ts +20 -0
- package/build-types/dataform-controls/utils/validated-input.d.ts.map +1 -0
- package/build-types/dataforms-layouts/card/index.d.ts +0 -3
- package/build-types/dataforms-layouts/card/index.d.ts.map +1 -1
- package/build-types/dataforms-layouts/data-form-layout.d.ts +4 -1
- package/build-types/dataforms-layouts/data-form-layout.d.ts.map +1 -1
- package/build-types/dataforms-layouts/index.d.ts +10 -0
- package/build-types/dataforms-layouts/index.d.ts.map +1 -1
- package/build-types/dataforms-layouts/panel/dropdown.d.ts +2 -1
- package/build-types/dataforms-layouts/panel/dropdown.d.ts.map +1 -1
- package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
- package/build-types/dataforms-layouts/panel/modal.d.ts +2 -1
- package/build-types/dataforms-layouts/panel/modal.d.ts.map +1 -1
- package/build-types/dataforms-layouts/panel/summary-button.d.ts +15 -0
- package/build-types/dataforms-layouts/panel/summary-button.d.ts.map +1 -0
- package/build-types/dataforms-layouts/regular/index.d.ts.map +1 -1
- package/build-types/dataforms-layouts/row/index.d.ts +6 -0
- package/build-types/dataforms-layouts/row/index.d.ts.map +1 -0
- package/build-types/dataviews-layouts/grid/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/picker-grid/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/utils/get-data-by-group.d.ts +6 -0
- package/build-types/dataviews-layouts/utils/get-data-by-group.d.ts.map +1 -0
- package/build-types/field-types/color.d.ts +20 -0
- package/build-types/field-types/color.d.ts.map +1 -0
- package/build-types/field-types/index.d.ts.map +1 -1
- package/build-types/field-types/password.d.ts +17 -0
- package/build-types/field-types/password.d.ts.map +1 -0
- package/build-types/field-types/stories/index.story.d.ts +13 -1
- package/build-types/field-types/stories/index.story.d.ts.map +1 -1
- package/build-types/field-types/url.d.ts +20 -0
- package/build-types/field-types/url.d.ts.map +1 -0
- package/build-types/normalize-fields.d.ts +3 -0
- package/build-types/normalize-fields.d.ts.map +1 -1
- package/build-types/normalize-form-fields.d.ts.map +1 -1
- package/build-types/types.d.ts +78 -7
- package/build-types/types.d.ts.map +1 -1
- package/build-types/validation.d.ts.map +1 -1
- package/build-wp/index.js +2577 -1708
- package/package.json +17 -15
- package/src/components/dataform/stories/index.story.tsx +794 -27
- package/src/components/dataviews/stories/fixtures.tsx +99 -41
- package/src/components/dataviews/stories/index.story.tsx +2 -2
- package/src/components/dataviews-filters/input-widget.tsx +44 -5
- package/src/components/dataviews-layout/index.tsx +1 -1
- package/src/components/dataviews-picker/stories/index.story.tsx +1 -1
- package/src/dataform-controls/array.tsx +4 -6
- package/src/dataform-controls/checkbox.tsx +54 -7
- package/src/dataform-controls/color.tsx +148 -0
- package/src/dataform-controls/date.tsx +47 -21
- package/src/dataform-controls/datetime.tsx +171 -23
- package/src/dataform-controls/email.tsx +22 -2
- package/src/dataform-controls/index.tsx +36 -2
- package/src/dataform-controls/integer.tsx +82 -49
- package/src/dataform-controls/password.tsx +50 -0
- package/src/dataform-controls/radio.tsx +53 -11
- package/src/dataform-controls/relative-date-control.tsx +11 -10
- package/src/dataform-controls/select.tsx +53 -10
- package/src/dataform-controls/telephone.tsx +22 -2
- package/src/dataform-controls/text.tsx +19 -2
- package/src/dataform-controls/textarea.tsx +85 -0
- package/src/dataform-controls/toggle-group.tsx +50 -10
- package/src/dataform-controls/toggle.tsx +79 -0
- package/src/dataform-controls/url.tsx +38 -0
- package/src/dataform-controls/utils/validated-input.tsx +109 -0
- package/src/dataforms-layouts/card/index.tsx +0 -4
- package/src/dataforms-layouts/data-form-layout.tsx +15 -3
- package/src/dataforms-layouts/index.tsx +35 -0
- package/src/dataforms-layouts/panel/dropdown.tsx +12 -23
- package/src/dataforms-layouts/panel/index.tsx +39 -16
- package/src/dataforms-layouts/panel/modal.tsx +24 -30
- package/src/dataforms-layouts/panel/summary-button.tsx +92 -0
- package/src/dataforms-layouts/regular/index.tsx +9 -7
- package/src/dataforms-layouts/regular/style.scss +0 -6
- package/src/dataforms-layouts/row/index.tsx +115 -0
- package/src/dataforms-layouts/row/style.scss +3 -0
- package/src/dataviews-layouts/grid/index.tsx +9 -14
- package/src/dataviews-layouts/grid/style.scss +1 -0
- package/src/dataviews-layouts/list/index.tsx +74 -2
- package/src/dataviews-layouts/list/style.scss +8 -0
- package/src/dataviews-layouts/picker-grid/index.tsx +9 -13
- package/src/dataviews-layouts/table/index.tsx +10 -14
- package/src/dataviews-layouts/utils/get-data-by-group.ts +18 -0
- package/src/field-types/boolean.tsx +1 -1
- package/src/field-types/color.tsx +115 -0
- package/src/field-types/index.tsx +15 -0
- package/src/field-types/password.tsx +46 -0
- package/src/field-types/stories/index.story.tsx +234 -3
- package/src/field-types/url.tsx +71 -0
- package/src/normalize-fields.ts +18 -0
- package/src/normalize-form-fields.ts +6 -0
- package/src/style.scss +1 -0
- package/src/test/dataform.tsx +2 -2
- package/src/test/filter-and-sort-data-view.js +148 -138
- package/src/test/normalize-fields.ts +114 -0
- package/src/types.ts +89 -6
- package/src/validation.ts +5 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/build/dataform-controls/boolean.js +0 -64
- package/build/dataform-controls/boolean.js.map +0 -1
- package/build/dataform-controls/utils/validated-text.js +0 -68
- package/build/dataform-controls/utils/validated-text.js.map +0 -1
- package/build-module/dataform-controls/boolean.js +0 -58
- package/build-module/dataform-controls/boolean.js.map +0 -1
- package/build-module/dataform-controls/utils/validated-text.js +0 -62
- package/build-module/dataform-controls/utils/validated-text.js.map +0 -1
- package/build-types/dataform-controls/boolean.d.ts +0 -6
- package/build-types/dataform-controls/boolean.d.ts.map +0 -1
- package/build-types/dataform-controls/utils/validated-text.d.ts +0 -12
- package/build-types/dataform-controls/utils/validated-text.d.ts.map +0 -1
- package/src/dataform-controls/boolean.tsx +0 -61
- package/src/dataform-controls/utils/validated-text.tsx +0 -79
package/CHANGELOG.md
CHANGED
|
@@ -2,12 +2,34 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 9.0.0 (2025-09-17)
|
|
6
|
+
|
|
7
|
+
### Breaking changes
|
|
8
|
+
|
|
9
|
+
- Remove `boolean` form control. Fields using `Edit: 'boolean'` must now use `Edit: 'checkbox'` or `Edit: 'toggle'` instead. Boolean field types now use checkboxes by default. [#71505](https://github.com/WordPress/gutenberg/pull/71505)
|
|
10
|
+
- DataViews: Custom `empty` elements are no longer wrapped in `<p>` tags to improve accessibility. [#71561](https://github.com/WordPress/gutenberg/pull/71561)
|
|
6
11
|
|
|
7
12
|
### Features
|
|
8
13
|
|
|
14
|
+
- Field API: introduce `setValue` to fix DataViews filters and DataForm panel layout (modal) when working with nested data. [#71604](https://github.com/WordPress/gutenberg/pull/71604)
|
|
9
15
|
- Introduce a new `DataViewsPicker` component. [#70971](https://github.com/WordPress/gutenberg/pull/70971)
|
|
10
16
|
- Dataform: Add new `telephone` field type and field control. [#71498](https://github.com/WordPress/gutenberg/pull/71498)
|
|
17
|
+
- DataForm: introduce a new `row` layout, check the README for details. [#71124](https://github.com/WordPress/gutenberg/pull/71124)
|
|
18
|
+
- Dataform: Add new `url` field type and field control. [#71518](https://github.com/WordPress/gutenberg/pull/71518)
|
|
19
|
+
- Dataform: Add new `password` field type and field control. [#71545](https://github.com/WordPress/gutenberg/pull/71545)
|
|
20
|
+
- DataForm: Add a textarea control for use with the `text` field type ([#71495](https://github.com/WordPress/gutenberg/pull/71495))
|
|
21
|
+
- DataViews: support groupBy in the list layout. [#71548](https://github.com/WordPress/gutenberg/pull/71548)
|
|
22
|
+
- DataForm: support validation in select control [#71665](https://github.com/WordPress/gutenberg/pull/71665)
|
|
23
|
+
- DataForm: support validation in toggleGroup control. ([#71666](https://github.com/WordPress/gutenberg/pull/71666))
|
|
24
|
+
- DataForm: Add object configuration support for Edit property with some options. ([#71582](https://github.com/WordPress/gutenberg/pull/71582))
|
|
25
|
+
- DataForm: Add summary field support for composed fields. ([#71614](https://github.com/WordPress/gutenberg/pull/71614))
|
|
26
|
+
- DataForm: update radio control to support `required` and `custom` validation. [#71664](https://github.com/WordPress/gutenberg/pull/71664)
|
|
27
|
+
|
|
28
|
+
### Bug Fixes
|
|
29
|
+
|
|
30
|
+
- DataViews grid layout: make sure media previews have rounded corners. [#71543](https://github.com/WordPress/gutenberg/pull/71543)
|
|
31
|
+
- DataForm regular layout: Remove label style overrides as they cause inconsistent results. ([#71574](https://github.com/WordPress/gutenberg/pull/71574))
|
|
32
|
+
- DataForm regular layout: Use BaseControl visual label for readonly fields when in top labelPosition. ([#71597](https://github.com/WordPress/gutenberg/pull/71597))
|
|
11
33
|
|
|
12
34
|
## 8.0.0 (2025-09-03)
|
|
13
35
|
|
package/README.md
CHANGED
|
@@ -426,7 +426,7 @@ Optional. Pass an object with a list of `perPageSizes` to control the available
|
|
|
426
426
|
|
|
427
427
|
#### `empty`: React node
|
|
428
428
|
|
|
429
|
-
|
|
429
|
+
An element to display when the `data` prop is empty. Defaults to `<p>No results</p>`.
|
|
430
430
|
|
|
431
431
|
### Composition modes
|
|
432
432
|
|
|
@@ -989,24 +989,119 @@ Example:
|
|
|
989
989
|
}
|
|
990
990
|
```
|
|
991
991
|
|
|
992
|
-
### `getValue`
|
|
992
|
+
### `getValue` and `setValue`
|
|
993
993
|
|
|
994
|
-
|
|
994
|
+
These functions control how field values are read from and written to your data structure.
|
|
995
995
|
|
|
996
|
-
-
|
|
996
|
+
Both functions are optional and automatically generated from the field's `id` when not provided. The `id` is treated as a dot-notation path (e.g., `"user.profile.name"` accesses `item.user.profile.name`).
|
|
997
|
+
|
|
998
|
+
#### `getValue`
|
|
999
|
+
|
|
1000
|
+
Function that extracts the field value from an item. This value is used to sort, filter, and display the field.
|
|
1001
|
+
|
|
1002
|
+
- Type: `function`.
|
|
997
1003
|
- Optional.
|
|
998
|
-
-
|
|
999
|
-
-
|
|
1000
|
-
|
|
1001
|
-
- Returns a value that represents the field.
|
|
1004
|
+
- Args:
|
|
1005
|
+
- `item`: the data item to be processed.
|
|
1006
|
+
- Returns the field's value.
|
|
1002
1007
|
|
|
1003
|
-
|
|
1008
|
+
#### `setValue`
|
|
1009
|
+
|
|
1010
|
+
Function that creates a partial item object with updated field values. This is used by DataForm for editing operations and determines the structure of data passed to the `onChange` callback.
|
|
1011
|
+
|
|
1012
|
+
- Type: `function`.
|
|
1013
|
+
- Optional.
|
|
1014
|
+
- Args:
|
|
1015
|
+
- `item`: the current item being edited.
|
|
1016
|
+
- `value`: the new value to be set for the field.
|
|
1017
|
+
- Returns a partial item object with the changes to be applied.
|
|
1018
|
+
|
|
1019
|
+
#### Simple field access
|
|
1020
|
+
|
|
1021
|
+
For basic field access, you only need to specify the field `id`. Both `getValue` and `setValue` are automatically generated:
|
|
1004
1022
|
|
|
1005
1023
|
```js
|
|
1024
|
+
// Data structure
|
|
1025
|
+
const item = {
|
|
1026
|
+
title: 'Hello World',
|
|
1027
|
+
author: 'John Doe'
|
|
1028
|
+
};
|
|
1029
|
+
|
|
1030
|
+
// Field definition
|
|
1006
1031
|
{
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
}
|
|
1032
|
+
id: 'title',
|
|
1033
|
+
label: 'Title'
|
|
1034
|
+
// getValue: automatically becomes ( { item } ) => item.title
|
|
1035
|
+
// setValue: automatically becomes ( { value } ) => ( { title: value } )
|
|
1036
|
+
}
|
|
1037
|
+
```
|
|
1038
|
+
|
|
1039
|
+
#### Nested data access
|
|
1040
|
+
|
|
1041
|
+
Use dot notation in the field `id` to access nested properties:
|
|
1042
|
+
|
|
1043
|
+
```js
|
|
1044
|
+
// Data structure
|
|
1045
|
+
const item = {
|
|
1046
|
+
user: {
|
|
1047
|
+
profile: {
|
|
1048
|
+
name: 'John Doe',
|
|
1049
|
+
email: 'john@example.com'
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
};
|
|
1053
|
+
|
|
1054
|
+
// Field definition - using dot notation (automatic)
|
|
1055
|
+
{
|
|
1056
|
+
id: 'user.profile.name',
|
|
1057
|
+
label: 'User Name'
|
|
1058
|
+
// getValue: automatically becomes ( { item } ) => item.user.profile.name
|
|
1059
|
+
// setValue: automatically becomes ( { value } ) => ( { user: { profile: { name: value } } } )
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
// Alternative - using simple ID with custom functions
|
|
1063
|
+
{
|
|
1064
|
+
id: 'userName',
|
|
1065
|
+
label: 'User Name',
|
|
1066
|
+
getValue: ( { item } ) => item.user.profile.name,
|
|
1067
|
+
setValue: ( { value } ) => ( {
|
|
1068
|
+
user: {
|
|
1069
|
+
profile: { name: value }
|
|
1070
|
+
}
|
|
1071
|
+
} )
|
|
1072
|
+
}
|
|
1073
|
+
```
|
|
1074
|
+
|
|
1075
|
+
#### Custom data transformation
|
|
1076
|
+
|
|
1077
|
+
Provide custom `getValue` and `setValue` functions when you need to transform data between the storage format and display format:
|
|
1078
|
+
|
|
1079
|
+
```js
|
|
1080
|
+
// Data structure
|
|
1081
|
+
const item = {
|
|
1082
|
+
user: {
|
|
1083
|
+
preferences: {
|
|
1084
|
+
notifications: true
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
};
|
|
1088
|
+
|
|
1089
|
+
// Field definition - transform boolean to string options
|
|
1090
|
+
{
|
|
1091
|
+
id: 'notifications',
|
|
1092
|
+
label: 'Notifications',
|
|
1093
|
+
Edit: 'radio',
|
|
1094
|
+
elements: [
|
|
1095
|
+
{ label: 'Enabled', value: 'enabled' },
|
|
1096
|
+
{ label: 'Disabled', value: 'disabled' }
|
|
1097
|
+
],
|
|
1098
|
+
getValue: ( { item } ) =>
|
|
1099
|
+
item.user.preferences.notifications === true ? 'enabled' : 'disabled',
|
|
1100
|
+
setValue: ( { value } ) => ( {
|
|
1101
|
+
user: {
|
|
1102
|
+
preferences: { notifications: value === 'enabled' }
|
|
1103
|
+
}
|
|
1104
|
+
} )
|
|
1010
1105
|
}
|
|
1011
1106
|
```
|
|
1012
1107
|
|
|
@@ -1379,7 +1474,7 @@ Example:
|
|
|
1379
1474
|
|
|
1380
1475
|
### `layout`
|
|
1381
1476
|
|
|
1382
|
-
Represents the type of layout used to render the field. It'll be one of Regular, Panel, or
|
|
1477
|
+
Represents the type of layout used to render the field. It'll be one of Regular, Panel, Card, or Row. This prop is the same as the `form.layout` prop.
|
|
1383
1478
|
|
|
1384
1479
|
#### Regular
|
|
1385
1480
|
|
|
@@ -1433,6 +1528,25 @@ For example:
|
|
|
1433
1528
|
}
|
|
1434
1529
|
```
|
|
1435
1530
|
|
|
1531
|
+
#### Row
|
|
1532
|
+
|
|
1533
|
+
- `type`: `row`. Required.
|
|
1534
|
+
- `alignment`: one of `start`, `center`, or `end`. Optional. `center` by default.
|
|
1535
|
+
|
|
1536
|
+
The Row layout displays fields horizontally in a single row. It's particularly useful for grouping related fields that should be displayed side by side. This layout can be used both as a top-level form layout and for individual field groups.
|
|
1537
|
+
|
|
1538
|
+
For example:
|
|
1539
|
+
|
|
1540
|
+
```js
|
|
1541
|
+
{
|
|
1542
|
+
id: 'field_id',
|
|
1543
|
+
layout: {
|
|
1544
|
+
type: 'row',
|
|
1545
|
+
alignment: 'start'
|
|
1546
|
+
},
|
|
1547
|
+
}
|
|
1548
|
+
```
|
|
1549
|
+
|
|
1436
1550
|
### `label`
|
|
1437
1551
|
|
|
1438
1552
|
The label used when displaying a combined field, this requires the use of `children` as well.
|
|
@@ -30,12 +30,54 @@ function InputWidget({
|
|
|
30
30
|
fields
|
|
31
31
|
}) {
|
|
32
32
|
const currentFilter = view.filters?.find(f => f.field === filter.field);
|
|
33
|
-
const field = fields.find(f => f.id === filter.field);
|
|
34
33
|
const currentValue = (0, _utils.getCurrentValue)(filter, currentFilter);
|
|
34
|
+
|
|
35
|
+
/*
|
|
36
|
+
* We are reusing the field.Edit component for filters. By doing so,
|
|
37
|
+
* we get for free a filter control specific to the field type
|
|
38
|
+
* and other aspects of the field API (Edit control configuration, etc.).
|
|
39
|
+
*
|
|
40
|
+
* This approach comes with an issue: the field.Edit controls work with getValue
|
|
41
|
+
* and setValue methods, which take an item (Item) as parameter. But, at this point,
|
|
42
|
+
* we don't have an item and we don't know how to create one, either.
|
|
43
|
+
*
|
|
44
|
+
* So, what we do is to prepare the data and the relevant field configuration
|
|
45
|
+
* as if Item was a plain object whose keys are the field ids:
|
|
46
|
+
*
|
|
47
|
+
* {
|
|
48
|
+
* [ fieldOne.id ]: value,
|
|
49
|
+
* [ fieldTwo.id ]: value,
|
|
50
|
+
* }
|
|
51
|
+
*
|
|
52
|
+
*/
|
|
53
|
+
const field = (0, _element.useMemo)(() => {
|
|
54
|
+
const currentField = fields.find(f => f.id === filter.field);
|
|
55
|
+
if (currentField) {
|
|
56
|
+
return {
|
|
57
|
+
...currentField,
|
|
58
|
+
// Deactivate validation for filters.
|
|
59
|
+
isValid: {
|
|
60
|
+
required: false,
|
|
61
|
+
custom: () => null
|
|
62
|
+
},
|
|
63
|
+
// Configure getValue/setValue as if Item was a plain object.
|
|
64
|
+
getValue: ({
|
|
65
|
+
item
|
|
66
|
+
}) => item[currentField.id],
|
|
67
|
+
setValue: ({
|
|
68
|
+
value
|
|
69
|
+
}) => ({
|
|
70
|
+
[currentField.id]: value
|
|
71
|
+
})
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return currentField;
|
|
75
|
+
}, [fields, filter.field]);
|
|
35
76
|
const data = (0, _element.useMemo)(() => {
|
|
36
77
|
var _view$filters;
|
|
37
|
-
return ((_view$filters = view.filters) !== null && _view$filters !== void 0 ? _view$filters : []).reduce((acc,
|
|
38
|
-
|
|
78
|
+
return ((_view$filters = view.filters) !== null && _view$filters !== void 0 ? _view$filters : []).reduce((acc, activeFilter) => {
|
|
79
|
+
// We can now assume the field is stored as a Item prop.
|
|
80
|
+
acc[activeFilter.field] = activeFilter.value;
|
|
39
81
|
return acc;
|
|
40
82
|
}, {});
|
|
41
83
|
}, [view.filters]);
|
|
@@ -44,7 +86,9 @@ function InputWidget({
|
|
|
44
86
|
if (!field || !currentFilter) {
|
|
45
87
|
return;
|
|
46
88
|
}
|
|
47
|
-
const nextValue =
|
|
89
|
+
const nextValue = field.getValue({
|
|
90
|
+
item: updatedData
|
|
91
|
+
});
|
|
48
92
|
if ((0, _es.default)(nextValue, currentValue)) {
|
|
49
93
|
return;
|
|
50
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_es","_interopRequireDefault","require","_compose","_element","_components","_utils","_jsxRuntime","InputWidget","filter","view","onChangeView","fields","currentFilter","filters","find","f","field","id","
|
|
1
|
+
{"version":3,"names":["_es","_interopRequireDefault","require","_compose","_element","_components","_utils","_jsxRuntime","InputWidget","filter","view","onChangeView","fields","currentFilter","filters","find","f","field","currentValue","getCurrentValue","useMemo","currentField","id","isValid","required","custom","getValue","item","setValue","value","data","_view$filters","reduce","acc","activeFilter","handleChange","useEvent","updatedData","_view$filters2","nextValue","fastDeepEqual","map","_filter","operator","operators","undefined","Edit","jsx","Flex","className","gap","direction","children","hideLabelFromVision","onChange"],"sources":["@wordpress/dataviews/src/components/dataviews-filters/input-widget.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { useEvent } from '@wordpress/compose';\nimport { useMemo } from '@wordpress/element';\nimport { Flex } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport type { View, NormalizedFilter, NormalizedField } from '../../types';\nimport { getCurrentValue } from './utils';\n\ninterface UserInputWidgetProps {\n\tview: View;\n\tfilter: NormalizedFilter;\n\tonChangeView: ( view: View ) => void;\n\tfields: NormalizedField< any >[];\n}\n\nexport default function InputWidget( {\n\tfilter,\n\tview,\n\tonChangeView,\n\tfields,\n}: UserInputWidgetProps ) {\n\tconst currentFilter = view.filters?.find(\n\t\t( f ) => f.field === filter.field\n\t);\n\tconst currentValue = getCurrentValue( filter, currentFilter );\n\n\t/*\n\t * We are reusing the field.Edit component for filters. By doing so,\n\t * we get for free a filter control specific to the field type\n\t * and other aspects of the field API (Edit control configuration, etc.).\n\t *\n\t * This approach comes with an issue: the field.Edit controls work with getValue\n\t * and setValue methods, which take an item (Item) as parameter. But, at this point,\n\t * we don't have an item and we don't know how to create one, either.\n\t *\n\t * So, what we do is to prepare the data and the relevant field configuration\n\t * as if Item was a plain object whose keys are the field ids:\n\t *\n\t * {\n\t * [ fieldOne.id ]: value,\n\t * [ fieldTwo.id ]: value,\n\t * }\n\t *\n\t */\n\tconst field = useMemo( () => {\n\t\tconst currentField = fields.find( ( f ) => f.id === filter.field );\n\t\tif ( currentField ) {\n\t\t\treturn {\n\t\t\t\t...currentField,\n\t\t\t\t// Deactivate validation for filters.\n\t\t\t\tisValid: {\n\t\t\t\t\trequired: false,\n\t\t\t\t\tcustom: () => null,\n\t\t\t\t},\n\t\t\t\t// Configure getValue/setValue as if Item was a plain object.\n\t\t\t\tgetValue: ( { item }: { item: any } ) =>\n\t\t\t\t\titem[ currentField.id ],\n\t\t\t\tsetValue: ( { value }: { value: any } ) => ( {\n\t\t\t\t\t[ currentField.id ]: value,\n\t\t\t\t} ),\n\t\t\t};\n\t\t}\n\t\treturn currentField;\n\t}, [ fields, filter.field ] );\n\n\tconst data = useMemo( () => {\n\t\treturn ( view.filters ?? [] ).reduce(\n\t\t\t( acc, activeFilter ) => {\n\t\t\t\t// We can now assume the field is stored as a Item prop.\n\t\t\t\tacc[ activeFilter.field ] = activeFilter.value;\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record< string, any >\n\t\t);\n\t}, [ view.filters ] );\n\n\tconst handleChange = useEvent( ( updatedData: Record< string, any > ) => {\n\t\tif ( ! field || ! currentFilter ) {\n\t\t\treturn;\n\t\t}\n\t\tconst nextValue = field.getValue( { item: updatedData } );\n\t\tif ( fastDeepEqual( nextValue, currentValue ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tonChangeView( {\n\t\t\t...view,\n\t\t\tfilters: ( view.filters ?? [] ).map( ( _filter ) =>\n\t\t\t\t_filter.field === filter.field\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t..._filter,\n\t\t\t\t\t\t\toperator:\n\t\t\t\t\t\t\t\tcurrentFilter.operator || filter.operators[ 0 ],\n\t\t\t\t\t\t\t// Consider empty strings as undefined:\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// - undefined as value means the filter is unset: the filter widget displays no value and the search returns all records\n\t\t\t\t\t\t\t// - empty string as value means \"search empty string\": returns only the records that have an empty string as value\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// In practice, this means the filter will not be able to find an empty string as the value.\n\t\t\t\t\t\t\tvalue: nextValue === '' ? undefined : nextValue,\n\t\t\t\t\t }\n\t\t\t\t\t: _filter\n\t\t\t),\n\t\t} );\n\t} );\n\n\tif ( ! field || ! field.Edit || ! currentFilter ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Flex\n\t\t\tclassName=\"dataviews-filters__user-input-widget\"\n\t\t\tgap={ 2.5 }\n\t\t\tdirection=\"column\"\n\t\t>\n\t\t\t<field.Edit\n\t\t\t\thideLabelFromVision\n\t\t\t\tdata={ data }\n\t\t\t\tfield={ field }\n\t\t\t\toperator={ currentFilter.operator }\n\t\t\t\tonChange={ handleChange }\n\t\t\t/>\n\t\t</Flex>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -41,7 +41,9 @@ function DataViewsLayout({
|
|
|
41
41
|
isItemClickable,
|
|
42
42
|
renderItemLink,
|
|
43
43
|
defaultLayouts,
|
|
44
|
-
empty = (0,
|
|
44
|
+
empty = /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
45
|
+
children: (0, _i18n.__)('No results')
|
|
46
|
+
})
|
|
45
47
|
} = (0, _element.useContext)(_dataviewsContext.default);
|
|
46
48
|
const ViewComponent = _dataviewsLayouts.VIEW_LAYOUTS.find(v => v.type === view.type && defaultLayouts[v.type])?.component;
|
|
47
49
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(ViewComponent, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_element","require","_i18n","_dataviewsContext","_interopRequireDefault","_dataviewsLayouts","_jsxRuntime","DataViewsLayout","className","actions","data","fields","getItemId","getItemLevel","isLoading","view","onChangeView","selection","onChangeSelection","setOpenedFilter","onClickItem","isItemClickable","renderItemLink","defaultLayouts","empty","__","useContext","DataViewsContext","ViewComponent","VIEW_LAYOUTS","find","v","type","component"
|
|
1
|
+
{"version":3,"names":["_element","require","_i18n","_dataviewsContext","_interopRequireDefault","_dataviewsLayouts","_jsxRuntime","DataViewsLayout","className","actions","data","fields","getItemId","getItemLevel","isLoading","view","onChangeView","selection","onChangeSelection","setOpenedFilter","onClickItem","isItemClickable","renderItemLink","defaultLayouts","empty","jsx","children","__","useContext","DataViewsContext","ViewComponent","VIEW_LAYOUTS","find","v","type","component"],"sources":["@wordpress/dataviews/src/components/dataviews-layout/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport type { ComponentType } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport { useContext } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport DataViewsContext from '../dataviews-context';\nimport { VIEW_LAYOUTS } from '../../dataviews-layouts';\nimport type { ViewBaseProps } from '../../types';\n\ntype DataViewsLayoutProps = {\n\tclassName?: string;\n};\n\nexport default function DataViewsLayout( { className }: DataViewsLayoutProps ) {\n\tconst {\n\t\tactions = [],\n\t\tdata,\n\t\tfields,\n\t\tgetItemId,\n\t\tgetItemLevel,\n\t\tisLoading,\n\t\tview,\n\t\tonChangeView,\n\t\tselection,\n\t\tonChangeSelection,\n\t\tsetOpenedFilter,\n\t\tonClickItem,\n\t\tisItemClickable,\n\t\trenderItemLink,\n\t\tdefaultLayouts,\n\t\tempty = <p>{ __( 'No results' ) }</p>,\n\t} = useContext( DataViewsContext );\n\n\tconst ViewComponent = VIEW_LAYOUTS.find(\n\t\t( v ) => v.type === view.type && defaultLayouts[ v.type ]\n\t)?.component as ComponentType< ViewBaseProps< any > >;\n\n\treturn (\n\t\t<ViewComponent\n\t\t\tclassName={ className }\n\t\t\tactions={ actions }\n\t\t\tdata={ data }\n\t\t\tfields={ fields }\n\t\t\tgetItemId={ getItemId }\n\t\t\tgetItemLevel={ getItemLevel }\n\t\t\tisLoading={ isLoading }\n\t\t\tonChangeView={ onChangeView }\n\t\t\tonChangeSelection={ onChangeSelection }\n\t\t\tselection={ selection }\n\t\t\tsetOpenedFilter={ setOpenedFilter }\n\t\t\tonClickItem={ onClickItem }\n\t\t\trenderItemLink={ renderItemLink }\n\t\t\tisItemClickable={ isItemClickable }\n\t\t\tview={ view }\n\t\t\tempty={ empty }\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;;AAQA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAKA,IAAAE,iBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AAAuD,IAAAK,WAAA,GAAAL,OAAA;AAfvD;AACA;AACA;;AAGA;AACA;AACA;;AAIA;AACA;AACA;;AASe,SAASM,eAAeA,CAAE;EAAEC;AAAgC,CAAC,EAAG;EAC9E,MAAM;IACLC,OAAO,GAAG,EAAE;IACZC,IAAI;IACJC,MAAM;IACNC,SAAS;IACTC,YAAY;IACZC,SAAS;IACTC,IAAI;IACJC,YAAY;IACZC,SAAS;IACTC,iBAAiB;IACjBC,eAAe;IACfC,WAAW;IACXC,eAAe;IACfC,cAAc;IACdC,cAAc;IACdC,KAAK,gBAAG,IAAAlB,WAAA,CAAAmB,GAAA;MAAAC,QAAA,EAAK,IAAAC,QAAE,EAAE,YAAa;IAAC,CAAK;EACrC,CAAC,GAAG,IAAAC,mBAAU,EAAEC,yBAAiB,CAAC;EAElC,MAAMC,aAAa,GAAGC,8BAAY,CAACC,IAAI,CACpCC,CAAC,IAAMA,CAAC,CAACC,IAAI,KAAKnB,IAAI,CAACmB,IAAI,IAAIX,cAAc,CAAEU,CAAC,CAACC,IAAI,CACxD,CAAC,EAAEC,SAAkD;EAErD,oBACC,IAAA7B,WAAA,CAAAmB,GAAA,EAACK,aAAa;IACbtB,SAAS,EAAGA,SAAW;IACvBC,OAAO,EAAGA,OAAS;IACnBC,IAAI,EAAGA,IAAM;IACbC,MAAM,EAAGA,MAAQ;IACjBC,SAAS,EAAGA,SAAW;IACvBC,YAAY,EAAGA,YAAc;IAC7BC,SAAS,EAAGA,SAAW;IACvBE,YAAY,EAAGA,YAAc;IAC7BE,iBAAiB,EAAGA,iBAAmB;IACvCD,SAAS,EAAGA,SAAW;IACvBE,eAAe,EAAGA,eAAiB;IACnCC,WAAW,EAAGA,WAAa;IAC3BE,cAAc,EAAGA,cAAgB;IACjCD,eAAe,EAAGA,eAAiB;IACnCN,IAAI,EAAGA,IAAM;IACbS,KAAK,EAAGA;EAAO,CACf,CAAC;AAEJ","ignoreList":[]}
|
|
@@ -23,12 +23,13 @@ function ArrayControl({
|
|
|
23
23
|
}) {
|
|
24
24
|
var _elements$map;
|
|
25
25
|
const {
|
|
26
|
-
id,
|
|
27
26
|
label,
|
|
28
27
|
placeholder,
|
|
29
|
-
elements
|
|
28
|
+
elements,
|
|
29
|
+
getValue,
|
|
30
|
+
setValue
|
|
30
31
|
} = field;
|
|
31
|
-
const value =
|
|
32
|
+
const value = getValue({
|
|
32
33
|
item: data
|
|
33
34
|
});
|
|
34
35
|
const findElementByValue = (0, _element.useCallback)(suggestionValue => {
|
|
@@ -52,10 +53,11 @@ function ArrayControl({
|
|
|
52
53
|
const tokenByLabel = findElementByLabel(token);
|
|
53
54
|
return tokenByLabel?.value || token;
|
|
54
55
|
});
|
|
55
|
-
onChange({
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
onChange(setValue({
|
|
57
|
+
item: data,
|
|
58
|
+
value: stringTokens
|
|
59
|
+
}));
|
|
60
|
+
}, [onChange, setValue, data, findElementByLabel]);
|
|
59
61
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.FormTokenField, {
|
|
60
62
|
label: hideLabelFromVision ? undefined : label,
|
|
61
63
|
value: arrayValue,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_components","require","_element","_jsxRuntime","ArrayControl","data","field","onChange","hideLabelFromVision","_elements$map","
|
|
1
|
+
{"version":3,"names":["_components","require","_element","_jsxRuntime","ArrayControl","data","field","onChange","hideLabelFromVision","_elements$map","label","placeholder","elements","getValue","setValue","value","item","findElementByValue","useCallback","suggestionValue","find","suggestion","findElementByLabel","suggestionLabel","arrayValue","useMemo","Array","isArray","map","token","tokenLabel","onChangeControl","tokens","stringTokens","tokenByLabel","jsx","FormTokenField","undefined","suggestions","__experimentalExpandOnFocus","length","__next40pxDefaultSize","__nextHasNoMarginBottom"],"sources":["@wordpress/dataviews/src/dataform-controls/array.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { FormTokenField } from '@wordpress/components';\nimport { useCallback, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\n\nexport default function ArrayControl< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { label, placeholder, elements, getValue, setValue } = field;\n\tconst value = getValue( { item: data } );\n\n\tconst findElementByValue = useCallback(\n\t\t( suggestionValue: string ) => {\n\t\t\treturn elements?.find(\n\t\t\t\t( suggestion ) => suggestion.value === suggestionValue\n\t\t\t);\n\t\t},\n\t\t[ elements ]\n\t);\n\n\tconst findElementByLabel = useCallback(\n\t\t( suggestionLabel: string ) => {\n\t\t\treturn elements?.find(\n\t\t\t\t( suggestion ) => suggestion.label === suggestionLabel\n\t\t\t);\n\t\t},\n\t\t[ elements ]\n\t);\n\n\t// Ensure value is an array\n\tconst arrayValue = useMemo(\n\t\t() =>\n\t\t\tArray.isArray( value )\n\t\t\t\t? value.map( ( token ) => {\n\t\t\t\t\t\tconst tokenLabel = findElementByValue( token )?.label;\n\t\t\t\t\t\treturn tokenLabel || token;\n\t\t\t\t } )\n\t\t\t\t: [],\n\t\t[ value, findElementByValue ]\n\t);\n\n\tconst onChangeControl = useCallback(\n\t\t( tokens: ( string | { value: string } )[] ) => {\n\t\t\t// Convert TokenItem objects to strings\n\t\t\tconst stringTokens = tokens.map( ( token ) => {\n\t\t\t\tif ( typeof token !== 'string' ) {\n\t\t\t\t\treturn token.value;\n\t\t\t\t}\n\n\t\t\t\tconst tokenByLabel = findElementByLabel( token );\n\n\t\t\t\treturn tokenByLabel?.value || token;\n\t\t\t} );\n\n\t\t\tonChange( setValue( { item: data, value: stringTokens } ) );\n\t\t},\n\t\t[ onChange, setValue, data, findElementByLabel ]\n\t);\n\n\treturn (\n\t\t<FormTokenField\n\t\t\tlabel={ hideLabelFromVision ? undefined : label }\n\t\t\tvalue={ arrayValue }\n\t\t\tonChange={ onChangeControl }\n\t\t\tplaceholder={ placeholder }\n\t\t\tsuggestions={\n\t\t\t\telements?.map( ( suggestion ) => suggestion.label ) ?? []\n\t\t\t}\n\t\t\t__experimentalExpandOnFocus={ elements && elements.length > 0 }\n\t\t\t__next40pxDefaultSize\n\t\t\t__nextHasNoMarginBottom\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;AAGA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAA0D,IAAAE,WAAA,GAAAF,OAAA;AAJ1D;AACA;AACA;;AAIA;AACA;AACA;;AAGe,SAASG,YAAYA,CAAU;EAC7CC,IAAI;EACJC,KAAK;EACLC,QAAQ;EACRC;AAC6B,CAAC,EAAG;EAAA,IAAAC,aAAA;EACjC,MAAM;IAAEC,KAAK;IAAEC,WAAW;IAAEC,QAAQ;IAAEC,QAAQ;IAAEC;EAAS,CAAC,GAAGR,KAAK;EAClE,MAAMS,KAAK,GAAGF,QAAQ,CAAE;IAAEG,IAAI,EAAEX;EAAK,CAAE,CAAC;EAExC,MAAMY,kBAAkB,GAAG,IAAAC,oBAAW,EACnCC,eAAuB,IAAM;IAC9B,OAAOP,QAAQ,EAAEQ,IAAI,CAClBC,UAAU,IAAMA,UAAU,CAACN,KAAK,KAAKI,eACxC,CAAC;EACF,CAAC,EACD,CAAEP,QAAQ,CACX,CAAC;EAED,MAAMU,kBAAkB,GAAG,IAAAJ,oBAAW,EACnCK,eAAuB,IAAM;IAC9B,OAAOX,QAAQ,EAAEQ,IAAI,CAClBC,UAAU,IAAMA,UAAU,CAACX,KAAK,KAAKa,eACxC,CAAC;EACF,CAAC,EACD,CAAEX,QAAQ,CACX,CAAC;;EAED;EACA,MAAMY,UAAU,GAAG,IAAAC,gBAAO,EACzB,MACCC,KAAK,CAACC,OAAO,CAAEZ,KAAM,CAAC,GACnBA,KAAK,CAACa,GAAG,CAAIC,KAAK,IAAM;IACxB,MAAMC,UAAU,GAAGb,kBAAkB,CAAEY,KAAM,CAAC,EAAEnB,KAAK;IACrD,OAAOoB,UAAU,IAAID,KAAK;EAC1B,CAAE,CAAC,GACH,EAAE,EACN,CAAEd,KAAK,EAAEE,kBAAkB,CAC5B,CAAC;EAED,MAAMc,eAAe,GAAG,IAAAb,oBAAW,EAChCc,MAAwC,IAAM;IAC/C;IACA,MAAMC,YAAY,GAAGD,MAAM,CAACJ,GAAG,CAAIC,KAAK,IAAM;MAC7C,IAAK,OAAOA,KAAK,KAAK,QAAQ,EAAG;QAChC,OAAOA,KAAK,CAACd,KAAK;MACnB;MAEA,MAAMmB,YAAY,GAAGZ,kBAAkB,CAAEO,KAAM,CAAC;MAEhD,OAAOK,YAAY,EAAEnB,KAAK,IAAIc,KAAK;IACpC,CAAE,CAAC;IAEHtB,QAAQ,CAAEO,QAAQ,CAAE;MAAEE,IAAI,EAAEX,IAAI;MAAEU,KAAK,EAAEkB;IAAa,CAAE,CAAE,CAAC;EAC5D,CAAC,EACD,CAAE1B,QAAQ,EAAEO,QAAQ,EAAET,IAAI,EAAEiB,kBAAkB,CAC/C,CAAC;EAED,oBACC,IAAAnB,WAAA,CAAAgC,GAAA,EAACnC,WAAA,CAAAoC,cAAc;IACd1B,KAAK,EAAGF,mBAAmB,GAAG6B,SAAS,GAAG3B,KAAO;IACjDK,KAAK,EAAGS,UAAY;IACpBjB,QAAQ,EAAGwB,eAAiB;IAC5BpB,WAAW,EAAGA,WAAa;IAC3B2B,WAAW,GAAA7B,aAAA,GACVG,QAAQ,EAAEgB,GAAG,CAAIP,UAAU,IAAMA,UAAU,CAACX,KAAM,CAAC,cAAAD,aAAA,cAAAA,aAAA,GAAI,EACvD;IACD8B,2BAA2B,EAAG3B,QAAQ,IAAIA,QAAQ,CAAC4B,MAAM,GAAG,CAAG;IAC/DC,qBAAqB;IACrBC,uBAAuB;EAAA,CACvB,CAAC;AAEJ","ignoreList":[]}
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.default = Checkbox;
|
|
8
|
+
var _deepmerge = _interopRequireDefault(require("deepmerge"));
|
|
7
9
|
var _components = require("@wordpress/components");
|
|
10
|
+
var _element = require("@wordpress/element");
|
|
11
|
+
var _lockUnlock = require("../lock-unlock");
|
|
8
12
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
|
+
/**
|
|
14
|
+
* External dependencies
|
|
15
|
+
*/
|
|
16
|
+
|
|
9
17
|
/**
|
|
10
18
|
* WordPress dependencies
|
|
11
19
|
*/
|
|
@@ -14,6 +22,9 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
14
22
|
* Internal dependencies
|
|
15
23
|
*/
|
|
16
24
|
|
|
25
|
+
const {
|
|
26
|
+
ValidatedCheckboxControl
|
|
27
|
+
} = (0, _lockUnlock.unlock)(_components.privateApis);
|
|
17
28
|
function Checkbox({
|
|
18
29
|
field,
|
|
19
30
|
onChange,
|
|
@@ -21,24 +32,45 @@ function Checkbox({
|
|
|
21
32
|
hideLabelFromVision
|
|
22
33
|
}) {
|
|
23
34
|
const {
|
|
24
|
-
id,
|
|
25
35
|
getValue,
|
|
36
|
+
setValue,
|
|
26
37
|
label,
|
|
27
38
|
description
|
|
28
39
|
} = field;
|
|
29
|
-
|
|
30
|
-
|
|
40
|
+
const [customValidity, setCustomValidity] = (0, _element.useState)(undefined);
|
|
41
|
+
const onChangeControl = (0, _element.useCallback)(() => {
|
|
42
|
+
onChange(setValue({
|
|
43
|
+
item: data,
|
|
44
|
+
value: !getValue({
|
|
45
|
+
item: data
|
|
46
|
+
})
|
|
47
|
+
}));
|
|
48
|
+
}, [data, getValue, onChange, setValue]);
|
|
49
|
+
const onValidateControl = (0, _element.useCallback)(newValue => {
|
|
50
|
+
const message = field.isValid?.custom?.((0, _deepmerge.default)(data, setValue({
|
|
51
|
+
item: data,
|
|
52
|
+
value: newValue
|
|
53
|
+
})), field);
|
|
54
|
+
if (message) {
|
|
55
|
+
setCustomValidity({
|
|
56
|
+
type: 'invalid',
|
|
57
|
+
message
|
|
58
|
+
});
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
setCustomValidity(undefined);
|
|
62
|
+
}, [data, field, setValue]);
|
|
63
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(ValidatedCheckboxControl, {
|
|
64
|
+
required: !!field.isValid?.required,
|
|
65
|
+
onValidate: onValidateControl,
|
|
66
|
+
customValidity: customValidity,
|
|
31
67
|
hidden: hideLabelFromVision,
|
|
32
68
|
label: label,
|
|
33
69
|
help: description,
|
|
34
70
|
checked: getValue({
|
|
35
71
|
item: data
|
|
36
72
|
}),
|
|
37
|
-
onChange:
|
|
38
|
-
[id]: !getValue({
|
|
39
|
-
item: data
|
|
40
|
-
})
|
|
41
|
-
})
|
|
73
|
+
onChange: onChangeControl
|
|
42
74
|
});
|
|
43
75
|
}
|
|
44
76
|
//# sourceMappingURL=checkbox.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_deepmerge","_interopRequireDefault","require","_components","_element","_lockUnlock","_jsxRuntime","ValidatedCheckboxControl","unlock","privateApis","Checkbox","field","onChange","data","hideLabelFromVision","getValue","setValue","label","description","customValidity","setCustomValidity","useState","undefined","onChangeControl","useCallback","item","value","onValidateControl","newValue","message","isValid","custom","deepMerge","type","jsx","required","onValidate","hidden","help","checked"],"sources":["@wordpress/dataviews/src/dataform-controls/checkbox.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport deepMerge from 'deepmerge';\n\n/**\n * WordPress dependencies\n */\nimport { privateApis } from '@wordpress/components';\nimport { useState, useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type { DataFormControlProps } from '../types';\nimport { unlock } from '../lock-unlock';\n\nconst { ValidatedCheckboxControl } = unlock( privateApis );\n\nexport default function Checkbox< Item >( {\n\tfield,\n\tonChange,\n\tdata,\n\thideLabelFromVision,\n}: DataFormControlProps< Item > ) {\n\tconst { getValue, setValue, label, description } = field;\n\tconst [ customValidity, setCustomValidity ] =\n\t\tuseState<\n\t\t\tReact.ComponentProps<\n\t\t\t\ttypeof ValidatedCheckboxControl\n\t\t\t>[ 'customValidity' ]\n\t\t>( undefined );\n\n\tconst onChangeControl = useCallback( () => {\n\t\tonChange(\n\t\t\tsetValue( { item: data, value: ! getValue( { item: data } ) } )\n\t\t);\n\t}, [ data, getValue, onChange, setValue ] );\n\n\tconst onValidateControl = useCallback(\n\t\t( newValue: any ) => {\n\t\t\tconst message = field.isValid?.custom?.(\n\t\t\t\tdeepMerge(\n\t\t\t\t\tdata,\n\t\t\t\t\tsetValue( {\n\t\t\t\t\t\titem: data,\n\t\t\t\t\t\tvalue: newValue,\n\t\t\t\t\t} ) as Partial< Item >\n\t\t\t\t),\n\t\t\t\tfield\n\t\t\t);\n\n\t\t\tif ( message ) {\n\t\t\t\tsetCustomValidity( {\n\t\t\t\t\ttype: 'invalid',\n\t\t\t\t\tmessage,\n\t\t\t\t} );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetCustomValidity( undefined );\n\t\t},\n\t\t[ data, field, setValue ]\n\t);\n\n\treturn (\n\t\t<ValidatedCheckboxControl\n\t\t\trequired={ !! field.isValid?.required }\n\t\t\tonValidate={ onValidateControl }\n\t\t\tcustomValidity={ customValidity }\n\t\t\thidden={ hideLabelFromVision }\n\t\t\tlabel={ label }\n\t\t\thelp={ description }\n\t\t\tchecked={ getValue( { item: data } ) }\n\t\t\tonChange={ onChangeControl }\n\t\t/>\n\t);\n}\n"],"mappings":";;;;;;;AAGA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AAKA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAMA,IAAAG,WAAA,GAAAH,OAAA;AAAwC,IAAAI,WAAA,GAAAJ,OAAA;AAfxC;AACA;AACA;;AAGA;AACA;AACA;;AAIA;AACA;AACA;;AAIA,MAAM;EAAEK;AAAyB,CAAC,GAAG,IAAAC,kBAAM,EAAEC,uBAAY,CAAC;AAE3C,SAASC,QAAQA,CAAU;EACzCC,KAAK;EACLC,QAAQ;EACRC,IAAI;EACJC;AAC6B,CAAC,EAAG;EACjC,MAAM;IAAEC,QAAQ;IAAEC,QAAQ;IAAEC,KAAK;IAAEC;EAAY,CAAC,GAAGP,KAAK;EACxD,MAAM,CAAEQ,cAAc,EAAEC,iBAAiB,CAAE,GAC1C,IAAAC,iBAAQ,EAILC,SAAU,CAAC;EAEf,MAAMC,eAAe,GAAG,IAAAC,oBAAW,EAAE,MAAM;IAC1CZ,QAAQ,CACPI,QAAQ,CAAE;MAAES,IAAI,EAAEZ,IAAI;MAAEa,KAAK,EAAE,CAAEX,QAAQ,CAAE;QAAEU,IAAI,EAAEZ;MAAK,CAAE;IAAE,CAAE,CAC/D,CAAC;EACF,CAAC,EAAE,CAAEA,IAAI,EAAEE,QAAQ,EAAEH,QAAQ,EAAEI,QAAQ,CAAG,CAAC;EAE3C,MAAMW,iBAAiB,GAAG,IAAAH,oBAAW,EAClCI,QAAa,IAAM;IACpB,MAAMC,OAAO,GAAGlB,KAAK,CAACmB,OAAO,EAAEC,MAAM,GACpC,IAAAC,kBAAS,EACRnB,IAAI,EACJG,QAAQ,CAAE;MACTS,IAAI,EAAEZ,IAAI;MACVa,KAAK,EAAEE;IACR,CAAE,CACH,CAAC,EACDjB,KACD,CAAC;IAED,IAAKkB,OAAO,EAAG;MACdT,iBAAiB,CAAE;QAClBa,IAAI,EAAE,SAAS;QACfJ;MACD,CAAE,CAAC;MACH;IACD;IAEAT,iBAAiB,CAAEE,SAAU,CAAC;EAC/B,CAAC,EACD,CAAET,IAAI,EAAEF,KAAK,EAAEK,QAAQ,CACxB,CAAC;EAED,oBACC,IAAAV,WAAA,CAAA4B,GAAA,EAAC3B,wBAAwB;IACxB4B,QAAQ,EAAG,CAAC,CAAExB,KAAK,CAACmB,OAAO,EAAEK,QAAU;IACvCC,UAAU,EAAGT,iBAAmB;IAChCR,cAAc,EAAGA,cAAgB;IACjCkB,MAAM,EAAGvB,mBAAqB;IAC9BG,KAAK,EAAGA,KAAO;IACfqB,IAAI,EAAGpB,WAAa;IACpBqB,OAAO,EAAGxB,QAAQ,CAAE;MAAEU,IAAI,EAAEZ;IAAK,CAAE,CAAG;IACtCD,QAAQ,EAAGW;EAAiB,CAC5B,CAAC;AAEJ","ignoreList":[]}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = Color;
|
|
8
|
+
var _colord = require("colord");
|
|
9
|
+
var _deepmerge = _interopRequireDefault(require("deepmerge"));
|
|
10
|
+
var _components = require("@wordpress/components");
|
|
11
|
+
var _element = require("@wordpress/element");
|
|
12
|
+
var _lockUnlock = require("../lock-unlock");
|
|
13
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
|
+
/**
|
|
15
|
+
* External dependencies
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* WordPress dependencies
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Internal dependencies
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
const {
|
|
27
|
+
ValidatedInputControl,
|
|
28
|
+
Picker
|
|
29
|
+
} = (0, _lockUnlock.unlock)(_components.privateApis);
|
|
30
|
+
const ColorPicker = ({
|
|
31
|
+
color,
|
|
32
|
+
onColorChange
|
|
33
|
+
}) => {
|
|
34
|
+
const validColor = color && (0, _colord.colord)(color).isValid() ? color : '#ffffff';
|
|
35
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Dropdown, {
|
|
36
|
+
renderToggle: ({
|
|
37
|
+
onToggle,
|
|
38
|
+
isOpen
|
|
39
|
+
}) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.__experimentalInputControlPrefixWrapper, {
|
|
40
|
+
variant: "icon",
|
|
41
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
|
|
42
|
+
type: "button",
|
|
43
|
+
onClick: onToggle,
|
|
44
|
+
style: {
|
|
45
|
+
width: '24px',
|
|
46
|
+
height: '24px',
|
|
47
|
+
borderRadius: '50%',
|
|
48
|
+
backgroundColor: validColor,
|
|
49
|
+
border: '1px solid #ddd',
|
|
50
|
+
cursor: 'pointer',
|
|
51
|
+
outline: isOpen ? '2px solid #007cba' : 'none',
|
|
52
|
+
outlineOffset: '2px',
|
|
53
|
+
display: 'flex',
|
|
54
|
+
alignItems: 'center',
|
|
55
|
+
justifyContent: 'center',
|
|
56
|
+
padding: 0,
|
|
57
|
+
margin: 0
|
|
58
|
+
},
|
|
59
|
+
"aria-label": "Open color picker"
|
|
60
|
+
})
|
|
61
|
+
}),
|
|
62
|
+
renderContent: () => /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
63
|
+
style: {
|
|
64
|
+
padding: '16px'
|
|
65
|
+
},
|
|
66
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Picker, {
|
|
67
|
+
color: (0, _colord.colord)(validColor),
|
|
68
|
+
onChange: onColorChange,
|
|
69
|
+
enableAlpha: true
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
function Color({
|
|
75
|
+
data,
|
|
76
|
+
field,
|
|
77
|
+
onChange,
|
|
78
|
+
hideLabelFromVision
|
|
79
|
+
}) {
|
|
80
|
+
const {
|
|
81
|
+
label,
|
|
82
|
+
placeholder,
|
|
83
|
+
description,
|
|
84
|
+
setValue
|
|
85
|
+
} = field;
|
|
86
|
+
const value = field.getValue({
|
|
87
|
+
item: data
|
|
88
|
+
}) || '';
|
|
89
|
+
const [customValidity, setCustomValidity] = (0, _element.useState)(undefined);
|
|
90
|
+
const handleColorChange = (0, _element.useCallback)(colorObject => {
|
|
91
|
+
onChange(setValue({
|
|
92
|
+
item: data,
|
|
93
|
+
value: colorObject.toHex()
|
|
94
|
+
}));
|
|
95
|
+
}, [data, onChange, setValue]);
|
|
96
|
+
const handleInputChange = (0, _element.useCallback)(newValue => {
|
|
97
|
+
onChange(setValue({
|
|
98
|
+
item: data,
|
|
99
|
+
value: newValue || ''
|
|
100
|
+
}));
|
|
101
|
+
}, [data, onChange, setValue]);
|
|
102
|
+
const onValidateControl = (0, _element.useCallback)(newValue => {
|
|
103
|
+
const message = field.isValid?.custom?.((0, _deepmerge.default)(data, setValue({
|
|
104
|
+
item: data,
|
|
105
|
+
value: newValue
|
|
106
|
+
})), field);
|
|
107
|
+
if (message) {
|
|
108
|
+
setCustomValidity({
|
|
109
|
+
type: 'invalid',
|
|
110
|
+
message
|
|
111
|
+
});
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
setCustomValidity(undefined);
|
|
115
|
+
}, [data, field, setValue]);
|
|
116
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(ValidatedInputControl, {
|
|
117
|
+
required: !!field.isValid?.required,
|
|
118
|
+
onValidate: onValidateControl,
|
|
119
|
+
customValidity: customValidity,
|
|
120
|
+
label: label,
|
|
121
|
+
placeholder: placeholder,
|
|
122
|
+
value: value,
|
|
123
|
+
help: description,
|
|
124
|
+
onChange: handleInputChange,
|
|
125
|
+
hideLabelFromVision: hideLabelFromVision,
|
|
126
|
+
type: "text",
|
|
127
|
+
prefix: /*#__PURE__*/(0, _jsxRuntime.jsx)(ColorPicker, {
|
|
128
|
+
color: value,
|
|
129
|
+
onColorChange: handleColorChange
|
|
130
|
+
})
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=color.js.map
|