X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2badeb3fe6beb308b952ab2b7101ed4547c04e10..e4c3defe5d79926d86f49ba83cfe3125261481cb:/src/views/workbench/workbench.tsx diff --git a/src/views/workbench/workbench.tsx b/src/views/workbench/workbench.tsx index 3637528d49..160e12f840 100644 --- a/src/views/workbench/workbench.tsx +++ b/src/views/workbench/workbench.tsx @@ -20,6 +20,7 @@ import { sidePanelActions } from '../../store/side-panel/side-panel-action'; import { SidePanel, SidePanelItem } from '../../components/side-panel/side-panel'; import { ItemMode, setProjectItem } from "../../store/navigation/navigation-action"; import { projectActions } from "../../store/project/project-action"; +import { collectionCreateActions } from '../../store/collections/creator/collection-creator-action'; import { ProjectPanel } from "../project-panel/project-panel"; import { DetailsPanel } from '../../views-components/details-panel/details-panel'; import { ArvadosTheme } from '../../common/custom-theme'; @@ -28,7 +29,7 @@ import { authService } from '../../services/services'; import { detailsPanelActions, loadDetails } from "../../store/details-panel/details-panel-action"; import { contextMenuActions } from "../../store/context-menu/context-menu-actions"; -import { sidePanelData, SidePanelIdentifiers } from '../../store/side-panel/side-panel-reducer'; +import { SidePanelIdentifiers } from '../../store/side-panel/side-panel-reducer'; import { ProjectResource } from '../../models/project'; import { ResourceKind } from '../../models/resource'; import { ContextMenu, ContextMenuKind } from "../../views-components/context-menu/context-menu"; @@ -36,6 +37,10 @@ import { FavoritePanel, FAVORITE_PANEL_ID } from "../favorite-panel/favorite-pan import { CurrentTokenDialog } from '../../views-components/current-token-dialog/current-token-dialog'; import { dataExplorerActions } from '../../store/data-explorer/data-explorer-action'; import { Snackbar } from '../../views-components/snackbar/snackbar'; +import { CreateCollectionDialog } from '../../views-components/create-collection-dialog/create-collection-dialog'; +import { CollectionPanel } from '../collection-panel/collection-panel'; +import { loadCollection } from '../../store/collection-panel/collection-panel-action'; +import { getCollectionUrl } from '../../models/collection'; const drawerWidth = 240; const appBarHeight = 100; @@ -212,6 +217,7 @@ export const Workbench = withStyles(styles)( + {user && } @@ -219,6 +225,7 @@ export const Workbench = withStyles(styles)( + ) => this.props.dispatch(loadCollection(collectionId, ResourceKind.COLLECTION))} + onContextMenu={(event, item) => { + this.openContextMenu(event, { + uuid: item.uuid, + name: item.name, + kind: ContextMenuKind.COLLECTION + }); + }} + {...props} /> + renderProjectPanel = (props: RouteComponentProps<{ id: string }>) => this.props.dispatch(setProjectItem(itemId, ItemMode.ACTIVE))} onContextMenu={(event, item) => { + const kind = item.kind === ResourceKind.PROJECT ? ContextMenuKind.PROJECT : ContextMenuKind.RESOURCE; this.openContextMenu(event, { uuid: item.uuid, @@ -237,13 +256,21 @@ export const Workbench = withStyles(styles)( kind }); }} - onDialogOpen={this.handleCreationDialogOpen} + onProjectCreationDialogOpen={this.handleProjectCreationDialogOpen} + onCollectionCreationDialogOpen={this.handleCollectionCreationDialogOpen} onItemClick={item => { this.props.dispatch(loadDetails(item.uuid, item.kind as ResourceKind)); }} onItemDoubleClick={item => { - this.props.dispatch(setProjectItem(item.uuid, ItemMode.ACTIVE)); - this.props.dispatch(loadDetails(item.uuid, ResourceKind.PROJECT)); + switch (item.kind) { + case ResourceKind.COLLECTION: + this.props.dispatch(loadCollection(item.uuid, item.kind as ResourceKind)); + this.props.dispatch(push(getCollectionUrl(item.uuid))); + default: + this.props.dispatch(setProjectItem(item.uuid, ItemMode.ACTIVE)); + this.props.dispatch(loadDetails(item.uuid, item.kind as ResourceKind)); + } + }} {...props} /> @@ -257,14 +284,21 @@ export const Workbench = withStyles(styles)( kind, }); }} - onDialogOpen={this.handleCreationDialogOpen} + onDialogOpen={this.handleProjectCreationDialogOpen} onItemClick={item => { this.props.dispatch(loadDetails(item.uuid, item.kind as ResourceKind)); }} onItemDoubleClick={item => { - this.props.dispatch(loadDetails(item.uuid, ResourceKind.PROJECT)); - this.props.dispatch(setProjectItem(item.uuid, ItemMode.ACTIVE)); - this.props.dispatch(sidePanelActions.TOGGLE_SIDE_PANEL_ITEM_ACTIVE(SidePanelIdentifiers.PROJECTS)); + switch (item.kind) { + case ResourceKind.COLLECTION: + this.props.dispatch(loadCollection(item.uuid, item.kind as ResourceKind)); + this.props.dispatch(push(getCollectionUrl(item.uuid))); + default: + this.props.dispatch(loadDetails(item.uuid, ResourceKind.PROJECT)); + this.props.dispatch(setProjectItem(item.uuid, ItemMode.ACTIVE)); + this.props.dispatch(sidePanelActions.TOGGLE_SIDE_PANEL_ITEM_ACTIVE(SidePanelIdentifiers.PROJECTS)); + } + }} {...props} /> @@ -303,10 +337,14 @@ export const Workbench = withStyles(styles)( } } - handleCreationDialogOpen = (itemUuid: string) => { + handleProjectCreationDialogOpen = (itemUuid: string) => { this.props.dispatch(projectActions.OPEN_PROJECT_CREATOR({ ownerUuid: itemUuid })); } + handleCollectionCreationDialogOpen = (itemUuid: string) => { + this.props.dispatch(collectionCreateActions.OPEN_COLLECTION_CREATOR({ ownerUuid: itemUuid })); + } + openContextMenu = (event: React.MouseEvent, resource: { name: string; uuid: string; kind: ContextMenuKind; }) => { event.preventDefault(); this.props.dispatch(