diff --git a/src/entities/plan/model/mockPlan.ts b/src/entities/plan/model/mockPlan.ts index 57a8e67..e5c1f43 100644 --- a/src/entities/plan/model/mockPlan.ts +++ b/src/entities/plan/model/mockPlan.ts @@ -1,23 +1,23 @@ -import type { PlanLockedPack } from './types'; +import type { ProFeatureCard } from './types'; -export const PRO_LOCKED_ROOM_IDS = ['outer-space', 'snow-mountain']; +export const PRO_LOCKED_ROOM_IDS: string[] = []; export const PRO_LOCKED_TIMER_LABELS: string[] = []; export const PRO_LOCKED_SOUND_IDS: string[] = []; -export const PRO_PRESET_PACKS: PlanLockedPack[] = [ +export const PRO_FEATURE_CARDS: ProFeatureCard[] = [ { - id: 'deep-work', - name: 'Deep Work', - description: '긴 몰입 세션을 위한 무드 묶음', + id: 'scene-packs', + name: 'Scene Packs', + description: '프리미엄 공간 묶음과 장면 변주', }, { - id: 'gentle', - name: 'Gentle', - description: '저자극 휴식 중심 프리셋', + id: 'sound-packs', + name: 'Sound Packs', + description: '확장 사운드 프리셋 묶음', }, { - id: 'cafe', - name: 'Cafe', - description: '카페톤 배경과 사운드 조합', + id: 'profiles', + name: 'Profiles', + description: '내 기본 세팅 저장/불러오기', }, ]; diff --git a/src/entities/plan/model/types.ts b/src/entities/plan/model/types.ts index 3540455..20fb172 100644 --- a/src/entities/plan/model/types.ts +++ b/src/entities/plan/model/types.ts @@ -5,3 +5,11 @@ export interface PlanLockedPack { name: string; description: string; } + +export type ProFeatureId = 'scene-packs' | 'sound-packs' | 'profiles'; + +export interface ProFeatureCard { + id: ProFeatureId; + name: string; + description: string; +} diff --git a/src/widgets/control-center-sheet/ui/ControlCenterSheetWidget.tsx b/src/widgets/control-center-sheet/ui/ControlCenterSheetWidget.tsx index 6da819f..e80fdaa 100644 --- a/src/widgets/control-center-sheet/ui/ControlCenterSheetWidget.tsx +++ b/src/widgets/control-center-sheet/ui/ControlCenterSheetWidget.tsx @@ -3,9 +3,7 @@ import { useMemo } from 'react'; import type { PlanTier } from '@/entities/plan'; import { - PRO_LOCKED_ROOM_IDS, - PRO_LOCKED_SOUND_IDS, - PRO_LOCKED_TIMER_LABELS, + PRO_FEATURE_CARDS, } from '@/entities/plan'; import { getRoomCardBackgroundStyle, type RoomTheme } from '@/entities/room'; import { SOUND_PRESETS, type TimerPreset } from '@/entities/session'; @@ -27,18 +25,11 @@ interface ControlCenterSheetWidgetProps { onSelectRoom: (roomId: string) => void; onSelectTimer: (timerLabel: string) => void; onSelectSound: (presetId: string) => void; + onSelectProFeature: (featureId: string) => void; onLockedClick: (source: string) => void; onResetToRecommended: () => void; } -const LockBadge = () => { - return ( - - LOCK PRO - - ); -}; - const SectionTitle = ({ title, description }: { title: string; description: string }) => { return (
@@ -62,6 +53,7 @@ export const ControlCenterSheetWidget = ({ onSelectRoom, onSelectTimer, onSelectSound, + onSelectProFeature, onLockedClick, onResetToRecommended, }: ControlCenterSheetWidgetProps) => { @@ -91,18 +83,12 @@ export const ControlCenterSheetWidget = ({ > {rooms.slice(0, 6).map((room) => { const selected = room.id === selectedRoomId; - const locked = !isPro && PRO_LOCKED_ROOM_IDS.includes(room.id); return ( ); @@ -130,18 +115,12 @@ export const ControlCenterSheetWidget = ({
{timerPresets.slice(0, 3).map((preset) => { const selected = preset.label === selectedTimerLabel; - const locked = !isPro && PRO_LOCKED_TIMER_LABELS.includes(preset.label); return ( ); })} @@ -168,18 +146,12 @@ export const ControlCenterSheetWidget = ({
{SOUND_PRESETS.slice(0, 6).map((preset) => { const selected = preset.id === selectedSoundPresetId; - const locked = !isPro && PRO_LOCKED_SOUND_IDS.includes(preset.id); return ( ); })} @@ -212,6 +183,37 @@ export const ControlCenterSheetWidget = ({
+
+ +
+ {PRO_FEATURE_CARDS.map((feature) => { + const locked = !isPro; + + return ( + + ); + })} +
+
+
diff --git a/src/widgets/space-tools-dock/ui/SpaceToolsDockWidget.tsx b/src/widgets/space-tools-dock/ui/SpaceToolsDockWidget.tsx index 09b6b5d..60b49a8 100644 --- a/src/widgets/space-tools-dock/ui/SpaceToolsDockWidget.tsx +++ b/src/widgets/space-tools-dock/ui/SpaceToolsDockWidget.tsx @@ -311,6 +311,17 @@ export const SpaceToolsDockWidget = ({ openUtilityPanel('paywall'); }; + const handleSelectProFeature = (featureId: string) => { + const label = + featureId === 'scene-packs' + ? 'Scene Packs' + : featureId === 'sound-packs' + ? 'Sound Packs' + : 'Profiles'; + + onStatusMessage({ message: `${label} 준비 중(더미)` }); + }; + const handleStartPro = () => { setPlan('pro'); onStatusMessage({ message: '결제(더미)' }); @@ -502,6 +513,7 @@ export const SpaceToolsDockWidget = ({ onTimerSelect(label); }} onSelectSound={onQuickSoundSelect} + onSelectProFeature={handleSelectProFeature} onLockedClick={handleLockedClick} onResetToRecommended={onResetToSceneRecommended} />