Skip to content

Commit 44e5aa3

Browse files
committed
Add chat notificiation
1 parent 614dde5 commit 44e5aa3

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

frontend/src/components/Chat/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ type Message = {
2121

2222
type ChatProps = {
2323
isActive: boolean;
24+
setHasNewMessage: React.Dispatch<React.SetStateAction<boolean>>;
2425
};
2526

2627
const StyledTypography = styled(Typography)(({ theme }) => ({
@@ -31,7 +32,7 @@ const StyledTypography = styled(Typography)(({ theme }) => ({
3132
wordBreak: "break-word",
3233
}));
3334

34-
const Chat: React.FC<ChatProps> = ({ isActive }) => {
35+
const Chat: React.FC<ChatProps> = ({ isActive, setHasNewMessage }) => {
3536
const [messages, setMessages] = useState<Message[]>([]);
3637
const [inputValue, setInputValue] = useState("");
3738
const match = useMatch();
@@ -68,6 +69,7 @@ const Chat: React.FC<ChatProps> = ({ isActive }) => {
6869
// initialize listener for incoming messages
6970
const listener = (message: Message) => {
7071
setMessages((prevMessages) => [...prevMessages, message]);
72+
setHasNewMessage(true);
7173
};
7274
const errorListener = () => {
7375
if (!errorHandledRef.current) {

frontend/src/pages/CollabSandbox/index.tsx

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import AppMargin from "../../components/AppMargin";
2-
import { Box, Button, Grid2, Tab, Tabs } from "@mui/material";
2+
import { Badge, Box, Button, Grid2, Tab, Tabs } from "@mui/material";
33
import classes from "./index.module.css";
44
import { CompilerResult, useCollab } from "../../contexts/CollabContext";
55
import { useMatch } from "../../contexts/MatchContext";
@@ -41,6 +41,7 @@ const CollabSandbox: React.FC = () => {
4141
const [state, dispatch] = useReducer(reducer, initialState);
4242
const { selectedQuestion } = state;
4343
const [selectedTab, setSelectedTab] = useState<"tests" | "chat">("tests");
44+
const [hasNewMessage, setHasNewMessage] = useState<boolean>(false);
4445
const [selectedTestcase, setSelectedTestcase] = useState(0);
4546
const [editorState, setEditorState] = useState<CollabSessionData | null>(
4647
null
@@ -169,7 +170,10 @@ const CollabSandbox: React.FC = () => {
169170
>
170171
<Tabs
171172
value={selectedTab}
172-
onChange={(_, value) => setSelectedTab(value)}
173+
onChange={(_, value) => {
174+
setSelectedTab(value);
175+
setHasNewMessage(false);
176+
}}
173177
sx={(theme) => ({
174178
position: "sticky",
175179
top: 0,
@@ -179,7 +183,19 @@ const CollabSandbox: React.FC = () => {
179183
})}
180184
>
181185
<Tab label="Test Cases" value="tests" />
182-
<Tab label="Chat" value="chat" />
186+
187+
<Tab
188+
label={
189+
<Badge
190+
color="primary"
191+
variant="dot"
192+
invisible={!hasNewMessage || selectedTab === "chat"}
193+
>
194+
Chat
195+
</Badge>
196+
}
197+
value="chat"
198+
/>
183199
</Tabs>
184200

185201
<TabPanel value={selectedTab} selected="tests">
@@ -211,7 +227,10 @@ const CollabSandbox: React.FC = () => {
211227
/>
212228
</TabPanel>
213229
<TabPanel value={selectedTab} selected="chat">
214-
<Chat isActive={selectedTab === "chat"} />
230+
<Chat
231+
setHasNewMessage={setHasNewMessage}
232+
isActive={selectedTab === "chat"}
233+
/>
215234
</TabPanel>
216235
</Box>
217236
</Grid2>

0 commit comments

Comments
 (0)