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>
|
|
|
|
);
|
|
|
|
}
|