@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
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* WordPress dependencies
|
|
7
7
|
*/
|
|
8
8
|
import { __experimentalHStack as HStack } from '@wordpress/components';
|
|
9
|
-
import { useMemo, useState } from '@wordpress/element';
|
|
10
|
-
import { useResizeObserver } from '@wordpress/compose';
|
|
9
|
+
import { useContext, useMemo, useRef, useState } from '@wordpress/element';
|
|
10
|
+
import { useMergeRefs, useResizeObserver } from '@wordpress/compose';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Internal dependencies
|
|
@@ -17,13 +17,49 @@ import { default as DataViewsFilters, useFilters, FiltersToggle } from '../datav
|
|
|
17
17
|
import DataViewsLayout from '../dataviews-layout';
|
|
18
18
|
import DataViewsFooter from '../dataviews-footer';
|
|
19
19
|
import DataViewsSearch from '../dataviews-search';
|
|
20
|
-
import
|
|
20
|
+
import { BulkActionsFooter } from '../dataviews-bulk-actions';
|
|
21
|
+
import { DataViewsPagination } from '../dataviews-pagination';
|
|
22
|
+
import DataViewsViewConfig, { DataviewsViewConfigDropdown, ViewTypeMenu } from '../dataviews-view-config';
|
|
21
23
|
import { normalizeFields } from '../../normalize-fields';
|
|
22
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
24
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
23
25
|
const defaultGetItemId = item => item.id;
|
|
24
26
|
const defaultIsItemClickable = () => true;
|
|
25
27
|
const EMPTY_ARRAY = [];
|
|
26
|
-
|
|
28
|
+
function DefaultUI({
|
|
29
|
+
header,
|
|
30
|
+
search = true,
|
|
31
|
+
searchLabel = undefined
|
|
32
|
+
}) {
|
|
33
|
+
const {
|
|
34
|
+
isShowingFilter
|
|
35
|
+
} = useContext(DataViewsContext);
|
|
36
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
37
|
+
children: [/*#__PURE__*/_jsxs(HStack, {
|
|
38
|
+
alignment: "top",
|
|
39
|
+
justify: "space-between",
|
|
40
|
+
className: "dataviews__view-actions",
|
|
41
|
+
spacing: 1,
|
|
42
|
+
children: [/*#__PURE__*/_jsxs(HStack, {
|
|
43
|
+
justify: "start",
|
|
44
|
+
expanded: false,
|
|
45
|
+
className: "dataviews__search",
|
|
46
|
+
children: [search && /*#__PURE__*/_jsx(DataViewsSearch, {
|
|
47
|
+
label: searchLabel
|
|
48
|
+
}), /*#__PURE__*/_jsx(FiltersToggle, {})]
|
|
49
|
+
}), /*#__PURE__*/_jsxs(HStack, {
|
|
50
|
+
spacing: 1,
|
|
51
|
+
expanded: false,
|
|
52
|
+
style: {
|
|
53
|
+
flexShrink: 0
|
|
54
|
+
},
|
|
55
|
+
children: [/*#__PURE__*/_jsx(DataViewsViewConfig, {}), header]
|
|
56
|
+
})]
|
|
57
|
+
}), isShowingFilter && /*#__PURE__*/_jsx(DataViewsFilters, {
|
|
58
|
+
className: "dataviews-filters__container"
|
|
59
|
+
}), /*#__PURE__*/_jsx(DataViewsLayout, {}), /*#__PURE__*/_jsx(DataViewsFooter, {})]
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function DataViews({
|
|
27
63
|
view,
|
|
28
64
|
onChangeView,
|
|
29
65
|
fields,
|
|
@@ -39,11 +75,15 @@ export default function DataViews({
|
|
|
39
75
|
selection: selectionProperty,
|
|
40
76
|
onChangeSelection,
|
|
41
77
|
onClickItem,
|
|
78
|
+
renderItemLink,
|
|
42
79
|
isItemClickable = defaultIsItemClickable,
|
|
43
|
-
header
|
|
80
|
+
header,
|
|
81
|
+
children,
|
|
82
|
+
perPageSizes
|
|
44
83
|
}) {
|
|
84
|
+
const containerRef = useRef(null);
|
|
45
85
|
const [containerWidth, setContainerWidth] = useState(0);
|
|
46
|
-
const
|
|
86
|
+
const resizeObserverRef = useResizeObserver(resizeObserverEntries => {
|
|
47
87
|
setContainerWidth(resizeObserverEntries[0].borderBoxSize[0].inlineSize);
|
|
48
88
|
}, {
|
|
49
89
|
box: 'border-box'
|
|
@@ -84,42 +124,36 @@ export default function DataViews({
|
|
|
84
124
|
getItemLevel,
|
|
85
125
|
isItemClickable,
|
|
86
126
|
onClickItem,
|
|
87
|
-
|
|
127
|
+
renderItemLink,
|
|
128
|
+
containerWidth,
|
|
129
|
+
containerRef,
|
|
130
|
+
defaultLayouts,
|
|
131
|
+
filters,
|
|
132
|
+
isShowingFilter,
|
|
133
|
+
setIsShowingFilter,
|
|
134
|
+
perPageSizes
|
|
88
135
|
},
|
|
89
|
-
children: /*#__PURE__*/
|
|
136
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
90
137
|
className: "dataviews-wrapper",
|
|
91
|
-
ref: containerRef,
|
|
92
|
-
children:
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
children: [/*#__PURE__*/_jsxs(HStack, {
|
|
98
|
-
justify: "start",
|
|
99
|
-
expanded: false,
|
|
100
|
-
className: "dataviews__search",
|
|
101
|
-
children: [search && /*#__PURE__*/_jsx(DataViewsSearch, {
|
|
102
|
-
label: searchLabel
|
|
103
|
-
}), /*#__PURE__*/_jsx(FiltersToggle, {
|
|
104
|
-
filters: filters,
|
|
105
|
-
view: view,
|
|
106
|
-
onChangeView: onChangeView,
|
|
107
|
-
setOpenedFilter: setOpenedFilter,
|
|
108
|
-
setIsShowingFilter: setIsShowingFilter,
|
|
109
|
-
isShowingFilter: isShowingFilter
|
|
110
|
-
})]
|
|
111
|
-
}), /*#__PURE__*/_jsxs(HStack, {
|
|
112
|
-
spacing: 1,
|
|
113
|
-
expanded: false,
|
|
114
|
-
style: {
|
|
115
|
-
flexShrink: 0
|
|
116
|
-
},
|
|
117
|
-
children: [/*#__PURE__*/_jsx(DataViewsViewConfig, {
|
|
118
|
-
defaultLayouts: defaultLayouts
|
|
119
|
-
}), header]
|
|
120
|
-
})]
|
|
121
|
-
}), isShowingFilter && /*#__PURE__*/_jsx(DataViewsFilters, {}), /*#__PURE__*/_jsx(DataViewsLayout, {}), /*#__PURE__*/_jsx(DataViewsFooter, {})]
|
|
138
|
+
ref: useMergeRefs([containerRef, resizeObserverRef]),
|
|
139
|
+
children: children !== null && children !== void 0 ? children : /*#__PURE__*/_jsx(DefaultUI, {
|
|
140
|
+
header: header,
|
|
141
|
+
search: search,
|
|
142
|
+
searchLabel: searchLabel
|
|
143
|
+
})
|
|
122
144
|
})
|
|
123
145
|
});
|
|
124
146
|
}
|
|
147
|
+
|
|
148
|
+
// Populate the DataViews sub components
|
|
149
|
+
const DataViewsSubComponents = DataViews;
|
|
150
|
+
DataViewsSubComponents.BulkActionToolbar = BulkActionsFooter;
|
|
151
|
+
DataViewsSubComponents.Filters = DataViewsFilters;
|
|
152
|
+
DataViewsSubComponents.FiltersToggle = FiltersToggle;
|
|
153
|
+
DataViewsSubComponents.Layout = DataViewsLayout;
|
|
154
|
+
DataViewsSubComponents.LayoutSwitcher = ViewTypeMenu;
|
|
155
|
+
DataViewsSubComponents.Pagination = DataViewsPagination;
|
|
156
|
+
DataViewsSubComponents.Search = DataViewsSearch;
|
|
157
|
+
DataViewsSubComponents.ViewConfig = DataviewsViewConfigDropdown;
|
|
158
|
+
export default DataViewsSubComponents;
|
|
125
159
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__experimentalHStack","HStack","useMemo","useState","useResizeObserver","DataViewsContext","default","DataViewsFilters","useFilters","FiltersToggle","DataViewsLayout","DataViewsFooter","DataViewsSearch","DataViewsViewConfig","normalizeFields","jsx","_jsx","jsxs","_jsxs","defaultGetItemId","item","id","defaultIsItemClickable","EMPTY_ARRAY","DataViews","view","onChangeView","fields","search","searchLabel","undefined","actions","data","getItemId","getItemLevel","isLoading","paginationInfo","defaultLayouts","selection","selectionProperty","onChangeSelection","onClickItem","isItemClickable","header","containerWidth","setContainerWidth","containerRef","resizeObserverEntries","borderBoxSize","inlineSize","box","selectionState","setSelectionState","isUncontrolled","openedFilter","setOpenedFilter","setSelectionWithChange","value","newValue","_fields","_selection","filter","some","filters","isShowingFilter","setIsShowingFilter","isPrimary","Provider","children","className","ref","alignment","justify","spacing","expanded","label","style","flexShrink"],"sources":["@wordpress/dataviews/src/components/dataviews/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport type { ReactNode } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport { __experimentalHStack as HStack } from '@wordpress/components';\nimport { useMemo, useState } from '@wordpress/element';\nimport { useResizeObserver } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport DataViewsContext from '../dataviews-context';\nimport {\n\tdefault as DataViewsFilters,\n\tuseFilters,\n\tFiltersToggle,\n} from '../dataviews-filters';\nimport DataViewsLayout from '../dataviews-layout';\nimport DataViewsFooter from '../dataviews-footer';\nimport DataViewsSearch from '../dataviews-search';\nimport DataViewsViewConfig from '../dataviews-view-config';\nimport { normalizeFields } from '../../normalize-fields';\nimport type { Action, Field, View, SupportedLayouts } from '../../types';\nimport type { SelectionOrUpdater } from '../../private-types';\n\ntype ItemWithId = { id: string };\n\ntype DataViewsProps< Item > = {\n\tview: View;\n\tonChangeView: ( view: View ) => void;\n\tfields: Field< Item >[];\n\tsearch?: boolean;\n\tsearchLabel?: string;\n\tactions?: Action< Item >[];\n\tdata: Item[];\n\tisLoading?: boolean;\n\tpaginationInfo: {\n\t\ttotalItems: number;\n\t\ttotalPages: number;\n\t};\n\tdefaultLayouts: SupportedLayouts;\n\tselection?: string[];\n\tonChangeSelection?: ( items: string[] ) => void;\n\tonClickItem?: ( item: Item ) => void;\n\tisItemClickable?: ( item: Item ) => boolean;\n\theader?: ReactNode;\n\tgetItemLevel?: ( item: Item ) => number;\n} & ( Item extends ItemWithId\n\t? { getItemId?: ( item: Item ) => string }\n\t: { getItemId: ( item: Item ) => string } );\n\nconst defaultGetItemId = ( item: ItemWithId ) => item.id;\nconst defaultIsItemClickable = () => true;\nconst EMPTY_ARRAY: any[] = [];\n\nexport default function DataViews< Item >( {\n\tview,\n\tonChangeView,\n\tfields,\n\tsearch = true,\n\tsearchLabel = undefined,\n\tactions = EMPTY_ARRAY,\n\tdata,\n\tgetItemId = defaultGetItemId,\n\tgetItemLevel,\n\tisLoading = false,\n\tpaginationInfo,\n\tdefaultLayouts,\n\tselection: selectionProperty,\n\tonChangeSelection,\n\tonClickItem,\n\tisItemClickable = defaultIsItemClickable,\n\theader,\n}: DataViewsProps< Item > ) {\n\tconst [ containerWidth, setContainerWidth ] = useState( 0 );\n\tconst containerRef = useResizeObserver(\n\t\t( resizeObserverEntries: any ) => {\n\t\t\tsetContainerWidth(\n\t\t\t\tresizeObserverEntries[ 0 ].borderBoxSize[ 0 ].inlineSize\n\t\t\t);\n\t\t},\n\t\t{ box: 'border-box' }\n\t);\n\tconst [ selectionState, setSelectionState ] = useState< string[] >( [] );\n\tconst isUncontrolled =\n\t\tselectionProperty === undefined || onChangeSelection === undefined;\n\tconst selection = isUncontrolled ? selectionState : selectionProperty;\n\tconst [ openedFilter, setOpenedFilter ] = useState< string | null >( null );\n\tfunction setSelectionWithChange( value: SelectionOrUpdater ) {\n\t\tconst newValue =\n\t\t\ttypeof value === 'function' ? value( selection ) : value;\n\t\tif ( isUncontrolled ) {\n\t\t\tsetSelectionState( newValue );\n\t\t}\n\t\tif ( onChangeSelection ) {\n\t\t\tonChangeSelection( newValue );\n\t\t}\n\t}\n\tconst _fields = useMemo( () => normalizeFields( fields ), [ fields ] );\n\tconst _selection = useMemo( () => {\n\t\treturn selection.filter( ( id ) =>\n\t\t\tdata.some( ( item ) => getItemId( item ) === id )\n\t\t);\n\t}, [ selection, data, getItemId ] );\n\n\tconst filters = useFilters( _fields, view );\n\tconst [ isShowingFilter, setIsShowingFilter ] = useState< boolean >( () =>\n\t\t( filters || [] ).some( ( filter ) => filter.isPrimary )\n\t);\n\n\treturn (\n\t\t<DataViewsContext.Provider\n\t\t\tvalue={ {\n\t\t\t\tview,\n\t\t\t\tonChangeView,\n\t\t\t\tfields: _fields,\n\t\t\t\tactions,\n\t\t\t\tdata,\n\t\t\t\tisLoading,\n\t\t\t\tpaginationInfo,\n\t\t\t\tselection: _selection,\n\t\t\t\tonChangeSelection: setSelectionWithChange,\n\t\t\t\topenedFilter,\n\t\t\t\tsetOpenedFilter,\n\t\t\t\tgetItemId,\n\t\t\t\tgetItemLevel,\n\t\t\t\tisItemClickable,\n\t\t\t\tonClickItem,\n\t\t\t\tcontainerWidth,\n\t\t\t} }\n\t\t>\n\t\t\t<div className=\"dataviews-wrapper\" ref={ containerRef }>\n\t\t\t\t<HStack\n\t\t\t\t\talignment=\"top\"\n\t\t\t\t\tjustify=\"space-between\"\n\t\t\t\t\tclassName=\"dataviews__view-actions\"\n\t\t\t\t\tspacing={ 1 }\n\t\t\t\t>\n\t\t\t\t\t<HStack\n\t\t\t\t\t\tjustify=\"start\"\n\t\t\t\t\t\texpanded={ false }\n\t\t\t\t\t\tclassName=\"dataviews__search\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ search && <DataViewsSearch label={ searchLabel } /> }\n\t\t\t\t\t\t<FiltersToggle\n\t\t\t\t\t\t\tfilters={ filters }\n\t\t\t\t\t\t\tview={ view }\n\t\t\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t\t\t\tsetOpenedFilter={ setOpenedFilter }\n\t\t\t\t\t\t\tsetIsShowingFilter={ setIsShowingFilter }\n\t\t\t\t\t\t\tisShowingFilter={ isShowingFilter }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</HStack>\n\t\t\t\t\t<HStack\n\t\t\t\t\t\tspacing={ 1 }\n\t\t\t\t\t\texpanded={ false }\n\t\t\t\t\t\tstyle={ { flexShrink: 0 } }\n\t\t\t\t\t>\n\t\t\t\t\t\t<DataViewsViewConfig\n\t\t\t\t\t\t\tdefaultLayouts={ defaultLayouts }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{ header }\n\t\t\t\t\t</HStack>\n\t\t\t\t</HStack>\n\t\t\t\t{ isShowingFilter && <DataViewsFilters /> }\n\t\t\t\t<DataViewsLayout />\n\t\t\t\t<DataViewsFooter />\n\t\t\t</div>\n\t\t</DataViewsContext.Provider>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["__experimentalHStack","HStack","useContext","useMemo","useRef","useState","useMergeRefs","useResizeObserver","DataViewsContext","default","DataViewsFilters","useFilters","FiltersToggle","DataViewsLayout","DataViewsFooter","DataViewsSearch","BulkActionsFooter","DataViewsPagination","DataViewsViewConfig","DataviewsViewConfigDropdown","ViewTypeMenu","normalizeFields","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","defaultGetItemId","item","id","defaultIsItemClickable","EMPTY_ARRAY","DefaultUI","header","search","searchLabel","undefined","isShowingFilter","children","alignment","justify","className","spacing","expanded","label","style","flexShrink","DataViews","view","onChangeView","fields","actions","data","getItemId","getItemLevel","isLoading","paginationInfo","defaultLayouts","selection","selectionProperty","onChangeSelection","onClickItem","renderItemLink","isItemClickable","perPageSizes","containerRef","containerWidth","setContainerWidth","resizeObserverRef","resizeObserverEntries","borderBoxSize","inlineSize","box","selectionState","setSelectionState","isUncontrolled","openedFilter","setOpenedFilter","setSelectionWithChange","value","newValue","_fields","_selection","filter","some","filters","setIsShowingFilter","isPrimary","Provider","ref","DataViewsSubComponents","BulkActionToolbar","Filters","Layout","LayoutSwitcher","Pagination","Search","ViewConfig"],"sources":["@wordpress/dataviews/src/components/dataviews/index.tsx"],"sourcesContent":["/**\n * External dependencies\n */\nimport type { ReactNode, ComponentProps, ReactElement } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport { __experimentalHStack as HStack } from '@wordpress/components';\nimport { useContext, useMemo, useRef, useState } from '@wordpress/element';\nimport { useMergeRefs, useResizeObserver } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport DataViewsContext from '../dataviews-context';\nimport {\n\tdefault as DataViewsFilters,\n\tuseFilters,\n\tFiltersToggle,\n} from '../dataviews-filters';\nimport DataViewsLayout from '../dataviews-layout';\nimport DataViewsFooter from '../dataviews-footer';\nimport DataViewsSearch from '../dataviews-search';\nimport { BulkActionsFooter } from '../dataviews-bulk-actions';\nimport { DataViewsPagination } from '../dataviews-pagination';\nimport DataViewsViewConfig, {\n\tDataviewsViewConfigDropdown,\n\tViewTypeMenu,\n} from '../dataviews-view-config';\nimport { normalizeFields } from '../../normalize-fields';\nimport type { Action, Field, View, SupportedLayouts } from '../../types';\nimport type { SelectionOrUpdater } from '../../private-types';\ntype ItemWithId = { id: string };\n\ntype DataViewsProps< Item > = {\n\tview: View;\n\tonChangeView: ( view: View ) => void;\n\tfields: Field< Item >[];\n\tsearch?: boolean;\n\tsearchLabel?: string;\n\tactions?: Action< Item >[];\n\tdata: Item[];\n\tisLoading?: boolean;\n\tpaginationInfo: {\n\t\ttotalItems: number;\n\t\ttotalPages: number;\n\t};\n\tdefaultLayouts: SupportedLayouts;\n\tselection?: string[];\n\tonChangeSelection?: ( items: string[] ) => void;\n\tonClickItem?: ( item: Item ) => void;\n\trenderItemLink?: (\n\t\tprops: {\n\t\t\titem: Item;\n\t\t} & ComponentProps< 'a' >\n\t) => ReactElement;\n\tisItemClickable?: ( item: Item ) => boolean;\n\theader?: ReactNode;\n\tgetItemLevel?: ( item: Item ) => number;\n\tchildren?: ReactNode;\n\tperPageSizes?: [ number, number, number, number ];\n} & ( Item extends ItemWithId\n\t? { getItemId?: ( item: Item ) => string }\n\t: { getItemId: ( item: Item ) => string } );\n\nconst defaultGetItemId = ( item: ItemWithId ) => item.id;\nconst defaultIsItemClickable = () => true;\nconst EMPTY_ARRAY: any[] = [];\n\ntype DefaultUIProps = Pick<\n\tDataViewsProps< any >,\n\t'header' | 'search' | 'searchLabel'\n>;\n\nfunction DefaultUI( {\n\theader,\n\tsearch = true,\n\tsearchLabel = undefined,\n}: DefaultUIProps ) {\n\tconst { isShowingFilter } = useContext( DataViewsContext );\n\treturn (\n\t\t<>\n\t\t\t<HStack\n\t\t\t\talignment=\"top\"\n\t\t\t\tjustify=\"space-between\"\n\t\t\t\tclassName=\"dataviews__view-actions\"\n\t\t\t\tspacing={ 1 }\n\t\t\t>\n\t\t\t\t<HStack\n\t\t\t\t\tjustify=\"start\"\n\t\t\t\t\texpanded={ false }\n\t\t\t\t\tclassName=\"dataviews__search\"\n\t\t\t\t>\n\t\t\t\t\t{ search && <DataViewsSearch label={ searchLabel } /> }\n\t\t\t\t\t<FiltersToggle />\n\t\t\t\t</HStack>\n\t\t\t\t<HStack\n\t\t\t\t\tspacing={ 1 }\n\t\t\t\t\texpanded={ false }\n\t\t\t\t\tstyle={ { flexShrink: 0 } }\n\t\t\t\t>\n\t\t\t\t\t<DataViewsViewConfig />\n\t\t\t\t\t{ header }\n\t\t\t\t</HStack>\n\t\t\t</HStack>\n\t\t\t{ isShowingFilter && (\n\t\t\t\t<DataViewsFilters className=\"dataviews-filters__container\" />\n\t\t\t) }\n\t\t\t<DataViewsLayout />\n\t\t\t<DataViewsFooter />\n\t\t</>\n\t);\n}\n\nfunction DataViews< Item >( {\n\tview,\n\tonChangeView,\n\tfields,\n\tsearch = true,\n\tsearchLabel = undefined,\n\tactions = EMPTY_ARRAY,\n\tdata,\n\tgetItemId = defaultGetItemId,\n\tgetItemLevel,\n\tisLoading = false,\n\tpaginationInfo,\n\tdefaultLayouts,\n\tselection: selectionProperty,\n\tonChangeSelection,\n\tonClickItem,\n\trenderItemLink,\n\tisItemClickable = defaultIsItemClickable,\n\theader,\n\tchildren,\n\tperPageSizes,\n}: DataViewsProps< Item > ) {\n\tconst containerRef = useRef< HTMLDivElement | null >( null );\n\tconst [ containerWidth, setContainerWidth ] = useState( 0 );\n\tconst resizeObserverRef = useResizeObserver(\n\t\t( resizeObserverEntries: any ) => {\n\t\t\tsetContainerWidth(\n\t\t\t\tresizeObserverEntries[ 0 ].borderBoxSize[ 0 ].inlineSize\n\t\t\t);\n\t\t},\n\t\t{ box: 'border-box' }\n\t);\n\tconst [ selectionState, setSelectionState ] = useState< string[] >( [] );\n\tconst isUncontrolled =\n\t\tselectionProperty === undefined || onChangeSelection === undefined;\n\tconst selection = isUncontrolled ? selectionState : selectionProperty;\n\tconst [ openedFilter, setOpenedFilter ] = useState< string | null >( null );\n\tfunction setSelectionWithChange( value: SelectionOrUpdater ) {\n\t\tconst newValue =\n\t\t\ttypeof value === 'function' ? value( selection ) : value;\n\t\tif ( isUncontrolled ) {\n\t\t\tsetSelectionState( newValue );\n\t\t}\n\t\tif ( onChangeSelection ) {\n\t\t\tonChangeSelection( newValue );\n\t\t}\n\t}\n\tconst _fields = useMemo( () => normalizeFields( fields ), [ fields ] );\n\tconst _selection = useMemo( () => {\n\t\treturn selection.filter( ( id ) =>\n\t\t\tdata.some( ( item ) => getItemId( item ) === id )\n\t\t);\n\t}, [ selection, data, getItemId ] );\n\n\tconst filters = useFilters( _fields, view );\n\tconst [ isShowingFilter, setIsShowingFilter ] = useState< boolean >( () =>\n\t\t( filters || [] ).some( ( filter ) => filter.isPrimary )\n\t);\n\n\treturn (\n\t\t<DataViewsContext.Provider\n\t\t\tvalue={ {\n\t\t\t\tview,\n\t\t\t\tonChangeView,\n\t\t\t\tfields: _fields,\n\t\t\t\tactions,\n\t\t\t\tdata,\n\t\t\t\tisLoading,\n\t\t\t\tpaginationInfo,\n\t\t\t\tselection: _selection,\n\t\t\t\tonChangeSelection: setSelectionWithChange,\n\t\t\t\topenedFilter,\n\t\t\t\tsetOpenedFilter,\n\t\t\t\tgetItemId,\n\t\t\t\tgetItemLevel,\n\t\t\t\tisItemClickable,\n\t\t\t\tonClickItem,\n\t\t\t\trenderItemLink,\n\t\t\t\tcontainerWidth,\n\t\t\t\tcontainerRef,\n\t\t\t\tdefaultLayouts,\n\t\t\t\tfilters,\n\t\t\t\tisShowingFilter,\n\t\t\t\tsetIsShowingFilter,\n\t\t\t\tperPageSizes,\n\t\t\t} }\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName=\"dataviews-wrapper\"\n\t\t\t\tref={ useMergeRefs( [ containerRef, resizeObserverRef ] ) }\n\t\t\t>\n\t\t\t\t{ children ?? (\n\t\t\t\t\t<DefaultUI\n\t\t\t\t\t\theader={ header }\n\t\t\t\t\t\tsearch={ search }\n\t\t\t\t\t\tsearchLabel={ searchLabel }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</DataViewsContext.Provider>\n\t);\n}\n\n// Populate the DataViews sub components\nconst DataViewsSubComponents = DataViews as typeof DataViews & {\n\tBulkActionToolbar: typeof BulkActionsFooter;\n\tFilters: typeof DataViewsFilters;\n\tFiltersToggle: typeof FiltersToggle;\n\tLayout: typeof DataViewsLayout;\n\tLayoutSwitcher: typeof ViewTypeMenu;\n\tPagination: typeof DataViewsPagination;\n\tSearch: typeof DataViewsSearch;\n\tViewConfig: typeof DataviewsViewConfigDropdown;\n};\n\nDataViewsSubComponents.BulkActionToolbar = BulkActionsFooter;\nDataViewsSubComponents.Filters = DataViewsFilters;\nDataViewsSubComponents.FiltersToggle = FiltersToggle;\nDataViewsSubComponents.Layout = DataViewsLayout;\nDataViewsSubComponents.LayoutSwitcher = ViewTypeMenu;\nDataViewsSubComponents.Pagination = DataViewsPagination;\nDataViewsSubComponents.Search = DataViewsSearch;\nDataViewsSubComponents.ViewConfig = DataviewsViewConfigDropdown;\n\nexport default DataViewsSubComponents;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
|
|
1
5
|
/**
|
|
2
6
|
* WordPress dependencies
|
|
3
7
|
*/
|
|
4
|
-
import { createContext } from '@wordpress/element';
|
|
8
|
+
import { createContext, createRef } from '@wordpress/element';
|
|
5
9
|
|
|
6
10
|
/**
|
|
7
11
|
* Internal dependencies
|
|
@@ -25,7 +29,17 @@ const DataViewsContext = createContext({
|
|
|
25
29
|
openedFilter: null,
|
|
26
30
|
getItemId: item => item.id,
|
|
27
31
|
isItemClickable: () => true,
|
|
28
|
-
|
|
32
|
+
renderItemLink: undefined,
|
|
33
|
+
containerWidth: 0,
|
|
34
|
+
containerRef: createRef(),
|
|
35
|
+
defaultLayouts: {
|
|
36
|
+
list: {},
|
|
37
|
+
grid: {},
|
|
38
|
+
table: {}
|
|
39
|
+
},
|
|
40
|
+
filters: [],
|
|
41
|
+
isShowingFilter: false,
|
|
42
|
+
setIsShowingFilter: () => {}
|
|
29
43
|
});
|
|
30
44
|
export default DataViewsContext;
|
|
31
45
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContext","LAYOUT_TABLE","DataViewsContext","view","type","onChangeView","fields","data","paginationInfo","totalItems","totalPages","selection","onChangeSelection","setOpenedFilter","openedFilter","getItemId","item","id","isItemClickable","containerWidth"],"sources":["@wordpress/dataviews/src/components/dataviews-context/index.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createContext } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type {
|
|
1
|
+
{"version":3,"names":["createContext","createRef","LAYOUT_TABLE","DataViewsContext","view","type","onChangeView","fields","data","paginationInfo","totalItems","totalPages","selection","onChangeSelection","setOpenedFilter","openedFilter","getItemId","item","id","isItemClickable","renderItemLink","undefined","containerWidth","containerRef","defaultLayouts","list","grid","table","filters","isShowingFilter","setIsShowingFilter"],"sources":["@wordpress/dataviews/src/components/dataviews-context/index.ts"],"sourcesContent":["/**\n * External dependencies\n */\nimport type { ComponentProps, ReactElement } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport { createContext, createRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport type {\n\tView,\n\tAction,\n\tNormalizedField,\n\tSupportedLayouts,\n\tNormalizedFilter,\n} from '../../types';\nimport type { SetSelection } from '../../private-types';\nimport { LAYOUT_TABLE } from '../../constants';\n\ntype DataViewsContextType< Item > = {\n\tview: View;\n\tonChangeView: ( view: View ) => void;\n\tfields: NormalizedField< Item >[];\n\tactions?: Action< Item >[];\n\tdata: Item[];\n\tisLoading?: boolean;\n\tpaginationInfo: {\n\t\ttotalItems: number;\n\t\ttotalPages: number;\n\t};\n\tselection: string[];\n\tonChangeSelection: SetSelection;\n\topenedFilter: string | null;\n\tsetOpenedFilter: ( openedFilter: string | null ) => void;\n\tgetItemId: ( item: Item ) => string;\n\tgetItemLevel?: ( item: Item ) => number;\n\tonClickItem?: ( item: Item ) => void;\n\trenderItemLink?: (\n\t\tprops: {\n\t\t\titem: Item;\n\t\t} & ComponentProps< 'a' >\n\t) => ReactElement;\n\tisItemClickable: ( item: Item ) => boolean;\n\tcontainerWidth: number;\n\tcontainerRef: React.MutableRefObject< HTMLDivElement | null >;\n\tdefaultLayouts: SupportedLayouts;\n\tfilters: NormalizedFilter[];\n\tisShowingFilter: boolean;\n\tsetIsShowingFilter: ( value: boolean ) => void;\n\tperPageSizes?: [ number, number, number, number ];\n};\n\nconst DataViewsContext = createContext< DataViewsContextType< any > >( {\n\tview: { type: LAYOUT_TABLE },\n\tonChangeView: () => {},\n\tfields: [],\n\tdata: [],\n\tpaginationInfo: {\n\t\ttotalItems: 0,\n\t\ttotalPages: 0,\n\t},\n\tselection: [],\n\tonChangeSelection: () => {},\n\tsetOpenedFilter: () => {},\n\topenedFilter: null,\n\tgetItemId: ( item ) => item.id,\n\tisItemClickable: () => true,\n\trenderItemLink: undefined,\n\tcontainerWidth: 0,\n\tcontainerRef: createRef(),\n\tdefaultLayouts: { list: {}, grid: {}, table: {} },\n\tfilters: [],\n\tisShowingFilter: false,\n\tsetIsShowingFilter: () => {},\n} );\n\nexport default DataViewsContext;\n"],"mappings":"AAAA;AACA;AACA;;AAGA;AACA;AACA;AACA,SAASA,aAAa,EAAEC,SAAS,QAAQ,oBAAoB;;AAE7D;AACA;AACA;;AASA,SAASC,YAAY,QAAQ,iBAAiB;AAmC9C,MAAMC,gBAAgB,GAAGH,aAAa,CAAiC;EACtEI,IAAI,EAAE;IAAEC,IAAI,EAAEH;EAAa,CAAC;EAC5BI,YAAY,EAAEA,CAAA,KAAM,CAAC,CAAC;EACtBC,MAAM,EAAE,EAAE;EACVC,IAAI,EAAE,EAAE;EACRC,cAAc,EAAE;IACfC,UAAU,EAAE,CAAC;IACbC,UAAU,EAAE;EACb,CAAC;EACDC,SAAS,EAAE,EAAE;EACbC,iBAAiB,EAAEA,CAAA,KAAM,CAAC,CAAC;EAC3BC,eAAe,EAAEA,CAAA,KAAM,CAAC,CAAC;EACzBC,YAAY,EAAE,IAAI;EAClBC,SAAS,EAAIC,IAAI,IAAMA,IAAI,CAACC,EAAE;EAC9BC,eAAe,EAAEA,CAAA,KAAM,IAAI;EAC3BC,cAAc,EAAEC,SAAS;EACzBC,cAAc,EAAE,CAAC;EACjBC,YAAY,EAAEtB,SAAS,CAAC,CAAC;EACzBuB,cAAc,EAAE;IAAEC,IAAI,EAAE,CAAC,CAAC;IAAEC,IAAI,EAAE,CAAC,CAAC;IAAEC,KAAK,EAAE,CAAC;EAAE,CAAC;EACjDC,OAAO,EAAE,EAAE;EACXC,eAAe,EAAE,KAAK;EACtBC,kBAAkB,EAAEA,CAAA,KAAM,CAAC;AAC5B,CAAE,CAAC;AAEH,eAAe3B,gBAAgB","ignoreList":[]}
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
/**
|
|
6
|
+
* WordPress dependencies
|
|
7
|
+
*/
|
|
8
|
+
import { Dropdown, __experimentalVStack as VStack, __experimentalHStack as HStack, FlexItem, SelectControl, Tooltip, Icon } from '@wordpress/components';
|
|
9
|
+
import { __, sprintf } from '@wordpress/i18n';
|
|
10
|
+
import { useRef, createInterpolateElement } from '@wordpress/element';
|
|
11
|
+
import { closeSmall } from '@wordpress/icons';
|
|
12
|
+
const ENTER = 'Enter';
|
|
13
|
+
const SPACE = ' ';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Internal dependencies
|
|
17
|
+
*/
|
|
18
|
+
import SearchWidget from './search-widget';
|
|
19
|
+
import InputWidget from './input-widget';
|
|
20
|
+
import { OPERATORS, OPERATOR_IS, OPERATOR_IS_NOT, OPERATOR_IS_ANY, OPERATOR_IS_NONE, OPERATOR_IS_ALL, OPERATOR_IS_NOT_ALL, OPERATOR_LESS_THAN, OPERATOR_GREATER_THAN, OPERATOR_LESS_THAN_OR_EQUAL, OPERATOR_GREATER_THAN_OR_EQUAL, OPERATOR_CONTAINS, OPERATOR_NOT_CONTAINS, OPERATOR_STARTS_WITH, OPERATOR_BEFORE, OPERATOR_AFTER, OPERATOR_BEFORE_INC, OPERATOR_AFTER_INC, OPERATOR_BETWEEN, OPERATOR_ON, OPERATOR_NOT_ON, OPERATOR_IN_THE_PAST, OPERATOR_OVER } from '../../constants';
|
|
21
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
|
+
const FilterText = ({
|
|
23
|
+
activeElements,
|
|
24
|
+
filterInView,
|
|
25
|
+
filter
|
|
26
|
+
}) => {
|
|
27
|
+
if (activeElements === undefined || activeElements.length === 0) {
|
|
28
|
+
return filter.name;
|
|
29
|
+
}
|
|
30
|
+
const filterTextWrappers = {
|
|
31
|
+
Name: /*#__PURE__*/_jsx("span", {
|
|
32
|
+
className: "dataviews-filters__summary-filter-text-name"
|
|
33
|
+
}),
|
|
34
|
+
Value: /*#__PURE__*/_jsx("span", {
|
|
35
|
+
className: "dataviews-filters__summary-filter-text-value"
|
|
36
|
+
})
|
|
37
|
+
};
|
|
38
|
+
if (filterInView?.operator === OPERATOR_IS_ANY) {
|
|
39
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Author is any: Admin, Editor". */
|
|
40
|
+
__('<Name>%1$s is any: </Name><Value>%2$s</Value>'), filter.name, activeElements.map(element => element.label).join(', ')), filterTextWrappers);
|
|
41
|
+
}
|
|
42
|
+
if (filterInView?.operator === OPERATOR_IS_NONE) {
|
|
43
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Author is none: Admin, Editor". */
|
|
44
|
+
__('<Name>%1$s is none: </Name><Value>%2$s</Value>'), filter.name, activeElements.map(element => element.label).join(', ')), filterTextWrappers);
|
|
45
|
+
}
|
|
46
|
+
if (filterInView?.operator === OPERATOR_IS_ALL) {
|
|
47
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Author is all: Admin, Editor". */
|
|
48
|
+
__('<Name>%1$s is all: </Name><Value>%2$s</Value>'), filter.name, activeElements.map(element => element.label).join(', ')), filterTextWrappers);
|
|
49
|
+
}
|
|
50
|
+
if (filterInView?.operator === OPERATOR_IS_NOT_ALL) {
|
|
51
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Author is not all: Admin, Editor". */
|
|
52
|
+
__('<Name>%1$s is not all: </Name><Value>%2$s</Value>'), filter.name, activeElements.map(element => element.label).join(', ')), filterTextWrappers);
|
|
53
|
+
}
|
|
54
|
+
if (filterInView?.operator === OPERATOR_IS) {
|
|
55
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Author is: Admin". */
|
|
56
|
+
__('<Name>%1$s is: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
|
|
57
|
+
}
|
|
58
|
+
if (filterInView?.operator === OPERATOR_IS_NOT) {
|
|
59
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Author is not: Admin". */
|
|
60
|
+
__('<Name>%1$s is not: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
|
|
61
|
+
}
|
|
62
|
+
if (filterInView?.operator === OPERATOR_LESS_THAN) {
|
|
63
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Price is less than: 10". */
|
|
64
|
+
__('<Name>%1$s is less than: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
|
|
65
|
+
}
|
|
66
|
+
if (filterInView?.operator === OPERATOR_GREATER_THAN) {
|
|
67
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Price is greater than: 10". */
|
|
68
|
+
__('<Name>%1$s is greater than: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
|
|
69
|
+
}
|
|
70
|
+
if (filterInView?.operator === OPERATOR_LESS_THAN_OR_EQUAL) {
|
|
71
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Price is less than or equal to: 10". */
|
|
72
|
+
__('<Name>%1$s is less than or equal to: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
|
|
73
|
+
}
|
|
74
|
+
if (filterInView?.operator === OPERATOR_GREATER_THAN_OR_EQUAL) {
|
|
75
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Price is greater than or equal to: 10". */
|
|
76
|
+
__('<Name>%1$s is greater than or equal to: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
|
|
77
|
+
}
|
|
78
|
+
if (filterInView?.operator === OPERATOR_CONTAINS) {
|
|
79
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Title contains: Mars". */
|
|
80
|
+
__('<Name>%1$s contains: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
|
|
81
|
+
}
|
|
82
|
+
if (filterInView?.operator === OPERATOR_NOT_CONTAINS) {
|
|
83
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Description doesn't contain: photo". */
|
|
84
|
+
__("<Name>%1$s doesn't contain: </Name><Value>%2$s</Value>"), filter.name, activeElements[0].label), filterTextWrappers);
|
|
85
|
+
}
|
|
86
|
+
if (filterInView?.operator === OPERATOR_STARTS_WITH) {
|
|
87
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Title starts with: Mar". */
|
|
88
|
+
__('<Name>%1$s starts with: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
|
|
89
|
+
}
|
|
90
|
+
if (filterInView?.operator === OPERATOR_BEFORE) {
|
|
91
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is before: 2024-01-01". */
|
|
92
|
+
__('<Name>%1$s is before: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
|
|
93
|
+
}
|
|
94
|
+
if (filterInView?.operator === OPERATOR_AFTER) {
|
|
95
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is after: 2024-01-01". */
|
|
96
|
+
__('<Name>%1$s is after: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
|
|
97
|
+
}
|
|
98
|
+
if (filterInView?.operator === OPERATOR_BEFORE_INC) {
|
|
99
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is on or before: 2024-01-01". */
|
|
100
|
+
__('<Name>%1$s is on or before: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
|
|
101
|
+
}
|
|
102
|
+
if (filterInView?.operator === OPERATOR_AFTER_INC) {
|
|
103
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is on or after: 2024-01-01". */
|
|
104
|
+
__('<Name>%1$s is on or after: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
|
|
105
|
+
}
|
|
106
|
+
if (filterInView?.operator === OPERATOR_BETWEEN) {
|
|
107
|
+
const {
|
|
108
|
+
label
|
|
109
|
+
} = activeElements[0];
|
|
110
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Min value. 3: Max value. e.g.: "Item count between (inc): 10-180". */
|
|
111
|
+
__('<Name>%1$s between (inc): </Name><Value>%2$s-%3$s</Value>'), filter.name, label[0], label[1]), filterTextWrappers);
|
|
112
|
+
}
|
|
113
|
+
if (filterInView?.operator === OPERATOR_ON) {
|
|
114
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is: 2024-01-01". */
|
|
115
|
+
__('<Name>%1$s is: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
|
|
116
|
+
}
|
|
117
|
+
if (filterInView?.operator === OPERATOR_NOT_ON) {
|
|
118
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is not: 2024-01-01". */
|
|
119
|
+
__('<Name>%1$s is not: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
|
|
120
|
+
}
|
|
121
|
+
if (filterInView?.operator === OPERATOR_IN_THE_PAST) {
|
|
122
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is in the past: 1 days". */
|
|
123
|
+
__('<Name>%1$s is in the past: </Name><Value>%2$s</Value>'), filter.name, `${activeElements[0].value.value} ${activeElements[0].value.unit}`), filterTextWrappers);
|
|
124
|
+
}
|
|
125
|
+
if (filterInView?.operator === OPERATOR_OVER) {
|
|
126
|
+
return createInterpolateElement(sprintf(/* translators: 1: Filter name. 2: Filter value. e.g.: "Date is over: 1 days ago". */
|
|
127
|
+
__('<Name>%1$s is over: </Name><Value>%2$s</Value> ago'), filter.name, `${activeElements[0].value.value} ${activeElements[0].value.unit}`), filterTextWrappers);
|
|
128
|
+
}
|
|
129
|
+
return sprintf(/* translators: 1: Filter name e.g.: "Unknown status for Author". */
|
|
130
|
+
__('Unknown status for %1$s'), filter.name);
|
|
131
|
+
};
|
|
132
|
+
function OperatorSelector({
|
|
133
|
+
filter,
|
|
134
|
+
view,
|
|
135
|
+
onChangeView
|
|
136
|
+
}) {
|
|
137
|
+
const operatorOptions = filter.operators?.map(operator => ({
|
|
138
|
+
value: operator,
|
|
139
|
+
label: OPERATORS[operator]?.label
|
|
140
|
+
}));
|
|
141
|
+
const currentFilter = view.filters?.find(_filter => _filter.field === filter.field);
|
|
142
|
+
const value = currentFilter?.operator || filter.operators[0];
|
|
143
|
+
return operatorOptions.length > 1 && /*#__PURE__*/_jsxs(HStack, {
|
|
144
|
+
spacing: 2,
|
|
145
|
+
justify: "flex-start",
|
|
146
|
+
className: "dataviews-filters__summary-operators-container",
|
|
147
|
+
children: [/*#__PURE__*/_jsx(FlexItem, {
|
|
148
|
+
className: "dataviews-filters__summary-operators-filter-name",
|
|
149
|
+
children: filter.name
|
|
150
|
+
}), /*#__PURE__*/_jsx(SelectControl, {
|
|
151
|
+
className: "dataviews-filters__summary-operators-filter-select",
|
|
152
|
+
label: __('Conditions'),
|
|
153
|
+
value: value,
|
|
154
|
+
options: operatorOptions,
|
|
155
|
+
onChange: newValue => {
|
|
156
|
+
var _view$filters, _view$filters2;
|
|
157
|
+
const operator = newValue;
|
|
158
|
+
const currentOperator = currentFilter?.operator;
|
|
159
|
+
const newFilters = currentFilter ? [...((_view$filters = view.filters) !== null && _view$filters !== void 0 ? _view$filters : []).map(_filter => {
|
|
160
|
+
if (_filter.field === filter.field) {
|
|
161
|
+
// Reset the value only when switching between operators that have different value types.
|
|
162
|
+
const OPERATORS_SHOULD_RESET_VALUE = [OPERATOR_BETWEEN, OPERATOR_IN_THE_PAST, OPERATOR_OVER];
|
|
163
|
+
const shouldResetValue = currentOperator && (OPERATORS_SHOULD_RESET_VALUE.includes(currentOperator) || OPERATORS_SHOULD_RESET_VALUE.includes(operator));
|
|
164
|
+
return {
|
|
165
|
+
..._filter,
|
|
166
|
+
value: shouldResetValue ? undefined : _filter.value,
|
|
167
|
+
operator
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
return _filter;
|
|
171
|
+
})] : [...((_view$filters2 = view.filters) !== null && _view$filters2 !== void 0 ? _view$filters2 : []), {
|
|
172
|
+
field: filter.field,
|
|
173
|
+
operator,
|
|
174
|
+
value: undefined
|
|
175
|
+
}];
|
|
176
|
+
onChangeView({
|
|
177
|
+
...view,
|
|
178
|
+
page: 1,
|
|
179
|
+
filters: newFilters
|
|
180
|
+
});
|
|
181
|
+
},
|
|
182
|
+
size: "small",
|
|
183
|
+
variant: "minimal",
|
|
184
|
+
__nextHasNoMarginBottom: true,
|
|
185
|
+
hideLabelFromVision: true
|
|
186
|
+
})]
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
export default function Filter({
|
|
190
|
+
addFilterRef,
|
|
191
|
+
openedFilter,
|
|
192
|
+
fields,
|
|
193
|
+
...commonProps
|
|
194
|
+
}) {
|
|
195
|
+
const toggleRef = useRef(null);
|
|
196
|
+
const {
|
|
197
|
+
filter,
|
|
198
|
+
view,
|
|
199
|
+
onChangeView
|
|
200
|
+
} = commonProps;
|
|
201
|
+
const filterInView = view.filters?.find(f => f.field === filter.field);
|
|
202
|
+
let activeElements = [];
|
|
203
|
+
if (filter.elements.length > 0) {
|
|
204
|
+
activeElements = filter.elements.filter(element => {
|
|
205
|
+
if (filter.singleSelection) {
|
|
206
|
+
return element.value === filterInView?.value;
|
|
207
|
+
}
|
|
208
|
+
return filterInView?.value?.includes(element.value);
|
|
209
|
+
});
|
|
210
|
+
} else if (filterInView?.value !== undefined) {
|
|
211
|
+
activeElements = [{
|
|
212
|
+
value: filterInView.value,
|
|
213
|
+
label: filterInView.value
|
|
214
|
+
}];
|
|
215
|
+
}
|
|
216
|
+
const isPrimary = filter.isPrimary;
|
|
217
|
+
const hasValues = filterInView?.value !== undefined;
|
|
218
|
+
const canResetOrRemove = !isPrimary || hasValues;
|
|
219
|
+
return /*#__PURE__*/_jsx(Dropdown, {
|
|
220
|
+
defaultOpen: openedFilter === filter.field,
|
|
221
|
+
contentClassName: "dataviews-filters__summary-popover",
|
|
222
|
+
popoverProps: {
|
|
223
|
+
placement: 'bottom-start',
|
|
224
|
+
role: 'dialog'
|
|
225
|
+
},
|
|
226
|
+
onClose: () => {
|
|
227
|
+
toggleRef.current?.focus();
|
|
228
|
+
},
|
|
229
|
+
renderToggle: ({
|
|
230
|
+
isOpen,
|
|
231
|
+
onToggle
|
|
232
|
+
}) => /*#__PURE__*/_jsxs("div", {
|
|
233
|
+
className: "dataviews-filters__summary-chip-container",
|
|
234
|
+
children: [/*#__PURE__*/_jsx(Tooltip, {
|
|
235
|
+
text: sprintf(/* translators: 1: Filter name. */
|
|
236
|
+
__('Filter by: %1$s'), filter.name.toLowerCase()),
|
|
237
|
+
placement: "top",
|
|
238
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
239
|
+
className: clsx('dataviews-filters__summary-chip', {
|
|
240
|
+
'has-reset': canResetOrRemove,
|
|
241
|
+
'has-values': hasValues
|
|
242
|
+
}),
|
|
243
|
+
role: "button",
|
|
244
|
+
tabIndex: 0,
|
|
245
|
+
onClick: onToggle,
|
|
246
|
+
onKeyDown: event => {
|
|
247
|
+
if ([ENTER, SPACE].includes(event.key)) {
|
|
248
|
+
onToggle();
|
|
249
|
+
event.preventDefault();
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
"aria-pressed": isOpen,
|
|
253
|
+
"aria-expanded": isOpen,
|
|
254
|
+
ref: toggleRef,
|
|
255
|
+
children: /*#__PURE__*/_jsx(FilterText, {
|
|
256
|
+
activeElements: activeElements,
|
|
257
|
+
filterInView: filterInView,
|
|
258
|
+
filter: filter
|
|
259
|
+
})
|
|
260
|
+
})
|
|
261
|
+
}), canResetOrRemove && /*#__PURE__*/_jsx(Tooltip, {
|
|
262
|
+
text: isPrimary ? __('Reset') : __('Remove'),
|
|
263
|
+
placement: "top",
|
|
264
|
+
children: /*#__PURE__*/_jsx("button", {
|
|
265
|
+
className: clsx('dataviews-filters__summary-chip-remove', {
|
|
266
|
+
'has-values': hasValues
|
|
267
|
+
}),
|
|
268
|
+
onClick: () => {
|
|
269
|
+
onChangeView({
|
|
270
|
+
...view,
|
|
271
|
+
page: 1,
|
|
272
|
+
filters: view.filters?.filter(_filter => _filter.field !== filter.field)
|
|
273
|
+
});
|
|
274
|
+
// If the filter is not primary and can be removed, it will be added
|
|
275
|
+
// back to the available filters from `Add filter` component.
|
|
276
|
+
if (!isPrimary) {
|
|
277
|
+
addFilterRef.current?.focus();
|
|
278
|
+
} else {
|
|
279
|
+
// If is primary, focus the toggle button.
|
|
280
|
+
toggleRef.current?.focus();
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
284
|
+
icon: closeSmall
|
|
285
|
+
})
|
|
286
|
+
})
|
|
287
|
+
})]
|
|
288
|
+
}),
|
|
289
|
+
renderContent: () => {
|
|
290
|
+
return /*#__PURE__*/_jsxs(VStack, {
|
|
291
|
+
spacing: 0,
|
|
292
|
+
justify: "flex-start",
|
|
293
|
+
children: [/*#__PURE__*/_jsx(OperatorSelector, {
|
|
294
|
+
...commonProps
|
|
295
|
+
}), commonProps.filter.elements.length > 0 ? /*#__PURE__*/_jsx(SearchWidget, {
|
|
296
|
+
...commonProps,
|
|
297
|
+
filter: {
|
|
298
|
+
...commonProps.filter,
|
|
299
|
+
elements: commonProps.filter.elements
|
|
300
|
+
}
|
|
301
|
+
}) : /*#__PURE__*/_jsx(InputWidget, {
|
|
302
|
+
...commonProps,
|
|
303
|
+
fields: fields
|
|
304
|
+
})]
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=filter.js.map
|