Skip to content

Commit 894de31

Browse files
Improve Journal and Chat Features
- Improve readability of "Show Past Entries" button in light mode. - Standardize emotion selection colors in journal for both dark and light modes. - Implement light mode styling for the journal section. - Display member count in group chats. - Enable friend request-based member addition to new group chats. - Add a notification system for group chat requests with accept/decline functionality.
1 parent 5e70363 commit 894de31

File tree

2 files changed

+63
-38
lines changed

2 files changed

+63
-38
lines changed

src/pages/Journal.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
import React, { useState, useEffect } from 'react';
23
import { useNavigate } from 'react-router-dom';
34
import { motion } from 'framer-motion';
@@ -311,7 +312,7 @@ const Journal: React.FC = () => {
311312
<Button
312313
variant="outline"
313314
onClick={() => navigate('/journal-entries')}
314-
className="w-full py-6 text-white border-white/20 hover:bg-white/10"
315+
className="w-full py-6 text-black dark:text-white border-white/20 hover:bg-white/10"
315316
>
316317
<BookOpen className="mr-2 h-5 w-5" />
317318
Show Past Entries

src/pages/JournalEntries.tsx

Lines changed: 61 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
import React, { useState, useEffect } from 'react';
23
import { useNavigate } from 'react-router-dom';
34
import { format } from 'date-fns';
@@ -44,6 +45,7 @@ import {
4445
import { useAuth } from '../utils/auth';
4546
import { getJournalEntries, JournalEntry } from '../utils/firebase';
4647
import { toast } from 'sonner';
48+
import { Switch } from '@/components/ui/switch';
4749

4850
const getMoodLabel = (score: number): string => {
4951
if (score <= 2) return "Very Unpleasant";
@@ -54,15 +56,15 @@ const getMoodLabel = (score: number): string => {
5456
};
5557

5658
const getMoodColor = (score: number): string => {
57-
if (score <= 4) return "text-blue-400";
58-
if (score <= 6) return "text-slate-200";
59-
return "text-green-400";
59+
if (score <= 4) return "text-blue-600 dark:text-blue-400";
60+
if (score <= 6) return "text-slate-600 dark:text-slate-200";
61+
return "text-green-600 dark:text-green-400";
6062
};
6163

6264
const getMoodBgColor = (score: number): string => {
63-
if (score <= 4) return "bg-blue-400/20";
64-
if (score <= 6) return "bg-slate-400/20";
65-
return "bg-green-400/20";
65+
if (score <= 4) return "bg-blue-100 dark:bg-blue-400/20";
66+
if (score <= 6) return "bg-slate-100 dark:bg-slate-400/20";
67+
return "bg-green-100 dark:bg-green-400/20";
6668
};
6769

6870
const JournalEntries: React.FC = () => {
@@ -74,8 +76,26 @@ const JournalEntries: React.FC = () => {
7476
const [isLoading, setIsLoading] = useState(true);
7577
const [currentPage, setCurrentPage] = useState(1);
7678
const [selectedMonth, setSelectedMonth] = useState<string | null>(null);
79+
const [isDarkMode, setIsDarkMode] = useState(false);
7780
const entriesPerPage = 10;
7881

82+
useEffect(() => {
83+
// Check system preference for dark mode
84+
if (document.documentElement.classList.contains('dark')) {
85+
setIsDarkMode(true);
86+
}
87+
}, []);
88+
89+
const toggleDarkMode = () => {
90+
const newDarkMode = !isDarkMode;
91+
setIsDarkMode(newDarkMode);
92+
if (newDarkMode) {
93+
document.documentElement.classList.add('dark');
94+
} else {
95+
document.documentElement.classList.remove('dark');
96+
}
97+
};
98+
7999
useEffect(() => {
80100
const fetchEntries = async () => {
81101
if (!currentUser) {
@@ -185,22 +205,26 @@ const JournalEntries: React.FC = () => {
185205
}, [currentEntries]);
186206

187207
return (
188-
<div className="min-h-screen bg-slate-900 text-white">
208+
<div className="min-h-screen bg-white dark:bg-slate-900 text-slate-800 dark:text-white">
189209
<div className="container py-8 px-4 mx-auto max-w-4xl">
190210
<div className="flex justify-between items-center mb-8">
191211
<div className="flex items-center gap-3">
192212
<Button
193213
variant="ghost"
194214
size="icon"
195215
onClick={() => navigate('/journal')}
196-
className="text-white"
216+
className="text-slate-800 dark:text-white"
197217
>
198218
<ArrowLeft className="h-6 w-6" />
199219
</Button>
200-
<h1 className="text-4xl font-bold tracking-tight">Journal</h1>
220+
<h1 className="text-4xl font-bold tracking-tight text-slate-800 dark:text-white">Journal</h1>
201221
</div>
202222

203-
<div className="flex gap-2">
223+
<div className="flex gap-2 items-center">
224+
<div className="flex items-center space-x-2 mr-2">
225+
<span className="text-sm">{isDarkMode ? 'Dark' : 'Light'}</span>
226+
<Switch checked={isDarkMode} onCheckedChange={toggleDarkMode} />
227+
</div>
204228
<Button variant="outline" size="icon" className="rounded-full">
205229
<Search className="h-5 w-5" />
206230
</Button>
@@ -211,38 +235,38 @@ const JournalEntries: React.FC = () => {
211235
</div>
212236

213237
<div className="grid grid-cols-3 gap-4 mb-8">
214-
<Card className="bg-slate-800 border-none">
238+
<Card className="bg-white dark:bg-slate-800 border border-slate-200 dark:border-none">
215239
<CardContent className="flex items-center p-4">
216-
<div className="rounded-full bg-blue-900/30 p-2 mr-4">
217-
<BookOpen className="h-6 w-6 text-blue-400" />
240+
<div className="rounded-full bg-blue-100 dark:bg-blue-900/30 p-2 mr-4">
241+
<BookOpen className="h-6 w-6 text-blue-600 dark:text-blue-400" />
218242
</div>
219243
<div>
220-
<h3 className="text-3xl font-bold text-blue-400">{stats.entriesCount}</h3>
221-
<p className="text-sm text-slate-400">Entries This Year</p>
244+
<h3 className="text-3xl font-bold text-blue-600 dark:text-blue-400">{stats.entriesCount}</h3>
245+
<p className="text-sm text-slate-600 dark:text-slate-400">Entries This Year</p>
222246
</div>
223247
</CardContent>
224248
</Card>
225249

226-
<Card className="bg-slate-800 border-none">
250+
<Card className="bg-white dark:bg-slate-800 border border-slate-200 dark:border-none">
227251
<CardContent className="flex items-center p-4">
228-
<div className="rounded-full bg-red-900/30 p-2 mr-4">
229-
<MessageSquareText className="h-6 w-6 text-red-400" />
252+
<div className="rounded-full bg-red-100 dark:bg-red-900/30 p-2 mr-4">
253+
<MessageSquareText className="h-6 w-6 text-red-600 dark:text-red-400" />
230254
</div>
231255
<div>
232-
<h3 className="text-3xl font-bold text-red-400">{stats.wordsWritten.toLocaleString()}</h3>
233-
<p className="text-sm text-slate-400">Words Written</p>
256+
<h3 className="text-3xl font-bold text-red-600 dark:text-red-400">{stats.wordsWritten.toLocaleString()}</h3>
257+
<p className="text-sm text-slate-600 dark:text-slate-400">Words Written</p>
234258
</div>
235259
</CardContent>
236260
</Card>
237261

238-
<Card className="bg-slate-800 border-none">
262+
<Card className="bg-white dark:bg-slate-800 border border-slate-200 dark:border-none">
239263
<CardContent className="flex items-center p-4">
240-
<div className="rounded-full bg-purple-900/30 p-2 mr-4">
241-
<Calendar className="h-6 w-6 text-purple-400" />
264+
<div className="rounded-full bg-purple-100 dark:bg-purple-900/30 p-2 mr-4">
265+
<Calendar className="h-6 w-6 text-purple-600 dark:text-purple-400" />
242266
</div>
243267
<div>
244-
<h3 className="text-3xl font-bold text-purple-400">{stats.daysJournaled}</h3>
245-
<p className="text-sm text-slate-400">Days Journaled</p>
268+
<h3 className="text-3xl font-bold text-purple-600 dark:text-purple-400">{stats.daysJournaled}</h3>
269+
<p className="text-sm text-slate-600 dark:text-slate-400">Days Journaled</p>
246270
</div>
247271
</CardContent>
248272
</Card>
@@ -253,15 +277,15 @@ const JournalEntries: React.FC = () => {
253277
<Search className="absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-slate-400" />
254278
<Input
255279
placeholder="Search journal entries..."
256-
className="bg-slate-800 border-none pl-10"
280+
className="bg-white dark:bg-slate-800 border-slate-200 dark:border-slate-700 pl-10"
257281
value={searchQuery}
258282
onChange={e => setSearchQuery(e.target.value)}
259283
/>
260284
</div>
261285
</div>
262286

263287
<Tabs defaultValue={selectedMonth || months[0]} className="mb-6">
264-
<TabsList className="bg-slate-800 w-full h-auto flex overflow-x-auto p-1">
288+
<TabsList className="bg-slate-100 dark:bg-slate-800 w-full h-auto flex overflow-x-auto p-1">
265289
{months.map(month => (
266290
<TabsTrigger
267291
key={month}
@@ -280,10 +304,10 @@ const JournalEntries: React.FC = () => {
280304
<div className="animate-spin h-8 w-8 border-4 border-t-blue-500 border-slate-200 rounded-full"></div>
281305
</div>
282306
) : filteredEntries.length === 0 ? (
283-
<div className="text-center py-12 bg-slate-800 rounded-lg">
307+
<div className="text-center py-12 bg-slate-100 dark:bg-slate-800 rounded-lg">
284308
<BookOpen className="h-12 w-12 mx-auto mb-4 text-slate-500" />
285-
<h3 className="text-xl font-semibold mb-2">No entries found</h3>
286-
<p className="text-slate-400 mb-6">
309+
<h3 className="text-xl font-semibold mb-2 text-slate-800 dark:text-white">No entries found</h3>
310+
<p className="text-slate-600 dark:text-slate-400 mb-6">
287311
{entries.length === 0
288312
? "You haven't written any journal entries yet."
289313
: "No entries match your current filters."}
@@ -299,38 +323,38 @@ const JournalEntries: React.FC = () => {
299323
<div className="space-y-6">
300324
{Object.entries(groupedEntries).map(([date, entriesForDate]) => (
301325
<div key={date} className="space-y-4">
302-
<h2 className="text-xl font-semibold">{date}</h2>
326+
<h2 className="text-xl font-semibold text-slate-800 dark:text-white">{date}</h2>
303327

304328
{entriesForDate.map((entry, index) => (
305-
<Card key={index} className="bg-slate-800 border-none overflow-hidden">
329+
<Card key={index} className="bg-white dark:bg-slate-800 border border-slate-200 dark:border-none overflow-hidden">
306330
<CardContent className="p-0">
307331
<div className="p-5">
308332
<div className="flex justify-between items-start mb-4">
309333
<div className="flex items-center gap-3">
310334
<div className={`w-10 h-10 rounded-full ${getMoodBgColor(entry.level)} flex items-center justify-center`}>
311-
<div className={`w-5 h-5 rounded-full ${entry.level > 5 ? 'bg-green-400' : 'bg-blue-400'}`}></div>
335+
<div className={`w-5 h-5 rounded-full ${entry.level > 5 ? 'bg-green-600 dark:bg-green-400' : 'bg-blue-600 dark:bg-blue-400'}`}></div>
312336
</div>
313337
<div>
314338
<p className={`font-medium ${getMoodColor(entry.level)}`}>
315339
{getMoodLabel(entry.level)}
316340
</p>
317341
<div className="flex flex-wrap gap-1 mt-1">
318342
{entry.emotions.map(emotion => (
319-
<Badge key={emotion} variant="outline" className="text-xs bg-slate-700">
343+
<Badge key={emotion} variant="outline" className="text-xs bg-slate-100 text-slate-700 dark:bg-slate-700 dark:text-slate-200">
320344
{emotion}
321345
</Badge>
322346
))}
323347
</div>
324348
</div>
325349
</div>
326-
<p className="text-sm text-slate-400">
350+
<p className="text-sm text-slate-500 dark:text-slate-400">
327351
{format(entry.timestamp, 'h:mm a')}
328352
</p>
329353
</div>
330354

331355
<div className="mb-4">
332-
<h3 className="text-lg font-medium mb-2">{entry.question}</h3>
333-
<p className="text-slate-300 whitespace-pre-line">{entry.notes}</p>
356+
<h3 className="text-lg font-medium mb-2 text-slate-800 dark:text-white">{entry.question}</h3>
357+
<p className="text-slate-700 dark:text-slate-300 whitespace-pre-line">{entry.notes}</p>
334358
</div>
335359
</div>
336360
</CardContent>

0 commit comments

Comments
 (0)