import React, { useState } from "react"; import { IQuestionData } from "../types"; import { questionApi } from "../apis"; import { EssayForm } from "./EssayForm"; import { CheckboxForm } from "./CheckboxForm"; import { RadioForm } from "./RadioForm"; import { DropdownForm } from "./DropdownForm"; import { FileForm } from "./FileForm"; import { RatingForm } from "./RatingForm"; import { DateForm } from "./DateForm"; import { QUESTION_TYPES } from "../commons"; type Props = { element: IQuestionData; isEditing: boolean; handleEditing: (qid: string, isEditing: boolean) => void; handleQuestion: (element: IQuestionData) => void; deleteQuestion: (id: string) => void; }; export const Question = ({ element, isEditing, handleEditing, handleQuestion, deleteQuestion, }: Props) => { const [question, setQuestion] = useState({ ...element }); // const [isEditing, setIsEditing] = useState(false); // console.log("is editing in question:", isEditing); async function handleEditComplete() { try { console.log(question); const newQuestion: IQuestionData = await questionApi.updateQuestion( question ); // console.log(newQuestion); handleQuestion(question); // setIsEditing(true); handleEditing(question._id, false); // setSuccess(true); // setError(""); } catch (error) { console.log("에러발생"); // catchErrors(error, setError) } finally { // setLoading(false); } } function handleSelect(event: React.ChangeEvent) { const selectedType = event.currentTarget.value; console.log(selectedType); let content; if ( selectedType === "radio" || selectedType === "dropdown" || selectedType === "checkbox" ) { content = { choices: [{ text: "", value: 0 }], }; } else if (selectedType === "essay") { content = { choices: [] }; } else if (selectedType === "rating") { content = { minRateDescription: "", maxRateDescription: "", choices: [{ text: "", value: 0 }], }; } setQuestion({ ...question, type: selectedType, content: content }); } const handleElement = () => { console.log("handle element"); setQuestion({ ...question }); }; function handleQuestionInfo(event: React.ChangeEvent) { const { name, value } = event.currentTarget; setQuestion({ ...question, [name]: value }); } function getContent(element: IQuestionData) { switch (element.type) { case "essay": return ; case "radio": return ( ); case "checkbox": return ( ); case "dropdown": return ( ); case "file": return ; case "rating": return ( ); case "date": return ; default: return <>; } } const handleRequired = (event: React.ChangeEvent) => { const { checked, value } = event.currentTarget; question[value] = checked; setQuestion({ ...question, [value]: checked }); }; const onCancel = () => { console.log("element canceled button clicked", element); console.log("question canceled button clicked", question); setQuestion(element); // setIsEditing(true); handleEditing(question._id, false); }; const handleDelete = () => { if (window.confirm("질문을 삭제하시겠습니까?")) { deleteQuestion(element._id); alert("삭제되었습니다."); } else { alert("질문 삭제를 취소합니다."); } }; const handleEditClick = () => { // setIsEditing(false); handleEditing(question._id, true); }; return (
{getContent(question)}
{isEditing ? ( <> ) : ( <> )}
); };