// 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 && (
{$L("Optional Terms")}
)} ); } if (isWarningPopupVisible) { return ( ); } return ( ); }; export default OptionalTermsConfirm;