From aef62454c247e7de9352c6a5d055b0d355b146cf Mon Sep 17 00:00:00 2001 From: kjs Date: Fri, 31 Oct 2025 18:27:34 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=9E=90=EB=8F=99=20=EB=A6=AC=EB=8B=A4?= =?UTF-8?q?=EC=9D=B4=EB=A0=89=ED=8A=B8=20=ED=83=80=EC=9D=B4=EB=A8=B8=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿ› ๋ฒ„๊ทธ ์ˆ˜์ • - ํ™”๋ฉด ๋ชฉ๋ก์œผ๋กœ ์ด๋™ ๋ฒ„ํŠผ ํด๋ฆญ ํ›„์—๋„ 3์ดˆ ํƒ€์ด๋จธ๊ฐ€ ๊ณ„์† ์‹คํ–‰๋˜๋˜ ๋ฌธ์ œ ํ•ด๊ฒฐ - ๋น ๋ฅด๊ฒŒ ๋ฒ„ํŠผ ํด๋ฆญ ํ›„ ๋‹ค๋ฅธ ํ™”๋ฉด ์ง„์ž… ์‹œ ๋‹ค์‹œ ํŠ•๊ฒจ๋‚˜๋Š” ํ˜„์ƒ ์ˆ˜์ • ๏ฟฝ๏ฟฝ ๋ณ€๊ฒฝ ๋‚ด์šฉ - useRef๋กœ ํƒ€์ด๋จธ ์ฐธ์กฐ ์ €์žฅ (autoRedirectTimerRef) - ๋ชจ๋‹ฌ์ด ๋‹ซํž ๋•Œ ํƒ€์ด๋จธ ์ •๋ฆฌ (clearTimeout) - ์ปดํฌ๋„ŒํŠธ ์–ธ๋งˆ์šดํŠธ ์‹œ ํƒ€์ด๋จธ ์ •๋ฆฌ - 'ํ™”๋ฉด ๋ชฉ๋ก์œผ๋กœ ์ด๋™' ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํƒ€์ด๋จธ ์ฆ‰์‹œ ์ •๋ฆฌ ๐Ÿ“ ๊ธฐ์ˆ ์  ๊ฐœ์„  - setTimeout ํƒ€์ด๋จธ๋ฅผ useRef๋กœ ๊ด€๋ฆฌ - useEffect cleanup ํ•จ์ˆ˜์—์„œ ํƒ€์ด๋จธ ์ •๋ฆฌ - ๋ฒ„ํŠผ onClick์—์„œ ํƒ€์ด๋จธ ์ˆ˜๋™ ์ •๋ฆฌ โœ… ๊ฒฐ๊ณผ - ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํƒ€์ด๋จธ๊ฐ€ ์ฆ‰์‹œ ์ •๋ฆฌ๋จ - ๋‹ค๋ฅธ ํ™”๋ฉด์œผ๋กœ ์ด๋™ ํ›„ 3์ดˆ ๋’ค ํŠ•๊ฒจ๋‚˜์ง€ ์•Š์Œ - ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€ --- .../components/screen/MenuAssignmentModal.tsx | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) 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 = ({