drawDB/src/components/chat.jsx

65 lines
1.9 KiB
React
Raw Normal View History

2023-09-19 20:50:57 +08:00
import React, { useContext, useState } from "react";
2023-09-19 20:51:00 +08:00
import { Button, Input, Tag, Avatar } from "@douyinfe/semi-ui";
2023-09-19 20:50:57 +08:00
import { IconSend } from "@douyinfe/semi-icons";
import { socket } from "../data/socket";
import { MessageContext } from "../pages/editor";
export default function Chat() {
const [message, setMessage] = useState("");
2023-09-19 20:51:00 +08:00
const { messages } = useContext(MessageContext);
2023-09-19 20:50:57 +08:00
return (
<div className="mx-5 flex flex-col h-full">
2023-09-19 20:51:00 +08:00
<div className="h-full flex-1 overflow-y-auto flex flex-col-reverse py-2">
{messages.map((m, i) =>
m.type === "note" ? (
<div key={i} className="text-center my-1">
<Tag size="large" color={m.action === "join" ? "blue" : "amber"}>
{m.message}
</Tag>
</div>
) : messages[i + 1].id !== m.id ? (
<div key={i} className="flex pt-1">
<Avatar
size="small"
alt={m.name}
color={m.color}
className="border border-grey-900"
>
{m.name.split(" ").map((c) => c[0])}
</Avatar>
<div className="ms-2">
<div className="font-semibold">{m.name}</div>
<div>{m.message}</div>
</div>
</div>
) : (
<div key={i} className="ms-10">
{m.message}
</div>
)
)}
2023-09-19 20:50:57 +08:00
</div>
<form
onSubmit={(e) => {
e.preventDefault();
2023-09-19 20:51:00 +08:00
if (message.trim() !== "") {
2023-09-19 20:50:57 +08:00
socket.emit("send-message", message);
}
setMessage("");
}}
2023-09-19 20:51:00 +08:00
className="flex mt-2"
2023-09-19 20:50:57 +08:00
>
<Input
onChange={(v) => setMessage(v)}
placeholder="Message"
value={message}
autoComplete="off"
className="me-2"
></Input>
<Button icon={<IconSend />} htmlType="submit"></Button>
</form>
</div>
);
}