refactor(space): scene 도메인과 current session 계약을 정리
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
'use client';
|
||||
|
||||
import { useEffect, useMemo, useRef, useState, type FormEvent } from 'react';
|
||||
import type { RoomTheme } from '@/entities/room';
|
||||
import type { SceneTheme } from '@/entities/scene';
|
||||
import type { GoalChip, SoundPreset, TimerPreset } from '@/entities/session';
|
||||
import { SpaceSelectCarousel } from '@/features/space-select';
|
||||
import { SceneSelectCarousel } from '@/features/scene-select';
|
||||
import { SessionGoalField } from '@/features/session-goal';
|
||||
import { Button } from '@/shared/ui';
|
||||
import { cn } from '@/shared/lib/cn';
|
||||
@@ -12,8 +12,8 @@ type RitualPopover = 'space' | 'timer' | 'sound';
|
||||
|
||||
interface SpaceSetupDrawerWidgetProps {
|
||||
open: boolean;
|
||||
rooms: RoomTheme[];
|
||||
selectedRoomId: string;
|
||||
scenes: SceneTheme[];
|
||||
selectedSceneId: string;
|
||||
selectedTimerLabel: string;
|
||||
selectedSoundPresetId: string;
|
||||
goalInput: string;
|
||||
@@ -22,7 +22,7 @@ interface SpaceSetupDrawerWidgetProps {
|
||||
soundPresets: SoundPreset[];
|
||||
timerPresets: TimerPreset[];
|
||||
canStart: boolean;
|
||||
onRoomSelect: (roomId: string) => void;
|
||||
onSceneSelect: (sceneId: string) => void;
|
||||
onTimerSelect: (timerLabel: string) => void;
|
||||
onSoundSelect: (soundPresetId: string) => void;
|
||||
onGoalChange: (value: string) => void;
|
||||
@@ -63,8 +63,8 @@ const SummaryChip = ({ label, value, open, onClick }: SummaryChipProps) => {
|
||||
|
||||
export const SpaceSetupDrawerWidget = ({
|
||||
open,
|
||||
rooms,
|
||||
selectedRoomId,
|
||||
scenes,
|
||||
selectedSceneId,
|
||||
selectedTimerLabel,
|
||||
selectedSoundPresetId,
|
||||
goalInput,
|
||||
@@ -73,7 +73,7 @@ export const SpaceSetupDrawerWidget = ({
|
||||
soundPresets,
|
||||
timerPresets,
|
||||
canStart,
|
||||
onRoomSelect,
|
||||
onSceneSelect,
|
||||
onTimerSelect,
|
||||
onSoundSelect,
|
||||
onGoalChange,
|
||||
@@ -84,9 +84,9 @@ export const SpaceSetupDrawerWidget = ({
|
||||
const [openPopover, setOpenPopover] = useState<RitualPopover | null>(null);
|
||||
const panelRef = useRef<HTMLDivElement | null>(null);
|
||||
|
||||
const selectedRoom = useMemo(() => {
|
||||
return rooms.find((room) => room.id === selectedRoomId) ?? rooms[0];
|
||||
}, [rooms, selectedRoomId]);
|
||||
const selectedScene = useMemo(() => {
|
||||
return scenes.find((scene) => scene.id === selectedSceneId) ?? scenes[0];
|
||||
}, [scenes, selectedSceneId]);
|
||||
|
||||
const selectedSoundLabel = useMemo(() => {
|
||||
return (
|
||||
@@ -183,8 +183,8 @@ export const SpaceSetupDrawerWidget = ({
|
||||
<div className="relative mb-3">
|
||||
<div className="flex flex-wrap gap-1.5">
|
||||
<SummaryChip
|
||||
label="공간"
|
||||
value={selectedRoom?.name ?? '기본 공간'}
|
||||
label="배경"
|
||||
value={selectedScene?.name ?? '기본 배경'}
|
||||
open={openPopover === 'space'}
|
||||
onClick={() => togglePopover('space')}
|
||||
/>
|
||||
@@ -204,11 +204,11 @@ export const SpaceSetupDrawerWidget = ({
|
||||
|
||||
{openPopover === 'space' ? (
|
||||
<div className="absolute left-0 right-0 top-[calc(100%+0.5rem)] z-20 rounded-2xl border border-white/14 bg-slate-950/80 p-2.5 shadow-[0_18px_44px_rgba(2,6,23,0.4)] backdrop-blur-xl animate-[popover-rise_220ms_ease-out] motion-reduce:animate-none">
|
||||
<SpaceSelectCarousel
|
||||
rooms={rooms.slice(0, 4)}
|
||||
selectedRoomId={selectedRoomId}
|
||||
onSelect={(roomId) => {
|
||||
onRoomSelect(roomId);
|
||||
<SceneSelectCarousel
|
||||
scenes={scenes.slice(0, 4)}
|
||||
selectedSceneId={selectedSceneId}
|
||||
onSelect={(sceneId) => {
|
||||
onSceneSelect(sceneId);
|
||||
setOpenPopover(null);
|
||||
}}
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user