diff --git a/src/api/apiUtils.ts b/src/api/apiUtils.ts index 9fed10e..df8f93b 100644 --- a/src/api/apiUtils.ts +++ b/src/api/apiUtils.ts @@ -2,18 +2,9 @@ import BASE_URLS from './baseUrl'; import HTTP_STATUS from './httpStatus'; async function fetchWithInterceptors(url: string, options: RequestInit) { - const token = localStorage.getItem('access_token'); - - if (token) { - options.headers = { - ...options.headers, - Authorization: `Bearer ${token}`, - }; - } - let response = await fetch(url, options); - if (response.status === 401) { + if (response.status === HTTP_STATUS.UNAUTHORIZED) { const refreshToken = localStorage.getItem('refresh_token'); const refreshResponse = await fetch( `${BASE_URLS.gin}/auth/google/refresh-token`, diff --git a/src/app/classes/[cId]/[mId]/components/FeedbackContainer.tsx b/src/app/classes/[cId]/[mId]/components/FeedbackContainer.tsx index ccef474..269ea8f 100644 --- a/src/app/classes/[cId]/[mId]/components/FeedbackContainer.tsx +++ b/src/app/classes/[cId]/[mId]/components/FeedbackContainer.tsx @@ -3,24 +3,24 @@ import {useRecoilValue} from 'recoil'; import FeedbackForm from './FeedbackForm'; import FeedbackList from './FeedbackList'; import FeedbackKeywordList from './FeedbackKeywordList'; +import getCheckRefer from '@/src/api/feedback/getCheckRefer'; import getFeedbacks from '@/src/api/feedback/getFeedbacks'; import materialState from '@/src/recoil/atoms/materialState'; import {feedback} from '@/src/interfaces/feedback'; import '@/src/styles/variable.css'; -import getCheckRefer from '@/src/api/feedback/getCheckRefer'; -const FeedbackContainer = () => { +const FeedbackContainer = (props: {cId: number}) => { const material = useRecoilValue(materialState); const [reload, setReload] = useState(false); const [references, setReferences] = useState(false); const [feedbacks, setFeedbacks] = useState([]); useEffect(() => { if (!material) return; - getFeedbacks(4, parseInt(material.id), 1, 5).then(res => { + getFeedbacks(props.cId, parseInt(material.id), 1, 5).then(res => { console.log(res); setFeedbacks(res); }); - getCheckRefer(4, parseInt(material.id)).then(res => { + getCheckRefer(props.cId, parseInt(material.id)).then(res => { console.log(res); setReferences(res); }); @@ -31,7 +31,11 @@ const FeedbackContainer = () => {
피드백 요청
{material ? ( - + ) : null}
@@ -62,7 +66,11 @@ const FeedbackContainer = () => { ✅ 사용자가 질문한 내용과 가장 관련성이 높은 페이지
{material ? ( - + ) : null} diff --git a/src/app/classes/[cId]/[mId]/components/FeedbackForm.tsx b/src/app/classes/[cId]/[mId]/components/FeedbackForm.tsx index 84252c0..81edc79 100644 --- a/src/app/classes/[cId]/[mId]/components/FeedbackForm.tsx +++ b/src/app/classes/[cId]/[mId]/components/FeedbackForm.tsx @@ -6,9 +6,11 @@ import postFeedback from '@/src/api/feedback/postFeedback'; import gifs from '@/public/gif'; const FeedbackForm = ({ + cId, mId, setReload, }: { + cId: number; mId: number; setReload: (value: boolean) => void; }) => { @@ -28,12 +30,13 @@ const FeedbackForm = ({ setFeedback(''); } setIsLoading(true); - getFeedback(4, mId, type, chat); + getFeedback(cId, mId, type, chat); }; const handleClickSave = () => { const data = feedback.replace(/AI|:|"/g, ''); - postFeedback(4, mId, data).then(() => { + console.log(data); + postFeedback(cId, mId, data).then(() => { setFeedback(''); setReload(true); setIsOpen(false); diff --git a/src/app/classes/[cId]/[mId]/components/FeedbackKeywordList.tsx b/src/app/classes/[cId]/[mId]/components/FeedbackKeywordList.tsx index d108fbf..2b6d04d 100644 --- a/src/app/classes/[cId]/[mId]/components/FeedbackKeywordList.tsx +++ b/src/app/classes/[cId]/[mId]/components/FeedbackKeywordList.tsx @@ -5,53 +5,63 @@ import getKeywords from '@/src/api/feedback/getKeywords'; import {keyword} from '@/src/interfaces/feedback'; const FeedbackKeywordList = ({ + cId, mId, references, }: { - mId: string; + cId: number; + mId: number; references: boolean; }) => { const [keywords, setKeywords] = useState([]); const [loading, setLoading] = useState(true); + useEffect(() => { if (references) { - getKeywords(4, parseInt(mId)).then(res => { + getKeywords(cId, mId).then(res => { console.log(res); setKeywords(res); setLoading(false); }); + } else { + setLoading(false); } }, []); return (
{!references ? ( -
not found
- ) : loading ? ( -
- gif -
- ) : ( - keywords.map((keyword, index) => ( -
-
-
- P + loading ? ( +
+ gif +
+ ) : ( + keywords.map((keyword, index) => ( +
+
+
+ P +
+
{keyword.page}
+
KeyWord
+
    +
  • {keyword.keywords[0]}
  • +
  • {keyword.keywords[1]}
  • +
  • {keyword.keywords[2]}
  • +
-
{keyword.page}
-
KeyWord
-
    -
  • {keyword.keywords[0]}
  • -
  • {keyword.keywords[1]}
  • -
  • {keyword.keywords[2]}
  • -
-
- )) + )) + ) + ) : ( +
+ 현재 질문 데이터가 존재하지 않습니다. +
)}
); diff --git a/src/app/classes/[cId]/[mId]/components/ManageContainer.tsx b/src/app/classes/[cId]/[mId]/components/ManageContainer.tsx index 1458807..6f838b6 100644 --- a/src/app/classes/[cId]/[mId]/components/ManageContainer.tsx +++ b/src/app/classes/[cId]/[mId]/components/ManageContainer.tsx @@ -7,13 +7,13 @@ import FeedbackContainer from './FeedbackContainer'; // import AttendanceContainer from './AttendanceContainer'; import '@/src/styles/variable.css'; -const ManageContainer = () => { +const ManageContainer = (props: {cId: string}) => { const tabs = ['자료', '퀴즈', '피드백', '출석']; const [activeTab, setActiveTab] = useState(tabs[0]); const tabMapping = { 자료: , // Quiz: , - 피드백: , + 피드백: , // Attendance: , }; return ( diff --git a/src/app/classes/[cId]/[mId]/components/subComponents/PromptChat.tsx b/src/app/classes/[cId]/[mId]/components/subComponents/PromptChat.tsx index 396e5f8..a0ff217 100644 --- a/src/app/classes/[cId]/[mId]/components/subComponents/PromptChat.tsx +++ b/src/app/classes/[cId]/[mId]/components/subComponents/PromptChat.tsx @@ -1,6 +1,7 @@ import {useEffect, useState} from 'react'; import ReactMarkdown from 'react-markdown'; import Image from 'next/image'; +import {useParams} from 'next/navigation'; import ChatInput from './ChatInput'; import getPrompt from '@/src/api/prompts/getPrompt'; import patchMessage from '@/src/api/prompts/patchMessage'; @@ -14,16 +15,17 @@ const PromptChat = ({pId}: {pId: number}) => { const [inputMsg, setInputMsg] = useState(''); const [promptRes, setPromptRes] = useState(''); const [reload, setReload] = useState(false); + const params = useParams<{cId: string}>(); useEffect(() => { - getPrompt(4, pId, 1, 6).then(res => { + getPrompt(parseInt(params.cId), pId, 1, 6).then(res => { res.messages.reverse(); setMsg(res.messages); }); }, []); const handleClickIcon = (mId: number) => { - patchMessage(4, pId, mId, true).then(res => { + patchMessage(parseInt(params.cId), pId, mId, true).then(res => { console.log(res); }); }; diff --git a/src/app/classes/[cId]/[mId]/page.tsx b/src/app/classes/[cId]/[mId]/page.tsx index c0f92fb..a4aaae6 100644 --- a/src/app/classes/[cId]/[mId]/page.tsx +++ b/src/app/classes/[cId]/[mId]/page.tsx @@ -1,40 +1,41 @@ 'use client'; +import {useEffect, useState} from 'react'; import {useRecoilValue} from 'recoil'; import {ManageContainer, UserContainer} from './components'; import {SubContainer} from './components/subComponents'; -import classUserState from '@/src/recoil/atoms/classUserState'; -import ROLES from '@/src/constants/roles'; -import materialState from '@/src/recoil/atoms/materialState'; -import {Suspense} from 'react'; +import userState from '@/src/recoil/atoms/userState'; -const Page = () => { - const classUser = useRecoilValue(classUserState); - const material = useRecoilValue(materialState); +const Page = (props: {params: {cId: string; mId: string}}) => { + const {params} = props; + const user = useRecoilValue(userState); + const [userRole, setUserRole] = useState(''); + + useEffect(() => { + if (user.role_id) setUserRole(user.role_id); + }, []); return (
- 로딩중...
}> - {classUser && ROLES[classUser?.role_id] === 'ADMIN' ? ( -
-
{material?.name}
- + {userRole === 'ADMIN' ? ( +
+
{params.mId}
+ +
+ ) : ( +
+
+
{params.mId}
+ +
+ {/* 右側 */} +
+
- ) : ( -
-
-
{material?.name}
- -
- {/* 右側 */} -
-
-
-
- -
+
+
- )} - +
+ )}
); }; diff --git a/src/components/navbar/material/MaterialList.tsx b/src/components/navbar/material/MaterialList.tsx index c5ef2d3..93c9c69 100644 --- a/src/components/navbar/material/MaterialList.tsx +++ b/src/components/navbar/material/MaterialList.tsx @@ -53,10 +53,9 @@ const MaterialList = ({ const material = materials.find(material => material.id === String(mId)); if (material?.prompts.length === 0 && cId) { postPromptAccess(parseInt(cId), mId).then(res => { - console.log(res); setMaterialState({ ...material, - prompts: [...(material?.prompts || []), {id: res.data.id}], + prompts: [...(material?.prompts || []), {id: res}], }); }); }