feat(curation): Scene 추천 자동 적용과 override 존중 규칙 도입
맥락: - 목표 입력 후 바로 시작할 수 있도록 Scene 기반 추천값을 자동으로 채우되, 사용자가 직접 바꾼 값은 유지해야 했습니다. 변경사항: - RoomTheme에 recommendedSoundPresetId, recommendedTimerPresetId 필드를 추가하고 각 Scene 더미 데이터에 추천 preset id를 매핑했습니다. - /space 초기 진입 시 선택된 Scene 추천값으로 타이머/사운드 기본값이 설정되도록 초기화 로직을 정리했습니다. - /space 상태에 override.sound/override.timer 플래그를 추가하고, Scene 변경 시 override가 false인 항목만 자동 동기화하도록 반영했습니다. - 추천 복원 액션(추천으로 되돌림)을 위한 핸들러/props 경로를 workspace -> tools-dock -> control-center까지 연결했습니다. 검증: - npx tsc --noEmit 세션-상태: Scene 추천 자동 적용과 override 기반 자동 동기화가 동작합니다. 세션-다음: Control Center를 Scene/Time 중심 구조로 단순화하고 추천 정보/되돌리기 UI를 적용합니다. 세션-리스크: Control Center UI가 아직 기존 구조(Sound/Pack 포함)라 다음 커밋에서 정리가 필요합니다.
This commit is contained in:
@@ -32,6 +32,8 @@ interface SpaceToolsDockWidgetProps {
|
||||
onSetSoundMuted: (nextMuted: boolean) => void;
|
||||
thoughts: RecentThought[];
|
||||
thoughtCount: number;
|
||||
sceneRecommendedSoundLabel: string;
|
||||
sceneRecommendedTimerLabel: string;
|
||||
onRoomSelect: (roomId: string) => void;
|
||||
onTimerSelect: (timerLabel: string) => void;
|
||||
onSelectPreset: (presetId: string) => void;
|
||||
@@ -40,6 +42,7 @@ interface SpaceToolsDockWidgetProps {
|
||||
onSetThoughtCompleted: (thoughtId: string, isCompleted: boolean) => RecentThought | null;
|
||||
onRestoreThought: (thought: RecentThought) => void;
|
||||
onClearInbox: () => RecentThought[];
|
||||
onResetToSceneRecommended: () => void;
|
||||
onStatusMessage: (payload: HudStatusLinePayload) => void;
|
||||
onExitRequested: () => void;
|
||||
}
|
||||
@@ -57,6 +60,8 @@ export const SpaceToolsDockWidget = ({
|
||||
onSetSoundMuted,
|
||||
thoughts,
|
||||
thoughtCount,
|
||||
sceneRecommendedSoundLabel,
|
||||
sceneRecommendedTimerLabel,
|
||||
onRoomSelect,
|
||||
onTimerSelect,
|
||||
onSelectPreset,
|
||||
@@ -65,6 +70,7 @@ export const SpaceToolsDockWidget = ({
|
||||
onSetThoughtCompleted,
|
||||
onRestoreThought,
|
||||
onClearInbox,
|
||||
onResetToSceneRecommended,
|
||||
onStatusMessage,
|
||||
onExitRequested,
|
||||
}: SpaceToolsDockWidgetProps) => {
|
||||
@@ -414,6 +420,8 @@ export const SpaceToolsDockWidget = ({
|
||||
selectedRoomId={selectedRoomId}
|
||||
selectedTimerLabel={selectedTimerLabel}
|
||||
selectedSoundPresetId={selectedPresetId}
|
||||
sceneRecommendedSoundLabel={sceneRecommendedSoundLabel}
|
||||
sceneRecommendedTimerLabel={sceneRecommendedTimerLabel}
|
||||
timerPresets={timerPresets}
|
||||
soundPresets={SOUND_PRESETS}
|
||||
onSelectRoom={(roomId) => {
|
||||
@@ -427,6 +435,7 @@ export const SpaceToolsDockWidget = ({
|
||||
}}
|
||||
onApplyPack={handleApplyPack}
|
||||
onLockedClick={handleLockedClick}
|
||||
onResetToRecommended={onResetToSceneRecommended}
|
||||
/>
|
||||
) : null}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user