From d88bd744058195111453ae74f873f3d0c4a7e2c8 Mon Sep 17 00:00:00 2001 From: jjongs2 Date: Mon, 4 Sep 2023 21:59:10 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=20=EB=B3=B4=EC=BB=AC=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=EB=B3=84=20=ED=95=AD=EB=AA=A9=20=EC=A0=95=EB=A0=AC=20=EC=98=B5?= =?UTF-8?q?=EC=85=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/status/Status.tsx | 1 - components/status/VocalStatusBoard.tsx | 77 +++++++++++++++----------- pages/oauth/login.tsx | 1 - pages/vocal.tsx | 22 ++++---- 4 files changed, 58 insertions(+), 43 deletions(-) diff --git a/components/status/Status.tsx b/components/status/Status.tsx index 2092a1d..a283563 100644 --- a/components/status/Status.tsx +++ b/components/status/Status.tsx @@ -26,7 +26,6 @@ export default function Status({ mouseOnIndex, vocal, }: StatusProps): ReactElement { - console.log(isMobile); const date = dayjs(status.date).format('YY.MM.DD'); const router = useRouter(); const isConferenceRoom = router.query.category === 'conference-rooms'; diff --git a/components/status/VocalStatusBoard.tsx b/components/status/VocalStatusBoard.tsx index 984b0bb..d2ee6ea 100644 --- a/components/status/VocalStatusBoard.tsx +++ b/components/status/VocalStatusBoard.tsx @@ -1,6 +1,7 @@ import type { ApplicationFormInfo } from '@/interfaces/FormInfo'; import { cls } from '@/styles/cls'; import apiController from '@/utils/apiController'; +import type { AxiosRequestConfig } from 'axios'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { useEffect, useState } from 'react'; @@ -62,10 +63,13 @@ export default function VocalStatusBoard({ useEffect(() => { async function getFormInfosPage(): Promise { - const config = { + const config: AxiosRequestConfig = { url: `/vocal/subscriptions/${category as string}/form/${filter as string}`, - params: { page, size, sort }, + params: { page, size }, }; + if (category !== 'presentations') { + config.params.sort = 'id,desc'; + } const { data } = await apiController(config); const { list, pageCount } = data; setFormInfos(list); @@ -90,6 +94,21 @@ export default function VocalStatusBoard({ if (pageNumbers === undefined) return; const lastPageOffset = getPageOffset(pageCount); + const sliceIndex = category === 'presentations' ? 0 : 1; + const filters = [ + { + name: 'all', + title: '전체', + }, + { + name: 'not-approval', + title: category === 'presentations' ? '진행 중' : '미승인', + }, + { + name: 'approval', + title: category === 'presentations' ? '강의 완료' : '승인', + }, + ]; const paginate = (pageNumber: number): void => { void router.push({ @@ -108,6 +127,14 @@ export default function VocalStatusBoard({ const query = { ...router.query }; query.category = item.category; delete query.formInfo; + if (item.category === 'presentations') { + delete query.sort; + } else { + query.sort = 'id,desc'; + if (filter === 'all') { + query.filter = 'not-approval'; + } + } void router.push({ query }); }; return ( @@ -156,7 +183,7 @@ export default function VocalStatusBoard({ setShowDropDown(!showDropDown); }} > - {filter === 'approval' ? '승인' : '미승인'} + {filters.find(({ name }) => name === filter).title}
- - 미승인 - - - 승인 - + {filters.slice(sliceIndex).map(({ name, title }) => ( + + {title} + + ))}
)} diff --git a/pages/oauth/login.tsx b/pages/oauth/login.tsx index cf93099..25ae1ce 100644 --- a/pages/oauth/login.tsx +++ b/pages/oauth/login.tsx @@ -18,7 +18,6 @@ export default function Login(): ReactElement { }; const { data } = await apiController(config); const { accessToken, grade, refreshToken, staff } = data; - console.log(data) localStorage.setItem('accessToken', accessToken); localStorage.setItem('grade', grade); localStorage.setItem('refreshToken', refreshToken); diff --git a/pages/vocal.tsx b/pages/vocal.tsx index ad2fc4f..0cf736c 100644 --- a/pages/vocal.tsx +++ b/pages/vocal.tsx @@ -7,6 +7,7 @@ import VocalStatusBoard from '@/components/status/VocalStatusBoard'; import type { ApplicationFormInfo } from '@/interfaces/FormInfo'; import apiController from '@/utils/apiController'; import { useRouter } from 'next/router'; +import type { ParsedUrlQueryInput } from 'querystring'; import { useEffect, useState } from 'react'; import type { ReactElement } from 'react'; @@ -19,17 +20,18 @@ export default function Vocal(): ReactElement { const [showModal, setShowModal] = useState(false); useEffect(() => { - const requiredQueries = ['category', 'filter', 'page', 'size', 'sort']; + const requiredQueries = ['category', 'filter', 'page', 'size']; if (!requiredQueries.every((query) => query in router.query)) { - void router.push({ - query: { - category: 'visitors', - filter: 'not-approval', - page: 1, - size: 8, - sort: 'id,desc', - }, - }); + const query: ParsedUrlQueryInput = { + category: 'visitors', + filter: 'not-approval', + page: 1, + size: 8, + }; + if (category !== 'presentations') { + query.sort = 'id,desc'; + } + void router.push({ query }); return; } const { category: categoryQuery, formInfo } = router.query;