mirror of
https://github.com/meshtastic/web.git
synced 2026-04-21 22:40:01 -04:00
64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
import React from 'react';
|
|
|
|
import { useTranslation } from 'react-i18next';
|
|
|
|
import type { Types } from '@meshtastic/meshtasticjs';
|
|
|
|
import { ChatMessage } from './components/ChatMessage';
|
|
import { MessageBox } from './components/MessageBox';
|
|
import { Sidebar } from './components/Sidebar';
|
|
import { connection } from './connection';
|
|
|
|
export const Main = (): JSX.Element => {
|
|
const [messages, setMessages] = React.useState<
|
|
{ message: Types.TextPacket; ack: boolean }[]
|
|
>([]);
|
|
const { t } = useTranslation();
|
|
|
|
React.useEffect(() => {
|
|
connection.onTextPacket.subscribe((message) => {
|
|
setMessages((messages) => [
|
|
...messages,
|
|
{ message: message, ack: false },
|
|
]);
|
|
});
|
|
}, []);
|
|
|
|
React.useEffect(() => {
|
|
connection.onRoutingPacket.subscribe((routingPacket) => {
|
|
setMessages(
|
|
messages.map((message) => {
|
|
return routingPacket.packet.payloadVariant.oneofKind === 'decoded' &&
|
|
message.message.packet.id ===
|
|
routingPacket.packet.payloadVariant.decoded.requestId
|
|
? {
|
|
ack: true,
|
|
message: message.message,
|
|
}
|
|
: message;
|
|
}),
|
|
);
|
|
});
|
|
}, [messages]);
|
|
|
|
return (
|
|
<div className="flex flex-col md:flex-row flex-grow m-3 space-y-2 md:space-y-0 space-x-0 md:space-x-2">
|
|
<div className="flex flex-col flex-grow container mx-auto">
|
|
<div className="flex flex-col flex-grow py-6 space-y-2">
|
|
{messages.length ? (
|
|
messages.map((message, Main) => (
|
|
<ChatMessage key={Main} message={message} />
|
|
))
|
|
) : (
|
|
<div className="m-auto text-2xl text-gray-500">
|
|
{t('placeholder.no_messages')}
|
|
</div>
|
|
)}
|
|
</div>
|
|
<MessageBox />
|
|
</div>
|
|
<Sidebar />
|
|
</div>
|
|
);
|
|
};
|