[SHOPTIME-3731] SBM / 팝업이 열릴때 포커스가 빠르게 이동해서 깜빡 거리는 현상

Changed files:
1. MobileSendPopUp.jsx

Detail note:
- 원인: History가 있을 경우의 포커스 예외 처리 부재
- 대책: History가 있을 경우에 포커스 예외 처리
This commit is contained in:
younghoon100.park
2024-10-08 18:23:58 +09:00
parent 75a28157c4
commit 9b12e9bfec

View File

@@ -1,4 +1,10 @@
import React, { useCallback, useEffect, useMemo, useState } from "react"; import React, {
useCallback,
useEffect,
useMemo,
useRef,
useState,
} from "react";
import classNames from "classnames"; import classNames from "classnames";
import { import {
@@ -85,9 +91,6 @@ export default function MobileSendPopUp({
const [recentSentNumber, setRecentSentNumber] = useState([]); const [recentSentNumber, setRecentSentNumber] = useState([]);
const [keyPadOff, setKeyPadOff] = useState(false); const [keyPadOff, setKeyPadOff] = useState(false);
const [smsRetCode, setSmsRetCode] = useState(undefined); const [smsRetCode, setSmsRetCode] = useState(undefined);
const [chkAgreeBtn, setChkAgreeBtn] = useState(false);
const [popText, setPopText] = useState(false);
const [spotlightDisabled, setSpotlightDisabled] = useState(true);
const { httpHeader } = useSelector((state) => state.common); const { httpHeader } = useSelector((state) => state.common);
const regDeviceInfoRetCode = useSelector( const regDeviceInfoRetCode = useSelector(
(state) => state.device?.regDeviceInfoData?.retCode (state) => state.device?.regDeviceInfoData?.retCode
@@ -106,6 +109,8 @@ export default function MobileSendPopUp({
const deviceCountryCode = httpHeader["X-Device-Country"]; const deviceCountryCode = httpHeader["X-Device-Country"];
const dispatch = useDispatch(); const dispatch = useDispatch();
const agreeBtnClickedRef = useRef(false);
const getMaxNum = useCallback((_deviceCountryCode) => { const getMaxNum = useCallback((_deviceCountryCode) => {
if (_deviceCountryCode === "DE" || _deviceCountryCode === "GB") { if (_deviceCountryCode === "DE" || _deviceCountryCode === "GB") {
return 11; return 11;
@@ -232,13 +237,15 @@ export default function MobileSendPopUp({
}, [deviceInfo, dispatch]); }, [deviceInfo, dispatch]);
useEffect(() => { useEffect(() => {
if (!chkAgreeBtn) { if (!agreeBtnClickedRef.current) {
if (recentSentNumber && recentSentNumber.length > 0) { if (recentSentNumber && recentSentNumber.length > 0) {
setKeyPadOff(true); setKeyPadOff(true);
setMobileNumber(recentSentNumber[0]); setMobileNumber(recentSentNumber[0]);
setTimeout(() => Spotlight.focus("agreeAndSend"));
} else { } else {
setKeyPadOff(false); setKeyPadOff(false);
setMobileNumber(""); setMobileNumber("");
setTimeout(() => Spotlight.focus("keypad-number-1"));
} }
} }
}, [recentSentNumber]); }, [recentSentNumber]);
@@ -305,7 +312,7 @@ export default function MobileSendPopUp({
} }
updatedNumbers.unshift(mobileNumber); updatedNumbers.unshift(mobileNumber);
setChkAgreeBtn(true); agreeBtnClickedRef.current = true;
setRecentSentNumber(updatedNumbers); setRecentSentNumber(updatedNumbers);
const encryptedNumbers = updatedNumbers.map(encryptPhoneNumber); const encryptedNumbers = updatedNumbers.map(encryptPhoneNumber);
@@ -501,20 +508,6 @@ export default function MobileSendPopUp({
} }
}, [curationCouponSuccess, mobileNumber]); }, [curationCouponSuccess, mobileNumber]);
useEffect(() => {
if (keyPadOff) {
setTimeout(() => {
Spotlight.focus("agreeAndSend");
});
setSpotlightDisabled(false);
} else {
setSpotlightDisabled(true);
setTimeout(() => {
Spotlight.focus("keypad-number-1");
});
}
}, [keyPadOff]);
const retCodeError = const retCodeError =
(smsRetCode !== undefined && smsRetCode !== 0) || (smsRetCode !== undefined && smsRetCode !== 0) ||
(curationCouponSuccess !== undefined && curationCouponSuccess !== 0); (curationCouponSuccess !== undefined && curationCouponSuccess !== 0);
@@ -577,7 +570,7 @@ export default function MobileSendPopUp({
<SpottableComponent <SpottableComponent
className={css.inputNum} className={css.inputNum}
onClick={handleInputClick} onClick={handleInputClick}
spotlightDisabled={spotlightDisabled} spotlightDisabled={!keyPadOff}
> >
{deviceCountryCode && deviceCountryCode === "RU" && ( {deviceCountryCode && deviceCountryCode === "RU" && (
<span className={css.rucInput}>{"+7 "}</span> <span className={css.rucInput}>{"+7 "}</span>