import { TitleIconBg } from "@/components/bs-comp/cardComponent"; import { Button } from "@/components/bs-ui/button"; import { DialogClose, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "@/components/bs-ui/dialog"; import { Input, Textarea } from "@/components/bs-ui/input"; import { useToast } from "@/components/bs-ui/toast/use-toast"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import npcIcon from "../../../../assets/npc/npcIcon.png"; import huifumoren from "../../../../assets/npc/huifumoren.png"; import { uploadNpcHeaderLibFileWithProgress } from "@/modals/UploadModal/upload"; export default function EditAssistantDialog({ name, desc, avatar_img, avatar_color, onSave }) { const { t } = useTranslation() // State for form fields const [formData, setFormData] = useState({ name: '', desc: '', avatar_img: '', avatar_color: '' }); useEffect(() => { setFormData({ name, desc, avatar_img, avatar_color }) }, [name, desc, avatar_img, avatar_color]) console.log(formData, name, desc, avatar_img, avatar_color); // State for errors const [errors, setErrors] = useState({}); // Validate form fields const validateField = (name, value) => { switch (name) { case 'name': if (!value) return t('build.nameRequired'); if (value.length > 50) return t('build.nameMaxLength'); return ''; case 'desc': if (value.length > 1000) return t('build.descMaxLength'); return ''; default: return ''; } }; // Handle field change const handleChange = (e) => { const { name, value } = e.target; const error = validateField(name, value); setFormData(prev => ({ ...prev, [name]: value })); setErrors(prev => ({ ...prev, [name]: error })); }; // Validate entire form const validateForm = () => { const formErrors = {}; let isValid = true; Object.keys(formData).forEach(key => { const error = validateField(key, formData[key]); if (error) { formErrors[key] = error; isValid = false; } }); setErrors(formErrors); return isValid; }; const { message, toast } = useToast() // Handle form submission const handleSubmit = (e) => { e.preventDefault(); const isValid = validateForm(); // console.log('Form data:', errors); if (!isValid) return toast({ title: t('prompt'), variant: 'error', description: Object.keys(errors).map(key => errors[key]), }) onSave(formData) }; const handleButtonClick = () => { // Create a file input element const input = document.createElement("input"); input.type = "file"; input.accept = "image/*"; input.style.display = "none"; // Hidden from view input.multiple = false; // Allow only one file selection input.onchange = (e: Event) => { // setLoading(true); // Get the selected file const file = (e.target as HTMLInputElement).files?.[0]; // Check if the file type is correct // Upload the file uploadNpcHeaderLibFileWithProgress(file, (progress) => { }).then(res => { // setLoading(false); setFormData({ name, desc, avatar_img: res, avatar_color }) }) }; // Trigger the file selection dialog input.click(); }; return {t('build.editAssistant')}
{/* */}
setFormData({ name, desc, avatar_img: '', avatar_color })}> 恢复默认
{errors.name &&

{errors.name}

}