From c3efa27ba09323568c2b7d2cd27911fe4937ccbc Mon Sep 17 00:00:00 2001 From: Michal Klobukowski Date: Tue, 26 Jun 2018 15:14:31 +0200 Subject: [PATCH] Implement filtering in project-panel Feature #13683 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- .../project-explorer/project-explorer.tsx | 11 ++----- src/views/project-panel/project-panel.tsx | 29 +++++++++++++------ 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/views-components/project-explorer/project-explorer.tsx b/src/views-components/project-explorer/project-explorer.tsx index e982553c..556b23be 100644 --- a/src/views-components/project-explorer/project-explorer.tsx +++ b/src/views-components/project-explorer/project-explorer.tsx @@ -26,6 +26,7 @@ interface ProjectExplorerProps { items: ProjectExplorerItem[]; onRowClick: (item: ProjectExplorerItem) => void; onToggleSort: (toggledColumn: DataColumn) => void; + onChangeFilters: (filters: DataTableFilterItem[]) => void; } interface ProjectExplorerState { @@ -49,13 +50,6 @@ class ProjectExplorer extends React.Component renderType(item.kind), @@ -162,6 +156,7 @@ class ProjectExplorer extends React.Component { diff --git a/src/views/project-panel/project-panel.tsx b/src/views/project-panel/project-panel.tsx index d44053da..df9721fd 100644 --- a/src/views/project-panel/project-panel.tsx +++ b/src/views/project-panel/project-panel.tsx @@ -14,6 +14,7 @@ import { projectExplorerItems } from "./project-panel-selectors"; import { ProjectExplorerItem } from "../../views-components/project-explorer/project-explorer-item"; import { Button, StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core'; import { DataColumn, SortDirection } from '../../components/data-table/data-column'; +import { DataTableFilterItem } from '../../components/data-table-filters/data-table-filters'; interface ProjectPanelDataProps { projects: ProjectState; @@ -27,6 +28,7 @@ interface ProjectPanelState { columnName: string; direction: SortDirection; }; + filters: string[]; } class ProjectPanel extends React.Component, ProjectPanelState> { @@ -34,7 +36,8 @@ class ProjectPanel extends React.Component this.state.filters.some(f => f === i.kind)); + const sortedItems = sortItems(this.state.sort, filteredItems); return (
@@ -59,9 +63,10 @@ class ProjectPanel extends React.Component
); @@ -72,18 +77,24 @@ class ProjectPanel extends React.Component) => { - this.setState({sort: { - columnName: column.name, - direction: column.sortDirection || "none" - }}); + this.setState({ + sort: { + columnName: column.name, + direction: column.sortDirection || "none" + } + }); + } + + changeFilters = (filters: DataTableFilterItem[]) => { + this.setState({ filters: filters.filter(f => f.selected).map(f => f.name.toLowerCase()) }); } } -const sortItems = (sort: {columnName: string, direction: SortDirection}, items: ProjectExplorerItem[]) => { +const sortItems = (sort: { columnName: string, direction: SortDirection }, items: ProjectExplorerItem[]) => { const sortedItems = items.slice(0); const direction = sort.direction === "asc" ? -1 : 1; sortedItems.sort((a, b) => { - if(sort.columnName === "Last modified") { + if (sort.columnName === "Last modified") { return ((new Date(a.lastModified)).getTime() - (new Date(b.lastModified)).getTime()) * direction; } else { return a.name.localeCompare(b.name) * direction; -- 2.30.2