- {relatedDates.map((item, index) => {
- const isCurrentDate = item.id === schedule.id;
- return (
-
- );
- })}
+ <>
+
+ {/* 히어로 헤더 */}
+
+ {/* 배경 블러 이미지 */}
+ {displayData.posterUrl ? (
+
+
) : (
-
- {formatSingleDate(schedule.date, schedule.time)}
-
+
)}
+ {/* 오버레이 그라디언트 */}
+
+
+ {/* 콘텐츠 */}
+
+
+ {/* 포스터 */}
+ {displayData.posterUrl && (
+
+

+
+ )}
+ {/* 제목 */}
+
+ {decodeHtmlEntities(displayData.title)}
+
+
+
- {/* 장소 */}
- {schedule.location_name && (
-
+ {/* 카드 섹션 */}
+
+ {/* 공연 일정 카드 */}
+
+
+
+ 공연 일정
+
+ {/* 현재 회차 표시 */}
+
+
+ {hasMultipleDates && {selectedIndex + 1}회차 ·}
+ {formatSingleDate(displayData.date, displayData.time)}
+
+
+ {/* 다른 회차 선택 버튼 */}
+ {hasMultipleDates && (
+
+ )}
+
+
+ {/* 장소 카드 */}
+ {displayData.locationName && (
+
- 장소
+ 장소
- {schedule.location_name}
- {schedule.location_address && (
- {schedule.location_address}
+ {displayData.locationName}
+ {displayData.locationAddress && (
+ {displayData.locationAddress}
)}
-
- )}
- {/* 지도 */}
- {hasLocation && (
-
+ {/* 지도 - 좌표가 있으면 카카오맵, 없으면 구글맵 */}
+ {hasLocation ? (
+
+
+
+ ) : (
+
+
+
+ )}
+
)}
{/* 설명 */}
- {schedule.description && (
-
+ {displayData.description && (
+
- {decodeHtmlEntities(schedule.description)}
+ {decodeHtmlEntities(displayData.description)}
+
+ )}
+
+ {/* 버튼 영역 */}
+
+ {displayData.locationName && (
+
+
+ 길찾기
+
+ )}
+ {displayData.sourceUrl && (
+
+
+ 상세 정보
+
+ )}
+
+
+
+
+ {/* 회차 선택 다이얼로그 */}
+
+ {isDialogOpen && (
+
+ {/* 백드롭 */}
+
setIsDialogOpen(false)}
+ />
+ {/* 다이얼로그 */}
+
+ {/* 헤더 */}
+
+
회차 선택
+
+ {/* 회차 목록 */}
+
+ {relatedDates.map((item, index) => {
+ const isSelected = item.id === selectedDateId;
+ return (
+
+ );
+ })}
+
+ {/* 닫기 버튼 */}
+
+
+
+
)}
-
-
- {/* 버튼 영역 */}
-
- {/* 길찾기 버튼 */}
- {hasLocation && (
-
-
- 길찾기
-
- )}
-
- {/* 상세 정보 버튼 */}
- {schedule.source_url && (
-
-
- 상세 정보 보기
-
- )}
-
-
+
+ >
);
}
@@ -580,12 +755,6 @@ function DefaultSection({ schedule }) {
function MobileScheduleDetail() {
const { id } = useParams();
- const navigate = useNavigate();
-
- // 회차 변경 핸들러
- const handleDateChange = (newId) => {
- navigate(`/schedule/${newId}`, { replace: true });
- };
// 모바일 레이아웃 활성화
useEffect(() => {
@@ -602,7 +771,8 @@ function MobileScheduleDetail() {
retry: false,
});
- if (isLoading) {
+ // 이전 데이터가 없을 때만 로딩 스피너 표시
+ if (isLoading && !schedule) {
return (
@@ -707,7 +877,7 @@ function MobileScheduleDetail() {
case CATEGORY_ID.X:
return ;
case CATEGORY_ID.CONCERT:
- return ;
+ return ;
default:
return ;
}