import * as React from "bloatless-react"; import "./messagePage.css"; import { ViewController } from "../viewController"; import { MessageFilterModal } from "../Modals/messageFilterModal"; import { ReplyPreview } from "../Components/replyPreview"; import { ChatMessage } from "../Components/chatMessage"; import MessagePageViewModel from "../../ViewModel/Pages/messagePageViewModel"; import CoreViewModel from "../../ViewModel/Global/coreViewModel"; import ChatMessageViewModel from "../../ViewModel/Chat/chatMessageViewModel"; export function MessagePage( coreViewModel: CoreViewModel, messagePageViewModel: MessagePageViewModel, ) { messagePageViewModel.loadData(); const ChatMessageViewModelToView: React.StateItemConverter< ChatMessageViewModel > = (chatMessageViewModel: ChatMessageViewModel) => { return ChatMessage(coreViewModel, chatMessageViewModel); }; const messageContainer = (
); const persistenceId = messagePageViewModel.chatViewModel.chatModel.id; const replyPreview = ViewController.inlineReplies.setState( persistenceId, () => React.createProxyState( [messagePageViewModel.replyingMessage], () => { if (messagePageViewModel.replyingMessage.value == undefined) return
; return ReplyPreview( coreViewModel, messagePageViewModel.replyingMessage.value, ); }, ), ); 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); messagePageViewModel.focusSetter.subscribeSilent(() => { ViewController.setFocusWithDelay(); }); return (
{ coreViewModel.translations.chatPage.message .messagesHeadline }
{messageContainer}
{MessageFilterModal( coreViewModel, messagePageViewModel, ChatMessageViewModelToView, )}
); }