@wordpress/dataviews 4.22.0 → 5.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 +39 -0
- package/README.md +147 -32
- package/build/components/dataviews/index.js +71 -37
- package/build/components/dataviews/index.js.map +1 -1
- package/build/components/dataviews-context/index.js +15 -1
- package/build/components/dataviews-context/index.js.map +1 -1
- package/build/components/dataviews-filters/{filter-summary.js → filter.js} +108 -17
- package/build/components/dataviews-filters/filter.js.map +1 -0
- package/build/components/dataviews-filters/index.js +21 -20
- package/build/components/dataviews-filters/index.js.map +1 -1
- package/build/components/dataviews-filters/input-widget.js +76 -0
- package/build/components/dataviews-filters/input-widget.js.map +1 -0
- package/build/components/dataviews-filters/search-widget.js +33 -39
- package/build/components/dataviews-filters/search-widget.js.map +1 -1
- package/build/components/dataviews-filters/utils.js +25 -0
- package/build/components/dataviews-filters/utils.js.map +1 -0
- package/build/components/dataviews-item-actions/index.js +1 -1
- package/build/components/dataviews-item-actions/index.js.map +1 -1
- package/build/components/dataviews-layout/index.js +7 -2
- package/build/components/dataviews-layout/index.js.map +1 -1
- package/build/components/dataviews-pagination/index.js +4 -3
- package/build/components/dataviews-pagination/index.js.map +1 -1
- package/build/components/dataviews-selection-checkbox/index.js.map +1 -1
- package/build/components/dataviews-view-config/index.js +10 -19
- package/build/components/dataviews-view-config/index.js.map +1 -1
- package/build/constants.js +83 -2
- package/build/constants.js.map +1 -1
- package/build/dataform-controls/boolean.js +42 -0
- package/build/dataform-controls/boolean.js.map +1 -0
- package/build/dataform-controls/checkbox.js +44 -0
- package/build/dataform-controls/checkbox.js.map +1 -0
- package/build/dataform-controls/datetime.js +96 -2
- package/build/dataform-controls/datetime.js.map +1 -1
- package/build/dataform-controls/email.js +48 -0
- package/build/dataform-controls/email.js.map +1 -0
- package/build/dataform-controls/index.js +9 -1
- package/build/dataform-controls/index.js.map +1 -1
- package/build/dataform-controls/integer.js +49 -1
- package/build/dataform-controls/integer.js.map +1 -1
- package/build/dataform-controls/select.js +1 -0
- package/build/dataform-controls/select.js.map +1 -1
- package/build/dataform-controls/text.js +3 -1
- package/build/dataform-controls/text.js.map +1 -1
- package/build/dataform-controls/toggle-group.js +52 -0
- package/build/dataform-controls/toggle-group.js.map +1 -0
- package/build/dataforms-layouts/data-form-layout.js +1 -1
- package/build/dataforms-layouts/data-form-layout.js.map +1 -1
- package/build/dataforms-layouts/panel/index.js +14 -5
- package/build/dataforms-layouts/panel/index.js.map +1 -1
- package/build/dataforms-layouts/regular/index.js +23 -4
- package/build/dataforms-layouts/regular/index.js.map +1 -1
- package/build/dataviews-layouts/grid/index.js +89 -27
- package/build/dataviews-layouts/grid/index.js.map +1 -1
- package/build/dataviews-layouts/list/index.js +11 -6
- package/build/dataviews-layouts/list/index.js.map +1 -1
- package/build/dataviews-layouts/table/column-header-menu.js +9 -7
- package/build/dataviews-layouts/table/column-header-menu.js.map +1 -1
- package/build/dataviews-layouts/table/column-primary.js +18 -13
- package/build/dataviews-layouts/table/column-primary.js.map +1 -1
- package/build/dataviews-layouts/table/index.js +46 -14
- package/build/dataviews-layouts/table/index.js.map +1 -1
- package/build/dataviews-layouts/table/use-is-horizontal-scroll-end.js +65 -0
- package/build/dataviews-layouts/table/use-is-horizontal-scroll-end.js.map +1 -0
- package/build/dataviews-layouts/utils/item-click-wrapper.js +77 -0
- package/build/dataviews-layouts/utils/item-click-wrapper.js.map +1 -0
- package/build/field-types/array.js +62 -0
- package/build/field-types/array.js.map +1 -0
- package/build/field-types/boolean.js +71 -0
- package/build/field-types/boolean.js.map +1 -0
- package/build/field-types/date.js +57 -0
- package/build/field-types/date.js.map +1 -0
- package/build/field-types/datetime.js +19 -1
- package/build/field-types/datetime.js.map +1 -1
- package/build/field-types/email.js +60 -0
- package/build/field-types/email.js.map +1 -0
- package/build/field-types/index.js +42 -1
- package/build/field-types/index.js.map +1 -1
- package/build/field-types/integer.js +23 -1
- package/build/field-types/integer.js.map +1 -1
- package/build/field-types/media.js +31 -0
- package/build/field-types/media.js.map +1 -0
- package/build/field-types/text.js +23 -1
- package/build/field-types/text.js.map +1 -1
- package/build/filter-and-sort-data-view.js +174 -11
- package/build/filter-and-sort-data-view.js.map +1 -1
- package/build/normalize-fields.js +72 -11
- package/build/normalize-fields.js.map +1 -1
- package/build/types.js.map +1 -1
- package/build/utils.js +11 -19
- package/build/utils.js.map +1 -1
- package/build-module/components/dataviews/index.js +74 -40
- package/build-module/components/dataviews/index.js.map +1 -1
- package/build-module/components/dataviews-context/index.js +16 -2
- package/build-module/components/dataviews-context/index.js.map +1 -1
- package/build-module/components/dataviews-filters/filter.js +309 -0
- package/build-module/components/dataviews-filters/filter.js.map +1 -0
- package/build-module/components/dataviews-filters/index.js +22 -21
- package/build-module/components/dataviews-filters/index.js.map +1 -1
- package/build-module/components/dataviews-filters/input-widget.js +69 -0
- package/build-module/components/dataviews-filters/input-widget.js.map +1 -0
- package/build-module/components/dataviews-filters/search-widget.js +31 -37
- package/build-module/components/dataviews-filters/search-widget.js.map +1 -1
- package/build-module/components/dataviews-filters/utils.js +18 -0
- package/build-module/components/dataviews-filters/utils.js.map +1 -0
- package/build-module/components/dataviews-item-actions/index.js +1 -1
- package/build-module/components/dataviews-item-actions/index.js.map +1 -1
- package/build-module/components/dataviews-layout/index.js +7 -2
- package/build-module/components/dataviews-layout/index.js.map +1 -1
- package/build-module/components/dataviews-pagination/index.js +4 -4
- package/build-module/components/dataviews-pagination/index.js.map +1 -1
- package/build-module/components/dataviews-selection-checkbox/index.js.map +1 -1
- package/build-module/components/dataviews-view-config/index.js +9 -20
- package/build-module/components/dataviews-view-config/index.js.map +1 -1
- package/build-module/constants.js +82 -1
- package/build-module/constants.js.map +1 -1
- package/build-module/dataform-controls/boolean.js +35 -0
- package/build-module/dataform-controls/boolean.js.map +1 -0
- package/build-module/dataform-controls/checkbox.js +37 -0
- package/build-module/dataform-controls/checkbox.js.map +1 -0
- package/build-module/dataform-controls/datetime.js +98 -3
- package/build-module/dataform-controls/datetime.js.map +1 -1
- package/build-module/dataform-controls/email.js +41 -0
- package/build-module/dataform-controls/email.js.map +1 -0
- package/build-module/dataform-controls/index.js +9 -1
- package/build-module/dataform-controls/index.js.map +1 -1
- package/build-module/dataform-controls/integer.js +51 -3
- package/build-module/dataform-controls/integer.js.map +1 -1
- package/build-module/dataform-controls/select.js +1 -0
- package/build-module/dataform-controls/select.js.map +1 -1
- package/build-module/dataform-controls/text.js +3 -1
- package/build-module/dataform-controls/text.js.map +1 -1
- package/build-module/dataform-controls/toggle-group.js +45 -0
- package/build-module/dataform-controls/toggle-group.js.map +1 -0
- package/build-module/dataforms-layouts/data-form-layout.js +1 -1
- package/build-module/dataforms-layouts/data-form-layout.js.map +1 -1
- package/build-module/dataforms-layouts/panel/index.js +14 -5
- package/build-module/dataforms-layouts/panel/index.js.map +1 -1
- package/build-module/dataforms-layouts/regular/index.js +23 -4
- package/build-module/dataforms-layouts/regular/index.js.map +1 -1
- package/build-module/dataviews-layouts/grid/index.js +90 -29
- package/build-module/dataviews-layouts/grid/index.js.map +1 -1
- package/build-module/dataviews-layouts/list/index.js +11 -6
- package/build-module/dataviews-layouts/list/index.js.map +1 -1
- package/build-module/dataviews-layouts/table/column-header-menu.js +9 -7
- package/build-module/dataviews-layouts/table/column-header-menu.js.map +1 -1
- package/build-module/dataviews-layouts/table/column-primary.js +18 -12
- package/build-module/dataviews-layouts/table/column-primary.js.map +1 -1
- package/build-module/dataviews-layouts/table/index.js +47 -16
- package/build-module/dataviews-layouts/table/index.js.map +1 -1
- package/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js +58 -0
- package/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js.map +1 -0
- package/build-module/dataviews-layouts/utils/item-click-wrapper.js +71 -0
- package/build-module/dataviews-layouts/utils/item-click-wrapper.js.map +1 -0
- package/build-module/field-types/array.js +57 -0
- package/build-module/field-types/array.js.map +1 -0
- package/build-module/field-types/boolean.js +65 -0
- package/build-module/field-types/boolean.js.map +1 -0
- package/build-module/field-types/date.js +51 -0
- package/build-module/field-types/date.js.map +1 -0
- package/build-module/field-types/datetime.js +19 -1
- package/build-module/field-types/datetime.js.map +1 -1
- package/build-module/field-types/email.js +54 -0
- package/build-module/field-types/email.js.map +1 -0
- package/build-module/field-types/index.js +42 -1
- package/build-module/field-types/index.js.map +1 -1
- package/build-module/field-types/integer.js +23 -1
- package/build-module/field-types/integer.js.map +1 -1
- package/build-module/field-types/media.js +25 -0
- package/build-module/field-types/media.js.map +1 -0
- package/build-module/field-types/text.js +23 -1
- package/build-module/field-types/text.js.map +1 -1
- package/build-module/filter-and-sort-data-view.js +175 -12
- package/build-module/filter-and-sort-data-view.js.map +1 -1
- package/build-module/normalize-fields.js +72 -11
- package/build-module/normalize-fields.js.map +1 -1
- package/build-module/types.js.map +1 -1
- package/build-module/utils.js +10 -17
- package/build-module/utils.js.map +1 -1
- package/build-style/style-rtl.css +315 -13
- package/build-style/style.css +315 -13
- package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
- package/build-types/components/dataviews/index.d.ts +24 -3
- package/build-types/components/dataviews/index.d.ts.map +1 -1
- package/build-types/components/dataviews/stories/fixtures.d.ts +10 -1
- package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
- package/build-types/components/dataviews/stories/index.story.d.ts +23 -4
- package/build-types/components/dataviews/stories/index.story.d.ts.map +1 -1
- package/build-types/components/dataviews-context/index.d.ts +14 -1
- package/build-types/components/dataviews-context/index.d.ts.map +1 -1
- package/build-types/components/dataviews-filters/filter.d.ts +15 -0
- package/build-types/components/dataviews-filters/filter.d.ts.map +1 -0
- package/build-types/components/dataviews-filters/index.d.ts +3 -8
- package/build-types/components/dataviews-filters/index.d.ts.map +1 -1
- package/build-types/components/dataviews-filters/input-widget.d.ts +13 -0
- package/build-types/components/dataviews-filters/input-widget.d.ts.map +1 -0
- package/build-types/components/dataviews-filters/search-widget.d.ts +4 -5
- package/build-types/components/dataviews-filters/search-widget.d.ts.map +1 -1
- package/build-types/components/dataviews-filters/utils.d.ts +6 -0
- package/build-types/components/dataviews-filters/utils.d.ts.map +1 -0
- package/build-types/components/dataviews-layout/index.d.ts +5 -1
- package/build-types/components/dataviews-layout/index.d.ts.map +1 -1
- package/build-types/components/dataviews-pagination/index.d.ts +1 -1
- package/build-types/components/dataviews-pagination/index.d.ts.map +1 -1
- package/build-types/components/dataviews-selection-checkbox/index.d.ts +2 -2
- package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -1
- package/build-types/components/dataviews-view-config/index.d.ts +3 -4
- package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
- package/build-types/components/stories/index.story.d.ts +63 -0
- package/build-types/components/stories/index.story.d.ts.map +1 -0
- package/build-types/constants.d.ts +20 -3
- package/build-types/constants.d.ts.map +1 -1
- package/build-types/dataform-controls/boolean.d.ts +6 -0
- package/build-types/dataform-controls/boolean.d.ts.map +1 -0
- package/build-types/dataform-controls/checkbox.d.ts +6 -0
- package/build-types/dataform-controls/checkbox.d.ts.map +1 -0
- package/build-types/dataform-controls/datetime.d.ts +1 -1
- package/build-types/dataform-controls/datetime.d.ts.map +1 -1
- package/build-types/dataform-controls/email.d.ts +6 -0
- package/build-types/dataform-controls/email.d.ts.map +1 -0
- 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 +1 -4
- package/build-types/dataform-controls/integer.d.ts.map +1 -1
- package/build-types/dataform-controls/select.d.ts.map +1 -1
- package/build-types/dataform-controls/text.d.ts.map +1 -1
- package/build-types/dataform-controls/toggle-group.d.ts +6 -0
- package/build-types/dataform-controls/toggle-group.d.ts.map +1 -0
- package/build-types/dataforms-layouts/panel/index.d.ts.map +1 -1
- package/build-types/dataforms-layouts/regular/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/grid/index.d.ts +2 -1
- package/build-types/dataviews-layouts/grid/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/index.d.ts +3 -3
- package/build-types/dataviews-layouts/list/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/table/column-header-menu.d.ts.map +1 -1
- package/build-types/dataviews-layouts/table/column-primary.d.ts +8 -1
- package/build-types/dataviews-layouts/table/column-primary.d.ts.map +1 -1
- package/build-types/dataviews-layouts/table/index.d.ts +1 -1
- package/build-types/dataviews-layouts/table/index.d.ts.map +1 -1
- package/build-types/dataviews-layouts/table/use-is-horizontal-scroll-end.d.ts +19 -0
- package/build-types/dataviews-layouts/table/use-is-horizontal-scroll-end.d.ts.map +1 -0
- package/build-types/dataviews-layouts/utils/item-click-wrapper.d.ts +15 -0
- package/build-types/dataviews-layouts/utils/item-click-wrapper.d.ts.map +1 -0
- package/build-types/field-types/array.d.ts +7 -0
- package/build-types/field-types/array.d.ts.map +1 -0
- package/build-types/field-types/boolean.d.ts +19 -0
- package/build-types/field-types/boolean.d.ts.map +1 -0
- package/build-types/field-types/date.d.ts +16 -0
- package/build-types/field-types/date.d.ts.map +1 -0
- package/build-types/field-types/datetime.d.ts +7 -1
- package/build-types/field-types/datetime.d.ts.map +1 -1
- package/build-types/field-types/email.d.ts +19 -0
- package/build-types/field-types/email.d.ts.map +1 -0
- package/build-types/field-types/index.d.ts +2 -10
- package/build-types/field-types/index.d.ts.map +1 -1
- package/build-types/field-types/integer.d.ts +7 -1
- package/build-types/field-types/integer.d.ts.map +1 -1
- package/build-types/field-types/media.d.ts +16 -0
- package/build-types/field-types/media.d.ts.map +1 -0
- package/build-types/field-types/text.d.ts +7 -1
- package/build-types/field-types/text.d.ts.map +1 -1
- package/build-types/filter-and-sort-data-view.d.ts.map +1 -1
- package/build-types/normalize-fields.d.ts.map +1 -1
- package/build-types/types.d.ts +74 -8
- package/build-types/types.d.ts.map +1 -1
- package/build-types/utils.d.ts +5 -2
- package/build-types/utils.d.ts.map +1 -1
- package/build-wp/index.js +3299 -1182
- package/package.json +18 -12
- package/src/components/dataform/stories/index.story.tsx +41 -20
- package/src/components/dataviews/index.tsx +108 -43
- package/src/components/dataviews/stories/fixtures.tsx +135 -69
- package/src/components/dataviews/stories/index.story.tsx +265 -7
- package/src/components/dataviews/stories/style.css +24 -3
- package/src/components/dataviews/style.scss +27 -0
- package/src/components/dataviews-context/index.ts +30 -2
- package/src/components/dataviews-filters/filter.tsx +603 -0
- package/src/components/dataviews-filters/index.tsx +23 -29
- package/src/components/dataviews-filters/input-widget.tsx +91 -0
- package/src/components/dataviews-filters/search-widget.tsx +51 -48
- package/src/components/dataviews-filters/style.scss +117 -14
- package/src/components/dataviews-filters/utils.ts +25 -0
- package/src/components/dataviews-item-actions/index.tsx +1 -1
- package/src/components/dataviews-layout/index.tsx +8 -1
- package/src/components/dataviews-pagination/index.tsx +4 -4
- package/src/components/dataviews-selection-checkbox/index.tsx +2 -2
- package/src/components/dataviews-view-config/index.tsx +10 -18
- package/src/components/stories/index.story.tsx +372 -0
- package/src/constants.ts +116 -1
- package/src/dataform-controls/boolean.tsx +30 -0
- package/src/dataform-controls/checkbox.tsx +31 -0
- package/src/dataform-controls/datetime.tsx +106 -2
- package/src/dataform-controls/email.tsx +42 -0
- package/src/dataform-controls/index.tsx +8 -0
- package/src/dataform-controls/integer.tsx +75 -1
- package/src/dataform-controls/select.tsx +1 -0
- package/src/dataform-controls/style.scss +5 -0
- package/src/dataform-controls/text.tsx +2 -1
- package/src/dataform-controls/toggle-group.tsx +59 -0
- package/src/dataforms-layouts/data-form-layout.tsx +1 -1
- package/src/dataforms-layouts/panel/index.tsx +19 -7
- package/src/dataforms-layouts/panel/style.scss +8 -1
- package/src/dataforms-layouts/regular/index.tsx +50 -17
- package/src/dataforms-layouts/regular/style.scss +4 -1
- package/src/dataviews-layouts/grid/index.tsx +180 -68
- package/src/dataviews-layouts/grid/style.scss +8 -0
- package/src/dataviews-layouts/list/index.tsx +12 -5
- package/src/dataviews-layouts/table/column-header-menu.tsx +10 -8
- package/src/dataviews-layouts/table/column-primary.tsx +26 -13
- package/src/dataviews-layouts/table/index.tsx +74 -10
- package/src/dataviews-layouts/table/style.scss +37 -1
- package/src/dataviews-layouts/table/use-is-horizontal-scroll-end.ts +82 -0
- package/src/dataviews-layouts/utils/item-click-wrapper.tsx +93 -0
- package/src/field-types/array.tsx +75 -0
- package/src/field-types/boolean.tsx +66 -0
- package/src/field-types/date.ts +56 -0
- package/src/field-types/datetime.tsx +46 -2
- package/src/field-types/email.tsx +79 -0
- package/src/field-types/index.tsx +50 -3
- package/src/field-types/integer.tsx +53 -2
- package/src/field-types/media.tsx +28 -0
- package/src/field-types/text.tsx +41 -2
- package/src/filter-and-sort-data-view.ts +270 -10
- package/src/normalize-fields.ts +116 -13
- package/src/test/dataviews.tsx +20 -2
- package/src/test/filter-and-sort-data-view.js +601 -25
- package/src/test/normalize-fields.ts +155 -0
- package/src/types.ts +112 -9
- package/src/utils.ts +10 -33
- package/tsconfig.json +2 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/build/components/dataviews-filters/filter-summary.js.map +0 -1
- package/build/dataviews-layouts/utils/get-clickable-item-props.js +0 -36
- package/build/dataviews-layouts/utils/get-clickable-item-props.js.map +0 -1
- package/build-module/components/dataviews-filters/filter-summary.js +0 -218
- package/build-module/components/dataviews-filters/filter-summary.js.map +0 -1
- package/build-module/dataviews-layouts/utils/get-clickable-item-props.js +0 -30
- package/build-module/dataviews-layouts/utils/get-clickable-item-props.js.map +0 -1
- package/build-types/components/dataviews-filters/filter-summary.d.ts +0 -14
- package/build-types/components/dataviews-filters/filter-summary.d.ts.map +0 -1
- package/build-types/dataviews-layouts/utils/get-clickable-item-props.d.ts +0 -19
- package/build-types/dataviews-layouts/utils/get-clickable-item-props.d.ts.map +0 -1
- package/src/components/dataviews-filters/filter-summary.tsx +0 -338
- package/src/dataviews-layouts/utils/get-clickable-item-props.ts +0 -39
|
@@ -42,4 +42,159 @@ describe( 'normalizeFields: default getValue', () => {
|
|
|
42
42
|
expect( result ).toBe( 'value' );
|
|
43
43
|
} );
|
|
44
44
|
} );
|
|
45
|
+
describe( 'filterBy', () => {
|
|
46
|
+
it( 'returns the default field type definition if undefined for untyped field', () => {
|
|
47
|
+
const fields: Field< {} >[] = [
|
|
48
|
+
{
|
|
49
|
+
id: 'user',
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
const normalizedFields = normalizeFields( fields );
|
|
53
|
+
const result = normalizedFields[ 0 ].filterBy;
|
|
54
|
+
expect( result ).toStrictEqual( { operators: [ 'is', 'isNot' ] } );
|
|
55
|
+
} );
|
|
56
|
+
it( 'returns the default field type definition if undefined for untyped field (for primary filters)', () => {
|
|
57
|
+
const fields: Field< {} >[] = [
|
|
58
|
+
{
|
|
59
|
+
id: 'user',
|
|
60
|
+
filterBy: {
|
|
61
|
+
isPrimary: true,
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
];
|
|
65
|
+
const normalizedFields = normalizeFields( fields );
|
|
66
|
+
const result = normalizedFields[ 0 ].filterBy;
|
|
67
|
+
expect( result ).toStrictEqual( {
|
|
68
|
+
isPrimary: true,
|
|
69
|
+
operators: [ 'is', 'isNot' ],
|
|
70
|
+
} );
|
|
71
|
+
} );
|
|
72
|
+
|
|
73
|
+
it( 'returns the field type definition for typed fields', () => {
|
|
74
|
+
const fields: Field< {} >[] = [
|
|
75
|
+
{
|
|
76
|
+
id: 'user',
|
|
77
|
+
type: 'integer',
|
|
78
|
+
},
|
|
79
|
+
];
|
|
80
|
+
const normalizedFields = normalizeFields( fields );
|
|
81
|
+
const result = normalizedFields[ 0 ].filterBy;
|
|
82
|
+
expect( result ).toStrictEqual( {
|
|
83
|
+
operators: [
|
|
84
|
+
'is',
|
|
85
|
+
'isNot',
|
|
86
|
+
'lessThan',
|
|
87
|
+
'greaterThan',
|
|
88
|
+
'lessThanOrEqual',
|
|
89
|
+
'greaterThanOrEqual',
|
|
90
|
+
'between',
|
|
91
|
+
],
|
|
92
|
+
} );
|
|
93
|
+
} );
|
|
94
|
+
|
|
95
|
+
it( 'returns the field type definition for typed fields (for primary filters)', () => {
|
|
96
|
+
const fields: Field< {} >[] = [
|
|
97
|
+
{
|
|
98
|
+
id: 'user',
|
|
99
|
+
type: 'integer',
|
|
100
|
+
filterBy: {
|
|
101
|
+
isPrimary: true,
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
];
|
|
105
|
+
const normalizedFields = normalizeFields( fields );
|
|
106
|
+
const result = normalizedFields[ 0 ].filterBy;
|
|
107
|
+
expect( result ).toStrictEqual( {
|
|
108
|
+
isPrimary: true,
|
|
109
|
+
operators: [
|
|
110
|
+
'is',
|
|
111
|
+
'isNot',
|
|
112
|
+
'lessThan',
|
|
113
|
+
'greaterThan',
|
|
114
|
+
'lessThanOrEqual',
|
|
115
|
+
'greaterThanOrEqual',
|
|
116
|
+
'between',
|
|
117
|
+
],
|
|
118
|
+
} );
|
|
119
|
+
} );
|
|
120
|
+
|
|
121
|
+
it( 'returns false if is false', () => {
|
|
122
|
+
const fields: Field< {} >[] = [
|
|
123
|
+
{
|
|
124
|
+
id: 'user',
|
|
125
|
+
filterBy: false,
|
|
126
|
+
},
|
|
127
|
+
];
|
|
128
|
+
const normalizedFields = normalizeFields( fields );
|
|
129
|
+
const result = normalizedFields[ 0 ].filterBy;
|
|
130
|
+
expect( result ).toBe( false );
|
|
131
|
+
} );
|
|
132
|
+
|
|
133
|
+
it( 'returns the config if it provides one', () => {
|
|
134
|
+
const fields: Field< {} >[] = [
|
|
135
|
+
{
|
|
136
|
+
id: 'user',
|
|
137
|
+
filterBy: {
|
|
138
|
+
isPrimary: true,
|
|
139
|
+
operators: [ 'is', 'isNot' ],
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
];
|
|
143
|
+
const normalizedFields = normalizeFields( fields );
|
|
144
|
+
const result = normalizedFields[ 0 ].filterBy;
|
|
145
|
+
expect( result ).toStrictEqual( {
|
|
146
|
+
isPrimary: true,
|
|
147
|
+
operators: [ 'is', 'isNot' ],
|
|
148
|
+
} );
|
|
149
|
+
} );
|
|
150
|
+
|
|
151
|
+
it( 'returns false if the none of the operators are valid for the type', () => {
|
|
152
|
+
const fields: Field< {} >[] = [
|
|
153
|
+
{
|
|
154
|
+
id: 'user',
|
|
155
|
+
filterBy: {
|
|
156
|
+
// @ts-ignore
|
|
157
|
+
operators: [ 'invalid', 'operator' ],
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
];
|
|
161
|
+
const normalizedFields = normalizeFields( fields );
|
|
162
|
+
const result = normalizedFields[ 0 ].filterBy;
|
|
163
|
+
expect( result ).toBe( false );
|
|
164
|
+
} );
|
|
165
|
+
|
|
166
|
+
it( 'returns false if the list of operators is empty', () => {
|
|
167
|
+
const fields: Field< {} >[] = [
|
|
168
|
+
{
|
|
169
|
+
id: 'user',
|
|
170
|
+
filterBy: {
|
|
171
|
+
operators: [],
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
];
|
|
175
|
+
const normalizedFields = normalizeFields( fields );
|
|
176
|
+
const result = normalizedFields[ 0 ].filterBy;
|
|
177
|
+
expect( result ).toBe( false );
|
|
178
|
+
} );
|
|
179
|
+
|
|
180
|
+
it( 'removes invalid operators for the type', () => {
|
|
181
|
+
const fields: Field< {} >[] = [
|
|
182
|
+
{
|
|
183
|
+
id: 'user',
|
|
184
|
+
type: 'integer',
|
|
185
|
+
filterBy: {
|
|
186
|
+
isPrimary: true,
|
|
187
|
+
// @ts-ignore
|
|
188
|
+
operators: [ 'invalid', 'lessThan' ],
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
];
|
|
192
|
+
const normalizedFields = normalizeFields( fields );
|
|
193
|
+
const result = normalizedFields[ 0 ].filterBy;
|
|
194
|
+
expect( result ).toStrictEqual( {
|
|
195
|
+
isPrimary: true,
|
|
196
|
+
operators: [ 'lessThan' ],
|
|
197
|
+
} );
|
|
198
|
+
} );
|
|
199
|
+
} );
|
|
45
200
|
} );
|
package/src/types.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import type { ReactElement, ComponentType } from 'react';
|
|
4
|
+
import type { ReactElement, ComponentType, ComponentProps } from 'react';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Internal dependencies
|
|
@@ -24,7 +24,7 @@ export interface Option< Value extends any = any > {
|
|
|
24
24
|
description?: string;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
interface FilterByConfig {
|
|
27
|
+
export interface FilterByConfig {
|
|
28
28
|
/**
|
|
29
29
|
* The list of operators supported by the field.
|
|
30
30
|
*/
|
|
@@ -39,15 +39,66 @@ interface FilterByConfig {
|
|
|
39
39
|
isPrimary?: boolean;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
export interface NormalizedFilterByConfig {
|
|
43
|
+
/**
|
|
44
|
+
* The list of operators supported by the field.
|
|
45
|
+
*/
|
|
46
|
+
operators: Operator[];
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Whether it is a primary filter.
|
|
50
|
+
*
|
|
51
|
+
* A primary filter is always visible and is not listed in the "Add filter" component,
|
|
52
|
+
* except for the list layout where it behaves like a secondary filter.
|
|
53
|
+
*/
|
|
54
|
+
isPrimary?: boolean;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
interface FilterConfigForType {
|
|
58
|
+
/**
|
|
59
|
+
* What operators are used by default.
|
|
60
|
+
*/
|
|
61
|
+
defaultOperators: Operator[];
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* What operators are supported by the field.
|
|
65
|
+
*/
|
|
66
|
+
validOperators: Operator[];
|
|
67
|
+
}
|
|
68
|
+
|
|
42
69
|
export type Operator =
|
|
43
70
|
| 'is'
|
|
44
71
|
| 'isNot'
|
|
45
72
|
| 'isAny'
|
|
46
73
|
| 'isNone'
|
|
47
74
|
| 'isAll'
|
|
48
|
-
| 'isNotAll'
|
|
49
|
-
|
|
50
|
-
|
|
75
|
+
| 'isNotAll'
|
|
76
|
+
| 'lessThan'
|
|
77
|
+
| 'greaterThan'
|
|
78
|
+
| 'lessThanOrEqual'
|
|
79
|
+
| 'greaterThanOrEqual'
|
|
80
|
+
| 'before'
|
|
81
|
+
| 'after'
|
|
82
|
+
| 'beforeInc'
|
|
83
|
+
| 'afterInc'
|
|
84
|
+
| 'contains'
|
|
85
|
+
| 'notContains'
|
|
86
|
+
| 'startsWith'
|
|
87
|
+
| 'between'
|
|
88
|
+
| 'on'
|
|
89
|
+
| 'notOn'
|
|
90
|
+
| 'inThePast'
|
|
91
|
+
| 'over';
|
|
92
|
+
|
|
93
|
+
export type FieldType =
|
|
94
|
+
| 'text'
|
|
95
|
+
| 'integer'
|
|
96
|
+
| 'datetime'
|
|
97
|
+
| 'date'
|
|
98
|
+
| 'media'
|
|
99
|
+
| 'boolean'
|
|
100
|
+
| 'email'
|
|
101
|
+
| 'array';
|
|
51
102
|
|
|
52
103
|
export type ValidationContext = {
|
|
53
104
|
elements?: Option[];
|
|
@@ -70,7 +121,28 @@ export type FieldTypeDefinition< Item > = {
|
|
|
70
121
|
/**
|
|
71
122
|
* Callback used to render an edit control for the field or control name.
|
|
72
123
|
*/
|
|
73
|
-
Edit: ComponentType< DataFormControlProps< Item > > | string;
|
|
124
|
+
Edit: ComponentType< DataFormControlProps< Item > > | string | null;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Callback used to render the field.
|
|
128
|
+
*/
|
|
129
|
+
render: ComponentType< DataViewRenderFieldProps< Item > >;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* The filter config for the field.
|
|
133
|
+
*/
|
|
134
|
+
filterBy: FilterConfigForType | false;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Whether the field is readOnly.
|
|
138
|
+
* If `true`, the value will be rendered using the `render` callback.
|
|
139
|
+
*/
|
|
140
|
+
readOnly?: boolean;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Whether the field is sortable.
|
|
144
|
+
*/
|
|
145
|
+
enableSorting: boolean;
|
|
74
146
|
};
|
|
75
147
|
|
|
76
148
|
/**
|
|
@@ -156,7 +228,13 @@ export type Field< Item > = {
|
|
|
156
228
|
/**
|
|
157
229
|
* Filter config for the field.
|
|
158
230
|
*/
|
|
159
|
-
filterBy?: FilterByConfig |
|
|
231
|
+
filterBy?: FilterByConfig | false;
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Whether the field is readOnly.
|
|
235
|
+
* If `true`, the value will be rendered using the `render` callback.
|
|
236
|
+
*/
|
|
237
|
+
readOnly?: boolean;
|
|
160
238
|
|
|
161
239
|
/**
|
|
162
240
|
* Callback used to retrieve the value of the field from the item.
|
|
@@ -165,16 +243,18 @@ export type Field< Item > = {
|
|
|
165
243
|
getValue?: ( args: { item: Item } ) => any;
|
|
166
244
|
};
|
|
167
245
|
|
|
168
|
-
export type NormalizedField< Item > = Field< Item > & {
|
|
246
|
+
export type NormalizedField< Item > = Omit< Field< Item >, 'Edit' > & {
|
|
169
247
|
label: string;
|
|
170
248
|
header: string | ReactElement;
|
|
171
249
|
getValue: ( args: { item: Item } ) => any;
|
|
172
250
|
render: ComponentType< DataViewRenderFieldProps< Item > >;
|
|
173
|
-
Edit: ComponentType< DataFormControlProps< Item >
|
|
251
|
+
Edit: ComponentType< DataFormControlProps< Item > > | null;
|
|
174
252
|
sort: ( a: Item, b: Item, direction: SortDirection ) => number;
|
|
175
253
|
isValid: ( item: Item, context?: ValidationContext ) => boolean;
|
|
176
254
|
enableHiding: boolean;
|
|
177
255
|
enableSorting: boolean;
|
|
256
|
+
filterBy: NormalizedFilterByConfig | false;
|
|
257
|
+
readOnly: boolean;
|
|
178
258
|
};
|
|
179
259
|
|
|
180
260
|
/**
|
|
@@ -189,10 +269,17 @@ export type DataFormControlProps< Item > = {
|
|
|
189
269
|
field: NormalizedField< Item >;
|
|
190
270
|
onChange: ( value: Record< string, any > ) => void;
|
|
191
271
|
hideLabelFromVision?: boolean;
|
|
272
|
+
/**
|
|
273
|
+
* The currently selected filter operator for this field.
|
|
274
|
+
*
|
|
275
|
+
* Used by DataViews filters to determine which control to render based on the operator type.
|
|
276
|
+
*/
|
|
277
|
+
operator?: Operator;
|
|
192
278
|
};
|
|
193
279
|
|
|
194
280
|
export type DataViewRenderFieldProps< Item > = {
|
|
195
281
|
item: Item;
|
|
282
|
+
field: NormalizedField< Item >;
|
|
196
283
|
};
|
|
197
284
|
|
|
198
285
|
/**
|
|
@@ -332,6 +419,11 @@ interface ViewBase {
|
|
|
332
419
|
* Whether to show the hierarchical levels.
|
|
333
420
|
*/
|
|
334
421
|
showLevels?: boolean;
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* The field to group by.
|
|
425
|
+
*/
|
|
426
|
+
groupByField?: string;
|
|
335
427
|
}
|
|
336
428
|
|
|
337
429
|
export interface ColumnStyle {
|
|
@@ -349,6 +441,11 @@ export interface ColumnStyle {
|
|
|
349
441
|
* The maximum width of the field column.
|
|
350
442
|
*/
|
|
351
443
|
minWidth?: string | number;
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* The alignment of the field column, defaults to left.
|
|
447
|
+
*/
|
|
448
|
+
align?: 'start' | 'center' | 'end';
|
|
352
449
|
}
|
|
353
450
|
|
|
354
451
|
export type Density = 'compact' | 'balanced' | 'comfortable';
|
|
@@ -500,6 +597,7 @@ export interface ActionButton< Item > extends ActionBase< Item > {
|
|
|
500
597
|
export type Action< Item > = ActionModal< Item > | ActionButton< Item >;
|
|
501
598
|
|
|
502
599
|
export interface ViewBaseProps< Item > {
|
|
600
|
+
className?: string;
|
|
503
601
|
actions: Action< Item >[];
|
|
504
602
|
data: Item[];
|
|
505
603
|
fields: NormalizedField< Item >[];
|
|
@@ -511,6 +609,11 @@ export interface ViewBaseProps< Item > {
|
|
|
511
609
|
selection: string[];
|
|
512
610
|
setOpenedFilter: ( fieldId: string ) => void;
|
|
513
611
|
onClickItem?: ( item: Item ) => void;
|
|
612
|
+
renderItemLink?: (
|
|
613
|
+
props: {
|
|
614
|
+
item: Item;
|
|
615
|
+
} & ComponentProps< 'a' >
|
|
616
|
+
) => ReactElement;
|
|
514
617
|
isItemClickable: ( item: Item ) => boolean;
|
|
515
618
|
view: View;
|
|
516
619
|
}
|
package/src/utils.ts
CHANGED
|
@@ -1,38 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Internal dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
let operators = field.filterBy?.operators;
|
|
15
|
-
|
|
16
|
-
// Assign default values.
|
|
17
|
-
if ( ! operators || ! Array.isArray( operators ) ) {
|
|
18
|
-
operators = [ OPERATOR_IS_ANY, OPERATOR_IS_NONE ];
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// Make sure only valid operators are used.
|
|
22
|
-
operators = operators.filter( ( operator ) =>
|
|
23
|
-
ALL_OPERATORS.includes( operator )
|
|
4
|
+
import type { DataViewRenderFieldProps } from './types';
|
|
5
|
+
|
|
6
|
+
export function renderFromElements< Item >( {
|
|
7
|
+
item,
|
|
8
|
+
field,
|
|
9
|
+
}: DataViewRenderFieldProps< Item > ) {
|
|
10
|
+
const value = field.getValue( { item } );
|
|
11
|
+
return (
|
|
12
|
+
field?.elements?.find( ( element ) => element.value === value )
|
|
13
|
+
?.label || field.getValue( { item } )
|
|
24
14
|
);
|
|
25
|
-
|
|
26
|
-
// Do not allow mixing single & multiselection operators.
|
|
27
|
-
// Remove multiselection operators if any of the single selection ones is present.
|
|
28
|
-
if (
|
|
29
|
-
operators.includes( OPERATOR_IS ) ||
|
|
30
|
-
operators.includes( OPERATOR_IS_NOT )
|
|
31
|
-
) {
|
|
32
|
-
operators = operators.filter( ( operator ) =>
|
|
33
|
-
[ OPERATOR_IS, OPERATOR_IS_NOT ].includes( operator )
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return operators;
|
|
38
15
|
}
|
package/tsconfig.json
CHANGED
|
@@ -13,11 +13,13 @@
|
|
|
13
13
|
{ "path": "../components" },
|
|
14
14
|
{ "path": "../compose" },
|
|
15
15
|
{ "path": "../data" },
|
|
16
|
+
{ "path": "../date" },
|
|
16
17
|
{ "path": "../element" },
|
|
17
18
|
{ "path": "../i18n" },
|
|
18
19
|
{ "path": "../icons" },
|
|
19
20
|
{ "path": "../primitives" },
|
|
20
21
|
{ "path": "../private-apis" },
|
|
22
|
+
{ "path": "../url" },
|
|
21
23
|
{ "path": "../warning" }
|
|
22
24
|
],
|
|
23
25
|
"exclude": [
|