diff --git a/frontend/app/projects/[projectId]/runs/RunDialog.tsx b/frontend/app/projects/[projectId]/runs/RunDialog.tsx new file mode 100644 index 0000000..ff48d58 --- /dev/null +++ b/frontend/app/projects/[projectId]/runs/RunDialog.tsx @@ -0,0 +1,140 @@ +"use client"; +import React from "react"; +import { useState, useEffect } from "react"; +import { + Button, + Input, + Textarea, + Modal, + ModalContent, + ModalHeader, + ModalBody, + ModalFooter, +} from "@nextui-org/react"; +import { RunType } from "@/types/run"; + +type Props = { + isOpen: boolean; + editingRun: RunType; + onCancel: () => void; + onSubmit: (name: string, detail: string) => void; +}; + +export default function RunDialog({ + isOpen, + editingRun, + onCancel, + onSubmit, +}: Props) { + const [runName, setRunName] = useState({ + text: editingRun ? editingRun.name : "", + isValid: false, + errorMessage: "", + }); + + const [runDetail, setRunDetail] = useState({ + text: editingRun ? editingRun.detail : "", + isValid: false, + errorMessage: "", + }); + + useEffect(() => { + if (editingRun) { + setRunName({ + ...runName, + text: editingRun.name, + }); + + setRunDetail({ + ...runDetail, + text: editingRun.detail ? editingRun.detail : "", + }); + } else { + setRunName({ + ...runName, + text: "", + }); + + setRunDetail({ + ...runDetail, + text: "", + }); + } + }, [editingRun]); + + const clear = () => { + setRunName({ + isValid: false, + text: "", + errorMessage: "", + }); + setRunDetail({ + isValid: false, + text: "", + errorMessage: "", + }); + }; + + const validate = () => { + if (!runName.text) { + setRunName({ + text: "", + isValid: false, + errorMessage: "Please enter run name", + }); + + return; + } + + onSubmit(runName.text, runDetail.text); + clear(); + }; + + return ( + { + onCancel(); + }} + > + + Run + + { + setRunName({ + ...runName, + text: e.target.value, + }); + }} + /> +