[20250707] 선택약관팝업오픈 조건 수정: gogs->gitlab

This commit is contained in:
djaco
2025-07-07 16:06:49 +09:00
parent 847b16b3a6
commit 19d87b489b
5 changed files with 135 additions and 18 deletions

View File

@@ -12,7 +12,13 @@ import {
// setShowPopup,
fetchCurrentUserHomeTerms,
} from "../../../actions/homeActions";
import { changeAppStatus } from "../../../actions/commonActions";
import {
changeAppStatus,
setOptionalTermsPopupShown,
setOptionalTermsUserDecision,
handleOptionalTermsAgree as handleOptionalTermsAgreeAction,
handleOptionalTermsDecline,
} from "../../../actions/commonActions";
import { setMyPageTermsAgree } from "../../../actions/myPageActions";
import { pushPanel, popPanel } from "../../../actions/panelActions";
import { panel_names } from "../../../utils/Config";
@@ -161,6 +167,9 @@ export default function HomeBanner({
// 선택약관 동의여부
const introTermsAgree = useSelector((state) => state.common.introTermsAgree);
// 새로운 Redux 상태: 선택약관 팝업 플로우 관리
const optionalTermsPopupFlow = useSelector((state) => state.common.optionalTermsPopupFlow);
//------------------------------------------------------------------------------
// 팝업표시 상태
const [isOptionalConfirmVisible, setIsOptionalConfirmVisible] =
@@ -174,17 +183,25 @@ export default function HomeBanner({
console.log('[HomeBanner] Step 1: 상태 확인', {
termsLoading,
isGnbOpened,
optionalTermsAgreed,
optionalTermsAvailable
optionalTermsAvailable,
optionalTermsPopupFlow
});
// optionalTermsAvailable = false면 팝업 표시 안함
if (termsLoading || isGnbOpened || optionalTermsAgreed || !optionalTermsAvailable) {
console.log('[HomeBanner] Early return: 조건 불만족');
// 1. 기본 조건 확인
if (termsLoading || isGnbOpened || !optionalTermsAvailable) {
console.log('[HomeBanner] Early return: 기본 조건 불만족');
return false;
}
// 2. 새로운 Redux 상태 확인 (TV 환경 최적화)
if (optionalTermsPopupFlow.popupShown ||
optionalTermsPopupFlow.userDecision ||
optionalTermsPopupFlow.agreedInSession) {
console.log('[HomeBanner] Early return: 이미 처리됨', optionalTermsPopupFlow);
return false;
}
// Chromium68 호환성을 위해 Optional Chaining 제거
// 3. 서버 데이터 확인
const terms = termsData && termsData.data && termsData.data.terms;
console.log('[HomeBanner] Step 2: termsData 확인', terms);
if (!terms) {
@@ -201,7 +218,7 @@ export default function HomeBanner({
console.log('[HomeBanner] Step 4: 최종 결과', result);
return result;
}, [termsData, termsLoading, isGnbOpened, optionalTermsAgreed, optionalTermsAvailable]);
}, [termsData, termsLoading, isGnbOpened, optionalTermsAvailable, optionalTermsPopupFlow]);
// 선택약관 팝업 표시 여부 ===================================================
@@ -254,7 +271,10 @@ export default function HomeBanner({
if (process.env.NODE_ENV === "development") {
console.log("[HomeBanner] 약관 동의 성공:", response);
}
// 약관 동의 성공 상태 설정
// 새로운 Redux 액션을 사용하여 상태 업데이트
dispatch(setOptionalTermsUserDecision('agreed'));
dispatch(setOptionalTermsPopupShown(true));
// 로컬 상태도 업데이트 (기존 로직 유지)
setOptionalTermsAgreed(true);
// 약관 데이터 갱신
dispatch(fetchCurrentUserHomeTerms());
@@ -289,9 +309,11 @@ export default function HomeBanner({
const handleOptionalDeclineClick = useCallback(() => {
console.log("[HomeBanner] 거절/다음에 하기 버튼 클릭");
// 새로운 Redux 액션을 사용하여 거절 상태 업데이트
dispatch(setOptionalTermsUserDecision('declined'));
dispatch(setOptionalTermsPopupShown(true));
setIsOptionalConfirmVisible(false);
// 거절 처리 로직 추가
}, []);
}, [dispatch]);
// 선택약관 팝업 Close
const handleTermsPopupClosed = useCallback(() => {
@@ -365,26 +387,28 @@ export default function HomeBanner({
// }, 1000);
// }, []);
// 약관 동의 및 선택 약관 팝업 처리
// 약관 동의 및 선택 약관 팝업 처리 (TV 환경 최적화)
useEffect(() => {
if (termsLoading) {
// 약관 데이터 로딩 중에는 아무것도 하지 않음
return;
}
// 선택 약관 팝업을 띄워야 하는 경우
if (shouldShowOptionalTermsPopup) {
// 3초 후에 팝업을 띄우도록 설정
if (shouldShowOptionalTermsPopup && !isOptionalConfirmVisible) {
console.log("shouldShowOptionalTermsPopup", shouldShowOptionalTermsPopup);
console.log("App.js optionalTermsConfirm 팝업 표시");
const timer = setTimeout(() => {
setIsOptionalConfirmVisible(true);
// dispatch(setShowPopup({ activePopup: "optionalTermsConfirm" }));
}, 1000); // 3000 milliseconds = 3 seconds
// 팝업이 실제로 표시된 후에 Redux 상태 업데이트
dispatch(setOptionalTermsPopupShown(true));
}, 1000);
// 컴포넌트 언마운트 시 타이머 클리어
return () => clearTimeout(timer);
}
}, [shouldShowOptionalTermsPopup, termsLoading]);
}, [shouldShowOptionalTermsPopup, termsLoading, isOptionalConfirmVisible, dispatch]);
// const renderItem = useCallback(
// (index, isHorizontal) => {