"use client"; import { Message } from "@/types/types"; import { Button } from "./ui/button"; import { Input } from "./ui/input"; import * as emoji from "emoji-picker-react"; import EmojiPicker from "emoji-picker-react"; import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger, } from "./ui/dropdown-menu"; import { SmilePlusIcon } from "lucide-react"; import { useEffect, useRef, useState } from "react"; import { format, isToday, isYesterday } from "date-fns"; import ReactMarkdown from "react-markdown"; import remarkGfm from "remark-gfm"; import { NumberMap, StringMap } from "@/types/typeUtils"; import { User } from "@/hooks/get-user"; import axios from "axios"; import { Avatar, AvatarFallback, AvatarImage } from "./ui/avatar"; import ProfilePicture from "./ProfilePicture"; function MessageContainer({ message, userList, setUserList, }: { message: Message; userList: NumberMap; setUserList: React.Dispatch>>; }) { useEffect(() => { axios .get("/api/profile/", { params: { id: message.from } }) .then((res) => setUserList((prev) => ({ ...prev, [message.from]: res.data as User })) ) .catch(console.error); }, [message.from, setUserList]); return (
{/*
*/}
{userList[message.from] ? userList[message.from].username : message.from}

{isToday(message.timestamp * 1000) ? format(message.timestamp * 1000, "p") : isYesterday(message.timestamp * 1000) ? "Yesterday, " + format(message.timestamp * 1000, "p") : format(message.timestamp * 1000, "PP, p")}

{message.contents.split("\n\n").map((line, index) => (
{index > 0 &&
} (

), h2: ({ node, ...props }) => (

), h3: ({ node, ...props }) => (

), h4: ({ node, ...props }) => (

), h5: ({ node, ...props }) => (

), ul: ({ node, ...props }) => (
    ), ol: ({ node, ...props }) => (
      ), a: ({ node, ...props }) => ( ), }} > {line}
))}
); } export default function MessageBox({ messages, userList, setUserList, sendMessage, channelName, }: { messages: Message[]; userList: NumberMap; setUserList: React.Dispatch>>; sendMessage: (m: string) => void; channelName?: string; }) { const [text, setText] = useState(""); return (
{channelName && (
{channelName}
)}
{messages.map((msg) => ( ))}
setText(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter") { sendMessage(text); setText(""); } }} /> setText(text + e.emoji)} theme={emoji.Theme.DARK} />
); }