Skip to content

Commit 3e3d926

Browse files
Implement multi-select triggers
Implement multi-select triggers for reporting relapse and adjust firebase logic.
1 parent 575eecd commit 3e3d926

File tree

2 files changed

+25
-30
lines changed

2 files changed

+25
-30
lines changed

src/pages/Analytics.tsx

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,6 @@ import {
1010
CardTitle,
1111
} from "@/components/ui/card";
1212
import { Textarea } from "@/components/ui/textarea";
13-
import {
14-
Select,
15-
SelectContent,
16-
SelectItem,
17-
SelectTrigger,
18-
SelectValue,
19-
} from "@/components/ui/select";
2013
import { Label } from "@/components/ui/label";
2114
import ProgressChart from "@/components/ProgressChart";
2215
import { logRelapse } from "../utils/firebase";
@@ -27,6 +20,7 @@ import { toast } from "sonner";
2720
import { useEffect } from "react";
2821
import { db } from "../utils/firebase";
2922
import { collection, doc, getDoc } from "firebase/firestore";
23+
import { MultiSelect } from "@/components/ui/multi-select";
3024

3125
const mockStreakData = [
3226
{ date: "Jan 1", streak: 1 },
@@ -65,12 +59,21 @@ const mockMoodData = [
6559
const Analytics: React.FC = () => {
6660
const { currentUser, userProfile } = useAuth();
6761
const [notes, setNotes] = useState("");
68-
const [selectedTrigger, setSelectedTrigger] = useState("");
62+
const [selectedTriggers, setSelectedTriggers] = useState<string[]>([]);
6963
const [isSubmitting, setIsSubmitting] = useState(false);
7064
const [triggers, setTriggers] = useState<{ name: string; count: number }[]>(
7165
[]
7266
);
7367

68+
const triggerOptions = [
69+
{ value: "stress", label: "Stress" },
70+
{ value: "boredom", label: "Boredom" },
71+
{ value: "loneliness", label: "Loneliness" },
72+
{ value: "fatigue", label: "Fatigue" },
73+
{ value: "social-media", label: "Social Media" },
74+
{ value: "other", label: "Other" }
75+
];
76+
7477
const useTriggers = (uid: string | undefined) => {
7578
useEffect(() => {
7679
if (!uid) return;
@@ -117,15 +120,15 @@ const Analytics: React.FC = () => {
117120
setIsSubmitting(true);
118121

119122
try {
120-
const result = await logRelapse(currentUser.uid, selectedTrigger, notes);
123+
const result = await logRelapse(currentUser.uid, selectedTriggers, notes);
121124
if (result.success) {
122125
toast.success("Progress reset", {
123126
description:
124127
"Remember that every moment is a new opportunity to begin again.",
125128
});
126129

127130
setNotes("");
128-
setSelectedTrigger("");
131+
setSelectedTriggers([]);
129132
} else {
130133
toast.error("Failed to log relapse", {
131134
description: result.message,
@@ -389,23 +392,14 @@ const Analytics: React.FC = () => {
389392

390393
<CardContent className="space-y-4">
391394
<div className="space-y-2">
392-
<Label htmlFor="trigger">What triggered this relapse?</Label>
393-
<Select
394-
value={selectedTrigger}
395-
onValueChange={setSelectedTrigger}
396-
>
397-
<SelectTrigger id="trigger">
398-
<SelectValue placeholder="Select a trigger" />
399-
</SelectTrigger>
400-
<SelectContent>
401-
<SelectItem value="stress">Stress</SelectItem>
402-
<SelectItem value="boredom">Boredom</SelectItem>
403-
<SelectItem value="loneliness">Loneliness</SelectItem>
404-
<SelectItem value="fatigue">Fatigue</SelectItem>
405-
<SelectItem value="social-media">Social Media</SelectItem>
406-
<SelectItem value="other">Other</SelectItem>
407-
</SelectContent>
408-
</Select>
395+
<Label htmlFor="trigger">What triggered this relapse? (Select up to 3)</Label>
396+
<MultiSelect
397+
options={triggerOptions}
398+
selected={selectedTriggers}
399+
onChange={setSelectedTriggers}
400+
placeholder="Select triggers"
401+
className="w-full"
402+
/>
409403
</div>
410404

411405
<div className="space-y-2">
@@ -424,7 +418,7 @@ const Analytics: React.FC = () => {
424418
variant="destructive"
425419
className="w-full"
426420
onClick={handleRelapseSubmit}
427-
disabled={isSubmitting || !selectedTrigger}
421+
disabled={isSubmitting || selectedTriggers.length === 0}
428422
>
429423
{isSubmitting
430424
? "Submitting..."

src/utils/firebase.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
import { initializeApp } from 'firebase/app';
23
import { getAuth, onAuthStateChanged, signInWithEmailAndPassword, createUserWithEmailAndPassword, signOut, User, updatePassword, EmailAuthProvider, reauthenticateWithCredential } from 'firebase/auth';
34
import { getFirestore, collection, doc, setDoc, getDoc, getDocs, updateDoc, query, where, GeoPoint, Timestamp, addDoc, orderBy, arrayUnion, serverTimestamp } from 'firebase/firestore';
@@ -297,13 +298,13 @@ interface LogRelapseResult {
297298
message?: string;
298299
}
299300

300-
export const logRelapse = async (userId: string, triggers: string, notes?: string): Promise<LogRelapseResult> => {
301+
export const logRelapse = async (userId: string, triggers: string[], notes?: string): Promise<LogRelapseResult> => {
301302
try {
302303
const userDocRef = doc(db, 'users', userId); // Reference to the user's document
303304

304305
const relapseObject = {
305306
timestamp: Timestamp.now(),
306-
triggers: triggers,
307+
triggers: triggers, // Now we store the array of triggers
307308
notes: notes || ''
308309
};
309310

0 commit comments

Comments
 (0)