import "./messagePage.css"; import { ViewController } from "../viewController"; import { MessageFilterModal } from "../Modals/messageFilterModal"; import { ReplyPreview } from "../Components/replyPreview"; import { ChatMessage } from "../Components/chatMessage"; import * as React from "../../react"; import MessagePageViewModel from "../../ViewModel/Pages/messagePageViewModel"; import CoreViewModel from "../../ViewModel/Global/coreViewModel"; import ChatMessageViewModel from "../../ViewModel/Chat/chatMessageViewModel"; import {ReplyViewHeader} from "../Components/replyViewHeader"; 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, ); messagePageViewModel.replyViewSelectedMessage.subscribeSilent(selectedMessage => { if (selectedMessage != undefined) return; setTimeout(scrollDown, 100); }) setTimeout(() => scrollDown(true), 100); messagePageViewModel.focusSetter.subscribeSilent(() => { ViewController.setFocusWithDelay(); }); const isInReplyView = React.createProxyState([messagePageViewModel.replyViewSelectedMessage], ()=>messagePageViewModel.replyViewSelectedMessage.value != undefined); return (