@@ -23,9 +23,9 @@ function SummaryRoot({ children, className }: { children: React.ReactNode; class
function SummaryItem({ count, label, onClick, countClassName, labelClassName }: SummaryItemProps) {
return (
-
-
{count}
-
{label}
+
);
}
diff --git a/packages/design-system/src/components/OngoingExperienceCard.tsx b/packages/design-system/src/components/OngoingExperienceCard.tsx
index da9fb87a..11e954fa 100644
--- a/packages/design-system/src/components/OngoingExperienceCard.tsx
+++ b/packages/design-system/src/components/OngoingExperienceCard.tsx
@@ -1,8 +1,3 @@
-import { twMerge } from 'tailwind-merge';
-
-import Button from './button';
-import { EmptyLogo } from './logos';
-
interface Activity {
id: number;
bannerImageUrl: string;
@@ -10,42 +5,24 @@ interface Activity {
price: number;
}
-interface OngoingExperienceCardProps {
- className?: string;
- activities: Activity[];
+interface OngoingExperienceCardProps extends Activity {
onClickActivity: (id: number) => void;
- onClick: () => void;
}
export default function OngoingExperienceCard({
- className,
- activities,
+ id,
+ bannerImageUrl,
+ title,
+ price,
onClickActivity,
- onClick,
}: OngoingExperienceCardProps) {
- const flex = activities.length === 0 ? 'justify-center' : '';
return (
-
- {activities.length === 0 ? (
-
-
-
-
- ) : (
- activities.map((act) => {
- return (
-
onClickActivity(act.id)}>
-

-
-
{act.title}
-
₩{act.price.toLocaleString()} / 인
-
-
- );
- })
- )}
+
onClickActivity(id)}>
+

+
+
{title}
+
₩ {price.toLocaleString()} / 인
+
);
}
diff --git a/packages/design-system/src/components/UpcomingSchedule.tsx b/packages/design-system/src/components/UpcomingSchedule.tsx
index 27b82d94..c4155ca0 100644
--- a/packages/design-system/src/components/UpcomingSchedule.tsx
+++ b/packages/design-system/src/components/UpcomingSchedule.tsx
@@ -1,13 +1,4 @@
-import { twMerge } from 'tailwind-merge';
-
-import Button from './button';
-import { EmptyLogo } from './logos';
-
-function ScheduleDateLabel({ date }: { date: string }) {
- return
{date}
;
-}
-
-function ScheduleItem({
+export default function UpcomingSchedule({
title,
price,
headCount,
@@ -35,71 +26,3 @@ function ScheduleItem({
);
}
-
-interface Reservation {
- id: number;
- activity: { id: number; title: string; bannerImageUrl: string };
- date: string;
- headCount: number;
- totalPrice: number;
- startTime: string;
- endTime: string;
-}
-
-interface UpcomingScheduleProps {
- className?: string;
- reservation: Reservation[];
- onClickReservation: (id: number) => void;
- onClick?: () => void;
-}
-export default function UpcomingSchedule({
- className,
- reservation,
- onClickReservation,
- onClick,
-}: UpcomingScheduleProps) {
- const flex = reservation.length === 0 ? 'justify-center' : '';
- return (
-
- {/*
*/}
-
- {reservation.length === 0 ? (
-
-
-
-
- ) : (
- (() => {
- let prevDate: string | null = null;
- return reservation.map((res, idx) => {
- const showDateLabel = res.date !== prevDate;
- const isLast = idx === reservation.length - 1;
- prevDate = res.date;
- return (
-
onClickReservation(res.activity.id)}
- >
- {showDateLabel && }
-
-
- );
- });
- })()
- )}
-
-
- );
-}
diff --git a/packages/design-system/src/components/skeleton/OngoingExperienceCardSkeleton.tsx b/packages/design-system/src/components/skeleton/OngoingExperienceCardSkeleton.tsx
new file mode 100644
index 00000000..3da6377b
--- /dev/null
+++ b/packages/design-system/src/components/skeleton/OngoingExperienceCardSkeleton.tsx
@@ -0,0 +1,19 @@
+export default function OngoingExperienceCardSkeleton() {
+ return (
+
+ {/* 이미지 영역 스켈레톤 */}
+
+
+ {/* 하단 정보 카드 스켈레톤 */}
+
+ {/* 타이틀 두 줄 가짜 라인 */}
+
+ {/* 가격 라인 */}
+
+
+
+ );
+}
diff --git a/packages/design-system/src/components/skeleton/UpcomingScheduleItemSkeleton.tsx b/packages/design-system/src/components/skeleton/UpcomingScheduleItemSkeleton.tsx
new file mode 100644
index 00000000..6600df56
--- /dev/null
+++ b/packages/design-system/src/components/skeleton/UpcomingScheduleItemSkeleton.tsx
@@ -0,0 +1,27 @@
+export default function UpcomingScheduleItemSkeleton() {
+ return (
+
+ {/* 날짜 라벨 스켈레톤 */}
+
+
+ {/* 카드 스켈레톤 (UpcomingSchedule 레이아웃 매칭) */}
+
+ {/* 좌측 텍스트 영역 */}
+
+ {/* 제목 */}
+
+ {/* 시간 */}
+
+ {/* 가격/인원 */}
+
+
+
+ {/* 우측 이미지 영역 */}
+
+
+
+ );
+}
diff --git a/packages/design-system/src/components/skeleton/index.tsx b/packages/design-system/src/components/skeleton/index.tsx
index 015d3644..a9f05cea 100644
--- a/packages/design-system/src/components/skeleton/index.tsx
+++ b/packages/design-system/src/components/skeleton/index.tsx
@@ -1,2 +1,4 @@
export { default as ExperienceCardSkeleton } from './ExperienceCardSkeleton';
+export { default as OngoingExperienceCardSkeleton } from './OngoingExperienceCardSkeleton';
+export { default as UpcomingScheduleItemSkeleton } from './UpcomingScheduleItemSkeleton';
export { default as NotificationCardSkeleton } from './NotificationCardSkeleton';