X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/85719156f00d2508bc02dfcc8f44accb7a707e1e..88ab5c4388e8bbe9dfa29ef5fff653a511d3096b:/src/components/data-table-filters/data-table-filters.tsx diff --git a/src/components/data-table-filters/data-table-filters.tsx b/src/components/data-table-filters/data-table-filters.tsx index b8a6e834..ed7b30e7 100644 --- a/src/components/data-table-filters/data-table-filters.tsx +++ b/src/components/data-table-filters/data-table-filters.tsx @@ -2,189 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0 -import * as React from "react"; -import { - WithStyles, - withStyles, - ButtonBase, - StyleRulesCallback, - Theme, - Popover, - List, - ListItem, - Checkbox, - ListItemText, - Button, - Card, - CardActions, - Typography, - CardContent, - Tooltip -} from "@material-ui/core"; -import * as classnames from "classnames"; -import { DefaultTransformOrigin } from "../popover/helpers"; - -export type CssRules = "root" | "icon" | "active" | "checkbox"; - -const styles: StyleRulesCallback = (theme: Theme) => ({ - root: { - cursor: "pointer", - display: "inline-flex", - justifyContent: "flex-start", - flexDirection: "inherit", - alignItems: "center", - "&:hover": { - color: theme.palette.text.primary, - }, - "&:focus": { - color: theme.palette.text.primary, - }, - }, - active: { - color: theme.palette.text.primary, - '& $icon': { - opacity: 1, - }, - }, - icon: { - marginRight: 4, - marginLeft: 4, - opacity: 0.7, - userSelect: "none", - width: 16 - }, - checkbox: { - width: 24, - height: 24 - } -}); - export interface DataTableFilterItem { name: string; selected: boolean; } - -export interface DataTableFilterProps { - name: string; - filters: DataTableFilterItem[]; - onChange?: (filters: DataTableFilterItem[]) => void; -} - -interface DataTableFilterState { - anchorEl?: HTMLElement; - filters: DataTableFilterItem[]; - prevFilters: DataTableFilterItem[]; -} - -export const DataTableFilters = withStyles(styles)( - class extends React.Component, DataTableFilterState> { - state: DataTableFilterState = { - anchorEl: undefined, - filters: [], - prevFilters: [] - }; - icon = React.createRef(); - - render() { - const { name, classes, children } = this.props; - const isActive = this.state.filters.some(f => f.selected); - return <> - - - {children} - - - - - - - - {name} - - - - {this.state.filters.map((filter, index) => - - - - {filter.name} - - - )} - - - - - - - - ; - } - - static getDerivedStateFromProps(props: DataTableFilterProps, state: DataTableFilterState): DataTableFilterState { - return props.filters !== state.prevFilters - ? { ...state, filters: props.filters, prevFilters: props.filters } - : state; - } - - open = () => { - this.setState({ anchorEl: this.icon.current || undefined }); - } - - submit = () => { - const { onChange } = this.props; - if (onChange) { - onChange(this.state.filters); - } - this.setState({ anchorEl: undefined }); - } - - cancel = () => { - this.setState(prev => ({ - ...prev, - filters: prev.prevFilters, - anchorEl: undefined - })); - } - - toggleFilter = (toggledFilter: DataTableFilterItem) => () => { - this.setState(prev => ({ - ...prev, - filters: prev.filters.map(filter => - filter === toggledFilter - ? { ...filter, selected: !filter.selected } - : filter) - })); - } - } -);