X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/095e176632bbf81d28a239742a1ecce12404bd2d..e1953022010bc0679a2d79baf5c040b8312c5d8b:/services/workbench2/src/store/subprocess-panel/subprocess-panel-middleware-service.ts diff --git a/services/workbench2/src/store/subprocess-panel/subprocess-panel-middleware-service.ts b/services/workbench2/src/store/subprocess-panel/subprocess-panel-middleware-service.ts index 5124c8346a..0ac5df6a0f 100644 --- a/services/workbench2/src/store/subprocess-panel/subprocess-panel-middleware-service.ts +++ b/services/workbench2/src/store/subprocess-panel/subprocess-panel-middleware-service.ts @@ -2,99 +2,32 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { ServiceRepository } from 'services/services'; -import { MiddlewareAPI, Dispatch } from 'redux'; -import { - DataExplorerMiddlewareService, dataExplorerToListParams, listResultsToDataExplorerItemsMeta, getDataExplorerColumnFilters, getOrder -} from 'store/data-explorer/data-explorer-middleware-service'; -import { RootState } from 'store/store'; -import { snackbarActions, SnackbarKind } from 'store/snackbar/snackbar-actions'; -import { DataExplorer, getDataExplorer } from 'store/data-explorer/data-explorer-reducer'; -import { updateResources } from 'store/resources/resources-actions'; -import { ListResults } from 'services/common-service/common-service'; -import { ProcessResource } from 'models/process'; -import { FilterBuilder, joinFilters } from 'services/api/filter-builder'; +import { RootState } from "../store"; +import { ServiceRepository } from "services/services"; +import { FilterBuilder, joinFilters } from "services/api/filter-builder"; +import { Dispatch, MiddlewareAPI } from "redux"; +import { DataExplorer } from "store/data-explorer/data-explorer-reducer"; +import { ProcessesMiddlewareService } from "store/processes/processes-middleware-service"; import { subprocessPanelActions } from './subprocess-panel-actions'; -import { DataColumns } from 'components/data-table/data-table'; -import { ProcessStatusFilter, buildProcessStatusFilters } from '../resource-type-filters/resource-type-filters'; -import { ContainerRequestResource, containerRequestFieldsNoMounts } from 'models/container-request'; -import { progressIndicatorActions } from '../progress-indicator/progress-indicator-actions'; -import { loadMissingProcessesInformation } from '../project-panel/project-panel-middleware-service'; +import { getProcess } from "store/processes/process"; -export class SubprocessMiddlewareService extends DataExplorerMiddlewareService { - constructor(private services: ServiceRepository, id: string) { - super(id); +export class SubprocessMiddlewareService extends ProcessesMiddlewareService { + constructor(services: ServiceRepository, id: string) { + super(services, subprocessPanelActions, id); } - async requestItems(api: MiddlewareAPI, criteriaChanged?: boolean, background?: boolean) { + getFilters(api: MiddlewareAPI, dataExplorer: DataExplorer): string | null { const state = api.getState(); const parentContainerRequestUuid = state.processPanel.containerRequestUuid; - if (parentContainerRequestUuid === "") { return; } - const dataExplorer = getDataExplorer(state.dataExplorer, this.getId()); + if (!parentContainerRequestUuid) { return null; } - try { - if (!background) { api.dispatch(progressIndicatorActions.START_WORKING(this.getId())); } - const parentContainerRequest = await this.services.containerRequestService.get(parentContainerRequestUuid); - if (parentContainerRequest.containerUuid) { - const containerRequests = await this.services.containerRequestService.list( - { - ...getParams(dataExplorer, parentContainerRequest), - select: containerRequestFieldsNoMounts - }); - api.dispatch(updateResources(containerRequests.items)); - await api.dispatch(loadMissingProcessesInformation(containerRequests.items)); - // Populate the actual user view - api.dispatch(setItems(containerRequests)); - } - if (!background) { api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId())); } - } catch { - if (!background) { api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId())); } - api.dispatch(couldNotFetchSubprocesses()); - } - } -} - -export const getParams = ( - dataExplorer: DataExplorer, - parentContainerRequest: ContainerRequestResource) => ({ - ...dataExplorerToListParams(dataExplorer), - order: getOrder(dataExplorer), - filters: getFilters(dataExplorer, parentContainerRequest) - }); - -export const getFilters = ( - dataExplorer: DataExplorer, - parentContainerRequest: ContainerRequestResource) => { - const columns = dataExplorer.columns as DataColumns; - const statusColumnFilters = getDataExplorerColumnFilters(columns, 'Status'); - const activeStatusFilter = Object.keys(statusColumnFilters).find( - filterName => statusColumnFilters[filterName].selected - ) || ProcessStatusFilter.ALL; - - // Get all the subprocess' container requests and containers. - const fb = new FilterBuilder().addEqual('requesting_container_uuid', parentContainerRequest.containerUuid); - const statusFilters = buildProcessStatusFilters(fb, activeStatusFilter).getFilters(); + const process = getProcess(parentContainerRequestUuid)(state.resources); + if (!process?.container) { return null; } - const nameFilters = dataExplorer.searchValue - ? new FilterBuilder() - .addILike("name", dataExplorer.searchValue) - .getFilters() - : ''; + const requesting_container = new FilterBuilder().addEqual('requesting_container_uuid', process.container.uuid).getFilters(); + const sup = super.getFilters(api, dataExplorer); + if (sup === null) { return null; } - return joinFilters( - nameFilters, - statusFilters - ); -}; - -export const setItems = (listResults: ListResults) => - subprocessPanelActions.SET_ITEMS({ - ...listResultsToDataExplorerItemsMeta(listResults), - items: listResults.items.map(resource => resource.uuid), - }); - -const couldNotFetchSubprocesses = () => - snackbarActions.OPEN_SNACKBAR({ - message: 'Could not fetch subprocesses.', - kind: SnackbarKind.ERROR - }); + return joinFilters(sup, requesting_container); + } +}