X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/9d13b7b84e145646fe3d5e61e26a2ceead76d039..8edacc9b2dac6520ace9a2d420979bbeb5558a6f:/src/views-components/collection-panel-files/collection-panel-files.ts diff --git a/src/views-components/collection-panel-files/collection-panel-files.ts b/src/views-components/collection-panel-files/collection-panel-files.ts index 7836e1f794..3cc3569d43 100644 --- a/src/views-components/collection-panel-files/collection-panel-files.ts +++ b/src/views-components/collection-panel-files/collection-panel-files.ts @@ -29,14 +29,16 @@ const memoizedMapStateToProps = () => { let prevState: CollectionPanelFilesState; let prevTree: Array>; - return (state: RootState): Pick => { + return (state: RootState): Pick => { if (prevState !== state.collectionPanelFiles) { prevState = state.collectionPanelFiles; - prevTree = getNodeChildrenIds('')(state.collectionPanelFiles) - .map(collectionItemToTreeItem(state.collectionPanelFiles)); + prevTree = [].concat.apply( + [], getNodeChildrenIds('')(state.collectionPanelFiles) + .map(collectionItemToList(0)(state.collectionPanelFiles))); } return { - items: prevTree + items: prevTree, + currentItemUuid: state.detailsPanel.resourceUuid }; }; }; @@ -51,11 +53,22 @@ const mapDispatchToProps = (dispatch: Dispatch): Pick { dispatch(collectionPanelFilesAction.TOGGLE_COLLECTION_FILE_SELECTION({ id: item.id })); }, - onItemMenuOpen: (event, item) => { - dispatch(openContextMenu(event, { menuKind: ContextMenuKind.COLLECTION_FILES_ITEM, kind: ResourceKind.COLLECTION, name: item.data.name, uuid: item.id, ownerUuid: '' })); + onItemMenuOpen: (event, item, isWritable) => { + dispatch(openContextMenu( + event, + { + menuKind: isWritable + ? ContextMenuKind.COLLECTION_FILES_ITEM + : ContextMenuKind.READONLY_COLLECTION_FILES_ITEM, + kind: ResourceKind.COLLECTION, + name: item.data.name, + uuid: item.id, + ownerUuid: '' + } + )); }, - onOptionsMenuOpen: (event) => { - dispatch(openCollectionFilesContextMenu(event)); + onOptionsMenuOpen: (event, isWritable) => { + dispatch(openCollectionFilesContextMenu(event, isWritable)); }, onFileClick: (id) => { dispatch(openDetailsPanel(id)); @@ -65,6 +78,43 @@ const mapDispatchToProps = (dispatch: Dispatch): Pick (tree: Tree) => + (id: string): TreeItem[] => { + const node: TreeNode = getNode(id)(tree) || initTreeNode({ + id: '', + parent: '', + value: { + ...createCollectionDirectory({ name: 'Invalid file' }), + selected: false, + collapsed: true + } + }); + + const treeItem = { + active: false, + data: { + name: node.value.name, + size: node.value.type === CollectionFileType.FILE ? node.value.size : undefined, + type: node.value.type, + url: node.value.url, + }, + id: node.id, + items: [], // Not used in this case as we're converting a tree to a list. + itemCount: node.children.length, + open: node.value.type === CollectionFileType.DIRECTORY ? !node.value.collapsed : false, + selected: node.value.selected, + status: TreeItemStatus.LOADED, + level, + }; + + const treeItemChilds = [].concat.apply([], node.children.map(collectionItemToList(level+1)(tree))); + + return [ + treeItem, + ...treeItemChilds, + ]; + }; + const collectionItemToTreeItem = (tree: Tree) => (id: string): TreeItem => { const node: TreeNode = getNode(id)(tree) || initTreeNode({