Skip to content

Commit 3d1bb5f

Browse files
committed
Updated Dark mode handling
1 parent 95635a0 commit 3d1bb5f

File tree

3 files changed

+45
-21
lines changed

3 files changed

+45
-21
lines changed

components/Sidebar.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ const Sidebar = () => {
2020

2121
// State for sidebar collapse
2222
const [isCollapsed, setIsCollapsed] = useState(false);
23-
// Use theme from context instead of local state
24-
const { darkMode, toggleTheme } = useTheme();
23+
// Use theme from context
24+
const { darkMode, toggleTheme, themeColors } = useTheme();
2525

2626
const redirect = (id) => {
2727
router.push(`/chat/${id}`);
@@ -32,7 +32,7 @@ const Sidebar = () => {
3232
chats?.filter(chat => chat.users.includes(user.email))
3333
.map (
3434
chat =>
35-
<Flex key = {Math.random()} align = "center" p = {3} _hover = {{bg: darkMode ? "gray.700" : "gray.200", cursor: "pointer"}}
35+
<Flex key = {Math.random()} align = "center" p = {3} _hover = {{bg: themeColors.sidebarHover, cursor: "pointer"}}
3636
onClick = {() => redirect(chat.id)}>
3737
<Avatar src = "" marginEnd = {3} size={isCollapsed ? "sm" : "md"}/>
3838
{!isCollapsed && <Text>{getOtherEmail(chat.users, user)}</Text>}
@@ -60,11 +60,11 @@ const Sidebar = () => {
6060
<Flex
6161
h = "100vh"
6262
borderEnd = "1px solid"
63-
borderColor = {darkMode ? "gray.700" : "gray.300"}
63+
borderColor = {themeColors.sidebarBorder}
6464
direction = "column"
6565
className = "sidebar"
66-
bg={darkMode ? "gray.900" : "white"}
67-
color={darkMode ? "white" : "black"}
66+
bg={themeColors.sidebarBg}
67+
color={themeColors.text}
6868
>
6969
<Flex
7070
w = "100%" h = "81px"
@@ -94,8 +94,12 @@ const Sidebar = () => {
9494
</Flex>
9595

9696
{!isCollapsed && (
97-
<Button bg = {darkMode ? "blue.500" : "blue.100"} color = {darkMode ? "white" : "blue.900"} m = {5} p = {4} _hover = {{bg: darkMode ? "blue.600" : "blue.200", cursor: "pointer"}}
98-
onClick = {() => onOpen()}>
97+
<Button
98+
bg = {themeColors.newChatButtonBg}
99+
color = {themeColors.newChatButtonColor}
100+
m = {5} p = {4}
101+
_hover = {{bg: themeColors.newChatButtonHover, cursor: "pointer"}}
102+
onClick = {() => onOpen()}>
99103
New Chat
100104
</Button>
101105
)}

components/ThemeProvider.js

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { createContext, useState, useContext } from "react";
2-
import { Box, Switch } from "@chakra-ui/react";
2+
import { Box } from "@chakra-ui/react";
33

44
const ThemeContext = createContext();
55

@@ -14,9 +14,28 @@ export const ThemeProvider = ({ children }) => {
1414
setDarkMode(!darkMode);
1515
};
1616

17+
// Define theme colors based on dark mode
18+
const themeColors = {
19+
background: darkMode ? "gray.900" : "white",
20+
text: darkMode ? "white" : "black",
21+
sidebarBg: darkMode ? "gray.900" : "white",
22+
sidebarBorder: darkMode ? "gray.700" : "gray.300",
23+
sidebarHover: darkMode ? "gray.700" : "gray.200",
24+
topbarBorder: darkMode ? "gray.700" : "gray.300",
25+
messageSenderBg: darkMode ? "gray.700" : "gray.100",
26+
messageReceiverBg: darkMode ? "blue.500" : "blue.100",
27+
newChatButtonBg: darkMode ? "blue.500" : "blue.100",
28+
newChatButtonColor: darkMode ? "white" : "blue.900",
29+
newChatButtonHover: darkMode ? "blue.600" : "blue.200"
30+
};
31+
1732
return (
18-
<ThemeContext.Provider value={{ darkMode, toggleTheme }}>
19-
<Box bg={darkMode ? "gray.900" : "white"} color={darkMode ? "white" : "black"} minH="100vh">
33+
<ThemeContext.Provider value={{ darkMode, toggleTheme, themeColors }}>
34+
<Box
35+
bg={themeColors.background}
36+
color={themeColors.text}
37+
minH="100vh"
38+
>
2039
{children}
2140
</Box>
2241
</ThemeContext.Provider>

pages/chat/[id].js

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@ import { useTheme } from "../../components/ThemeProvider";
1515
const Topbar = ({username}) => {
1616
const toast = useToast();
1717
const router = useRouter();
18+
const { themeColors } = useTheme();
1819
return (
19-
<Flex align = "center" w = "100%" h = "81px" p = {3} borderBottom = "1px solid" borderColor = "gray.300" shadow = "base">
20+
<Flex align = "center" w = "100%" h = "81px" p = {3} borderBottom = "1px solid" borderColor = {themeColors.topbarBorder} shadow = "base" bg={themeColors.sidebarBg}>
2021
<Avatar src = "" marginEnd = {3}/>
2122
<Heading size = "md" flex = {1}>{username}</Heading>
22-
<Button bg = "white" color = "red.500"
23+
<Button bg = {themeColors.newChatButtonBg} color = {themeColors.newChatButtonColor}
2324
marginEnd = "2" p = {4} shadow = "xl"
24-
_hover = {{bg: "red.100", cursor: "pointer"}}
25+
_hover = {{bg: themeColors.newChatButtonHover, cursor: "pointer"}}
2526
onClick = { async () => {
2627
console.log('Before redirect');
2728
router.push('/');
@@ -38,6 +39,7 @@ const Topbar = ({username}) => {
3839

3940
const Bottombar = ({id, user}) => {
4041
const [input, setInput] = useState("");
42+
const { themeColors } = useTheme();
4143
const sendMessage = async(e) => {
4244
e.preventDefault();
4345
if(input.length > 0) {
@@ -51,9 +53,9 @@ const Bottombar = ({id, user}) => {
5153
}
5254

5355
return (
54-
<FormControl display = "flex" borderTop = "1px solid" borderTopColor = "gray.200" p = {3} onSubmit = {sendMessage} as = "form" shadow = "base">
56+
<FormControl display = "flex" borderTop = "1px solid" borderTopColor = {themeColors.topbarBorder} p = {3} onSubmit = {sendMessage} as = "form" shadow = "base" bg={themeColors.sidebarBg}>
5557
<Input placeholder = "Type a message..." marginEnd = {3} autoComplete = "off" shadow = "xl"
56-
onChange={e => setInput(e.target.value)} value = {input} bgColor = "white" />
58+
onChange={e => setInput(e.target.value)} value = {input} bgColor = {themeColors.background} color={themeColors.text} />
5759
<IconButton icon = {<ArrowRightIcon/>} shadow = "xl" size = "md" color = "white" type = "submit" bgColor = "#1E293B" _hover = {{bgColor: "none", color: "none", cursor: "pointer"}}/>
5860
</FormControl>
5961
)
@@ -69,12 +71,14 @@ export default function Chat () {
6971
const q = query(collection(db, `chats/${id}/messages`), orderBy('timestamp'));
7072
const [messages] = useCollectionData(q);
7173
const [chat] = useDocumentData(doc(db, "chats", id));
74+
75+
const { darkMode, themeColors } = useTheme();
7276

7377
const getMessages = () => messages?.map(msg => {
7478
const sender = msg.sender === user.email;
7579

7680
return (
77-
<Flex key = {Math.random()} shadow = {sender ? "lg" : "xl"} alignSelf = {sender ? "flex-start" : "flex-end"} bg = {sender ? "white" : "#1E293B"} borderRadius = "lg" w = "fit-content" minWidth = "50px" p = {3} m = {1} color = {sender ? "black" : "white"}>
81+
<Flex key = {Math.random()} shadow = {sender ? "lg" : "xl"} alignSelf = {sender ? "flex-start" : "flex-end"} bg = {sender ? themeColors.messageSenderBg : themeColors.messageReceiverBg} borderRadius = "lg" w = "fit-content" minWidth = "50px" p = {3} m = {1} color = {sender ? themeColors.text : "white"}>
7882
<Text>{msg.text}</Text>
7983
</Flex>
8084
)
@@ -89,16 +93,13 @@ export default function Chat () {
8993
}, 100)
9094
}, [messages])
9195

92-
// Get theme from context
93-
const { darkMode } = useTheme();
94-
9596
return (
9697
<Flex h = "100vh">
9798
<Head>
9899
<title>Comms</title>
99100
</Head>
100101
<Sidebar/>
101-
<Flex flex = {1} direction = "column" onClick={() => getMessages()} bgColor = {darkMode ? "gray.900" : "white"}>
102+
<Flex flex = {1} direction = "column" onClick={() => getMessages()} bgColor = {themeColors.background}>
102103
<Topbar username = {getOtherEmail(chat?.users, user)}/>
103104
<Flex flex = {1} direction = "column" pt = {4} px = {4} overflowY = "auto" sx = {{scrollbarWidth: "none"}}>
104105
{getMessages()}

0 commit comments

Comments
 (0)