From: Michal Klobukowski Date: Mon, 19 Nov 2018 11:25:17 +0000 (+0100) Subject: Create DataTableFiltersTree X-Git-Tag: 1.3.0~12^2^2~1^2~6^2~2 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/21f3b76dcab32f5bfa7a1d48fc323b0432718f43 Create DataTableFiltersTree Feature #14258 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- diff --git a/src/components/data-table-filters/data-table-filters-tree.tsx b/src/components/data-table-filters/data-table-filters-tree.tsx new file mode 100644 index 00000000..3ce4dbbe --- /dev/null +++ b/src/components/data-table-filters/data-table-filters-tree.tsx @@ -0,0 +1,72 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +import * as React from "react"; +import { Tree, toggleNodeSelection, getNode, initTreeNode, getNodeChildrenIds } from '~/models/tree'; +import { Tree as TreeComponent, TreeItem, TreeItemStatus } from '~/components/tree/tree'; +import { noop, map } from "lodash/fp"; +import { toggleNodeCollapse } from '~/models/tree'; + +export interface DataTableFilterItem { + name: string; +} + +export type DataTableFilters = Tree; + +export interface DataTableFilterProps { + filters: DataTableFilters; + onChange?: (filters: DataTableFilters) => void; +} + +export class DataTableFiltersTree extends React.Component { + + render() { + return ; + } + + renderItem(item: TreeItem) { + return {item.data.name}; + } + + toggleFilter = (_: React.MouseEvent, item: TreeItem) => { + const { onChange = noop } = this.props; + onChange(toggleNodeSelection(item.id)(this.props.filters)); + } + + toggleOpen = (_: React.MouseEvent, item: TreeItem) => { + const { onChange = noop } = this.props; + onChange(toggleNodeCollapse(item.id)(this.props.filters)); + } +} + +const renderItem = (item: TreeItem) => + {item.data.name}; + +const filterToTreeItem = (filters: DataTableFilters) => + (id: string): TreeItem => { + const node = getNode(id)(filters) || initTreeNode({ id: '', value: 'InvalidNode' }); + const items = getNodeChildrenIds(node.id)(filters) + .map(filterToTreeItem(filters)); + + return { + active: node.active, + data: node.value, + id: node.id, + items: items.length > 0 ? items : undefined, + open: node.expanded, + selected: node.selected, + status: TreeItemStatus.LOADED, + }; + }; + +const filtersToTree = (filters: DataTableFilters): TreeItem[] => + map(filterToTreeItem(filters), getNodeChildrenIds('')(filters));