From 3db295e22bbe57635eac43b21530a61c29de293a Mon Sep 17 00:00:00 2001 From: Michal Klobukowski Date: Wed, 4 Jul 2018 15:55:02 +0200 Subject: [PATCH] Handle filtering in projectPanelMiddleware Feature #13703 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- .../project-panel/project-panel-middleware.ts | 59 +++++++++++++------ 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/src/views/project-panel/project-panel-middleware.ts b/src/views/project-panel/project-panel-middleware.ts index 9be59811..8c1e8cc8 100644 --- a/src/views/project-panel/project-panel-middleware.ts +++ b/src/views/project-panel/project-panel-middleware.ts @@ -4,11 +4,13 @@ import { Middleware } from "redux"; import actions from "../../store/data-explorer/data-explorer-action"; -import { PROJECT_PANEL_ID, columns } from "./project-panel"; +import { PROJECT_PANEL_ID, columns, ProjectPanelFilter } from "./project-panel"; import { groupsService } from "../../services/services"; import { RootState } from "../../store/store"; -import { getDataExplorer } from "../../store/data-explorer/data-explorer-reducer"; -import { resourceToDataItem } from "./project-panel-item"; +import { getDataExplorer, DataExplorerState } from "../../store/data-explorer/data-explorer-reducer"; +import { resourceToDataItem, ProjectPanelItem } from "./project-panel-item"; +import FilterBuilder from "../../common/api/filter-builder"; +import { DataColumns } from "../../components/data-table/data-table"; export const projectPanelMiddleware: Middleware = store => next => { next(actions.SET_COLUMNS({ id: PROJECT_PANEL_ID, columns })); @@ -30,26 +32,47 @@ export const projectPanelMiddleware: Middleware = store => next => { SET_ROWS_PER_PAGE: handleProjectPanelAction(() => { store.dispatch(actions.REQUEST_ITEMS({ id: PROJECT_PANEL_ID })); }), + SET_FILTERS: handleProjectPanelAction(() => { + store.dispatch(actions.REQUEST_ITEMS({ id: PROJECT_PANEL_ID })); + }), REQUEST_ITEMS: handleProjectPanelAction(() => { const state = store.getState() as RootState; const dataExplorer = getDataExplorer(state.dataExplorer, PROJECT_PANEL_ID); - groupsService - .contents(state.projects.currentItemId, { - limit: dataExplorer.rowsPerPage, - offset: dataExplorer.page * dataExplorer.rowsPerPage, - }) - .then(response => { - store.dispatch(actions.SET_ITEMS({ - id: PROJECT_PANEL_ID, - items: response.items.map(resourceToDataItem), - itemsAvailable: response.itemsAvailable, - page: Math.floor(response.offset / response.limit), - rowsPerPage: response.limit - })); - }); - + const typeColumn = columns.find(c => c.name === "Type"); + const typeFilters = getSelectedTypeFilters(dataExplorer.columns as DataColumns); + if (typeFilters.length > 0) { + groupsService + .contents(state.projects.currentItemId, { + limit: dataExplorer.rowsPerPage, + offset: dataExplorer.page * dataExplorer.rowsPerPage, + filters: FilterBuilder.create().addIsA("uuid", typeFilters.map(f => f.type)) + }) + .then(response => { + store.dispatch(actions.SET_ITEMS({ + id: PROJECT_PANEL_ID, + items: response.items.map(resourceToDataItem), + itemsAvailable: response.itemsAvailable, + page: Math.floor(response.offset / response.limit), + rowsPerPage: response.limit + })); + }); + } else { + store.dispatch(actions.SET_ITEMS({ + id: PROJECT_PANEL_ID, + items: [], + itemsAvailable: 0, + page: 0, + rowsPerPage: dataExplorer.rowsPerPage + })); + } }), default: () => next(action) }); }; }; + +const getSelectedTypeFilters = (columns: DataColumns) => { + const typeColumn = columns.find(c => c.name === "Type"); + return typeColumn && typeColumn.filters ? typeColumn.filters.filter(f => f.selected) : []; +}; + -- 2.30.2