X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/4af7aea9d89d1775a79288cb9433e0ec9e1176e4..50939103cce489919423adcf8292d2f960a180fb:/src/store/tree-picker/tree-picker-actions.ts diff --git a/src/store/tree-picker/tree-picker-actions.ts b/src/store/tree-picker/tree-picker-actions.ts index 06f73c34..9ca6184a 100644 --- a/src/store/tree-picker/tree-picker-actions.ts +++ b/src/store/tree-picker/tree-picker-actions.ts @@ -3,7 +3,7 @@ // SPDX-License-Identifier: AGPL-3.0 import { unionize, ofType, UnionOf } from "~/common/unionize"; -import { TreeNode, initTreeNode, getNodeDescendants, getNodeDescendantsIds, getNodeValue, TreeNodeStatus } from '~/models/tree'; +import { TreeNode, initTreeNode, getNodeDescendants, getNodeDescendantsIds, getNodeValue, TreeNodeStatus, getNode } from '~/models/tree'; import { Dispatch } from 'redux'; import { RootState } from '~/store/store'; import { ServiceRepository } from '~/services/services'; @@ -12,6 +12,8 @@ import { pipe } from 'lodash/fp'; import { ResourceKind } from '~/models/resource'; import { GroupContentsResource } from '../../services/groups-service/groups-service'; import { CollectionDirectory, CollectionFile } from '../../models/collection-file'; +import { getTreePicker } from './tree-picker'; +import { ProjectsTreePickerItem } from '~/views-components/projects-tree-picker/generic-projects-tree-picker'; export const treePickerActions = unionize({ LOAD_TREE_PICKER_NODE: ofType<{ id: string, pickerId: string }>(), @@ -31,13 +33,13 @@ export const getProjectsTreePickerIds = (pickerId: string) => ({ shared: `${pickerId}_shared`, favorites: `${pickerId}_favorites`, }); -export const initProjectsTreePicker = (pickerId: string) => -async (dispatch: Dispatch, _: () => RootState, services: ServiceRepository) => { - const {home, shared, favorites} = getProjectsTreePickerIds(pickerId); - dispatch(initUserProject(home)); - dispatch(initSharedProject(shared)); - dispatch(initFavoritesProject(favorites)); -}; +export const initProjectsTreePicker = (pickerId: string) => + async (dispatch: Dispatch, _: () => RootState, services: ServiceRepository) => { + const { home, shared, favorites } = getProjectsTreePickerIds(pickerId); + dispatch(initUserProject(home)); + dispatch(initSharedProject(shared)); + dispatch(initFavoritesProject(favorites)); + }; interface ReceiveTreePickerDataParams { data: T[]; @@ -95,22 +97,30 @@ export const loadProject = (params: LoadProjectParams) => }; export const loadCollection = (id: string, pickerId: string) => - async (dispatch: Dispatch, _: () => RootState, services: ServiceRepository) => { + async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { dispatch(treePickerActions.LOAD_TREE_PICKER_NODE({ id, pickerId })); - const files = await services.collectionService.files(id); - const data = getNodeDescendants('')(files).map(node => node.value); - - dispatch(receiveTreePickerData({ - id, - pickerId, - data, - extractNodeData: value => ({ - id: value.id, - status: TreeNodeStatus.LOADED, - value, - }), - })); + const picker = getTreePicker(pickerId)(getState().treePicker); + if (picker) { + + const node = getNode(id)(picker); + if (node && 'kind' in node.value && node.value.kind === ResourceKind.COLLECTION) { + + const files = await services.collectionService.files(node.value.portableDataHash); + const data = getNodeDescendants('')(files).map(node => node.value); + + dispatch(receiveTreePickerData({ + id, + pickerId, + data, + extractNodeData: value => ({ + id: value.id, + status: TreeNodeStatus.LOADED, + value, + }), + })); + } + } };