({
- sound: Boolean(storedSelection.override?.sound),
- timer: Boolean(storedSelection.override?.timer),
+ sound: false,
+ timer: false,
});
const {
@@ -234,6 +233,41 @@ export const SpaceWorkspaceWidget = () => {
}
}, [selectionOverride.sound, selectionOverride.timer, setSelectedPresetId]);
+ useEffect(() => {
+ const storedSelection = readStoredWorkspaceSelection();
+ const restoredSelectionOverride: SelectionOverride = {
+ sound: Boolean(storedSelection.override?.sound),
+ timer: Boolean(storedSelection.override?.timer),
+ };
+
+ setSelectionOverride(restoredSelectionOverride);
+
+ if (!roomQuery && storedSelection.sceneId && getRoomById(storedSelection.sceneId)) {
+ setSelectedRoomId(storedSelection.sceneId);
+ }
+
+ if (!timerQuery) {
+ const restoredTimerLabel = resolveTimerLabelFromPresetId(storedSelection.timerPresetId);
+
+ if (restoredTimerLabel) {
+ setSelectedTimerLabel(restoredTimerLabel);
+ }
+ }
+
+ if (!soundQuery && storedSelection.soundPresetId && SOUND_PRESETS.some((preset) => preset.id === storedSelection.soundPresetId)) {
+ setSelectedPresetId(storedSelection.soundPresetId);
+ }
+
+ const restoredGoal = storedSelection.goal?.trim() ?? '';
+
+ if (!goalQuery && restoredGoal.length > 0 && !hasQueryOverrides) {
+ setResumeGoal(restoredGoal);
+ setShowResumePrompt(true);
+ }
+
+ setHasHydratedSelection(true);
+ }, [goalQuery, hasQueryOverrides, roomQuery, setSelectedPresetId, soundQuery, timerQuery]);
+
useEffect(() => {
applyRecommendedSelections(selectedRoomId);
}, [applyRecommendedSelections, selectedRoomId]);
@@ -323,11 +357,15 @@ export const SpaceWorkspaceWidget = () => {
return;
}
+ if (!hasHydratedSelection) {
+ return;
+ }
+
const timerPresetId = resolveTimerPresetIdFromLabel(selectedTimerLabel);
const normalizedGoal = goalInput.trim().length > 0
? goalInput.trim()
: showResumePrompt
- ? storedGoal
+ ? resumeGoal
: '';
window.localStorage.setItem(
@@ -340,7 +378,7 @@ export const SpaceWorkspaceWidget = () => {
override: selectionOverride,
}),
);
- }, [goalInput, selectedRoomId, selectedTimerLabel, selectedPresetId, selectionOverride, showResumePrompt, storedGoal]);
+ }, [goalInput, hasHydratedSelection, resumeGoal, selectedRoomId, selectedTimerLabel, selectedPresetId, selectionOverride, showResumePrompt]);
return (
@@ -373,11 +411,11 @@ export const SpaceWorkspaceWidget = () => {
onGoalChipSelect={handleGoalChipSelect}
onStart={handleStart}
resumeHint={
- showResumePrompt
+ showResumePrompt && resumeGoal
? {
- goal: storedGoal,
+ goal: resumeGoal,
onResume: () => {
- setGoalInput(storedGoal);
+ setGoalInput(resumeGoal);
setSelectedGoalId(null);
setShowResumePrompt(false);
setWorkspaceMode('focus');