X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/f83344568cb070f716527288abe88a4ec5b0c305..23064a8e0ced7fb43269434e73d553c0338fd6b8:/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 d912ac13..a26b9fe3 100644 --- a/src/views-components/collection-panel-files/collection-panel-files.ts +++ b/src/views-components/collection-panel-files/collection-panel-files.ts @@ -6,43 +6,23 @@ import { connect } from "react-redux"; import { CollectionPanelFiles as Component, CollectionPanelFilesProps -} from "~/components/collection-panel-files/collection-panel-files"; -import { RootState } from "~/store/store"; -import { TreeItem, TreeItemStatus } from "~/components/tree/tree"; -import { - CollectionPanelDirectory, - CollectionPanelFile, - CollectionPanelFilesState -} from "~/store/collection-panel/collection-panel-files/collection-panel-files-state"; -import { FileTreeData } from "~/components/file-tree/file-tree-data"; +} from "components/collection-panel-files/collection-panel-files"; +import { RootState } from "store/store"; import { Dispatch } from "redux"; -import { collectionPanelFilesAction } from "~/store/collection-panel/collection-panel-files/collection-panel-files-actions"; +import { collectionPanelFilesAction } from "store/collection-panel/collection-panel-files/collection-panel-files-actions"; import { ContextMenuKind } from "../context-menu/context-menu"; -import { getNode, getNodeChildrenIds, Tree, TreeNode, initTreeNode } from "~/models/tree"; -import { CollectionFileType, createCollectionDirectory } from "~/models/collection-file"; -import { openContextMenu, openCollectionFilesContextMenu } from '~/store/context-menu/context-menu-actions'; -import { openUploadCollectionFilesDialog } from '~/store/collections/collection-upload-actions'; -import { ResourceKind } from "~/models/resource"; - -const memoizedMapStateToProps = () => { - let prevState: CollectionPanelFilesState; - let prevTree: Array>; +import { openContextMenu, openCollectionFilesContextMenu } from 'store/context-menu/context-menu-actions'; +import { openUploadCollectionFilesDialog } from 'store/collections/collection-upload-actions'; +import { ResourceKind } from "models/resource"; +import { openDetailsPanel } from 'store/details-panel/details-panel-action'; - return (state: RootState): Pick => { - if (prevState !== state.collectionPanelFiles) { - prevState = state.collectionPanelFiles; - prevTree = getNodeChildrenIds('')(state.collectionPanelFiles) - .map(collectionItemToTreeItem(state.collectionPanelFiles)); - } - return { - items: prevTree - }; - }; -}; +const mapStateToProps = (state: RootState): Pick => ({ + currentItemUuid: state.detailsPanel.resourceUuid +}); -const mapDispatchToProps = (dispatch: Dispatch): Pick => ({ - onUploadDataClick: () => { - dispatch(openUploadCollectionFilesDialog()); +const mapDispatchToProps = (dispatch: Dispatch): Pick => ({ + onUploadDataClick: (targetLocation?: string) => { + dispatch(openUploadCollectionFilesDialog(targetLocation)); }, onCollapseToggle: (id) => { dispatch(collectionPanelFilesAction.TOGGLE_COLLECTION_FILE_COLLAPSE({ id })); @@ -50,41 +30,34 @@ 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) => { + const isDirectory = item.data.type === 'directory'; + dispatch(openContextMenu( + event, + { + menuKind: isWritable + ? isDirectory + ? ContextMenuKind.COLLECTION_DIRECTORY_ITEM + : ContextMenuKind.COLLECTION_FILE_ITEM + : isDirectory + ? ContextMenuKind.READONLY_COLLECTION_DIRECTORY_ITEM + : ContextMenuKind.READONLY_COLLECTION_FILE_ITEM, + kind: ResourceKind.COLLECTION, + name: item.data.name, + uuid: item.id, + ownerUuid: '' + } + )); + }, + onSearchChange: (searchValue: string) => { + dispatch(collectionPanelFilesAction.ON_SEARCH_CHANGE(searchValue)); }, - onOptionsMenuOpen: (event) => { - dispatch(openCollectionFilesContextMenu(event)); + onOptionsMenuOpen: (event, isWritable) => { + dispatch(openCollectionFilesContextMenu(event, isWritable)); + }, + onFileClick: (id) => { + dispatch(openDetailsPanel(id)); }, }); - -export const CollectionPanelFiles = connect(memoizedMapStateToProps(), mapDispatchToProps)(Component); - -const collectionItemToTreeItem = (tree: Tree) => - (id: string): TreeItem => { - const node: TreeNode = getNode(id)(tree) || initTreeNode({ - id: '', - parent: '', - value: { - ...createCollectionDirectory({ name: 'Invalid file' }), - selected: false, - collapsed: true - } - }); - return { - 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: getNodeChildrenIds(node.id)(tree) - .map(collectionItemToTreeItem(tree)), - open: node.value.type === CollectionFileType.DIRECTORY ? !node.value.collapsed : false, - selected: node.value.selected, - status: TreeItemStatus.LOADED - }; - }; +export const CollectionPanelFiles = connect(mapStateToProps, mapDispatchToProps)(Component);