Files
CT/src/View/ChatPages/messagePage.tsx
T

74 lines
2.2 KiB
TypeScript
Raw Normal View History

2024-07-20 21:10:06 +02:00
import "./messagePage.css";
2024-07-20 17:19:10 +02:00
import * as React from "bloatless-react";
2024-07-21 01:12:35 +02:00
import { ChatMessageViewModelToView } from "../Components/chatMessage";
2024-07-22 21:07:44 +02:00
import MessagePageViewModel from "../../ViewModel/Pages/messagePageViewModel";
import { translations } from "../translations";
2024-07-20 17:19:10 +02:00
2024-07-22 21:07:44 +02:00
export function MessagePage(messagePageViewModel: MessagePageViewModel) {
messagePageViewModel.loadMessages();
2024-07-21 01:12:35 +02:00
const messageContainer = (
<div
id="message-container"
children:append={[
2024-07-22 21:07:44 +02:00
messagePageViewModel.chatMessageViewModels,
2024-07-21 01:12:35 +02:00
ChatMessageViewModelToView,
]}
></div>
);
function scrollDown() {
messageContainer.scrollTop = messageContainer.scrollHeight;
}
function scrollDownIfApplicable() {
const scrollFromBottom =
messageContainer.scrollHeight -
(messageContainer.scrollTop + messageContainer.offsetHeight);
if (scrollFromBottom > 400) return;
scrollDown();
}
2024-07-22 21:07:44 +02:00
messagePageViewModel.chatMessageViewModels.subscribeSilent(
scrollDownIfApplicable
);
2024-07-21 01:53:25 +02:00
setTimeout(() => scrollDown(), 100);
2024-07-21 01:12:35 +02:00
2024-07-20 17:19:10 +02:00
return (
2024-07-20 21:10:06 +02:00
<div id="message-page">
<div class="pane">
<div class="toolbar">
2024-07-22 21:07:44 +02:00
<span>{translations.chatPage.message.messagesHeadline}</span>
</div>
<div class="content">
{messageContainer}
<div id="composer">
<div class="content-width-constraint">
<div class="input-width-constraint">
<input
2024-07-22 21:07:44 +02:00
bind:value={messagePageViewModel.composingMessage}
on:enter={messagePageViewModel.sendMessage}
placeholder={
translations.chatPage.message.composerInputPlaceholder
}
></input>
<button
class="primary"
aria-label={
translations.chatPage.message.sendMessageButtonAudioLabel
}
2024-07-22 21:07:44 +02:00
on:click={messagePageViewModel.sendMessage}
toggle:disabled={messagePageViewModel.cannotSendMessage}
>
<span class="icon">send</span>
</button>
</div>
2024-07-21 01:53:25 +02:00
</div>
</div>
</div>
2024-07-20 21:10:06 +02:00
</div>
2024-07-20 17:19:10 +02:00
</div>
);
}