import React from 'react'; import { FiCode, FiXCircle } from 'react-icons/fi'; import { MdGpsFixed, MdGpsNotFixed, MdGpsOff } from 'react-icons/md'; import TimeAgo from 'timeago-react'; import { useBreakpoint } from '@app/hooks/breakpoint'; import { useAppSelector } from '@app/hooks/redux'; import { Drawer } from '@components/generic/Drawer'; import { IconButton } from '@components/generic/IconButton'; import { Map } from '@components/Map'; import { Protobuf } from '@meshtastic/meshtasticjs'; export const Nodes = (): JSX.Element => { const myNodeNum = useAppSelector( (state) => state.meshtastic.radio.hardware, ).myNodeNum; const nodes = useAppSelector((state) => state.meshtastic.nodes); // .filter( // (node) => node.number !== myNodeNum, // ); const [navOpen, setNavOpen] = React.useState(false); const { breakpoint } = useBreakpoint(); return (
{ setNavOpen(!navOpen); }} >
Nodes
} onClick={(): void => { setNavOpen(false); }} />
{!nodes.length && ( No nodes found. )} {nodes.map((node) => (
new Date(Date.now() - 1000 * 60 * 15) ? 'bg-green-500' : node.lastHeard > new Date(Date.now() - 1000 * 60 * 30) ? 'bg-yellow-500' : 'bg-red-500' }`} />
{node.user?.longName}
{node.lastHeard.getTime() ? ( ) : ( 'Never' )}
{node.currentPosition ? ( new Date(node.positions[0].posTimestamp * 1000) > new Date(new Date().getTime() - 1000 * 60 * 30) ? ( } /> ) : ( } /> ) ) : ( } /> )}
{Protobuf.HardwareModel[node.user?.hwModel ?? 0]}
} />
))}
); };