X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/d60eaaa5549bcd863d4d202aecc2368de1f00db6..ffbfe1965a34800f933b20a32374d9cd9eb7ea72:/src/store/collection-panel/collection-panel-files/collection-panel-files-state.ts diff --git a/src/store/collection-panel/collection-panel-files/collection-panel-files-state.ts b/src/store/collection-panel/collection-panel-files/collection-panel-files-state.ts index 35b81d2e..aa3bd305 100644 --- a/src/store/collection-panel/collection-panel-files/collection-panel-files-state.ts +++ b/src/store/collection-panel/collection-panel-files/collection-panel-files-state.ts @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { Tree, TreeNode, mapTreeValues, getNodeValue } from '~/models/tree'; +import { Tree, TreeNode, mapTreeValues, getNodeValue, getNodeDescendants } from '~/models/tree'; import { CollectionFile, CollectionDirectory, CollectionFileType } from '~/models/collection-file'; export type CollectionPanelFilesState = Tree; @@ -34,4 +34,11 @@ export const mergeCollectionPanelFilesStates = (oldState: CollectionPanelFilesSt : { ...value, selected: oldValue.selected } : value; })(newState); -}; +}; + +export const filterCollectionFilesBySelection = (tree: CollectionPanelFilesState, selected: boolean) => { + const allFiles = getNodeDescendants('')(tree).map(node => node.value); + const selectedDirectories = allFiles.filter(file => file.selected === selected && file.type === CollectionFileType.DIRECTORY); + const selectedFiles = allFiles.filter(file => file.selected === selected && !selectedDirectories.some(dir => dir.id === file.path)); + return [...selectedDirectories, ...selectedFiles]; +};