From 00896206231f7752b30e7ce678aed1045b3aa72d Mon Sep 17 00:00:00 2001 From: minnngo Date: Tue, 28 Jul 2026 14:52:31 +0900 Subject: [PATCH] =?UTF-8?q?Feat:=20ApplycationCard=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=88=98=EC=A0=95=20[JDDEV-89]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jobdri/src/app/page.tsx | 28 +++++++++++++++++-- .../common/dropdown/DropDownMenu.tsx | 2 +- jobdri/src/components/common/lnb/Lnb.tsx | 12 +++----- .../src/components/common/lnb/LnbShared.tsx | 19 ++++--------- .../mockApply/home/ResultApplicationCard.tsx | 8 ++++-- jobdri/src/components/mockApply/home/types.ts | 1 + 6 files changed, 41 insertions(+), 29 deletions(-) diff --git a/jobdri/src/app/page.tsx b/jobdri/src/app/page.tsx index 4ac8d17..27ccc28 100644 --- a/jobdri/src/app/page.tsx +++ b/jobdri/src/app/page.tsx @@ -55,7 +55,7 @@ export default function Home() { ); // ๐ŸŒŸ ์ž‘์„ฑ ์ค‘์ธ ๋ชจ์˜์ง€์›(Drafts) ๋งคํ•‘ - const mappedDrafts = inProgressList.map((item) => { + const mappedDrafts: DraftData[] = inProgressList.map((item) => { const jobPosting = jobPostingById.get(item.jobPostingId); return { @@ -75,6 +75,9 @@ export default function Home() { updatedAt: item.createdAt ? formatRelativeDate(item.createdAt) : "-", + createdAtTime: item.createdAt + ? new Date(item.createdAt).getTime() + : 0, }; }); @@ -85,7 +88,7 @@ export default function Home() { ); // ๐ŸŒŸ ์ˆœ์ˆ˜ ์ฑ„์šฉ ๊ณต๊ณ (Drafts) ๋งคํ•‘ - const savedOnlyDrafts = jobPostings + const savedOnlyDrafts: DraftData[] = jobPostings .filter( (jobPosting) => !linkedJobPostingIds.has(jobPosting.jobPostingId), ) @@ -102,6 +105,9 @@ export default function Home() { updatedAt: jobPosting.createdAt ? formatRelativeDate(jobPosting.createdAt) : "-", + createdAtTime: jobPosting.createdAt + ? new Date(jobPosting.createdAt).getTime() + : 0, })); const mappedResults = completedList.map((item) => { @@ -123,7 +129,23 @@ export default function Home() { return cardData; }); - setDrafts([...savedOnlyDrafts, ...mappedDrafts]); + const sortedDrafts = [...savedOnlyDrafts, ...mappedDrafts].sort( + (a, b) => { + const timeDifference = + (b.createdAtTime ?? 0) - (a.createdAtTime ?? 0); + + if (timeDifference !== 0) { + return timeDifference; + } + + return ( + (b.mockApplyId ?? b.jobPostingId) - + (a.mockApplyId ?? a.jobPostingId) + ); + }, + ); + + setDrafts(sortedDrafts); setResults(mappedResults); } catch (error) { console.error("๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", error); diff --git a/jobdri/src/components/common/dropdown/DropDownMenu.tsx b/jobdri/src/components/common/dropdown/DropDownMenu.tsx index c719121..2ea0a61 100644 --- a/jobdri/src/components/common/dropdown/DropDownMenu.tsx +++ b/jobdri/src/components/common/dropdown/DropDownMenu.tsx @@ -34,7 +34,7 @@ export default function DropDownMenu({ role="menuitem" disabled={item.disabled} onClick={item.onClick} - className="flex w-full items-center self-stretch border-b border-line-neutral-default bg-bg-contents-default px-4 py-3 text-left text-label14-med text-text-neutral-description [font-feature-settings:'liga'_off,'clig'_off] hover:bg-fill-quaternary-assistive-hover active:bg-fill-quaternary-default-pressed disabled:cursor-not-allowed disabled:text-text-neutral-disabled" + className="flex w-full items-center self-stretch border-b border-line-neutral-default bg-bg-contents-default px-4 py-3 text-left text-label14-med text-text-neutral-description [font-feature-settings:'liga'_off,'clig'_off] last:border-b-0 hover:bg-fill-quaternary-assistive-hover active:bg-fill-quaternary-default-pressed disabled:cursor-not-allowed disabled:text-text-neutral-disabled" > {item.label} diff --git a/jobdri/src/components/common/lnb/Lnb.tsx b/jobdri/src/components/common/lnb/Lnb.tsx index 6d13134..5bc6f39 100644 --- a/jobdri/src/components/common/lnb/Lnb.tsx +++ b/jobdri/src/components/common/lnb/Lnb.tsx @@ -75,7 +75,7 @@ export default function Lnb({ initialActiveItem = "apply", email, className, - defaultRecentOpen = true, + defaultRecentOpen = false, disableCreditFetch = false, }: LnbProps) { const router = useRouter(); @@ -401,15 +401,11 @@ export default function Lnb({ {showComingSoonModal && createPortal( -
+
setShowComingSoonModal(false)} primaryAction={{ label: "ํ™•์ธ", diff --git a/jobdri/src/components/common/lnb/LnbShared.tsx b/jobdri/src/components/common/lnb/LnbShared.tsx index 3966181..f3b386f 100644 --- a/jobdri/src/components/common/lnb/LnbShared.tsx +++ b/jobdri/src/components/common/lnb/LnbShared.tsx @@ -496,18 +496,9 @@ function RecentItemsSection({ function SearchEmptyState() { return (
-
- +

+ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค +

); } @@ -666,7 +657,7 @@ export function LnbDefaultFooter({
{isAccountMenuOpen && ( -
+
{isAccountMenuOpen && ( -
+

{createdAt}

-

{score}

-

์ 

+

{score}

+
+

์ 

+
diff --git a/jobdri/src/components/mockApply/home/types.ts b/jobdri/src/components/mockApply/home/types.ts index edc32ce..bef5376 100644 --- a/jobdri/src/components/mockApply/home/types.ts +++ b/jobdri/src/components/mockApply/home/types.ts @@ -28,5 +28,6 @@ export interface DraftData { position: string; currentStep: number; updatedAt: string; + createdAtTime?: number; // logoUrl?: string; // ์‹ค์ œ API์—์„œ๋Š” ๋กœ๊ณ  ์ด๋ฏธ์ง€ URL์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. }