X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/06d87a1bfa835b10193b9ecf87f62f7a707d55fa..0cc06c813afc8373f3c6675c3519960382a7067f:/src/store/all-processes-panel/all-processes-panel-middleware-service.ts diff --git a/src/store/all-processes-panel/all-processes-panel-middleware-service.ts b/src/store/all-processes-panel/all-processes-panel-middleware-service.ts index be8c9c49..7af28c9e 100644 --- a/src/store/all-processes-panel/all-processes-panel-middleware-service.ts +++ b/src/store/all-processes-panel/all-processes-panel-middleware-service.ts @@ -2,17 +2,27 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { DataExplorerMiddlewareService } from "~/store/data-explorer/data-explorer-middleware-service"; +import { DataExplorerMiddlewareService, dataExplorerToListParams, getDataExplorerColumnFilters } from "~/store/data-explorer/data-explorer-middleware-service"; import { RootState } from "../store"; import { ServiceRepository } from "~/services/services"; -import { FilterBuilder } from "~/services/api/filter-builder"; +import { FilterBuilder, joinFilters } from "~/services/api/filter-builder"; import { allProcessesPanelActions } from "./all-processes-panel-action"; import { Dispatch, MiddlewareAPI } from "redux"; import { resourcesActions } from "~/store/resources/resources-actions"; import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions'; import { progressIndicatorActions } from '~/store/progress-indicator/progress-indicator-actions.ts'; -import { getDataExplorer } from "~/store/data-explorer/data-explorer-reducer"; +import { getDataExplorer, DataExplorer, getSortColumn } from "~/store/data-explorer/data-explorer-reducer"; import { loadMissingProcessesInformation } from "~/store/project-panel/project-panel-middleware-service"; +import { DataColumns } from "~/components/data-table/data-table"; +import { + ProcessStatusFilter, + buildProcessStatusFilters, + serializeOnlyProcessTypeFilters +} from "../resource-type-filters/resource-type-filters"; +import { AllProcessesPanelColumnNames } from "~/views/all-processes-panel/all-processes-panel"; +import { OrderBuilder, OrderDirection } from "~/services/api/order-builder"; +import { ProcessResource } from "~/models/process"; +import { SortDirection } from "~/components/data-table/data-column"; export class AllProcessesPanelMiddlewareService extends DataExplorerMiddlewareService { constructor(private services: ServiceRepository, id: string) { @@ -26,11 +36,8 @@ export class AllProcessesPanelMiddlewareService extends DataExplorerMiddlewareSe } else { try { api.dispatch(progressIndicatorActions.START_WORKING(this.getId())); - const processItems: any = await this.services.containerRequestService.list({ - filters: new FilterBuilder() - .addILike("name", dataExplorer.searchValue) - .getFilters() - }); + const processItems = await this.services.containerRequestService.list( + { ...getParams(dataExplorer) }); api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId())); api.dispatch(resourcesActions.SET_RESOURCES(processItems.items)); @@ -41,7 +48,7 @@ export class AllProcessesPanelMiddlewareService extends DataExplorerMiddlewareSe page: Math.floor(processItems.offset / processItems.limit), rowsPerPage: processItems.limit })); - } catch (e) { + } catch { api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId())); api.dispatch(allProcessesPanelActions.SET_ITEMS({ items: [], @@ -55,6 +62,47 @@ export class AllProcessesPanelMiddlewareService extends DataExplorerMiddlewareSe } } +const getParams = ( dataExplorer: DataExplorer ) => ({ + ...dataExplorerToListParams(dataExplorer), + order: getOrder(dataExplorer), + filters: getFilters(dataExplorer) +}); + +const getFilters = ( dataExplorer: DataExplorer ) => { + const columns = dataExplorer.columns as DataColumns; + const statusColumnFilters = getDataExplorerColumnFilters(columns, 'Status'); + const activeStatusFilter = Object.keys(statusColumnFilters).find( + filterName => statusColumnFilters[filterName].selected + ) || ProcessStatusFilter.ALL; + + const nameFilter = new FilterBuilder().addILike("name", dataExplorer.searchValue).getFilters(); + const statusFilter = buildProcessStatusFilters(new FilterBuilder(), activeStatusFilter).getFilters(); + const typeFilters = serializeOnlyProcessTypeFilters(getDataExplorerColumnFilters(columns, AllProcessesPanelColumnNames.TYPE)); + + return joinFilters( + nameFilter, + statusFilter, + typeFilters + ); +}; + +const getOrder = (dataExplorer: DataExplorer) => { + const sortColumn = getSortColumn(dataExplorer); + const order = new OrderBuilder(); + if (sortColumn) { + const sortDirection = sortColumn && sortColumn.sortDirection === SortDirection.ASC + ? OrderDirection.ASC + : OrderDirection.DESC; + + const columnName = sortColumn && sortColumn.name === AllProcessesPanelColumnNames.NAME ? "name" : "createdAt"; + return order + .addOrder(sortDirection, columnName) + .getOrder(); + } else { + return order.getOrder(); + } +}; + const allProcessesPanelDataExplorerIsNotSet = () => snackbarActions.OPEN_SNACKBAR({ message: 'All Processes panel is not ready.',