{"version":3,"sources":["waterlinked_logo.svg","Components/Map/compass.svg","Components/antenna_config.svg","Components/ErrorBoundary.js","Components/releases.js","Components/ReleaseNotes.js","Components/VersionInfo.js","Routes/About.js","lib/format.js","Components/HeplText.js","Components/GPSView.js","lib/fetch.js","Components/DiagnosticGraph.js","Components/DiagnosticReport.js","Components/useLongpress.js","Components/LEDButton.js","Components/SignalStrength.js","Routes/Diagnostic.js","lib/validator.js","Components/ButtonSelector.js","Stores/FormStores/FormStore.js","Stores/FormStores/Settings.js","lib/helpers.js","Components/Map/geohelpers.js","Components/StatusBar.js","Components/Map/MapControls.js","Components/Map/MapPositionSelector.js","Components/ApplyFeedbackButton.js","Components/ExpandableSettings.js","Components/FactoryResetButton.js","Stores/ensure.js","Routes/Settings.js","Components/Map/BoatView.js","Components/Map/Grid.js","Components/ShowUnit.js","Components/Map/CircularSearchArea.js","Components/Map/MapRange.js","lib/markerIcon.js","Components/Map/Markers.js","Components/poimapping.js","Components/Map/POIMarkers.js","Components/Map/View.js","Components/ErrorMessage.js","Components/PointOfInterest.js","Routes/Map.js","Routes/Map.store.js","Components/Map/geometry.js","Stores/FormStores/Receivers.js","Stores/FormStores/Antenna.js","Stores/FormStores/Range.js","Components/Map/AntennaConfigurationMap.js","Components/Map/guihelpers.js","Components/Map/SummaryViews.js","Components/Antenna.js","Components/Map/ReceiverConfigurationMap.js","Components/Map/ConvexHullPoly.js","Components/BaselineWarnings.js","Components/Receivers.js","Routes/Baseline.js","Routes/Network.js","Routes/Wifi.js","Components/IMUConfig.js","Routes/IMU.js","Routes/Debug.js","Components/StatusReport.js","Stores/Receivers.js","Stores/Antenna.js","Stores/GenericConfig.js","Stores/Positions.js","Stores/Status.js","Stores/Preferences.js","Stores/Version.js","Stores/LocatorOrientation.js","Stores/FormStores/PointOfInteres.js","Stores/PointOfInterest.js","Stores/FormStores/NetworkConfig.js","Stores/NetworkConfig.js","Stores/FormStores/WifiConfig.js","Stores/WifiConfig.js","Stores/Temperature.js","Stores/WSStatusStore.js","lib/ws.js","Stores/initStores.js","App.js","lib/detect.js","index.js"],"names":["module","exports","ErrorBoundary","props","state","error","errorInfo","console","log","this","setState","Message","icon","Icon","name","Content","Header","style","whiteSpace","toString","componentStack","children","React","Component","version","changes","knownissues","ReleaseItemList","items","map","d","key","ReleaseNote","toggleExpanded","e","expanded","Segment","onClick","length","ReleaseNotes","releases","i","IconWithTitle","color","title","Popup","trigger","content","on","VersionOK","VersionNeedsUpdate","url","href","target","Button","positive","size","VersionLoadError","UpdateAvailableIcon","inject","observer","aboutInfoStore","versionStore","updateAvailable","latestRelease","VersionStatusIconView","loading","VersionDetail","versionShort","chipid","updateURL","List","relaxed","Item","verticalAlign","Description","Label","paddingTop","labelPosition","LoadingMessage","ErrorMessage","VersionInfoView","proto","window","location","protocol","host","split","About","formatDecimals","val","digits","parseFloat","toLocaleString","navigator","language","minimumFractionDigits","maximumFractionDigits","RoundDecimalPlaces","pow","Math","round","IsDefinedFinite","obj","isFinite","GetArrayIndexOrFallback","arr","idx","fallback","undefined","GetChannelName","ch","HeaderWithHelp","heading","help","as","text","HelpPopUp","formatD","decimals","ShowRow","first","second","unit","Table","Row","Cell","textAlign","GPSDetailsTable","lat","lng","cog","sog","numsats","hdop","orientation","basic","Body","GPSDetailsMaster","masterPositionStore","loadingError","LocatorGPSDetails","GPSDetailsLocator","globalPositionStore","fetcher","fetch","then","r","json","superFetch","endpoint","method","response","ok","Error","statusText","superFetchHeaders","data","headers","body","JSON","stringify","transducer_colors","Axis","className","ref","axis","axisCreator","select","GraphInner","margin","outerWidth","width","outerHeight","height","canvasRef","useRef","yMin","Array","yMax","y_extents","graph","item","extent","py","y_min","min","y_max","max","x_max","px","current","shift","push","_yMx","_yMn","xScale","scaleLinear","domain","range","nice","yScale","useEffect","context","getContext","nWidth","canvas","clientWidth","nHeight","clientHeight","ctx","clearRect","forEach","tr","beginPath","moveTo","strokeStyle","lineWidth","x","y","lineTo","drawPoint","stroke","xAxis","axisBottom","yAxis","axisLeft","xTransform","yTransform","labelXTransform","labelYTransform","marginLeft","marginTop","overflow","transform","labelX","labelY","createMedia","breakpoints","sm","md","lg","xl","MediaContextProvider","Media","Graph","at","mod","greaterThanOrEqual","SelectDuration","duration","onSelectDuration","flowing","ButtonGroup","DiagnosticReport","useState","description","setDescription","setDuration","info","Form","action","type","value","Field","TextArea","placeholder","onInput","rows","disabled","preventDefault","event","isTouchEvent","touches","useLongPress","onLongPress","shouldPreventDefault","delay","longPressTriggered","setLongPressTriggered","timeout","start","useCallback","addEventListener","passive","setTimeout","clear","shouldTriggerClick","clearTimeout","removeEventListener","onMouseDown","onTouchStart","onMouseUp","onMouseLeave","onTouchEnd","useLedBlink","isActive","setIsActive","isSubmitFail","setIsSubmitFail","catch","LEDButton","WaterLinkedLogoWithLedBlink","withRouter","history","blinkLed","border","longPressEvent","Image","wrapped","src","logo","marginRight","clamp","SignalStrengthImage","_bars","bars","viewBox","strokeWidth","innerHeight","rx","fill","unitHeight","SignalStrengthIcon","rssi","NoiseStrengthImage","percent","padding","NoiseStrengthIllustration","nsd","desc","killInf","DiagnosticGraph","x_scale","y_scale","ids","downsample","payload","dataPrPixel","r0","r1","r2","r3","buckets","bucketSize","bucket","ceil","slice","arguments","BucketSampler","geometry","index","DiagnosticGraphFetcher","err","interval","setInterval","clearInterval","ValidIcon","is_valid","LocatorDetails","pos","acousticPositionStore","_x","_y","_z","z","_std","std","position_valid","ReceiverDetails","id","distance","valid","_rssi","_nsd","_distance","ReceiverOverview","receivers","getDiag","Diagnostic","Divider","horizontal","divided","stackable","Column","rules","convFactor","String","ErrorList","field","list","count","Object","keys","reduce","acc","cur","Validator","input","passes","isArray","rule","errors","add","ButtonSelector","onChange","Group","options","active","GenericFormStore","extendObservable","getFlattenedValues","valueKey","form","toJS","fields","getFlattenedAbsoluteValues","convFunc","getFlattenedAbsoluteMetricValues","toMetric","onFieldChange","validation","factor","meta","unitFactor","unitDecimals","isValid","onAbsoluteMetricFieldChange","negated","convertUnit","abs","toUserPrefered","getAbsolute","getAbsoluteMetric","unitName","computed","setError","errMsg","SimpleFormInput","Input","FormInput","Configurator","FormSetupError","header","FormIsLoading","remap","channelSupported","ConfigStore","locator_type","needsExternalDepth","channel","vehicle_imu","hasFeature","gps","compass","environment","static_lat","static_lon","static_orientation","speed_of_sound","external_pps","antenna","onFieldChangeWrapper","isNaN","wrap360","angle","convertXYToPolar","xy","atan2","PI","sqrt","lefletToPolar","latlng","an","polarToLeflet","radius","rad","cos","sin","latLng","offsetLatLonByDistanceAngle","center","geod","GeographicLib","Geodesic","WGS84","Direct","lat2","lon2","xyToLeflet","leafletToXY","PropTypes","shape","number","isRequired","propTypes","ColorStatusIcon","status","quality","icon_name","BatteryIcon","ShowProductNameAndVersion","gpsimuStore","imu","battery","Responsive","minWidth","process","hasVersionShort","paddingLeft","fontSize","WaterlinkedLogoControl","position","backgroundColor","alt","GridSizeView","GridSizeControl","gridSize","preferenceStore","getGridSize","genericConfigStore","ranges","converter","toUPLongFromMetric","nameLong","AcousticPositionControl","CenterOnLocatorControl","handleClick","compact","WaterTemperatureView","waterTemp","waterTempSymbol","temp","AvailablePositions","available","GPSIMUBatteryTemperatureView","GPSIMUBatteryTemperatureControl","metricToUPTemperature","temperatureStore","water","temperatureSymbol","GlobalAvailablePositionsControl","setShow","label","checked","update","positions_dict","positionStore","getShow","Checkbox","LocatorCenterOnLocationControl","AcousticAvailablePositionsControl","CompassView","AcousticCompassControl","compensatedOrientation","AcousticCenterOnLocationControl","LatitudeLongitudeView","LatitudeLongitudeControl","latLngVisible","SetMasterPositionControl","onPositionChange","background","borderBottomLeftRadius","borderBottomRightRadius","MapPositionSelector","zoom","handlePositionChange","refs","leafletElement","locate","getZoom","onStorePosition","Modal","closeIcon","closeOnRootNodeClick","Map","TileLayer","attribution","Marker","ApplyFeedbackButton","isStoring","storeSuccess","storeFailure","warning","ExpandableSettings","FactoryResetButton","circular","inverted","axios","post","TimeoutError","ensureStoreHasLoaded","store","pollInterval","Promise","resolve","reject","waitForStore","_timeout","hasLoaded","bind","prototype","SetCurrentStaticPositionButton","setPos","ConfigurationForm","submit","onSubmit","step","paddingBottom","to","configStore","GenericConfigurationForm","isSettingUp","setupError","onSubmitForm","values","gcs","parseInt","reset","isSettingup","UserPreferenceForm","preference","setUnit","setBoatVisibility","setLatLngVisible","boatVisible","AdvancedLocatorSettings","AdvancedTopSideSettings","Settings","generateBoat","referenceBoat","AcousticBoatView","poly","polys","Polygon","positions","MapBoatView","polar","CircleGrid","grid","generateCircleGrid","LayerGroup","Circle","AcousticGrid","fullGrid","generateGrid","inner","getGrid","MapGrid","centerLatlng","generateCircularGrid","global","Grid","Polyline","opacity","gridRange","delta","findXcorr","acos","findYcorr","ShowUnit","fontWeight","dragRadius","divIcon","iconSize","iconAnchor","html","dragSector","dragDirection","origo","DescribeDirection","DescribeRadius","DescribeSector","GenerateArcGlobal","startAngle","endAngle","arc","GenerateArc","SearchRangeArcGlobal","points","SearchRangeArc","CircularSearchAreaDraggable","onDragRadius","getLatLng","maxRadius","setLatLng","direction","onAbsoluteMetricChange","onDragDirection","onDragSector","sector","fieldsMetric","fieldsRaw","posRadius","posDir","posSector","rotationAngle","rotationOrigin","draggable","onDrag","zIndexOffset","CircularRangeVisualization","fullCircle","AcousticCircularRangeVisualization","circularRanges","getCircularRanges","markerIconBlue","markerIconPurple","markerIconRed","markerIconBlack","origoIcon","iconUrl","rovIcon","receiverIcon","unknownPositionIcon","GetIcon","chName","colors","GetColor","MarkerPopup","MarkerAndTrail","trail","offsetOrientation","FeatureGroup","UnknownPositionAndTrail","MarkerAndTrailWithOrientation","locatorOrientationStore","AccuracyVisualization","col","position_invalid_count","fillOpacity","LocatorMarkerAndTrail","trailLength","markerAndTrails","show","AcousticLocatorMarkerAndTrail","fusionPositionStore","getXY","MasterMarkerAndTrail","OrigoMarker","addPOI","poiMapping","sort","a","b","mapIconMapping","el","defaultIcon","moveIcon","TableLatLngDepth","depth","POIMarkerMoveable","point","POIMarker","POIMarkers","pointOfInterestStore","getVisible","isEditing","BaseLayer","LayersControl","Overlay","Default","BoatVisibleWrapper","MasterBoatView","arrayOf","string","CurrentMapPositionStore","defaultZoom","setLatLngZoom","globalMapPositionStore","latLngIsZero","ll","latLngIsNotZero","MapView","onViewportChanged","vp","setPosition","invalidateSize","locatorPosition","maxZoom","ScaleControl","handleWidth","skipOnMount","onResize","RecieverVisualization","rxStore","all","acousticMapPositionStore","AcousticView","crs","CRS","Simple","message","dropdownOptions","generateCSVData","poiStore","join","unshift","ExportPOIButton","downloadFile","element","document","createElement","file","Blob","URL","createObjectURL","download","appendChild","setAttribute","click","VisibilitySelector","toggle","visible","VisibilitySelectorWithLabel","DeleteButton","isOpen","onOpenPopup","onDeleteConfirm","handleDelete","errorDelete","open","onOpen","EditButton","handleEndEdit","errorUpdate","POIView","handleStartEdit","POIIconSelector","Dropdown","fluid","selection","POIEditView","widths","isLoading","Point","handleUpdate","TryAgainButton","PointOfInterestExpanded","deletePersistent","updatePersistent","handleTryAgain","newestFirst","isFetching","errorFetchMsg","PointOfInterest","mapStateStore","poiExpanded","setPoiExpanded","showMap","setShowMap","enabled","trailMax","setTrailLength","trailValue","trailValueError","CreateNewPOI","Date","addPersistent","CreateEditNewPOI","MapComponent","onSelectMap","onSelectRelative","onTrailChange","onMapChange","columns","errorAddMsg","cross","o","convexHull","lower","pop","upper","concat","polygonArea","area","j","ReceiverFormStore","AntennaFormStore","rotation","RangeFormStore","xmin","xmax","ymin","ymax","zmax","getArea","longestSide","AntennaRangeConfigurationMap","rangeFormStore","zoomControl","ZoomControl","DescribeForwardBackward","DescribeLeftRight","DirectionAndValueCell","CircularRangeConfigView","attached","singleLine","unstackable","ReceiverView","CircularShowFullSummary","rxCollectionFormStore","CircularShowSmallSummary","CircularSummary","AntennaConfig","antennaFormStore","AntennaAndRangeConfiguratorView","antennaConfig","SegmentGroup","dragIcon","rxOpts","popupAnchor","shadowUrl","shadowSize","shadowAnchor","rxIcons","1","assign","2","3","4","ReceiverDraggable","onMove","ReceiverConfigurationMap","onReceiverMove","receiver","rxFormStore","get","ReceiversOnALineWarning","BaselineTooSmallWarning","ReceiverAndRangeConfiguratorView","rangeArea","rxArea","getReceiverArea","baselineWarning","receiversOnALineWarning","maxWidth","MaxRadius","BaseLineChooser","antennaEnabled","antennaColor","receiverColor","onChangeBaseline","receiverRegistry","observable","addReceiver","set","receiverArea","hull","every","BaselineSetup","rangeFormData","receiverFormData","setXYZ","antennaStore","antennaFormData","reponse","toTransportArray","baseline","acs","nameShort","toUPShortFromMetric","formsAreValid","marginBottom","NetworkConfigFormView","address","prefix","gateway","dns","NetworkConfig","networkConfigStore","formStore","dhcp","loadSuccess","onChangeStore","storeError","Network","WifiConfigFormView","ssid","password","AccessPointDetails","collapsing","WifiConfig","wifiConfigStore","mode","Wifi","ResetGyros","isSubmitting","setIsSubmitting","isSubmitError","setIsSubmitError","isSuccess","setIsSuccess","res","ResetNorth","setHeading","formValid","setformValid","floatVal","formValidation","CompassArrow","path","a1","a2","IMUOrientation","useSWR","refreshInterval","dedupingInterval","yaw","HeaderCell","IMU","ForceExternalDepth","Number","extra","ExternalDepth","submitMessage","setSubmitMessage","setDepth","setExternalDepth","persistent","msg","Debug","swrOptions","refreshWhenOffline","refreshWhenHidden","StatusGroupDetail","status_group","error_ids","isExpanded","setIsExpanded","expandIcon","linkToIMU","findIndex","textTransform","StatusReportDetail","sorted","StatusReport","setIsOpen","statuses","severity","severityToNumber","isOK","wide","onClose","ReceiverModel","setX","setY","setZ","setXY","getX","getY","getZ","ReceiverStore","model","AntennaStore","antenna_rotation","RangeStore","GenericConfigStore","storingError","isOnboardGPS","isOnboardIMU","fromTransportArray","imu_vehicle_enabled","external_pps_enabled","antenna_enabled","search_radius","search_direction","search_sector","range_min_x","range_min_y","range_max_x","range_max_y","range_max_z","PositionList","array","ts","now","peek","getLatest","startts","filter","MasterPositionStore","setFromWs","lon","setNoValue","GlobalPositionStore","setFromWsDict","AcousticPositionStore","receiver_distance","receiver_rssi","receiver_nsd","receiver_valid","t","recv_distance","recv_nsd_db","recv_rssi","recv_valid","xPos","yPos","zPos","GPSIMUStatusStore","UnitConverter","shortName","shortFactor","toMetricFromUPShort","longName","longFactor","toMetricFromUPLong","isMetric","gridIncrements","selected","increment","MetricUnitConverter","ImperialUnitConverter","UserPreferenceStore","longestSize","schema","VersionStore","hasChecked","isLatest","baseUrl","is_latest","latest_release","AboutInfoStore","LocatorOrientation","PointOfInterestItemFormStore","PointsOfInterestStore","delete","reverse","getHref","startEdit","_name","_icon","NetworkConfigFormStore","NetworkConfigStore","put","success","detail","WifiConfigFormStore","WifiConfigStore","TemperatureStore","board","WSStatusStore","connected","setConnected","is_connected","wsUrl","PointOfInterestStore","timeoutGlobalHandle","timeoutAcosticHandle","timeoutOrientation","connectionStatusStore","storage","persist","create","hydrate","newPreferenceStore","localStorage","globalTimeoutFunc","acousticTimeoutFunc","orientationTimeoutFunc","socket","ReconnectingWebSocket","onopen","onclose","onmessage","raw","parse","updateStoresFromWS","initStores","isIE","appVersion","indexOf","MSInputMethodContext","documentMode","App","toggleVisibility","menuVisible","navigate","autoCollapse","largeScreen","innerWidth","Menu","secondary","Sidebar","Pushable","minHeight","animation","vertical","Pusher","exact","component","Baseline","ReactDOM","render","getElementById"],"mappings":"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","file":"static/js/main.59e0557b.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/waterlinked_logo.207ebab4.svg\";","module.exports = __webpack_public_path__ + \"static/media/compass.699a7f40.svg\";","module.exports = __webpack_public_path__ + \"static/media/antenna_config.b1f78f25.svg\";","import React from 'react';\nimport { Message, Icon } from 'semantic-ui-react'\n\nclass ErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = { error: null, errorInfo: null };\n }\n\n componentDidCatch(error, errorInfo) {\n console.log(\"Error boundary\")\n this.setState({\n error: error,\n errorInfo: errorInfo,\n });\n // TODO: Log error to some service in case the user has innernet access\n }\n\n render() {\n if (this.state.errorInfo) {\n // You can render any custom fallback UI\n return (\n \n \n \n Woops\n

The component stopped working. If this failure happens again,\n please record the steps you have taken which triggered the failure\n and notify Water Linked with the details below.

\n
\n {this.state.error && this.state.error.toString()}\n
\n {this.state.errorInfo.componentStack}\n
\n
\n
\n )\n }\n // Rendering the children if no error occured\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary","export default [\n {\n version: \"3.3.0 (2021-10)\",\n changes: [\n \"Change IMU handling for better performance (heading now needs to be set)\",\n \"Improve GUI visuals\",\n \"Reduce latency in GUI (using websockets)\",\n \"Change units for signal strength and noise\",\n \"Change ethernet auto-negotiation to 10/100\",\n \"Fix position can be invalid after changing locator type.\"\n ],\n knownissues: [\n ],\n },\n {\n version: \"3.2.0 (2020-11)\",\n changes: [\n \"Add support for Locator-S2/P2\",\n \"Improve IMU performance\",\n \"Various bug fixes\",\n ],\n knownissues: [\n ],\n },\n {\n version: \"3.1.1 (2020-09)\",\n changes: [\n \"Add factory reset\",\n \"Improve system status\",\n \"Various bug fixes\",\n ],\n knownissues: [\n ],\n },\n {\n version: \"3.1.0 (2020-08)\",\n changes: [\n \"Initial public release on new hardware platform\"\n ],\n knownissues: [\n ],\n },\n];\n/*\n {\n version: \"3.0.1 (2020-07)\",\n changes: [\n \"Production test (internal)\"\n ],\n knownissues: [\n ],\n },\n {\n version: \"3.0.0 (2020-05)\",\n changes: [\n \"Initial release on new hardware platform\"\n ],\n knownissues: [\n ],\n },\n*/\n\n/*\n {\n version: \"2.5.1 (2019-12)\",\n changes: [\n \"Fix ethernet overheating issue\"\n ],\n knownissues: [\n \"IMU heading can be unstable. This affect the position in the map view, but not the relative position.\",\n ],\n },\n {\n version: \"2.5.0 (2019-09)\",\n changes: [\n \"Improve position accuracy and reduce position latency\",\n \"Add reflective or open water environment selection\",\n \"Add fix quality to GPS data\",\n \"Add support for showing lat/lng in map view\",\n \"Fix position taking a long time to reach correct position when changing channels between multiple Locator-U1\",\n \"Fix missing icon\",\n \"Fix incorrect rotation of range visualization\"\n ],\n knownissues: [\n \"IMU heading can be unstable. This affect the position in the map view, but not the relative position.\",\n ],\n },\n {\n version: \"2.3.2 (2019-06)\",\n changes: [\n \"Fix network configuration cannot be saved\",\n \"Fix web gui takes a long time to load when not connected to the internet\",\n \"Improve ethernet stability\",\n ],\n knownissues: [\n \"IMU heading can be unstable. This affect the position in the map view, but not the relative position.\",\n \"If receivers are not connected the position is calculated as X: -85.67 Y: -85.67\"\n ],\n },\n {\n version: \"2.3.1 (2019-03)\",\n changes: [\n \"Add support for Locator-U1\",\n \"Add support for Locator-P1\",\n \"Add network configuration\",\n \"Add warning if receivers or Locator-D1 is not connected\",\n \"Improve warning messages\",\n //\"Add support for external PPS source\",\n ],\n knownissues: [\n \"IMU heading can be unstable. This affect the position in the map view, but not the relative position.\",\n \"If receivers are not connected the position is calculated as X: -85.67 Y: -85.67\"\n ],\n },\n/* Steel tank mode - Not publicly released\n {\n version: \"2.3.0 (2019-01)\",\n changes: [\n \"Add configurable ping length\",\n \"Add configurable speed of sound\",\n ],\n knownissues: [\n \"IMU heading can be unstable. This affect the position in the map view, but not the relative position.\",\n \"If receivers are not connected the position is calculated as X: -85.67 Y: -85.67\"\n ],\n },\n/* Locator-P1 advanced settings - Not publicly released\n {\n version: \"2.2.0 (2018-12)\",\n changes: [\n \"Add support for Locator-P1\",\n \"Add network configuration\",\n \"Add support for external PPS source\",\n \"Fix ROV heading being wrong in non-map view\",\n ],\n knownissues: [\n \"IMU heading can be unstable. This affect the position in the map view, but not the relative position.\",\n \"If receivers are not connected the position is calculated as X: -85.67 Y: -85.67\"\n ],\n },\n\n {\n version: \"2.1.1 (2018-08)\",\n changes: [\n \"Fix ROV heading missing in non-map view\",\n ],\n knownissues: [\n \"IMU heading can be unstable. This affect the position in the map view, but not the relative position.\",\n \"If receivers are not connected the position is calculated as X: -85.67 Y: -85.67\"\n ],\n },\n {\n version: \"2.1.0 (2018-06)\",\n changes: [\n \"Add support for Locator-S1\",\n \"Bug fixes\",\n ],\n knownissues: [\n \"IMU heading can be unstable. This affect the position in the map view, but not the relative position.\",\n \"If receivers are not connected the position is calculated as X: -85.67 Y: -85.67\"\n ],\n },\n {\n version: \"2.0.0 (2018-04)\",\n changes: [\n \"Complete rewrite of user interface to improve usability\",\n \"Improve setup with drag and drop of receivers and range\",\n \"Improve support for small screens (mobile phones / tablets)\",\n \"Add range visualization\",\n \"Add support for imperial/metric selection\",\n \"Add warning messages to assist correct setup and use\",\n \"Add points of interest (POI)\",\n \"Add automatic notification of new releases\",\n \"Fix incorrect calculation of longitude\"\n ],\n knownissues: [\n \"IMU heading can be unstable. This affect the position in the map view, but not the relative position.\",\n \"If receivers are not connected the position is calculated as X: -85.67 Y: -85.67\"\n ],\n },\n {\n version: \"1.4.0 (2017-12-12)\",\n changes: [\n \"Significantly improved performance in tank, pool and other highly reflective environments.\",\n \"Slightly improved performance on long distance.\",\n ],\n knownissues: [\n \"Multiple users (or browser windows) editing the configuration screen at the same time can give issues where configurations are not applied correctly.\",\n \"IMU heading is unstable. This affect the position in the map view, but not the acoustic position.\",\n \"If receivers are not connected the position is calculated as X: -85.67 Y: -85.67\"\n ],\n },\n {\n version: \"1.3.0 (2017-11-03)\",\n changes: [\n \"Add advanced range setting\",\n \"Add option to allow full-screen in map view\",\n \"Improve acoustic accuracy\",\n \"Improve IMU calibration and persist IMU calibration values in non volatime memory.\",\n \"Fix issue where position requests were not terminated when changing tabs in the GUI\",\n \"Fix issue where master position was incorrectly returned from /api/v1/position/master when using static or external position\",\n ],\n knownissues: [\n \"Multiple users (or browser windows) editing the configuration screen at the same time can give issues where configurations are not applied correctly.\",\n \"IMU heading is unstable. This affect the position in the map view, but not the acoustic position.\",\n ],\n },\n {\n version: \"1.2.1 (2017-10-02)\",\n changes: [\n \"Add on-board GPS and IMU\",\n \"Fix issue where web gui becomes slower after some time\",\n ],\n knownissues: [\n \"IMU may loose calibration resulting in poor heading accuracy. This affect the position in the map view, but not the acoustic position.\",\n \"Multiple users (or browser windows) editing the configuration screen at the same time can give issues where configurations are not applied correctly.\",\n ],\n },\n {\n version: \"1.1.0 (2017-09-01)\",\n changes: [\n \"Add depth in map view\",\n \"Add setting to configure number of seconds of the trail to show\",\n \"Add diagnostic view\",\n \"Add support for A1 locator\",\n \"Improve configuration view\",\n \"Fix issue where top menu is not visible if screen is too small\",\n \"Fix issue where longitude was limited to +-90 degrees (changed to +-180)\",\n \"Fix issue where position would stop updating after some time\",\n \"Fix issue where orientation in master position was always set to 0\",\n ],\n knownissues: [\n \"On-board GPS and IMU is disabled (static or external is available)\",\n \"Web gui becomes slower after running for some time\",\n \"Multiple users (or browser windows) editing the configuration screen at the same time can give issues where configurations are not applied correctly.\",\n ],\n },\n {\n version: \"1.0.0 (2017-07-06)\",\n changes: [\n \"Initial release\",\n ],\n knownissues: [],\n }\n]\n*/\n","import React, { Component } from 'react';\nimport { Segment, Icon } from 'semantic-ui-react'\nimport releases from './releases'\n\nconst ReleaseItemList = ({items}) => (\n \n)\n\nclass ReleaseNote extends Component {\n constructor(props) {\n super(props)\n this.state = {expanded: this.props.expanded}\n }\n toggleExpanded = (e) => {\n this.setState({expanded: !this.state.expanded})\n }\n render() {\n const { version, changes, knownissues } = this.props\n const icon = (this.state.expanded ? \"angle double up\" : \"angle double down\")\n return (\n \n

