//
// 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 } 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 } from "../resource-type-filters/resource-type-filters";
export class AllProcessesPanelMiddlewareService extends DataExplorerMiddlewareService {
constructor(private services: ServiceRepository, id: string) {
} 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));
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: [],
}
}
+const getParams = ( dataExplorer: DataExplorer ) => ({
+ ...dataExplorerToListParams(dataExplorer),
+ filters: getFilters(dataExplorer)
+});
+
+const getFilters = ( dataExplorer: DataExplorer ) => {
+ const columns = dataExplorer.columns as DataColumns<string>;
+ 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();
+
+ return joinFilters(
+ nameFilter,
+ statusFilter
+ );
+};
+
const allProcessesPanelDataExplorerIsNotSet = () =>
snackbarActions.OPEN_SNACKBAR({
message: 'All Processes panel is not ready.',
.map(f => f.id)
.map(objectTypeToResourceKind);
};
+
+export const buildProcessStatusFilters = ( fb:FilterBuilder, activeStatusFilter:string ): FilterBuilder => {
+ switch (activeStatusFilter) {
+ case ProcessStatusFilter.COMPLETED: {
+ fb.addEqual('container.state', 'Complete');
+ fb.addEqual('container.exit_code', '0');
+ break;
+ }
+ case ProcessStatusFilter.FAILED: {
+ fb.addEqual('container.state', 'Complete');
+ fb.addDistinct('container.exit_code', '0');
+ break;
+ }
+ case ProcessStatusFilter.CANCELLED:
+ case ProcessStatusFilter.FAILED:
+ case ProcessStatusFilter.LOCKED:
+ case ProcessStatusFilter.QUEUED:
+ case ProcessStatusFilter.RUNNING: {
+ fb.addEqual('container.state', activeStatusFilter);
+ break;
+ }
+ }
+ return fb;
+};
\ No newline at end of file
import { FilterBuilder, joinFilters } from '~/services/api/filter-builder';
import { subprocessPanelActions } from './subprocess-panel-actions';
import { DataColumns } from '~/components/data-table/data-table';
-import { ProcessStatusFilter } from '../resource-type-filters/resource-type-filters';
+import { ProcessStatusFilter, buildProcessStatusFilters } from '../resource-type-filters/resource-type-filters';
import { ContainerRequestResource } from '~/models/container-request';
import { progressIndicatorActions } from '../progress-indicator/progress-indicator-actions';
import { loadMissingProcessesInformation } from '../project-panel/project-panel-middleware-service';
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);
- switch (activeStatusFilter) {
- case ProcessStatusFilter.COMPLETED: {
- fb.addEqual('container.state', 'Complete');
- fb.addEqual('container.exit_code', '0');
- break;
- }
- case ProcessStatusFilter.FAILED: {
- fb.addEqual('container.state', 'Complete');
- fb.addDistinct('container.exit_code', '0');
- break;
- }
- case ProcessStatusFilter.CANCELLED:
- case ProcessStatusFilter.FAILED:
- case ProcessStatusFilter.LOCKED:
- case ProcessStatusFilter.QUEUED:
- case ProcessStatusFilter.RUNNING: {
- fb.addEqual('container.state', activeStatusFilter);
- break;
- }
- }
- const statusFilters = fb.getFilters();
+ const statusFilters = buildProcessStatusFilters(fb, activeStatusFilter).getFilters();
const nameFilters = dataExplorer.searchValue
? new FilterBuilder()
import { RootState } from '~/store/store';
import { DataTableDefaultView } from '~/components/data-table-default-view/data-table-default-view';
import { createTree } from '~/models/tree';
-import { getSimpleObjectTypeFilters } from '~/store/resource-type-filters/resource-type-filters';
+import { getSimpleObjectTypeFilters, getInitialProcessStatusFilters } from '~/store/resource-type-filters/resource-type-filters';
type CssRules = "toolbar" | "button";
name: AllProcessesPanelColumnNames.STATUS,
selected: true,
configurable: true,
- filters: createTree(),
+ mutuallyExclusiveFilters: true,
+ filters: getInitialProcessStatusFilters(),
render: uuid => <ProcessStatus uuid={uuid} />
},
{