From 74b218b73374adf05231a3e6595b3d9ac8c44ef0 Mon Sep 17 00:00:00 2001 From: John Duprey Date: Sat, 22 Apr 2023 19:48:19 -0400 Subject: [PATCH] Graph Filter support --- src/components/tables/CippDatatable.js | 4 +- src/components/tables/CippTable.js | 57 +++++++++++++++++++--- src/views/identity/administration/Users.js | 5 ++ 3 files changed, 57 insertions(+), 9 deletions(-) diff --git a/src/components/tables/CippDatatable.js b/src/components/tables/CippDatatable.js index 1506e93676a8..77b0e5208f7a 100644 --- a/src/components/tables/CippDatatable.js +++ b/src/components/tables/CippDatatable.js @@ -6,11 +6,12 @@ import { CippTablePropTypes } from 'src/components/tables/CippTable' export default function CippDatatable({ path, params, ...rest }) { const [refreshGuid, setRefreshGuid] = React.useState('') + const [graphFilter, setGraphFilter] = React.useState('') const { data = [], isFetching, error, - } = useListDatatableQuery({ path, params: { refreshGuid, ...params } }) + } = useListDatatableQuery({ path, params: { refreshGuid, graphFilter, ...params } }) return ( ) } diff --git a/src/components/tables/CippTable.js b/src/components/tables/CippTable.js index f941927a01fa..a025dcaae217 100644 --- a/src/components/tables/CippTable.js +++ b/src/components/tables/CippTable.js @@ -25,7 +25,14 @@ import { ModalService } from '../utilities' import { useLazyGenericGetRequestQuery, useLazyGenericPostRequestQuery } from 'src/store/api/app' import { ConfirmModal } from '../utilities/SharedModal' -const FilterComponent = ({ filterText, onFilter, onClear, filterlist, onFilterPreset }) => ( +const FilterComponent = ({ + filterText, + onFilter, + onClear, + filterlist, + onFilterPreset, + onFilterGraph, +}) => ( <> @@ -38,14 +45,29 @@ const FilterComponent = ({ filterText, onFilter, onClear, filterlist, onFilterPr - onFilterPreset('')}>Clear Filter + { + onFilterPreset('') + onFilterGraph('') + }} + > + Clear Filter + {filterlist && filterlist.map((item, idx) => { - return ( - onFilterPreset(item.filter)}> - {item.filterName} - - ) + if (item.hasOwnProperty('graphFilter') && item.graphFilter == true) { + return ( + onFilterGraph(item.filter)}> + {item.filterName} + + ) + } else { + return ( + onFilterPreset(item.filter)}> + {item.filterName} + + ) + } })} @@ -69,6 +91,7 @@ FilterComponent.propTypes = { onClear: PropTypes.func, filterlist: PropTypes.arrayOf(PropTypes.object), onFilterPreset: PropTypes.func, + onFilterGraph: PropTypes.func, } const customSort = (rows, selector, direction) => { @@ -99,6 +122,7 @@ export default function CippTable({ error, reportName, refreshFunction = null, + graphFilterFunction = null, columns = [], dynamicColumns = true, filterlist, @@ -142,6 +166,16 @@ export default function CippTable({ const filteredItems = data.filter( (item) => JSON.stringify(item).toLowerCase().indexOf(filterText.toLowerCase()) !== -1, ) + const applyFilter = (e) => { + setFilterText(e.target.value) + } + + const setGraphFilter = (e) => { + if (graphFilterFunction) { + graphFilterFunction(e) + } + } + useEffect(() => { if (columns !== updatedColumns) { setUpdatedColumns(columns) @@ -400,7 +434,14 @@ export default function CippTable({
setFilterText(e.target.value)} - onFilterPreset={(e) => setFilterText(e)} + onFilterPreset={(e) => { + setFilterText(e) + setGraphFilter('') + }} + onFilterGraph={(e) => { + setFilterText('') + setGraphFilter(e) + }} onClear={handleClear} filterText={filterText} filterlist={filterlist} diff --git a/src/views/identity/administration/Users.js b/src/views/identity/administration/Users.js index ca19f07ef253..d2e845b0641c 100644 --- a/src/views/identity/administration/Users.js +++ b/src/views/identity/administration/Users.js @@ -313,6 +313,11 @@ const Users = (row) => { { filterName: 'Guest users', filter: '"usertype":"guest"' }, { filterName: 'Users with a license', filter: '"assignedLicenses":[{' }, { filterName: 'Users without a license', filter: '"assignedLicenses":[]' }, + { + filterName: 'Users with a license (Graph)', + filter: 'assignedLicenses/$count ne 0', + graphFilter: true, + }, ], columns, path: '/api/ListUsers',