Restructure desktop dashboard layout
- Separate desktop and mobile layouts completely - Desktop: Mood+Plan, Calendar, Achievements+Health, Savings+Stats - Mobile: Keep original 4-slide swipe layout unchanged
This commit is contained in:
parent
d957f7525f
commit
371c1e4618
@ -365,21 +365,85 @@ export function Dashboard({ user }: DashboardProps) {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* SECTION: Mobile Swipe Ecosystem */}
|
{/* DESKTOP LAYOUT - Hidden on mobile */}
|
||||||
|
<div className="hidden sm:block space-y-8">
|
||||||
|
{/* Row 1: Mood + Quit Plan */}
|
||||||
|
<div className="grid grid-cols-2 gap-6">
|
||||||
|
<MoodTracker />
|
||||||
|
<UnifiedQuitPlanCard
|
||||||
|
preferences={preferences}
|
||||||
|
usageData={usageData}
|
||||||
|
onGeneratePlan={handleGeneratePlan}
|
||||||
|
refreshKey={refreshKey}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Row 2: Calendar/Quote */}
|
||||||
|
<div id="calendar-section">
|
||||||
|
<UsageCalendar
|
||||||
|
key={refreshKey}
|
||||||
|
usageData={usageData}
|
||||||
|
onDataUpdate={loadData}
|
||||||
|
userId={user.id}
|
||||||
|
religion={preferences.religion}
|
||||||
|
onReligionUpdate={async (religion: 'christian' | 'secular') => {
|
||||||
|
const updatedPrefs = { ...preferences, religion };
|
||||||
|
setPreferences(updatedPrefs);
|
||||||
|
await savePreferencesAsync(updatedPrefs);
|
||||||
|
}}
|
||||||
|
preferences={preferences}
|
||||||
|
onPreferencesUpdate={async (updatedPrefs: UserPreferences) => {
|
||||||
|
await savePreferencesAsync(updatedPrefs);
|
||||||
|
setPreferences(updatedPrefs);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Row 3: Achievements + Health Recovery */}
|
||||||
|
<div className="grid grid-cols-2 gap-6">
|
||||||
|
<AchievementsCard
|
||||||
|
key={`achievements-${refreshKey}`}
|
||||||
|
achievements={achievements}
|
||||||
|
substance={preferences.substance}
|
||||||
|
/>
|
||||||
|
<HealthTimelineCard
|
||||||
|
key={`health-${refreshKey}`}
|
||||||
|
usageData={usageData}
|
||||||
|
preferences={preferences}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Row 4: Savings + Stats */}
|
||||||
|
<div className="grid grid-cols-2 gap-6">
|
||||||
|
<SavingsTrackerCard
|
||||||
|
key={`savings-${refreshKey}`}
|
||||||
|
savingsConfig={savingsConfig}
|
||||||
|
usageData={usageData}
|
||||||
|
trackingStartDate={preferences.trackingStartDate}
|
||||||
|
onSavingsConfigChange={handleSavingsConfigChange}
|
||||||
|
onModalStateChange={handleModalStateChange}
|
||||||
|
/>
|
||||||
|
<div className="grid grid-cols-2 gap-4">
|
||||||
|
<StatsCard key={`stats-nicotine-${refreshKey}`} usageData={usageData} substance="nicotine" />
|
||||||
|
<StatsCard key={`stats-weed-${refreshKey}`} usageData={usageData} substance="weed" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* MOBILE SWIPE LAYOUT - Hidden on desktop */}
|
||||||
<div
|
<div
|
||||||
ref={swipeContainerRef}
|
ref={swipeContainerRef}
|
||||||
onScroll={handleScroll}
|
onScroll={handleScroll}
|
||||||
className="swipe-container sm:space-y-12 sm:block"
|
className="swipe-container sm:hidden"
|
||||||
>
|
>
|
||||||
|
|
||||||
{/* SLIDE 1: Mindset (Mood & Personalized Plan) */}
|
{/* SLIDE 1: Mindset (Mood & Personalized Plan) */}
|
||||||
<div className="swipe-item space-y-4">
|
<div className="swipe-item space-y-4">
|
||||||
<div className="sm:hidden flex items-center justify-between mb-2 px-1">
|
<div className="flex items-center justify-between mb-2 px-1">
|
||||||
<h2 className="text-[10px] font-bold uppercase tracking-[0.2em] opacity-50">Daily Mindset</h2>
|
<h2 className="text-[10px] font-bold uppercase tracking-[0.2em] opacity-50">Daily Mindset</h2>
|
||||||
</div>
|
</div>
|
||||||
<div className="space-y-4 sm:grid sm:grid-cols-2 sm:gap-6 sm:space-y-0">
|
<div className="space-y-4">
|
||||||
<MoodTracker />
|
<MoodTracker />
|
||||||
{/* Unified Quit Plan Placard */}
|
|
||||||
<UnifiedQuitPlanCard
|
<UnifiedQuitPlanCard
|
||||||
preferences={preferences}
|
preferences={preferences}
|
||||||
usageData={usageData}
|
usageData={usageData}
|
||||||
@ -391,11 +455,11 @@ export function Dashboard({ user }: DashboardProps) {
|
|||||||
|
|
||||||
{/* SLIDE 2: Stats & Recovery (Side-by-side Stats + Health) */}
|
{/* SLIDE 2: Stats & Recovery (Side-by-side Stats + Health) */}
|
||||||
<div className="swipe-item space-y-4">
|
<div className="swipe-item space-y-4">
|
||||||
<div className="sm:hidden flex items-center justify-between mb-2 px-1">
|
<div className="flex items-center justify-between mb-2 px-1">
|
||||||
<h2 className="text-[10px] font-bold uppercase tracking-[0.2em] opacity-50">Usage & Recovery</h2>
|
<h2 className="text-[10px] font-bold uppercase tracking-[0.2em] opacity-50">Usage & Recovery</h2>
|
||||||
</div>
|
</div>
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
<div className="grid grid-cols-2 gap-3 sm:gap-6">
|
<div className="grid grid-cols-2 gap-3">
|
||||||
<StatsCard key={`stats-nicotine-${refreshKey}`} usageData={usageData} substance="nicotine" />
|
<StatsCard key={`stats-nicotine-${refreshKey}`} usageData={usageData} substance="nicotine" />
|
||||||
<StatsCard key={`stats-weed-${refreshKey}`} usageData={usageData} substance="weed" />
|
<StatsCard key={`stats-weed-${refreshKey}`} usageData={usageData} substance="weed" />
|
||||||
</div>
|
</div>
|
||||||
@ -409,10 +473,10 @@ export function Dashboard({ user }: DashboardProps) {
|
|||||||
|
|
||||||
{/* SLIDE 3: Achievements & Money (Insights) */}
|
{/* SLIDE 3: Achievements & Money (Insights) */}
|
||||||
<div className="swipe-item space-y-4">
|
<div className="swipe-item space-y-4">
|
||||||
<div className="sm:hidden flex items-center justify-between mb-2 px-1">
|
<div className="flex items-center justify-between mb-2 px-1">
|
||||||
<h2 className="text-[10px] font-bold uppercase tracking-[0.2em] opacity-50">Achievements & Savings</h2>
|
<h2 className="text-[10px] font-bold uppercase tracking-[0.2em] opacity-50">Achievements & Savings</h2>
|
||||||
</div>
|
</div>
|
||||||
<div className="space-y-4 sm:grid sm:grid-cols-2 sm:gap-6 sm:space-y-0">
|
<div className="space-y-4">
|
||||||
<AchievementsCard
|
<AchievementsCard
|
||||||
key={`achievements-${refreshKey}`}
|
key={`achievements-${refreshKey}`}
|
||||||
achievements={achievements}
|
achievements={achievements}
|
||||||
@ -430,8 +494,8 @@ export function Dashboard({ user }: DashboardProps) {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* SLIDE 4: Calendar */}
|
{/* SLIDE 4: Calendar */}
|
||||||
<div id="calendar-section" className="swipe-item">
|
<div id="calendar-section-mobile" className="swipe-item">
|
||||||
<div className="sm:hidden flex items-center justify-between mb-2 px-1">
|
<div className="flex items-center justify-between mb-2 px-1">
|
||||||
<h2 className="text-[10px] font-bold uppercase tracking-[0.2em] opacity-50">Usage Calendar</h2>
|
<h2 className="text-[10px] font-bold uppercase tracking-[0.2em] opacity-50">Usage Calendar</h2>
|
||||||
</div>
|
</div>
|
||||||
<UsageCalendar
|
<UsageCalendar
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user