3 Commits

Author SHA1 Message Date
d933ca6bb7 [251217] merge: gitlab develop_si 변경사항 병합
🤖 Generated with Claude Code

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2025-12-17 16:25:11 +09:00
e86b56e14e [251217] fix: MediaPanel Spinner제거
🕐 커밋 시간: 2025. 12. 17. 16:23:08

📊 변경 통계:
  • 총 파일: 1개
  • 추가: +2줄
  • 삭제: -2줄

📝 수정된 파일:
  ~ com.twin.app.shoptime/src/components/VideoPlayer/MediaPlayer.v2.jsx

🔧 주요 변경 내용:
  • UI 컴포넌트 아키텍처 개선
  • 코드 정리 및 최적화
2025-12-17 16:23:08 +09:00
junghoon86.park
eee8e73b97 [리뷰 팝업] 리뷰 이미지가 여러개일시에 처리
- 리뷰 이미지가 여러개일때 handlePrevious,handleNext 눌렀을때 이미지부터 변경되도록 수정.
2025-12-17 16:12:29 +09:00
2 changed files with 29 additions and 12 deletions

View File

@@ -639,7 +639,7 @@ const MediaPlayerV2 = forwardRef((props, ref) => {
{/* Overlay */} {/* Overlay */}
<Overlay bottomControlsVisible={controlsVisible} onClick={handleVideoClick}> <Overlay bottomControlsVisible={controlsVisible} onClick={handleVideoClick}>
{/* Loading + Thumbnail */} {/* Loading + Thumbnail */}
{loading && thumbnailUrl && ( {/* {loading && thumbnailUrl && (
<> <>
<p className={classNames(css.thumbnail, isModal && css.smallThumbnail)}> <p className={classNames(css.thumbnail, isModal && css.smallThumbnail)}>
<img src={thumbnailUrl} alt="" /> <img src={thumbnailUrl} alt="" />
@@ -648,7 +648,7 @@ const MediaPlayerV2 = forwardRef((props, ref) => {
<Loader /> <Loader />
</div> </div>
</> </>
)} )} */}
{/* Controls with MediaSlider */} {/* Controls with MediaSlider */}
{controlsVisible && !isModal && ( {controlsVisible && !isModal && (

View File

@@ -1,6 +1,7 @@
import React, { import React, {
useCallback, useCallback,
useEffect, useEffect,
useState,
} from 'react'; } from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
@@ -26,17 +27,35 @@ export default function UserReviewDetail({
onNext, onNext,
className, className,
}) { }) {
const [currentImageIndex, setCurrentImageIndex] = useState(0);
// 새로운 리뷰가 로드될 때 이미지 인덱스 초기화
useEffect(() => {
setCurrentImageIndex(0);
}, [currentReview]);
const reviewImages = currentReview?.reviewImageList || [];
const hasMultipleImages = reviewImages.length > 1;
const handlePrevious = useCallback(() => { const handlePrevious = useCallback(() => {
if (onPrevious && currentIndex > 0) { // 이미지가 여러 개이고 현재 이미지가 첫 번째가 아니면 이미지만 변경
if (hasMultipleImages && currentImageIndex > 0) {
setCurrentImageIndex(prev => prev - 1);
} else if (onPrevious && currentIndex > 0) {
// 이미지가 첫 번째이면 이전 리뷰로 이동
onPrevious(); onPrevious();
} }
}, [onPrevious, currentIndex]); }, [onPrevious, currentIndex, hasMultipleImages, currentImageIndex]);
const handleNext = useCallback(() => { const handleNext = useCallback(() => {
if (onNext && currentIndex < totalReviews - 1) { // 이미지가 여러 개이고 현재 이미지가 마지막이 아니면 이미지만 변경
if (hasMultipleImages && currentImageIndex < reviewImages.length - 1) {
setCurrentImageIndex(prev => prev + 1);
} else if (onNext && currentIndex < totalReviews - 1) {
// 이미지가 마지막이면 다음 리뷰로 이동
onNext(); onNext();
} }
}, [onNext, currentIndex, totalReviews]); }, [onNext, currentIndex, totalReviews, hasMultipleImages, currentImageIndex, reviewImages.length]);
// 리뷰 데이터가 없을 때 처리 // 리뷰 데이터가 없을 때 처리
if (!currentReview) { if (!currentReview) {
@@ -47,9 +66,7 @@ export default function UserReviewDetail({
); );
} }
const reviewImage = const reviewImage = reviewImages[currentImageIndex];
currentReview.reviewImageList && currentReview.reviewImageList[0];
const hasMultipleReviews = totalReviews > 1;
const formatDate = (dateStr) => { const formatDate = (dateStr) => {
const [year, month, day] = dateStr.split("-"); const [year, month, day] = dateStr.split("-");
@@ -59,7 +76,7 @@ export default function UserReviewDetail({
return ( return (
<> <>
{/* Left Arrow - 이전 리뷰가 있을 때만 표시 */} {/* Left Arrow - 이전 리뷰가 있을 때만 표시 */}
{hasMultipleReviews && currentIndex > 0 && ( {(hasMultipleImages || currentIndex > 0) && (
<SpottableButton <SpottableButton
className={css.leftArrow} className={css.leftArrow}
onClick={handlePrevious} onClick={handlePrevious}
@@ -128,7 +145,7 @@ export default function UserReviewDetail({
</div> </div>
</div> </div>
{/* Right Arrow - 다음 리뷰가 있을 때만 표시 */} {/* Right Arrow - 다음 리뷰가 있을 때만 표시 */}
{hasMultipleReviews && currentIndex < totalReviews - 1 && ( {(hasMultipleImages || currentIndex < totalReviews - 1) && (
<SpottableButton <SpottableButton
className={css.rightArrow} className={css.rightArrow}
onClick={handleNext} onClick={handleNext}