fix(space): HUD 시작 흐름과 컨트롤 상태를 정리
This commit is contained in:
@@ -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}`,
|
||||
});
|
||||
}}
|
||||
/>
|
||||
</>
|
||||
|
||||
Reference in New Issue
Block a user