X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/b323a94f313671b44a066a2f91dea562e9464d10..37ebbbd4f05f811582546823738619f1fbb97686:/src/views/workbench/workbench.tsx diff --git a/src/views/workbench/workbench.tsx b/src/views/workbench/workbench.tsx index c9b5b671..eaf3a2ee 100644 --- a/src/views/workbench/workbench.tsx +++ b/src/views/workbench/workbench.tsx @@ -26,12 +26,12 @@ import projectActions from "../../store/project/project-action"; import ProjectPanel from "../project-panel/project-panel"; import DetailsPanel from '../../views-components/details-panel/details-panel'; import { ArvadosTheme } from '../../common/custom-theme'; -import ContextMenu, { ContextMenuAction } from '../../components/context-menu/context-menu'; -import { mockAnchorFromMouseEvent } from '../../components/popover/helpers'; +import ContextMenu, { ContextMenuKind } from "../../views-components/context-menu"; import CreateProjectDialog from "../../views-components/create-project-dialog/create-project-dialog"; 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 { SidePanelIdentifiers } from '../../store/side-panel/side-panel-reducer'; import { ProjectResource } from '../../models/project'; import { ResourceKind } from '../../models/resource'; @@ -57,10 +57,6 @@ interface NavMenuItem extends MainAppBarMenuItem { } interface WorkbenchState { - contextMenu: { - anchorEl?: HTMLElement; - itemUuid?: string; - }; anchorEl: any; searchText: string; menuItems: { @@ -73,10 +69,6 @@ interface WorkbenchState { class Workbench extends React.Component { state = { - contextMenu: { - anchorEl: undefined, - itemUuid: undefined - }, isCreationDialogOpen: false, anchorEl: null, searchText: "", @@ -137,11 +129,11 @@ class Workbench extends React.Component { toggleOpen={this.toggleSidePanelOpen} toggleActive={this.toggleSidePanelActive} sidePanelItems={this.props.sidePanelItems} - onContextMenu={(event) => this.openContextMenu(event, authService.getUuid() || "")}> + onContextMenu={(event) => this.openContextMenu(event, authService.getUuid() || "", ContextMenuKind.RootProject)}> this.props.dispatch(setProjectItem(itemId, ItemMode.OPEN))} - onContextMenu={(event, item) => this.openContextMenu(event, item.data.uuid)} + onContextMenu={(event, item) => this.openContextMenu(event, item.data.uuid, ContextMenuKind.Project)} toggleActive={itemId => { this.props.dispatch(setProjectItem(itemId, ItemMode.ACTIVE)); this.props.dispatch(loadDetails(itemId, ResourceKind.Project)); @@ -155,13 +147,9 @@ class Workbench extends React.Component { - + { user && } - + ); @@ -169,7 +157,7 @@ class Workbench extends React.Component { renderProjectPanel = (props: RouteComponentProps<{ id: string }>) => this.props.dispatch(setProjectItem(itemId, ItemMode.ACTIVE))} - onContextMenu={(event, item) => this.openContextMenu(event, item.uuid)} + onContextMenu={(event, item) => this.openContextMenu(event, item.uuid, ContextMenuKind.Project)} onDialogOpen={this.handleCreationDialogOpen} onItemClick={item => { this.props.dispatch(loadDetails(item.uuid, item.kind as ResourceKind)); @@ -194,7 +182,7 @@ class Workbench extends React.Component { this.props.dispatch(detailsPanelActions.TOGGLE_DETAILS_PANEL()); }, onContextMenu: (event: React.MouseEvent, breadcrumb: NavBreadcrumb) => { - this.openContextMenu(event, breadcrumb.itemId); + this.openContextMenu(event, breadcrumb.itemId, ContextMenuKind.Project); } }; @@ -209,60 +197,21 @@ class Workbench extends React.Component { } handleCreationDialogOpen = (itemUuid: string) => { - this.closeContextMenu(); this.props.dispatch(projectActions.OPEN_PROJECT_CREATOR({ ownerUuid: itemUuid })); } - - openContextMenu = (event: React.MouseEvent, itemUuid: string) => { + openContextMenu = (event: React.MouseEvent, itemUuid: string, kind: ContextMenuKind) => { event.preventDefault(); - this.setState({ - contextMenu: { - anchorEl: mockAnchorFromMouseEvent(event), - itemUuid - } - }); - } - - closeContextMenu = () => { - this.setState({ contextMenu: {} }); + this.props.dispatch( + contextMenuActions.OPEN_CONTEXT_MENU({ + position: { x: event.clientX, y: event.clientY }, + resource: { uuid: itemUuid, kind } + }) + ); } - openCreateDialog = (item: ContextMenuAction) => { - const { itemUuid } = this.state.contextMenu; - if (item.openCreateDialog && itemUuid) { - this.handleCreationDialogOpen(itemUuid); - } - } -} -const contextMenuActions = [[{ - icon: "fas fa-plus fa-fw", - name: "New project", - openCreateDialog: true -}, { - icon: "fas fa-users fa-fw", - name: "Share" -}, { - icon: "fas fa-sign-out-alt fa-fw", - name: "Move to" -}, { - icon: "fas fa-star fa-fw", - name: "Add to favourite" -}, { - icon: "fas fa-edit fa-fw", - name: "Rename" -}, { - icon: "fas fa-copy fa-fw", - name: "Make a copy" -}, { - icon: "fas fa-download fa-fw", - name: "Download" -}], [{ - icon: "fas fa-trash-alt fa-fw", - name: "Remove" } -]]; const drawerWidth = 240; const appBarHeight = 100;