'use client'; import { useState, useEffect } from 'react'; import { Button, Input, Textarea, Checkbox, Modal, ModalContent, ModalHeader, ModalBody, ModalFooter, } from '@heroui/react'; import { ProjectType, ProjectDialogMessages } from '@/types/project'; type Props = { isOpen: boolean; editingProject: ProjectType | null; onCancel: () => void; onSubmit: (name: string, detail: string, isPublic: boolean) => void; projectDialogMessages: ProjectDialogMessages; }; export default function ProjectDialog({ isOpen, editingProject, onCancel, onSubmit, projectDialogMessages }: Props) { const [projectName, setProjectName] = useState({ text: editingProject ? editingProject.name : '', isInvalid: false, errorMessage: '', }); const [projectDetail, setProjectDetail] = useState({ text: editingProject ? editingProject.detail : '', isInvalid: false, errorMessage: '', }); const [isProjectPublic, setIsProjectPublic] = useState(editingProject ? editingProject.isPublic : true); useEffect(() => { if (editingProject) { setProjectName({ ...projectName, text: editingProject.name, }); setProjectDetail({ ...projectDetail, text: editingProject.detail ? editingProject.detail : '', }); setIsProjectPublic(editingProject.isPublic); } else { setProjectName({ ...projectName, text: '', }); setProjectDetail({ ...projectDetail, text: '', }); setIsProjectPublic(true); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [editingProject]); const clear = () => { setProjectName({ isInvalid: false, text: '', errorMessage: '', }); setProjectDetail({ isInvalid: false, text: '', errorMessage: '', }); }; const validate = () => { if (!projectName.text) { setProjectName({ text: '', isInvalid: true, errorMessage: projectDialogMessages.pleaseEnter, }); return; } onSubmit(projectName.text, projectDetail.text, isProjectPublic); clear(); }; return ( { onCancel(); }} > {projectDialogMessages.project} { setProjectName({ ...projectName, text: e.target.value, }); }} />