15672: Fixes status filtering on subprocess panel.
authorLucas Di Pentima <lucas@di-pentima.com.ar>
Fri, 20 Dec 2019 16:16:41 +0000 (13:16 -0300)
committerLucas Di Pentima <lucas@di-pentima.com.ar>
Fri, 20 Dec 2019 16:16:41 +0000 (13:16 -0300)
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas@di-pentima.com.ar>

src/services/api/filter-builder.ts
src/store/subprocess-panel/subprocess-panel-middleware-service.ts

index d5903c564b8b5e1a08b1613d5aa8cee77af3453e..aa0f011b037b2ca1def0c426f20d5a9bbea71cf1 100644 (file)
@@ -13,6 +13,10 @@ export class FilterBuilder {
         return this.addCondition(field, "=", value, "", "", resourcePrefix);
     }
 
+    public addDistinct(field: string, value?: string | boolean | null, resourcePrefix?: string) {
+        return this.addCondition(field, "!=", value, "", "", resourcePrefix);
+    }
+
     public addLike(field: string, value?: string, resourcePrefix?: string) {
         return this.addCondition(field, "like", value, "%", "%", resourcePrefix);
     }
index 7b5353f3e7c23b4bec60b240baec076b5bfd9106..c9e8055745074cf7111ece3bc6cdb819a88e398e 100644 (file)
@@ -20,6 +20,7 @@ import { SubprocessPanelColumnNames } from '~/views/subprocess-panel/subprocess-
 import { FilterBuilder } 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';
 
 export class SubprocessMiddlewareService extends DataExplorerMiddlewareService {
     constructor(private services: ServiceRepository, id: string) {
@@ -50,8 +51,25 @@ export class SubprocessMiddlewareService extends DataExplorerMiddlewareService {
 
             // Get all the subprocess' container requests and containers.
             const fb = new FilterBuilder().addEqual('requesting_container_uuid', parentContainerRequest.containerUuid);
-            if (activeStatusFilter !== undefined && activeStatusFilter !== 'All') {
-                fb.addEqual('container.state', activeStatusFilter);
+            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 containerRequests = await this.services.containerRequestService.list(
                 { ...getParams(dataExplorer), filters: fb.getFilters() });