From 943aca62f1a07c6fd04f91af6aea33c8d330face Mon Sep 17 00:00:00 2001 From: TaewoongR Date: Mon, 27 Apr 2026 01:40:43 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=B6=94=EA=B0=80=20=EB=AA=A8=EC=A7=91?= =?UTF-8?q?=20=EC=83=81=ED=83=9C=20=EB=B0=8F=20=EB=B0=B0=EB=84=88=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=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 --- components/recruit/RecruitBanner/index.tsx | 3 +++ components/recruit/RecruitField/index.tsx | 5 ++++- constants/status.ts | 7 ++++++- constants/yapp.ts | 1 + database/home.ts | 8 ++++++++ database/recruit.ts | 6 ++++++ 6 files changed, 28 insertions(+), 2 deletions(-) diff --git a/components/recruit/RecruitBanner/index.tsx b/components/recruit/RecruitBanner/index.tsx index 0c46b99..79f6e8e 100644 --- a/components/recruit/RecruitBanner/index.tsx +++ b/components/recruit/RecruitBanner/index.tsx @@ -1,6 +1,7 @@ import { LINK_BY_STATUS, RECRUITING_DEADLINE, + RECRUITING_EXTRA_DEADLINE, RECRUITING_START, RECRUITING_STATUS, RecruitStatus, @@ -36,6 +37,8 @@ function RecruitBanner() { return new Date(RECRUITING_START); case RecruitStatus.ACTIVE: return new Date(RECRUITING_DEADLINE); + case RecruitStatus.EXTRA: + return new Date(RECRUITING_EXTRA_DEADLINE); default: return new Date(); } diff --git a/components/recruit/RecruitField/index.tsx b/components/recruit/RecruitField/index.tsx index 7daa614..413c8a5 100644 --- a/components/recruit/RecruitField/index.tsx +++ b/components/recruit/RecruitField/index.tsx @@ -38,7 +38,10 @@ function RecruitField(): ReactElement { key={field.name} variants={itemVariants} onClick={() => { - if (status === RecruitStatus.ACTIVE && field.url) { + if ( + (status === RecruitStatus.ACTIVE && field.url) || + (field.name === 'iOS' && status === RecruitStatus.EXTRA) + ) { window.open(field.url, '_blank'); } }} diff --git a/constants/status.ts b/constants/status.ts index 9257769..2ff39bb 100644 --- a/constants/status.ts +++ b/constants/status.ts @@ -1,21 +1,25 @@ import Yapp from './yapp'; -/* 리크루팅 상태: PRE(모집 오픈 전), ACTIVE(모집 중), POST(모집 마감) */ +/* 리크루팅 상태: PRE(모집 오픈 전), ACTIVE(모집 중), POST(모집 마감), EXTRA(추가 모집) */ export enum RecruitStatus { PRE = 'PRE', ACTIVE = 'ACTIVE', POST = 'POST', + EXTRA = 'EXTRA', } export const RECRUITING_START = '2026-04-17T00:00:00'; export const RECRUITING_DEADLINE = '2026-04-26T23:59:59'; +export const RECRUITING_EXTRA_DEADLINE = '2026-04-28T23:59:59'; export const RECRUITING_STATUS = (): RecruitStatus => { const now = new Date(); const start = new Date(RECRUITING_START); const deadline = new Date(RECRUITING_DEADLINE); + const extraDeadline = new Date(RECRUITING_EXTRA_DEADLINE); if (now < start) return RecruitStatus.PRE; + if (now > deadline && now <= extraDeadline) return RecruitStatus.EXTRA; if (now > deadline) return RecruitStatus.POST; return RecruitStatus.ACTIVE; }; @@ -24,4 +28,5 @@ export const LINK_BY_STATUS: Record = { [RecruitStatus.PRE]: Yapp.PREVIOUS_GENERATION_RECRUIT_LINK, [RecruitStatus.ACTIVE]: Yapp.YAPP_RECRUIT_ALL, [RecruitStatus.POST]: Yapp.NEXT_GENERATION_RECRUIT_LINK, + [RecruitStatus.EXTRA]: Yapp.YAPP_RECRUIT_ALL, }; diff --git a/constants/yapp.ts b/constants/yapp.ts index f0aa656..f81d91a 100644 --- a/constants/yapp.ts +++ b/constants/yapp.ts @@ -15,6 +15,7 @@ const Yapp = { // 공고 링크 YAPP_RECRUIT_ALL: 'https://yapp-recruit.career.greetinghr.com/ko/apply', + YAPP_RECRUIT_EXTRA: 'https://yapp-recruit.career.greetinghr.com/ko/apply', YAPP_RECRUIT_PROJECT_MANAGER: 'https://yapp-recruit.career.greetinghr.com/o/210447', YAPP_RECRUIT_DESIGNER: 'https://yapp-recruit.career.greetinghr.com/o/210451', diff --git a/database/home.ts b/database/home.ts index eda994c..77fb925 100644 --- a/database/home.ts +++ b/database/home.ts @@ -217,8 +217,16 @@ export const HOME_BANNER_POST = { buttonName: `${Number(Yapp.YAPP_GENERATION) + 1}기 모집 알림 신청하기`, }; +export const HOME_BANNER_EXTRA = { + title: 'MOMENT OF DISCOVERY', + subTitle: `YAPP ${Number(Yapp.YAPP_GENERATION)}기 iOS 추가 모집중`, + date: '4.27(월) - 4.28(화)', + buttonName: `${Number(Yapp.YAPP_GENERATION)}기 iOS 지원하기`, +}; + export const HOME_BANNER_BY_STATUS: Record = { [RecruitStatus.PRE]: HOME_BANNER_PRE, [RecruitStatus.ACTIVE]: HOME_BANNER_ACTIVE, [RecruitStatus.POST]: HOME_BANNER_POST, + [RecruitStatus.EXTRA]: HOME_BANNER_EXTRA, }; diff --git a/database/recruit.ts b/database/recruit.ts index 4e999fe..f4fc974 100644 --- a/database/recruit.ts +++ b/database/recruit.ts @@ -20,6 +20,11 @@ const RECRUIT_BANNER_ACTIVE: RecruitBannerInfo = { buttonName: `${Yapp.YAPP_GENERATION}기 지원하기`, }; +const RECRUIT_BANNER_EXTRA: RecruitBannerInfo = { + title: '28기 iOS 추가 모집', + buttonName: `${Yapp.YAPP_GENERATION}기 iOS 지원하기`, +}; + const RECRUIT_BANNER_POST: RecruitBannerInfo = { title: '지금은 모집기간이 아닙니다', buttonName: `${Number(Yapp.YAPP_GENERATION) + 1}기 모집 알림 신청하기`, @@ -32,6 +37,7 @@ export const RECRUIT_BANNER_BY_STATUS: Record< [RecruitStatus.PRE]: RECRUIT_BANNER_PRE, [RecruitStatus.ACTIVE]: RECRUIT_BANNER_ACTIVE, [RecruitStatus.POST]: RECRUIT_BANNER_POST, + [RecruitStatus.EXTRA]: RECRUIT_BANNER_EXTRA, }; /** 세션일정 개요 */