From 3d2174b848c3c3ea8545b821264dc4964024030e Mon Sep 17 00:00:00 2001 From: Junseo Kim Date: Mon, 28 Jul 2025 20:44:54 +0900 Subject: [PATCH 1/7] =?UTF-8?q?fix:=20TextAreaContainer=EC=9D=98=20?= =?UTF-8?q?=EC=B5=9C=EC=86=8C=20=EB=84=88=EB=B9=84=EB=A5=BC=20=EC=B5=9C?= =?UTF-8?q?=EB=8C=80=20=EB=84=88=EB=B9=84=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/common/CustomTextArea/CustomTextArea.styles.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/common/CustomTextArea/CustomTextArea.styles.ts b/frontend/src/components/common/CustomTextArea/CustomTextArea.styles.ts index aae92cf83..cb6115ded 100644 --- a/frontend/src/components/common/CustomTextArea/CustomTextArea.styles.ts +++ b/frontend/src/components/common/CustomTextArea/CustomTextArea.styles.ts @@ -4,7 +4,7 @@ import styled from 'styled-components'; export const TextAreaContainer = styled.div<{ width: string }>` width: ${(props) => props.width}; - min-width: 300px; + max-width: 100%; display: flex; flex-direction: column; `; From 1b7fa00ea108066eb7593e132c1b2ce7010569c6 Mon Sep 17 00:00:00 2001 From: Junseo Kim Date: Mon, 28 Jul 2025 20:44:59 +0900 Subject: [PATCH 2/7] =?UTF-8?q?fix:=20InputField=EC=9D=98=20=EC=B5=9C?= =?UTF-8?q?=EC=86=8C=20=EB=84=88=EB=B9=84=EB=A5=BC=20=EC=A0=9C=EA=B1=B0?= =?UTF-8?q?=ED=95=98=EA=B3=A0=20=EC=B5=9C=EB=8C=80=20=EB=84=88=EB=B9=84?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/common/InputField/InputField.styles.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/common/InputField/InputField.styles.ts b/frontend/src/components/common/InputField/InputField.styles.ts index a81ad59bb..82ee01245 100644 --- a/frontend/src/components/common/InputField/InputField.styles.ts +++ b/frontend/src/components/common/InputField/InputField.styles.ts @@ -2,12 +2,11 @@ import styled from 'styled-components'; export const InputContainer = styled.div<{ width: string; readOnly?: boolean }>` width: ${(props) => props.width}; - min-width: 300px; + max-width: 100%; display: flex; flex-direction: column; @media (max-width: 768px) { - min-width: 0; width: 100%; } `; @@ -27,7 +26,7 @@ export const InputWrapper = styled.div` export const Input = styled.input<{ hasError?: boolean; readOnly?: boolean }>` flex: 1; height: 45px; - padding: 12px 80px 12px 18px; + padding: 12px 18px; border: 1px solid ${({ hasError }) => (hasError ? 'red' : '#c5c5c5')}; background-color: transparent; border-radius: 6px; From 8225e0d0f527e01000f5ad80b552edca61ce5e93 Mon Sep 17 00:00:00 2001 From: Junseo Kim Date: Mon, 28 Jul 2025 21:23:30 +0900 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20ClubDetail=20=EC=9D=B8=ED=84=B0?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=EC=97=90=20externalApplicationUrl?= =?UTF-8?q?=20=EC=86=8D=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/types/club.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/types/club.ts b/frontend/src/types/club.ts index 8d17560a7..52735e1ff 100644 --- a/frontend/src/types/club.ts +++ b/frontend/src/types/club.ts @@ -23,6 +23,7 @@ export interface ClubDetail extends Club { recruitmentPeriod: string; recruitmentTarget: string; socialLinks: Record; + externalApplicationUrl?: string; } export interface ClubDescription { From 288a45dc6322ba1238fcdbaa3ec04d9911a2f1a0 Mon Sep 17 00:00:00 2001 From: Junseo Kim Date: Mon, 28 Jul 2025 21:23:38 +0900 Subject: [PATCH 4/7] =?UTF-8?q?feat:=20ClubDetailHeader=EC=97=90=EC=84=9C?= =?UTF-8?q?=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20=EC=86=8D=EC=84=B1=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20=EB=AA=A8=EC=A7=91=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=20=EB=B2=84=ED=8A=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ClubDetailHeader/ClubDetailHeader.tsx | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/frontend/src/pages/ClubDetailPage/components/ClubDetailHeader/ClubDetailHeader.tsx b/frontend/src/pages/ClubDetailPage/components/ClubDetailHeader/ClubDetailHeader.tsx index 1ff8fc348..1a84577d7 100644 --- a/frontend/src/pages/ClubDetailPage/components/ClubDetailHeader/ClubDetailHeader.tsx +++ b/frontend/src/pages/ClubDetailPage/components/ClubDetailHeader/ClubDetailHeader.tsx @@ -1,8 +1,7 @@ import * as Styled from './ClubDetailHeader.styles'; import ClubProfile from '@/pages/ClubDetailPage/components/ClubProfile/ClubProfile'; import ClubApplyButton from '@/pages/ClubDetailPage/components/ClubApplyButton/ClubApplyButton'; -import { parseRecruitmentPeriod } from '@/utils/recruitmentPeriodParser'; -import getDeadlineText from '@/utils/getDeadLineText'; + interface ClubDetailHeaderProps { name: string; category: string; @@ -20,19 +19,7 @@ const ClubDetailHeader = ({ division, tags, logo, - recruitmentPeriod, - recruitmentForm, - presidentPhoneNumber, }: ClubDetailHeaderProps) => { - const { recruitmentStart, recruitmentEnd } = - parseRecruitmentPeriod(recruitmentPeriod); - - const deadlineText = getDeadlineText( - recruitmentStart, - recruitmentEnd, - new Date(), - ); - return ( - + ); }; From d608ca15ba3d2785f0a3436c821ca4eeb0553e50 Mon Sep 17 00:00:00 2001 From: Junseo Kim Date: Mon, 28 Jul 2025 21:23:44 +0900 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20ClubDetailFooter=EC=97=90=EC=84=9C?= =?UTF-8?q?=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20=EC=86=8D=EC=84=B1=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20=EC=A7=80=EC=9B=90=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/ClubDetailFooter/ClubDetailFooter.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/frontend/src/pages/ClubDetailPage/components/ClubDetailFooter/ClubDetailFooter.tsx b/frontend/src/pages/ClubDetailPage/components/ClubDetailFooter/ClubDetailFooter.tsx index 8658043ff..2d9fef9f8 100644 --- a/frontend/src/pages/ClubDetailPage/components/ClubDetailFooter/ClubDetailFooter.tsx +++ b/frontend/src/pages/ClubDetailPage/components/ClubDetailFooter/ClubDetailFooter.tsx @@ -11,9 +11,7 @@ interface ClubDetailFooterProps { } const ClubDetailFooter = ({ - recruitmentPeriod, - recruitmentForm, - presidentPhoneNumber, + recruitmentPeriod }: ClubDetailFooterProps) => { const { recruitmentStart, recruitmentEnd } = parseRecruitmentPeriod(recruitmentPeriod); @@ -24,10 +22,10 @@ const ClubDetailFooter = ({ new Date(), ); - return ( + return ( - + ); }; From 2f18946c78d4eb36b9d8a6aebf139908e44407c7 Mon Sep 17 00:00:00 2001 From: Junseo Kim Date: Mon, 28 Jul 2025 21:23:54 +0900 Subject: [PATCH 6/7] =?UTF-8?q?feat:=20ClubApplyButton=EC=97=90=EC=84=9C?= =?UTF-8?q?=20isRecruiting=20=EC=86=8D=EC=84=B1=20=EC=A0=9C=EA=B1=B0=20?= =?UTF-8?q?=EB=B0=8F=20=EC=A7=80=EC=9B=90=20=EB=B2=84=ED=8A=BC=20=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=EB=A1=9C=EC=A7=81=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ClubApplyButton/ClubApplyButton.tsx | 48 ++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/frontend/src/pages/ClubDetailPage/components/ClubApplyButton/ClubApplyButton.tsx b/frontend/src/pages/ClubDetailPage/components/ClubApplyButton/ClubApplyButton.tsx index 354ce363a..be6f55001 100644 --- a/frontend/src/pages/ClubDetailPage/components/ClubApplyButton/ClubApplyButton.tsx +++ b/frontend/src/pages/ClubDetailPage/components/ClubApplyButton/ClubApplyButton.tsx @@ -1,11 +1,10 @@ -import useMixpanelTrack from '@/hooks/useMixpanelTrack'; import styled from 'styled-components'; import { useNavigate, useParams } from 'react-router-dom'; import { useGetClubDetail } from '@/hooks/queries/club/useGetClubDetail'; - -interface ButtonProps { - isRecruiting: boolean; -} +import getApplication from '@/apis/application/getApplication'; +import { parseRecruitmentPeriod } from '@/utils/recruitmentPeriodParser'; +import getDeadlineText from '@/utils/getDeadLineText'; +import useMixpanelTrack from '@/hooks/useMixpanelTrack'; const Button = styled.button` display: flex; @@ -36,20 +35,45 @@ const Button = styled.button` } `; -const ClubApplyButton = ({ isRecruiting }: ButtonProps) => { +const ClubApplyButton = () => { const { clubId } = useParams<{ clubId: string }>(); - const trackEvent = useMixpanelTrack(); const navigate = useNavigate(); + const trackEvent = useMixpanelTrack(); + + const { data: clubDetail } = useGetClubDetail(clubId!); + + const handleClick = async () => { + if (!clubId || !clubDetail) return; - const handleClick = () => { trackEvent('Club Apply Button Clicked'); - //TODO: 지원서를 작성한 동아리의 경우에만 리다이렉트 - if (!isRecruiting) { - alert('지원모집이 마감되었습니다. 다음에 지원해 주세요.'); + const { recruitmentStart, recruitmentEnd } = parseRecruitmentPeriod( + clubDetail.recruitmentPeriod, + ); + const deadlineText = getDeadlineText( + recruitmentStart, + recruitmentEnd, + new Date(), + ); + + if (deadlineText === '모집 마감') { + alert(`현재 ${clubDetail.name} 동아리는 모집 기간이 아닙니다.`); return; } - navigate(`/application/${clubId}`); + + // 모아동 지원서 확인 + try { + await getApplication(clubId); + navigate(`/application/${clubId}`); + } catch (err: unknown) { + const externalFormLink = clubDetail.externalApplicationUrl?.trim(); + + if (externalFormLink) { + window.open(externalFormLink, '_blank', 'noopener,noreferrer'); + } else { + alert('동아리 모집 정보를 확인해주세요.'); + } + } }; return ; From 5333c2ba1eb24aa7e9e4ea67ae2f9bc851648439 Mon Sep 17 00:00:00 2001 From: Junseo Kim Date: Mon, 28 Jul 2025 21:41:46 +0900 Subject: [PATCH 7/7] =?UTF-8?q?fix:=20FormDescription=EC=9D=98=20=ED=8C=A8?= =?UTF-8?q?=EB=94=A9,=20=EB=B0=B0=EA=B2=BD=EC=83=89=20=EB=B0=8F=20?= =?UTF-8?q?=ED=85=8C=EB=91=90=EB=A6=AC=20=EB=B0=98=EA=B2=BD=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 --- .../pages/ApplicationFormPage/ApplicationFormPage.styles.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frontend/src/pages/ApplicationFormPage/ApplicationFormPage.styles.ts b/frontend/src/pages/ApplicationFormPage/ApplicationFormPage.styles.ts index 8a566e402..fc51ffb71 100644 --- a/frontend/src/pages/ApplicationFormPage/ApplicationFormPage.styles.ts +++ b/frontend/src/pages/ApplicationFormPage/ApplicationFormPage.styles.ts @@ -18,11 +18,15 @@ export const FormDescription = styled.div` color: #444; margin-top: -20px; margin-bottom: 48px; - padding: 0 15px; + padding: 12px 18px; + background-color: #f5f5f5; + border-radius: 6px; ${media.mobile} { font-size: 0.95rem; line-height: 1.5; + + padding: 4px 6px; } `;