@wordpress/dataviews 0.7.0 → 0.8.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 +7 -0
- package/README.md +48 -15
- package/build/constants.js +28 -7
- package/build/constants.js.map +1 -1
- package/build/dataviews.js +11 -5
- package/build/dataviews.js.map +1 -1
- package/build/filter-summary.js +33 -12
- package/build/filter-summary.js.map +1 -1
- package/build/filters.js +2 -1
- package/build/filters.js.map +1 -1
- package/build/item-actions.js +20 -39
- package/build/item-actions.js.map +1 -1
- package/build/pagination.js +2 -2
- package/build/pagination.js.map +1 -1
- package/build/search-widget.js +34 -10
- package/build/search-widget.js.map +1 -1
- package/build/utils.js +24 -2
- package/build/utils.js.map +1 -1
- package/build/view-grid.js +4 -1
- package/build/view-grid.js.map +1 -1
- package/build/view-table.js +35 -4
- package/build/view-table.js.map +1 -1
- package/build-module/constants.js +27 -6
- package/build-module/constants.js.map +1 -1
- package/build-module/dataviews.js +11 -5
- package/build-module/dataviews.js.map +1 -1
- package/build-module/filter-summary.js +34 -13
- package/build-module/filter-summary.js.map +1 -1
- package/build-module/filters.js +3 -2
- package/build-module/filters.js.map +1 -1
- package/build-module/item-actions.js +20 -39
- package/build-module/item-actions.js.map +1 -1
- package/build-module/pagination.js +2 -2
- package/build-module/pagination.js.map +1 -1
- package/build-module/search-widget.js +35 -11
- package/build-module/search-widget.js.map +1 -1
- package/build-module/utils.js +25 -3
- package/build-module/utils.js.map +1 -1
- package/build-module/view-grid.js +4 -1
- package/build-module/view-grid.js.map +1 -1
- package/build-module/view-table.js +36 -5
- package/build-module/view-table.js.map +1 -1
- package/build-style/style-rtl.css +9 -3
- package/build-style/style.css +9 -3
- package/package.json +11 -11
- package/src/constants.js +35 -6
- package/src/dataviews.js +11 -5
- package/src/filter-summary.js +76 -23
- package/src/filters.js +10 -4
- package/src/item-actions.js +19 -55
- package/src/pagination.js +2 -2
- package/src/search-widget.js +63 -21
- package/src/stories/fixtures.js +12 -1
- package/src/stories/index.story.js +43 -4
- package/src/style.scss +9 -3
- package/src/utils.js +38 -4
- package/src/view-grid.js +4 -1
- package/src/view-table.js +50 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Button","Modal","__experimentalHStack","HStack","privateApis","componentsPrivateApis","__","useMemo","useState","moreVertical","unlock","DropdownMenuV2","DropdownMenu","DropdownMenuGroupV2","DropdownMenuGroup","DropdownMenuItemV2","DropdownMenuItem","DropdownMenuItemLabelV2","DropdownMenuItemLabel","kebabCase","ButtonTrigger","action","onClick","createElement","label","icon","isDestructive","size","DropdownMenuItemTrigger","hideOnClick","RenderModal","ActionWithModal","item","ActionTrigger","isModalOpen","setIsModalOpen","actionTriggerProps","hideModalHeader","Fragment","title","modalHeader","__experimentalHideHeader","onRequestClose","overlayClassName","id","items","closeModal","ActionsDropdownMenuGroup","actions","map","key","callback","ItemActions","isCompact","primaryActions","secondaryActions","reduce","accumulator","isEligible","isPrimary","push","CompactItemActions","spacing","justify","style","flexShrink","width","length","trigger","disabled","placement"],"sources":["@wordpress/dataviews/src/item-actions.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tModal,\n\t__experimentalHStack as HStack,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useMemo, useState } from '@wordpress/element';\nimport { moreVertical } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from './lock-unlock';\n\nconst {\n\tDropdownMenuV2: DropdownMenu,\n\tDropdownMenuGroupV2: DropdownMenuGroup,\n\tDropdownMenuItemV2: DropdownMenuItem,\n\tDropdownMenuItemLabelV2: DropdownMenuItemLabel,\n\tkebabCase,\n} = unlock( componentsPrivateApis );\n\nfunction ButtonTrigger( { action, onClick } ) {\n\treturn (\n\t\t<Button\n\t\t\tlabel={ action.label }\n\t\t\ticon={ action.icon }\n\t\t\tisDestructive={ action.isDestructive }\n\t\t\tsize=\"compact\"\n\t\t\tonClick={ onClick }\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuItemTrigger( { action, onClick } ) {\n\treturn (\n\t\t<DropdownMenuItem\n\t\t\tonClick={ onClick }\n\t\t\thideOnClick={ ! action.RenderModal }\n\t\t>\n\t\t\t<DropdownMenuItemLabel>{ action.label }</DropdownMenuItemLabel>\n\t\t</DropdownMenuItem>\n\t);\n}\n\nfunction ActionWithModal( { action, item, ActionTrigger } ) {\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tconst actionTriggerProps = {\n\t\taction,\n\t\tonClick: () => setIsModalOpen( true ),\n\t};\n\tconst { RenderModal, hideModalHeader } = action;\n\treturn (\n\t\t<>\n\t\t\t<ActionTrigger { ...actionTriggerProps } />\n\t\t\t{ isModalOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\ttitle={ action.modalHeader || action.label }\n\t\t\t\t\t__experimentalHideHeader={ !! hideModalHeader }\n\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t} }\n\t\t\t\t\toverlayClassName={ `dataviews-action-modal dataviews-action-modal__${ kebabCase(\n\t\t\t\t\t\taction.id\n\t\t\t\t\t) }` }\n\t\t\t\t>\n\t\t\t\t\t<RenderModal\n\t\t\t\t\t\titems={ [ item ] }\n\t\t\t\t\t\tcloseModal={ () => setIsModalOpen( false ) }\n\t\t\t\t\t/>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nfunction ActionsDropdownMenuGroup( { actions, item } ) {\n\treturn (\n\t\t<DropdownMenuGroup>\n\t\t\t{ actions.map( ( action ) => {\n\t\t\t\tif ( !! action.RenderModal ) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<ActionWithModal\n\t\t\t\t\t\t\tkey={ action.id }\n\t\t\t\t\t\t\taction={ action }\n\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\tActionTrigger={ DropdownMenuItemTrigger }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t<DropdownMenuItemTrigger\n\t\t\t\t\t\tkey={ action.id }\n\t\t\t\t\t\taction={ action }\n\t\t\t\t\t\tonClick={ () => action.callback( [ item ] ) }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</DropdownMenuGroup>\n\t);\n}\n\nexport default function ItemActions( { item, actions, isCompact } ) {\n\tconst { primaryActions, secondaryActions } = useMemo( () => {\n\t\treturn actions.reduce(\n\t\t\t( accumulator, action ) => {\n\t\t\t\t// If an action is eligible for all items, doesn't need\n\t\t\t\t// to provide the `isEligible` function.\n\t\t\t\tif ( action.isEligible && ! action.isEligible( item ) ) {\n\t\t\t\t\treturn accumulator;\n\t\t\t\t}\n\t\t\t\tif ( action.isPrimary && !! action.icon ) {\n\t\t\t\t\taccumulator.primaryActions.push( action );\n\t\t\t\t} else {\n\t\t\t\t\taccumulator.secondaryActions.push( action );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t},\n\t\t\t{ primaryActions: [], secondaryActions: [] }\n\t\t);\n\t}, [ actions, item ] );\n\tif ( isCompact ) {\n\t\treturn (\n\t\t\t<CompactItemActions\n\t\t\t\titem={ item }\n\t\t\t\tprimaryActions={ primaryActions }\n\t\t\t\tsecondaryActions={ secondaryActions }\n\t\t\t/>\n\t\t);\n\t}\n\treturn (\n\t\t<HStack\n\t\t\tspacing={ 1 }\n\t\t\tjustify=\"flex-end\"\n\t\t\tstyle={ {\n\t\t\t\tflexShrink: '0',\n\t\t\t\twidth: 'auto',\n\t\t\t} }\n\t\t>\n\t\t\t{ !! primaryActions.length &&\n\t\t\t\tprimaryActions.map( ( action ) => {\n\t\t\t\t\tif ( !! action.RenderModal ) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<ActionWithModal\n\t\t\t\t\t\t\t\tkey={ action.id }\n\t\t\t\t\t\t\t\taction={ action }\n\t\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\t\tActionTrigger={ ButtonTrigger }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<ButtonTrigger\n\t\t\t\t\t\t\tkey={ action.id }\n\t\t\t\t\t\t\taction={ action }\n\t\t\t\t\t\t\tonClick={ () => action.callback( [ item ] ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t<DropdownMenu\n\t\t\t\ttrigger={\n\t\t\t\t\t<Button\n\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\t\tlabel={ __( 'Actions' ) }\n\t\t\t\t\t\tdisabled={ ! secondaryActions.length }\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tplacement=\"bottom-end\"\n\t\t\t>\n\t\t\t\t<ActionsDropdownMenuGroup\n\t\t\t\t\tactions={ secondaryActions }\n\t\t\t\t\titem={ item }\n\t\t\t\t/>\n\t\t\t</DropdownMenu>\n\t\t</HStack>\n\t);\n}\n\nfunction CompactItemActions( { item, primaryActions, secondaryActions } ) {\n\treturn (\n\t\t<DropdownMenu\n\t\t\ttrigger={\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\tlabel={ __( 'Actions' ) }\n\t\t\t\t\tdisabled={\n\t\t\t\t\t\t! primaryActions.length && ! secondaryActions.length\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t}\n\t\t\tplacement=\"bottom-end\"\n\t\t>\n\t\t\t{ !! primaryActions.length && (\n\t\t\t\t<ActionsDropdownMenuGroup\n\t\t\t\t\tactions={ primaryActions }\n\t\t\t\t\titem={ item }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ !! secondaryActions.length && (\n\t\t\t\t<ActionsDropdownMenuGroup\n\t\t\t\t\tactions={ secondaryActions }\n\t\t\t\t\titem={ item }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</DropdownMenu>\n\t);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Button","Modal","__experimentalHStack","HStack","privateApis","componentsPrivateApis","__","useMemo","useState","moreVertical","unlock","DropdownMenuV2","DropdownMenu","DropdownMenuGroupV2","DropdownMenuGroup","DropdownMenuItemV2","DropdownMenuItem","DropdownMenuItemLabelV2","DropdownMenuItemLabel","kebabCase","ButtonTrigger","action","onClick","createElement","label","icon","isDestructive","size","DropdownMenuItemTrigger","hideOnClick","RenderModal","ActionWithModal","item","ActionTrigger","isModalOpen","setIsModalOpen","actionTriggerProps","hideModalHeader","Fragment","title","modalHeader","__experimentalHideHeader","onRequestClose","overlayClassName","id","items","closeModal","ActionsDropdownMenuGroup","actions","map","key","callback","ItemActions","isCompact","primaryActions","eligibleActions","_eligibleActions","filter","isEligible","_primaryActions","isPrimary","CompactItemActions","spacing","justify","className","style","flexShrink","width","length","trigger","disabled","placement"],"sources":["@wordpress/dataviews/src/item-actions.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tModal,\n\t__experimentalHStack as HStack,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useMemo, useState } from '@wordpress/element';\nimport { moreVertical } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from './lock-unlock';\n\nconst {\n\tDropdownMenuV2: DropdownMenu,\n\tDropdownMenuGroupV2: DropdownMenuGroup,\n\tDropdownMenuItemV2: DropdownMenuItem,\n\tDropdownMenuItemLabelV2: DropdownMenuItemLabel,\n\tkebabCase,\n} = unlock( componentsPrivateApis );\n\nfunction ButtonTrigger( { action, onClick } ) {\n\treturn (\n\t\t<Button\n\t\t\tlabel={ action.label }\n\t\t\ticon={ action.icon }\n\t\t\tisDestructive={ action.isDestructive }\n\t\t\tsize=\"compact\"\n\t\t\tonClick={ onClick }\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuItemTrigger( { action, onClick } ) {\n\treturn (\n\t\t<DropdownMenuItem\n\t\t\tonClick={ onClick }\n\t\t\thideOnClick={ ! action.RenderModal }\n\t\t>\n\t\t\t<DropdownMenuItemLabel>{ action.label }</DropdownMenuItemLabel>\n\t\t</DropdownMenuItem>\n\t);\n}\n\nfunction ActionWithModal( { action, item, ActionTrigger } ) {\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tconst actionTriggerProps = {\n\t\taction,\n\t\tonClick: () => setIsModalOpen( true ),\n\t};\n\tconst { RenderModal, hideModalHeader } = action;\n\treturn (\n\t\t<>\n\t\t\t<ActionTrigger { ...actionTriggerProps } />\n\t\t\t{ isModalOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\ttitle={ action.modalHeader || action.label }\n\t\t\t\t\t__experimentalHideHeader={ !! hideModalHeader }\n\t\t\t\t\tonRequestClose={ () => {\n\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t} }\n\t\t\t\t\toverlayClassName={ `dataviews-action-modal dataviews-action-modal__${ kebabCase(\n\t\t\t\t\t\taction.id\n\t\t\t\t\t) }` }\n\t\t\t\t>\n\t\t\t\t\t<RenderModal\n\t\t\t\t\t\titems={ [ item ] }\n\t\t\t\t\t\tcloseModal={ () => setIsModalOpen( false ) }\n\t\t\t\t\t/>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nfunction ActionsDropdownMenuGroup( { actions, item } ) {\n\treturn (\n\t\t<DropdownMenuGroup>\n\t\t\t{ actions.map( ( action ) => {\n\t\t\t\tif ( !! action.RenderModal ) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<ActionWithModal\n\t\t\t\t\t\t\tkey={ action.id }\n\t\t\t\t\t\t\taction={ action }\n\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\tActionTrigger={ DropdownMenuItemTrigger }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t<DropdownMenuItemTrigger\n\t\t\t\t\t\tkey={ action.id }\n\t\t\t\t\t\taction={ action }\n\t\t\t\t\t\tonClick={ () => action.callback( [ item ] ) }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</DropdownMenuGroup>\n\t);\n}\n\nexport default function ItemActions( { item, actions, isCompact } ) {\n\tconst { primaryActions, eligibleActions } = useMemo( () => {\n\t\t// If an action is eligible for all items, doesn't need\n\t\t// to provide the `isEligible` function.\n\t\tconst _eligibleActions = actions.filter(\n\t\t\t( action ) => ! action.isEligible || action.isEligible( item )\n\t\t);\n\t\tconst _primaryActions = _eligibleActions.filter(\n\t\t\t( action ) => action.isPrimary && !! action.icon\n\t\t);\n\t\treturn {\n\t\t\tprimaryActions: _primaryActions,\n\t\t\teligibleActions: _eligibleActions,\n\t\t};\n\t}, [ actions, item ] );\n\tif ( isCompact ) {\n\t\treturn <CompactItemActions item={ item } actions={ eligibleActions } />;\n\t}\n\treturn (\n\t\t<HStack\n\t\t\tspacing={ 1 }\n\t\t\tjustify=\"flex-end\"\n\t\t\tclassName=\"dataviews-item-actions\"\n\t\t\tstyle={ {\n\t\t\t\tflexShrink: '0',\n\t\t\t\twidth: 'auto',\n\t\t\t} }\n\t\t>\n\t\t\t{ !! primaryActions.length &&\n\t\t\t\tprimaryActions.map( ( action ) => {\n\t\t\t\t\tif ( !! action.RenderModal ) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<ActionWithModal\n\t\t\t\t\t\t\t\tkey={ action.id }\n\t\t\t\t\t\t\t\taction={ action }\n\t\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\t\tActionTrigger={ ButtonTrigger }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<ButtonTrigger\n\t\t\t\t\t\t\tkey={ action.id }\n\t\t\t\t\t\t\taction={ action }\n\t\t\t\t\t\t\tonClick={ () => action.callback( [ item ] ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t<CompactItemActions item={ item } actions={ eligibleActions } />\n\t\t</HStack>\n\t);\n}\n\nfunction CompactItemActions( { item, actions } ) {\n\treturn (\n\t\t<DropdownMenu\n\t\t\ttrigger={\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\tlabel={ __( 'Actions' ) }\n\t\t\t\t\tdisabled={ ! actions.length }\n\t\t\t\t\tclassName=\"dataviews-all-actions-button\"\n\t\t\t\t/>\n\t\t\t}\n\t\t\tplacement=\"bottom-end\"\n\t\t>\n\t\t\t<ActionsDropdownMenuGroup actions={ actions } item={ item } />\n\t\t</DropdownMenu>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -29,8 +29,8 @@ const Pagination = memo(function Pagination({
|
|
|
29
29
|
className: "dataviews-pagination__page-selection"
|
|
30
30
|
}, createInterpolateElement(sprintf(
|
|
31
31
|
// translators: %s: Total number of pages.
|
|
32
|
-
_x('Page <
|
|
33
|
-
|
|
32
|
+
_x('Page <CurrentPageControl /> of %s', 'paging'), totalPages), {
|
|
33
|
+
CurrentPageControl: createElement(SelectControl, {
|
|
34
34
|
"aria-label": __('Current page'),
|
|
35
35
|
value: view.page,
|
|
36
36
|
options: Array.from(Array(totalPages)).map((_, i) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Button","__experimentalHStack","HStack","SelectControl","createInterpolateElement","memo","sprintf","__","_x","chevronRight","chevronLeft","Pagination","view","onChangeView","paginationInfo","totalItems","totalPages","createElement","expanded","spacing","justify","className","
|
|
1
|
+
{"version":3,"names":["Button","__experimentalHStack","HStack","SelectControl","createInterpolateElement","memo","sprintf","__","_x","chevronRight","chevronLeft","Pagination","view","onChangeView","paginationInfo","totalItems","totalPages","createElement","expanded","spacing","justify","className","CurrentPageControl","value","page","options","Array","from","map","_","i","label","onChange","newValue","size","__nextHasNoMarginBottom","onClick","disabled","__experimentalIsFocusable","icon","showTooltip","tooltipPosition"],"sources":["@wordpress/dataviews/src/pagination.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\t__experimentalHStack as HStack,\n\tSelectControl,\n} from '@wordpress/components';\nimport { createInterpolateElement, memo } from '@wordpress/element';\nimport { sprintf, __, _x } from '@wordpress/i18n';\nimport { chevronRight, chevronLeft } from '@wordpress/icons';\n\nconst Pagination = memo( function Pagination( {\n\tview,\n\tonChangeView,\n\tpaginationInfo: { totalItems = 0, totalPages },\n} ) {\n\tif ( ! totalItems || ! totalPages ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t!! totalItems &&\n\t\ttotalPages !== 1 && (\n\t\t\t<HStack\n\t\t\t\texpanded={ false }\n\t\t\t\tspacing={ 6 }\n\t\t\t\tjustify=\"end\"\n\t\t\t\tclassName=\"dataviews-pagination\"\n\t\t\t>\n\t\t\t\t<HStack\n\t\t\t\t\tjustify=\"flex-start\"\n\t\t\t\t\texpanded={ false }\n\t\t\t\t\tspacing={ 2 }\n\t\t\t\t\tclassName=\"dataviews-pagination__page-selection\"\n\t\t\t\t>\n\t\t\t\t\t{ createInterpolateElement(\n\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t// translators: %s: Total number of pages.\n\t\t\t\t\t\t\t_x( 'Page <CurrentPageControl /> of %s', 'paging' ),\n\t\t\t\t\t\t\ttotalPages\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCurrentPageControl: (\n\t\t\t\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t\t\t\taria-label={ __( 'Current page' ) }\n\t\t\t\t\t\t\t\t\tvalue={ view.page }\n\t\t\t\t\t\t\t\t\toptions={ Array.from(\n\t\t\t\t\t\t\t\t\t\tArray( totalPages )\n\t\t\t\t\t\t\t\t\t).map( ( _, i ) => {\n\t\t\t\t\t\t\t\t\t\tconst page = i + 1;\n\t\t\t\t\t\t\t\t\t\treturn { value: page, label: page };\n\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\t\t\tonChangeView( {\n\t\t\t\t\t\t\t\t\t\t\t...view,\n\t\t\t\t\t\t\t\t\t\t\tpage: +newValue,\n\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tsize={ 'compact' }\n\t\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t}\n\t\t\t\t\t) }\n\t\t\t\t</HStack>\n\t\t\t\t<HStack expanded={ false } spacing={ 1 }>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\tonChangeView( { ...view, page: view.page - 1 } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdisabled={ view.page === 1 }\n\t\t\t\t\t\t__experimentalIsFocusable\n\t\t\t\t\t\tlabel={ __( 'Previous page' ) }\n\t\t\t\t\t\ticon={ chevronLeft }\n\t\t\t\t\t\tshowTooltip\n\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t\ttooltipPosition=\"top\"\n\t\t\t\t\t/>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\tonChangeView( { ...view, page: view.page + 1 } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdisabled={ view.page >= totalPages }\n\t\t\t\t\t\t__experimentalIsFocusable\n\t\t\t\t\t\tlabel={ __( 'Next page' ) }\n\t\t\t\t\t\ticon={ chevronRight }\n\t\t\t\t\t\tshowTooltip\n\t\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\t\ttooltipPosition=\"top\"\n\t\t\t\t\t/>\n\t\t\t\t</HStack>\n\t\t\t</HStack>\n\t\t)\n\t);\n} );\n\nexport default Pagination;\n"],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ import removeAccents from 'remove-accents';
|
|
|
12
12
|
import { __, sprintf } from '@wordpress/i18n';
|
|
13
13
|
import { useState, useMemo, useDeferredValue } from '@wordpress/element';
|
|
14
14
|
import { VisuallyHidden, Icon, privateApis as componentsPrivateApis } from '@wordpress/components';
|
|
15
|
-
import { search } from '@wordpress/icons';
|
|
15
|
+
import { search, check } from '@wordpress/icons';
|
|
16
16
|
import { SVG, Circle } from '@wordpress/primitives';
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -35,6 +35,27 @@ const radioCheck = createElement(SVG, {
|
|
|
35
35
|
function normalizeSearchInput(input = '') {
|
|
36
36
|
return removeAccents(input.trim().toLowerCase());
|
|
37
37
|
}
|
|
38
|
+
const getCurrentValue = (filterDefinition, currentFilter) => {
|
|
39
|
+
if (filterDefinition.singleSelection) {
|
|
40
|
+
return currentFilter?.value;
|
|
41
|
+
}
|
|
42
|
+
if (Array.isArray(currentFilter?.value)) {
|
|
43
|
+
return currentFilter.value;
|
|
44
|
+
}
|
|
45
|
+
if (!Array.isArray(currentFilter?.value) && !!currentFilter?.value) {
|
|
46
|
+
return [currentFilter.value];
|
|
47
|
+
}
|
|
48
|
+
return [];
|
|
49
|
+
};
|
|
50
|
+
const getNewValue = (filterDefinition, currentFilter, value) => {
|
|
51
|
+
if (filterDefinition.singleSelection) {
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
if (Array.isArray(currentFilter?.value)) {
|
|
55
|
+
return currentFilter.value.includes(value) ? currentFilter.value.filter(v => v !== value) : [...currentFilter.value, value];
|
|
56
|
+
}
|
|
57
|
+
return [value];
|
|
58
|
+
};
|
|
38
59
|
function ListBox({
|
|
39
60
|
view,
|
|
40
61
|
filter,
|
|
@@ -48,8 +69,8 @@ function ListBox({
|
|
|
48
69
|
// so the first item is not selected, since the focus is on the operators control.
|
|
49
70
|
defaultActiveId: filter.operators?.length === 1 ? undefined : null
|
|
50
71
|
});
|
|
51
|
-
const
|
|
52
|
-
const
|
|
72
|
+
const currentFilter = view.filters.find(f => f.field === filter.field);
|
|
73
|
+
const currentValue = getCurrentValue(filter, currentFilter);
|
|
53
74
|
return createElement(Composite, {
|
|
54
75
|
store: compositeStore,
|
|
55
76
|
role: "listbox",
|
|
@@ -74,20 +95,19 @@ function ListBox({
|
|
|
74
95
|
className: "dataviews-search-widget-listitem"
|
|
75
96
|
}),
|
|
76
97
|
onClick: () => {
|
|
77
|
-
const currentFilter = view.filters.find(_filter => _filter.field === filter.field);
|
|
78
98
|
const newFilters = currentFilter ? [...view.filters.map(_filter => {
|
|
79
99
|
if (_filter.field === filter.field) {
|
|
80
100
|
return {
|
|
81
101
|
..._filter,
|
|
82
102
|
operator: currentFilter.operator || filter.operators[0],
|
|
83
|
-
value: element.value
|
|
103
|
+
value: getNewValue(filter, currentFilter, element.value)
|
|
84
104
|
};
|
|
85
105
|
}
|
|
86
106
|
return _filter;
|
|
87
107
|
})] : [...view.filters, {
|
|
88
108
|
field: filter.field,
|
|
89
109
|
operator: filter.operators[0],
|
|
90
|
-
value: element.value
|
|
110
|
+
value: getNewValue(filter, currentFilter, element.value)
|
|
91
111
|
}];
|
|
92
112
|
onChangeView({
|
|
93
113
|
...view,
|
|
@@ -98,8 +118,10 @@ function ListBox({
|
|
|
98
118
|
})
|
|
99
119
|
}, createElement("span", {
|
|
100
120
|
className: "dataviews-search-widget-listitem-check"
|
|
101
|
-
},
|
|
121
|
+
}, filter.singleSelection && currentValue === element.value && createElement(Icon, {
|
|
102
122
|
icon: radioCheck
|
|
123
|
+
}), !filter.singleSelection && currentValue.includes(element.value) && createElement(Icon, {
|
|
124
|
+
icon: check
|
|
103
125
|
})), createElement("span", null, element.label, !!element.description && createElement("span", {
|
|
104
126
|
className: "dataviews-search-widget-listitem-description"
|
|
105
127
|
}, element.description)))));
|
|
@@ -111,16 +133,16 @@ function ComboboxList({
|
|
|
111
133
|
}) {
|
|
112
134
|
const [searchValue, setSearchValue] = useState('');
|
|
113
135
|
const deferredSearchValue = useDeferredValue(searchValue);
|
|
114
|
-
const
|
|
115
|
-
const
|
|
136
|
+
const currentFilter = view.filters.find(_filter => _filter.field === filter.field);
|
|
137
|
+
const currentValue = getCurrentValue(filter, currentFilter);
|
|
116
138
|
const matches = useMemo(() => {
|
|
117
139
|
const normalizedSearch = normalizeSearchInput(deferredSearchValue);
|
|
118
140
|
return filter.elements.filter(item => normalizeSearchInput(item.label).includes(normalizedSearch));
|
|
119
141
|
}, [filter.elements, deferredSearchValue]);
|
|
120
142
|
return createElement(Ariakit.ComboboxProvider, {
|
|
121
143
|
value: searchValue,
|
|
144
|
+
selectedValue: currentValue,
|
|
122
145
|
setSelectedValue: value => {
|
|
123
|
-
const currentFilter = view.filters.find(_filter => _filter.field === filter.field);
|
|
124
146
|
const newFilters = currentFilter ? [...view.filters.map(_filter => {
|
|
125
147
|
if (_filter.field === filter.field) {
|
|
126
148
|
return {
|
|
@@ -167,8 +189,10 @@ function ComboboxList({
|
|
|
167
189
|
focusOnHover: true
|
|
168
190
|
}, createElement("span", {
|
|
169
191
|
className: "dataviews-search-widget-listitem-check"
|
|
170
|
-
},
|
|
192
|
+
}, filter.singleSelection && currentValue === element.value && createElement(Icon, {
|
|
171
193
|
icon: radioCheck
|
|
194
|
+
}), !filter.singleSelection && currentValue.includes(element.value) && createElement(Icon, {
|
|
195
|
+
icon: check
|
|
172
196
|
})), createElement("span", null, createElement(Ariakit.ComboboxItemValue, {
|
|
173
197
|
className: "dataviews-search-widget-filter-combobox-item-value",
|
|
174
198
|
value: element.label
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Ariakit","removeAccents","__","sprintf","useState","useMemo","useDeferredValue","VisuallyHidden","Icon","privateApis","componentsPrivateApis","search","SVG","Circle","unlock","CompositeV2","Composite","CompositeItemV2","CompositeItem","useCompositeStoreV2","useCompositeStore","radioCheck","createElement","xmlns","viewBox","cx","cy","r","normalizeSearchInput","input","trim","toLowerCase","ListBox","view","filter","onChangeView","compositeStore","virtualFocus","focusLoop","defaultActiveId","operators","length","undefined","selectedFilter","filters","find","_filter","field","selectedValues","value","store","role","className","name","onFocusVisible","getState","activeId","move","first","render","CompositeTypeahead","elements","map","element","CompositeHover","key","label","onClick","currentFilter","newFilters","operator","page","icon","description","ComboboxList","searchValue","setSearchValue","deferredSearchValue","matches","normalizedSearch","item","includes","ComboboxProvider","setSelectedValue","setValue","ComboboxLabel","Combobox","autoSelect","placeholder","alwaysVisible","ComboboxItem","hideOnClick","setValueOnClick","focusOnHover","ComboboxItemValue","SearchWidget","props","Widget"],"sources":["@wordpress/dataviews/src/search-widget.js"],"sourcesContent":["/**\n * External dependencies\n */\n// eslint-disable-next-line no-restricted-imports\nimport * as Ariakit from '@ariakit/react';\nimport removeAccents from 'remove-accents';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useState, useMemo, useDeferredValue } from '@wordpress/element';\nimport {\n\tVisuallyHidden,\n\tIcon,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { search } from '@wordpress/icons';\nimport { SVG, Circle } from '@wordpress/primitives';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from './lock-unlock';\n\nconst {\n\tCompositeV2: Composite,\n\tCompositeItemV2: CompositeItem,\n\tuseCompositeStoreV2: useCompositeStore,\n} = unlock( componentsPrivateApis );\n\nconst radioCheck = (\n\t<SVG xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t<Circle cx={ 12 } cy={ 12 } r={ 3 }></Circle>\n\t</SVG>\n);\n\nfunction normalizeSearchInput( input = '' ) {\n\treturn removeAccents( input.trim().toLowerCase() );\n}\n\nfunction ListBox( { view, filter, onChangeView } ) {\n\tconst compositeStore = useCompositeStore( {\n\t\tvirtualFocus: true,\n\t\tfocusLoop: true,\n\t\t// When we have no or just one operators, we can set the first item as active.\n\t\t// We do that by passing `undefined` to `defaultActiveId`. Otherwise, we set it to `null`,\n\t\t// so the first item is not selected, since the focus is on the operators control.\n\t\tdefaultActiveId: filter.operators?.length === 1 ? undefined : null,\n\t} );\n\tconst selectedFilter = view.filters.find(\n\t\t( _filter ) => _filter.field === filter.field\n\t);\n\tconst selectedValues = selectedFilter?.value;\n\treturn (\n\t\t<Composite\n\t\t\tstore={ compositeStore }\n\t\t\trole=\"listbox\"\n\t\t\tclassName=\"dataviews-search-widget-listbox\"\n\t\t\taria-label={ sprintf(\n\t\t\t\t/* translators: List of items for a filter. 1: Filter name. e.g.: \"List of: Author\". */\n\t\t\t\t__( 'List of: %1$s' ),\n\t\t\t\tfilter.name\n\t\t\t) }\n\t\t\tonFocusVisible={ () => {\n\t\t\t\tif ( ! compositeStore.getState().activeId ) {\n\t\t\t\t\tcompositeStore.move( compositeStore.first() );\n\t\t\t\t}\n\t\t\t} }\n\t\t\trender={ <Ariakit.CompositeTypeahead store={ compositeStore } /> }\n\t\t>\n\t\t\t{ filter.elements.map( ( element ) => (\n\t\t\t\t<Ariakit.CompositeHover\n\t\t\t\t\tstore={ compositeStore }\n\t\t\t\t\tkey={ element.value }\n\t\t\t\t\trender={\n\t\t\t\t\t\t<CompositeItem\n\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\taria-label={ element.label }\n\t\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\t\tclassName=\"dataviews-search-widget-listitem\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tconst currentFilter = view.filters.find(\n\t\t\t\t\t\t\t\t\t( _filter ) =>\n\t\t\t\t\t\t\t\t\t\t_filter.field === filter.field\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst newFilters = currentFilter\n\t\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\t\t...view.filters.map(\n\t\t\t\t\t\t\t\t\t\t\t\t( _filter ) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_filter.field ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilter.field\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t..._filter,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toperator:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentFilter.operator ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilter\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.operators[ 0 ],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: element.value,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn _filter;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t ]\n\t\t\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\t\t\t...view.filters,\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tfield: filter.field,\n\t\t\t\t\t\t\t\t\t\t\t\toperator: filter.operators[ 0 ],\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: element.value,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t ];\n\t\t\t\t\t\t\t\tonChangeView( {\n\t\t\t\t\t\t\t\t\t...view,\n\t\t\t\t\t\t\t\t\tpage: 1,\n\t\t\t\t\t\t\t\t\tfilters: newFilters,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"dataviews-search-widget-listitem-check\">\n\t\t\t\t\t\t{ selectedValues === element.value && (\n\t\t\t\t\t\t\t<Icon icon={ radioCheck } />\n\t\t\t\t\t\t) }\n\t\t\t\t\t</span>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{ element.label }\n\t\t\t\t\t\t{ !! element.description && (\n\t\t\t\t\t\t\t<span className=\"dataviews-search-widget-listitem-description\">\n\t\t\t\t\t\t\t\t{ element.description }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</span>\n\t\t\t\t</Ariakit.CompositeHover>\n\t\t\t) ) }\n\t\t</Composite>\n\t);\n}\n\nfunction ComboboxList( { view, filter, onChangeView } ) {\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\tconst deferredSearchValue = useDeferredValue( searchValue );\n\tconst selectedFilter = view.filters.find(\n\t\t( _filter ) => _filter.field === filter.field\n\t);\n\tconst selectedValues = selectedFilter?.value;\n\tconst matches = useMemo( () => {\n\t\tconst normalizedSearch = normalizeSearchInput( deferredSearchValue );\n\t\treturn filter.elements.filter( ( item ) =>\n\t\t\tnormalizeSearchInput( item.label ).includes( normalizedSearch )\n\t\t);\n\t}, [ filter.elements, deferredSearchValue ] );\n\treturn (\n\t\t<Ariakit.ComboboxProvider\n\t\t\tvalue={ searchValue }\n\t\t\tsetSelectedValue={ ( value ) => {\n\t\t\t\tconst currentFilter = view.filters.find(\n\t\t\t\t\t( _filter ) => _filter.field === filter.field\n\t\t\t\t);\n\t\t\t\tconst newFilters = currentFilter\n\t\t\t\t\t? [\n\t\t\t\t\t\t\t...view.filters.map( ( _filter ) => {\n\t\t\t\t\t\t\t\tif ( _filter.field === filter.field ) {\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t..._filter,\n\t\t\t\t\t\t\t\t\t\toperator:\n\t\t\t\t\t\t\t\t\t\t\tcurrentFilter.operator ||\n\t\t\t\t\t\t\t\t\t\t\tfilter.operators[ 0 ],\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn _filter;\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t ]\n\t\t\t\t\t: [\n\t\t\t\t\t\t\t...view.filters,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfield: filter.field,\n\t\t\t\t\t\t\t\toperator: filter.operators[ 0 ],\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t ];\n\t\t\t\tonChangeView( {\n\t\t\t\t\t...view,\n\t\t\t\t\tpage: 1,\n\t\t\t\t\tfilters: newFilters,\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tsetValue={ setSearchValue }\n\t\t>\n\t\t\t<div className=\"dataviews-search-widget-filter-combobox__wrapper\">\n\t\t\t\t<Ariakit.ComboboxLabel render={ <VisuallyHidden /> }>\n\t\t\t\t\t{ __( 'Search items' ) }\n\t\t\t\t</Ariakit.ComboboxLabel>\n\t\t\t\t<Ariakit.Combobox\n\t\t\t\t\tautoSelect=\"always\"\n\t\t\t\t\tplaceholder={ __( 'Search' ) }\n\t\t\t\t\tclassName=\"dataviews-search-widget-filter-combobox__input\"\n\t\t\t\t/>\n\t\t\t\t<div className=\"dataviews-search-widget-filter-combobox__icon\">\n\t\t\t\t\t<Icon icon={ search } />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<Ariakit.ComboboxList\n\t\t\t\tclassName=\"dataviews-search-widget-filter-combobox-list\"\n\t\t\t\talwaysVisible\n\t\t\t>\n\t\t\t\t{ matches.map( ( element ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Ariakit.ComboboxItem\n\t\t\t\t\t\t\tkey={ element.value }\n\t\t\t\t\t\t\tvalue={ element.value }\n\t\t\t\t\t\t\tclassName=\"dataviews-search-widget-listitem\"\n\t\t\t\t\t\t\thideOnClick={ false }\n\t\t\t\t\t\t\tsetValueOnClick={ false }\n\t\t\t\t\t\t\tfocusOnHover\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"dataviews-search-widget-listitem-check\">\n\t\t\t\t\t\t\t\t{ selectedValues === element.value && (\n\t\t\t\t\t\t\t\t\t<Icon icon={ radioCheck } />\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t<Ariakit.ComboboxItemValue\n\t\t\t\t\t\t\t\t\tclassName=\"dataviews-search-widget-filter-combobox-item-value\"\n\t\t\t\t\t\t\t\t\tvalue={ element.label }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{ !! element.description && (\n\t\t\t\t\t\t\t\t\t<span className=\"dataviews-search-widget-listitem-description\">\n\t\t\t\t\t\t\t\t\t\t{ element.description }\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</Ariakit.ComboboxItem>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t\t{ ! matches.length && <p>{ __( 'No results found' ) }</p> }\n\t\t\t</Ariakit.ComboboxList>\n\t\t</Ariakit.ComboboxProvider>\n\t);\n}\n\nexport default function SearchWidget( props ) {\n\tconst Widget = props.filter.elements.length > 10 ? ComboboxList : ListBox;\n\treturn <Widget { ...props } />;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Ariakit","removeAccents","__","sprintf","useState","useMemo","useDeferredValue","VisuallyHidden","Icon","privateApis","componentsPrivateApis","search","check","SVG","Circle","unlock","CompositeV2","Composite","CompositeItemV2","CompositeItem","useCompositeStoreV2","useCompositeStore","radioCheck","createElement","xmlns","viewBox","cx","cy","r","normalizeSearchInput","input","trim","toLowerCase","getCurrentValue","filterDefinition","currentFilter","singleSelection","value","Array","isArray","getNewValue","includes","filter","v","ListBox","view","onChangeView","compositeStore","virtualFocus","focusLoop","defaultActiveId","operators","length","undefined","filters","find","f","field","currentValue","store","role","className","name","onFocusVisible","getState","activeId","move","first","render","CompositeTypeahead","elements","map","element","CompositeHover","key","label","onClick","newFilters","_filter","operator","page","icon","description","ComboboxList","searchValue","setSearchValue","deferredSearchValue","matches","normalizedSearch","item","ComboboxProvider","selectedValue","setSelectedValue","setValue","ComboboxLabel","Combobox","autoSelect","placeholder","alwaysVisible","ComboboxItem","hideOnClick","setValueOnClick","focusOnHover","ComboboxItemValue","SearchWidget","props","Widget"],"sources":["@wordpress/dataviews/src/search-widget.js"],"sourcesContent":["/**\n * External dependencies\n */\n// eslint-disable-next-line no-restricted-imports\nimport * as Ariakit from '@ariakit/react';\nimport removeAccents from 'remove-accents';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useState, useMemo, useDeferredValue } from '@wordpress/element';\nimport {\n\tVisuallyHidden,\n\tIcon,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { search, check } from '@wordpress/icons';\nimport { SVG, Circle } from '@wordpress/primitives';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from './lock-unlock';\n\nconst {\n\tCompositeV2: Composite,\n\tCompositeItemV2: CompositeItem,\n\tuseCompositeStoreV2: useCompositeStore,\n} = unlock( componentsPrivateApis );\n\nconst radioCheck = (\n\t<SVG xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t<Circle cx={ 12 } cy={ 12 } r={ 3 }></Circle>\n\t</SVG>\n);\n\nfunction normalizeSearchInput( input = '' ) {\n\treturn removeAccents( input.trim().toLowerCase() );\n}\n\nconst getCurrentValue = ( filterDefinition, currentFilter ) => {\n\tif ( filterDefinition.singleSelection ) {\n\t\treturn currentFilter?.value;\n\t}\n\n\tif ( Array.isArray( currentFilter?.value ) ) {\n\t\treturn currentFilter.value;\n\t}\n\n\tif ( ! Array.isArray( currentFilter?.value ) && !! currentFilter?.value ) {\n\t\treturn [ currentFilter.value ];\n\t}\n\n\treturn [];\n};\n\nconst getNewValue = ( filterDefinition, currentFilter, value ) => {\n\tif ( filterDefinition.singleSelection ) {\n\t\treturn value;\n\t}\n\n\tif ( Array.isArray( currentFilter?.value ) ) {\n\t\treturn currentFilter.value.includes( value )\n\t\t\t? currentFilter.value.filter( ( v ) => v !== value )\n\t\t\t: [ ...currentFilter.value, value ];\n\t}\n\n\treturn [ value ];\n};\n\nfunction ListBox( { view, filter, onChangeView } ) {\n\tconst compositeStore = useCompositeStore( {\n\t\tvirtualFocus: true,\n\t\tfocusLoop: true,\n\t\t// When we have no or just one operators, we can set the first item as active.\n\t\t// We do that by passing `undefined` to `defaultActiveId`. Otherwise, we set it to `null`,\n\t\t// so the first item is not selected, since the focus is on the operators control.\n\t\tdefaultActiveId: filter.operators?.length === 1 ? undefined : null,\n\t} );\n\tconst currentFilter = view.filters.find(\n\t\t( f ) => f.field === filter.field\n\t);\n\tconst currentValue = getCurrentValue( filter, currentFilter );\n\treturn (\n\t\t<Composite\n\t\t\tstore={ compositeStore }\n\t\t\trole=\"listbox\"\n\t\t\tclassName=\"dataviews-search-widget-listbox\"\n\t\t\taria-label={ sprintf(\n\t\t\t\t/* translators: List of items for a filter. 1: Filter name. e.g.: \"List of: Author\". */\n\t\t\t\t__( 'List of: %1$s' ),\n\t\t\t\tfilter.name\n\t\t\t) }\n\t\t\tonFocusVisible={ () => {\n\t\t\t\tif ( ! compositeStore.getState().activeId ) {\n\t\t\t\t\tcompositeStore.move( compositeStore.first() );\n\t\t\t\t}\n\t\t\t} }\n\t\t\trender={ <Ariakit.CompositeTypeahead store={ compositeStore } /> }\n\t\t>\n\t\t\t{ filter.elements.map( ( element ) => (\n\t\t\t\t<Ariakit.CompositeHover\n\t\t\t\t\tstore={ compositeStore }\n\t\t\t\t\tkey={ element.value }\n\t\t\t\t\trender={\n\t\t\t\t\t\t<CompositeItem\n\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\taria-label={ element.label }\n\t\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\t\tclassName=\"dataviews-search-widget-listitem\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tconst newFilters = currentFilter\n\t\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\t\t...view.filters.map(\n\t\t\t\t\t\t\t\t\t\t\t\t( _filter ) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_filter.field ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilter.field\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t..._filter,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toperator:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentFilter.operator ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilter\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.operators[ 0 ],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: getNewValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilter,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentFilter,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\telement.value\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn _filter;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t ]\n\t\t\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\t\t\t...view.filters,\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tfield: filter.field,\n\t\t\t\t\t\t\t\t\t\t\t\toperator: filter.operators[ 0 ],\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: getNewValue(\n\t\t\t\t\t\t\t\t\t\t\t\t\tfilter,\n\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentFilter,\n\t\t\t\t\t\t\t\t\t\t\t\t\telement.value\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t ];\n\t\t\t\t\t\t\t\tonChangeView( {\n\t\t\t\t\t\t\t\t\t...view,\n\t\t\t\t\t\t\t\t\tpage: 1,\n\t\t\t\t\t\t\t\t\tfilters: newFilters,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"dataviews-search-widget-listitem-check\">\n\t\t\t\t\t\t{ filter.singleSelection &&\n\t\t\t\t\t\t\tcurrentValue === element.value && (\n\t\t\t\t\t\t\t\t<Icon icon={ radioCheck } />\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ ! filter.singleSelection &&\n\t\t\t\t\t\t\tcurrentValue.includes( element.value ) && (\n\t\t\t\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t</span>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{ element.label }\n\t\t\t\t\t\t{ !! element.description && (\n\t\t\t\t\t\t\t<span className=\"dataviews-search-widget-listitem-description\">\n\t\t\t\t\t\t\t\t{ element.description }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</span>\n\t\t\t\t</Ariakit.CompositeHover>\n\t\t\t) ) }\n\t\t</Composite>\n\t);\n}\n\nfunction ComboboxList( { view, filter, onChangeView } ) {\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\tconst deferredSearchValue = useDeferredValue( searchValue );\n\tconst currentFilter = view.filters.find(\n\t\t( _filter ) => _filter.field === filter.field\n\t);\n\tconst currentValue = getCurrentValue( filter, currentFilter );\n\tconst matches = useMemo( () => {\n\t\tconst normalizedSearch = normalizeSearchInput( deferredSearchValue );\n\t\treturn filter.elements.filter( ( item ) =>\n\t\t\tnormalizeSearchInput( item.label ).includes( normalizedSearch )\n\t\t);\n\t}, [ filter.elements, deferredSearchValue ] );\n\treturn (\n\t\t<Ariakit.ComboboxProvider\n\t\t\tvalue={ searchValue }\n\t\t\tselectedValue={ currentValue }\n\t\t\tsetSelectedValue={ ( value ) => {\n\t\t\t\tconst newFilters = currentFilter\n\t\t\t\t\t? [\n\t\t\t\t\t\t\t...view.filters.map( ( _filter ) => {\n\t\t\t\t\t\t\t\tif ( _filter.field === filter.field ) {\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t..._filter,\n\t\t\t\t\t\t\t\t\t\toperator:\n\t\t\t\t\t\t\t\t\t\t\tcurrentFilter.operator ||\n\t\t\t\t\t\t\t\t\t\t\tfilter.operators[ 0 ],\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn _filter;\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t ]\n\t\t\t\t\t: [\n\t\t\t\t\t\t\t...view.filters,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfield: filter.field,\n\t\t\t\t\t\t\t\toperator: filter.operators[ 0 ],\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t ];\n\t\t\t\tonChangeView( {\n\t\t\t\t\t...view,\n\t\t\t\t\tpage: 1,\n\t\t\t\t\tfilters: newFilters,\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tsetValue={ setSearchValue }\n\t\t>\n\t\t\t<div className=\"dataviews-search-widget-filter-combobox__wrapper\">\n\t\t\t\t<Ariakit.ComboboxLabel render={ <VisuallyHidden /> }>\n\t\t\t\t\t{ __( 'Search items' ) }\n\t\t\t\t</Ariakit.ComboboxLabel>\n\t\t\t\t<Ariakit.Combobox\n\t\t\t\t\tautoSelect=\"always\"\n\t\t\t\t\tplaceholder={ __( 'Search' ) }\n\t\t\t\t\tclassName=\"dataviews-search-widget-filter-combobox__input\"\n\t\t\t\t/>\n\t\t\t\t<div className=\"dataviews-search-widget-filter-combobox__icon\">\n\t\t\t\t\t<Icon icon={ search } />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<Ariakit.ComboboxList\n\t\t\t\tclassName=\"dataviews-search-widget-filter-combobox-list\"\n\t\t\t\talwaysVisible\n\t\t\t>\n\t\t\t\t{ matches.map( ( element ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Ariakit.ComboboxItem\n\t\t\t\t\t\t\tkey={ element.value }\n\t\t\t\t\t\t\tvalue={ element.value }\n\t\t\t\t\t\t\tclassName=\"dataviews-search-widget-listitem\"\n\t\t\t\t\t\t\thideOnClick={ false }\n\t\t\t\t\t\t\tsetValueOnClick={ false }\n\t\t\t\t\t\t\tfocusOnHover\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"dataviews-search-widget-listitem-check\">\n\t\t\t\t\t\t\t\t{ filter.singleSelection &&\n\t\t\t\t\t\t\t\t\tcurrentValue === element.value && (\n\t\t\t\t\t\t\t\t\t\t<Icon icon={ radioCheck } />\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t{ ! filter.singleSelection &&\n\t\t\t\t\t\t\t\t\tcurrentValue.includes( element.value ) && (\n\t\t\t\t\t\t\t\t\t\t<Icon icon={ check } />\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t<Ariakit.ComboboxItemValue\n\t\t\t\t\t\t\t\t\tclassName=\"dataviews-search-widget-filter-combobox-item-value\"\n\t\t\t\t\t\t\t\t\tvalue={ element.label }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{ !! element.description && (\n\t\t\t\t\t\t\t\t\t<span className=\"dataviews-search-widget-listitem-description\">\n\t\t\t\t\t\t\t\t\t\t{ element.description }\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</Ariakit.ComboboxItem>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t\t{ ! matches.length && <p>{ __( 'No results found' ) }</p> }\n\t\t\t</Ariakit.ComboboxList>\n\t\t</Ariakit.ComboboxProvider>\n\t);\n}\n\nexport default function SearchWidget( props ) {\n\tconst Widget = props.filter.elements.length > 10 ? ComboboxList : ListBox;\n\treturn <Widget { ...props } />;\n}\n"],"mappings":"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"}
|
package/build-module/utils.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Internal dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { ALL_OPERATORS, OPERATOR_IS, OPERATOR_IS_NOT, OPERATOR_IS_ANY, OPERATOR_IS_NONE } from './constants';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Helper util to sort data by text fields, when sorting is done client side.
|
|
@@ -67,9 +67,31 @@ export function getPaginationResults({
|
|
|
67
67
|
}
|
|
68
68
|
export const sanitizeOperators = field => {
|
|
69
69
|
let operators = field.filterBy?.operators;
|
|
70
|
+
|
|
71
|
+
// Assign default values.
|
|
70
72
|
if (!operators || !Array.isArray(operators)) {
|
|
71
|
-
operators =
|
|
73
|
+
operators = [OPERATOR_IS_ANY, OPERATOR_IS_NONE];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Transform legacy in, notIn operators to is, isNot.
|
|
77
|
+
// To be removed in the future.
|
|
78
|
+
if (operators.includes('in')) {
|
|
79
|
+
operators = operators.filter(operator => operator !== 'is');
|
|
80
|
+
operators.push('is');
|
|
81
|
+
}
|
|
82
|
+
if (operators.includes('notIn')) {
|
|
83
|
+
operators = operators.filter(operator => operator !== 'notIn');
|
|
84
|
+
operators.push('isNot');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Make sure only valid operators are used.
|
|
88
|
+
operators = operators.filter(operator => ALL_OPERATORS.includes(operator));
|
|
89
|
+
|
|
90
|
+
// Do not allow mixing single & multiselection operators.
|
|
91
|
+
// Remove multiselection operators if any of the single selection ones is present.
|
|
92
|
+
if (operators.includes(OPERATOR_IS) || operators.includes(OPERATOR_IS_NOT)) {
|
|
93
|
+
operators = operators.filter(operator => [OPERATOR_IS, OPERATOR_IS_NOT].includes(operator));
|
|
72
94
|
}
|
|
73
|
-
return operators
|
|
95
|
+
return operators;
|
|
74
96
|
};
|
|
75
97
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["ALL_OPERATORS","OPERATOR_IS","OPERATOR_IS_NOT","OPERATOR_IS_ANY","OPERATOR_IS_NONE","sortByTextFields","data","view","fields","textFields","sortedData","fieldId","sort","field","includes","fieldToSort","find","id","a","b","_fieldToSort$getValue","_fieldToSort$getValue2","valueA","getValue","item","valueB","direction","localeCompare","getPaginationResults","start","page","perPage","totalItems","length","slice","paginationInfo","totalPages","Math","ceil","sanitizeOperators","operators","filterBy","Array","isArray","filter","operator","push"],"sources":["@wordpress/dataviews/src/utils.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport {\n\tALL_OPERATORS,\n\tOPERATOR_IS,\n\tOPERATOR_IS_NOT,\n\tOPERATOR_IS_ANY,\n\tOPERATOR_IS_NONE,\n} from './constants';\n\n/**\n * Helper util to sort data by text fields, when sorting is done client side.\n *\n * @param {Object} params Function params.\n * @param {Object[]} params.data Data to sort.\n * @param {Object} params.view Current view object.\n * @param {Object[]} params.fields Array of available fields.\n * @param {string[]} params.textFields Array of the field ids to sort.\n *\n * @return {Object[]} Sorted data.\n */\nexport const sortByTextFields = ( { data, view, fields, textFields } ) => {\n\tconst sortedData = [ ...data ];\n\tconst fieldId = view.sort.field;\n\tif ( textFields.includes( fieldId ) ) {\n\t\tconst fieldToSort = fields.find( ( field ) => {\n\t\t\treturn field.id === fieldId;\n\t\t} );\n\t\tsortedData.sort( ( a, b ) => {\n\t\t\tconst valueA = fieldToSort.getValue( { item: a } ) ?? '';\n\t\t\tconst valueB = fieldToSort.getValue( { item: b } ) ?? '';\n\t\t\treturn view.sort.direction === 'asc'\n\t\t\t\t? valueA.localeCompare( valueB )\n\t\t\t\t: valueB.localeCompare( valueA );\n\t\t} );\n\t}\n\treturn sortedData;\n};\n\n/**\n * Helper util to get the paginated data and the paginateInfo needed,\n * when pagination is done client side.\n *\n * @param {Object} params Function params.\n * @param {Object[]} params.data Available data.\n * @param {Object} params.view Current view object.\n *\n * @return {Object} Paginated data and paginationInfo.\n */\nexport function getPaginationResults( { data, view } ) {\n\tconst start = ( view.page - 1 ) * view.perPage;\n\tconst totalItems = data?.length || 0;\n\tdata = data?.slice( start, start + view.perPage );\n\treturn {\n\t\tdata,\n\t\tpaginationInfo: {\n\t\t\ttotalItems,\n\t\t\ttotalPages: Math.ceil( totalItems / view.perPage ),\n\t\t},\n\t};\n}\n\nexport const sanitizeOperators = ( field ) => {\n\tlet operators = field.filterBy?.operators;\n\n\t// Assign default values.\n\tif ( ! operators || ! Array.isArray( operators ) ) {\n\t\toperators = [ OPERATOR_IS_ANY, OPERATOR_IS_NONE ];\n\t}\n\n\t// Transform legacy in, notIn operators to is, isNot.\n\t// To be removed in the future.\n\tif ( operators.includes( 'in' ) ) {\n\t\toperators = operators.filter( ( operator ) => operator !== 'is' );\n\t\toperators.push( 'is' );\n\t}\n\tif ( operators.includes( 'notIn' ) ) {\n\t\toperators = operators.filter( ( operator ) => operator !== 'notIn' );\n\t\toperators.push( 'isNot' );\n\t}\n\n\t// Make sure only valid operators are used.\n\toperators = operators.filter( ( operator ) =>\n\t\tALL_OPERATORS.includes( operator )\n\t);\n\n\t// Do not allow mixing single & multiselection operators.\n\t// Remove multiselection operators if any of the single selection ones is present.\n\tif (\n\t\toperators.includes( OPERATOR_IS ) ||\n\t\toperators.includes( OPERATOR_IS_NOT )\n\t) {\n\t\toperators = operators.filter( ( operator ) =>\n\t\t\t[ OPERATOR_IS, OPERATOR_IS_NOT ].includes( operator )\n\t\t);\n\t}\n\n\treturn operators;\n};\n"],"mappings":"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"}
|
|
@@ -38,9 +38,12 @@ function GridItem({
|
|
|
38
38
|
'is-selected': hasBulkAction && isSelected
|
|
39
39
|
}),
|
|
40
40
|
onClickCapture: event => {
|
|
41
|
-
if (
|
|
41
|
+
if (event.ctrlKey || event.metaKey) {
|
|
42
42
|
event.stopPropagation();
|
|
43
43
|
event.preventDefault();
|
|
44
|
+
if (!hasBulkAction) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
44
47
|
if (!isSelected) {
|
|
45
48
|
onSelectionChange(data.filter(_item => {
|
|
46
49
|
const itemId = getItemId?.(_item);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["classnames","__experimentalGrid","Grid","__experimentalHStack","HStack","__experimentalVStack","VStack","Tooltip","Spinner","__","useAsyncList","ItemActions","SingleSelectionCheckbox","useHasAPossibleBulkAction","GridItem","selection","data","onSelectionChange","getItemId","item","actions","mediaField","primaryField","visibleFields","hasBulkAction","id","isSelected","includes","createElement","spacing","key","className","onClickCapture","event","ctrlKey","metaKey","stopPropagation","preventDefault","filter","_item","itemId","render","justify","disabled","isCompact","map","field","renderedValue","text","header","placement","ViewGrid","fields","view","isLoading","deferredRendering","find","layout","hiddenFields","shownData","step","usedData","hasData","length","Fragment","gap","columns","alignment"],"sources":["@wordpress/dataviews/src/view-grid.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalGrid as Grid,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tTooltip,\n\tSpinner,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useAsyncList } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport ItemActions from './item-actions';\nimport SingleSelectionCheckbox from './single-selection-checkbox';\n\nimport { useHasAPossibleBulkAction } from './bulk-actions';\n\nfunction GridItem( {\n\tselection,\n\tdata,\n\tonSelectionChange,\n\tgetItemId,\n\titem,\n\tactions,\n\tmediaField,\n\tprimaryField,\n\tvisibleFields,\n} ) {\n\tconst hasBulkAction = useHasAPossibleBulkAction( actions, item );\n\tconst id = getItemId( item );\n\tconst isSelected = selection.includes( id );\n\treturn (\n\t\t<VStack\n\t\t\tspacing={ 0 }\n\t\t\tkey={ id }\n\t\t\tclassName={ classnames( 'dataviews-view-grid__card', {\n\t\t\t\t'is-selected': hasBulkAction && isSelected,\n\t\t\t} ) }\n\t\t\tonClickCapture={ ( event ) => {\n\t\t\t\tif ( hasBulkAction && ( event.ctrlKey || event.metaKey ) ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( ! isSelected ) {\n\t\t\t\t\t\tonSelectionChange(\n\t\t\t\t\t\t\tdata.filter( ( _item ) => {\n\t\t\t\t\t\t\t\tconst itemId = getItemId?.( _item );\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\titemId === id ||\n\t\t\t\t\t\t\t\t\tselection.includes( itemId )\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonSelectionChange(\n\t\t\t\t\t\t\tdata.filter( ( _item ) => {\n\t\t\t\t\t\t\t\tconst itemId = getItemId?.( _item );\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\titemId !== id &&\n\t\t\t\t\t\t\t\t\tselection.includes( itemId )\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} )\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>\n\t\t\t<div className=\"dataviews-view-grid__media\">\n\t\t\t\t{ mediaField?.render( { item } ) }\n\t\t\t</div>\n\t\t\t<HStack\n\t\t\t\tjustify=\"space-between\"\n\t\t\t\tclassName=\"dataviews-view-grid__title-actions\"\n\t\t\t>\n\t\t\t\t<SingleSelectionCheckbox\n\t\t\t\t\tid={ id }\n\t\t\t\t\titem={ item }\n\t\t\t\t\tselection={ selection }\n\t\t\t\t\tonSelectionChange={ onSelectionChange }\n\t\t\t\t\tgetItemId={ getItemId }\n\t\t\t\t\tdata={ data }\n\t\t\t\t\tprimaryField={ primaryField }\n\t\t\t\t\tdisabled={ ! hasBulkAction }\n\t\t\t\t/>\n\t\t\t\t<HStack className=\"dataviews-view-grid__primary-field\">\n\t\t\t\t\t{ primaryField?.render( { item } ) }\n\t\t\t\t</HStack>\n\t\t\t\t<ItemActions item={ item } actions={ actions } isCompact />\n\t\t\t</HStack>\n\t\t\t<VStack className=\"dataviews-view-grid__fields\" spacing={ 3 }>\n\t\t\t\t{ visibleFields.map( ( field ) => {\n\t\t\t\t\tconst renderedValue = field.render( {\n\t\t\t\t\t\titem,\n\t\t\t\t\t} );\n\t\t\t\t\tif ( ! renderedValue ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<VStack\n\t\t\t\t\t\t\tclassName=\"dataviews-view-grid__field\"\n\t\t\t\t\t\t\tkey={ field.id }\n\t\t\t\t\t\t\tspacing={ 1 }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Tooltip text={ field.header } placement=\"left\">\n\t\t\t\t\t\t\t\t<div className=\"dataviews-view-grid__field-value\">\n\t\t\t\t\t\t\t\t\t{ renderedValue }\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t</VStack>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</VStack>\n\t\t</VStack>\n\t);\n}\n\nexport default function ViewGrid( {\n\tdata,\n\tfields,\n\tview,\n\tactions,\n\tisLoading,\n\tgetItemId,\n\tdeferredRendering,\n\tselection,\n\tonSelectionChange,\n} ) {\n\tconst mediaField = fields.find(\n\t\t( field ) => field.id === view.layout.mediaField\n\t);\n\tconst primaryField = fields.find(\n\t\t( field ) => field.id === view.layout.primaryField\n\t);\n\tconst visibleFields = fields.filter(\n\t\t( field ) =>\n\t\t\t! view.hiddenFields.includes( field.id ) &&\n\t\t\t! [ view.layout.mediaField, view.layout.primaryField ].includes(\n\t\t\t\tfield.id\n\t\t\t)\n\t);\n\tconst shownData = useAsyncList( data, { step: 3 } );\n\tconst usedData = deferredRendering ? shownData : data;\n\tconst hasData = !! usedData?.length;\n\treturn (\n\t\t<>\n\t\t\t{ hasData && (\n\t\t\t\t<Grid\n\t\t\t\t\tgap={ 6 }\n\t\t\t\t\tcolumns={ 2 }\n\t\t\t\t\talignment=\"top\"\n\t\t\t\t\tclassName=\"dataviews-view-grid\"\n\t\t\t\t\taria-busy={ isLoading }\n\t\t\t\t>\n\t\t\t\t\t{ usedData.map( ( item ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<GridItem\n\t\t\t\t\t\t\t\tkey={ getItemId( item ) }\n\t\t\t\t\t\t\t\tselection={ selection }\n\t\t\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\t\t\tonSelectionChange={ onSelectionChange }\n\t\t\t\t\t\t\t\tgetItemId={ getItemId }\n\t\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\t\tactions={ actions }\n\t\t\t\t\t\t\t\tmediaField={ mediaField }\n\t\t\t\t\t\t\t\tprimaryField={ primaryField }\n\t\t\t\t\t\t\t\tvisibleFields={ visibleFields }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Grid>\n\t\t\t) }\n\t\t\t{ ! hasData && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={ classnames( {\n\t\t\t\t\t\t'dataviews-loading': isLoading,\n\t\t\t\t\t\t'dataviews-no-results': ! isLoading,\n\t\t\t\t\t} ) }\n\t\t\t\t>\n\t\t\t\t\t<p>{ isLoading ? <Spinner /> : __( 'No results' ) }</p>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["classnames","__experimentalGrid","Grid","__experimentalHStack","HStack","__experimentalVStack","VStack","Tooltip","Spinner","__","useAsyncList","ItemActions","SingleSelectionCheckbox","useHasAPossibleBulkAction","GridItem","selection","data","onSelectionChange","getItemId","item","actions","mediaField","primaryField","visibleFields","hasBulkAction","id","isSelected","includes","createElement","spacing","key","className","onClickCapture","event","ctrlKey","metaKey","stopPropagation","preventDefault","filter","_item","itemId","render","justify","disabled","isCompact","map","field","renderedValue","text","header","placement","ViewGrid","fields","view","isLoading","deferredRendering","find","layout","hiddenFields","shownData","step","usedData","hasData","length","Fragment","gap","columns","alignment"],"sources":["@wordpress/dataviews/src/view-grid.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalGrid as Grid,\n\t__experimentalHStack as HStack,\n\t__experimentalVStack as VStack,\n\tTooltip,\n\tSpinner,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useAsyncList } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport ItemActions from './item-actions';\nimport SingleSelectionCheckbox from './single-selection-checkbox';\n\nimport { useHasAPossibleBulkAction } from './bulk-actions';\n\nfunction GridItem( {\n\tselection,\n\tdata,\n\tonSelectionChange,\n\tgetItemId,\n\titem,\n\tactions,\n\tmediaField,\n\tprimaryField,\n\tvisibleFields,\n} ) {\n\tconst hasBulkAction = useHasAPossibleBulkAction( actions, item );\n\tconst id = getItemId( item );\n\tconst isSelected = selection.includes( id );\n\treturn (\n\t\t<VStack\n\t\t\tspacing={ 0 }\n\t\t\tkey={ id }\n\t\t\tclassName={ classnames( 'dataviews-view-grid__card', {\n\t\t\t\t'is-selected': hasBulkAction && isSelected,\n\t\t\t} ) }\n\t\t\tonClickCapture={ ( event ) => {\n\t\t\t\tif ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( ! hasBulkAction ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( ! isSelected ) {\n\t\t\t\t\t\tonSelectionChange(\n\t\t\t\t\t\t\tdata.filter( ( _item ) => {\n\t\t\t\t\t\t\t\tconst itemId = getItemId?.( _item );\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\titemId === id ||\n\t\t\t\t\t\t\t\t\tselection.includes( itemId )\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonSelectionChange(\n\t\t\t\t\t\t\tdata.filter( ( _item ) => {\n\t\t\t\t\t\t\t\tconst itemId = getItemId?.( _item );\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\titemId !== id &&\n\t\t\t\t\t\t\t\t\tselection.includes( itemId )\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} )\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>\n\t\t\t<div className=\"dataviews-view-grid__media\">\n\t\t\t\t{ mediaField?.render( { item } ) }\n\t\t\t</div>\n\t\t\t<HStack\n\t\t\t\tjustify=\"space-between\"\n\t\t\t\tclassName=\"dataviews-view-grid__title-actions\"\n\t\t\t>\n\t\t\t\t<SingleSelectionCheckbox\n\t\t\t\t\tid={ id }\n\t\t\t\t\titem={ item }\n\t\t\t\t\tselection={ selection }\n\t\t\t\t\tonSelectionChange={ onSelectionChange }\n\t\t\t\t\tgetItemId={ getItemId }\n\t\t\t\t\tdata={ data }\n\t\t\t\t\tprimaryField={ primaryField }\n\t\t\t\t\tdisabled={ ! hasBulkAction }\n\t\t\t\t/>\n\t\t\t\t<HStack className=\"dataviews-view-grid__primary-field\">\n\t\t\t\t\t{ primaryField?.render( { item } ) }\n\t\t\t\t</HStack>\n\t\t\t\t<ItemActions item={ item } actions={ actions } isCompact />\n\t\t\t</HStack>\n\t\t\t<VStack className=\"dataviews-view-grid__fields\" spacing={ 3 }>\n\t\t\t\t{ visibleFields.map( ( field ) => {\n\t\t\t\t\tconst renderedValue = field.render( {\n\t\t\t\t\t\titem,\n\t\t\t\t\t} );\n\t\t\t\t\tif ( ! renderedValue ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<VStack\n\t\t\t\t\t\t\tclassName=\"dataviews-view-grid__field\"\n\t\t\t\t\t\t\tkey={ field.id }\n\t\t\t\t\t\t\tspacing={ 1 }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Tooltip text={ field.header } placement=\"left\">\n\t\t\t\t\t\t\t\t<div className=\"dataviews-view-grid__field-value\">\n\t\t\t\t\t\t\t\t\t{ renderedValue }\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t</VStack>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</VStack>\n\t\t</VStack>\n\t);\n}\n\nexport default function ViewGrid( {\n\tdata,\n\tfields,\n\tview,\n\tactions,\n\tisLoading,\n\tgetItemId,\n\tdeferredRendering,\n\tselection,\n\tonSelectionChange,\n} ) {\n\tconst mediaField = fields.find(\n\t\t( field ) => field.id === view.layout.mediaField\n\t);\n\tconst primaryField = fields.find(\n\t\t( field ) => field.id === view.layout.primaryField\n\t);\n\tconst visibleFields = fields.filter(\n\t\t( field ) =>\n\t\t\t! view.hiddenFields.includes( field.id ) &&\n\t\t\t! [ view.layout.mediaField, view.layout.primaryField ].includes(\n\t\t\t\tfield.id\n\t\t\t)\n\t);\n\tconst shownData = useAsyncList( data, { step: 3 } );\n\tconst usedData = deferredRendering ? shownData : data;\n\tconst hasData = !! usedData?.length;\n\treturn (\n\t\t<>\n\t\t\t{ hasData && (\n\t\t\t\t<Grid\n\t\t\t\t\tgap={ 6 }\n\t\t\t\t\tcolumns={ 2 }\n\t\t\t\t\talignment=\"top\"\n\t\t\t\t\tclassName=\"dataviews-view-grid\"\n\t\t\t\t\taria-busy={ isLoading }\n\t\t\t\t>\n\t\t\t\t\t{ usedData.map( ( item ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<GridItem\n\t\t\t\t\t\t\t\tkey={ getItemId( item ) }\n\t\t\t\t\t\t\t\tselection={ selection }\n\t\t\t\t\t\t\t\tdata={ data }\n\t\t\t\t\t\t\t\tonSelectionChange={ onSelectionChange }\n\t\t\t\t\t\t\t\tgetItemId={ getItemId }\n\t\t\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\t\t\tactions={ actions }\n\t\t\t\t\t\t\t\tmediaField={ mediaField }\n\t\t\t\t\t\t\t\tprimaryField={ primaryField }\n\t\t\t\t\t\t\t\tvisibleFields={ visibleFields }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Grid>\n\t\t\t) }\n\t\t\t{ ! hasData && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={ classnames( {\n\t\t\t\t\t\t'dataviews-loading': isLoading,\n\t\t\t\t\t\t'dataviews-no-results': ! isLoading,\n\t\t\t\t\t} ) }\n\t\t\t\t>\n\t\t\t\t\t<p>{ isLoading ? <Spinner /> : __( 'No results' ) }</p>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { __ } from '@wordpress/i18n';
|
|
|
11
11
|
import { useAsyncList } from '@wordpress/compose';
|
|
12
12
|
import { unseen, funnel } from '@wordpress/icons';
|
|
13
13
|
import { Button, Icon, privateApis as componentsPrivateApis, CheckboxControl, Spinner } from '@wordpress/components';
|
|
14
|
-
import { forwardRef, useEffect, useId, useRef, useState, Children, Fragment
|
|
14
|
+
import { forwardRef, useEffect, useId, useRef, useState, useMemo, Children, Fragment } from '@wordpress/element';
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Internal dependencies
|
|
@@ -30,7 +30,7 @@ const {
|
|
|
30
30
|
DropdownMenuItemLabelV2: DropdownMenuItemLabel,
|
|
31
31
|
DropdownMenuSeparatorV2: DropdownMenuSeparator
|
|
32
32
|
} = unlock(componentsPrivateApis);
|
|
33
|
-
function
|
|
33
|
+
function WithDropDownMenuSeparators({
|
|
34
34
|
children
|
|
35
35
|
}) {
|
|
36
36
|
return Children.toArray(children).filter(Boolean).map((child, i) => createElement(Fragment, {
|
|
@@ -73,7 +73,7 @@ const HeaderMenu = forwardRef(function HeaderMenu({
|
|
|
73
73
|
style: {
|
|
74
74
|
minWidth: '240px'
|
|
75
75
|
}
|
|
76
|
-
}, createElement(
|
|
76
|
+
}, createElement(WithDropDownMenuSeparators, null, isSortable && createElement(DropdownMenuGroup, null, Object.entries(SORTING_DIRECTIONS).map(([direction, info]) => {
|
|
77
77
|
const isChecked = isSorted && view.sort.direction === direction;
|
|
78
78
|
const value = `${field.id}-${direction}`;
|
|
79
79
|
return createElement(DropdownMenuRadioItem, {
|
|
@@ -166,10 +166,41 @@ function TableRow({
|
|
|
166
166
|
data
|
|
167
167
|
}) {
|
|
168
168
|
const hasPossibleBulkAction = useHasAPossibleBulkAction(actions, item);
|
|
169
|
+
const isSelected = selection.includes(id);
|
|
170
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
171
|
+
const handleMouseEnter = () => {
|
|
172
|
+
setIsHovered(true);
|
|
173
|
+
};
|
|
174
|
+
const handleMouseLeave = () => {
|
|
175
|
+
setIsHovered(false);
|
|
176
|
+
};
|
|
169
177
|
return createElement("tr", {
|
|
170
178
|
className: classnames('dataviews-view-table__row', {
|
|
171
|
-
'is-selected': hasPossibleBulkAction && selection.includes(id)
|
|
172
|
-
|
|
179
|
+
'is-selected': hasPossibleBulkAction && selection.includes(id),
|
|
180
|
+
'is-hovered': isHovered
|
|
181
|
+
}),
|
|
182
|
+
onMouseEnter: handleMouseEnter,
|
|
183
|
+
onMouseLeave: handleMouseLeave,
|
|
184
|
+
onClickCapture: event => {
|
|
185
|
+
if (event.ctrlKey || event.metaKey) {
|
|
186
|
+
event.stopPropagation();
|
|
187
|
+
event.preventDefault();
|
|
188
|
+
if (!hasPossibleBulkAction) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
if (!isSelected) {
|
|
192
|
+
onSelectionChange(data.filter(_item => {
|
|
193
|
+
const itemId = getItemId?.(_item);
|
|
194
|
+
return itemId === id || selection.includes(itemId);
|
|
195
|
+
}));
|
|
196
|
+
} else {
|
|
197
|
+
onSelectionChange(data.filter(_item => {
|
|
198
|
+
const itemId = getItemId?.(_item);
|
|
199
|
+
return itemId !== id && selection.includes(itemId);
|
|
200
|
+
}));
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
173
204
|
}, hasBulkActions && createElement("td", {
|
|
174
205
|
className: "dataviews-view-table__checkbox-column",
|
|
175
206
|
style: {
|