X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/45db37b6e6c4060b8445b98f8b9264c6ecaa985b..4b961d16b8f8ef8afbd13697a79fe4684acd0416:/src/store/resource-type-filters/resource-type-filters.ts diff --git a/src/store/resource-type-filters/resource-type-filters.ts b/src/store/resource-type-filters/resource-type-filters.ts index d95ae5a4..a6abf44b 100644 --- a/src/store/resource-type-filters/resource-type-filters.ts +++ b/src/store/resource-type-filters/resource-type-filters.ts @@ -2,8 +2,8 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { pipe, values, includes, __ } from 'lodash/fp'; -import { createTree, setNode, TreeNodeStatus, TreeNode } from '~/models/tree'; +import { difference, pipe, values, includes, __ } from 'lodash/fp'; +import { createTree, setNode, TreeNodeStatus, TreeNode, Tree } from '~/models/tree'; import { DataTableFilterItem, DataTableFilters } from '~/components/data-table-filters/data-table-filters-tree'; import { ResourceKind } from '~/models/resource'; import { FilterBuilder } from '~/services/api/filter-builder'; @@ -35,6 +35,13 @@ const initFilter = (name: string, parent = '') => status: TreeNodeStatus.LOADED, }); +export const getSimpleObjectTypeFilters = pipe( + (): DataTableFilters => createTree(), + initFilter(ObjectTypeFilter.PROJECT), + initFilter(ObjectTypeFilter.PROCESS), + initFilter(ObjectTypeFilter.COLLECTION), +); + export const getInitialResourceTypeFilters = pipe( (): DataTableFilters => createTree(), initFilter(ObjectTypeFilter.PROJECT), @@ -45,6 +52,14 @@ export const getInitialResourceTypeFilters = pipe( initFilter(CollectionTypeFilter.LOG_COLLECTION, ObjectTypeFilter.COLLECTION), ); +export const getTrashPanelTypeFilters = pipe( + (): DataTableFilters => createTree(), + initFilter(ObjectTypeFilter.PROJECT), + initFilter(ObjectTypeFilter.COLLECTION), + initFilter(CollectionTypeFilter.GENERAL_COLLECTION, ObjectTypeFilter.COLLECTION), + initFilter(CollectionTypeFilter.OUTPUT_COLLECTION, ObjectTypeFilter.COLLECTION), + initFilter(CollectionTypeFilter.LOG_COLLECTION, ObjectTypeFilter.COLLECTION), +); const createFiltersBuilder = (filters: DataTableFilters) => ({ fb: new FilterBuilder(), selectedFilters: getSelectedNodes(filters) }); @@ -98,16 +113,37 @@ const serializeCollectionTypeFilters = ({ fb, selectedFilters }: ReturnType getMatchingFilters(values(CollectionTypeFilter), selectedFilters), filters => filters.map(collectionTypeToPropertyValue), mappedFilters => ({ - fb: mappedFilters.length > 0 - ? fb.addIn('type', mappedFilters, `${GroupContentsResourcePrefix.COLLECTION}.properties`) - : fb, + fb: buildCollectiomTypeFilters({ fb, filters: mappedFilters }), selectedFilters }) )(); +const COLLECTION_TYPES = values(CollectionType); + +const NON_GENERAL_COLLECTION_TYPES = difference(COLLECTION_TYPES, [CollectionType.GENERAL]); + +const COLLECTION_PROPERTIES_PREFIX = `${GroupContentsResourcePrefix.COLLECTION}.properties`; + +const buildCollectiomTypeFilters = ({ fb, filters }: { fb: FilterBuilder, filters: CollectionType[] }) => { + switch (true) { + case filters.length === 0 || filters.length === COLLECTION_TYPES.length: + return fb; + case includes(CollectionType.GENERAL, filters): + return fb.addNotIn('type', difference(NON_GENERAL_COLLECTION_TYPES, filters), COLLECTION_PROPERTIES_PREFIX); + default: + return fb.addIn('type', filters, COLLECTION_PROPERTIES_PREFIX); + } +}; + export const serializeResourceTypeFilters = pipe( createFiltersBuilder, serializeObjectTypeFilters, serializeCollectionTypeFilters, ({ fb }) => fb.getFilters(), ); + +export const serializeSimpleObjectTypeFilters = (filters: Tree) => { + return getSelectedNodes(filters) + .map(f => f.id) + .map(objectTypeToResourceKind); +};