@wordpress/dataviews 9.0.1-next.a730c9c8c.0 → 9.1.1-next.233ccab9b.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.
Files changed (100) hide show
  1. package/CHANGELOG.md +19 -3
  2. package/README.md +4 -2
  3. package/build/components/dataviews/index.js +4 -6
  4. package/build/components/dataviews/index.js.map +1 -1
  5. package/build/components/dataviews-filters/filters-toggled.js +32 -0
  6. package/build/components/dataviews-filters/filters-toggled.js.map +1 -0
  7. package/build/components/dataviews-filters/filters.js +73 -0
  8. package/build/components/dataviews-filters/filters.js.map +1 -0
  9. package/build/components/dataviews-filters/index.js +26 -190
  10. package/build/components/dataviews-filters/index.js.map +1 -1
  11. package/build/components/dataviews-filters/toggle.js +99 -0
  12. package/build/components/dataviews-filters/toggle.js.map +1 -0
  13. package/build/components/dataviews-filters/use-filters.js +63 -0
  14. package/build/components/dataviews-filters/use-filters.js.map +1 -0
  15. package/build/components/dataviews-picker/index.js +4 -6
  16. package/build/components/dataviews-picker/index.js.map +1 -1
  17. package/build/components/dataviews-view-config/index.js +22 -3
  18. package/build/components/dataviews-view-config/index.js.map +1 -1
  19. package/build/dataform-controls/array.js +110 -24
  20. package/build/dataform-controls/array.js.map +1 -1
  21. package/build/dataviews-layouts/picker-grid/index.js +4 -1
  22. package/build/dataviews-layouts/picker-grid/index.js.map +1 -1
  23. package/build/field-types/array.js +0 -6
  24. package/build/field-types/array.js.map +1 -1
  25. package/build/index.js +7 -0
  26. package/build/index.js.map +1 -1
  27. package/build/types.js.map +1 -1
  28. package/build/validation.js +18 -1
  29. package/build/validation.js.map +1 -1
  30. package/build-module/components/dataviews/index.js +5 -7
  31. package/build-module/components/dataviews/index.js.map +1 -1
  32. package/build-module/components/dataviews-filters/filters-toggled.js +24 -0
  33. package/build-module/components/dataviews-filters/filters-toggled.js.map +1 -0
  34. package/build-module/components/dataviews-filters/filters.js +65 -0
  35. package/build-module/components/dataviews-filters/filters.js.map +1 -0
  36. package/build-module/components/dataviews-filters/index.js +4 -186
  37. package/build-module/components/dataviews-filters/index.js.map +1 -1
  38. package/build-module/components/dataviews-filters/toggle.js +91 -0
  39. package/build-module/components/dataviews-filters/toggle.js.map +1 -0
  40. package/build-module/components/dataviews-filters/use-filters.js +56 -0
  41. package/build-module/components/dataviews-filters/use-filters.js.map +1 -0
  42. package/build-module/components/dataviews-picker/index.js +5 -7
  43. package/build-module/components/dataviews-picker/index.js.map +1 -1
  44. package/build-module/components/dataviews-view-config/index.js +22 -3
  45. package/build-module/components/dataviews-view-config/index.js.map +1 -1
  46. package/build-module/dataform-controls/array.js +112 -26
  47. package/build-module/dataform-controls/array.js.map +1 -1
  48. package/build-module/dataviews-layouts/picker-grid/index.js +4 -1
  49. package/build-module/dataviews-layouts/picker-grid/index.js.map +1 -1
  50. package/build-module/field-types/array.js +0 -6
  51. package/build-module/field-types/array.js.map +1 -1
  52. package/build-module/index.js +1 -0
  53. package/build-module/index.js.map +1 -1
  54. package/build-module/types.js.map +1 -1
  55. package/build-module/validation.js +18 -1
  56. package/build-module/validation.js.map +1 -1
  57. package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
  58. package/build-types/components/dataviews/index.d.ts +3 -2
  59. package/build-types/components/dataviews/index.d.ts.map +1 -1
  60. package/build-types/components/dataviews-filters/filters-toggled.d.ts +5 -0
  61. package/build-types/components/dataviews-filters/filters-toggled.d.ts.map +1 -0
  62. package/build-types/components/dataviews-filters/filters.d.ts +6 -0
  63. package/build-types/components/dataviews-filters/filters.d.ts.map +1 -0
  64. package/build-types/components/dataviews-filters/index.d.ts +4 -8
  65. package/build-types/components/dataviews-filters/index.d.ts.map +1 -1
  66. package/build-types/components/dataviews-filters/toggle.d.ts +3 -0
  67. package/build-types/components/dataviews-filters/toggle.d.ts.map +1 -0
  68. package/build-types/components/dataviews-filters/use-filters.d.ts +4 -0
  69. package/build-types/components/dataviews-filters/use-filters.d.ts.map +1 -0
  70. package/build-types/components/dataviews-picker/index.d.ts +3 -2
  71. package/build-types/components/dataviews-picker/index.d.ts.map +1 -1
  72. package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
  73. package/build-types/dataform-controls/array.d.ts.map +1 -1
  74. package/build-types/dataviews-layouts/picker-grid/index.d.ts.map +1 -1
  75. package/build-types/field-types/array.d.ts.map +1 -1
  76. package/build-types/index.d.ts +1 -0
  77. package/build-types/index.d.ts.map +1 -1
  78. package/build-types/types.d.ts +2 -1
  79. package/build-types/types.d.ts.map +1 -1
  80. package/build-types/validation.d.ts.map +1 -1
  81. package/build-wp/index.js +899 -408
  82. package/package.json +15 -15
  83. package/src/components/dataform/stories/index.story.tsx +73 -1
  84. package/src/components/dataviews/index.tsx +8 -14
  85. package/src/components/dataviews/stories/index.story.tsx +1 -1
  86. package/src/components/dataviews-filters/filters-toggled.tsx +20 -0
  87. package/src/components/dataviews-filters/filters.tsx +73 -0
  88. package/src/components/dataviews-filters/index.tsx +4 -246
  89. package/src/components/dataviews-filters/toggle.tsx +118 -0
  90. package/src/components/dataviews-filters/use-filters.ts +73 -0
  91. package/src/components/dataviews-picker/index.tsx +8 -14
  92. package/src/components/dataviews-view-config/index.tsx +18 -3
  93. package/src/dataform-controls/array.tsx +137 -40
  94. package/src/dataviews-layouts/picker-grid/index.tsx +15 -8
  95. package/src/field-types/array.tsx +0 -8
  96. package/src/index.ts +1 -0
  97. package/src/test/validation.ts +192 -0
  98. package/src/types.ts +2 -1
  99. package/src/validation.ts +30 -0
  100. package/tsconfig.tsbuildinfo +1 -1
@@ -6,7 +6,7 @@
6
6
  * WordPress dependencies
7
7
  */
8
8
  import { __experimentalHStack as HStack } from '@wordpress/components';
9
- import { useContext, useEffect, useMemo, useRef, useState } from '@wordpress/element';
9
+ import { useEffect, useMemo, useRef, useState } from '@wordpress/element';
10
10
  import { useResizeObserver, throttle } from '@wordpress/compose';
11
11
 
12
12
  /**
@@ -14,7 +14,7 @@ import { useResizeObserver, throttle } from '@wordpress/compose';
14
14
  */
15
15
  import DataViewsContext from '../dataviews-context';
16
16
  import { VIEW_LAYOUTS } from '../../dataviews-layouts';
17
- import { default as DataViewsFilters, useFilters, FiltersToggle } from '../dataviews-filters';
17
+ import { Filters, FiltersToggled, useFilters, FiltersToggle } from '../dataviews-filters';
18
18
  import DataViewsLayout from '../dataviews-layout';
19
19
  import DataViewsFooter from '../dataviews-footer';
20
20
  import DataViewsSearch from '../dataviews-search';
@@ -32,9 +32,6 @@ function DefaultUI({
32
32
  search = true,
33
33
  searchLabel = undefined
34
34
  }) {
35
- const {
36
- isShowingFilter
37
- } = useContext(DataViewsContext);
38
35
  return /*#__PURE__*/_jsxs(_Fragment, {
39
36
  children: [/*#__PURE__*/_jsxs(HStack, {
40
37
  alignment: "top",
@@ -56,7 +53,7 @@ function DefaultUI({
56
53
  },
57
54
  children: [/*#__PURE__*/_jsx(DataViewsViewConfig, {}), header]
58
55
  })]
59
- }), isShowingFilter && /*#__PURE__*/_jsx(DataViewsFilters, {
56
+ }), /*#__PURE__*/_jsx(FiltersToggled, {
60
57
  className: "dataviews-filters__container"
61
58
  }), /*#__PURE__*/_jsx(DataViewsLayout, {}), /*#__PURE__*/_jsx(DataViewsFooter, {})]
62
59
  });
