You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.8 KiB
88 lines
2.8 KiB
import React from 'react';
|
|
|
|
import { FaDesktop, FaUsers } from 'react-icons/fa';
|
|
|
|
import type { Types } from '@meshtastic/meshtasticjs';
|
|
|
|
import type { languageTemplate } from '../../App';
|
|
import NavItem from '../NavItem';
|
|
|
|
interface sidebarNodesProps {
|
|
IsReady: boolean;
|
|
Nodes: Types.NodeInfoPacket[];
|
|
Translations: languageTemplate;
|
|
}
|
|
|
|
const SidebarNodes = (props: sidebarNodesProps) => {
|
|
return (
|
|
<NavItem
|
|
isDropdown={true}
|
|
open={false}
|
|
isNested={false}
|
|
titleContent={
|
|
<div className="flex">
|
|
<FaUsers className="my-auto mr-2" />
|
|
{props.Translations.nodes_title}
|
|
<div className="flex m-auto rounded-full bg-gray-300 w-6 h-6 text-sm ml-2">
|
|
<div className="m-auto">{props.Nodes.length ?? 0}</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
isLoading={!props.IsReady}
|
|
dropdownContent={
|
|
props.Nodes.length ? (
|
|
props.Nodes.map((node, index) => (
|
|
<NavItem
|
|
key={index}
|
|
isDropdown={true}
|
|
isNested={true}
|
|
open={false}
|
|
titleContent={
|
|
<div key={index} className="flex">
|
|
<FaDesktop className="my-auto mr-2" />
|
|
<div className="m-auto">{node.data.user?.longName}</div>
|
|
</div>
|
|
}
|
|
dropdownContent={
|
|
<NavItem
|
|
isDropdown={false}
|
|
isNested={true}
|
|
titleContent={
|
|
<div>
|
|
<p>
|
|
SNR:{' '}
|
|
{node.packet?.rxSnr ? node.packet.rxSnr : 'Unknown'}
|
|
</p>
|
|
<p>
|
|
RSSI:{' '}
|
|
{node.packet?.rxRssi ? node.packet.rxRssi : 'Unknown'}
|
|
</p>
|
|
<p>
|
|
Last heard:{' '}
|
|
{node.data?.lastHeard ? node.data.lastHeard : 'Unknown'}
|
|
</p>
|
|
<p>
|
|
Loc:{' '}
|
|
{node.data?.position
|
|
? `alt: ${node.data?.position.altitude}, lat: ${node.data?.position.latitudeI}, lng: ${node.data?.position.longitudeI}, time: ${node.data?.position.time}, batt: ${node.data?.position.batteryLevel}`
|
|
: 'Unknown'}
|
|
</p>
|
|
</div>
|
|
}
|
|
/>
|
|
}
|
|
/>
|
|
))
|
|
) : (
|
|
<div className="flex border-b border-gray-300">
|
|
<div className="m-auto p-3 text-gray-500">
|
|
{props.Translations.no_nodes_message}
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
/>
|
|
);
|
|
};
|
|
|
|
export default SidebarNodes;
|
|
|