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:
@@ -18,6 +18,8 @@ interface ControlCenterSheetWidgetProps {
|
||||
selectedRoomId: string;
|
||||
selectedTimerLabel: string;
|
||||
selectedSoundPresetId: string;
|
||||
sceneRecommendedSoundLabel: string;
|
||||
sceneRecommendedTimerLabel: string;
|
||||
timerPresets: TimerPreset[];
|
||||
soundPresets: SoundPreset[];
|
||||
onSelectRoom: (roomId: string) => void;
|
||||
@@ -25,6 +27,7 @@ interface ControlCenterSheetWidgetProps {
|
||||
onSelectSound: (soundPresetId: string) => void;
|
||||
onApplyPack: (packId: QuickPackId) => void;
|
||||
onLockedClick: (source: string) => void;
|
||||
onResetToRecommended: () => void;
|
||||
}
|
||||
|
||||
type QuickPackId = 'balanced' | 'deep-work' | 'gentle';
|
||||
@@ -80,6 +83,8 @@ export const ControlCenterSheetWidget = ({
|
||||
selectedRoomId,
|
||||
selectedTimerLabel,
|
||||
selectedSoundPresetId,
|
||||
sceneRecommendedSoundLabel: _sceneRecommendedSoundLabel,
|
||||
sceneRecommendedTimerLabel: _sceneRecommendedTimerLabel,
|
||||
timerPresets,
|
||||
soundPresets,
|
||||
onSelectRoom,
|
||||
@@ -87,6 +92,7 @@ export const ControlCenterSheetWidget = ({
|
||||
onSelectSound,
|
||||
onApplyPack,
|
||||
onLockedClick,
|
||||
onResetToRecommended: _onResetToRecommended,
|
||||
}: ControlCenterSheetWidgetProps) => {
|
||||
const reducedMotion = useReducedMotion();
|
||||
const isPro = plan === 'pro';
|
||||
|
||||
Reference in New Issue
Block a user