Skip to content

Commit

Permalink
Feat(RecommendTest) : 추천 모의고사 기능 추가
Browse files Browse the repository at this point in the history
- study or exam / recommendations url로 접속가능
- 학습 분석의 추천 모의고사 버튼으로 접속 가능
  • Loading branch information
godzz733 committed Oct 15, 2024
1 parent bb7aa0c commit f8f12e3
Show file tree
Hide file tree
Showing 16 changed files with 352 additions and 34 deletions.
9 changes: 8 additions & 1 deletion src/app/analysis/molecule/recommendTest.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import { Box, Button, Typography } from "@mui/material";
import { useState } from "react";
import RecommendTestModal from "./recommendTestModal";

const RecommendTest = () => {
const [isModalOpen, setIsModalOpen] = useState(false);
const handleModal = () => {
setIsModalOpen(!isModalOpen);
};
return (
<Box
sx={{
Expand Down Expand Up @@ -80,7 +86,7 @@ const RecommendTest = () => {
},
transition: "none",
}}
href="/study/recommendations"
onClick={handleModal}
>
<Typography
variant="h1"
Expand All @@ -97,6 +103,7 @@ const RecommendTest = () => {
</Button>
</Box>
</Box>
<RecommendTestModal isModalOpen={isModalOpen} handleModal={handleModal} />
</Box>
);
};
Expand Down
106 changes: 106 additions & 0 deletions src/app/analysis/molecule/recommendTestModal.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import CloseIcon from "@/public/icons/close-line.svg";
import { NoHoverButton } from "@/src/components/elements/styledElements";
import { globalTheme } from "@/src/components/globalStyle";
import { Box, Modal, ThemeProvider, Typography } from "@mui/material";
import { useRouter } from "next/navigation";
interface RecommendTestModalProps {
isModalOpen: boolean;
handleModal: () => void;
}

const RecommendTestModal: React.FC<RecommendTestModalProps> = ({ isModalOpen, handleModal }) => {
const router = useRouter();
const gotoStudyMode = () => {
router.push("/study/recommendations");
};
const gotoExamMode = () => {
router.push("/exam/recommendations");
};
return (
<ThemeProvider theme={globalTheme}>
<Modal open={isModalOpen} onClose={handleModal}>
<Box
sx={{
position: "absolute",
top: "50%",
left: "50%",
transform: "translate(-50%, -50%)",
width: {
xs: "70%",
sm: "60%",
md: "50%",
lg: "40%",
xl: "40%",
},

bgcolor: "background.paper",
boxShadow: 24,
p: 4,
borderRadius: "20px",
}}
>
<Box
sx={{
"&:hover": {
cursor: "pointer",
},
}}
onClick={handleModal}
>
<CloseIcon width={28} height={28} />
</Box>
<Box
sx={{
display: "flex",
flexDirection: "column",
alignItems: "center",
}}
>
<Typography variant="h1" fontSize={28} mb={6}>
문제 풀기
</Typography>
<Typography variant="body2" fontSize={24} mb={4}>
모드를 선택해주세요
</Typography>
<Box sx={{ display: "flex", justifyContent: "flex-end", my: 2 }}>
<NoHoverButton
onClick={gotoStudyMode}
sx={{
mr: 3,
border: "1.5px solid var(--c-gray2)",
borderRadius: "40px",
padding: "12px 28px",
"&:hover": {
border: "1.5px solid var(--c-sub3)",
filter: "drop-shadow(0px 1px 12px rgba(0, 0, 0, 0.16))",
},
}}
>
<Typography variant="h1" fontSize={20} color="var(--c-sub4)">
공부 모드
</Typography>
</NoHoverButton>
<NoHoverButton
onClick={gotoExamMode}
sx={{
border: "1.5px solid var(--c-gray2)",
borderRadius: "40px",
padding: "12px 28px",
"&:hover": {
border: "1.5px solid var(--c-sub3)",
filter: "drop-shadow(0px 1px 12px rgba(0, 0, 0, 0.16))",
},
}}
>
<Typography variant="h1" fontSize={20} color="var(--c-sub4)">
시험 모드
</Typography>
</NoHoverButton>
</Box>
</Box>
</Box>
</Modal>
</ThemeProvider>
);
};
export default RecommendTestModal;
14 changes: 13 additions & 1 deletion src/app/analysis/molecule/vulnerableSubjectItem.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
import { Box, Button, Typography } from "@mui/material";
import ProgressBar from "../atom/progressBar";
import { useRouter } from "next/navigation";
import VulnerableSubjectModal from "./vulnerableSubjectModal";
import { useState } from "react";

interface VulnerableSubjectItemProps {
item: VulnerableSubject;
index: number;
}

const VulnerableSubjectItem: React.FC<VulnerableSubjectItemProps> = ({ item, index }) => {
const [isModalOpen, setIsModalOpen] = useState(false);
const handleModal = () => {
setIsModalOpen(!isModalOpen);
};
return (
<Box
sx={{
Expand Down Expand Up @@ -138,7 +145,7 @@ const VulnerableSubjectItem: React.FC<VulnerableSubjectItemProps> = ({ item, ind
borderRadius: "40px",
padding: "8px 18px",
}}
href="/learning"
onClick={handleModal}
>
<Typography
variant="h4"
Expand All @@ -152,6 +159,11 @@ const VulnerableSubjectItem: React.FC<VulnerableSubjectItemProps> = ({ item, ind
</Typography>
</Button>
</Box>
<VulnerableSubjectModal
isModalOpen={isModalOpen}
handleModal={handleModal}
subjectId={item.subjectId}
/>
</Box>
);
};
Expand Down
111 changes: 111 additions & 0 deletions src/app/analysis/molecule/vulnerableSubjectModal.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
import CloseIcon from "@/public/icons/close-line.svg";
import { NoHoverButton } from "@/src/components/elements/styledElements";
import { globalTheme } from "@/src/components/globalStyle";
import { Box, Modal, ThemeProvider, Typography } from "@mui/material";
import { useRouter } from "next/navigation";
interface vulnerableSubjectModalProps {
isModalOpen: boolean;
handleModal: () => void;
subjectId: number;
}

const vulnerableSubjectModal: React.FC<vulnerableSubjectModalProps> = ({
isModalOpen,
handleModal,
subjectId,
}) => {
const router = useRouter();
const gotoStudyMode = () => {
router.push("/study/vulnerable-subjects/" + subjectId);
};
const gotoExamMode = () => {
router.push("/exam/vulnerable-subjects/" + subjectId);
};
return (
<ThemeProvider theme={globalTheme}>
<Modal open={isModalOpen} onClose={handleModal}>
<Box
sx={{
position: "absolute",
top: "50%",
left: "50%",
transform: "translate(-50%, -50%)",
width: {
xs: "70%",
sm: "60%",
md: "50%",
lg: "40%",
xl: "40%",
},

bgcolor: "background.paper",
boxShadow: 24,
p: 4,
borderRadius: "20px",
}}
>
<Box
sx={{
"&:hover": {
cursor: "pointer",
},
}}
onClick={handleModal}
>
<CloseIcon width={28} height={28} />
</Box>
<Box
sx={{
display: "flex",
flexDirection: "column",
alignItems: "center",
}}
>
<Typography variant="h1" fontSize={28} mb={6}>
문제 풀기
</Typography>
<Typography variant="body2" fontSize={24} mb={4}>
모드를 선택해주세요
</Typography>
<Box sx={{ display: "flex", justifyContent: "flex-end", my: 2 }}>
<NoHoverButton
onClick={gotoStudyMode}
sx={{
mr: 3,
border: "1.5px solid var(--c-gray2)",
borderRadius: "40px",
padding: "12px 28px",
"&:hover": {
border: "1.5px solid var(--c-sub3)",
filter: "drop-shadow(0px 1px 12px rgba(0, 0, 0, 0.16))",
},
}}
>
<Typography variant="h1" fontSize={20} color="var(--c-sub4)">
공부 모드
</Typography>
</NoHoverButton>
<NoHoverButton
onClick={gotoExamMode}
sx={{
border: "1.5px solid var(--c-gray2)",
borderRadius: "40px",
padding: "12px 28px",
"&:hover": {
border: "1.5px solid var(--c-sub3)",
filter: "drop-shadow(0px 1px 12px rgba(0, 0, 0, 0.16))",
},
}}
>
<Typography variant="h1" fontSize={20} color="var(--c-sub4)">
시험 모드
</Typography>
</NoHoverButton>
</Box>
</Box>
</Box>
</Modal>
</ThemeProvider>
);
};
export default vulnerableSubjectModal;
14 changes: 2 additions & 12 deletions src/app/analysis/organism/studyCurrentOrganism.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { Box, Button, CircularProgress, Typography } from "@mui/material";
import StudyCurrentBox from "../molecule/studyCurrentBox";
import { useEffect, useState } from "react";
import { mainfetch } from "@/src/api/apis/mainFetch";
import LodingUI from "@/src/components/lodingUI";
const StudyCurrentOrganism = () => {
const [analysisToday, setAnalysisToday] = useState<AnalysisToday>();
const [isLoading, setIsLoading] = useState(true);
Expand All @@ -27,18 +28,7 @@ const StudyCurrentOrganism = () => {
}, []);

if (isLoading) {
return (
<Box
sx={{
display: "flex",
justifyContent: "center",
alignItems: "center",
height: "300px", // 적절한 높이로 조정하세요
}}
>
<CircularProgress />
</Box>
);
return <LodingUI />;
}
return (
<Box
Expand Down
8 changes: 4 additions & 4 deletions src/app/bookmark/components/bookMarkMain.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
"use client";
import handleBookmarkModule from "@/src/api/apis/handleBookmark";
import { mainfetch } from "@/src/api/apis/mainFetch";
import { MiddleBoxColumn, NoHoverButton } from "@/src/components/elements/styledElements";
import { NoHoverButton } from "@/src/components/elements/styledElements";
import { globalTheme } from "@/src/components/globalStyle";
import useBookmarks from "@/src/hooks/useBookmarks";
import useCertificateInfo from "@/src/hooks/useCertificateInfo";
import { Box, Button, Grid, SelectChangeEvent, ThemeProvider, Typography } from "@mui/material";
import { useCallback, useEffect, useState } from "react";
import BookMarkModal from "./bookmarkModal";
import ExamChoice from "./examChoice";
import BookmarkProblemList from "./problemList";
import SubjectChoice from "./subjectChoice";
import handleBookmarkModule from "@/src/api/apis/handleBookmark";
import LodingUI from "@/src/components/lodingUI";

const MAX_SELECTED_PROBLEMS = 100;

Expand Down Expand Up @@ -158,7 +158,7 @@ const BookMarkMain = () => {
};

if (loading) {
return <div>로딩중...</div>;
return <LodingUI />;
}

if (!isCertified) {
Expand Down
4 changes: 2 additions & 2 deletions src/app/bookmark/components/mobileBookMarkMain.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ const MobileBookMarkMain = () => {
const [selectedSubjectsId, setSelectedSubjectsId] = useState<number[]>([]);
const [page, setPage] = useState<number>(0);
const [isProcessing, setIsProcessing] = useState(false);
const { bookmarkedProblems, totalPage } = useBookmarks({
const { bookmarkedProblems, totalPage, totalCount } = useBookmarks({
selectedExamId,
selectedSubjectsId,
page,
Expand Down Expand Up @@ -277,7 +277,7 @@ const MobileBookMarkMain = () => {
총&nbsp;
</Typography>
<Typography fontSize="18px" variant="subtitle1" color="var(--c-main)">
{problems.length}
{totalCount}
</Typography>
<Typography fontSize="18px" variant="subtitle1">
개의 북마크
Expand Down
6 changes: 1 addition & 5 deletions src/app/bookmark/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@
import BookMarkSize from "./components/bookMarkSize";

const BookMarkPage = () => {
return (
<>
<BookMarkSize />
</>
);
return <BookMarkSize />;
};
export default BookMarkPage;
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit f8f12e3

Please sign in to comment.