@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.
- package/CHANGELOG.md +19 -3
- package/README.md +4 -2
- package/build/components/dataviews/index.js +4 -6
- package/build/components/dataviews/index.js.map +1 -1
- package/build/components/dataviews-filters/filters-toggled.js +32 -0
- package/build/components/dataviews-filters/filters-toggled.js.map +1 -0
- package/build/components/dataviews-filters/filters.js +73 -0
- package/build/components/dataviews-filters/filters.js.map +1 -0
- package/build/components/dataviews-filters/index.js +26 -190
- package/build/components/dataviews-filters/index.js.map +1 -1
- package/build/components/dataviews-filters/toggle.js +99 -0
- package/build/components/dataviews-filters/toggle.js.map +1 -0
- package/build/components/dataviews-filters/use-filters.js +63 -0
- package/build/components/dataviews-filters/use-filters.js.map +1 -0
- package/build/components/dataviews-picker/index.js +4 -6
- package/build/components/dataviews-picker/index.js.map +1 -1
- package/build/components/dataviews-view-config/index.js +22 -3
- package/build/components/dataviews-view-config/index.js.map +1 -1
- package/build/dataform-controls/array.js +110 -24
- package/build/dataform-controls/array.js.map +1 -1
- package/build/dataviews-layouts/picker-grid/index.js +4 -1
- package/build/dataviews-layouts/picker-grid/index.js.map +1 -1
- package/build/field-types/array.js +0 -6
- package/build/field-types/array.js.map +1 -1
- package/build/index.js +7 -0
- package/build/index.js.map +1 -1
- package/build/types.js.map +1 -1
- package/build/validation.js +18 -1
- package/build/validation.js.map +1 -1
- package/build-module/components/dataviews/index.js +5 -7
- package/build-module/components/dataviews/index.js.map +1 -1
- package/build-module/components/dataviews-filters/filters-toggled.js +24 -0
- package/build-module/components/dataviews-filters/filters-toggled.js.map +1 -0
- package/build-module/components/dataviews-filters/filters.js +65 -0
- package/build-module/components/dataviews-filters/filters.js.map +1 -0
- package/build-module/components/dataviews-filters/index.js +4 -186
- package/build-module/components/dataviews-filters/index.js.map +1 -1
- package/build-module/components/dataviews-filters/toggle.js +91 -0
- package/build-module/components/dataviews-filters/toggle.js.map +1 -0
- package/build-module/components/dataviews-filters/use-filters.js +56 -0
- package/build-module/components/dataviews-filters/use-filters.js.map +1 -0
- package/build-module/components/dataviews-picker/index.js +5 -7
- package/build-module/components/dataviews-picker/index.js.map +1 -1
- package/build-module/components/dataviews-view-config/index.js +22 -3
- package/build-module/components/dataviews-view-config/index.js.map +1 -1
- package/build-module/dataform-controls/array.js +112 -26
- package/build-module/dataform-controls/array.js.map +1 -1
- package/build-module/dataviews-layouts/picker-grid/index.js +4 -1
- package/build-module/dataviews-layouts/picker-grid/index.js.map +1 -1
- package/build-module/field-types/array.js +0 -6
- package/build-module/field-types/array.js.map +1 -1
- package/build-module/index.js +1 -0
- package/build-module/index.js.map +1 -1
- package/build-module/types.js.map +1 -1
- package/build-module/validation.js +18 -1
- package/build-module/validation.js.map +1 -1
- package/build-types/components/dataform/stories/index.story.d.ts.map +1 -1
- package/build-types/components/dataviews/index.d.ts +3 -2
- package/build-types/components/dataviews/index.d.ts.map +1 -1
- package/build-types/components/dataviews-filters/filters-toggled.d.ts +5 -0
- package/build-types/components/dataviews-filters/filters-toggled.d.ts.map +1 -0
- package/build-types/components/dataviews-filters/filters.d.ts +6 -0
- package/build-types/components/dataviews-filters/filters.d.ts.map +1 -0
- package/build-types/components/dataviews-filters/index.d.ts +4 -8
- package/build-types/components/dataviews-filters/index.d.ts.map +1 -1
- package/build-types/components/dataviews-filters/toggle.d.ts +3 -0
- package/build-types/components/dataviews-filters/toggle.d.ts.map +1 -0
- package/build-types/components/dataviews-filters/use-filters.d.ts +4 -0
- package/build-types/components/dataviews-filters/use-filters.d.ts.map +1 -0
- package/build-types/components/dataviews-picker/index.d.ts +3 -2
- package/build-types/components/dataviews-picker/index.d.ts.map +1 -1
- package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
- package/build-types/dataform-controls/array.d.ts.map +1 -1
- package/build-types/dataviews-layouts/picker-grid/index.d.ts.map +1 -1
- package/build-types/field-types/array.d.ts.map +1 -1
- package/build-types/index.d.ts +1 -0
- package/build-types/index.d.ts.map +1 -1
- package/build-types/types.d.ts +2 -1
- package/build-types/types.d.ts.map +1 -1
- package/build-types/validation.d.ts.map +1 -1
- package/build-wp/index.js +899 -408
- package/package.json +15 -15
- package/src/components/dataform/stories/index.story.tsx +73 -1
- package/src/components/dataviews/index.tsx +8 -14
- package/src/components/dataviews/stories/index.story.tsx +1 -1
- package/src/components/dataviews-filters/filters-toggled.tsx +20 -0
- package/src/components/dataviews-filters/filters.tsx +73 -0
- package/src/components/dataviews-filters/index.tsx +4 -246
- package/src/components/dataviews-filters/toggle.tsx +118 -0
- package/src/components/dataviews-filters/use-filters.ts +73 -0
- package/src/components/dataviews-picker/index.tsx +8 -14
- package/src/components/dataviews-view-config/index.tsx +18 -3
- package/src/dataform-controls/array.tsx +137 -40
- package/src/dataviews-layouts/picker-grid/index.tsx +15 -8
- package/src/field-types/array.tsx +0 -8
- package/src/index.ts +1 -0
- package/src/test/validation.ts +192 -0
- package/src/types.ts +2 -1
- package/src/validation.ts +30 -0
- 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 {
|
|
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 {
|
|
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
|
-
}),
|
|
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 =
|
|
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":"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","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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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":"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","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":"AAAA;AACA;AACA;AACA,SAASA,UAAU,EAAEC,MAAM,EAAEC,WAAW,EAAEC,SAAS,QAAQ,oBAAoB;AAC/E,SAASC,MAAM,QAAQ,uBAAuB;AAC9C,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,EAAE,EAAEC,EAAE,QAAQ,iBAAiB;;AAExC;AACA;AACA;AACA,SAASC,aAAa,QAAQ,cAAc;AAC5C,OAAOC,gBAAgB,MAAM,sBAAsB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAGpD,SAASC,aAAaA,CAAA,EAAG;EACxB,MAAM;IACLC,OAAO;IACPC,IAAI;IACJC,YAAY;IACZC,eAAe;IACfC,eAAe;IACfC;EACD,CAAC,GAAGtB,UAAU,CAAES,gBAAiB,CAAC;EAElC,MAAMc,SAAS,GAAGtB,MAAM,CAAuB,IAAK,CAAC;EACrD,MAAMuB,gCAAgC,GAAGtB,WAAW,CACjDuB,KAAW,IAAM;IAClBN,YAAY,CAAEM,KAAM,CAAC;IACrBH,kBAAkB,CAAE,IAAK,CAAC;EAC3B,CAAC,EACD,CAAEH,YAAY,EAAEG,kBAAkB,CACnC,CAAC;EACD,MAAMI,cAAc,GAAGT,OAAO,CAACU,MAAM,CAAIA,MAAM,IAAMA,MAAM,CAACC,SAAU,CAAC;EAEvE,MAAMC,iBAAiB,GAAG,CAAC,CAAEH,cAAc,CAACI,MAAM;EAClD,IAAKb,OAAO,CAACa,MAAM,KAAK,CAAC,EAAG;IAC3B,OAAO,IAAI;EACZ;EAEA,MAAMC,oBAAoB,GAAG;IAC5BC,KAAK,EAAE1B,EAAE,CAAE,YAAa,CAAC;IACzB,eAAe,EAAE,KAAK;IACtB2B,SAAS,EAAE;EACZ,CAAC;EACD,MAAMC,wBAAwB,GAAG;IAChCF,KAAK,EAAEzB,EAAE,CAAE,QAAQ,EAAE,MAAO,CAAC;IAC7B,eAAe,EAAEc,eAAe;IAChCY,SAAS,EAAEZ,eAAe;IAC1Bc,OAAO,EAAEA,CAAA,KAAM;MACd,IAAK,CAAEd,eAAe,EAAG;QACxBD,eAAe,CAAE,IAAK,CAAC;MACxB;MACAE,kBAAkB,CAAE,CAAED,eAAgB,CAAC;IACxC;EACD,CAAC;EACD,MAAMe,eAAe,gBACpBzB,IAAA,CAACP,MAAM;IACNiC,GAAG,EAAGd,SAAW;IACjBe,SAAS,EAAC,sCAAsC;IAChDC,IAAI,EAAC,SAAS;IACdC,IAAI,EAAGnC,MAAQ;IAAA,IACRwB,iBAAiB,GACrBK,wBAAwB,GACxBH,oBAAoB;EAAA,CACvB,CACD;EACD,oBACCpB,IAAA;IAAK2B,SAAS,EAAC,gDAAgD;IAAAG,QAAA,EAC5D,CAAEZ,iBAAiB,gBACpBlB,IAAA,CAACH,aAAa;MACbS,OAAO,EAAGA,OAAS;MACnBC,IAAI,EAAGA,IAAM;MACbC,YAAY,EAAGK,gCAAkC;MACjDJ,eAAe,EAAGA,eAAiB;MACnCsB,YAAY,EAAG;QAAEC,MAAM,EAAEP;MAAgB;IAAG,CAC5C,CAAC,gBAEFzB,IAAA,CAACiC,sBAAsB;MACtBrB,SAAS,EAAGA,SAAW;MACvBsB,YAAY,EAAG3B,IAAI,CAACD,OAAO,EAAEa,MAAQ;MAAAW,QAAA,EAEnCL;IAAe,CACM;EACxB,CACG,CAAC;AAER;AAEA,SAASQ,sBAAsBA,CAAE;EAChCrB,SAAS;EACTsB,YAAY;EACZJ;AAKD,CAAC,EAAG;EACH;EACAtC,SAAS,CACR,MAAM,MAAM;IACXoB,SAAS,CAACuB,OAAO,EAAEC,KAAK,CAAC,CAAC;EAC3B,CAAC,EACD,CAAExB,SAAS,CACZ,CAAC;EACD,oBACCR,KAAA,CAAAF,SAAA;IAAA4B,QAAA,GACGA,QAAQ,EACR,CAAC,CAAEI,YAAY,iBAChBlC,IAAA;MAAM2B,SAAS,EAAC,iCAAiC;MAAAG,QAAA,EAC9CI;IAAY,CACT,CACN;EAAA,CACA,CAAC;AAEL;AAEA,eAAe7B,aAAa","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":[]}
|