통합로그 피드백 수정

This commit is contained in:
opacity@t-win.kr
2025-08-12 16:38:43 +09:00
parent eac8a1d1d4
commit fd4358b986
4 changed files with 241 additions and 164 deletions

View File

@@ -12,7 +12,7 @@ import {
// setShowPopup,
fetchCurrentUserHomeTerms,
} from "../../../actions/homeActions";
import {
import {
changeAppStatus,
setOptionalTermsPopupShown,
setOptionalTermsUserDecision,
@@ -45,11 +45,11 @@ import SimpleVideoContainer from "./SimpleVideoContainer";
const SpottableComponent = Spottable("div");
const Container = SpotlightContainerDecorator(
{ enterTo: "last-focused" },
"div",
"div"
);
const ContainerBasic = SpotlightContainerDecorator(
{ enterTo: "last-focused" },
"div",
"div"
);
export default function HomeBanner({
@@ -60,11 +60,11 @@ export default function HomeBanner({
}) {
const dispatch = useDispatch();
const homeTopDisplayInfo = useSelector(
(state) => state.home.homeTopDisplayInfo,
(state) => state.home.homeTopDisplayInfo
);
const bannerDataList = useSelector(
(state) => state.home.bannerData?.bannerInfos,
(state) => state.home.bannerData?.bannerInfos
);
const popupVisible = useSelector((state) => state.common.popup.popupVisible);
@@ -141,11 +141,11 @@ export default function HomeBanner({
modalClassName: css.videoModal,
isVerticalModal: true, // Assuming second banner is horizontal, so modal is vertical
};
// 중앙 제어 시스템에 '미리보기' 재생을 요청
dispatch(requestPlayControl("banner1_preview", videoInfo));
}
if (handleItemFocus) {
handleItemFocus();
}
@@ -158,10 +158,16 @@ export default function HomeBanner({
const termsData = useSelector((state) => state.home.termsData);
const termsIdMap = useSelector((state) => state.home.termsIdMap);
const optionalTermsAvailable = useSelector((state) => state.home.optionalTermsAvailable);
const optionalTermsAvailable = useSelector(
(state) => state.home.optionalTermsAvailable
);
const optionalTermsData = useSelector((state) => {
// Chromium68 호환성을 위해 Optional Chaining 제거
if (state.home.termsData && state.home.termsData.data && state.home.termsData.data.terms) {
if (
state.home.termsData &&
state.home.termsData.data &&
state.home.termsData.data.terms
) {
return state.home.termsData.data.terms.find(
(term) => term.trmsTpCd === "MST00405"
);
@@ -174,7 +180,9 @@ export default function HomeBanner({
const introTermsAgree = useSelector((state) => state.common.introTermsAgree);
// 새로운 Redux 상태: 선택약관 팝업 플로우 관리
const optionalTermsPopupFlow = useSelector((state) => state.common.optionalTermsPopupFlow);
const optionalTermsPopupFlow = useSelector(
(state) => state.common.optionalTermsPopupFlow
);
//------------------------------------------------------------------------------
// 팝업표시 상태
@@ -186,46 +194,57 @@ export default function HomeBanner({
// 선택약관 팝업 표시 여부 ===================================================
const shouldShowOptionalTermsPopup = useMemo(() => {
console.log('[HomeBanner] Step 1: 상태 확인', {
termsLoading,
isGnbOpened,
console.log("[HomeBanner] Step 1: 상태 확인", {
termsLoading,
isGnbOpened,
optionalTermsAvailable,
optionalTermsPopupFlow
optionalTermsPopupFlow,
});
// 1. 기본 조건 확인
if (termsLoading || isGnbOpened || !optionalTermsAvailable) {
console.log('[HomeBanner] Early return: 기본 조건 불만족');
console.log("[HomeBanner] Early return: 기본 조건 불만족");
return false;
}
// 2. 새로운 Redux 상태 확인 (TV 환경 최적화)
if (optionalTermsPopupFlow.popupShown ||
optionalTermsPopupFlow.userDecision ||
optionalTermsPopupFlow.agreedInSession) {
console.log('[HomeBanner] Early return: 이미 처리됨', optionalTermsPopupFlow);
if (
optionalTermsPopupFlow.popupShown ||
optionalTermsPopupFlow.userDecision ||
optionalTermsPopupFlow.agreedInSession
) {
console.log(
"[HomeBanner] Early return: 이미 처리됨",
optionalTermsPopupFlow
);
return false;
}
// 3. 서버 데이터 확인
const terms = termsData && termsData.data && termsData.data.terms;
console.log('[HomeBanner] Step 2: termsData 확인', terms);
console.log("[HomeBanner] Step 2: termsData 확인", terms);
if (!terms) {
console.log('[HomeBanner] Early return: terms가 존재하지 않음');
console.log("[HomeBanner] Early return: terms가 존재하지 않음");
return false;
}
const optionalTerm = terms.find((term) => term.trmsTpCd === "MST00405");
console.log('[HomeBanner] Step 3: optionalTerm 검색 결과', optionalTerm);
console.log("[HomeBanner] Step 3: optionalTerm 검색 결과", optionalTerm);
const result = optionalTerm
? optionalTerm.trmsPopFlag === "Y" && optionalTerm.trmsAgrFlag === "N"
: false;
console.log('[HomeBanner] Step 4: 최종 결과', result);
console.log("[HomeBanner] Step 4: 최종 결과", result);
return result;
}, [termsData, termsLoading, isGnbOpened, optionalTermsAvailable, optionalTermsPopupFlow]);
}, [
termsData,
termsLoading,
isGnbOpened,
optionalTermsAvailable,
optionalTermsPopupFlow,
]);
// 선택약관 팝업 표시 여부 ===================================================
const handleOptionalAgree = useCallback(() => {
@@ -355,7 +374,7 @@ export default function HomeBanner({
}
} else if (
bannerDetailInfos.find(
(el) => el.shptmBanrTpNm === "LIVE" || el.shptmBanrTpNm === "VOD",
(el) => el.shptmBanrTpNm === "LIVE" || el.shptmBanrTpNm === "VOD"
)
) {
targetIndex = i;
@@ -395,12 +414,12 @@ export default function HomeBanner({
// 약관 데이터 로딩 중에는 아무것도 하지 않음
return;
}
// 선택 약관 팝업을 띄워야 하는 경우
if (shouldShowOptionalTermsPopup && !isOptionalConfirmVisible) {
console.log("shouldShowOptionalTermsPopup", shouldShowOptionalTermsPopup);
console.log("App.js optionalTermsConfirm 팝업 표시");
const timer = setTimeout(() => {
setIsOptionalConfirmVisible(true);
// 팝업이 실제로 표시된 후에 Redux 상태 업데이트
@@ -410,7 +429,12 @@ export default function HomeBanner({
// 컴포넌트 언마운트 시 타이머 클리어
return () => clearTimeout(timer);
}
}, [shouldShowOptionalTermsPopup, termsLoading, isOptionalConfirmVisible, dispatch]);
}, [
shouldShowOptionalTermsPopup,
termsLoading,
isOptionalConfirmVisible,
dispatch,
]);
// const renderItem = useCallback(
// (index, isHorizontal) => {
@@ -527,7 +551,7 @@ export default function HomeBanner({
</div>
);
},
[_handleItemFocus, _handleShelfFocus, bannerDataList],
[_handleItemFocus, _handleShelfFocus, bannerDataList]
);
// 1번째 배너(포커스 재생) 및 기타 배너를 위한 렌더링 함수
@@ -579,7 +603,7 @@ export default function HomeBanner({
</div>
);
},
[_handleItemFocus, _handleShelfFocus, bannerDataList, selectTemplate],
[_handleItemFocus, _handleShelfFocus, bannerDataList, selectTemplate]
);
// 0번째 배너(영구 재생)를 위한 렌더링 함수
@@ -595,7 +619,7 @@ export default function HomeBanner({
</div>
);
},
[_handleShelfFocus],
[_handleShelfFocus]
);
const renderSimpleVideoContainer = useCallback(
@@ -610,7 +634,7 @@ export default function HomeBanner({
</div>
);
},
[_handleShelfFocus],
[_handleShelfFocus]
);
const renderLayout = useCallback(() => {
@@ -618,7 +642,7 @@ export default function HomeBanner({
case "DSP00201": {
return (
<>
<ContainerBasic className={css.smallBox}>
<ContainerBasic className={css.smallBox}>
{renderItem(0, true)}
{renderItem(1, true)}
</ContainerBasic>