import "./messagePage.css"; import * as React from "bloatless-react"; import MessagePageViewModel from "../../ViewModel/Pages/messagePageViewModel"; import CoreViewModel from "../../ViewModel/Global/coreViewModel"; import ChatMessageViewModel from "../../ViewModel/Chat/chatMessageViewModel"; import { ChatMessage } from "../Components/chatMessage"; import { MessageFilterModal } from "../Modals/messageFilterModal"; export function MessagePage( coreViewModel: CoreViewModel, messagePageViewModel: MessagePageViewModel, ) { messagePageViewModel.loadData(); const ChatMessageViewModelToView: React.StateItemConverter< ChatMessageViewModel > = (chatMessageViewModel: ChatMessageViewModel) => { return ChatMessage(coreViewModel, chatMessageViewModel); }; const messageContainer = (
); function scrollDown(hard: boolean = false) { if (hard) { messageContainer.setAttribute("scroll-hard", ""); } messageContainer.scrollTop = messageContainer.scrollHeight; messageContainer.removeAttribute("scroll-hard"); } function scrollDownIfApplicable() { const scrollFromBottom = messageContainer.scrollHeight - (messageContainer.scrollTop + messageContainer.offsetHeight); if (scrollFromBottom > 400) return; scrollDown(); } messagePageViewModel.filteredMessageViewModels.subscribeSilent( scrollDownIfApplicable, ); setTimeout(() => scrollDown(true), 100); return (
{ coreViewModel.translations.chatPage.message .messagesHeadline }
{messageContainer}
{MessageFilterModal( coreViewModel, messagePageViewModel, ChatMessageViewModelToView, )}
); }