From 4bc188b4f9ba717f5c0b7e5fcd4581e9a4a3930c Mon Sep 17 00:00:00 2001 From: caadiq Date: Sun, 5 Apr 2026 13:57:03 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=AA=A8=EB=B0=94=EC=9D=BC=20=EC=98=88?= =?UTF-8?q?=EB=8A=A5=20=EC=9D=BC=EC=A0=95=20=EC=83=81=EC=84=B8=20=EC=84=B9?= =?UTF-8?q?=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - MobileVarietySection: 썸네일(w-32) + 콘텐츠 flex 레이아웃 - 방송사 뱃지, 제목, 멤버 칩, 다시보기 버튼 - PC 버전과 동일한 구조, 모바일 사이즈에 맞게 축소 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../pages/mobile/schedule/ScheduleDetail.jsx | 94 ++++++++++++++++++- 1 file changed, 93 insertions(+), 1 deletion(-) diff --git a/frontend/src/pages/mobile/schedule/ScheduleDetail.jsx b/frontend/src/pages/mobile/schedule/ScheduleDetail.jsx index 7c94fa2..6339c9b 100644 --- a/frontend/src/pages/mobile/schedule/ScheduleDetail.jsx +++ b/frontend/src/pages/mobile/schedule/ScheduleDetail.jsx @@ -2,7 +2,7 @@ import { useParams, Link } from 'react-router-dom'; import { useQuery, keepPreviousData } from '@tanstack/react-query'; import { useEffect, useState, useRef } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; -import { Calendar, Clock, ChevronLeft, Link2, X, ChevronRight } from 'lucide-react'; +import { Calendar, Clock, ChevronLeft, Link2, X, ChevronRight, Tv, ExternalLink, Play } from 'lucide-react'; import { getSchedule } from '@/api'; import { decodeHtmlEntities, formatFullDate, formatTime, formatXDateTimeWithTime } from '@/utils'; import Birthday from './Birthday'; @@ -475,6 +475,96 @@ function MobileXSection({ schedule }) { ); } +/** + * Mobile 예능 섹션 + */ +function MobileVarietySection({ schedule }) { + const members = schedule.members || []; + const isFullGroup = members.length === 5; + const hasThumbnail = !!schedule.thumbnailUrl; + const hasReplayUrl = !!schedule.replayUrl; + const isYoutubeReplay = hasReplayUrl && /youtu\.?be/i.test(schedule.replayUrl); + + return ( +
+
+ {/* 썸네일 */} + {hasThumbnail && ( +
+ {schedule.title} +
+ )} + + {/* 콘텐츠 */} +
+ {/* 상단 */} +
+ {/* 방송사 + 날짜 */} +
+ {schedule.broadcaster && ( + + + {schedule.broadcaster} + + )} + + {formatFullDate(schedule.date)} + +
+ + {/* 제목 */} +

+ {decodeHtmlEntities(schedule.title)} +

+ + {/* 멤버 */} + {members.length > 0 && ( +
+ {isFullGroup ? ( + + 프로미스나인 + + ) : ( + members.map((member) => ( + + {member.name} + + )) + )} +
+ )} +
+ + {/* 다시보기 */} + {hasReplayUrl && ( + + )} +
+
+
+ ); +} + /** * Mobile 기본 섹션 */ @@ -631,6 +721,8 @@ function MobileScheduleDetail() { return ; case 'X': return ; + case '예능': + return ; default: return ; }