diff --git a/src/components/Dashboard.tsx b/src/components/Dashboard.tsx
index f860823..1177733 100644
--- a/src/components/Dashboard.tsx
+++ b/src/components/Dashboard.tsx
@@ -1,6 +1,6 @@
'use client';
-import { useState, useEffect } from 'react';
+import { useState, useEffect, useCallback } from 'react';
import { User } from '@/lib/session';
import {
getUsageData,
@@ -34,14 +34,17 @@ export function Dashboard({ user }: DashboardProps) {
const [showSetup, setShowSetup] = useState(false);
const [showUsagePrompt, setShowUsagePrompt] = useState(false);
const [isLoading, setIsLoading] = useState(true);
+ const [refreshKey, setRefreshKey] = useState(0);
- const loadData = () => {
- const prefs = getPreferences();
- const usage = getUsageData();
+ const loadData = useCallback(() => {
+ // Always pass user.id explicitly to ensure correct data is loaded
+ const prefs = getPreferences(user.id);
+ const usage = getUsageData(user.id);
setPreferences(prefs);
setUsageData(usage);
+ setRefreshKey(prev => prev + 1);
return prefs;
- };
+ }, [user.id]);
useEffect(() => {
// Set the current user ID for all storage operations
@@ -56,7 +59,7 @@ export function Dashboard({ user }: DashboardProps) {
}
setIsLoading(false);
- }, [user.id]);
+ }, [user.id, loadData]);
const handleSetupComplete = (data: { substance: 'nicotine' | 'weed'; name: string; age: number }) => {
const today = new Date().toISOString().split('T')[0];
@@ -69,35 +72,41 @@ export function Dashboard({ user }: DashboardProps) {
userName: data.name,
userAge: data.age,
};
- savePreferences(newPrefs);
+ savePreferences(newPrefs, user.id);
setPreferences(newPrefs);
setShowSetup(false);
setShowUsagePrompt(true);
+ setRefreshKey(prev => prev + 1);
};
const handleUsageSubmit = (count: number) => {
- if (!preferences || count === 0) {
+ if (!preferences) {
setShowUsagePrompt(false);
- loadData();
return;
}
- const today = new Date().toISOString().split('T')[0];
- saveUsageEntry({
- date: today,
- count,
- substance: preferences.substance,
- });
+ if (count > 0) {
+ const today = new Date().toISOString().split('T')[0];
+ saveUsageEntry({
+ date: today,
+ count,
+ substance: preferences.substance,
+ }, user.id);
+ }
+
setShowUsagePrompt(false);
- loadData();
+ // Reload data and force calendar refresh
+ const usage = getUsageData(user.id);
+ setUsageData(usage);
+ setRefreshKey(prev => prev + 1);
};
const handleGeneratePlan = () => {
if (!preferences) return;
- const plan = generateQuitPlan(preferences.substance);
+ const plan = generateQuitPlan(preferences.substance, user.id);
const updatedPrefs = { ...preferences, quitPlan: plan };
- savePreferences(updatedPrefs);
+ savePreferences(updatedPrefs, user.id);
setPreferences(updatedPrefs);
};
@@ -138,9 +147,11 @@ export function Dashboard({ user }: DashboardProps) {
@@ -148,9 +159,9 @@ export function Dashboard({ user }: DashboardProps) {
@@ -166,6 +177,7 @@ export function Dashboard({ user }: DashboardProps) {
onClose={() => setShowUsagePrompt(false)}
onSubmit={handleUsageSubmit}
substance={preferences.substance}
+ userId={user.id}
/>
)}
diff --git a/src/components/UsageCalendar.tsx b/src/components/UsageCalendar.tsx
index c6f862f..dfc4427 100644
--- a/src/components/UsageCalendar.tsx
+++ b/src/components/UsageCalendar.tsx
@@ -19,9 +19,10 @@ interface UsageCalendarProps {
usageData: UsageEntry[];
substance: 'nicotine' | 'weed';
onDataUpdate: () => void;
+ userId: string;
}
-export function UsageCalendar({ usageData, substance, onDataUpdate }: UsageCalendarProps) {
+export function UsageCalendar({ usageData, substance, onDataUpdate, userId }: UsageCalendarProps) {
const [selectedDate, setSelectedDate] = useState(undefined);
const [editCount, setEditCount] = useState('');
const [isEditing, setIsEditing] = useState(false);
@@ -36,7 +37,7 @@ export function UsageCalendar({ usageData, substance, onDataUpdate }: UsageCalen
setSelectedDate(date);
const dateStr = date.toISOString().split('T')[0];
- const currentCount = getUsageForDate(dateStr, substance);
+ const currentCount = getUsageForDate(dateStr, substance, userId);
setEditCount(currentCount.toString());
setIsEditing(true);
};
@@ -45,7 +46,7 @@ export function UsageCalendar({ usageData, substance, onDataUpdate }: UsageCalen
if (selectedDate) {
const dateStr = selectedDate.toISOString().split('T')[0];
const newCount = parseInt(editCount, 10) || 0;
- setUsageForDate(dateStr, newCount, substance);
+ setUsageForDate(dateStr, newCount, substance, userId);
onDataUpdate();
}
setIsEditing(false);
@@ -62,7 +63,7 @@ export function UsageCalendar({ usageData, substance, onDataUpdate }: UsageCalen
const handleClearDay = () => {
if (selectedDate) {
const dateStr = selectedDate.toISOString().split('T')[0];
- clearDayData(dateStr, substance);
+ clearDayData(dateStr, substance, userId);
onDataUpdate();
}
setIsEditing(false);
diff --git a/src/components/UsagePromptDialog.tsx b/src/components/UsagePromptDialog.tsx
index 4e913b8..7208dc2 100644
--- a/src/components/UsagePromptDialog.tsx
+++ b/src/components/UsagePromptDialog.tsx
@@ -18,6 +18,7 @@ interface UsagePromptDialogProps {
onClose: () => void;
onSubmit: (count: number) => void;
substance: 'nicotine' | 'weed';
+ userId: string;
}
export function UsagePromptDialog({
@@ -25,6 +26,7 @@ export function UsagePromptDialog({
onClose,
onSubmit,
substance,
+ userId,
}: UsagePromptDialogProps) {
const [wantsToLog, setWantsToLog] = useState(null);
const [count, setCount] = useState('1');
@@ -33,7 +35,7 @@ export function UsagePromptDialog({
const substanceLabelPlural = substance === 'nicotine' ? 'puffs/cigarettes' : 'hits';
const today = new Date().toISOString().split('T')[0];
- const todayCount = typeof window !== 'undefined' ? getUsageForDate(today, substance) : 0;
+ const todayCount = typeof window !== 'undefined' ? getUsageForDate(today, substance, userId) : 0;
const handleSubmit = () => {
if (wantsToLog === true && count) {
diff --git a/src/components/UserHeader.tsx b/src/components/UserHeader.tsx
index b898a71..326ffb3 100644
--- a/src/components/UserHeader.tsx
+++ b/src/components/UserHeader.tsx
@@ -14,9 +14,9 @@ export function UserHeader({ user }: UserHeaderProps) {
const [userName, setUserName] = useState(null);
useEffect(() => {
- const prefs = getPreferences();
+ const prefs = getPreferences(user.id);
setUserName(prefs.userName);
- }, []);
+ }, [user.id]);
const initials = [user.firstName?.[0], user.lastName?.[0]]
.filter(Boolean)