Files
CT/src/Views/chatListSection.tsx
T

71 lines
1.6 KiB
TypeScript
Raw Normal View History

2024-07-09 15:15:17 +02:00
import * as React from "bloatless-react";
2024-07-09 17:23:29 +02:00
import { Chat, removeChat } from "../Model/chatModel";
import {
cannotCreateChat,
chats,
createChat,
newChatName,
selectChat,
selectedChat,
} from "../Model/model";
2024-07-09 15:15:17 +02:00
import { translation } from "../translations";
const chatConverter: React.ListItemConverter<Chat> = (chat) => {
2024-07-09 17:23:29 +02:00
function select() {
selectChat(chat);
2024-07-09 15:15:17 +02:00
}
2024-07-09 17:23:29 +02:00
const isSelected = React.createProxyState(
[selectedChat],
() => selectedChat.value == chat
);
2024-07-09 15:15:17 +02:00
return (
2024-07-09 17:23:29 +02:00
<button class="tile" on:click={select} toggle:selected={isSelected}>
<div>
<b class="ellipsis" subscribe:innerText={chat.primaryChannel}></b>
2024-07-09 15:15:17 +02:00
</div>
2024-07-09 17:23:29 +02:00
<span class="icon">arrow_forward</span>
</button>
2024-07-09 15:15:17 +02:00
);
};
export function ChatListSection() {
return (
<div class="flex-column">
<h2>{translation.chats}</h2>
<label class="tile">
<span class="icon">forum</span>
<div>
<span>{translation.newChatPrimaryChannel}</span>
<input
bind:value={newChatName}
placeholder={translation.newChatNamePlaceholder}
on:enter={createChat}
></input>
</div>
</label>
<div class="flex-row justify-end">
<button
class="primary width-50"
toggle:disabled={cannotCreateChat}
on:click={createChat}
>
{translation.addChat}
<span class="icon">add</span>
</button>
</div>
<hr></hr>
2024-07-09 17:23:29 +02:00
<div
class="flex-column gap"
children:append={[chats, chatConverter]}
></div>
2024-07-09 15:15:17 +02:00
</div>
);
}