Release {version}

\n\n {this.state.expanded && (\n
\n
Changes
\n \n\n {knownissues.length > 0 && (\n
\n
Known issues
\n \n
\n )}\n
\n )}\n
\n )\n }\n}\n\nconst ReleaseNotes = () => (\n
\n {releases.map((d, i) => ())}\n
\n)\n\nexport default ReleaseNotes;\n","import React, { Component } from 'react';\nimport { Icon, Message, List, Label, Button, Popup } from 'semantic-ui-react'\nimport { observer, inject } from 'mobx-react';\n\nconst IconWithTitle = ({name, color, title}) => (\n \n }\n content={title}\n on={[\"hover\", \"click\"]}\n />\n \n)\n\nconst colorOK = \"#16a04f\"\n//const colorWarn = \"#f1c40f\"\nconst colorWarn = \"#eaae00\"\n\nconst VersionOK = () => (\n \n)\n\nconst VersionNeedsUpdate = ({url, version}) => (\n \n \n New version available ({version}) \n \n)\n\nconst VersionLoadError = ({error}) => (\n \n)\n\nconst UpdateAvailableIcon = inject(\"aboutInfoStore\")(observer(class UpdateAvailableIcon extends Component {\n render() {\n const { updateAvailable, latestRelease } = this.props.aboutInfoStore.versionStore\n if (updateAvailable) {\n return (\n \n )\n }\n return ()\n }\n}))\n\nconst VersionStatusIconView = inject(\"aboutInfoStore\")(observer(class VersionStatusIconView extends Component {\n render() {\n const { loading, error, updateAvailable, latestRelease, url } = this.props.aboutInfoStore.versionStore\n if (loading) {\n return ()\n } else if (error) {\n return ()\n }\n if (updateAvailable) {\n return ()\n }\n return ()\n }\n}))\n\nconst VersionDetail = ({version, versionShort, chipid, updateURL}) => (\n \n \n \n \n Software version\n \n

\n \n \n \n\n

Developers

\n\n \n \n\n \n)\n\n/*\nconst ExpandableSection = ({heading, children}) => {\n const [isExpanded, setIsExpanded] = useState(false)\n const icon = isExpanded ? \"angle double up\" : \"angle double down\"\n return (\n
\n

setIsExpanded(!isExpanded)}>{heading}

\n {isExpanded && children}\n
\n )\n}\n\nconst ExpandableHardwareSection = () => {\n return (\n \n \n Click to flash LED 1.\n \n \n )\n}\n*/\n\n\nclass About extends Component {\n render() {\n return (\n \n \n

Version information

\n \n

Browser compatibility

\n

This GUI has been tested and verified to work with the following browsers:

\n \n \n \n \n
\n\n \n\n

Release notes

\n \n\n

 

\n
\n )\n }\n}\n\nexport default About;\n","function formatDecimals(val, digits=2) {\n val = parseFloat(val)\n return val.toLocaleString(navigator.language, {minimumFractionDigits: digits, maximumFractionDigits: digits})\n}\n\nfunction RoundDecimalPlaces(val, digits=2) {\n let pow = Math.pow(10, digits)\n return Math.round(val * pow) / pow\n}\n\nfunction IsDefinedFinite(obj, name) {\n if (!(name in obj)) {\n // Don't exist in obj\n return false;\n }\n if (typeof obj[name] !== 'number') {\n // Not a number\n return false;\n }\n // Is defined?\n return isFinite(obj[name])\n}\nfunction GetArrayIndexOrFallback(arr, idx, fallback) {\n if (arr === undefined) {\n return fallback\n }\n if (arr[idx] === undefined) {\n return fallback\n }\n return arr[idx]\n}\n\n\nconst NoValue = -1e6\n\nfunction GetChannelName(ch) {\n var name = ch.split(\":\");\n name = name[name.length -1]\n return name\n}\n\nexport { formatDecimals, RoundDecimalPlaces, IsDefinedFinite, GetArrayIndexOrFallback, GetChannelName, NoValue }\n","import React from 'react';\nimport { Header, Icon, Popup } from 'semantic-ui-react'\nimport { PropTypes } from 'prop-types';\n\nconst HeaderWithHelp = ({heading, help, as}) => (\n
{heading}\n \n
\n)\n\n\nHeaderWithHelp.propTypes = {\n heading: PropTypes.string.isRequired,\n help: PropTypes.string.isRequired,\n as: PropTypes.string,\n}\n\nconst HelpPopUp = ({text, size}) => (\n }\n content={text}\n on={[\"hover\", \"click\"]}\n />\n)\n\nHelpPopUp.propTypes = {\n text: PropTypes.string.isRequired,\n size: PropTypes.string,\n}\n\nexport { HeaderWithHelp, HelpPopUp }\n","import React, { Component } from 'react';\nimport { Table } from 'semantic-ui-react'\nimport { observer, inject } from 'mobx-react'\nimport PropTypes from 'prop-types';\nimport { formatDecimals } from '../lib/format';\nimport { HelpPopUp } from '../Components/HeplText'\n\n\nconst no_value = -1000\n\nfunction formatD(val, decimals) {\n if (val === no_value || val === \"-\" ) {\n return \"-\"\n }\n return formatDecimals(val, decimals)\n}\n\nfunction ShowRow({first, second, unit=\"\"}) {\n return (\n \n {first}\n {second} {unit}\n \n )\n}\n\n\nclass GPSDetailsTable extends Component {\n render() {\n let {lat, lng, cog, sog, numsats, hdop, orientation} = this.props\n if (lat <= no_value) { lat = '-' }\n if (lng <= no_value) { lng = '-' }\n if (cog < 0) { cog = '-' }\n if (sog < 0) { sog = '-' }\n if (numsats < 0) { numsats = '-' }\n if (hdop < 0) { hdop = '-' }\n if (orientation < 0) { orientation = '-' }\n return (\n \n \n \n \n \n \n \n \n
\n )\n }\n}\n\nGPSDetailsTable.propTypes = {\n lat: PropTypes.number.isRequired,\n lng: PropTypes.number.isRequired,\n cog: PropTypes.number.isRequired,\n hdop: PropTypes.number.isRequired,\n numsats: PropTypes.number.isRequired,\n sog: PropTypes.number.isRequired,\n orientation: PropTypes.number.isRequired,\n}\n\nconst GPSDetailsMaster = inject(\"masterPositionStore\")(observer(class GPSDetailsM extends Component {\n render() {\n if (this.props.masterPositionStore.loadingError) {\n return \n }\n return ( )\n }\n}))\n\n\nclass LocatorGPSDetails extends Component {\n render() {\n let {lat, lng, orientation} = this.props\n if (lat <= no_value) { lat = '-' }\n if (lng <= no_value) { lng = '-' }\n if (orientation < 0) { orientation = '-' }\n return (\n \n \n \n \n deg }/>\n \n
\n )\n }\n}\n\nLocatorGPSDetails.propTypes = {\n lat: PropTypes.number.isRequired,\n lng: PropTypes.number.isRequired,\n cog: PropTypes.number.isRequired,\n orientation: PropTypes.number.isRequired,\n}\n\n\nconst GPSDetailsLocator = inject(\"globalPositionStore\")(observer(class GPSDetailsG extends Component {\n render() {\n if (this.props.globalPositionStore.loadingError) {\n return \n }\n return ( )\n }\n}))\n\nexport { GPSDetailsMaster, GPSDetailsLocator, GPSDetailsTable };\n","\nimport fetch from 'unfetch'\n\nconst fetcher = url => fetch(url).then(r => r.json())\n\nfunction superFetch(endpoint) {\n return fetch(endpoint, {\n method: \"GET\",\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText)\n }\n return response\n })\n .then(response => { return response.json() })\n}\n\n\nfunction superFetchHeaders(endpoint, method, data) {\n var headers = {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n }\n return fetch(endpoint, {\n method: method,\n headers: headers,\n body: JSON.stringify(data)\n })\n}\n\n\n\nexport { superFetch, superFetchHeaders, fetcher };\n","import React, { useRef, useEffect } from 'react';\nimport { extent, min, max } from 'd3-array'\nimport { scaleLinear } from 'd3-scale'\nimport { axisLeft, axisBottom } from 'd3-axis'\nimport { select } from 'd3-selection'\nimport './DiagnosticGraph.css'\nimport { createMedia } from \"@artsy/fresnel\"\n\n\nconst transducer_colors = [\"#0000ff\", \"#00ff00\", \"#ff0000\", \"#000000\"]\n\nconst Axis = props => {\n // https://stackoverflow.com/a/56029853\n const axisRef = axis => {\n axis && props.axisCreator(select(axis));\n };\n\n return ;\n};\n\nconst GraphInner = props => {\n\n const margin = {top: 20, right: 15, bottom: 30, left: 50};\n const outerWidth = props.width;\n const outerHeight = props.height;\n const width = outerWidth - margin.left - margin.right;\n const height = outerHeight - margin.top - margin.bottom;\n\n const canvasRef = useRef(null)\n const yMin = useRef(new Array(10))\n const yMax = useRef(new Array(10))\n\n const y_extents = props.graph.map(item => {\n return extent(item, d => d.py)\n })\n const y_min = min(y_extents, d => d[0])\n const y_max = max(y_extents, d => d[1])\n\n const x_max = props.graph[0][props.graph[0].length-1].px\n\n yMax.current.shift(0)\n yMax.current.push(y_max)\n yMin.current.shift(0)\n yMin.current.push(y_min)\n\n const _yMx = max(yMax.current)\n const _yMn = min(yMin.current)\n\n const xScale = scaleLinear()\n .domain([0, x_max])\n .range([0, width])\n .nice();\n\n const yScale = scaleLinear()\n .domain([_yMn-10, _yMx+10])\n //.domain([10, 100])\n .range([height, 0])\n .nice();\n\n useEffect(() => {\n const canvas = canvasRef.current\n const context = canvas.getContext('2d')\n\n var nWidth = context.canvas.clientWidth;\n var nHeight = context.canvas.clientHeight;\n context.canvas.width = nWidth;\n context.canvas.height = nHeight;\n\n const drawPoint = (ctx, x, y) => {\n const px = xScale(x);\n const py = yScale(y);\n ctx.lineTo(px, py)\n }\n\n const draw = (ctx) => {\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height)\n\n if (!props.graph) {\n return\n }\n props.graph.forEach((tr, idx) => {\n ctx.beginPath()\n ctx.moveTo(xScale(0),yScale(0))\n ctx.strokeStyle = transducer_colors[idx]\n ctx.lineWidth = 1\n tr.forEach(d => {\n drawPoint(ctx, d.px, d.py)\n })\n ctx.stroke()\n })\n }\n\n draw(context)\n\n }, [props.graph, xScale, yScale])\n\n const xAxis = axisBottom(xScale)\n const yAxis = axisLeft(yScale)\n const xTransform = `translate(${margin.left}, ${outerHeight - margin.bottom})`;\n const yTransform = `translate(${margin.left}, ${margin.top})`;\n\n const labelXTransform = `translate(${outerWidth/2 - 40}, ${outerHeight + 10}) `;\n const labelYTransform = `translate(10, ${outerHeight/2 + 70}) rotate(-90)`;\n\n\n return (\n
\n \n \n \n \n \n \n \n \n {props.labelX &&\n \n {props.labelX}\n \n }\n {props.labelY &&\n \n {props.labelY}\n \n }\n \n
\n )\n}\n\nconst { MediaContextProvider, Media } = createMedia({\n breakpoints: {\n sm: 0,\n md: 600,\n lg: 1024,\n xl: 1920,\n },\n})\n\nconst Graph = props => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport { Graph };\n","import React, { useState } from 'react';\nimport { Icon, Message, Popup, Button, ButtonGroup, Form, TextArea, Header } from 'semantic-ui-react'\n\nfunction SelectDuration({duration, onSelectDuration}) {\n return (\n {duration}
}\n content={\n \n \n \n \n \n \n }\n />\n )\n }\n\nconst defaultCollectionTime = 15;\n\nfunction DiagnosticReport() {\n const [description, setDescription] = useState(\"\")\n const [duration, setDuration] = useState(defaultCollectionTime)\n\n const onChangeDescription = (e) => {\n setDescription(e.target.value)\n }\n\n return (\n
\n \n \n \n \n Generate diagnostic report for analysis by Water Linked support\n \n
\n

Please make sure the Receivers and Locator is in water and showing the behaviour you want assistance with.

\n
Clicking the button below initiates a  \n \n  second data capture to share with the support team.\n
\n
\n
\n
\n\n
\n \n {duration !== defaultCollectionTime && ()}\n
Describe your setup and what you you are experiencing
\n \n \n \n \n \n \n\n

Please visit waterlinked.com for up to date contact details.

\n\n
\n
\n )\n}\n\nexport default DiagnosticReport\n","// https://stackoverflow.com/a/48057286\nimport { useCallback, useRef, useState } from \"react\";\n\nconst useLongPress = (\n onLongPress,\n onClick,\n { shouldPreventDefault = true, delay = 300 } = {}\n ) => {\n const [longPressTriggered, setLongPressTriggered] = useState(false);\n const timeout = useRef();\n const target = useRef();\n\n const start = useCallback(\n event => {\n if (shouldPreventDefault && event.target) {\n event.target.addEventListener(\"touchend\", preventDefault, {\n passive: false\n });\n target.current = event.target;\n }\n timeout.current = setTimeout(() => {\n onLongPress(event);\n setLongPressTriggered(true);\n }, delay);\n },\n [onLongPress, delay, shouldPreventDefault]\n );\n\n const clear = useCallback(\n (event, shouldTriggerClick = true) => {\n timeout.current && clearTimeout(timeout.current);\n shouldTriggerClick && !longPressTriggered && onClick();\n setLongPressTriggered(false);\n if (shouldPreventDefault && target.current) {\n target.current.removeEventListener(\"touchend\", preventDefault);\n }\n },\n [shouldPreventDefault, onClick, longPressTriggered]\n );\n\n return {\n onMouseDown: e => start(e),\n onTouchStart: e => start(e),\n onMouseUp: e => clear(e),\n onMouseLeave: e => clear(e, false),\n onTouchEnd: e => clear(e)\n };\n};\n\nconst isTouchEvent = event => {\nreturn \"touches\" in event;\n};\n\nconst preventDefault = event => {\nif (!isTouchEvent(event)) return;\n\nif (event.touches.length < 2 && event.preventDefault) {\n event.preventDefault();\n}\n};\n\nexport default useLongPress;\n","import React, { useState } from 'react';\nimport { Button, Image } from 'semantic-ui-react'\nimport logo from '../waterlinked_logo.svg';\nimport './LEDButton.css'\nimport { withRouter } from \"react-router-dom\";\nimport useLongPress from './useLongpress'\n\nconst BlinkLED = () => {\n return fetch('/api/v1/about/led')\n .then(r => r.ok)\n .catch((e) => {\n console.log(\"Error: \", e.toString())\n return false\n })\n}\n\nfunction useLedBlink() {\n const [isActive, setIsActive] = useState(false)\n const [isSubmitFail, setIsSubmitFail] = useState(false)\n const onClick = () => {\n if (isActive) { return }\n setIsActive(true)\n BlinkLED().then(ok => {\n if (ok) {\n console.log(\"success\")\n setTimeout(() => {\n setIsActive(false)\n }, 3000)\n } else {\n console.log(\"fail\")\n setIsActive(false)\n setIsSubmitFail(true)\n setTimeout(() => {\n setIsSubmitFail(false)\n }, 3000)\n }\n })\n }\n return [isActive, isSubmitFail, onClick]\n}\n\nconst LEDButton = () => {\n const [isActive, isSubmitFail, onClick] = useLedBlink()\n\n return (\n \n Flash Led\n \n )\n\n /*\n return (\n \n )\n */\n}\n\n\nconst WaterLinkedLogoWithLedBlinkNav = ({history}) => {\n const [isActive, isSubmitFail, blinkLed] = useLedBlink()\n const border = isActive ? \"ledactive\" : (isSubmitFail ? \"lederror\" : \"ledborder\")\n\n const onLongPress = () => {\n history.push(\"/debug\")\n };\n\n const onClick = () => {\n blinkLed();\n }\n\n const defaultOptions = {\n shouldPreventDefault: true,\n delay: 500,\n };\n const longPressEvent = useLongPress(onLongPress, onClick, defaultOptions);\n\n /*\n return (\n \n )\n*/\n\n return (\n
\n \n
\n )\n/*\n*/\n}\n\nconst WaterLinkedLogoWithLedBlink = withRouter(WaterLinkedLogoWithLedBlinkNav)\n\nexport{ LEDButton, BlinkLED, WaterLinkedLogoWithLedBlink }\n","import React from 'react';\n\nfunction clamp(val, min, max) {\n return Math.min(Math.max(val, min), max)\n}\n\nconst SignalStrengthImage = ({bars}) => {\n const _bars = clamp(bars, 0, 4)\n const width = 35;\n const height = 20;\n\n const innerHeight = 100\n const heightPadding = 5\n const unitHeight = 20;\n\n const barWidth = 20;\n const barSpacing = 8;\n return (\n \n 0 ? \"#21ba45\" : \"none\"}}\n />\n 1 ? \"#21ba45\" : \"none\"}}\n />\n 2 ? \"#21ba45\" : \"none\"}}\n />\n 3 ? \"#21ba45\" : \"none\"}}\n />\n \n )\n}\n\nconst SignalStrengthIcon = ({rssi}) => {\n // Signal strength | bars\n // <-100 dBm | 0 \n // -100 - -85 dBm | 1\n // -85 - -70 dBm | 2\n // -70 - -55 dBm | 3\n // >-55 dBm | 4\n let bars = 0;\n let description = \"Weak\"\n if (rssi <= -100) {\n bars = 0;\n description = \"Weak\"\n } else if (rssi <= -85) {\n bars = 1\n description = \"Weak\"\n } else if (rssi <= -70) {\n description = \"Medium\"\n bars = 2\n } else if (rssi <= -55) {\n description = \"Strong\"\n bars = 3\n } else {\n bars = 4\n description = \"Strong\"\n }\n return (\n \n \n \n )\n}\n\nconst NoiseStrengthImage = ({percent, color}) => {\n const width = 40\n const height = 15\n\n const split = width * clamp(percent, 1, 100) / 100;\n\n return (\n \n \n \n \n )\n}\n\nconst NoiseStrengthIllustration = ({nsd}) => {\n // 100% is lots of noise\n // 25% is not much noise\n const percent = nsd > -50 ? 100 :\n nsd > -75 ? 75 :\n nsd > -90 ? 50 :\n 25;\n const color = nsd > -75 ? \"#db2828\" :\n nsd > -90 ? \"#f2711c\" :\n \"#21ba45\";\n const desc = percent > 75 ? \"high\" :\n percent > 50 ? \"moderate\" :\n \"low\";\n\n return (\n \n \n \n )\n}\n\nexport { SignalStrengthIcon, NoiseStrengthIllustration }\n","import React, { Component } from 'react';\nimport { observer, inject } from 'mobx-react'\nimport { Table, Icon, Segment, Header } from 'semantic-ui-react'\nimport { Divider, Grid } from 'semantic-ui-react'\nimport { range } from 'd3-array'\nimport './Diagnostic.css'\nimport { GPSDetailsMaster, GPSDetailsLocator } from '../Components/GPSView'\nimport { superFetch } from '../lib/fetch'\nimport { formatDecimals } from '../lib/format'\nimport { Graph } from '../Components/DiagnosticGraph'\nimport PropTypes from 'prop-types';\nimport { HelpPopUp } from '../Components/HeplText'\nimport DiagnosticReport from '../Components/DiagnosticReport'\nimport { LEDButton } from '../Components/LEDButton';\nimport {SignalStrengthIcon, NoiseStrengthIllustration} from '../Components/SignalStrength';\n\nexport function BucketSampler() {\n // https://github.com/d3fc/d3fc-sample/blob/master/src/bucket.js\n var bucketSize = 10;\n\n var bucket = (data) => bucketSize <= 1\n ? data.map((d) => [d])\n : range(0, Math.ceil(data.length / bucketSize))\n .map((i) => data.slice(i * bucketSize, (i + 1) * bucketSize));\n\n bucket.bucketSize = function(x) {\n if (!arguments.length) {\n return bucketSize;\n }\n\n bucketSize = x;\n return bucket;\n };\n return bucket\n}\n\nfunction killInf(val) {\n // Remove negative infinity from the graph\n if (val < -1e9) {\n return -100\n }\n return val\n}\n\n\nclass DiagnosticGraph extends Component {\n render() {\n var ids = [\n [[\"r1\"], [\"#0000ff\"]],\n [[\"r2\"], [\"#00ff00\"]],\n [[\"r3\"], [\"#ff0000\"]],\n [[\"r4\"], [\"#000000\"]]\n ];\n //Note that the font is constant. Tee bigger the graph the smaller the font will seem.\n return(\n \n )\n }\n}\n\nfunction downsample(payload, x_scale) {\n // Downsample to 1 entry pr pixel in chart (if needed)\n //var dataPrPixel = payload.length / this.width // Downsample to number of pixels available (responsive)\n var dataPrPixel = payload.length / 400 // Downsample to fixed number of entries\n\n var r0 = payload.map(function(d) { return d[0] })\n var r1 = payload.map(function(d) { return d[1] })\n var r2 = payload.map(function(d) { return d[2] })\n var r3 = payload.map(function(d) { return d[3] })\n\n if (dataPrPixel > 1) {\n // Downsample with BucketSampler\n var bs = BucketSampler()\n var buckets = bs.bucketSize(dataPrPixel)\n\n r0 = buckets(r0).map(function (d) { return Math.max(...d) })\n r1 = buckets(r1).map(function (d) { return Math.max(...d) })\n r2 = buckets(r2).map(function (d) { return Math.max(...d) })\n r3 = buckets(r3).map(function (d) { return Math.max(...d) })\n } else {\n // Use data without downsampling\n dataPrPixel = 1;\n }\n\n var geometry = [[], [], [], []]\n for (var index = 0; index < r0.length; index++) {\n const px = index * dataPrPixel * x_scale /*+ x_offset*/\n geometry[0][index] = {px: px, py: killInf(r0[index])}\n geometry[1][index] = {px: px, py: killInf(r1[index])}\n geometry[2][index] = {px: px, py: killInf(r2[index])}\n geometry[3][index] = {px: px, py: killInf(r3[index])}\n }\n return geometry\n}\n\nclass DiagnosticGraphFetcher extends Component {\n constructor() {\n super()\n this.state = {\n graph: [],\n x_scale: 1,\n y_scale: 1,\n error: \"\",\n }\n }\n fetch = () => {\n superFetch('/api/graph')\n .then(data => {\n const graph = downsample(data.data, data.x_scale)\n this.setState({graph: graph, x_scale: data.x_scale, y_scale: data.y_scale, error: \"\"})\n })\n .catch(err => {\n console.log(\"Error\", err)\n this.setState({graph: [], error: err.toString()})\n })\n\n }\n componentDidMount() {\n this.fetch()\n this.interval = setInterval(this.fetch, 2*1000)\n }\n componentWillUnmount() {\n clearInterval(this.interval)\n }\n render() {\n if (this.state.error) {\n return (\n
No data available
\n )\n }\n return (\n
\n {this.state.graph.length > 0 && (\n \n )}\n
\n )\n\n }\n}\n\n\nconst ValidIcon = ({is_valid}) => {\n if (is_valid) {\n return (\n \n )\n }\n return (\n \n )\n}\n\nconst NoValue = -1000\n\nconst LocatorDetails = inject(\"acousticPositionStore\")(observer(({acousticPositionStore}) => {\n const pos = acousticPositionStore\n let _x = pos.x <= NoValue ? \"--\" : formatDecimals(pos.x, 2)\n let _y = pos.y <= NoValue ? \"--\" : formatDecimals(pos.y, 2)\n let _z = pos.z <= NoValue ? \"--\" : formatDecimals(pos.z, 2)\n let _std = pos.std <= NoValue ? \"--\" : formatDecimals(pos.std, 2)\n\n return (\n \n \n \n Forward (X)\n {_x} m\n \n\n \n Right (Y)\n {_y} m\n \n\n\n \n Depth (Z)\n {_z} m\n \n\n \n Estimated accuracy\n {_std} m \n \n\n \n Position valid\n \n \n\n \n
\n )\n}))\n\n\n\nconst ReceiverDetails = ({id, rssi, nsd, distance, valid}) => {\n let _rssi = rssi <= NoValue ? \"--\" : formatDecimals(rssi, 0)\n let _nsd = nsd <= NoValue ? \"--\" : formatDecimals(nsd, 0)\n let _distance = distance <= NoValue ? \"--\" : formatDecimals(distance, 2)\n return (\n \n {id+1}\n \n {_rssi} dBm \n \n \n \n {_nsd} dBm\n \n \n \n {_distance} m\n \n \n {valid ? (\n // Receiver valid\n \n ) : (\n // Receiver not valid\n \n )}\n \n \n )\n}\n\nReceiverDetails.propTypes = {\n id: PropTypes.number.isRequired,\n rssi: PropTypes.number.isRequired,\n nsd: PropTypes.number.isRequired,\n distance: PropTypes.number.isRequired,\n valid: PropTypes.bool.isRequired,\n}\n\nconst ReceiverOverview = inject(\"acousticPositionStore\")(observer(({acousticPositionStore}) => {\n const receivers = acousticPositionStore.getDiag()\n return (\n \n \n \n No. \n Signal strength \n Noise \n Distance \n Valid \n \n \n \n {receivers.map(d => (\n \n ))}\n\n \n
\n )\n}))\n\nfunction Diagnostic() {\n return (\n \n\n Diagnostic\n\n \n\n \n
Locator position
\n \n
\n\n \n
Receiver details
\n \n
\n
\n\n Acoustic signal view \n\n \n\n GPS positions\n\n \n \n
Locator GPS position
\n \n
\n\n \n
Topside housing GPS position
\n \n
\n
\n\n Hardware\n

Verify active connection to topside by clicking by flashing led on master electronic board.

\n \n\n Diagnostic report\n \n
\n )\n}\n\nexport default Diagnostic;\n","import { RoundDecimalPlaces } from '../lib/format'\n\nvar rules = {\n // Return true if valid, false if invalid\n between: (min, max) => {\n return function(value, convFactor, decimals) {\n const val = RoundDecimalPlaces(value / convFactor, decimals)\n return val <= max && val >=min\n }\n },\n numeric: () => {\n return function(val, convFactor, decimals) {\n return isNumeric(val)\n }\n },\n string: () => {\n return function(val, convFactor, decimals) {\n return (typeof val === 'string' || val instanceof String)\n }\n },\n}\n\nclass ErrorList {\n constructor() {\n this.list = {}\n }\n add(key, data) {\n if (this.list[key] === undefined) {\n this.list[key] = []\n }\n this.list[key].push(data)\n }\n first = (field) => {\n if (this.list[field] === undefined) {\n return false\n }\n let err = this.list[field]\n return err ? err : null\n }\n count = () => {\n let all = Object.keys(this.list)\n let count = all.reduce((acc, cur) => acc + this.list[cur].length, 0)\n return count\n }\n}\n\nfunction isNumeric(n) {\n let num = parseFloat(n)\n return !isNaN(num) && isFinite(num);\n}\n\nclass Validator {\n constructor(input, rules) {\n this.input = input\n this.rules = rules\n this.errors = new ErrorList()\n }\n passes = (convFactor=1) => {\n Object.keys(this.input).forEach(field => {\n let val = this.input[field]\n let rules = this.rules[field]\n if (!Array.isArray(rules)) {\n //return false\n throw new Error(\"Rules need to be an array\")\n }\n rules.forEach(rule => {\n let isValid = rule(val, convFactor)\n if (!isValid) {\n this.errors.add(field, \"Invalid\")\n }\n })\n });\n return this.errors.count() === 0\n }\n}\n\nexport { Validator, rules }\n","import React, { Component } from 'react';\nimport { Button } from 'semantic-ui-react'\n//import { PropTypes } from 'mobx-react';\n\nclass ButtonSelector extends Component {\n onChange = (e) => {\n this.props.onChange(e.target.name, e.target.value);\n e.preventDefault();\n }\n render() {\n return (\n \n {this.props.options.map(item => (\n \n ))}\n \n )\n }\n}\n\n/*\nButtonSelector.propTypes = {\n options: PropTypes.arrayOf(PropTypes.shape({\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]),\n description: PropTypes.string,\n })).isRequired,\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]).isRequired,\n onChange: PropTypes.func.isRequired,\n}\n*/\n\nexport default ButtonSelector;\n","import React, { Component } from 'react';\nimport { extendObservable, action, toJS, computed } from 'mobx'\nimport { Validator } from '../../lib/validator';\nimport PropTypes from 'prop-types';\nimport { Input, Form, Segment, Message, Icon } from 'semantic-ui-react'\nimport ButtonSelector from '../../Components/ButtonSelector'\nimport { HeaderWithHelp } from '../../Components//HeplText'\nimport { RoundDecimalPlaces } from '../../lib/format'\n\nclass GenericFormStore {\n constructor() {\n extendObservable(this, {\n getFlattenedValues: (valueKey = 'value') => {\n let data = {};\n let form = toJS(this.form).fields;\n Object.keys(form).forEach(key => {\n data[key] = form[key][valueKey]\n });\n return data\n },\n getFlattenedAbsoluteValues: (convFunc, decimals=-1) => {\n let data = {}\n let form = toJS(this.form).fields;\n Object.keys(form).forEach(key => {\n data[key] = parseFloat(form[key][\"value\"])\n if (typeof convFunc === \"function\") {\n data[key] = convFunc(data[key])\n }\n if (decimals > 0) {\n data[key] = RoundDecimalPlaces(data[key], decimals)\n }\n if (form[key][\"negated\"]) {\n data[key] = -data[key]\n }\n })\n return data\n },\n getFlattenedAbsoluteMetricValues: (decimals=-1) => {\n return this.getFlattenedAbsoluteValues(this.toMetric, decimals)\n },\n onFieldChange: action((field, value) => {\n this.form.fields[field].value = value;\n var validation = new Validator(\n this.getFlattenedValues('value'),\n this.getFlattenedValues('rule'));\n const factor = this.form.meta.unitFactor || 1.0\n const decimals = this.form.meta.unitDecimals || 3\n this.form.meta.isValid = validation.passes(factor, decimals);\n this.form.fields[field].error = validation.errors.first(field)\n }),\n\n onAbsoluteMetricFieldChange: action((field, value, decimals=-1) => {\n this.form.fields[field].negated = value < 0\n var val = value\n if (this.form.fields[field].convertUnit) {\n // Unit conversion is enabled for this value, lets convert it to user preferred value\n val = Math.abs(this.toUserPrefered(value))\n }\n if (decimals >= 0) {\n val = RoundDecimalPlaces(val, decimals)\n }\n this.onFieldChange(field, val)\n }),\n\n getAbsolute: (field) => {\n let value = parseFloat(this.form.fields[field].value)\n return this.form.fields[field].negated ? -value : value\n },\n\n getAbsoluteMetric: (field) => {\n return this.toMetric(this.getAbsolute(field))\n },\n\n toMetric: (value) => {\n const factor = this.form.meta.unitFactor || 1.0\n return value / factor\n },\n toUserPrefered: (value) => {\n const factor = this.form.meta.unitFactor || 1.0\n return value * factor\n },\n unitName: computed(() => {\n return this.form.meta.unitName || \"meter\"\n }),\n setError: action((errMsg) => {\n this.form.meta.error = errMsg\n }),\n })\n }\n}\n\nconst SimpleFormInput = ({error, ...props}) => (\n props.onChange(e.target.name, e.target.value)}\n />\n)\n\n\nSimpleFormInput.propTypes = {\n // Not possible to check for string or null\n //error: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n}\n\nconst FormInput = ({error, ...props}) => (\n \n props.onChange(e.target.name, e.target.value)}/>\n \n)\n\n\nFormInput.propTypes = {\n // Not possible to check for string or null\n //error: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n}\n\nclass Configurator extends Component {\n render() {\n const { heading, help, options, value, onChange } = this.props\n return (\n
\n \n \n {this.props.children}\n
\n )\n }\n}\n\nConfigurator.propTypes = {\n options: PropTypes.arrayOf(PropTypes.shape({\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]),\n description: PropTypes.string,\n })).isRequired,\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]).isRequired,\n onChange: PropTypes.func.isRequired,\n heading: PropTypes.string.isRequired,\n help: PropTypes.string.isRequired,\n}\n\n\n\nconst FormSetupError = ({header, children}) => (\n \n \n {header}\n

\n {children}\n

\n
\n
\n)\n\nconst FormIsLoading = () => (\n \n \n \n \n Hang on\n

Loading data

\n
\n
\n
\n)\n\n// Simplify setting preset options for the GenericFormStore\nfunction remap(value, desc) {\n return {value: value, description: desc, }\n}\n\n\nexport { GenericFormStore, SimpleFormInput, FormInput, Configurator, FormSetupError, FormIsLoading, remap }\n","import { extendObservable, computed, action } from 'mobx'\nimport { GenericFormStore, remap } from './FormStore'\nimport { rules } from '../../lib/validator'\n\nconst channelSupported = {\n \"a1\": [remap(\"5014\", \"1\"), remap(\"5015\", \"2\"), remap(\"5016\", \"3\"), remap(\"5017\", \"4\"),\n remap(\"5018\", \"5\"), remap(\"5019\", \"6\"), remap(\"5020\", \"7\")],\n \"d1\": [remap(\"5014\", \"1\"), remap(\"5015\", \"2\"), remap(\"5016\", \"3\"), remap(\"5017\", \"4\"),\n remap(\"5018\", \"5\"), remap(\"5019\", \"6\"), remap(\"5020\", \"7\")],\n //\"s1\": [remap(\"16\", \"16\"), remap(\"17\", \"17\"), remap(\"18\", \"18\")],\n \"u1\": [remap(\"5014\", \"1\"), remap(\"5015\", \"2\"), remap(\"5016\", \"3\"), remap(\"5017\", \"4\"),\n remap(\"5018\", \"5\"), remap(\"5019\", \"6\"), remap(\"5020\", \"7\")],\n \"s2\": [remap(\"5014\", \"1\"), remap(\"5015\", \"2\"), remap(\"5016\", \"3\"), remap(\"5017\", \"4\"),\n remap(\"5018\", \"5\"), remap(\"5019\", \"6\"), remap(\"5020\", \"7\")],\n \"p2\": [remap(\"5014\", \"1\"), remap(\"5015\", \"2\"), remap(\"5016\", \"3\"), remap(\"5017\", \"4\"),\n remap(\"5018\", \"5\"), remap(\"5019\", \"6\"), remap(\"5020\", \"7\")],\n //\"p1\": [remap(\"4014\", \"4014\"), remap(\"4015\", \"4015\"), remap(\"4016\", \"4016\"), remap(\"4017\", \"4017\"),\n // remap(\"4018\", \"4018\"), remap(\"4019\", \"4019\"), remap(\"4020\", \"4020\"),],\n}\n\nclass ConfigStore extends GenericFormStore {\n constructor() {\n super()\n extendObservable(this, {\n form: {\n fields: {\n locator_type: {\n value: \"u1\",\n error: null,\n //options: [remap(\"d1\", \"Locator-D1\"), remap(\"a1\", \"Locator-A1\"), remap(\"s1\", \"Locator-S1\"), remap(\"u1\", \"Locator-U1\"), remap(\"p1\", \"Locator-P1\")],\n options: [remap(\"d1\", \"Locator-D1\"), remap(\"a1\", \"Locator-A1\"), remap(\"u1\", \"Locator-U1\"), remap(\"s2\", \"Locator-S2\"), remap(\"p2\", \"Locator-P2\")],\n rule: [],\n //rule: 'required',\n needsExternalDepth: computed(() => {\n return (this.form.fields.locator_type.value === \"a1\") || (this.form.fields.locator_type.value === \"s2\") || (this.form.fields.locator_type.value === \"p2\")\n }),\n },\n channel: {\n value: \"2\",\n error: null,\n options: [\n //remap(\"13\", \"Bliss (13)\"), remap(\"14\", \"Clarity (14)\"), remap(\"15\", \"Destiny (15)\")\n //remap(\"16\", \"Fixed B (16)\"), remap(\"17\", \"Fixed C (17)\"), remap(\"18\", \"Fixed D (18)\")\n //remap(\"16\", \"16\"), remap(\"17\", \"17\"), remap(\"18\", \"18\")\n remap(\"5014\", \"1\"), remap(\"5015\", \"2\"), remap(\"5016\", \"3\"), remap(\"5017\", \"4\"),\n remap(\"5018\", \"5\"), remap(\"5019\", \"6\"), remap(\"5020\", \"7\")\n\n // TODO: Channels added for testing, remove before release\n //remap(\"4014\", \"4014\"), remap(\"4015\", \"4015\")\n //remap(\"4016\", \"4016\"), remap(\"4017\", \"4017\"), remap(\"4018\", \"4018\")\n //remap(\"4019\", \"4019\"), remap(\"4020\", \"4020\")\n ],\n rule: [],\n },\n vehicle_imu: {\n value: \"disabled\",\n error: null,\n options: [remap(\"enabled\", \"Enabled\"), remap(\"disabled\", \"Disabled\")],\n rule: [],\n hasFeature: false,\n },\n gps: {\n value: \"onboard\",\n options: [remap(\"onboard\", \"On-board\"), remap(\"static\", \"Static\"), remap(\"external\", \"External\")],\n error: null,\n rule: [],\n },\n compass: {\n value: \"onboard\",\n options: [remap(\"onboard\", \"On-board\"), remap(\"static\", \"Static\"), remap(\"external\", \"External\")],\n error: null,\n rule: [],\n },\n environment: {\n value: \"reflective\",\n options: [remap(\"reflective\", \"Reflective\"), remap(\"openwater\", \"Open water\")],\n error: null,\n rule: [],\n },\n static_lat: {\n value: 63.71,\n options: [],\n error: null,\n rule: [rules.between(-90, 90)],\n //rule: 'required|numeric|between:-90,90'\n },\n static_lon: {\n value: 10.22,\n options: [],\n error: null,\n rule: [rules.between(-180, 180)],\n //rule: 'required|numeric|between:-180,180'\n },\n static_orientation: {\n value: 42,\n options: [],\n error: null,\n rule: [rules.between(0, 360)],\n //rule: 'required|numeric|between:0,360'\n },\n speed_of_sound: {\n value: \"1475\",\n options: [remap(\"1475\", \"1475 m/s\"), remap(\"1500\", \"Custom\")],\n error: null,\n rule: [rules.between(1000, 2000)],\n },\n external_pps: {\n value: \"disabled\",\n error: null,\n options: [remap(\"enabled\", \"Enabled\"), remap(\"disabled\", \"Disabled\")],\n rule: [],\n hasFeature: false,\n },\n antenna: {\n value: \"enabled\",\n error: null,\n options: [remap(\"enabled\", \"Enabled\"), remap(\"disabled\", \"Disabled\")],\n rule: [],\n hasFeature: false,\n },\n },\n meta: {\n isValid: true,\n error: null,\n },\n },\n onFieldChangeWrapper: action((field, value) => {\n this.onFieldChange(field, value)\n if (field === \"locator_type\") {\n this.form.fields.channel.options = channelSupported[value]\n this.form.fields.channel.value = this.form.fields.channel.options[3].value\n }\n }),\n })\n }\n}\n\nexport { ConfigStore }\n","\nfunction clamp(value, min, max) {\n // Clamp value to be within min/max\n if (isNaN(value)) { return 0 }\n if (value > max) { return max }\n if (value < min) { return min }\n return value\n}\n\nfunction wrap360(angle) {\n if (angle < 0) {\n angle += 360\n }\n angle = angle % 360\n return angle\n}\n\nexport { clamp, wrap360 }\n","import GeographicLib from 'geographiclib'\nimport { latLng } from 'leaflet'\nimport { PropTypes} from 'prop-types'\nimport { wrap360 } from '../../lib/helpers'\n\n// Convert XY coordinates to polar coordinates (angle, distance)\nfunction convertXYToPolarCoords(polygon) {\n return polygon.map((xy) => convertXYToPolar(xy))\n}\n\nconvertXYToPolarCoords.propTypes = {\n polygon: PropTypes.shape({\n x: PropTypes.number.isRequired,\n y: PropTypes.number.isRequired\n })\n}\n\nfunction convertXYToPolar(xy) {\n var an = Math.atan2(xy[1], xy[0])\n\n return {angle: an * 360 / (2*Math.PI), distance: Math.sqrt(xy[0]*xy[0] + xy[1]*xy[1])}\n}\n\nconvertXYToPolar.propTypes = {\n xy: PropTypes.shape({\n x: PropTypes.number.isRequired,\n y: PropTypes.number.isRequired\n })\n}\n\nfunction lefletToPolar(latlng) {\n var an = Math.atan2(latlng.lng, latlng.lat)\n an = an * 360 / (2*Math.PI)\n\n an = wrap360(an)\n\n return {angle: an, distance: Math.sqrt(latlng.lat*latlng.lat + latlng.lng*latlng.lng)}\n}\n\nlefletToPolar.propTypes = {\n latlng: PropTypes.shape({\n lat: PropTypes.number.isRequired,\n lng: PropTypes.number.isRequired\n })\n}\n\nfunction polarToXY(angle, radius) {\n var rad = (angle* (2*Math.PI) / 360)\n var x = radius * Math.cos(rad)\n var y = radius * Math.sin(rad)\n return {x: x, y: y}\n}\n\npolarToXY.propTypes = {\n angle: PropTypes.number.isRequired,\n radius: PropTypes.number.isRequired\n}\n\nfunction polarToLeflet(angle, radius) {\n var rad = (angle* (2*Math.PI) / 360)\n var x = radius * Math.cos(rad)\n var y = radius * Math.sin(rad)\n return latLng(x, y)\n}\n\n\n// Add a distance in meter at the given angle to a latlon and return corresponding latlon\nfunction offsetLatLonByDistanceAngle(center, angle, distance) {\n const geod = GeographicLib.Geodesic.WGS84;\n\n let an = wrap360(angle)\n\n let r = geod.Direct(center.lat, center.lng, an, distance);\n return {lat: r.lat2, lng: r.lon2}\n}\n\noffsetLatLonByDistanceAngle.propTypes = {\n center: PropTypes.number.isRequired,\n angle: PropTypes.number.isRequired,\n distance: PropTypes.number.isRequired,\n}\n\n// Convert XY values to Leaflet map CRS coordinate system coordinates\nfunction xyToLeflet(x, y) {\n return latLng(x, y)\n}\n\n// Leaflet map CRS coordinate system coordinates to XY\nfunction leafletToXY(latlng) {\n return [latlng.lat, latlng.lng]\n}\n\n\nexport { convertXYToPolar, convertXYToPolarCoords, offsetLatLonByDistanceAngle, xyToLeflet, leafletToXY, polarToXY, polarToLeflet, lefletToPolar }\n","import React, { Component } from 'react';\nimport { Icon, Responsive } from 'semantic-ui-react'\nimport { observer, inject } from 'mobx-react'\nimport { PropTypes } from 'prop-types';\n\nconst ColorStatusIcon = ({icon, status, content, title}) => {\n var color = \"red\"\n var quality = \"poor\"\n var icon_name = \"close\"\n if (status >= 1) {\n color = \"yellow\"\n quality = \"fair\"\n }\n if (status > 2) {\n color = \"green\"\n quality = \"good\"\n icon_name = icon;\n }\n let help = title + \" \" + quality;\n return {content} \n}\n\nconst BatteryIcon = ({percent}) => {\n var icon = \"battery zero\"\n var color = \"green\"\n if (percent >= 80) {\n icon = \"battery four\"\n } else if (percent >= 60) {\n icon = \"battery three\"\n } else if (percent >= 40) {\n icon = \"battery two\"\n } else if (percent >= 20) {\n icon = \"battery one\"\n color = \"yellow\"\n } else {\n icon = \"battery zero\"\n color = \"red\"\n }\n return (U1 )\n}\n\nconst StatusBar = inject(\"gpsimuStore\")(observer(class StatusBar extends Component {\n render() {\n const {gps, imu, battery} = this.props.gpsimuStore\n return (\n \n \n \n {battery >= 0 && ()}\n \n )\n }\n}))\n\nStatusBar.propTypes = {\n minWidth: PropTypes.number.isRequired,\n}\n\n\nconst ShowProductNameAndVersion = inject(\"aboutInfoStore\")(observer(({aboutInfoStore, minWidth}) => (\n \n {isNaN(process.env.REACT_APP_UGPS_MAX_RANGE) ? (\n DON'T SHIP IT, range is not a number!\n ):(\n
\n Underwater GPS G2\n {aboutInfoStore.hasVersionShort && (({aboutInfoStore.versionShort} R{process.env.REACT_APP_UGPS_MAX_RANGE}))}\n
\n )\n }\n
\n)))\n\nShowProductNameAndVersion.propTypes = {\n minWidth: PropTypes.number.isRequired,\n}\n\nexport { StatusBar, ColorStatusIcon, BatteryIcon, ShowProductNameAndVersion }\n","import React, { Component } from 'react';\nimport { Button, Checkbox, Icon } from 'semantic-ui-react'\nimport { observer, inject } from 'mobx-react'\nimport Control from 'react-leaflet-control'\nimport { PropTypes } from 'prop-types';\nimport logo from '../../waterlinked_logo.svg';\nimport { xyToLeflet } from './geohelpers'\nimport compass from './compass.svg'\nimport { ColorStatusIcon, BatteryIcon } from '../StatusBar'\nimport { RoundDecimalPlaces, formatDecimals } from '../../lib/format'\nimport './MapControls.css'\n\n// Viewers and controllers used in both maps\n\nconst WaterlinkedLogoControl = ({position}) => (\n \n \n \"Water\n \n \n)\n\nWaterlinkedLogoControl.propTypes = {\n position: PropTypes.string,\n}\n\nconst GridSizeView = ({position, value, unit}) => (\n \n
\n

