import { map, sortBy } from 'common/collections'; import { flow } from 'common/fp'; import { clamp } from 'common/math'; import { vecLength, vecSubtract } from 'common/vector'; import { Fragment } from 'inferno'; import { useBackend } from '../backend'; import { Box, Button, Icon, LabeledList, Section, Table } from '../components'; import { Window } from '../layouts'; const coordsToVec = (coords) => map(parseFloat)(coords.split(', ')); export const Gps = (props, context) => { const { act, data } = useBackend(context); const { currentArea, currentCoords, currentCoordsText, globalmode, power, tag, updating } = data; const signals = flow([ map((signal, index) => { // Calculate distance to the target. BYOND distance is capped to 127, // that's why we roll our own calculations here. const dist = signal.dist && Math.round(vecLength(vecSubtract(currentCoords, signal.coords))); return { ...signal, dist, index }; }), sortBy( // Signals with distance metric go first (signal) => signal.dist === undefined, // Sort alphabetically (signal) => signal.entrytag ), ])(data.signals || []); return (
act('power')} /> }>
{!!power && (
{currentArea} ({currentCoordsText})
{signals.map((signal) => ( {signal.entrytag} {signal.degrees !== undefined && ( )} {signal.dist !== undefined && signal.dist + 'm'} {signal.coordsText} ))}
)}
); };