import { Avatar, Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, Grid2 as Grid, InputAdornment, MenuItem, TextField } from "@mui/material"; import moment from "moment"; import React, { useState } from "react"; import { pond } from "protobuf-ts/pond"; import { useGlobalState, useTaskAPI } from "providers"; import { useSnackbar, useUserAPI } from "hooks"; import { useEffect } from "react"; import { Task, teamScope, User } from "models"; import ColourPicker from "common/ColourPicker"; import ResponsiveDialog from "common/ResponsiveDialog"; interface Props { open: boolean; onClose: (reLoad?: boolean) => void; markComplete?: boolean; startDate?: any; task?: Task; objectKey?: string; type?: string; hasCost?: boolean; costTitle?: string; secondaryCostTitle?: string; } export default function TaskSettings(props: Props) { const [taskName, setTaskName] = useState(""); const [startDate, setStartDate] = useState(moment().format("YYYY-MM-DD")); const [startTime, setStartTime] = useState("00:00"); const [endDate, setEndDate] = useState(""); const [endTime, setEndTime] = useState("00:00"); const [taskDescription, setTaskDescription] = useState(""); const [{ user, as }] = useGlobalState(); const [worker, setWorker] = useState(user.id()); const [colour, setColour] = useState(""); const taskAPI = useTaskAPI(); const { openSnack } = useSnackbar(); const [cost, setCost] = useState(""); const [secondaryCost, setSecondaryCost] = useState(""); const [seedCost, setSeedCost] = useState(""); const [poundPerAcre, setPoundPerAcre] = useState(0); const userAPI = useUserAPI(); const [users, setUsers] = useState([]); useEffect(() => { if (props.task) { setTaskName(props.task.title()); setStartDate(props.task.start()); setStartTime(props.task.startTime()); setEndDate(props.task.end()); setEndTime(props.task.endTime()); setTaskDescription(props.task.description()); setWorker(props.task.worker()); setColour(props.task.settings.colour); setCost(props.task.cost().toString()); setSecondaryCost(props.task.secondaryCost().toString()); } if (props.startDate) { setStartDate(props.startDate); } }, [props.startDate, props.task]); useEffect(() => { if (as === "") { setWorker(user.id()); setUsers([user]); } else { userAPI.listObjectUsers(teamScope(as)).then(resp => { setUsers(resp.data.users.map((u: pond.User) => User.any(u))); }); } }, [as, userAPI, user]); const formComplete = () => { if ( taskName.length < 1 || taskDescription.length < 1 || worker.length < 1 || endDate.length < 1 ) { return false; } else { return true; } }; //saves new tasks into the database const newTask = () => { let taskSettings = pond.TaskSettings.create({ userId: user.id(), title: taskName, start: startDate, startTime: startTime, end: endDate, endTime: endTime, objectKey: props.objectKey ? props.objectKey : user.id(), description: taskDescription, worker: worker, complete: false, colour: colour, type: props.type, cost: !isNaN(parseFloat(cost)) ? Math.round((parseFloat(cost) * 100) / 100) : 0, secondaryCost: !isNaN(parseFloat(secondaryCost)) ? Math.round((parseFloat(secondaryCost) * 100) / 100) : 0 }); let returnTask = Task.create(); returnTask.settings = taskSettings; taskAPI .addTask(taskSettings, as) .then(resp => { props.onClose(true); }) .catch(err => { openSnack("Failed to add new task"); }); props.onClose(); }; const updateTask = () => { let task: Task = Task.any(props.task); task.settings.title = taskName; task.settings.start = startDate; task.settings.startTime = startTime; task.settings.end = endDate; task.settings.endTime = endTime; task.settings.description = taskDescription; task.settings.worker = worker; task.settings.colour = colour; task.settings.cost = !isNaN(parseFloat(cost)) ? Math.round(parseFloat(cost) * 100) / 100 : 0; task.settings.secondaryCost = !isNaN(parseFloat(secondaryCost)) ? Math.round(parseFloat(secondaryCost) * 100) / 100 : 0; taskAPI .updateTask(task.key, task.settings, undefined, as) .then(resp => { props.onClose(true); }) .catch(err => { openSnack("Failed to update task"); }); }; const closeDialog = () => { props.onClose(); }; return ( New Task setTaskName(e.target.value)} /> setTaskDescription(e.target.value)} /> setWorker(e.target.value)}> {users.map(u => ( {u.name()} ))} {props.type === "seed" && ( $, endAdornment: /Lb }} onChange={e => { setSeedCost(e.target.value); setCost((parseFloat(e.target.value) * poundPerAcre).toString()); }} /> Lb/Acre }} onChange={e => { setPoundPerAcre(+e.target.value); setCost((parseFloat(seedCost) * +e.target.value).toString()); }} /> )} {props.hasCost && ( $ }} onChange={e => { setCost(e.target.value); }} /> )} {props.hasCost && ( $ }} onChange={e => { setSecondaryCost(e.target.value); }} /> )} {/* if the calendar was clicked gets the start date from that otherwise it will default to today */} setStartDate(e.target.value)} /> setStartTime(e.target.value)} /> setEndDate(e.target.value)} /> setEndTime(e.target.value)} /> Colour setColour(color)} /> {props.task ? ( ) : ( )} ); }