Commit 80ab8493 authored by Jiwon Yoon's avatar Jiwon Yoon
Browse files

객관식 choice추가 삭제

parent e19694ac
...@@ -4,9 +4,10 @@ import { CheckboxType } from "../types"; ...@@ -4,9 +4,10 @@ import { CheckboxType } from "../types";
type Props = { type Props = {
element: CheckboxType; element: CheckboxType;
handleQuestion: (id: string) => void; handleQuestion: (id: string) => void;
currentId: string;
}; };
export const CheckboxForm = ({ element, handleQuestion }: Props) => { export const CheckboxForm = ({ element, handleQuestion, currentId }: Props) => {
const [choices, setChoices] = useState([...element.content.choices]); const [choices, setChoices] = useState([...element.content.choices]);
function handleContent(event: React.ChangeEvent<HTMLInputElement>) { function handleContent(event: React.ChangeEvent<HTMLInputElement>) {
...@@ -16,21 +17,55 @@ export const CheckboxForm = ({ element, handleQuestion }: Props) => { ...@@ -16,21 +17,55 @@ export const CheckboxForm = ({ element, handleQuestion }: Props) => {
handleQuestion(element._id); handleQuestion(element._id);
console.log(choices); console.log(choices);
} }
function deleteValue() {
//제일 마지막 index 제거
choices.splice(-1, 1);
element.content.choices = choices;
handleQuestion(element._id);
}
function addValue() {
choices.push({ text: "", value: choices.length });
element.content.choices = choices;
handleQuestion(element._id);
}
return ( return (
<div id="content" className="flex mt-4"> <>
<div id="content" className="mt-4 p-5">
{choices.map((choice: any, index: number) => ( {choices.map((choice: any, index: number) => (
<div> <div className="m-5">
<input type="checkbox" disabled></input> <input type="checkbox" disabled></input>
<input <input
id={`${index}`} id={`${index}`}
type="text" type="text"
className="mx-2 border-b-2" className="mx-2 border-b-2"
placeholder={choice.text} placeholder="선택지"
value={choice.text}
onChange={handleContent} onChange={handleContent}
disabled={currentId !== element._id}
></input> ></input>
</div> </div>
))} ))}
</div> </div>
<div>
<button
type="button"
name="rateValues"
className="border border-red-500 rounded mx-2 px-2"
onClick={deleteValue}
disabled={currentId !== element._id}
>
삭제
</button>
<button
type="button"
name="rateValues"
className="border border-blue-500 rounded mx-2 px-2"
onClick={addValue}
disabled={currentId !== element._id}
>
추가
</button>
</div>
</>
); );
}; };
...@@ -4,9 +4,10 @@ import { DropdownType } from "../types"; ...@@ -4,9 +4,10 @@ import { DropdownType } from "../types";
type Props = { type Props = {
element: DropdownType; element: DropdownType;
handleQuestion: (id: string) => void; handleQuestion: (id: string) => void;
currentId: string;
}; };
export const DropdownForm = ({ element, handleQuestion }: Props) => { export const DropdownForm = ({ element, handleQuestion, currentId }: Props) => {
const [choices, setChoices] = useState([...element.content.choices]); const [choices, setChoices] = useState([...element.content.choices]);
function handleContent(event: React.ChangeEvent<HTMLInputElement>) { function handleContent(event: React.ChangeEvent<HTMLInputElement>) {
...@@ -16,22 +17,59 @@ export const DropdownForm = ({ element, handleQuestion }: Props) => { ...@@ -16,22 +17,59 @@ export const DropdownForm = ({ element, handleQuestion }: Props) => {
handleQuestion(element._id); handleQuestion(element._id);
console.log(choices); console.log(choices);
} }
function deleteValue() {
//제일 마지막 index 제거
choices.splice(-1, 1);
element.content.choices = choices;
handleQuestion(element._id);
}
function addValue() {
choices.push({ text: "", value: choices.length });
element.content.choices = choices;
handleQuestion(element._id);
}
return ( return (
<div id="content" className="flex mt-4"> <>
<div id="content" className="flex-row mt-4 p-5">
<select className="mr-3"> <select className="mr-3">
{choices.map((choice: any, index: number) => ( {choices.map((choice: any, index: number) => (
<option>{choice.text}</option> <option>{choice.text}</option>
))} ))}
</select> </select>
{choices.map((choice: any, index: number) => ( {choices.map((choice: any, index: number) => (
<div className="my-5">
<input <input
id={`${index}`} id={`${index}`}
type="text" type="text"
className="mx-2 border-b-2" className="mx-2 border-b-2"
placeholder={choice.text} placeholder="선택지"
value={choice.text}
onChange={handleContent} onChange={handleContent}
disabled={currentId !== element._id}
></input> ></input>
</div>
))} ))}
</div> </div>
<div>
<button
type="button"
name="rateValues"
className="border border-red-500 rounded mx-2 px-2"
onClick={deleteValue}
disabled={currentId !== element._id}
>
삭제
</button>
<button
type="button"
name="rateValues"
className="border border-blue-500 rounded mx-2 px-2"
onClick={addValue}
disabled={currentId !== element._id}
>
추가
</button>
</div>
</>
); );
}; };
...@@ -3,9 +3,10 @@ import { EssayType } from "../types"; ...@@ -3,9 +3,10 @@ import { EssayType } from "../types";
type Props = { type Props = {
element: EssayType; element: EssayType;
currentId: string;
}; };
export const EssayForm = ({ element }: Props) => { export const EssayForm = ({ element, currentId }: Props) => {
return ( return (
<div id="commentarea" className="flex mt-4 w-full justify-center"> <div id="commentarea" className="flex mt-4 w-full justify-center">
<input className="border w-11/12 h-16" disabled></input> <input className="border w-11/12 h-16" disabled></input>
......
...@@ -3,9 +3,10 @@ import { FileType } from "../types"; ...@@ -3,9 +3,10 @@ import { FileType } from "../types";
type Props = { type Props = {
element: FileType; element: FileType;
currentId: string;
}; };
export const FileForm = ({ element }: Props) => { export const FileForm = ({ element, currentId }: Props) => {
return ( return (
<div id="content" className="flex mt-4 w-full justify-center"> <div id="content" className="flex mt-4 w-full justify-center">
<input type="file" className=" w-11/12 h-16" disabled></input> <input type="file" className=" w-11/12 h-16" disabled></input>
......
...@@ -34,12 +34,10 @@ export const Question = ({ ...@@ -34,12 +34,10 @@ export const Question = ({
changeCurrentId, changeCurrentId,
currentId, currentId,
}: Props) => { }: Props) => {
const handleEdit = () => { const handleEditClick = () => {
//setCurrentId해주고 currentId===element._id가 같은 input들만 disabled=false
changeCurrentId(element._id); changeCurrentId(element._id);
}; };
async function handleComplete() { async function handleEditComplete() {
//db에서 element._id인 애를 findOneAndUpdate() 해준다.
try { try {
const newQuestion: BasicQuestionType = await questionApi.updateQuestion( const newQuestion: BasicQuestionType = await questionApi.updateQuestion(
element element
...@@ -65,21 +63,21 @@ export const Question = ({ ...@@ -65,21 +63,21 @@ export const Question = ({
) { ) {
element.content = { element.content = {
choices: [ choices: [
{ text: "선택지1", value: "1" }, { text: "", value: 0 },
{ text: "선택지2", value: "2" }, { text: "", value: 1 },
{ text: "선택지3", value: "3" }, { text: "", value: 2 },
], ],
}; };
} else if (selectedType === "essay") { } else if (selectedType === "essay") {
element.content = { choices: [] }; element.content = { choices: [] };
} else if (selectedType === "rating") { } else if (selectedType === "rating") {
element.content = { element.content = {
minRateDescription: "가장 낮음", minRateDescription: "",
maxRateDescription: "가장 높음", maxRateDescription: "",
choices: [ choices: [
{ text: "1", value: "1" }, { text: "", value: 0 },
{ text: "2", value: "2" }, { text: "", value: 1 },
{ text: "3", value: "3" }, { text: "", value: 2 },
], ],
}; };
} }
...@@ -100,21 +98,41 @@ export const Question = ({ ...@@ -100,21 +98,41 @@ export const Question = ({
function getContent(element: BasicQuestionType) { function getContent(element: BasicQuestionType) {
switch (element.type) { switch (element.type) {
case "essay": case "essay":
return <EssayForm element={element} />; return <EssayForm element={element} currentId={currentId} />;
case "radio": case "radio":
return <RadioForm handleQuestion={handleQuestion} element={element} />; return (
<RadioForm
handleQuestion={handleQuestion}
element={element}
currentId={currentId}
/>
);
case "checkbox": case "checkbox":
return ( return (
<CheckboxForm handleQuestion={handleQuestion} element={element} /> <CheckboxForm
handleQuestion={handleQuestion}
element={element}
currentId={currentId}
/>
); );
case "dropdown": case "dropdown":
return ( return (
<DropdownForm handleQuestion={handleQuestion} element={element} /> <DropdownForm
handleQuestion={handleQuestion}
element={element}
currentId={currentId}
/>
); );
case "file": case "file":
return <FileForm element={element} />; return <FileForm element={element} currentId={currentId} />;
case "rating": case "rating":
return <RatingForm handleQuestion={handleQuestion} element={element} />; return (
<RatingForm
handleQuestion={handleQuestion}
element={element}
currentId={currentId}
/>
);
default: default:
return <></>; return <></>;
} }
...@@ -131,6 +149,7 @@ export const Question = ({ ...@@ -131,6 +149,7 @@ export const Question = ({
placeholder={"Question Title"} placeholder={"Question Title"}
value={element.title} value={element.title}
onChange={handleQuestionInfo} onChange={handleQuestionInfo}
disabled={currentId !== element._id}
></input> ></input>
<select <select
id={element._id} id={element._id}
...@@ -158,6 +177,7 @@ export const Question = ({ ...@@ -158,6 +177,7 @@ export const Question = ({
placeholder="질문에 대한 설명을 입력해주세요" placeholder="질문에 대한 설명을 입력해주세요"
value={element.comment} value={element.comment}
onChange={handleQuestionInfo} onChange={handleQuestionInfo}
disabled={currentId !== element._id}
></input> ></input>
</div> </div>
{getContent(element)} {getContent(element)}
...@@ -173,11 +193,11 @@ export const Question = ({ ...@@ -173,11 +193,11 @@ export const Question = ({
삭제 삭제
</button> </button>
{currentId === element._id ? ( {currentId === element._id ? (
<button type="button" className="px-1" onClick={handleComplete}> <button type="button" className="px-1" onClick={handleEditComplete}>
수정완료 수정완료
</button> </button>
) : ( ) : (
<button type="button" className="px-1" onClick={handleEdit}> <button type="button" className="px-1" onClick={handleEditClick}>
수정하기 수정하기
</button> </button>
)} )}
......
...@@ -4,9 +4,10 @@ import { RadioType } from "../types"; ...@@ -4,9 +4,10 @@ import { RadioType } from "../types";
type Props = { type Props = {
element: RadioType; element: RadioType;
handleQuestion: (id: string) => void; handleQuestion: (id: string) => void;
currentId: string;
}; };
export const RadioForm = ({ element, handleQuestion }: Props) => { export const RadioForm = ({ element, handleQuestion, currentId }: Props) => {
const [choices, setChoices] = useState([...element.content.choices]); const [choices, setChoices] = useState([...element.content.choices]);
function handleContent(event: React.ChangeEvent<HTMLInputElement>) { function handleContent(event: React.ChangeEvent<HTMLInputElement>) {
...@@ -16,20 +17,56 @@ export const RadioForm = ({ element, handleQuestion }: Props) => { ...@@ -16,20 +17,56 @@ export const RadioForm = ({ element, handleQuestion }: Props) => {
handleQuestion(element._id); handleQuestion(element._id);
console.log(choices); console.log(choices);
} }
function deleteValue() {
//제일 마지막 index 제거
choices.splice(-1, 1);
element.content.choices = choices;
handleQuestion(element._id);
}
function addValue() {
choices.push({ text: "", value: choices.length });
element.content.choices = choices;
handleQuestion(element._id);
}
return ( return (
<div id="content" className="flex mt-4"> <>
<div id="content" className="mt-4 p-5">
{choices.map((choice: any, index: number) => ( {choices.map((choice: any, index: number) => (
<div> <div className="m-5">
<input type="radio" disabled></input> <input type="radio" disabled></input>
<input <input
id={`${index}`} id={`${index}`}
type="text" type="text"
className="mx-2 border-b-2" className="mx-2 border-b-2"
placeholder={choice.text} placeholder="선택지"
value={choice.text}
onChange={handleContent} onChange={handleContent}
disabled={currentId !== element._id}
></input> ></input>
</div> </div>
))} ))}
</div> </div>
<div>
<button
type="button"
name="rateValues"
className="border border-red-500 rounded mx-2 px-2"
onClick={deleteValue}
disabled={currentId !== element._id}
>
삭제
</button>
<button
type="button"
name="rateValues"
className="border border-blue-500 rounded mx-2 px-2"
onClick={addValue}
disabled={currentId !== element._id}
>
추가
</button>
</div>
</>
); );
}; };
...@@ -4,9 +4,10 @@ import { RatingType } from "../types"; ...@@ -4,9 +4,10 @@ import { RatingType } from "../types";
type Props = { type Props = {
element: RatingType; element: RatingType;
handleQuestion: (id: string) => void; handleQuestion: (id: string) => void;
currentId: string;
}; };
export const RatingForm = ({ element, handleQuestion }: Props) => { export const RatingForm = ({ element, handleQuestion, currentId }: Props) => {
const [choices, setChoices] = useState([...element.content.choices]); const [choices, setChoices] = useState([...element.content.choices]);
function handleContent(event: React.ChangeEvent<HTMLInputElement>) { function handleContent(event: React.ChangeEvent<HTMLInputElement>) {
...@@ -30,7 +31,7 @@ export const RatingForm = ({ element, handleQuestion }: Props) => { ...@@ -30,7 +31,7 @@ export const RatingForm = ({ element, handleQuestion }: Props) => {
handleQuestion(element._id); handleQuestion(element._id);
} }
function addValue() { function addValue() {
choices.push({ text: "0", value: 0 }); choices.push({ text: "0", value: choices.length });
element.content.choices = choices; element.content.choices = choices;
handleQuestion(element._id); handleQuestion(element._id);
} }
...@@ -42,26 +43,32 @@ export const RatingForm = ({ element, handleQuestion }: Props) => { ...@@ -42,26 +43,32 @@ export const RatingForm = ({ element, handleQuestion }: Props) => {
name="minRateDescription" name="minRateDescription"
className="border-b-2 text-center" className="border-b-2 text-center"
size={10} size={10}
placeholder={element.content.minRateDescription} placeholder="비동의"
value={element.content.minRateDescription}
onChange={handleContent} onChange={handleContent}
disabled={currentId !== element._id}
></input> ></input>
{choices.map((e: any, index: number) => ( {choices.map((choice: any, index: number) => (
<input <input
name="text" name="text"
id={`${index}`} id={`${index}`}
type="text" type="text"
className="border border-black rounded-full py-1 m-2 text-center" className="border border-black rounded-full py-1 m-2 text-center"
size={1} size={1}
placeholder={e.text} placeholder="0"
value={choice.text}
onChange={handleContent} onChange={handleContent}
disabled={currentId !== element._id}
></input> ></input>
))} ))}
<input <input
name="maxRateDescription" name="maxRateDescription"
className="border-b-2 text-center" className="border-b-2 text-center"
size={10} size={10}
placeholder={element.content.maxRateDescription} placeholder="동의"
value={element.content.maxRateDescription}
onChange={handleContent} onChange={handleContent}
disabled={currentId !== element._id}
></input> ></input>
</div> </div>
<div> <div>
...@@ -70,6 +77,7 @@ export const RatingForm = ({ element, handleQuestion }: Props) => { ...@@ -70,6 +77,7 @@ export const RatingForm = ({ element, handleQuestion }: Props) => {
name="rateValues" name="rateValues"
className="border border-red-500 rounded mx-2 px-2" className="border border-red-500 rounded mx-2 px-2"
onClick={deleteValue} onClick={deleteValue}
disabled={currentId !== element._id}
> >
삭제 삭제
</button> </button>
...@@ -78,6 +86,7 @@ export const RatingForm = ({ element, handleQuestion }: Props) => { ...@@ -78,6 +86,7 @@ export const RatingForm = ({ element, handleQuestion }: Props) => {
name="rateValues" name="rateValues"
className="border border-blue-500 rounded mx-2 px-2" className="border border-blue-500 rounded mx-2 px-2"
onClick={addValue} onClick={addValue}
disabled={currentId !== element._id}
> >
추가 추가
</button> </button>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment