// src/components/Optional/OptionalTermsConfirm.jsx
import React, {
useCallback,
useEffect,
useState,
} from 'react';
import {
useDispatch,
useSelector,
} from 'react-redux';
import Spotlight from '@enact/spotlight';
import { setHidePopup } from '../../actions/commonActions';
import { setMyPageTermsAgree } from '../../actions/myPageActions';
import {
$L,
scaleH,
scaleW,
} from '../../utils/helperMethods';
import TButtonScroller from '../TButtonScroller/TButtonScroller';
import TNewPopUp from '../TPopUp/TNewPopUp';
import css from './OptionalTermsConfirmBottom.module.less';
const OptionalTermsConfirm = ({ open }) => {
const dispatch = useDispatch();
const [isChecked, setIsChecked] = useState(false);
const [isTermsPopupVisible, setIsTermsPopupVisible] = useState(false);
const [isWarningPopupVisible, setIsWarningPopupVisible] = useState(false);
const optionalTermsData = useSelector((state) =>
state.home.termsData?.data?.terms.find(term => term.trmsTpCd === "MST00405")
);
// 포커스 복원을 위한 useEffect 추가
useEffect(() => {
if (open && !isTermsPopupVisible && !isWarningPopupVisible) {
const timer = setTimeout(() => {
Spotlight.focus("optional-terms-confirm-popup");
}, 150); // 약간 더 긴 지연
return () => clearTimeout(timer);
}
}, [open, isTermsPopupVisible, isWarningPopupVisible]);
// const handleMainPopupClose = useCallback(() => {
// dispatch(setHidePopup());
// }, [dispatch]);
// const handleCheckboxToggle = useCallback(({ selected }) => {
// setIsChecked(selected);
// }, []);
const handleViewTermsClick = useCallback(() => {
setIsTermsPopupVisible(true);
}, []);
const handleCloseTermsPopup = useCallback((e) => {
if (e) {
e.stopPropagation();
}
setIsTermsPopupVisible(false);
Spotlight.focus("optional-terms-confirm-popup");
}, []);
const handleTermsPopupClosed = useCallback(() => {
setTimeout(() => {
Spotlight.focus("optional-terms-confirm-popup");
}, 50);
}, []);
const handleAgreeTest = useCallback(() => {
console.log("handleAgreeTest");
Spotlight.pause();
setIsTermsPopupVisible(false);
// 상태 업데이트 후 DOM이 완전히 렌더링될 때까지 기다린 후 포커스
setTimeout(() => {
Spotlight.resume();
Spotlight.focus("optional-terms-confirm-popup");
}, 500); // 50ms에서 100ms로 증가
}, []);
const handleAgree = useCallback(() => {
if (isChecked) {
// 약관 동의할 항목들 (string array)
const termsList = ["TID0000222", "TID0000223", "TID0000232"];
// 동의하지 않을 항목들 (빈 배열)
const notTermsList = [];
console.log('OptionalTermsConfirm -약관 동의 API 호출 파라미터:', { termsList, notTermsList });
const callback = (response) => {
if (response.retCode === "000" || response.retCode === 0) {
console.log('약관 동의 성공:', response);
} else {
console.error('약관 동의 실패:', response);
}
};
console.log('OptionalTermsConfirm - 약관 동의 API 호출 payload:', { termsList, notTermsList });
dispatch(setMyPageTermsAgree({ termsList, notTermsList }, callback));
dispatch(setHidePopup());
} else {
setIsWarningPopupVisible(true);
}
}, [isChecked, dispatch]);
const handleCloseWarningPopup = useCallback(() => {
setIsWarningPopupVisible(false);
Spotlight.focus("optional-terms-confirm-popup");
}, []);
const handleDontAskAgain = () => {
console.log("Don't Ask Again 처리 필요");
dispatch(setHidePopup());
};
if (isTermsPopupVisible) {
return (
{optionalTermsData && (
)}
);
}
if (isWarningPopupVisible) {
return (
);
}
return (
);
};
export default OptionalTermsConfirm;