\n Grid size: {value} ({unit})\n

\n
\n
\n)\n\nGridSizeView.propTypes = {\n position: PropTypes.string,\n unit: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired, // Why is this a string??\n}\n\nconst GridSizeControl = inject(\"preferenceStore\")(inject(\"genericConfigStore\")(observer(class GridSizeControl extends Component{\n render() {\n const gridSize = this.props.preferenceStore.getGridSize(this.props.genericConfigStore.ranges.radius)\n let converter = this.props.preferenceStore.converter\n return (\n \n )\n }\n})))\n\nGridSizeControl.propTypes = {\n position: PropTypes.string,\n gridSize: PropTypes.number,\n converter: PropTypes.objectOf()\n}\n\nconst AcousticPositionControl = inject(\"preferenceStore\")(inject(\"acousticPositionStore\")(observer(class AcousticPositionControl extends Component {\n render() {\n const { x, y, z } = this.props.acousticPositionStore\n let converter = this.props.preferenceStore.converter\n\n const NoValue = -1000\n let _x = x <= NoValue ? \"--\" : formatDecimals(converter.toUPLongFromMetric(x), 2)\n let _y = y <= NoValue ? \"--\" : formatDecimals(converter.toUPLongFromMetric(y), 2)\n let _z = z <= NoValue ? \"--\" : formatDecimals(converter.toUPLongFromMetric(z), 2)\n\n return (\n \n
\n

X: {_x} \n Y: {_y} \n Depth {_z} ({converter.nameLong()})\n

\n
\n
\n )\n }\n})))\n\nAcousticPositionControl.propTypes = {\n position: PropTypes.string,\n x: PropTypes.number,\n y: PropTypes.number,\n z: PropTypes.number,\n converter: PropTypes.objectOf()\n}\n\nclass CenterOnLocatorControl extends Component {\n handleClick = (e) => {\n const {lat, lng} = this.props\n this.props.onClick({lat: lat, lng: lng})\n }\n render() {\n const position = this.props.position || \"bottomleft\"\n const {lat, lng} = this.props\n if (lat === 0 && lng === 0) {\n return null\n }\n return (\n \n
\n \n
\n
\n )\n }\n}\n\nCenterOnLocatorControl.propTypes = {\n position: PropTypes.string,\n lat: PropTypes.number.isRequired,\n lng: PropTypes.number.isRequired,\n onClick: PropTypes.func.isRequired,\n}\n\n\nconst WaterTemperatureView = ({waterTemp, waterTempSymbol}) => {\n let temp = RoundDecimalPlaces(waterTemp, 1)\n return (\n  {temp}°{waterTempSymbol}\n )\n}\n\n\nconst AvailablePositions = ({position, available }) => (\n \n
\n {available}\n
\n
\n)\n\n\nconst GPSIMUBatteryTemperatureView = ({position, gps, imu, battery, waterTemp, waterTempSymbol}) => (\n \n
\n \n \n {battery >= 0 && ()}\n {waterTemp > -271 && ()}\n
\n
\n)\n\nGPSIMUBatteryTemperatureView.propTypes = {\n position: PropTypes.string,\n gps: PropTypes.number.isRequired,\n imu: PropTypes.number.isRequired,\n battery: PropTypes.number.isRequired,\n waterTemp: PropTypes.number.isRequired,\n waterTempSymbol: PropTypes.string.isRequired,\n}\n\nconst GPSIMUBatteryTemperatureControl = inject(\"preferenceStore\")(inject(\"temperatureStore\")(inject(\"gpsimuStore\")(observer(class GPSIMUBatteryTemperatureControl extends Component {\n render() {\n const {position} = this.props\n const {gps, imu, battery} = this.props.gpsimuStore\n const waterTemp = this.props.preferenceStore.converter.metricToUPTemperature(this.props.temperatureStore.water)\n const waterTempSymbol = this.props.preferenceStore.converter.temperatureSymbol;\n return(\n \n )\n }\n}))))\n\nGPSIMUBatteryTemperatureControl.propTypes = {\n position: PropTypes.string,\n}\n\n// Global map specific viewers with controllers\n\n\nconst GlobalAvailablePositionsControl = inject(\"globalPositionStore\")(observer(class GlobalAvailablePositionsControl extends Component {\n onChange= (e, data) => {\n const {globalPositionStore} = this.props\n //debugger\n globalPositionStore.setShow(data.label, data.checked)\n }\n\n render() {\n const {position, globalPositionStore} = this.props\n\n var update = globalPositionStore.update\n\n const available = []\n\n for (var key in globalPositionStore.positions_dict) {\n const positionStore = globalPositionStore.positions_dict[key]\n const checked = globalPositionStore.getShow(key)\n available.push(\n
\n \n
\n )\n }\n\n if (available.length < 2) {\n // Only 1 thing to select, nothing reason to show this\n return null\n }\n\n return(\n \n )\n }\n}))\n\nconst LocatorCenterOnLocationControl = inject(\"globalPositionStore\")(observer(class LocatorCenterOnLocationControl extends Component {\n render() {\n const { lat, lng } = this.props.globalPositionStore\n return \n }\n}))\n\nLocatorCenterOnLocationControl.propTypes = {\n onClick: PropTypes.func.isRequired,\n lat: PropTypes.number,\n lng: PropTypes.number,\n}\n\n// Acoustic map specific viewers with controllers\n\nconst AcousticAvailablePositionsControl = inject(\"acousticPositionStore\")(observer(class AcousticAvailablePositionsControl extends Component {\n onChange= (e, data) => {\n const {acousticPositionStore} = this.props\n //debugger\n acousticPositionStore.setShow(data.label, data.checked)\n }\n\n render() {\n const {position, acousticPositionStore} = this.props\n\n var update = acousticPositionStore.update\n\n const available = []\n\n for (var key in acousticPositionStore.positions_dict) {\n const positionStore = acousticPositionStore.positions_dict[key]\n const checked = acousticPositionStore.getShow(key)\n available.push(
\n
)\n }\n\n if (available.length < 2) {\n // Only 1 thing to select, nothing reason to show this\n return null\n }\n\n return(\n \n )\n }\n}))\n\nconst CompassView = ({position, orientation}) => (\n \n \n \"Compass\"\n \n \n)\n\nCompassView.propTypes = {\n position: PropTypes.string,\n orientation: PropTypes.number.isRequired,\n}\n\nconst AcousticCompassControl = (inject(\"masterPositionStore\")(observer(class AcousticCompassControl extends Component {\n render(){\n // Acoustic view is oriented with Y up, so compass must be compensated to point the right way\n const compensatedOrientation = 360 - this.props.masterPositionStore.orientation\n return(\n \n )\n }\n})))\n\nAcousticCompassControl.propTypes = {\n position: PropTypes.string,\n orientation: PropTypes.number,\n}\n\nconst AcousticCenterOnLocationControl = inject(\"acousticPositionStore\")(observer(class AcousticCenterOnLocationControl extends Component {\n render() {\n const { x, y } = this.props.acousticPositionStore\n const position = xyToLeflet(x, y)\n return \n }\n}))\n\nAcousticCenterOnLocationControl.propTypes = {\n onClick: PropTypes.func.isRequired,\n x: PropTypes.number,\n y: PropTypes.number,\n}\n\n\n// Lat/lon with 6 decimal give ~10cm accuracy\nconst LatitudeLongitudeView = ({position, lat, lng}) => (\n \n
\n {RoundDecimalPlaces(lat, 6)} \n {RoundDecimalPlaces(lng, 6)}\n
\n
\n)\n\nconst LatitudeLongitudeControl = inject(\"globalPositionStore\")(inject(\"preferenceStore\")(observer(class LatitudeLongitudeControl extends Component {\n render() {\n if (!this.props.preferenceStore.latLngVisible) {\n return null\n }\n const { lat, lng } = this.props.globalPositionStore\n return \n }\n})))\n\n\nLatitudeLongitudeControl.propTypes = {\n position: PropTypes.string,\n}\n\n\nexport { WaterlinkedLogoControl, AcousticPositionControl, AcousticCenterOnLocationControl,\n LocatorCenterOnLocationControl, AcousticCompassControl, GPSIMUBatteryTemperatureControl,\n GPSIMUBatteryTemperatureView, GridSizeControl, GridSizeView, CompassView, CenterOnLocatorControl,\n LatitudeLongitudeControl, AcousticAvailablePositionsControl, GlobalAvailablePositionsControl,\n}\n","import React, { Component } from 'react';\nimport { observer, inject } from 'mobx-react'\nimport { Map, TileLayer, Marker, Popup } from 'react-leaflet'\nimport { Button, Modal, Icon } from 'semantic-ui-react'\nimport { PropTypes } from 'prop-types';\nimport { WaterlinkedLogoControl } from './MapControls'\nimport Control from 'react-leaflet-control'\n\n\nconst SetMasterPositionControl = inject(\"masterPositionStore\")(observer(class SetMasterPositionControl extends Component {\n handleClick = (e) => {\n // Leaflet gives lat and lng outside +-180\n // Need to adjust\n let lat = this.props.masterPositionStore.lat % 180\n let lng = this.props.masterPositionStore.lng % 90\n this.props.onPositionChange({lat: lat, lng: lng})\n }\n render() {\n const position = this.props.position || \"bottomleft\"\n const { lat, lng } = this.props.masterPositionStore\n if (lat === 0 && lng === 0) {\n return null\n }\n return (\n \n \n \n \n \n )\n }\n}))\n\nSetMasterPositionControl.propTypes = {\n position: PropTypes.string,\n}\n\nconst MapPositionSelector = inject(\"masterPositionStore\")(observer(class MapPositionSelector extends Component {\n state = {\n latlng: {\n lat: this.props.lat,\n lng: this.props.lng,\n },\n zoom: 13,\n }\n\n handleClick = (e) => {\n this.handlePositionChange(e.latlng)\n }\n\n handlePositionChange = (latlng) => {\n console.log(\"Set position to\", latlng)\n this.setState({\n latlng: latlng,\n zoom: this.refs.map.leafletElement.locate().getZoom(),\n })\n console.log(\"Onstore\")\n this.props.onStorePosition(latlng.lat, latlng.lng)\n }\n\n render() {\n return (\n } closeIcon closeOnRootNodeClick={true}>\n Click to set static position\n \n \n \n OpenStreetMap contributors\"\n url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\n />\n \n \n \n \n Position to use\n \n \n \n \n \n \n )\n }\n}))\n\nMapPositionSelector.propTypes = {\n lat: PropTypes.number,\n lng: PropTypes.number,\n}\n\nexport { MapPositionSelector, SetMasterPositionControl }","import React, { Component } from 'react';\nimport { Button, Icon, Message } from 'semantic-ui-react'\nimport { PropTypes } from 'prop-types';\n\nclass ApplyFeedbackButton extends Component {\n render() {\n const { onClick, type, disabled, isStoring, storeSuccess, storeFailure } = this.props\n return (\n
\n \n {storeFailure && (\n Failed to store\n

{storeFailure}

\n
\n )}\n
\n )\n }\n}\n\nApplyFeedbackButton.propTypes = {\n type: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n disabled: PropTypes.bool.isRequired,\n isStoring: PropTypes.bool.isRequired,\n storeSuccess: PropTypes.bool.isRequired,\n storeFailure: PropTypes.string.isRequired,\n}\n\nexport default ApplyFeedbackButton;\n","import React from 'react';\nimport { Icon } from 'semantic-ui-react'\n\nclass ExpandableSettings extends React.Component {\n state = { expanded: false }\n\n toggleExpanded = (e) => {\n this.setState({expanded: !this.state.expanded})\n }\n\n render() {\n const icon = (this.state.expanded ? \"angle double up\" : \"angle double down\")\n return (\n
\n

Advanced settings

\n {this.state.expanded && (this.props.children)}\n
\n )\n }\n}\n\nexport { ExpandableSettings }\n","import React, { useState } from 'react';\nimport { Icon, Popup, Button } from 'semantic-ui-react'\nimport axios from \"axios\";\n\nconst FactoryResetButton = () => {\n const [isActive, setIsActive] = useState(false)\n const [isSubmitFail, setIsSubmitFail] = useState(false)\n\n const onClick = () => {\n if (isActive) { return }\n setIsSubmitFail(false)\n setIsActive(true)\n axios.post(\"/api/v1/about/factoryreset\").then(() => {\n // Resetting\n setTimeout(() => {\n setIsActive(false)\n }, 1000)\n }).catch((e) => {\n console.log(\"Error\", e.response.data.error)\n setIsActive(false)\n setIsSubmitFail(true)\n })\n }\n\n return (\n \n }\n content={\n
\n Warning: All settings including network settings, and points of interest will be lost. Are you sure? Actions will apply after reboot of system.\n \n
\n }\n on='click'\n position='right center'\n />\n )\n}\n\nexport{ FactoryResetButton }\n","function TimeoutError() {}\nTimeoutError.prototype = new Error()\n\nfunction ensureStoreHasLoaded(store, timeout=2000, pollInterval=50) {\n return new Promise(function (resolve, reject) {\n (function waitForStore(_timeout){\n if (_timeout < 1) return reject(new TimeoutError())\n if (store.hasLoaded) return resolve();\n setTimeout(waitForStore.bind(null, _timeout-1), pollInterval);\n })(timeout / pollInterval);\n });\n}\n\nexport { ensureStoreHasLoaded, TimeoutError }\n","import React, { Component } from 'react';\nimport { Segment, Header, Message } from 'semantic-ui-react'\nimport { Link } from 'react-router-dom'\nimport { observer, inject } from 'mobx-react'\nimport { FormInput, Configurator, FormSetupError, FormIsLoading, remap } from '../Stores/FormStores/FormStore'\nimport { ConfigStore } from '../Stores/FormStores/Settings'\nimport { MapPositionSelector } from '../Components/Map/MapPositionSelector'\nimport ApplyFeedbackButton from '../Components/ApplyFeedbackButton'\nimport { ExpandableSettings } from '../Components/ExpandableSettings'\nimport { FactoryResetButton } from '../Components/FactoryResetButton';\nimport { ensureStoreHasLoaded, TimeoutError } from '../Stores/ensure'\nimport './Settings.css'\n\n\nconst SetCurrentStaticPositionButton = inject(\"masterPositionStore\")(observer(class SetCurrentStaticPositionButton extends Component {\n setPos = (lat, lng) => {\n console.log(\"Storing position\", lat, lng)\n this.props.form.fields.static_lat.value = lat\n this.props.form.fields.static_lon.value = lng\n }\n render() {\n const lat = this.props.form.fields.static_lat.value\n const lng = this.props.form.fields.static_lon.value\n return (\n \n )\n }\n}))\n\n\nconst ConfigurationForm = observer(class ConfigurationForm extends Component {\n render() {\n const {form, onChange} = this.props;\n return (\n
\n \n

Adjust settings below, then click on the button to store

\n {}} // Not used\n disabled={!form.meta.isValid || this.props.isStoring || this.props.storeSuccess}\n isStoring={this.props.isStoring}\n storeSuccess={this.props.storeSuccess}\n storeFailure={form.meta.error ? form.meta.error : \"\"}\n />\n
\n\n \n
\n\n \n\n {form.fields.locator_type.needsExternalDepth && (\n \n External input needed\n

\n The Locator you have selected does not provide depth measurements, so you will need to provide depth data to the system in order for the positioning to work correctly.\n

\n

\n External depth data will need to be provided via the HTTP interface described in API Specification\n

\n
\n )}\n\n \n {/*\n Removed until we need it!\n \n */}\n {process.env.REACT_APP_UGPS_FEATURES_ENABLED ? (\n
\n \n\n {form.fields.speed_of_sound.value !== \"1475\" && (\n \n )}\n
\n ):(\n \n )}\n\n\n \n \n\n \n
\n \n\n {form.fields.gps.value === \"static\" && (\n
\n \n\n \n\n \n
\n )}\n\n {form.fields.gps.value === \"external\" && (\n \n External input needed\n

\n External compass data will need to be provided via the HTTP interface described in API Specification\n

\n
\n )}\n\n \n\n {form.fields.compass.value === \"static\" && (\n \n )}\n\n {form.fields.compass.value === \"external\" && (\n \n External input needed\n

\n External compass data will need to be provided via the HTTP interface described in API Specification\n

\n
\n )}\n\n {form.fields.compass.value === \"onboard\" && (\n
\n Onboard IMU calibration\n
\n )}\n \n \n \n )\n }\n submit = (event) => {\n event.preventDefault();\n this.props.onSubmit()\n }\n })\n\n\nlet configStore = new ConfigStore()\n\nconst GenericConfigurationForm = inject(\"genericConfigStore\")(observer(class GenericConfigurationForm extends Component {\n state = {\n isStoring: false,\n storeSuccess: false,\n isSettingUp: true,\n setupError: false,\n }\n reset() {\n let gcs = this.props.genericConfigStore\n let form = configStore.form\n\n // Set locator in a way that changes the channels available\n configStore.onFieldChangeWrapper('locator_type', gcs.locator_type)\n // Then set channel\n form.fields.channel.value = String(gcs.channel)\n form.fields.gps.value = gcs.gps\n form.fields.static_lat.value = gcs.static_lat\n form.fields.static_lon.value = gcs.static_lon\n form.fields.speed_of_sound.value = gcs.speed_of_sound\n form.fields.compass.value = gcs.compass\n form.fields.static_orientation.value = gcs.static_orientation\n form.fields.vehicle_imu.value = gcs.vehicle_imu\n form.fields.external_pps.value = gcs.external_pps\n form.fields.environment.value = gcs.environment\n form.fields.antenna.value = gcs.antenna\n }\n componentWillReceiveProps() {\n console.log(\"Reset config form: Props\")\n this.reset()\n }\n componentDidMount() {\n console.log(\"Reset config form: Mount\")\n ensureStoreHasLoaded(this.props.genericConfigStore)\n .then(() => {\n console.log(\"Store loaded, resetting\")\n this.reset()\n this.setState({isSettingUp: false})\n }).catch((err) => {\n this.setState({isSettingup: false, setupError: \"Error getting values\"})\n if (err instanceof TimeoutError) {\n console.log(\"Timeout while waiting for store\", err)\n } else {\n throw err\n }\n })\n }\n render() {\n if (this.state.isSettingUp) {\n return ()\n }\n if (this.state.setupError) {\n return (Error getting form values)\n }\n return (\n \n )\n }\n onSubmitForm = () => {\n this.setState({storeSuccess: false, isStoring: true})\n let values = configStore.getFlattenedValues()\n console.log('submitted', configStore.getFlattenedValues())\n let gcs = this.props.genericConfigStore\n\n gcs.channel = parseInt(values.channel, 10)\n gcs.gps = values.gps\n gcs.static_lat = parseFloat(values.static_lat)\n gcs.static_lon = parseFloat(values.static_lon)\n gcs.speed_of_sound = values.speed_of_sound\n gcs.compass = values.compass\n gcs.static_orientation = parseFloat(values.static_orientation)\n gcs.locator_type = values.locator_type\n gcs.vehicle_imu = values.vehicle_imu\n gcs.external_pps = values.external_pps\n gcs.environment = values.environment\n gcs.antenna = values.antenna\n\n configStore.setError(null)\n gcs.store().then(() => {\n this.setState({storeSuccess: true, isStoring: false})\n setTimeout(() => {\n this.setState({storeSuccess: false})\n }, 1000)\n }).catch((e) => {\n this.setState({storeSuccess: false, isStoring: false})\n configStore.setError(e.toString())\n })\n }\n}))\n\n\nconst UserPreferenceForm = inject(\"preferenceStore\")(observer(class UserPreferenceForm extends Component {\n onChange = (key, val) => {\n const preference = this.props.preferenceStore\n console.log(\"Change user preference\", key, val)\n if (key === \"metric\") {\n preference.setUnit(val)\n }\n if (key === \"showBoat\") {\n preference.setBoatVisibility(val === \"show\")\n }\n if (key === \"showLatLng\") {\n preference.setLatLngVisible(val === \"show\")\n }\n\n }\n render() {\n const preference = this.props.preferenceStore\n return (\n \n
\n\n

User preferences are stored in your web browser and are automatically applied.

\n \n\n \n\n \n\n \n )\n }\n}))\n\nconst AdvancedLocatorSettings = observer(class AdvancedLocatorSettings extends Component {\n render() {\n const { form, onChange } = this.props\n /* Hide advanced settings if one of the feature are enable */\n if (!form.fields.vehicle_imu.hasFeature) {\n return null;\n }\n return (\n \n {form.fields.vehicle_imu.hasFeature &&\n \n }\n {form.fields.vehicle_imu.hasFeature && form.fields.vehicle_imu.value === \"enabled\" && (\n \n External input needed\n

\n Vehicle IMU data will need to be provided via the HTTP interface described in API Specification\n

\n
\n )}\n
\n )\n }\n})\n\nconst AdvancedTopSideSettings = observer(class AdvancedTopSideSettings extends Component {\n render() {\n const { form, onChange } = this.props\n return (\n \n {form.fields.external_pps.hasFeature &&\n \n }\n
\n Network configuration\n
\n\n
\n WiFi configuration\n
\n\n
\n Click icon to reset all settings to factory defaults.\n
\n\n
\n )\n }\n})\n\nclass Settings extends Component {\n render() {\n return (\n \n \n \n \n )\n }\n}\n\nexport default Settings;\n","import React, { Component } from 'react';\nimport { PropTypes } from 'prop-types';\nimport { Polygon } from 'react-leaflet'\nimport { xyToLeflet, convertXYToPolar, offsetLatLonByDistanceAngle } from './geohelpers'\n\nfunction generateBoat(length, width) {\n // Generate boat shape\n // 4\n //\n // 5 3\n //\n // 1 2\n let points = [\n [0, 0],\n [0, width],\n [3*length/4, width],\n [length, width/2],\n [3*length/4, 0],\n ]\n // Center points before returning\n return points.map(d => [d[0] - length / 2, width / 2 - d[1]])\n}\n\ngenerateBoat.propTypes = {\n length: PropTypes.number.isRequired,\n width: PropTypes.number.isRequired,\n}\n\nfunction referenceBoat() {\n // Buster Magnum is the only boat you will ever need!\n return generateBoat(7.20, 2.57)\n}\n\nclass AcousticBoatView extends Component {\n transform(poly) {\n const xypoly = poly.map(d => xyToLeflet(d[0], d[1]))\n return xypoly\n }\n render() {\n const color = this.props.color || \"gray\"\n const polys = referenceBoat()\n return ( )\n }\n}\n\nAcousticBoatView.propTypes = {\n color: PropTypes.string,\n}\n\nclass MapBoatView extends Component {\n transform(poly) {\n const { position, heading } = this.props\n const center = {lat: position[0], lng: position[1]}\n let latlngpoly = poly.map(d => {\n let polar = convertXYToPolar(d)\n return offsetLatLonByDistanceAngle(center, polar.angle + heading, polar.distance)\n })\n return latlngpoly\n }\n render() {\n const color = this.props.color || \"gray\"\n const polys = referenceBoat()\n return ( )\n }\n}\n\nMapBoatView.propTypes = {\n heading: PropTypes.number.isRequired,\n position: PropTypes.array.isRequired,\n color: PropTypes.string,\n}\n\n\nexport { AcousticBoatView, MapBoatView }\n","import React, { Component } from 'react';\nimport { PropTypes } from 'prop-types';\nimport { Polyline, LayerGroup, Circle } from 'react-leaflet'\nimport { xyToLeflet, convertXYToPolar, offsetLatLonByDistanceAngle } from './geohelpers'\n\nclass CircleGrid extends Component {\n generateCircleGrid(range, gridSize){\n var grid = []\n for (let r = 0; r <= range; r += gridSize) {\n grid.push(r)\n }\n return grid\n }\n render() {\n const { range, gridSize } = this.props\n const grid = this.generateCircleGrid(range, gridSize)\n return (\n \n {grid.length > 0 && grid.map((d, idx) => ())}\n \n\n )\n }\n}\n\nCircleGrid.propTypes = {\n gridSize: PropTypes.number.isRequired,\n range: PropTypes.number.isRequired,\n}\n\nfunction defaultGrid() {\n const maxRange = 200\n return { x: { min: -maxRange, max: maxRange}, y: { min: -maxRange, max: maxRange }}\n}\n\nclass AcousticGrid extends Component {\n getGrid() {\n const { range, fullGrid, gridSize } = this.props\n const gridRange = fullGrid ? defaultGrid() : range\n return generateGrid(gridSize, gridRange)\n }\n transform(grid) {\n const xygrid = grid.map(d => d.map(inner => xyToLeflet(inner[0], inner[1])))\n return xygrid\n }\n render() {\n const grid = this.getGrid()\n return ( )\n }\n}\n\nAcousticGrid.propTypes = {\n fullGrid: PropTypes.bool,\n gridSize: PropTypes.number.isRequired,\n range: PropTypes.shape({\n x: PropTypes.shape({min: PropTypes.number.isRequired, max: PropTypes.number.isRequired}),\n y: PropTypes.shape({min: PropTypes.number.isRequired, max: PropTypes.number.isRequired})\n })\n}\n\nclass MapGrid extends Component {\n transform(grid) {\n const { centerLatlng, heading } = this.props\n const center = {lat: centerLatlng[0], lng: centerLatlng[1]}\n let latlngGrid = grid.map(d => {\n let coord = d.map(e => {\n let polar = convertXYToPolar(e)\n return offsetLatLonByDistanceAngle(center, polar.angle + heading, polar.distance)\n })\n return coord\n })\n return latlngGrid\n }\n getGrid() {\n const { range, gridSize } = this.props\n return generateCircularGrid(gridSize, range)\n }\n render() {\n const { centerLatlng, range } = this.props\n const grid = this.getGrid()\n return ( )\n }\n}\n\nMapGrid.propTypes = {\n centerLatlng: PropTypes.array.isRequired,\n heading: PropTypes.number.isRequired,\n fullGrid: PropTypes.bool,\n gridSize: PropTypes.number.isRequired,\n range: PropTypes.number.isRequired,\n}\n\nclass Grid extends Component {\n render() {\n const { grid, global, center, range } = this.props\n return (\n \n {grid.length > 0 && grid.map((d, idx) => ())}\n {global && ()}\n \n )\n }\n}\n\nGrid.propTypes = {\n gridSize: PropTypes.number,\n gridRange: PropTypes.shape({\n x: PropTypes.shape({min: PropTypes.number.isRequired, max: PropTypes.number.isRequired}),\n y: PropTypes.shape({min: PropTypes.number.isRequired, max: PropTypes.number.isRequired})\n })\n}\n\n// Generating grid based on grid settings\nfunction generateGrid(gridSize, gridRange){\n let grid = []\n let delta = gridSize\n\n // Positive y\n for (let y = 0; y <= gridRange.y.max; y += delta) {\n grid.push([[gridRange.x.min, y], [gridRange.x.max, y]])\n }\n // Negative y\n for (let y = 0; y >= gridRange.y.min; y -= delta) {\n grid.push([[gridRange.x.min, y], [gridRange.x.max, y]])\n }\n\n // Positive x\n for (let x = 0; x <= gridRange.x.max; x += delta) {\n grid.push([[x, gridRange.y.min], [x, gridRange.y.max]])\n }\n // Negative x\n for (let x = 0; x >= gridRange.x.min; x -= delta) {\n grid.push([[x, gridRange.y.min], [x, gridRange.y.max]])\n }\n return grid\n}\n\ngenerateGrid.propTypes = {\n gridSize: PropTypes.number,\n gridRange: PropTypes.shape({\n x: PropTypes.shape({min: PropTypes.number.isRequired, max: PropTypes.number.isRequired}),\n y: PropTypes.shape({min: PropTypes.number.isRequired, max: PropTypes.number.isRequired})\n })\n}\n\nfunction findXcorr(range, y) {\n return range* Math.sin(Math.acos(y*1.0/range))\n}\n\nfunction findYcorr(range, x) {\n return range* Math.sin(Math.acos(x*1.0/range))\n}\n\n// Generating circular grid based on grid settings\nfunction generateCircularGrid(gridSize, range){\n let grid = []\n let delta = gridSize\n\n // Y lines\n for (let y = 0; y <= range; y += delta) {\n // Positive dir\n grid.push([[findXcorr(range, y), y], [-findXcorr(range, y), y]])\n // Negative dir\n grid.push([[findXcorr(range, y), -y], [-findXcorr(range, y), -y]])\n }\n\n //X lines\n for (let x = 0; x <= range; x += delta) {\n // Positive dir\n grid.push([[x, findYcorr(range, x)], [x, -findYcorr(range, x)]])\n // Negative dir\n grid.push([[-x ,-findYcorr(range, x)], [-x, findYcorr(range, x)]])\n }\n\n return grid\n}\n\ngenerateCircularGrid.propTypes = {\n gridSize: PropTypes.number.isRequired,\n range: PropTypes.number.isRequired,\n}\n\nexport { AcousticGrid, MapGrid, CircleGrid, generateGrid, findXcorr, findYcorr }\n","import React from 'react';\n\nconst ShowUnit = ({unit}) => (\n ({unit})\n)\n\nexport { ShowUnit }\n","import React, { Component } from 'react';\nimport { observer } from 'mobx-react'\nimport { Icon, Table } from 'semantic-ui-react'\nimport { divIcon, latLng } from 'leaflet'\nimport { Marker, Popup, LayerGroup, Polygon } from 'react-leaflet'\nimport RotatedMarker from 'react-leaflet-rotatedmarker'\nimport { PropTypes } from 'prop-types'\nimport { FormInput } from '../../Stores/FormStores/FormStore'\nimport { polarToLeflet, lefletToPolar, offsetLatLonByDistanceAngle } from './geohelpers'\nimport { clamp, wrap360 } from '../../lib/helpers'\nimport { RoundDecimalPlaces } from '../../lib/format'\nimport { ShowUnit } from '../ShowUnit'\n\nvar dragRadius = divIcon({\n className: 'dragIcon',\n iconSize: [20, 20],\n iconAnchor: [10, 10],\n html: '',\n})\n\nvar dragSector = divIcon({\n className: 'dragIcon',\n iconSize: [20, 20],\n iconAnchor: [10, 10],\n html: '',\n})\n\nvar dragDirection = divIcon({\n className: 'dragIcon',\n iconSize: [20, 20],\n iconAnchor: [10, 10],\n html: '',\n})\n\nconst origo = polarToLeflet(0,0)\nconst radiusDraggerOffset = 3/5\n\nconst DescribeDirection = () => (\n  {\"Direction\"}\n)\nconst DescribeRadius = () => (\n  {\"Radius\"}\n)\nconst DescribeSector = () => (\n  {\"Sector\"}\n)\n\nfunction GenerateArcGlobal(center, startAngle, endAngle, radius) {\n var arc = []\n center = latLng(center)\n\n var i = startAngle\n if (startAngle > endAngle) {\n i -= 360\n }\n while (i < endAngle) {\n arc.push(latLng(offsetLatLonByDistanceAngle(center, i,radius)))\n // Degrees between each point on the curve\n i += 0.25\n }\n\n // Add end and center point as well\n arc.push(latLng(offsetLatLonByDistanceAngle(center,endAngle,radius)))\n arc.push(center)\n return arc\n}\nGenerateArcGlobal.propTypes = {\n center: PropTypes.shape({\n lat: PropTypes.number.isRequired,\n lng: PropTypes.number.isRequired\n }),\n startAngle: PropTypes.number.isRequired,\n endAngle: PropTypes.number.isRequired,\n radius: PropTypes.number.isRequired\n}\n\nfunction GenerateArc(startAngle, endAngle, radius) {\n var arc = []\n\n var i = startAngle\n if (startAngle > endAngle) {\n i -= 360\n }\n while (i < endAngle) {\n arc.push(polarToLeflet(i,radius))\n // Degrees between each point on the curve\n i += 0.25\n }\n\n // Add end and center point as well\n arc.push(polarToLeflet(endAngle,radius))\n arc.push(origo)\n return arc\n}\nGenerateArc.propTypes = {\n startAngle: PropTypes.number.isRequired,\n endAngle: PropTypes.number.isRequired,\n radius: PropTypes.number.isRequired\n}\n\nconst SearchRangeArcGlobal = observer(class SearchRangeArcGlobal extends Component {\n render() {\n const { center, startAngle, endAngle, radius } = this.props\n var points = GenerateArcGlobal(center, startAngle, endAngle, radius)\n return (\n \n \n \n )\n }\n})\n\nconst SearchRangeArc = observer(class SearchRangeArc extends Component {\n render() {\n const { startAngle, endAngle, radius } = this.props\n var points = GenerateArc(startAngle, endAngle, radius)\n return (\n \n \n \n )\n }\n})\n\nconst CircularSearchAreaDraggable = observer(class CircularSearchAreaDraggable extends Component {\n onDragRadius = (e) => {\n let polar = lefletToPolar(e.target.getLatLng())\n\n // Limit radius to be within min and max range\n polar[\"distance\"] = RoundDecimalPlaces(clamp(polar[\"distance\"], 1, this.props.maxRadius), 0)\n\n // Lock direction\n const fields = this.props.store.getFlattenedAbsoluteMetricValues()\n e.target.setLatLng(polarToLeflet(fields.direction, polar[\"distance\"]))\n\n // Update change\n this.props.onAbsoluteMetricChange(\"radius\", polar[\"distance\"], 1)\n }\n\n onDragDirection = (e) => {\n let polar = lefletToPolar(e.target.getLatLng())\n\n polar[\"angle\"] = RoundDecimalPlaces(clamp(polar[\"angle\"], 0, 360), 0)\n\n const fields = this.props.store.getFlattenedAbsoluteMetricValues()\n e.target.setLatLng(polarToLeflet(polar[\"angle\"], fields.radius * radiusDraggerOffset))\n\n this.props.onFieldChange(\"direction\", polar[\"angle\"], 1)\n }\n\n onDragSector = (e) => {\n let polar = lefletToPolar(e.target.getLatLng())\n\n const fields = this.props.store.getFlattenedAbsoluteMetricValues()\n\n let sector = fields.sector\n\n // Check is dir is in left plane and sector in right\n if (polar[\"angle\"] - fields.direction < 0) {\n sector = clamp(2 * (polar[\"angle\"] - fields.direction + 360), 0.1, 359.99)\n } else {\n sector = clamp(2 * (polar[\"angle\"] - fields.direction), 0.1, 359.99)\n }\n\n polar[\"angle\"] = clamp(polar[\"angle\"], fields.direction, fields.direction + 180)\n e.target.setLatLng(polarToLeflet(polar[\"angle\"], fields.radius))\n\n sector = RoundDecimalPlaces(sector, 0)\n this.props.onFieldChange(\"sector\", sector, 0)\n }\n render() {\n const { form,  unitName, maxRadius } = this.props.store\n const fieldsMetric = this.props.store.getFlattenedAbsoluteMetricValues()\n const fieldsRaw = this.props.store.getFlattenedAbsoluteValues()\n\n // Prevent bug when sector is 0\n const sector = clamp(fieldsRaw.sector, 0.1, 359.99)\n const direction = clamp(fieldsRaw.direction, 0, 360)\n const radius = clamp(fieldsMetric.radius, 0.1, maxRadius)\n\n const posRadius = polarToLeflet(direction, radius)\n const posDir = polarToLeflet(direction, radius * radiusDraggerOffset)\n const posSector = polarToLeflet((direction + (sector/2)), radius)\n const startAngle = wrap360(direction - (sector/2))\n const endAngle = wrap360(direction + (sector/2))\n\n const onFieldChange = this.props.onFieldChange\n\n return (\n \n \n \n
\n
Radius of search range
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n \n \n
\n
Direction of search area
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n \n \n
\n
Width of search sector
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n \n
\n )\n }\n})\n\nexport { CircularSearchAreaDraggable, SearchRangeArc, SearchRangeArcGlobal }\n","import React, { Component } from 'react';\nimport { LayerGroup, Circle } from 'react-leaflet'\nimport { observer, inject } from 'mobx-react'\nimport { xyToLeflet } from './geohelpers';\nimport { AcousticGrid, MapGrid } from './Grid'\nimport { SearchRangeArc, SearchRangeArcGlobal } from './CircularSearchArea'\nimport { wrap360 } from '../../lib/helpers'\n\n\nconst CircularRangeVisualization = inject(\"preferenceStore\")(inject(\"genericConfigStore\")(inject(\"masterPositionStore\")(observer(class RangeVisualization extends Component {\n render() {\n const { masterPositionStore } = this.props\n const ranges = this.props.genericConfigStore.ranges\n const gridSize = this.props.preferenceStore.getGridSize(ranges.radius)\n\n const startAngle = wrap360(ranges.direction - (ranges.sector/2) + masterPositionStore.orientation)\n const endAngle = wrap360(ranges.direction + (ranges.sector/2) + masterPositionStore.orientation)\n\n var fullCircle = false\n if (ranges.sector > 359) {\n fullCircle = true\n }\n\n return (\n \n \n {fullCircle ? (\n \n ) : (\n \n )}\n\n \n )\n }\n}))))\n\n\nconst AcousticCircularRangeVisualization = inject(\"preferenceStore\")(inject(\"genericConfigStore\")(observer(class AcousticRangeVisualization extends Component {\n render() {\n const ranges = this.props.genericConfigStore.ranges\n const gridSize = this.props.preferenceStore.getGridSize(ranges.radius)\n var circularRanges = ranges.getCircularRanges()\n const startAngle = wrap360(ranges.direction - (ranges.sector/2))\n const endAngle = wrap360(ranges.direction + (ranges.sector/2))\n\n var fullCircle = false\n if (ranges.sector > 359) {\n fullCircle = true\n }\n\n\n return (\n \n \n\n {fullCircle ? (\n \n ) : (\n \n )}\n \n )\n }\n})))\n\nexport { CircularRangeVisualization, AcousticCircularRangeVisualization }\n","import { icon, divIcon } from 'leaflet'\n\nvar markerIconBlue = divIcon({\n iconAnchor: [10, 20],\n className: 'markerIcone',\n html: '',\n})\nvar markerIconPurple = divIcon({\n iconAnchor: [10, 20],\n className: 'markerIcone',\n html: '',\n})\nvar markerIconRed = divIcon({\n iconAnchor: [10, 20],\n className: 'markerIcone',\n html: '',\n})\nvar markerIconBlack = divIcon({\n iconAnchor: [10, 20],\n className: 'markerIcone',\n html: '',\n})\n\nvar origoIcon = icon({\n iconUrl: '/origin.svg',\n iconSize: [50, 50],\n iconAnchor: [25, 48],\n})\nvar rovIcon = icon({\n iconUrl: '/location-arrow-solid-32x32.png',\n iconSize: [32,32],\n iconAnchor: [16, 16],\n})\nvar receiverIcon = divIcon({\n className: 'receiverIcon',\n html: '',\n// html: '',\n})\nvar unknownPositionIcon = divIcon({\n className: 'unknownPositionIcon',\n html: '',\n iconSize: [22,18],\n iconAnchor: [22/2, 15],\n})\n\nfunction GetIcon(chName) {\n if (chName === \"filtered\") {\n return markerIconBlue\n }\n else if (chName === \"fusion\") {\n return markerIconPurple\n }\n else if (chName === \"raw\") {\n return markerIconRed\n }\n else {\n console.log(\"Warning! Not known channel name!\")\n return markerIconBlack\n }\n}\n\nconst colors = {\n \"filtered\" : \"#005a9e\",\n \"fusion\" : \"purple\",\n \"raw\" : \"red\",\n}\n\nfunction GetColor(chName) {\n return colors[chName] || \"black\"\n}\n\nexport { GetIcon, GetColor, origoIcon, rovIcon, receiverIcon, unknownPositionIcon }\n","import React, { Component } from 'react';\nimport { Marker, Popup, FeatureGroup, LayerGroup, Polyline, Circle } from 'react-leaflet'\nimport RotatedMarker from 'react-leaflet-rotatedmarker'\nimport { observer, inject } from 'mobx-react'\nimport { PropTypes } from 'prop-types';\nimport { xyToLeflet } from './geohelpers';\nimport { origoIcon, rovIcon, receiverIcon, unknownPositionIcon } from '../../lib/markerIcon'\n\nconst MarkerPopup = ({children}) => (\n \n \n {children}\n \n \n)\n\n\nconst MarkerAndTrail = ({position, trail, color, icon, children, orientation, offsetOrientation}) => (\n \n {orientation >= 0 ?\n \n {children && ({children})}\n \n :\n \n {children && ({children})}\n \n }\n {trail && (\n \n )}\n \n)\n\nMarkerAndTrail.propTypes = {\n position: PropTypes.oneOfType([PropTypes.object, PropTypes.array]).isRequired,\n trail: PropTypes.array,\n color: PropTypes.string,\n orientation: PropTypes.number,\n}\n\nconst UnknownPositionAndTrail = ({position, trail, color, children}) => (\n \n \n {children && ({children})}\n \n {trail && (\n \n )}\n \n)\n\nUnknownPositionAndTrail.propTypes = {\n position: PropTypes.oneOfType([PropTypes.object, PropTypes.array]).isRequired,\n trail: PropTypes.array,\n color: PropTypes.string,\n}\n\nconst MarkerAndTrailWithOrientation = inject(\"locatorOrientationStore\")(observer(class MarkerAndTrailWithOrientation extends Component {\n render() {\n const { color, position, trail, icon, children, position_valid, std, chName } = this.props\n // Set orientation to -1 not to show arrow\n var orientation = -1\n var offsetOrientation = this.props.offsetOrientation\n // Acoustic view might not have north up in the screen\n // \"orientation\" is the compass value from the ROV\n // \"offsetOrientation\" is the amount to adjust the compass value to compensate for the acoustic view not pointing north\n\n if (chName === \"filtered\") {\n orientation = this.props.locatorOrientationStore.orientation\n offsetOrientation = offsetOrientation + orientation\n // Check if we have overflowed 360 deg, if so subtract 360\n if (offsetOrientation > 359) {\n offsetOrientation = offsetOrientation - 360\n }\n }\n\n if ((!position_valid) || (std < 0)) {\n // No acoustic position, show an a question mark\n return \n }\n return \n }\n}))\n\nMarkerAndTrailWithOrientation.propTypes = {\n position: PropTypes.oneOfType([PropTypes.object, PropTypes.array]).isRequired,\n trail: PropTypes.array,\n color: PropTypes.string,\n orientation: PropTypes.number,\n}\n\nconst AccuracyVisualization = (observer(({ color, position, std, position_invalid_count} ) => {\n var col = color || \"#20571a\"\n var radius = std\n\n if (position_invalid_count > 3) {\n // We have a fetch error. Shown in a different color and a defined size\n //maxRadius = 50\n //radius = (3.0 + 0.5 * acousticPositionStore.position_invalid_count)\n // Clamp to maxRadius\n //radius = radius > maxRadius ? maxRadius : radius\n col = \"#d22828\";\n } else {\n // Accuracy visualization removed for 2.5.0\n return null\n }\n\n return (\n \n )\n}))\n\nAccuracyVisualization.propTypes = {\n position: PropTypes.oneOfType([PropTypes.object, PropTypes.array]).isRequired,\n color: PropTypes.string,\n}\n\nconst LocatorMarkerAndTrail = inject(\"globalPositionStore\")(observer(({ globalPositionStore, trailLength, color, children, ...props }) => {\n const markerAndTrails = []\n\n for (var chName in globalPositionStore.positions_dict) {\n const positionStore = globalPositionStore.positions_dict[chName]\n if (positionStore.show) {\n const trail = positionStore.positions.getLatLng(trailLength)\n const position = [positionStore.lat, positionStore.lng]\n markerAndTrails.push(\n {positionStore.name}\n )\n markerAndTrails.push(\n )\n }\n\n }\n return (\n \n {markerAndTrails}\n \n )\n}))\n\nLocatorMarkerAndTrail.propTypes = {\n position: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),\n trail: PropTypes.array,\n trailLength: PropTypes.number,\n color: PropTypes.string,\n}\n\nconst AcousticLocatorMarkerAndTrail = inject(\"acousticPositionStore\")(inject(\"masterPositionStore\")(observer(({ acousticPositionStore, fusionPositionStore, masterPositionStore, trailLength, color, children, ...props} ) => {\n //// Compansate for offset in orientation in acoustic view\n const offsetOrientation = 360 - masterPositionStore.orientation\n const markerAndTrails = []\n\n for (var chName in acousticPositionStore.positions_dict) {\n const positionStore = acousticPositionStore.positions_dict[chName]\n if (positionStore.show) {\n const trail = positionStore.positions.getXY(trailLength).map(d => xyToLeflet(...d))\n const position = xyToLeflet(positionStore.x, positionStore.y)\n markerAndTrails.push(\n {positionStore.name}\n )\n markerAndTrails.push()\n }\n\n }\n\n return (\n \n {markerAndTrails}\n \n )\n})))\n\nAcousticLocatorMarkerAndTrail.propTypes = {\n position: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),\n trail: PropTypes.array,\n trailLength: PropTypes.number,\n color: PropTypes.string,\n}\n\nconst MasterMarkerAndTrail = inject(\"masterPositionStore\")(observer(({ masterPositionStore, trailLength, color, ...props} ) => {\n const trail = masterPositionStore.positions.getLatLng(trailLength)\n return (\n \n \n Master electronic position\n \n\n {trail.length > 0 && (\n \n )}\n\n \n )\n}))\n\nMasterMarkerAndTrail.propTypes = {\n position: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),\n trail: PropTypes.array,\n trailLength: PropTypes.number,\n rotationAngle: PropTypes.number,\n color: PropTypes.string,\n}\n\nconst OrigoMarker = ({position, description}) => (\n {description}\n)\n\nOrigoMarker.propTypes = {\n position: PropTypes.oneOfType([PropTypes.object, PropTypes.array]).isRequired,\n description: PropTypes.string.isRequired,\n}\n\n\nexport { MasterMarkerAndTrail, LocatorMarkerAndTrail, AcousticLocatorMarkerAndTrail, MarkerAndTrailWithOrientation, MarkerAndTrail, OrigoMarker, receiverIcon }\n","import { divIcon } from 'leaflet'\n\nfunction addPOI(icon, description) {\n return {\n key: icon,\n icon: icon,\n value: description,\n }\n}\n\nvar poiMapping = [\n addPOI('anchor', 'Anchor'),\n addPOI('crosshairs', 'Crosshairs'),\n addPOI('ship', 'Boat'),\n addPOI('plane', 'Plane'),\n addPOI('military', 'Plane'),\n addPOI('car', 'Car'),\n addPOI('bicycle', 'Bicycle'),\n addPOI('life ring', 'Life ring'),\n addPOI('pin', 'Pin'),\n addPOI('marker', 'Marker'),\n addPOI('map pin', 'Map pin'),\n addPOI('star', 'Star'),\n addPOI('heart', 'Heart'),\n addPOI('rocket', 'Rocket'),\n]\npoiMapping.sort((a, b) => {\n if (a.value < b.value) {\n return -1\n }\n if (a.value > b.value) {\n return 1\n }\n return 0\n})\n\nvar mapIconMapping = {}\npoiMapping.forEach(el => {\n mapIconMapping[el.key] = divIcon({\n className: 'poiIcon',\n html: ``,\n iconAnchor: [10, 10]\n })\n});\n\nexport { poiMapping, mapIconMapping };\n","import React, { Component } from 'react';\nimport { Table } from 'semantic-ui-react'\nimport { Marker, Popup, FeatureGroup } from 'react-leaflet'\nimport { divIcon } from 'leaflet'\nimport { observer, inject } from 'mobx-react'\nimport { PropTypes } from 'prop-types';\nimport { mapIconMapping } from '../poimapping'\n\nvar defaultIcon = divIcon({\n className: 'poiIcon',\n html: '',\n iconAnchor: [10, 10],\n})\n\nvar moveIcon = divIcon({\n className: 'poiIcon',\n html: '',\n iconAnchor: [10, 10],\n})\n\n\nconst TableLatLngDepth = ({ name, lat, lng, depth }) =>(\n
\n

{name}

\n \n \n \n \n \n \n Latitude:\n \n \n {lat}\n \n \n \n \n Longitude:\n \n \n {lng}\n \n \n \n \n Depth:\n \n \n {depth}\n \n \n \n
\n
\n)\n\nTableLatLngDepth.propTypes = {\n name: PropTypes.string.isRequired,\n lat: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,]).isRequired,\n lng: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,]).isRequired,\n depth: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,]).isRequired,\n}\n\nconst POIMarkerMoveable = (observer(class POIMarkers extends Component {\n onDrag = (e) => {\n const pos = e.target.getLatLng()\n this.props.onChange('lat', pos['lat'])\n this.props.onChange('lng', pos['lng'])\n //this.props.point.setlatlng(e.latlng)\n }\n render() {\n const { point, latlng } = this.props\n return(\n \n \n \n \n \n )\n }\n}))\n\nPOIMarkerMoveable.propTypes = {\n latlng: PropTypes.shape({\n lat: PropTypes.number.isRequired,\n lng: PropTypes.number.isRequired,\n }).isRequired,\n point: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n}\n\nconst POIMarker = ({ id, point, latlng, icon }) =>(\n \n \n \n \n \n)\n\nPOIMarker.propTypes = {\n latlng: PropTypes.shape({\n lat: PropTypes.number.isRequired,\n lng: PropTypes.number.isRequired,\n }).isRequired,\n point: PropTypes.object.isRequired,\n icon: PropTypes.object.isRequired,\n}\n\nconst POIMarkers = inject(\"pointOfInterestStore\")(observer(class POIMarkers extends Component {\n render() {\n return (\n \n {this.props.pointOfInterestStore.getVisible.map(d => {\n const point = d.form.fields\n let icon = mapIconMapping[point.icon.value] || defaultIcon\n return(\n d.isEditing ?\n \n :\n \n )\n })\n }\n \n )\n }\n}))\n\nexport { POIMarkers, POIMarkerMoveable, POIMarker, TableLatLngDepth }\n","import React, { Component } from 'react';\nimport '../../../node_modules/leaflet/dist/leaflet.css'\nimport '../../../node_modules/react-leaflet-fullscreen/dist/styles.css'\nimport { Icon, CRS } from 'leaflet'\nimport { Map, TileLayer, Marker, Popup, LayersControl, ScaleControl, LayerGroup } from 'react-leaflet'\nimport FullscreenControl from 'react-leaflet-fullscreen';\nimport { observer, inject } from 'mobx-react'\nimport { PropTypes } from 'prop-types';\nimport { extendObservable, action, computed } from 'mobx'\nimport ReactResizeDetector from 'react-resize-detector';\nimport { xyToLeflet } from './geohelpers';\nimport { AcousticPositionControl, AcousticCenterOnLocationControl,\n LocatorCenterOnLocationControl, AcousticCompassControl, GPSIMUBatteryTemperatureControl, GridSizeControl,\n LatitudeLongitudeControl, AcousticAvailablePositionsControl, GlobalAvailablePositionsControl } from './MapControls'\nimport { AcousticBoatView, MapBoatView } from './BoatView'\nimport { CircularRangeVisualization, AcousticCircularRangeVisualization } from './MapRange'\nimport { LocatorMarkerAndTrail, MasterMarkerAndTrail, AcousticLocatorMarkerAndTrail, OrigoMarker, receiverIcon } from './Markers'\nimport { POIMarkers } from './POIMarkers'\n\nconst { BaseLayer, Overlay } = LayersControl\n\nIcon.Default.prototype.options[\"imagePath\"] = \"/\"\n\nconst BoatVisibleWrapper = inject(\"preferenceStore\")(observer(class BoatVisibleWrapper extends Component {\n render() {\n if (this.props.preferenceStore.boatVisible) {\n return (this.props.children)\n }\n return null\n }\n}))\n\nBoatVisibleWrapper.propTypes = {\n //boatVisible: PropTypes.bool.isRequired,\n}\n\nconst MasterBoatView = inject(\"masterPositionStore\")(observer(({ masterPositionStore, color, ...props} ) => (\n \n)))\n\nMasterBoatView.propTypes = {\n position: PropTypes.arrayOf(PropTypes.number),\n //orientation: PropTypes.number.isRequired,\n color: PropTypes.string.isRequired,\n}\n\nclass CurrentMapPositionStore {\n constructor(defaultZoom=2) {\n extendObservable(this, {\n zoom: defaultZoom,\n lat: 0,\n lng: 0,\n setLatLngZoom: action((lat, lng, zoom) => {\n if (lat === undefined || lng === undefined || zoom === undefined) {\n return // don't crash leaflet\n }\n this.lat = lat\n this.lng = lng\n this.zoom = zoom\n }),\n setLatLng: action((lat, lng) => {\n if (lat === undefined || lng === undefined) {\n return // don't crash leaflet\n }\n this.lat = lat\n this.lng = lng\n }),\n position: computed(() => {\n return [this.lat, this.lng]\n })\n })\n }\n}\n\n\nlet globalMapPositionStore = new CurrentMapPositionStore(16)\n\nfunction latLngIsZero(ll) {\n return (ll[0] < 0.0001) && (ll[1] < 0.0001)\n}\n\nlatLngIsZero.propTypes = {\n ll: PropTypes.arrayOf(PropTypes.number),\n}\n\nfunction latLngIsNotZero(ll) {\n return (ll[0] > 0.0001) && (ll[1] > 0.0001)\n}\n\nlatLngIsNotZero.propTypes = {\n ll: PropTypes.arrayOf(PropTypes.number),\n}\n\n\nconst MapView = inject(\"globalPositionStore\")(observer(class MapView extends Component {\n onViewportChanged = (vp) => {\n globalMapPositionStore.setLatLngZoom(vp.center[0], vp.center[1], vp.zoom)\n }\n setPosition = (({lat, lng}) => {\n globalMapPositionStore.setLatLng(lat, lng)\n })\n invalidateSize = () => {\n if (this.refs.map) {\n this.refs.map.leafletElement.invalidateSize()\n }\n }\n render() {\n const center = globalMapPositionStore.position\n const zoom = globalMapPositionStore.zoom\n const locatorPosition = [this.props.globalPositionStore.lat, this.props.globalPositionStore.lng]\n\n if (latLngIsZero(center) && latLngIsNotZero(locatorPosition)) {\n // Set initial center once it's been loaded\n globalMapPositionStore.setLatLngZoom(locatorPosition[0], locatorPosition[1], 16)\n }\n\n return (\n \n \n \n \n \n \n \n OpenStreetMap contributors\"\n url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\n maxZoom={18}\n />\n \n\n \n OpenStreetMap, ©CARTO\"\n url=\"https://{s}.basemaps.cartocdn.com/rastertiles/light_all/{z}/{x}/{y}.png\"\n />\n \n\n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n \n \n Master electronic position\n Locator position\n \n \n \n )\n }\n}))\n\nconst RecieverVisualization = inject(\"rxStore\")(observer(class RecieverVisualization extends Component {\n render() {\n return (\n \n {this.props.rxStore.all.map(d => (\n Receiver {d.id+1}\n ))}\n \n )\n }\n}))\n\nlet acousticMapPositionStore = new CurrentMapPositionStore(2)\n\nconst AcousticView = observer(class AcousticView extends Component {\n onViewportChanged = (vp) => {\n acousticMapPositionStore.setLatLngZoom(vp.center[0], vp.center[1], vp.zoom)\n }\n setPosition = (({lat, lng}) => {\n acousticMapPositionStore.setLatLng(lat, lng)\n })\n invalidateSize = () => {\n if (this.refs.map) {\n this.refs.map.leafletElement.invalidateSize()\n }\n }\n render() {\n const { position, zoom } = acousticMapPositionStore\n return (\n \n \n \n \n \n \n \n \n Locator position\n \n \n \n \n \n \n \n )\n }\n})\n\n\nexport { MapView, AcousticView, MasterBoatView, BoatVisibleWrapper, CurrentMapPositionStore, RecieverVisualization }\n","import React from 'react';\nimport { Message } from 'semantic-ui-react'\nimport PropTypes from 'prop-types';\n\nconst ErrorMessage = ({heading, message}) => (\n {heading}\n

{message}

\n
\n)\n\nErrorMessage.propTypes = {\n heading: PropTypes.string.isRequired,\n message: PropTypes.string.isRequired,\n}\n\nexport default ErrorMessage\n","import React, { Component } from 'react';\nimport { Popup, Checkbox, Segment, Icon, Button, Grid, Form } from 'semantic-ui-react'\nimport { inject, observer } from 'mobx-react';\nimport { SimpleFormInput, FormIsLoading } from '../Stores/FormStores/FormStore';\nimport { poiMapping } from './poimapping';\nimport ErrorMessage from './ErrorMessage'\nimport { clamp } from '../lib/helpers'\n\n\nlet dropdownOptions = poiMapping.map(d => {\n return { key: d.key, value: d.key, text: {d.value} }\n})\n\nconst generateCSVData = (poiStore) => {\n const separator = ';'\n const newline = '\\n'\n let points = poiStore.all.map(d => d.getFlattenedValues())\n let data = points.map(d => {\n return ['\"'+d.name+'\"', d.lat, d.lng, d.depth].join(separator)\n })\n // Add header\n data.unshift([\"Name\", \"Latitude\", \"Longitude\", \"Depth\"].join(separator))\n return data.join(newline) + newline\n}\n\nconst ExportPOIButton = inject(\"pointOfInterestStore\")(observer(class ExportPOIButton extends Component {\n\n downloadFile = () => {\n let element = document.createElement(\"a\")\n let data = generateCSVData(this.props.pointOfInterestStore)\n let file = new Blob([data], {type: 'text/csv'})\n element.href = URL.createObjectURL(file);\n element.download = \"poi.csv\";\n // Need to add to document for this to work on Firefox\n document.body.appendChild(element)\n element.setAttribute('type', 'hidden')\n element.click();\n }\n\n render() {\n return (\n
\n
\n )\n }\n}))\n\nconst VisibilitySelector = observer(({onFieldChange, point}) => (\n { onFieldChange('visible', data.checked) }}\n checked={point.form.fields.visible.value}\n />\n))\n\nconst VisibilitySelectorWithLabel = observer(({onFieldChange, point}) => (\n
\n \n
\n \n \n
\n
\n
\n))\n\nclass DeleteButton extends Component {\n state = { isOpen: false }\n onOpenPopup = () => {\n this.setState({isOpen: true})\n }\n onDeleteConfirm = () => {\n this.props.handleDelete(this.props.point.id)\n this.setState({isOpen: false})\n }\n render() {\n return (\n \n }\n content={\n \n }\n on='click'\n open={this.state.isOpen}\n onOpen={this.onOpenPopup}\n position='right center'\n />\n )\n }\n}\n\nconst EditButton = ({handleEndEdit, point, disabled}) => (\n \n)\n\nconst POIView = ({point, handleStartEdit, onFieldChange}) => (\n \n \n \n \n\n \n {point.form.fields.name.value}\n  \n \n)\n\nconst PointOfInterestExpanded = inject(\"pointOfInterestStore\")(observer(class PointOfInterest extends Component {\n handleDelete = (id) => {\n this.props.pointOfInterestStore.deletePersistent(id)\n }\n handleUpdate = (id) => {\n this.props.pointOfInterestStore.updatePersistent(id)\n }\n handleTryAgain = () => {\n this.props.pointOfInterestStore.fetch()\n }\n render() {\n const points = this.props.pointOfInterestStore.newestFirst\n const poiStore = this.props.pointOfInterestStore\n return (\n
\n {poiStore.isFetching && }\n {poiStore.errorFetchMsg && (\n
\n \n \n
\n )}\n\n {points.length > 0 && (\n \n {points.map(d =>\n \n )}\n \n )}\n {points.length > 0 && ()}\n
\n )\n }\n}))\n\nconst PointOfInterest = observer(class PointOfInterest extends Component {\n render() {\n const mapStateStore = this.props.mapStateStore\n const icon = (mapStateStore.poiExpanded ? \"angle double up\" : \"angle double down\")\n return (\n \n

mapStateStore.setPoiExpanded(!mapStateStore.poiExpanded)}> Points Of Interest (POI)

\n {mapStateStore.poiExpanded &&\n \n }\n
\n )\n }\n})\n\nexport { PointOfInterest, ExportPOIButton, generateCSVData, Point, POIEditView }\n","import React, { Component } from 'react';\nimport { Segment, Input, Grid, Button } from 'semantic-ui-react'\nimport '../../node_modules/react-leaflet-fullscreen/dist/styles.css'\nimport './Map.css'\nimport { observer, inject } from 'mobx-react'\nimport { AcousticView, MapView } from '../Components/Map/View'\nimport { PointOfInterest } from '../Components/PointOfInterest';\nimport { RoundDecimalPlaces } from '../lib/format';\nimport MapStateStore from './Map.store'\nimport ErrorMessage from '../Components/ErrorMessage'\nimport ErrorBoundary from '../Components/ErrorBoundary'\n\nlet mapStateStore = new MapStateStore()\n\nconst CreateNewPOI = inject(\"pointOfInterestStore\")(inject(\"globalPositionStore\")(inject(\"acousticPositionStore\")(observer(class CreateNewPOI extends Component {\n handleClick = (e) => {\n const { lat, lng } = this.props.globalPositionStore\n const depth = RoundDecimalPlaces(this.props.acousticPositionStore.z, 2)\n const now = new Date()\n const name = \"Location at \" + now.toLocaleString()\n this.props.pointOfInterestStore.addPersistent(lat, lng, depth, name)\n mapStateStore.setPoiExpanded(true)\n }\n render() {\n return(\n \n \n \n
\n \n \n \n \n {mapStateStore.showMap && (\n \n )}\n {mapStateStore.showMap && (\n \n )}\n \n
\n {this.props.pointOfInterestStore.errorAddMsg &&\n \n }\n \n \n {mapStateStore.showMap && (\n \n \n \n )}\n \n )\n }\n}))\n\nexport default MapComponent\n","import { extendObservable, action, computed } from 'mobx'\n\nclass MapStateStore {\n constructor() {\n extendObservable(this, {\n showMap: false,\n setShowMap: action((enabled) => {\n this.showMap = enabled\n }),\n\n trailMax: 5*60, // 5 minutes\n trailLength: 60,\n setTrailLength: action((val) => {\n this.trailLength = val\n }),\n trailValue: computed(() => {\n let val = parseFloat(this.trailLength) || 1\n return Math.min(this.trailMax, Math.max(1, val))\n }),\n trailValueError: computed(() => {\n let val = parseFloat(this.trailLength)\n return isNaN(val) || (val < 1) || (val > this.trailMax)\n }),\n poiExpanded: false,\n setPoiExpanded: action((value) => {\n this.poiExpanded = value\n }),\n })\n }\n}\n\nexport default MapStateStore","import { PropTypes } from 'prop-types';\n\nfunction cross(a, b, o) {\n return (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0])\n }\n\n /**\n * @param points An array of [X, Y] coordinates\n */\n function convexHull(points) {\n points.sort(function(a, b) {\n return a[0] === b[0] ? a[1] - b[1] : a[0] - b[0];\n });\n\n let lower = [];\n for (let i = 0; i < points.length; i++) {\n while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], points[i]) <= 0) {\n lower.pop();\n }\n lower.push(points[i]);\n }\n\n let upper = [];\n for (let i = points.length - 1; i >= 0; i--) {\n while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], points[i]) <= 0) {\n upper.pop();\n }\n upper.push(points[i]);\n }\n\n upper.pop();\n lower.pop();\n return lower.concat(upper);\n }\n\n convexHull.propTypes = {\n points: PropTypes.shape({\n x: PropTypes.number.isRequired,\n y: PropTypes.number.isRequired\n })\n}\n\nfunction polygonArea(xy) {\n var area = 0; // Accumulates area in the loop\n let j = xy.length - 1; // The last vertex is the 'previous' one to the first\n\n for (let i=0; i < xy.length; i++) {\n area = area + (xy[j][0] + xy[i][0]) * (xy[j][1] - xy[i][1]);\n //area = area + (X[j]+X[i]) * (Y[j]-Y[i]);\n j = i; //j is previous vertex to i\n }\n return area / 2;\n}\n\npolygonArea.propTypes = {\n xy: PropTypes.shape({\n x: PropTypes.shape({min: PropTypes.number.isRequired, max: PropTypes.number.isRequired}),\n y: PropTypes.shape({min: PropTypes.number.isRequired, max: PropTypes.number.isRequired})\n })\n}\n\nexport  { convexHull, polygonArea }\n","import { extendObservable, computed, observable, action } from 'mobx'\nimport { GenericFormStore } from './FormStore'\nimport { convexHull, polygonArea } from '../../Components/Map/geometry'\nimport { rules } from '../../lib/validator'\n\nclass ReceiverFormStore extends GenericFormStore {\n constructor(id, x, y, z, unitName, unitFactor, unitDecimals) {\n super()\n extendObservable(this, {\n id: id,\n form: {\n fields: {\n x: {\n value: Math.abs(x),\n negated: x < 0,\n convertUnit: true,\n error: null,\n rule: [rules.between(-100, 100)],\n },\n y: {\n value: Math.abs(y),\n negated: y < 0,\n convertUnit: true,\n error: null,\n rule: [rules.between(-100, 100)],\n },\n z: {\n value: z,\n negated: false,\n convertUnit: true,\n error: null,\n rule: [rules.between(0, 100)],\n },\n },\n meta: {\n isValid: true,\n error: null,\n unitName: unitName,\n unitFactor: unitFactor,\n unitDecimals: unitDecimals,\n },\n },\n })\n }\n}\n\n\nclass ReceiverCollectionFormStore {\n constructor() {\n extendObservable(this, {\n receiverRegistry: observable.map(),\n antenna: true,\n count: computed(() => this.receiverRegistry.size),\n clear: action(() => {\n this.receiverRegistry.clear()\n }),\n addReceiver: action((id, x, y, z, unitName, unitFactor, unitDecimals) => {\n this.receiverRegistry.set(id, new ReceiverFormStore(id, x, y, z, unitName, unitFactor, unitDecimals))\n }),\n get: (id) => { return this.receiverRegistry.get(id) },\n all: computed(() => this.receiverRegistry.values()),\n receiverArea: computed(() => this.getReceiverArea()),\n getReceiverArea: (convFunc) => {\n if (this.count < 3) {\n return 1000 // Accurate approximation to 5 decimals ;-)\n }\n const points = this.all.map(d => {\n let val = d.getFlattenedAbsoluteValues(convFunc)\n return [val.x, val.y]\n })\n let hull = convexHull(points)\n return Math.abs(polygonArea(hull))\n },\n isValid: computed(() => {\n // Check that all receiver forms are valid\n return this.all.every(d => d.form.meta.isValid)\n })\n });\n }\n}\n\nexport { ReceiverFormStore, ReceiverCollectionFormStore }\n","import { extendObservable } from 'mobx'\nimport { GenericFormStore } from './FormStore'\nimport { rules } from '../../lib/validator'\n\nclass AntennaFormStore extends GenericFormStore {\n constructor() {\n super()\n extendObservable(this, {\n form: {\n fields: {\n x: {\n value: 0,\n negated: false,\n convertUnit: true,\n error: null,\n rule: [rules.between(-100, 100)],\n },\n y: {\n value: 1,\n negated: false,\n convertUnit: true,\n error: null,\n rule: [rules.between(-100, 100)],\n },\n depth: {\n value: 0.75,\n negated: false,\n convertUnit: true,\n error: null,\n rule: [rules.between(0, 10)],\n },\n rotation: {\n value: 0,\n negated: false,\n convertUnit: false,\n error: null,\n rule: [rules.between(0, 360)],\n },\n },\n meta: {\n isValid: true,\n error: null,\n unitName: \"meter\",\n unitFactor: 1.0,\n unitDecimals: 2,\n },\n },\n })\n }\n}\n\nexport { AntennaFormStore }\n","import { extendObservable, computed } from 'mobx'\nimport { GenericFormStore } from './FormStore'\nimport { rules } from '../../lib/validator'\n\nclass RangeFormStore extends GenericFormStore {\n constructor() {\n super()\n extendObservable(this, {\n form: {\n fields: {\n xmin: {\n value: 100,\n negated: true,\n convertUnit: true,\n error: null,\n rule: [rules.between(0, 100)]\n },\n xmax: {\n value: 100,\n negated: false,\n convertUnit: true,\n error: null,\n rule: [rules.between(0, 100)]\n },\n ymin: {\n value: 100,\n negated: true,\n convertUnit: true,\n error: null,\n rule: [rules.between(0, 100)]\n },\n ymax: {\n value: 100,\n negated: false,\n convertUnit: true,\n error: null,\n rule: [rules.between(0, 100)]\n },\n zmax: {\n value: 100,\n negated: false,\n convertUnit: true,\n error: null,\n rule: [rules.between(0, 100)]\n },\n radius: {\n value: 150,\n negated: false,\n convertUnit: true,\n error: null,\n rule: [rules.between(1, process.env.REACT_APP_UGPS_MAX_RANGE)]\n },\n direction: {\n value: 340,\n negated: false,\n convertUnit: false,\n error: null,\n rule: [rules.between(0, 360)]\n },\n sector: {\n value: 90,\n negated: false,\n convertUnit: false,\n error: null,\n rule: [rules.between(0.1, 360)]\n },\n },\n meta: {\n isValid: true,\n error: null,\n unitName: \"meter\",\n unitFactor: 1.0,\n unitDecimals: 2,\n },\n },\n area: computed(() => this.getArea()),\n getArea: () => {\n let values = this.getFlattenedAbsoluteMetricValues()\n return (values.xmax - values.xmin)*\n (values.ymax - values.ymin)\n },\n longestSide: () => {\n const values = this.getFlattenedAbsoluteMetricValues()\n const width = (values.ymax - values.ymin)\n const height = (values.xmax - values.xmin)\n return Math.max(width, height)\n }\n })\n }\n}\n\nexport { RangeFormStore }\n","import React, { Component } from 'react';\nimport { observer, inject } from 'mobx-react'\nimport ReactResizeDetector from 'react-resize-detector';\nimport { CRS, icon } from 'leaflet'\nimport { Map, ZoomControl, Marker, Popup } from 'react-leaflet'\nimport { WaterlinkedLogoControl, GridSizeView } from './MapControls'\nimport { xyToLeflet } from './geohelpers'\nimport { CircleGrid } from './Grid'\nimport { CircularSearchAreaDraggable } from './CircularSearchArea'\nimport { formatDecimals } from '../../lib/format'\n\n\nvar origoIcon = icon({\n iconUrl: '/origin.svg',\n iconSize: [70, 70],\n iconAnchor: [35, 68],\n})\n\nconst AntennaRangeConfigurationMap = inject(\"preferenceStore\")(observer(class AntennaRangeConfigurationMap extends Component {\n state = {\n x: 0,\n y: 0,\n zoom: 1,\n }\n invalidateSize = () => {\n if (this.refs.map) {\n this.refs.map.leafletElement.invalidateSize()\n }\n }\n render() {\n const {rangeFormStore, maxRadius } = this.props\n const position = xyToLeflet(this.state.x, this.state.y)\n const converter = this.props.preferenceStore.converter\n const gridSize = this.props.preferenceStore.getGridSize(maxRadius)\n\n return (\n \n \n \n \n Origin location\n \n \n \n \n )\n }\n}))\n\nexport { AntennaRangeConfigurationMap }\n","import React from 'react'\nimport { Icon } from 'semantic-ui-react'\n\nconst DescribeForwardBackward = ({val}) => (\n 0 ? \"up\" : \"down\")}/> {val > 0 ? \"Forward\" : \"Backward\"}\n)\n\nconst DescribeLeftRight = ({val}) => (\n 0 ? \"right\" : \"left\")}/> {val > 0 ? \"Right\" : \"Left\"}\n)\n\nexport { DescribeForwardBackward, DescribeLeftRight }","import React, { Component } from 'react';\nimport { Segment, Icon, Grid, Table, Responsive } from 'semantic-ui-react'\nimport { observer } from 'mobx-react'\nimport { ShowUnit } from '../ShowUnit'\nimport { formatDecimals } from '../../lib/format'\n\nconst DirectionAndValueCell = ({direction, icon, value, error, unitName}) => (\n \n \n  {direction}\n \n\n \n {formatDecimals(value, 1)}\n \n\n \n \n \n \n)\n\nconst CircularRangeConfigView = observer(class CircularRangeConfigView extends Component {\n render() {\n const { form, unitName } = this.props\n return (\n \n
Search range
\n \n \n \n \n \n \n
\n
\n )\n }\n})\n\n\nconst ReceiverView = observer(class ReceiverView extends Component {\n render() {\n const { form, getAbsolute, unitName } = this.props\n const x = getAbsolute(\"x\")\n const y = getAbsolute(\"y\")\n return (\n \n
Receiver {this.props.id+1}
\n\n \n \n 0 ? \"Forward\" : \"Backward\"}\n icon={x > 0 ? \"arrow up\" : \"arrow down\"}\n value={form.fields.x.value}\n error={form.fields.x.error}\n unitName={unitName}\n />\n 0 ? \"Right\" : \"Left\"}\n icon={y > 0 ? \"arrow right\" : \"arrow left\"}\n value={form.fields.y.value}\n error={form.fields.y.error}\n unitName={unitName}\n />\n \n \n
\n
\n )\n }\n})\n\n\nconst CircularShowFullSummary = ({rangeFormStore, rxCollectionFormStore}) => (\n \n \n \n \n \n \n \n \n {rxCollectionFormStore.all.map(d => (\n \n \n \n ))}\n \n \n \n \n\n)\n\nconst CircularShowSmallSummary = ({rangeFormStore, rxCollectionFormStore}) => (\n \n \n {rxCollectionFormStore.all.map(d => (\n \n ))}\n \n)\n\nconst CircularSummary = ({form, unitName}) => (\n \n \n \n \n \n)\n\nexport { CircularShowFullSummary, CircularShowSmallSummary, CircularSummary }\n","import React from 'react';\nimport { observer } from 'mobx-react'\nimport { Grid, Form, Icon, Segment, SegmentGroup } from 'semantic-ui-react'\nimport { ExpandableSettings } from '../Components/ExpandableSettings'\nimport { AntennaRangeConfigurationMap } from '../Components/Map/AntennaConfigurationMap'\nimport { DescribeForwardBackward, DescribeLeftRight } from '../Components/Map/guihelpers'\nimport { CircularSummary } from './Map/SummaryViews'\nimport { FormInput } from '../Stores/FormStores/FormStore'\nimport antennaConfig from './antenna_config.svg';\n\nconst AntennaConfig = observer(class AntennaConfig extends React.Component {\n render() {\n const fields = this.props.antennaFormStore.form.fields\n const unitName = this.props.antennaFormStore.unitName\n const onFieldChange = this.props.antennaFormStore.onFieldChange\n return (\n \n
\n
Distance to Topside housing
\n \n
Distance to Topside housing
\n \n
Antenna depth
\n \n
Antenna rotation offset from Topside housing Forward (clockwise)
\n \n \n
\n )\n }\n})\n\nconst AntennaAndRangeConfiguratorView = observer(class AntennaAndRangeConfiguratorView extends React.Component {\n render() {\n const { rangeFormStore, antennaFormStore, maxRadius } = this.props\n return (\n
\n \n \n

Place antenna as shown in the illustration. Advanced setup can be used for customization.

\n \n
\n\n \n

Antenna setup illustration

\n \"\"/\n
\n
\n \n \n \n \n \n \n
\n )\n }\n})\n\n\nexport { AntennaAndRangeConfiguratorView }\n","import React, { Component } from 'react';\nimport { observer, inject } from 'mobx-react'\nimport { Icon, Table } from 'semantic-ui-react'\nimport { icon, CRS, divIcon } from 'leaflet'\nimport { Map, Marker, Popup, ZoomControl } from 'react-leaflet'\nimport { xyToLeflet, leafletToXY } from './geohelpers'\nimport { WaterlinkedLogoControl, GridSizeView } from './MapControls'\nimport { CircleGrid } from './Grid'\nimport { ConvexHullPoly } from './ConvexHullPoly'\nimport { FormInput } from '../../Stores/FormStores/FormStore'\nimport ReactResizeDetector from 'react-resize-detector';\nimport { formatDecimals } from '../../lib/format'\nimport { ShowUnit } from '../ShowUnit'\nimport { clamp } from '../../lib/helpers'\nimport { CircularSearchAreaDraggable } from './CircularSearchArea'\nimport { DescribeForwardBackward, DescribeLeftRight } from './guihelpers'\n\n\nvar origoIcon = icon({\n iconUrl: '/origin.svg',\n iconSize: [70, 70],\n iconAnchor: [35, 68],\n})\nvar dragIcon = divIcon({\n className: 'receiverIcon',\n iconSize: [20, 20],\n iconAnchor: [10, 10],\n html: '',\n})\n\nconst rxOpts = {\n iconSize: [25, 40],\n iconAnchor: [12, 39],\n popupAnchor: [0, -32],\n shadowUrl: '/marker-shadow.png',\n shadowSize: [41, 41],\n shadowAnchor: [12, 39]\n}\n\nvar rxIcons = {\n 1: icon(Object.assign({iconUrl: '/marker-rx-1.png'}, rxOpts)),\n 2: icon(Object.assign({iconUrl: '/marker-rx-2.png'}, rxOpts)),\n 3: icon(Object.assign({iconUrl: '/marker-rx-3.png'}, rxOpts)),\n 4: icon(Object.assign({iconUrl: '/marker-rx-4.png'}, rxOpts)),\n}\n\nconst ReceiverDraggable = observer(class ReceiverDraggable extends Component {\n onDrag = (e) => {\n const pos = leafletToXY(e.target.getLatLng())\n pos[0] = clamp(pos[0], -100, 100)\n pos[1] = clamp(pos[1], -100, 100)\n e.target.setLatLng(xyToLeflet(pos[0], pos[1]))\n\n if (this.props.onMove) {\n this.props.onMove(this.props.id, ...pos)\n }\n }\n render() {\n const { id, x, y, form, onFieldChange, unitName } = this.props\n return (\n \n \n
\n
Receiver {id+1} placement
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Depth\n \n \n \n \n\n \n \n
\n
\n
\n
\n )\n }\n})\n\n\nconst ReceiverConfigurationMap = inject(\"preferenceStore\")(observer(class ReceiverConfigurationMap extends Component {\n state = {\n x: 0,\n y: 0,\n zoom: 1,\n }\n onReceiverMove = (id, x, y) => {\n let receiver = this.props.rxFormStore.get(id)\n receiver.onAbsoluteMetricFieldChange('x', x, 2)\n receiver.onAbsoluteMetricFieldChange('y', y, 2)\n }\n invalidateSize = () => {\n if (this.refs.map) {\n this.refs.map.leafletElement.invalidateSize()\n }\n }\n render() {\n const position = xyToLeflet(this.state.x, this.state.y)\n const { rxFormStore, rangeFormStore, maxRadius } = this.props\n const debug = false\n const converter = this.props.preferenceStore.converter\n const gridSize = this.props.preferenceStore.getGridSize(maxRadius)\n return (\n \n \n \n \n Origin location\n\n {rxFormStore.count > 0 && (\n rxFormStore.all.map((d, idx) => (\n ))\n )}\n \n \n {(debug && rxFormStore.count > 0) && d.getFlattenedAbsoluteMetricValues())}/>}\n \n \n )\n }\n}))\n\nexport { ReceiverConfigurationMap };\n","import React, { Component } from 'react';\nimport { Polygon } from 'react-leaflet'\nimport { convexHull } from './geometry'\nimport { xyToLeflet } from './geohelpers'\n\n/*\nDebugging of Area generated by the receivers\n*/\nclass ConvexHullPoly extends Component {\n render() {\n if (this.props.points.length < 2) {\n return null\n }\n const { points } = this.props\n console.log(points)\n const cxpts = points.map(d => [d.x, d.y])\n const hull = convexHull(cxpts)\n let hullPoints = hull.map(d => xyToLeflet(d[0], d[1]))\n return (\n \n )\n\n }\n}\n\nexport { ConvexHullPoly }\n","import React from 'react';\nimport { Message, Icon } from 'semantic-ui-react'\n\nconst ReceiversOnALineWarning = () => (\n \n \n \n Receivers seem to be located on a line\n When Receivers are on a line it will be impossible to determine what side of the line the Locator is positioned.\n You should move atleast 1 Receiver further away from the line or limit the search range\n to search only on one side of the line to improve positioning.\n \n \n)\n\nconst BaselineTooSmallWarning = () => (\n \n \n \n Receivers should be further apart or search range smaller\n Time of flight is measured and when the Receivers are too close together accuracy will be degraded.\n To improve accuracy, move the Receivers further apart or limit the search range.\n \n \n)\n\nexport { ReceiversOnALineWarning, BaselineTooSmallWarning }\n","import React from 'react';\nimport { Segment, Responsive } from 'semantic-ui-react'\nimport { observer } from 'mobx-react'\nimport { ReceiverConfigurationMap } from './Map/ReceiverConfigurationMap'\nimport { BaselineTooSmallWarning, ReceiversOnALineWarning } from './BaselineWarnings'\nimport { CircularShowFullSummary, CircularShowSmallSummary } from './Map/SummaryViews'\nimport '../Routes/Receivers.css'\n\n\nconst ReceiverAndRangeConfiguratorView = observer(class ReceiverAndRangeConfiguratorView extends React.Component {\n render() {\n const { rangeFormStore, rxCollectionFormStore, maxRadius } = this.props\n\n const rangeArea = rangeFormStore.getArea()\n const rxArea = rxCollectionFormStore.getReceiverArea()\n\n let baselineWarning = false\n if ((rxArea < 2*2) && (rangeArea > 40*40)) { baselineWarning = true }\n if ((rxArea < 1*1) && (rangeArea > 10*10)) { baselineWarning = true }\n if ((rxArea < 0.5*0.5) && (rangeArea > 2*2)) { baselineWarning = true }\n let receiversOnALineWarning = rxArea < 0.5\n\n return (\n \n \n \n \n \n {baselineWarning && ()}\n {receiversOnALineWarning && ( ) }\n\n\n {/* Show summary better suited for small screens */}\n \n \n \n\n \n \n \n\n \n \n )\n }\n})\n\nexport { ReceiverAndRangeConfiguratorView }\n","import React from 'react';\nimport { observer, inject } from 'mobx-react'\nimport { Segment, Button} from 'semantic-ui-react'\nimport { FormSetupError, FormIsLoading } from '../Stores/FormStores/FormStore'\nimport { ReceiverCollectionFormStore} from '../Stores/FormStores/Receivers'\nimport { AntennaFormStore } from '../Stores/FormStores/Antenna'\nimport { RangeFormStore } from '../Stores/FormStores/Range'\nimport { ensureStoreHasLoaded, TimeoutError } from '../Stores/ensure'\nimport { RoundDecimalPlaces } from '../lib/format'\nimport { AntennaAndRangeConfiguratorView } from '../Components/Antenna'\nimport { ReceiverAndRangeConfiguratorView } from '../Components/Receivers'\nimport ApplyFeedbackButton from '../Components/ApplyFeedbackButton'\nimport { HeaderWithHelp } from '../Components/HeplText'\nimport './Receivers.css'\n\nconst MaxRadius = parseInt(process.env.REACT_APP_UGPS_MAX_RANGE)\n\nconst BaseLineChooser = observer(class BaseLineChooser extends React.Component {\n render() {\n const antennaEnabled = this.props.antennaEnabled\n const antennaColor = antennaEnabled ? \"green\" : null\n const receiverColor = !antennaEnabled ? \"green\" : null\n\n return (\n
\n \n \n \n \n \n
\n )\n }\n})\n\nlet rangeFormStore = new RangeFormStore()\nlet antennaFormStore = new AntennaFormStore()\nlet rxCollectionFormStore = new ReceiverCollectionFormStore()\n\nconst BaselineSetup = inject(\"preferenceStore\")(inject(\"rxStore\")(inject(\"antennaStore\")(inject(\"genericConfigStore\")(observer(class BaselineSetup extends React.Component {\n state = {\n isStoring: false,\n storeFailure: \"\",\n storeSuccess: false,\n isSettingUp: true,\n setupError: false,\n }\n reset() {\n let gcs = this.props.genericConfigStore\n let acs = this.props.antennaStore\n let converter = this.props.preferenceStore.converter\n const unitName = converter.nameShort()\n const unitFactor = converter.toUPShortFromMetric(1)\n const decimals = 2\n\n // Range form store\n rangeFormStore.form.meta.unitName = unitName\n rangeFormStore.form.meta.unitFactor = unitFactor\n rangeFormStore.form.meta.unitDecimals = decimals\n //rangeFormStore.onAbsoluteMetricFieldChange('xmin', gcs.ranges.x.min, decimals)\n //rangeFormStore.onAbsoluteMetricFieldChange('xmax', gcs.ranges.x.max, decimals)\n //rangeFormStore.onAbsoluteMetricFieldChange('ymin', gcs.ranges.y.min, decimals)\n //rangeFormStore.onAbsoluteMetricFieldChange('ymax', gcs.ranges.y.max, decimals)\n //rangeFormStore.onAbsoluteMetricFieldChange('zmax', gcs.ranges.z.max, decimals)\n rangeFormStore.onAbsoluteMetricFieldChange('radius', gcs.ranges.radius, 0)\n rangeFormStore.onFieldChange('direction', gcs.ranges.direction)\n rangeFormStore.onFieldChange('sector', gcs.ranges.sector)\n\n // Antenna form store\n antennaFormStore.form.meta.unitName = unitName\n antennaFormStore.form.meta.unitFactor = unitFactor\n antennaFormStore.form.meta.unitDecimals = decimals\n\n antennaFormStore.form.fields.x.value = RoundDecimalPlaces(converter.toUPShortFromMetric(acs.x), decimals)\n antennaFormStore.form.fields.y.value = RoundDecimalPlaces(converter.toUPShortFromMetric(acs.y), decimals)\n antennaFormStore.onAbsoluteMetricFieldChange('depth', acs.depth, decimals)\n antennaFormStore.onFieldChange('rotation', acs.rotation)\n\n rxCollectionFormStore.antenna = (gcs.antenna === \"enabled\")\n rxCollectionFormStore.clear()\n this.props.rxStore.all.forEach(d => {\n rxCollectionFormStore.addReceiver(d.id,\n RoundDecimalPlaces(converter.toUPShortFromMetric(d.x), decimals),\n RoundDecimalPlaces(converter.toUPShortFromMetric(d.y), decimals),\n RoundDecimalPlaces(converter.toUPShortFromMetric(d.z), decimals),\n unitName,\n unitFactor,\n decimals,\n )\n })\n }\n componentWillReceiveProps() {\n console.log(\"Reset config form: Props\")\n this.reset()\n }\n componentDidMount() {\n console.log(\"Reset config form: Mount\")\n Promise.all([\n ensureStoreHasLoaded(this.props.genericConfigStore),\n ensureStoreHasLoaded(this.props.rxStore),\n ensureStoreHasLoaded(this.props.antennaStore)]\n ).then(() => {\n console.log(\"Store loaded, resetting\")\n this.reset()\n this.setState({isSettingUp: false})\n }).catch((err) => {\n this.setState({isSettingUp: false, setupError: \"Error getting values\"})\n if (err instanceof TimeoutError) {\n console.log(\"Timeout while waiting for store\", err)\n } else {\n throw err\n }\n })\n }\n store = () => {\n this.setState({isStoring: true, storeFailure: \"\", storeSuccess: false})\n\n const ranges = this.props.genericConfigStore.ranges\n const decimals = 2\n const rangeFormData = rangeFormStore.getFlattenedAbsoluteMetricValues(decimals)\n //ranges.x.setMinMax(rangeFormData.xmin, rangeFormData.xmax)\n //ranges.y.setMinMax(rangeFormData.ymin, rangeFormData.ymax)\n //ranges.z.setMax(rangeFormData.zmax)\n ranges.radius = rangeFormData.radius\n // Should not be flattened as the are not distances\n ranges.direction = parseFloat(rangeFormStore.form.fields.direction.value)\n ranges.sector = parseFloat(rangeFormStore.form.fields.sector.value)\n\n // Propagate values to store\n const { rxStore } = this.props;\n rxCollectionFormStore.all.forEach(d => {\n let r = rxStore.get(d.id)\n let receiverFormData = d.getFlattenedAbsoluteMetricValues(decimals)\n r.setXYZ(receiverFormData.x, receiverFormData.y, receiverFormData.z)\n })\n\n\n this.props.genericConfigStore.antenna = rxCollectionFormStore.antenna ? \"enabled\" : \"disabled\"\n\n // Store antenna values\n const { antennaStore } = this.props\n const antennaFormData = antennaFormStore.getFlattenedAbsoluteMetricValues(decimals)\n\n antennaStore.x = antennaFormData.x\n antennaStore.y = antennaFormData.y\n antennaStore.depth = antennaFormData.depth\n antennaStore.rotation = parseInt(antennaFormStore.form.fields.rotation.value)\n\n // Store the receivers first, then store generic configuration to propagate the configuration\n this.props.rxStore.store()\n .then(reponse => {\n return this.props.antennaStore.store()\n })\n .then(reponse => {\n console.log(\"Storing config\", this.props.genericConfigStore.toTransportArray())\n return this.props.genericConfigStore.store()\n })\n .then(response => {\n this.setState({isStoring: false, storeFailure: \"\", storeSuccess: true})\n setTimeout(() => {\n this.setState({storeSuccess: false})\n }, 2000)\n }).catch(e => {\n console.log(\"Baseline storing error\", e)\n this.setState({isStoring: false, storeFailure: e.toString()})\n })\n }\n\n onChangeBaseline = ( baseline ) =>{\n if (baseline === \"antenna\") {\n rxCollectionFormStore.antenna = true\n } else {\n rxCollectionFormStore.antenna = false\n }\n }\n\n render() {\n\n if (this.state.isSettingUp) {\n return ()\n }\n if (this.state.setupError) {\n return (Error getting form values)\n }\n\n const formsAreValid = rangeFormStore.form.meta.isValid && rxCollectionFormStore.isValid && antennaFormStore.form.meta.isValid\n const antennaEnabled = rxCollectionFormStore.antenna\n return (\n \n \n \n \n \n \n\n {antennaEnabled ? (\n
\n \n \n
\n ) : (\n
\n \n

Move the receivers and range to their approximate position by dragging the icons in the map view, click on the icons to enter exact values, then click on Apply to store stettings. Scroll down for details.

\n \n
\n )}\n
\n
\n )\n }\n onSubmitForm = () => {\n console.log('submitted', rangeFormStore.getFlattenedValues())\n }\n})))))\n\nexport default BaselineSetup\n","import React, { Component } from 'react';\nimport { Segment, Message, Form } from 'semantic-ui-react'\nimport { observer, inject } from 'mobx-react'\nimport { FormSetupError, FormIsLoading, SimpleFormInput, Configurator, remap } from '../Stores/FormStores/FormStore'\nimport ApplyFeedbackButton from '../Components/ApplyFeedbackButton'\n\nconst NetworkConfigFormView = observer(({form, onChange}) => (\n
\n \n \n \n \n \n \n
\n))\n\nconst NetworkConfig = inject(\"networkConfigStore\")(observer(class NetworkForm extends Component {\n componentDidMount() {\n this.props.networkConfigStore.fetch()\n }\n onChange = (key, val) => {\n this.props.networkConfigStore.formStore.form.fields.dhcp.value = val\n }\n\n render() {\n const networkConfigStore = this.props.networkConfigStore;\n if (networkConfigStore.isLoading) {\n return (\n \n )\n }\n if (!networkConfigStore.loadSuccess) {\n return (\n Error getting network configuration.\n )\n }\n let form = networkConfigStore.formStore.form;\n const onChangeStore = networkConfigStore.formStore.onFieldChange;\n return (\n
\n \n\n {form.fields.dhcp.value === \"false\" && (\n
\n
\n \n
\n )}\n
\n {networkConfigStore.store()}}\n disabled={!form.meta.isValid || networkConfigStore.isStoring}\n isStoring={networkConfigStore.isStoring}\n storeSuccess={networkConfigStore.storeSuccess}\n storeFailure={networkConfigStore.storeSuccess ? \"\" : networkConfigStore.storeError}\n />\n {networkConfigStore.storeSuccess &&\n \n }\n
\n )\n }\n}))\n\nclass Network extends Component {\n render() {\n return (\n \n \n \n )\n }\n}\n\nexport default Network;","import React, { Component } from 'react';\nimport { Segment, Form, Table } from 'semantic-ui-react'\nimport { observer, inject } from 'mobx-react'\nimport { FormSetupError, FormIsLoading, SimpleFormInput, Configurator, remap } from '../Stores/FormStores/FormStore'\nimport ApplyFeedbackButton from '../Components/ApplyFeedbackButton'\n\n\nconst WifiConfigFormView = observer(({form, onChange}) => (\n
\n \n \n \n \n
\n))\n\nconst AccessPointDetails = () => (\n \n \n \n Access point name\n {\"UnderwaterGPS\"}\n \n \n Access point password\n {\"waterlinked\"}\n \n \n URL for web GUI\n {\"http://192.168.7.1\"}\n \n \n
\n)\n\nconst WifiConfig = inject(\"wifiConfigStore\")(observer(class WifiForm extends Component {\n componentDidMount() {\n this.props.wifiConfigStore.fetch()\n }\n onChange = (key, val) => {\n this.props.wifiConfigStore.formStore.form.fields.mode.value = val\n }\n\n render() {\n const wifiConfigStore = this.props.wifiConfigStore;\n if (wifiConfigStore.isLoading) {\n return (\n \n )\n }\n if (!wifiConfigStore.loadSuccess) {\n return (\n Error getting WiFi configuration.\n )\n }\n let form = wifiConfigStore.formStore.form;\n const onChangeStore = wifiConfigStore.formStore.onFieldChange;\n return (\n
\n \n\n
\n {form.fields.mode.value === \"client\" ? (\n \n ) : (\n \n )}\n
\n {wifiConfigStore.store()}}\n disabled={!form.meta.isValid || wifiConfigStore.isStoring}\n isStoring={wifiConfigStore.isStoring}\n storeSuccess={wifiConfigStore.storeSuccess}\n storeFailure={wifiConfigStore.storeSuccess ? \"\" : wifiConfigStore.storeError}\n />\n
\n )\n }\n}))\n\nclass Wifi extends Component {\n render() {\n return (\n \n \n \n )\n }\n}\n\nexport default Wifi;\n","import React, { useState, useEffect } from 'react';\nimport { Button, Segment, Message, Icon, Table, Form, Input } from 'semantic-ui-react'\nimport { fetcher, superFetchHeaders } from '../lib/fetch'\nimport useSWR from 'swr'\nimport { formatDecimals } from '../lib/format'\n\nconst ResetGyros = () => {\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [isSubmitError, setIsSubmitError] = useState(false)\n const [isSuccess, setIsSuccess] = useState(false)\n\n const onSubmit = (e) => {\n e.preventDefault()\n setIsSubmitting(true)\n setIsSubmitError(false)\n setIsSuccess(false)\n superFetchHeaders('/api/v1/imu/resetgyros', 'POST', null)\n .then(res => {\n setIsSubmitting(false)\n if (!res.ok) {\n setIsSubmitError(true)\n return\n }\n setIsSuccess(true)\n setTimeout(() => { setIsSuccess(false)}, 2000)\n })\n }\n\n return (\n \n \n \n \n Step 1: Reset Gyros\n
\n

Place the topside housing on the ground and make sure there is no movement.

\n

Ready?

\n
\n
\n
\n \n Reset gyros \n {isSubmitting && ()}\n {isSuccess && ()}\n \n {isSubmitError &&
 Error resetting gyros
}\n
\n )\n}\n/*\nconst CalibrateMag = () => {\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [isSubmitError, setIsSubmitError] = useState(false)\n const { data, error } = useSWR('/api/v1/imu/calibrate', fetcher, { refreshInterval: 300, dedupingInterval: 10 })\n\n const onCalibrationStart = (e) => {\n e.preventDefault()\n setIsSubmitting(true)\n setIsSubmitError(false)\n const data = {action: \"start\"}\n superFetchHeaders('/api/v1/imu/calibrate', 'POST', data)\n .then(res => {\n if (!res.ok) {\n setIsSubmitError(true)\n setIsSubmitting(false)\n return\n }\n mutate('/api/v1/imu/calibrate')\n // It takes a little bit before calbration in progress is detected\n // a small timeout is added to avoid fickering in the gui\n setTimeout(() => { setIsSubmitting(false) }, 200)\n \n })\n mutate('/api/v1/imu/calibrate')\n }\n\n const onCalibrationAbort = (e) => {\n e.preventDefault()\n setIsSubmitting(true)\n setIsSubmitError(false)\n const data = {action: \"abort\"}\n superFetchHeaders('/api/v1/imu/calibrate', 'POST', data)\n .then(res => {\n if (!res.ok) {\n setIsSubmitError(true)\n setIsSubmitting(false)\n return\n }\n mutate('/api/v1/imu/calibrate')\n // It takes a little bit before calbration in progress is detected\n // a small timeout is added to avoid fickering in the gui\n setTimeout(() => { setIsSubmitting(false) }, 200)\n \n })\n mutate('/api/v1/imu/calibrate')\n }\n\n\n function isCalib(data, wantedState) {\n if (!data) {\n return false\n }\n if (data.state === undefined) {\n return false\n }\n return data.state === wantedState\n }\n\n const calibrateInProgress = isCalib(data, 1)\n const calibrationSuccess = isCalib(data, 2)\n return (\n \n \n \n \n Step 1: Magnetometer calibration\n
\n

Place the topside housing on a flat surface and rotate the sensor slowly around only the Z axis (3 turns)

\n

Ready?

\n
\n
\n
\n \n Start {isSubmitting && ()}\n \n {isSubmitError &&
 Error performing action
}\n\n {error &&

Error fetching calibration status

}\n {calibrateInProgress && (\n \n
Calibration in progress
\n \n {data.progress} %\n \n \n
\n )}\n {calibrationSuccess && (\n \n
Calibration completed
\n
\n )}\n\n
\n )\n}\n*/\n\nconst ResetNorth = () => {\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [isSubmitError, setIsSubmitError] = useState(false)\n const [isSuccess, setIsSuccess] = useState(false)\n const [heading, setHeading] = useState(\"0\")\n\n const onSubmit = (e, action) => {\n e.preventDefault()\n setIsSubmitting(true)\n setIsSubmitError(false)\n setIsSuccess(false)\n const data = {action: action, heading: parseFloat(heading)}\n superFetchHeaders('/api/v1/imu/setnorth', 'POST', data)\n .then(res => {\n setIsSubmitting(false)\n if (!res.ok) {\n setIsSubmitError(true)\n return\n }\n setIsSuccess(true)\n setTimeout(() => { setIsSuccess(false)}, 2000)\n })\n }\n\n //const error = false;\n // Form validation\n const [formValid, setformValid] = useState(true)\n\n useEffect(() => {\n const formValidation = () => {\n if (heading.length < 1) {\n return false\n }\n const floatVal = parseFloat(heading)\n if (isNaN(floatVal)) {\n return false\n }\n if (floatVal < 0) {\n return false\n }\n if (floatVal > 360) {\n return false\n }\n return true\n }\n setformValid(formValidation())\n }, [heading])\n\n const onChange = (e) => {\n setHeading(e.target.value)\n }\n\n return (\n \n \n \n \n Step 2: Set Heading\n
\n

Using a magnetic compass (eg. boat or mobile phone) take a note of the heading of the G2 topside.\n This is the heading of the forward arrow that can be seen on the G2 topside.\n Enter this value and click \"Set current heading\".\n

\n

\n The on-board compass can drift 5-20 degrees per hour. To improve the compass heading accuracy:\n set compass heading regularly during operation or alternatively use an external compass.\n

\n
\n
\n
\n\n
\n \n \n \n \n\n \n \n onSubmit(e, \"set\")}\n disabled={isSubmitting || !formValid}>\n Set current heading \n {isSubmitting && ()}\n {isSuccess && ()}\n \n \n
\n\n {/*\n onSubmit(e, \"clear\")}\n disabled={isSubmitting}>\n Clear north point \n {isSubmitting && ()}\n {isSuccess && ()}\n \n */}\n {isSubmitError &&
 Error performing action
}\n
\n )\n}\n\n\nconst CompassArrow = ({direction}) => {\n const width = 50;\n const height = 50;\n const path = \"M 0,0 L 0,-10 L 50,0 L 0,10 Z\";\n const a1 = (direction + 90) % 360\n const a2 = (a1 + 180) % 360\n return (\n \n \n \n \n )\n}\n/*\nconst Arrow = ({direction}) => {\n const width = 50;\n const height = 50;\n const path = \"M 0,0 L 0,-10 L 50,0 L 0,10 Z\";\n const a1 = (direction) % 360\n //const a2 = (a1 + 180) % 360\n return (\n \n \n \n )\n}\n\n\nconst IMUOrientation = () => {\n const { data, error } = useSWR('/api/v1/imu/calibrate', fetcher, { refreshInterval: 100, dedupingInterval: 10 })\n const {yaw, pitch, roll} = data || {yaw: -1, pitch: -1, roll: -1}\n const y = error ? \"--\" : formatDecimals(yaw, 1)\n //const p = error ? \"--\" : formatDecimals(pitch, 1)\n //const r = error ? \"--\" : formatDecimals(roll, 1)\n\n const arrowOn = false;\n return (\n \n \n \n Axis\n Angle\n \n \n \n \n Roll\n {r}\n {arrowOn && ()}\n \n \n \n Pitch\n {p}\n {arrowOn && ()}\n \n \n \n Yaw\n {y} \n \n\n \n
\n )\n}\n*/\n\nconst IMUOrientation = () => {\n const { data, error } = useSWR('/api/v1/imu/calibrate', fetcher, { refreshInterval: 100, dedupingInterval: 10 })\n const { yaw } = data || {yaw: -1}\n const y = error ? \"--\" : formatDecimals(yaw, 1)\n\n return (\n \n \n \n Axis\n Angle\n \n \n \n \n Heading\n {y} \n \n\n \n
\n )\n}\n\n\nexport { IMUOrientation, ResetGyros, /*CalibrateMag,*/ ResetNorth }\n","import React from 'react';\nimport { Segment, Divider } from 'semantic-ui-react'\nimport { IMUOrientation, ResetGyros, ResetNorth } from '../Components/IMUConfig'\n\n\nexport default function IMU() {\n return (\n \n \n Inertial Measurement Unit\n \n\n \n \n \n\n \n \n \n\n\n \n \n \n\n \n )\n}","import React, { useState } from 'react';\nimport { Segment, Divider, Button, Header, Form, Message } from 'semantic-ui-react'\nimport fetch from 'unfetch'\n\nasync function ForceExternalDepth(depth, timeout) {\n const data = {\n depth: Number(depth),\n temp: 0\n }\n const options = {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data)\n }\n const url = \"/api/v1/external/depth\"\n const extra = timeout > 0 ? \"?t=\" + timeout : \"\"\n return fetch(url + extra, options)\n}\n\nfunction ExternalDepth() {\n const [submitMessage, setSubmitMessage] = useState(\"\")\n const [depth, setDepth] = useState(0.1)\n const setExternalDepth = async (depth, persistent) => {\n setSubmitMessage(\"\")\n console.log(\"force\", depth, persistent)\n const response = await ForceExternalDepth(depth, persistent)\n if (!response.ok) {\n const msg = await response.text()\n setSubmitMessage(`ERR ${response.status} ${msg}`)\n } else {\n const msg = await response.text()\n setSubmitMessage(`Set depth: ${msg}`)\n }\n }\n return (\n
\n\n
\n \n setDepth(e.target.value)}/>\n \n
\n
\n \n \n \n
{submitMessage}
\n\n
\n )\n}\n\n\nfunction Debug() {\n return (\n \n\n Debug\n\n \n\n
External depth
\n \n\n
\n )\n}\n\nexport default Debug\n","import React, { useState } from 'react';\nimport { Icon, Popup, Button, Table, Segment, Message } from 'semantic-ui-react'\nimport { Link } from 'react-router-dom'\nimport useSWR from 'swr'\n\nconst fetcher = (...args) => fetch(...args).then(res => res.json())\nconst swrOptions = {\n refreshWhenOffline: true,\n refreshWhenHidden: true,\n refreshInterval: 1000,\n dedupingInterval: 500,\n}\n\nfunction StatusGroupDetail({status_group, status, message, help, error_ids}) {\n const [isExpanded, setIsExpanded] = useState(false)\n const expandIcon = isExpanded ? \"chevron up\" : \"chevron down\"\n\n // Hack to show link to IMU calibration if heading is missing\n // TODO: Find a better way of doing this\n const err_id = error_ids || [] // Make sure we always have an array\n const linkToIMU = err_id.findIndex(d => d === \"imu:onboard:missingheading\") >= 0\n\n const icon = status === \"ok\" ? \"check\" : \"close\"\n const color = status === \"ok\" ? \"green\" : \"red\"\n\n const toggleExpanded = () => {\n setIsExpanded(!isExpanded)\n }\n\n return (\n \n {status_group}\n \n \n

{message} {linkToIMU && (

Click to set heading

)}

\n {help && }\n {isExpanded &&
{help}
}\n
\n
\n )\n}\n\nconst StatusReportDetail = ({sorted}) => {\n return (\n \n \n {sorted.map(d => (\n \n ))}\n \n
\n )\n}\n\nfunction severityToNumber(severity) {\n if (severity === \"error\") { return 2 }\n if (severity === \"warning\") { return 1 }\n return 0\n\n}\n\n\nfunction StatusReport() {\n const [isOpen, setIsOpen] = useState(true)\n\n const { data, error } = useSWR('/api/v1/status_report/', fetcher, swrOptions)\n const statuses = error ? [] : (data ? data : [])\n const severity = Math.max(...statuses.map(d => severityToNumber(d.status)))\n const isOK = error ? false : severity < 2\n return (\n
\n System status\n \n \n }\n wide=\"very\"\n open={isOpen}\n onOpen={() => setIsOpen(true)}\n onClose={() => setIsOpen(false)}\n >\n \n \n {error && (\n \n \n \n \n No connection to Underwater GPS topside\n \n Please check network connection and power.\n \n \n )}\n \n{/*\n \n*/}\n \n \n \n
\n )\n}\n\n\nexport { StatusReport }\n","import { extendObservable, computed, observable, action } from 'mobx'\nimport { superFetch } from '../lib/fetch'\n\nclass ReceiverModel {\n constructor(id, x, y, z) {\n extendObservable(this, {\n id: id,\n x: x,\n y: y,\n z: z,\n setX: action((x) => { this.x = x }),\n setY: action((y) => { this.y = y }),\n setZ: action((z) => { this.z = z }),\n setXY: action((x, y) => { this.x = x; this.y = y; }),\n setXYZ: action((x, y, z) => { this.x = x; this.y = y; this.z = z }),\n getX: computed(() => { return parseFloat(this.x)}),\n getY: computed(() => { return parseFloat(this.y)}),\n getZ: computed(() => { return parseFloat(this.z)}),\n isValid: computed(() => {\n let x = parseFloat(this.x);\n let y = parseFloat(this.y);\n let z = parseFloat(this.z);\n return (!isNaN(x + y + z))\n }),\n });\n }\n}\n\nclass ReceiverStore {\n constructor() {\n extendObservable(this, {\n hasLoaded: false,\n isLoading: false,\n isStoring: false,\n receiverRegistry: observable.map(),\n count: computed(() => this.receiverRegistry.size),\n clear: action(() => {\n this.receiverRegistry.clear()\n }),\n addReceiver: action((id, x,y,z) => {\n this.receiverRegistry.set(id, new ReceiverModel(id, x,y,z))\n }),\n get: (id) => { return this.receiverRegistry.get(id) },\n all: computed(() => this.receiverRegistry.values()),\n });\n }\n fetch() {\n this.isLoading = true\n return superFetch('/api/v1/config/receivers/')\n .then((data) => {\n this.hasLoaded = true\n this.isLoading = false\n this.loadingError = \"\"\n this.receiverRegistry.clear()\n data.forEach(d => {\n let model = new ReceiverModel(d.id, d.x, d.y, d.z)\n this.receiverRegistry.set(d.id, model)\n })\n })\n .catch((e) => {\n this.isLoading = false\n this.loadingError = e.toString()\n })\n }\n store() {\n this.isStoring = true\n let all = this.receiverRegistry.values().map(rx => {\n if (!rx.isValid) {\n throw Error(\"Invalid\", rx)\n }\n let data = { id: rx.id, x: rx.getX, y: rx.getY, z: rx.getZ }\n console.log(\"Storing receiver\", rx.id, \"data\", data)\n let url = `/api/v1/config/receivers/${rx.id}`\n var headers = {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n }\n return fetch(url, {\n method: 'PUT',\n headers: headers,\n body: JSON.stringify(data)\n }).then(response => {\n if (response.status !== 204) {\n throw Error(\"Unable to store\")\n }\n })\n })\n return Promise.all(all)\n .then(response => {\n this.isStoring = false;\n return response\n }).catch(e => {\n this.isStoring = false;\n throw e\n })\n }\n\n}\n\nexport { ReceiverStore }\n","import { extendObservable } from 'mobx'\nimport { superFetch } from '../lib/fetch'\n\nclass AntennaStore {\n constructor() {\n extendObservable(this, {\n hasLoaded: false,\n isLoading: false,\n isStoring: false,\n x: 1,\n y: 2,\n depth: 1.5,\n rotation: 90,\n\n /*receiverRegistry: observable.map(),\n count: computed(() => this.receiverRegistry.size),\n clear: action(() => {\n this.receiverRegistry.clear()\n }),\n addReceiver: action((id, x,y,z) => {\n this.receiverRegistry.set(id, new ReceiverModel(id, x,y,z))\n }),\n get: (id) => { return this.receiverRegistry.get(id) },\n all: computed(() => this.receiverRegistry.values()),*/\n\n });\n }\n fetch() {\n this.isLoading = true\n return superFetch('/api/v1/config/antenna')\n .then((data) => {\n this.hasLoaded = true\n this.isLoading = false\n this.loadingError = \"\"\n this.x = data.x\n this.y = data.y\n this.depth = data.depth\n this.rotation = data.antenna_rotation\n })\n .catch((e) => {\n this.isLoading = false\n this.loadingError = e.toString()\n console.log(\"Error loading antenna config: \", e.toString())\n })\n }\n store() {\n this.isStoring = true\n let data = {\n x: this.x,\n y: this.y,\n depth: this.depth,\n antenna_rotation: this.rotation,\n }\n console.log(\"Storing antenna config: \", data)\n var headers = {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n }\n return fetch('/api/v1/config/antenna', {\n method: 'PUT',\n headers: headers,\n body: JSON.stringify(data)\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText)\n }\n return response\n })\n .then(response => response.text())\n .then(response => {\n console.log(\"stored\", response)\n this.isStoring = false;\n this.storeError = \"\";\n return response\n })\n .catch((e) => {\n console.log(\"store error\", e.toString())\n this.isStoring = false;\n this.storeError = e.toString()\n throw e;\n })\n }\n\n}\n\nexport { AntennaStore }\n","import { extendObservable, computed, action } from \"mobx\"\nimport { superFetch } from '../lib/fetch'\n\nconst MaxRangeDistance = 100\n\nclass RangeStore {\n constructor() {\n extendObservable(this, {\n isLoading: false,\n radius: parseInt(process.env.REACT_APP_UGPS_MAX_RANGE),\n direction: 340,\n sector: 90,\n getCircularRanges: action(() => {\n return {x: {min: -this.radius, max: this.radius}, y: {min: -this.radius, max: this.radius}}\n }),\n });\n }\n}\n\n\nclass GenericConfigStore {\n constructor(min, max) {\n extendObservable(this, {\n hasLoaded: false,\n isLoading: false,\n loadingError: \"\",\n isStoring: false,\n storingError: \"\",\n locator_type: \"u1\",\n channel: 5017,\n environment: \"reflective\",\n vehicle_imu: \"disabled\",\n external_pps: \"disabled\",\n antenna: \"enabled\",\n compass: \"static\",\n gps: \"static\",\n static_lat: 63.422,\n static_lon: 10.424,\n static_orientation: 42,\n speed_of_sound: \"1475\",\n ranges: new RangeStore(),\n isOnboardGPS: computed(() => this.gps === \"onboard\"),\n isOnboardIMU: computed(() => this.compass === \"onboard\"),\n fetch: () => {\n this.isLoading = true\n return superFetch('/api/v1/config/generic')\n .then((data) => {\n this.hasLoaded = true\n this.fromTransportArray(data)\n this.isLoading = false\n this.loadingError = \"\"\n })\n .catch((e) => {\n this.isLoading = false\n this.loadingError = e.toString()\n })\n },\n fromTransportArray: (data) => {\n this.locator_type = data.locator_type\n this.channel = data.channel\n this.compass = data.compass\n this.static_orientation = data.static_orientation\n this.gps = data.gps\n this.static_lat = data.static_lat\n this.static_lon = data.static_lon\n this.speed_of_sound = data.speed_of_sound.toString()\n this.vehicle_imu = data.imu_vehicle_enabled ? \"enabled\" : \"disabled\"\n this.external_pps = data.external_pps_enabled ? \"enabled\" : \"disabled\"\n this.antenna = data.antenna_enabled ? \"enabled\" : \"disabled\"\n this.environment = data.environment\n this.ranges.radius = data.search_radius\n this.ranges.direction = data.search_direction\n this.ranges.sector = data.search_sector\n },\n toTransportArray: () => {\n return {\n locator_type: this.locator_type,\n channel: this.channel,\n imu_vehicle_enabled: (this.vehicle_imu === \"enabled\"),\n external_pps_enabled: (this.external_pps === \"enabled\"),\n antenna_enabled: (this.antenna === \"enabled\"),\n environment: this.environment,\n gps: this.gps,\n compass: this.compass,\n static_lat: this.static_lat,\n static_lon: this.static_lon,\n speed_of_sound: parseInt(this.speed_of_sound),\n static_orientation: this.static_orientation,\n search_radius: this.ranges.radius,\n search_direction: this.ranges.direction,\n search_sector: this.ranges.sector,\n // legacy\n range_min_x: 0,\n range_min_y: 0,\n range_max_x: 0,\n range_max_y: 0,\n range_max_z: 0,\n }\n },\n store: () => {\n this.isStoring = true\n let data = this.toTransportArray()\n var headers = {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n }\n return fetch('/api/v1/config/generic', {\n method: 'PUT',\n headers: headers,\n body: JSON.stringify(data)\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText)\n }\n return response\n })\n .then(response => response.text())\n .then(response => {\n console.log(\"stored\", response)\n this.isStoring = false;\n this.storeError = \"\";\n return response\n })\n .catch((e) => {\n console.log(\"store error\", e.toString())\n this.isStoring = false;\n this.storeError = e.toString()\n throw e;\n })\n },\n })\n }\n}\n\nexport { RangeStore, GenericConfigStore, MaxRangeDistance }\n","import { extendObservable, computed, observable, action } from \"mobx\"\nimport { IsDefinedFinite, GetArrayIndexOrFallback, GetChannelName, NoValue } from '../lib/format'\nimport { GetIcon, GetColor } from '../lib/markerIcon'\n\n\nclass PositionList {\n constructor() {\n extendObservable(this, {\n positions: observable.array(),\n add: action((data) => {\n this.positions.push({data: data, ts: Date.now()})\n if (this.positions.length > 4*60*5) { // 5 min trail length (4 times a second)\n this.positions.shift()\n }\n }),\n all: computed(() => this.positions.peek().map(d => d.data)),\n getLatest: (trailLength) => {\n const startts = Date.now() - trailLength*1000\n const values = this.positions.peek()\n return values.filter(d => d.ts > startts)\n },\n getXY: (trailLength) => {\n const latest = this.getLatest(trailLength)\n return latest.map(d => [d.data.x, d.data.y])\n },\n getLatLng: (trailLength) => {\n const latest = this.getLatest(trailLength)\n return latest.map(d => [d.data.lat, d.data.lng])\n },\n })\n }\n}\n\nclass MasterPositionStore {\n constructor() {\n extendObservable(this, {\n isLoading: false,\n loadingError: \"\",\n lat: 0,\n lng: 0,\n cog: -1,\n hdop: -1,\n numsats: -1,\n sog: -1,\n orientation: 0,\n latlng: computed(() => [this.lat, this.lng]),\n positions: new PositionList(),\n setFromWs: action((data) => {\n // Set data but guard against missing values\n // WARNING: data.lon rewritten to this.lng\n if (IsDefinedFinite(data, \"lat\")) { this.lat = data.lat }\n if (IsDefinedFinite(data, \"lon\")) { this.lng = data.lon }\n if (IsDefinedFinite(data, \"cog\")) { this.cog = data.cog }\n if (IsDefinedFinite(data, \"hdop\")) { this.hdop = data.hdop }\n if (IsDefinedFinite(data, \"numsats\")) { this.numsats = data.numsats }\n if (IsDefinedFinite(data, \"sog\")) { this.sog = data.sog }\n if (IsDefinedFinite(data, \"orientation\")) { this.orientation = data.orientation }\n\n const validPos = IsDefinedFinite(data, \"lat\") && IsDefinedFinite(data, \"lon\")\n if (validPos) {\n this.positions.add({lat: this.lat, lng: this.lng})\n }\n }),\n setNoValue: action(() => {\n this.lat = NoValue\n this.lng = NoValue\n this.cog = NoValue\n this.hdop = NoValue\n this.numsats = NoValue\n this.sog = NoValue\n this.orientation = NoValue\n }),\n })\n }\n}\n\nclass GlobalPositionStore {\n constructor() {\n extendObservable(this, {\n isLoading: false,\n loadingError: \"\",\n lat: 0,\n lng: 0,\n cog: -1,\n hdop: -1,\n numsats: -1,\n sog: -1,\n orientation: 0,\n position_valid: false,\n position_invalid_count: 0,\n update: 0,\n positions_dict: {},\n getShow: (key) => {\n return this.positions_dict[key].show\n },\n setShow: action((key, value) => {\n this.update += 1\n this.positions_dict[key].show = value\n }),\n setFromWsDict: action((data, channel) => {\n this.update += 1\n var chName = GetChannelName(channel)\n if (!(chName in this.positions_dict)) {\n this.positions_dict[chName] = {\n lat: 0,\n lng: 0,\n cog: -1,\n hdop: -1,\n numsats: -1,\n sog: -1,\n orientation: 0,\n positions: new PositionList(),\n name: chName,\n color: GetColor(chName),\n icon: GetIcon(chName),\n show: true,\n }\n }\n\n // Set data but guard against missing values\n // WARNING: data.lon rewritten to this.lng\n if (IsDefinedFinite(data, \"lat\")) { this.positions_dict[chName].lat = data.lat }\n if (IsDefinedFinite(data, \"lon\")) { this.positions_dict[chName].lng = data.lon }\n if (IsDefinedFinite(data, \"cog\")) { this.positions_dict[chName].cog = data.cog }\n if (IsDefinedFinite(data, \"hdop\")) { this.positions_dict[chName].hdop = data.hdop }\n if (IsDefinedFinite(data, \"numsats\")) { this.positions_dict[chName].numsats = data.numsats }\n if (IsDefinedFinite(data, \"sog\")) { this.positions_dict[chName].sog = data.sog }\n if (IsDefinedFinite(data, \"orientation\")) { this.positions_dict[chName].orientation = data.orientation }\n\n if (chName === \"filtered\"){\n // Set data but guard against missing values\n // WARNING: data.lon rewritten to this.lng\n if (IsDefinedFinite(data, \"lat\")) { this.lat = data.lat }\n if (IsDefinedFinite(data, \"lon\")) { this.lng = data.lon }\n if (IsDefinedFinite(data, \"cog\")) { this.cog = data.cog }\n if (IsDefinedFinite(data, \"hdop\")) { this.hdop = data.hdop }\n if (IsDefinedFinite(data, \"numsats\")) { this.numsats = data.numsats }\n if (IsDefinedFinite(data, \"sog\")) { this.sog = data.sog }\n if (IsDefinedFinite(data, \"orientation\")) { this.orientation = data.orientation }\n }\n\n this.position_valid = data.position_valid\n if (this.position_valid) {\n this.position_invalid_count = 0\n } else {\n this.position_invalid_count += 1\n }\n const validPos = IsDefinedFinite(data, \"lat\") && IsDefinedFinite(data, \"lon\")\n if (validPos && this.position_valid) {\n this.positions_dict[chName].positions.add({lat: this.positions_dict[chName].lat, lng: this.positions_dict[chName].lng})\n }\n }),\n setNoValue: action(() => {\n this.lat = 0\n this.lng = 0\n this.cog = NoValue\n this.hdop = NoValue\n this.numsats = NoValue\n this.sog = NoValue\n this.orientation = NoValue\n this.position_valid = false\n this.position_invalid_count = 10\n }),\n })\n }\n}\n\n\nclass AcousticPositionStore {\n constructor() {\n extendObservable(this, {\n isLoading: false,\n loadingError: \"\",\n x: 0,\n y: 0,\n z: 0,\n std: NoValue,\n position_valid: false,\n position_invalid_count: 0,\n update: 0,\n\n positions_dict: {},\n\n receiver_distance: [NoValue, NoValue, NoValue, NoValue],\n receiver_rssi: [NoValue, NoValue, NoValue, NoValue],\n receiver_nsd: [NoValue, NoValue, NoValue, NoValue],\n receiver_valid: [false, false, false, false],\n getDiag: () => {\n return [0, 1, 2, 3].map(d => {\n // Check for undefined as we are assuming 4 entries here\n return {\n id: d,\n distance: GetArrayIndexOrFallback(this.receiver_distance, d, NoValue),\n rssi: GetArrayIndexOrFallback(this.receiver_rssi, d, NoValue),\n nsd: GetArrayIndexOrFallback(this.receiver_nsd, d, NoValue),\n valid: GetArrayIndexOrFallback(this.receiver_valid, d, false),\n }\n })\n },\n getShow: (key) => {\n return this.positions_dict[key].show\n },\n setShow: action((key, value) => {\n this.update += 1\n this.positions_dict[key].show = value\n }),\n setNoValue: action(() => {\n this.x = NoValue\n this.y = NoValue\n this.z = NoValue\n this.std = NoValue\n this.position_valid = false\n this.position_invalid_count = 10\n this.receiver_distance = [NoValue, NoValue, NoValue, NoValue]\n this.receiver_rssi = [NoValue, NoValue, NoValue, NoValue]\n this.receiver_nsd = [NoValue, NoValue, NoValue, NoValue]\n this.receiver_valid = [false, false, false, false]\n\n for (let chName in this.positions_dict) {\n this.positions_dict[chName].position_valid = false\n this.positions_dict[chName].position_invalid_count = 10\n }\n this.update += 1\n }),\n setFromWsDict: action((data, channel) => {\n this.update += 1\n var chName = GetChannelName(channel)\n if (!(chName in this.positions_dict)) {\n this.positions_dict[chName] = {\n x: 0,\n y: 0,\n z: 0,\n std: NoValue,\n position_valid: false,\n position_invalid_count: 0,\n positions: new PositionList(),\n name: chName,\n color: GetColor(chName),\n icon: GetIcon(chName),\n show: true,\n }\n\n }\n\n this.positions_dict[chName].position_valid = (data.position_valid ? true : false)\n\n if (chName === \"filtered\") {\n const t = data.receivers\n for (let i=0; i<4; i++) {\n this.receiver_distance[i] = t[i].recv_distance || 0\n this.receiver_nsd[i] = t[i].recv_nsd_db ||0\n this.receiver_rssi[i] = t[i].recv_rssi || 0\n this.receiver_valid[i] = t[i].recv_valid ? true : false\n }\n\n if (IsDefinedFinite(data, \"xPos\")) {this.x = data.xPos}\n if (IsDefinedFinite(data, \"yPos\")) {this.y = data.yPos}\n if (IsDefinedFinite(data, \"zPos\")) {this.z = data.zPos}\n if (IsDefinedFinite(data, \"std\")) {this.std = data.std}\n this.position_valid = (data.position_valid ? true : false)\n\n if (data.position_valid) {\n // Reset position invalid\n this.position_invalid_count = 0\n } else {\n // Increase invalid count for visualization\n this.position_invalid_count = this.position_invalid_count+1\n }\n }\n if (this.positions_dict[chName].position_valid) {\n // Only add positions to map if it is valid\n this.positions_dict[chName].position_invalid_count = 0\n if (IsDefinedFinite(data, \"xPos\")) {this.positions_dict[chName].x = data.xPos}\n if (IsDefinedFinite(data, \"yPos\")) {this.positions_dict[chName].y = data.yPos}\n if (IsDefinedFinite(data, \"zPos\")) {this.positions_dict[chName].z = data.zPos}\n if (IsDefinedFinite(data, \"std\")) {this.positions_dict[chName].std = data.std}\n this.positions_dict[chName].positions.add({x: this.positions_dict[chName].x, y: this.positions_dict[chName].y, z: this.positions_dict[chName].z})\n } else {\n // Increase invalid count for visualization\n this.positions_dict[chName].position_invalid_count = this.positions_dict[chName].position_invalid_count+1\n }\n }),\n })\n }\n}\n\nexport { MasterPositionStore, GlobalPositionStore, AcousticPositionStore }\n","import { extendObservable } from \"mobx\"\nimport { superFetch } from '../lib/fetch'\n\n\nclass GPSIMUStatusStore {\n constructor() {\n extendObservable(this, {\n isLoading: false,\n loadingError: \"\",\n gps: 0,\n imu: 0,\n battery: -1,\n })\n }\n fetch() {\n this.isLoading = true\n superFetch('/api/v1/about/status')\n .then((data) => {\n this.imu = data.imu\n this.gps = data.gps\n this.battery = data.battery\n this.loadingError = \"\"\n })\n .catch((e) => { \n this.isLoading = false\n this.loadingError = e.toString()\n })\n }\n}\n\nexport { GPSIMUStatusStore }\n","import { extendObservable, action, computed } from 'mobx'\nimport { persist, create } from 'mobx-persist'\n\nclass UnitConverter {\n nameShort = () => {\n return this.shortName\n }\n // to User Preferred Short distance unit\n toUPShortFromMetric = (value) => {\n return value * this.shortFactor\n }\n // to Metric from User Preferred Short\n toMetricFromUPShort = (value) => {\n return value / this.shortFactor\n }\n nameLong = () => {\n return this.longName\n }\n // to User Preferred Long distance unit\n toUPLongFromMetric = (value) => {\n return value * this.longFactor\n }\n // to Metric from User Preferred Long\n toMetricFromUPLong = (value) => {\n return value / this.longFactor\n }\n isMetric = true\n // Default grid increments\n gridIncrements = [20, 10, 5, 2, 1, 0.5]\n gridSize = (longestSide) => {\n let selected = this.gridIncrements[0]\n this.gridIncrements.forEach(increment => {\n if ((longestSide / increment) <= 20) {\n selected = increment\n return true\n }\n });\n return selected\n }\n // to User preferred temperature unit\n metricToUPTemperature = (value) => {\n return value;\n }\n}\n\nclass MetricUnitConverter extends UnitConverter {\n constructor() {\n super()\n this.name = \"metric\"\n this.shortFactor = 1\n this.shortName = \"meters\"\n this.longFactor = 1\n this.longName = \"meters\"\n this.temperatureSymbol = \"C\"\n this.isMetric = true\n }\n}\n\nclass ImperialUnitConverter extends UnitConverter {\n constructor() {\n super()\n this.name = \"imperial\"\n this.shortFactor = 39.3700787\n this.shortName = \"inches\"\n this.longFactor = 3.2808399\n this.longName = \"feet\"\n this.temperatureSymbol = \"F\"\n this.isMetric = false\n // Grid increments in feet\n this.gridIncrements = [100, 40, 20, 10, 5, 3].map(d => this.toMetricFromUPLong(d))\n }\n\n metricToUPTemperature = (value) => {\n return value * 9/5 + 32\n }\n}\n\n\nclass UserPreferenceStore {\n constructor() {\n extendObservable(this, {\n unit: \"metric\",\n boatVisible: true,\n latLngVisible: false,\n setUnit: action((unit) => {\n if (unit === 'imperial') {\n this.unit = 'imperial'\n return\n }\n this.unit = 'metric'\n }),\n setBoatVisibility: action((visible) => {\n this.boatVisible = visible\n }),\n converter: computed(() => {\n if (this.unit === \"imperial\") {\n return new ImperialUnitConverter()\n }\n return new MetricUnitConverter()\n }),\n getGridSize: (longestSize) => {\n return this.converter.gridSize(longestSize)\n },\n setLatLngVisible: action((visible) => {\n this.latLngVisible = visible\n })\n })\n }\n}\n\nconst schema = {\n unit: true,\n boatVisible: true,\n latLngVisible: true,\n}\n\nfunction newPreferenceStore(storage) {\n const store = persist(schema)(new UserPreferenceStore())\n\n const hydrate = create({storage: storage})\n hydrate('preferences', store)\n /*\n .then(() => {\n console.log('Loaded preferences')\n })\n */\n return store\n}\n\n\nexport { newPreferenceStore };\n","import { superFetch, superFetchHeaders } from '../lib/fetch'\nimport { extendObservable, action, computed } from 'mobx';\n\nclass VersionStore {\n constructor() {\n extendObservable(this, {\n loading: true,\n error: \"\",\n hasChecked: false,\n isLatest: true,\n latestRelease: \"\",\n url: \"\",\n updateAvailable: computed(() => {\n return this.hasChecked && !this.isLatest\n }),\n fetch: action((chipid, version) => {\n //const baseUrl = \"http://127.0.0.1:8080\"\n const baseUrl = \"https://update.waterlinked.com\"\n return superFetchHeaders(`${baseUrl}/api/v1/latest`, \"POST\", {\n chipid: chipid,\n current: version,\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText)\n }\n return response\n })\n .then(response => { return response.json() })\n .then(data => {\n var url = data.url\n if (url[0] === \"/\") {\n url = baseUrl + url\n }\n this.isLatest = data.is_latest\n this.latestRelease = data.latest_release\n this.url = url\n this.loading = false\n this.error = \"\"\n this.hasChecked = true\n }).catch(err => {\n this.loading = false\n this.error = \"Request failed \" + err.toString()\n this.hasChecked = true\n })\n })\n })\n }\n}\n\nclass AboutInfoStore {\n constructor() {\n extendObservable(this, {\n loading: true,\n error: \"\",\n version: \"unknown\",\n versionShort: \"unknown\",\n hasVersionShort: computed(() => {\n return this.versionShort !== \"unknown\"\n }),\n chipid: \"unknown\",\n versionStore: new VersionStore(),\n fetch: action(() => {\n this.loading = true\n return superFetch('/api/v1/about')\n .then(data => {\n this.chipid = data[\"chipid\"]\n this.version = data[\"version\"]\n this.versionShort = data[\"version_short\"]\n this.loading = false\n this.error = \"\"\n return this.versionStore.fetch(this.chipid, this.versionShort)\n })\n .catch(err => {\n this.loading = false\n this.error = \"Request failed \" + err.toString()\n })\n })\n })\n }\n}\n\nexport { AboutInfoStore, VersionStore }","import { extendObservable, action } from \"mobx\"\nimport { superFetch } from '../lib/fetch'\n\nclass LocatorOrientation {\n constructor() {\n extendObservable(this, {\n loadingError: \"\",\n orientation: -1,\n\n setFromWs: action((data) => {\n this.orientation = data.orientation\n }),\n setNoValue: action(() => {\n this.orientation = -1\n })\n })\n }\n fetch() {\n return superFetch('/api/v1/external/orientation')\n .then((data) => {\n this.orientation = data.orientation\n this.loadingError = \"\"\n })\n .catch((e) => {\n this.loadingError = e.toString()\n })\n }\n}\n\n\nexport { LocatorOrientation }","import { extendObservable, computed } from 'mobx'\nimport { GenericFormStore } from './FormStore'\nimport { rules } from '../../lib/validator'\n\nclass PointOfInterestItemFormStore extends GenericFormStore {\n constructor(id, lat, lng, depth, name, icon) {\n super()\n extendObservable(this, {\n id: id,\n form: {\n fields: {\n lat: {\n value: lat,\n error: null,\n rule: [rules.between(-90, 90)],\n },\n lng: {\n value:lng,\n error: null,\n rule: [rules.between(-180, 180)],\n },\n depth: {\n value: depth,\n error: null,\n rule: [rules.between(0, 100)],\n },\n name: {\n value: name,\n error: null,\n rule: [rules.string()],\n },\n icon: {\n value: icon,\n error: null,\n rule: [rules.string()],\n },\n visible: {\n value: true,\n error: null,\n rule: [],\n },\n },\n meta: {\n isValid: true,\n error: null,\n unitName: \"meter\",\n unitFactor: 1.0,\n unitDecimals: 2,\n },\n },\n latlng: computed(() => {\n const lat = this.getAbsolute(\"lat\")\n const lng = this.getAbsolute(\"lng\")\n return {lat: isNaN(lat) ? 0 : lat, lng: isNaN(lng) ? 0 : lng}\n }),\n json: computed(() => {\n return {\n \"name\": this.form.fields.name.value,\n \"lat\": this.getAbsolute(\"lat\"),\n \"lng\": this.getAbsolute(\"lng\"),\n \"depth\": this.getAbsoluteMetric(\"depth\"),\n \"icon\": this.form.fields.icon.value,\n \"visible\": this.form.fields.visible.value,\n }\n }),\n isEditing: false,\n isLoading: false,\n errorUpdate: \"\",\n errorDelete: \"\",\n })\n }\n}\n\nexport { PointOfInterestItemFormStore }\n\n","import { extendObservable, action, observable, computed } from 'mobx'\nimport { PointOfInterestItemFormStore } from './FormStores/PointOfInteres'\nimport { superFetch, superFetchHeaders } from '../lib/fetch'\n\nclass PointsOfInterestStore {\n constructor() {\n extendObservable(this, {\n points: observable.map(),\n add: action((id, lat, lng, depth, name=null, icon=null) => {\n this.points.set(id, new PointOfInterestItemFormStore(id, lat, lng, depth, name, icon))\n }),\n delete: action((id) => {\n this.points.delete(id)\n }),\n count: computed(() => this.points.size),\n get: (id) => { return this.points.get(id) },\n getVisible: computed(() => this.points.values().filter(d => d.form.fields.visible.value)),\n all: computed(() => this.points.values()),\n newestFirst: computed(() => this.all.reverse()),\n isFetching: false,\n errorFetchMsg: \"\",\n errorAddMsg: \"\",\n getHref: (id) => {\n return '/api/v1/poi/'+id\n },\n addPersistent: action((lat, lng, depth, name=null, icon=null, startEdit=false) => {\n const _name = name || \"POI \" + (this.count+1)\n const _icon = icon || \"anchor\"\n let data = {\n \"name\": _name,\n \"lat\": lat,\n \"lng\": lng,\n \"depth\": depth,\n \"icon\": _icon,\n \"visible\": true\n }\n this.errorAddMsg = \"\"\n return superFetchHeaders(this.getHref(\"\"), 'POST', data)\n .then(response => {\n if (response.status === 201) {\n return superFetchHeaders(response.headers.get('Location'))\n }\n else if (response.status === 403) {\n throw Error(\n \"Unable to add POI. You have exceeded maximum number of POIs.\" +\n \"Please delete a point before adding a new.\"\n )\n }\n else {\n throw Error(\"Unable to add POI: \" + response.statusText)\n }\n })\n .then (response => {\n if (response.status !== 200){\n throw Error(\"Unable to fetch newly added POI: \" + response.statusText)\n }\n return response\n })\n .then(response => { return response.json() })\n .then(data => {\n this.add(data.id, data.lat, data.lng, data.depth, data.name, data.icon)\n if (startEdit) {\n this.get(data.id).isEditing = true\n }\n this.errorAddMsg = \"\"\n })\n .catch(err => {\n this.errorAddMsg = err.toString()\n })\n }),\n updatePersistent: action((id) => {\n let point = this.get(id)\n point.isLoading = true\n point.errorUpdate = \"\"\n return superFetchHeaders(this.getHref(id), 'PATCH', point.json)\n .then(response => {\n if (response.status !== 204) {\n throw Error(\"Unable to update POI: \" + response.statusText)\n }\n point.isEditing = false\n point.isLoading = false\n point.errorUpdate = \"\"\n })\n .catch(err => {\n point.isEditing = true\n point.isLoading = false\n point.errorUpdate = err.toString()\n setTimeout(() => {\n point.errorUpdate = \"\"\n }, 3000)\n })\n }),\n deletePersistent: action((id) => {\n let point = this.get(id)\n point.isLoading = true\n point.errorDelete = \"\"\n return superFetchHeaders(this.getHref(id), 'DELETE')\n .then(response => {\n if (response.status !== 204) {\n throw Error(\"Unable to delete POI: \" + response.statusText)\n }\n this.delete(id)\n point.isLoading = false\n point.errorDelete = \"\"\n })\n .catch(err => {\n point.isLoading = false\n point.errorDelete = err.toString()\n setTimeout(() => {\n point.errorDelete = \"\"\n }, 3000)\n })\n }),\n fetch: action(() => {\n this.isFetching = true\n this.errorFetchMsg = \"\"\n return superFetch(this.getHref(\"\"))\n .then((data) => {\n data.forEach(d => {\n this.add(d.id, d.lat, d.lng, d.depth, d.name, d.icon)\n })\n this.errorFetchMsg = \"\"\n this.isFetching = false\n })\n .catch(err => {\n this.errorFetchMsg = err.toString()\n this.isFetching = false\n })\n }),\n })\n }\n}\n\nexport default PointsOfInterestStore\n\n","import { extendObservable } from 'mobx'\nimport { GenericFormStore } from './FormStore'\nimport { rules } from '../../lib/validator'\n\nclass NetworkConfigFormStore extends GenericFormStore {\n constructor() {\n super()\n extendObservable(this, {\n form: {\n fields: {\n address: {\n value: \"10.11.12.95\",\n error: null,\n rule:[rules.string()],\n },\n prefix: {\n value: 24,\n error: null,\n rule: [rules.between(1, 31)],\n },\n gateway: {\n value: \"10.11.12.1\",\n error: null,\n rule: [rules.string()],\n },\n dns: {\n value: \"10.11.12.1\",\n error: null,\n rule: [rules.string()],\n },\n dhcp: {\n value: \"true\",\n error: null,\n rule: [rules.string()],\n },\n },\n meta: {\n isValid: true,\n error: null,\n },\n },\n error: \"\",\n })\n }\n}\n\nexport { NetworkConfigFormStore }\n","import { extendObservable } from 'mobx'\nimport { NetworkConfigFormStore } from './FormStores/NetworkConfig'\nimport axios from 'axios'\n\nclass NetworkConfigStore {\n constructor() {\n extendObservable(this, {\n formStore: new NetworkConfigFormStore(),\n loadSuccess: false,\n isLoading: false,\n isStoring: false,\n storeSuccess: false,\n loadingError: \"\",\n storeError: \"\",\n });\n }\n fetch() {\n this.isLoading = true\n axios.get('/api/v1/config/ip')\n .then((response) => {\n this.loadSuccess = true\n this.isLoading = false\n this.loadingError = \"\"\n this.formStore.form.fields.address.value = response.data.address\n this.formStore.form.fields.prefix.value = response.data.prefix\n this.formStore.form.fields.gateway.value = response.data.gateway\n this.formStore.form.fields.dns.value = response.data.dns\n this.formStore.form.fields.dhcp.value = response.data.dhcp ? \"true\" : \"false\"\n })\n .catch((e) => {\n this.loadSuccess = false\n this.isLoading = false\n this.loadingError = e.toString()\n console.log(this.loadingError)\n })\n\n }\n store() {\n this.isStoring = true\n let data = {\n \"address\": this.formStore.form.fields.address.value,\n \"prefix\": parseInt(this.formStore.form.fields.prefix.value,10),\n \"gateway\": this.formStore.form.fields.gateway.value,\n \"dns\": this.formStore.form.fields.dns.value,\n \"dhcp\": this.formStore.form.fields.dhcp.value === \"true\",\n }\n axios.put('/api/v1/config/ip', data)\n .then(response => {\n if (!response.data.success) {\n // Get error message from \"error\" field of the JSON and pass on\n throw new Error(response)\n }\n return response\n })\n .then(response => {\n console.log(\"stored\", response);\n this.storeSuccess = true;\n this.isStoring = false;\n this.storeError = \"\";\n return response\n })\n .catch((e) => {\n console.log(\"store error\", e.response.data.detail.toString());\n this.isStoring = false;\n this.storeSuccess = false;\n this.storeError = e.response.data.detail.toString()\n })\n }\n}\n\nexport default NetworkConfigStore\n","import { extendObservable } from 'mobx'\nimport { GenericFormStore } from './FormStore'\nimport { rules } from '../../lib/validator'\n\nclass WifiConfigFormStore extends GenericFormStore {\n constructor() {\n super()\n extendObservable(this, {\n form: {\n fields: {\n ssid: {\n value: \"WiFi name\",\n error: null,\n rule:[rules.string()],\n },\n password: {\n value: \"Password\",\n error: null,\n rule: [rules.string()],\n },\n mode: {\n value: \"ap\",\n error: null,\n rule: [rules.string()],\n },\n },\n meta: {\n isValid: true,\n error: null,\n },\n },\n error: \"\",\n })\n }\n}\n\n\nexport { WifiConfigFormStore }\n","import { extendObservable } from 'mobx'\nimport { WifiConfigFormStore } from './FormStores/WifiConfig'\nimport axios from 'axios'\n\n\nclass WifiConfigStore {\n constructor() {\n extendObservable(this, {\n formStore: new WifiConfigFormStore(),\n loadSuccess: false,\n isLoading: false,\n isStoring: false,\n storeSuccess: false,\n loadingError: \"\",\n storeError: \"\",\n });\n }\n fetch() {\n this.isLoading = true\n axios.get('/api/v1/config/wifi')\n .then((response) => {\n this.loadSuccess = true\n this.isLoading = false\n this.loadingError = \"\"\n this.formStore.form.fields.ssid.value = response.data.ssid\n this.formStore.form.fields.password.value = response.data.password\n this.formStore.form.fields.mode.value = response.data.mode\n })\n .catch((e) => {\n this.loadSuccess = false\n this.isLoading = false\n this.loadingError = e.toString()\n console.log(this.loadingError)\n })\n\n }\n store() {\n this.isStoring = true\n let data = {\n \"ssid\": this.formStore.form.fields.ssid.value,\n \"password\": this.formStore.form.fields.password.value,\n \"mode\": this.formStore.form.fields.mode.value,\n }\n axios.put('/api/v1/config/wifi', data)\n .then(response => {\n if (!response.data.success) {\n // Get error message from \"error\" field of the JSON and pass on\n throw new Error(response)\n }\n return response\n })\n .then(response => {\n console.log(\"stored\", response);\n this.storeSuccess = true;\n this.isStoring = false;\n this.storeError = \"\";\n return response\n })\n .catch((e) => {\n console.log(\"store error\", e.response.data.error.toString());\n this.isStoring = false;\n this.storeSuccess = false;\n this.storeError = e.response.data.error.toString()\n })\n }\n}\n\nexport default WifiConfigStore\n","import { extendObservable } from 'mobx'\nimport { superFetch } from '../lib/fetch'\n\n\nclass TemperatureStore {\n constructor() {\n extendObservable(this, {\n isLoading: false,\n loadingError: \"\",\n board: -271,\n water: -271,\n })\n }\n fetch() {\n this.isLoading = true\n superFetch('/api/v1/about/temperature')\n .then((data) => {\n this.board = parseFloat(data.board)\n this.water = parseFloat(data.water)\n })\n .catch((e) => {\n this.isLoading = false\n this.loadingError = e.toString()\n })\n }\n}\n\nexport default TemperatureStore\n","import { extendObservable, action } from 'mobx';\n\nclass WSStatusStore {\n constructor() {\n extendObservable(this, {\n connected: false,\n error: \"\",\n setConnected: action((is_connected) => {\n this.connected = is_connected\n }),\n })\n }\n}\n\nexport default WSStatusStore\n","function wsUrl() {\n if (process.env.REACT_APP_DEVMODE === \"true\") {\n // Somehow the websocket proxy in setupProxy.js is not working.\n // This workaround is needed until that is fixed.\n return \"ws://127.0.0.1:8080/ws\"\n }\n return \"ws://\" + window.location.host + \"/ws\"\n}\n\nexport default wsUrl\n","import { ReceiverStore } from './Receivers'\nimport { AntennaStore } from './Antenna'\nimport { GenericConfigStore } from './GenericConfig'\nimport { MasterPositionStore, GlobalPositionStore, AcousticPositionStore } from './Positions'\nimport { GPSIMUStatusStore } from './Status'\nimport { newPreferenceStore } from './Preferences'\nimport { AboutInfoStore } from './Version'\nimport { LocatorOrientation } from './LocatorOrientation'\nimport PointOfInterestStore from './PointOfInterest'\nimport NetworkConfigStore from './NetworkConfig'\nimport WifiConfigStore from './WifiConfig'\nimport TemperatureStore from './Temperature'\nimport WSStatusStore from './WSStatusStore'\nimport ReconnectingWebSocket from 'reconnecting-websocket';\nimport wsUrl from '../lib/ws'\n\nexport default function initStores() {\n const genericConfigStore = new GenericConfigStore()\n genericConfigStore.fetch()\n\n const rxStore = new ReceiverStore()\n rxStore.fetch()\n\n const antennaStore = new AntennaStore()\n antennaStore.fetch()\n\n setInterval(() => {\n genericConfigStore.fetch()\n rxStore.fetch()\n antennaStore.fetch()\n }, 15000)\n\n const pointOfInterestStore = new PointOfInterestStore()\n pointOfInterestStore.fetch()\n\n const gpsimuStore = new GPSIMUStatusStore()\n gpsimuStore.fetch()\n setInterval(() => {\n gpsimuStore.fetch()\n }, 1000)\n\n const aboutInfoStore = new AboutInfoStore()\n setTimeout(() => {\n aboutInfoStore.fetch()\n }, 500)\n\n const temperatureStore = new TemperatureStore()\n temperatureStore.fetch()\n setInterval(() => {\n temperatureStore.fetch()\n }, 7000)\n\n\n const acousticPositionStore = new AcousticPositionStore()\n const fusionPositionStore = new AcousticPositionStore()\n const masterPositionStore = new MasterPositionStore()\n const globalPositionStore = new GlobalPositionStore()\n\n const locatorOrientationStore = new LocatorOrientation()\n const networkConfigStore = new NetworkConfigStore()\n const wifiConfigStore = new WifiConfigStore()\n const connectionStatusStore = new WSStatusStore()\n\n const preferenceStore = newPreferenceStore(localStorage)\n\n var timeoutGlobalHandle\n var timeoutAcosticHandle\n var timeoutOrientation\n\n function globalTimeoutFunc() {\n globalPositionStore.setNoValue()\n }\n\n function acousticTimeoutFunc() {\n acousticPositionStore.setNoValue()\n }\n\n function orientationTimeoutFunc() {\n locatorOrientationStore.setNoValue()\n }\n\n\n function updateStoresFromWS() {\n const url = wsUrl()\n const socket = new ReconnectingWebSocket(url)\n socket.onopen = () => {\n connectionStatusStore.setConnected(true)\n console.log(\"store ws open\")\n }\n socket.onclose = () => {\n connectionStatusStore.setConnected(false)\n console.log(\"store ws close\")\n masterPositionStore.setNoValue()\n globalPositionStore.setNoValue()\n acousticPositionStore.setNoValue()\n }\n socket.onmessage = (e) => {\n const json = (function(raw) {\n try {\n return JSON.parse(raw);\n } catch (err) {\n return false;\n }\n })(e.data);\n if (!json) {\n return\n }\n if (json.channel === \"position:relative:filtered\") {\n acousticPositionStore.setFromWsDict(json.payload, json.channel)\n\n if (timeoutAcosticHandle) {\n clearTimeout(timeoutAcosticHandle)\n }\n timeoutAcosticHandle = setTimeout(acousticTimeoutFunc, 5000)\n }\n if (json.channel === \"position:relative:raw\") {\n //console.count(\"ws store raw\")\n acousticPositionStore.setFromWsDict(json.payload, json.channel)\n }\n // if (json.channel === \"position:relative:fusion\") {\n // //console.count(\"ws store vel\")\n // acousticPositionStore.setFromWsDict(json.payload, json.channel)\n // }\n else if (json.channel === \"position:master:active\") {\n masterPositionStore.setFromWs(json.payload)\n }\n else if (json.channel === \"position:global:filtered\") {\n //globalPositionStore.setFromWs(json.payload)\n globalPositionStore.setFromWsDict(json.payload, json.channel)\n\n if (timeoutGlobalHandle) {\n clearTimeout(timeoutGlobalHandle)\n }\n timeoutGlobalHandle = setTimeout(globalTimeoutFunc, 5000)\n }\n // else if (json.channel === \"position:global:fusion\") {\n // //globalPositionStore.setFromWs(json.payload)\n // globalPositionStore.setFromWsDict(json.payload, json.channel)\n // }\n else if (json.channel === \"orientation:external:vehicle\") {\n //console.log(json)\n locatorOrientationStore.setFromWs(json.payload)\n if (timeoutOrientation) {\n clearTimeout(timeoutOrientation)\n }\n timeoutOrientation = setTimeout(orientationTimeoutFunc, 5000)\n }\n }\n }\n\n updateStoresFromWS()\n\n return {\n rxStore,\n antennaStore,\n genericConfigStore,\n masterPositionStore,\n globalPositionStore,\n acousticPositionStore,\n fusionPositionStore,\n gpsimuStore,\n preferenceStore,\n aboutInfoStore,\n locatorOrientationStore,\n pointOfInterestStore,\n networkConfigStore,\n wifiConfigStore,\n temperatureStore,\n connectionStatusStore,\n }\n}","import React, { Component } from 'react';\nimport { Menu, Icon } from 'semantic-ui-react'\nimport { Sidebar, Segment, Responsive } from 'semantic-ui-react'\nimport { HashRouter as Router, Route, Link, Switch } from 'react-router-dom'\nimport './App.css';\nimport ErrorBoundary from './Components/ErrorBoundary'\nimport About from './Routes/About'\nimport Diagnostic from './Routes/Diagnostic'\nimport Settings from './Routes/Settings'\nimport Map from './Routes/Map'\nimport Baseline from './Routes/Baseline'\nimport Network from './Routes/Network'\nimport Wifi from './Routes/Wifi'\nimport IMU from './Routes/IMU'\nimport Debug from './Routes/Debug'\nimport { ShowProductNameAndVersion } from './Components/StatusBar'\nimport { StatusReport } from './Components/StatusReport'\nimport { UpdateAvailableIcon } from './Components/VersionInfo'\nimport { WaterLinkedLogoWithLedBlink } from './Components/LEDButton';\nimport { Provider } from 'mobx-react'\nimport ReactResizeDetector from 'react-resize-detector';\nimport { isInternetExplorer } from './lib/detect'\nimport initStores from './Stores/initStores'\n\nconst { rxStore,\n antennaStore,\n genericConfigStore,\n masterPositionStore,\n globalPositionStore,\n acousticPositionStore,\n fusionPositionStore,\n gpsimuStore,\n preferenceStore,\n aboutInfoStore,\n locatorOrientationStore,\n pointOfInterestStore,\n networkConfigStore,\n wifiConfigStore,\n temperatureStore,\n connectionStatusStore } = initStores()\n\n\nconst isIE = isInternetExplorer()\n\nclass App extends Component {\n constructor() {\n super()\n let largeScreen = true\n try {\n largeScreen = window.innerWidth > 640\n } catch (error) {\n console.log(\"Error getting window size\", error)\n }\n this.state = {\n menuVisible: largeScreen,\n }\n this.autoCollapse = !largeScreen\n }\n toggleVisibility = () => this.setState({menuVisible: !this.state.menuVisible})\n navigate = (e) => {\n if (this.autoCollapse) {\n this.setState({menuVisible: false})\n }\n return true\n }\n\n onResize = (width) => {\n if (width < 640) {\n this.autoCollapse = true\n } else {\n this.autoCollapse = false\n }\n }\n\n render() {\n return (\n \n \n
\n {isIE && (\n \n You are using the Internet Explorer browser which is not supported. Feel free to look around, but beware that everything might not work as expected\n \n \n )}\n\n \n \n \n\n \n \n Menu   \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n Position\n Baseline\n Settings\n Diagnostic\n About\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n );\n }\n}\n\nexport default App;\n","\nfunction isInternetExplorer() {\n // Detect MSIE up to version 10\n // https://stackoverflow.com/questions/24861073/detect-if-any-kind-of-ie-msie\n if(navigator.appVersion.indexOf(\"MSIE\") !== -1){\n return true;\n }\n // Detect MSIE 11\n // https://stackoverflow.com/questions/21825157/internet-explorer-11-detection\n const isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\n if (isIE11) {\n return true;\n }\n return false;\n}\n\nexport { isInternetExplorer };\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\n//import registerServiceWorker from './registerServiceWorker';\nimport 'semantic-ui-css-offline';\n\n\nReactDOM.render(, document.getElementById('root'));\n//registerServiceWorker();\n"],"sourceRoot":""}