Skip to content

Commit

Permalink
Merge pull request #126 from nicolelim02/feat/communication
Browse files Browse the repository at this point in the history
Add chat notification
guanquann authored Nov 13, 2024

Verified

This commit was signed with the committer’s verified signature.
metan-ucw Cyril Hrubis
2 parents 614dde5 + 44e5aa3 commit e5461dd
Showing 2 changed files with 26 additions and 5 deletions.
4 changes: 3 additions & 1 deletion frontend/src/components/Chat/index.tsx
Original file line number Diff line number Diff line change
@@ -21,6 +21,7 @@ type Message = {

type ChatProps = {
isActive: boolean;
setHasNewMessage: React.Dispatch<React.SetStateAction<boolean>>;
};

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

const Chat: React.FC<ChatProps> = ({ isActive }) => {
const Chat: React.FC<ChatProps> = ({ isActive, setHasNewMessage }) => {
const [messages, setMessages] = useState<Message[]>([]);
const [inputValue, setInputValue] = useState("");
const match = useMatch();
@@ -68,6 +69,7 @@ const Chat: React.FC<ChatProps> = ({ isActive }) => {
// initialize listener for incoming messages
const listener = (message: Message) => {
setMessages((prevMessages) => [...prevMessages, message]);
setHasNewMessage(true);
};
const errorListener = () => {
if (!errorHandledRef.current) {
27 changes: 23 additions & 4 deletions frontend/src/pages/CollabSandbox/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import AppMargin from "../../components/AppMargin";
import { Box, Button, Grid2, Tab, Tabs } from "@mui/material";
import { Badge, Box, Button, Grid2, Tab, Tabs } from "@mui/material";
import classes from "./index.module.css";
import { CompilerResult, useCollab } from "../../contexts/CollabContext";
import { useMatch } from "../../contexts/MatchContext";
@@ -41,6 +41,7 @@ const CollabSandbox: React.FC = () => {
const [state, dispatch] = useReducer(reducer, initialState);
const { selectedQuestion } = state;
const [selectedTab, setSelectedTab] = useState<"tests" | "chat">("tests");
const [hasNewMessage, setHasNewMessage] = useState<boolean>(false);
const [selectedTestcase, setSelectedTestcase] = useState(0);
const [editorState, setEditorState] = useState<CollabSessionData | null>(
null
@@ -169,7 +170,10 @@ const CollabSandbox: React.FC = () => {
>
<Tabs
value={selectedTab}
onChange={(_, value) => setSelectedTab(value)}
onChange={(_, value) => {
setSelectedTab(value);
setHasNewMessage(false);
}}
sx={(theme) => ({
position: "sticky",
top: 0,
@@ -179,7 +183,19 @@ const CollabSandbox: React.FC = () => {
})}
>
<Tab label="Test Cases" value="tests" />
<Tab label="Chat" value="chat" />

<Tab
label={
<Badge
color="primary"
variant="dot"
invisible={!hasNewMessage || selectedTab === "chat"}
>
Chat
</Badge>
}
value="chat"
/>
</Tabs>

<TabPanel value={selectedTab} selected="tests">
@@ -211,7 +227,10 @@ const CollabSandbox: React.FC = () => {
/>
</TabPanel>
<TabPanel value={selectedTab} selected="chat">
<Chat isActive={selectedTab === "chat"} />
<Chat
setHasNewMessage={setHasNewMessage}
isActive={selectedTab === "chat"}
/>
</TabPanel>
</Box>
</Grid2>

0 comments on commit e5461dd

Please sign in to comment.