diff --git a/packages/frontend/src/pages/quizzes/[id].page.tsx b/packages/frontend/src/pages/quizzes/[id].page.tsx index baaf7569..1bf72162 100644 --- a/packages/frontend/src/pages/quizzes/[id].page.tsx +++ b/packages/frontend/src/pages/quizzes/[id].page.tsx @@ -1,14 +1,16 @@ import axios, { isAxiosError } from "axios"; import { GetStaticPaths, GetStaticProps, GetStaticPropsContext } from "next"; import { useRouter } from "next/router"; -import { RefObject, useEffect, useReducer, useRef } from "react"; +import { RefObject, useEffect, useReducer, useRef, useState } from "react"; import { quizAPI } from "../../apis/quiz"; import { Editor } from "../../components/editor"; import EditorInfo from "../../components/editor/EditorInfo"; +import { SolvedModal } from "../../components/quiz"; import { QuizGuide } from "../../components/quiz/QuizGuide"; import { Terminal } from "../../components/terminal"; import { Button, toast } from "../../design-system/components/common"; +import useModal from "../../hooks/useModal"; import useResizableSplitView from "../../hooks/useResizableSplitView"; import { TerminalActionTypes, @@ -25,6 +27,8 @@ import * as styles from "./quiz.css"; export default function QuizPage({ quiz }: { quiz: Quiz }) { const [{ terminalMode, editorFile, contentArray }, terminalDispatch] = useReducer(terminalReducer, initialTerminalState); + const [shareLink, setShareLink] = useState(""); + const solvedModal = useModal(); const { query: { id }, @@ -53,6 +57,24 @@ export default function QuizPage({ quiz }: { quiz: Quiz }) { } }; + const handleSubmit = async () => { + if (!isString(id)) { + return; + } + + try { + const response = await quizAPI.submit(+id); + if (response.solved) { + setShareLink(response.link); + solvedModal.openModal(); + return; + } + toast.error("다시 풀어보세요!"); + } catch (error) { + handleResponseError(error); + } + }; + const handleResponseError = (error: unknown) => { if ( isAxiosError(error) && @@ -97,38 +119,49 @@ export default function QuizPage({ quiz }: { quiz: Quiz }) { const { barRef, topRef, handleBarHover } = useResizableSplitView(); if (!quiz) return null; return ( -
-
-
-
git graph
- + <> +
+
+
+
git graph
+ +
+
+ {isEditorMode(terminalMode) ? ( + + ) : ( + + )} +
+ {isEditorMode(terminalMode) && } +
+ +
-
+ {solvedModal.modalOpen && ( + - {isEditorMode(terminalMode) ? ( - - ) : ( - - )} -
- {isEditorMode(terminalMode) && } -
- - -
-
+ )} + ); }