import React, { useState, useEffect } from 'react'; import { useParams, useNavigate, useOutletContext } from 'react-router-dom'; import { Task } from "@dhx/trial-react-gantt"; import { DatePicker } from '@mui/x-date-pickers/DatePicker'; import dayjs, { Dayjs } from 'dayjs'; import Button from "@mui/material/Button"; import TextField from "@mui/material/TextField"; import Slider from "@mui/material/Slider"; import Box from "@mui/material/Box"; import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import type { GanttEditorContext } from './GanttEditorViewDemo'; export default function TaskEditor() { useEffect(() => { document.title = "DHTMLX React Gantt | Custom Edit View | Task Editor"; }, []); const { id } = useParams(); const navigate = useNavigate(); const { tasks, handleSaveTask, handleDeleteTask } = useOutletContext(); const numId = Number(id); const existing = tasks.find(t => t.id === numId) || { id: numId, text: "", progress: 0, duration: 1, start_date: new Date(), }; const [formData, setFormData] = useState({ ...existing }); const [startDateValue, setStartDateValue] = useState( dayjs(formData.start_date) ); function handleChange(field: keyof Task, value: any) { setFormData((prev:Task) => ({ ...prev, [field]: value })); } function handleSave() { handleSaveTask(formData); navigate(".."); } function handleDelete() { handleDeleteTask(String(formData.id)); navigate(".."); } function handleCancel() { navigate(".."); } return ( Editing Task {formData.id} handleChange("text", e.target.value)} /> { if (newVal) { setStartDateValue(newVal); handleChange("start_date", newVal.toDate()); } }} /> handleChange("duration", parseInt(e.target.value, 10) || 1)} /> Progress (%) { const fraction = (Array.isArray(val) ? val[0] : val) / 100; handleChange("progress", fraction); }} valueLabelDisplay="auto" sx={{ mb: 3 }} /> ); }