X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/6debc9dd19b3441a974c8eae9788cfa80227badd..3f74a8e0f7a6fc2110915e6f8687a84a6a07bc00:/services/workbench2/src/store/resource-type-filters/resource-type-filters.ts diff --git a/services/workbench2/src/store/resource-type-filters/resource-type-filters.ts b/services/workbench2/src/store/resource-type-filters/resource-type-filters.ts index 791d7e8a4a..b181e5c1af 100644 --- a/services/workbench2/src/store/resource-type-filters/resource-type-filters.ts +++ b/services/workbench2/src/store/resource-type-filters/resource-type-filters.ts @@ -43,8 +43,8 @@ export enum CollectionTypeFilter { } export enum ProcessTypeFilter { - MAIN_PROCESS = 'Runs', - CHILD_PROCESS = 'Intermediate Steps', + MAIN_PROCESS = 'Workflow Runs', + CHILD_PROCESS = 'Workflow Steps', } const initFilter = (name: string, parent = '', isSelected?: boolean, isExpanded?: boolean) => @@ -93,6 +93,30 @@ export const getInitialResourceTypeFilters = pipe( ); +/** + * Resource type filters for Data tab (excludes main/sub process runs) + */ +export const getInitialDataResourceTypeFilters = pipe( + (): DataTableFilters => createTree(), + pipe( + initFilter(ObjectTypeFilter.PROJECT, '', true, true), + initFilter(GroupTypeFilter.PROJECT, ObjectTypeFilter.PROJECT), + initFilter(GroupTypeFilter.FILTER_GROUP, ObjectTypeFilter.PROJECT), + ), + pipe( + initFilter(ObjectTypeFilter.WORKFLOW, '', true, true), + initFilter(ObjectTypeFilter.DEFINITION, ObjectTypeFilter.WORKFLOW), + ), + pipe( + initFilter(ObjectTypeFilter.COLLECTION, '', true, true), + initFilter(CollectionTypeFilter.GENERAL_COLLECTION, ObjectTypeFilter.COLLECTION), + initFilter(CollectionTypeFilter.OUTPUT_COLLECTION, ObjectTypeFilter.COLLECTION), + initFilter(CollectionTypeFilter.INTERMEDIATE_COLLECTION, ObjectTypeFilter.COLLECTION, false), + initFilter(CollectionTypeFilter.LOG_COLLECTION, ObjectTypeFilter.COLLECTION, false), + ), + +); + // Using pipe() with more than 7 arguments makes the return type be 'any', // causing compile issues. export const getInitialSearchTypeFilters = pipe( @@ -167,6 +191,22 @@ const objectTypeToResourceKind = (type: ObjectTypeFilter) => { } }; +/** + * object to resource which clasifies workflow category as only registered workflows, not processes + * Used for data tab that excludes process runs + */ +const dataObjectTypeToResourceKind = (type: ObjectTypeFilter) => { + switch (type) { + case ObjectTypeFilter.PROJECT: + return ResourceKind.PROJECT; + case ObjectTypeFilter.COLLECTION: + return ResourceKind.COLLECTION; + case ObjectTypeFilter.WORKFLOW: + case ObjectTypeFilter.DEFINITION: + return ResourceKind.WORKFLOW; + } +}; + const serializeObjectTypeFilters = ({ fb, selectedFilters }: ReturnType) => { const groupFilters = getMatchingFilters(values(GroupTypeFilter), selectedFilters); const collectionFilters = getMatchingFilters(values(CollectionTypeFilter), selectedFilters); @@ -193,6 +233,31 @@ const serializeObjectTypeFilters = ({ fb, selectedFilters }: ReturnType) => { + const groupFilters = getMatchingFilters(values(GroupTypeFilter), selectedFilters); + const collectionFilters = getMatchingFilters(values(CollectionTypeFilter), selectedFilters); + const typeFilters = pipe( + () => new Set(getMatchingFilters(values(ObjectTypeFilter), selectedFilters)), + set => groupFilters.length > 0 + ? set.add(ObjectTypeFilter.PROJECT) + : set, + set => collectionFilters.length > 0 + ? set.add(ObjectTypeFilter.COLLECTION) + : set, + set => Array.from(set) + )(); + + return { + fb: typeFilters.length > 0 + ? fb.addIsA('uuid', typeFilters.map(dataObjectTypeToResourceKind)) + : fb.addIsA('uuid', ResourceKind.NONE), + selectedFilters, + }; +}; + const collectionTypeToPropertyValue = (type: CollectionTypeFilter) => { switch (type) { case CollectionTypeFilter.GENERAL_COLLECTION: @@ -283,6 +348,9 @@ const buildProcessTypeFilters = ({ fb, filters, use_prefix }: { fb: FilterBuilde } }; +/** + * Serializes general resource type filters with prefix for group contents API + */ export const serializeResourceTypeFilters = pipe( createFiltersBuilder, serializeObjectTypeFilters, @@ -292,6 +360,17 @@ export const serializeResourceTypeFilters = pipe( ({ fb }) => fb.getFilters(), ); +/** + * Serializes data tab resource type filters with prefix for group contents API + */ +export const serializeDataResourceTypeFilters = pipe( + createFiltersBuilder, + serializeDataObjectTypeFilters, + serializeGroupTypeFilters, + serializeCollectionTypeFilters, + ({ fb }) => fb.getFilters(), +); + export const serializeOnlyProcessTypeFilters = pipe( createFiltersBuilder, ({ fb, selectedFilters }: ReturnType) => pipe( @@ -305,6 +384,27 @@ export const serializeOnlyProcessTypeFilters = pipe( ({ fb }) => fb.getFilters(), ); +/** + * Serializes process type filters with prefix for group contents request + * Uses buildProcessTypeFilters to disable filters when no process type is selected + */ +export const serializeProcessTypeGroupContentsFilters = pipe( + createFiltersBuilder, + ({fb, selectedFilters }): ReturnType => ({ + fb: fb.addIsA('uuid', [ResourceKind.PROCESS]), + selectedFilters, + }), + ({ fb, selectedFilters }: ReturnType) => pipe( + () => getMatchingFilters(values(ProcessTypeFilter), selectedFilters), + filters => filters, + mappedFilters => ({ + fb: buildProcessTypeFilters({ fb, filters: mappedFilters, use_prefix: true }), + selectedFilters + }) + )(), + ({ fb }) => fb.getFilters(), +); + export const serializeSimpleObjectTypeFilters = (filters: Tree) => { return getSelectedNodes(filters) .map(f => f.id)