Merge commit '3b735dd9330e0989f51a76771c3303031154154e' into 21158-wf-page-list
[arvados.git] / services / workbench2 / src / store / all-processes-panel / all-processes-panel-middleware-service.ts
index 227d2fa09c6e9617aeb15d34d1593703fbc71813..079cf11e71f6997db4f6c04c1114a0dc3b11d6dc 100644 (file)
 //
 // 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<Dispatch, RootState>) {
-        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<Dispatch, RootState>, dataExplorer: DataExplorer): string | null {
+        const sup = super.getFilters(api, dataExplorer);
+        if (sup === null) { return null; }
+        const columns = dataExplorer.columns as DataColumns<string, ContainerRequestResource>;
 
-                api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId()));
-                api.dispatch(resourcesActions.SET_RESOURCES(processItems.items));
-                await api.dispatch<any>(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<ContainerRequestResource>(dataExplorer),
-    filters: getFilters(dataExplorer)
-});
-
-const getFilters = ( dataExplorer: DataExplorer ) => {
-    const columns = dataExplorer.columns as DataColumns<string, ContainerRequestResource>;
-    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
-    });