import { Box, Card, CardActionArea, Grid2 as Grid, IconButton, ListItemIcon, ListItemText, Menu, MenuItem, Typography } from "@mui/material"; import { makeStyles } from "@mui/styles"; import { useCallback, useEffect, useState } from "react"; import { Task } from "models"; import { useGlobalState } from "providers"; import { useUserAPI } from "hooks"; import { Done, MoreVert } from "@mui/icons-material"; import Edit from "@mui/icons-material/Edit"; import DeleteIcon from "@mui/icons-material/Delete"; import { red } from "@mui/material/colors"; import { pond } from "protobuf-ts/pond"; import { taskScope } from "models/Scope"; import EventBlocker from "common/EventBlocker"; interface Props { task: Task; reLoad: () => void; editTaskMethod: (task: Task) => void; markComplete: (task: Task) => void; deleteTask: (task: Task) => void; openTaskPage: (taskId: string) => void; } const useStyles = makeStyles(() => ({ red: { color: red["500"] } }) ); export default function TaskCard(props: Props) { const monthList = [ "Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec" ]; const [month, setMonth] = useState(0); const [day, setDay] = useState(0); const classes = useStyles(); const [permissions, setPermissions] = useState([]); const [{ user }] = useGlobalState(); const userAPI = useUserAPI(); const [menuAnchorEl, setMenuAnchorEl] = useState(null); const loadPermissions = useCallback(() => { let scope = taskScope(props.task.key); userAPI .getUser(user.id(), scope) .then(resp => { setPermissions(resp.permissions); }) .catch(err => {}); }, [props.task, userAPI, user]); useEffect(() => { loadPermissions(); }, [loadPermissions]); const openTaskPage = () => { props.openTaskPage(props.task.key); }; useEffect(() => { let date = new Date(props.task.start()); setMonth(date.getUTCMonth()); setDay(date.getUTCDate()); }, [props.task]); const taskActions = () => { return ( setMenuAnchorEl(null)} disableAutoFocusItem> { props.markComplete(props.task); setMenuAnchorEl(null); }}> {permissions.includes(pond.Permission.PERMISSION_WRITE) && ( { props.editTaskMethod(props.task); setMenuAnchorEl(null); }}> )} {permissions.includes(pond.Permission.PERMISSION_WRITE) && ( { props.deleteTask(props.task); setMenuAnchorEl(null); }}> )} ); }; return ( {monthList[month]} {day} {props.task.title()} {props.task.description()} setMenuAnchorEl(event.currentTarget)}> {taskActions()} ); }