add badge for new messages

This commit is contained in:
1ilit 2023-09-19 15:51:02 +03:00
parent 4181ef4c74
commit 8a17540d31

View File

@ -1,11 +1,11 @@
import React, { useContext, useState } from "react"; import React, { useContext, useEffect, useState } from "react";
import chatIcon from "../assets/chat.png"; import chatIcon from "../assets/chat.png";
import botIcon from "../assets/bot.png"; import botIcon from "../assets/bot.png";
import teamIcon from "../assets/group.png"; import teamIcon from "../assets/group.png";
import timeLine from "../assets/process.png"; import timeLine from "../assets/process.png";
import todo from "../assets/calendar.png"; import todo from "../assets/calendar.png";
import { Tooltip, SideSheet, List } from "@douyinfe/semi-ui"; import { Tooltip, SideSheet, List, Badge } from "@douyinfe/semi-ui";
import { UndoRedoContext } from "../pages/editor"; import { MessageContext, UndoRedoContext } from "../pages/editor";
import Todo from "./todo"; import Todo from "./todo";
import Chat from "./chat"; import Chat from "./chat";
@ -19,7 +19,10 @@ export default function Sidebar() {
BOT: 5, BOT: 5,
}; };
const { undoStack } = useContext(UndoRedoContext); const { undoStack } = useContext(UndoRedoContext);
const { messages } = useContext(MessageContext);
const [sidesheet, setSidesheet] = useState(SidesheetType.NONE); const [sidesheet, setSidesheet] = useState(SidesheetType.NONE);
const [seen, setSeen] = useState(0)
const [count, setCount] = useState(messages.length-seen);
const getTitle = (type) => { const getTitle = (type) => {
switch (type) { switch (type) {
@ -62,16 +65,31 @@ export default function Sidebar() {
} }
}; };
useEffect(() => {
if (sidesheet !== SidesheetType.CHAT) {
setCount((c) => messages.length - seen);
}
}, [messages.length, seen, sidesheet, SidesheetType.CHAT]);
return ( return (
<> <>
<div className="px-3 py-3 shadow-lg h-full select-none"> <div className="ps-3 pe-4 py-4 shadow-lg h-full select-none">
<Tooltip content="Chat"> <Tooltip content="Chat">
<Badge
count={count === 0 ? null : count}
overflowCount={99}
type="danger"
>
<button <button
className="block" className="block"
onClick={() => setSidesheet(SidesheetType.CHAT)} onClick={() => {
setSidesheet(SidesheetType.CHAT);
setSeen(messages.length);
}}
> >
<img src={chatIcon} className="w-8 mb-5" alt="chat icon" /> <img src={chatIcon} className="w-8 mb-5" alt="chat icon" />
</button> </button>
</Badge>
</Tooltip> </Tooltip>
<Tooltip content="Team"> <Tooltip content="Team">
<button className="block"> <button className="block">
@ -104,6 +122,7 @@ export default function Sidebar() {
visible={sidesheet !== SidesheetType.NONE} visible={sidesheet !== SidesheetType.NONE}
onCancel={() => { onCancel={() => {
setSidesheet(SidesheetType.NONE); setSidesheet(SidesheetType.NONE);
setSeen(messages.length);
}} }}
width={340} width={340}
title={getTitle(sidesheet)} title={getTitle(sidesheet)}