X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/7e718771481262388b4c89f6429b6a7c0b2ae1d9..cfe5ff035578ede95613b0c545708466da78cbea:/src/components/data-table-filters/data-table-filters-popover.tsx diff --git a/src/components/data-table-filters/data-table-filters-popover.tsx b/src/components/data-table-filters/data-table-filters-popover.tsx index 28cf4c22..3183157b 100644 --- a/src/components/data-table-filters/data-table-filters-popover.tsx +++ b/src/components/data-table-filters/data-table-filters-popover.tsx @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0 -import * as React from "react"; +import React from "react"; import { WithStyles, withStyles, @@ -18,11 +18,11 @@ import { Tooltip, IconButton } from "@material-ui/core"; -import * as classnames from "classnames"; -import { DefaultTransformOrigin } from "~/components/popover/helpers"; -import { createTree } from '~/models/tree'; +import classnames from "classnames"; +import { DefaultTransformOrigin } from "components/popover/helpers"; +import { createTree } from 'models/tree'; import { DataTableFilters, DataTableFiltersTree } from "./data-table-filters-tree"; -import { getNodeDescendants } from '~/models/tree'; +import { getNodeDescendants } from 'models/tree'; export type CssRules = "root" | "icon" | "iconButton" | "active" | "checkbox"; @@ -73,6 +73,11 @@ export interface DataTableFilterProps { filters: DataTableFilters; onChange?: (filters: DataTableFilters) => void; + /** + * When set to true, only one filter can be selected at a time. + */ + mutuallyExclusive?: boolean; + /** * By default `all` filters selection means that label should be grayed out. * Use `none` when label is supposed to be grayed out when no filter is selected. @@ -103,14 +108,14 @@ export const DataTableFiltersPopover = withStyles(styles)( : f.selected ); return <> - + {children} - + @@ -131,7 +136,18 @@ export const DataTableFiltersPopover = withStyles(styles)( this.setState({ filters })} /> + mutuallyExclusive={this.props.mutuallyExclusive} + onChange={filters => { + this.setState({ filters }); + if (this.props.mutuallyExclusive) { + const { onChange } = this.props; + if (onChange) { + onChange(filters); + } + this.setState({ anchorEl: undefined }); + } + }} /> + {this.props.mutuallyExclusive ||