"use client"; import { useCallback, useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { useTranslation } from "react-i18next"; import { PrinterResult } from "@/app/api/settings/printer"; import { editPrinter, PrinterInputs } from "@/app/api/settings/printer/actions"; import { Box, Button, FormControl, Grid, InputLabel, MenuItem, Select, SelectChangeEvent, Stack, TextField, Typography, } from "@mui/material"; import { Check, ArrowBack } from "@mui/icons-material"; import { successDialog } from "../Swal/CustomAlerts"; type Props = { printer: PrinterResult; }; const EditPrinter: React.FC = ({ printer }) => { const { t } = useTranslation("common"); const router = useRouter(); const [isSubmitting, setIsSubmitting] = useState(false); const [formData, setFormData] = useState({ name: printer.name || "", ip: printer.ip || "", port: printer.port || undefined, type: printer.type || "", dpi: printer.dpi || undefined, }); useEffect(() => { if (formData.type !== "Label") { setFormData((prev) => ({ ...prev, dpi: undefined })); } }, [formData.type]); const handleChange = useCallback((field: keyof PrinterInputs) => { return (e: React.ChangeEvent) => { const value = e.target.value; setFormData((prev) => ({ ...prev, [field]: field === "port" || field === "dpi" ? (value === "" ? undefined : parseInt(value, 10)) : value, })); }; }, []); const handleTypeChange = useCallback((e: SelectChangeEvent) => { const value = e.target.value; setFormData((prev) => ({ ...prev, type: value, })); }, []); const handleSubmit = useCallback(async () => { setIsSubmitting(true); try { await editPrinter(printer.id, formData); successDialog(t("Save") || "儲存成功", t); router.push("/settings/printer"); router.refresh(); } catch (error) { console.error("Failed to update printer:", error); const errorMessage = error instanceof Error ? error.message : (t("Error saving data") || "儲存失敗"); alert(errorMessage); } finally { setIsSubmitting(false); } }, [formData, printer.id, router, t]); return ( {t("Type")} ); }; export default EditPrinter;