Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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 <Button onClick={handleClick}>지원하기</Button>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@ interface ClubDetailFooterProps {
}

const ClubDetailFooter = ({
recruitmentPeriod,
recruitmentForm,
presidentPhoneNumber,
recruitmentPeriod
}: ClubDetailFooterProps) => {
const { recruitmentStart, recruitmentEnd } =
parseRecruitmentPeriod(recruitmentPeriod);
Expand All @@ -24,10 +22,10 @@ const ClubDetailFooter = ({
new Date(),
);

return (
return (
<Styled.ClubDetailFooterContainer>
<DeadlineBadge deadlineText={deadlineText} />
<ClubApplyButton isRecruiting={deadlineText !== '모집 마감'} />
<ClubApplyButton />
</Styled.ClubDetailFooterContainer>
);
};
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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 (
<Styled.ClubDetailHeaderContainer>
<ClubProfile
Expand All @@ -42,7 +29,7 @@ const ClubDetailHeader = ({
tags={tags}
logo={logo}
/>
<ClubApplyButton isRecruiting={deadlineText !== '모집 마감'} />
<ClubApplyButton />
</Styled.ClubDetailHeaderContainer>
);
};
Expand Down
1 change: 1 addition & 0 deletions frontend/src/types/club.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export interface ClubDetail extends Club {
recruitmentPeriod: string;
recruitmentTarget: string;
socialLinks: Record<SNSPlatform, string>;
externalApplicationUrl?: string;
}

export interface ClubDescription {
Expand Down