@wordpress/dataviews 4.22.0 → 5.0.1-next.719a03cbe.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 +146 -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 +31 -25
- 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/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 +38 -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 +152 -1
- 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 +31 -26
- 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/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 +38 -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 +153 -2
- 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 +307 -13
- package/build-style/style.css +307 -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 +9 -1
- package/build-types/components/dataviews/stories/fixtures.d.ts.map +1 -1
- package/build-types/components/dataviews/stories/index.story.d.ts +22 -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 +59 -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/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 +70 -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 +2545 -994
- 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 +58 -13
- package/src/components/dataviews/stories/index.story.tsx +228 -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 +351 -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 +47 -26
- 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/datetime.tsx +46 -2
- package/src/field-types/email.tsx +79 -0
- package/src/field-types/index.tsx +45 -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 +243 -1
- package/src/normalize-fields.ts +116 -13
- package/src/test/dataviews.tsx +20 -2
- package/src/test/filter-and-sort-data-view.js +507 -0
- package/src/test/normalize-fields.ts +155 -0
- package/src/types.ts +106 -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,65 @@ 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
|
+
| 'media'
|
|
98
|
+
| 'boolean'
|
|
99
|
+
| 'email'
|
|
100
|
+
| 'array';
|
|
51
101
|
|
|
52
102
|
export type ValidationContext = {
|
|
53
103
|
elements?: Option[];
|
|
@@ -70,7 +120,28 @@ export type FieldTypeDefinition< Item > = {
|
|
|
70
120
|
/**
|
|
71
121
|
* Callback used to render an edit control for the field or control name.
|
|
72
122
|
*/
|
|
73
|
-
Edit: ComponentType< DataFormControlProps< Item > > | string;
|
|
123
|
+
Edit: ComponentType< DataFormControlProps< Item > > | string | null;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Callback used to render the field.
|
|
127
|
+
*/
|
|
128
|
+
render: ComponentType< DataViewRenderFieldProps< Item > >;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* The filter config for the field.
|
|
132
|
+
*/
|
|
133
|
+
filterBy: FilterConfigForType | false;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Whether the field is readOnly.
|
|
137
|
+
* If `true`, the value will be rendered using the `render` callback.
|
|
138
|
+
*/
|
|
139
|
+
readOnly?: boolean;
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Whether the field is sortable.
|
|
143
|
+
*/
|
|
144
|
+
enableSorting: boolean;
|
|
74
145
|
};
|
|
75
146
|
|
|
76
147
|
/**
|
|
@@ -156,7 +227,13 @@ export type Field< Item > = {
|
|
|
156
227
|
/**
|
|
157
228
|
* Filter config for the field.
|
|
158
229
|
*/
|
|
159
|
-
filterBy?: FilterByConfig |
|
|
230
|
+
filterBy?: FilterByConfig | false;
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Whether the field is readOnly.
|
|
234
|
+
* If `true`, the value will be rendered using the `render` callback.
|
|
235
|
+
*/
|
|
236
|
+
readOnly?: boolean;
|
|
160
237
|
|
|
161
238
|
/**
|
|
162
239
|
* Callback used to retrieve the value of the field from the item.
|
|
@@ -165,16 +242,18 @@ export type Field< Item > = {
|
|
|
165
242
|
getValue?: ( args: { item: Item } ) => any;
|
|
166
243
|
};
|
|
167
244
|
|
|
168
|
-
export type NormalizedField< Item > = Field< Item > & {
|
|
245
|
+
export type NormalizedField< Item > = Omit< Field< Item >, 'Edit' > & {
|
|
169
246
|
label: string;
|
|
170
247
|
header: string | ReactElement;
|
|
171
248
|
getValue: ( args: { item: Item } ) => any;
|
|
172
249
|
render: ComponentType< DataViewRenderFieldProps< Item > >;
|
|
173
|
-
Edit: ComponentType< DataFormControlProps< Item >
|
|
250
|
+
Edit: ComponentType< DataFormControlProps< Item > > | null;
|
|
174
251
|
sort: ( a: Item, b: Item, direction: SortDirection ) => number;
|
|
175
252
|
isValid: ( item: Item, context?: ValidationContext ) => boolean;
|
|
176
253
|
enableHiding: boolean;
|
|
177
254
|
enableSorting: boolean;
|
|
255
|
+
filterBy: NormalizedFilterByConfig | false;
|
|
256
|
+
readOnly: boolean;
|
|
178
257
|
};
|
|
179
258
|
|
|
180
259
|
/**
|
|
@@ -189,10 +268,17 @@ export type DataFormControlProps< Item > = {
|
|
|
189
268
|
field: NormalizedField< Item >;
|
|
190
269
|
onChange: ( value: Record< string, any > ) => void;
|
|
191
270
|
hideLabelFromVision?: boolean;
|
|
271
|
+
/**
|
|
272
|
+
* The currently selected filter operator for this field.
|
|
273
|
+
*
|
|
274
|
+
* Used by DataViews filters to determine which control to render based on the operator type.
|
|
275
|
+
*/
|
|
276
|
+
operator?: Operator;
|
|
192
277
|
};
|
|
193
278
|
|
|
194
279
|
export type DataViewRenderFieldProps< Item > = {
|
|
195
280
|
item: Item;
|
|
281
|
+
field: NormalizedField< Item >;
|
|
196
282
|
};
|
|
197
283
|
|
|
198
284
|
/**
|
|
@@ -349,6 +435,11 @@ export interface ColumnStyle {
|
|
|
349
435
|
* The maximum width of the field column.
|
|
350
436
|
*/
|
|
351
437
|
minWidth?: string | number;
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* The alignment of the field column, defaults to left.
|
|
441
|
+
*/
|
|
442
|
+
align?: 'start' | 'center' | 'end';
|
|
352
443
|
}
|
|
353
444
|
|
|
354
445
|
export type Density = 'compact' | 'balanced' | 'comfortable';
|
|
@@ -500,6 +591,7 @@ export interface ActionButton< Item > extends ActionBase< Item > {
|
|
|
500
591
|
export type Action< Item > = ActionModal< Item > | ActionButton< Item >;
|
|
501
592
|
|
|
502
593
|
export interface ViewBaseProps< Item > {
|
|
594
|
+
className?: string;
|
|
503
595
|
actions: Action< Item >[];
|
|
504
596
|
data: Item[];
|
|
505
597
|
fields: NormalizedField< Item >[];
|
|
@@ -511,6 +603,11 @@ export interface ViewBaseProps< Item > {
|
|
|
511
603
|
selection: string[];
|
|
512
604
|
setOpenedFilter: ( fieldId: string ) => void;
|
|
513
605
|
onClickItem?: ( item: Item ) => void;
|
|
606
|
+
renderItemLink?: (
|
|
607
|
+
props: {
|
|
608
|
+
item: Item;
|
|
609
|
+
} & ComponentProps< 'a' >
|
|
610
|
+
) => ReactElement;
|
|
514
611
|
isItemClickable: ( item: Item ) => boolean;
|
|
515
612
|
view: View;
|
|
516
613
|
}
|
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": [
|