import { useEffect, useRef, useState } from "react"; import ChatMessage from "./ChatMessage"; import { Box, Button, ListItemButton } from "@mui/material"; // import { Note } from "models"; import { pond } from "protobuf-ts/pond"; interface Props { messages: pond.Chat[]; attachmentMap?: Map; totalMessages: number; removeNoteMethod: (index: number) => void; loadMore: () => void; } /** * will load chat messages for the passed in object and display as a list of chat messages * @returns List of chat messages */ export default function ChatOutput(props: Props) { const [disableScrollTo, setDisableScrollTo] = useState(false); const [scrollOffset, setScrollOffset] = useState(0); const containerRef = useRef(null); const ScrollToBottom = () => { const elementRef = useRef(null); useEffect(() => { elementRef?.current?.scrollIntoView({ block: "end" }); }); let elem =
; return elem; }; const onScroll = () => { if (!containerRef.current) return; setDisableScrollTo(true) const container = containerRef.current; setScrollOffset(container.scrollHeight - container.scrollTop) } useEffect(() => { if (!containerRef.current) return; const container = containerRef.current; container.scrollTop = container.scrollHeight - scrollOffset }, [props.messages]) const seeMore = () => { if (!containerRef.current) return; setDisableScrollTo(true) const container = containerRef.current; setScrollOffset(container.scrollHeight - container.scrollTop) props.loadMore(); }; const displayMessages = () => { let display = props.messages.map((curMessage, index) => (
)); return display; }; return ( {props.messages.length < props.totalMessages && ( )} {displayMessages()} {!disableScrollTo && } ); }