diff --git a/src/widgets/space-focus-hud/ui/EndSessionConfirmModal.tsx b/src/widgets/space-focus-hud/ui/EndSessionConfirmModal.tsx index 1852b65..96123e3 100644 --- a/src/widgets/space-focus-hud/ui/EndSessionConfirmModal.tsx +++ b/src/widgets/space-focus-hud/ui/EndSessionConfirmModal.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useEffect, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { cn } from '@/shared/lib/cn'; import type { CompletionResult } from '@/features/focus-session'; @@ -30,19 +30,25 @@ export const EndSessionConfirmModal = ({ const [stage, setStage] = useState('decision'); const [isSubmitting, setIsSubmitting] = useState(false); const [result, setResult] = useState(null); + const resetTimerRef = useRef(null); const trimmedGoal = currentGoal.trim() || '목표 없음'; useEffect(() => { if (!open) { - setTimeout(() => { + resetTimerRef.current = window.setTimeout(() => { setStage('decision'); setResult(null); - }, 500); // Reset after close animation + }, 500); setIsSubmitting(false); return; } + if (resetTimerRef.current !== null) { + window.clearTimeout(resetTimerRef.current); + resetTimerRef.current = null; + } + const handleEscape = (e: KeyboardEvent) => { if (e.key === 'Escape' && !isSubmitting) { onClose(); @@ -50,9 +56,19 @@ export const EndSessionConfirmModal = ({ }; window.addEventListener('keydown', handleEscape); - return () => window.removeEventListener('keydown', handleEscape); + return () => { + window.removeEventListener('keydown', handleEscape); + }; }, [open, isSubmitting, onClose]); + useEffect(() => { + return () => { + if (resetTimerRef.current !== null) { + window.clearTimeout(resetTimerRef.current); + } + }; + }, []); + const handleFinish = async () => { if (isSubmitting) return; setIsSubmitting(true); @@ -263,4 +279,4 @@ export const EndSessionConfirmModal = ({ ); -}; \ No newline at end of file +}; diff --git a/src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx b/src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx index e770990..331d9fe 100644 --- a/src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx +++ b/src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx @@ -326,18 +326,21 @@ export const SpaceWorkspaceWidget = () => { if (pendingCompletionResult) { setPendingCompletionResult(null); setCurrentSessionThoughts([]); + void router.replace('/app'); return true; } const completionResult = await controls.handleManualEnd(); if (completionResult) { - setPendingCompletionResult(completionResult); setCurrentSessionThoughts([]); + void router.replace('/app'); + return true; } else { - // If no result (cancelled or error), still try to go back if session is gone - if (!currentSession) router.replace('/app'); + if (!currentSession) { + void router.replace('/app'); + } } - return Boolean(completionResult); + return false; }} /> ) : null}