fix(space): HUD 시작 흐름과 컨트롤 상태를 정리

This commit is contained in:
2026-03-09 13:13:53 +09:00
parent 675014166a
commit cceaa6bd82
4 changed files with 167 additions and 87 deletions

View File

@@ -8,11 +8,15 @@ interface SpaceFocusHudWidgetProps {
timerLabel: string;
timeDisplay?: string;
visible: boolean;
hasActiveSession?: boolean;
playbackState?: 'running' | 'paused';
sessionPhase?: 'focus' | 'break' | null;
isSessionActionPending?: boolean;
canStartSession?: boolean;
canPauseSession?: boolean;
canRestartSession?: boolean;
onStartRequested?: () => void;
onPauseRequested?: () => void;
onResumeRequested?: () => void;
onRestartRequested?: () => void;
onGoalUpdate: (nextGoal: string) => void | Promise<void>;
onStatusMessage: (payload: HudStatusLinePayload) => void;
@@ -23,11 +27,15 @@ export const SpaceFocusHudWidget = ({
timerLabel,
timeDisplay,
visible,
playbackState = 'running',
hasActiveSession = false,
playbackState = 'paused',
sessionPhase = 'focus',
isSessionActionPending = false,
canStartSession = false,
canPauseSession = false,
canRestartSession = false,
onStartRequested,
onPauseRequested,
onResumeRequested,
onRestartRequested,
onGoalUpdate,
onStatusMessage,
@@ -48,14 +56,14 @@ export const SpaceFocusHudWidget = ({
}, []);
useEffect(() => {
if (visible && !visibleRef.current) {
if (visible && !visibleRef.current && playbackState === 'running') {
onStatusMessage({
message: `이번 한 조각 · ${normalizedGoal}`,
});
}
visibleRef.current = visible;
}, [normalizedGoal, onStatusMessage, visible]);
}, [normalizedGoal, onStatusMessage, playbackState, visible]);
useEffect(() => {
if (playbackStateRef.current === 'paused' && playbackState === 'running' && visible) {
@@ -82,12 +90,16 @@ export const SpaceFocusHudWidget = ({
goal={goal}
timeDisplay={timeDisplay}
isImmersionMode
hasActiveSession={hasActiveSession}
sessionPhase={sessionPhase}
playbackState={playbackState}
isControlsDisabled={isSessionActionPending}
canStart={canStartSession}
canPause={canPauseSession}
canReset={canRestartSession}
className="pr-[4.2rem]"
onGoalCompleteRequest={handleOpenCompleteSheet}
onStartClick={onResumeRequested}
onStartClick={onStartRequested}
onPauseClick={onPauseRequested}
onResetClick={onRestartRequested}
/>
@@ -110,9 +122,6 @@ export const SpaceFocusHudWidget = ({
onConfirm={(nextGoal) => {
void onGoalUpdate(nextGoal);
setSheetOpen(false);
onStatusMessage({
message: `이번 한 조각 · ${nextGoal}`,
});
}}
/>
</>