X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/0f5b0542513b572959e39400bae42e69aeb1a7b6..e1953022010bc0679a2d79baf5c040b8312c5d8b:/services/workbench2/src/store/all-processes-panel/all-processes-panel-middleware-service.ts diff --git a/services/workbench2/src/store/all-processes-panel/all-processes-panel-middleware-service.ts b/services/workbench2/src/store/all-processes-panel/all-processes-panel-middleware-service.ts index 227d2fa09c..079cf11e71 100644 --- a/services/workbench2/src/store/all-processes-panel/all-processes-panel-middleware-service.ts +++ b/services/workbench2/src/store/all-processes-panel/all-processes-panel-middleware-service.ts @@ -2,100 +2,32 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { DataExplorerMiddlewareService, dataExplorerToListParams, getDataExplorerColumnFilters, getOrder } from "store/data-explorer/data-explorer-middleware-service"; +import { getDataExplorerColumnFilters } from "store/data-explorer/data-explorer-middleware-service"; import { RootState } from "../store"; import { ServiceRepository } from "services/services"; -import { FilterBuilder, joinFilters } from "services/api/filter-builder"; +import { 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'; -import { getDataExplorer, DataExplorer } from "store/data-explorer/data-explorer-reducer"; -import { loadMissingProcessesInformation } from "store/project-panel/project-panel-middleware-service"; +import { DataExplorer } from "store/data-explorer/data-explorer-reducer"; 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 { containerRequestFieldsNoMounts, ContainerRequestResource } from "models/container-request"; +import { ProcessesMiddlewareService } from "store/processes/processes-middleware-service"; +import { ContainerRequestResource } from 'models/container-request'; -export class AllProcessesPanelMiddlewareService extends DataExplorerMiddlewareService { - constructor(private services: ServiceRepository, id: string) { - super(id); +export class AllProcessesPanelMiddlewareService extends ProcessesMiddlewareService { + constructor(services: ServiceRepository, id: string) { + super(services, allProcessesPanelActions, id); } - async requestItems(api: MiddlewareAPI) { - const dataExplorer = getDataExplorer(api.getState().dataExplorer, this.getId()); - if (!dataExplorer) { - api.dispatch(allProcessesPanelDataExplorerIsNotSet()); - } else { - try { - api.dispatch(progressIndicatorActions.START_WORKING(this.getId())); - const processItems = await this.services.containerRequestService.list( - { - ...getParams(dataExplorer), - // Omit mounts when viewing all process panel - select: containerRequestFieldsNoMounts, - }); + getFilters(api: MiddlewareAPI, dataExplorer: DataExplorer): string | null { + const sup = super.getFilters(api, dataExplorer); + if (sup === null) { return null; } + const columns = dataExplorer.columns as DataColumns; - api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId())); - api.dispatch(resourcesActions.SET_RESOURCES(processItems.items)); - await api.dispatch(loadMissingProcessesInformation(processItems.items)); - api.dispatch(allProcessesPanelActions.SET_ITEMS({ - items: processItems.items.map((resource: any) => resource.uuid), - itemsAvailable: processItems.itemsAvailable, - page: Math.floor(processItems.offset / processItems.limit), - rowsPerPage: processItems.limit - })); - } catch { - api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId())); - api.dispatch(allProcessesPanelActions.SET_ITEMS({ - items: [], - itemsAvailable: 0, - page: 0, - rowsPerPage: dataExplorer.rowsPerPage - })); - api.dispatch(couldNotFetchAllProcessesListing()); - } - } + const typeFilters = serializeOnlyProcessTypeFilters(getDataExplorerColumnFilters(columns, AllProcessesPanelColumnNames.TYPE)); + return joinFilters(sup, typeFilters); } } - -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 allProcessesPanelDataExplorerIsNotSet = () => - snackbarActions.OPEN_SNACKBAR({ - message: 'All Processes panel is not ready.', - kind: SnackbarKind.ERROR - }); - -const couldNotFetchAllProcessesListing = () => - snackbarActions.OPEN_SNACKBAR({ - message: 'Could not fetch All Processes listing.', - kind: SnackbarKind.ERROR - });