Merge branch '16583-intermediate-collections' refs #16583
authorPeter Amstutz <peter.amstutz@curii.com>
Mon, 23 May 2022 14:30:04 +0000 (10:30 -0400)
committerPeter Amstutz <peter.amstutz@curii.com>
Mon, 23 May 2022 14:30:04 +0000 (10:30 -0400)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

src/models/collection.ts
src/store/resource-type-filters/resource-type-filters.test.ts
src/store/resource-type-filters/resource-type-filters.ts

index 9a5d2ee2d86d6e34ef71c77af3fab222b3538d9c..defaca769a2544de5b6108a493ff745aee5a76ce 100644 (file)
@@ -70,4 +70,5 @@ export enum CollectionType {
     GENERAL = 'nil',
     OUTPUT = 'output',
     LOG = 'log',
+    INTERMEDIATE = 'intermediate',
 }
index 698515bde55f8fc945baa5ce3d9e40bddd22f623..a3684507b3bbd3a8db79dcd02fe97e7b9756bbb2 100644 (file)
@@ -47,6 +47,7 @@ describe("serializeResourceTypeFilters", () => {
             deselectNode(ObjectTypeFilter.PROCESS),
             deselectNode(CollectionTypeFilter.GENERAL_COLLECTION),
             deselectNode(CollectionTypeFilter.LOG_COLLECTION),
+            deselectNode(CollectionTypeFilter.INTERMEDIATE_COLLECTION),
         )();
 
         const serializedFilters = serializeResourceTypeFilters(filters);
@@ -54,6 +55,20 @@ describe("serializeResourceTypeFilters", () => {
             .toEqual(`["uuid","is_a",["${ResourceKind.PROJECT}","${ResourceKind.COLLECTION}"]],["collections.properties.type","in",["output"]]`);
     });
 
+    it("should serialize intermediate collections and projects", () => {
+        const filters = pipe(
+            () => getInitialResourceTypeFilters(),
+            deselectNode(ObjectTypeFilter.PROCESS),
+            deselectNode(CollectionTypeFilter.GENERAL_COLLECTION),
+            deselectNode(CollectionTypeFilter.LOG_COLLECTION),
+            deselectNode(CollectionTypeFilter.OUTPUT_COLLECTION),
+        )();
+
+        const serializedFilters = serializeResourceTypeFilters(filters);
+        expect(serializedFilters)
+            .toEqual(`["uuid","is_a",["${ResourceKind.PROJECT}","${ResourceKind.COLLECTION}"]],["collections.properties.type","in",["intermediate"]]`);
+    });
+
     it("should serialize general and log collections", () => {
         const filters = pipe(
             () => getInitialResourceTypeFilters(),
index a39807d58238196a44a9c93e347927778ad4bf36..0539cefecc93dc74df0912b8450d81613c9e566b 100644 (file)
@@ -38,6 +38,7 @@ export enum CollectionTypeFilter {
     GENERAL_COLLECTION = 'General',
     OUTPUT_COLLECTION = 'Output',
     LOG_COLLECTION = 'Log',
+    INTERMEDIATE_COLLECTION = 'Intermediate',
 }
 
 export enum ProcessTypeFilter {
@@ -82,6 +83,7 @@ export const getInitialResourceTypeFilters = pipe(
         initFilter(ObjectTypeFilter.COLLECTION),
         initFilter(CollectionTypeFilter.GENERAL_COLLECTION, ObjectTypeFilter.COLLECTION),
         initFilter(CollectionTypeFilter.OUTPUT_COLLECTION, ObjectTypeFilter.COLLECTION),
+        initFilter(CollectionTypeFilter.INTERMEDIATE_COLLECTION, ObjectTypeFilter.COLLECTION),
         initFilter(CollectionTypeFilter.LOG_COLLECTION, ObjectTypeFilter.COLLECTION),
     ),
 );
@@ -111,6 +113,7 @@ export const getTrashPanelTypeFilters = pipe(
     initFilter(ObjectTypeFilter.COLLECTION),
     initFilter(CollectionTypeFilter.GENERAL_COLLECTION, ObjectTypeFilter.COLLECTION),
     initFilter(CollectionTypeFilter.OUTPUT_COLLECTION, ObjectTypeFilter.COLLECTION),
+    initFilter(CollectionTypeFilter.INTERMEDIATE_COLLECTION, ObjectTypeFilter.COLLECTION),
     initFilter(CollectionTypeFilter.LOG_COLLECTION, ObjectTypeFilter.COLLECTION),
 );
 
@@ -167,6 +170,10 @@ const collectionTypeToPropertyValue = (type: CollectionTypeFilter) => {
             return CollectionType.OUTPUT;
         case CollectionTypeFilter.LOG_COLLECTION:
             return CollectionType.LOG;
+        case CollectionTypeFilter.INTERMEDIATE_COLLECTION:
+            return CollectionType.INTERMEDIATE;
+        default:
+            return CollectionType.GENERAL;
     }
 };
 
@@ -273,7 +280,7 @@ export const serializeSimpleObjectTypeFilters = (filters: Tree<DataTableFilterIt
         .map(objectTypeToResourceKind);
 };
 
-export const buildProcessStatusFilters = ( fb: FilterBuilder, activeStatusFilter: string, resourcePrefix?: string ): FilterBuilder => {
+export const buildProcessStatusFilters = (fb: FilterBuilder, activeStatusFilter: string, resourcePrefix?: string): FilterBuilder => {
     switch (activeStatusFilter) {
         case ProcessStatusFilter.ONHOLD: {
             fb.addDistinct('state', ContainerRequestState.FINAL, resourcePrefix);