@wordpress/dataviews 13.1.1-next.v.202603161435.0 → 14.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -6
- package/README.md +33 -7
- package/build/components/dataform-controls/array.cjs +2 -0
- package/build/components/dataform-controls/array.cjs.map +2 -2
- package/build/components/dataform-controls/checkbox.cjs +3 -1
- package/build/components/dataform-controls/checkbox.cjs.map +2 -2
- package/build/components/dataform-controls/color.cjs +8 -2
- package/build/components/dataform-controls/color.cjs.map +2 -2
- package/build/components/dataform-controls/date.cjs +31 -9
- package/build/components/dataform-controls/date.cjs.map +3 -3
- package/build/components/dataform-controls/datetime.cjs +17 -6
- package/build/components/dataform-controls/datetime.cjs.map +3 -3
- package/build/components/dataform-controls/password.cjs +4 -1
- package/build/components/dataform-controls/password.cjs.map +2 -2
- package/build/components/dataform-controls/radio.cjs +3 -1
- package/build/components/dataform-controls/radio.cjs.map +2 -2
- package/build/components/dataform-controls/select.cjs +3 -1
- package/build/components/dataform-controls/select.cjs.map +2 -2
- package/build/components/dataform-controls/textarea.cjs +2 -0
- package/build/components/dataform-controls/textarea.cjs.map +2 -2
- package/build/components/dataform-controls/toggle-group.cjs +3 -1
- package/build/components/dataform-controls/toggle-group.cjs.map +2 -2
- package/build/components/dataform-controls/toggle.cjs +3 -1
- package/build/components/dataform-controls/toggle.cjs.map +2 -2
- package/build/components/dataform-controls/utils/relative-date-control.cjs +5 -2
- package/build/components/dataform-controls/utils/relative-date-control.cjs.map +2 -2
- package/build/components/dataform-controls/utils/use-disabled-date-matchers.cjs +48 -0
- package/build/components/dataform-controls/utils/use-disabled-date-matchers.cjs.map +7 -0
- package/build/components/dataform-controls/utils/validated-input.cjs +2 -0
- package/build/components/dataform-controls/utils/validated-input.cjs.map +2 -2
- package/build/components/dataform-controls/utils/validated-number.cjs +3 -1
- package/build/components/dataform-controls/utils/validated-number.cjs.map +2 -2
- package/build/components/dataform-layouts/card/index.cjs +132 -128
- package/build/components/dataform-layouts/card/index.cjs.map +3 -3
- package/build/components/dataform-layouts/panel/summary-button.cjs +0 -1
- package/build/components/dataform-layouts/panel/summary-button.cjs.map +2 -2
- package/build/components/dataviews-bulk-actions/index.cjs +28 -5
- package/build/components/dataviews-bulk-actions/index.cjs.map +2 -2
- package/build/components/dataviews-context/index.cjs +2 -2
- package/build/components/dataviews-context/index.cjs.map +2 -2
- package/build/components/dataviews-filters/input-widget.cjs +4 -0
- package/build/components/dataviews-filters/input-widget.cjs.map +2 -2
- package/build/components/dataviews-footer/index.cjs +2 -3
- package/build/components/dataviews-footer/index.cjs.map +2 -2
- package/build/components/dataviews-layouts/grid/composite-grid.cjs +378 -249
- package/build/components/dataviews-layouts/grid/composite-grid.cjs.map +2 -2
- package/build/components/dataviews-layouts/picker-grid/index.cjs +60 -30
- package/build/components/dataviews-layouts/picker-grid/index.cjs.map +2 -2
- package/build/components/dataviews-layouts/picker-table/index.cjs +45 -30
- package/build/components/dataviews-layouts/picker-table/index.cjs.map +2 -2
- package/build/components/dataviews-layouts/table/index.cjs +0 -1
- package/build/components/dataviews-layouts/table/index.cjs.map +2 -2
- package/build/components/dataviews-layouts/utils/use-infinite-scroll.cjs +62 -0
- package/build/components/dataviews-layouts/utils/use-infinite-scroll.cjs.map +7 -0
- package/build/components/dataviews-pagination/index.cjs +1 -0
- package/build/components/dataviews-pagination/index.cjs.map +2 -2
- package/build/components/dataviews-picker-footer/index.cjs +23 -4
- package/build/components/dataviews-picker-footer/index.cjs.map +2 -2
- package/build/components/dataviews-search/index.cjs +2 -1
- package/build/components/dataviews-search/index.cjs.map +2 -2
- package/build/components/dataviews-selection-checkbox/index.cjs +3 -2
- package/build/components/dataviews-selection-checkbox/index.cjs.map +2 -2
- package/build/components/dataviews-view-config/index.cjs +0 -2
- package/build/components/dataviews-view-config/index.cjs.map +3 -3
- package/build/components/dataviews-view-config/infinite-scroll-toggle.cjs +0 -3
- package/build/components/dataviews-view-config/infinite-scroll-toggle.cjs.map +2 -2
- package/build/dataviews/index.cjs +47 -45
- package/build/dataviews/index.cjs.map +3 -3
- package/build/dataviews-picker/index.cjs +41 -33
- package/build/dataviews-picker/index.cjs.map +3 -3
- package/build/field-types/date.cjs +4 -1
- package/build/field-types/date.cjs.map +2 -2
- package/build/field-types/datetime.cjs +4 -1
- package/build/field-types/datetime.cjs.map +2 -2
- package/build/field-types/index.cjs +1 -0
- package/build/field-types/index.cjs.map +2 -2
- package/build/field-types/utils/get-is-valid.cjs +29 -24
- package/build/field-types/utils/get-is-valid.cjs.map +2 -2
- package/build/field-types/utils/is-valid-date-boundary.cjs +64 -0
- package/build/field-types/utils/is-valid-date-boundary.cjs.map +7 -0
- package/build/hooks/index.cjs +11 -2
- package/build/hooks/index.cjs.map +2 -2
- package/build/hooks/use-data.cjs +146 -9
- package/build/hooks/use-data.cjs.map +2 -2
- package/build/hooks/use-infinite-scroll.cjs +208 -0
- package/build/hooks/use-infinite-scroll.cjs.map +7 -0
- package/build/hooks/use-selected-items.cjs +57 -0
- package/build/hooks/use-selected-items.cjs.map +7 -0
- package/build/types/dataviews.cjs.map +1 -1
- package/build/types/field-api.cjs.map +1 -1
- package/build/utils/filter-sort-and-paginate.cjs +5 -1
- package/build/utils/filter-sort-and-paginate.cjs.map +2 -2
- package/build/utils/get-footer-message.cjs +8 -8
- package/build/utils/get-footer-message.cjs.map +2 -2
- package/build-module/components/dataform-controls/array.mjs +2 -0
- package/build-module/components/dataform-controls/array.mjs.map +2 -2
- package/build-module/components/dataform-controls/checkbox.mjs +3 -1
- package/build-module/components/dataform-controls/checkbox.mjs.map +2 -2
- package/build-module/components/dataform-controls/color.mjs +8 -2
- package/build-module/components/dataform-controls/color.mjs.map +2 -2
- package/build-module/components/dataform-controls/date.mjs +31 -9
- package/build-module/components/dataform-controls/date.mjs.map +2 -2
- package/build-module/components/dataform-controls/datetime.mjs +17 -6
- package/build-module/components/dataform-controls/datetime.mjs.map +2 -2
- package/build-module/components/dataform-controls/password.mjs +4 -1
- package/build-module/components/dataform-controls/password.mjs.map +2 -2
- package/build-module/components/dataform-controls/radio.mjs +3 -1
- package/build-module/components/dataform-controls/radio.mjs.map +2 -2
- package/build-module/components/dataform-controls/select.mjs +3 -1
- package/build-module/components/dataform-controls/select.mjs.map +2 -2
- package/build-module/components/dataform-controls/textarea.mjs +2 -0
- package/build-module/components/dataform-controls/textarea.mjs.map +2 -2
- package/build-module/components/dataform-controls/toggle-group.mjs +3 -1
- package/build-module/components/dataform-controls/toggle-group.mjs.map +2 -2
- package/build-module/components/dataform-controls/toggle.mjs +3 -1
- package/build-module/components/dataform-controls/toggle.mjs.map +2 -2
- package/build-module/components/dataform-controls/utils/relative-date-control.mjs +5 -2
- package/build-module/components/dataform-controls/utils/relative-date-control.mjs.map +2 -2
- package/build-module/components/dataform-controls/utils/use-disabled-date-matchers.mjs +27 -0
- package/build-module/components/dataform-controls/utils/use-disabled-date-matchers.mjs.map +7 -0
- package/build-module/components/dataform-controls/utils/validated-input.mjs +2 -0
- package/build-module/components/dataform-controls/utils/validated-input.mjs.map +2 -2
- package/build-module/components/dataform-controls/utils/validated-number.mjs +3 -1
- package/build-module/components/dataform-controls/utils/validated-number.mjs.map +2 -2
- package/build-module/components/dataform-layouts/card/index.mjs +132 -133
- package/build-module/components/dataform-layouts/card/index.mjs.map +2 -2
- package/build-module/components/dataform-layouts/panel/summary-button.mjs +0 -1
- package/build-module/components/dataform-layouts/panel/summary-button.mjs.map +2 -2
- package/build-module/components/dataviews-bulk-actions/index.mjs +28 -5
- package/build-module/components/dataviews-bulk-actions/index.mjs.map +2 -2
- package/build-module/components/dataviews-context/index.mjs +2 -2
- package/build-module/components/dataviews-context/index.mjs.map +2 -2
- package/build-module/components/dataviews-filters/input-widget.mjs +4 -0
- package/build-module/components/dataviews-filters/input-widget.mjs.map +2 -2
- package/build-module/components/dataviews-footer/index.mjs +2 -3
- package/build-module/components/dataviews-footer/index.mjs.map +2 -2
- package/build-module/components/dataviews-layouts/grid/composite-grid.mjs +387 -250
- package/build-module/components/dataviews-layouts/grid/composite-grid.mjs.map +2 -2
- package/build-module/components/dataviews-layouts/picker-grid/index.mjs +64 -31
- package/build-module/components/dataviews-layouts/picker-grid/index.mjs.map +2 -2
- package/build-module/components/dataviews-layouts/picker-table/index.mjs +45 -30
- package/build-module/components/dataviews-layouts/picker-table/index.mjs.map +2 -2
- package/build-module/components/dataviews-layouts/table/index.mjs +0 -1
- package/build-module/components/dataviews-layouts/table/index.mjs.map +2 -2
- package/build-module/components/dataviews-layouts/utils/use-infinite-scroll.mjs +26 -0
- package/build-module/components/dataviews-layouts/utils/use-infinite-scroll.mjs.map +7 -0
- package/build-module/components/dataviews-pagination/index.mjs +1 -0
- package/build-module/components/dataviews-pagination/index.mjs.map +2 -2
- package/build-module/components/dataviews-picker-footer/index.mjs +23 -4
- package/build-module/components/dataviews-picker-footer/index.mjs.map +2 -2
- package/build-module/components/dataviews-search/index.mjs +2 -1
- package/build-module/components/dataviews-search/index.mjs.map +2 -2
- package/build-module/components/dataviews-selection-checkbox/index.mjs +3 -2
- package/build-module/components/dataviews-selection-checkbox/index.mjs.map +2 -2
- package/build-module/components/dataviews-view-config/index.mjs +0 -2
- package/build-module/components/dataviews-view-config/index.mjs.map +2 -2
- package/build-module/components/dataviews-view-config/infinite-scroll-toggle.mjs +0 -3
- package/build-module/components/dataviews-view-config/infinite-scroll-toggle.mjs.map +2 -2
- package/build-module/dataviews/index.mjs +55 -47
- package/build-module/dataviews/index.mjs.map +2 -2
- package/build-module/dataviews-picker/index.mjs +49 -35
- package/build-module/dataviews-picker/index.mjs.map +2 -2
- package/build-module/field-types/date.mjs +4 -1
- package/build-module/field-types/date.mjs.map +2 -2
- package/build-module/field-types/datetime.mjs +4 -1
- package/build-module/field-types/datetime.mjs.map +2 -2
- package/build-module/field-types/index.mjs +1 -0
- package/build-module/field-types/index.mjs.map +2 -2
- package/build-module/field-types/utils/get-is-valid.mjs +29 -24
- package/build-module/field-types/utils/get-is-valid.mjs.map +2 -2
- package/build-module/field-types/utils/is-valid-date-boundary.mjs +38 -0
- package/build-module/field-types/utils/is-valid-date-boundary.mjs.map +7 -0
- package/build-module/hooks/index.mjs +7 -1
- package/build-module/hooks/index.mjs.map +2 -2
- package/build-module/hooks/use-data.mjs +147 -10
- package/build-module/hooks/use-data.mjs.map +2 -2
- package/build-module/hooks/use-infinite-scroll.mjs +188 -0
- package/build-module/hooks/use-infinite-scroll.mjs.map +7 -0
- package/build-module/hooks/use-selected-items.mjs +36 -0
- package/build-module/hooks/use-selected-items.mjs.map +7 -0
- package/build-module/utils/filter-sort-and-paginate.mjs +5 -1
- package/build-module/utils/filter-sort-and-paginate.mjs.map +2 -2
- package/build-module/utils/get-footer-message.mjs +8 -8
- package/build-module/utils/get-footer-message.mjs.map +2 -2
- package/build-style/style-rtl.css +75 -52
- package/build-style/style.css +75 -52
- package/build-types/components/dataform-controls/array.d.ts.map +1 -1
- package/build-types/components/dataform-controls/checkbox.d.ts.map +1 -1
- package/build-types/components/dataform-controls/color.d.ts.map +1 -1
- package/build-types/components/dataform-controls/date.d.ts.map +1 -1
- package/build-types/components/dataform-controls/datetime.d.ts +1 -1
- package/build-types/components/dataform-controls/datetime.d.ts.map +1 -1
- package/build-types/components/dataform-controls/password.d.ts.map +1 -1
- package/build-types/components/dataform-controls/radio.d.ts.map +1 -1
- package/build-types/components/dataform-controls/select.d.ts.map +1 -1
- package/build-types/components/dataform-controls/textarea.d.ts.map +1 -1
- package/build-types/components/dataform-controls/toggle-group.d.ts.map +1 -1
- package/build-types/components/dataform-controls/toggle.d.ts.map +1 -1
- package/build-types/components/dataform-controls/utils/relative-date-control.d.ts.map +1 -1
- package/build-types/components/dataform-controls/utils/use-disabled-date-matchers.d.ts +16 -0
- package/build-types/components/dataform-controls/utils/use-disabled-date-matchers.d.ts.map +1 -0
- package/build-types/components/dataform-controls/utils/validated-input.d.ts.map +1 -1
- package/build-types/components/dataform-controls/utils/validated-number.d.ts.map +1 -1
- package/build-types/components/dataform-layouts/card/index.d.ts.map +1 -1
- package/build-types/components/dataform-layouts/panel/summary-button.d.ts.map +1 -1
- package/build-types/components/dataviews-bulk-actions/index.d.ts +2 -1
- package/build-types/components/dataviews-bulk-actions/index.d.ts.map +1 -1
- package/build-types/components/dataviews-context/index.d.ts +3 -3
- package/build-types/components/dataviews-context/index.d.ts.map +1 -1
- package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -1
- package/build-types/components/dataviews-footer/index.d.ts.map +1 -1
- package/build-types/components/dataviews-layouts/grid/composite-grid.d.ts.map +1 -1
- package/build-types/components/dataviews-layouts/index.d.ts +6 -6
- package/build-types/components/dataviews-layouts/picker-grid/index.d.ts.map +1 -1
- package/build-types/components/dataviews-layouts/picker-table/index.d.ts.map +1 -1
- package/build-types/components/dataviews-layouts/table/index.d.ts.map +1 -1
- package/build-types/components/dataviews-layouts/utils/use-infinite-scroll.d.ts +22 -0
- package/build-types/components/dataviews-layouts/utils/use-infinite-scroll.d.ts.map +1 -0
- package/build-types/components/dataviews-pagination/index.d.ts.map +1 -1
- package/build-types/components/dataviews-picker-footer/index.d.ts.map +1 -1
- package/build-types/components/dataviews-search/index.d.ts +1 -1
- package/build-types/components/dataviews-search/index.d.ts.map +1 -1
- package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -1
- package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
- package/build-types/components/dataviews-view-config/infinite-scroll-toggle.d.ts +1 -1
- package/build-types/components/dataviews-view-config/infinite-scroll-toggle.d.ts.map +1 -1
- package/build-types/constants.d.ts +2 -2
- package/build-types/dataform/stories/index.story.d.ts +11 -1
- package/build-types/dataform/stories/index.story.d.ts.map +1 -1
- package/build-types/dataform/stories/layout-regular.d.ts +2 -1
- package/build-types/dataform/stories/layout-regular.d.ts.map +1 -1
- package/build-types/dataform/stories/validation.d.ts.map +1 -1
- package/build-types/dataviews/index.d.ts +1 -2
- package/build-types/dataviews/index.d.ts.map +1 -1
- package/build-types/dataviews/stories/fixtures.d.ts.map +1 -1
- package/build-types/dataviews/stories/free-composition.d.ts.map +1 -1
- package/build-types/dataviews/stories/index.story.d.ts +11 -0
- package/build-types/dataviews/stories/index.story.d.ts.map +1 -1
- package/build-types/dataviews/stories/infinite-scroll.d.ts.map +1 -1
- package/build-types/dataviews/stories/with-card.d.ts.map +1 -1
- package/build-types/dataviews-picker/index.d.ts +3 -3
- package/build-types/dataviews-picker/index.d.ts.map +1 -1
- package/build-types/dataviews-picker/stories/fixtures.d.ts.map +1 -1
- package/build-types/dataviews-picker/stories/index.story.d.ts.map +1 -1
- package/build-types/field-types/array.d.ts +1 -1
- package/build-types/field-types/array.d.ts.map +1 -1
- package/build-types/field-types/boolean.d.ts +1 -1
- package/build-types/field-types/boolean.d.ts.map +1 -1
- package/build-types/field-types/color.d.ts +1 -1
- package/build-types/field-types/color.d.ts.map +1 -1
- package/build-types/field-types/date.d.ts +3 -0
- package/build-types/field-types/date.d.ts.map +1 -1
- package/build-types/field-types/datetime.d.ts +3 -0
- package/build-types/field-types/datetime.d.ts.map +1 -1
- package/build-types/field-types/email.d.ts +1 -1
- package/build-types/field-types/email.d.ts.map +1 -1
- package/build-types/field-types/index.d.ts.map +1 -1
- package/build-types/field-types/integer.d.ts +1 -1
- package/build-types/field-types/integer.d.ts.map +1 -1
- package/build-types/field-types/number.d.ts +1 -1
- package/build-types/field-types/number.d.ts.map +1 -1
- package/build-types/field-types/stories/index.story.d.ts +37 -15
- package/build-types/field-types/stories/index.story.d.ts.map +1 -1
- package/build-types/field-types/utils/get-is-valid.d.ts.map +1 -1
- package/build-types/field-types/utils/is-valid-date-boundary.d.ts +7 -0
- package/build-types/field-types/utils/is-valid-date-boundary.d.ts.map +1 -0
- package/build-types/hooks/index.d.ts +3 -0
- package/build-types/hooks/index.d.ts.map +1 -1
- package/build-types/hooks/test/use-data.d.ts +2 -0
- package/build-types/hooks/test/use-data.d.ts.map +1 -0
- package/build-types/hooks/use-data.d.ts +41 -3
- package/build-types/hooks/use-data.d.ts.map +1 -1
- package/build-types/hooks/use-infinite-scroll.d.ts +21 -0
- package/build-types/hooks/use-infinite-scroll.d.ts.map +1 -0
- package/build-types/hooks/use-selected-items.d.ts +19 -0
- package/build-types/hooks/use-selected-items.d.ts.map +1 -0
- package/build-types/types/dataviews.d.ts +15 -1
- package/build-types/types/dataviews.d.ts.map +1 -1
- package/build-types/types/field-api.d.ts +39 -13
- package/build-types/types/field-api.d.ts.map +1 -1
- package/build-types/utils/filter-sort-and-paginate.d.ts.map +1 -1
- package/build-types/utils/get-footer-message.d.ts +3 -2
- package/build-types/utils/get-footer-message.d.ts.map +1 -1
- package/build-wp/index.js +3264 -2713
- package/package.json +19 -19
- package/src/components/dataform-controls/array.tsx +2 -0
- package/src/components/dataform-controls/checkbox.tsx +2 -0
- package/src/components/dataform-controls/color.tsx +7 -0
- package/src/components/dataform-controls/date.tsx +30 -4
- package/src/components/dataform-controls/datetime.tsx +36 -11
- package/src/components/dataform-controls/password.tsx +3 -0
- package/src/components/dataform-controls/radio.tsx +2 -0
- package/src/components/dataform-controls/select.tsx +2 -0
- package/src/components/dataform-controls/textarea.tsx +2 -0
- package/src/components/dataform-controls/toggle-group.tsx +2 -0
- package/src/components/dataform-controls/toggle.tsx +2 -0
- package/src/components/dataform-controls/utils/relative-date-control.tsx +3 -0
- package/src/components/dataform-controls/utils/use-disabled-date-matchers.ts +48 -0
- package/src/components/dataform-controls/utils/validated-input.tsx +2 -0
- package/src/components/dataform-controls/utils/validated-number.tsx +2 -0
- package/src/components/dataform-layouts/card/index.tsx +171 -146
- package/src/components/dataform-layouts/card/style.scss +8 -5
- package/src/components/dataform-layouts/panel/style.scss +4 -5
- package/src/components/dataform-layouts/panel/summary-button.tsx +0 -1
- package/src/components/dataviews-bulk-actions/index.tsx +28 -1
- package/src/components/dataviews-context/index.ts +4 -4
- package/src/components/dataviews-filters/input-widget.tsx +4 -0
- package/src/components/dataviews-filters/style.scss +2 -2
- package/src/components/dataviews-footer/index.tsx +1 -6
- package/src/components/dataviews-layouts/activity/style.scss +3 -3
- package/src/components/dataviews-layouts/grid/composite-grid.tsx +433 -284
- package/src/components/dataviews-layouts/grid/style.scss +5 -1
- package/src/components/dataviews-layouts/list/style.scss +1 -1
- package/src/components/dataviews-layouts/picker-grid/index.tsx +49 -15
- package/src/components/dataviews-layouts/picker-grid/style.scss +1 -1
- package/src/components/dataviews-layouts/picker-table/index.tsx +45 -23
- package/src/components/dataviews-layouts/picker-table/style.scss +1 -1
- package/src/components/dataviews-layouts/table/index.tsx +0 -2
- package/src/components/dataviews-layouts/utils/use-infinite-scroll.ts +64 -0
- package/src/components/dataviews-pagination/index.tsx +1 -0
- package/src/components/dataviews-picker-footer/index.tsx +21 -1
- package/src/components/dataviews-search/index.tsx +2 -1
- package/src/components/dataviews-selection-checkbox/index.tsx +4 -2
- package/src/components/dataviews-view-config/index.tsx +0 -2
- package/src/components/dataviews-view-config/infinite-scroll-toggle.tsx +0 -5
- package/src/dataform/stories/content.story.tsx +1 -1
- package/src/dataform/stories/data-adapter.tsx +6 -6
- package/src/dataform/stories/index.story.tsx +7 -0
- package/src/dataform/stories/layout-card.tsx +5 -5
- package/src/dataform/stories/layout-details.tsx +5 -5
- package/src/dataform/stories/layout-panel.tsx +9 -9
- package/src/dataform/stories/layout-regular.tsx +31 -10
- package/src/dataform/stories/layout-row.tsx +9 -9
- package/src/dataform/stories/validation.tsx +25 -10
- package/src/dataviews/index.tsx +68 -59
- package/src/dataviews/stories/empty.tsx +4 -4
- package/src/dataviews/stories/fixtures.tsx +288 -0
- package/src/dataviews/stories/free-composition.tsx +14 -13
- package/src/dataviews/stories/index.story.tsx +19 -2
- package/src/dataviews/stories/infinite-scroll.tsx +16 -96
- package/src/dataviews/stories/layout-custom.tsx +1 -1
- package/src/dataviews/stories/layout-grid.tsx +1 -1
- package/src/dataviews/stories/layout-list.tsx +1 -1
- package/src/dataviews/stories/layout-table.tsx +1 -1
- package/src/dataviews/stories/minimal-ui.tsx +1 -1
- package/src/dataviews/stories/with-card.tsx +30 -23
- package/src/dataviews/style.scss +6 -8
- package/src/dataviews/test/dataviews.tsx +94 -15
- package/src/dataviews-picker/index.tsx +57 -41
- package/src/dataviews-picker/stories/fixtures.tsx +270 -0
- package/src/dataviews-picker/stories/index.story.tsx +62 -133
- package/src/dataviews-picker/test/dataviews-picker.tsx +79 -2
- package/src/field-types/date.tsx +3 -0
- package/src/field-types/datetime.tsx +3 -0
- package/src/field-types/index.tsx +4 -0
- package/src/field-types/stories/index.story.tsx +79 -6
- package/src/field-types/test/normalize-fields.ts +44 -0
- package/src/field-types/utils/get-is-valid.ts +44 -31
- package/src/field-types/utils/is-valid-date-boundary.ts +80 -0
- package/src/hooks/index.ts +3 -0
- package/src/hooks/test/use-data.ts +791 -0
- package/src/hooks/test/use-form-validity.ts +479 -0
- package/src/hooks/use-data.ts +288 -21
- package/src/hooks/use-infinite-scroll.ts +304 -0
- package/src/hooks/use-selected-items.ts +72 -0
- package/src/types/dataviews.ts +17 -1
- package/src/types/field-api.ts +43 -12
- package/src/utils/filter-sort-and-paginate.ts +13 -1
- package/src/utils/get-footer-message.ts +12 -9
- package/src/utils/test/filter-sort-and-paginate.js +78 -54
|
@@ -57,6 +57,10 @@
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.dataviews-view-grid,
|
|
63
|
+
.dataviews-view-grid-infinite-scroll {
|
|
60
64
|
|
|
61
65
|
.dataviews-view-grid__card {
|
|
62
66
|
height: 100%;
|
|
@@ -246,7 +250,7 @@
|
|
|
246
250
|
}
|
|
247
251
|
|
|
248
252
|
.dataviews-view-grid__media--clickable {
|
|
249
|
-
cursor:
|
|
253
|
+
cursor: var(--wpds-cursor-control);
|
|
250
254
|
}
|
|
251
255
|
|
|
252
256
|
.dataviews-view-grid__group-header {
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
} from '@wordpress/components';
|
|
17
17
|
import { __, sprintf } from '@wordpress/i18n';
|
|
18
18
|
import { useInstanceId } from '@wordpress/compose';
|
|
19
|
-
import { useContext } from '@wordpress/element';
|
|
19
|
+
import { useContext, useRef } from '@wordpress/element';
|
|
20
20
|
import { Stack } from '@wordpress/ui';
|
|
21
21
|
|
|
22
22
|
/**
|
|
@@ -35,6 +35,11 @@ import type { SetSelection } from '../../../types/private';
|
|
|
35
35
|
import { GridItems } from '../utils/grid-items';
|
|
36
36
|
const { Badge } = unlock( componentsPrivateApis );
|
|
37
37
|
import getDataByGroup from '../utils/get-data-by-group';
|
|
38
|
+
import { useGridColumns } from '../grid/preview-size-picker';
|
|
39
|
+
import {
|
|
40
|
+
useIntersectionObserver,
|
|
41
|
+
usePlaceholdersNeeded,
|
|
42
|
+
} from '../utils/use-infinite-scroll';
|
|
38
43
|
|
|
39
44
|
interface GridItemProps< Item > {
|
|
40
45
|
view: ViewPickerGridType;
|
|
@@ -73,7 +78,12 @@ function GridItem< Item >( {
|
|
|
73
78
|
}: GridItemProps< Item > ) {
|
|
74
79
|
const { showTitle = true, showMedia = true, showDescription = true } = view;
|
|
75
80
|
const id = getItemId( item );
|
|
81
|
+
const elementRef = useRef< HTMLButtonElement >( null );
|
|
82
|
+
|
|
76
83
|
const isSelected = selection.includes( id );
|
|
84
|
+
|
|
85
|
+
useIntersectionObserver( elementRef, posinset );
|
|
86
|
+
|
|
77
87
|
const renderedMediaField = mediaField?.render ? (
|
|
78
88
|
<mediaField.render
|
|
79
89
|
item={ item }
|
|
@@ -88,6 +98,7 @@ function GridItem< Item >( {
|
|
|
88
98
|
|
|
89
99
|
return (
|
|
90
100
|
<Composite.Item
|
|
101
|
+
ref={ elementRef }
|
|
91
102
|
aria-label={
|
|
92
103
|
titleField
|
|
93
104
|
? titleField.getValue( { item } ) || __( '(no title)' )
|
|
@@ -105,6 +116,7 @@ function GridItem< Item >( {
|
|
|
105
116
|
} ) }
|
|
106
117
|
aria-selected={ isSelected }
|
|
107
118
|
onClick={ () => {
|
|
119
|
+
// Toggle in/out of selection array
|
|
108
120
|
if ( isSelected ) {
|
|
109
121
|
onChangeSelection(
|
|
110
122
|
selection.filter( ( itemId ) => id !== itemId )
|
|
@@ -318,12 +330,21 @@ function ViewPickerGrid< Item >( {
|
|
|
318
330
|
: null;
|
|
319
331
|
const dataByGroup = groupField ? getDataByGroup( data, groupField ) : null;
|
|
320
332
|
|
|
321
|
-
const isInfiniteScroll =
|
|
333
|
+
const isInfiniteScroll =
|
|
334
|
+
( view.infiniteScrollEnabled && ! dataByGroup ) ?? false;
|
|
322
335
|
|
|
323
336
|
const currentPage = view?.page ?? 1;
|
|
324
337
|
const perPage = view?.perPage ?? 0;
|
|
325
338
|
const setSize = isInfiniteScroll ? paginationInfo?.totalItems : undefined;
|
|
326
339
|
|
|
340
|
+
// Calculate placeholders needed for infinite scroll
|
|
341
|
+
const gridColumns = useGridColumns();
|
|
342
|
+
const placeholdersNeeded = usePlaceholdersNeeded(
|
|
343
|
+
data,
|
|
344
|
+
isInfiniteScroll,
|
|
345
|
+
gridColumns
|
|
346
|
+
);
|
|
347
|
+
|
|
327
348
|
return (
|
|
328
349
|
<>
|
|
329
350
|
{
|
|
@@ -378,10 +399,12 @@ function ViewPickerGrid< Item >( {
|
|
|
378
399
|
}
|
|
379
400
|
>
|
|
380
401
|
{ groupItems.map( ( item ) => {
|
|
402
|
+
// Use position from item if available (infinite scroll), otherwise calculate.
|
|
381
403
|
const posInSet =
|
|
404
|
+
( item as any ).position ??
|
|
382
405
|
( currentPage - 1 ) * perPage +
|
|
383
|
-
|
|
384
|
-
|
|
406
|
+
data.indexOf( item ) +
|
|
407
|
+
1;
|
|
385
408
|
return (
|
|
386
409
|
<GridItem
|
|
387
410
|
key={ getItemId( item ) }
|
|
@@ -451,17 +474,28 @@ function ViewPickerGrid< Item >( {
|
|
|
451
474
|
aria-multiselectable={ isMultiselect }
|
|
452
475
|
aria-label={ itemListLabel }
|
|
453
476
|
>
|
|
454
|
-
{
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
477
|
+
{ /* Render placeholders for unloaded items in first row */ }
|
|
478
|
+
{ Array.from( { length: placeholdersNeeded } ).map(
|
|
479
|
+
( _, index ) => (
|
|
480
|
+
<Composite.Item
|
|
481
|
+
key={ `placeholder-${ index }` }
|
|
482
|
+
render={ ( { children, ...props } ) => (
|
|
483
|
+
<Stack
|
|
484
|
+
direction="column"
|
|
485
|
+
children={ children }
|
|
486
|
+
{ ...props }
|
|
487
|
+
/>
|
|
488
|
+
) }
|
|
489
|
+
role="option"
|
|
490
|
+
aria-hidden
|
|
491
|
+
tabIndex={ -1 }
|
|
492
|
+
className="dataviews-view-picker-grid__card dataviews-view-picker-grid__placeholder"
|
|
493
|
+
/>
|
|
494
|
+
)
|
|
495
|
+
) }
|
|
496
|
+
{ data.map( ( item ) => {
|
|
497
|
+
// Use position from item for accessibility in infinite scroll mode.
|
|
498
|
+
const posinset = ( item as any ).position;
|
|
465
499
|
|
|
466
500
|
return (
|
|
467
501
|
<GridItem
|
|
@@ -33,6 +33,7 @@ import type { SetSelection } from '../../../types/private';
|
|
|
33
33
|
import ColumnHeaderMenu from '../table/column-header-menu';
|
|
34
34
|
import ColumnPrimary from '../table/column-primary';
|
|
35
35
|
import getDataByGroup from '../utils/get-data-by-group';
|
|
36
|
+
import { useIntersectionObserver } from '../utils/use-infinite-scroll';
|
|
36
37
|
|
|
37
38
|
interface TableColumnFieldProps< Item > {
|
|
38
39
|
fields: NormalizedField< Item >[];
|
|
@@ -95,8 +96,13 @@ function TableRow< Item >( {
|
|
|
95
96
|
posinset,
|
|
96
97
|
}: TableRowProps< Item > ) {
|
|
97
98
|
const { paginationInfo } = useContext( DataViewsContext );
|
|
99
|
+
|
|
98
100
|
const isSelected = selection.includes( id );
|
|
101
|
+
|
|
99
102
|
const [ isHovered, setIsHovered ] = useState( false );
|
|
103
|
+
const elementRef = useRef< HTMLButtonElement >( null );
|
|
104
|
+
|
|
105
|
+
useIntersectionObserver( elementRef, posinset );
|
|
100
106
|
const {
|
|
101
107
|
showTitle = true,
|
|
102
108
|
showMedia = true,
|
|
@@ -119,6 +125,7 @@ function TableRow< Item >( {
|
|
|
119
125
|
return (
|
|
120
126
|
<Composite.Item
|
|
121
127
|
key={ id }
|
|
128
|
+
ref={ elementRef }
|
|
122
129
|
render={ ( { children, ...props } ) => (
|
|
123
130
|
<tr
|
|
124
131
|
className={ clsx( 'dataviews-view-table__row', {
|
|
@@ -136,6 +143,7 @@ function TableRow< Item >( {
|
|
|
136
143
|
aria-posinset={ posinset }
|
|
137
144
|
role={ infiniteScrollEnabled ? 'article' : 'option' }
|
|
138
145
|
onClick={ () => {
|
|
146
|
+
// Toggle in/out of selection array
|
|
139
147
|
if ( isSelected ) {
|
|
140
148
|
onChangeSelection(
|
|
141
149
|
selection.filter( ( itemId ) => id !== itemId )
|
|
@@ -150,6 +158,7 @@ function TableRow< Item >( {
|
|
|
150
158
|
>
|
|
151
159
|
<td
|
|
152
160
|
className="dataviews-view-table__checkbox-column"
|
|
161
|
+
// eslint-disable-next-line jsx-a11y/no-interactive-element-to-noninteractive-role
|
|
153
162
|
role="presentation"
|
|
154
163
|
>
|
|
155
164
|
<div className="dataviews-view-table__cell-content-wrapper">
|
|
@@ -167,7 +176,10 @@ function TableRow< Item >( {
|
|
|
167
176
|
</td>
|
|
168
177
|
|
|
169
178
|
{ hasPrimaryColumn && (
|
|
170
|
-
<td
|
|
179
|
+
<td
|
|
180
|
+
// eslint-disable-next-line jsx-a11y/no-interactive-element-to-noninteractive-role
|
|
181
|
+
role="presentation"
|
|
182
|
+
>
|
|
171
183
|
<ColumnPrimary
|
|
172
184
|
item={ item }
|
|
173
185
|
titleField={ showTitle ? titleField : undefined }
|
|
@@ -192,6 +204,7 @@ function TableRow< Item >( {
|
|
|
192
204
|
maxWidth,
|
|
193
205
|
minWidth,
|
|
194
206
|
} }
|
|
207
|
+
// eslint-disable-next-line jsx-a11y/no-interactive-element-to-noninteractive-role
|
|
195
208
|
role="presentation"
|
|
196
209
|
>
|
|
197
210
|
<TableColumnField
|
|
@@ -236,6 +249,12 @@ function ViewPickerTable< Item >( {
|
|
|
236
249
|
}
|
|
237
250
|
} );
|
|
238
251
|
|
|
252
|
+
const groupField = view.groupBy?.field
|
|
253
|
+
? fields.find( ( f ) => f.id === view.groupBy?.field )
|
|
254
|
+
: null;
|
|
255
|
+
const dataByGroup = groupField ? getDataByGroup( data, groupField ) : null;
|
|
256
|
+
const isInfiniteScroll = view.infiniteScrollEnabled && ! dataByGroup;
|
|
257
|
+
|
|
239
258
|
const tableNoticeId = useId();
|
|
240
259
|
|
|
241
260
|
if ( nextHeaderMenuToFocus ) {
|
|
@@ -264,10 +283,6 @@ function ViewPickerTable< Item >( {
|
|
|
264
283
|
( field ) => field.id === view.descriptionField
|
|
265
284
|
);
|
|
266
285
|
|
|
267
|
-
const groupField = view.groupBy?.field
|
|
268
|
-
? fields.find( ( f ) => f.id === view.groupBy?.field )
|
|
269
|
-
: null;
|
|
270
|
-
const dataByGroup = groupField ? getDataByGroup( data, groupField ) : null;
|
|
271
286
|
const { showTitle = true, showMedia = true, showDescription = true } = view;
|
|
272
287
|
const hasPrimaryColumn =
|
|
273
288
|
( titleField && showTitle ) ||
|
|
@@ -285,7 +300,6 @@ function ViewPickerTable< Item >( {
|
|
|
285
300
|
headerMenuRefs.current.delete( column );
|
|
286
301
|
}
|
|
287
302
|
};
|
|
288
|
-
const isInfiniteScroll = view.infiniteScrollEnabled && ! dataByGroup;
|
|
289
303
|
|
|
290
304
|
return (
|
|
291
305
|
<>
|
|
@@ -319,6 +333,7 @@ function ViewPickerTable< Item >( {
|
|
|
319
333
|
data={ data }
|
|
320
334
|
actions={ actions }
|
|
321
335
|
getItemId={ getItemId }
|
|
336
|
+
disableSelectAll={ isInfiniteScroll }
|
|
322
337
|
/>
|
|
323
338
|
) }
|
|
324
339
|
</th>
|
|
@@ -400,6 +415,7 @@ function ViewPickerTable< Item >( {
|
|
|
400
415
|
1
|
|
401
416
|
}
|
|
402
417
|
className="dataviews-view-table__group-header-cell"
|
|
418
|
+
// eslint-disable-next-line jsx-a11y/no-interactive-element-to-noninteractive-role
|
|
403
419
|
role="presentation"
|
|
404
420
|
>
|
|
405
421
|
{ view.groupBy?.showLabel === false
|
|
@@ -441,23 +457,29 @@ function ViewPickerTable< Item >( {
|
|
|
441
457
|
orientation="vertical"
|
|
442
458
|
>
|
|
443
459
|
{ hasData &&
|
|
444
|
-
data.map( ( item, index ) =>
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
460
|
+
data.map( ( item, index ) => {
|
|
461
|
+
const itemId = getItemId( item );
|
|
462
|
+
// Use position from item for accessibility in infinite scroll mode.
|
|
463
|
+
const posinset = ( item as any ).position;
|
|
464
|
+
|
|
465
|
+
return (
|
|
466
|
+
<TableRow
|
|
467
|
+
key={ itemId }
|
|
468
|
+
item={ item }
|
|
469
|
+
fields={ fields }
|
|
470
|
+
id={ itemId || index.toString() }
|
|
471
|
+
view={ view }
|
|
472
|
+
titleField={ titleField }
|
|
473
|
+
mediaField={ mediaField }
|
|
474
|
+
descriptionField={ descriptionField }
|
|
475
|
+
selection={ selection }
|
|
476
|
+
getItemId={ getItemId }
|
|
477
|
+
onChangeSelection={ onChangeSelection }
|
|
478
|
+
multiselect={ isMultiselect }
|
|
479
|
+
posinset={ posinset }
|
|
480
|
+
/>
|
|
481
|
+
);
|
|
482
|
+
} ) }
|
|
461
483
|
</Composite>
|
|
462
484
|
) }
|
|
463
485
|
</table>
|
|
@@ -267,7 +267,6 @@ function TableRow< Item >( {
|
|
|
267
267
|
// itself (to toggle row selection) without erroneously
|
|
268
268
|
// intercepting click events from ItemActions.
|
|
269
269
|
|
|
270
|
-
/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */
|
|
271
270
|
<td
|
|
272
271
|
className={ clsx( 'dataviews-view-table__actions-column', {
|
|
273
272
|
'dataviews-view-table__actions-column--sticky': true,
|
|
@@ -278,7 +277,6 @@ function TableRow< Item >( {
|
|
|
278
277
|
>
|
|
279
278
|
<ItemActions item={ item } actions={ actions } />
|
|
280
279
|
</td>
|
|
281
|
-
/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */
|
|
282
280
|
) }
|
|
283
281
|
</tr>
|
|
284
282
|
);
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useContext, useEffect } from '@wordpress/element';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import DataViewsContext from '../../dataviews-context';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Hook to set up an IntersectionObserver for infinite scroll items.
|
|
13
|
+
* Observes the element and triggers the callback when the item becomes visible.
|
|
14
|
+
*
|
|
15
|
+
* @param elementRef - Ref to the DOM element to observe.
|
|
16
|
+
* @param posinset - The position of the item in the set (1-based index).
|
|
17
|
+
*/
|
|
18
|
+
export function useIntersectionObserver(
|
|
19
|
+
elementRef: React.RefObject< HTMLElement | null >,
|
|
20
|
+
posinset: number | undefined
|
|
21
|
+
) {
|
|
22
|
+
const { intersectionObserver } = useContext( DataViewsContext );
|
|
23
|
+
|
|
24
|
+
useEffect( () => {
|
|
25
|
+
const element = elementRef.current;
|
|
26
|
+
if ( ! element || posinset === undefined || ! intersectionObserver ) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
intersectionObserver.observe( element );
|
|
31
|
+
|
|
32
|
+
return () => {
|
|
33
|
+
intersectionObserver.unobserve( element );
|
|
34
|
+
};
|
|
35
|
+
}, [ elementRef, intersectionObserver, posinset ] );
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Hook to calculate the number of placeholder items needed for the first row
|
|
40
|
+
* in an infinite scroll grid layout.
|
|
41
|
+
*
|
|
42
|
+
* When items are loaded starting from a position other than 1, placeholders
|
|
43
|
+
* are needed to maintain proper grid alignment.
|
|
44
|
+
*
|
|
45
|
+
* @param data - The array of data items.
|
|
46
|
+
* @param isInfiniteScroll - Whether infinite scroll is enabled.
|
|
47
|
+
* @param gridColumns - The number of columns in the grid.
|
|
48
|
+
* @return The number of placeholder items needed.
|
|
49
|
+
*/
|
|
50
|
+
export function usePlaceholdersNeeded< Item >(
|
|
51
|
+
data: Item[],
|
|
52
|
+
isInfiniteScroll: boolean,
|
|
53
|
+
gridColumns: number
|
|
54
|
+
): number {
|
|
55
|
+
const hasData = !! data?.length;
|
|
56
|
+
const firstItemPosition =
|
|
57
|
+
hasData && isInfiniteScroll
|
|
58
|
+
? ( data[ 0 ] as { position?: number } ).position
|
|
59
|
+
: undefined;
|
|
60
|
+
|
|
61
|
+
return firstItemPosition && gridColumns
|
|
62
|
+
? ( firstItemPosition - 1 ) % gridColumns
|
|
63
|
+
: 0;
|
|
64
|
+
}
|
|
@@ -32,15 +32,32 @@ function BulkSelectionCheckbox< Item >( {
|
|
|
32
32
|
onChangeSelection,
|
|
33
33
|
data,
|
|
34
34
|
getItemId,
|
|
35
|
+
disableSelectAll = false,
|
|
35
36
|
}: {
|
|
36
37
|
selection: string[];
|
|
37
38
|
selectedItems: Item[];
|
|
38
39
|
onChangeSelection: SetSelection;
|
|
39
40
|
data: Item[];
|
|
40
41
|
getItemId: ( item: Item ) => string;
|
|
42
|
+
disableSelectAll?: boolean;
|
|
41
43
|
} ) {
|
|
44
|
+
const hasSelection = selection.length > 0;
|
|
42
45
|
const areAllSelected = selectedItems.length === data.length;
|
|
43
46
|
|
|
47
|
+
if ( disableSelectAll ) {
|
|
48
|
+
return (
|
|
49
|
+
<CheckboxControl
|
|
50
|
+
className="dataviews-view-table-selection-checkbox"
|
|
51
|
+
checked={ hasSelection }
|
|
52
|
+
disabled={ ! hasSelection }
|
|
53
|
+
onChange={ () => {
|
|
54
|
+
onChangeSelection( [] );
|
|
55
|
+
} }
|
|
56
|
+
aria-label={ __( 'Deselect all' ) }
|
|
57
|
+
/>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
44
61
|
return (
|
|
45
62
|
<CheckboxControl
|
|
46
63
|
className="dataviews-view-table-selection-checkbox"
|
|
@@ -136,6 +153,7 @@ export function DataViewsPickerFooter() {
|
|
|
136
153
|
getItemId,
|
|
137
154
|
actions = EMPTY_ARRAY,
|
|
138
155
|
paginationInfo,
|
|
156
|
+
view,
|
|
139
157
|
} = useContext( DataViewsContext );
|
|
140
158
|
|
|
141
159
|
const isMultiselect = useIsMultiselectPicker( actions );
|
|
@@ -143,7 +161,8 @@ export function DataViewsPickerFooter() {
|
|
|
143
161
|
const message = getFooterMessage(
|
|
144
162
|
selection.length,
|
|
145
163
|
data.length,
|
|
146
|
-
paginationInfo.totalItems
|
|
164
|
+
paginationInfo.totalItems,
|
|
165
|
+
!! view.infiniteScrollEnabled
|
|
147
166
|
);
|
|
148
167
|
|
|
149
168
|
const selectedItems = useMemo(
|
|
@@ -173,6 +192,7 @@ export function DataViewsPickerFooter() {
|
|
|
173
192
|
onChangeSelection={ onChangeSelection }
|
|
174
193
|
data={ data }
|
|
175
194
|
getItemId={ getItemId }
|
|
195
|
+
disableSelectAll={ !! view.infiniteScrollEnabled }
|
|
176
196
|
/>
|
|
177
197
|
) }
|
|
178
198
|
<span className="dataviews-bulk-actions-footer__item-count">
|
|
@@ -35,7 +35,8 @@ const DataViewsSearch = memo( function Search( { label }: SearchProps ) {
|
|
|
35
35
|
if ( debouncedSearch !== viewRef.current?.search ) {
|
|
36
36
|
onChangeViewRef.current( {
|
|
37
37
|
...viewRef.current,
|
|
38
|
-
page: 1,
|
|
38
|
+
page: view.page ? 1 : undefined,
|
|
39
|
+
startPosition: view.startPosition ? 1 : undefined,
|
|
39
40
|
search: debouncedSearch,
|
|
40
41
|
} );
|
|
41
42
|
}
|
|
@@ -30,7 +30,8 @@ export default function DataViewsSelectionCheckbox< Item >( {
|
|
|
30
30
|
...extraProps
|
|
31
31
|
}: DataViewsSelectionCheckboxProps< Item > ) {
|
|
32
32
|
const id = getItemId( item );
|
|
33
|
-
const
|
|
33
|
+
const isInSelectionArray = selection.includes( id );
|
|
34
|
+
const checked = ! disabled && isInSelectionArray;
|
|
34
35
|
|
|
35
36
|
// Fallback label to ensure accessibility
|
|
36
37
|
const selectionLabel =
|
|
@@ -47,8 +48,9 @@ export default function DataViewsSelectionCheckbox< Item >( {
|
|
|
47
48
|
return;
|
|
48
49
|
}
|
|
49
50
|
|
|
51
|
+
// Toggle in/out of selection array
|
|
50
52
|
onChangeSelection(
|
|
51
|
-
|
|
53
|
+
isInSelectionArray
|
|
52
54
|
? selection.filter( ( itemId ) => id !== itemId )
|
|
53
55
|
: [ ...selection, id ]
|
|
54
56
|
);
|
|
@@ -31,7 +31,6 @@ import { SORTING_DIRECTIONS, sortIcons, sortLabels } from '../../constants';
|
|
|
31
31
|
import { VIEW_LAYOUTS } from '../dataviews-layouts';
|
|
32
32
|
import type { View } from '../../types';
|
|
33
33
|
import DataViewsContext from '../dataviews-context';
|
|
34
|
-
import InfiniteScrollToggle from './infinite-scroll-toggle';
|
|
35
34
|
import { PropertiesSection } from './properties-section';
|
|
36
35
|
import { unlock } from '../../lock-unlock';
|
|
37
36
|
|
|
@@ -346,7 +345,6 @@ export function DataviewsViewConfigDropdown() {
|
|
|
346
345
|
{ !! activeLayout?.viewConfigOptions && (
|
|
347
346
|
<activeLayout.viewConfigOptions />
|
|
348
347
|
) }
|
|
349
|
-
<InfiniteScrollToggle />
|
|
350
348
|
<ItemsPerPageControl />
|
|
351
349
|
<PropertiesSection />
|
|
352
350
|
</Stack>
|
|
@@ -15,11 +15,6 @@ export default function InfiniteScrollToggle() {
|
|
|
15
15
|
const { view, onChangeView } = context;
|
|
16
16
|
const infiniteScrollEnabled = view.infiniteScrollEnabled ?? false;
|
|
17
17
|
|
|
18
|
-
// Only render the toggle if an infinite scroll handler is available
|
|
19
|
-
if ( ! context.hasInfiniteScrollHandler ) {
|
|
20
|
-
return null;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
18
|
return (
|
|
24
19
|
<ToggleControl
|
|
25
20
|
label={ __( 'Enable infinite scroll' ) }
|
|
@@ -297,7 +297,7 @@ export const HighLevelHelpText: Story = {
|
|
|
297
297
|
fields: [
|
|
298
298
|
{
|
|
299
299
|
id: 'accountForm',
|
|
300
|
-
label: 'Account
|
|
300
|
+
label: 'Account information',
|
|
301
301
|
description:
|
|
302
302
|
'We collect this information to create your account and provide personalized services. Your data will be kept secure and used only for account management and service improvements.',
|
|
303
303
|
children: [ 'name', 'email', 'phone' ],
|
|
@@ -54,17 +54,17 @@ const DataAdapterComponent = () => {
|
|
|
54
54
|
// for nested data based on the field id.
|
|
55
55
|
{
|
|
56
56
|
id: 'user.profile.name',
|
|
57
|
-
label: 'User
|
|
57
|
+
label: 'User name',
|
|
58
58
|
type: 'text',
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
61
|
id: 'user.profile.email',
|
|
62
|
-
label: 'User
|
|
62
|
+
label: 'User email',
|
|
63
63
|
type: 'email',
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
66
|
id: 'user.profile.tags',
|
|
67
|
-
label: 'User
|
|
67
|
+
label: 'User tags',
|
|
68
68
|
type: 'array',
|
|
69
69
|
placeholder: 'Enter comma-separated tags',
|
|
70
70
|
description:
|
|
@@ -101,13 +101,13 @@ const DataAdapterComponent = () => {
|
|
|
101
101
|
// Example of deriving data by leveraging setValue method.
|
|
102
102
|
{
|
|
103
103
|
id: 'revenue.total',
|
|
104
|
-
label: 'Total
|
|
104
|
+
label: 'Total revenue',
|
|
105
105
|
type: 'integer',
|
|
106
106
|
readOnly: true,
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
109
|
id: 'revenue.pricePerUnit',
|
|
110
|
-
label: 'Price
|
|
110
|
+
label: 'Price per unit',
|
|
111
111
|
type: 'integer',
|
|
112
112
|
setValue: ( { item, value } ) => ( {
|
|
113
113
|
revenue: {
|
|
@@ -174,7 +174,7 @@ const DataAdapterComponent = () => {
|
|
|
174
174
|
fields: [
|
|
175
175
|
{
|
|
176
176
|
id: 'userProfile',
|
|
177
|
-
label: 'User
|
|
177
|
+
label: 'User profile',
|
|
178
178
|
children: [
|
|
179
179
|
'user.profile.name',
|
|
180
180
|
'user.profile.email',
|
|
@@ -93,6 +93,13 @@ export const LayoutRegular = {
|
|
|
93
93
|
description: 'Chooses the label position.',
|
|
94
94
|
options: [ 'default', 'top', 'side', 'none' ],
|
|
95
95
|
},
|
|
96
|
+
disabled: {
|
|
97
|
+
control: { type: 'boolean' },
|
|
98
|
+
description: 'Disable all fields in the form.',
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
args: {
|
|
102
|
+
disabled: false,
|
|
96
103
|
},
|
|
97
104
|
};
|
|
98
105
|
|
|
@@ -44,7 +44,7 @@ const LayoutCardComponent = ( {
|
|
|
44
44
|
const customerFields: Field< Customer >[] = [
|
|
45
45
|
{
|
|
46
46
|
id: 'name',
|
|
47
|
-
label: 'Customer
|
|
47
|
+
label: 'Customer name',
|
|
48
48
|
type: 'text',
|
|
49
49
|
},
|
|
50
50
|
{
|
|
@@ -70,17 +70,17 @@ const LayoutCardComponent = ( {
|
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
id: 'shippingAddress',
|
|
73
|
-
label: 'Shipping
|
|
73
|
+
label: 'Shipping address',
|
|
74
74
|
type: 'text',
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
77
|
id: 'billingAddress',
|
|
78
|
-
label: 'Billing
|
|
78
|
+
label: 'Billing address',
|
|
79
79
|
type: 'text',
|
|
80
80
|
},
|
|
81
81
|
{
|
|
82
82
|
id: 'displayPayments',
|
|
83
|
-
label: 'Display
|
|
83
|
+
label: 'Display payments?',
|
|
84
84
|
type: 'boolean',
|
|
85
85
|
},
|
|
86
86
|
{
|
|
@@ -112,7 +112,7 @@ const LayoutCardComponent = ( {
|
|
|
112
112
|
},
|
|
113
113
|
{
|
|
114
114
|
id: 'dueDate',
|
|
115
|
-
label: 'Due
|
|
115
|
+
label: 'Due date',
|
|
116
116
|
type: 'text',
|
|
117
117
|
render: ( { item } ) => {
|
|
118
118
|
return <Badge>Due on: { item.dueDate }</Badge>;
|