diff --git a/frontend/components/screen/MenuAssignmentModal.tsx b/frontend/components/screen/MenuAssignmentModal.tsx index dafa1319..e04f3bda 100644 --- a/frontend/components/screen/MenuAssignmentModal.tsx +++ b/frontend/components/screen/MenuAssignmentModal.tsx @@ -46,6 +46,7 @@ export const MenuAssignmentModal: React.FC = ({ const [assignmentSuccess, setAssignmentSuccess] = useState(false); const [assignmentMessage, setAssignmentMessage] = useState(""); const searchInputRef = useRef(null); + const autoRedirectTimerRef = useRef(null); // 메뉴 목록 로드 (관리자 메뉴 + 사용자 메뉴) const loadMenus = async () => { @@ -98,7 +99,7 @@ export const MenuAssignmentModal: React.FC = ({ } }; - // 모달이 열릴 때 메뉴 목록 로드 + // 모달이 열릴 때 메뉴 목록 로드 및 정리 useEffect(() => { if (isOpen) { loadMenus(); @@ -107,7 +108,21 @@ export const MenuAssignmentModal: React.FC = ({ setSearchTerm(""); setAssignmentSuccess(false); setAssignmentMessage(""); + } else { + // 모달이 닫힐 때 타이머 정리 + if (autoRedirectTimerRef.current) { + clearTimeout(autoRedirectTimerRef.current); + autoRedirectTimerRef.current = null; + } } + + // 컴포넌트 언마운트 시 타이머 정리 + return () => { + if (autoRedirectTimerRef.current) { + clearTimeout(autoRedirectTimerRef.current); + autoRedirectTimerRef.current = null; + } + }; }, [isOpen]); // 메뉴 선택 처리 @@ -208,7 +223,7 @@ export const MenuAssignmentModal: React.FC = ({ } // 3초 후 자동으로 모달 닫고 화면 목록으로 이동 - setTimeout(() => { + autoRedirectTimerRef.current = setTimeout(() => { onClose(); // 모달 닫기 if (onBackToList) { onBackToList(); @@ -237,7 +252,7 @@ export const MenuAssignmentModal: React.FC = ({ } // 3초 후 자동으로 모달 닫고 화면 목록으로 이동 - setTimeout(() => { + autoRedirectTimerRef.current = setTimeout(() => { onClose(); // 모달 닫기 if (onBackToList) { onBackToList(); @@ -374,6 +389,13 @@ export const MenuAssignmentModal: React.FC = ({