diff --git a/frontend/app/(WithNavbar)/applicant/[generation]/page.tsx b/frontend/app/(WithNavbar)/applicant/[generation]/page.tsx index 0a2964a4..3096e2b4 100644 --- a/frontend/app/(WithNavbar)/applicant/[generation]/page.tsx +++ b/frontend/app/(WithNavbar)/applicant/[generation]/page.tsx @@ -1,8 +1,7 @@ -import ApplicantBoard from "@/components/applicant/Board"; -import ApplicantPageNavbar from "@/components/applicant/PageNavbar"; import SortList from "@/components/common/SortList"; import Search from "@/components/common/Search"; import { ORDER_MENU } from "@/src/constants"; +import ApplicantList from "@/components/applicant/ApplicantList"; interface ApplicantPageProps { params: { @@ -19,8 +18,7 @@ const ApplicantPage = ({ params }: ApplicantPageProps) => { - - + ); }; diff --git a/frontend/app/(WithNavbar)/interview/[generation]/page.tsx b/frontend/app/(WithNavbar)/interview/[generation]/page.tsx index 3d04b063..3a356596 100644 --- a/frontend/app/(WithNavbar)/interview/[generation]/page.tsx +++ b/frontend/app/(WithNavbar)/interview/[generation]/page.tsx @@ -1,8 +1,7 @@ import SortList from "@/components/common/SortList"; -import InterviewBoard from "@/components/interview/Board"; -import InterviewPageNavbar from "@/components/interview/PageNavbar"; import Search from "@/components/common/Search"; import { ORDER_MENU } from "@/src/constants"; +import InterviewerList from "@/components/interview/InterviewerList"; interface InterviewPageProps { params: { @@ -17,8 +16,7 @@ const InterviewPage = ({ params: { generation } }: InterviewPageProps) => { - - + ); }; diff --git a/frontend/components/applicant/ApplicantList.tsx b/frontend/components/applicant/ApplicantList.tsx new file mode 100644 index 00000000..8537612e --- /dev/null +++ b/frontend/components/applicant/ApplicantList.tsx @@ -0,0 +1,51 @@ +"use client"; + +import { useQuery } from "@tanstack/react-query"; +import useApplicantPaginationParams from "../../src/hooks/applicant/useApplicantPaginationParams"; +import { getApplicantByPageWithGeneration } from "../../src/apis/applicant"; +import LoadingSpinner from "../common/LoadingSpinner"; +import ApplicantBoard from "./Board"; +import ApplicantPageNavbar from "./PageNavbar"; + +interface ApplicantListProps { + generation: string; +} + +const ApplicantList = ({ generation }: ApplicantListProps) => { + const { pageIndex, order, searchKeyword } = useApplicantPaginationParams(); + const { data: applicants, status } = useQuery( + ["allApplicant", { generation, order, pageIndex, searchKeyword }], + () => + getApplicantByPageWithGeneration( + +pageIndex, + generation, + order, + searchKeyword + ), + { + enabled: !!generation, + } + ); + + if (status === "loading") { + return ; + } + if (status === "error") { + return
에러 발생
; + } + + return ( + <> + + + + ); +}; + +export default ApplicantList; diff --git a/frontend/components/applicant/Board.tsx b/frontend/components/applicant/Board.tsx index 56fdf87d..2f6d8e2a 100644 --- a/frontend/components/applicant/Board.tsx +++ b/frontend/components/applicant/Board.tsx @@ -1,58 +1,26 @@ "use client"; -import Board from "@/components/common/board/Board"; -import { getApplicantByPageWithGeneration } from "@/src/apis/applicant"; import ApplicantDetailRight from "./DetailRight.component"; import { useState } from "react"; import { ApplicantReq } from "@/src/apis/application"; import { applicantDataFinder } from "@/src/functions/finder"; -import { useQuery } from "@tanstack/react-query"; -import { useSearchParams } from "next/navigation"; -import { ORDER_MENU } from "@/src/constants"; -import { useSearchQuery } from "@/src/hooks/useSearchQuery"; import { type ApplicantPassState } from "../../src/apis/kanban"; import ApplicantDetailLeft from "./_applicant/ApplicantDetailLeft"; -import { findApplicantState } from "@/src/utils/applicant"; +import BoardTable from "../common/board/BoardTable"; +import useModalState from "../../src/hooks/useModalState"; +import BoardModal from "../common/board/BoardModal"; interface ApplicantBoardProps { generation: string; + applicants: ApplicantReq[][]; } -const ApplicantBoard = ({ generation }: ApplicantBoardProps) => { - const [data, setData] = useState([]); - const searchParams = useSearchParams(); - const pageIndex = searchParams.get("page") || "1"; - const order = searchParams.get("order") || ORDER_MENU.APPLICANT[0].type; - const { createSearchData } = useSearchQuery(pageIndex); - - const onClick = (id: string) => { - if (!allData) return; - setData( - applicants?.filter((value) => applicantDataFinder(value, "id") === id)[0] - ); - }; - - const { - data: allData, - isLoading, - isError, - } = useQuery( - ["allApplicant", pageIndex, order], - () => getApplicantByPageWithGeneration(+pageIndex, generation, order), - { - enabled: !!generation, - } +const ApplicantBoard = ({ generation, applicants }: ApplicantBoardProps) => { + const [selectedApplicant, setSelectedApplicant] = useState( + [] ); - if (!allData || isLoading) { - return
로딩중...
; - } - - if (isError) { - return
에러 발생
; - } - - const { applicants } = allData; + const { isOpen, openModal, closeModal } = useModalState(); const boardData = applicants.map((value) => ({ id: applicantDataFinder(value, "id"), @@ -81,27 +49,38 @@ const ApplicantBoard = ({ generation }: ApplicantBoardProps) => { )}` as ApplicantPassState, })); + const handleModalOpen = (id: string) => () => { + openModal(); + setSelectedApplicant( + applicants.filter((value) => applicantDataFinder(value, "id") === id)[0] + ); + }; + return ( - -
-
- + <> + + +
+
+ +
-
-
-
- +
+
+ +
-
- + + ); }; diff --git a/frontend/components/applicant/PageNavbar.tsx b/frontend/components/applicant/PageNavbar.tsx index 7bdebb19..19e5fe9f 100644 --- a/frontend/components/applicant/PageNavbar.tsx +++ b/frontend/components/applicant/PageNavbar.tsx @@ -1,54 +1,29 @@ "use client"; -import { useQuery } from "@tanstack/react-query"; import PageNavbarComponent from "../common/PageNavbar.component"; -import { useSearchParams } from "next/navigation"; -import { getApplicantByPageWithGeneration } from "@/src/apis/applicant"; -import { ORDER_MENU } from "@/src/constants"; -import { useSearchQuery } from "@/src/hooks/useSearchQuery"; import { useCreateQueryString } from "@/src/hooks/useCreateQueryString"; +import useApplicantPaginationParams from "../../src/hooks/applicant/useApplicantPaginationParams"; type ApplicantPageNavbarProps = { generation: string; + maxPage: number; }; -const ApplicantPageNavbar = ({ generation }: ApplicantPageNavbarProps) => { - const searchParams = useSearchParams(); - const pageIndex = searchParams.get("page") || "1"; - const type = searchParams.get("type") ?? "list"; - const order = searchParams.get("order") ?? ORDER_MENU.APPLICANT[0].type; - const page = searchParams.get("page") ?? "1"; - const search = searchParams.get("search") || ""; +const ApplicantPageNavbar = ({ + generation, + maxPage, +}: ApplicantPageNavbarProps) => { + const { pageIndex, type, order, searchKeyword } = + useApplicantPaginationParams(); - const { searchEndPage } = useSearchQuery(pageIndex); + const queryParams = { search: searchKeyword, type, order }; - const queryParams = { search, type, order }; const { createQueryString } = useCreateQueryString(); - const { - data: allData, - isLoading, - isError, - } = useQuery( - ["allApplicant", generation], - () => getApplicantByPageWithGeneration(+pageIndex, generation, order), - { - enabled: !!generation, - } - ); - - if (!allData || isLoading) { - return
로딩중...
; - } - - if (isError) { - return
에러 발생
; - } - - const { maxPage } = allData; + // Search 넣어야 함!!! return ( { + switch (size) { + case "s": + return cn("w-6", "h-6"); + case "m": + return cn("w-12", "h-12"); + case "l": + return cn("w-18", "h-18"); + case "xl": + return cn("w-24 h-24"); + default: + throw new Error( + "Error: Loading Spinner의 `size` Props는 s, m, l, xl 중 하나 입니다." + ); + } +}; + +const LoadingSpinner = ({ size = "s" }: LoadingSpinnerProps) => { + return ( +
+ + + + +
+ ); +}; + +export default LoadingSpinner; diff --git a/frontend/components/common/Search.tsx b/frontend/components/common/Search.tsx index c2a11917..6d2eb1f1 100644 --- a/frontend/components/common/Search.tsx +++ b/frontend/components/common/Search.tsx @@ -25,7 +25,7 @@ const Search = () => { params.delete("search"); } - replace(`${pathname}?${params.toString()}`); + replace(`${pathname}?${params}`); }); }, [debouncedSearchTerm, pathname]); diff --git a/frontend/components/common/board/Board.tsx b/frontend/components/common/board/Board.tsx deleted file mode 100644 index e4a43e32..00000000 --- a/frontend/components/common/board/Board.tsx +++ /dev/null @@ -1,51 +0,0 @@ -"use client"; - -import { type PropsWithChildren } from "react"; -import useModalState from "../../../src/hooks/useModalState"; -import BoardModal from "./BoardModal"; -import BoardTable from "./BoardTable"; -import { type ApplicantPassState } from "../../../src/apis/kanban"; - -export interface BoardData { - id: string; - title: string; - subElements: string[]; - time?: Date; - passState?: ApplicantPassState; -} - -interface BoardProps extends PropsWithChildren { - onClick?: (id: string) => void; - wrapperClassName?: string; - boardData: BoardData[]; -} - -const Board = ({ - children, - onClick, - wrapperClassName, - boardData, -}: BoardProps) => { - const { isOpen, openModal, closeModal } = useModalState(); - - const handleModalOpen = (id: string) => () => { - openModal(); - onClick && onClick(id); - }; - - return ( - <> - - - {children} - - - ); -}; - -export default Board; diff --git a/frontend/components/common/board/BoardTable.tsx b/frontend/components/common/board/BoardTable.tsx index acb64d06..57660833 100644 --- a/frontend/components/common/board/BoardTable.tsx +++ b/frontend/components/common/board/BoardTable.tsx @@ -1,6 +1,6 @@ import Txt from "../Txt.component"; -import { BoardData } from "./Board"; import BoardCell from "./BoardCell.component"; +import { BoardData } from "./types"; interface BoardTableProps { boardRows: BoardData[]; diff --git a/frontend/components/common/board/types.ts b/frontend/components/common/board/types.ts new file mode 100644 index 00000000..ecf50e2f --- /dev/null +++ b/frontend/components/common/board/types.ts @@ -0,0 +1,9 @@ +import { ApplicantPassState } from "../../../src/apis/kanban"; + +export interface BoardData { + id: string; + title: string; + subElements: string[]; + time?: Date; + passState?: ApplicantPassState; +} diff --git a/frontend/components/interview/Board.tsx b/frontend/components/interview/Board.tsx index a9946935..d1da31ef 100644 --- a/frontend/components/interview/Board.tsx +++ b/frontend/components/interview/Board.tsx @@ -1,31 +1,27 @@ "use client"; import InterviewDetailLeftComponent from "./modal/DetailLeft.component"; -import Board from "../common/board/Board"; import InterviewDetailRightComponent from "./modal/DetailRight.component"; -import { useQuery, useQueryClient } from "@tanstack/react-query"; +import { useQueryClient } from "@tanstack/react-query"; import { useAtom } from "jotai"; import { interViewApplicantIdState } from "@/src/stores/interview/Interview.atom"; -import { useSearchParams } from "next/navigation"; -import { getInterviewRecordByPageWithOrder } from "@/src/apis/interview"; -import { CHARACTERS, ORDER_MENU } from "@/src/constants"; -import { useSearchQuery } from "@/src/hooks/useSearchQuery"; -import { removeAll } from "@/src/functions/replacer"; +import BoardTable from "../common/board/BoardTable"; +import useModalState from "../../src/hooks/useModalState"; +import BoardModal from "../common/board/BoardModal"; +import { BoardData } from "../common/board/types"; interface InterviewBoardProps { - generation: string; + interviewRecords: BoardData[]; } -const InterviewBoard = ({ generation }: InterviewBoardProps) => { +const InterviewBoard = ({ interviewRecords }: InterviewBoardProps) => { const [applicantId, setApplicantId] = useAtom(interViewApplicantIdState); - const searchParams = useSearchParams(); - const pageIndex = searchParams.get("page") || "1"; - const order = searchParams.get("order") || ORDER_MENU.INTERVIEW[0].type; - const { createSearchData } = useSearchQuery(pageIndex); const queryClient = useQueryClient(); + const { isOpen, openModal, closeModal } = useModalState(); - const onClick = (id: string) => { + const handleModalOpen = (id: string) => () => { + openModal(); setApplicantId(id); queryClient.invalidateQueries({ queryKey: ["record", applicantId], @@ -35,59 +31,30 @@ const InterviewBoard = ({ generation }: InterviewBoardProps) => { }); }; - const { data, status } = useQuery({ - queryKey: ["allInterviewRecord", pageIndex, order, generation], - queryFn: () => - getInterviewRecordByPageWithOrder({ - page: +pageIndex, - order: order, - year: generation, - }), - }); - - if (status === "loading") { - return
loading...
; - } - - if (status === "error") { - return
에러가 발생하였습니다. 잠시 후 다시 시도해보세요.
; - } - - const boardData = data.records.map((value) => { - return { - id: value.applicantId, - title: value.name, - subElements: [ - removeAll(value.field1, CHARACTERS.DOUBLE_QUOTE).concat( - CHARACTERS.SLASH, - removeAll(value.field2, CHARACTERS.DOUBLE_QUOTE) - ), - removeAll(value.grade, CHARACTERS.DOUBLE_QUOTE).concat( - CHARACTERS.SPACE, - removeAll(value.semester, CHARACTERS.DOUBLE_QUOTE) - ), - ], - passState: value.state.passState, - }; - }); - return ( - onClick(id)} - > -
-
- + <> + + +
+
+ +
-
-
-
- +
+
+ +
-
- + + ); }; diff --git a/frontend/components/interview/InterviewerList.tsx b/frontend/components/interview/InterviewerList.tsx new file mode 100644 index 00000000..8114a0b2 --- /dev/null +++ b/frontend/components/interview/InterviewerList.tsx @@ -0,0 +1,74 @@ +"use client"; + +import { useQuery } from "@tanstack/react-query"; +import useInterviewerPaginationParams from "../../src/hooks/interview/useInterviewerPaginationParams"; +import { getInterviewRecordByPageWithOrder } from "../../src/apis/interview"; +import InterviewBoard from "./Board"; +import InterviewPageNavbar from "./PageNavbar"; +import LoadingSpinner from "../common/LoadingSpinner"; +import { removeAll } from "../../src/functions/replacer"; +import { CHARACTERS } from "../../src/constants"; + +interface InterviewerListProps { + generation: string; +} + +const InterviewerList = ({ generation }: InterviewerListProps) => { + const { pageIndex, order, searchKeyword } = useInterviewerPaginationParams(); + + const { data: interview, status } = useQuery({ + queryKey: [ + "allInterviewRecord", + { pageIndex, order, generation, searchKeyword }, + ], + queryFn: () => + getInterviewRecordByPageWithOrder({ + page: +pageIndex, + order: order, + year: generation, + searchKeyword, + }), + }); + + if (status === "loading") { + return ( +
+ +
+ ); + } + + if (status === "error") { + return
에러가 발생하였습니다. 잠시 후 다시 시도해보세요.
; + } + + const interviewRecords = interview.records.map((value) => { + return { + id: value.applicantId, + title: value.name, + subElements: [ + removeAll(value.field1, CHARACTERS.DOUBLE_QUOTE).concat( + CHARACTERS.SLASH, + removeAll(value.field2, CHARACTERS.DOUBLE_QUOTE) + ), + removeAll(value.grade, CHARACTERS.DOUBLE_QUOTE).concat( + CHARACTERS.SPACE, + removeAll(value.semester, CHARACTERS.DOUBLE_QUOTE) + ), + ], + passState: value.state.passState, + }; + }); + + return ( + <> + + + + ); +}; + +export default InterviewerList; diff --git a/frontend/components/interview/PageNavbar.tsx b/frontend/components/interview/PageNavbar.tsx index 5228fcfe..77821464 100644 --- a/frontend/components/interview/PageNavbar.tsx +++ b/frontend/components/interview/PageNavbar.tsx @@ -1,59 +1,28 @@ "use client"; -import { useQuery } from "@tanstack/react-query"; import PageNavbarComponent from "../common/PageNavbar.component"; -import { useSearchParams } from "next/navigation"; -import { getInterviewRecordByPageWithOrder } from "@/src/apis/interview"; -import { ORDER_MENU } from "@/src/constants"; -import { useSearchQuery } from "@/src/hooks/useSearchQuery"; import { useCreateQueryString } from "@/src/hooks/useCreateQueryString"; +import useInterviewerPaginationParams from "../../src/hooks/interview/useInterviewerPaginationParams"; type InterviewPageNavbarProps = { + maxPage: number; generation: string; }; -const InterviewPageNavbar = ({ generation }: InterviewPageNavbarProps) => { - const searchParams = useSearchParams(); - const pageIndex = searchParams.get("page") || "1"; - const type = searchParams.get("type") ?? "list"; - const order = searchParams.get("order") ?? ORDER_MENU.INTERVIEW[0].type; - const page = searchParams.get("page") ?? "1"; - const search = searchParams.get("search") || ""; +const InterviewPageNavbar = ({ + maxPage, + generation, +}: InterviewPageNavbarProps) => { + const { pageIndex, type, order, searchKeyword } = + useInterviewerPaginationParams(); - const { searchEndPage } = useSearchQuery(pageIndex); + const queryParams = { type, order, search: searchKeyword }; - const queryParams = { search, type, order }; const { createQueryString } = useCreateQueryString(); - const { - data: allData, - isLoading, - isError, - } = useQuery( - ["allApplicant", order, generation], - () => - getInterviewRecordByPageWithOrder({ - page: +pageIndex, - order: order, - year: generation, - }), - { - enabled: !!generation, - } - ); - - if (!allData || isLoading) { - return
로딩중...
; - } - - if (isError) { - return
에러 발생
; - } - - const { maxPage } = allData; return ( {
{fieldAverages.map(({ fieldName, score }) => ( - + ))}
diff --git a/frontend/components/interview/modal/score/MyScoreForm.tsx b/frontend/components/interview/modal/score/MyScoreForm.tsx index 83193f9f..f6d8ffe3 100644 --- a/frontend/components/interview/modal/score/MyScoreForm.tsx +++ b/frontend/components/interview/modal/score/MyScoreForm.tsx @@ -79,6 +79,7 @@ const MyScoreForm = ({
{myScores.map(({ fieldName, score }) => ( => { + const queryParams = new URLSearchParams({ order }); + + if (searchKeyword !== undefined && searchKeyword.trim() !== "") { + queryParams.append("searchKeyword", searchKeyword); + } + const { data: { pageInfo, answers }, } = await https.get( - `/page/${page}/year/${+generation}/applicants?order=${order}` + `/page/${page}/year/${+generation}/applicants?${queryParams}` ); return { diff --git a/frontend/src/apis/interview/index.ts b/frontend/src/apis/interview/index.ts index 4751c5fe..238b11e3 100644 --- a/frontend/src/apis/interview/index.ts +++ b/frontend/src/apis/interview/index.ts @@ -28,17 +28,23 @@ interface GetInterviewRecordByPageWithOrderReq { page: number; order: string; year: string; + searchKeyword?: string; } export const getInterviewRecordByPageWithOrder = async ({ page, - ...queryParams + order, + year, + searchKeyword, }: GetInterviewRecordByPageWithOrderReq) => { + const queryParams = new URLSearchParams({ order, year }); + if (searchKeyword !== undefined && searchKeyword.trim() !== "") { + queryParams.append("searchKeyword", searchKeyword); + } + const { data: { records, pageInfo }, - } = await https.get( - `/page/${page}/records?${new URLSearchParams(queryParams)}` - ); + } = await https.get(`/page/${page}/records?${queryParams}`); return { maxPage: pageInfo.endPage, diff --git a/frontend/src/apis/search/index.ts b/frontend/src/apis/search/index.ts deleted file mode 100644 index 64ad3b26..00000000 --- a/frontend/src/apis/search/index.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { https } from "@/src/functions/axios"; -import { PageInfo } from "../applicant"; - -export interface SearchInterviewerRes { - id: string; - name: string; - field: string; - field1: string; - field2: string; - grade: string; - semester: string; - uploadDate: string; -} - -export interface GetSearchTermReq { - page: number; - searchTerm: string; -} - -export interface GetSearchTermRes { - answers: SearchInterviewerRes[]; - pageInfo: PageInfo; -} - -export const getSearchTerm = async ({ page, searchTerm }: GetSearchTermReq) => { - const { - data: { answers, pageInfo }, - } = await https.get( - `/page/${page}/search/${searchTerm}/applicants` - ); - - return { - answers, - endPage: pageInfo.endPage, - }; -}; diff --git a/frontend/src/hooks/applicant/useApplicantPaginationParams.ts b/frontend/src/hooks/applicant/useApplicantPaginationParams.ts new file mode 100644 index 00000000..805330d0 --- /dev/null +++ b/frontend/src/hooks/applicant/useApplicantPaginationParams.ts @@ -0,0 +1,14 @@ +import { useSearchParams } from "next/navigation"; +import { ORDER_MENU } from "../../constants"; + +const useApplicantPaginationParams = () => { + const searchParams = useSearchParams(); + const pageIndex = searchParams.get("page") || "1"; + const order = searchParams.get("order") || ORDER_MENU.APPLICANT[0].type; + const searchKeyword = searchParams.get("search") || ""; + const type = searchParams.get("type") ?? "list"; + + return { pageIndex, order, searchKeyword, type }; +}; + +export default useApplicantPaginationParams; diff --git a/frontend/src/hooks/interview/useInterviewerPaginationParams.ts b/frontend/src/hooks/interview/useInterviewerPaginationParams.ts new file mode 100644 index 00000000..9568e5cb --- /dev/null +++ b/frontend/src/hooks/interview/useInterviewerPaginationParams.ts @@ -0,0 +1,14 @@ +import { useSearchParams } from "next/navigation"; +import { ORDER_MENU } from "../../constants"; + +const useInterviewerPaginationParams = () => { + const searchParams = useSearchParams(); + const pageIndex = searchParams.get("page") || "1"; + const order = searchParams.get("order") || ORDER_MENU.INTERVIEW[0].type; + const searchKeyword = searchParams.get("search") || ""; + const type = searchParams.get("type") ?? "list"; + + return { pageIndex, order, searchKeyword, type }; +}; + +export default useInterviewerPaginationParams; diff --git a/frontend/src/hooks/useSearchQuery.tsx b/frontend/src/hooks/useSearchQuery.tsx deleted file mode 100644 index cf1c6f98..00000000 --- a/frontend/src/hooks/useSearchQuery.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { useQuery } from "@tanstack/react-query"; -import { useSearchParams } from "next/navigation"; -import { getSearchTerm } from "@/src/apis/search"; -import { removeAll } from "../functions/replacer"; -import { CHARACTERS } from "@/src/constants"; - -const { DOUBLE_QUOTE, SLASH, SPACE } = CHARACTERS; - -export const useSearchQuery = (pageIndex: string) => { - const searchParams = useSearchParams(); - const searchTerm = searchParams.get("search") || ""; - - const { data: search } = useQuery({ - queryKey: ["searchTerm", pageIndex, searchTerm], - queryFn: () => getSearchTerm({ page: +pageIndex, searchTerm }), - enabled: !!searchTerm, - }); - - const searchEndPage = search?.endPage; - - // TODO: Search는 대대적인 개편이 들어갈 예정이라, 따로 passState에 대한 처리를 하지 않음. - const createSearchData = (isIncludeUploadDate = false) => { - return search?.answers?.map((value) => { - const searchInterviewData = { - id: value.id, - title: `[${value.field}] ${value.name}`, - subElements: [ - removeAll(value.field1, DOUBLE_QUOTE).concat( - SLASH, - removeAll(value.field2, DOUBLE_QUOTE) - ), - removeAll(value.grade, DOUBLE_QUOTE).concat( - SPACE, - removeAll(value.semester, DOUBLE_QUOTE) - ), - ], - }; - - if (isIncludeUploadDate) { - searchInterviewData.subElements.push( - new Date(Number(value.uploadDate)).toLocaleString("ko-KR", { - dateStyle: "short", - }) - ); - } - - return searchInterviewData; - }); - }; - - return { createSearchData, searchEndPage }; -};