import { useState } from "react"; import { Dialog, DialogTitle, DialogContent, TextField, DialogActions, Button, Switch, FormControlLabel, } from "@mui/material"; import { Target } from "@/types/target"; type TargetEditProps = { open: boolean; target: Target; onClose: () => void; onSave: (updatedTarget: Target) => void; }; const TargetEdit = ({ open, target, onClose, onSave }: TargetEditProps) => { const [formData, setFormData] = useState({ ...target }); const [loading, setLoading] = useState(false); const handleChange = (field: keyof Target, value: string | boolean) => { setFormData((prev) => ({ ...prev, [field]: value })); }; const handleSave = async () => { setLoading(true); try { const response = await fetch(`/api/targets/${formData.id}`, { method: "PUT", headers: { "Content-Type": "application/json" }, body: JSON.stringify(formData), }); if (!response.ok) throw new Error("Failed to update"); const updatedTarget = await response.json(); onSave(updatedTarget); // Update UI optimistically onClose(); } catch (error) { console.error("Update error:", error); } finally { setLoading(false); } }; return ( Edit Target handleChange("id", e.target.value)} margin="dense" /> handleChange("serverId", e.target.value)} margin="dense" /> handleChange("name", e.target.value)} margin="dense" /> handleChange("databaseName", e.target.value)} margin="dense" /> handleChange("viewName", e.target.value)} margin="dense" /> handleChange("filterQuery", e.target.value)} margin="dense" /> handleChange("allowWriteBack", e.target.checked)} /> } label="Allow Write Back" /> handleChange("isActive", e.target.checked)} /> } label="Active" /> ); }; export default TargetEdit;