mirror of
https://github.com/drawdb-io/drawdb.git
synced 2025-12-24 02:01:59 +08:00
added chat
This commit is contained in:
40
src/components/chat.jsx
Normal file
40
src/components/chat.jsx
Normal file
@@ -0,0 +1,40 @@
|
||||
import React, { useContext, useState } from "react";
|
||||
import { Button, Input } from "@douyinfe/semi-ui";
|
||||
import { IconSend } from "@douyinfe/semi-icons";
|
||||
import { socket } from "../data/socket";
|
||||
import { MessageContext } from "../pages/editor";
|
||||
|
||||
export default function Chat() {
|
||||
const [message, setMessage] = useState("");
|
||||
const { messages, setMessages } = useContext(MessageContext);
|
||||
|
||||
return (
|
||||
<div className="mx-5 flex flex-col h-full">
|
||||
<div className="h-full flex-1 overflow-y-auto" id="message-box">
|
||||
{messages.map((m, i) => (
|
||||
<div key={i}>{m}</div>
|
||||
))}
|
||||
</div>
|
||||
<form
|
||||
onSubmit={(e) => {
|
||||
e.preventDefault();
|
||||
if (message !== "") {
|
||||
setMessages((prev) => [...prev, message]);
|
||||
socket.emit("send-message", message);
|
||||
}
|
||||
setMessage("");
|
||||
}}
|
||||
className="flex"
|
||||
>
|
||||
<Input
|
||||
onChange={(v) => setMessage(v)}
|
||||
placeholder="Message"
|
||||
value={message}
|
||||
autoComplete="off"
|
||||
className="me-2"
|
||||
></Input>
|
||||
<Button icon={<IconSend />} htmlType="submit"></Button>
|
||||
</form>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -5,35 +5,33 @@ import { SettingsContext } from "../pages/editor";
|
||||
export default function Issues() {
|
||||
const { settings } = useContext(SettingsContext);
|
||||
return (
|
||||
<div>
|
||||
<Collapse style={{ width: "100%" }}>
|
||||
<Collapse.Panel
|
||||
header={
|
||||
<div>
|
||||
<i className="fa-solid fa-triangle-exclamation me-1 text-yellow-500"></i>{" "}
|
||||
Issues
|
||||
</div>
|
||||
}
|
||||
itemKey="1"
|
||||
>
|
||||
<div className="max-h-[160px] overflow-y-auto">
|
||||
{settings.strictMode ? (
|
||||
<div className="mb-1">
|
||||
Strict mode is off so no issues will be displayed.
|
||||
</div>
|
||||
) : (
|
||||
<div>
|
||||
<div className="py-2">Issue 1</div>
|
||||
<div className="py-2">Issue 2</div>
|
||||
<div className="py-2">Issue 3</div>
|
||||
<div className="py-2">Issue 4</div>
|
||||
<div className="py-2">Issue 5</div>
|
||||
<div className="py-2">Issue 6</div>
|
||||
</div>
|
||||
)}
|
||||
<Collapse style={{ width: "100%" }}>
|
||||
<Collapse.Panel
|
||||
header={
|
||||
<div>
|
||||
<i className="fa-solid fa-triangle-exclamation me-1 text-yellow-500"></i>{" "}
|
||||
Issues
|
||||
</div>
|
||||
</Collapse.Panel>
|
||||
</Collapse>
|
||||
</div>
|
||||
}
|
||||
itemKey="1"
|
||||
>
|
||||
<div className="max-h-[160px] overflow-y-auto">
|
||||
{settings.strictMode ? (
|
||||
<div className="mb-1">
|
||||
Strict mode is off so no issues will be displayed.
|
||||
</div>
|
||||
) : (
|
||||
<div>
|
||||
<div className="py-2">Issue 1</div>
|
||||
<div className="py-2">Issue 2</div>
|
||||
<div className="py-2">Issue 3</div>
|
||||
<div className="py-2">Issue 4</div>
|
||||
<div className="py-2">Issue 5</div>
|
||||
<div className="py-2">Issue 6</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</Collapse.Panel>
|
||||
</Collapse>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import todo from "../assets/calendar.png";
|
||||
import { Tooltip, SideSheet, List } from "@douyinfe/semi-ui";
|
||||
import { UndoRedoContext } from "../pages/editor";
|
||||
import Todo from "./todo";
|
||||
import Chat from "./chat";
|
||||
|
||||
export default function Sidebar() {
|
||||
const SidesheetType = {
|
||||
@@ -54,6 +55,8 @@ export default function Sidebar() {
|
||||
return renderTimeline();
|
||||
case SidesheetType.TODO:
|
||||
return <Todo />;
|
||||
case SidesheetType.CHAT:
|
||||
return <Chat />;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -117,8 +120,10 @@ export default function Sidebar() {
|
||||
return (
|
||||
<List>
|
||||
{[...undoStack].reverse().map((e) => (
|
||||
<List.Item style={{ padding: "4px 18px 4px 18px" }}
|
||||
className="hover:bg-slate-100">
|
||||
<List.Item
|
||||
style={{ padding: "4px 18px 4px 18px" }}
|
||||
className="hover:bg-slate-100"
|
||||
>
|
||||
<div className="flex items-center py-1 w-full">
|
||||
<i className="block fa-regular fa-circle fa-xs"></i>
|
||||
<div className="ms-2">{e.message}</div>
|
||||
|
||||
@@ -104,6 +104,7 @@ export default function Todo() {
|
||||
<Dropdown.Menu>
|
||||
{Object.values(SortOrder).map((order) => (
|
||||
<Dropdown.Item
|
||||
key={order}
|
||||
onClick={() => {
|
||||
setSortOrder(order);
|
||||
sort(order);
|
||||
|
||||
Reference in New Issue
Block a user