import { Box, Button, IconButton, ListItemIcon, ListItemText, Menu, MenuItem, Theme } from "@mui/material"; import MoreIcon from "@mui/icons-material/MoreVert"; import ShareObjectIcon from "@mui/icons-material/Share"; import ObjectUsersIcon from "@mui/icons-material/AccountCircle"; import ObjectTeamsIcon from "@mui/icons-material/SupervisedUserCircle"; import { pond } from "protobuf-ts/pond"; import React, { useState } from "react"; import ObjectUsers from "user/ObjectUsers"; import ShareObject from "user/ShareObject"; import { isOffline } from "utils/environment"; import ObjectTeams from "teams/ObjectTeams"; import { planScope, HarvestPlan, Field } from "models"; import HarvestSettings from "./HarvestSettings"; import DuplicateHarvestPlan from "./DuplicateHarvestPlan"; import { Edit } from "@mui/icons-material"; import { makeStyles } from "@mui/styles"; import { blue } from "@mui/material/colors"; const useStyles = makeStyles((theme: Theme) => ({ shareIcon: { color: blue["500"], "&:hover": { color: blue["600"] } }, removeIcon: { color: "var(--status-alert)" }, red: { color: "var(--status-alert)" } })); interface Props { plan: HarvestPlan; planField: Field; fieldList: Field[]; permissions: pond.Permission[]; refreshCallback: (updatedPlan?: HarvestPlan) => void; hideNew?: boolean; } interface OpenState { share: boolean; users: boolean; teams: boolean; settings: boolean; removeSelf: boolean; duplicate: boolean; } export default function HarvestPlanActions(props: Props) { const classes = useStyles(); const { plan, planField, fieldList, permissions, refreshCallback, hideNew } = props; const [anchorEl, setAnchorEl] = React.useState(null); const [openState, setOpenState] = useState({ share: false, users: false, teams: false, settings: false, removeSelf: false, duplicate: false }); const [updatePlan, setUpdatePlan] = useState(false); const groupMenu = () => { const canShare = permissions.includes(pond.Permission.PERMISSION_SHARE); const canManageUsers = permissions.includes(pond.Permission.PERMISSION_USERS); return ( setAnchorEl(null)} keepMounted disableAutoFocusItem> {!isOffline() && planField.permissions.includes(pond.Permission.PERMISSION_WRITE) && !hideNew && ( { setUpdatePlan(false); setOpenState({ ...openState, settings: true }); setAnchorEl(null); }}> )} {!isOffline() && planField.permissions.includes(pond.Permission.PERMISSION_WRITE) && ( { setOpenState({ ...openState, duplicate: true }); setAnchorEl(null); }}> )} {!isOffline() && canShare && ( { setOpenState({ ...openState, share: true }); setAnchorEl(null); }}> )} {!isOffline() && canManageUsers && ( { setOpenState({ ...openState, users: true }); setAnchorEl(null); }}> )} {!isOffline() && canManageUsers && ( { setOpenState({ ...openState, teams: true }); setAnchorEl(null); }}> )} ); }; const dialogs = () => { const key = plan.key(); const label = plan.settings.title; return ( { setOpenState({ ...openState, settings: false }); if (refresh) { refreshCallback(updatedPlan); } }} /> { setOpenState({ ...openState, duplicate: false }); refreshCallback(); }} fields={fieldList} plan={plan} /> setOpenState({ ...openState, share: false })} /> setOpenState({ ...openState, users: false })} refreshCallback={refreshCallback} /> setOpenState({ ...openState, teams: false })} /> ); }; return ( {plan.key() !== "" && ( )} ) => setAnchorEl(event.currentTarget) }> {groupMenu()} {dialogs()} ); }