1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import { connect, Dispatch, DispatchProp } from "react-redux";
6 import { RootState } from "../../store/store";
7 import actions from "../../store/context-menu/context-menu-actions";
8 import ContextMenu, { ContextMenuAction, ContextMenuProps } from "../../components/context-menu/context-menu";
9 import { createAnchorAt } from "../../components/popover/helpers";
10 import projectActions from "../../store/project/project-action";
11 import { ContextMenuResource, ContextMenuKind } from "../../store/context-menu/context-menu-reducer";
14 type DataProps = Pick<ContextMenuProps, "anchorEl" | "actions"> & { resource?: ContextMenuResource };
15 const mapStateToProps = (state: RootState): DataProps => {
16 const { position, resource } = state.contextMenu;
18 anchorEl: resource ? createAnchorAt(position) : undefined,
19 actions: resource ? menuActions[resource.kind] : [],
24 type ActionProps = Pick<ContextMenuProps, "onClose"> & { onActionClick: (action: ContextMenuAction, resource?: ContextMenuResource) => void };
25 const mapDispatchToProps = (dispatch: Dispatch): ActionProps => ({
27 dispatch(actions.CLOSE_CONTEXT_MENU());
29 onActionClick: (action: ContextMenuAction, resource?: ContextMenuResource) => {
30 dispatch(actions.CLOSE_CONTEXT_MENU());
32 if (action.name === "New project") {
33 dispatch(projectActions.OPEN_PROJECT_CREATOR({ ownerUuid: resource.uuid }));
39 const mergeProps = ({ resource, ...dataProps }: DataProps, actionProps: ActionProps): ContextMenuProps => ({
42 onActionClick: (action: ContextMenuAction) => {
43 actionProps.onActionClick(action, resource);
47 export default connect(mapStateToProps, mapDispatchToProps, mergeProps)(ContextMenu);
50 [ContextMenuKind.RootProject]: [[{
51 icon: "fas fa-plus fa-fw",
54 [ContextMenuKind.Project]: [[{
55 icon: "fas fa-plus fa-fw",
58 icon: "fas fa-users fa-fw",
61 icon: "fas fa-sign-out-alt fa-fw",
64 icon: "fas fa-star fa-fw",
65 name: "Add to favourite"
67 icon: "fas fa-edit fa-fw",
70 icon: "fas fa-copy fa-fw",
73 icon: "fas fa-download fa-fw",
76 icon: "fas fa-trash-alt fa-fw",
80 [ContextMenuKind.Collection]: [[{
81 icon: "fas fa-users fa-fw",
84 icon: "fas fa-sign-out-alt fa-fw",
87 icon: "fas fa-star fa-fw",
88 name: "Add to favourite"
90 icon: "fas fa-edit fa-fw",
93 icon: "fas fa-copy fa-fw",
96 icon: "fas fa-download fa-fw",
99 icon: "fas fa-trash-alt fa-fw",