2024-07-05 00:07:39 +02:00
|
|
|
import * as React from "bloatless-react";
|
|
|
|
|
|
|
|
|
|
import {
|
2026-03-31 22:02:13 +00:00
|
|
|
Message,
|
|
|
|
|
isMessageEmpty,
|
|
|
|
|
messages,
|
|
|
|
|
newMessageBody,
|
|
|
|
|
sendMessage,
|
2024-07-05 00:07:39 +02:00
|
|
|
} from "./model";
|
|
|
|
|
|
2024-07-09 02:36:43 +02:00
|
|
|
import { translations } from "./translations";
|
2024-07-05 00:07:39 +02:00
|
|
|
|
|
|
|
|
const convertMessageToElement: React.ListItemConverter<Message> = (message) => {
|
2026-03-31 22:02:13 +00:00
|
|
|
return (
|
|
|
|
|
<div class="tile" style="flex: 0">
|
|
|
|
|
<div>
|
|
|
|
|
<span class="secondary">{message.channel}</span>
|
|
|
|
|
<b>{message.body}</b>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
2024-07-05 00:07:39 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export function MessageScreen() {
|
2026-03-31 22:02:13 +00:00
|
|
|
return (
|
|
|
|
|
<article id="message-screen">
|
|
|
|
|
<header>{translations.messagesReceived}</header>
|
|
|
|
|
<div>
|
|
|
|
|
<div
|
|
|
|
|
class="flex-column gap"
|
|
|
|
|
subscribe:children={[messages, convertMessageToElement]}
|
|
|
|
|
></div>
|
|
|
|
|
</div>
|
|
|
|
|
<footer>
|
|
|
|
|
<input
|
|
|
|
|
style="max-width: unset"
|
|
|
|
|
placeholder={translations.message_placeholder_generic}
|
|
|
|
|
bind:value={newMessageBody}
|
|
|
|
|
on:enter={sendMessage}
|
|
|
|
|
></input>
|
|
|
|
|
<button
|
|
|
|
|
class="primary"
|
|
|
|
|
on:click={sendMessage}
|
|
|
|
|
toggle:disabled={isMessageEmpty}
|
|
|
|
|
>
|
|
|
|
|
<span class="icon">send</span>
|
|
|
|
|
</button>
|
|
|
|
|
</footer>
|
|
|
|
|
</article>
|
|
|
|
|
);
|
2024-07-05 00:07:39 +02:00
|
|
|
}
|