diff --git a/apps/web/src/assets/add-mov.svg b/apps/web/src/assets/svg/add-mov-icon.svg
similarity index 100%
rename from apps/web/src/assets/add-mov.svg
rename to apps/web/src/assets/svg/add-mov-icon.svg
diff --git a/apps/web/src/assets/add-photo.svg b/apps/web/src/assets/svg/add-photo-icon.svg
similarity index 100%
rename from apps/web/src/assets/add-photo.svg
rename to apps/web/src/assets/svg/add-photo-icon.svg
diff --git a/apps/web/src/components/UniversityClubSidebar/index.tsx b/apps/web/src/components/UniversityClubSidebar/index.tsx
new file mode 100644
index 0000000..28e568f
--- /dev/null
+++ b/apps/web/src/components/UniversityClubSidebar/index.tsx
@@ -0,0 +1,35 @@
+import RecentClubList from '@/components/RecentClubList';
+
+interface UniversityClubSidebarProps {
+ university: {
+ imageUrl: string;
+ name: string;
+ campusName?: string;
+ };
+ clubCount: number;
+}
+
+function UniversityClubSidebar({ university, clubCount }: UniversityClubSidebarProps) {
+ const universityLabel = university.campusName ? `${university.name} ${university.campusName}` : university.name;
+
+ return (
+
+ );
+}
+
+export default UniversityClubSidebar;
diff --git a/apps/web/src/pages/ClubDetail/index.tsx b/apps/web/src/pages/ClubDetail/index.tsx
index bbea8b8..6ab1f55 100644
--- a/apps/web/src/pages/ClubDetail/index.tsx
+++ b/apps/web/src/pages/ClubDetail/index.tsx
@@ -1,39 +1,44 @@
-import { useEffect } from 'react';
+import { useEffect, type ReactNode } from 'react';
import { cn } from '@konect/utils/cn';
import { useSuspenseQuery } from '@tanstack/react-query';
import { useParams } from 'react-router-dom';
import { clubDetailQueries } from '@/apis/clubDetail/queries';
-import AddMov from '@/assets/add-mov.svg';
-import AddPhoto from '@/assets/add-photo.svg';
import NoneImage from '@/assets/None-image.png';
+import AddMovIcon from '@/assets/svg/add-mov-icon.svg';
+import AddPhotoIcon from '@/assets/svg/add-photo-icon.svg';
import Breadcrumb from '@/components/Breadcrumb';
-import RecentClubList from '@/components/RecentClubList';
+import UniversityClubSidebar from '@/components/UniversityClubSidebar';
import { CATEGORY_TEXT_COLORS } from '@/constants/club';
import { saveRecentClubId } from '@/utils/recentClubStorage';
+const INTRODUCE_MEDIA_ITEMS = [
+ { label: '활동 사진', icon: },
+ { label: '소개 영상', icon: },
+];
+
function Introduce({ introduce }: { introduce: string }) {
return (
-
-
-
+
+ {INTRODUCE_MEDIA_ITEMS.map(({ label, icon }) => (
+
+ ))}
-
{introduce}
+
{introduce}
);
}
+function IntroduceMediaCard({ icon, label }: { icon: ReactNode; label: string }) {
+ return (
+
+ );
+}
+
function NoneIntroduce() {
return (
@@ -57,8 +62,8 @@ export default function ClubDetail() {
}, [clubDetail.id]);
return (
-
-
+
+
-
-
+
+
-
-
+
+

-
-
{clubDetail.name}
-
-
+
+
{clubDetail.name}
+
+
{clubDetail.categoryName}
-
- {clubDetail.description}
-
+ {clubDetail.description}
@@ -110,7 +95,7 @@ export default function ClubDetail() {
-
+
동아리 소개
{clubDetail.introduce ? : }
diff --git a/apps/web/src/pages/UniversityClubList/index.tsx b/apps/web/src/pages/UniversityClubList/index.tsx
index f188822..cb12ca5 100644
--- a/apps/web/src/pages/UniversityClubList/index.tsx
+++ b/apps/web/src/pages/UniversityClubList/index.tsx
@@ -9,7 +9,7 @@ import type { UniversityClub, UniversityClubListRequestParams } from '@/apis/uni
import { universityClubQueries } from '@/apis/universityClub/queries';
import SearchIcon from '@/assets/svg/search-icon.svg';
import Breadcrumb from '@/components/Breadcrumb';
-import RecentClubList from '@/components/RecentClubList';
+import UniversityClubSidebar from '@/components/UniversityClubSidebar';
import { CATEGORY_TEXT_COLORS } from '@/constants/club';
const PAGE_LIMIT = 12;
@@ -49,12 +49,8 @@ function UniversityClubListContent({ universityId }: { universityId: number }) {
const { data, fetchNextPage, hasNextPage, isFetchingNextPage } = useSuspenseInfiniteQuery(
universityClubQueries.infiniteList(universityId, requestParams)
);
- const firstPage = data.pages[0];
- const { university, totalCount, categories } = firstPage;
+ const [{ university, totalCount, categories }] = data.pages;
const clubs = data.pages.flatMap((pageData) => pageData.clubs);
- const universityLabel = university.campusName ? `${university.name} ${university.campusName}` : university.name;
- const categoryTotalCount = categories.reduce((sum, category) => sum + category.count, 0);
- const allClubCount = categoryTotalCount || totalCount;
const handleSearchKeywordChange = (event: ChangeEvent) => {
const value = event.target.value;
@@ -95,22 +91,7 @@ function UniversityClubListContent({ universityId }: { universityId: number }) {
-
+
@@ -129,7 +110,7 @@ function UniversityClubListContent({ universityId }: { universityId: number }) {
handleCategoryChange()}
/>