From df6591821d37aa3153f552df8726c63bb172d06f Mon Sep 17 00:00:00 2001 From: cccwon2 Date: Tue, 10 Dec 2024 22:38:06 +0900 Subject: [PATCH 1/6] =?UTF-8?q?refactor:=20=ED=8F=BC=20=EB=A7=8C=EB=93=A4?= =?UTF-8?q?=EA=B8=B0=20FloatingBtn=20=EC=9C=BC=EB=A1=9C=20=EA=B5=90?= =?UTF-8?q?=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(pages)/albaList/page.tsx | 15 ++++++--------- src/app/(pages)/myAlbaform/(role)/owner/page.tsx | 15 ++++++--------- .../stories/design-system/pages/albaList/page.tsx | 6 ++++-- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/app/(pages)/albaList/page.tsx b/src/app/(pages)/albaList/page.tsx index a6591cf8..af816806 100644 --- a/src/app/(pages)/albaList/page.tsx +++ b/src/app/(pages)/albaList/page.tsx @@ -13,6 +13,7 @@ import { useUser } from "@/hooks/queries/user/me/useUser"; import Link from "next/link"; import { IoAdd } from "react-icons/io5"; import { userRoles } from "@/constants/userRoles"; +import FloatingBtn from "@/app/components/button/default/FloatingBtn"; const FORMS_PER_PAGE = 10; @@ -130,15 +131,11 @@ export default function AlbaList() {
{/* 폼 만들기 버튼 - 고정 위치 */} {isOwner && ( -
- - - 폼 만들기 - -
+ + } variant="orange"> + 폼 만들기 + + )} {!data?.pages?.[0]?.data?.length ? ( diff --git a/src/app/(pages)/myAlbaform/(role)/owner/page.tsx b/src/app/(pages)/myAlbaform/(role)/owner/page.tsx index 842ac803..189572c1 100644 --- a/src/app/(pages)/myAlbaform/(role)/owner/page.tsx +++ b/src/app/(pages)/myAlbaform/(role)/owner/page.tsx @@ -13,6 +13,7 @@ import { useUser } from "@/hooks/queries/user/me/useUser"; import Link from "next/link"; import { IoAdd } from "react-icons/io5"; import { userRoles } from "@/constants/userRoles"; +import FloatingBtn from "@/app/components/button/default/FloatingBtn"; const FORMS_PER_PAGE = 10; @@ -186,15 +187,11 @@ export default function AlbaList() {
{/* 폼 만들기 버튼 - 고정 위치 */} {isOwner && ( -
- - - 폼 만들기 - -
+ + } variant="orange"> + 폼 만들기 + + )} {!data?.pages?.[0]?.data?.length ? ( diff --git a/src/app/stories/design-system/pages/albaList/page.tsx b/src/app/stories/design-system/pages/albaList/page.tsx index afe9cb28..d44f937f 100644 --- a/src/app/stories/design-system/pages/albaList/page.tsx +++ b/src/app/stories/design-system/pages/albaList/page.tsx @@ -12,6 +12,7 @@ import StorySearchSection from "@/app/stories/design-system/components/layout/Se import Header from "@/app/stories/design-system/components/layout/Header"; import Link from "next/link"; import { IoAdd } from "react-icons/io5"; +import FloatingBtn from "@/app/components/button/default/FloatingBtn"; interface AlbaListProps { mockData?: FormListType[][]; @@ -107,8 +108,9 @@ const AlbaList: React.FC = () => { href="/addform" className="flex items-center gap-2 rounded-lg bg-[#FFB800] px-4 py-3 text-base font-semibold text-white shadow-lg transition-all hover:bg-[#FFA800] md:px-6 md:text-lg" > - - 폼 만들기 + } variant="orange"> + 폼 만들기 +
From 6e0a88c5d517b20e3d40e184238b3818696607ff Mon Sep 17 00:00:00 2001 From: cccwon2 Date: Wed, 11 Dec 2024 00:10:21 +0900 Subject: [PATCH 2/6] =?UTF-8?q?feat:=20=EB=82=B4=20=EC=95=8C=EB=B0=94?= =?UTF-8?q?=ED=8F=BC=20>=20=EC=A7=80=EC=9B=90=EC=9E=90=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/ApplicantSortSection.tsx | 45 +++++++ .../myAlbaform/(role)/applicant/page.tsx | 122 ++++++++++++++++-- .../card/cardList/MyApplicationListItem.tsx | 11 +- .../MyApplicationListItem.stories.tsx | 6 +- src/types/application.ts | 1 + src/types/response/application.d.ts | 22 ---- 6 files changed, 170 insertions(+), 37 deletions(-) create mode 100644 src/app/(pages)/myAlbaform/(role)/applicant/components/ApplicantSortSection.tsx diff --git a/src/app/(pages)/myAlbaform/(role)/applicant/components/ApplicantSortSection.tsx b/src/app/(pages)/myAlbaform/(role)/applicant/components/ApplicantSortSection.tsx new file mode 100644 index 00000000..68f7eb67 --- /dev/null +++ b/src/app/(pages)/myAlbaform/(role)/applicant/components/ApplicantSortSection.tsx @@ -0,0 +1,45 @@ +"use client"; + +import React from "react"; +import FilterDropdown from "@/app/components/button/dropdown/FilterDropdown"; +import { formStatusOptions } from "@/constants/formOptions"; +import { useRouter } from "next/navigation"; + +const APPLICANT_SORT_OPTIONS = [ + { label: "전체", value: "" }, + { label: "최신순", value: formStatusOptions.INTERVIEW_PENDING }, + { label: "시급높은순", value: formStatusOptions.INTERVIEW_COMPLETED }, + { label: "지원자 많은순", value: formStatusOptions.HIRED }, + { label: "스크랩 많은순", value: formStatusOptions.REJECTED }, +]; + +interface ApplicantSortSectionProps { + pathname: string; + searchParams: URLSearchParams; +} + +export default function ApplicantSortSection({ pathname, searchParams }: ApplicantSortSectionProps) { + const router = useRouter(); + const currentOrderBy = searchParams.get("orderBy") || ""; + + const currentLabel = + APPLICANT_SORT_OPTIONS.find((opt) => opt.value === currentOrderBy)?.label || APPLICANT_SORT_OPTIONS[0].label; + + const handleSortChange = (selected: string) => { + const option = APPLICANT_SORT_OPTIONS.find((opt) => opt.label === selected); + if (option) { + const params = new URLSearchParams(searchParams); + params.set("orderBy", option.value); + router.push(`${pathname}?${params.toString()}`); + } + }; + + return ( + option.label)} + className="!w-28 md:!w-40" + initialValue={currentLabel} + onChange={handleSortChange} + /> + ); +} diff --git a/src/app/(pages)/myAlbaform/(role)/applicant/page.tsx b/src/app/(pages)/myAlbaform/(role)/applicant/page.tsx index cbff9fa0..5b22c234 100644 --- a/src/app/(pages)/myAlbaform/(role)/applicant/page.tsx +++ b/src/app/(pages)/myAlbaform/(role)/applicant/page.tsx @@ -1,25 +1,76 @@ "use client"; +import React from "react"; import { useEffect } from "react"; -import { useRouter } from "next/navigation"; +import { usePathname, useRouter, useSearchParams } from "next/navigation"; +import { useInView } from "react-intersection-observer"; import { useUser } from "@/hooks/queries/user/me/useUser"; import { userRoles } from "@/constants/userRoles"; +import ApplicantSortSection from "./components/ApplicantSortSection"; +import SearchSection from "@/app/components/layout/forms/SearchSection"; +import MyApplicationListItem from "@/app/components/card/cardList/MyApplicationListItem"; +import { useMyApplications } from "@/hooks/queries/user/me/useMyApplications"; + +const APPLICATIONS_PER_PAGE = 10; export default function ApplicantPage() { const router = useRouter(); - const { user, isLoading } = useUser(); + const pathname = usePathname(); + const searchParams = useSearchParams(); + const { user, isLoading: isUserLoading } = useUser(); + + // 무한 스크롤을 위한 Intersection Observer 설정 + const { ref, inView } = useInView({ + threshold: 0.1, + triggerOnce: false, + rootMargin: "100px", + }); + + // 검색 및 정렬 상태 관리 + const status = searchParams.get("status") || undefined; + const keyword = searchParams.get("keyword") || undefined; + + const { + data, + fetchNextPage, + hasNextPage, + isFetchingNextPage, + isLoading: isLoadingData, + error, + } = useMyApplications({ + limit: APPLICATIONS_PER_PAGE, + status, + keyword, + }); useEffect(() => { - if (!isLoading) { + if (!isUserLoading) { if (!user) { router.push("/login"); } else if (user.role === userRoles.OWNER) { router.push("/myAlbaform/owner"); } } - }, [user, isLoading, router]); + }, [user, isUserLoading, router]); + + // 스크롤이 하단에 도달하면 다음 페이지 로드 + useEffect(() => { + if (inView && hasNextPage && !isFetchingNextPage) { + fetchNextPage(); + } + }, [inView, hasNextPage, isFetchingNextPage, fetchNextPage]); + + // 에러 상태 처리 + if (error) { + return ( +
+

지원 내역을 불러오는데 실패했습니다.

+
+ ); + } - if (isLoading) { + // 로딩 상태 처리 + if (isUserLoading || isLoadingData) { return (
로딩 중...
@@ -27,11 +78,64 @@ export default function ApplicantPage() { ); } - // 지원자용 페이지 컨텐츠 return ( -
-

지원자 페이지

- {/* 지원자용 컨텐츠 */} +
+ {/* 검색 섹션과 필터를 고정 위치로 설정 */} +
+ {/* 검색 섹션 */} +
+
+ +
+
+ + {/* 필터 섹션 */} +
+
+ +
+
+
+ + {/* 메인 콘텐츠 영역 */} +
+ {!data?.pages?.[0]?.data?.length ? ( +
+

지원 내역이 없습니다.

+
+ ) : ( +
+
+ {data?.pages.map((page) => ( + + {page.data.map((application) => ( +
+ +
+ ))} +
+ ))} +
+ + {/* 무한 스크롤 트리거 영역 */} +
+ {isFetchingNextPage && ( +
+
+
+ )} +
+
+ )} +
); } diff --git a/src/app/components/card/cardList/MyApplicationListItem.tsx b/src/app/components/card/cardList/MyApplicationListItem.tsx index 353b298e..5e9bd328 100644 --- a/src/app/components/card/cardList/MyApplicationListItem.tsx +++ b/src/app/components/card/cardList/MyApplicationListItem.tsx @@ -3,9 +3,9 @@ import { formatRecruitDate } from "@/utils/workDayFormatter"; import Chip from "@/app/components/chip/Chip"; import Image from "next/image"; import { applicationStatus, ApplicationStatus } from "@/types/application"; -import { ApplicationListItemProps } from "@/types/response/application"; import axios from "axios"; import toast from "react-hot-toast"; +import { MyApplicationType } from "@/types/response/user"; // 지원 상태에 따른 Chip 컴포넌트의 variant를 반환하는 함수 const getStatusVariant = (status: ApplicationStatus) => { @@ -22,6 +22,8 @@ const getStatusVariant = (status: ApplicationStatus) => { // 지원 상태에 따른 한글 라벨을 반환하는 함수 const getStatusLabel = (status: ApplicationStatus) => { switch (status) { + case applicationStatus.ALL: + return "전체"; case applicationStatus.HIRED: return "채용 완료"; case applicationStatus.REJECTED: @@ -35,7 +37,7 @@ const getStatusLabel = (status: ApplicationStatus) => { } }; -const MyApplicationListItem = ({ createdAt, status, resumeId, resumeName, form }: ApplicationListItemProps) => { +const MyApplicationListItem = ({ id, createdAt, status, resumeId, resumeName, form }: MyApplicationType) => { // 현재 공고의 모집 상태를 가져옴 const recruitmentStatus = getRecruitmentStatus(new Date(form.recruitmentEndDate)); @@ -107,7 +109,10 @@ const MyApplicationListItem = ({ createdAt, status, resumeId, resumeName, form } {/* 하단 상태 표시 영역: 지원 상태와 모집 상태 */}
- +
diff --git a/src/app/stories/design-system/components/card/cardList/MyApplicationListItem.stories.tsx b/src/app/stories/design-system/components/card/cardList/MyApplicationListItem.stories.tsx index baa2e216..f02e727e 100644 --- a/src/app/stories/design-system/components/card/cardList/MyApplicationListItem.stories.tsx +++ b/src/app/stories/design-system/components/card/cardList/MyApplicationListItem.stories.tsx @@ -26,8 +26,8 @@ const mockProps = { storeName: "스타벅스 강남점", id: 1, }, - recruitmentEndDate: "2024-12-31T00:00:00.000Z", - recruitmentStartDate: "2024-06-01T00:00:00.000Z", + recruitmentEndDate: new Date("2024-12-31T00:00:00.000Z"), + recruitmentStartDate: new Date("2024-06-01T00:00:00.000Z"), description: "스타벅스 강남점에서 함께할 파트타이머를 모집합니다. 주말 근무 가능자 우대, 경력자 우대, 장기 근무자 우대", title: "스타벅스 강남점 파트타이머 모집", @@ -80,7 +80,7 @@ export const RecruitmentClosed: Story = { ...mockProps, form: { ...mockProps.form, - recruitmentEndDate: "2024-01-01T00:00:00.000Z", + recruitmentEndDate: new Date("2024-01-01T00:00:00.000Z"), }, }, }; diff --git a/src/types/application.ts b/src/types/application.ts index b88f462d..e32662d3 100644 --- a/src/types/application.ts +++ b/src/types/application.ts @@ -1,4 +1,5 @@ export const applicationStatus = { + ALL: "", REJECTED: "REJECTED", INTERVIEW_PENDING: "INTERVIEW_PENDING", INTERVIEW_COMPLETED: "INTERVIEW_COMPLETED", diff --git a/src/types/response/application.d.ts b/src/types/response/application.d.ts index e3a33c96..f2686cdf 100644 --- a/src/types/response/application.d.ts +++ b/src/types/response/application.d.ts @@ -18,25 +18,3 @@ export interface ApplicationListResponse { data: Array; nextCursor: number | null; } - -// 지원 목록 아이템 Props -export interface ApplicationListItemProps { - id: number; - updatedAt: Date; - createdAt: Date; - status: ApplicationStatus; - resumeName: string; - resumeId: number; - form: { - id: number; - title: string; - description: string; - recruitmentStartDate: string; - recruitmentEndDate: string; - owner: { - id: number; - storeName: string; - imageUrl: string; - }; - }; -} From 2e411111311d275edd1764b12bb3bf2feb48f84d Mon Sep 17 00:00:00 2001 From: cccwon2 Date: Wed, 11 Dec 2024 00:50:16 +0900 Subject: [PATCH 3/6] =?UTF-8?q?chore:=20=EC=9E=90=EC=9E=98=ED=95=9C=20UI?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=EB=93=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(pages)/albaList/page.tsx | 6 +--- .../myAlbaform/(role)/applicant/page.tsx | 2 +- .../components/card/cardList/AlbaListItem.tsx | 34 +++++++++++++++++-- .../card/cardList/MyApplicationListItem.tsx | 19 +++++++---- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/src/app/(pages)/albaList/page.tsx b/src/app/(pages)/albaList/page.tsx index af816806..721e35f0 100644 --- a/src/app/(pages)/albaList/page.tsx +++ b/src/app/(pages)/albaList/page.tsx @@ -149,11 +149,7 @@ export default function AlbaList() { {page.data.map((form) => (
- - - +
))}
diff --git a/src/app/(pages)/myAlbaform/(role)/applicant/page.tsx b/src/app/(pages)/myAlbaform/(role)/applicant/page.tsx index 5b22c234..d4867c6e 100644 --- a/src/app/(pages)/myAlbaform/(role)/applicant/page.tsx +++ b/src/app/(pages)/myAlbaform/(role)/applicant/page.tsx @@ -105,7 +105,7 @@ export default function ApplicantPage() {
) : (
-
+
{data?.pages.map((page) => ( {page.data.map((application) => ( diff --git a/src/app/components/card/cardList/AlbaListItem.tsx b/src/app/components/card/cardList/AlbaListItem.tsx index 2db50c33..09116d93 100644 --- a/src/app/components/card/cardList/AlbaListItem.tsx +++ b/src/app/components/card/cardList/AlbaListItem.tsx @@ -64,9 +64,24 @@ const AlbaListItem = ({ title: "지원하기", content: "정말로 지원하시겠습니까?", onConfirm: () => { + openModal("customForm", { + isOpen: false, + title: "", + content: "", + onConfirm: () => {}, + onCancel: () => {}, + }); router.push(`/apply/${id}`); }, - onCancel: () => {}, + onCancel: () => { + openModal("customForm", { + isOpen: false, + title: "", + content: "", + onConfirm: () => {}, + onCancel: () => {}, + }); + }, }); }; @@ -78,9 +93,24 @@ const AlbaListItem = ({ title: "스크랩 확인", content: "이 공고를 스크랩하시겠습니까?", onConfirm: () => { + openModal("customForm", { + isOpen: false, + title: "", + content: "", + onConfirm: () => {}, + onCancel: () => {}, + }); scrap(); }, - onCancel: () => {}, + onCancel: () => { + openModal("customForm", { + isOpen: false, + title: "", + content: "", + onConfirm: () => {}, + onCancel: () => {}, + }); + }, }); }; diff --git a/src/app/components/card/cardList/MyApplicationListItem.tsx b/src/app/components/card/cardList/MyApplicationListItem.tsx index 5e9bd328..fe06f7a1 100644 --- a/src/app/components/card/cardList/MyApplicationListItem.tsx +++ b/src/app/components/card/cardList/MyApplicationListItem.tsx @@ -6,6 +6,7 @@ import { applicationStatus, ApplicationStatus } from "@/types/application"; import axios from "axios"; import toast from "react-hot-toast"; import { MyApplicationType } from "@/types/response/user"; +import { MdOutlineImage } from "react-icons/md"; // 지원 상태에 따른 Chip 컴포넌트의 variant를 반환하는 함수 const getStatusVariant = (status: ApplicationStatus) => { @@ -38,9 +39,6 @@ const getStatusLabel = (status: ApplicationStatus) => { }; const MyApplicationListItem = ({ id, createdAt, status, resumeId, resumeName, form }: MyApplicationType) => { - // 현재 공고의 모집 상태를 가져옴 - const recruitmentStatus = getRecruitmentStatus(new Date(form.recruitmentEndDate)); - // 이력서 다운로드 핸들러 const handleResumeDownload = async () => { try { @@ -72,7 +70,7 @@ const MyApplicationListItem = ({ id, createdAt, status, resumeId, resumeName, fo }; return ( -
+
{/* 상단 영역: 지원일시와 이력서 링크 */}
@@ -94,7 +92,13 @@ const MyApplicationListItem = ({ id, createdAt, status, resumeId, resumeName, fo {/* 가게 프로필 이미지와 이름 */}
- {form.owner.storeName} + {form.owner.imageUrl ? ( + {form.owner.storeName} + ) : ( +
+ +
+ )}
{form.owner.storeName}
@@ -115,7 +119,10 @@ const MyApplicationListItem = ({ id, createdAt, status, resumeId, resumeName, fo />
- +
From b7561c4c09be443373aa67598f0542bac35dc966 Mon Sep 17 00:00:00 2001 From: cccwon2 Date: Wed, 11 Dec 2024 00:58:48 +0900 Subject: [PATCH 4/6] =?UTF-8?q?chore:=20chomatic=20=EC=B5=9C=EC=8B=A0=20?= =?UTF-8?q?=EB=B2=84=EC=A0=84=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 214fc38d..cd10e0dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,7 +55,7 @@ "@typescript-eslint/parser": "^8.9.0", "@vitejs/plugin-react": "^4.3.3", "autoprefixer": "^10.4.20", - "chromatic": "^11.18.1", + "chromatic": "^11.20.0", "dotenv-cli": "^7.4.3", "eslint": "^8.57.1", "eslint-config-next": "14.2.15", diff --git a/package.json b/package.json index 36b5251d..ae6f9875 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "@typescript-eslint/parser": "^8.9.0", "@vitejs/plugin-react": "^4.3.3", "autoprefixer": "^10.4.20", - "chromatic": "^11.18.1", + "chromatic": "^11.20.0", "dotenv-cli": "^7.4.3", "eslint": "^8.57.1", "eslint-config-next": "14.2.15", From 51fe71b17f54fd6cfe161adbc549c7122754f820 Mon Sep 17 00:00:00 2001 From: cccwon2 Date: Wed, 11 Dec 2024 10:20:20 +0900 Subject: [PATCH 5/6] =?UTF-8?q?chore:=20=EB=AA=A8=EB=8B=AC=20confirm=20?= =?UTF-8?q?=EB=AC=B8=EA=B5=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/components/card/cardList/AlbaListItem.tsx | 4 ++-- src/app/components/card/cardList/ScrapListItem.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/components/card/cardList/AlbaListItem.tsx b/src/app/components/card/cardList/AlbaListItem.tsx index 09116d93..3e3c6445 100644 --- a/src/app/components/card/cardList/AlbaListItem.tsx +++ b/src/app/components/card/cardList/AlbaListItem.tsx @@ -62,7 +62,7 @@ const AlbaListItem = ({ openModal("customForm", { isOpen: true, title: "지원하기", - content: "정말로 지원하시겠습니까?", + content: "지원하시겠습니까?", onConfirm: () => { openModal("customForm", { isOpen: false, @@ -91,7 +91,7 @@ const AlbaListItem = ({ openModal("customForm", { isOpen: true, title: "스크랩 확인", - content: "이 공고를 스크랩하시겠습니까?", + content: "스크랩하시겠습니까?", onConfirm: () => { openModal("customForm", { isOpen: false, diff --git a/src/app/components/card/cardList/ScrapListItem.tsx b/src/app/components/card/cardList/ScrapListItem.tsx index 4eea5b64..8503636a 100644 --- a/src/app/components/card/cardList/ScrapListItem.tsx +++ b/src/app/components/card/cardList/ScrapListItem.tsx @@ -61,7 +61,7 @@ const ScrapListItem = ({ openModal("customForm", { isOpen: true, title: "지원하기", - content: "정말로 지원하시겠습니까?", + content: "지원하시겠습니까?", onConfirm: () => { router.push(`/apply/${id}`); }, @@ -75,7 +75,7 @@ const ScrapListItem = ({ openModal("customForm", { isOpen: true, title: "스크랩 취소 확인", - content: "정말로 스크랩을 취소하시겠습니까?", + content: "스크랩을 취소하시겠습니까?", onConfirm: () => { unscrap(); }, From 9379b85c93a4a7ac02271d595c035917e158b1cc Mon Sep 17 00:00:00 2001 From: cccwon2 Date: Wed, 11 Dec 2024 10:50:09 +0900 Subject: [PATCH 6/6] =?UTF-8?q?design:=20=ED=95=98=EB=8B=A8=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=20=ED=91=9C=EC=8B=9C=20=EC=98=81=EC=97=AD=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/card/cardList/MyApplicationListItem.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/app/components/card/cardList/MyApplicationListItem.tsx b/src/app/components/card/cardList/MyApplicationListItem.tsx index fe06f7a1..8980d10a 100644 --- a/src/app/components/card/cardList/MyApplicationListItem.tsx +++ b/src/app/components/card/cardList/MyApplicationListItem.tsx @@ -43,7 +43,7 @@ const MyApplicationListItem = ({ id, createdAt, status, resumeId, resumeName, fo const handleResumeDownload = async () => { try { // API를 통해 이력서 파일을 다운로드 - const response = await axios.get(`/api/resumes/${resumeId}`, { + const response = await axios.get(`/api/resume/${resumeId}/download`, { responseType: "blob", }); @@ -111,17 +111,19 @@ const MyApplicationListItem = ({ id, createdAt, status, resumeId, resumeName, fo
{/* 하단 상태 표시 영역: 지원 상태와 모집 상태 */} -
-
+
+
-
+