From 1f33deaf18e9d62dfc0d85f688c38ba04a2b577d Mon Sep 17 00:00:00 2001 From: seongwon030 <105052068+seongwon030@users.noreply.github.com> Date: Sat, 19 Jul 2025 00:45:23 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EB=B9=84=EC=B0=B8=EC=97=AC?= =?UTF-8?q?=EB=8F=99=EC=95=84=EB=A6=AC=20=EC=9D=B4=EB=A6=84=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/ClubDetailPage/ClubDetailPage.tsx | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/frontend/src/pages/ClubDetailPage/ClubDetailPage.tsx b/frontend/src/pages/ClubDetailPage/ClubDetailPage.tsx index fb0878ef7..1555a554f 100644 --- a/frontend/src/pages/ClubDetailPage/ClubDetailPage.tsx +++ b/frontend/src/pages/ClubDetailPage/ClubDetailPage.tsx @@ -14,6 +14,48 @@ import useTrackPageView from '@/hooks/useTrackPageView'; import useAutoScroll from '@/hooks/InfoTabs/useAutoScroll'; import { useGetClubDetail } from '@/hooks/queries/club/useGetClubDetail'; +const notJoinedClubNames = [ + 'PKNUO', + 'UCDC', + '울림', + '쇳물결', + '한누리', + '씨사운드', + '백경클래식기타연구회', + '남천로타렉트', + '동반', + '민심사랑', + '절영회', + '청심회', + '피어드림', + '버드', + '모비딕', + '후라', + '어택', + '홍백', + '바구니', + '산악부', + '한판', + '리얼겟', + '조정부', + '조나단', + '불교학생회', + 'JDM', + 'SFC', + '가톨릭학생회', + 'CCC', + 'PAS', + '300', + '백경 유스호스텔', + '짚신 유스호스텔', + '수석회', + '포시즌', + 'O.S.T', + 'SIC', + 'CERT-IS', + 'testaa', +]; + const ClubDetailPage = () => { const { clubId } = useParams<{ clubId: string }>(); const { sectionRefs, scrollToSection } = useAutoScroll(); From b5d1343cc438aa6dccb1d44265f837b41ee52b8f Mon Sep 17 00:00:00 2001 From: seongwon030 <105052068+seongwon030@users.noreply.github.com> Date: Sat, 19 Jul 2025 00:56:15 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=EC=B0=B8=EC=97=AC=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=8F=99=EC=95=84=EB=A6=AC=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=20=EC=B0=A8=EB=8B=A8=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 클럽 상세 정보 조회 후, 해당 동아리 이름이 목록에 포함되어 있으면 alert를 띄우고 메인 페이지로 리다이렉트 --- .../pages/ClubDetailPage/ClubDetailPage.tsx | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/frontend/src/pages/ClubDetailPage/ClubDetailPage.tsx b/frontend/src/pages/ClubDetailPage/ClubDetailPage.tsx index 1555a554f..1e9fe18f0 100644 --- a/frontend/src/pages/ClubDetailPage/ClubDetailPage.tsx +++ b/frontend/src/pages/ClubDetailPage/ClubDetailPage.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import { useParams } from 'react-router-dom'; +import { useNavigate, useParams } from 'react-router-dom'; import * as Styled from '@/styles/PageContainer.styles'; import Header from '@/components/common/Header/Header'; import BackNavigationBar from '@/pages/ClubDetailPage/components/BackNavigationBar/BackNavigationBar'; @@ -61,8 +61,24 @@ const ClubDetailPage = () => { const { sectionRefs, scrollToSection } = useAutoScroll(); const [showHeader, setShowHeader] = useState(window.innerWidth > 500); + const navigate = useNavigate(); + const [blockState, setBlockState] = useState< + 'checking' | 'blocked' | 'allowed' + >('checking'); const { data: clubDetail, error } = useGetClubDetail(clubId || ''); + useEffect(() => { + if (!clubDetail) return; + + if (notJoinedClubNames.includes(clubDetail?.name || '')) { + setBlockState('blocked'); + alert('참여하지 않는 동아리입니다.'); + navigate('/', { replace: true }); + } else { + setBlockState('allowed'); + } + }, [clubDetail, navigate]); + useEffect(() => { const handleResize = () => { setShowHeader(window.innerWidth > 500); @@ -74,7 +90,7 @@ const ClubDetailPage = () => { useTrackPageView(`ClubDetailPage`, clubDetail?.name); - if (!clubDetail) { + if (!clubDetail || blockState !== 'allowed') { return null; }