@@ -198,7 +195,8 @@ function DataViews({
198
195
  // Populate the DataViews sub components
199
196
  const DataViewsSubComponents = DataViews;
200
197
  DataViewsSubComponents.BulkActionToolbar = BulkActionsFooter;
201
- DataViewsSubComponents.Filters = DataViewsFilters;
198
+ DataViewsSubComponents.Filters = Filters;
199
+ DataViewsSubComponents.FiltersToggled = FiltersToggled;
202
200
  DataViewsSubComponents.FiltersToggle = FiltersToggle;
203
201
  DataViewsSubComponents.Layout = DataViewsLayout;
204
202
  DataViewsSubComponents.LayoutSwitcher = ViewTypeMenu;
@@ -1 +1 @@
1
- {"version":3,"names":["__experimentalHStack","HStack","useContext","useEffect","useMemo","useRef","useState","useResizeObserver","throttle","DataViewsContext","VIEW_LAYOUTS","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","dataViewsLayouts","filter","viewLayout","isPicker","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","defaultLayoutsProperty","selection","selectionProperty","onChangeSelection","onClickItem","renderItemLink","isItemClickable","config","perPageSizes","empty","infiniteScrollHandler","containerRef","containerWidth","setContainerWidth","resizeObserverRef","resizeObserverEntries","borderBoxSize","inlineSize","box","selectionState","setSelectionState","isUncontrolled","openedFilter","setOpenedFilter","setSelectionWithChange","value","newValue","_fields","_selection","some","filters","hasPrimaryOrLockedFilters","isPrimary","isLocked","setIsShowingFilter","infiniteScrollEnabled","current","handleScroll","event","target","scrollTop","scrollHeight","clientHeight","container","addEventListener","removeEventListener","cancel","Object","fromEntries","entries","layoutType","type","Provider","hasInfiniteScrollHandler","ref","DataViewsSubComponents","BulkActionToolbar","Filters","Layout","LayoutSwitcher","Pagination","Search","ViewConfig","Footer"],"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 {\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from '@wordpress/element';\nimport { useResizeObserver, throttle } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport DataViewsContext from '../dataviews-context';\nimport { VIEW_LAYOUTS } from '../../dataviews-layouts';\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\tinfiniteScrollHandler?: () => void;\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\tconfig?: {\n\t\tperPageSizes: number[];\n\t};\n\tempty?: ReactNode;\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\nconst dataViewsLayouts = VIEW_LAYOUTS.filter(\n\t( viewLayout ) => ! viewLayout.isPicker\n);\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: defaultLayoutsProperty,\n\tselection: selectionProperty,\n\tonChangeSelection,\n\tonClickItem,\n\trenderItemLink,\n\tisItemClickable = defaultIsItemClickable,\n\theader,\n\tchildren,\n\tconfig = { perPageSizes: [ 10, 20, 50, 100 ] },\n\tempty,\n}: DataViewsProps< Item > ) {\n\tconst { infiniteScrollHandler } = paginationInfo;\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 hasPrimaryOrLockedFilters = useMemo(\n\t\t() =>\n\t\t\t( filters || [] ).some(\n\t\t\t\t( filter ) => filter.isPrimary || filter.isLocked\n\t\t\t),\n\t\t[ filters ]\n\t);\n\tconst [ isShowingFilter, setIsShowingFilter ] = useState< boolean >(\n\t\thasPrimaryOrLockedFilters\n\t);\n\n\tuseEffect( () => {\n\t\tif ( hasPrimaryOrLockedFilters && ! isShowingFilter ) {\n\t\t\tsetIsShowingFilter( true );\n\t\t}\n\t}, [ hasPrimaryOrLockedFilters, isShowingFilter ] );\n\n\t// Attach scroll event listener for infinite scroll\n\tuseEffect( () => {\n\t\tif ( ! view.infiniteScrollEnabled || ! containerRef.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst handleScroll = throttle( ( event: unknown ) => {\n\t\t\tconst target = ( event as Event ).target as HTMLElement;\n\t\t\tconst scrollTop = target.scrollTop;\n\t\t\tconst scrollHeight = target.scrollHeight;\n\t\t\tconst clientHeight = target.clientHeight;\n\n\t\t\t// Check if user has scrolled near the bottom\n\t\t\tif ( scrollTop + clientHeight >= scrollHeight - 100 ) {\n\t\t\t\tinfiniteScrollHandler?.();\n\t\t\t}\n\t\t}, 100 ); // Throttle to 100ms\n\n\t\tconst container = containerRef.current;\n\t\tcontainer.addEventListener( 'scroll', handleScroll );\n\n\t\treturn () => {\n\t\t\tcontainer.removeEventListener( 'scroll', handleScroll );\n\t\t\thandleScroll.cancel(); // Cancel any pending throttled calls\n\t\t};\n\t}, [ infiniteScrollHandler, view.infiniteScrollEnabled ] );\n\n\t// Filter out DataViewsPicker layouts.\n\tconst defaultLayouts = useMemo(\n\t\t() =>\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries( defaultLayoutsProperty ).filter(\n\t\t\t\t\t( [ layoutType ] ) => {\n\t\t\t\t\t\treturn dataViewsLayouts.some(\n\t\t\t\t\t\t\t( viewLayout ) => viewLayout.type === layoutType\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t),\n\t\t[ defaultLayoutsProperty ]\n\t);\n\n\tif ( ! defaultLayouts[ view.type ] ) {\n\t\treturn null;\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\tresizeObserverRef,\n\t\t\t\tdefaultLayouts,\n\t\t\t\tfilters,\n\t\t\t\tisShowingFilter,\n\t\t\t\tsetIsShowingFilter,\n\t\t\t\tconfig,\n\t\t\t\tempty,\n\t\t\t\thasInfiniteScrollHandler: !! infiniteScrollHandler,\n\t\t\t} }\n\t\t>\n\t\t\t<div className=\"dataviews-wrapper\" ref={ containerRef }>\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\tFooter: typeof DataViewsFooter;\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;\nDataViewsSubComponents.Footer = DataViewsFooter;\n\nexport default DataViewsSubComponents;\n"],"mappings":"AAAA;AACA;AACA;;AAGA;AACA;AACA;AACA,SAASA,oBAAoB,IAAIC,MAAM,QAAQ,uBAAuB;AACtE,SACCC,UAAU,EACVC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACF,oBAAoB;AAC3B,SAASC,iBAAiB,EAAEC,QAAQ,QAAQ,oBAAoB;;AAEhE;AACA;AACA;AACA,OAAOC,gBAAgB,MAAM,sBAAsB;AACnD,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SACCC,OAAO,IAAIC,gBAAgB,EAC3BC,UAAU,EACVC,aAAa,QACP,sBAAsB;AAC7B,OAAOC,eAAe,MAAM,qBAAqB;AACjD,OAAOC,eAAe,MAAM,qBAAqB;AACjD,OAAOC,eAAe,MAAM,qBAAqB;AACjD,SAASC,iBAAiB,QAAQ,2BAA2B;AAC7D,SAASC,mBAAmB,QAAQ,yBAAyB;AAC7D,OAAOC,mBAAmB,IACzBC,2BAA2B,EAC3BC,YAAY,QACN,0BAA0B;AACjC,SAASC,eAAe,QAAQ,wBAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAwCzD,MAAMC,gBAAgB,GAAKC,IAAgB,IAAMA,IAAI,CAACC,EAAE;AACxD,MAAMC,sBAAsB,GAAGA,CAAA,KAAM,IAAI;AACzC,MAAMC,WAAkB,GAAG,EAAE;AAE7B,MAAMC,gBAAgB,GAAGzB,YAAY,CAAC0B,MAAM,CACzCC,UAAU,IAAM,CAAEA,UAAU,CAACC,QAChC,CAAC;AAOD,SAASC,SAASA,CAAE;EACnBC,MAAM;EACNC,MAAM,GAAG,IAAI;EACbC,WAAW,GAAGC;AACC,CAAC,EAAG;EACnB,MAAM;IAAEC;EAAgB,CAAC,GAAG1C,UAAU,CAAEO,gBAAiB,CAAC;EAC1D,oBACCkB,KAAA,CAAAE,SAAA;IAAAgB,QAAA,gBACClB,KAAA,CAAC1B,MAAM;MACN6C,SAAS,EAAC,KAAK;MACfC,OAAO,EAAC,eAAe;MACvBC,SAAS,EAAC,yBAAyB;MACnCC,OAAO,EAAG,CAAG;MAAAJ,QAAA,gBAEblB,KAAA,CAAC1B,MAAM;QACN8C,OAAO,EAAC,OAAO;QACfG,QAAQ,EAAG,KAAO;QAClBF,SAAS,EAAC,mBAAmB;QAAAH,QAAA,GAE3BJ,MAAM,iBAAIhB,IAAA,CAACR,eAAe;UAACkC,KAAK,EAAGT;QAAa,CAAE,CAAC,eACrDjB,IAAA,CAACX,aAAa,IAAE,CAAC;MAAA,CACV,CAAC,eACTa,KAAA,CAAC1B,MAAM;QACNgD,OAAO,EAAG,CAAG;QACbC,QAAQ,EAAG,KAAO;QAClBE,KAAK,EAAG;UAAEC,UAAU,EAAE;QAAE,CAAG;QAAAR,QAAA,gBAE3BpB,IAAA,CAACL,mBAAmB,IAAE,CAAC,EACrBoB,MAAM;MAAA,CACD,CAAC;IAAA,CACF,CAAC,EACPI,eAAe,iBAChBnB,IAAA,CAACb,gBAAgB;MAACoC,SAAS,EAAC;IAA8B,CAAE,CAC5D,eACDvB,IAAA,CAACV,eAAe,IAAE,CAAC,eACnBU,IAAA,CAACT,eAAe,IAAE,CAAC;EAAA,CAClB,CAAC;AAEL;AAEA,SAASsC,SAASA,CAAU;EAC3BC,IAAI;EACJC,YAAY;EACZC,MAAM;EACNhB,MAAM,GAAG,IAAI;EACbC,WAAW,GAAGC,SAAS;EACvBe,OAAO,GAAGxB,WAAW;EACrByB,IAAI;EACJC,SAAS,GAAG9B,gBAAgB;EAC5B+B,YAAY;EACZC,SAAS,GAAG,KAAK;EACjBC,cAAc;EACdC,cAAc,EAAEC,sBAAsB;EACtCC,SAAS,EAAEC,iBAAiB;EAC5BC,iBAAiB;EACjBC,WAAW;EACXC,cAAc;EACdC,eAAe,GAAGtC,sBAAsB;EACxCO,MAAM;EACNK,QAAQ;EACR2B,MAAM,GAAG;IAAEC,YAAY,EAAE,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG;EAAG,CAAC;EAC9CC;AACuB,CAAC,EAAG;EAC3B,MAAM;IAAEC;EAAsB,CAAC,GAAGZ,cAAc;EAChD,MAAMa,YAAY,GAAGvE,MAAM,CAA2B,IAAK,CAAC;EAC5D,MAAM,CAAEwE,cAAc,EAAEC,iBAAiB,CAAE,GAAGxE,QAAQ,CAAE,CAAE,CAAC;EAC3D,MAAMyE,iBAAiB,GAAGxE,iBAAiB,CACxCyE,qBAA0B,IAAM;IACjCF,iBAAiB,CAChBE,qBAAqB,CAAE,CAAC,CAAE,CAACC,aAAa,CAAE,CAAC,CAAE,CAACC,UAC/C,CAAC;EACF,CAAC,EACD;IAAEC,GAAG,EAAE;EAAa,CACrB,CAAC;EACD,MAAM,CAAEC,cAAc,EAAEC,iBAAiB,CAAE,GAAG/E,QAAQ,CAAc,EAAG,CAAC;EACxE,MAAMgF,cAAc,GACnBnB,iBAAiB,KAAKxB,SAAS,IAAIyB,iBAAiB,KAAKzB,SAAS;EACnE,MAAMuB,SAAS,GAAGoB,cAAc,GAAGF,cAAc,GAAGjB,iBAAiB;EACrE,MAAM,CAAEoB,YAAY,EAAEC,eAAe,CAAE,GAAGlF,QAAQ,CAAmB,IAAK,CAAC;EAC3E,SAASmF,sBAAsBA,CAAEC,KAAyB,EAAG;IAC5D,MAAMC,QAAQ,GACb,OAAOD,KAAK,KAAK,UAAU,GAAGA,KAAK,CAAExB,SAAU,CAAC,GAAGwB,KAAK;IACzD,IAAKJ,cAAc,EAAG;MACrBD,iBAAiB,CAAEM,QAAS,CAAC;IAC9B;IACA,IAAKvB,iBAAiB,EAAG;MACxBA,iBAAiB,CAAEuB,QAAS,CAAC;IAC9B;EACD;EACA,MAAMC,OAAO,GAAGxF,OAAO,CAAE,MAAMmB,eAAe,CAAEkC,MAAO,CAAC,EAAE,CAAEA,MAAM,CAAG,CAAC;EACtE,MAAMoC,UAAU,GAAGzF,OAAO,CAAE,MAAM;IACjC,OAAO8D,SAAS,CAAC9B,MAAM,CAAIJ,EAAE,IAC5B2B,IAAI,CAACmC,IAAI,CAAI/D,IAAI,IAAM6B,SAAS,CAAE7B,IAAK,CAAC,KAAKC,EAAG,CACjD,CAAC;EACF,CAAC,EAAE,CAAEkC,SAAS,EAAEP,IAAI,EAAEC,SAAS,CAAG,CAAC;EAEnC,MAAMmC,OAAO,GAAGlF,UAAU,CAAE+E,OAAO,EAAErC,IAAK,CAAC;EAC3C,MAAMyC,yBAAyB,GAAG5F,OAAO,CACxC,MACC,CAAE2F,OAAO,IAAI,EAAE,EAAGD,IAAI,CACnB1D,MAAM,IAAMA,MAAM,CAAC6D,SAAS,IAAI7D,MAAM,CAAC8D,QAC1C,CAAC,EACF,CAAEH,OAAO,CACV,CAAC;EACD,MAAM,CAAEnD,eAAe,EAAEuD,kBAAkB,CAAE,GAAG7F,QAAQ,CACvD0F,yBACD,CAAC;EAED7F,SAAS,CAAE,MAAM;IAChB,IAAK6F,yBAAyB,IAAI,CAAEpD,eAAe,EAAG;MACrDuD,kBAAkB,CAAE,IAAK,CAAC;IAC3B;EACD,CAAC,EAAE,CAAEH,yBAAyB,EAAEpD,eAAe,CAAG,CAAC;;EAEnD;EACAzC,SAAS,CAAE,MAAM;IAChB,IAAK,CAAEoD,IAAI,CAAC6C,qBAAqB,IAAI,CAAExB,YAAY,CAACyB,OAAO,EAAG;MAC7D;IACD;IAEA,MAAMC,YAAY,GAAG9F,QAAQ,CAAI+F,KAAc,IAAM;MACpD,MAAMC,MAAM,GAAKD,KAAK,CAAYC,MAAqB;MACvD,MAAMC,SAAS,GAAGD,MAAM,CAACC,SAAS;MAClC,MAAMC,YAAY,GAAGF,MAAM,CAACE,YAAY;MACxC,MAAMC,YAAY,GAAGH,MAAM,CAACG,YAAY;;MAExC;MACA,IAAKF,SAAS,GAAGE,YAAY,IAAID,YAAY,GAAG,GAAG,EAAG;QACrD/B,qBAAqB,GAAG,CAAC;MAC1B;IACD,CAAC,EAAE,GAAI,CAAC,CAAC,CAAC;;IAEV,MAAMiC,SAAS,GAAGhC,YAAY,CAACyB,OAAO;IACtCO,SAAS,CAACC,gBAAgB,CAAE,QAAQ,EAAEP,YAAa,CAAC;IAEpD,OAAO,MAAM;MACZM,SAAS,CAACE,mBAAmB,CAAE,QAAQ,EAAER,YAAa,CAAC;MACvDA,YAAY,CAACS,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;EACF,CAAC,EAAE,CAAEpC,qBAAqB,EAAEpB,IAAI,CAAC6C,qBAAqB,CAAG,CAAC;;EAE1D;EACA,MAAMpC,cAAc,GAAG5D,OAAO,CAC7B,MACC4G,MAAM,CAACC,WAAW,CACjBD,MAAM,CAACE,OAAO,CAAEjD,sBAAuB,CAAC,CAAC7B,MAAM,CAC9C,CAAE,CAAE+E,UAAU,CAAE,KAAM;IACrB,OAAOhF,gBAAgB,CAAC2D,IAAI,CACzBzD,UAAU,IAAMA,UAAU,CAAC+E,IAAI,KAAKD,UACvC,CAAC;EACF,CACD,CACD,CAAC,EACF,CAAElD,sBAAsB,CACzB,CAAC;EAED,IAAK,CAAED,cAAc,CAAET,IAAI,CAAC6D,IAAI,CAAE,EAAG;IACpC,OAAO,IAAI;EACZ;EAEA,oBACC3F,IAAA,CAAChB,gBAAgB,CAAC4G,QAAQ;IACzB3B,KAAK,EAAG;MACPnC,IAAI;MACJC,YAAY;MACZC,MAAM,EAAEmC,OAAO;MACflC,OAAO;MACPC,IAAI;MACJG,SAAS;MACTC,cAAc;MACdG,SAAS,EAAE2B,UAAU;MACrBzB,iBAAiB,EAAEqB,sBAAsB;MACzCF,YAAY;MACZC,eAAe;MACf5B,SAAS;MACTC,YAAY;MACZU,eAAe;MACfF,WAAW;MACXC,cAAc;MACdO,cAAc;MACdD,YAAY;MACZG,iBAAiB;MACjBf,cAAc;MACd+B,OAAO;MACPnD,eAAe;MACfuD,kBAAkB;MAClB3B,MAAM;MACNE,KAAK;MACL4C,wBAAwB,EAAE,CAAC,CAAE3C;IAC9B,CAAG;IAAA9B,QAAA,eAEHpB,IAAA;MAAKuB,SAAS,EAAC,mBAAmB;MAACuE,GAAG,EAAG3C,YAAc;MAAA/B,QAAA,EACpDA,QAAQ,aAARA,QAAQ,cAARA,QAAQ,gBACTpB,IAAA,CAACc,SAAS;QACTC,MAAM,EAAGA,MAAQ;QACjBC,MAAM,EAAGA,MAAQ;QACjBC,WAAW,EAAGA;MAAa,CAC3B;IAAC,CAEC;EAAC,CACoB,CAAC;AAE9B;;AAEA;AACA,MAAM8E,sBAAsB,GAAGlE,SAU9B;AAEDkE,sBAAsB,CAACC,iBAAiB,GAAGvG,iBAAiB;AAC5DsG,sBAAsB,CAACE,OAAO,GAAG9G,gBAAgB;AACjD4G,sBAAsB,CAAC1G,aAAa,GAAGA,aAAa;AACpD0G,sBAAsB,CAACG,MAAM,GAAG5G,eAAe;AAC/CyG,sBAAsB,CAACI,cAAc,GAAGtG,YAAY;AACpDkG,sBAAsB,CAACK,UAAU,GAAG1G,mBAAmB;AACvDqG,sBAAsB,CAACM,MAAM,GAAG7G,eAAe;AAC/CuG,sBAAsB,CAACO,UAAU,GAAG1G,2BAA2B;AAC/DmG,sBAAsB,CAACQ,MAAM,GAAGhH,eAAe;AAE/C,eAAewG,sBAAsB","ignoreList":[]}
1
+ {"version":3,"names":["__experimentalHStack","HStack","useEffect","useMemo","useRef","useState","useResizeObserver","throttle","DataViewsContext","VIEW_LAYOUTS","Filters","FiltersToggled","useFilters","FiltersToggle","DataViewsLayout","DataViewsFooter","DataViewsSearch","BulkActionsFooter","DataViewsPagination","DataViewsViewConfig","DataviewsViewConfigDropdown","ViewTypeMenu","normalizeFields","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","defaultGetItemId","item","id","defaultIsItemClickable","EMPTY_ARRAY","dataViewsLayouts","filter","viewLayout","isPicker","DefaultUI","header","search","searchLabel","undefined","children","alignment","justify","className","spacing","expanded","label","style","flexShrink","DataViews","view","onChangeView","fields","actions","data","getItemId","getItemLevel","isLoading","paginationInfo","defaultLayouts","defaultLayoutsProperty","selection","selectionProperty","onChangeSelection","onClickItem","renderItemLink","isItemClickable","config","perPageSizes","empty","infiniteScrollHandler","containerRef","containerWidth","setContainerWidth","resizeObserverRef","resizeObserverEntries","borderBoxSize","inlineSize","box","selectionState","setSelectionState","isUncontrolled","openedFilter","setOpenedFilter","setSelectionWithChange","value","newValue","_fields","_selection","some","filters","hasPrimaryOrLockedFilters","isPrimary","isLocked","isShowingFilter","setIsShowingFilter","infiniteScrollEnabled","current","handleScroll","event","target","scrollTop","scrollHeight","clientHeight","container","addEventListener","removeEventListener","cancel","Object","fromEntries","entries","layoutType","type","Provider","hasInfiniteScrollHandler","ref","DataViewsSubComponents","BulkActionToolbar","Layout","LayoutSwitcher","Pagination","Search","ViewConfig","Footer"],"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 { useEffect, useMemo, useRef, useState } from '@wordpress/element';\nimport { useResizeObserver, throttle } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport DataViewsContext from '../dataviews-context';\nimport { VIEW_LAYOUTS } from '../../dataviews-layouts';\nimport {\n\tFilters,\n\tFiltersToggled,\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\tinfiniteScrollHandler?: () => void;\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\tconfig?: {\n\t\tperPageSizes: number[];\n\t};\n\tempty?: ReactNode;\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\nconst dataViewsLayouts = VIEW_LAYOUTS.filter(\n\t( viewLayout ) => ! viewLayout.isPicker\n);\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\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<FiltersToggled className=\"dataviews-filters__container\" />\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: defaultLayoutsProperty,\n\tselection: selectionProperty,\n\tonChangeSelection,\n\tonClickItem,\n\trenderItemLink,\n\tisItemClickable = defaultIsItemClickable,\n\theader,\n\tchildren,\n\tconfig = { perPageSizes: [ 10, 20, 50, 100 ] },\n\tempty,\n}: DataViewsProps< Item > ) {\n\tconst { infiniteScrollHandler } = paginationInfo;\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 hasPrimaryOrLockedFilters = useMemo(\n\t\t() =>\n\t\t\t( filters || [] ).some(\n\t\t\t\t( filter ) => filter.isPrimary || filter.isLocked\n\t\t\t),\n\t\t[ filters ]\n\t);\n\tconst [ isShowingFilter, setIsShowingFilter ] = useState< boolean >(\n\t\thasPrimaryOrLockedFilters\n\t);\n\n\tuseEffect( () => {\n\t\tif ( hasPrimaryOrLockedFilters && ! isShowingFilter ) {\n\t\t\tsetIsShowingFilter( true );\n\t\t}\n\t}, [ hasPrimaryOrLockedFilters, isShowingFilter ] );\n\n\t// Attach scroll event listener for infinite scroll\n\tuseEffect( () => {\n\t\tif ( ! view.infiniteScrollEnabled || ! containerRef.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst handleScroll = throttle( ( event: unknown ) => {\n\t\t\tconst target = ( event as Event ).target as HTMLElement;\n\t\t\tconst scrollTop = target.scrollTop;\n\t\t\tconst scrollHeight = target.scrollHeight;\n\t\t\tconst clientHeight = target.clientHeight;\n\n\t\t\t// Check if user has scrolled near the bottom\n\t\t\tif ( scrollTop + clientHeight >= scrollHeight - 100 ) {\n\t\t\t\tinfiniteScrollHandler?.();\n\t\t\t}\n\t\t}, 100 ); // Throttle to 100ms\n\n\t\tconst container = containerRef.current;\n\t\tcontainer.addEventListener( 'scroll', handleScroll );\n\n\t\treturn () => {\n\t\t\tcontainer.removeEventListener( 'scroll', handleScroll );\n\t\t\thandleScroll.cancel(); // Cancel any pending throttled calls\n\t\t};\n\t}, [ infiniteScrollHandler, view.infiniteScrollEnabled ] );\n\n\t// Filter out DataViewsPicker layouts.\n\tconst defaultLayouts = useMemo(\n\t\t() =>\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries( defaultLayoutsProperty ).filter(\n\t\t\t\t\t( [ layoutType ] ) => {\n\t\t\t\t\t\treturn dataViewsLayouts.some(\n\t\t\t\t\t\t\t( viewLayout ) => viewLayout.type === layoutType\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t),\n\t\t[ defaultLayoutsProperty ]\n\t);\n\n\tif ( ! defaultLayouts[ view.type ] ) {\n\t\treturn null;\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\tresizeObserverRef,\n\t\t\t\tdefaultLayouts,\n\t\t\t\tfilters,\n\t\t\t\tisShowingFilter,\n\t\t\t\tsetIsShowingFilter,\n\t\t\t\tconfig,\n\t\t\t\tempty,\n\t\t\t\thasInfiniteScrollHandler: !! infiniteScrollHandler,\n\t\t\t} }\n\t\t>\n\t\t\t<div className=\"dataviews-wrapper\" ref={ containerRef }>\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 Filters;\n\tFiltersToggle: typeof FiltersToggle;\n\tFiltersToggled: typeof FiltersToggled;\n\tLayout: typeof DataViewsLayout;\n\tLayoutSwitcher: typeof ViewTypeMenu;\n\tPagination: typeof DataViewsPagination;\n\tSearch: typeof DataViewsSearch;\n\tViewConfig: typeof DataviewsViewConfigDropdown;\n\tFooter: typeof DataViewsFooter;\n};\n\nDataViewsSubComponents.BulkActionToolbar = BulkActionsFooter;\nDataViewsSubComponents.Filters = Filters;\nDataViewsSubComponents.FiltersToggled = FiltersToggled;\nDataViewsSubComponents.FiltersToggle = FiltersToggle;\nDataViewsSubComponents.Layout = DataViewsLayout;\nDataViewsSubComponents.LayoutSwitcher = ViewTypeMenu;\nDataViewsSubComponents.Pagination = DataViewsPagination;\nDataViewsSubComponents.Search = DataViewsSearch;\nDataViewsSubComponents.ViewConfig = DataviewsViewConfigDropdown;\nDataViewsSubComponents.Footer = DataViewsFooter;\n\nexport default DataViewsSubComponents;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useContext } from '@wordpress/element';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import DataViewsContext from '../dataviews-context';
10
+ import Filters from './filters';
11
+ import { jsx as _jsx } from "react/jsx-runtime";
12
+ function FiltersToggled(props) {
13
+ const {
14
+ isShowingFilter
15
+ } = useContext(DataViewsContext);
16
+ if (!isShowingFilter) {
17
+ return null;
18
+ }
19
+ return /*#__PURE__*/_jsx(Filters, {
20
+ ...props
21
+ });
22
+ }
23
+ export default FiltersToggled;
24
+ //# sourceMappingURL=filters-toggled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useContext","DataViewsContext","Filters","jsx","_jsx","FiltersToggled","props","isShowingFilter"],"sources":["@wordpress/dataviews/src/components/dataviews-filters/filters-toggled.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useContext } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport DataViewsContext from '../dataviews-context';\nimport Filters from './filters';\n\nfunction FiltersToggled( props: { className?: string } ) {\n\tconst { isShowingFilter } = useContext( DataViewsContext );\n\tif ( ! isShowingFilter ) {\n\t\treturn null;\n\t}\n\treturn <Filters { ...props } />;\n}\n\nexport default FiltersToggled;\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,UAAU,QAAQ,oBAAoB;;AAE/C;AACA;AACA;AACA,OAAOC,gBAAgB,MAAM,sBAAsB;AACnD,OAAOC,OAAO,MAAM,WAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEhC,SAASC,cAAcA,CAAEC,KAA6B,EAAG;EACxD,MAAM;IAAEC;EAAgB,CAAC,GAAGP,UAAU,CAAEC,gBAAiB,CAAC;EAC1D,IAAK,CAAEM,eAAe,EAAG;IACxB,OAAO,IAAI;EACZ;EACA,oBAAOH,IAAA,CAACF,OAAO;IAAA,GAAMI;EAAK,CAAI,CAAC;AAChC;AAEA,eAAeD,cAAc","ignoreList":[]}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { memo, useContext, useRef } from '@wordpress/element';
5
+ import { __experimentalHStack as HStack } from '@wordpress/components';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import Filter from './filter';
11
+ import { default as AddFilter } from './add-filter';
12
+ import ResetFilters from './reset-filters';
13
+ import useFilters from './use-filters';
14
+ import DataViewsContext from '../dataviews-context';
15
+ import { jsx as _jsx } from "react/jsx-runtime";
16
+ function Filters({
17
+ className
18
+ }) {
19
+ const {
20
+ fields,
21
+ view,
22
+ onChangeView,
23
+ openedFilter,
24
+ setOpenedFilter
25
+ } = useContext(DataViewsContext);
26
+ const addFilterRef = useRef(null);
27
+ const filters = useFilters(fields, view);
28
+ const addFilter = /*#__PURE__*/_jsx(AddFilter, {
29
+ filters: filters,
30
+ view: view,
31
+ onChangeView: onChangeView,
32
+ ref: addFilterRef,
33
+ setOpenedFilter: setOpenedFilter
34
+ }, "add-filter");
35
+ const visibleFilters = filters.filter(filter => filter.isVisible);
36
+ if (visibleFilters.length === 0) {
37
+ return null;
38
+ }
39
+ const filterComponents = [...visibleFilters.map(filter => {
40
+ return /*#__PURE__*/_jsx(Filter, {
41
+ filter: filter,
42
+ view: view,
43
+ fields: fields,
44
+ onChangeView: onChangeView,
45
+ addFilterRef: addFilterRef,
46
+ openedFilter: openedFilter
47
+ }, filter.field);
48
+ }), addFilter];
49
+ filterComponents.push(/*#__PURE__*/_jsx(ResetFilters, {
50
+ filters: filters,
51
+ view: view,
52
+ onChangeView: onChangeView
53
+ }, "reset-filters"));
54
+ return /*#__PURE__*/_jsx(HStack, {
55
+ justify: "flex-start",
56
+ style: {
57
+ width: 'fit-content'
58
+ },
59
+ wrap: true,
60
+ className: className,
61
+ children: filterComponents
62
+ });
63
+ }
64
+ export default memo(Filters);
65
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","useContext","useRef","__experimentalHStack","HStack","Filter","default","AddFilter","ResetFilters","useFilters","DataViewsContext","jsx","_jsx","Filters","className","fields","view","onChangeView","openedFilter","setOpenedFilter","addFilterRef","filters","addFilter","ref","visibleFilters","filter","isVisible","length","filterComponents","map","field","push","justify","style","width","wrap","children"],"sources":["@wordpress/dataviews/src/components/dataviews-filters/filters.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { memo, useContext, useRef } from '@wordpress/element';\nimport { __experimentalHStack as HStack } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport Filter from './filter';\nimport { default as AddFilter } from './add-filter';\nimport ResetFilters from './reset-filters';\nimport useFilters from './use-filters';\nimport DataViewsContext from '../dataviews-context';\n\nfunction Filters( { className }: { className?: string } ) {\n\tconst { fields, view, onChangeView, openedFilter, setOpenedFilter } =\n\t\tuseContext( DataViewsContext );\n\tconst addFilterRef = useRef< HTMLButtonElement >( null );\n\tconst filters = useFilters( fields, view );\n\tconst addFilter = (\n\t\t<AddFilter\n\t\t\tkey=\"add-filter\"\n\t\t\tfilters={ filters }\n\t\t\tview={ view }\n\t\t\tonChangeView={ onChangeView }\n\t\t\tref={ addFilterRef }\n\t\t\tsetOpenedFilter={ setOpenedFilter }\n\t\t/>\n\t);\n\tconst visibleFilters = filters.filter( ( filter ) => filter.isVisible );\n\tif ( visibleFilters.length === 0 ) {\n\t\treturn null;\n\t}\n\tconst filterComponents = [\n\t\t...visibleFilters.map( ( filter ) => {\n\t\t\treturn (\n\t\t\t\t<Filter\n\t\t\t\t\tkey={ filter.field }\n\t\t\t\t\tfilter={ filter }\n\t\t\t\t\tview={ view }\n\t\t\t\t\tfields={ fields }\n\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t\taddFilterRef={ addFilterRef }\n\t\t\t\t\topenedFilter={ openedFilter }\n\t\t\t\t/>\n\t\t\t);\n\t\t} ),\n\t\taddFilter,\n\t];\n\n\tfilterComponents.push(\n\t\t<ResetFilters\n\t\t\tkey=\"reset-filters\"\n\t\t\tfilters={ filters }\n\t\t\tview={ view }\n\t\t\tonChangeView={ onChangeView }\n\t\t/>\n\t);\n\n\treturn (\n\t\t<HStack\n\t\t\tjustify=\"flex-start\"\n\t\t\tstyle={ { width: 'fit-content' } }\n\t\t\twrap\n\t\t\tclassName={ className }\n\t\t>\n\t\t\t{ filterComponents }\n\t\t</HStack>\n\t);\n}\n\nexport default memo( Filters );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,IAAI,EAAEC,UAAU,EAAEC,MAAM,QAAQ,oBAAoB;AAC7D,SAASC,oBAAoB,IAAIC,MAAM,QAAQ,uBAAuB;;AAEtE;AACA;AACA;AACA,OAAOC,MAAM,MAAM,UAAU;AAC7B,SAASC,OAAO,IAAIC,SAAS,QAAQ,cAAc;AACnD,OAAOC,YAAY,MAAM,iBAAiB;AAC1C,OAAOC,UAAU,MAAM,eAAe;AACtC,OAAOC,gBAAgB,MAAM,sBAAsB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEpD,SAASC,OAAOA,CAAE;EAAEC;AAAkC,CAAC,EAAG;EACzD,MAAM;IAAEC,MAAM;IAAEC,IAAI;IAAEC,YAAY;IAAEC,YAAY;IAAEC;EAAgB,CAAC,GAClElB,UAAU,CAAES,gBAAiB,CAAC;EAC/B,MAAMU,YAAY,GAAGlB,MAAM,CAAuB,IAAK,CAAC;EACxD,MAAMmB,OAAO,GAAGZ,UAAU,CAAEM,MAAM,EAAEC,IAAK,CAAC;EAC1C,MAAMM,SAAS,gBACdV,IAAA,CAACL,SAAS;IAETc,OAAO,EAAGA,OAAS;IACnBL,IAAI,EAAGA,IAAM;IACbC,YAAY,EAAGA,YAAc;IAC7BM,GAAG,EAAGH,YAAc;IACpBD,eAAe,EAAGA;EAAiB,GAL/B,YAMJ,CACD;EACD,MAAMK,cAAc,GAAGH,OAAO,CAACI,MAAM,CAAIA,MAAM,IAAMA,MAAM,CAACC,SAAU,CAAC;EACvE,IAAKF,cAAc,CAACG,MAAM,KAAK,CAAC,EAAG;IAClC,OAAO,IAAI;EACZ;EACA,MAAMC,gBAAgB,GAAG,CACxB,GAAGJ,cAAc,CAACK,GAAG,CAAIJ,MAAM,IAAM;IACpC,oBACCb,IAAA,CAACP,MAAM;MAENoB,MAAM,EAAGA,MAAQ;MACjBT,IAAI,EAAGA,IAAM;MACbD,MAAM,EAAGA,MAAQ;MACjBE,YAAY,EAAGA,YAAc;MAC7BG,YAAY,EAAGA,YAAc;MAC7BF,YAAY,EAAGA;IAAc,GANvBO,MAAM,CAACK,KAOb,CAAC;EAEJ,CAAE,CAAC,EACHR,SAAS,CACT;EAEDM,gBAAgB,CAACG,IAAI,cACpBnB,IAAA,CAACJ,YAAY;IAEZa,OAAO,EAAGA,OAAS;IACnBL,IAAI,EAAGA,IAAM;IACbC,YAAY,EAAGA;EAAc,GAHzB,eAIJ,CACF,CAAC;EAED,oBACCL,IAAA,CAACR,MAAM;IACN4B,OAAO,EAAC,YAAY;IACpBC,KAAK,EAAG;MAAEC,KAAK,EAAE;IAAc,CAAG;IAClCC,IAAI;IACJrB,SAAS,EAAGA,SAAW;IAAAsB,QAAA,EAErBR;EAAgB,CACX,CAAC;AAEX;AAEA,eAAe5B,IAAI,CAAEa,OAAQ,CAAC","ignoreList":[]}
@@ -1,187 +1,5 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { memo, useContext, useRef, useMemo, useCallback, useEffect } from '@wordpress/element';
5
- import { __experimentalHStack as HStack, Button } from '@wordpress/components';
6
- import { funnel } from '@wordpress/icons';
7
- import { __, _x } from '@wordpress/i18n';
8
-
9
- /**
10
- * Internal dependencies
11
- */
12
- import Filter from './filter';
13
- import { default as AddFilter, AddFilterMenu } from './add-filter';
14
- import ResetFilters from './reset-filters';
15
- import DataViewsContext from '../dataviews-context';
16
- import { ALL_OPERATORS, SINGLE_SELECTION_OPERATORS } from '../../constants';
17
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
18
- export function useFilters(fields, view) {
19
- return useMemo(() => {
20
- const filters = [];
21
- fields.forEach(field => {
22
- var _view$filters$some, _field$elements;
23
- if (field.filterBy === false || !field.elements?.length && !field.Edit) {
24
- return;
25
- }
26
- const operators = field.filterBy.operators;
27
- const isPrimary = !!field.filterBy?.isPrimary;
28
- const isLocked = (_view$filters$some = view.filters?.some(f => f.field === field.id && !!f.isLocked)) !== null && _view$filters$some !== void 0 ? _view$filters$some : false;
29
- filters.push({
30
- field: field.id,
31
- name: field.label,
32
- elements: (_field$elements = field.elements) !== null && _field$elements !== void 0 ? _field$elements : [],
33
- singleSelection: operators.some(op => SINGLE_SELECTION_OPERATORS.includes(op)),
34
- operators,
35
- isVisible: isLocked || isPrimary || !!view.filters?.some(f => f.field === field.id && ALL_OPERATORS.includes(f.operator)),
36
- isPrimary,
37
- isLocked
38
- });
39
- });
40
-
41
- // Sort filters by:
42
- // - locked filters go first
43
- // - primary filters go next
44
- // - then, sort by name
45
- filters.sort((a, b) => {
46
- if (a.isLocked && !b.isLocked) {
47
- return -1;
48
- }
49
- if (!a.isLocked && b.isLocked) {
50
- return 1;
51
- }
52
- if (a.isPrimary && !b.isPrimary) {
53
- return -1;
54
- }
55
- if (!a.isPrimary && b.isPrimary) {
56
- return 1;
57
- }
58
- return a.name.localeCompare(b.name);
59
- });
60
- return filters;
61
- }, [fields, view]);
62
- }
63
- export function FiltersToggle() {
64
- const {
65
- filters,
66
- view,
67
- onChangeView,
68
- setOpenedFilter,
69
- isShowingFilter,
70
- setIsShowingFilter
71
- } = useContext(DataViewsContext);
72
- const buttonRef = useRef(null);
73
- const onChangeViewWithFilterVisibility = useCallback(_view => {
74
- onChangeView(_view);
75
- setIsShowingFilter(true);
76
- }, [onChangeView, setIsShowingFilter]);
77
- const visibleFilters = filters.filter(filter => filter.isVisible);
78
- const hasVisibleFilters = !!visibleFilters.length;
79
- if (filters.length === 0) {
80
- return null;
81
- }
82
- const addFilterButtonProps = {
83
- label: __('Add filter'),
84
- 'aria-expanded': false,
85
- isPressed: false
86
- };
87
- const toggleFiltersButtonProps = {
88
- label: _x('Filter', 'verb'),
89
- 'aria-expanded': isShowingFilter,
90
- isPressed: isShowingFilter,
91
- onClick: () => {
92
- if (!isShowingFilter) {
93
- setOpenedFilter(null);
94
- }
95
- setIsShowingFilter(!isShowingFilter);
96
- }
97
- };
98
- const buttonComponent = /*#__PURE__*/_jsx(Button, {
99
- ref: buttonRef,
100
- className: "dataviews-filters__visibility-toggle",
101
- size: "compact",
102
- icon: funnel,
103
- ...(hasVisibleFilters ? toggleFiltersButtonProps : addFilterButtonProps)
104
- });
105
- return /*#__PURE__*/_jsx("div", {
106
- className: "dataviews-filters__container-visibility-toggle",
107
- children: !hasVisibleFilters ? /*#__PURE__*/_jsx(AddFilterMenu, {
108
- filters: filters,
109
- view: view,
110
- onChangeView: onChangeViewWithFilterVisibility,
111
- setOpenedFilter: setOpenedFilter,
112
- triggerProps: {
113
- render: buttonComponent
114
- }
115
- }) : /*#__PURE__*/_jsx(FilterVisibilityToggle, {
116
- buttonRef: buttonRef,
117
- filtersCount: view.filters?.length,
118
- children: buttonComponent
119
- })
120
- });
121
- }
122
- function FilterVisibilityToggle({
123
- buttonRef,
124
- filtersCount,
125
- children
126
- }) {
127
- // Focus the `add filter` button when unmounts.
128
- useEffect(() => () => {
129
- buttonRef.current?.focus();
130
- }, [buttonRef]);
131
- return /*#__PURE__*/_jsxs(_Fragment, {
132
- children: [children, !!filtersCount && /*#__PURE__*/_jsx("span", {
133
- className: "dataviews-filters-toggle__count",
134
- children: filtersCount
135
- })]
136
- });
137
- }
138
- function Filters({
139
- className
140
- }) {
141
- const {
142
- fields,
143
- view,
144
- onChangeView,
145
- openedFilter,
146
- setOpenedFilter
147
- } = useContext(DataViewsContext);
148
- const addFilterRef = useRef(null);
149
- const filters = useFilters(fields, view);
150
- const addFilter = /*#__PURE__*/_jsx(AddFilter, {
151
- filters: filters,
152
- view: view,
153
- onChangeView: onChangeView,
154
- ref: addFilterRef,
155
- setOpenedFilter: setOpenedFilter
156
- }, "add-filter");
157
- const visibleFilters = filters.filter(filter => filter.isVisible);
158
- if (visibleFilters.length === 0) {
159
- return null;
160
- }
161
- const filterComponents = [...visibleFilters.map(filter => {
162
- return /*#__PURE__*/_jsx(Filter, {
163
- filter: filter,
164
- view: view,
165
- fields: fields,
166
- onChangeView: onChangeView,
167
- addFilterRef: addFilterRef,
168
- openedFilter: openedFilter
169
- }, filter.field);
170
- }), addFilter];
171
- filterComponents.push(/*#__PURE__*/_jsx(ResetFilters, {
172
- filters: filters,
173
- view: view,
174
- onChangeView: onChangeView
175
- }, "reset-filters"));
176
- return /*#__PURE__*/_jsx(HStack, {
177
- justify: "flex-start",
178
- style: {
179
- width: 'fit-content'
180
- },
181
- wrap: true,
182
- className: className,
183
- children: filterComponents
184
- });
185
- }
186
- export default memo(Filters);
1
+ export { default as Filters } from './filters';
2
+ export { default as FiltersToggle } from './toggle';
3
+ export { default as useFilters } from './use-filters';
4
+ export { default as FiltersToggled } from './filters-toggled';
187
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["memo","useContext","useRef","useMemo","useCallback","useEffect","__experimentalHStack","HStack","Button","funnel","__","_x","Filter","default","AddFilter","AddFilterMenu","ResetFilters","DataViewsContext","ALL_OPERATORS","SINGLE_SELECTION_OPERATORS","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","useFilters","fields","view","filters","forEach","field","_view$filters$some","_field$elements","filterBy","elements","length","Edit","operators","isPrimary","isLocked","some","f","id","push","name","label","singleSelection","op","includes","isVisible","operator","sort","a","b","localeCompare","FiltersToggle","onChangeView","setOpenedFilter","isShowingFilter","setIsShowingFilter","buttonRef","onChangeViewWithFilterVisibility","_view","visibleFilters","filter","hasVisibleFilters","addFilterButtonProps","isPressed","toggleFiltersButtonProps","onClick","buttonComponent","ref","className","size","icon","children","triggerProps","render","FilterVisibilityToggle","filtersCount","current","focus","Filters","openedFilter","addFilterRef","addFilter","filterComponents","map","justify","style","width","wrap"],"sources":["@wordpress/dataviews/src/components/dataviews-filters/index.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tmemo,\n\tuseContext,\n\tuseRef,\n\tuseMemo,\n\tuseCallback,\n\tuseEffect,\n} from '@wordpress/element';\nimport { __experimentalHStack as HStack, Button } from '@wordpress/components';\nimport { funnel } from '@wordpress/icons';\nimport { __, _x } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport Filter from './filter';\nimport { default as AddFilter, AddFilterMenu } from './add-filter';\nimport ResetFilters from './reset-filters';\nimport DataViewsContext from '../dataviews-context';\nimport { ALL_OPERATORS, SINGLE_SELECTION_OPERATORS } from '../../constants';\nimport type { NormalizedFilter, NormalizedField, View } from '../../types';\n\nexport function useFilters( fields: NormalizedField< any >[], view: View ) {\n\treturn useMemo( () => {\n\t\tconst filters: NormalizedFilter[] = [];\n\t\tfields.forEach( ( field ) => {\n\t\t\tif (\n\t\t\t\tfield.filterBy === false ||\n\t\t\t\t( ! field.elements?.length && ! field.Edit )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst operators = field.filterBy.operators;\n\t\t\tconst isPrimary = !! field.filterBy?.isPrimary;\n\t\t\tconst isLocked =\n\t\t\t\tview.filters?.some(\n\t\t\t\t\t( f ) => f.field === field.id && !! f.isLocked\n\t\t\t\t) ?? false;\n\t\t\tfilters.push( {\n\t\t\t\tfield: field.id,\n\t\t\t\tname: field.label,\n\t\t\t\telements: field.elements ?? [],\n\t\t\t\tsingleSelection: operators.some( ( op ) =>\n\t\t\t\t\tSINGLE_SELECTION_OPERATORS.includes( op )\n\t\t\t\t),\n\t\t\t\toperators,\n\t\t\t\tisVisible:\n\t\t\t\t\tisLocked ||\n\t\t\t\t\tisPrimary ||\n\t\t\t\t\t!! view.filters?.some(\n\t\t\t\t\t\t( f ) =>\n\t\t\t\t\t\t\tf.field === field.id &&\n\t\t\t\t\t\t\tALL_OPERATORS.includes( f.operator )\n\t\t\t\t\t),\n\t\t\t\tisPrimary,\n\t\t\t\tisLocked,\n\t\t\t} );\n\t\t} );\n\n\t\t// Sort filters by:\n\t\t// - locked filters go first\n\t\t// - primary filters go next\n\t\t// - then, sort by name\n\t\tfilters.sort( ( a, b ) => {\n\t\t\tif ( a.isLocked && ! b.isLocked ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( ! a.isLocked && b.isLocked ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif ( a.isPrimary && ! b.isPrimary ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( ! a.isPrimary && b.isPrimary ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn a.name.localeCompare( b.name );\n\t\t} );\n\t\treturn filters;\n\t}, [ fields, view ] );\n}\n\nexport function FiltersToggle() {\n\tconst {\n\t\tfilters,\n\t\tview,\n\t\tonChangeView,\n\t\tsetOpenedFilter,\n\t\tisShowingFilter,\n\t\tsetIsShowingFilter,\n\t} = useContext( DataViewsContext );\n\n\tconst buttonRef = useRef< HTMLButtonElement >( null );\n\tconst onChangeViewWithFilterVisibility = useCallback(\n\t\t( _view: View ) => {\n\t\t\tonChangeView( _view );\n\t\t\tsetIsShowingFilter( true );\n\t\t},\n\t\t[ onChangeView, setIsShowingFilter ]\n\t);\n\tconst visibleFilters = filters.filter( ( filter ) => filter.isVisible );\n\n\tconst hasVisibleFilters = !! visibleFilters.length;\n\tif ( filters.length === 0 ) {\n\t\treturn null;\n\t}\n\n\tconst addFilterButtonProps = {\n\t\tlabel: __( 'Add filter' ),\n\t\t'aria-expanded': false,\n\t\tisPressed: false,\n\t};\n\tconst toggleFiltersButtonProps = {\n\t\tlabel: _x( 'Filter', 'verb' ),\n\t\t'aria-expanded': isShowingFilter,\n\t\tisPressed: isShowingFilter,\n\t\tonClick: () => {\n\t\t\tif ( ! isShowingFilter ) {\n\t\t\t\tsetOpenedFilter( null );\n\t\t\t}\n\t\t\tsetIsShowingFilter( ! isShowingFilter );\n\t\t},\n\t};\n\tconst buttonComponent = (\n\t\t<Button\n\t\t\tref={ buttonRef }\n\t\t\tclassName=\"dataviews-filters__visibility-toggle\"\n\t\t\tsize=\"compact\"\n\t\t\ticon={ funnel }\n\t\t\t{ ...( hasVisibleFilters\n\t\t\t\t? toggleFiltersButtonProps\n\t\t\t\t: addFilterButtonProps ) }\n\t\t/>\n\t);\n\treturn (\n\t\t<div className=\"dataviews-filters__container-visibility-toggle\">\n\t\t\t{ ! hasVisibleFilters ? (\n\t\t\t\t<AddFilterMenu\n\t\t\t\t\tfilters={ filters }\n\t\t\t\t\tview={ view }\n\t\t\t\t\tonChangeView={ onChangeViewWithFilterVisibility }\n\t\t\t\t\tsetOpenedFilter={ setOpenedFilter }\n\t\t\t\t\ttriggerProps={ { render: buttonComponent } }\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<FilterVisibilityToggle\n\t\t\t\t\tbuttonRef={ buttonRef }\n\t\t\t\t\tfiltersCount={ view.filters?.length }\n\t\t\t\t>\n\t\t\t\t\t{ buttonComponent }\n\t\t\t\t</FilterVisibilityToggle>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n\nfunction FilterVisibilityToggle( {\n\tbuttonRef,\n\tfiltersCount,\n\tchildren,\n}: {\n\tbuttonRef: React.RefObject< HTMLButtonElement >;\n\tfiltersCount?: number;\n\tchildren: React.ReactNode;\n} ) {\n\t// Focus the `add filter` button when unmounts.\n\tuseEffect(\n\t\t() => () => {\n\t\t\tbuttonRef.current?.focus();\n\t\t},\n\t\t[ buttonRef ]\n\t);\n\treturn (\n\t\t<>\n\t\t\t{ children }\n\t\t\t{ !! filtersCount && (\n\t\t\t\t<span className=\"dataviews-filters-toggle__count\">\n\t\t\t\t\t{ filtersCount }\n\t\t\t\t</span>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nfunction Filters( { className }: { className?: string } ) {\n\tconst { fields, view, onChangeView, openedFilter, setOpenedFilter } =\n\t\tuseContext( DataViewsContext );\n\tconst addFilterRef = useRef< HTMLButtonElement >( null );\n\tconst filters = useFilters( fields, view );\n\tconst addFilter = (\n\t\t<AddFilter\n\t\t\tkey=\"add-filter\"\n\t\t\tfilters={ filters }\n\t\t\tview={ view }\n\t\t\tonChangeView={ onChangeView }\n\t\t\tref={ addFilterRef }\n\t\t\tsetOpenedFilter={ setOpenedFilter }\n\t\t/>\n\t);\n\tconst visibleFilters = filters.filter( ( filter ) => filter.isVisible );\n\tif ( visibleFilters.length === 0 ) {\n\t\treturn null;\n\t}\n\tconst filterComponents = [\n\t\t...visibleFilters.map( ( filter ) => {\n\t\t\treturn (\n\t\t\t\t<Filter\n\t\t\t\t\tkey={ filter.field }\n\t\t\t\t\tfilter={ filter }\n\t\t\t\t\tview={ view }\n\t\t\t\t\tfields={ fields }\n\t\t\t\t\tonChangeView={ onChangeView }\n\t\t\t\t\taddFilterRef={ addFilterRef }\n\t\t\t\t\topenedFilter={ openedFilter }\n\t\t\t\t/>\n\t\t\t);\n\t\t} ),\n\t\taddFilter,\n\t];\n\n\tfilterComponents.push(\n\t\t<ResetFilters\n\t\t\tkey=\"reset-filters\"\n\t\t\tfilters={ filters }\n\t\t\tview={ view }\n\t\t\tonChangeView={ onChangeView }\n\t\t/>\n\t);\n\n\treturn (\n\t\t<HStack\n\t\t\tjustify=\"flex-start\"\n\t\t\tstyle={ { width: 'fit-content' } }\n\t\t\twrap\n\t\t\tclassName={ className }\n\t\t>\n\t\t\t{ filterComponents }\n\t\t</HStack>\n\t);\n}\n\nexport default memo( Filters );\n"],"mappings":"AAAA;AACA;AACA;AACA,SACCA,IAAI,EACJC,UAAU,EACVC,MAAM,EACNC,OAAO,EACPC,WAAW,EACXC,SAAS,QACH,oBAAoB;AAC3B,SAASC,oBAAoB,IAAIC,MAAM,EAAEC,MAAM,QAAQ,uBAAuB;AAC9E,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,EAAE,EAAEC,EAAE,QAAQ,iBAAiB;;AAExC;AACA;AACA;AACA,OAAOC,MAAM,MAAM,UAAU;AAC7B,SAASC,OAAO,IAAIC,SAAS,EAAEC,aAAa,QAAQ,cAAc;AAClE,OAAOC,YAAY,MAAM,iBAAiB;AAC1C,OAAOC,gBAAgB,MAAM,sBAAsB;AACnD,SAASC,aAAa,EAAEC,0BAA0B,QAAQ,iBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAG5E,OAAO,SAASC,UAAUA,CAAEC,MAAgC,EAAEC,IAAU,EAAG;EAC1E,OAAOzB,OAAO,CAAE,MAAM;IACrB,MAAM0B,OAA2B,GAAG,EAAE;IACtCF,MAAM,CAACG,OAAO,CAAIC,KAAK,IAAM;MAAA,IAAAC,kBAAA,EAAAC,eAAA;MAC5B,IACCF,KAAK,CAACG,QAAQ,KAAK,KAAK,IACtB,CAAEH,KAAK,CAACI,QAAQ,EAAEC,MAAM,IAAI,CAAEL,KAAK,CAACM,IAAM,EAC3C;QACD;MACD;MAEA,MAAMC,SAAS,GAAGP,KAAK,CAACG,QAAQ,CAACI,SAAS;MAC1C,MAAMC,SAAS,GAAG,CAAC,CAAER,KAAK,CAACG,QAAQ,EAAEK,SAAS;MAC9C,MAAMC,QAAQ,IAAAR,kBAAA,GACbJ,IAAI,CAACC,OAAO,EAAEY,IAAI,CACfC,CAAC,IAAMA,CAAC,CAACX,KAAK,KAAKA,KAAK,CAACY,EAAE,IAAI,CAAC,CAAED,CAAC,CAACF,QACvC,CAAC,cAAAR,kBAAA,cAAAA,kBAAA,GAAI,KAAK;MACXH,OAAO,CAACe,IAAI,CAAE;QACbb,KAAK,EAAEA,KAAK,CAACY,EAAE;QACfE,IAAI,EAAEd,KAAK,CAACe,KAAK;QACjBX,QAAQ,GAAAF,eAAA,GAAEF,KAAK,CAACI,QAAQ,cAAAF,eAAA,cAAAA,eAAA,GAAI,EAAE;QAC9Bc,eAAe,EAAET,SAAS,CAACG,IAAI,CAAIO,EAAE,IACpC7B,0BAA0B,CAAC8B,QAAQ,CAAED,EAAG,CACzC,CAAC;QACDV,SAAS;QACTY,SAAS,EACRV,QAAQ,IACRD,SAAS,IACT,CAAC,CAAEX,IAAI,CAACC,OAAO,EAAEY,IAAI,CAClBC,CAAC,IACFA,CAAC,CAACX,KAAK,KAAKA,KAAK,CAACY,EAAE,IACpBzB,aAAa,CAAC+B,QAAQ,CAAEP,CAAC,CAACS,QAAS,CACrC,CAAC;QACFZ,SAAS;QACTC;MACD,CAAE,CAAC;IACJ,CAAE,CAAC;;IAEH;IACA;IACA;IACA;IACAX,OAAO,CAACuB,IAAI,CAAE,CAAEC,CAAC,EAAEC,CAAC,KAAM;MACzB,IAAKD,CAAC,CAACb,QAAQ,IAAI,CAAEc,CAAC,CAACd,QAAQ,EAAG;QACjC,OAAO,CAAC,CAAC;MACV;MACA,IAAK,CAAEa,CAAC,CAACb,QAAQ,IAAIc,CAAC,CAACd,QAAQ,EAAG;QACjC,OAAO,CAAC;MACT;MACA,IAAKa,CAAC,CAACd,SAAS,IAAI,CAAEe,CAAC,CAACf,SAAS,EAAG;QACnC,OAAO,CAAC,CAAC;MACV;MACA,IAAK,CAAEc,CAAC,CAACd,SAAS,IAAIe,CAAC,CAACf,SAAS,EAAG;QACnC,OAAO,CAAC;MACT;MACA,OAAOc,CAAC,CAACR,IAAI,CAACU,aAAa,CAAED,CAAC,CAACT,IAAK,CAAC;IACtC,CAAE,CAAC;IACH,OAAOhB,OAAO;EACf,CAAC,EAAE,CAAEF,MAAM,EAAEC,IAAI,CAAG,CAAC;AACtB;AAEA,OAAO,SAAS4B,aAAaA,CAAA,EAAG;EAC/B,MAAM;IACL3B,OAAO;IACPD,IAAI;IACJ6B,YAAY;IACZC,eAAe;IACfC,eAAe;IACfC;EACD,CAAC,GAAG3D,UAAU,CAAEgB,gBAAiB,CAAC;EAElC,MAAM4C,SAAS,GAAG3D,MAAM,CAAuB,IAAK,CAAC;EACrD,MAAM4D,gCAAgC,GAAG1D,WAAW,CACjD2D,KAAW,IAAM;IAClBN,YAAY,CAAEM,KAAM,CAAC;IACrBH,kBAAkB,CAAE,IAAK,CAAC;EAC3B,CAAC,EACD,CAAEH,YAAY,EAAEG,kBAAkB,CACnC,CAAC;EACD,MAAMI,cAAc,GAAGnC,OAAO,CAACoC,MAAM,CAAIA,MAAM,IAAMA,MAAM,CAACf,SAAU,CAAC;EAEvE,MAAMgB,iBAAiB,GAAG,CAAC,CAAEF,cAAc,CAAC5B,MAAM;EAClD,IAAKP,OAAO,CAACO,MAAM,KAAK,CAAC,EAAG;IAC3B,OAAO,IAAI;EACZ;EAEA,MAAM+B,oBAAoB,GAAG;IAC5BrB,KAAK,EAAEpC,EAAE,CAAE,YAAa,CAAC;IACzB,eAAe,EAAE,KAAK;IACtB0D,SAAS,EAAE;EACZ,CAAC;EACD,MAAMC,wBAAwB,GAAG;IAChCvB,KAAK,EAAEnC,EAAE,CAAE,QAAQ,EAAE,MAAO,CAAC;IAC7B,eAAe,EAAEgD,eAAe;IAChCS,SAAS,EAAET,eAAe;IAC1BW,OAAO,EAAEA,CAAA,KAAM;MACd,IAAK,CAAEX,eAAe,EAAG;QACxBD,eAAe,CAAE,IAAK,CAAC;MACxB;MACAE,kBAAkB,CAAE,CAAED,eAAgB,CAAC;IACxC;EACD,CAAC;EACD,MAAMY,eAAe,gBACpBlD,IAAA,CAACb,MAAM;IACNgE,GAAG,EAAGX,SAAW;IACjBY,SAAS,EAAC,sCAAsC;IAChDC,IAAI,EAAC,SAAS;IACdC,IAAI,EAAGlE,MAAQ;IAAA,IACRyD,iBAAiB,GACrBG,wBAAwB,GACxBF,oBAAoB;EAAA,CACvB,CACD;EACD,oBACC9C,IAAA;IAAKoD,SAAS,EAAC,gDAAgD;IAAAG,QAAA,EAC5D,CAAEV,iBAAiB,gBACpB7C,IAAA,CAACN,aAAa;MACbc,OAAO,EAAGA,OAAS;MACnBD,IAAI,EAAGA,IAAM;MACb6B,YAAY,EAAGK,gCAAkC;MACjDJ,eAAe,EAAGA,eAAiB;MACnCmB,YAAY,EAAG;QAAEC,MAAM,EAAEP;MAAgB;IAAG,CAC5C,CAAC,gBAEFlD,IAAA,CAAC0D,sBAAsB;MACtBlB,SAAS,EAAGA,SAAW;MACvBmB,YAAY,EAAGpD,IAAI,CAACC,OAAO,EAAEO,MAAQ;MAAAwC,QAAA,EAEnCL;IAAe,CACM;EACxB,CACG,CAAC;AAER;AAEA,SAASQ,sBAAsBA,CAAE;EAChClB,SAAS;EACTmB,YAAY;EACZJ;AAKD,CAAC,EAAG;EACH;EACAvE,SAAS,CACR,MAAM,MAAM;IACXwD,SAAS,CAACoB,OAAO,EAAEC,KAAK,CAAC,CAAC;EAC3B,CAAC,EACD,CAAErB,SAAS,CACZ,CAAC;EACD,oBACCpC,KAAA,CAAAF,SAAA;IAAAqD,QAAA,GACGA,QAAQ,EACR,CAAC,CAAEI,YAAY,iBAChB3D,IAAA;MAAMoD,SAAS,EAAC,iCAAiC;MAAAG,QAAA,EAC9CI;IAAY,CACT,CACN;EAAA,CACA,CAAC;AAEL;AAEA,SAASG,OAAOA,CAAE;EAAEV;AAAkC,CAAC,EAAG;EACzD,MAAM;IAAE9C,MAAM;IAAEC,IAAI;IAAE6B,YAAY;IAAE2B,YAAY;IAAE1B;EAAgB,CAAC,GAClEzD,UAAU,CAAEgB,gBAAiB,CAAC;EAC/B,MAAMoE,YAAY,GAAGnF,MAAM,CAAuB,IAAK,CAAC;EACxD,MAAM2B,OAAO,GAAGH,UAAU,CAAEC,MAAM,EAAEC,IAAK,CAAC;EAC1C,MAAM0D,SAAS,gBACdjE,IAAA,CAACP,SAAS;IAETe,OAAO,EAAGA,OAAS;IACnBD,IAAI,EAAGA,IAAM;IACb6B,YAAY,EAAGA,YAAc;IAC7Be,GAAG,EAAGa,YAAc;IACpB3B,eAAe,EAAGA;EAAiB,GAL/B,YAMJ,CACD;EACD,MAAMM,cAAc,GAAGnC,OAAO,CAACoC,MAAM,CAAIA,MAAM,IAAMA,MAAM,CAACf,SAAU,CAAC;EACvE,IAAKc,cAAc,CAAC5B,MAAM,KAAK,CAAC,EAAG;IAClC,OAAO,IAAI;EACZ;EACA,MAAMmD,gBAAgB,GAAG,CACxB,GAAGvB,cAAc,CAACwB,GAAG,CAAIvB,MAAM,IAAM;IACpC,oBACC5C,IAAA,CAACT,MAAM;MAENqD,MAAM,EAAGA,MAAQ;MACjBrC,IAAI,EAAGA,IAAM;MACbD,MAAM,EAAGA,MAAQ;MACjB8B,YAAY,EAAGA,YAAc;MAC7B4B,YAAY,EAAGA,YAAc;MAC7BD,YAAY,EAAGA;IAAc,GANvBnB,MAAM,CAAClC,KAOb,CAAC;EAEJ,CAAE,CAAC,EACHuD,SAAS,CACT;EAEDC,gBAAgB,CAAC3C,IAAI,cACpBvB,IAAA,CAACL,YAAY;IAEZa,OAAO,EAAGA,OAAS;IACnBD,IAAI,EAAGA,IAAM;IACb6B,YAAY,EAAGA;EAAc,GAHzB,eAIJ,CACF,CAAC;EAED,oBACCpC,IAAA,CAACd,MAAM;IACNkF,OAAO,EAAC,YAAY;IACpBC,KAAK,EAAG;MAAEC,KAAK,EAAE;IAAc,CAAG;IAClCC,IAAI;IACJnB,SAAS,EAAGA,SAAW;IAAAG,QAAA,EAErBW;EAAgB,CACX,CAAC;AAEX;AAEA,eAAevF,IAAI,CAAEmF,OAAQ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["default","Filters","FiltersToggle","useFilters","FiltersToggled"],"sources":["@wordpress/dataviews/src/components/dataviews-filters/index.tsx"],"sourcesContent":["export { default as Filters } from './filters';\nexport { default as FiltersToggle } from './toggle';\nexport { default as useFilters } from './use-filters';\nexport { default as FiltersToggled } from './filters-toggled';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,OAAO,QAAQ,WAAW;AAC9C,SAASD,OAAO,IAAIE,aAAa,QAAQ,UAAU;AACnD,SAASF,OAAO,IAAIG,UAAU,QAAQ,eAAe;AACrD,SAASH,OAAO,IAAII,cAAc,QAAQ,mBAAmB","ignoreList":[]}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useContext, useRef, useCallback, useEffect } from '@wordpress/element';
5
+ import { Button } from '@wordpress/components';
6
+ import { funnel } from '@wordpress/icons';
7
+ import { __, _x } from '@wordpress/i18n';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import { AddFilterMenu } from './add-filter';
13
+ import DataViewsContext from '../dataviews-context';
14
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
15
+ function FiltersToggle() {
16
+ const {
17
+ filters,
18
+ view,
19
+ onChangeView,
20
+ setOpenedFilter,
21
+ isShowingFilter,
22
+ setIsShowingFilter
23
+ } = useContext(DataViewsContext);
24
+ const buttonRef = useRef(null);
25
+ const onChangeViewWithFilterVisibility = useCallback(_view => {
26
+ onChangeView(_view);
27
+ setIsShowingFilter(true);
28
+ }, [onChangeView, setIsShowingFilter]);
29
+ const visibleFilters = filters.filter(filter => filter.isVisible);
30
+ const hasVisibleFilters = !!visibleFilters.length;
31
+ if (filters.length === 0) {
32
+ return null;
33
+ }
34
+ const addFilterButtonProps = {
35
+ label: __('Add filter'),
36
+ 'aria-expanded': false,
37
+ isPressed: false
38
+ };
39
+ const toggleFiltersButtonProps = {
40
+ label: _x('Filter', 'verb'),
41
+ 'aria-expanded': isShowingFilter,
42
+ isPressed: isShowingFilter,
43
+ onClick: () => {
44
+ if (!isShowingFilter) {
45
+ setOpenedFilter(null);
46
+ }
47
+ setIsShowingFilter(!isShowingFilter);
48
+ }
49
+ };
50
+ const buttonComponent = /*#__PURE__*/_jsx(Button, {
51
+ ref: buttonRef,
52
+ className: "dataviews-filters__visibility-toggle",
53
+ size: "compact",
54
+ icon: funnel,
55
+ ...(hasVisibleFilters ? toggleFiltersButtonProps : addFilterButtonProps)
56
+ });
57
+ return /*#__PURE__*/_jsx("div", {
58
+ className: "dataviews-filters__container-visibility-toggle",
59
+ children: !hasVisibleFilters ? /*#__PURE__*/_jsx(AddFilterMenu, {
60
+ filters: filters,
61
+ view: view,
62
+ onChangeView: onChangeViewWithFilterVisibility,
63
+ setOpenedFilter: setOpenedFilter,
64
+ triggerProps: {
65
+ render: buttonComponent
66
+ }
67
+ }) : /*#__PURE__*/_jsx(FilterVisibilityToggle, {
68
+ buttonRef: buttonRef,
69
+ filtersCount: view.filters?.length,
70
+ children: buttonComponent
71
+ })
72
+ });
73
+ }
74
+ function FilterVisibilityToggle({
75
+ buttonRef,
76
+ filtersCount,
77
+ children
78
+ }) {
79
+ // Focus the `add filter` button when unmounts.
80
+ useEffect(() => () => {
81
+ buttonRef.current?.focus();
82
+ }, [buttonRef]);
83
+ return /*#__PURE__*/_jsxs(_Fragment, {
84
+ children: [children, !!filtersCount && /*#__PURE__*/_jsx("span", {
85
+ className: "dataviews-filters-toggle__count",
86
+ children: filtersCount
87
+ })]
88
+ });
89
+ }
90
+ export default FiltersToggle;
91
+ //# sourceMappingURL=toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useContext","useRef","useCallback","useEffect","Button","funnel","__","_x","AddFilterMenu","DataViewsContext","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","FiltersToggle","filters","view","onChangeView","setOpenedFilter","isShowingFilter","setIsShowingFilter","buttonRef","onChangeViewWithFilterVisibility","_view","visibleFilters","filter","isVisible","hasVisibleFilters","length","addFilterButtonProps","label","isPressed","toggleFiltersButtonProps","onClick","buttonComponent","ref","className","size","icon","children","triggerProps","render","FilterVisibilityToggle","filtersCount","current","focus"],"sources":["@wordpress/dataviews/src/components/dataviews-filters/toggle.tsx"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useContext, useRef, useCallback, useEffect } from '@wordpress/element';\nimport { Button } from '@wordpress/components';\nimport { funnel } from '@wordpress/icons';\nimport { __, _x } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { AddFilterMenu } from './add-filter';\nimport DataViewsContext from '../dataviews-context';\nimport type { View } from '../../types';\n\nfunction FiltersToggle() {\n\tconst {\n\t\tfilters,\n\t\tview,\n\t\tonChangeView,\n\t\tsetOpenedFilter,\n\t\tisShowingFilter,\n\t\tsetIsShowingFilter,\n\t} = useContext( DataViewsContext );\n\n\tconst buttonRef = useRef< HTMLButtonElement >( null );\n\tconst onChangeViewWithFilterVisibility = useCallback(\n\t\t( _view: View ) => {\n\t\t\tonChangeView( _view );\n\t\t\tsetIsShowingFilter( true );\n\t\t},\n\t\t[ onChangeView, setIsShowingFilter ]\n\t);\n\tconst visibleFilters = filters.filter( ( filter ) => filter.isVisible );\n\n\tconst hasVisibleFilters = !! visibleFilters.length;\n\tif ( filters.length === 0 ) {\n\t\treturn null;\n\t}\n\n\tconst addFilterButtonProps = {\n\t\tlabel: __( 'Add filter' ),\n\t\t'aria-expanded': false,\n\t\tisPressed: false,\n\t};\n\tconst toggleFiltersButtonProps = {\n\t\tlabel: _x( 'Filter', 'verb' ),\n\t\t'aria-expanded': isShowingFilter,\n\t\tisPressed: isShowingFilter,\n\t\tonClick: () => {\n\t\t\tif ( ! isShowingFilter ) {\n\t\t\t\tsetOpenedFilter( null );\n\t\t\t}\n\t\t\tsetIsShowingFilter( ! isShowingFilter );\n\t\t},\n\t};\n\tconst buttonComponent = (\n\t\t<Button\n\t\t\tref={ buttonRef }\n\t\t\tclassName=\"dataviews-filters__visibility-toggle\"\n\t\t\tsize=\"compact\"\n\t\t\ticon={ funnel }\n\t\t\t{ ...( hasVisibleFilters\n\t\t\t\t? toggleFiltersButtonProps\n\t\t\t\t: addFilterButtonProps ) }\n\t\t/>\n\t);\n\treturn (\n\t\t<div className=\"dataviews-filters__container-visibility-toggle\">\n\t\t\t{ ! hasVisibleFilters ? (\n\t\t\t\t<AddFilterMenu\n\t\t\t\t\tfilters={ filters }\n\t\t\t\t\tview={ view }\n\t\t\t\t\tonChangeView={ onChangeViewWithFilterVisibility }\n\t\t\t\t\tsetOpenedFilter={ setOpenedFilter }\n\t\t\t\t\ttriggerProps={ { render: buttonComponent } }\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<FilterVisibilityToggle\n\t\t\t\t\tbuttonRef={ buttonRef }\n\t\t\t\t\tfiltersCount={ view.filters?.length }\n\t\t\t\t>\n\t\t\t\t\t{ buttonComponent }\n\t\t\t\t</FilterVisibilityToggle>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n\nfunction FilterVisibilityToggle( {\n\tbuttonRef,\n\tfiltersCount,\n\tchildren,\n}: {\n\tbuttonRef: React.RefObject< HTMLButtonElement >;\n\tfiltersCount?: number;\n\tchildren: React.ReactNode;\n} ) {\n\t// Focus the `add filter` button when unmounts.\n\tuseEffect(\n\t\t() => () => {\n\t\t\tbuttonRef.current?.focus();\n\t\t},\n\t\t[ buttonRef ]\n\t);\n\treturn (\n\t\t<>\n\t\t\t{ children }\n\t\t\t{ !! filtersCount && (\n\t\t\t\t<span className=\"dataviews-filters-toggle__count\">\n\t\t\t\t\t{ filtersCount }\n\t\t\t\t</span>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default FiltersToggle;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useMemo } from '@wordpress/element';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { ALL_OPERATORS, SINGLE_SELECTION_OPERATORS } from '../../constants';
10
+ function useFilters(fields, view) {
11
+ return useMemo(() => {
12
+ const filters = [];
13
+ fields.forEach(field => {
14
+ var _view$filters$some, _field$elements;
15
+ if (field.filterBy === false || !field.elements?.length && !field.Edit) {
16
+ return;
17
+ }
18
+ const operators = field.filterBy.operators;
19
+ const isPrimary = !!field.filterBy?.isPrimary;
20
+ const isLocked = (_view$filters$some = view.filters?.some(f => f.field === field.id && !!f.isLocked)) !== null && _view$filters$some !== void 0 ? _view$filters$some : false;
21
+ filters.push({
22
+ field: field.id,
23
+ name: field.label,
24
+ elements: (_field$elements = field.elements) !== null && _field$elements !== void 0 ? _field$elements : [],
25
+ singleSelection: operators.some(op => SINGLE_SELECTION_OPERATORS.includes(op)),
26
+ operators,
27
+ isVisible: isLocked || isPrimary || !!view.filters?.some(f => f.field === field.id && ALL_OPERATORS.includes(f.operator)),
28
+ isPrimary,
29
+ isLocked
30
+ });
31
+ });
32
+
33
+ // Sort filters by:
34
+ // - locked filters go first
35
+ // - primary filters go next
36
+ // - then, sort by name
37
+ filters.sort((a, b) => {
38
+ if (a.isLocked && !b.isLocked) {
39
+ return -1;
40
+ }
41
+ if (!a.isLocked && b.isLocked) {
42
+ return 1;
43
+ }
44
+ if (a.isPrimary && !b.isPrimary) {
45
+ return -1;
46
+ }
47
+ if (!a.isPrimary && b.isPrimary) {
48
+ return 1;
49
+ }
50
+ return a.name.localeCompare(b.name);
51
+ });
52
+ return filters;
53
+ }, [fields, view]);
54
+ }
55
+ export default useFilters;
56
+ //# sourceMappingURL=use-filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useMemo","ALL_OPERATORS","SINGLE_SELECTION_OPERATORS","useFilters","fields","view","filters","forEach","field","_view$filters$some","_field$elements","filterBy","elements","length","Edit","operators","isPrimary","isLocked","some","f","id","push","name","label","singleSelection","op","includes","isVisible","operator","sort","a","b","localeCompare"],"sources":["@wordpress/dataviews/src/components/dataviews-filters/use-filters.ts"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { ALL_OPERATORS, SINGLE_SELECTION_OPERATORS } from '../../constants';\nimport type { NormalizedFilter, NormalizedField, View } from '../../types';\n\nfunction useFilters( fields: NormalizedField< any >[], view: View ) {\n\treturn useMemo( () => {\n\t\tconst filters: NormalizedFilter[] = [];\n\t\tfields.forEach( ( field ) => {\n\t\t\tif (\n\t\t\t\tfield.filterBy === false ||\n\t\t\t\t( ! field.elements?.length && ! field.Edit )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst operators = field.filterBy.operators;\n\t\t\tconst isPrimary = !! field.filterBy?.isPrimary;\n\t\t\tconst isLocked =\n\t\t\t\tview.filters?.some(\n\t\t\t\t\t( f ) => f.field === field.id && !! f.isLocked\n\t\t\t\t) ?? false;\n\t\t\tfilters.push( {\n\t\t\t\tfield: field.id,\n\t\t\t\tname: field.label,\n\t\t\t\telements: field.elements ?? [],\n\t\t\t\tsingleSelection: operators.some( ( op ) =>\n\t\t\t\t\tSINGLE_SELECTION_OPERATORS.includes( op )\n\t\t\t\t),\n\t\t\t\toperators,\n\t\t\t\tisVisible:\n\t\t\t\t\tisLocked ||\n\t\t\t\t\tisPrimary ||\n\t\t\t\t\t!! view.filters?.some(\n\t\t\t\t\t\t( f ) =>\n\t\t\t\t\t\t\tf.field === field.id &&\n\t\t\t\t\t\t\tALL_OPERATORS.includes( f.operator )\n\t\t\t\t\t),\n\t\t\t\tisPrimary,\n\t\t\t\tisLocked,\n\t\t\t} );\n\t\t} );\n\n\t\t// Sort filters by:\n\t\t// - locked filters go first\n\t\t// - primary filters go next\n\t\t// - then, sort by name\n\t\tfilters.sort( ( a, b ) => {\n\t\t\tif ( a.isLocked && ! b.isLocked ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( ! a.isLocked && b.isLocked ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif ( a.isPrimary && ! b.isPrimary ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( ! a.isPrimary && b.isPrimary ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn a.name.localeCompare( b.name );\n\t\t} );\n\t\treturn filters;\n\t}, [ fields, view ] );\n}\n\nexport default useFilters;\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAO,QAAQ,oBAAoB;;AAE5C;AACA;AACA;AACA,SAASC,aAAa,EAAEC,0BAA0B,QAAQ,iBAAiB;AAG3E,SAASC,UAAUA,CAAEC,MAAgC,EAAEC,IAAU,EAAG;EACnE,OAAOL,OAAO,CAAE,MAAM;IACrB,MAAMM,OAA2B,GAAG,EAAE;IACtCF,MAAM,CAACG,OAAO,CAAIC,KAAK,IAAM;MAAA,IAAAC,kBAAA,EAAAC,eAAA;MAC5B,IACCF,KAAK,CAACG,QAAQ,KAAK,KAAK,IACtB,CAAEH,KAAK,CAACI,QAAQ,EAAEC,MAAM,IAAI,CAAEL,KAAK,CAACM,IAAM,EAC3C;QACD;MACD;MAEA,MAAMC,SAAS,GAAGP,KAAK,CAACG,QAAQ,CAACI,SAAS;MAC1C,MAAMC,SAAS,GAAG,CAAC,CAAER,KAAK,CAACG,QAAQ,EAAEK,SAAS;MAC9C,MAAMC,QAAQ,IAAAR,kBAAA,GACbJ,IAAI,CAACC,OAAO,EAAEY,IAAI,CACfC,CAAC,IAAMA,CAAC,CAACX,KAAK,KAAKA,KAAK,CAACY,EAAE,IAAI,CAAC,CAAED,CAAC,CAACF,QACvC,CAAC,cAAAR,kBAAA,cAAAA,kBAAA,GAAI,KAAK;MACXH,OAAO,CAACe,IAAI,CAAE;QACbb,KAAK,EAAEA,KAAK,CAACY,EAAE;QACfE,IAAI,EAAEd,KAAK,CAACe,KAAK;QACjBX,QAAQ,GAAAF,eAAA,GAAEF,KAAK,CAACI,QAAQ,cAAAF,eAAA,cAAAA,eAAA,GAAI,EAAE;QAC9Bc,eAAe,EAAET,SAAS,CAACG,IAAI,CAAIO,EAAE,IACpCvB,0BAA0B,CAACwB,QAAQ,CAAED,EAAG,CACzC,CAAC;QACDV,SAAS;QACTY,SAAS,EACRV,QAAQ,IACRD,SAAS,IACT,CAAC,CAAEX,IAAI,CAACC,OAAO,EAAEY,IAAI,CAClBC,CAAC,IACFA,CAAC,CAACX,KAAK,KAAKA,KAAK,CAACY,EAAE,IACpBnB,aAAa,CAACyB,QAAQ,CAAEP,CAAC,CAACS,QAAS,CACrC,CAAC;QACFZ,SAAS;QACTC;MACD,CAAE,CAAC;IACJ,CAAE,CAAC;;IAEH;IACA;IACA;IACA;IACAX,OAAO,CAACuB,IAAI,CAAE,CAAEC,CAAC,EAAEC,CAAC,KAAM;MACzB,IAAKD,CAAC,CAACb,QAAQ,IAAI,CAAEc,CAAC,CAACd,QAAQ,EAAG;QACjC,OAAO,CAAC,CAAC;MACV;MACA,IAAK,CAAEa,CAAC,CAACb,QAAQ,IAAIc,CAAC,CAACd,QAAQ,EAAG;QACjC,OAAO,CAAC;MACT;MACA,IAAKa,CAAC,CAACd,SAAS,IAAI,CAAEe,CAAC,CAACf,SAAS,EAAG;QACnC,OAAO,CAAC,CAAC;MACV;MACA,IAAK,CAAEc,CAAC,CAACd,SAAS,IAAIe,CAAC,CAACf,SAAS,EAAG;QACnC,OAAO,CAAC;MACT;MACA,OAAOc,CAAC,CAACR,IAAI,CAACU,aAAa,CAAED,CAAC,CAACT,IAAK,CAAC;IACtC,CAAE,CAAC;IACH,OAAOhB,OAAO;EACf,CAAC,EAAE,CAAEF,MAAM,EAAEC,IAAI,CAAG,CAAC;AACtB;AAEA,eAAeF,UAAU","ignoreList":[]}