{"version":3,"sources":["stores/DeviceQueueStore.js","theme.js","components/AutocompleteSelect.js","stores/InternalStore.js","stores/OrganizationStore.js","stores/ApplicationStore.js","stores/AircomSystemStore.js","components/TopNav.js","components/SideNav.js","components/Footer.js","stores/NotificationStore.js","components/Notifications.js","components/TitleBar.js","components/TitleBarTitle.js","stores/UpPacketStore.js","styles/formatters.js","styles/aircom-styles.js","components/DeviceReadingsTable.js","components/DeviceReadingsCards.js","components/UpPacketsLog.js","components/ValueGraph.js","stores/AppItemStore.js","components/DeviceReadingGraph.js","components/DashCard.js","stores/DeviceStore.js","views/dashboard/Dashboard.js","components/TitleBarButton.js","components/TableCellLink.js","views/organizations/ListOrganizations.js","stores/UserStore.js","views/users/ListUsers.js","components/AccessDenied.js","classes/FormComponent.js","components/Form.js","views/system/SystemSettingsForm.js","views/system/UpdateSystemSettings.js","views/system/SystemDashboard.js","stores/NetworkServerStore.js","views/network-servers/ListNetworkServers.js","views/network-servers/NetworkServerForm.js","views/network-servers/CreateNetworkServer.js","views/network-servers/UpdateNetworkServer.js","views/network-servers/NetworkServerLayout.js","components/Admin.js","components/FormControl.js","views/organizations/OrganizationForm.js","views/organizations/CreateOrganization.js","views/applications/ListApplications.js","views/organizations/ListOrganizationUsers.js","views/organizations/UpdateOrganization.js","views/organizations/OrganizationLayout.js","stores/GatewayStore.js","views/gateways/ListGateways.js","views/organizations/OrganizationDashboard.js","views/organizations/OrganizationUserForm.js","views/organizations/UpdateOrganizationUser.js","views/organizations/OrganizationUserLayout.js","stores/AircomUserStore.js","views/organizations/CreateOrganizationUser.js","views/organizations/OrganizationRedirect.js","views/organizations/OrganizationSetup.js","views/users/Login.js","views/users/UserForm.js","views/users/CreateUser.js","views/users/UpdateUser.js","views/users/UserLayout.js","views/users/ChangeUserPassword.js","stores/ServiceProfileStore.js","views/service-profiles/ListServiceProfiles.js","views/service-profiles/ServiceProfileForm.js","views/service-profiles/CreateServiceProfile.js","views/service-profiles/UpdateServiceProfile.js","views/service-profiles/ServiceProfileLayout.js","components/DeviceAdmin.js","stores/DeviceProfileStore.js","views/device-profiles/ListDeviceProfiles.js","components/KVForm.js","components/DurationField.js","views/device-profiles/DeviceProfileForm.js","views/device-profiles/CreateDeviceProfile.js","views/device-profiles/UpdateDeviceProfile.js","views/device-profiles/DeviceProfileLayout.js","components/GatewayAdmin.js","components/MapTileLayer.js","views/gateways/GatewayDetails.js","stores/GatewayProfileStore.js","stores/LocationStore.js","views/gateways/GatewayForm.js","views/gateways/UpdateGateway.js","views/gateways/GatewayDiscovery.js","components/LoRaWANFrameLog.js","views/gateways/GatewayFrames.js","views/gateways/GatewayCertificate.js","views/gateways/GatewayLayout.js","views/gateways/CreateGateway.js","views/applications/ApplicationForm.js","views/applications/CreateApplication.js","stores/AppDeviceGroupStore.js","views/applications/ApplicationUplinks.js","views/applications/ApplicationDownlinks.js","views/devices/ListDevices.js","views/applications/ApplicationDevices.js","views/applications/UpdateApplication.js","views/applications/ListApplicationItems.js","views/applications/integrations/HTTP.js","views/applications/ListIntegrations.js","views/applications/integrations/HTTPIntegrationForm.js","views/applications/integrations/CreateHTTPIntegration.js","views/applications/integrations/UpdateHTTPIntegration.js","views/applications/ApplicationLayout.js","views/applications/ApplicationEvents.js","views/applications/ApplicationItemForm.js","views/applications/UpdateApplicationItem.js","views/applications/ApplicationItemLayout.js","views/applications/CreateApplicationItem.js","views/devices/DeviceForm.js","views/devices/CreateDevice.js","views/devices/UpdateDevice.js","views/devices/DeviceKeys.js","components/DevAddrField.js","views/devices/DeviceActivation.js","views/devices/DeviceData.js","views/devices/DeviceFrames.js","views/devices/DeviceQueueItemForm.js","views/devices/DeviceDetails.js","views/devices/AppDeviceForm.js","views/devices/PauseAppDeviceForm.js","views/devices/DisableAppDeviceForm.js","views/devices/UpdateAppDevice.js","views/devices/DeviceLayout.js","views/device-groups/ListDeviceGroups.js","views/applications/ApplicationDeviceGroups.js","views/device-groups/DeviceGroupForm.js","views/device-groups/PauseDeviceGroupForm.js","views/device-groups/UpdateDeviceGroup.js","views/device-groups/UpdateDeviceGroupMappings.js","stores/AppDeviceGroupPollStore.js","views/device-groups/ListDeviceGroupPolls.js","views/device-groups/DeviceGroupLayout.js","views/device-groups/CreateDeviceGroup.js","views/device-groups/DeviceGroupPollForm.js","views/device-groups/CreateDeviceGroupPoll.js","views/device-groups/UpdateDeviceGroupPoll.js","views/device-groups/DeviceGroupPollLayout.js","components/HexTextField.js","views/utils/PacketDecoderForm.js","views/utils/PacketEncoderForm.js","views/utils/UtilsForm.js","App.js","index.js","components/AESKeyField.js","helpers/packetHelper.js","components/Paper.js","dispatcher.js","history.js","components/JSONTree.js","components/EUI64Field.js","stores/helpers.js","stores/LocalStore.js","components/DataTable.js","views/applications/AircomOutput.js","views/applications/ApplicationDownlinksDetails.js","views/applications/PvControl.js","stores/SessionStore.js","stores/AppDeviceStore.js"],"names":["DeviceQueueStore","EventEmitter","constructor","super","this","swagger","Swagger","sessionStore","getClientOpts","flush","devEUI","callbackFunc","then","client","apis","DeviceQueueService","Flush","dev_eui","checkStatus","resp","notify","obj","catch","errorHandler","list","List","enqueue","item","Enqueue","body","deviceQueueItem","emit","msg","dispatcher","dispatch","type","notification","message","deviceQueueStore","theme","createMuiTheme","palette","primary","main","AutocompleteSelect","Component","setInitialOptions","props","getOptions","options","totalCount","setState","setSelectedOption","undefined","getOption","value","selectedOption","state","opt","onChange","e","v","target","id","onInputChange","componentDidMount","componentDidUpdate","prevProps","triggerReload","render","Autocomplete","getOptionLabel","option","label","onOpen","openOnFocus","className","getOptionDisabled","t","getOptionSelected","renderInput","params","TextField","required","placeholder","disableClearable","clearable","disabled","defaultProps","InternalStore","listAPIKeys","filters","InternalService","ListAPIKeys","deleteAPIKey","DeleteAPIKey","createAPIKey","CreateAPIKey","apiKey","settings","Settings","getDevicesSummary","organizationID","GetDevicesSummary","getGatewaysSummary","GetGatewaysSummary","internalStore","OrganizationStore","create","organization","OrganizationService","Create","get","Get","update","Update","delete","Delete","search","limit","offset","addUser","user","AddUser","organizationUser","getUser","userID","GetUser","organization_id","user_id","deleteUser","DeleteUser","updateUser","UpdateUser","listUsers","ListUsers","action","organizationStore","ApplicationStore","application","ApplicationService","listIntegrations","applicationID","ListIntegrations","application_id","createHTTPIntegration","integration","CreateHTTPIntegration","integrationNotification","getHTTPIntegration","GetHTTPIntegration","updateHTTPIntegration","UpdateHTTPIntegration","deleteHTTPIntegration","DeleteHTTPIntegration","createInfluxDBIntegration","CreateInfluxDBIntegration","getInfluxDBIntegration","GetInfluxDBIntegration","updateInfluxDBIntegration","UpdateInfluxDBIntegration","deleteInfluxDBIntegration","DeleteInfluxDBIntegration","createThingsBoardIntegration","CreateThingsBoardIntegration","getThingsBoardIntegration","GetThingsBoardIntegration","updateThingsBoardIntegration","UpdateThingsBoardIntegration","deleteThingsBoardIntegration","DeleteThingsBoardIntegration","createMyDevicesIntegration","CreateMyDevicesIntegration","getMyDevicesIntegration","GetMyDevicesIntegration","updateMyDevicesIntegration","UpdateMyDevicesIntegration","deleteMyDevicesIntegration","DeleteMyDevicesIntegration","createLoRaCloudIntegration","CreateLoRaCloudIntegration","getLoRaCloudIntegration","GetLoRaCloudIntegration","updateLoRaCloudIntegration","UpdateLoRaCloudIntegration","deleteLoRaCloudIntegration","DeleteLoRaCloudIntegration","createGCPPubSubIntegration","CreateGCPPubSubIntegration","getGCPPubSubIntegration","GetGCPPubSubIntegration","updateGCPPubSubIntegration","UpdateGCPPubSubIntegration","deleteGCPPubSubIntegration","DeleteGCPPubSubIntegration","createAWSSNSIntegration","CreateAWSSNSIntegration","getAWSSNSIntegration","GetAWSSNSIntegration","updateAWSSNSIntegration","UpdateAWSSNSIntegration","deleteAWSSNSIntegration","DeleteAWSSNSIntegration","createAzureServiceBusIntegration","CreateAzureServiceBusIntegration","getAzureServiceBusIntegration","GetAzureServiceBusIntegration","updateAzureServiceBusIntegration","UpdateAzureServiceBusIntegration","deleteAzureServiceBusIntegration","DeleteAzureServiceBusIntegration","createPilotThingsIntegration","CreatePilotThingsIntegration","getPilotThingsIntegration","GetPilotThingsIntegration","updatePilotThingsIntegration","UpdatePilotThingsIntegration","deletePilotThingsIntegration","DeletePilotThingsIntegration","generateMQTTIntegrationClientCertificate","GenerateMQTTIntegrationClientCertificate","kind","applicationStore","AircomSystemStore","getSystemSettings","AircomSystemService","AircomSystemService_GetSettings","updateSystemSettings","systemSettings","AircomSystemService_UpdateSettings","deleteApplication","AircomSystemService_DeleteApplication","notifyApp","deleteOrganization","AircomSystemService_DeleteOrganization","notifyOrg","aircomSystemStore","styles","appBar","colorSecondary","zIndex","drawer","menuButton","marginLeft","marginRight","hidden","display","flex","logo","height","spacing","color","common","white","background","blue","width","padding","borderRadius","select","paddingTop","paddingLeft","paddingRight","paddingBottom","chip","iconButton","TopNav","onMenuOpen","menuAnchor","currentTarget","onMenuClose","onLogout","oidcEnabled","logoutURL","SessionStore","logout","window","location","assign","history","push","handleDrawerToggle","setDrawerOpen","drawerOpen","onSearchChange","onSearchSubmit","preventDefault","encodeURIComponent","view","VIEW_USER","cacheCounter","showOrgDropdown","setOrganizationFromLocation","bind","onOrgSelectChange","getOrganizationOption","getOrganizationOptions","refreshShowOrgDropdown","reloadOrgDropdown","onOrganizationDeleted","setView","openidConnect","enabled","on","localStore","getView","componentWillUnmount","removeListener","match","exec","pathname","newOrgID","organizations","result","length","filter","org","setOrganizationID","VIEW_SYSADMIN","isAdmin","VIEW_ORGADMIN","isOrganizationAdmin","setApplicationID","emitChangeEvent","name","map","o","drawerIcon","organizationName","open","Boolean","orgAdminView","systemAdminView","showOrgAdminView","showSysAdminView","showUserView","AppBar","classes","Toolbar","IconButton","aria-label","onClick","src","alt","Typography","margin","Chip","avatar","Avatar","email","root","Menu","anchorEl","anchorOrigin","vertical","horizontal","transformOrigin","onClose","MenuItem","selected","Divider","component","Link","to","withStyles","withRouter","drawerPaper","position","SideNav","globalAdmin","updateOrgAppFromLocation","getOrgIdFromLocation","getAppIdFromLocation","onViewChange","onAppSelectChange","getApplicationOption","getApplicationOptions","onApplicationDeleted","getOrganizationID","orgId","newAppID","applications","app","Drawer","variant","anchor","paper","ListItem","button","divider","ListItemIcon","ListItemText","secondary","pointerEvents","style","footer","textDecoration","Footer","branding","align","dangerouslySetInnerHTML","__html","NotificationStore","notifications","getAll","createNotification","Date","now","deleteNotification","n","splice","indexOf","handleActions","notificationStore","register","Item","event","reason","Snackbar","autoHideDuration","Notifications","i","TitleBar","Grid","xs","clear","left","children","right","buttons","float","title","marginTop","marginBottom","link","TitleBarTitle","combinedStyles","classNames","UpPacketStore","applicationId","appDeviceGroupId","from","devEui","UpPacketService","UpPacketService_List","getLatestReadings","UpPacketService_GetLatestReadings","getReadingsInRange","appItemId","UpPacketService_GetReadingsInRange","decodePacket","packetId","UpPacketService_Decode","decodeAllPackets","UpPacketService_DecodeAll","deletePacket","UpPacketService_Delete","upPacketStore","formatReading","format","moment","numeral","floatToLocString","decPlaces","mask","repeat","typography","useNextVariants","pageDiv","flexGrow","container","flexWrap","lastPacketContainer","table","tableRow","tableCell","unit","darkLabel","checkBoxControl","formControlLabel","formControl","fontSize","mediumFormControlLabel","textField","mediumTextField","wideTextField","selectField","mediumSelectField","alertError","backgroundColor","red","alertSuccess","green","graphDiv","gridItem","card","minWidth","cardTitle","cardTime","errorIcon","rdtInput","font","rdtInputError","td","redDigital","greenDigital","greyDigital","digitalTd","textAlign","DeviceReadingsTable","fetchingData","data","fetchData","deviceFilter","timeHi","clearDataFirst","items","filterName","Table","TableHead","TableRow","TableCell","deviceReadings","TableBody","hover","appItemName","reading","receivedAt","DeviceReadingsCards","timeLo","appItemIds","includes","parseInt","direction","valueComp","iconClass","Array","isArray","gutterBottom","timestampText","aDate","Card","CardContent","UpPacketsLog","packetID","getRow","getPage","groupId","valueCount","values","itemsSkipped","deviceName","Button","decodedAt","payload","DataTable","header","graphData","barGraphs","dataset","startsWith","row","received_at","minValues","Math","min","d","maxValues","max","minTimes","maxTimes","newTimeLo","newTimeHi","orientations","colors","anchors","VictoryTheme","material","scale","x","y","domain","domainPadding","tickCount","tickFormat","toLocaleDateString","getHours","getMinutes","tickLabels","dependentAxis","orientation","axis","stroke","ticks","axisLabel","fill","textAnchor","datum","alignment","strokeWidth","labels","Number","events","eventHandlers","mutation","AppItemStore","AppItemService","AppItemService_List","AppItemService_Get","appItem","AppItemService_Create","AppItemService_Update","AppItemService_Delete","listPayloadItem","AppItemService_PayloadItemList","getPayloadItem","AppItemService_GetUpPayloadItem","getGroupItemMap","AppItemService_GroupItemMap","updateGroupItemMap","itemsMap","AppItemService_UpdateGroupItemMap","notifyGroupItems","appItemStore","ApplyCounterIncrements","periodic","itemData","substr","countInc","dayDiff","diff","periodUnit","currentPeriodStart","counter","forEach","rowPeriodStart","startOf","valueOf","DeviceReadingGraph","appItem2Id","onAppItem2Change","getAppItemOption","getAppItemOptions","isSpotlit","appId","addSpotlight","clearSpotlight","dataLoaded","noData","infoMessage","DashCard","cardContent","latestReadingsByDevice","cardType","itemProps","displayStyle","CardHeader","DeviceStore","wsDataStatus","wsFramesStatus","getWSDataStatus","getWSFramesStatus","device","DeviceService","getKeys","GetKeys","errorHandlerIgnoreNotFoundWithCallback","createKeys","deviceKeys","CreateKeys","notifyKeys","updateKeys","UpdateKeys","getActivation","GetActivation","activate","deviceActivation","Activate","getRandomDevAddr","GetRandomDevAddr","getDataLogsConnection","onData","loc","wsURL","host","wsProtocol","protocol","conn","RobustWebSocket","getToken","addEventListener","console","log","JSON","parse","error","getFrameLogsConnection","deviceStore","Dashboard","handleCheck","checked","timeLoText","subtract","timeHiText","add","loadingAppData","devices","appItems","spotlitItems","dialogOpen","timeFilter","autoRefresh","refreshSeconds","timeLoInvalid","timeHiInvalid","handleChangeDevice","handleChangeTimeFilter","handleChangeRefresh","timer","handleChangeTimeLo","handleChangeTimeHi","loadAppSpecificData","addSpotlitItem","clearSpotlitItems","intervalID","setInterval","clearInterval","showOnDashboard","numberFormat","localeCompare","refreshStateItems","String","itemID","prototype","apply","showTimeInputs","timeLoClass","timeHiClass","gridItems","gridKey","graphCards","Paper","FormControlLabel","control","Select","inputProps","labelPlacement","Switch","endIcon","dateFormat","timeFormat","icon","TitleBarButton","React","cloneElement","cursor","TableCellLink","ListOrganizations","displayName","admin","UserStore","password","UserService","updatePassword","UpdatePassword","userStore","active","isActive","AccessDenied","FormComponent","addKV","kvs","onChangeKV","index","object","key","ss","onDeleteKV","onSubmit","lookup","split","field","pop","Form","justify","extraButtons","submitLabel","formLabel","helperText","maxRetentionTimeDays","fullWidth","prunedAt","prunedItemCount","Checkbox","notifyPacket","UpdateSystemSettings","overflow","tabs","borderBottom","SystemDashboard","tab","locationToTab","onChangeTab","setIsAdmin","oldProps","href","endsWith","Tabs","indicatorColor","Tab","exact","path","NetworkServerStore","networkServer","NetworkServerService","notifiy","getADRAlgorithms","networkServerID","GetADRAlgorithms","network_server_id","networkServerStore","test","ListNetworkServers","server","NetworkServerForm","CreateNetworkServer","UpdateNetworkServer","NetworkServerLayout","deleteNetworkServer","confirm","region","version","Admin","FormControlComponent","FormControl","FormLabel","OrganizationForm","pattern","FormGroup","canHaveGateways","FormHelperText","maxGatewayCount","maxDeviceCount","CreateOrganization","ListApplications","description","ListOrganizationUsers","orgAdmin","gwAdmin","devAdmin","isGatewayAdmin","isDeviceAdmin","UpdateOrganization","OrganzationStore","OrganizationLayout","loadData","GatewayStore","wsStatus","getWSStatus","gateway","GatewayService","generateClientCertificate","GenerateGatewayClientCertificate","gateway_id","getStats","gatewayID","start","end","GetStats","interval","startTimestamp","endTimestamp","getLastPing","GetLastPing","errorHandlerIgnoreNotFound","gatewayStore","chart","GatewayRow","toISOString","stats","datasets","fillColor","timestamp","rxPacketsReceivedOK","txPacketsEmitted","lastseen","lastSeenAt","fromNow","networkServerName","scales","xAxes","yAxes","tooltips","legend","responsive","animation","duration","ListGateways","OrganizationDashboard","OrganizationUserForm","UpdateOrganizationUser","OrganizationUserLayout","deleteOrganizationUser","componendWillUnmount","AircomUserStore","AircomUserService","AircomUserService_Create","aircomUser","aircomUserStore","CreateOrganizationUser","onAssignUser","OrganizationRedirect","localStorage","getItem","OrganizationSetup","startIcon","LoginForm","OpenIDConnectLogin","loginUrl","loginLabel","Login","loaded","registration","oidcLoginlabel","oidcLoginUrl","loginURL","oidcLoginLabel","query","queryString","openidConnectLogin","code","login","lg","UserForm","note","rows","multiline","CreateUser","UserLayout","PasswordForm","ChangeUserPassword","ServiceProfileStore","serviceProfile","ServiceProfileService","ojb","serviceProfileStore","ListServiceProfiles","ServiceProfileForm","getNetworkServerOption","getNetworkServerOptions","ns","addGWMetaData","nwkGeoLoc","devStatusReqFreq","reportDevStatusBattery","reportDevStatusMargin","drMin","drMax","gwsPrivate","CreateServiceProfile","nsDialog","closeDialog","sp","Dialog","DialogTitle","DialogContent","DialogContentText","paragraph","DialogActions","UpdateServiceProfile","ServiceProfileLayout","deleteServiceProfile","serviceProfileID","DeviceAdmin","isOrganizationDeviceAdmin","DeviceProfileStore","deviceProfile","DeviceProfileService","deviceProfileStore","ListDeviceProfiles","kvStyles","onDelete","DurationField","str","replace","codeMirror","getADRAlgorithmsOptions","adrAlgorithms","adr","setKVArray","tags","onTabChange","getMACVersionOptions","getRegParamsOptions","getPingSlotPeriodOptions","getPayloadCodecOptions","onCodeChange","editor","newCode","freqsStr","f","factoryPresetFreqsStr","factoryPresetFreqs","join","codeMirrorOptions","lineNumbers","mode","payloadEncoderScript","payloadDecoderScript","macVersion","regParamsRevision","adrAlgorithmID","maxEIRP","uplinkInterval","supportsJoin","rxDelay1","rxDROffset1","rxDataRate2","rxFreq2","supportsClassB","classBTimeout","pingSlotPeriod","pingSlotDR","pingSlotFreq","supportsClassC","classCTimeout","payloadCodec","onBeforeChange","CreateDeviceProfile","spDialog","UpdateDeviceProfile","DeviceProfileLayout","deleteDeviceProfile","deviceProfileID","componentWillUpdate","GatewayAdmin","isOrganizationGatewayAdmin","MapTileLayer","TileLayer","url","attribution","DetailsCard","altitude","latitude","longitude","GatewayDetails","loadStats","statsDown","borderColor","lineTension","pointBackgroundColor","statsUp","statsOptions","maintainAspectRatio","beginAtZero","Map","center","zoom","animate","scrollWheelZoom","Marker","redraw","GatewayProfileStore","gatewayProfile","GatewayProfileService","gatewayProfileStore","LocationStore","getLocation","navigator","geolocation","getCurrentPosition","locationStore","boardStyles","a","GatewayBoardForm","board","EUI64Field","fpgaID","AESKeyField","fineTimestampKey","mapLabel","getServiceProfileOption","getServiceProfileOptions","setKVArrays","metadata","mapZoom","getGatewayProfileOption","getGatewayProfileOptions","setCurrentPosition","updatePosition","updateZoom","addGatewayBoard","gatewayProfileID","coords","refs","marker","leafletElement","getLatLng","lat","lng","getZoom","gp","boards","deleteGatewayBoard","updateGatewayBoard","b","random","discoveryEnabled","onZoomend","draggable","onDragend","ref","UpdateGateway","GatewayDiscovery","ping","getColor","dbm","pingRX","dense","bounds","markers","lines","Popup","frequency","dr","rx","pingPos","rssi","LoRaSNR","Polyline","positions","opacity","weight","maxZoom","mapLegend","mapLegendList","mapLegendListItem","LegendControl","MapControl","L","jsx","onAdd","div","DomUtil","ReactDOM","createLeafletElement","withLeaflet","listStyle","fontWeight","headerColumn","headerColumnFixedSmall","headerColumnFixedWide","treeStyle","lineHeight","LoRaWANFrameLog","dir","devID","frame","uplinkMetaData","mType","phyPayload","mhdr","macPayload","fhdr","devAddr","ExpansionPanel","ExpansionPanelSummary","expandIcon","ExpansionPanelDetails","JSONTree","downlinkMetaData","progress","GatewayFrames","connected","paused","frames","onFrame","onDownload","togglePause","onClear","toggleHelpDialog","setConnected","wsConn","close","dl","fileDownload","stringify","uplinkFrame","unshift","getTime","rxInfo","txInfo","phyPayloadJSON","downlinkFrame","aria-labelledby","aria-describedby","CircularProgress","GatewayCertificate","requestCertificate","buttonDisabled","tlsKey","tlsCert","caCert","expiresAt","GatewayLayout","deleteGateway","CreateGateway","CreateApplication","AppDeviceGroupStore","AppDeviceGroupService","AppDeviceGroupService_Get","AppDeviceGroupService_List","appDeviceGroup","AppDeviceGroupService_Create","AppDeviceGroupService_Update","AppDeviceGroupService_Delete","pause","AppDeviceGroupService_Pause","appDeviceGroupStore","ApplicationUplinks","deviceGroups","deviceGroupFilter","csvData","exportingData","csvLink","createRef","downloadData","handleChangeDeviceGroup","forceUpdate","appResp","devGroupResp","AppDeviceStore","deviceResp","csvFileName","valueKeys","Object","fromEntries","toString","csvHeaders","setTimeout","current","click","showDevGroupFilter","titleBarButtons","deviceGroup","headers","filename","ApplicationDownlinks","aircomOutput","showStepControl","showPVControl","showTabs","every","group","outputControlType","ApplicationDownlinksDetails","PvControl","AircomOutput","ListDevices","ApplicationDevices","UpdateApplication","ListApplicationItems","abbreviation","sortOrder","HTTPCard","CardMedia","media","image","CardActions","size","backgroundSize","loadIntegrations","configured","available","integrations","HTTP","removeAllListeners","md","xl","HTTPIntegrationHeaderForm","HTTPIntegrationForm","addHeader","onDeleteHeader","onChangeHeader","getMarshalerOptions","h","marshaler","eventEndpointURL","uplinkDataURL","joinNotificationURL","statusNotificationURL","locationNotificationURL","ackNotificationURL","txAckNotificationURL","integrationNotificationURL","errorNotificationURL","integr","ApplicationLayout","showDeleteButton","ApplicationEvents","UpdateApplicationItem","applicationItem","ApplicationItemLayout","deleteApplicationItem","applicationItemID","titleButtons","CreateApplicationItem","newItem","variables","getDeviceProfileOption","getDeviceProfileOptions","dp","skipFCntCheck","isDisabled","CreateDevice","dpDialog","dev","UpdateDevice","LW11DeviceKeysForm","nwkKey","appKey","LW10DeviceKeysForm","DeviceKeys","keys","DevAddrMask","inputRef","other","inputElement","DevAddrField","toggleByteOrder","msb","bytes","reverse","randomKey","randomFunc","k","InputProps","inputComponent","endAdornment","InputAdornment","Tooltip","LW10DeviceActivationForm","cb","nwkSEncKey","appSKey","fCntUp","nFCntDown","LW11DeviceActivationForm","sNwkSIntKey","fNwkSIntKey","aFCntDown","DeviceActivation","act","showForm","DeviceDataItem","DeviceData","payloadJSON","DeviceFrames","objectCode","jsonObject","fPort","confirmed","StatusCard","EnqueueCard","queueItem","qi","QueueCardRow","fCnt","QueueCard","getQueue","deviceQueueItems","flushQueue","DeviceDetails","setDeviceActivation","activated","getAppDeviceGroupOption","getAppDeviceGroupOptions","ag","appDeviceGroupID","pausedAt","disabledAt","UpdateAppDevice","pauseAppDevice","disableAppDevice","reloadAppDevice","appDevice","disable","DeviceLayout","deleteDevice","getDevice","scrollButtons","ListDeviceGroups","deviceCount","ApplicationDeviceGroups","handleSelect","UpdateDeviceGroup","pauseGroup","reloadRequestCallback","UpdateDeviceGroupMappings","itemsOptions","getAppDeviceGroupMappingOption","getAppDeviceGroupMappingOptions","onChangeScaling","appItemMappings","filtereditem","upPayloadItemID","scaling","cellStyle","maxLength","AppDeviceGroupPollStore","AppDeviceGroupPollService","AppDeviceGroupPollService_Get","AppDeviceGroupPollService_List","appDeviceGroupPoll","AppDeviceGroupPollService_Create","AppDeviceGroupPollService_Update","AppDeviceGroupPollService_Delete","getPollDataType","AppDeviceGroupPollService_GetPollDataType","listPollDataType","AppDeviceGroupPollService_PollDataTypeList","appDeviceGroupPollStore","ListDeviceGroupPolls","deviceGroupID","pollNumber","pollRegCount","pollDataTypeName","DeviceGroupLayout","reloadDeviceGroup","deleteDeviceGroup","Device","Type","CreateDeviceGroup","devGroup","getPollDataTypeOption","getPollDataTypeOptions","pollDataType","dt","pollDataTypeID","CreateDeviceGroupPoll","UpdateDeviceGroupPoll","deviceGroupPoll","DeviceGroupPollLayout","deleteDeviceGroupPoll","deviceGroupPollID","HEXMask","maskArray","HexTextField","PacketDecoderForm","payloadItems","packetPayload","decodedPacket","onChangePacketPayload","decodePayload","pkt","polledRows","validPacket","digitalOnly","headerLength","modbusPacketSize","maxPolledFlags","payloadItem","itemValue","toLowerCase","defaultFormat","isHexValid","PacketEncoderForm","payloadFields","d1","d2","d3","d4","a1","a2","a3","a4","a5","c1","c2","bv","temp","time","modbusPoll1","modbusPoll2","modbusPoll3","modbusPoll4","modbusPoll5","modbusPoll6","modbusPoll7","modbusPoll8","modbusPoll9","modbusPoll10","onCheckboxChange","onPollCheckboxChange","onPayloadFieldsChange","onTextChange","onPollTextChange","clearAll","sort","pf","pollHexString","encodePayload","spaceLeft","MAX_PACKET_BYTES","floor","formattedPayload","input","toUpperCase","formatHex","itemChecked","thisValue","decodedValue","toLocaleLowerCase","UtilsForm","minHeight","flexDirection","text","mainDrawerOpen","drawerWidth","footerDrawerOpen","App","topNav","sideNav","redirectToLogin","CssBaseline","Leaflet","Icon","Default","imagePath","document","getElementById","CopyMenu","useState","setAnchorEl","handleClose","aria-controls","aria-haspopup","keepMounted","TransitionComponent","Fade","clipboard","writeText","AESKeyHEXMask","toggleShowPassword","showKey","cryptoObj","crypto","msCrypto","Uint8Array","getRandomValues","Buffer","checkBit","number","bitPos","setBit","bitNum","payloadHex","buffer","validHeader","readUInt8","headerByte1","headerByte2","prepopulateContents","startPos","packetLength","digitals","readFloatLE","readUInt32LE","endPos","modbusHeader","readUInt16BE","alloc","writePos","headerBytes","headerByteCount","digitalOnlyPacket","digitalsByte","writeUInt8","writeFloatLE","writeUInt32LE","round","modbusBuffer","thisVal","modbusLength","modbusString","modbusIncluded","bytesRemaining","Buf2","writeUInt16BE","headerBuffer","PaperComponent","Dispatcher","createHashHistory","base64ToHex","uplinkID","unparse","uplinkIDs","objectJSON","scheme","author","base00","base01","base02","base03","base04","base05","base06","base07","base08","base09","base0A","base0B","base0C","base0D","base0E","base0F","hideRoot","shouldExpandNode","EUI64HEXMask","response","status","json","errorHandlerLogin","LocalStore","getApplicationID","appID","setItem","hasViewSystemAdmin","hasViewOrgAdmin","hasViewUser","count","rowsPerPage","getRowsPerPage","page","onChangePage","onChangeRowsPerPage","setRowsPerPage","rowsPerPageOptions","utcDateToMins","date","dayStart","utc","MenuProps","PaperProps","maxHeight","ITEM_HEIGHT","selectedDevices","A1Time","B1Time","A2Time","B2Time","A3Time","B3Time","A4Time","B4Time","A5Time","B5Time","A6Time","B6Time","timeChangedA1","timeChangedA2","timeChangedA3","timeChangedA4","timeChangedA5","timeChangedA6","timeChangedB1","timeChangedB2","timeChangedB3","timeChangedB4","timeChangedB5","timeChangedB6","queueSchedule","f_port","listByOutputType","utils","DateFnsUtils","scope","ampm","emptyLabel","keyboardIcon","multiple","renderValue","displayEmpty","utcMinsToDate","mins","local","handleClickOpen","devName","devData","modalScheduleEUI","modalScheduleName","modalScheduleData","modalScheduleA1","modalScheduleA2","modalScheduleA3","modalScheduleA4","modalScheduleA5","modalScheduleA6","modalScheduleB1","modalScheduleB2","modalScheduleB3","modalScheduleB4","modalScheduleB5","modalScheduleB6","handleDelete","refresh","listDeviceWithQueue","queueItems","utcDateToQuarterHour","onChangeDeadbandUp","deadbandUpText","deadbandUpValue","parseFloat","dlDeadbandUpChecked","onChangeDeadbandDown","deadbandDownText","deadbandDownValue","dlDeadbandDownChecked","newSetpointTimeChanged","setMinutes","newSetpointTime","addSetpoint","setpoints","newSetpointID","newSetpointTimeQHrs","newSetpoints","setpointTime","setpointValueId","previousQHr","newQuarterHour","getSuggestedSetpointTime","deleteSetpoint","onSetpointValueChanged","newId","getDownlinkSize","downlinkBytes","minSetpointValue","minSetpointText","maxSetpointValue","maxSetpointText","setpointIncrementValue","setpointIncrementText","defaultSetpointID","queueDownlinks","send2Messages","msg1Data","msg2Data","spHeader","spHeaderBit","spHeaderBytePos","spHeaderPos","headerPos","dataPos","pointsWritten","writeUInt16","downlinkSize","downlinkPackets","ceil","setpointOptions","setpointValue","sendButtonEnabled","onChangeSetpointIncrement","quarterHours","autoHighlight","colSpan","minutesStep","fetchProfile","requestInterceptor","req","setToken","token","orgID","getSettings","checkViewMode","callBackFunc","jwt","jwtToken","Profile","globalSearch","GlobalSearch","AppDeviceService","AppDeviceService_ListDeviceWithQueue","AppDeviceService_List","AppDeviceService_ListDevicesByOutputType","AppDeviceService_Get","AppDeviceService_Update","AppDeviceService_Pause","AppDeviceService_Disable","AppDeviceService_Delete","appDeviceStore"],"mappings":"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","file":"static/js/main.d1fbf2bc.chunk.js","sourcesContent":["import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass DeviceQueueStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/deviceQueue.swagger.json\", sessionStore.getClientOpts());\n }\n\n flush(devEUI, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceQueueService.Flush({\n dev_eui: devEUI,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"device-queue has been flushed\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n list(devEUI, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceQueueService.List({\n dev_eui: devEUI,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n enqueue(item, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceQueueService.Enqueue({\n \"device_queue_item.dev_eui\": item.devEUI,\n body: {\n deviceQueueItem: item,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"device-queue item has been created\");\n this.emit(\"enqueue\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(msg) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: msg,\n },\n });\n }\n}\n\nconst deviceQueueStore = new DeviceQueueStore();\nexport default deviceQueueStore;\n","import { createMuiTheme } from \"@material-ui/core/styles\";\n\nconst theme = createMuiTheme({\n palette: {\n primary: {\n // light: will be calculated from palette.primary.main,\n main: '#054F8D',\n // dark: will be calculated from palette.primary.main,\n // contrastText: will be calculated to contrast with palette.primary.main\n }\n },\n});\n \nexport default theme;\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\n\n\nclass AutocompleteSelect extends Component {\n constructor() {\n super();\n\n this.state = {\n options: [],\n setSelectedOption: null,\n };\n }\n\n componentDidMount() {\n this.setInitialOptions(this.setSelectedOption);\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.value === this.props.value && prevProps.triggerReload === this.props.triggerReload) {\n return;\n }\n\n this.setInitialOptions(this.setSelectedOption);\n }\n\n setInitialOptions = (callbackFunc) => {\n this.props.getOptions(\"\", (options, totalCount) => {\n this.setState({\n options: options,\n totalCount: totalCount,\n }, callbackFunc);\n });\n }\n\n setSelectedOption = () => {\n if (this.props.getOption !== undefined) {\n if (this.props.value !== undefined && this.props.value !== \"\" && this.props.value !== null) {\n this.props.getOption(this.props.value, resp => {\n this.setState({\n selectedOption: resp,\n });\n });\n } else {\n this.setState({\n selectedOption: \"\",\n });\n }\n } else {\n if (this.props.value !== undefined && this.props.value !== \"\" && this.props.value !== null) {\n for (const opt of this.state.options) {\n if (this.props.value === opt.value) {\n this.setState({\n selectedOption: opt,\n });\n }\n }\n } else {\n this.setState({\n selectedOption: \"\",\n });\n }\n }\n }\n\n render() {\n let options = this.state.options;\n // if (this.state.totalCount !== undefined) {\n // options.unshift({label: `Showing ${options.length} of ${this.state.totalCount}`, value: \"__DISABLED__\"});\n // }\n\n return(\n option.label || \"\"}\n onOpen={() => this.setInitialOptions(null)}\n openOnFocus={true}\n value={this.state.selectedOption || \"\"}\n onChange={this.onChange}\n onInputChange={this.onInputChange}\n className={this.props.className}\n getOptionDisabled={t => t.value === \"__DISABLED__\"}\n getOptionSelected={(option, value) => {\n return option.value === value.value;\n }}\n renderInput={(params) => }\n disableClearable={!this.props.clearable}\n disabled={this.props.disabled}\n />\n );\n }\n\n onChange = (e, v) => {\n let value = null;\n if (v !== null) {\n value = v.value;\n }\n\n this.setState({\n selectedOption: v,\n });\n\n this.props.onChange({\n target: {\n id: this.props.id,\n value: value,\n },\n });\n }\n\n onInputChange = (e, v) => {\n this.props.getOptions(v, (options) => {\n this.setState({\n options: options,\n totalCount: undefined,\n });\n });\n }\n}\n\nAutocompleteSelect.propTypes = {\n className: PropTypes.any.isRequired,\n clearable: PropTypes.any.isRequired,\n disabled: PropTypes.bool,\n getOption: PropTypes.any.isRequired,\n getOptions: PropTypes.any.isRequired,\n id: PropTypes.any.isRequired,\n label: PropTypes.any.isRequired,\n onChange: PropTypes.any.isRequired,\n required: PropTypes.any.isRequired,\n triggerReload: PropTypes.any.isRequired,\n value: PropTypes.any.isRequired,\n}\n\nAutocompleteSelect.defaultProps = {\n disabled: false,\n}\n\nexport default AutocompleteSelect;\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport { checkStatus, errorHandler } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass InternalStore extends EventEmitter {\n constructor() {\n super();\n this.client = null;\n this.swagger = Swagger(\"/swagger/internal.swagger.json\", sessionStore.getClientOpts());\n }\n\n listAPIKeys(filters, callbackFunc) {\n this.swagger.then(client => {\n client.apis.InternalService.ListAPIKeys(filters)\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n deleteAPIKey(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.InternalService.DeleteAPIKey({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"api key has been deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n createAPIKey(obj, callbackFunc) {\n this.swagger.then(client => {\n client.apis.InternalService.CreateAPIKey({\n body: {\n apiKey: obj,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"api key has been created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n settings(callbackFunc) {\n this.swagger.then(client => {\n client.apis.InternalService.Settings({})\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getDevicesSummary(organizationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.InternalService.GetDevicesSummary({\n organizationID: organizationID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getGatewaysSummary(organizationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.InternalService.GetGatewaysSummary({\n organizationID: organizationID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(msg) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: msg,\n },\n });\n }\n}\n\nconst internalStore = new InternalStore();\nexport default internalStore;\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass OrganizationStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/organization.swagger.json\", sessionStore.getClientOpts());\n }\n\n create(organization, callbackFunc) {\n this.swagger.then(client => {\n client.apis.OrganizationService.Create({\n body: {\n organization: organization,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.emit(\"create\", organization);\n this.notify(\"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n get(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.OrganizationService.Get({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n update(organization, callbackFunc) {\n this.swagger.then(client => {\n client.apis.OrganizationService.Update({\n \"organization.id\": organization.id,\n body: {\n organization: organization,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.emit(\"change\", organization);\n this.notify(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n delete(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.OrganizationService.Delete({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.emit(\"delete\", id);\n this.notify(\"deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n list(search, limit, offset, callbackFunc) {\n this.swagger.then((client) => {\n client.apis.OrganizationService.List({\n search: search,\n limit: limit,\n offset: offset,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n addUser(organizationID, user, callbackFunc) {\n this.swagger.then(client => {\n client.apis.OrganizationService.AddUser({\n \"organization_user.organization_id\": organizationID,\n body: {\n organizationUser: user,\n },\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getUser(organizationID, userID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.OrganizationService.GetUser({\n organization_id: organizationID,\n user_id: userID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n deleteUser(organizationID, userID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.OrganizationService.DeleteUser({\n organization_id: organizationID,\n user_id: userID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n updateUser(organizationUser, callbackFunc) {\n this.swagger.then(client => {\n client.apis.OrganizationService.UpdateUser({\n \"organization_user.organization_id\": organizationUser.organizationID,\n \"organization_user.user_id\": organizationUser.userID,\n body: {\n organizationUser: organizationUser,\n },\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n listUsers(organizationID, limit, offset, callbackFunc) {\n this.swagger.then(client => {\n client.apis.OrganizationService.ListUsers({\n organization_id: organizationID,\n limit: limit,\n offset: offset,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"organization has been \" + action,\n },\n });\n }\n}\n\nconst organizationStore = new OrganizationStore();\nexport default organizationStore;\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass ApplicationStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/application.swagger.json\", sessionStore.getClientOpts());\n }\n\n create(application, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.Create({\n body: {\n application: application,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n get(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.Get({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n update(application, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.Update({\n \"application.id\": application.id,\n body: {\n application: application,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n delete(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.Delete({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n list(search, organizationID, limit, offset, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.List({\n limit: limit,\n offset: offset,\n organizationID: organizationID,\n search: search,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n listIntegrations(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.ListIntegrations({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n createHTTPIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.CreateHTTPIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"http\", \"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getHTTPIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.GetHTTPIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n updateHTTPIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.UpdateHTTPIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"http\", \"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n deleteHTTPIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.DeleteHTTPIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"http\", \"deleted\");\n this.emit(\"integration.delete\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n ;\n });\n }\n\n createInfluxDBIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.CreateInfluxDBIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"InfluxDB\", \"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getInfluxDBIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.GetInfluxDBIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n updateInfluxDBIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.UpdateInfluxDBIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"InfluxDB\", \"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n deleteInfluxDBIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.DeleteInfluxDBIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"InfluxDB\", \"deleted\");\n this.emit(\"integration.delete\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n createThingsBoardIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.CreateThingsBoardIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"ThingsBoard.io\", \"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getThingsBoardIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.GetThingsBoardIntegration({\n application_id: applicationID, \n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n updateThingsBoardIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.UpdateThingsBoardIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"ThingsBoard.io\", \"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n deleteThingsBoardIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.DeleteThingsBoardIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"ThingsBoard.io\", \"deleted\");\n this.emit(\"integration.delete\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n createMyDevicesIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.CreateMyDevicesIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"myDevices\", \"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getMyDevicesIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.GetMyDevicesIntegration({\n application_id: applicationID, \n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n updateMyDevicesIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.UpdateMyDevicesIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"myDevices\", \"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n deleteMyDevicesIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.DeleteMyDevicesIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"myDevices\", \"deleted\");\n this.emit(\"integration.delete\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n createLoRaCloudIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.CreateLoRaCloudIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"LoRa Cloud\", \"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getLoRaCloudIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.GetLoRaCloudIntegration({\n application_id: applicationID, \n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n updateLoRaCloudIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.UpdateLoRaCloudIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"LoRa Cloud\", \"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n deleteLoRaCloudIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.DeleteLoRaCloudIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"LoRa Cloud\", \"deleted\");\n this.emit(\"integration.delete\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"application has been \" + action,\n },\n });\n }\n\n createGCPPubSubIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.CreateGCPPubSubIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"GCP Pub/Sub\", \"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getGCPPubSubIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.GetGCPPubSubIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n updateGCPPubSubIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.UpdateGCPPubSubIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"GCP Pub/Sub\", \"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n deleteGCPPubSubIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.DeleteGCPPubSubIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"GCP Pub/Sbu\", \"deleted\");\n this.emit(\"integration.delete\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n createAWSSNSIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.CreateAWSSNSIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"AWS SNS\", \"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getAWSSNSIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.GetAWSSNSIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n updateAWSSNSIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.UpdateAWSSNSIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"AWS SNS\", \"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n deleteAWSSNSIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.DeleteAWSSNSIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"AWS SNS\", \"deleted\");\n this.emit(\"integration.delete\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n createAzureServiceBusIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.CreateAzureServiceBusIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"Azure Service-Bus\", \"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getAzureServiceBusIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.GetAzureServiceBusIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n updateAzureServiceBusIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.UpdateAzureServiceBusIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"Azure Service-Bus\", \"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n deleteAzureServiceBusIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.DeleteAzureServiceBusIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"Azure Service-Bus\", \"deleted\");\n this.emit(\"integration.delete\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n createPilotThingsIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.CreatePilotThingsIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"Pilot Things\", \"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getPilotThingsIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.GetPilotThingsIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n updatePilotThingsIntegration(integration, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.UpdatePilotThingsIntegration({\n \"integration.application_id\": integration.applicationID,\n body: {\n integration: integration,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"Pilot Things\", \"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n deletePilotThingsIntegration(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.DeletePilotThingsIntegration({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n this.integrationNotification(\"Pilot Things\", \"deleted\");\n this.emit(\"integration.delete\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n generateMQTTIntegrationClientCertificate(applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ApplicationService.GenerateMQTTIntegrationClientCertificate({\n application_id: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n integrationNotification(kind, action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: kind + \" integration has been \" + action,\n },\n });\n }\n}\n\nconst applicationStore = new ApplicationStore();\nexport default applicationStore;\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass AircomSystemStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/aircomSystem.swagger.json\", sessionStore.getClientOpts());\n }\n\n getSystemSettings(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AircomSystemService.AircomSystemService_GetSettings({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n updateSystemSettings(systemSettings, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AircomSystemService.AircomSystemService_UpdateSettings({\n \"systemSettings.id\": systemSettings.id,\n body: {\n systemSettings: systemSettings,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n deleteApplication(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AircomSystemService.AircomSystemService_DeleteApplication({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.emit(\"application.deleted\", id);\n this.notifyApp(\"deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n deleteOrganization(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AircomSystemService.AircomSystemService_DeleteOrganization({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.emit(\"organization.deleted\", id);\n this.notifyOrg(\"deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"system settings have been \" + action,\n },\n });\n }\n\n notifyApp(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"application has been \" + action,\n },\n });\n }\n\n notifyOrg(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"organization has been \" + action,\n },\n });\n }\n}\n\nconst aircomSystemStore = new AircomSystemStore();\nexport default aircomSystemStore;\n","import React, { Component } from \"react\";\nimport { withRouter, Link } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport { IconButton, Typography } from \"@material-ui/core\";\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Menu from '@material-ui/core/Menu';\nimport Divider from '@material-ui/core/Divider';\n// import Input from \"@material-ui/core/Input\";\n// import InputAdornment from \"@material-ui/core/InputAdornment\";\nimport blue from \"@material-ui/core/colors/blue\";\nimport Avatar from '@material-ui/core/Avatar';\nimport Chip from '@material-ui/core/Chip';\nimport AutocompleteSelect from \"./AutocompleteSelect\";\n\nimport MenuIcon from \"mdi-material-ui/Menu\";\nimport Backburger from \"mdi-material-ui/Backburger\";\nimport AccountCircle from \"mdi-material-ui/AccountCircle\";\n// import Magnify from \"mdi-material-ui/Magnify\";\n// import HelpCicle from \"mdi-material-ui/HelpCircle\";\n\nimport InternalStore from \"../stores/InternalStore\";\nimport SessionStore from \"../stores/SessionStore\";\nimport theme from \"../theme\";\nimport localStore, { VIEW_ORGADMIN, VIEW_SYSADMIN, VIEW_USER } from \"../stores/LocalStore\";\nimport OrganizationStore from \"../stores/OrganizationStore\";\nimport ApplicationStore from \"../stores/ApplicationStore\";\nimport AircomSystemStore from \"../stores/AircomSystemStore\";\n\n/**\n * Only set view mode from TopNav component (to keep control in one place)\n */\n\nconst styles = {\n appBar: {\n colorSecondary: \"#002060\",\n zIndex: theme.zIndex.drawer + 1,\n },\n menuButton: {\n marginLeft: -12,\n marginRight: 10,\n },\n hidden: {\n display: \"none\",\n },\n flex: {\n flex: 1,\n },\n label: {\n marginLeft: 8,\n },\n logo: {\n height: 32,\n },\n search: {\n marginRight: 3 * theme.spacing(1),\n color: theme.palette.common.white,\n background: blue[400],\n width: 450,\n padding: 5,\n borderRadius: 3,\n },\n select: {\n background: blue[400],\n paddingTop: theme.spacing(1),\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n width: 300,\n // flex: 1,\n },\n chip: {\n background: blue[600],\n color: theme.palette.common.white,\n marginRight: theme.spacing(1),\n \"&:hover\": {\n background: blue[400],\n },\n \"&:active\": {\n background: blue[400],\n },\n },\n iconButton: {\n color: theme.palette.common.white,\n marginRight: theme.spacing(1),\n },\n};\n\n\nclass TopNav extends Component {\n constructor() {\n super();\n\n this.state = {\n menuAnchor: null,\n search: \"\",\n oidcEnabled: false,\n organization: null,\n view: VIEW_USER,\n cacheCounter: 0,\n showOrgDropdown: true,\n };\n\n this.setOrganizationFromLocation = this.setOrganizationFromLocation.bind(this);\n this.onOrgSelectChange = this.onOrgSelectChange.bind(this);\n this.getOrganizationOption = this.getOrganizationOption.bind(this);\n this.getOrganizationOptions = this.getOrganizationOptions.bind(this);\n this.refreshShowOrgDropdown = this.refreshShowOrgDropdown.bind(this);\n this.reloadOrgDropdown = this.reloadOrgDropdown.bind(this);\n this.onOrganizationDeleted = this.onOrganizationDeleted.bind(this);\n this.setView = this.setView.bind(this);\n }\n\n componentDidMount() {\n InternalStore.settings(resp => {\n this.setState({\n oidcEnabled: resp.openidConnect.enabled,\n logoutURL: resp.openidConnect.logoutURL,\n });\n });\n // Listeners only needed to reload organization dropdown\n OrganizationStore.on(\"create\", this.reloadOrgDropdown);\n OrganizationStore.on(\"change\", this.reloadOrgDropdown);\n OrganizationStore.on(\"delete\", this.onOrganizationDeleted);\n AircomSystemStore.on(\"organization.deleted\", this.onOrganizationDeleted);\n // SessionStore.on(\"organization.change\", this.onSessionOrgChange);\n this.setState({view: localStore.getView()});\n this.setOrganizationFromLocation();\n }\n\n componentWillUnmount() {\n OrganizationStore.removeListener(\"create\", this.reloadOrgDropdown);\n OrganizationStore.removeListener(\"change\", this.reloadOrgDropdown);\n OrganizationStore.removeListener(\"delete\", this.reloadOrgDropdown);\n AircomSystemStore.removeListener(\"org.deleted\", this.onOrganizationDeleted)\n }\n\n componentDidUpdate(prevProps) {\n if (this.props === prevProps) {\n return;\n }\n // New route either from link or user typed new url into browser address bar\n this.setOrganizationFromLocation();\n }\n\n setOrganizationFromLocation() {\n const organizationRe = /\\/organizations\\/(\\d+)/g;\n const match = organizationRe.exec(this.props.history.location.pathname);\n\n let {organization, view} = this.state;\n if (match !== null && (organization === null || organization.id !== match[1])) {\n // Get organization (don't push new route unless org invalid)\n organization = null; // In case no organization fetched\n view = VIEW_USER;\n const newOrgID = match[1];\n // Don't use OrganizationStore.get as it will not execute callback if no org fetched\n // User may have typed invalid org/app ids into address bar\n OrganizationStore.list(\"\", 99, 0, (resp) => {\n let organizations = [];\n if (resp.result.length > 0) {\n organizations = resp.result.filter(org => org.id === newOrgID);\n }\n // Organization exists\n if (organizations.length === 1) {\n organization = organizations[0];\n }\n SessionStore.setOrganizationID(organization ? organization.id : \"\"); \n if (\n (view === VIEW_SYSADMIN && !SessionStore.isAdmin()) ||\n (view === VIEW_ORGADMIN && !SessionStore.isAdmin() && !SessionStore.isOrganizationAdmin(newOrgID))\n )\n {\n view = VIEW_USER;\n }\n this.setState({organization, view}, () => {\n if (organization === null) {\n localStore.setApplicationID(\"\");\n this.props.history.push(\"/\"); // Let Organization redirect direct next step\n }\n });\n });\n }\n }\n\n onMenuOpen = (e) => {\n this.setState({\n menuAnchor: e.currentTarget,\n });\n }\n\n onMenuClose = () => {\n this.setState({\n menuAnchor: null,\n });\n }\n\n onLogout = () => {\n if (this.state.oidcEnabled === true) {\n if (this.state.logoutURL !== \"\") {\n SessionStore.logout(false, () => {\n window.location.assign(this.state.logoutURL);\n });\n } else {\n SessionStore.logout(true, () => {\n this.props.history.push(\"/login\");\n });\n }\n } else {\n SessionStore.logout(true, () => {\n this.props.history.push(\"/login\");\n });\n }\n }\n\n setView(view) {\n\n this.setState({view});\n localStore.setView(view); // Will trigger this.onViewChanged event\n // Following line to emit organization.change event to prompt refresh of current page\n SessionStore.emitChangeEvent();\n this.onMenuClose();\n }\n\n onOrganizationDeleted(id) {\n // Has current organization been deleted?\n const {organization} = this.state;\n if (organization !== null && organization.id === id) {\n SessionStore.setOrganizationID(\"\");\n localStore.setApplicationID(\"\");\n const {cacheCounter} = this.state;\n this.setState({organization: null, cacheCounter:cacheCounter + 1}, () => {\n this.props.history.push(\"/\"); // Organization redirect will sort out next stop\n })\n }\n }\n\n reloadOrgDropdown() {\n // Ensure dropdown refreshed\n this.setState({cacheCounter: this.state.cacheCounter + 1});\n }\n\n onOrgSelectChange(e) {\n let {organization, view} = this.state;\n const newOrgID = e.target.value;\n\n if (!organization || (organization.id !== newOrgID)) {\n // Get organization\n organization = null; // In case no organization fetched\n // As event triggered by dropdown, the org should exist\n OrganizationStore.get(newOrgID, resp => {\n organization = resp.organization;\n\n // Get default application\n ApplicationStore.list('', newOrgID, 1, 0, resp => {\n SessionStore.setOrganizationID(newOrgID)\n if (\n (view === VIEW_SYSADMIN && !SessionStore.isAdmin()) ||\n (view === VIEW_ORGADMIN && !SessionStore.isAdmin() && !SessionStore.isOrganizationAdmin(newOrgID))\n )\n {\n view = VIEW_USER;\n }\n this.setState({organization, view}); // Saves requery on component update\n if (resp.totalCount > 0) {\n this.props.history.push(`/organizations/${newOrgID}/applications/${resp.result[0].id}/dashboard`);\n // SideNav should pick up change of application\n } else {\n this.props.history.push(`/organizations/${newOrgID}`);\n }\n });\n });\n }\n }\n\n getOrganizationOption(id, callbackFunc) {\n OrganizationStore.get(id, resp => {\n callbackFunc({label: resp.organization.name, value: resp.organization.id});\n });\n }\n\n getOrganizationOptions(search, callbackFunc) {\n OrganizationStore.list(search, 99, 0, resp => {\n const options = resp.result.map((o) => {return {label: o.name, value: o.id}});\n callbackFunc(options, resp.totalCount);\n });\n }\n\n handleDrawerToggle = () => {\n this.props.setDrawerOpen(!this.props.drawerOpen);\n }\n\n onSearchChange = (e) => {\n this.setState({\n search: e.target.value,\n });\n }\n\n onSearchSubmit = (e) => {\n e.preventDefault();\n this.props.history.push(`/search?search=${encodeURIComponent(this.state.search)}`);\n }\n\n refreshShowOrgDropdown() {\n const showOrgDropdown = SessionStore.organizations.length > 1;\n this.setState({showOrgDropdown});\n }\n\n render() {\n const {organization, view} = this.state;\n let organizationID = \"\";\n let organizationName = \"\";\n if (organization !== null) {\n organizationID = organization.id;\n organizationName = organization.name;\n }\n\n let drawerIcon;\n if (!this.props.drawerOpen) {\n drawerIcon = ;\n } else {\n drawerIcon = ;\n }\n\n const open = Boolean(this.state.menuAnchor);\n const orgAdminView = view === VIEW_ORGADMIN;\n const systemAdminView = view === VIEW_SYSADMIN;\n // Call SessionStore.isAdmin etc with false parameter (it won't check current view mode)\n const showOrgAdminView = SessionStore.isAdmin(false) || SessionStore.isOrganizationAdmin(organization !== null ? organization.id : 0, false);\n const showSysAdminView = SessionStore.isAdmin(false);\n const showUserView = showOrgAdminView || showSysAdminView; // No need to show if no other options available\n\n return(\n \n \n \n {drawerIcon}\n \n\n
\n \"Aircom\"\n
\n\n {/*
*/}\n \n  Organization: \n \n {systemAdminView && (\n \n )}\n {!systemAdminView && (\n \n {organizationName} \n \n )}\n
\n\n {/*
\n \n \n \n }\n />\n \n\n \n \n \n \n */}\n\n {orgAdminView && (\n \n Admin View  \n \n )}\n \n {systemAdminView && (\n \n System View  \n \n )}\n\n \n \n \n }\n label={this.props.user.email}\n onClick={this.onMenuOpen}\n color=\"primary\"\n classes={{\n root: this.props.classes.chip,\n }}\n />\n \n {showUserView && (\n this.setView(VIEW_USER)} selected={view === VIEW_USER}>User View\n )}\n {showOrgAdminView && (\n this.setView(VIEW_ORGADMIN)} selected={view === VIEW_ORGADMIN}>Admin View\n )}\n {showSysAdminView && (\n this.setView(VIEW_SYSADMIN)} selected={view === VIEW_SYSADMIN}>System View\n )}\n {showUserView && (\n \n )}\n \n {!this.state.oidcEnabled && Change password}\n Logout\n \n \n \n );\n }\n}\n\nTopNav.propTypes = {\n classes: PropTypes.any.isRequired,\n drawerOpen: PropTypes.any.isRequired,\n history: PropTypes.any.isRequired,\n setDrawerOpen: PropTypes.any.isRequired,\n user: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(withRouter(TopNav));\n","import React, { Component } from \"react\";\nimport { Link, withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Drawer from '@material-ui/core/Drawer';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Divider from '@material-ui/core/Divider';\nimport DomainIcon from \"mdi-material-ui/Domain\";\nimport Home from \"mdi-material-ui/Home\";\n\nimport BusinessCenterIcon from \"@material-ui/icons/BusinessCenter\";\nimport DashboardIcon from \"@material-ui/icons/Dashboard\";\nimport ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';\nimport ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';\nimport GroupWorkIcon from '@material-ui/icons/GroupWork';\nimport PhonelinkRingIcon from '@material-ui/icons/PhonelinkRing';\nimport BuildIcon from '@material-ui/icons/Build';\n\nimport SessionStore from \"../stores/SessionStore\";\nimport localStore, { VIEW_ORGADMIN, VIEW_SYSADMIN, VIEW_USER } from \"../stores/LocalStore\";\nimport OrganizationStore from \"../stores/OrganizationStore\";\nimport ApplicationStore from \"../stores/ApplicationStore\";\n\nimport theme from \"../theme\";\nimport { Typography } from \"@material-ui/core\";\nimport AutocompleteSelect from \"./AutocompleteSelect\";\nimport AircomSystemStore from \"../stores/AircomSystemStore\";\n\nconst styles = {\n drawerPaper: {\n position: \"fixed\",\n width: 270,\n paddingTop: theme.spacing(9),\n },\n select: {\n paddingTop: 0,\n paddingLeft: theme.spacing(3),\n paddingRight: theme.spacing(3),\n paddingBottom: 0,\n },\n};\n\nclass SideNav extends Component {\n constructor() {\n super();\n\n this.state = {\n open: false,\n organization: null, // Organization controlled by top nav\n application: null,\n view: VIEW_USER, // View controlled by top nav\n globalAdmin: false,\n cacheCounter: 0,\n };\n\n this.updateOrgAppFromLocation = this.updateOrgAppFromLocation.bind(this);\n this.getOrgIdFromLocation = this.getOrgIdFromLocation.bind(this);\n this.getAppIdFromLocation = this.getAppIdFromLocation.bind(this);\n this.onViewChange = this.onViewChange.bind(this);\n this.onAppSelectChange = this.onAppSelectChange.bind(this);\n this.getApplicationOption = this.getApplicationOption.bind(this);\n this.getApplicationOptions = this.getApplicationOptions.bind(this);\n this.onApplicationDeleted = this.onApplicationDeleted.bind(this);\n }\n\n componentDidMount() {\n // Triggered in following situations:\n // 1) User logs on. (sidenav not shown on login page)\n // 2) User refreshes page using Refresh / F5 button (url may or may not contain org id and app id)\n\n // If user not global admin, and has no organization, log out\n if (!SessionStore.isAdmin() && SessionStore.getOrganizationID() === null) {\n this.props.history.push(\"/login\");\n }\n\n // Listeners not needed for org change as it will push change of url and trigger component update\n localStore.on(\"view.change\", this.onViewChange);\n AircomSystemStore.on(\"application.deleted\", this.onApplicationDeleted);\n\n this.updateOrgAppFromLocation();\n const globalAdmin = SessionStore.isAdmin();\n this.setState({globalAdmin, open: this.props.open}); \n }\n\n componentWillUnmount() {\n localStore.removeListener(\"view.change\", this.onViewChange);\n AircomSystemStore.removeListener(\"application.deleted\", this.onApplicationDeleted);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.open !== this.state.open) {\n this.setState({open: this.props.open});\n }\n\n if (this.props === prevProps) {\n return;\n }\n\n // if (this.props.open !== prevProps.open) {\n // this.setState({open: this.props.open});\n // return;\n // }\n this.updateOrgAppFromLocation();\n }\n\n getOrgIdFromLocation() {\n const organizationRe = /\\/organizations\\/(\\d+)/g;\n const match = organizationRe.exec(this.props.history.location.pathname);\n\n if (match !== null) {\n return match[1];\n }\n\n return 0;\n };\n\n getAppIdFromLocation() {\n const applicationRe = /\\/applications\\/(\\d+)/g;\n const match = applicationRe.exec(this.props.history.location.pathname);\n\n if (match !== null) {\n return match[1];\n }\n\n return 0;\n };\n\n onViewChange() {\n const view = localStore.getView();\n this.setState({view});\n }\n\n onAppSelectChange(e) {\n const orgId = this.state.organization ? this.state.organization.id : 0;\n if (orgId > 0) {\n this.props.history.push(`/organizations/${orgId}/applications/${e.target.value}/dashboard`);\n // onComponentUpdate event will update state from location\n }\n }\n\n getApplicationOption(id, callbackFunc) {\n ApplicationStore.get(id, resp => {\n callbackFunc({label: resp.application.name, value: resp.application.id});\n });\n }\n\n getApplicationOptions(search, callbackFunc) {\n const orgId = this.state.organization ? this.state.organization.id : 0;\n ApplicationStore.list(search, orgId, 99, 0, resp => {\n const options = resp.result.map((o) => {return {label: o.name, value: o.id}});\n callbackFunc(options, resp.totalCount);\n });\n }\n\n onApplicationDeleted(id) {\n // Has current application been deleted?\n const {application} = this.state;\n if (application !== null && application.id === id) {\n localStore.setApplicationID(\"\");\n const {cacheCounter} = this.state;\n this.setState({application: null, cacheCounter:cacheCounter + 1}, () => {\n this.props.history.push(\"/\"); // Organization redirect will sort out next stop\n })\n }\n }\n\n updateOrgAppFromLocation() {\n // Need to pick up changes of org and app\n // DO NOT PUSH NEW ROUTE (Could conflict with TopNav)\n // DO NOT CALL SESSIONSTORE.SETORGANIZATIONID() (TopNav will do it)\n const newOrgID = this.getOrgIdFromLocation();\n const newAppID = this.getAppIdFromLocation();\n\n let {organization, application} = this.state;\n\n // Quick exit if no details changed\n if (organization !== null && organization.id === newOrgID && application !== null && application.id === newAppID) {\n return;\n }\n\n // Get applications first. We can't assume that location app id is valid\n // User may have typed invalid app id in browser address bar\n // If organization id is wrong, topnav will sort it\n \n ApplicationStore.list(\"\", 0, 99, 0, resp => {\n let applications = resp.result;\n\n // Organization needs to be fetched\n if ((newOrgID > 0) && ((organization === null) || (organization.id !== newOrgID))) {\n organization = null;\n // Following line will not call callback is no result (but topnav will sort that and redirect)\n // User will see message \"Object doesn't exist\"\n OrganizationStore.get(newOrgID, resp => {\n organization = resp.organization;\n application = null;\n // Get application, if it exists and belongs to organiaation\n if (newAppID > 0) {\n applications = applications.filter(app => app.id === newAppID && app.organizationID === newOrgID);\n if (applications.length > 0) {\n application = applications[0];\n }\n }\n localStore.setApplicationID(application ? application.id : \"\");\n this.setState({organization, application});\n });\n return;\n }\n\n if ((newAppID > 0) && ((application === null) || (application.id !== newAppID))) {\n application = null;\n applications = applications.filter(app => app.id === newAppID && app.organizationID === newOrgID);\n if (applications.length > 0) {\n application = applications[0];\n }\n localStore.setApplicationID(newAppID);\n this.setState({organization, application});\n }\n });\n }\n\n render() {\n const {organization, application, view} = this.state;\n\n if (organization === null) {\n // User is on system but not global admin and no organization access\n // Don't exit if globalAdmin. All organizations could have been deleted!\n return null;\n }\n\n const orgAdminView = view === VIEW_ORGADMIN;\n const systemAdminView = view === VIEW_SYSADMIN;\n\n let organizationID = \"\";\n let organizationName = \"\";\n if (organization !== null) {\n organizationID = organization.id;\n organizationName = organization.name;\n }\n // let application = null;\n // if (organization !== null && this.state.application !== null) {\n // application = this.state.application;\n // }\n // const showHomeItem = (application !== null) && (organization !== null);\n const applicationID = application ? application.id : null;\n\n return(\n {\n this.props.setDrawerOpen(false);\n }}\n classes={{paper: this.props.classes.drawerPaper}}\n >\n {/* {showHomeItem && (\n \n \n \n \n \n \n \n \n )} */}\n {systemAdminView && (\n this.props.setDrawerOpen(false)}>\n \n \n \n \n \n \n \n )}\n\n {(orgAdminView || systemAdminView) && (\n this.props.setDrawerOpen(false)}>\n \n \n \n \n \n \n \n )}\n\n {this.state.organization && (\n
\n \n Application\n \n \n
\n\n )}\n\n {application && (\n this.props.setDrawerOpen(false)}>\n {(orgAdminView || systemAdminView) && (\n \n \n \n \n \n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n {(orgAdminView || systemAdminView) && (\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 )}\n \n this.props.setDrawerOpen(false)}>\n \n \n \n \n \n \n \n \n );\n }\n}\n\nSideNav.propTypes = {\n classes: PropTypes.any.isRequired,\n history: PropTypes.any.isRequired,\n open: PropTypes.bool.isRequired,\n setDrawerOpen: PropTypes.func.isRequired\n}\n\nexport default withRouter(withStyles(styles)(SideNav));\n","import React, { Component } from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\n\nimport InternalStore from \"../stores/InternalStore\";\nimport theme from \"../theme\";\n\nconst styles = {\n footer: {\n paddingBottom: theme.spacing(1),\n \"& a\": {\n color: theme.palette.primary.main,\n textDecoration: \"none\",\n },\n },\n};\n\nclass Footer extends Component {\n constructor() {\n super();\n this.state = {\n footer: null,\n };\n }\n\n componentDidMount() {\n InternalStore.settings(resp => {\n if (resp.branding.footer !== \"\") {\n this.setState({\n footer: resp.branding.footer,\n });\n }\n });\n }\n\n render() {\n if (this.state.footer === null) {\n return(null);\n }\n\n return(\n
\n \n
\n );\n }\n}\n\nexport default withStyles(styles)(Footer);\n","import { EventEmitter } from \"events\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass NotificationStore extends EventEmitter {\n constructor() {\n super();\n this.notifications = [];\n }\n\n getAll() {\n return this.notifications;\n }\n\n createNotification(type, message) {\n const id = Date.now();\n\n this.notifications.push({\n id: id,\n type: type,\n message: message,\n });\n\n this.emit(\"change\");\n }\n\n deleteNotification(id) {\n let notification = null;\n\n for(var n of this.notifications) {\n if(n.id === id) {\n notification = n;\n }\n }\n\n this.notifications.splice(this.notifications.indexOf(notification), 1);\n this.emit(\"change\");\n }\n\n handleActions(action) {\n switch(action.type) {\n case \"CREATE_NOTIFICATION\": {\n this.createNotification(action.notification.type, action.notification.message);\n break;\n }\n case \"DELETE_NOTIFICATION\": {\n this.deleteNotification(action.id);\n break;\n }\n default:\n break;\n }\n }\n}\n\n\nconst notificationStore = new NotificationStore();\ndispatcher.register(notificationStore.handleActions.bind(notificationStore));\n\nexport default notificationStore;\n","import React, { Component } from \"react\";\nimport { withRouter } from \"react-router-dom\";\n\nimport Snackbar from '@material-ui/core/Snackbar';\nimport IconButton from '@material-ui/core/IconButton';\nimport Close from \"mdi-material-ui/Close\";\n\nimport NotificationStore from \"../stores/NotificationStore\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass Item extends Component {\n constructor() {\n super();\n this.onClose = this.onClose.bind(this);\n }\n\n onClose(event, reason) {\n dispatcher.dispatch({\n type: \"DELETE_NOTIFICATION\",\n id: this.props.id,\n });\n }\n\n render() {\n return(\n {this.props.notification.message}}\n autoHideDuration={3000}\n onClose={this.onClose}\n action={[\n \n \n \n ]}\n />\n );\n }\n}\n\n\nclass Notifications extends Component {\n constructor() {\n super();\n\n this.state = {\n notifications: NotificationStore.getAll(),\n };\n }\n\n componentDidMount() {\n NotificationStore.on(\"change\", () => {\n this.setState({\n notifications: NotificationStore.getAll(),\n });\n });\n }\n\n render() {\n const items = this.state.notifications.map((n, i) => );\n\n return (items);\n }\n}\n\nexport default withRouter(Notifications);\n","import React, { Component } from \"react\";\n\nimport Grid from '@material-ui/core/Grid';\nimport { withStyles } from '@material-ui/core/styles';\n\n\nconst styles = {\n clear: {\n clear: \"both\",\n },\n\n left: {\n float: \"left\",\n },\n\n right: {\n float: \"right\",\n },\n};\n\n\nclass TitleBar extends Component {\n render() {\n return(\n \n
\n {this.props.children}\n
\n
\n {this.props.buttons}\n
\n
\n );\n }\n}\n\nexport default withStyles(styles)(TitleBar);\n","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport classNames from \"classnames\";\n\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport theme from \"../theme\";\n\nconst styles = {\n title: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n marginRight: theme.spacing(1),\n float: \"left\",\n },\n\n link: {\n textDecoration: \"none\",\n color: theme.palette.primary.main,\n },\n};\n\n\nclass TitleBarTitle extends Component {\n render() {\n let component = null;\n let combinedStyles = null;\n\n if (this.props.to !== undefined) {\n component = Link;\n combinedStyles = classNames(this.props.classes.title, this.props.classes.link);\n } else {\n combinedStyles = this.props.classes.title;\n }\n\n\n return(\n \n {this.props.title}\n \n );\n }\n}\n\nexport default withStyles(styles)(TitleBarTitle);\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass UpPacketStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/upPacket.swagger.json\", sessionStore.getClientOpts());\n }\n\n list(limit, offset, applicationId, appDeviceGroupId, from, to, devEui, callbackFunc) {\n this.swagger.then((client) => {\n client.apis.UpPacketService.UpPacketService_List({\n limit: limit,\n offset: offset,\n applicationId: applicationId,\n appDeviceGroupId: appDeviceGroupId,\n from: from,\n to: to,\n devEui: devEui,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getLatestReadings(applicationId, appDeviceGroupId, devEui, callbackFunc) {\n this.swagger.then((client) => {\n client.apis.UpPacketService.UpPacketService_GetLatestReadings({\n applicationId: applicationId,\n appDeviceGroupId: appDeviceGroupId,\n devEui: devEui,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getReadingsInRange(applicationId, appItemId, devEui, from, to, callbackFunc) {\n this.swagger.then((client) => {\n client.apis.UpPacketService.UpPacketService_GetReadingsInRange({\n applicationId: applicationId, \n appItemId: appItemId,\n devEui: devEui,\n from: from,\n to: to,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n decodePacket(packetId, callbackFunc){\n this.swagger.then(client => {\n client.apis.UpPacketService.UpPacketService_Decode({\n \"id\": packetId,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"decoded\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n decodeAllPackets(callbackFunc){\n this.swagger.then(client => {\n client.apis.UpPacketService.UpPacketService_DecodeAll({\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"decoded\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n deletePacket(packetId, callbackFunc){\n this.swagger.then(client => {\n client.apis.UpPacketService.UpPacketService_Delete({\n \"id\": packetId,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"packet has been \" + action,\n },\n });\n }\n}\n\nconst upPacketStore = new UpPacketStore();\nexport default upPacketStore;\n","/**\n* Library to convert dates and numbers to/from strings\n*/\n// import moment from 'moment/min/moment-with-locales';\nimport moment from 'moment';\nimport numeral from 'numeral';\n\nexport function formatReading(float, format) {\n if (format === \"on-off\") {\n return float !== 0 ? \"On\" : \"Off\";\n }\n if (format === \"Time\") {\n return moment(float * 1000).format('YYYY-MM-DD HH:mm:ss');\n }\n return numeral(float).format(format);\n}\n\nexport function formatTimestamp(aDate) {\n return moment(aDate).format('YYYY-MM-DD HH:mm:ss');\n}\n\nexport function floatToLocString(float, decPlaces) {\n let mask = '0';\n if (decPlaces > 0) {\n mask = `0.${'0'.repeat(decPlaces)}`;\n }\n return numeral(float).format(mask);\n}\n\n// export function unixMsToLocString(unixMs = 0) {\n// const aDate = new Date(unixMs);\n// return moment(aDate).format('LL') + \" \" + moment(aDate).format('LTS');\n// }\n\n// export function unixMsToCSVString(unixMs = 0) {\n// const aDate = new Date(unixMs);\n// return moment(aDate).format('YYYY-MM-DD HH:mm:ss');\n// }\n\n// export function unixMsToTimeString(unixMs = 0) {\n// const aDate = new Date(unixMs);\n// return moment(aDate).format('HH:mm');\n// }\n\n// export function unixUtcMsToTimeString(unixMs = 0) {\n// //const aDate = new Date(unixMs);\n// return moment()\n// .utc()\n// .startOf('day')\n// .add(unixMs, 'milliseconds').local().format('HH:mm');\n// }\n\n// export function unixDateToLocString(unixDate) {\n// const aDate = new Date(unixDate * 1000);\n// return moment(aDate).format('LLL');\n// }\n\n// export function locStringToUnixMs(dateString) {\n// const aDate = new Date(dateString);\n// return aDate.valueOf();\n// }\n\n// export function intToLocString(int, scalePlaces, decPlaces) {\n// const num = int * (10 ** (-1 * scalePlaces));\n// let mask = '0';\n// if (decPlaces > 0) {\n// mask = `0.${'0'.repeat(decPlaces)}`;\n// }\n// return numeral(num).format(mask);\n// }\n\n// export function floatToLocString(float, decPlaces) {\n// let mask = '0';\n// if (decPlaces > 0) {\n// mask = `0.${'0'.repeat(decPlaces)}`;\n// }\n// return numeral(float).format(mask);\n// }\n\n// export function getLocTimeString(hours, mins) {\n// const aDate = new Date(0, 0, 0, hours, mins);\n// return moment(aDate).format('LT');\n// }\n\n// export function getFormattedString(aDate, format) {\n// return moment(aDate).format(format);\n// }\n\n// /**\n// * Return number of mins since 00:00 on given date\n// * Will never return zero. (Midnight = 1440)\n// * @param {*} date\n// */\n// export function utcDateToMins(date) {\n// if (date == null) {\n// return 0; //not set\n// }\n// const dayStart = moment.utc( date ).startOf('day');\n// let result = moment.utc(date).diff(dayStart, 'minutes');\n// if (result === 0) {\n// result = 1440; // Zero means undefined\n// }\n// return result;\n// }\n\n// export function utcMinsToDate(mins) {\n// if (mins == null || mins === 0) {\n// return null; //not set\n// }\n// return moment.utc().startOf('day').add(mins,'minutes').local().format('HH:mm');\n// }","import green from '@material-ui/core/colors/green';\nimport red from '@material-ui/core/colors/red';\nimport 'react-datetime/css/react-datetime.css';\nimport { createMuiTheme } from '@material-ui/core/styles';\n\nexport const theme = createMuiTheme({\n palette: {\n primary: {\n main: '#054F8D',\n },\n secondary: {\n main: '#4888C8',\n },\n },\n typography: {\n useNextVariants: true,\n },\n});\n\nexport const styles = theme => ({\n pageDiv: {\n marginTop: '70px',\n marginLeft: '20px',\n width: '100%',\n flexGrow: 1\n },\n container: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n paper: {\n width: '90%',\n // overflowX: 'auto',\n paddingLeft: 10,\n paddingRight: 10,\n paddingTop: 10,\n paddingBottom: 10,\n marginTop: 20,\n marginBottom: 20,\n },\n lastPacketContainer: {\n marginTop: 20,\n },\n table: {\n width: '100%'\n },\n tableRow: {\n height: 40\n },\n tableCell: {\n padding: 4\n },\n button: {\n margin: theme.spacing.unit,\n },\n darkLabel: {\n color: '#000000',\n },\n checkBoxControl: {\n marginLeft: theme.spacing.unit,\n marginRight: theme.spacing.unit,\n },\n formControlLabel: {\n marginLeft: theme.spacing.unit,\n marginRight: theme.spacing.unit,\n width: 250,\n },\n formControl: {\n fontSize: 50,\n },\n mediumFormControlLabel: {\n marginLeft: theme.spacing.unit,\n marginRight: theme.spacing.unit,\n width: 350,\n },\n textField: {\n marginLeft: theme.spacing.unit,\n marginRight: theme.spacing.unit,\n width: 250,\n },\n mediumTextField: {\n marginLeft: theme.spacing.unit,\n marginRight: theme.spacing.unit,\n width: 300,\n },\n wideTextField: {\n marginLeft: theme.spacing.unit,\n marginRight: theme.spacing.unit,\n width: 500,\n },\n selectField: {\n marginLeft: theme.spacing.unit,\n marginRight: theme.spacing.unit,\n width: 200,\n },\n mediumSelectField: {\n marginLeft: theme.spacing.unit,\n marginRight: theme.spacing.unit,\n width: 300,\n },\n alertError: {\n backgroundColor: red[600],\n },\n alertSuccess: {\n backgroundColor: green[600],\n },\n graphDiv: {\n width: '80%',\n marginLeft: theme.spacing.unit,\n marginRight: theme.spacing.unit,\n },\n gridItem: {\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit,\n marginRight: theme.spacing.unit,\n },\n card: {\n minWidth: 75,\n },\n cardTitle: {\n fontSize: 14,\n },\n cardTime: {\n fontSize: 10,\n },\n errorIcon: {\n color: \"#FF0000\",\n margin: theme.spacing.unit,\n fontSize: 24,\n },\n rdtInput: {\n font:\"inherit\",\n },\n rdtInputError: {\n font:\"inherit\",\n backgroundColor:\"#FF0000\",\n },\n td: {\n width:\"100px\",\n },\n redDigital: {\n color: \"#FF0000\",\n },\n greenDigital: {\n color: \"#4caf50\",\n },\n greyDigital: {\n color: \"#90a4ae\",\n },\n digitalTd: {\n textAlign: 'center',\n }\n \n});\n","import React, { Component } from \"react\";\n\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableRow from '@material-ui/core/TableRow';\n//import DataTable from \"../components/DataTable\";\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableHead from '@material-ui/core/TableHead';\nimport Paper from \"./Paper\";\n\nimport UpPacketStore from \"../stores/UpPacketStore\";\n\nimport {formatReading} from '../styles/formatters';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport { styles } from '../styles/aircom-styles';\n\nexport class DeviceReadingsTable extends Component {\n constructor() {\n super();\n\n this.state = {\n fetchingData: false,\n data: null,\n };\n this.fetchData = this.fetchData.bind(this);\n }\n\n componentDidMount() {\n this.fetchData();\n }\n\n componentDidUpdate(prevProps){\n if ((prevProps === this.props) || this.state.fetchingData) {\n return;\n }\n\n //only do this if any of the filter has changed, otherwise this is called recursively (timeHi only means that the refresh time has occurred)\n if(\n (prevProps.deviceFilter !== this.props.deviceFilter) ||\n (prevProps.timeHi !== this.props.timeHi) \n ){\n this.fetchData(prevProps.deviceFilter !== this.props.deviceFilter); // Clear so previous data no longer showing\n }\n }\n\n fetchData(clearDataFirst) {\n // If deviceFilter blank, no need to fetch data\n const {deviceFilter} = this.props;\n\n if (!deviceFilter) {\n this.setState({fetchingData: false, data: null});\n return;\n }\n \n const data = (clearDataFirst === true) ? null : this.state.data;\n this.setState({fetchingData: true, data}, () => {\n UpPacketStore.getLatestReadings(this.props.applicationID,\"\",this.props.deviceFilter,resp => {\n const data = {\n result: resp.items,\n }\n this.setState({fetchingData: false, data});\n });\n });\n }\n\n render() {\n const {deviceFilter, filterName, classes} = this.props;\n const {data} = this.state;\n if(!deviceFilter) {\n return null;\n }\n \n return(\n \n \n Latest Readings ({filterName ? filterName : 'All Devices'})\n {this.state.fetchingData ? \"...\" : \"\"}\n \n \n\n {(data === null) && (\n \n \n Loading data...\n \n \n )}\n\n \n \n \n {data && data.result[0] && (\n \n Reading\n { data.result[0].deviceReadings.map((value) => {\n return (\n {value.devEui}\n )\n })}\n \n )}\n \n \n \n {data && (\n data.result.map((value) => {\n return(\n \n {value.appItemName}\n {value.deviceReadings.map((reading) => {\n return(\n {(reading.receivedAt ? formatReading(reading.value, value.format) : \"N/A\")}\n )\n })}\n \n )\n }\n ))}\n \n
\n
\n
\n );\n }\n}\n\nDeviceReadingsTable.propTypes = {\n applicationID: PropTypes.number.isRequired,\n classes: PropTypes.object.isRequired,\n deviceFilter: PropTypes.string.isRequired,\n filterName: PropTypes.string.isRequired,\n timeHi: PropTypes.string.isRequired,\n};\n\nexport default withStyles(styles)(DeviceReadingsTable);\n","import React, { Component } from \"react\";\n\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport DigitalIcon from '@material-ui/icons/RadioButtonChecked';\nimport { styles } from '../styles/aircom-styles';\nimport {formatReading, formatTimestamp} from '../styles/formatters';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\n\nimport UpPacketStore from \"../stores/UpPacketStore\";\n\nexport class DeviceReadingsCards extends Component {\n constructor() {\n super();\n\n this.state = {\n fetchingData: false,\n data: null\n };\n this.fetchData = this.fetchData.bind(this);\n }\n\n componentDidUpdate(prevProps){\n if ((prevProps === this.props) || this.state.fetchingData) {\n return;\n }\n\n //only do this if any of the filter has changed, otherwise this is called recursively (timeHi only means that the refresh time has occured)\n if (\n (prevProps.deviceFilter !== this.props.deviceFilter) ||\n (prevProps.timeHi !== this.props.timeHi) ||\n (prevProps.timeLo !== this.props.timeLo) ||\n (prevProps.appItemIds !== this.props.appItemIds)\n ) {\n this.fetchData(prevProps.deviceFilter !== this.props.deviceFilter); // Clear so previous data no longer showing\n }\n }\n\n componentDidMount() {\n this.fetchData();\n }\n\n fetchData(clearDataFirst) {\n const data = (clearDataFirst === true) ? null : this.state.data;\n this.setState({fetchingData: true, data}, () => {\n const {deviceFilter, applicationID, appItemIds} = this.props;\n UpPacketStore.getLatestReadings(applicationID,\"\",deviceFilter, resp => {\n let data = resp.items.filter((value) => appItemIds.includes(parseInt(value.appItemId, 10)));\n this.setState({data, fetchingData: false});\n });\n })\n }\n\n render() {\n const {deviceFilter, filterName, classes} = this.props;\n const {data} = this.state;\n if (!deviceFilter) {\n return null;\n }\n\n return(\n \n \n Latest Measurements ({filterName ? filterName : 'All Devices'})\n {this.state.fetchingData ? \"...\" : \"\"}\n \n
\n \n {!data && (\n \n \n Loading data...\n \n \n )}\n {data && (\n data.map((value) => {\n let valueComp;\n\n if (value.deviceReadings.length > 0)\n {\n if (value.format === \"on-off\") {\n let iconClass = classes.greyDigital;\n if (Array.isArray(value.deviceReadings) && (value.deviceReadings.length > 0)) {\n iconClass = value.deviceReadings[0].value === 0 ? classes.redDigital : classes.greenDigital;\n }\n valueComp = \n } else {\n valueComp = (\n \n {value.deviceReadings[0] ? formatReading(value.deviceReadings[0].value, value.format) : \"\"}\n \n );\n }\n if (!value.deviceReadings[0].receivedAt) {\n return null;\n }\n } else\n return null;\n \n const timestampText = value.deviceReadings[0] ? formatTimestamp(value.deviceReadings[0].receivedAt) : \"No data\";\n return (\n \n \n \n \n {value.appItemName}\n \n {(value.deviceReadings.length > 0 && value.deviceReadings[0].receivedAt ? valueComp : \"\")}\n \n {(value.deviceReadings.length > 0 && value.deviceReadings[0].receivedAt ? timestampText : \"No Data Received\")}\n \n \n \n \n )\n })\n )}\n \n
\n
\n );\n }\n}\n\nDeviceReadingsCards.propTypes = {\n appItemIds: PropTypes.array.isRequired,\n applicationID: PropTypes.number.isRequired,\n classes: PropTypes.object.isRequired,\n deviceFilter: PropTypes.string.isRequired,\n filterName: PropTypes.string.isRequired,\n timeLo: PropTypes.string.isRequired,\n timeHi: PropTypes.string.isRequired,\n};\n\nexport default withStyles(styles)(DeviceReadingsCards);\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\n// import Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableRow from '@material-ui/core/TableRow';\nimport DataTable from \"./DataTable\";\nimport Grid from '@material-ui/core/Grid';\n\nimport UpPacketStore from \"../stores/UpPacketStore\";\n\nimport WarningIcon from '@material-ui/icons/Warning';\n// import FunctionsIcon from '@material-ui/icons/Functions';\nimport Button from '@material-ui/core/Button';\n\nimport {formatReading} from '../styles/formatters';\nimport moment from 'moment';\nimport SessionStore from \"../stores/SessionStore\";\n\nexport default class UpPacketsLog extends Component {\n constructor() {\n super();\n this.state = {\n fetchingData: false,\n cacheCounter: 0,\n };\n this.getRow = this.getRow.bind(this);\n this.getPage = this.getPage.bind(this);\n }\n\n // componentDidUpdate(prevProps) {\n // if ((prevProps === this.props) || this.state.fetchingData) {\n // return;\n // }\n // if ((prevProps.cacheCounter !== this.props.cacheCounter) && !this.state.fetchingData) {\n // // Parent component increased cacheCounter to force refresh and display ellipsis\n // this.setState({fetchingData: true}); // Will be cleared when page fetched \n // }\n // }\n\n getPage(limit, offset, callbackFunc) {\n /* Need to pass 0 or empty string when parameters are not set - See default for not-set below*/ \n // var timeLo = \"\"; //no start time\n // var timeHi = \"\"; //no start time\n // var applicationId = 0; //no application id\n // var groupId = 0; //no group id\n // var devEui = \"\"; //no devEui\n let {applicationID, groupId, timeLo, timeHi, deviceFilter} = this.props;\n\n //Some testing values\n // timeLo = moment().subtract(2, 'day').startOf('day').format();\n // timeHi = moment().add(1, 'day').startOf('day').format();\n // applicationId = 1;\n // groupId = 1;\n // devEui = \"c0ee400001013822\"; \n UpPacketStore.list(limit, offset, applicationID, groupId, timeLo, timeHi, deviceFilter, (result) => {\n callbackFunc(result);\n // if (this.state.fetchingData) {\n // // // May cause re-render, leading to one surplus call to getPage\n // // // Only call when absolutely necessary\n // this.setState({fetchingData: false});\n // }\n });\n }\n\n getRow(obj) {\n const valueCount = obj.values.length;\n const {itemsSkipped} = obj;\n const isAdmin = (SessionStore.isAdmin() === true) || (SessionStore.isOrganizationAdmin(this.props.organizationID) === true);\n\n return(\n \n {moment(obj.receivedAt).format(\"lll\")}\n {obj.devEui}\n {obj.deviceName}\n\n \n
\n \n {valueCount} {valueCount === 1 ? 'Value' : 'Values'}{itemsSkipped ? ` (Errors ${itemsSkipped})` : null}\n {(itemsSkipped > 0) && (\n \n )}\n \n
    \n {obj.values.map((value) => {\n return
  • {value.name}: {formatReading(value.value, value.format)}
  • \n })}\n {(itemsSkipped > 0) && (\n
  • Items skipped: {itemsSkipped}
  • \n )}\n
\n {(isAdmin === true) && (\n \n )}\n
\n
\n \n
\n \n {obj.decodedAt ? moment(obj.decodedAt).format('YYYY-MM-DD HH:mm:ss') : 'N/A'}\n \n Payload: {obj.payload}\n
\n
\n \n );\n }\n\n decodePacket = (packetID) => {\n // Prompt user...\n UpPacketStore.decodePacket(packetID, () => {\n this.setState({cacheCounter: this.state.cacheCounter + 1}); // To force re-render and requery\n // May need to use x-grid rather than current DataTable component\n })\n };\n\n render() {\n // const isAdmin = SessionStore.isAdmin() || SessionStore.isOrganizationAdmin(this.props.organizationID)\n return(\n \n \n Uplink Packets\n {this.state.fetchingData ? \"...\" : \"\"}\n \n\n \n Received At\n Device EUI\n Device Name\n Values\n Decoded At\n \n }\n getPage={this.getPage}\n getRow={this.getRow}\n />\n \n );\n }\n}\n\nUpPacketsLog.propTypes = {\n applicationID: PropTypes.any.isRequired,\n deviceFilter: PropTypes.string.isRequired,\n groupId: PropTypes.number.isRequired,\n organizationID: PropTypes.number.isRequired,\n timeLo: PropTypes.string.isRequired,\n timeHi: PropTypes.string.isRequired,\n // cacheCounter: PropTypes.any,\n}\n\n// UpPacketsLog.defaultProps = {\n// cacheCounter: 0,\n// }\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { withStyles } from '@material-ui/core/styles';\r\n// import Typography from '@material-ui/core/Typography';\r\n\r\nimport { VictoryLine, VictoryScatter, VictoryChart, VictoryAxis, VictoryTheme, VictoryBar } from 'victory';\r\nimport { floatToLocString } from '../styles/formatters';\r\nimport { styles } from '../styles/aircom-styles';\r\nimport moment from 'moment';\r\n\r\nfunction ValueGraph(props) {\r\n const { classes} = props;\r\n // const { title = value } = props;\r\n let { graphData } = props;\r\n let timeLo = moment(props.timeLo);\r\n let timeHi = moment(props.timeHi);\r\n \r\n // const noDataResult =

No graph data for {value}

;\r\n const noDataResult = null;\r\n\r\n if (!Array.isArray(graphData) || (graphData.length === 0) || graphData[0].length === 0) {\r\n return noDataResult;\r\n }\r\n\r\n // Simplify data and convert date string to value\r\n // We only need the received_at and value field (depend on value property), and only if the value is present\r\n\r\n // 18-5-2021 graphData is now array with one or two data sets to facilitate 2 y axes\r\n // See https://formidable.com/open-source/victory/gallery/multiple-dependent-axes/\r\n \r\n const barGraphs = graphData.map(dataset => dataset[0].format.startsWith('CP_'));\r\n // Simplify data and convert timestamp string to moment object\r\n graphData = graphData.map(\r\n (dataset) => dataset.map(row => {\r\n const received_at = moment(row['receivedAt']);\r\n return { received_at, value: row['value'] };\r\n })\r\n );\r\n\r\n const minValues = graphData.map(\r\n (dataset) => Math.min(...dataset.map((d) => d.value))\r\n );\r\n let maxValues = graphData.map(\r\n (dataset) => Math.max(...dataset.map((d) => d.value))\r\n );\r\n maxValues = maxValues.map((value, i) => {\r\n if (value <= minValues[i]) {\r\n return value * 1.01; // We don't want min and max to be the same\r\n }\r\n return value;\r\n })\r\n\r\n const minTimes = graphData.map(\r\n (dataset) => Math.min(...dataset.map((d) => d.received_at))\r\n );\r\n const maxTimes = graphData.map(\r\n (dataset) => Math.max(...dataset.map((d) => d.received_at))\r\n );\r\n\r\n const newTimeLo = Math.min(...minTimes);\r\n if (newTimeLo > timeLo) {\r\n timeLo = newTimeLo;\r\n }\r\n const newTimeHi = Math.max(...maxTimes);\r\n if (newTimeHi < timeHi) {\r\n timeHi = newTimeHi;\r\n }\r\n // const valueLo = Math.min(...minValues);\r\n // const valueHi = Math.max(...maxValues);\r\n const orientations = [\"left\", \"right\"];\r\n const colors = [\"blue\", \"red\"];\r\n const anchors = [\"end\", \"start\"];\r\n\r\n return (\r\n \r\n
\r\n {/* \r\n {title}\r\n */}\r\n\r\n \r\n {\r\n const aDate = new Date(x);\r\n return aDate.toLocaleDateString() + \"\\n\" + aDate.getHours() + \":\" + (aDate.getMinutes()<10?'0':'') + aDate.getMinutes();\r\n //return unixDateToLocString(aDate.valueOf());\r\n }}\r\n style={{\r\n tickLabels: {fontSize: 7}\r\n }}\r\n />\r\n {graphData.map((dataset, i) => {\r\n return (\r\n floatToLocString((t * (maxValues[i] - minValues[i])) + minValues[i], 2)}\r\n tickCount={5}\r\n style={{\r\n axis: {stroke: colors[i]},\r\n ticks: {padding: 6},\r\n axisLabel: {fill: \"#0000FF\", fontSize: 9},\r\n tickLabels: {fill: colors[i], fontSize: 7, textAnchor: anchors[i]}\r\n }}\r\n />\r\n )\r\n })}\r\n\r\n {graphData.map((dataset, i) => {\r\n if (barGraphs[i]) {\r\n return (\r\n (datum.value - minValues[i]) / (maxValues[i] - minValues[i])}\r\n alignment=\"start\"\r\n // barWidth=\"50\"\r\n />\r\n )\r\n } else {\r\n return (\r\n (datum.value - minValues[i]) / (maxValues[i] - minValues[i])}\r\n style={{\r\n data: {\r\n stroke: colors[i], strokeWidth: 1\r\n },\r\n }}\r\n />\r\n )\r\n }\r\n })}\r\n {graphData.map((data, i) => {\r\n return (\r\n (datum.value - minValues[i]) / (maxValues[i] - minValues[i])}\r\n style={{\r\n data: {\r\n stroke: colors[i],\r\n fill: 'white',\r\n strokeWidth: 1,\r\n },\r\n labels: { fill: colors[i], display: 'none'}\r\n }}\r\n labels={(d) => floatToLocString(Number(d.datum.value), 2)}\r\n events={[{\r\n target: \"data\",\r\n eventHandlers: {\r\n onClick: () => {\r\n return [\r\n {\r\n target: \"data\",\r\n mutation: (props) => {\r\n const fill = props.style && props.style.fill;\r\n return fill === colors[i] ? { style: { fill: \"white\", stroke: colors[i], strokeWidth: 1} } : { style: { fill: colors[i], stroke: colors[i], strokeWidth: 1 } };\r\n }\r\n }, {\r\n target: \"labels\",\r\n mutation: (props) => {\r\n return props.style.display === 'none' ? { style: { ...props.style, display: 'initial', fontSize: 8}} : { style: { ...props.style, display: 'none'}};\r\n }\r\n }\r\n ];\r\n }\r\n }\r\n }]}\r\n />\r\n )\r\n })}\r\n\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nValueGraph.propTypes = {\r\n classes: PropTypes.any.isRequired,\r\n graphData: PropTypes.any.isRequired,\r\n style: PropTypes.any.isRequired,\r\n timeHi: PropTypes.string.isRequired,\r\n timeLo: PropTypes.string.isRequired,\r\n // title: PropTypes.string.isRequired,\r\n // value: PropTypes.any.isRequired,\r\n}\r\n\r\nexport default withStyles(styles)(ValueGraph);\r\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\nclass AppItemStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/appItem.swagger.json\", sessionStore.getClientOpts());\n }\n\n list(applicationId, limit, offset, callbackFunc) {\n this.swagger.then((client) => {\n client.apis.AppItemService.AppItemService_List({\n applicationId: applicationId,\n limit: limit,\n offset: offset,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n get(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppItemService.AppItemService_Get({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n create(appItem, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppItemService.AppItemService_Create({\n body: {\n appItem: appItem,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n update(appItem, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppItemService.AppItemService_Update({\n \"appItem.id\": appItem.id,\n body: {\n appItem: appItem,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n delete(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppItemService.AppItemService_Delete({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"app item has been \" + action,\n },\n });\n }\n\n\n listPayloadItem(callbackFunc) {\n this.swagger.then((client) => {\n client.apis.AppItemService.AppItemService_PayloadItemList({\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getPayloadItem(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppItemService.AppItemService_GetUpPayloadItem({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getGroupItemMap(appDeviceGroupId, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppItemService.AppItemService_GroupItemMap({\n appDeviceGroupId: appDeviceGroupId,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n updateGroupItemMap(appDeviceGroupId, itemsMap, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppItemService.AppItemService_UpdateGroupItemMap({\n appDeviceGroupId: appDeviceGroupId,\n body: {\n items: itemsMap,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notifyGroupItems(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notifyGroupItems(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"device type items have been \" + action,\n },\n });\n }\n}\n\nconst appItemStore = new AppItemStore();\nexport default appItemStore;\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\nimport ValueGraph from \"../components/ValueGraph\";\nimport HighlightIcon from '@material-ui/icons/Highlight';\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\n// import ClearIcon from '@material-ui/icons/Clear';\nimport IconButton from '@material-ui/core/IconButton';\nimport AutocompleteSelect from \"./AutocompleteSelect\";\nimport { styles } from '../styles/aircom-styles';\nimport moment from \"moment\";\n\nimport UpPacketStore from \"../stores/UpPacketStore\";\nimport AppItemStore from \"../stores/AppItemStore\";\n\n/**\n * \n * @param {*} data \n * @returns array with counter increments multiplied by time diff and daily rate\n */\nfunction ApplyCounterIncrements(data, periodic, timeLo, timeHi) {\n let itemData = [];\n const scale = Number(data[0].format.substr(3, 50));\n\n if (!periodic) {\n // e.g. windspeed\n for (let i = 1; i < data.length; i++) {\n let countInc = data[i].value - data[i - 1].value;\n if (countInc < 0) {\n countInc = 0;\n }\n const dayDiff = moment(data[i].receivedAt).diff(moment(data[i - 1].receivedAt), 'days', true);\n itemData.push({\n value: countInc / (dayDiff * scale),\n receivedAt: data[i].receivedAt,\n format: \"0.00\",\n });\n }\n return itemData;\n }\n\n // Must be periodic, e.g. rainfall per hour or per day\n const dayDiff = moment(timeHi).diff(moment(timeLo), 'days', true);\n // const hourDiff = moment(timeHi).diff(moment(timeLo), 'hours', true);\n const periodUnit = (dayDiff < 2) ? 'hour': 'day';\n \n let currentPeriodStart = 0;\n let counter = null;\n data.forEach((row) => {\n let rowPeriodStart = moment(row.receivedAt).startOf(periodUnit).valueOf();\n if (rowPeriodStart > currentPeriodStart) {\n if (counter !== null) {\n // First row of data only used for start counter\n itemData.push({\n value: (row.value - counter) * scale,\n receivedAt: row.receivedAt,\n format: \"CP_0.00\",\n })\n }\n counter = row.value;\n currentPeriodStart = rowPeriodStart;\n }\n });\n return itemData;\n}\n\nexport default class DeviceReadingGraph extends Component {\n constructor() {\n super();\n\n this.state = {\n fetchingData: false,\n graphData: null,\n appItem2Id: null,\n };\n this.fetchData = this.fetchData.bind(this);\n this.onAppItem2Change = this.onAppItem2Change.bind(this);\n this.getAppItemOption = this.getAppItemOption.bind(this);\n this.getAppItemOptions = this.getAppItemOptions.bind(this);\n }\n\n componentDidUpdate(prevProps){\n if ((prevProps === this.props) || this.state.fetchingData) {\n return;\n }\n\n //only do this if any of the filter has changed, otherwise this is called recursively\n if(\n (prevProps.deviceFilter !== this.props.deviceFilter) ||\n (prevProps.timeLo !== this.props.timeLo) ||\n (prevProps.timeHi !== this.props.timeHi) \n ){\n this.fetchData(prevProps.deviceFilter !== this.props.deviceFilter); // Clear so previous data no longer showing\n }\n }\n\n componentDidMount() {\n this.fetchData(); \n }\n\n fetchData(clearDataFirst) {\n const {deviceFilter, timeLo, timeHi, appItemId, isSpotlit} = this.props;\n const {appItem2Id} = this.state;\n\n if (!deviceFilter) {\n return;\n }\n \n let graphData = (clearDataFirst === true) ? null : this.state.graphData;\n this.setState({fetchingData: true, graphData}, () => {\n graphData = [];\n UpPacketStore.getReadingsInRange(this.props.applicationID, appItemId, deviceFilter, timeLo, timeHi, resp => {\n // Adjust to show adjusted counter increments\n if (resp.items.length > 0 && resp.items[0].format.startsWith('CI_')) {\n graphData.push(ApplyCounterIncrements(resp.items, false, 0, 0));\n } else if (resp.items.length > 0 && resp.items[0].format.startsWith('CP_')) {\n graphData.push(ApplyCounterIncrements(resp.items, true, timeLo, timeHi));\n } else {\n graphData.push(resp.items);\n }\n \n if (isSpotlit && (appItem2Id !== null)) {\n UpPacketStore.getReadingsInRange(this.props.applicationID, appItem2Id, deviceFilter, timeLo, timeHi, resp => {\n // Adjust to show adjusted counter increments\n if (resp.items.length > 0 && resp.items[0].format.startsWith('CI_')) {\n graphData.push(ApplyCounterIncrements(resp.items, false, 0, 0));\n } else if (resp.items.length > 0 && resp.items[0].format.startsWith('CP_')) {\n graphData.push(ApplyCounterIncrements(resp.items, true, timeLo, timeHi));\n } else {\n graphData.push(resp.items);\n }\n this.setState({graphData, fetchingData: false});\n });\n } else {\n this.setState({graphData, fetchingData: false});\n }\n });\n })\n };\n\n onAppItem2Change(e) {\n // e.target.value is null if cleared\n if (e.target.value === null && this.state.graphData.length > 1) {\n const {graphData} = this.state;\n this.setState({appItem2Id: null, graphData: [graphData[0]]}, () => this.fetchData(false));\n } else {\n this.setState({appItem2Id: e.target.value}, () => this.fetchData(false));\n }\n }\n\n getAppItemOption(id, callbackFunc) {\n AppItemStore.get(id, resp => {\n callbackFunc({label: resp.appItem.name, value: resp.appItem.id});\n });\n }\n\n getAppItemOptions(search, callbackFunc) {\n const appId = this.props.applicationID;\n AppItemStore.list(appId, 50, 0, resp => {\n const options = resp.result.map((o) => {return {label: o.name, value: o.id}});\n callbackFunc(options, resp.totalCount);\n });\n }\n\n render() {\n const {title, timeLo, timeHi, isSpotlit, addSpotlight, clearSpotlight, appItemId} = this.props;\n let {appItem2Id, graphData} = this.state;\n\n const dataLoaded = graphData !== null;\n const noData = dataLoaded && (Array.isArray(graphData) && graphData.length === 0);\n\n const infoMessage = noData ? 'No data' : 'Loading data...';\n\n return(\n \n {/* \n {!isSpotlit && (\n addSpotlight(appItemId)}>\n \n \n )}\n {isSpotlit && (\n \n \n \n )}\n  Reading Graph\n {this.state.fetchingData ? \"...\" : \"\"}\n */}\n\n {!isSpotlit && (\n \n addSpotlight(appItemId)}>\n \n \n  \n {title}\n {this.state.fetchingData ? \"...\" : \"\"}\n \n )}\n \n {isSpotlit && (\n
\n \n \n \n 1. \n {title}\n \n \n \n {this.state.fetchingData ? \"...\" : \"\"}\n \n \n \n \n \n \n 2.\n \n \n \n \n \n \n \n \n
\n )}\n\n {(!dataLoaded || noData) && (\n \n \n {title}\n \n \n {infoMessage}\n \n \n )}\n {dataLoaded && (\n \n )}\n
\n );\n }\n}\n\nDeviceReadingGraph.propTypes = {\n addSpotlight: PropTypes.func.isRequired,\n clearSpotlight: PropTypes.func,\n appItemId: PropTypes.any.isRequired,\n // appItem2Id: PropTypes.any,\n applicationID: PropTypes.any.isRequired,\n isSpotlit: PropTypes.any,\n deviceFilter: PropTypes.string.isRequired,\n timeLo: PropTypes.string.isRequired,\n timeHi: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired\n}\n\nDeviceReadingGraph.defaultProps = {\n // appItem2Id: null,\n clearSpotlight: null,\n isSpotlit: false,\n}\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport DeviceReadingsTable from '../components/DeviceReadingsTable';\nimport DeviceReadingsCards from '../components/DeviceReadingsCards';\n\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Typography from '@material-ui/core/Typography';\n\n// import moment from \"moment\";\nimport UpPacketsLog from \"./UpPacketsLog\";\nimport DeviceReadingGraph from \"./DeviceReadingGraph\";\n\nexport default class DashCard extends Component {\n constructor() {\n super();\n\n this.state = {\n cardContent: null,\n dataLoaded: false,\n latestReadingsByDevice: null,\n };\n }\n\n // componentDidMount() {\n // }\n\n render() {\n const {\n cardType,\n timeLo,\n timeHi,\n deviceFilter,\n filterName,\n applicationID,\n organizationID,\n appItemIds,\n itemProps,\n cacheCounter,\n } = this.props;\n \n switch (cardType) {\n case 1:\n return(\n \n );\n break;\n\n case 2:\n return(\n \n );\n break;\n\n case 3:\n return(\n \n );\n break;\n\n case 4:\n return(\n \n );\n break;\n\n default:\n break;\n } \n return(\n \n \n \n \n Unknown card\n \n \n \n );\n }\n}\n\nDashCard.propTypes = {\n appItemIds: PropTypes.array.isRequired,\n applicationID: PropTypes.number.isRequired,\n cardType: PropTypes.number.isRequired,\n deviceFilter: PropTypes.string.isRequired,\n filterName: PropTypes.string.isRequired,\n organizationID: PropTypes.number.isRequired,\n itemProps: PropTypes.any.isRequired,\n timeLo: PropTypes.string.isRequired,\n timeHi: PropTypes.string.isRequired,\n cacheCounter: PropTypes.any,\n}\n\nDashCard.defaultProps = {\n cacheCounter : 0,\n}","import { EventEmitter } from \"events\";\nimport RobustWebSocket from \"robust-websocket\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler, errorHandlerIgnoreNotFoundWithCallback } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass DeviceStore extends EventEmitter {\n constructor() {\n super();\n this.wsDataStatus = null;\n this.wsFramesStatus = null;\n this.swagger = new Swagger(\"/swagger/device.swagger.json\", sessionStore.getClientOpts());\n }\n\n getWSDataStatus() {\n return this.wsDataStatus;\n }\n\n getWSFramesStatus() {\n return this.wsFramesStatus;\n }\n\n create(device, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceService.Create({\n body: {\n device: device,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n get(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceService.Get({\n dev_eui: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n update(device, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceService.Update({\n \"device.dev_eui\": device.devEUI,\n body: {\n device: device,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.emit(\"update\");\n this.notify(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n\n }\n\n delete(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceService.Delete({\n dev_eui: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n list(filters, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceService.List(filters)\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getKeys(devEUI, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceService.GetKeys({\n dev_eui: devEUI,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandlerIgnoreNotFoundWithCallback(callbackFunc));\n });\n }\n\n createKeys(deviceKeys, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceService.CreateKeys({\n \"device_keys.dev_eui\": deviceKeys.devEUI,\n body: {\n deviceKeys: deviceKeys,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notifyKeys(\"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n updateKeys(deviceKeys, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceService.UpdateKeys({\n \"device_keys.dev_eui\": deviceKeys.devEUI,\n body: {\n deviceKeys: deviceKeys,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notifyKeys(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getActivation(devEUI, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceService.GetActivation({\n \"dev_eui\": devEUI,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandlerIgnoreNotFoundWithCallback(callbackFunc));\n });\n }\n\n activate(deviceActivation, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceService.Activate({\n \"device_activation.dev_eui\": deviceActivation.devEUI,\n body: {\n deviceActivation: deviceActivation,\n },\n })\n .then(checkStatus)\n .then(resp => {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"device has been (re)activated\",\n },\n });\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getRandomDevAddr(devEUI, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceService.GetRandomDevAddr({\n dev_eui: devEUI,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getDataLogsConnection(devEUI, onData) {\n const loc = window.location;\n const wsURL = (() => {\n if (loc.host === \"localhost:3000\" || loc.host === \"localhost:3001\") {\n return `ws://localhost:8080/api/devices/${devEUI}/events`;\n }\n\n const wsProtocol = loc.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n return `${wsProtocol}//${loc.host}/api/devices/${devEUI}/events`;\n })();\n\n const conn = new RobustWebSocket(wsURL, [\"Bearer\", sessionStore.getToken()], {});\n\n conn.addEventListener(\"open\", () => {\n console.log('connected to', wsURL);\n this.wsDataStatus = \"CONNECTED\";\n this.emit(\"ws.status.change\");\n });\n\n conn.addEventListener(\"message\", (e) => {\n const msg = JSON.parse(e.data);\n if (msg.error !== undefined) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"error\",\n message: msg.error.message,\n },\n });\n } else if (msg.result !== undefined) {\n onData(msg.result);\n }\n });\n\n conn.addEventListener(\"close\", () => {\n console.log('closing', wsURL);\n this.wsDataStatus = null;\n this.emit(\"ws.status.change\");\n });\n\n conn.addEventListener(\"error\", () => {\n console.log(\"error\");\n this.wsDataStatus = \"ERROR\";\n this.emit(\"ws.status.change\");\n });\n\n return conn;\n }\n\n getFrameLogsConnection(devEUI, onData) {\n const loc = window.location;\n const wsURL = (() => {\n if (loc.host === \"localhost:3000\" || loc.host === \"localhost:3001\") {\n return `ws://localhost:8080/api/devices/${devEUI}/frames`;\n }\n\n const wsProtocol = loc.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n return `${wsProtocol}//${loc.host}/api/devices/${devEUI}/frames`;\n })();\n\n const conn = new RobustWebSocket(wsURL, [\"Bearer\", sessionStore.getToken()], {});\n\n conn.addEventListener(\"open\", () => {\n console.log('connected to', wsURL);\n this.wsFramesStatus = \"CONNECTED\";\n this.emit(\"ws.status.change\");\n });\n\n conn.addEventListener(\"message\", (e) => {\n const msg = JSON.parse(e.data);\n if (msg.error !== undefined) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"error\",\n message: msg.error.message,\n },\n });\n } else if (msg.result !== undefined) {\n onData(msg.result);\n }\n });\n\n conn.addEventListener(\"close\", () => {\n console.log('closing', wsURL);\n this.wsFramesStatus = null;\n this.emit(\"ws.status.change\");\n });\n\n conn.addEventListener(\"error\", (e) => {\n console.log(\"error\", e);\n this.wsFramesStatus = \"ERROR\";\n this.emit(\"ws.status.change\");\n });\n\n return conn;\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"device has been \" + action,\n },\n });\n }\n\n notifyKeys(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"device-keys have been \" + action,\n },\n });\n }\n}\n\nconst deviceStore = new DeviceStore();\nexport default deviceStore;\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Paper from '@material-ui/core/Paper';\nimport Switch from '@material-ui/core/Switch';\nimport Button from \"@material-ui/core/Button\";\nimport Datetime from 'react-datetime';\n\nimport moment from \"moment\";\n\nimport RefreshIcon from '@material-ui/icons/Refresh';\n\nimport DashCard from \"../../components/DashCard\";\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Select from '@material-ui/core/Select';\nimport { withStyles } from \"@material-ui/core/styles\";\nimport { styles } from '../../styles/aircom-styles';\n\nimport DeviceStore from \"../../stores/DeviceStore\";\nimport AppItemStore from \"../../stores/AppItemStore\";\n\n// import SessionStore from \"../../stores/SessionStore\";\n\nexport class Dashboard extends Component {\n constructor() {\n super();\n\n const timeLoText = moment().subtract(1, 'day').startOf('day').format();\n const timeHiText = moment().add(1, 'day').startOf('day').format();\n\n this.state = {\n loadingAppData: false,\n applicationID: null,\n // dashCards: null,\n deviceFilter: null,\n devices: null,\n appItems: null,\n spotlitItems: null,\n dialogOpen: false,\n timeFilter: 60,\n autoRefresh: true,\n refreshSeconds: 60,\n timeLoText,\n timeHiText,\n timeLoInvalid: false,\n timeHiInvalid: false,\n cacheCounter: 0,\n };\n\n this.handleChangeDevice = this.handleChangeDevice.bind(this);\n this.handleChangeTimeFilter = this.handleChangeTimeFilter.bind(this);\n this.handleChangeRefresh = this.handleChangeRefresh.bind(this);\n this.timer = this.timer.bind(this);\n this.handleChangeTimeLo = this.handleChangeTimeLo.bind(this);\n this.handleChangeTimeHi = this.handleChangeTimeHi.bind(this);\n this.loadAppSpecificData = this.loadAppSpecificData.bind(this);\n this.fetchData = this.fetchData.bind(this);\n this.addSpotlitItem = this.addSpotlitItem.bind(this);\n this.clearSpotlitItems = this.clearSpotlitItems.bind(this);\n }\n\n componentDidMount() {\n this.loadAppSpecificData(); // Includes fetchData\n\n const intervalID = setInterval(this.timer, (this.state.refreshSeconds * 1000));\n // store intervalID in the state so it can be cleared later:\n this.setState({intervalID});\n }\n\n componentWillUnmount() {\n // use intervalID from the state to clear the interval\n clearInterval(this.state.intervalID);\n }\n\n componentDidUpdate(prevProps) {\n if ((this.props === prevProps) || this.state.loadingAppData) {\n return;\n }\n // New route either from link or user typed new url into browser address bar\n this.loadAppSpecificData();\n }\n\n loadAppSpecificData() {\n this.setState({\n loadingAppData: true,\n appItems: null,\n spotlitItems: null,\n applicationID: null,\n // dashCards: null,\n devices: null,\n deviceFilter: null,\n }, () => {\n\n const applicationID = Number(this.props.match.params.applicationID);\n\n // Get app items and generate cards\n AppItemStore.list(applicationID, 100, 0, resp => {\n \n // Set appItems, i.e. those to show on dashboard\n const appItems = resp.result.filter(appItem => (appItem.showOnDashboard && (appItem.numberFormat.localeCompare(\"Time\") !==0)));\n // .map(appItem => parseInt(appItem.id, 10));\n \n // Get devices\n DeviceStore.list({applicationID, limit: 999, offset: 0}, resp => {\n const devices = resp.result.map(item => {\n return {name: item.name, devEUI: item.devEUI};\n });\n this.setState({\n appItems,\n applicationID,\n devices,\n deviceFilter: null,\n loadingAppData: false,\n }, this.fetchData);\n });\n });\n })\n }\n \n timer() {\n if (this.state.autoRefresh)\n {\n this.fetchData();\n }\n }\n\n fetchData() {\n const { deviceFilter, timeFilter, timeLoText, timeHiText, cacheCounter } = this.state;\n this.refreshStateItems({ deviceFilter, timeFilter, timeLoText, timeHiText, cacheCounter: cacheCounter + 1});\n }\n\n handleChangeTimeFilter(event) {\n const timeFilter = event.target.value;\n const { deviceFilter, timeLoText, timeHiText } = this.state;\n this.refreshStateItems({ deviceFilter, timeFilter, timeLoText, timeHiText });\n }\n\n /**\n * \n * @param {timeLoText} timeLoText \n * \n * timeLoText is either (a) valid moment or else (b) text from control\n */\n handleChangeTimeLo(newTimeLo) {\n if (typeof newTimeLo === 'string' || newTimeLo instanceof String) {\n this.setState({ timeLoInvalid: true });\n return;\n }\n\n let timeLo = moment(newTimeLo);\n\n // We know timeLo is valid moment\n const timeLoInvalid = false;\n let { timeHiText } = this.state;\n if (timeLo.diff(moment(timeHiText)) > 0) {\n timeHiText = timeLo.add(1, 'day').format();\n }\n this.setState({ timeLoInvalid });\n const { deviceFilter, timeFilter } = this.state;\n this.refreshStateItems({ deviceFilter, timeFilter, timeLoText: timeLo.format(), timeHiText });\n }\n\n handleChangeTimeHi(newTimeHi) {\n if (typeof newTimeHi === 'string' || newTimeHi instanceof String) {\n this.setState({ timeHiInvalid: true });\n return;\n }\n\n let timeHi = moment(newTimeHi);\n\n const timeHiInvalid = false;\n let { timeLoText } = this.state;\n if (moment(timeLoText).diff(timeHi) > 0) {\n timeLoText = timeHi.subtract(1, 'day');\n }\n this.setState({ timeHiInvalid });\n const { deviceFilter, timeFilter } = this.state;\n this.refreshStateItems({ deviceFilter, timeFilter, timeLoText, timeHiText: timeHi.format() });\n }\n\n handleChangeRefresh(event) {\n let {intervalID} = this.state;\n const refreshSeconds = event.target.value;\n clearInterval(intervalID);\n intervalID = setInterval(this.timer, (refreshSeconds * 1000));\n // store intervalID in the state so it can be accessed later:\n this.setState({\n refreshSeconds,\n intervalID\n });\n }\n\n /**\n * refreshStateItems\n * Ensures that all state items required for data set at same time with refreshed timeHiText and timeLoText\n * @param {*} params \n */\n refreshStateItems(params = {}) {\n const { deviceFilter = null, timeFilter = 0 } = params;\n let { timeLoText = moment(0).format(), timeHiText = moment().format() } = params;\n\n if (timeFilter > 0) {\n timeHiText = moment().format();\n timeLoText = moment(timeHiText).subtract(timeFilter, 'minutes').format();\n } else if (moment(timeHiText).diff(moment()) > 0) {\n timeHiText = moment().format();\n }\n\n // Set state items and force re-render\n let {cacheCounter, spotlitItems} = this.state;\n if (!deviceFilter) {\n spotlitItems = null;\n }\n this.setState({\n deviceFilter,\n spotlitItems,\n timeFilter,\n timeLoText,\n timeHiText,\n cacheCounter: cacheCounter + 1\n });\n\n }\n\n handleChangeDevice(event) {\n const deviceFilter = event.target.value ? event.target.value : null;\n const { timeFilter, timeLoText, timeHiText } = this.state;\n this.refreshStateItems({ deviceFilter, timeFilter, timeLoText, timeHiText });\n }\n\n handleCheck = name => event => {\n this.setState({ ...this.state, [name]: event.target.checked });\n }\n\n addSpotlitItem(itemID) {\n let {appItems, spotlitItems} = this.state;\n if (spotlitItems === null) {\n this.setState({spotlitItems: appItems.filter(appItem => appItem.id === itemID)});\n } else if (spotlitItems.length === 1) {\n Array.prototype.push.apply(spotlitItems, appItems.filter(appItem => appItem.id === itemID));\n this.setState({spotlitItems});\n }\n }\n\n clearSpotlitItems() {\n this.setState({spotlitItems: null});\n }\n\n render() {\n const {\n autoRefresh,\n // dashCards,\n cacheCounter,\n deviceFilter,\n timeFilter,\n devices,\n timeLoText,\n timeLoInvalid,\n timeHiText,\n timeHiInvalid,\n applicationID,\n appItems,\n spotlitItems,\n } = this.state;\n const dataLoaded = (devices !== null) && (appItems !== null);\n const { classes, match } = this.props;\n const showTimeInputs = !(timeFilter > 0);\n const filterName = deviceFilter ? deviceFilter.name : \"\";\n const devEUI = deviceFilter ? deviceFilter.devEUI : \"\";\n const organizationID = match.params.organizationID;\n\n let timeLoClass = classes.rdtInput;\n if (timeLoInvalid) {\n timeLoClass = classes.rdtInputError;\n }\n\n let timeHiClass = classes.rdtInput;\n if (timeHiInvalid) {\n timeHiClass = classes.rdtInputError;\n }\n\n let gridItems = [];\n let gridKey = 1;\n if (!dataLoaded) {\n gridItems =\n [\n \n Loading data...\n ,\n ]\n\n } else if (spotlitItems !== null && spotlitItems.length > 0) {\n // Populate spolight graph(s)\n const itemProps = {\n label:spotlitItems[0].name,\n appItemId: spotlitItems[0].id,\n isSpotlit: true,\n addSpotlight: this.addSpotlight,\n clearSpotlight: this.clearSpotlitItems,\n };\n gridItems.push(\n \n \n \n );\n\n } else {\n const appItemIds = appItems.map(appItem => parseInt(appItem.id, 10));\n if (deviceFilter !== null) {\n // Latest measurements\n gridItems.push(\n \n \n \n )\n\n const graphCards = appItems.map(appItem => {\n const itemProps = {\n label:appItem.name,\n appItemId: appItem.id,\n isSpotlit: false,\n addSpotlight: this.addSpotlitItem\n };\n return (\n \n \n \n )\n });\n Array.prototype.push.apply(gridItems, graphCards);\n }\n\n\n // Latest readings\n gridItems.push(\n \n \n \n )\n\n // Transmissions log\n gridItems.push(\n \n parseInt(appItem.id, 10))}\n cacheCounter={cacheCounter}\n // addSpotlight={this.addSpotlitItem}\n // props={}\n />\n \n )\n }\n\n return (\n \n \n \n \n \n {dataLoaded && (\n \n \n All\n {devices.map(device => (\n {device.name}\n ))}\n }\n label=\"Device: \"\n labelPlacement=\"start\"\n />\n \n }\n label=\"Auto Refresh\"\n labelPlacement=\"start\"\n />\n {autoRefresh &&\n \n 5 Seconds\n 10 Seconds\n 1 Minute\n 5 Minutes\n }\n label=\"Interval\"\n labelPlacement=\"start\"\n />\n }\n }\n onClick={this.fetchData}\n >\n Refresh Now\n \n \n )}\n \n \n Last 10 Minutes\n Last 30 Minutes\n Last 1 Hour\n Last 6 Hours\n Last 12 Hours\n Last 24 Hours\n Custom...\n }\n label=\"Range: \"\n labelPlacement=\"start\"\n />\n {showTimeInputs &&\n }\n label=\"From:\"\n labelPlacement=\"start\"\n />\n }\n\n {showTimeInputs &&\n }\n label=\"To:\"\n labelPlacement=\"start\"\n />\n }\n \n \n \n {gridItems}\n \n \n );\n }\n}\n\nDashboard.propTypes = {\n classes: PropTypes.any.isRequired,\n match: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(Dashboard);\n","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\n\nimport theme from \"../theme\";\n\n\nconst styles = {\n button: {\n marginLeft: theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n};\n\n\nclass TitleBarButton extends Component {\n render() {\n let component = \"button\";\n let icon = null;\n\n if (this.props.to !== undefined) {\n component = Link\n }\n\n if (this.props.icon !== undefined) {\n icon = React.cloneElement(this.props.icon, {\n className: this.props.classes.icon,\n })\n }\n\n return(\n \n {icon}\n {this.props.label}\n \n );\n }\n}\n\nexport default withStyles(styles)(TitleBarButton);\n","import React, { Component } from \"react\";\nimport { Link } from 'react-router-dom';\n\nimport TableCell from '@material-ui/core/TableCell';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport theme from \"../theme\";\n\n\nconst styles = {\n link: {\n textDecoration: \"none\",\n color: theme.palette.primary.main,\n cursor: \"pointer\",\n },\n};\n\n\nclass TableCellLink extends Component {\n render() {\n return(\n \n {this.props.to && {this.props.children}}\n {this.props.onClick && {this.props.children}}\n \n );\n }\n}\n\nexport default withStyles(styles)(TableCellLink);\n","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { withStyles } from \"@material-ui/core/styles\";\n\nimport Grid from '@material-ui/core/Grid';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableRow from '@material-ui/core/TableRow';\nimport TableCellLink from \"../../components/TableCellLink\";\nimport Button from '@material-ui/core/Button';\n\n\n// import Check from \"mdi-material-ui/Check\";\n// import Close from \"mdi-material-ui/Close\";\nimport Plus from \"mdi-material-ui/Plus\";\n\n// import TitleBar from \"../../components/TitleBar\";\n// import TitleBarTitle from \"../../components/TitleBarTitle\";\n// import TitleBarButton from \"../../components/TitleBarButton\";\nimport DataTable from \"../../components/DataTable\";\nimport OrganizationStore from \"../../stores/OrganizationStore\";\nimport theme from \"../../theme\";\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n};\n\nclass ListOrganizations extends Component {\n getPage(limit, offset, callbackFunc) {\n OrganizationStore.list(\"\", limit, offset, callbackFunc);\n }\n\n getRow(obj) {\n // let icon = null;\n // if (obj.canHaveGateways) {\n // icon = ;\n // } else {\n // icon = ;\n // }\n\n return(\n \n {obj.name}\n {obj.displayName}\n {/* {icon} */}\n \n );\n }\n\n render() {\n return(\n \n {/* }\n to={`/organizations/create`}\n />,\n ]}\n >\n \n */}\n \n \n Name\n Display name\n {/* Can have gateways */}\n \n }\n getPage={this.getPage}\n getRow={this.getRow}\n />\n \n\n {this.props.admin && (\n \n \n \n )}\n\n \n );\n }\n}\n\nexport default withStyles(styles)(ListOrganizations);\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass UserStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/user.swagger.json\", sessionStore.getClientOpts());\n }\n\n create(user, password, organizations, callbackFunc) {\n this.swagger.then(client => {\n client.apis.UserService.Create({\n body: {\n organizations: organizations,\n password: password,\n user: user,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n get(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.UserService.Get({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n update(user, callbackFunc) {\n this.swagger.then(client => {\n client.apis.UserService.Update({\n \"user.id\": user.id,\n body: {\n \"user\": user,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n delete(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.UserService.Delete({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n updatePassword(id, password, callbackFunc) {\n this.swagger.then(client => {\n client.apis.UserService.UpdatePassword({\n \"user_id\": id,\n body: {\n password: password,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n list(search, limit, offset, callbackFunc) {\n this.swagger.then((client) => {\n client.apis.UserService.List({\n search: search,\n limit: limit,\n offset: offset,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"user has been \" + action,\n },\n });\n }\n}\n\nconst userStore = new UserStore();\nexport default userStore;\n","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport PropTypes from \"prop-types\";\n\nimport Grid from '@material-ui/core/Grid';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableRow from '@material-ui/core/TableRow';\n\nimport Check from \"mdi-material-ui/Check\";\nimport Close from \"mdi-material-ui/Close\";\nimport Plus from \"mdi-material-ui/Plus\";\n\n// import TitleBar from \"../../components/TitleBar\";\n// import TitleBarTitle from \"../../components/TitleBarTitle\";\n// import TitleBarButton from \"../../components/TitleBarButton\";\nimport TableCellLink from \"../../components/TableCellLink\";\nimport DataTable from \"../../components/DataTable\";\n\nimport UserStore from \"../../stores/UserStore\";\nimport Button from '@material-ui/core/Button';\nimport theme from \"../../theme\";\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n};\n\nclass ListUsers extends Component {\n getPage(limit, offset, callbackFunc) {\n UserStore.list(\"\", limit, offset, callbackFunc);\n }\n\n getRow(obj) {\n let active = null;\n let admin = null;\n\n if (obj.isAdmin) {\n admin = ;\n } else {\n admin = ;\n }\n\n if (obj.isActive) {\n active = ;\n } else {\n active = ;\n }\n\n return(\n \n {obj.email}\n {active}\n {admin}\n \n );\n }\n\n render() {\n return(\n \n {/* }\n to={`/users/create`}\n />,\n ]}\n >\n \n */}\n \n \n Email\n Active\n Admin\n \n }\n getPage={this.getPage}\n getRow={this.getRow}\n />\n \n {this.props.admin && (\n \n \n \n )}\n \n );\n }\n}\n\nListUsers.propTypes = {\n admin: PropTypes.bool.isRequired,\n classes: PropTypes.any.isRequired\n}\n\nexport default withStyles(styles)(ListUsers);\n","import React from \"react\";\n\nimport Typography from \"@material-ui/core/Typography\";\n\nfunction AccessDenied() {\n return (\n
\n \n Sorry. You are not authorized to view this page.\n \n
\n );\n}\n\nexport default AccessDenied;\n","import { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\n\nclass FormComponent extends Component {\n constructor() {\n super();\n\n this.state = {};\n\n this.onChange = this.onChange.bind(this);\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n onChange(e) {\n let lookup = e.target.id.split(\".\");\n const field = lookup[lookup.length-1];\n lookup.pop(); // remove last item\n\n let object = this.state.object;\n let obj = object;\n for (const f of lookup) {\n obj = obj[f];\n }\n\n if (e.target.type === \"checkbox\") {\n obj[field] = e.target.checked;\n } else if (e.target.type === \"number\") {\n obj[field] = parseInt(e.target.value, 10);\n } else {\n obj[field] = e.target.value;\n }\n\n this.setState({\n object: object,\n })\n }\n\n onSubmit(e) {\n e.preventDefault();\n this.props.onSubmit(this.state.object);\n }\n\n componentDidMount() {\n this.setState({\n object: this.props.object || {},\n });\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.object !== this.props.object) {\n this.setState({\n object: this.props.object || {},\n });\n }\n }\n\n addKV = (name) => {\n return (e) => {\n e.preventDefault();\n\n let kvs = this.state[name];\n kvs.push({});\n\n let obj = {};\n obj[name] = kvs;\n\n this.setState(obj);\n };\n }\n\n onChangeKV = (name) => {\n return (index, obj) => {\n let kvs = this.state[name];\n let object = this.state.object;\n\n kvs[index] = obj;\n\n object[name] = {};\n kvs.forEach((obj) => {\n object[name][obj.key] = obj.value;\n });\n\n let ss = {\n object: object,\n };\n ss[name] = kvs;\n\n this.setState(ss);\n };\n }\n\n onDeleteKV = (name) => {\n return (index) => {\n let kvs = this.state[name];\n let object = this.state.object;\n\n kvs.splice(index, 1);\n\n object[name] = {};\n kvs.forEach((obj) => {\n object[name][obj.key] = obj.value;\n });\n\n let ss = {\n object: object,\n };\n ss[name] = kvs;\n\n this.setState(ss);\n };\n }\n}\n\nFormComponent.propTypes = {\n onSubmit: PropTypes.func.isRequired,\n object: PropTypes.object.isRequired,\n}\n\nexport default FormComponent;\n","import React, { Component } from \"react\";\n\nimport Grid from '@material-ui/core/Grid';\nimport Button from \"@material-ui/core/Button\";\nimport { withStyles } from \"@material-ui/core/styles\";\n\n\nconst styles = {\n formControl: {\n paddingTop: 24,\n },\n}\n\n\nclass Form extends Component {\n render() {\n return(\n
\n {this.props.children}\n\n \n {this.props.extraButtons}\n {this.props.submitLabel && }\n \n
\n );\n }\n}\n\nexport default withStyles(styles)(Form);\n","import React from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport TextField from '@material-ui/core/TextField';\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport Checkbox from '@material-ui/core/Checkbox';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\n\nimport Form from \"../../components/Form\";\nimport moment from \"moment\";\n\nconst styles = {\n formLabel: {\n fontSize: 12,\n },\n};\n\n\nclass SystemSettingsForm extends FormComponent {\n constructor() {\n super();\n\n this.state = {};\n }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n return(\n \n
\n \n \n \n \n }\n /> \n
\n \n );\n }\n}\n\nexport default withStyles(styles)(SystemSettingsForm);\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\nimport SystemSettingsForm from \"../system/SystemSettingsForm\";\nimport AircomSystemStore from \"../../stores/AircomSystemStore\";\n// import moment from \"moment\";\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\n\nclass UpdateSystemSettings extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit.bind(this);\n this.state = {};\n // this.pauseGroup = this.pauseGroup.bind(this);\n }\n\n componentDidMount() {\n // system settings id is always 1\n AircomSystemStore.getSystemSettings(1, resp => {\n this.setState({\n systemSettings: resp.systemSettings\n });\n });\n }\n\n onSubmit(systemSettings) {\n AircomSystemStore.updateSystemSettings(systemSettings, () => {\n });\n }\n\n render() {\n const {systemSettings} = this.state;\n if (systemSettings === undefined) {\n return null;\n }\n return(\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nUpdateSystemSettings.propTypes = {\n admin: PropTypes.bool.isRequired,\n classes: PropTypes.any.isRequired,\n match: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(withRouter(UpdateSystemSettings));\n","import React, { Component } from \"react\";\nimport { Route, Link, withRouter } from \"react-router-dom\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport PropTypes from \"prop-types\";\n\nimport Grid from '@material-ui/core/Grid';\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport ListOrganizations from \"../organizations/ListOrganizations\";\nimport theme from \"../../theme\";\nimport SettingsIcon from \"@material-ui/icons/Settings\";\nimport ListUsers from \"../users/ListUsers\";\nimport AccessDenied from \"../../components/AccessDenied\";\nimport UpdateSystemSettings from \"./UpdateSystemSettings\";\n\nconst styles = {\n tabs: {\n borderBottom: \"1px solid \" + theme.palette.divider,\n height: \"48px\",\n overflow: \"visible\",\n },\n};\n\nclass SystemDashboard extends Component {\n constructor() {\n super();\n this.state = {\n tab: 0,\n admin: false,\n };\n\n this.locationToTab = this.locationToTab.bind(this);\n this.onChangeTab = this.onChangeTab.bind(this);\n this.setIsAdmin = this.setIsAdmin.bind(this);\n }\n\n componentDidMount() {\n SessionStore.on(\"change\", this.setIsAdmin);\n this.setIsAdmin();\n this.locationToTab();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n }\n\n componentDidUpdate(oldProps) {\n if (this.props === oldProps) {\n return;\n }\n\n this.locationToTab();\n }\n\n setIsAdmin() {\n this.setState({\n admin: SessionStore.isAdmin(),\n });\n }\n\n locationToTab() {\n let tab = 0;\n\n if (window.location.href.endsWith(\"/users\")) {\n tab = 1;\n }\n\n if (window.location.href.endsWith(\"/settings\")) {\n tab = 2;\n }\n\n this.setState({\n tab: tab,\n });\n }\n\n onChangeTab(e, v) {\n this.setState({\n tab: v,\n });\n }\n\n render() {\n if (!SessionStore.isAdmin()) {\n return ;\n }\n return(\n \n }\n label=\"System Setup\"\n to={\"/network-servers\"}\n />,\n ]}\n >\n \n \n \n \n \n \n \n \n \n\n \n } />\n } />\n } />\n \n \n );\n }\n}\n\nSystemDashboard.propTypes = {\n classes: PropTypes.any.isRequired,\n match: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(withRouter(SystemDashboard));\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass NetworkServerStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/networkServer.swagger.json\", sessionStore.getClientOpts());\n }\n\n create(networkServer, callbackFunc) {\n this.swagger.then(client => {\n client.apis.NetworkServerService.Create({\n body: {\n networkServer: networkServer,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notifiy(\"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n get(id, callbackFunc) {\n this.swagger.then((client) => {\n client.apis.NetworkServerService.Get({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n update(networkServer, callbackFunc) {\n this.swagger.then(client => {\n client.apis.NetworkServerService.Update({\n \"network_server.id\": networkServer.id,\n body: {\n networkServer: networkServer,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notifiy(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notifiy(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"network-server has been \" + action,\n },\n });\n }\n\n delete(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.NetworkServerService.Delete({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.notifiy(\"deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n \n list(organizationID, limit, offset, callbackFunc) {\n this.swagger.then((client) => {\n client.apis.NetworkServerService.List({\n organizationID: organizationID,\n limit: limit,\n offset: offset,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getADRAlgorithms(networkServerID, callbackFunc) {\n this.swagger.then((client) => {\n client.apis.NetworkServerService.GetADRAlgorithms({\n network_server_id: networkServerID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n}\n\nconst networkServerStore = new NetworkServerStore();\nexport default networkServerStore;\nwindow.test = networkServerStore;\n","import React, { Component } from \"react\";\n\nimport Grid from '@material-ui/core/Grid';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableRow from '@material-ui/core/TableRow';\n\nimport Plus from \"mdi-material-ui/Plus\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TableCellLink from \"../../components/TableCellLink\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\nimport DataTable from \"../../components/DataTable\";\n\nimport NetworkServerStore from \"../../stores/NetworkServerStore\";\n\n\nclass ListNetworkServers extends Component {\n getPage(limit, offset, callbackFunc) {\n NetworkServerStore.list(0, limit, offset, callbackFunc);\n }\n\n getRow(obj) {\n return(\n \n {obj.name}\n {obj.server}\n \n );\n }\n\n render() {\n return(\n \n }\n label=\"Add\"\n to={`/network-servers/create`}\n />,\n ]}\n >\n \n \n \n \n Name\n Server\n \n }\n getPage={this.getPage}\n getRow={this.getRow}\n />\n \n \n );\n }\n}\n\nexport default ListNetworkServers;\n","import React from \"react\";\n\nimport TextField from '@material-ui/core/TextField';\n// import Tabs from '@material-ui/core/Tabs';\n// import Tab from '@material-ui/core/Tab';\n\n// import FormControlLabel from '@material-ui/core/FormControlLabel';\n// import FormGroup from \"@material-ui/core/FormGroup\";\n// import FormHelperText from '@material-ui/core/FormHelperText';\n// import Checkbox from '@material-ui/core/Checkbox';\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\n// import FormControl from \"../../components/FormControl\";\n\n\nclass NetworkServerForm extends FormComponent {\n constructor() {\n super();\n this.state = {\n tab: 0,\n };\n\n // this.onChangeTab = this.onChangeTab.bind(this);\n }\n\n // onChangeTab(event, value) {\n // this.setState({\n // tab: value,\n // });\n // }\n\n render() {\n if (this.state.object === undefined) {\n return(null);\n }\n\n return(\n \n {/* */}\n {/* */}\n {/* \n */}\n {/* */}\n {this.state.tab === 0 &&
\n \n \n
}\n {/* {this.state.tab === 1 &&
\n \n \n \n }\n label=\"Enable gateway discovery\"\n />\n \n Enable the gateway discovery feature for this network-server.\n \n {this.state.object.gatewayDiscoveryEnabled && }\n {this.state.object.gatewayDiscoveryEnabled && }\n {this.state.object.gatewayDiscoveryEnabled && }\n
}\n {this.state.tab === 2 &&
\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n
} */}\n \n );\n }\n}\n\nexport default NetworkServerForm;\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\n\nimport { CardContent } from \"@material-ui/core\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport NetworkServerForm from \"./NetworkServerForm\";\nimport NetworkServerStore from \"../../stores/NetworkServerStore\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport AccessDenied from \"../../components/AccessDenied\";\n\n\nclass CreateNetworkServer extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n onSubmit(networkServer) {\n NetworkServerStore.create(networkServer, resp => {\n this.props.history.push(\"/network-servers\");\n });\n }\n\n render() {\n if (!SessionStore.isAdmin()) {\n return \n }\n\n return(\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withRouter(CreateNetworkServer);\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport { CardContent } from \"@material-ui/core\";\n\nimport NetworkServerStore from \"../../stores/NetworkServerStore\";\nimport NetworkServerForm from \"./NetworkServerForm\";\n\n\nclass UpdateNetworkServer extends Component {\n constructor() {\n super();\n\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n onSubmit(networkServer) {\n NetworkServerStore.update(networkServer, resp => {\n this.props.history.push(\"/network-servers\");\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withRouter(UpdateNetworkServer);\n","import React, { Component } from \"react\";\nimport { withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport Grid from '@material-ui/core/Grid';\n\nimport Delete from \"mdi-material-ui/Delete\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\n\nimport NetworkServerStore from \"../../stores/NetworkServerStore\";\nimport UpdateNetworkServer from \"./UpdateNetworkServer\";\n\n\nclass NetworkServerLayout extends Component {\n constructor() {\n super();\n\n this.state = {};\n\n this.deleteNetworkServer = this.deleteNetworkServer.bind(this);\n }\n\n componentDidMount() {\n NetworkServerStore.get(this.props.match.params.networkServerID, (resp) => {\n this.setState({\n networkServer: resp,\n });\n });\n }\n\n deleteNetworkServer() {\n if (window.confirm(\"Are you sure you want to delete this network-server?\")) {\n NetworkServerStore.delete(this.props.match.params.networkServerID, () => {\n this.props.history.push(\"/network-servers\");\n });\n }\n }\n\n render() {\n if (this.state.networkServer === undefined) {\n return(
);\n }\n\n return(\n \n }\n label=\"Delete\"\n color=\"secondary\"\n onClick={this.deleteNetworkServer}\n />,\n ]}\n >\n \n \n \n \n\n \n \n \n \n );\n }\n}\n\nNetworkServerLayout.propTypes = {\n history: PropTypes.any.isRequired,\n match: PropTypes.any.isRequired,\n}\n\nexport default withRouter(NetworkServerLayout);\n","/* eslint-disable react/prop-types */\nimport { Component } from \"react\";\n// import PropTypes from \"prop-types\";\nimport SessionStore from \"../stores/SessionStore\";\n\n\nclass Admin extends Component {\n constructor() {\n super();\n this.state = {\n admin: false,\n };\n\n this.setIsAdmin = this.setIsAdmin.bind(this);\n }\n\n componentDidMount() {\n SessionStore.on(\"change\", this.setIsAdmin);\n this.setIsAdmin();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps === this.props) {\n return;\n }\n\n this.setIsAdmin();\n }\n\n setIsAdmin() {\n if (this.props.organizationID !== undefined) {\n this.setState({\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationAdmin(this.props.organizationID),\n });\n } else {\n this.setState({\n admin: SessionStore.isAdmin(),\n });\n }\n }\n\n render() {\n if (this.state.admin) {\n return(this.props.children);\n }\n\n return(null);\n }\n}\n\n// CARE (DEM 2021-04-23)\n// Using propTypes caused following issue when listing service-profiles (system admin user)\n// \"Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate...\"\n\n// Admin.propTypes = {\n// organizationID: PropTypes.any,\n// children: PropTypes.any.isRequired,\n// }\n\n// Admin.defaultProps = {\n// organizationID: 0\n// }\n\nexport default Admin;\n","import React, { Component } from \"react\";\n\nimport FormControl from '@material-ui/core/FormControl';\nimport FormLabel from '@material-ui/core/FormLabel';\nimport { withStyles } from \"@material-ui/core/styles\";\n\nimport theme from \"../theme\";\n\n\nconst styles = {\n formControl: {\n marginTop: theme.spacing(4),\n },\n formLabel: {\n color: theme.palette.primary.main,\n },\n};\n\n\nclass FormControlComponent extends Component {\n render() {\n return(\n \n \n {this.props.label}\n \n {this.props.children}\n \n );\n }\n}\n\nexport default withStyles(styles)(FormControlComponent);\n","import React from \"react\";\n\nimport TextField from '@material-ui/core/TextField';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Checkbox from '@material-ui/core/Checkbox';\n\nimport Admin from \"../../components/Admin\";\nimport FormControl from \"../../components/FormControl\";\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\n\n\n\nclass OrganizationForm extends FormComponent {\n render() {\n if (this.state.object === undefined) {\n return(
);\n }\n\n return(\n \n \n \n \n \n \n \n }\n />\n \n When checked, it means that organization administrators are able to add their own gateways to the network. Note that the usage of the gateways is not limited to this organization.\n {!!this.state.object.canHaveGateways && }\n \n \n \n \n \n \n );\n }\n}\n\nexport default OrganizationForm;\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\n\nimport { CardContent } from \"@material-ui/core\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport OrganizationForm from \"./OrganizationForm\";\nimport OrganizationStore from \"../../stores/OrganizationStore\";\n\n\nclass CreateOrganization extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n onSubmit(organization) {\n OrganizationStore.create(organization, resp => {\n this.props.history.push(\"/system\");\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withRouter(CreateOrganization);","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport Grid from \"@material-ui/core/Grid\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\n\nimport Plus from \"mdi-material-ui/Plus\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TableCellLink from \"../../components/TableCellLink\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\nimport DataTable from \"../../components/DataTable\";\nimport Admin from \"../../components/Admin\";\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Button from '@material-ui/core/Button';\nimport theme from \"../../theme\";\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n};\n\nclass ListApplications extends Component {\n constructor() {\n super();\n this.getPage = this.getPage.bind(this);\n this.getRow = this.getRow.bind(this);\n }\n\n getPage(limit, offset, callbackFunc) {\n ApplicationStore.list(\"\", this.props.organizationID, limit, offset, callbackFunc);\n }\n\n getRow(obj) {\n return(\n \n {/* {obj.id} */}\n {obj.name}\n {/* {obj.serviceProfileName} */}\n {obj.description}\n \n );\n }\n\n render() {\n return(\n \n {/* \n }\n to={`/organizations/${this.props.match.params.organizationID}/applications/create`}\n />\n \n }\n >\n \n */}\n \n \n {/* ID */}\n Name\n {/* Service-profile */}\n Description\n \n }\n getPage={this.getPage}\n getRow={this.getRow}\n />\n \n\n {this.props.admin && (\n \n \n \n )}\n\n \n );\n }\n}\n\nexport default withStyles(styles)(ListApplications);\n","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport Grid from '@material-ui/core/Grid';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableRow from '@material-ui/core/TableRow';\n\nimport Check from \"mdi-material-ui/Check\";\nimport Close from \"mdi-material-ui/Close\";\nimport Plus from \"mdi-material-ui/Plus\";\n\nimport TableCellLink from \"../../components/TableCellLink\";\nimport DataTable from \"../../components/DataTable\";\n\nimport OrganizationStore from \"../../stores/OrganizationStore\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Button from '@material-ui/core/Button';\nimport theme from \"../../theme\";\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n};\n\nclass ListOrganizationUsers extends Component {\n constructor() {\n super();\n this.getPage = this.getPage.bind(this);\n this.getRow = this.getRow.bind(this);\n }\n\n getPage(limit, offset, callbackFunc) {\n OrganizationStore.listUsers(this.props.organizationID, limit, offset, callbackFunc);\n }\n\n getRow(obj) {\n let orgAdmin = null;\n let gwAdmin = null;\n let devAdmin = null;\n\n if (obj.isAdmin) {\n orgAdmin = \n } else {\n orgAdmin = \n }\n\n if (obj.isAdmin || obj.isGatewayAdmin) {\n gwAdmin = \n } else {\n gwAdmin = \n }\n\n if (obj.isAdmin || obj.isDeviceAdmin) {\n devAdmin = \n } else {\n devAdmin = \n }\n\n return(\n \n {obj.email}\n {orgAdmin}\n {gwAdmin}\n {devAdmin}\n \n );\n }\n\n render() {\n return(\n \n {/* }\n to={`/organizations/${this.props.match.params.organizationID}/users/create`}\n />,\n ]}\n >\n \n */}\n \n \n Email\n Organization admin\n Gateway admin\n Device admin\n \n }\n getPage={this.getPage}\n getRow={this.getRow}\n />\n \n {this.props.admin && (\n \n \n \n )}\n \n );\n }\n}\n\nListOrganizationUsers.propTypes = {\n organizationID: PropTypes.number.isRequired,\n admin: PropTypes.bool.isRequired,\n classes: PropTypes.any.isRequired\n}\n\nexport default withStyles(styles)(ListOrganizationUsers);\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport OrganzationStore from \"../../stores/OrganizationStore\";\nimport OrganizationForm from \"./OrganizationForm\";\n\n\nclass UpdateOrganization extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n onSubmit(organization) {\n OrganzationStore.update(organization, resp => {\n this.props.history.push(`/organizations/${this.props.organization.id}`);\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withRouter(UpdateOrganization);\n","import React, { Component } from \"react\";\nimport { Route, withRouter } from \"react-router-dom\";\nimport {PropTypes} from \"prop-types\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\n\nimport Delete from \"mdi-material-ui/Delete\";\n\nimport Button from '@material-ui/core/Button';\n\n// import TitleBar from \"../../components/TitleBar\";\n// import TitleBarTitle from \"../../components/TitleBarTitle\";\n// import TitleBarButton from \"../../components/TitleBarButton\";\nimport OrganizationStore from \"../../stores/OrganizationStore\";\nimport AircomSystemStore from \"../../stores/AircomSystemStore\";\nimport UpdateOrganization from \"./UpdateOrganization\";\nimport SessionStore from \"../../stores/SessionStore\";\n\nimport theme from \"../../theme\";\n\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n tabs: {\n borderBottom: \"1px solid \" + theme.palette.divider,\n height: \"48px\",\n overflow: \"visible\",\n },\n};\n\nclass OrganizationLayout extends Component {\n constructor() {\n super();\n this.state = {\n admin: false,\n };\n }\n\n componentDidMount() {\n this.loadData();\n // this.locationToTab();\n SessionStore.on(\"change\", this.setIsAdmin);\n this.setIsAdmin();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps === this.props) {\n return;\n }\n\n this.loadData();\n // this.locationToTab();\n }\n\n setIsAdmin = () => {\n this.setState({\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationAdmin(this.props.match.params.organizationID),\n });\n }\n\n loadData = () => {\n OrganizationStore.get(this.props.organizationID, resp => {\n this.setState({\n organization: resp,\n });\n });\n }\n\n deleteOrganization = () => {\n if (window.confirm(\"Are you sure you want to delete this organization?\")) {\n // Topnav component will detect deletion and deal with it\n AircomSystemStore.deleteOrganization(this.props.organizationID, () => {});\n }\n }\n\n render() {\n if (this.state.organization === undefined) {\n return
;\n }\n\n return(\n \n\n \n } />\n \n\n {this.props.admin && (\n \n \n \n )}\n\n \n );\n }\n}\n\nOrganizationLayout.propTypes = {\n match: PropTypes.any.isRequired,\n organizationID: PropTypes.any.isRequired,\n history: PropTypes.any.isRequired,\n admin: PropTypes.bool.isRequired,\n classes: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(withRouter(OrganizationLayout));\n","import { EventEmitter } from \"events\";\nimport RobustWebSocket from \"robust-websocket\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler, errorHandlerIgnoreNotFound } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass GatewayStore extends EventEmitter {\n constructor() {\n super();\n this.wsStatus = null;\n this.swagger = new Swagger(\"/swagger/gateway.swagger.json\", sessionStore.getClientOpts());\n }\n\n getWSStatus() {\n return this.wsStatus;\n }\n\n create(gateway, callbackFunc) {\n this.swagger.then(client => {\n client.apis.GatewayService.Create({\n body: {\n gateway: gateway,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n get(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.GatewayService.Get({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n update(gateway, callbackFunc) {\n this.swagger.then(client => {\n client.apis.GatewayService.Update({\n \"gateway.id\": gateway.id,\n body: {\n gateway: gateway,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n delete(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.GatewayService.Delete({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n generateClientCertificate(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.GatewayService.GenerateGatewayClientCertificate({\n gateway_id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n list(search, organizationID, limit, offset, callbackFunc) {\n this.swagger.then(client => {\n client.apis.GatewayService.List({\n limit: limit,\n offset: offset,\n organizationID: organizationID,\n search: search,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getStats(gatewayID, start, end, callbackFunc) {\n this.swagger.then(client => {\n client.apis.GatewayService.GetStats({\n gateway_id: gatewayID,\n interval: \"DAY\",\n startTimestamp: start,\n endTimestamp: end,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n getLastPing(gatewayID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.GatewayService.GetLastPing({\n gateway_id: gatewayID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandlerIgnoreNotFound);\n });\n }\n\n getFrameLogsConnection(gatewayID, onOpen, onClose, onData) {\n const loc = window.location;\n const wsURL = (() => {\n if (loc.host === \"localhost:3000\" || loc.host === \"localhost:3001\") {\n return `wss://localhost:8080/api/gateways/${gatewayID}/frames`;\n }\n\n const wsProtocol = loc.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n return `${wsProtocol}//${loc.host}/api/gateways/${gatewayID}/frames`;\n })();\n\n const conn = new RobustWebSocket(wsURL, [\"Bearer\", sessionStore.getToken()], {});\n\n conn.addEventListener(\"open\", () => {\n console.log('connected to', wsURL);\n this.wsStatus = \"CONNECTED\";\n this.emit(\"ws.status.change\");\n onOpen();\n });\n\n conn.addEventListener(\"message\", (e) => {\n const msg = JSON.parse(e.data);\n if (msg.error !== undefined) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"error\",\n message: msg.error.message,\n },\n });\n } else if (msg.result !== undefined) {\n onData(msg.result);\n }\n });\n\n conn.addEventListener(\"close\", () => {\n console.log('closing', wsURL);\n this.wsStatus = null;\n this.emit(\"ws.status.change\");\n onClose();\n });\n\n conn.addEventListener(\"error\", () => {\n console.log(\"error\");\n this.wsStatus = \"ERROR\";\n this.emit(\"ws.status.change\");\n });\n\n return conn;\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"gateway has been \" + action,\n },\n });\n }\n}\n\nconst gatewayStore = new GatewayStore();\nexport default gatewayStore;\n","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\n\nimport Plus from \"mdi-material-ui/Plus\";\n\nimport moment from \"moment\";\nimport { Bar } from \"react-chartjs-2\";\n\nimport TableCellLink from \"../../components/TableCellLink\";\nimport DataTable from \"../../components/DataTable\";\nimport GatewayStore from \"../../stores/GatewayStore\";\nimport Button from '@material-ui/core/Button';\n\nimport theme from \"../../theme\";\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n chart: {\n width: 380,\n },\n tabs: {\n borderBottom: \"1px solid \" + theme.palette.divider,\n height: \"48px\",\n overflow: \"visible\",\n },\n};\n\nclass GatewayRow extends Component {\n constructor() {\n super();\n\n this.state = {};\n }\n\n componentDidMount() {\n const start = moment().subtract(29, \"days\").toISOString();\n const end = moment().toISOString();\n\n GatewayStore.getStats(this.props.gateway.id, start, end, resp => {\n let stats = {\n labels: [],\n datasets: [\n {\n data: [],\n fillColor: \"rgba(33, 150, 243, 1)\",\n },\n ],\n };\n\n for (const row of resp.result) {\n stats.labels.push(row.timestamp);\n stats.datasets[0].data.push(row.rxPacketsReceivedOK + row.txPacketsEmitted);\n }\n\n this.setState({\n stats: stats,\n });\n });\n }\n\n render() {\n const options = {\n scales: {\n xAxes: [{display: false}],\n yAxes: [{display: false}],\n },\n tooltips: {\n enabled: false,\n },\n legend: {\n display: false,\n },\n responsive: false,\n animation: {\n duration: 0,\n },\n };\n\n let lastseen = \"Never\";\n if (this.props.gateway.lastSeenAt !== null) {\n lastseen = moment(this.props.gateway.lastSeenAt).fromNow();\n }\n\n return(\n \n {lastseen}\n {this.props.gateway.name}\n {this.props.gateway.id}\n {this.props.gateway.networkServerName}\n \n {this.state.stats && }\n \n \n );\n }\n}\n\n\nclass ListGateways extends Component {\n getPage = (limit, offset, callbackFunc) => {\n GatewayStore.list(\"\", this.props.match.params.organizationID, limit, offset, callbackFunc);\n }\n\n getRow = (obj) => {\n return(\n \n );\n }\n\n render() {\n return(\n \n {/* \n }\n to={`/organizations/${this.props.match.params.organizationID}/gateways/create`}\n />\n \n }\n >\n \n */}\n\n \n \n Last seen\n Name\n Gateway ID\n Network server\n Gateway activity (30d)\n \n }\n getPage={this.getPage}\n getRow={this.getRow}\n />\n \n\n {this.props.admin && (\n \n \n \n )}\n\n \n );\n }\n}\n\nexport default withStyles(styles)(ListGateways);\n","import React, { Component } from \"react\";\nimport { Route, Link, withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport OrganizationStore from \"../../stores/OrganizationStore\";\nimport SessionStore from \"../../stores/SessionStore\";\n\nimport Grid from \"@material-ui/core/Grid\";\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\n\nimport SettingsIcon from \"@material-ui/icons/Settings\";\nimport { withStyles } from \"@material-ui/core/styles\";\n\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport theme from \"../../theme\";\nimport ListApplications from \"../applications/ListApplications\";\nimport ListOrganizationUsers from \"./ListOrganizationUsers\";\nimport OrganizationLayout from \"./OrganizationLayout\";\nimport ListGateways from \"../gateways/ListGateways\";\n\nconst styles = {\n tabs: {\n borderBottom: \"1px solid \" + theme.palette.divider,\n height: \"48px\",\n overflow: \"visible\",\n },\n};\n\nclass OrganizationDashboard extends Component {\n constructor() {\n super();\n\n this.state = {\n organization: null,\n tab: 0,\n admin: false,\n };\n this.locationToTab = this.locationToTab.bind(this);\n this.onChangeTab = this.onChangeTab.bind(this);\n this.setIsAdmin = this.setIsAdmin.bind(this);\n }\n\n componentDidMount() {\n SessionStore.on(\"change\", this.setIsAdmin);\n this.loadData();\n this.setIsAdmin();\n this.locationToTab();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n }\n\n componentDidUpdate(oldProps) {\n if (this.props === oldProps) {\n return;\n }\n this.locationToTab();\n }\n\n loadData = () => {\n OrganizationStore.get(this.props.match.params.organizationID, resp => {\n this.setState({\n organization: resp,\n });\n });\n }\n\n setIsAdmin() {\n this.setState({\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationAdmin(this.props.match.params.organizationID),\n });\n }\n\n locationToTab() {\n let tab = 0;\n\n if (window.location.href.endsWith(\"/users\")) {\n tab = 1;\n }\n\n if (window.location.href.endsWith(\"/gateways\")) {\n tab = 2;\n }\n\n if (window.location.href.endsWith(\"/details\")) {\n tab = 3;\n }\n\n this.setState({\n tab: tab,\n });\n }\n\n onChangeTab(e, v) {\n this.setState({\n tab: v,\n });\n }\n\n render() {\n if (!this.state.organization) {\n return
;\n }\n const {admin} = this.state;\n const {organizationID} = this.props.match.params;\n return(\n \n }\n label=\"Org. Setup\"\n to={`/organizations/${organizationID}/organization-setup`}\n />\n ]\n )}\n >\n \n \n \n \n \n {admin && (\n \n )}\n \n {admin && (\n \n )}\n \n \n\n \n } />\n {admin && (\n } />\n )}\n {admin && (\n } />\n )}\n } />\n \n \n );\n }\n}\n\nOrganizationDashboard.propTypes = {\n classes: PropTypes.any.isRequired,\n match: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(withRouter(OrganizationDashboard));\n","import React from \"react\";\n\nimport Typography from '@material-ui/core/Typography';\nimport TextField from '@material-ui/core/TextField';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Checkbox from '@material-ui/core/Checkbox';\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\n\n\nclass OrganizationUserForm extends FormComponent {\n render() {\n if (this.state.object === undefined) {\n return(
);\n }\n\n return(\n \n \n \n An user without additional permissions will be able to see all\n resources under this organization and will be able to send and\n receive device payloads.\n \n {this.state.object.userID === undefined && (\n \n )}\n {this.state.object.userID === undefined && (\n \n If the user already has an account, the password here will be ignored.\n \n )}\n\n \n \n }\n />\n An organization admin user is able to add and modify resources part of the organization.\n \n {!!!this.state.object.isAdmin && \n \n }\n />\n A device admin user is able to add and modify resources part of the organization that are related to devices.\n }\n {!!!this.state.object.isAdmin && \n \n }\n />\n A gateway admin user is able to add and modify gateways part of the organization.\n }\n \n );\n }\n}\n\nexport default OrganizationUserForm;\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport OrganizationStore from \"../../stores/OrganizationStore\";\nimport OrganizationUserForm from \"./OrganizationUserForm\";\n\n\nclass UpdateOrganizationUser extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n onSubmit(organizationUser) {\n OrganizationStore.updateUser(organizationUser, () => {\n this.props.history.push(`/organizations/${organizationUser.organizationID}/users`);\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nUpdateOrganizationUser.propTypes = {\n history: PropTypes.any.isRequired,\n organizationUser: PropTypes.any.isRequired,\n}\n\nexport default withRouter(UpdateOrganizationUser);\n","import React, { Component } from \"react\";\nimport { withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport Grid from '@material-ui/core/Grid';\n\nimport Delete from \"mdi-material-ui/Delete\";\nimport Account from \"mdi-material-ui/Account\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport OrganizationStore from \"../../stores/OrganizationStore\";\nimport UpdateOrganizationUser from \"./UpdateOrganizationUser\";\n\n\nclass OrganizationUserLayout extends Component {\n constructor() {\n super();\n this.state = {\n admin: false,\n };\n this.deleteOrganizationUser = this.deleteOrganizationUser.bind(this);\n this.setIsAdmin = this.setIsAdmin.bind(this);\n }\n\n componentDidMount() {\n OrganizationStore.getUser(this.props.match.params.organizationID, this.props.match.params.userID, resp => {\n this.setState({\n organizationUser: resp,\n });\n });\n\n SessionStore.on(\"change\", this.setIsAdmin);\n this.setIsAdmin();\n }\n\n componendWillUnmount() {\n SessionStore.removeListener(\"on\", this.setIsAdmin);\n }\n\n setIsAdmin() {\n this.setState({\n admin: SessionStore.isAdmin(),\n });\n }\n\n deleteOrganizationUser() {\n if (window.confirm(\"Are you sure you want to remove this organization user (this does not remove the user itself)?\")) {\n OrganizationStore.deleteUser(this.props.match.params.organizationID, this.props.match.params.userID, () => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/users`);\n });\n }\n }\n\n render() {\n if (this.state.organizationUser === undefined) {\n return(
);\n }\n\n return(\n \n \n {this.state.admin && }\n to={`/organizations/${this.props.match.params.organizationID}/users`}\n />}\n }\n color=\"secondary\"\n onClick={this.deleteOrganizationUser}\n />\n \n }\n >\n \n \n \n \n\n \n \n \n \n );\n }\n}\n\nOrganizationUserLayout.propTypes = {\n match: PropTypes.any.isRequired,\n history: PropTypes.any.isRequired,\n}\n\nexport default withRouter(OrganizationUserLayout);\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass AircomUserStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/aircomUser.swagger.json\", sessionStore.getClientOpts());\n }\n\n create(user, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AircomUserService.AircomUserService_Create({\n body: {\n aircomUser: user,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"user has been \" + action,\n },\n });\n }\n}\n\nconst aircomUserStore = new AircomUserStore();\nexport default aircomUserStore;\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\n// import OrganizationStore from \"../../stores/OrganizationStore\";\nimport OrganizationUserForm from \"./OrganizationUserForm\";\nimport AircomUserStore from \"../../stores/AircomUserStore\"\n\n\nclass CreateOrganizationUser extends Component {\n constructor() {\n super();\n\n this.onAssignUser = this.onAssignUser.bind(this);\n }\n\n onAssignUser(user) {\n /*OrganizationStore.addUser(this.props.match.params.organizationID, user, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/users`);\n });*/\n user.organizationID = this.props.match.params.organizationID\n // user.password = \"aircom\"\n AircomUserStore.create(user, () => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/users`);\n });\n };\n\n render() {\n return(\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n );\n }\n}\n\nCreateOrganizationUser.propTypes = {\n match: PropTypes.any.isRequired,\n history: PropTypes.any.isRequired,\n}\n\nexport default withRouter(CreateOrganizationUser);\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nimport OrganizationStore from \"../../stores/OrganizationStore\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport applicationStore from \"../../stores/ApplicationStore\";\n\n\n/**\n * Called whenvever \"/\" chosen, esp after initial login\n */\nclass OrganizationRedirect extends Component {\n componentDidMount() {\n // Try to set organization and app from local storage or session store\n let organizationID = SessionStore.getOrganizationID();\n let applicationID = localStorage.getItem(\"applicationID\");\n\n if ((Number(organizationID) > 0) && (Number(applicationID) > 0)) {\n this.props.history.push(`/organizations/${organizationID}/applications/${applicationID}/dashboard`);\n return;\n }\n\n if (Number(organizationID) > 0) {\n // Fetch application\n applicationStore.list(\"\", organizationID, 1, 0, (resp) => {\n if (resp.totalCount > 0) {\n applicationID = resp.result[0].id;\n this.props.history.push(`/organizations/${organizationID}/applications/${applicationID}/dashboard`);\n }\n });\n return;\n }\n \n // If code reaches here we need to query organization and application\n OrganizationStore.list(\"\", 1, 0, resp => {\n if (resp.result.length > 0) {\n organizationID = resp.result[0].id;\n applicationStore.list(\"\", organizationID, 1, 0, (resp) => {\n if (resp.totalCount > 0) {\n applicationID = resp.result[0].id;\n this.props.history.push(`/organizations/${organizationID}/applications/${applicationID}/dashboard`);\n } else {\n // No applications for given organization\n this.props.history.push(`/organizations/${organizationID}`); \n }\n });\n }\n });\n }\n\n render() {\n return(
);\n }\n}\n\nOrganizationRedirect.propTypes = {\n history: PropTypes.any.isRequired,\n}\n\nexport default withRouter(OrganizationRedirect);\n","import React, { Component } from \"react\";\nimport {Link, withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport OrganizationStore from \"../../stores/OrganizationStore\";\n\nimport theme from \"../../theme\";\n\n// import HomeIcon from \"mdi-material-ui/Home\";\n// import AccountIcon from \"mdi-material-ui/Account\";\n// import AppsIcon from \"mdi-material-ui/Apps\";\n// import RadioTowerIcon from \"mdi-material-ui/RadioTower\";\nimport TuneIcon from \"mdi-material-ui/Tune\";\n// import RssIcon from \"mdi-material-ui/Rss\";\nimport AccountDetailsIcon from \"mdi-material-ui/AccountDetails\";\n// import KeyVariantIcon from \"mdi-material-ui/KeyVariant\";\n// import EditIcon from \"@material-ui/icons/Edit\";\n\nimport { Button } from \"@material-ui/core\";\n\nconst styles = {\n tabs: {\n borderBottom: \"1px solid \" + theme.palette.divider,\n height: \"48px\",\n overflow: \"visible\",\n },\n};\n\nclass OrganizationSetup extends Component {\n constructor() {\n super();\n this.state = {\n organization: null,\n }\n }\n\n componentDidMount() {\n this.loadData();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps === this.props) {\n return;\n }\n this.loadData();\n }\n\n loadData = () => {\n this.setState({organization: null}, () => {\n OrganizationStore.get(this.props.match.params.organizationID, organization => {\n this.setState({organization});\n });\n })\n }\n\n render() {\n const {organization} = this.state;\n if (!organization) {\n return null;\n }\n\n return(\n \n \n \n \n\n \n \n {/* */}\n {/* */}\n {/* */}\n \n \n {/* */}\n {/* */}\n {/* */}\n \n \n \n );\n }\n}\n\nOrganizationSetup.propTypes = {\n match: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(withRouter(OrganizationSetup));\n","import React, { Component } from \"react\";\nimport { withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport Grid from '@material-ui/core/Grid';\nimport TextField from '@material-ui/core/TextField';\nimport Card from '@material-ui/core/Card';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport { withStyles } from \"@material-ui/core/styles\";\n\nimport queryString from \"query-string\";\n\nimport Form from \"../../components/Form\";\nimport FormComponent from \"../../classes/FormComponent\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport InternalStore from \"../../stores/InternalStore\";\nimport theme from \"../../theme\";\n\n\nconst styles = {\n textField: {\n width: \"100%\",\n },\n link: {\n \"& a\": {\n color: theme.palette.primary.main,\n textDecoration: \"none\",\n },\n },\n};\n\n\nclass LoginForm extends FormComponent {\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n return(\n \n \n \n \n );\n }\n}\n\nclass OpenIDConnectLogin extends Component {\n render() {\n return(\n \n );\n }\n}\n\nOpenIDConnectLogin.propTypes = {\n loginUrl: PropTypes.string.isRequired,\n loginLabel: PropTypes.string.isRequired\n}\n\n\nclass Login extends Component {\n constructor() {\n super();\n\n this.state = {\n loaded: false,\n registration: \"\",\n oidcEnabled: false,\n oidcLoginlabel: \"\",\n oidcLoginUrl: \"\",\n };\n\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n componentDidMount() {\n SessionStore.logout(true, () => {});\n\n InternalStore.settings(resp => {\n this.setState({\n loaded: true,\n registration: resp.branding.registration,\n oidcEnabled: resp.openidConnect.enabled,\n oidcLoginUrl: resp.openidConnect.loginURL,\n oidcLoginLabel: resp.openidConnect.loginLabel,\n });\n });\n\n // callback from openid provider\n if (this.props.location.search !== \"\") {\n let query = queryString.parse(this.props.location.search);\n \n SessionStore.openidConnectLogin(query.code, query.state, () => {\n this.props.history.push(\"/\");\n });\n }\n }\n\n onSubmit(login) {\n SessionStore.login(login, () => {\n this.props.history.push(\"/\");\n });\n }\n\n render() {\n if (!this.state.loaded) {\n return null;\n }\n\n return(\n \n \n \n \n \n {!this.state.oidcEnabled && }\n\n {this.state.oidcEnabled && }\n \n {this.state.registration !== \"\" && \n \n }\n \n \n \n );\n }\n}\n\nLogin.propTypes = {\n location: PropTypes.any.isRequired,\n history: PropTypes.any.isRequired,\n classes: PropTypes.any.isRequired\n}\n\nexport default withStyles(styles)(withRouter(Login));\n","import React from \"react\";\n\nimport TextField from '@material-ui/core/TextField';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport Checkbox from '@material-ui/core/Checkbox';\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport FormControl from \"../../components/FormControl\";\nimport Form from \"../../components/Form\";\n\n\nclass UserForm extends FormComponent {\n render() {\n if (this.state.object === undefined) {\n return(
);\n }\n\n return(\n \n \n \n {this.state.object.id === undefined && }\n \n \n \n }\n />\n \n }\n />\n \n \n \n );\n }\n}\n\nexport default UserForm;\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from \"prop-types\";\n\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\n\nimport { CardContent } from \"@material-ui/core\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport UserForm from \"./UserForm\";\nimport UserStore from \"../../stores/UserStore\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport AccessDenied from \"../../components/AccessDenied\";\n\n\nclass CreateUser extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n onSubmit(user) {\n UserStore.create(user, user.password, [], () => {\n this.props.history.push(\"/system/users\");\n });\n }\n\n render() {\n if (!SessionStore.isAdmin()) {\n return \n }\n\n return(\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nCreateUser.propTypes = {\n history: PropTypes.any.isRequired\n}\n\nexport default withRouter(CreateUser);\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport { CardContent } from \"@material-ui/core\";\n\nimport UserStore from \"../../stores/UserStore\";\nimport UserForm from \"./UserForm\";\n\nclass UpdateUser extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n onSubmit(user) {\n UserStore.update(user, (resp) => {\n this.props.history.push(\"/system/users\");\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withRouter(UpdateUser);\n","import React, { Component } from \"react\";\nimport { withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport Grid from '@material-ui/core/Grid';\n\nimport Delete from \"mdi-material-ui/Delete\";\nimport KeyVariant from \"mdi-material-ui/KeyVariant\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\nimport UserStore from \"../../stores/UserStore\";\nimport UpdateUser from \"./UpdateUser\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport AccessDenied from \"../../components/AccessDenied\";\n\n\nclass UserLayout extends Component {\n constructor() {\n super();\n this.state = {\n };\n\n this.deleteUser = this.deleteUser.bind(this);\n }\n\n componentDidMount() {\n UserStore.get(this.props.match.params.userID, resp => {\n this.setState({\n user: resp,\n });\n });\n }\n\n deleteUser() {\n if (window.confirm(\"Are you sure you want to delete this user?\")) {\n UserStore.delete(this.props.match.params.userID, () => {\n this.props.history.push(\"/system/users\");\n });\n }\n }\n\n render() {\n if (!SessionStore.isAdmin() || (this.state.user === undefined)) {\n return \n }\n\n return(\n \n }\n to={`/users/${this.props.match.params.userID}/password`}\n />,\n }\n color=\"secondary\"\n onClick={this.deleteUser}\n />,\n ]}\n >\n \n \n \n \n\n \n \n \n \n );\n }\n}\n\nUserLayout.propTypes = {\n match: PropTypes.any.isRequired,\n history: PropTypes.any.isRequired,\n}\n\nexport default withRouter(UserLayout);\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\nimport TextField from '@material-ui/core/TextField';\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport UserStore from \"../../stores/UserStore\";\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\n\n\nclass PasswordForm extends FormComponent {\n render() {\n if (this.state.object === undefined) {\n return(
);\n }\n\n return(\n \n \n \n );\n }\n}\n\n\nclass ChangeUserPassword extends Component {\n constructor() {\n super();\n this.state = {};\n\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n componentDidMount() {\n UserStore.get(this.props.match.params.userID, resp => {\n this.setState({\n user: resp,\n });\n });\n }\n\n onSubmit(password) {\n UserStore.updatePassword(this.props.match.params.userID, password.password, resp => {\n this.props.history.push(\"/\");\n });\n }\n\n render() {\n if (this.state.user === undefined) {\n return(
);\n }\n\n return(\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withRouter(ChangeUserPassword);\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass ServiceProfileStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/serviceProfile.swagger.json\", sessionStore.getClientOpts());\n }\n\n create(serviceProfile, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ServiceProfileService.Create({\n body: {\n serviceProfile: serviceProfile,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n get(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ServiceProfileService.Get({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n update(serviceProfile, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ServiceProfileService.Update({\n \"service_profile.id\": serviceProfile.id,\n body: {\n serviceProfile: serviceProfile,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n delete(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ServiceProfileService.Delete({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"deleted\");\n callbackFunc(resp.ojb);\n })\n .catch(errorHandler);\n });\n }\n\n list(organizationID, networkServerID, limit, offset, callbackFunc) {\n this.swagger.then(client => {\n client.apis.ServiceProfileService.List({\n organizationID: organizationID,\n networkServerID: networkServerID,\n limit: limit,\n offset: offset,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"service-profile has been \" + action,\n },\n });\n }\n}\n\nconst serviceProfileStore = new ServiceProfileStore();\nexport default serviceProfileStore;\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Grid from '@material-ui/core/Grid';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableRow from '@material-ui/core/TableRow';\n\nimport Plus from \"mdi-material-ui/Plus\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TableCellLink from \"../../components/TableCellLink\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\nimport Admin from \"../../components/Admin\";\nimport DataTable from \"../../components/DataTable\";\nimport ServiceProfileStore from \"../../stores/ServiceProfileStore\";\n\n\nclass ListServiceProfiles extends Component {\n constructor() {\n super();\n\n this.getPage = this.getPage.bind(this);\n this.getRow = this.getRow.bind(this);\n }\n\n getPage(limit, offset, callbackFunc) {\n ServiceProfileStore.list(this.props.match.params.organizationID, 0, limit, offset, callbackFunc);\n }\n\n getRow(obj) {\n return(\n \n {obj.name}\n {obj.networkServerName}\n \n );\n }\n\n render() {\n const organizationID = this.props.match.params.organizationID;\n return(\n \n \n }\n to={`/organizations/${organizationID}/service-profiles/create`}\n />\n \n }\n >\n \n \n \n \n Name\n Network Server\n \n }\n getPage={this.getPage}\n getRow={this.getRow}\n />\n \n \n );\n }\n}\n\nListServiceProfiles.propTypes = {\n match: PropTypes.any.isRequired,\n}\n\nexport default ListServiceProfiles;\n","import React from \"react\";\n\nimport TextField from '@material-ui/core/TextField';\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport Checkbox from '@material-ui/core/Checkbox';\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormHelperText from \"@material-ui/core/FormHelperText\";\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\nimport AutocompleteSelect from \"../../components/AutocompleteSelect\";\nimport NetworkServerStore from \"../../stores/NetworkServerStore\";\n\n\nclass ServiceProfileForm extends FormComponent {\n constructor() {\n super();\n this.getNetworkServerOption = this.getNetworkServerOption.bind(this);\n this.getNetworkServerOptions = this.getNetworkServerOptions.bind(this);\n }\n\n getNetworkServerOption(id, callbackFunc) {\n NetworkServerStore.get(id, resp => {\n callbackFunc({label: resp.networkServer.name, value: resp.networkServer.id});\n });\n }\n\n getNetworkServerOptions(search, callbackFunc) {\n NetworkServerStore.list(0, 999, 0, resp => {\n const options = resp.result.map((ns, i) => {return {label: ns.name, value: ns.id}});\n callbackFunc(options);\n });\n }\n\n render() {\n if (this.state.object === undefined) {\n return(
);\n }\n\n return(\n \n \n {!this.props.update && \n Network-server\n \n \n The network-server on which this service-profile will be provisioned. After creating the service-profile, this value can't be changed.\n \n }\n \n \n }\n />\n \n GW metadata (RSSI, SNR, GW geoloc., etc.) are added to the packet sent to the application-server.\n \n \n \n \n }\n />\n \n When enabled, the network-server will try to resolve the location of the devices under this service-profile.\n Please note that you need to have gateways supporting the fine-timestamp feature and that the network-server\n needs to be configured in order to provide geolocation support.\n \n \n \n {this.state.object.devStatusReqFreq > 0 && \n \n \n }\n />\n \n }\n />\n \n }\n \n \n \n \n }\n />\n \n Gateways under this service-profile are private. This means that these gateways can only be used by devices under the same service-profile.\n \n \n \n );\n }\n}\n\nexport default ServiceProfileForm;\n","import React, { Component } from \"react\";\nimport { withRouter, Link } from 'react-router-dom';\n\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Button from \"@material-ui/core/Button\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\n\nimport ServiceProfileForm from \"./ServiceProfileForm\";\nimport ServiceProfileStore from \"../../stores/ServiceProfileStore\";\nimport NetworkServerStore from \"../../stores/NetworkServerStore\";\n\n\nclass CreateServiceProfile extends Component {\n constructor() {\n super();\n this.state = {\n nsDialog: false,\n };\n this.onSubmit = this.onSubmit.bind(this);\n this.closeDialog = this.closeDialog.bind(this);\n }\n\n componentDidMount() {\n NetworkServerStore.list(0, 0, 0, resp => {\n if (resp.totalCount === \"0\") {\n this.setState({\n nsDialog: true,\n });\n }\n });\n }\n\n closeDialog() {\n this.setState({\n nsDialog: false,\n });\n }\n\n onSubmit(serviceProfile) {\n let sp = serviceProfile;\n sp.organizationID = this.props.match.params.organizationID;\n\n ServiceProfileStore.create(sp, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/service-profiles`);\n });\n }\n\n render() {\n return(\n \n \n Add a network-server?\n \n \n ChirpStack Application Server isn't connected to a ChirpStack Network Server network-server.\n Did you know that ChirpStack Application Server can connect to multiple ChirpStack Network Server instances, e.g. to support multiple regions?\n \n \n Would you like to connect to a network-server now?\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 withRouter(CreateServiceProfile);\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport ServiceProfileStore from \"../../stores/ServiceProfileStore\";\nimport ServiceProfileForm from \"./ServiceProfileForm\";\n\n\nclass UpdateServiceProfile extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n onSubmit(serviceProfile) {\n ServiceProfileStore.update(serviceProfile, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/service-profiles`);\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withRouter(UpdateServiceProfile);\n","import React, { Component } from \"react\";\nimport { withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport Grid from '@material-ui/core/Grid';\n\nimport Delete from \"mdi-material-ui/Delete\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\nimport Admin from \"../../components/Admin\";\nimport ServiceProfileStore from \"../../stores/ServiceProfileStore\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport UpdateServiceProfile from \"./UpdateServiceProfile\";\n\n\nclass ServiceProfileLayout extends Component {\n constructor() {\n super();\n this.state = {\n admin: false,\n };\n this.deleteServiceProfile = this.deleteServiceProfile.bind(this);\n this.setIsAdmin = this.setIsAdmin.bind(this);\n }\n\n componentDidMount() {\n ServiceProfileStore.get(this.props.match.params.serviceProfileID, resp => {\n this.setState({\n serviceProfile: resp,\n });\n });\n\n SessionStore.on(\"change\", this.setIsAdmin);\n this.setIsAdmin();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n }\n\n setIsAdmin() {\n this.setState({\n admin: SessionStore.isAdmin(),\n });\n }\n\n deleteServiceProfile() {\n if (window.confirm(\"Are you sure you want to delete this service-profile?\")) {\n ServiceProfileStore.delete(this.props.match.params.serviceProfileID, () => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/service-profiles`);\n });\n }\n }\n\n render() {\n if (this.state.serviceProfile === undefined) {\n return(
);\n }\n\n return(\n \n \n }\n color=\"secondary\"\n onClick={this.deleteServiceProfile}\n />\n \n }\n >\n \n \n \n \n\n \n \n \n \n );\n }\n}\n\nServiceProfileLayout.propTypes = {\n history: PropTypes.any.isRequired,\n match: PropTypes.any.isRequired,\n}\n\nexport default withRouter(ServiceProfileLayout);\n","import { Component } from \"react\";\nimport SessionStore from \"../stores/SessionStore\";\n\n\nclass DeviceAdmin extends Component {\n constructor() {\n super();\n this.state = {\n admin: false,\n };\n\n this.setIsAdmin = this.setIsAdmin.bind(this);\n }\n\n componentDidMount() {\n SessionStore.on(\"change\", this.setIsAdmin);\n this.setIsAdmin();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps === this.props) {\n return;\n }\n\n this.setIsAdmin();\n }\n\n setIsAdmin() {\n if (this.props.organizationID !== undefined) {\n this.setState({\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationDeviceAdmin(this.props.organizationID),\n });\n } else {\n this.setState({\n admin: SessionStore.isAdmin(),\n });\n }\n }\n\n render() {\n if (this.state.admin) {\n return(this.props.children);\n }\n\n return(null);\n }\n}\n\nexport default DeviceAdmin;\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass DeviceProfileStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/deviceProfile.swagger.json\", sessionStore.getClientOpts())\n }\n\n create(deviceProfile, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceProfileService.Create({\n body: {\n deviceProfile: deviceProfile,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n get(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceProfileService.Get({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n update(deviceProfile, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceProfileService.Update({\n \"device_profile.id\": deviceProfile.id,\n body: {\n deviceProfile: deviceProfile,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n delete(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceProfileService.Delete({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"deleted\");\n callbackFunc(resp.ojb);\n })\n .catch(errorHandler);\n });\n }\n\n list(organizationID, applicationID, limit, offset, callbackFunc) {\n this.swagger.then(client => {\n client.apis.DeviceProfileService.List({\n organizationID: organizationID,\n applicationID: applicationID,\n limit: limit,\n offset: offset,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"device-profile has been \" + action,\n },\n });\n }\n}\n\nconst deviceProfileStore = new DeviceProfileStore();\nexport default deviceProfileStore;\n","import React, { Component } from \"react\";\n\nimport Grid from '@material-ui/core/Grid';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableRow from '@material-ui/core/TableRow';\n\nimport Plus from \"mdi-material-ui/Plus\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TableCellLink from \"../../components/TableCellLink\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\nimport DataTable from \"../../components/DataTable\";\nimport DeviceAdmin from \"../../components/DeviceAdmin\";\nimport DeviceProfileStore from \"../../stores/DeviceProfileStore\";\n\n\nclass ListDeviceProfiles extends Component {\n constructor() {\n super();\n\n this.getPage = this.getPage.bind(this);\n this.getRow = this.getRow.bind(this);\n }\n\n getPage(limit, offset, callbackFunc) {\n DeviceProfileStore.list(this.props.match.params.organizationID, 0, limit, offset, callbackFunc);\n }\n\n getRow(obj) {\n return(\n \n {obj.name}\n {obj.networkServerName}\n \n );\n }\n\n render() {\n return(\n \n \n }\n to={`/organizations/${this.props.match.params.organizationID}/device-profiles/create`}\n />\n \n }\n >\n \n \n \n \n Name\n Network Server\n \n }\n getPage={this.getPage}\n getRow={this.getRow}\n />\n \n \n );\n }\n}\n\nexport default ListDeviceProfiles;\n","import React from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport IconButton from '@material-ui/core/IconButton';\nimport TextField from '@material-ui/core/TextField';\n\nimport Delete from \"mdi-material-ui/Delete\";\n\nimport FormComponent from \"../classes/FormComponent\";\nimport theme from \"../theme\";\n\n\nconst kvStyles = {\n formLabel: {\n fontSize: 12,\n },\n delete: {\n marginTop: 3 * theme.spacing(1),\n },\n};\n\n\nclass KVForm extends FormComponent {\n onChange(e) {\n super.onChange(e);\n this.props.onChange(this.props.index, this.state.object);\n }\n\n onDelete = (e) => {\n e.preventDefault();\n this.props.onDelete(this.props.index);\n }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n return(\n \n \n \n \n \n \n \n \n {!!!this.props.disabled && \n \n }\n \n \n );\n }\n}\n\nexport default withStyles(kvStyles)(KVForm);\n","import React, { Component } from \"react\";\n\nimport TextField from \"@material-ui/core/TextField\";\n\nclass DurationField extends Component {\n constructor() {\n super();\n\n this.state = {\n value: 0,\n };\n }\n\n\n onChange = (e) => {\n this.setState({\n value: e.target.value,\n });\n\n this.props.onChange({\n target: {\n value: `${e.target.value}s`,\n type: \"text\",\n id: this.props.id,\n },\n });\n }\n\n componentDidMount() {\n const str = this.props.value || \"\";\n this.setState({\n value: str.replace(/s/, ''),\n });\n }\n\n render() {\n return(\n \n );\n }\n}\n\nexport default DurationField;\n\n","import React from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport TextField from '@material-ui/core/TextField';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormHelperText from \"@material-ui/core/FormHelperText\";\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\n\nimport {Controlled as CodeMirror} from \"react-codemirror2\";\nimport \"codemirror/mode/javascript/javascript\";\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\nimport KVForm from \"../../components/KVForm\";\nimport DurationField from \"../../components/DurationField\";\nimport AutocompleteSelect from \"../../components/AutocompleteSelect\";\nimport NetworkServerStore from \"../../stores/NetworkServerStore\";\nimport { FormLabel } from \"../../../node_modules/@material-ui/core\";\n\n\nconst styles = {\n formLabel: {\n fontSize: 12,\n },\n codeMirror: {\n zIndex: 1,\n },\n};\n\n\nclass DeviceProfileForm extends FormComponent {\n constructor() {\n super();\n this.state = {\n tab: 0,\n tags: [],\n };\n\n this.onTabChange = this.onTabChange.bind(this);\n this.getNetworkServerOptions = this.getNetworkServerOptions.bind(this);\n this.getMACVersionOptions = this.getMACVersionOptions.bind(this);\n this.getRegParamsOptions = this.getRegParamsOptions.bind(this);\n this.getPingSlotPeriodOptions = this.getPingSlotPeriodOptions.bind(this);\n this.getPayloadCodecOptions = this.getPayloadCodecOptions.bind(this);\n this.onCodeChange = this.onCodeChange.bind(this);\n }\n\n componentDidMount() {\n super.componentDidMount();\n this.setKVArray(this.props.object || {});\n }\n\n componentDidUpdate(prevProps) {\n super.componentDidUpdate(prevProps);\n\n if (prevProps.object !== this.props.object) {\n this.setKVArray(this.props.object || {});\n }\n }\n\n getNetworkServerOptions(search, callbackFunc) {\n NetworkServerStore.list(this.props.match.params.organizationID, 999, 0, resp => {\n const options = resp.result.map((ns) => {return {label: ns.name, value: ns.id}});\n callbackFunc(options);\n });\n }\n\n getMACVersionOptions(search, callbackFunc) {\n const macVersionOptions = [\n {value: \"1.0.0\", label: \"1.0.0\"},\n {value: \"1.0.1\", label: \"1.0.1\"},\n {value: \"1.0.2\", label: \"1.0.2\"},\n {value: \"1.0.3\", label: \"1.0.3\"},\n {value: \"1.1.0\", label: \"1.1.0\"},\n ];\n\n callbackFunc(macVersionOptions);\n }\n\n getRegParamsOptions(search, callbackFunc) {\n const regParamsOptions = [\n {value: \"A\", label: \"A\"},\n {value: \"B\", label: \"B\"},\n ];\n\n callbackFunc(regParamsOptions);\n }\n\n getPingSlotPeriodOptions(search, callbackFunc) {\n const pingSlotPeriodOptions = [\n {value: 32 * 1, label: \"every second\"},\n {value: 32 * 2, label: \"every 2 seconds\"},\n {value: 32 * 4, label: \"every 4 seconds\"},\n {value: 32 * 8, label: \"every 8 seconds\"},\n {value: 32 * 16, label: \"every 16 seconds\"},\n {value: 32 * 32, label: \"every 32 seconds\"},\n {value: 32 * 64, label: \"every 64 seconds\"},\n {value: 32 * 128, label: \"every 128 seconds\"},\n ];\n\n callbackFunc(pingSlotPeriodOptions);\n }\n\n getPayloadCodecOptions(search, callbackFunc) {\n const payloadCodecOptions = [\n {value: \"\", label: \"None\"},\n {value: \"CAYENNE_LPP\", label: \"Cayenne LPP\"},\n {value: \"CUSTOM_JS\", label: \"Custom JavaScript codec functions\"},\n ];\n\n callbackFunc(payloadCodecOptions);\n }\n\n getADRAlgorithmsOptions = (search, callbackFunc) => {\n if (this.state.object.networkServerID === undefined) {\n callbackFunc([]);\n } else {\n NetworkServerStore.getADRAlgorithms(this.state.object.networkServerID, resp => {\n const options = resp.adrAlgorithms.map((adr) => {return {value: adr.id, label: adr.name}});\n callbackFunc(options);\n })\n }\n }\n\n onCodeChange(field, editor, data, newCode) {\n let object = this.state.object;\n object[field] = newCode;\n this.setState({\n object: object,\n });\n }\n\n onTabChange(e, v) {\n this.setState({\n tab: v,\n });\n }\n\n onChange(e) {\n super.onChange(e);\n if (e.target.id === \"factoryPresetFreqsStr\") {\n let object = this.state.object;\n let freqsStr = e.target.value.split(\",\");\n object[\"factoryPresetFreqs\"] = freqsStr.map((f) => parseInt(f, 10));\n this.setState({\n object: object,\n });\n }\n }\n\n setKVArray = (props) => {\n let tags = [];\n\n if (props.tags !== undefined) {\n for (let key in props.tags) {\n tags.push({key: key, value: props.tags[key]});\n }\n }\n\n this.setState({\n tags: tags,\n });\n }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n let factoryPresetFreqsStr = \"\";\n if (this.state.object.factoryPresetFreqsStr !== undefined) {\n factoryPresetFreqsStr = this.state.object.factoryPresetFreqsStr;\n } else if (this.state.object.factoryPresetFreqs !== undefined) {\n factoryPresetFreqsStr = this.state.object.factoryPresetFreqs.join(\", \");\n }\n\n const codeMirrorOptions = {\n lineNumbers: true,\n mode: \"javascript\",\n theme: \"default\",\n };\n \n let payloadEncoderScript = this.state.object.payloadEncoderScript;\n let payloadDecoderScript = this.state.object.payloadDecoderScript;\n\n if (payloadEncoderScript === \"\" || payloadEncoderScript === undefined) {\n payloadEncoderScript = `// Encode encodes the given object into an array of bytes.\n// - fPort contains the LoRaWAN fPort number\n// - obj is an object, e.g. {\"temperature\": 22.5}\n// - variables contains the device variables e.g. {\"calibration\": \"3.5\"} (both the key / value are of type string)\n// The function must return an array of bytes, e.g. [225, 230, 255, 0]\nfunction Encode(fPort, obj, variables) {\n return [];\n}`;\n }\n\n if (payloadDecoderScript === \"\" || payloadDecoderScript === undefined) {\n payloadDecoderScript = `// Decode decodes an array of bytes into an object.\n// - fPort contains the LoRaWAN fPort number\n// - bytes is an array of bytes, e.g. [225, 230, 255, 0]\n// - variables contains the device variables e.g. {\"calibration\": \"3.5\"} (both the key / value are of type string)\n// The function must return an object, e.g. {\"temperature\": 22.5}\nfunction Decode(fPort, bytes, variables) {\n return {};\n}`;\n }\n\n const tags = this.state.tags.map((obj, i) => );\n\n\n return(\n \n \n \n \n {/* \n \n \n */}\n \n\n {this.state.tab === 0 &&
\n \n {!this.props.update && \n Network-server\n \n \n The network-server on which this device-profile will be provisioned. After creating the device-profile, this value can't be changed.\n \n }\n \n LoRaWAN MAC version\n \n \n The LoRaWAN MAC version supported by the device.\n \n \n \n LoRaWAN Regional Parameters revision\n \n \n Revision of the Regional Parameters specification supported by the device.\n \n \n \n ADR algorithm\n \n \n The ADR algorithm that will be used for controlling the device data-rate.\n \n \n \n \n
}\n\n {this.state.tab === 1 &&
\n \n \n }\n />\n \n {!this.state.object.supportsJoin && }\n {!this.state.object.supportsJoin && }\n {!this.state.object.supportsJoin && }\n {!this.state.object.supportsJoin && }\n {!this.state.object.supportsJoin && }\n
}\n\n {this.state.tab === 2 &&
\n \n \n }\n />\n \n\n {this.state.object.supportsClassB && }\n {this.state.object.supportsClassB && \n Class-B ping-slot periodicity\n \n Class-B ping-slot periodicity.\n }\n {this.state.object.supportsClassB && }\n {this.state.object.supportsClassB && }\n
}\n\n {this.state.tab === 3 &&
\n \n \n }\n />\n Select this option when the device will operate as Class-C device immediately after activation. In case it sends a DeviceModeInd mac-command when it changes to Class-C, do not select this option.\n \n\n \n
}\n\n {this.state.tab === 4 &&
\n \n Payload codec\n \n \n By defining a payload codec, ChirpStack Application Server can encode and decode the binary device payload for you.\n \n \n\n {this.state.object.payloadCodec === \"CUSTOM_JS\" && \n \n \n The function must have the signature function Decode(fPort, bytes) and must return an object.\n ChirpStack Application Server will convert this object to JSON.\n \n }\n {this.state.object.payloadCodec === \"CUSTOM_JS\" && \n \n \n The function must have the signature function Encode(fPort, obj) and must return an array\n of bytes.\n \n }\n
}\n\n {this.state.tab === 5 &&
\n \n \n Tags can be used to store additional key/value data.\n \n {tags}\n \n \n
}\n \n );\n }\n}\n\nexport default withStyles(styles)(DeviceProfileForm);\n","import React, { Component } from \"react\";\nimport { withRouter, Link } from 'react-router-dom';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Button from \"@material-ui/core/Button\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\n\nimport DeviceProfileForm from \"./DeviceProfileForm\";\nimport DeviceProfileStore from \"../../stores/DeviceProfileStore\";\nimport ServiceProfileStore from \"../../stores/ServiceProfileStore\";\n\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\n\nclass CreateDeviceProfile extends Component {\n constructor() {\n super();\n this.state = {\n spDialog: false,\n };\n this.onSubmit = this.onSubmit.bind(this);\n this.closeDialog = this.closeDialog.bind(this);\n }\n\n componentDidMount() {\n ServiceProfileStore.list(this.props.match.params.organizationID, 0, 0, 0, resp => {\n if (resp.totalCount === \"0\") {\n this.setState({\n spDialog: true,\n });\n }\n });\n }\n\n closeDialog() {\n this.setState({\n spDialog: false,\n });\n }\n\n onSubmit(deviceProfile) {\n let sp = deviceProfile;\n sp.organizationID = this.props.match.params.organizationID;\n\n DeviceProfileStore.create(sp, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/device-profiles`);\n });\n }\n\n render() {\n return(\n \n \n Add a service-profile?\n \n \n The selected organization does not have a service-profile yet.\n A service-profile connects an organization to a network-server and defines the features that an organization can use on this network-server.\n \n \n Would you like to create a service-profile?\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 withStyles(styles)(withRouter(CreateDeviceProfile));\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport DeviceProfileStore from \"../../stores/DeviceProfileStore\";\nimport DeviceProfileForm from \"./DeviceProfileForm\";\n\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\n\nclass UpdateDeviceProfile extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n onSubmit(deviceProfile) {\n DeviceProfileStore.update(deviceProfile, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/device-profiles`);\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(withRouter(UpdateDeviceProfile));\n","import React, { Component } from \"react\";\nimport { withRouter } from \"react-router-dom\";\n\nimport Grid from '@material-ui/core/Grid';\n\nimport Delete from \"mdi-material-ui/Delete\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\nimport DeviceProfileStore from \"../../stores/DeviceProfileStore\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport UpdateDeviceProfile from \"./UpdateDeviceProfile\";\n\n\nclass DeviceProfileLayout extends Component {\n constructor() {\n super();\n this.state = {\n admin: false,\n };\n this.deleteDeviceProfile = this.deleteDeviceProfile.bind(this);\n this.setIsAdmin = this.setIsAdmin.bind(this);\n }\n\n componentDidMount() {\n DeviceProfileStore.get(this.props.match.params.deviceProfileID, resp => {\n this.setState({\n deviceProfile: resp,\n });\n });\n\n SessionStore.on(\"change\", this.setIsAdmin);\n this.setIsAdmin();\n }\n\n componentWillUpdate() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n }\n\n setIsAdmin() {\n this.setState({\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationDeviceAdmin(this.props.match.params.organizationID),\n });\n }\n\n deleteDeviceProfile() {\n if (window.confirm(\"Are you sure you want to delete this device-profile?\")) {\n DeviceProfileStore.delete(this.props.match.params.deviceProfileID, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/device-profiles`);\n });\n }\n }\n\n render() {\n if (this.state.deviceProfile === undefined) {\n return(
);\n }\n\n let buttons = [];\n if (this.state.admin) {\n buttons = [\n }\n color=\"secondary\"\n onClick={this.deleteDeviceProfile}\n />,\n ];\n }\n\n return(\n \n \n \n \n \n \n\n \n \n \n \n );\n }\n}\n\nexport default withRouter(DeviceProfileLayout);\n","import { Component } from \"react\";\nimport SessionStore from \"../stores/SessionStore\";\n\n\nclass GatewayAdmin extends Component {\n constructor() {\n super();\n this.state = {\n admin: false,\n };\n\n this.setIsAdmin = this.setIsAdmin.bind(this);\n }\n\n componentDidMount() {\n SessionStore.on(\"change\", this.setIsAdmin);\n this.setIsAdmin();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps === this.props) {\n return;\n }\n\n this.setIsAdmin();\n }\n\n setIsAdmin() {\n if (this.props.organizationID !== undefined) {\n this.setState({\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationGatewayAdmin(this.props.organizationID),\n });\n } else {\n this.setState({\n admin: SessionStore.isAdmin(),\n });\n }\n }\n\n render() {\n if (this.state.admin) {\n return(this.props.children);\n }\n\n return(null);\n }\n}\n\nexport default GatewayAdmin;\n","import React, { Component } from 'react';\n\nimport { TileLayer } from 'react-leaflet';\n\n\nclass MapTileLayer extends Component {\n render() {\n return(\n \n )\n }\n}\n\nexport default MapTileLayer;\n","import React, { Component } from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Paper from '@material-ui/core/Paper';\nimport Card from \"@material-ui/core/Card\";\nimport CardHeader from \"@material-ui/core/CardHeader\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Grid from '@material-ui/core/Grid';\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport TableCell from \"@material-ui/core/TableCell\";\n\nimport moment from \"moment\";\nimport { Map, Marker } from 'react-leaflet';\nimport { Line } from \"react-chartjs-2\";\n\nimport MapTileLayer from \"../../components/MapTileLayer\";\nimport GatewayStore from \"../../stores/GatewayStore\";\n\n\nconst styles = {\n chart: {\n height: 300,\n },\n};\n\nclass DetailsCard extends Component {\n render() {\n return(\n \n \n \n \n \n \n Gateway ID\n {this.props.gateway.id}\n \n \n Altitude\n {this.props.gateway.location.altitude} meters\n \n \n GPS coordinates\n {this.props.gateway.location.latitude}, {this.props.gateway.location.longitude}\n \n \n Last seen at\n {this.props.lastSeenAt}\n \n \n
\n
\n
\n );\n }\n}\n\nclass GatewayDetails extends Component {\n constructor() {\n super();\n this.state = {};\n this.loadStats = this.loadStats.bind(this);\n }\n\n componentDidMount() {\n this.loadStats();\n }\n\n loadStats() {\n const end = moment().toISOString()\n const start = moment().subtract(30, \"days\").toISOString()\n\n GatewayStore.getStats(this.props.match.params.gatewayID, start, end, resp => {\n let statsDown = {\n labels: [],\n datasets: [\n {\n label: \"rx received\",\n borderColor: \"rgba(33, 150, 243, 1)\",\n backgroundColor: \"rgba(0, 0, 0, 0)\",\n lineTension: 0,\n pointBackgroundColor: \"rgba(33, 150, 243, 1)\",\n data: [],\n },\n ],\n }\n\n let statsUp = {\n labels: [],\n datasets: [\n {\n label: \"tx emitted\",\n borderColor: \"rgba(33, 150, 243, 1)\",\n backgroundColor: \"rgba(0, 0, 0, 0)\",\n lineTension: 0,\n pointBackgroundColor: \"rgba(33, 150, 243, 1)\",\n data: [],\n },\n ],\n }\n\n for (const row of resp.result) {\n statsUp.labels.push(moment(row.timestamp).format(\"Do\"));\n statsDown.labels.push(moment(row.timestamp).format(\"Do\"));\n statsUp.datasets[0].data.push(row.txPacketsEmitted);\n statsDown.datasets[0].data.push(row.rxPacketsReceivedOK);\n }\n\n this.setState({\n statsUp: statsUp,\n statsDown: statsDown,\n });\n });\n }\n\n render() {\n if (this.props.gateway === undefined || this.state.statsDown === undefined || this.state.statsUp === undefined) {\n return(
);\n }\n\n const style = {\n height: 400,\n };\n\n const statsOptions = {\n legend: {\n display: false,\n },\n maintainAspectRatio: false,\n scales: {\n yAxes: [{\n ticks: {\n beginAtZero: true,\n },\n }],\n },\n }\n\n let position = [];\n if (typeof(this.props.gateway.location.latitude) !== \"undefined\" && typeof(this.props.gateway.location.longitude !== \"undefined\")) {\n position = [this.props.gateway.location.latitude, this.props.gateway.location.longitude]; \n } else {\n position = [0,0];\n }\n\n let lastSeenAt = \"Never\";\n if (this.props.lastSeenAt !== null) {\n lastSeenAt = moment(this.props.lastSeenAt).format(\"lll\");\n }\n\n return(\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 \n \n );\n }\n}\n\nexport default withStyles(styles)(GatewayDetails);\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\n\nclass GatewayProfileStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/gatewayProfile.swagger.json\", sessionStore.getClientOpts());\n }\n\n create(gatewayProfile, callbackFunc) {\n this.swagger.then(client => {\n client.apis.GatewayProfileService.Create({\n body: {\n gatewayProfile: gatewayProfile,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n get(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.GatewayProfileService.Get({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n update(gatewayProfile, callbackFunc) {\n this.swagger.then(client => {\n client.apis.GatewayProfileService.Update({\n \"gateway_profile.id\": gatewayProfile.id,\n body: {\n gatewayProfile: gatewayProfile,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n delete(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.GatewayProfileService.Delete({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n list(networkServerID, limit, offset, callbackFunc) {\n this.swagger.then((client) => {\n client.apis.GatewayProfileService.List({\n networkServerID: networkServerID,\n limit: limit,\n offset: offset,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"gateway-profile has been \" + action,\n },\n });\n }\n}\n\nconst gatewayProfileStore = new GatewayProfileStore();\nexport default gatewayProfileStore;\n","import { EventEmitter } from \"events\";\nimport \"whatwg-fetch\";\n\n\nclass LocationStore extends EventEmitter {\n getLocation(callbackFunc) {\n if (navigator.geolocation) {\n navigator.geolocation.getCurrentPosition((position) => {\n callbackFunc(position);\n });\n }\n }\n}\n\nconst locationStore = new LocationStore();\n\nexport default locationStore;\n","import React, { Component } from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport TextField from '@material-ui/core/TextField';\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport FormHelperText from \"@material-ui/core/FormHelperText\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport Checkbox from '@material-ui/core/Checkbox';\nimport Button from \"@material-ui/core/Button\";\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport Typography from \"@material-ui/core/Typography\";\n\nimport { Map, Marker } from 'react-leaflet';\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\nimport KVForm from \"../../components/KVForm\";\nimport AutocompleteSelect from \"../../components/AutocompleteSelect\";\nimport NetworkServerStore from \"../../stores/NetworkServerStore\";\nimport GatewayProfileStore from \"../../stores/GatewayProfileStore\";\nimport ServiceProfileStore from \"../../stores/ServiceProfileStore\";\nimport LocationStore from \"../../stores/LocationStore\";\nimport MapTileLayer from \"../../components/MapTileLayer\";\nimport EUI64Field from \"../../components/EUI64Field\";\nimport AESKeyField from \"../../components/AESKeyField\";\nimport theme from \"../../theme\";\n\n\nconst boardStyles = {\n formLabel: {\n color: theme.palette.primary.main,\n },\n a: {\n color: theme.palette.primary.main,\n },\n};\n\n\nclass GatewayBoardForm extends Component {\n constructor() {\n super();\n\n this.onChange = this.onChange.bind(this);\n this.onDelete = this.onDelete.bind(this);\n }\n\n onChange(e) {\n let board = this.props.board;\n const field = e.target.id;\n\n board[field] = e.target.value;\n this.props.onChange(board);\n }\n\n onDelete(e) {\n e.preventDefault();\n this.props.onDelete();\n }\n\n render() {\n return(\n \n Board #{this.props.i} configuration (delete)\n \n \n \n );\n }\n}\n\nGatewayBoardForm = withStyles(boardStyles)(GatewayBoardForm);\n\n\nconst styles = {\n mapLabel: {\n marginBottom: theme.spacing(1),\n },\n link: {\n color: theme.palette.primary.main,\n },\n formLabel: {\n fontSize: 12,\n },\n};\n\nclass GatewayForm extends FormComponent {\n constructor() {\n super();\n \n this.state = {\n mapZoom: 15,\n tab: 0,\n tags: [],\n metadata: [],\n };\n\n this.getNetworkServerOption = this.getNetworkServerOption.bind(this);\n this.getNetworkServerOptions = this.getNetworkServerOptions.bind(this);\n this.getGatewayProfileOption = this.getGatewayProfileOption.bind(this);\n this.getGatewayProfileOptions = this.getGatewayProfileOptions.bind(this);\n this.setCurrentPosition = this.setCurrentPosition.bind(this);\n this.updatePosition = this.updatePosition.bind(this);\n this.updateZoom = this.updateZoom.bind(this);\n this.addGatewayBoard = this.addGatewayBoard.bind(this);\n }\n\n componentDidMount() {\n super.componentDidMount();\n this.setKVArrays(this.props.object || {});\n\n if (!this.props.update) {\n this.setCurrentPosition();\n }\n }\n\n componentDidUpdate(prevProps) {\n super.componentDidUpdate(prevProps);\n\n if (prevProps.object !== this.props.object) {\n this.setKVArrays(this.props.object || {});\n }\n }\n\n onChange(e) {\n if (e.target.id === \"networkServerID\" && e.target.value !== this.state.object.networkServerID) {\n let object = this.state.object;\n object.gatewayProfileID = null;\n object.serviceProfileID = null;\n this.setState({\n object: object,\n });\n }\n\n super.onChange(e);\n }\n\n setCurrentPosition(e) {\n if (e !== undefined) {\n e.preventDefault();\n }\n\n LocationStore.getLocation(position => {\n let object = this.state.object;\n object.location = {\n latitude: position.coords.latitude,\n longitude: position.coords.longitude,\n altitude: this.state.object.location.altitude,\n }\n this.setState({\n object: object,\n });\n });\n }\n\n updatePosition() {\n const position = this.refs.marker.leafletElement.getLatLng();\n let object = this.state.object;\n object.location = {\n latitude: position.lat,\n longitude: position.lng,\n altitude: this.state.object.location.altitude,\n }\n this.setState({\n object: object,\n });\n }\n\n updateZoom(e) {\n this.setState({\n mapZoom: e.target.getZoom(),\n });\n }\n\n getNetworkServerOption(id, callbackFunc) {\n NetworkServerStore.get(id, resp => {\n callbackFunc({label: resp.networkServer.name, value: resp.networkServer.id});\n });\n }\n\n getNetworkServerOptions(search, callbackFunc) {\n NetworkServerStore.list(this.props.match.params.organizationID, 999, 0, resp => {\n const options = resp.result.map((ns, i) => {return {label: ns.name, value: ns.id}});\n callbackFunc(options);\n });\n }\n\n getGatewayProfileOption(id, callbackFunc) {\n GatewayProfileStore.get(id, resp => {\n callbackFunc({label: resp.gatewayProfile.name, value: resp.gatewayProfile.id});\n });\n }\n\n getGatewayProfileOptions(search, callbackFunc) {\n if (this.state.object === undefined || this.state.object.networkServerID === undefined) {\n callbackFunc([]);\n return;\n }\n\n GatewayProfileStore.list(this.state.object.networkServerID, 999, 0, resp => {\n const options = resp.result.map((gp, i) => {return {label: gp.name, value: gp.id}});\n callbackFunc(options);\n });\n }\n\n getServiceProfileOption = (id, callbackFunc) => {\n ServiceProfileStore.get(id, resp => {\n callbackFunc({label: resp.serviceProfile.name, value: resp.serviceProfile.id});\n });\n }\n\n getServiceProfileOptions = (search, callbackFunc) => {\n if (this.state.object === undefined || this.state.object.networkServerID === undefined) {\n callbackFunc([]);\n return;\n }\n\n ServiceProfileStore.list(this.props.match.params.organizationID, this.state.object.networkServerID, 999, 0, resp => {\n const options = resp.result.map((sp, i) => { return {label: sp.name, value: sp.id} });\n callbackFunc(options);\n });\n }\n\n addGatewayBoard() {\n let object = this.state.object;\n if (object.boards === undefined) {\n object.boards = [{}];\n } else {\n object.boards.push({});\n }\n\n this.setState({\n object: object,\n });\n }\n\n deleteGatewayBoard(i) {\n let object = this.state.object;\n object.boards.splice(i, 1);\n this.setState({\n object: object,\n });\n }\n\n updateGatewayBoard(i, board) {\n let object = this.state.object;\n object.boards[i] = board;\n this.setState({\n object: object,\n });\n }\n\n onTabChange = (e, v) => {\n this.setState({\n tab: v,\n });\n }\n\n setKVArrays = (props) => {\n let tags = [];\n let metadata = [];\n\n if (props.tags !== undefined) {\n for (let key in props.tags) {\n tags.push({key: key, value: props.tags[key]});\n }\n }\n\n if (props.metadata !== undefined) {\n for (let key in props.metadata) {\n metadata.push({key: key, value: props.metadata[key]});\n }\n }\n\n this.setState({\n tags: tags,\n metadata: metadata,\n });\n }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n const style = {\n height: 400,\n };\n\n let position = [];\n if (this.state.object.location.latitude !== undefined && this.state.object.location.longitude !== undefined) {\n position = [this.state.object.location.latitude, this.state.object.location.longitude];\n } else {\n position = [0, 0];\n }\n\n let boards = [];\n if (this.state.object.boards !== undefined) {\n boards = this.state.object.boards.map((b, i) => this.deleteGatewayBoard(i)} onChange={board => this.updateGatewayBoard(i, board)} />);\n }\n\n const tags = this.state.tags.map((obj, i) => );\n const metadata = this.state.metadata.map((obj, i) => );\n\n return(\n Add board configuration}\n >\n \n \n \n \n \n\n {this.state.tab === 0 &&
\n \n \n {!this.props.update && }\n {!this.props.update && \n Network-server\n \n \n Select the network-server to which the gateway will connect. When no network-servers are available in the dropdown, make sure a service-profile exists for this organization. \n \n }\n \n Service-profile\n \n \n Select the service-profile under which the gateway must be added. The available service-profiles depend on the selected network-server, which must be selected first.\n \n \n \n Gateway-profile\n \n \n Optional. When assigning a gateway-profile to the gateway, ChirpStack Network Server will attempt to update the gateway according to the gateway-profile. Note that this does require a gateway with ChirpStack Concentratord.\n \n \n \n \n }\n />\n \n When enabled (and ChirpStack Network Server is configured with the gateway discover feature enabled), the gateway will send out periodical pings to test its coverage by other gateways in the same network.\n \n \n \n \n Gateway location (set to current location)\n \n \n \n \n \n Drag the marker to the location of the gateway. When the gateway has an on-board GPS, this value will be set automatically when the network receives statistics from the gateway.\n \n \n {boards}\n
}\n {this.state.tab === 1 &&
\n \n \n Tags can be used to store additional key/value data.\n \n {tags}\n \n \n
}\n {this.state.tab === 2 &&
\n \n \n Metadata can be used by the ChirpStack Gateway Bridge to push information about the gateway (e.g. ip / hostname, serial number, temperatures, ...).\n This information is automatically updated when gateway statistics are received.\n \n {metadata}\n \n
}\n \n );\n }\n}\n\nexport default withStyles(styles)(GatewayForm);\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport GatewayStore from \"../../stores/GatewayStore\";\nimport GatewayForm from \"./GatewayForm\";\n\n\nclass UpdateGateway extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit = this.onSubmit.bind(this);\n }\n\n onSubmit(gateway) {\n GatewayStore.update(gateway, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/gateways`);\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withRouter(UpdateGateway);\n","import React, { Component } from \"react\";\nimport ReactDOM from 'react-dom';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Paper from '@material-ui/core/Paper';\nimport Card from \"@material-ui/core/Card\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Typography from \"@material-ui/core/Typography\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\n\nimport L from 'leaflet';\nimport { Map, Marker, Polyline, Popup, MapControl, withLeaflet } from 'react-leaflet';\n\nimport MapTileLayer from \"../../components/MapTileLayer\";\nimport GatewayStore from \"../../stores/GatewayStore\";\n\n\nconst styles = {\n mapLegend: {\n background: \"rgba(255,255,255,0.7)\",\n padding: 10,\n borderRadius: 5,\n },\n\n mapLegendList: {\n listStyle: \"none\",\n padding: 0,\n margin: 0,\n opacity: 1,\n },\n\n mapLegendListItem: {\n fontWeight: \"bold\",\n padding: 3,\n },\n\n label: {\n display: \"block\",\n float: \"left\",\n marginRight: 10,\n width: 24,\n },\n};\n\n\nclass GatewayDiscovery extends Component {\n constructor() {\n super();\n this.state = {};\n }\n\n componentDidMount() {\n GatewayStore.getLastPing(this.props.gateway.id, ping => {\n this.setState({\n ping: ping,\n });\n });\n }\n\n getColor(dbm) {\n if (dbm >= -100) {\n return \"#FF0000\";\n } else if (dbm >= -105) {\n return \"#FF7F00\";\n } else if (dbm >= -110) {\n return \"#FFFF00\";\n } else if (dbm >= -115) {\n return \"#00FF00\";\n } else if (dbm >= -120) {\n return \"#00FFFF\";\n } \n return \"#0000FF\";\n }\n\n render() {\n if (this.state.ping === undefined || this.state.ping.pingRX.length === 0) {\n return(\n \n \n \n No gateway discovery data is available (yet). This could mean:\n \n \n \n \n no discovery 'ping' was emitted yet\n \n \n \n \n the gateway ping feature has been disabled in ChirpStack Application Server\n \n \n \n \n the discovery 'ping' was not received by any other gateways\n \n \n \n \n \n );\n }\n\n let position = [0, 0];\n if (this.props.gateway.location !== undefined && this.props.gateway.location.latitude !== undefined && this.props.gateway.location.longitude !== undefined) {\n position = [this.props.gateway.location.latitude, this.props.gateway.location.longitude];\n }\n\n const style = {\n height: 800,\n };\n\n let bounds = [];\n let markers = [];\n let lines = [];\n\n markers.push(\n \n \n \n {this.props.gateway.id}
\n Freq: {this.state.ping.frequency/1000000} MHz
\n DR: {this.state.ping.dr}
\n Altitude: {this.props.gateway.location.altitude} meter(s)\n
\n
\n
\n );\n\n bounds.push(position);\n\n for (const rx of this.state.ping.pingRX) {\n const pingPos = [rx.latitude, rx.longitude];\n\n markers.push(\n \n \n \n {rx.gatewayID}
\n RSSI: {rx.rssi} dBm
\n SNR: {rx.LoRaSNR} dB
\n Altitude: {rx.altitude} meter(s)\n
\n
\n
\n );\n\n bounds.push(pingPos);\n\n lines.push(\n \n );\n }\n\n return(\n \n \n \n {markers}\n {lines}\n \n
    \n
  •   >= -100 dBm
  • \n
  •   >= -105 dBm
  • \n
  •   >= -110 dBm
  • \n
  •   >= -115 dBm
  • \n
  •   >= -120 dBm
  • \n
  •   < -120 dBm
  • \n
\n
\n
\n
\n );\n };\n}\n\nclass LegendControl extends MapControl {\n componentDidMount() {\n const legend = L.control({position: \"bottomleft\"});\n const jsx = (\n
\n {this.props.children}\n
\n );\n\n legend.onAdd = function(map) {\n let div = L.DomUtil.create(\"div\", '');\n ReactDOM.render(jsx, div);\n return div;\n };\n\n this.leafletElement = legend;\n }\n\n createLeafletElement () {}\n}\n\nLegendControl = withLeaflet(LegendControl);\n\nexport default withStyles(styles)(GatewayDiscovery);\n\n","import React, { Component } from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport Typography from '@material-ui/core/Typography';\n\nimport ChevronDown from \"mdi-material-ui/ChevronDown\";\n\nimport moment from \"moment\";\n\nimport JSONTree from \"./JSONTree\";\nimport theme from \"../theme\";\n\n\nconst styles = {\n headerColumn: {\n marginRight: 6 * theme.spacing(1),\n },\n headerColumnFixedSmall: {\n width: 145,\n },\n headerColumnFixedWide: {\n width: 175,\n },\n treeStyle: {\n paddingTop: 0,\n paddingBottom: 0,\n fontSize: 12,\n lineHeight: 1.5,\n },\n};\n\n\nclass LoRaWANFrameLog extends Component {\n render() {\n let dir = \"\";\n let devID = \"\";\n\n if (this.props.frame.uplinkMetaData !== undefined) {\n dir = \"UPLINK\";\n } else {\n dir = \"DOWNLINK\";\n }\n\n const receivedAt = moment(this.props.frame.receivedAt).format(\"LTS\");\n const mType = this.props.frame.phyPayload.mhdr.mType;\n\n if (this.props.frame.phyPayload.macPayload !== undefined) {\n if (this.props.frame.phyPayload.macPayload.devEUI !== undefined) {\n devID = this.props.frame.phyPayload.macPayload.devEUI;\n }\n\n if (this.props.frame.phyPayload.macPayload.fhdr !== undefined) {\n devID = this.props.frame.phyPayload.macPayload.fhdr.devAddr;\n }\n }\n\n return(\n \n }>\n
{dir}
\n
{receivedAt}
\n
{mType}
\n
{devID}
\n
\n \n \n \n {this.props.frame.uplinkMetaData && }\n {this.props.frame.downlinkMetaData && }\n \n \n \n \n \n \n
\n );\n }\n}\n\nexport default withStyles(styles)(LoRaWANFrameLog);\n","import React, { Component } from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Chip from \"@material-ui/core/Chip\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Button from '@material-ui/core/Button';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\n\nimport Play from \"mdi-material-ui/Play\";\nimport Pause from \"mdi-material-ui/Pause\";\nimport Download from \"mdi-material-ui/Download\";\nimport Delete from \"mdi-material-ui/Delete\";\nimport HelpCircleOutline from \"mdi-material-ui/HelpCircleOutline\";\nimport AlertCircleOutline from \"mdi-material-ui/AlertCircleOutline\";\n\nimport fileDownload from \"js-file-download\";\n\nimport LoRaWANFrameLog from \"../../components/LoRaWANFrameLog\";\nimport GatewayStore from \"../../stores/GatewayStore\";\nimport theme from \"../../theme\";\n\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n center: {\n textAlign: \"center\",\n },\n progress: {\n marginTop: 4 * theme.spacing(1),\n },\n};\n\n\nclass GatewayFrames extends Component {\n constructor() {\n super();\n\n this.state = {\n connected: false,\n paused: false,\n frames: [],\n dialogOpen: false,\n };\n\n this.onFrame = this.onFrame.bind(this);\n this.onDownload = this.onDownload.bind(this);\n this.togglePause = this.togglePause.bind(this);\n this.onClear = this.onClear.bind(this);\n this.toggleHelpDialog = this.toggleHelpDialog.bind(this);\n this.setConnected = this.setConnected.bind(this);\n }\n\n componentDidMount() {\n const conn = GatewayStore.getFrameLogsConnection(this.props.gateway.id, () => {}, () => {}, this.onFrame);\n this.setState({\n wsConn: conn,\n });\n\n GatewayStore.on(\"ws.status.change\", this.setConnected);\n this.setConnected();\n }\n\n componentWillUnmount() {\n this.state.wsConn.close();\n GatewayStore.removeListener(\"ws.status.change\", this.setConnected);\n }\n\n onDownload() {\n const dl = this.state.frames.map((frame, i) => {\n return {\n uplinkMetaData: frame.uplinkMetaData,\n downlinkMetaData: frame.downlinkMetaData,\n phyPayload: frame.phyPayload,\n };\n });\n\n fileDownload(JSON.stringify(dl, null, 4), `gateway-${this.props.match.params.gatewayID}.json`);\n }\n\n togglePause() {\n this.setState({\n paused: !this.state.paused,\n });\n }\n\n toggleHelpDialog() {\n this.setState({\n dialogOpen: !this.state.dialogOpen,\n });\n }\n\n onClear() {\n this.setState({\n frames: [],\n });\n }\n\n setConnected() {\n this.setState({\n connected: GatewayStore.getWSStatus(),\n });\n }\n\n onFrame(frame) {\n if (this.state.paused) {\n return;\n }\n\n let frames = this.state.frames;\n const now = new Date();\n\n if (frame.uplinkFrame !== undefined) {\n frames.unshift({\n id: now.getTime(),\n receivedAt: now,\n uplinkMetaData: {\n rxInfo: frame.uplinkFrame.rxInfo,\n txInfo: frame.uplinkFrame.txInfo,\n },\n phyPayload: JSON.parse(frame.uplinkFrame.phyPayloadJSON),\n });\n }\n\n if (frame.downlinkFrame !== undefined) {\n delete frame.downlinkFrame.txInfo['gatewayID'];\n\n frames.unshift({\n id: now.getTime(),\n receivedAt: now,\n downlinkMetaData: {\n gatewayID: frame.downlinkFrame.gatewayID,\n txInfo: frame.downlinkFrame.txInfo,\n },\n phyPayload: JSON.parse(frame.downlinkFrame.phyPayloadJSON),\n });\n }\n\n console.log(frame);\n\n this.setState({\n frames: frames,\n });\n }\n\n render() {\n const frames = this.state.frames.map((frame, i) => );\n\n return(\n \n \n \n Help\n \n \n The frames below are the raw (and encrypted) LoRaWAN PHYPayload frames as seen by the gateway(s). This data is intended for debugging only.\n \n \n \n \n \n \n\n \n {!this.state.paused && }\n {this.state.paused && }\n \n \n \n \n {!this.state.connected &&
\n }\n />\n
}\n {(this.state.connected && frames.length === 0 && !this.state.paused) &&
}\n {frames.length > 0 && frames}\n
\n
\n );\n }\n}\n\nexport default withStyles(styles)(GatewayFrames);\n","import React, { Component } from \"react\";\n\nimport Card from \"@material-ui/core/Card\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport TextField from \"@material-ui/core/TextField\";\n\nimport moment from \"moment\";\n\nimport GatewayStore from \"../../stores/GatewayStore\";\n\n\nclass GatewayCertificate extends Component {\n constructor() {\n super();\n\n this.state = {\n caCert: null,\n tlsCert: null,\n tlsKey: null,\n buttonDisabled: false,\n };\n }\n\n requestCertificate = () => {\n this.setState({\n buttonDisabled: true,\n });\n\n GatewayStore.generateClientCertificate(this.props.match.params.gatewayID, (resp => {\n this.setState({\n tlsKey: resp.tlsKey,\n tlsCert: resp.tlsCert,\n caCert: resp.caCert,\n expiresAt: moment(resp.expiresAt).format(\"lll\"),\n });\n }));\n }\n\n render() {\n return(\n \n \n \n If required by the network, the gateway needs a client certificate in order to connect to the network.\n This certificate must be configured on the gateway. After generating the certificate, the certificate\n can only be retrieved once.\n \n {this.state.tlsCert == null && }\n {this.state.tlsCert != null &&
\n \n \n \n \n }\n
\n
\n );\n }\n}\n\nexport default GatewayCertificate;\n","import React, { Component } from \"react\";\nimport { Route, Switch, Link, withRouter } from \"react-router-dom\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\n\nimport Delete from \"mdi-material-ui/Delete\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\nimport GatewayAdmin from \"../../components/GatewayAdmin\";\nimport GatewayStore from \"../../stores/GatewayStore\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport GatewayDetails from \"./GatewayDetails\";\nimport UpdateGateway from \"./UpdateGateway\";\nimport GatewayDiscovery from \"./GatewayDiscovery\";\nimport GatewayFrames from \"./GatewayFrames\";\nimport GatewayCertificate from \"./GatewayCertificate\";\n\nimport theme from \"../../theme\";\n\n\nconst styles = {\n tabs: {\n borderBottom: \"1px solid \" + theme.palette.divider,\n height: \"48px\",\n overflow: \"visible\",\n },\n};\n\n\nclass GatewayLayout extends Component {\n constructor() {\n super();\n this.state = {\n tab: 0,\n admin: false,\n };\n this.deleteGateway = this.deleteGateway.bind(this);\n this.onChangeTab = this.onChangeTab.bind(this);\n this.locationToTab = this.locationToTab.bind(this);\n this.setIsAdmin = this.setIsAdmin.bind(this);\n }\n\n componentDidMount() {\n GatewayStore.get(this.props.match.params.gatewayID, resp => {\n this.setState({\n gateway: resp,\n });\n });\n\n\n SessionStore.on(\"change\", this.setIsAdmin);\n this.setIsAdmin();\n this.locationToTab();\n }\n\n componentDidUpdate(prevProps) {\n if (this.props === prevProps) {\n return;\n }\n\n this.locationToTab();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n }\n\n setIsAdmin() {\n this.setState({\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationGatewayAdmin(this.props.match.params.organizationID),\n });\n }\n\n deleteGateway() {\n if (window.confirm(\"Are you sure you want to delete this gateway?\")) {\n GatewayStore.delete(this.props.match.params.gatewayID, () => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/gateways`);\n });\n }\n }\n\n locationToTab() {\n let tab = 0;\n\n if (window.location.href.endsWith(\"/edit\")) {\n tab = 1;\n } else if (window.location.href.endsWith(\"/certificate\")) {\n tab = 2;\n } else if (window.location.href.endsWith(\"/discovery\")) {\n tab = 3;\n } else if (window.location.href.endsWith(\"/frames\")) {\n tab = 4;\n }\n\n if (tab > 0 && !this.state.admin) {\n tab = tab - 1;\n }\n\n this.setState({\n tab: tab,\n });\n }\n\n onChangeTab(e, v) {\n this.setState({\n tab: v,\n });\n }\n\n render() {\n if (this.state.gateway === undefined) {\n return(
);\n }\n\n return(\n \n \n }\n color=\"secondary\"\n onClick={this.deleteGateway}\n />\n \n }\n >\n \n \n \n \n\n \n \n \n {this.state.admin && }\n {this.state.admin && }\n \n \n \n \n \n \n \n } />\n } />\n } />\n } />\n } />\n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(withRouter(GatewayLayout));\n","import React, { Component } from \"react\";\nimport { withRouter, Link } from 'react-router-dom';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Button from \"@material-ui/core/Button\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\n\nimport GatewayForm from \"./GatewayForm\";\nimport GatewayStore from \"../../stores/GatewayStore\";\nimport ServiceProfileStore from \"../../stores/ServiceProfileStore\";\n\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\n\nclass CreateGateway extends Component {\n constructor() {\n super();\n\n this.state = {\n spDialog: false,\n };\n\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n componentDidMount() {\n ServiceProfileStore.list(this.props.match.params.organizationID, 0, 0, 0, resp => {\n if (resp.totalCount === \"0\") {\n this.setState({\n spDialog: true,\n });\n }\n });\n }\n\n closeDialog = () => {\n this.setState({\n spDialog: false,\n });\n }\n\n onSubmit(gateway) {\n let gw = gateway;\n gw.organizationID = this.props.match.params.organizationID;\n\n GatewayStore.create(gateway, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/gateways`);\n });\n }\n\n render() {\n return(\n \n \n Add a service-profile?\n \n \n The selected organization does not have a service-profile yet.\n A service-profile connects an organization to a network-server and defines the features that an organization can use on this network-server.\n \n \n Would you like to create a service-profile?\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 withRouter(withStyles(styles)(CreateGateway));\n","import React from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport TextField from '@material-ui/core/TextField';\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport FormHelperText from \"@material-ui/core/FormHelperText\";\n// import Typography from '@material-ui/core/Typography';\n\nimport {Controlled as CodeMirror} from \"react-codemirror2\";\nimport \"codemirror/mode/javascript/javascript\";\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\nimport AutocompleteSelect from \"../../components/AutocompleteSelect\";\nimport ServiceProfileStore from \"../../stores/ServiceProfileStore\";\n\n\nconst styles = {\n codeMirror: {\n zIndex: 1,\n },\n formLabel: {\n fontSize: 12,\n },\n};\n\n\nclass ApplicationForm extends FormComponent {\n constructor() {\n super();\n this.getServiceProfileOption = this.getServiceProfileOption.bind(this);\n this.getServiceProfileOptions = this.getServiceProfileOptions.bind(this);\n this.getPayloadCodecOptions = this.getPayloadCodecOptions.bind(this);\n this.onCodeChange = this.onCodeChange.bind(this);\n }\n\n getServiceProfileOption(id, callbackFunc) {\n ServiceProfileStore.get(id, resp => {\n callbackFunc({label: resp.serviceProfile.name, value: resp.serviceProfile.id});\n });\n }\n\n getServiceProfileOptions(search, callbackFunc) {\n ServiceProfileStore.list(this.props.match.params.organizationID, 0, 999, 0, resp => {\n const options = resp.result.map((sp) => {return {label: sp.name, value: sp.id}});\n callbackFunc(options);\n });\n }\n\n getPayloadCodecOptions(search, callbackFunc) {\n const payloadCodecOptions = [\n {value: \"\", label: \"None\"},\n {value: \"CAYENNE_LPP\", label: \"Cayenne LPP\"},\n {value: \"CUSTOM_JS\", label: \"Custom JavaScript codec functions\"},\n ];\n\n callbackFunc(payloadCodecOptions);\n }\n\n onCodeChange(field, editor, data, newCode) {\n let object = this.state.object;\n object[field] = newCode;\n this.setState({\n object: object,\n });\n }\n\n render() {\n if (this.state.object === undefined) {\n return(
);\n }\n\n const codeMirrorOptions = {\n lineNumbers: true,\n mode: \"javascript\",\n theme: \"default\",\n };\n \n let payloadEncoderScript = this.state.object.payloadEncoderScript;\n let payloadDecoderScript = this.state.object.payloadDecoderScript;\n\n if (payloadEncoderScript === \"\" || payloadEncoderScript === undefined) {\n payloadEncoderScript = `// Encode encodes the given object into an array of bytes.\n// - fPort contains the LoRaWAN fPort number\n// - obj is an object, e.g. {\"temperature\": 22.5}\n// The function must return an array of bytes, e.g. [225, 230, 255, 0]\nfunction Encode(fPort, obj) {\n return [];\n}`;\n }\n\n if (payloadDecoderScript === \"\" || payloadDecoderScript === undefined) {\n payloadDecoderScript = `// Decode decodes an array of bytes into an object.\n// - fPort contains the LoRaWAN fPort number\n// - bytes is an array of bytes, e.g. [225, 230, 255, 0]\n// The function must return an object, e.g. {\"temperature\": 22.5}\nfunction Decode(fPort, bytes) {\n return {};\n}`;\n }\n\n return(\n \n \n \n {!this.props.update && \n Service-profile\n \n \n The service-profile to which this application will be attached. Note that you can't change this value after the application has been created.\n \n }\n {this.state.object.payloadCodec !== \"\" && this.state.object.payloadCodec !== undefined &&
\n \n Payload codec\n \n \n By defining a payload codec, ChirpStack Application Server can encode and decode the binary device payload for you. \n Important note: the payload fields have moved to the device-profile. For backward-compatibility and migration, existing codec settings are still visible.\n Codec settings on the device-profile have priority over the application codec settings.\n \n \n {this.state.object.payloadCodec === \"CUSTOM_JS\" && \n \n \n The function must have the signature function Decode(fPort, bytes) and must return an object.\n ChirpStack Application Server will convert this object to JSON.\n \n }\n {this.state.object.payloadCodec === \"CUSTOM_JS\" && \n \n \n The function must have the signature function Encode(fPort, obj) and must return an array\n of bytes.\n \n }\n
}\n {/* {this.state.object.payloadCodec === \"\" && \n \n Note: The payload codec fields have moved to the device-profile.\n \n } */}\n \n );\n }\n}\n\nexport default withStyles(styles)(ApplicationForm);\n","import React, { Component } from \"react\";\nimport { withRouter, Link } from 'react-router-dom';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Button from \"@material-ui/core/Button\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\n\nimport ApplicationForm from \"./ApplicationForm\";\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport ServiceProfileStore from \"../../stores/ServiceProfileStore\";\n\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\n\nclass CreateApplication extends Component {\n constructor() {\n super();\n this.state = {\n spDialog: false,\n };\n this.onSubmit = this.onSubmit.bind(this);\n this.closeDialog = this.closeDialog.bind(this);\n }\n\n componentDidMount() {\n ServiceProfileStore.list(this.props.match.params.organizationID, 0, 0, 0, resp => {\n if (resp.totalCount === \"0\") {\n this.setState({\n spDialog: true,\n });\n }\n });\n }\n\n closeDialog() {\n this.setState({\n spDialog: false,\n });\n }\n\n onSubmit(application) {\n let app = application;\n app.organizationID = this.props.match.params.organizationID;\n\n ApplicationStore.create(app, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}`);\n });\n }\n\n render() {\n return(\n \n \n Add a service-profile?\n \n \n The selected organization does not have a service-profile yet.\n A service-profile connects an organization to a network-server and defines the features that an organization can use on this network-server.\n \n \n Would you like to create a service-profile?\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 withStyles(styles)(withRouter(CreateApplication));\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler, errorHandlerIgnoreNotFoundWithCallback } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\nclass AppDeviceGroupStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/appDeviceGroup.swagger.json\", sessionStore.getClientOpts());\n }\n\n get(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceGroupService.AppDeviceGroupService_Get({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n list(applicationID, limit, offset, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceGroupService.AppDeviceGroupService_List({\n applicationId: applicationID,\n limit: limit,\n offset: offset,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n create(appDeviceGroup, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceGroupService.AppDeviceGroupService_Create({\n body: {\n appDeviceGroup: appDeviceGroup,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n update(appDeviceGroup, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceGroupService.AppDeviceGroupService_Update({\n \"appDeviceGroup.id\": appDeviceGroup.id,\n body: {\n appDeviceGroup: appDeviceGroup,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n delete(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceGroupService.AppDeviceGroupService_Delete({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n pause(id, pause, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceGroupService.AppDeviceGroupService_Pause({\n id: id,\n body: {\n pause: pause,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(pause?\"paused\":\"started\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"app device type has been \" + action,\n },\n });\n }\n}\n\nconst appDeviceGroupStore = new AppDeviceGroupStore();\nexport default appDeviceGroupStore;\n","import React, { Component } from \"react\";\nimport { withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { CSVLink } from 'react-csv';\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\n// import FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Datetime from 'react-datetime';\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\n\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport Button from \"@material-ui/core/Button\";\n\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\n// import SettingsIcon from \"@material-ui/icons/Settings\";\n\nimport ApplicationStore from \"../../stores/ApplicationStore\";\n// import DeviceStore from \"../../stores/DeviceStore\";\nimport AppDeviceStore from \"../../stores/AppDeviceStore\";\nimport AppDeviceGroupStore from \"../../stores/AppDeviceGroupStore\";\nimport AppItemStore from \"../../stores/AppItemStore\";\nimport UpPacketStore from \"../../stores/UpPacketStore\";\nimport UpPacketsLog from \"../../components/UpPacketsLog\";\nimport moment from \"moment\";\nimport { Typography } from \"@material-ui/core\";\nimport { styles } from '../../styles/aircom-styles';\n\nclass ApplicationUplinks extends Component {\n constructor(props) {\n super(props);\n\n const timeLoText = moment().subtract(1, 'day').startOf('day').format();\n const timeHiText = moment().add(1,'day').startOf('day').format();\n\n this.state = {\n // selectedDevices: [\"\"],\n // selectedFields: [\"\"],\n devices: null,\n deviceFilter: \"\",\n deviceGroups: null,\n deviceGroupFilter: 0,\n appItems: null,\n timeLoText,\n timeHiText,\n timeLoInvalid: false,\n timeHiInvalid: false,\n csvData: [],\n cacheCounter: 0,\n exportingData: false,\n };\n\n this.csvLink = React.createRef();\n this.downloadData = this.downloadData.bind(this);\n this.handleChangeDeviceGroup = this.handleChangeDeviceGroup.bind(this);\n this.handleChangeDevice = this.handleChangeDevice.bind(this);\n this.handleChangeTimeLo = this.handleChangeTimeLo.bind(this);\n this.handleChangeTimeHi = this.handleChangeTimeHi.bind(this);\n this.forceUpdate = this.forceUpdate.bind(this);\n }\n\n componentDidMount() {\n const {applicationID} = this.props.match.params;\n ApplicationStore.get(applicationID, appResp => {\n AppDeviceGroupStore.list(applicationID, 999, 0, devGroupResp => {\n //NOTE: appDeviceGroupID: 0 means no group filter\n AppDeviceStore.list(applicationID, 0, 999, 0, deviceResp => {\n const devices = deviceResp.result;\n this.setState({\n application: appResp.application,\n deviceGroups: devGroupResp.result,\n deviceGroupFilter: 0,\n devices,\n deviceFilter: \"\",\n });\n });\n /*DeviceStore.list({applicationID, limit: 999, offset: 0}, deviceResp => {\n const devices = deviceResp.result;\n this.setState({\n application: appResp,\n deviceGroups: devGroupResp.result,\n deviceGroupFilter: 0,\n devices,\n deviceFilter: \"\",\n });\n });*/\n });\n });\n\n AppItemStore.list(applicationID, 100, 0, (resp) => {\n this.setState({appItems: resp.result});\n })\n }\n\n // componentWillUnmount() {\n // SessionStore.removeListener(\"change\", this.setIsAdmin);\n // }\n\n handleChangeDeviceGroup(event) {\n const deviceGroupFilter = event.target.value === \"all\" ? 0 : Number(event.target.value);\n const applicationID = this.state.application.id;\n AppDeviceStore.list(applicationID, deviceGroupFilter, 999, 0, deviceResp => {\n const devices = deviceResp.result;\n this.setState({\n devices,\n deviceGroupFilter,\n deviceFilter: \"\",\n });\n });\n }\n\n handleChangeDevice(event) {\n // const deviceFilter = event.target.value ? event.target.value : null;\n let deviceFilter = event.target.value === \"all\" ? \"\" : event.target.value;\n this.setState({deviceFilter});\n }\n\n handleChangeTimeLo(newTimeLo) {\n if (typeof newTimeLo === 'string' || newTimeLo instanceof String) {\n this.setState({ timeLoInvalid: true });\n return;\n }\n\n // We know timeLo is valid moment\n const timeLoInvalid = false;\n let timeLo = moment(newTimeLo);\n let timeHi = moment(this.state.timeHiText);\n if (timeLo.diff(timeHi) > 0) {\n timeHi = timeLo.add(1, 'day');\n }\n // const {deviceFilter} = this.state;\n this.setState({ timeLoText: timeLo.format(), timeHiText: timeHi.format(), timeLoInvalid });\n // this.refreshStateItems({ deviceFilter, timeLo, timeHi, timeLoInvalid });\n // this.props.fetchQueryData({ deviceNames: selectedDevices, timeLo: timeLo.valueOf(), timeHi: timeHi.valueOf()});\n }\n\n handleChangeTimeHi(newTimeHi) {\n if (typeof newTimeHi === 'string' || newTimeHi instanceof String) {\n this.setState({ timeHiInvalid: true });\n return;\n }\n\n const timeHiInvalid = false;\n let timeHi = moment(newTimeHi);\n let timeLo = moment(this.state.timeLoText);\n if (timeLo.diff(timeHi) > 0) {\n timeLo = timeHi.subtract(1, 'day');\n }\n // const {deviceFilter} = this.state; \n this.setState({ timeLoText: timeLo.format(), timeHiText: timeHi.format(), timeHiInvalid });\n // this.refreshStateItems({ deviceFilter, timeLo, timeHi,timeHiInvalid});\n // this.props.fetchQueryData({ deviceNames: selectedDevices, timeLo: timeLo.valueOf(), timeHi: timeHi.valueOf()});\n }\n\n forceUpdate() {\n // Passed as property to uplink packets to force refresh\n const {cacheCounter} = this.state;\n this.setState({cacheCounter: cacheCounter + 1 });\n }\n\n downloadData() {\n // See https://www.cluemediator.com/loading-data-asynchronously-and-download-csv-using-react-csv\n const CSV_MAX_ROWS = 99999;\n\n let {applicationID, timeLoText, timeHiText, deviceFilter, deviceGroupFilter} = this.state;\n const devEUI = deviceFilter ? deviceFilter.devEui : \"\";\n\n this.setState({exportingData: true}, () => {\n const csvFileName = 'Data_' + moment().format('YYYYMMDD_HHmmss') + '.csv';\n UpPacketStore.list(CSV_MAX_ROWS, 0, applicationID, deviceGroupFilter, timeLoText, timeHiText, devEUI, (resp) => {\n const totalCount = resp.totalCount || 0;\n if (totalCount < 1) {\n // Show message to user?\n this.setState({exportingData: false});\n return;\n }\n\n // Each row has values array, add value as {appItem1: value}\n const csvData = resp.result.map((row) => {\n const valueKeys = Object.fromEntries(\n row.values.map((value) => {\n const appItemId = value.appItemId;\n return [\n 'appItemId' + appItemId.toString(),\n value.value,\n ];\n }),\n );\n // CARE: dates will be converted from utc to local time (e.g. may add hour for BST)\n row.receivedAt = moment(row.receivedAt).format('YYYY-MM-DD HH:mm:ss');\n row.decodedAt = moment(row.decodedAt).format('YYYY-MM-DD HH:mm:ss');\n row.values = valueKeys;\n return row;\n });\n \n let csvHeaders = [\n { label: 'ID', key: 'id'},\n { label: 'Received At', key: 'receivedAt'},\n { label: 'Device ID', key: 'appDeviceId'},\n { label: 'Device Name', key: 'deviceName'},\n { label: 'Device EUID', key: 'devEui'},\n { label: 'Payload', key: 'payload'},\n { label: 'Decoded At', key: 'decodedAt'},\n ];\n // Add app items\n this.state.appItems.forEach((value) => {\n csvHeaders.push({ label: value.name, key: 'values.appItemId' + value.id});\n })\n\n this.setState({csvData, csvHeaders, csvFileName}, () => {\n // setTimeout needed or else latest data not downloaded\n setTimeout(() => {\n this.csvLink.current.link.click();\n this.setState({exportingData: false});\n });\n });\n });\n })\n }\n\n render() {\n if (this.state.application === undefined || !this.state.devices || !this.state.appItems) {\n return(
);\n }\n const {\n appItems,\n application,\n cacheCounter,\n csvData,\n csvHeaders,\n csvFileName,\n exportingData,\n devices,\n deviceFilter,\n deviceGroups,\n deviceGroupFilter,\n timeLoText,\n timeHiText,\n timeLoInvalid,\n timeHiInvalid\n } = this.state;\n\n const {classes} = this.props;\n const devEUI = deviceFilter ? deviceFilter.devEui : \"\";\n \n const showDevGroupFilter = Array.isArray(deviceGroups) && (deviceGroups.length > 1);\n // let filteredDevices = devices.filter((v) => (deviceGroupFilter !== -1) || (v.groupId === deviceGroupFilter));\n\n let timeLoClass = classes.rdtInput;\n if (timeLoInvalid) {\n timeLoClass = classes.rdtInputError;\n }\n\n let timeHiClass = classes.rdtInput;\n if (timeHiInvalid) {\n timeHiClass = classes.rdtInputError;\n }\n let titleBarButtons = [];\n if (!exportingData) {\n titleBarButtons.push(\n }\n label=\"Export Data\"\n onClick={this.downloadData}\n disabled={exportingData}\n />\n )\n } else {\n titleBarButtons.push(\n \n )\n }\n\n return(\n \n \n \n \n \n {devices && (\n \n \n \n {showDevGroupFilter && (\n \n \n \n \n )}\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n Device Group: \n \n \n \n All\n {deviceGroups.map(deviceGroup => (\n {deviceGroup.name}\n ))}\n \n
\n \n Device: \n \n \n (deviceFilter === \"\" ? \"All\" : deviceFilter)}\n onChange={this.handleChangeDevice}\n inputProps={{\n name: 'device-name',\n id: 'device-name',\n }}\n >\n All\n {devices.map(device => (\n {device.name}\n ))}\n \n
\n \n From: \n \n \n \n
\n \n To: \n \n \n \n \n }\n onClick={this.forceUpdate}\n >\n Refresh Now\n \n\n
\n
\n )}\n
\n \n \n \n {appItems &&\n
\n \n Download Data\n ;\n
\n }\n
\n );\n }\n}\n\nApplicationUplinks.propTypes = {\n classes: PropTypes.any.isRequired,\n match: PropTypes.any.isRequired, \n}\n\nexport default withStyles(styles)(withRouter(ApplicationUplinks));\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Route, Link, withRouter } from \"react-router-dom\";\r\n\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport Tab from '@material-ui/core/Tab';\r\n\r\nimport TitleBar from \"../../components/TitleBar\";\r\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\r\n\r\nimport ApplicationStore from \"../../stores/ApplicationStore\";\r\nimport AppDeviceGroupStore from \"../../stores/AppDeviceGroupStore\";\r\nimport SessionStore from \"../../stores/SessionStore\";\r\nimport AccessDenied from \"../../components/AccessDenied\";\r\nimport AircomOutput from \"./AircomOutput\"\r\nimport ApplicationDownlinksDetails from \"./ApplicationDownlinksDetails\";\r\nimport PvControl from \"./PvControl\";\r\nimport { Typography } from \"@material-ui/core\";\r\n\r\nconst CONTROL_TYPE_STEP = 1;\r\nconst CONTROL_TYPE_PV = 2;\r\n\r\nconst styles = {\r\n};\r\n\r\nclass ApplicationDownlinks extends Component {\r\n constructor() {\r\n super();\r\n this.state = {\r\n tab: 0,\r\n admin: false,\r\n aircomOutput: false,\r\n };\r\n\r\n this.onChangeTab = this.onChangeTab.bind(this);\r\n this.setIsAdmin = this.setIsAdmin.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n SessionStore.on(\"change\", this.setIsAdmin);\r\n this.setIsAdmin(); \r\n ApplicationStore.get(this.props.match.params.applicationID, resp => {\r\n this.setState({\r\n application: resp,\r\n });\r\n });\r\n\r\n AppDeviceGroupStore.list(this.props.match.params.applicationID, 999, 0, resp => {\r\n let showStepControl = false;\r\n let showPVControl = false;\r\n let showTabs = false;\r\n\r\n resp.result.every((group) => {\r\n if (group.outputControlType == CONTROL_TYPE_STEP) {\r\n showStepControl = true;\r\n showTabs = true;\r\n } else if (group.outputControlType == CONTROL_TYPE_PV) {\r\n showPVControl = true;\r\n showTabs = true;\r\n }\r\n return !(showStepControl && showPVControl); // Only stop if both are true\r\n });\r\n\r\n this.setState({\r\n showStepControl,\r\n showPVControl,\r\n showTabs\r\n });\r\n });\r\n\r\n this.locationToTab();\r\n }\r\n\r\n componentWillUnmount() {\r\n SessionStore.removeListener(\"change\", this.setIsAdmin); \r\n }\r\n \r\n componentDidUpdate(oldProps) {\r\n if (this.props === oldProps) {\r\n return;\r\n }\r\n\r\n this.locationToTab();\r\n }\r\n\r\n setIsAdmin() {\r\n this.setState({\r\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationAdmin(this.props.match.params.organizationID),\r\n });\r\n }\r\n\r\n locationToTab() {\r\n let tab = 0;\r\n\r\n if (window.location.href.endsWith(\"/pv-control\")) {\r\n tab = 1;\r\n } else if (window.location.href.endsWith(\"/step-control\")) {\r\n tab = 2;\r\n }\r\n\r\n this.setState({\r\n tab: tab,\r\n });\r\n }\r\n\r\n onChangeTab(e, v) {\r\n this.setState({\r\n tab: v,\r\n });\r\n }\r\n\r\n render() {\r\n if (this.state.admin !== true) {\r\n return ;\r\n } \r\n if (this.state.application === undefined) {\r\n return(
);\r\n }\r\n const {showTabs, showPVControl, showStepControl} = this.state;\r\n\r\n return(\r\n \r\n \r\n \r\n \r\n {!showTabs && (\r\n \r\n \r\n No device types are currently configured to use downlinks.\r\n \r\n \r\n )}\r\n {showTabs && (\r\n \r\n \r\n \r\n {showPVControl &&\r\n \r\n }\r\n {showStepControl &&\r\n \r\n }\r\n \r\n \r\n )}\r\n {showTabs && (\r\n \r\n } />\r\n } />\r\n } />\r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nApplicationDownlinks.propTypes = {\r\n classes: PropTypes.any.isRequired,\r\n match: PropTypes.any.isRequired,\r\n}\r\n\r\nexport default withStyles(styles)(withRouter(ApplicationDownlinks));\r\n","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Button from '@material-ui/core/Button';\n\nimport moment from \"moment\";\nimport Plus from \"mdi-material-ui/Plus\";\n// import PowerPlug from \"mdi-material-ui/PowerPlug\";\n\nimport TableCellLink from \"../../components/TableCellLink\";\nimport DataTable from \"../../components/DataTable\";\nimport DeviceAdmin from \"../../components/DeviceAdmin\";\nimport DeviceStore from \"../../stores/DeviceStore\";\nimport theme from \"../../theme\";\n\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n};\n\n\nclass ListDevices extends Component {\n constructor() {\n super();\n this.getPage = this.getPage.bind(this);\n this.getRow = this.getRow.bind(this);\n }\n\n getPage(limit, offset, callbackFunc) {\n DeviceStore.list({\n applicationID: this.props.match.params.applicationID,\n limit: limit,\n offset: offset,\n }, callbackFunc);\n }\n\n getRow(obj) {\n let lastseen = \"n/a\";\n // let margin = \"n/a\";\n // let battery = \"n/a\";\n\n if (obj.lastSeenAt !== undefined && obj.lastSeenAt !== null) {\n lastseen = moment(obj.lastSeenAt).fromNow();\n }\n\n // if (!obj.deviceStatusExternalPowerSource && !obj.deviceStatusBatteryLevelUnavailable) {\n // battery = `${obj.deviceStatusBatteryLevel}%`\n // }\n\n // if (obj.deviceStatusExternalPowerSource) {\n // battery = ;\n // }\n\n // if (obj.deviceStatusMargin !== undefined && obj.deviceStatusMargin !== 256) {\n // margin = `${obj.deviceStatusMargin} dB`;\n // }\n\n return(\n \n {lastseen}\n {obj.name}\n {obj.devEUI}\n {/* {obj.deviceProfileName}\n {margin}\n {battery} */}\n \n );\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n Last seen\n Device name\n Device EUI\n {/* Device profile\n Link margin\n Battery */}\n \n }\n\n getPage={this.getPage}\n getRow={this.getRow}\n />\n \n \n );\n }\n}\n\nListDevices.propTypes = {\n match: PropTypes.any.isRequired,\n classes: PropTypes.any.isRequired\n}\n\nexport default withStyles(styles)(ListDevices);\n","import React, { Component } from \"react\";\n// import { Route, withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\n\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport ListDevices from \"../devices/ListDevices\";\n\n// import theme from \"../../theme\";\n\nconst styles = {\n // tabs: {\n // borderBottom: \"1px solid \" + theme.palette.divider,\n // height: \"48px\",\n // overflow: \"visible\",\n // },\n};\n\n\nclass ApplicationDevices extends Component {\n constructor() {\n super();\n this.state = {\n tab: 0,\n admin: false,\n };\n\n this.setIsAdmin = this.setIsAdmin.bind(this);\n }\n\n componentDidMount() {\n ApplicationStore.get(this.props.match.params.applicationID, resp => {\n this.setState({\n application: resp,\n });\n });\n\n SessionStore.on(\"change\", this.setIsAdmin);\n\n this.setIsAdmin();\n this.locationToTab();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n }\n\n componentDidUpdate(oldProps) {\n if (this.props === oldProps) {\n return;\n }\n\n this.locationToTab();\n }\n\n setIsAdmin() {\n this.setState({\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationAdmin(this.props.match.params.organizationID),\n });\n }\n\n deleteApplication() {\n if (window.confirm(\"Are you sure you want to delete this application? This will also delete all devices part of this application.\")) {\n ApplicationStore.delete(this.props.match.params.applicationID, () => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications`);\n });\n }\n }\n\n locationToTab() {\n let tab = 0;\n\n if (window.location.href.match(/.*\\/integrations.*/g)) {\n tab = 2;\n } else if (window.location.href.endsWith(\"/edit\")) {\n tab = 1;\n }\n\n this.setState({\n tab: tab,\n });\n }\n\n onChangeTab(e, v) {\n this.setState({\n tab: v,\n });\n }\n\n render() {\n if (this.state.application === undefined) {\n return(
);\n }\n\n return(\n \n \n \n \n\n \n \n \n \n );\n }\n}\n\nApplicationDevices.propTypes = {\n match: PropTypes.any.isRequired,\n history: PropTypes.any.isRequired\n}\n\nexport default withStyles(styles)(ApplicationDevices);\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport ApplicationForm from \"./ApplicationForm\";\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\n\nclass UpdateApplication extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n onSubmit(application) {\n ApplicationStore.update(application, () => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${application.id}`);\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nUpdateApplication.propTypes = {\n application: PropTypes.any.isRequired,\n classes: PropTypes.any.isRequired,\n history: PropTypes.any.isRequired,\n match: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(withRouter(UpdateApplication));\n","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Button from '@material-ui/core/Button';\n\nimport Plus from \"mdi-material-ui/Plus\";\n\nimport TableCellLink from \"../../components/TableCellLink\";\nimport DataTable from \"../../components/DataTable\";\nimport DeviceAdmin from \"../../components/DeviceAdmin\";\nimport AppItemStore from \"../../stores/AppItemStore\";\nimport theme from \"../../theme\";\n\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n};\n\n\nclass ListApplicationItems extends Component {\n constructor() {\n super();\n this.getPage = this.getPage.bind(this);\n this.getRow = this.getRow.bind(this);\n }\n\n getPage(limit, offset, callbackFunc) {\n AppItemStore.list(this.props.application.id, limit, offset, callbackFunc);\n }\n\n getRow(obj) {\n return(\n \n {obj.name}\n {obj.abbreviation}\n {obj.description}\n {obj.numberFormat}\n {obj.sortOrder}\n {obj.showOnDashboard ? 'Y' : 'N'}\n \n );\n }\n\n render() {\n return(\n \n \n \n Name\n Abbreviation\n Description\n Display Format\n Sort Order\n On Dashboard\n \n }\n getPage={this.getPage}\n getRow={this.getRow}\n />\n \n \n \n \n \n \n \n );\n }\n}\n\nListApplicationItems.propTypes = {\n application: PropTypes.object.isRequired,\n // match: PropTypes.any.isRequired,\n classes: PropTypes.any.isRequired\n}\n\nexport default withStyles(styles)(ListApplicationItems);\n","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport { withStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardMedia from '@material-ui/core/CardMedia';\nimport Button from '@material-ui/core/Button';\nimport Typography from '@material-ui/core/Typography';\n\nimport ApplicationStore from \"../../../stores/ApplicationStore\";\n\nconst styles = {\n media: {\n paddingTop: '35%',\n backgroundSize: 'contain',\n },\n};\n\n\nclass HTTPCard extends Component {\n delete = () => {\n if (window.confirm(\"Are you sure you want to remove the HTTP integration?\")) {\n ApplicationStore.deleteHTTPIntegration(this.props.applicationID, () => {});\n }\n }\n\n render() {\n return (\n \n \n \n \n HTTP\n \n \n The HTTP integration forwards events to a user-configurable endpoint as POST requests.\n \n \n \n {!this.props.add && \n \n }\n {!this.props.add && }\n {!!this.props.add && \n \n }\n \n \n );\n }\n}\n\n\nexport default withStyles(styles)(HTTPCard);\n","import React, { Component } from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\n\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport theme from \"../../theme\";\n\n//import GCPPubSubCard from \"./integrations/GCPPubSub\";\nimport HTTPCard from \"./integrations/HTTP\";\n/*import AzureServiceBusCard from \"./integrations/AzureServiceBusCard\";\nimport AWSSNSCard from \"./integrations/AWSSNSCard\";\nimport InfluxDBCard from \"./integrations/InfluxDBCard\";\nimport ThingsboardCard from \"./integrations/ThingsboardCard\";\nimport LoRaCloudCard from \"./integrations/LoRaCloudCard\";\nimport MyDevicesCard from \"./integrations/MyDevicesCard\";\nimport PilotThingsCard from \"./integrations/PilotThingsCard\";\nimport MQTTCard from \"./integrations/MQTTCard\";*/\n\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n};\n\n\nclass ListIntegrations extends Component {\n constructor() {\n super();\n\n this.state = {\n configured: [],\n available: [],\n };\n }\n\n componentDidMount() {\n ApplicationStore.on(\"integration.delete\", () => {\n this.loadIntegrations(this.props.application.organizationID, this.props.application.id);\n });\n\n this.loadIntegrations(this.props.application.organizationID, this.props.application.id);\n }\n\n componentWillUnmount() {\n ApplicationStore.removeAllListeners(\"integration.delete\");\n }\n\n componentDidUpdate(prevProps) {\n if (this.props === prevProps) {\n return;\n }\n\n this.loadIntegrations(this.props.application.organizationID, this.props.application.id);\n }\n\n loadIntegrations = (organizationID, applicationID) => {\n ApplicationStore.listIntegrations(applicationID, (resp) => {\n let configured = [];\n let available = [];\n const includes = (integrations, kind) => {\n for (let x of integrations) {\n if (x.kind === kind) {\n return true;\n } \n }\n\n return false;\n };\n\n // AWS\n /* if(includes(resp.result, \"AWS_SNS\")) {\n configured.push();\n } else {\n available.push();\n }\n\n // Azure\n if(includes(resp.result, \"AZURE_SERVICE_BUS\")) {\n configured.push();\n } else {\n available.push();\n }\n\n // GCP\n if(includes(resp.result, \"GCP_PUBSUB\")) {\n configured.push();\n } else {\n available.push();\n } */\n\n // HTTP\n if(includes(resp.result, \"HTTP\")) {\n configured.push();\n } else {\n available.push();\n }\n\n // InfluxDB\n /* if(includes(resp.result, \"INFLUXDB\")) {\n configured.push();\n } else {\n available.push();\n }\n\n // MyDevices\n if(includes(resp.result, \"MYDEVICES\")) {\n configured.push();\n } else {\n available.push();\n }\n\n // Global MQTT\n if(includes(resp.result, \"MQTT_GLOBAL\")) {\n configured.push();\n }\n\n // Pilot Things\n if (includes(resp.result, \"PILOT_THINGS\")) {\n configured.push();\n } else {\n available.push();\n }\n\n // Semtech LoRa Cloud\n if(includes(resp.result, \"LORACLOUD\")) {\n configured.push();\n } else {\n available.push();\n }\n\n // Thingsboard\n if(includes(resp.result, \"THINGSBOARD\")) {\n configured.push();\n } else {\n available.push();\n } */\n\n this.setState({\n configured: configured,\n available: available,\n });\n });\n } \n\n render() {\n let configured = this.state.configured.map((row, i) => {row});\n let available = this.state.available.map((row, i) => {row});\n\n return(\n \n {configured}\n {available}\n \n );\n }\n}\n\nexport default withStyles(styles)(ListIntegrations);\n","import React from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport TextField from '@material-ui/core/TextField';\nimport FormHelperText from \"@material-ui/core/FormHelperText\";\nimport IconButton from '@material-ui/core/IconButton';\nimport Button from \"@material-ui/core/Button\";\n\nimport Delete from \"mdi-material-ui/Delete\";\n\nimport FormComponent from \"../../../classes/FormComponent\";\nimport Form from \"../../../components/Form\";\nimport AutocompleteSelect from \"../../../components/AutocompleteSelect\";\nimport theme from \"../../../theme\";\n\n\nconst styles = {\n delete: {\n marginTop: 3 * theme.spacing(1),\n },\n formLabel: {\n fontSize: 12,\n },\n};\n\n\nclass HTTPIntegrationHeaderForm extends FormComponent {\n onChange(e) {\n super.onChange(e);\n this.props.onChange(this.props.index, this.state.object);\n }\n\n onDelete = (e) => {\n e.preventDefault();\n this.props.onDelete(this.props.index);\n }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n return(\n \n \n \n \n \n \n \n \n \n \n \n \n \n ); \n }\n}\n\n\nHTTPIntegrationHeaderForm = withStyles(styles)(HTTPIntegrationHeaderForm);\n\n\nclass HTTPIntegrationForm extends FormComponent {\n addHeader = (e) => {\n e.preventDefault();\n\n let object = this.state.object;\n if(object.headers === undefined) {\n object.headers = [{}];\n } else {\n object.headers.push({});\n }\n\n this.setState({\n object: object,\n });\n }\n\n onDeleteHeader = (index) => {\n let object = this.state.object;\n object.headers.splice(index, 1);\n\n this.setState({\n object: object,\n });\n }\n\n onChangeHeader = (index, header) => {\n let object = this.state.object;\n object.headers[index] = header;\n this.setState({\n object: object,\n });\n }\n\n getMarshalerOptions = (search, callbackFunc) => {\n const marshalerOptions = [\n {value: \"JSON\", label: \"JSON\"},\n {value: \"PROTOBUF\", label: \"Protocol Buffers\"},\n {value: \"JSON_V3\", label: \"JSON (legacy, will be deprecated)\"},\n ];\n\n callbackFunc(marshalerOptions);\n }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n let headers = [];\n if (this.state.object.headers !== undefined) {\n headers = this.state.object.headers.map((h, i) => );\n }\n\n return(\n
\n \n Payload marshaler\n \n This defines how the payload will be encoded.\n \n \n Headers\n {headers}\n \n \n \n Endpoints\n \n {!!this.state.object.uplinkDataURL && }\n {!!this.state.object.joinNotificationURL && }\n {!!this.state.object.statusNotificationURL && }\n {!!this.state.object.locationNotificationURL && }\n {!!this.state.object.ackNotificationURL && }\n {!!this.state.object.txAckNotificationURL && }\n {!!this.state.object.integrationNotificationURL && }\n {!!this.state.object.errorNotificationURL && }\n \n
\n );\n }\n}\n\n\nexport default HTTPIntegrationForm;\n","import React, { Component } from \"react\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardHeader from \"@material-ui/core/CardHeader\";\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport ApplicationStore from \"../../../stores/ApplicationStore\";\nimport HTTPIntegrationForm from \"./HTTPIntegrationForm\";\n\n\nclass CreateHTTPIntegration extends Component {\n onSubmit = (integration) => {\n let integr = integration;\n integr.applicationID = this.props.application.id;\n\n ApplicationStore.createHTTPIntegration(integr, resp => {\n this.props.history.push(`/organizations/${this.props.application.organizationID}/applications/${this.props.application.id}/integrations`);\n });\n } \n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default CreateHTTPIntegration;\n","import React, { Component } from \"react\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardHeader from \"@material-ui/core/CardHeader\";\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport ApplicationStore from \"../../../stores/ApplicationStore\";\nimport HTTPIntegrationForm from \"./HTTPIntegrationForm\";\n\n\nclass UpdateHTTPIntegration extends Component {\n constructor() {\n super();\n\n this.state = {};\n }\n\n onSubmit = (integration) => {\n let integr = integration;\n integr.applicationID = this.props.application.id;\n\n ApplicationStore.updateHTTPIntegration(integr, resp => {\n this.props.history.push(`/organizations/${this.props.application.organizationID}/applications/${this.props.application.id}/integrations`);\n });\n } \n\n componentDidMount() {\n ApplicationStore.getHTTPIntegration(this.props.application.id, (resp) => {\n this.setState({\n object: resp.integration,\n });\n });\n }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n return(\n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default UpdateHTTPIntegration;\n","import React, { Component } from \"react\";\nimport { Route, Link, withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\n\nimport Delete from \"mdi-material-ui/Delete\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\n// import TitleBarButton from \"../../components/TitleBarButton\";\n// import Admin from \"../../components/Admin\";\nimport Button from '@material-ui/core/Button';\n\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport AircomSystemStore from \"../../stores/AircomSystemStore\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport UpdateApplication from \"./UpdateApplication\";\nimport ListApplicationItems from \"./ListApplicationItems\";\nimport ListIntegrations from \"./ListIntegrations\";\nimport CreateHTTPIntegration from \"./integrations/CreateHTTPIntegration\";\nimport UpdateHTTPIntegration from \"./integrations/UpdateHTTPIntegration\";\n\nimport theme from \"../../theme\";\n\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n tabs: {\n borderBottom: \"1px solid \" + theme.palette.divider,\n height: \"48px\",\n overflow: \"visible\",\n },\n};\n\nclass ApplicationLayout extends Component {\n constructor() {\n super();\n this.state = {\n tab: 0,\n admin: false,\n };\n\n this.deleteApplication = this.deleteApplication.bind(this);\n this.locationToTab = this.locationToTab.bind(this);\n this.onChangeTab = this.onChangeTab.bind(this);\n this.setIsAdmin = this.setIsAdmin.bind(this);\n }\n\n componentDidMount() {\n ApplicationStore.get(this.props.match.params.applicationID, resp => {\n this.setState({\n application: resp,\n });\n });\n\n SessionStore.on(\"change\", this.setIsAdmin);\n\n this.setIsAdmin();\n this.locationToTab();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n }\n\n componentDidUpdate(oldProps) {\n if (this.props === oldProps) {\n return;\n }\n\n this.locationToTab();\n }\n\n setIsAdmin() {\n this.setState({\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationAdmin(this.props.match.params.organizationID),\n });\n }\n\n deleteApplication() {\n if (window.confirm(\"Are you sure you want to delete this application? This will also delete all devices part of this application.\")) {\n // Sidenav will detect deletion and deal with it\n AircomSystemStore.deleteApplication(this.props.match.params.applicationID, () => {});\n }\n }\n\n locationToTab() {\n let tab = 0;\n\n // If not admin, no tab will be selected so no need to check admin here\n if (window.location.href.endsWith(\"/details\")) {\n tab = 1;\n }\n\n if (window.location.href.includes(\"/integrations\")) {\n tab = 2;\n }\n\n this.setState({\n tab: tab,\n });\n }\n\n onChangeTab(e, v) {\n this.setState({\n tab: v,\n });\n }\n\n render() {\n if (this.state.application === undefined) {\n return(
);\n }\n const {admin} = this.state;\n const showDeleteButton = window.location.href.endsWith(\"/details\") && admin;\n\n return(\n \n \n // }\n // color=\"secondary\"\n // onClick={this.deleteApplication}\n // />\n // \n // }\n >\n \n \n \n \n \n {admin && }\n {admin && }\n \n \n\n \n {admin && } />}\n {admin && } /> }\n {admin && } />}\n {admin && } />}\n } />\n \n {showDeleteButton && (\n \n \n )}\n \n );\n }\n}\n\nApplicationLayout.propTypes = {\n classes: PropTypes.any.isRequired,\n history: PropTypes.any.isRequired,\n match: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(withRouter(ApplicationLayout));\n","import React, { Component } from \"react\";\nimport { withRouter } from \"react-router-dom\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\n\nimport EditIcon from \"@material-ui/icons/Edit\";\n// import SettingsIcon from \"@material-ui/icons/Settings\";\n\n\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport SessionStore from \"../../stores/SessionStore\";\n\n// import theme from \"../../theme\";\n\n\nconst styles = {\n};\n\n\nclass ApplicationEvents extends Component {\n constructor() {\n super();\n this.state = {\n tab: 0,\n admin: false,\n };\n\n }\n\n componentDidMount() {\n ApplicationStore.get(this.props.match.params.applicationID, resp => {\n this.setState({\n application: resp,\n });\n });\n\n SessionStore.on(\"change\", this.setIsAdmin);\n\n this.setIsAdmin();\n this.locationToTab();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n }\n\n componentDidUpdate(oldProps) {\n if (this.props === oldProps) {\n return;\n }\n\n this.locationToTab();\n }\n\n setIsAdmin() {\n this.setState({\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationAdmin(this.props.match.params.organizationID),\n });\n }\n\n deleteApplication() {\n if (window.confirm(\"Are you sure you want to delete this application? This will also delete all devices part of this application.\")) {\n ApplicationStore.delete(this.props.match.params.applicationID, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications`);\n });\n }\n }\n\n locationToTab() {\n let tab = 0;\n\n if (window.location.href.match(/.*\\/integrations.*/g)) {\n tab = 2;\n } else if (window.location.href.endsWith(\"/edit\")) {\n tab = 1;\n }\n\n this.setState({\n tab: tab,\n });\n }\n\n onChangeTab(e, v) {\n this.setState({\n tab: v,\n });\n }\n\n render() {\n if (this.state.application === undefined) {\n return(
);\n }\n\n return(\n \n }\n label=\"Button\"\n to={`/`}\n />,\n ]}\n >\n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(withRouter(ApplicationEvents));\n","import React from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport TextField from '@material-ui/core/TextField';\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Checkbox from '@material-ui/core/Checkbox';\n\nconst styles = {\n formLabel: {\n fontSize: 12,\n },\n};\n\n\nclass ApplicationItemForm extends FormComponent {\n constructor() {\n super();\n\n this.state = {};\n }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n return(\n \n
\n \n \n \n \n \n \n \n }\n />\n \n Show on dashboard\n
\n \n );\n }\n}\n\nexport default withStyles(styles)(ApplicationItemForm);\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\nimport ApplicationItemForm from \"./ApplicationItemForm\";\nimport AppItemStore from \"../../stores/AppItemStore\";\n// import DeviceStore from \"../../stores/DeviceStore\";\n// import DeviceForm from \"../devices/DeviceForm\";\n\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\n\nclass UpdateApplicationItem extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n onSubmit(applicationItem) {\n AppItemStore.update(applicationItem, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}`);\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(withRouter(UpdateApplicationItem));\n","import React, { Component } from \"react\";\nimport { Route, Switch, withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\n\nimport Delete from \"mdi-material-ui/Delete\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\n\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport AppItemStore from \"../../stores/AppItemStore\";\n\nimport UpdateApplicationItem from \"./UpdateApplicationItem\";\n\nimport Back from \"mdi-material-ui/ArrowLeft\";\n\nconst styles = {\n};\n\nclass ApplicationItemLayout extends Component {\n constructor() {\n super();\n this.state = {\n admin: false,\n };\n\n this.deleteApplicationItem = this.deleteApplicationItem.bind(this);\n this.setIsAdmin = this.setIsAdmin.bind(this);\n }\n\n componentDidMount() {\n ApplicationStore.get(this.props.match.params.applicationID, resp => {\n this.setState({\n application: resp,\n });\n });\n\n AppItemStore.get(this.props.match.params.applicationItemID, resp => {\n this.setState({\n applicationItem: resp.appItem,\n });\n });\n\n // DeviceStore.on(\"update\", this.getDevice);\n SessionStore.on(\"change\", this.setIsAdmin);\n\n this.setIsAdmin();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n // DeviceStore.removeListener(\"update\", this.getDevice);\n }\n\n // componentDidUpdate(oldProps) {\n // if (this.props === oldProps) {\n // return;\n // }\n\n // this.locationToTab();\n // }\n\n setIsAdmin() {\n this.setState({\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationDeviceAdmin(this.props.match.params.organizationID),\n });\n }\n\n deleteApplicationItem() {\n if (window.confirm(\"Are you sure you want to delete this item?\")) {\n AppItemStore.delete(this.props.match.params.applicationItemID, () => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}`);\n });\n }\n }\n\n render() {\n if (this.state.application === undefined || this.state.applicationItem === undefined) {\n return(
);\n }\n const {admin} = this.state;\n const titleButtons = admin ? [\n }\n color=\"primary\"\n to={`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}`}\n />,\n }\n color=\"secondary\"\n onClick={this.deleteApplicationItem}\n />\n ] : null;\n\n\n return(\n \n \n \n \n\n \n \n } /> \n \n \n \n );\n }\n}\n\nApplicationItemLayout.propTypes = {\n history: PropTypes.any.isRequired,\n match: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(withRouter(ApplicationItemLayout));\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport AppItemStore from \"../../stores/AppItemStore\";\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport ApplicationItemForm from \"../../views/applications/ApplicationItemForm\";\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\n\nclass CreateApplicationItem extends Component {\n constructor() {\n super();\n this.state = {};\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n componentDidMount() {\n ApplicationStore.get(this.props.match.params.applicationID, resp => {\n this.setState({\n application: resp,\n });\n });\n }\n\n onSubmit(item) {\n let newItem = item;\n newItem.applicationID = Number(this.props.match.params.applicationID);\n\n AppItemStore.create(newItem, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}`);\n });\n }\n\n render() {\n if (this.state.application === undefined) {\n return(
);\n }\n\n return(\n \n \n \n \n\n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(withRouter(CreateApplicationItem));\n","import React from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport TextField from '@material-ui/core/TextField';\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport FormHelperText from \"@material-ui/core/FormHelperText\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport Button from \"@material-ui/core/Button\";\nimport Typography from \"@material-ui/core/Typography\";\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\nimport KVForm from \"../../components/KVForm\";\nimport EUI64Field from \"../../components/EUI64Field\";\nimport AutocompleteSelect from \"../../components/AutocompleteSelect\";\nimport DeviceProfileStore from \"../../stores/DeviceProfileStore\";\n\nconst styles = {\n formLabel: {\n fontSize: 12,\n },\n};\n\n\nclass DeviceForm extends FormComponent {\n constructor() {\n super();\n this.getDeviceProfileOption = this.getDeviceProfileOption.bind(this);\n this.getDeviceProfileOptions = this.getDeviceProfileOptions.bind(this);\n\n this.state = {\n tab: 0,\n variables: [],\n tags: [],\n };\n }\n\n componentDidMount() {\n super.componentDidMount();\n\n this.setKVArrays(this.props.object || {});\n }\n\n componentDidUpdate(prevProps) {\n super.componentDidUpdate(prevProps);\n\n if (prevProps.object !== this.props.object) {\n this.setKVArrays(this.props.object || {});\n }\n }\n\n setKVArrays = (props) => {\n let variables = [];\n let tags = [];\n\n if (props.variables !== undefined) {\n for (let key in props.variables) {\n variables.push({key: key, value: props.variables[key]});\n }\n }\n\n if (props.tags !== undefined) {\n for (let key in props.tags) {\n tags.push({key: key, value: props.tags[key]});\n }\n }\n\n this.setState({\n variables: variables,\n tags: tags,\n });\n }\n\n getDeviceProfileOption(id, callbackFunc) {\n DeviceProfileStore.get(id, resp => {\n callbackFunc({label: resp.deviceProfile.name, value: resp.deviceProfile.id});\n });\n }\n\n getDeviceProfileOptions(search, callbackFunc) {\n DeviceProfileStore.list(0, this.props.match.params.applicationID, 999, 0, resp => {\n const options = resp.result.map((dp) => {return {label: dp.name, value: dp.id}});\n callbackFunc(options);\n });\n }\n\n onTabChange = (e, v) => {\n this.setState({\n tab: v,\n });\n }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n const variables = this.state.variables.map((obj, i) => );\n const tags = this.state.tags.map((obj, i) => );\n\n return(\n \n \n \n \n \n \n\n {this.state.tab === 0 &&
\n \n \n {!this.props.update && }\n \n Device-profile\n \n \n \n \n \n }\n />\n \n \n Note that disabling the frame-counter validation will compromise security as it enables people to perform replay-attacks.\n \n \n \n \n \n }\n />\n \n \n ChirpStack Network Server will ignore received uplink frames and join-requests from disabled devices.\n \n \n
}\n\n {this.state.tab === 1 &&
\n \n \n Variables can be used to substitute placeholders in for example integrations, e.g. in case an integration requires the configuration of a device specific token.\n \n {variables}\n \n \n
}\n\n {this.state.tab === 2 &&
\n \n \n Tags can be used as device filters and are exposed on events as additional meta-data for aggregation.\n \n {tags}\n \n \n
}\n \n );\n }\n}\n\nexport default withStyles(styles)(DeviceForm);\n","import React, { Component } from \"react\";\nimport { withRouter, Link } from 'react-router-dom';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Button from \"@material-ui/core/Button\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\n\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport DeviceProfileStore from \"../../stores/DeviceProfileStore\";\nimport DeviceStore from \"../../stores/DeviceStore\";\nimport DeviceForm from \"./DeviceForm\";\n\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\n\nclass CreateDevice extends Component {\n constructor() {\n super();\n this.state = {\n dpDialog: false,\n };\n this.state = {};\n this.onSubmit = this.onSubmit.bind(this);\n this.closeDialog = this.closeDialog.bind(this);\n }\n\n componentDidMount() {\n ApplicationStore.get(this.props.match.params.applicationID, resp => {\n this.setState({\n application: resp,\n });\n });\n\n DeviceProfileStore.list(0, this.props.match.params.applicationID, 0, 0, resp => {\n if (resp.totalCount === \"0\") {\n this.setState({\n dpDialog: true,\n });\n }\n });\n }\n\n closeDialog() {\n this.setState({\n dpDialog: false,\n });\n }\n\n onSubmit(device) {\n let dev = device;\n dev.applicationID = this.props.match.params.applicationID;\n\n DeviceStore.create(dev, resp => {\n DeviceProfileStore.get(dev.deviceProfileID, resp => {\n if (resp.deviceProfile.supportsJoin) {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}/devices/${dev.devEUI}/keys`);\n } else {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}/devices/${dev.devEUI}/activation`);\n }\n });\n\n });\n }\n\n render() {\n if (this.state.application === undefined) {\n return(
);\n }\n\n return(\n \n \n Add a device-profile?\n \n \n The selected application does not have access to any device-profiles.\n A device-profile defines the capabilities and boot parameters of a device. You can create multiple device-profiles for different kind of devices.\n \n \n Would you like to create a device-profile?\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 }\n}\n\nexport default withStyles(styles)(withRouter(CreateDevice));\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport DeviceStore from \"../../stores/DeviceStore\";\nimport DeviceForm from \"./DeviceForm\";\n\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\n\nclass UpdateDevice extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n onSubmit(device) {\n DeviceStore.update(device, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}/devices/${this.props.match.params.devEUI}`);\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(withRouter(UpdateDevice));\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\nimport AESKeyField from \"../../components/AESKeyField\";\nimport DeviceStore from \"../../stores/DeviceStore\";\n\n\nclass LW11DeviceKeysForm extends FormComponent {\n render() {\n let object = {};\n if (this.props.object !== undefined) {\n object = this.props.object;\n }\n\n return(\n \n \n \n \n );\n }\n}\n\nclass LW10DeviceKeysForm extends FormComponent {\n render() {\n let object = {};\n if (this.props.object !== undefined) {\n object = this.props.object;\n }\n\n return(\n \n \n \n );\n }\n}\n\n\nclass DeviceKeys extends Component {\n constructor() {\n super();\n this.state = {\n update: false,\n };\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n componentDidMount() {\n DeviceStore.getKeys(this.props.match.params.devEUI, resp => {\n if (resp === null) {\n this.setState({\n deviceKeys: {\n deviceKeys: {},\n },\n });\n } else {\n this.setState({\n update: true,\n deviceKeys: resp,\n });\n }\n });\n }\n\n onSubmit(deviceKeys) {\n if (this.state.update) {\n DeviceStore.updateKeys(deviceKeys, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}/devices/${this.props.match.params.devEUI}`);\n });\n } else {\n let keys = deviceKeys;\n keys.devEUI = this.props.match.params.devEUI;\n DeviceStore.createKeys(keys, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}/devices/${this.props.match.params.devEUI}`);\n });\n }\n }\n\n render() {\n if (this.state.deviceKeys === undefined) {\n return null;\n }\n\n return(\n \n \n \n \n {this.props.deviceProfile.macVersion.startsWith(\"1.0\") && }\n {this.props.deviceProfile.macVersion.startsWith(\"1.1\") && }\n \n \n \n \n );\n }\n}\n\nexport default withRouter(DeviceKeys);\n","import React, { Component } from \"react\";\n\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport IconButton from '@material-ui/core/IconButton';\nimport Button from \"@material-ui/core/Button\";\nimport Tooltip from '@material-ui/core/Tooltip';\n\nimport Refresh from \"mdi-material-ui/Refresh\";\n\nimport MaskedInput from \"react-text-mask\";\n\n\nclass DevAddrMask extends Component {\n render() {\n const { inputRef, ...other } = this.props;\n\n return(\n {\n inputRef(ref ? ref.inputElement : null);\n }}\n mask={[\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ]}\n />\n );\n }\n}\n\n\nclass DevAddrField extends Component {\n constructor() {\n super();\n\n this.state = {\n msb: true,\n value: \"\",\n };\n }\n\n toggleByteOrder = () => {\n this.setState({\n msb: !this.state.msb,\n });\n\n const bytes = this.state.value.match(/[A-Fa-f0-9]{2}/g);\n if (bytes !== null) {\n this.setState({\n value: bytes.reverse().join(\" \"),\n });\n }\n }\n\n randomKey = () => {\n this.props.randomFunc((k) => {\n let key = k;\n const bytes = key.match(/[\\w]{2}/g);\n if(!this.state.msb && bytes !== null) {\n key = bytes.reverse().join(\"\");\n }\n\n this.setState({\n value: key,\n });\n\n this.props.onChange({\n target: {\n value: k,\n type: \"text\",\n id: this.props.id,\n },\n });\n });\n }\n\n onChange = (e) => {\n this.setState({\n value: e.target.value,\n });\n\n let str = \"\";\n\n const bytes = e.target.value.match(/[\\w]{2}/g);\n if (!this.state.msb && bytes !== null) {\n str = bytes.reverse().join(\"\");\n } else if (bytes !== null) {\n str = bytes.join(\"\");\n } else {\n str = \"\";\n }\n\n this.props.onChange({\n target: {\n value: str,\n type: \"text\",\n id: this.props.id,\n },\n });\n }\n\n componentDidMount() {\n this.setState({\n value: this.props.value || \"\",\n });\n }\n\n render() {\n return(\n \n \n \n {this.state.msb ? \"MSB\": \"LSB\"}\n \n \n {this.props.random && !this.props.disabled && \n \n \n \n }\n \n }}\n {...this.props}\n onChange={this.onChange}\n value={this.state.value}\n disabled={this.props.disabled}\n />\n );\n }\n}\n\nexport default DevAddrField;\n","import React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Typograhy from \"@material-ui/core/Typography\";\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\nimport TextField from \"@material-ui/core/TextField\";\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport AESKeyField from \"../../components/AESKeyField\";\nimport DevAddrField from \"../../components/DevAddrField\";\nimport Form from \"../../components/Form\";\nimport DeviceStore from \"../../stores/DeviceStore\";\nimport theme from \"../../theme\";\n\n\nconst styles = {\n link: {\n color: theme.palette.primary.main,\n },\n};\n\n\nclass LW10DeviceActivationForm extends FormComponent {\n constructor() {\n super();\n this.getRandomDevAddr = this.getRandomDevAddr.bind(this);\n }\n\n getRandomDevAddr(cb) {\n DeviceStore.getRandomDevAddr(this.props.match.params.devEUI, resp => {\n cb(resp.devAddr);\n });\n }\n\n render() {\n if (this.state.object === undefined) {\n return(
);\n }\n\n return(\n \n \n \n \n \n \n \n );\n }\n}\n\n\nclass LW11DeviceActivationForm extends FormComponent {\n constructor() {\n super();\n this.getRandomDevAddr = this.getRandomDevAddr.bind(this);\n }\n\n getRandomDevAddr(cb) {\n DeviceStore.getRandomDevAddr(this.props.match.params.devEUI, resp => {\n cb(resp.devAddr);\n });\n }\n\n render() {\n if (this.state.object === undefined) {\n return(
);\n }\n\n return(\n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\n\nLW10DeviceActivationForm = withStyles(styles)(LW10DeviceActivationForm);\nLW11DeviceActivationForm = withStyles(styles)(LW11DeviceActivationForm);\n\n\nclass DeviceActivation extends Component {\n constructor() {\n super();\n this.state = {};\n this.onSubmit = this.onSubmit.bind(this);\n }\n \n componentDidMount() {\n DeviceStore.getActivation(this.props.match.params.devEUI, resp => {\n if (resp === null) {\n this.setState({\n deviceActivation: {\n deviceActivation: {},\n },\n });\n } else {\n this.setState({\n deviceActivation: resp,\n });\n }\n });\n }\n\n onSubmit(deviceActivation) {\n let act = deviceActivation;\n act.devEUI = this.props.match.params.devEUI;\n\n if (this.props.deviceProfile.macVersion.startsWith(\"1.0\")) {\n act.fNwkSIntKey = act.nwkSEncKey;\n act.sNwkSIntKey = act.nwkSEncKey;\n }\n\n DeviceStore.activate(act, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}`);\n });\n }\n\n render() {\n if (this.state.deviceActivation === undefined) {\n return null;\n }\n\n let submitLabel = null;\n if (!this.props.deviceProfile.supportsJoin) {\n submitLabel = \"(Re)activate device\";\n }\n\n let showForm = false;\n if (!this.props.deviceProfile.supportsJoin || (this.props.deviceProfile.supportsJoin && this.state.deviceActivation.deviceActivation.devAddr !== undefined)) {\n showForm = true;\n }\n\n return(\n \n \n {showForm && this.props.deviceProfile.macVersion.startsWith(\"1.0\") && }\n {showForm && this.props.deviceProfile.macVersion.startsWith(\"1.1\") && }\n {!showForm && \n This device has not (yet) been activated.\n }\n \n \n );\n }\n}\n\nexport default withRouter(DeviceActivation);\n","import React, { Component } from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Chip from \"@material-ui/core/Chip\";\nimport Button from '@material-ui/core/Button';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport Typography from '@material-ui/core/Typography';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\n\nimport Play from \"mdi-material-ui/Play\";\nimport Pause from \"mdi-material-ui/Pause\";\nimport Download from \"mdi-material-ui/Download\";\nimport Delete from \"mdi-material-ui/Delete\";\nimport ChevronDown from \"mdi-material-ui/ChevronDown\";\nimport HelpCircleOutline from \"mdi-material-ui/HelpCircleOutline\";\nimport AlertCircleOutline from \"mdi-material-ui/AlertCircleOutline\";\n\nimport moment from \"moment\";\nimport fileDownload from \"js-file-download\";\n\nimport DeviceStore from \"../../stores/DeviceStore\";\nimport theme from \"../../theme\";\nimport JSONTree from \"../../components/JSONTree\";\n\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n center: {\n textAlign: \"center\",\n },\n progress: {\n marginTop: 4 * theme.spacing(1),\n },\n headerColumn: {\n marginRight: 6 * theme.spacing(1),\n },\n headerColumnFixedSmall: {\n width: 145,\n },\n headerColumnFixedWide: {\n width: 175,\n },\n treeStyle: {\n paddingTop: 0,\n paddingBottom: 0,\n fontSize: 12,\n lineHeight: 1.5,\n },\n};\n\n\nclass DeviceDataItem extends Component {\n render() {\n const receivedAt = moment(this.props.data.receivedAt).format(\"LTS\");\n \n return(\n \n }>\n
{receivedAt}
\n
{this.props.data.type}
\n
\n \n \n \n \n \n \n \n
\n );\n }\n}\n\nDeviceDataItem = withStyles(styles)(DeviceDataItem);\n\n\nclass DeviceData extends Component {\n constructor() {\n super();\n\n this.state = {\n paused: false,\n connected: false,\n data: [],\n dialogOpen: false,\n };\n\n this.setConnected = this.setConnected.bind(this);\n this.onData = this.onData.bind(this);\n this.onDownload = this.onDownload.bind(this);\n this.togglePause = this.togglePause.bind(this);\n this.onClear = this.onClear.bind(this);\n this.toggleHelpDialog = this.toggleHelpDialog.bind(this);\n }\n\n componentDidMount() {\n const conn = DeviceStore.getDataLogsConnection(this.props.match.params.devEUI, this.onData);\n this.setState({\n wsConn: conn,\n });\n\n DeviceStore.on(\"ws.status.change\", this.setConnected);\n this.setConnected();\n }\n\n componentWillUnmount() {\n this.state.wsConn.close();\n DeviceStore.removeListener(\"ws.status.change\", this.setConnected);\n }\n\n onDownload() {\n const dl = this.state.data.map((data, i) => {\n return {\n type: data.type,\n payload: data.payload,\n };\n });\n\n fileDownload(JSON.stringify(dl, null, 4), `device-${this.props.match.params.devEUI}.json`);\n }\n\n togglePause() {\n this.setState({\n paused: !this.state.paused,\n });\n }\n\n toggleHelpDialog() {\n this.setState({\n dialogOpen: !this.state.dialogOpen,\n });\n }\n\n onClear() {\n this.setState({\n data: [],\n });\n }\n\n setConnected() {\n this.setState({\n connected: DeviceStore.getWSDataStatus(),\n });\n }\n\n onData(d) {\n if (this.state.paused) {\n return;\n }\n\n console.log('data: ', d);\n\n let data = this.state.data;\n const now = new Date();\n\n data.unshift({\n id: now.getTime(),\n receivedAt: now,\n type: d.type,\n payload: JSON.parse(d.payloadJSON),\n });\n\n this.setState({\n data: data,\n });\n }\n\n render() {\n const data = this.state.data.map((d, i) => );\n\n return(\n \n \n Help\n \n \n These are the events as published to the application (using the JSON marshaler). Please refer to data integrations (documentation) for more information on integrating this with your application.

\n ID values are converted from base64 to HEX for your convenience.\n
\n
\n \n \n \n \n\n \n \n {!this.state.paused && }\n {this.state.paused && }\n \n \n \n \n {!this.state.connected &&
\n }\n />\n
}\n {(this.state.connected && data.length === 0 && !this.state.paused) &&
}\n {data.length > 0 && data}\n
\n
\n );\n }\n}\n\nexport default withStyles(styles)(DeviceData);\n","import React, { Component } from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Chip from \"@material-ui/core/Chip\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Button from '@material-ui/core/Button';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\n\nimport Play from \"mdi-material-ui/Play\";\nimport Pause from \"mdi-material-ui/Pause\";\nimport Download from \"mdi-material-ui/Download\";\nimport Delete from \"mdi-material-ui/Delete\";\nimport HelpCircleOutline from \"mdi-material-ui/HelpCircleOutline\";\nimport AlertCircleOutline from \"mdi-material-ui/AlertCircleOutline\";\n\nimport fileDownload from \"js-file-download\";\n\nimport LoRaWANFrameLog from \"../../components/LoRaWANFrameLog\";\nimport DeviceStore from \"../../stores/DeviceStore\";\nimport theme from \"../../theme\";\n\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n center: {\n textAlign: \"center\",\n },\n progress: {\n marginTop: 4 * theme.spacing(1),\n },\n};\n\n\nclass DeviceFrames extends Component {\n constructor() {\n super();\n\n this.state = {\n paused: false,\n connected: false,\n frames: [],\n dialogOpen: false,\n };\n\n this.setConnected = this.setConnected.bind(this);\n this.onFrame = this.onFrame.bind(this);\n this.onDownload = this.onDownload.bind(this);\n this.togglePause = this.togglePause.bind(this);\n this.onClear = this.onClear.bind(this);\n this.toggleHelpDialog = this.toggleHelpDialog.bind(this);\n }\n\n componentDidMount() {\n const conn = DeviceStore.getFrameLogsConnection(this.props.match.params.devEUI, this.onFrame);\n this.setState({\n wsConn: conn,\n });\n\n DeviceStore.on(\"ws.status.change\", this.setConnected);\n this.setConnected();\n }\n\n componentWillUnmount() {\n this.state.wsConn.close();\n\n DeviceStore.removeListener(\"ws.status.change\", this.setConnected);\n }\n\n onDownload() {\n const dl = this.state.frames.map((frame, i) => {\n return {\n uplinkMetaData: frame.uplinkMetaData,\n downlinkMetaData: frame.downlinkMetaData,\n phyPayload: frame.phyPayload,\n };\n });\n\n fileDownload(JSON.stringify(dl, null, 4), `gateway-${this.props.match.params.gatewayID}.json`);\n }\n\n togglePause() {\n this.setState({\n paused: !this.state.paused,\n });\n }\n\n toggleHelpDialog() {\n this.setState({\n dialogOpen: !this.state.dialogOpen,\n });\n }\n\n onClear() {\n this.setState({\n frames: [],\n });\n }\n\n setConnected() {\n this.setState({\n connected: DeviceStore.getWSFramesStatus(),\n });\n }\n\n onFrame(frame) {\n if (this.state.paused) {\n return;\n }\n\n let frames = this.state.frames;\n const now = new Date();\n\n if (frame.uplinkFrame !== undefined) {\n frames.unshift({\n id: now.getTime(),\n receivedAt: now,\n uplinkMetaData: {\n rxInfo: frame.uplinkFrame.rxInfo,\n txInfo: frame.uplinkFrame.txInfo,\n },\n phyPayload: JSON.parse(frame.uplinkFrame.phyPayloadJSON),\n });\n }\n\n if (frame.downlinkFrame !== undefined) {\n delete frame.downlinkFrame.txInfo['gatewayID'];\n\n frames.unshift({\n id: now.getTime(),\n receivedAt: now,\n downlinkMetaData: {\n gatewayID: frame.downlinkFrame.gatewayID,\n txInfo: frame.downlinkFrame.txInfo,\n },\n phyPayload: JSON.parse(frame.downlinkFrame.phyPayloadJSON),\n });\n }\n\n console.log(frame);\n\n this.setState({\n frames: frames,\n });\n }\n\n render() {\n const frames = this.state.frames.map((frame, i) => );\n\n return(\n \n \n Help\n \n \n The frames below are the raw (and encrypted) LoRaWAN PHYPayload frames as seen by the gateway(s). This data is intedend for debugging only.\n \n \n \n \n \n \n\n \n \n {!this.state.paused && }\n {this.state.paused && }\n \n \n \n \n {!this.state.connected &&
\n }\n />\n
}\n {(this.state.connected && frames.length === 0 && !this.state.paused) &&
}\n {frames.length > 0 && frames}\n
\n
\n );\n }\n}\n\nexport default withStyles(styles)(DeviceFrames);\n","import React from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport TextField from '@material-ui/core/TextField';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormHelperText from \"@material-ui/core/FormHelperText\";\n\nimport {Controlled as CodeMirror} from \"react-codemirror2\";\nimport \"codemirror/mode/javascript/javascript\";\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\n\n\nconst styles = {\n codeMirror: {\n zIndex: 1,\n },\n};\n\n\n\nclass DeviceQueueItemForm extends FormComponent {\n constructor() {\n super();\n\n this.state = {\n tab: 0,\n };\n }\n\n onTabChange = (e, v) => {\n this.setState({\n tab: v,\n });\n }\n\n onCodeChange = (field, editor, data, newCode) => {\n let object = this.state.object;\n object[field] = newCode;\n this.setState({\n object: object,\n });\n }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n const codeMirrorOptions = {\n lineNumbers: true,\n mode: \"javascript\",\n theme: \"default\",\n };\n\n let objectCode = this.state.object.jsonObject;\n if (objectCode === \"\" || objectCode === undefined) {\n objectCode = `{}`\n }\n\n return(\n \n 0.\"\n required\n fullWidth\n type=\"number\"\n />\n \n \n }\n />\n \n \n \n \n \n {this.state.tab === 0 && }\n {this.state.tab === 1 && \n \n \n The device must be configured with a Device Profile supporting a Codec which is able to encode the given (JSON) payload.\n \n }\n \n );\n }\n}\n\nexport default withStyles(styles)(DeviceQueueItemForm);\n\n","import React, { Component } from \"react\";\nimport { withRouter } from \"react-router-dom\";\n\nimport Grid from \"@material-ui/core/Grid\";\nimport Card from \"@material-ui/core/Card\";\nimport CardHeader from \"@material-ui/core/CardHeader\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Table from \"@material-ui/core/Table\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport Button from '@material-ui/core/Button';\n\nimport Refresh from \"mdi-material-ui/Refresh\";\nimport Delete from \"mdi-material-ui/Delete\";\n\nimport moment from \"moment\";\n\nimport TableCellLink from \"../../components/TableCellLink\";\nimport DeviceQueueItemForm from \"./DeviceQueueItemForm\";\nimport DeviceQueueStore from \"../../stores/DeviceQueueStore\";\nimport DeviceStore from \"../../stores/DeviceStore\";\n\n\nclass DetailsCard extends Component {\n render() {\n return(\n \n \n \n \n \n \n Name\n {this.props.device.device.name}\n \n \n Description\n {this.props.device.device.description}\n \n \n Device-profile\n {this.props.deviceProfile.deviceProfile.name}\n \n \n
\n
\n
\n );\n }\n}\n\n\nclass StatusCard extends Component {\n render() {\n let lastSeenAt = \"never\";\n let state = \"enabled\";\n\n if (this.props.device.lastSeenAt !== null) {\n lastSeenAt = moment(this.props.device.lastSeenAt).format(\"lll\");\n }\n\n if (this.props.device.device.isDisabled === true) {\n state = \"disabled\";\n }\n\n return(\n \n \n \n \n \n \n Last seen at\n {lastSeenAt}\n \n \n State\n {state}\n \n \n
\n
\n
\n );\n }\n}\n\nclass EnqueueCard extends Component {\n constructor() {\n super();\n\n this.state = {\n object: {},\n };\n }\n\n onSubmit = (queueItem) => {\n let qi = queueItem;\n qi.devEUI = this.props.match.params.devEUI;\n\n DeviceQueueStore.enqueue(qi, resp => {\n this.setState({\n object: {},\n });\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n );\n }\n}\n\nEnqueueCard = withRouter(EnqueueCard);\n\n\nclass QueueCardRow extends Component {\n render() {\n let confirmed = \"no\";\n if (this.props.item.confirmed) {\n confirmed = \"yes\";\n }\n\n return(\n \n {this.props.item.fCnt}\n {this.props.item.fPort}\n {confirmed}\n {this.props.item.data}\n \n );\n }\n}\n\n\nclass QueueCard extends Component {\n constructor() {\n super();\n\n this.state = {\n deviceQueueItems: [],\n };\n }\n\n componentDidMount() {\n this.getQueue();\n\n DeviceQueueStore.on(\"enqueue\", this.getQueue);\n }\n\n componentWillUnmount() {\n DeviceQueueStore.removeListener(\"enqueue\", this.getQueue);\n }\n\n getQueue = () => {\n DeviceQueueStore.list(this.props.match.params.devEUI, resp => {\n this.setState({\n deviceQueueItems: resp.deviceQueueItems,\n });\n });\n }\n\n flushQueue = () => {\n if (window.confirm(\"Are you sure you want to flush the device queue?\")) {\n DeviceQueueStore.flush(this.props.match.params.devEUI, resp => {\n this.getQueue();\n });\n }\n }\n\n render() {\n const rows = this.state.deviceQueueItems.map((item, i) => );\n\n return(\n \n \n \n \n \n } />\n \n \n \n \n FCnt\n FPort\n Confirmed\n Base64 encoded payload\n \n \n \n {rows}\n \n
\n
\n
\n );\n }\n}\n\nQueueCard = withRouter(QueueCard);\n\n\nclass DeviceDetails extends Component {\n constructor() {\n super();\n this.state = {\n activated: false,\n };\n }\n\n componentDidMount() {\n this.setDeviceActivation();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.device !== this.props.device) {\n this.setDeviceActivation();\n }\n }\n\n setDeviceActivation = () => {\n if (this.props.device === undefined) {\n return;\n }\n\n DeviceStore.getActivation(this.props.device.device.devEUI, resp => {\n if (resp === null) {\n this.setState({\n activated: false,\n });\n } else {\n this.setState({\n activated: true,\n });\n }\n });\n };\n\n render() {\n return(\n \n \n \n \n \n \n \n {this.state.activated && \n \n }\n {this.state.activated &&\n \n }\n \n );\n }\n}\n\nexport default DeviceDetails;\n","import React from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\n// import TextField from '@material-ui/core/TextField';\nimport AppDeviceGroupStore from \"../../stores/AppDeviceGroupStore\";\nimport FormComponent from \"../../classes/FormComponent\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport AutocompleteSelect from \"../../components/AutocompleteSelect\";\nimport Form from \"../../components/Form\";\n\nconst styles = {\n formLabel: {\n fontSize: 12,\n },\n};\n\n\nclass AppDeviceForm extends FormComponent {\n constructor() {\n super();\n this.getAppDeviceGroupOption = this.getAppDeviceGroupOption.bind(this);\n this.getAppDeviceGroupOptions = this.getAppDeviceGroupOptions.bind(this);\n\n this.state = {};\n }\n\n getAppDeviceGroupOption(id, callbackFunc) {\n AppDeviceGroupStore.get(id, resp => {\n callbackFunc({label: resp.appDeviceGroup.name, value: resp.appDeviceGroup.id});\n });\n }\n\n getAppDeviceGroupOptions(search, callbackFunc) {\n AppDeviceGroupStore.list(this.state.object.applicationID,999,0, resp => {\n const options = resp.result.map((ag) => {return {label: ag.name, value: ag.id}});\n callbackFunc(options);\n });\n }\n\n //componentDidMount() {\n // super.componentDidMount();\n //}\n\n // componentDidUpdate(prevProps) {\n // super.componentDidUpdate(prevProps);\n // }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n return(\n \n
\n \n Device Type\n \n \n
\n \n );\n }\n}\n\nexport default withStyles(styles)(AppDeviceForm);\n","import React from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\nimport Typography from '@material-ui/core/Typography';\n\nconst styles = {\n formLabel: {\n fontSize: 12,\n },\n};\n\n\nclass PauseAppDeviceForm extends FormComponent {\n constructor() {\n super();\n\n this.state = {};\n }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n return(\n \n
\n \n {this.state.object.pausedAt ? \"Decoding of packets for this device has been paused\" : \"Decoding of packets for this device is active\"}\n \n
\n \n );\n }\n}\n\nexport default withStyles(styles)(PauseAppDeviceForm);\n","import React from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\nimport Typography from '@material-ui/core/Typography';\n\nconst styles = {\n formLabel: {\n fontSize: 12,\n },\n};\n\n\nclass DisableAppDeviceForm extends FormComponent {\n constructor() {\n super();\n\n this.state = {};\n }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n return(\n \n
\n \n {this.state.object.disabledAt ? \"This device has been disabled\" : \"This device is enabled\"}\n \n
\n \n );\n }\n}\n\nexport default withStyles(styles)(DisableAppDeviceForm);\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport AppDeviceStore from \"../../stores/AppDeviceStore\";\nimport AppDeviceForm from \"./AppDeviceForm\";\n\nimport PauseAppDeviceForm from \"./PauseAppDeviceForm\";\nimport DisableAppDeviceForm from \"./DisableAppDeviceForm\";\n\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\n\nclass UpdateAppDevice extends Component {\n constructor() {\n super();\n this.state = {};\n this.onSubmit = this.onSubmit.bind(this);\n this.pauseAppDevice = this.pauseAppDevice.bind(this);\n this.disableAppDevice = this.disableAppDevice.bind(this);\n this.reloadAppDevice = this.reloadAppDevice.bind(this);\n }\n\n componentDidMount() {\n AppDeviceStore.get(this.props.device.devEUI,this.props.match.params.applicationID, resp => {\n console.log(resp);\n this.setState({\n appDevice: resp.appDevice,\n });\n });\n }\n\n reloadAppDevice()\n {\n AppDeviceStore.get(this.props.device.devEUI,this.props.match.params.applicationID, resp => {\n console.log(resp);\n this.setState({\n appDevice: resp.appDevice,\n });\n });\n }\n\n onSubmit(appDevice) {\n AppDeviceStore.update(appDevice, () => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}/devices/${this.props.match.params.devEUI}`);\n });\n }\n\n pauseAppDevice(appDevice) {\n AppDeviceStore.pause(appDevice.id, (appDevice.pausedAt ? false : true) , () => {\n this.reloadAppDevice();\n });\n }\n\n disableAppDevice(appDevice) {\n AppDeviceStore.disable(appDevice.id, (appDevice.disabledAt ? false : true) , () => {\n this.reloadAppDevice();\n });\n }\n\n render() {\n if (this.state.appDevice === undefined) {\n return(
);\n }\n\n return(\n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nUpdateAppDevice.propTypes = {\n admin: PropTypes.bool.isRequired,\n classes: PropTypes.any.isRequired,\n device: PropTypes.object.isRequired,\n history: PropTypes.any.isRequired,\n match: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(withRouter(UpdateAppDevice));","import React, { Component } from \"react\";\nimport { Route, Switch, Link, withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\n\nimport Delete from \"mdi-material-ui/Delete\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\n\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport DeviceProfileStore from \"../../stores/DeviceProfileStore\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport DeviceAdmin from \"../../components/DeviceAdmin\";\nimport DeviceStore from \"../../stores/DeviceStore\";\nimport AppDeviceStore from \"../../stores/AppDeviceStore\";\nimport UpdateDevice from \"./UpdateDevice\";\nimport DeviceKeys from \"./DeviceKeys\";\nimport DeviceActivation from \"./DeviceActivation\"\nimport DeviceData from \"./DeviceData\";\nimport DeviceFrames from \"./DeviceFrames\";\nimport DeviceDetails from \"./DeviceDetails\";\nimport UpdateAppDevice from \"./UpdateAppDevice\";\n\nimport theme from \"../../theme\";\n\n\nconst styles = {\n tabs: {\n borderBottom: \"1px solid \" + theme.palette.divider,\n height: \"49px\",\n },\n};\n\n\nclass DeviceLayout extends Component {\n constructor() {\n super();\n this.state = {\n tab: 0,\n admin: false,\n };\n\n this.onChangeTab = this.onChangeTab.bind(this);\n this.deleteDevice = this.deleteDevice.bind(this);\n this.locationToTab = this.locationToTab.bind(this);\n this.setIsAdmin = this.setIsAdmin.bind(this);\n this.getDevice = this.getDevice.bind(this);\n }\n\n componentDidMount() {\n ApplicationStore.get(this.props.match.params.applicationID, resp => {\n this.setState({\n application: resp,\n });\n });\n\n\n DeviceStore.on(\"update\", this.getDevice);\n SessionStore.on(\"change\", this.setIsAdmin);\n\n this.locationToTab();\n this.setIsAdmin();\n this.getDevice();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n DeviceStore.removeListener(\"update\", this.getDevice);\n }\n\n componentDidUpdate(oldProps) {\n if (this.props === oldProps) {\n return;\n }\n\n this.locationToTab();\n }\n\n getDevice() {\n DeviceStore.get(this.props.match.params.devEUI, resp => {\n this.setState({\n device: resp,\n });\n\n DeviceProfileStore.get(resp.device.deviceProfileID, resp => {\n this.setState({\n deviceProfile: resp,\n });\n });\n });\n }\n\n setIsAdmin() {\n this.setState({\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationDeviceAdmin(this.props.match.params.organizationID),\n }, () => {\n // we need to update the tab index, as for non-admins, some tabs are hidden\n this.locationToTab();\n });\n }\n\n onChangeTab(e, v) {\n this.setState({\n tab: v,\n });\n }\n\n locationToTab() {\n let tab = 0;\n\n if (window.location.href.endsWith(\"/edit\")) {\n tab = 1;\n } else if (window.location.href.endsWith(\"/keys\")) {\n tab = 2;\n } else if (window.location.href.endsWith(\"/activation\")) {\n tab = 3;\n } else if (window.location.href.endsWith(\"/data\")) {\n tab = 4;\n } else if (window.location.href.endsWith(\"/frames\")) {\n tab = 5;\n } else if (window.location.href.endsWith(\"/app-device\")) {\n tab = 6;\n }\n\n if (tab > 1 && !this.state.admin) {\n tab = tab - 1;\n }\n\n this.setState({\n tab: tab,\n });\n }\n\n deleteDevice() {\n if (window.confirm(\"Are you sure you want to delete this device?\")) {\n AppDeviceStore.delete(this.props.match.params.devEUI, () => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}/devices`);\n });\n /*DeviceStore.delete(this.props.match.params.devEUI, () => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}`);\n });*/\n }\n }\n\n render() {\n if (this.state.application === undefined || this.state.device === undefined|| this.state.deviceProfile === undefined) {\n return(
);\n }\n\n return(\n \n \n }\n color=\"secondary\"\n onClick={this.deleteDevice}\n />\n \n }\n >\n \n \n \n \n \n \n \n \n\n \n \n \n \n {this.state.admin && }\n \n \n \n \n \n \n\n \n \n } />\n } />\n } />\n } />\n } />\n } />\n } />\n \n \n \n );\n }\n}\n\nDeviceLayout.propTypes = {\n classes: PropTypes.any.isRequired,\n history: PropTypes.any.isRequired,\n match: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(withRouter(DeviceLayout));\n","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Button from '@material-ui/core/Button';\n\nimport Plus from \"mdi-material-ui/Plus\";\n\nimport TableCellLink from \"../../components/TableCellLink\";\nimport DataTable from \"../../components/DataTable\";\nimport DeviceAdmin from \"../../components/DeviceAdmin\";\nimport AppDeviceGroupStore from \"../../stores/AppDeviceGroupStore\";\nimport theme from \"../../theme\";\n\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n};\n\n\nclass ListDeviceGroups extends Component {\n constructor() {\n super();\n this.getPage = this.getPage.bind(this);\n this.getRow = this.getRow.bind(this);\n }\n\n getPage(limit, offset, callbackFunc) {\n AppDeviceGroupStore.list(this.props.match.params.applicationID, limit, offset, callbackFunc);\n }\n\n getRow(obj) {\n return(\n \n {obj.name}\n {obj.description}\n {obj.deviceCount}\n \n );\n }\n\n render() {\n return(\n \n \n \n Group Name\n Description\n Device Count\n \n }\n\n getPage={this.getPage}\n getRow={this.getRow}\n />\n \n \n \n \n \n \n \n );\n }\n}\n\nListDeviceGroups.propTypes = {\n // application: PropTypes.object.isRequired,\n classes: PropTypes.any.isRequired,\n match: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(ListDeviceGroups);\n","import React, { Component } from \"react\";\n// import { withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\n// import { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport ListDeviceGroups from \"../device-groups/ListDeviceGroups\";\nimport ApplicationStore from \"../../stores/ApplicationStore\";\n\n// import theme from \"../../theme\";\n\n\nclass ApplicationDeviceGroups extends Component {\n constructor() {\n super();\n this.state = {\n application: null,\n };\n\n }\n\n componentDidMount() {\n ApplicationStore.get(this.props.match.params.applicationID, resp => {\n this.setState({\n application: resp,\n });\n });\n }\n\n render() {\n if (!this.state.application) {\n return(
);\n }\n\n return(\n \n \n \n \n\n \n \n \n \n );\n }\n}\n\nApplicationDeviceGroups.propTypes = {\n match: PropTypes.any.isRequired\n}\n\nexport default ApplicationDeviceGroups;\n","import React from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport TextField from '@material-ui/core/TextField';\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\nimport FormControl from '@material-ui/core/FormControl';\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\n//import Checkbox from '@material-ui/core/Checkbox';\n\nconst styles = {\n formLabel: {\n fontSize: 12,\n },\n};\n\nclass DeviceGroupForm extends FormComponent {\n constructor() {\n super();\n\n this.state = {};\n this.handleSelect = this.handleSelect.bind(this);\n }\n\n handleSelect(e) {\n let object = this.state.object;\n object[\"outputControlType\"] = e.target.value;\n this.setState({\n object: object,\n });\n }\n \n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n return(\n \n
\n \n \n \n \n Output Control Type\n \n None\n Step\n PV Control\n \n \n \n
\n \n );\n }\n}\n\nexport default withStyles(styles)(DeviceGroupForm);\n","import React from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\n\nimport FormComponent from \"../../classes/FormComponent\";\nimport Form from \"../../components/Form\";\nimport Typography from '@material-ui/core/Typography';\n\nconst styles = {\n formLabel: {\n fontSize: 12,\n },\n};\n\n\nclass PauseDeviceGroupForm extends FormComponent {\n constructor() {\n super();\n\n this.state = {};\n }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n\n return(\n \n
\n \n {this.state.object.pausedAt ? \"Decoding of packets for this group has been paused\" : \"Decoding of packets for this group is active\"}\n \n
\n \n );\n }\n}\n\nexport default withStyles(styles)(PauseDeviceGroupForm);\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\nimport DeviceGroupForm from \"./DeviceGroupForm\";\nimport PauseDeviceGroupForm from \"./PauseDeviceGroupForm\";\nimport AppDeviceGroupStore from \"../../stores/AppDeviceGroupStore\";\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\n\nclass UpdateDeviceGroup extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit.bind(this);\n this.pauseGroup = this.pauseGroup.bind(this);\n }\n\n onSubmit(deviceGroup) {\n AppDeviceGroupStore.update(deviceGroup, resp => {\n });\n }\n\n pauseGroup(deviceGroup) {\n AppDeviceGroupStore.pause(deviceGroup.id, (deviceGroup.pausedAt ? false : true) , resp => {\n this.props.reloadRequestCallback();\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(withRouter(UpdateDeviceGroup));\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\n\nimport AppItemStore from \"../../stores/AppItemStore\";\n\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableHead from '@material-ui/core/TableHead';\nimport FormControl from \"@material-ui/core/FormControl\";\nimport AutocompleteSelect from \"../../components/AutocompleteSelect\";\nimport Button from \"@material-ui/core/Button\";\nimport Paper from \"../../components/Paper\";\nimport TextField from '@material-ui/core/TextField';\nimport { Typography } from \"@material-ui/core\";\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n formControl: {\n paddingTop: 24,\n },\n};\n\n\nclass UpdateDeviceGroupMappings extends Component {\n constructor() {\n super();\n this.state = {\n itemsOptions: [],\n };\n this.getAppDeviceGroupMappingOption = this.getAppDeviceGroupMappingOption.bind(this);\n this.getAppDeviceGroupMappingOptions = this.getAppDeviceGroupMappingOptions.bind(this);\n this.onSubmit = this.onSubmit.bind(this);\n this.onChange = this.onChange.bind(this);\n this.onChangeScaling = this.onChangeScaling.bind(this);\n }\n\n componentDidMount() {\n AppItemStore.listPayloadItem(resp => {\n //get all the options - need to do this only once (up_payload_item does not change)\n var options = resp.result.map((ag) => {return {label: ag.name, value: ag.id}});\n options.push({label: \"\", value: 0})\n this.setState({\n itemsOptions: options,\n });\n });\n\n AppItemStore.getGroupItemMap(this.props.deviceGroup.id, resp => {\n this.setState({\n appItemMappings: resp.result,\n });\n });\n }\n\n getAppDeviceGroupMappingOption(id, callbackFunc) {\n const {itemsOptions} = this.state;\n\n var filtereditem = itemsOptions.filter(function(event){\n return event.value == id;\n });\n\n if (filtereditem.length > 0)\n {\n callbackFunc(filtereditem[0]);\n } else {\n callbackFunc({label: \"\", value: 0});\n }\n }\n\n getAppDeviceGroupMappingOptions(search, callbackFunc) {\n const {itemsOptions} = this.state;\n\n callbackFunc(itemsOptions);\n }\n\n onSubmit() {\n // Only save mapping if item id and scaling are valid\n const appItemMappings = this.state.appItemMappings.filter((value) => value.upPayloadItemID > 0 && value.scaling);\n\n AppItemStore.updateGroupItemMap(this.props.deviceGroup.id, appItemMappings, () => {\n this.props.history.push(`/organizations/${this.props.application.application.organizationID}/applications/${this.props.application.application.id}/device-groups/${this.props.deviceGroup.id}`);\n });\n }\n\n onChange(obj) {\n let {appItemMappings} = this.state;\n appItemMappings[obj.target.id].upPayloadItemID = obj.target.value;\n this.setState({appItemMappings});\n }\n\n onChangeScaling(obj) {\n let {appItemMappings} = this.state;\n appItemMappings[obj.target.id].scaling = obj.target.value.replace(/[^\\d.-]/g, '');\n this.setState({appItemMappings});\n }\n\n render() {\n let cellStyle = { paddingTop: 0, paddingBottom: 0, paddingRight:5, paddingLeft: 5}\n let {appItemMappings} = this.state;\n if (!appItemMappings) {\n return
;\n }\n return(\n \n \n \n \n * 'Multiplier' can be used to scale a reading. This value should always be '1' for all readings that do not require scaling.\n \n \n \n App Item\n Source Upload Packet Item\n Multiplier (*)\n \n \n \n {this.state.appItemMappings.map((value, index) => {\n return(\n \n {value.appItem.name}\n \n \n \n \n \n \n \n \n \n );\n })}\n \n
\n \n \n \n
\n
\n
\n \n );\n }\n}\n\nUpdateDeviceGroupMappings.propTypes = {\n application: PropTypes.object.isRequired,\n classes: PropTypes.any.isRequired,\n deviceGroup: PropTypes.object.isRequired,\n disabled: PropTypes.any.isRequired,\n history: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(withRouter(UpdateDeviceGroupMappings));\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler, errorHandlerIgnoreNotFoundWithCallback } from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\nclass AppDeviceGroupPollStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/appDeviceGroupPoll.swagger.json\", sessionStore.getClientOpts());\n }\n\n get(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceGroupPollService.AppDeviceGroupPollService_Get({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n list(appDeviceGroupID, limit, offset, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceGroupPollService.AppDeviceGroupPollService_List({\n appDeviceGroupId: appDeviceGroupID,\n limit: limit,\n offset: offset,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n create(appDeviceGroupPoll, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceGroupPollService.AppDeviceGroupPollService_Create({\n body: {\n appDeviceGroupPoll: appDeviceGroupPoll,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"created\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n update(appDeviceGroupPoll, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceGroupPollService.AppDeviceGroupPollService_Update({\n \"appDeviceGroupPoll.id\": appDeviceGroupPoll.id,\n body: {\n appDeviceGroupPoll: appDeviceGroupPoll,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n delete(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceGroupPollService.AppDeviceGroupPollService_Delete({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"app device type poll has been \" + action,\n },\n });\n }\n\n getPollDataType(id, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceGroupPollService.AppDeviceGroupPollService_GetPollDataType({\n id: id,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n listPollDataType(callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceGroupPollService.AppDeviceGroupPollService_PollDataTypeList()\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n}\n\nconst appDeviceGroupPollStore = new AppDeviceGroupPollStore();\nexport default appDeviceGroupPollStore;\n","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Button from '@material-ui/core/Button';\n\nimport Plus from \"mdi-material-ui/Plus\";\n\nimport TableCellLink from \"../../components/TableCellLink\";\nimport DataTable from \"../../components/DataTable\";\nimport DeviceAdmin from \"../../components/DeviceAdmin\";\nimport AppDeviceGroupPollStore from \"../../stores/AppDeviceGroupPollStore\";\n\nimport theme from \"../../theme\";\n\n\nconst styles = {\n buttons: {\n textAlign: \"right\",\n },\n button: {\n marginLeft: 2 * theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n};\n\n\nclass ListDeviceGroupPolls extends Component {\n constructor() {\n super();\n this.getPage = this.getPage.bind(this);\n this.getRow = this.getRow.bind(this);\n }\n\n getPage(limit, offset, callbackFunc) {\n AppDeviceGroupPollStore.list(this.props.deviceGroup.id, limit, offset, callbackFunc);\n }\n\n getRow(obj) {\n // Look up data type name\n return(\n \n {obj.pollNumber}\n {obj.pollRegCount}\n {obj.pollDataTypeName}\n \n );\n }\n\n render() {\n return(\n \n \n \n Poll Number\n Register Count\n Data Type\n \n }\n getPage={this.getPage}\n getRow={this.getRow}\n />\n \n \n \n \n \n \n \n );\n }\n}\n\nListDeviceGroupPolls.propTypes = {\n classes: PropTypes.any.isRequired,\n deviceGroup: PropTypes.object.isRequired,\n match: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(ListDeviceGroupPolls);\n","import React, { Component } from \"react\";\nimport { Route, Link, withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\n\nimport Delete from \"mdi-material-ui/Delete\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\n\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport AppDeviceGroupStore from \"../../stores/AppDeviceGroupStore\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport DeviceAdmin from \"../../components/DeviceAdmin\";\n\nimport theme from \"../../theme\";\nimport UpdateDeviceGroup from \"./UpdateDeviceGroup\";\nimport UpdateDeviceGroupMappings from \"./UpdateDeviceGroupMappings\";\nimport ListDeviceGroupPolls from \"./ListDeviceGroupPolls\";\n\nimport Back from \"mdi-material-ui/ArrowLeft\";\n\n\nconst styles = {\n tabs: {\n borderBottom: \"1px solid \" + theme.palette.divider,\n height: \"48px\",\n overflow: \"visible\",\n },\n};\n\nclass DeviceGroupLayout extends Component {\n constructor() {\n super();\n this.state = {\n tab: 0,\n admin: false,\n };\n\n this.deleteDeviceGroup = this.deleteDeviceGroup.bind(this);\n this.setIsAdmin = this.setIsAdmin.bind(this);\n this.onChangeTab = this.onChangeTab.bind(this);\n }\n\n componentDidMount() {\n ApplicationStore.get(this.props.match.params.applicationID, resp => {\n this.setState({\n application: resp,\n });\n });\n\n AppDeviceGroupStore.get(this.props.match.params.deviceGroupID, resp => {\n this.setState({\n deviceGroup: resp.appDeviceGroup,\n });\n });\n\n SessionStore.on(\"change\", this.setIsAdmin);\n\n this.setIsAdmin();\n this.locationToTab();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n // DeviceStore.removeListener(\"update\", this.getDevice);\n }\n\n componentDidUpdate(oldProps) {\n if (this.props === oldProps) {\n return;\n }\n\n this.locationToTab();\n }\n\n setIsAdmin() {\n this.setState({\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationDeviceAdmin(this.props.match.params.organizationID),\n }, () => {\n });\n }\n\n deleteDeviceGroup() {\n if (window.confirm(\"Are you sure you want to delete this device type?\")) {\n AppDeviceGroupStore.delete(this.props.match.params.deviceGroupID, () => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}/device-groups`);\n });\n }\n }\n\n reloadDeviceGroup = () => {\n AppDeviceGroupStore.get(this.props.match.params.deviceGroupID, resp => {\n this.setState({\n deviceGroup: resp.appDeviceGroup,\n });\n });\n }\n\n locationToTab() {\n let tab = 0;\n\n if (window.location.href.endsWith(\"/edit\")) {\n tab = 2;\n } else if (window.location.href.endsWith(\"/polls\")) {\n tab = 1;\n }\n\n this.setState({\n tab: tab,\n });\n }\n\n onChangeTab(e, v) {\n this.setState({\n tab: v,\n });\n }\n\n render() {\n const {admin, deviceGroup, application} = this.state;\n const {match} = this.props;\n\n if (application === undefined || deviceGroup === undefined) {\n return(
);\n }\n\n return(\n \n \n }\n color=\"primary\"\n to={`/organizations/${match.params.organizationID}/applications/${match.params.applicationID}/device-groups`}\n />\n }\n color=\"secondary\"\n onClick={this.deleteDeviceGroup}\n />\n \n }\n >\n \n \n \n \n \n \n {admin && (\n \n )}\n \n \n\n \n } />\n {admin && (\n } />\n )}\n } />\n \n \n );\n }\n}\n\nDeviceGroupLayout.propTypes = {\n classes: PropTypes.any.isRequired,\n history: PropTypes.any.isRequired,\n match: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(withRouter(DeviceGroupLayout));\n","import React, { Component } from \"react\";\nimport { withRouter, Link } from 'react-router-dom';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\n\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport AppDeviceGroupStore from \"../../stores/AppDeviceGroupStore\";\nimport DeviceGroupForm from \"./DeviceGroupForm\";\n\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\nclass CreateDeviceGroup extends Component {\n constructor() {\n super();\n this.state = {};\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n componentDidMount() {\n ApplicationStore.get(this.props.match.params.applicationID, resp => {\n this.setState({\n application: resp,\n });\n });\n }\n\n onSubmit(deviceGroup) {\n let devGroup = deviceGroup;\n devGroup.applicationID = this.props.match.params.applicationID;\n\n AppDeviceGroupStore.create(devGroup, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}/device-groups`);\n });\n }\n\n render() {\n if (this.state.application === undefined) {\n return(
);\n }\n\n return(\n \n \n \n \n\n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(withRouter(CreateDeviceGroup));\n","import React from \"react\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport TextField from '@material-ui/core/TextField';\nimport FormComponent from \"../../classes/FormComponent\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport AutocompleteSelect from \"../../components/AutocompleteSelect\";\nimport Form from \"../../components/Form\";\nimport AppDeviceGroupPollStore from \"../../stores/AppDeviceGroupPollStore\";\n\nconst styles = {\n formLabel: {\n fontSize: 12,\n },\n};\n\n\nclass DeviceGroupPollForm extends FormComponent {\n constructor() {\n super();\n this.getPollDataTypeOption = this.getPollDataTypeOption.bind(this);\n this.getPollDataTypeOptions = this.getPollDataTypeOptions.bind(this);\n\n this.state = {};\n }\n\n getPollDataTypeOption(id, callbackFunc) {\n AppDeviceGroupPollStore.getPollDataType(id, resp => {\n callbackFunc({label: resp.pollDataType.name, value: resp.pollDataType.id});\n });\n }\n\n getPollDataTypeOptions(search, callbackFunc) {\n AppDeviceGroupPollStore.listPollDataType(resp => {\n const options = resp.result.map((dt, i) => {return {label: dt.name, value: dt.id}});\n callbackFunc(options);\n });\n }\n\n render() {\n if (this.state.object === undefined) {\n return null;\n }\n \n return(\n \n
\n \n \n \n Data type\n \n \n
\n \n );\n }\n}\n\nexport default withStyles(styles)(DeviceGroupPollForm);\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\n\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport AppDeviceGroupPollStore from \"../../stores/AppDeviceGroupPollStore\";\nimport DeviceGroupPollForm from \"./DeviceGroupPollForm\";\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\n\nclass CreateDeviceGroupPoll extends Component {\n constructor() {\n super();\n this.state = {};\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n componentDidMount() {\n ApplicationStore.get(this.props.match.params.applicationID, resp => {\n this.setState({\n application: resp,\n });\n });\n }\n\n onSubmit(item) {\n let newItem = item;\n newItem.appDeviceGroupID = this.props.match.params.deviceGroupID;\n if (!item.pollNumber || item.pollNumber < 1 || item.pollNumber > 10) {\n return; // TODO: Show message to user?\n }\n\n AppDeviceGroupPollStore.create(newItem, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}/device-groups/${this.props.match.params.deviceGroupID}/polls`);\n });\n }\n\n render() {\n if (this.state.application === undefined) {\n return(
);\n }\n\n return(\n \n \n \n \n\n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(withRouter(CreateDeviceGroupPoll));\n","import React, { Component } from \"react\";\nimport { withRouter } from 'react-router-dom';\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from \"@material-ui/core/CardContent\";\nimport DeviceGroupPollForm from \"./DeviceGroupPollForm\";\nimport AppDeviceGroupPollStore from \"../../stores/AppDeviceGroupPollStore\";\n\nconst styles = {\n card: {\n overflow: \"visible\",\n },\n};\n\n\nclass UpdateDeviceGroupPoll extends Component {\n constructor() {\n super();\n this.onSubmit = this.onSubmit.bind(this);\n }\n\n onSubmit(deviceGroupPoll) {\n AppDeviceGroupPollStore.update(deviceGroupPoll, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}/device-groups/${this.props.match.params.deviceGroupID}/polls`);\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(withRouter(UpdateDeviceGroupPoll));\n","import React, { Component } from \"react\";\nimport { Route, withRouter } from \"react-router-dom\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\nimport Grid from '@material-ui/core/Grid';\n\nimport Delete from \"mdi-material-ui/Delete\";\n\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport TitleBarButton from \"../../components/TitleBarButton\";\n\nimport ApplicationStore from \"../../stores/ApplicationStore\";\nimport AppDeviceGroupPollStore from \"../../stores/AppDeviceGroupPollStore\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport DeviceAdmin from \"../../components/DeviceAdmin\";\n\nimport theme from \"../../theme\";\nimport UpdateDeviceGroupPoll from \"./UpdateDeviceGroupPoll\";\n\nimport Back from \"mdi-material-ui/ArrowLeft\";\n\nconst styles = {\n tabs: {\n borderBottom: \"1px solid \" + theme.palette.divider,\n height: \"48px\",\n overflow: \"visible\",\n },\n};\n\nclass DeviceGroupPollLayout extends Component {\n constructor() {\n super();\n this.state = {\n tab: 0,\n admin: false,\n };\n\n this.deleteDeviceGroupPoll = this.deleteDeviceGroupPoll.bind(this);\n this.setIsAdmin = this.setIsAdmin.bind(this);\n }\n\n componentDidMount() {\n ApplicationStore.get(this.props.match.params.applicationID, resp => {\n this.setState({\n application: resp,\n });\n });\n\n AppDeviceGroupPollStore.get(this.props.match.params.deviceGroupPollID, resp => {\n this.setState({\n deviceGroupPoll: resp.appDeviceGroupPoll,\n });\n });\n\n SessionStore.on(\"change\", this.setIsAdmin);\n\n this.setIsAdmin();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n // DeviceStore.removeListener(\"update\", this.getDevice);\n }\n\n setIsAdmin() {\n this.setState({\n admin: SessionStore.isAdmin() || SessionStore.isOrganizationDeviceAdmin(this.props.match.params.organizationID),\n }, () => {\n });\n }\n\n deleteDeviceGroupPoll() {\n if (window.confirm(\"Are you sure you want to delete this device type poll?\")) {\n AppDeviceGroupPollStore.delete(this.props.match.params.deviceGroupPollID, resp => {\n this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}/device-groups/${this.props.match.params.deviceGroupID}/polls`);\n });\n }\n }\n\n render() {\n if (this.state.application === undefined || this.state.deviceGroupPoll === undefined) {\n return(
);\n }\n\n return(\n \n \n }\n color=\"primary\"\n to={`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}/device-groups/${this.props.match.params.deviceGroupID}/polls`}\n />\n }\n color=\"secondary\"\n onClick={this.deleteDeviceGroupPoll}\n />\n \n }\n >\n \n \n\n \n } />\n \n \n );\n }\n}\n\nexport default withStyles(styles)(withRouter(DeviceGroupPollLayout));\n","import React, { Component } from \"react\";\nimport PropTypes from 'prop-types';\nimport TextField from \"@material-ui/core/TextField\";\nimport MaskedInput from \"react-text-mask\";\n\nclass HEXMask extends Component {\n render() {\n const { inputRef, ...other } = this.props;\n \n // Populate mask array (50 bytes)\n let maskArray = [\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ];\n for (let i = 0; i < 49; i++) {\n maskArray.push(' ');\n maskArray.push(/[A-Fa-f0-9]/);\n maskArray.push(/[A-Fa-f0-9]/);\n }\n\n return(\n {\n inputRef(ref ? ref.inputElement : null);\n }}\n mask={maskArray}\n />\n );\n }\n}\n\nHEXMask.propTypes = {\n inputRef: PropTypes.any.isRequired,\n}\n\nclass HexTextField extends Component {\n constructor() {\n super();\n\n this.state = {\n value: \"\",\n };\n }\n\n onChange = (e) => {\n this.setState({\n value: e.target.value,\n });\n\n let str = \"\";\n\n const bytes = e.target.value.match(/[A-Fa-f0-9]{2}/g);\n if (bytes !== null) {\n str = bytes.join(\"\");\n } else {\n str = \"\";\n }\n\n this.props.onChange({\n target: {\n value: str,\n type: \"text\",\n id: this.props.id,\n },\n });\n }\n\n componentDidMount() {\n this.setState({\n value: this.props.value || \"\",\n });\n }\n\n render() {\n return(\n \n );\n }\n}\n\nHexTextField.propTypes = {\n id: PropTypes.any.isRequired,\n value: PropTypes.any.isRequired,\n onChange: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n}\n\nHexTextField.defaultProps = {\n disabled: false,\n}\n\nexport default HexTextField;\n","import React, { Component } from \"react\";\nimport { withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\n// import Grid from '@material-ui/core/Grid';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableRow from '@material-ui/core/TableRow';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableHead from '@material-ui/core/TableHead';\nimport Paper from '@material-ui/core/Paper';\n// import FormControlLabel from '@material-ui/core/FormControlLabel';\nimport HexTextField from '../../components/HexTextField';\nimport { decodePayload } from \"../../helpers/packetHelper\";\nimport AppItemStore from \"../../stores/AppItemStore\";\nimport { formatReading } from \"../../styles/formatters\";\n// import { styles } from '../../styles/aircom-styles';\n\nconst styles = {\n};\n\nclass PacketDecoderForm extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n payloadItems: null,\n packetPayload: \"\",\n decodedPacket: null,\n };\n\n this.onChangePacketPayload = this.onChangePacketPayload.bind(this);\n }\n\n componentDidMount() {\n // Load packet items\n AppItemStore.listPayloadItem(resp => {\n this.setState({\n payloadItems: resp.result,\n });\n });\n }\n\n onChangePacketPayload(event) {\n const packetPayload = event.target.value;\n const decodedPacket = decodePayload(packetPayload);\n this.setState({packetPayload, decodedPacket});\n }\n\n render() {\n const {packetPayload, payloadItems} = this.state;\n const pkt = this.state.decodedPacket;\n const {classes} = this.props;\n\n if (payloadItems === null) {\n return null;\n }\n\n let polledRows = [];\n if (pkt) {\n for (let i = 1; i < 11; i++) {\n if (pkt[`modbusPoll${i}`] !== undefined) {\n polledRows.push(\n \n {`Poll ${i}`}\n Yes\n \n )\n }\n }\n }\n\n return(\n \n \n {/* {JSON.stringify(pkt)} */}\n {(pkt && (\n \n \n \n Item\n Reading\n \n \n \n {}\n \n Payload length (bytes)\n {packetPayload.length / 2}\n \n \n Payload is valid\n {pkt.validPacket ? 'Yes' : 'No'}\n \n \n Digital-only packet\n {pkt.digitalOnly === 1 ? 'Yes' : 'No'}\n \n \n Header length (bytes)\n {pkt.headerLength}\n \n {pkt.modbusPacketSize && (\n \n Modbus packet length (bytes)\n {pkt.modbusPacketSize}\n \n )}\n {pkt.maxPolledFlags && (\n \n Max polled flags\n {pkt.maxPolledFlags}\n \n )}\n {payloadItems.map((payloadItem) => {\n const itemValue = pkt[payloadItem.abbreviation.toLowerCase()];\n if (itemValue === undefined) {\n return null;\n } else {\n return (\n \n {payloadItem.name}\n {itemValue === null ? 'Missing' : formatReading(itemValue, payloadItem.defaultFormat)}\n \n )\n }\n })}\n {polledRows}\n \n
\n ))}\n
\n );\n }\n}\n\nPacketDecoderForm.propTypes = {\n classes: PropTypes.any.isRequired,\n // match: PropTypes.any.isRequired, \n}\n\nexport default withStyles(styles)(withRouter(PacketDecoderForm));\n","import React, { Component } from \"react\";\nimport { withRouter } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\n// import Grid from '@material-ui/core/Grid';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableRow from '@material-ui/core/TableRow';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableHead from '@material-ui/core/TableHead';\nimport Paper from '@material-ui/core/Paper';\nimport Button from \"@material-ui/core/Button\";\n// import FormControlLabel from '@material-ui/core/FormControlLabel';\nimport HexTextField from '../../components/HexTextField';\nimport ClearAllIcon from '@material-ui/icons/ClearAll';\nimport TextField from \"@material-ui/core/TextField\";\nimport Typography from '@material-ui/core/Typography';\nimport {decodePayload, encodePayload, MAX_PACKET_BYTES} from \"../../helpers/packetHelper\";\nimport AppItemStore from \"../../stores/AppItemStore\";\n// import { formatReading } from \"../../styles/formatters\";\nimport Checkbox from '@material-ui/core/Checkbox';\n// import { styles } from '../../styles/aircom-styles';\n\nconst styles = {\n};\n\nfunction formatHex(input) {\n // Insert space every two characters\n if (!input) {\n return '';\n }\n let result = '';\n for (let i = 0; i < input.length; i++) {\n if (i > 0 && (i % 2 === 0)) {\n result = result + ' ' + input[i];\n } else {\n result = result + input[i];\n }\n }\n return result.toUpperCase();\n}\n\nfunction isHexValid(str) {\n const legend = '0123456789abcdef';\n for(let i = 0; i < str.length; i++){\n if(legend.includes(str[i])){\n // eslint-disable-next-line no-continue\n continue;\n };\n return false;\n };\n return true;\n};\n\nclass PacketEncoderForm extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n payloadItems: null,\n payloadFields: {\n d1: null,\n d2: null,\n d3: null,\n d4: null,\n a1: null,\n a2: null,\n a3: null,\n a4: null,\n a5: null,\n c1: null,\n c2: null,\n bv: null,\n temp: null,\n time: null,\n modbusPoll1: null,\n modbusPoll2: null,\n modbusPoll3: null,\n modbusPoll4: null,\n modbusPoll5: null,\n modbusPoll6: null,\n modbusPoll7: null,\n modbusPoll8: null,\n modbusPoll9: null,\n modbusPoll10: null,\n },\n packetPayload: \"\",\n decodedPacket: null,\n };\n\n this.onCheckboxChange = this.onCheckboxChange.bind(this);\n this.onPollCheckboxChange = this.onPollCheckboxChange.bind(this);\n this.onPayloadFieldsChange = this.onPayloadFieldsChange.bind(this);\n this.onTextChange = this.onTextChange.bind(this);\n this.onPollTextChange = this.onPollTextChange.bind(this);\n this.clearAll = this.clearAll.bind(this);\n }\n\n componentDidMount() {\n // Load packet items\n AppItemStore.listPayloadItem(resp => {\n this.setState({\n payloadItems: resp.result.filter(item => item.abbreviation < 'MB1' || item.abbreviation > 'MB9').sort((a, b) => a.abbreviation > b.abbreviation ? 1 : -1),\n });\n });\n }\n\n onPayloadFieldsChange(payloadFields) {\n // payloadFields contain text - need to convert to numbers\n // Don't change payloadFields\n // Create pf to be used to encode packet\n\n // Clone payload fields (so not amending original)\n let pf = {...payloadFields};\n\n // Digitals\n for (let i = 1; i <= 4; i++) {\n if (pf[`d${i}`] !== null) {\n pf[`d${i}`] = pf[`d${i}`] === '0' ? 0 : 1;\n }\n }\n\n // Analogues\n for (let i = 1; i <= 5; i++) {\n if (pf[`a${i}`] !== null) {\n pf[`a${i}`] = Number(pf[`a${i}`]);\n }\n }\n\n // Counters\n for (let i = 1; i <= 2; i++) {\n if (pf[`c${i}`] !== null) {\n pf[`c${i}`] = Number(pf[`c${i}`]);\n }\n }\n\n if (pf.bv !== null) {\n pf.bv = Number(pf.bv);\n }\n\n if (pf.temp !== null) {\n pf.temp = Number(pf.temp);\n }\n\n if (pf.time !== null) {\n pf.time = Number(pf.time);\n }\n\n // Polls\n for (let i = 1; i <= 10; i++) {\n let pollHexString = pf[`modbusPoll${i}`];\n if (pollHexString !== null) {\n if ((pollHexString.length % 2) === 1) {\n pollHexString = '0' + pollHexString;\n }\n if (!isHexValid(pollHexString)) {\n pollHexString = '';\n }\n pf[`modbusPoll${i}`] = pollHexString;\n }\n }\n\n const packetPayload = encodePayload(pf);\n const decodedPacket = decodePayload(packetPayload);\n this.setState({payloadFields, packetPayload, decodedPacket});\n }\n\n onCheckboxChange(e) {\n let {payloadFields} = this.state;\n payloadFields[e.target.id] = e.target.checked ? '0' : null;\n this.onPayloadFieldsChange(payloadFields);\n }\n\n onPollCheckboxChange(e) {\n let {payloadFields} = this.state;\n payloadFields[e.target.id] = e.target.checked ? '00000000' : null;\n this.onPayloadFieldsChange(payloadFields);\n }\n\n onTextChange(e) {\n let {payloadFields} = this.state;\n payloadFields[e.target.id] = e.target.value;\n this.onPayloadFieldsChange(payloadFields);\n }\n\n onPollTextChange(e) {\n let {payloadFields} = this.state;\n payloadFields[e.target.id] = e.target.value;\n if (isHexValid(payloadFields[e.target.id])) {\n this.onPayloadFieldsChange(payloadFields);\n }\n }\n\n clearAll() {\n this.setState({\n payloadFields: {\n d1: null,\n d2: null,\n d3: null,\n d4: null,\n a1: null,\n a2: null,\n a3: null,\n a4: null,\n a5: null,\n c1: null,\n c2: null,\n bv: null,\n temp: null,\n time: null,\n modbusPoll1: null,\n modbusPoll2: null,\n modbusPoll3: null,\n modbusPoll4: null,\n modbusPoll5: null,\n modbusPoll6: null,\n modbusPoll7: null,\n modbusPoll8: null,\n modbusPoll9: null,\n modbusPoll10: null,\n },\n packetPayload: \"\",\n decodedPacket: null,\n });\n }\n\n render() {\n const {packetPayload, payloadItems, payloadFields, decodedPacket} = this.state;\n const {classes} = this.props;\n\n if (payloadItems === null) {\n return null;\n }\n\n const spaceLeft = MAX_PACKET_BYTES - Math.floor(packetPayload.length * 0.5);\n\n const formattedPayload = formatHex(packetPayload);\n\n let polledRows = [];\n for (let i = 1; i < 11; i++) {\n const itemChecked = payloadFields[`modbusPoll${i}`] !== null;\n const thisValue = payloadFields[`modbusPoll${i}`];\n let decodedValue = decodedPacket ? decodedPacket[`modbusPoll${i}`] : null;\n decodedValue = (decodedValue === 1) ? 'Y' : '-';\n polledRows.push(\n \n \n \n \n {`POLL-${i}`}\n \n \n \n \n {decodedValue}\n \n )\n }\n\n return(\n \n \n \n Packet length (bytes): \n {packetPayload.length / 2}\n }\n onClick={this.clearAll}\n >\n Clear All\n \n \n \n \n \n Item\n {'Desired Value'}\n {'Encoded Value'}\n \n \n \n {payloadItems.map((item) => {\n const thisValue = payloadFields[item.abbreviation.toLocaleLowerCase()];\n const itemChecked = thisValue !== null;\n let decodedValue = decodedPacket ? decodedPacket[item.abbreviation.toLocaleLowerCase()] : null;\n if (decodedValue === null || decodedValue === undefined) {\n decodedValue = '-';\n }\n return(\n \n \n \n \n {item.name}\n \n \n \n \n {decodedValue}\n \n )\n })}\n {polledRows}\n \n
\n
\n );\n }\n}\n\nPacketEncoderForm.propTypes = {\n classes: PropTypes.any.isRequired,\n // match: PropTypes.any.isRequired, \n}\n\nexport default withStyles(styles)(withRouter(PacketEncoderForm));\n","import React, { Component } from \"react\";\nimport { Route, Link, withRouter } from \"react-router-dom\";\nimport { withStyles } from \"@material-ui/core/styles\";\nimport PropTypes from \"prop-types\";\n\nimport Grid from '@material-ui/core/Grid';\nimport TitleBar from \"../../components/TitleBar\";\nimport TitleBarTitle from \"../../components/TitleBarTitle\";\nimport SessionStore from \"../../stores/SessionStore\";\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport theme from \"../../theme\";\nimport PacketDecoderForm from \"./PacketDecoderForm\";\nimport PacketEncoderForm from \"./PacketEncoderForm\";\n\nconst styles = {\n tabs: {\n borderBottom: \"1px solid \" + theme.palette.divider,\n height: \"48px\",\n overflow: \"visible\",\n },\n};\n\nclass UtilsForm extends Component {\n constructor() {\n super();\n this.state = {\n tab: 0,\n admin: false,\n };\n\n this.locationToTab = this.locationToTab.bind(this);\n this.onChangeTab = this.onChangeTab.bind(this);\n this.setIsAdmin = this.setIsAdmin.bind(this);\n }\n\n componentDidMount() {\n SessionStore.on(\"change\", this.setIsAdmin);\n this.setIsAdmin();\n this.locationToTab();\n }\n\n componentWillUnmount() {\n SessionStore.removeListener(\"change\", this.setIsAdmin);\n }\n\n componentDidUpdate(oldProps) {\n if (this.props === oldProps) {\n return;\n }\n\n this.locationToTab();\n }\n\n setIsAdmin() {\n this.setState({\n admin: SessionStore.isAdmin(),\n });\n }\n\n locationToTab() {\n let tab = 0;\n\n if (window.location.href.endsWith(\"/encoder\")) {\n tab = 1;\n }\n\n // if (window.location.href.endsWith(\"/settings\")) {\n // tab = 2;\n // }\n\n this.setState({\n tab: tab,\n });\n }\n\n onChangeTab(e, v) {\n this.setState({\n tab: v,\n });\n }\n\n render() {\n return(\n \n \n \n \n \n \n \n \n \n \n \n } />\n } />\n \n \n );\n }\n}\n\nUtilsForm.propTypes = {\n classes: PropTypes.any.isRequired,\n // match: PropTypes.any.isRequired,\n}\n\nexport default withStyles(styles)(withRouter(UtilsForm));\n","import React, { Component } from \"react\";\r\nimport { Router, Route, Switch, Redirect } from 'react-router-dom';\r\n// import classNames from \"classnames\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\r\nimport { MuiThemeProvider, withStyles } from \"@material-ui/core/styles\";\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nimport history from \"./history\";\r\nimport theme from \"./theme\";\r\n\r\nimport TopNav from \"./components/TopNav\";\r\nimport SideNav from \"./components/SideNav\";\r\nimport Footer from \"./components/Footer\";\r\nimport Notifications from \"./components/Notifications\";\r\nimport SessionStore from \"./stores/SessionStore\";\r\nimport Dashboard from \"./views/dashboard/Dashboard\";\r\n\r\n// system\r\nimport SystemDashboard from \"./views/system/SystemDashboard\";\r\n// import SystemSetup from \"./views/system/SystemSetup\";\r\n// import SystemDashboardSetup from \"./views/system/SystemDashboardSetup\";\r\n\r\n// network-server\r\nimport ListNetworkServers from \"./views/network-servers/ListNetworkServers\";\r\nimport CreateNetworkServer from \"./views/network-servers/CreateNetworkServer\";\r\nimport NetworkServerLayout from \"./views/network-servers/NetworkServerLayout\";\r\n\r\n// gateway profiles\r\n// import ListGatewayProfiles from \"./views/gateway-profiles/ListGatewayProfiles\";\r\n// import CreateGatewayProfile from \"./views/gateway-profiles/CreateGatewayProfile\";\r\n// import GatewayProfileLayout from \"./views/gateway-profiles/GatewayProfileLayout\";\r\n\r\n// organization\r\nimport ListOrganizations from \"./views/organizations/ListOrganizations\";\r\nimport CreateOrganization from \"./views/organizations/CreateOrganization\";\r\n// import OrganizationLayout from \"./views/organizations/OrganizationLayout\";\r\nimport OrganizationDashboard from \"./views/organizations/OrganizationDashboard\";\r\n// import ListOrganizationUsers from \"./views/organizations/ListOrganizationUsers\";\r\nimport OrganizationUserLayout from \"./views/organizations/OrganizationUserLayout\";\r\nimport CreateOrganizationUser from \"./views/organizations/CreateOrganizationUser\";\r\nimport OrganizationRedirect from \"./views/organizations/OrganizationRedirect\";\r\n\r\n// import OrganizationDashboardSetup from \"./views/organizations/OrganizationDashboardSetup\";\r\nimport OrganizationSetup from \"./views/organizations/OrganizationSetup\";\r\n\r\n// user\r\nimport Login from \"./views/users/Login\";\r\n// import ListUsers from \"./views/users/ListUsers\";\r\nimport CreateUser from \"./views/users/CreateUser\";\r\nimport UserLayout from \"./views/users/UserLayout\";\r\nimport ChangeUserPassword from \"./views/users/ChangeUserPassword\";\r\n\r\n// service-profile\r\nimport ListServiceProfiles from \"./views/service-profiles/ListServiceProfiles\";\r\nimport CreateServiceProfile from \"./views/service-profiles/CreateServiceProfile\";\r\nimport ServiceProfileLayout from \"./views/service-profiles/ServiceProfileLayout\";\r\n\r\n// device-profile\r\nimport ListDeviceProfiles from \"./views/device-profiles/ListDeviceProfiles\";\r\nimport CreateDeviceProfile from \"./views/device-profiles/CreateDeviceProfile\";\r\nimport DeviceProfileLayout from \"./views/device-profiles/DeviceProfileLayout\";\r\n\r\n// gateways\r\n// import ListGateways from \"./views/gateways/ListGateways\";\r\nimport GatewayLayout from \"./views/gateways/GatewayLayout\";\r\nimport CreateGateway from \"./views/gateways/CreateGateway\";\r\n\r\n// applications\r\nimport ListApplications from \"./views/applications/ListApplications\";\r\nimport CreateApplication from \"./views/applications/CreateApplication\";\r\n// import ApplicationDashboard from \"./views/applications/ApplicationDashboard\";\r\n// import ApplicationDashboardSetup from \"./views/applications/ApplicationDashboardSetup\";\r\nimport ApplicationUplinks from \"./views/applications/ApplicationUplinks\";\r\nimport ApplicationDownlinks from \"./views/applications/ApplicationDownlinks\";\r\nimport ApplicationDevices from \"./views/applications/ApplicationDevices\";\r\nimport ApplicationLayout from \"./views/applications/ApplicationLayout\";\r\nimport ApplicationEvents from \"./views/applications/ApplicationEvents\";\r\nimport ApplicationItemLayout from \"./views/applications/ApplicationItemLayout\";\r\nimport CreateApplicationItem from \"./views/applications/CreateApplicationItem\";\r\n\r\n// multicast-groups\r\n// import ListMulticastGroups from \"./views/multicast-groups/ListMulticastGroups\";\r\n// import CreateMulticastGroup from \"./views/multicast-groups/CreateMulticastGroup\";\r\n// import MulticastGroupLayout from \"./views/multicast-groups/MulticastGroupLayout\";\r\n// import AddDeviceToMulticastGroup from \"./views/multicast-groups/AddDeviceToMulticastGroup\";\r\n\r\n// device\r\nimport CreateDevice from \"./views/devices/CreateDevice\";\r\nimport DeviceLayout from \"./views/devices/DeviceLayout\";\r\n\r\n// device-groups\r\nimport ApplicationDeviceGroups from \"./views/applications/ApplicationDeviceGroups\";\r\nimport DeviceGroupLayout from \"./views/device-groups/DeviceGroupLayout\";\r\nimport CreateDeviceGroup from \"./views/device-groups/CreateDeviceGroup\";\r\nimport CreateDeviceGroupPoll from \"./views/device-groups/CreateDeviceGroupPoll\";\r\nimport DeviceGroupPollLayout from \"./views/device-groups/DeviceGroupPollLayout\";\r\n\r\n// utils\r\nimport UtilsForm from \"./views/utils/UtilsForm\";\r\n\r\n// search\r\n// import Search from \"./views/search/Search\";\r\n\r\n// API Keys\r\n// import ListAdminAPIKeys from \"./views/api-keys/ListAdminAPIKeys\";\r\n// import CreateAdminAPIKey from \"./views/api-keys/CreateAdminAPIKey\";\r\n// import ListOrganizationAPIKeys from \"./views/api-keys/ListOrganizationAPIKeys\";\r\n// import CreateOrganizationAPIKey from \"./views/api-keys/CreateOrganizationAPIKey\";\r\n\r\n\r\nconst drawerWidth = 270;\r\n\r\nconst styles = {\r\n root: {\r\n flexGrow: 1,\r\n display: \"flex\",\r\n minHeight: \"100vh\",\r\n flexDirection: \"column\",\r\n },\r\n paper: {\r\n padding: theme.spacing(2),\r\n textAlign: 'center',\r\n color: theme.palette.text.secondary,\r\n },\r\n main: {\r\n width: \"100%\",\r\n padding: 2 * 24,\r\n paddingTop: 115,\r\n flex: 1,\r\n },\r\n\r\n mainDrawerOpen: {\r\n paddingLeft: drawerWidth + (2 * 24),\r\n },\r\n footerDrawerOpen: {\r\n paddingLeft: drawerWidth,\r\n },\r\n};\r\n\r\n\r\nclass App extends Component {\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n user: null,\r\n drawerOpen: false,\r\n };\r\n\r\n this.setDrawerOpen = this.setDrawerOpen.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n SessionStore.on(\"change\", () => {\r\n this.setState({\r\n user: SessionStore.getUser(),\r\n // drawerOpen: SessionStore.getUser() != null,\r\n drawerOpen: false,\r\n });\r\n });\r\n\r\n this.setState({\r\n user: SessionStore.getUser(),\r\n // drawerOpen: SessionStore.getUser() != null,\r\n drawerOpen: false,\r\n });\r\n }\r\n\r\n setDrawerOpen(state) {\r\n this.setState({\r\n drawerOpen: state,\r\n });\r\n }\r\n\r\n render() {\r\n let topNav = null;\r\n let sideNav = null;\r\n let redirectToLogin = ;\r\n\r\n if (this.state.user !== null) {\r\n topNav = ;\r\n sideNav = \r\n redirectToLogin = null;\r\n }\r\n\r\n return (\r\n \r\n <>\r\n \r\n \r\n
\r\n {topNav}\r\n {sideNav}\r\n {/*
*/}\r\n
\r\n \r\n \r\n\r\n \r\n \r\n\r\n {/* Everything past here needs logged in user */}\r\n {redirectToLogin}\r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n {/* */}\r\n\r\n \r\n \r\n \r\n\r\n {/* \r\n \r\n */}\r\n\r\n {/* \r\n */}\r\n\r\n {/* \r\n */}\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n\r\n {/* \r\n \r\n \r\n */}\r\n\r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n {/* */}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nApp.propTypes = {\r\n classes: PropTypes.any.isRequired\r\n}\r\n\r\nexport default withStyles(styles)(App);\r\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\n\nimport \"typeface-roboto\";\nimport Leaflet from \"leaflet\";\n\nimport App from \"./App\";\n\nimport \"leaflet/dist/leaflet.css\";\nimport \"leaflet.awesome-markers/dist/leaflet.awesome-markers.css\";\nimport \"codemirror/lib/codemirror.css\";\nimport \"codemirror/theme/base16-light.css\";\nimport \"react-leaflet-markercluster/dist/styles.min.css\";\nimport \"@fortawesome/fontawesome-free/css/all.min.css\";\nimport \"./index.css\";\n\nLeaflet.Icon.Default.imagePath = \"//cdnjs.cloudflare.com/ajax/libs/leaflet/1.0.0/images/\"\n\nReactDOM.render(, document.getElementById(\"root\"));\n","import React, { Component } from \"react\";\n\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport IconButton from '@material-ui/core/IconButton';\nimport Button from \"@material-ui/core/Button\";\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Fade from '@material-ui/core/Fade';\n\nimport Eye from \"mdi-material-ui/Eye\";\nimport EyeOff from \"mdi-material-ui/EyeOff\";\nimport Refresh from \"mdi-material-ui/Refresh\";\nimport Copy from \"mdi-material-ui/ContentCopy\";\n\nimport MaskedInput from \"react-text-mask\";\nfunction CopyMenu(props) {\n const [anchorEl, setAnchorEl] = React.useState(null);\n const open = Boolean(anchorEl);\n\n function handleClick(event) {\n setAnchorEl(event.currentTarget);\n }\n\n function handleClose() {\n setAnchorEl(null);\n }\n\n function copyToClipboard() {\n const bytes = props.value.match(/[A-Fa-f0-9]{2}/g);\n \n if (bytes !== null) {\n navigator.clipboard.writeText(bytes.join(\"\").toUpperCase())\n }\n handleClose()\n }\n function copyToClipboardHexArray() {\n const bytes = props.value.match(/[A-Fa-f0-9]{2}/g);\n \n if (bytes !== null) {\n navigator.clipboard.writeText(bytes.join(\", \").toUpperCase().replace(/[A-Fa-f0-9]{2}/g, \"0x$&\"))\n }\n handleClose()\n }\n\n return (\n
\n \n \n \n \n Hex String\n Hex Array\n \n
\n );\n}\n\nclass AESKeyHEXMask extends Component {\n render() {\n const { inputRef, ...other } = this.props;\n\n return(\n {\n inputRef(ref ? ref.inputElement : null);\n }}\n mask={[\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ]}\n />\n );\n }\n}\n\n\nclass AESKeyField extends Component {\n constructor() {\n super();\n\n this.state = {\n showKey: false,\n msb: true,\n value: \"\",\n };\n }\n\n toggleShowPassword = () => {\n this.setState({\n showKey: !this.state.showKey,\n });\n }\n\n toggleByteOrder = () => {\n this.setState({\n msb: !this.state.msb,\n });\n\n const bytes = this.state.value.match(/[A-Fa-f0-9]{2}/g);\n if (bytes !== null) {\n this.setState({\n value: bytes.reverse().join(\" \"),\n });\n }\n }\n\n randomKey = () => {\n let cryptoObj = window.crypto || window.msCrypto;\n let b = new Uint8Array(16);\n cryptoObj.getRandomValues(b);\n\n let key = Buffer.from(b).toString('hex');\n this.setState({\n value: key,\n });\n\n let str = \"\";\n const bytes = key.match(/[A-Fa-f0-9]{2}/g);\n if (!this.state.msb && bytes !== null) {\n str = bytes.reverse().join(\"\");\n } else if (bytes !== null) {\n str = bytes.join(\"\");\n } else {\n str = \"\";\n }\n\n this.props.onChange({\n target: {\n value: str,\n type: \"text\",\n id: this.props.id,\n },\n });\n }\n\n onChange = (e) => {\n this.setState({\n value: e.target.value,\n });\n\n let str = \"\";\n\n const bytes = e.target.value.match(/[A-Fa-f0-9]{2}/g);\n if (!this.state.msb && bytes !== null) {\n str = bytes.reverse().join(\"\");\n } else if (bytes !== null) {\n str = bytes.join(\"\");\n } else {\n str = \"\";\n }\n\n this.props.onChange({\n target: {\n value: str,\n type: \"text\",\n id: this.props.id,\n },\n });\n }\n\n componentDidMount() {\n this.setState({\n value: this.props.value || \"\",\n showKey: this.props.value === \"\" ? true : false,\n });\n }\n\n render() {\n return(\n \n {this.state.showKey && \n \n {this.state.msb ? \"MSB\": \"LSB\"}\n \n }\n {this.props.random && this.state.showKey && !this.props.disabled && \n \n \n \n }\n {this.state.showKey &&\n }\n \n {this.state.showKey ? : }\n \n \n }}\n {...this.props}\n onChange={this.onChange}\n value={this.state.value}\n disabled={this.props.disabled || !this.state.showKey}\n />\n );\n }\n}\n\nexport default AESKeyField;\n","// import {unixMsToCSVString /*, unixMsToTimeString, unixUtcMsToTimeString*/} from '../i18n/i18nhelpers';\nimport moment from \"moment\";\n\nconst MAX_POLLED_READINGS = 20;\nexport const MAX_PACKET_BYTES = 50;\n\nexport function unixMsToCSVString(unixMs = 0) {\n const aDate = new Date(unixMs);\n return moment(aDate).format('YYYY-MM-DD HH:mm:ss');\n}\n\nfunction checkBit(number, bitPos)\n{\n // eslint-disable-next-line no-bitwise\n return (number & (1 << bitPos)) === 0 ? 0 : 1;\n}\n\nexport function setBit(value, bitNum) {\n // eslint-disable-next-line no-bitwise\n var mask = 1 << bitNum;\n let result = value || 0;\n // eslint-disable-next-line no-bitwise\n result |= mask;\n return result;\n}\n\nexport function clearBit(value, bitNum) {\n // eslint-disable-next-line no-bitwise\n var mask = 1 << bitNum;\n let result = value || 0;\n // eslint-disable-next-line no-bitwise\n result &= ~mask;\n return result;\n}\n\n/**\n * \n * @param {*} buffer \n * @returns\n * Returns expected fields with value set to null\n * This means we can tell if expected item is missing \n */\nfunction prepopulateContents(buffer)\n{\n var result = {};\n\n if (buffer.length < 1) { //nothing\n return result;\n }\n\n result.validHeader = true;\n result.headerLength = 1;\n for (let i = 0; i < buffer.length; i++) {\n if (checkBit(buffer.readUInt8(i), 7) === 1) {\n if ((buffer.length - 1) > i) {\n result.headerLength += 1;\n } else {\n // Next byte of header is missing\n result.validHeader = false;\n break;\n }\n } else {\n // Last bit not set, so no more header\n break;\n }\n }\n\n const headerByte1 = buffer.readUInt8(0);\n if (checkBit(headerByte1, 0) === 1) {\n result.digitalOnly = 1;\n result.d1 = checkBit(headerByte1, 1);\n result.d2 = checkBit(headerByte1, 2);\n result.d3 = checkBit(headerByte1, 3);\n result.d4 = checkBit(headerByte1, 4);\n // Valid digital-only packet must be between 1 and 4 bytes long\n // With last bit of each header byte set\n\n result.validPacket = result.validHeader && (buffer.length <= 4);\n\n if (result.validPacket) {\n if (buffer.length > 1) {\n result.maxPolledFlags = (buffer.length - 1) * 8; \n if (result.maxPolledFlags > MAX_POLLED_READINGS) {\n result.maxPolledFlags = MAX_POLLED_READINGS\n }\n }\n }\n\n return result;\n }\n\n result.digitalOnly = 0;\n if (checkBit(headerByte1, 1) === 1) {\n // Include digitals\n result.d1 = null;\n result.d2 = null;\n result.d3 = null;\n result.d4 = null;\n }\n\n if (checkBit(headerByte1, 2) === 1) {\n result.a1 = null;\n }\n \n if (checkBit(headerByte1, 3) === 1) {\n result.a2 = null;\n }\n \n if (checkBit(headerByte1, 4) === 1) {\n result.c1 = null;\n }\n \n if (checkBit(headerByte1, 5) === 1) {\n result.c2 = null;\n }\n \n if (checkBit(headerByte1, 6) === 1) {\n result.bv = null;\n result.temp = null;\n result.time = null;\n };\n\n if ((checkBit(headerByte1, 7) !== 1) || (buffer.length < 2)) {\n return result; \n }\n\n const headerByte2 = buffer.readUInt8(1);\n result.headerLength = 2;\n\n if (checkBit(headerByte2, 0) === 1) {\n result.modbusPacketSize = null;\n }\n \n if (checkBit(headerByte2, 1) === 1) {\n result.a3 = null;\n }\n\n if (checkBit(headerByte2, 2) === 1) {\n result.a4 = null;\n }\n\n if (checkBit(headerByte2, 3) === 1) {\n result.a5 = null;\n }\n\n return result;\n}\n\n/**\n * \n * @param {*} payloadHex \n */\nexport function decodePayload(payloadHex) {\n const buffer = Buffer.from(payloadHex, 'hex');\n\n //new packet structure, packet versions 1 and 2 have been dropped\n\n if (buffer.length < 1) { //nothing\n return {\n validPacket: false\n };\n }\n\n let result = prepopulateContents(buffer);\n\n if (!result.validHeader) {\n result.validPacket = false;\n return result;\n }\n\n if (result.digitalOnly === 1) {\n return result;\n }\n\n result.validPacket = false;\n\n var startPos = result.headerLength;\n const packetLength = buffer.length;\n\n if ((packetLength - startPos) < 1) {\n return result;\n }\n\n if (result.d1 === null) {\n const digitals = buffer.readUInt8(startPos);\n result.d1 = checkBit(digitals, 0);\n result.d2 = checkBit(digitals, 1);\n result.d3 = checkBit(digitals, 2);\n result.d4 = checkBit(digitals, 3);\n startPos = startPos + 1;\n }\n\n if (result.a1 === null) {\n if ((packetLength - startPos) >= 4) {\n result.a1 = buffer.readFloatLE(startPos)\n startPos = startPos + 4;\n } else {\n return result;\n }\n }\n\n if (result.a2 === null) {\n if ((packetLength - startPos) >= 4) {\n result.a2 = buffer.readFloatLE(startPos)\n startPos = startPos + 4;\n } else {\n return result;\n }\n }\n\n if (result.a3 === null) {\n if ((packetLength - startPos) >= 4) {\n result.a3 = buffer.readFloatLE(startPos)\n startPos = startPos + 4;\n } else {\n return result;\n }\n }\n\n if (result.a4 === null) {\n if ((packetLength - startPos) >= 4) {\n result.a4 = buffer.readFloatLE(startPos)\n startPos = startPos + 4;\n } else {\n return result;\n }\n }\n\n if (result.a5 === null) {\n if ((packetLength - startPos) >= 4) {\n result.a5 = buffer.readFloatLE(startPos)\n startPos = startPos + 4;\n } else {\n return result;\n }\n }\n\n if (result.c1 === null) {\n if ((packetLength - startPos) >= 4) {\n result.c1 = buffer.readUInt32LE(startPos);\n startPos = startPos + 4;\n } else {\n return result;\n }\n }\n\n if (result.c2 === null) {\n if ((packetLength - startPos) >= 4) {\n result.c2 = buffer.readUInt32LE(startPos);\n startPos = startPos + 4;\n } else {\n return result;\n }\n }\n\n if (result.bv === null) {\n if ((packetLength - startPos) >= 6) {\n result.bv = (buffer.readUInt8(startPos) * 0.01) + 1.5;\n result.temp = (buffer.readUInt8(startPos + 1) * 0.5) - 20;\n result.time = buffer.readUInt32LE(startPos + 2);\n startPos = startPos + 6;\n } else {\n return result;\n }\n }\n\n if (result.modbusPacketSize === null) {\n // Must be at least modbus packet size and 2-byte modbus header\n let endPos = 0;\n if ((packetLength - startPos) >= 3) {\n result.modbusPacketSize = buffer.readUInt8(startPos);\n endPos = startPos + result.modbusPacketSize + 1;\n startPos = startPos + 1;\n } else {\n return result;\n }\n if ((packetLength - endPos) !== 0) {\n return result;\n }\n\n const modbusHeader = buffer.readUInt16BE(startPos);\n for (let i = 0; i < 10; i++) {\n if (checkBit(modbusHeader, i) === 1) {\n result[`modbusPoll${i + 1}`] = 1;\n }\n }\n\n startPos = endPos;\n }\n\n if ((packetLength - startPos) === 0) {\n result.validPacket = 1;\n }\n \n return result;\n}\n\n/**\n * \n * @param {*} payloadFields \n */\nexport function encodePayload(payloadFields) {\n\n const buffer = Buffer.alloc(100); // Allow extra space to be safe\n\n let writePos = 0;\n let headerBytes = [0, 0, 0, 0];\n let headerByteCount = 1;\n\n // Analogues\n const {a1, a2, a3, a4, a5, c1, c2, d1, d2, d3, d4, bv, temp, time} = payloadFields;\n let digitalOnlyPacket = false;\n\n if (d1 !== null || d2 !== null || d3 !== null || d4 !== null) {\n digitalOnlyPacket = true;\n headerBytes[0] = setBit(headerBytes[0], 1);\n let digitalsByte = 0;\n if (d1) {\n digitalsByte = setBit(digitalsByte, 0);\n }\n if (d2) {\n digitalsByte = setBit(digitalsByte, 1);\n }\n if (d3) {\n digitalsByte = setBit(digitalsByte, 2);\n }\n if (d4) {\n digitalsByte = setBit(digitalsByte, 3);\n }\n buffer.writeUInt8(digitalsByte, writePos);\n writePos += 1;\n }\n \n if (a1 !== null && (MAX_PACKET_BYTES - writePos - headerByteCount) >= 4) {\n headerBytes[0] = setBit(headerBytes[0], 2);\n buffer.writeFloatLE(a1, writePos);\n writePos += 4;\n digitalOnlyPacket = false;\n }\n if (a2 !== null && (MAX_PACKET_BYTES - writePos - headerByteCount) >= 4) {\n headerBytes[0] = setBit(headerBytes[0], 3);\n buffer.writeFloatLE(a2, writePos);\n writePos += 4;\n digitalOnlyPacket = false;\n }\n\n if (a3 !== null && (MAX_PACKET_BYTES - writePos - headerByteCount) >= 4) {\n headerByteCount = 2;\n headerBytes[0] = setBit(headerBytes[0], 7);\n headerBytes[1] = setBit(headerBytes[1], 1);\n buffer.writeFloatLE(a3, writePos);\n writePos += 4;\n digitalOnlyPacket = false;\n }\n if (a4 !== null && (MAX_PACKET_BYTES - writePos - headerByteCount) >= 4) {\n headerByteCount = 2;\n headerBytes[0] = setBit(headerBytes[0], 7);\n headerBytes[1] = setBit(headerBytes[1], 2);\n buffer.writeFloatLE(a4, writePos);\n writePos += 4;\n digitalOnlyPacket = false;\n }\n if (a5 !== null && (MAX_PACKET_BYTES - writePos - headerByteCount) >= 4) {\n headerByteCount = 2;\n headerBytes[0] = setBit(headerBytes[0], 7);\n headerBytes[1] = setBit(headerBytes[1], 3);\n buffer.writeFloatLE(a5, writePos);\n writePos += 4;\n digitalOnlyPacket = false;\n }\n\n if (c1 !== null && (MAX_PACKET_BYTES - writePos - headerByteCount) >= 4) {\n headerBytes[0] = setBit(headerBytes[0], 4);\n buffer.writeUInt32LE(c1, writePos);\n writePos += 4;\n digitalOnlyPacket = false;\n }\n if (c2 !== null && (MAX_PACKET_BYTES - writePos - headerByteCount) >= 4) {\n headerBytes[0] = setBit(headerBytes[0], 5);\n buffer.writeUInt32LE(c2, writePos);\n writePos += 4;\n digitalOnlyPacket = false;\n }\n\n // Diagnostics\n if ((MAX_PACKET_BYTES - writePos - headerByteCount) >= 6 && (bv !== null || temp !== null || time !== null)) {\n headerBytes[0] = setBit(headerBytes[0], 6);\n digitalOnlyPacket = false;\n\n if (bv === null || bv < 1.5) {\n buffer.writeUInt8(0, writePos);\n } else if (bv > 4.05) {\n buffer.writeUInt8(255, writePos);\n } else {\n buffer.writeUInt8(Math.round(((bv - 1.5)/(4.05 - 1.5)) * 255), writePos);\n };\n writePos += 1;\n \n if (temp === null || temp < -20) {\n buffer.writeUInt8(0, writePos);\n } else if (temp > 107.5) {\n buffer.writeUInt8(255, writePos);\n } else {\n buffer.writeUInt8(Math.round(((temp + 20)/(107.5 + 20)) * 255), writePos);\n };\n writePos += 1;\n \n if (time === null || time < 0) {\n buffer.writeUInt32LE(0, writePos);\n } else if ((time * 0.001) > 4294967295) {\n buffer.writeUInt32LE(4294967295, writePos);\n } else {\n buffer.writeUInt32LE(Math.round(time * 0.001), writePos);\n }\n writePos += 4;\n }\n\n // Modbus next\n let modbusLength = 0;\n let modbusHeader = 0;\n let modbusBuffer;\n let modbusString = '';\n let thisVal;\n let modbusIncluded = false;\n let bytesRemaining = MAX_PACKET_BYTES - writePos - 5; // Allow 2 for header and 3 for modbus size and header\n for (let i = 1; i <= 10; i++) {\n thisVal = payloadFields[`modbusPoll${i}`];\n if (thisVal !== null) {\n modbusBuffer = Buffer.from(thisVal, 'hex');\n if (bytesRemaining >= modbusBuffer.length) {\n modbusHeader = setBit(modbusHeader, i - 1);\n headerByteCount = 2;\n headerBytes[1] = setBit(headerBytes[1], 0);\n modbusLength += modbusBuffer.length;\n bytesRemaining = bytesRemaining - modbusBuffer.length;\n modbusString = modbusString + modbusBuffer.toString('hex');\n modbusIncluded = true;\n digitalOnlyPacket = false;\n }\n }\n }\n if (modbusIncluded) {\n modbusLength += 2; // Include modbus header\n const Buf2 = Buffer.alloc(3);\n Buf2.writeUInt8(modbusLength, 0);\n Buf2.writeUInt16BE(modbusHeader, 1); // Big-endian\n modbusString = Buf2.toString('hex') + modbusString;\n }\n\n if (digitalOnlyPacket) {\n headerByteCount = 1;\n headerBytes[0] = setBit(headerBytes[0], 0);\n if (d1 !== null && d1 !== 0) {\n headerBytes[0] = setBit(headerBytes[0], 1);\n }\n if (d2 !== null && d2 !== 0) {\n headerBytes[0] = setBit(headerBytes[0], 2);\n }\n if (d3 !== null && d3 !== 0) {\n headerBytes[0] = setBit(headerBytes[0], 3);\n }\n if (d4 !== null && d4 !== 0) {\n headerBytes[0] = setBit(headerBytes[0], 4);\n }\n }\n\n if (headerByteCount > 1) {\n headerBytes[0] = setBit(headerBytes[0], 7);\n }\n const headerBuffer = Buffer.alloc(headerByteCount);\n headerBuffer.writeUInt8(headerBytes[0], 0);\n\n if (digitalOnlyPacket) {\n return headerBuffer.toString('hex');\n }\n\n if (headerByteCount >= 2) {\n headerBuffer.writeUInt8(headerBytes[1], 1);\n }\n return headerBuffer.toString('hex') + buffer.toString('hex', 0, writePos) + modbusString;\n}","import React, { Component } from \"react\";\n\nimport Paper from '@material-ui/core/Paper';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport theme from \"../theme\";\n\n\nconst styles = {\n root: {\n padding: theme.spacing(2),\n },\n};\n\n\nclass PaperComponent extends Component {\n render() {\n return(\n \n {this.props.children}\n \n );\n }\n}\n\nexport default withStyles(styles)(PaperComponent);","import { Dispatcher } from \"flux\";\n\nexport default new Dispatcher();\n","import { createHashHistory } from 'history';\nexport default createHashHistory();\n","import React, { Component } from \"react\";\n\nimport { unparse } from \"uuid-parse\";\nimport JSONTreeOriginal from \"react-json-tree\";\n\n\nclass JSONTree extends Component {\n render() {\n const theme = {\n scheme: 'google',\n author: 'seth wright (http://sethawright.com)',\n base00: '#000000',\n base01: '#282a2e',\n base02: '#373b41',\n base03: '#969896',\n base04: '#b4b7b4',\n base05: '#c5c8c6',\n base06: '#e0e0e0',\n base07: '#ffffff',\n base08: '#CC342B',\n base09: '#F96A38',\n base0A: '#FBA922',\n base0B: '#198844',\n base0C: '#3971ED',\n base0D: '#3971ED',\n base0E: '#A36AC7',\n base0F: '#3971ED',\n }\n\n // :(\n let data = JSON.parse(JSON.stringify(this.props.data));\n\n if (\"devEUI\" in data && data.devEUI !== null) {\n data.devEUI = base64ToHex(data.devEUI);\n }\n\n if (\"devAddr\" in data && data.devAddr !== null) {\n data.devAddr = base64ToHex(data.devAddr);\n }\n\n if (\"rxInfo\" in data && data.rxInfo !== null) {\n for (let i = 0; i < data.rxInfo.length; i++) {\n if (\"gatewayID\" in data.rxInfo[i] && data.rxInfo[i].gatewayID !== null) {\n data.rxInfo[i].gatewayID = base64ToHex(data.rxInfo[i].gatewayID);\n }\n\n if (\"uplinkID\" in data.rxInfo[i] && data.rxInfo[i].uplinkID !== null) {\n const id = Buffer.from(data.rxInfo[i].uplinkID, 'base64');\n data.rxInfo[i].uplinkID = unparse(id);\n }\n }\n }\n\n if (\"uplinkIDs\" in data && data.uplinkIDs !== null) {\n for (let i = 0; i < data.uplinkIDs.length; i++) {\n const id = Buffer.from(data.uplinkIDs[i], 'base64');\n data.uplinkIDs[i] = unparse(id);\n }\n }\n\n if (\"objectJSON\" in data && data.objectJSON !== null && data.objectJSON !== \"\") {\n data.objectJSON = JSON.parse(data.objectJSON);\n }\n\n return(\n {return true}}\n />\n );\n }\n}\n\nfunction base64ToHex(str) {\n return Buffer.from(str, 'base64').toString('hex');\n}\n\nexport default JSONTree;\n","import React, { Component } from \"react\";\n\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport IconButton from '@material-ui/core/IconButton';\nimport Button from \"@material-ui/core/Button\";\nimport Tooltip from '@material-ui/core/Tooltip';\n\nimport Refresh from \"mdi-material-ui/Refresh\";\n\nimport MaskedInput from \"react-text-mask\";\n\n\nclass EUI64HEXMask extends Component {\n render() {\n const { inputRef, ...other } = this.props;\n\n return(\n {\n inputRef(ref ? ref.inputElement : null);\n }}\n mask={[\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ' ',\n /[A-Fa-f0-9]/,\n /[A-Fa-f0-9]/,\n ]}\n />\n );\n }\n}\n\n\nclass EUI64Field extends Component {\n constructor() {\n super();\n\n this.state = {\n msb: true,\n value: \"\",\n };\n }\n\n toggleByteOrder = () => {\n this.setState({\n msb: !this.state.msb,\n });\n\n const bytes = this.state.value.match(/[A-Fa-f0-9]{2}/g);\n if (bytes !== null) {\n this.setState({\n value: bytes.reverse().join(\" \"),\n });\n }\n }\n\n randomKey = () => {\n let cryptoObj = window.crypto || window.msCrypto;\n let b = new Uint8Array(8);\n cryptoObj.getRandomValues(b);\n\n let key = Buffer.from(b).toString('hex');\n this.setState({\n value: key,\n });\n\n let str = \"\";\n const bytes = key.match(/[A-Fa-f0-9]{2}/g);\n if (!this.state.msb && bytes !== null) {\n str = bytes.reverse().join(\"\");\n } else if (bytes !== null) {\n str = bytes.join(\"\");\n } else {\n str = \"\";\n }\n\n this.props.onChange({\n target: {\n value: str,\n type: \"text\",\n id: this.props.id,\n },\n });\n }\n\n onChange = (e) => {\n this.setState({\n value: e.target.value,\n });\n\n let str = \"\";\n\n const bytes = e.target.value.match(/[A-Fa-f0-9]{2}/g);\n if (!this.state.msb && bytes !== null) {\n str = bytes.reverse().join(\"\");\n } else if (bytes !== null) {\n str = bytes.join(\"\");\n } else {\n str = \"\";\n }\n\n this.props.onChange({\n target: {\n value: str,\n type: \"text\",\n id: this.props.id,\n },\n });\n }\n\n componentDidMount() {\n this.setState({\n value: this.props.value || \"\",\n });\n }\n\n render() {\n return(\n \n \n \n {this.state.msb ? \"MSB\": \"LSB\"}\n \n \n {this.props.random && !this.props.disabled && \n \n \n \n }\n \n }}\n {...this.props}\n onChange={this.onChange}\n value={this.state.value}\n disabled={this.props.disabled}\n />\n );\n }\n}\n\nexport default EUI64Field;\n","import dispatcher from \"../dispatcher\";\nimport history from '../history';\n\n\nexport function checkStatus(response) {\n if (response.status >= 200 && response.status < 300) {\n return response\n } else {\n throw response.json();\n }\n};\n\nexport function errorHandler(error) {\n if(error.response === undefined) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"error\",\n message: error.message,\n },\n });\n } else {\n if (error.response.obj.code === 16) {\n history.push(\"/login\");\n } else {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"error\",\n message: error.response.obj.error + \" (code: \" + error.response.obj.code + \")\",\n },\n });\n }\n }\n};\n\nexport function errorHandlerLogin(error) {\n if(error.response === undefined) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"error\",\n message: error.message,\n },\n });\n } else {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"error\",\n message: error.response.obj.error + \" (code: \" + error.response.obj.code + \")\",\n },\n });\n }\n};\n\nexport function errorHandlerIgnoreNotFound(error) {\n if (error.response === undefined) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"error\",\n message: error.message,\n },\n });\n } else {\n if (error.response.obj.code === 16 && history.location.pathname !== \"/login\") {\n history.push(\"/login\");\n } else if (error.response.obj.code !== 5) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"error\",\n message: error.response.obj.error + \" (code: \" + error.response.obj.code + \")\",\n },\n });\n }\n }\n};\n\nexport function errorHandlerIgnoreNotFoundWithCallback(callbackFunc) {\n return function(error) {\n if (error.response.obj.code === 5) {\n callbackFunc(null);\n } else {\n errorHandlerIgnoreNotFound(error);\n }\n }\n}\n","import { EventEmitter } from \"events\";\n// import SessionStore from \"./SessionStore\";\n\n// import { checkStatus, errorHandler, errorHandlerLogin } from \"./helpers\";\n\nexport const VIEW_USER = 0;\nexport const VIEW_ORGADMIN = 1;\nexport const VIEW_SYSADMIN = 2;\n\nclass LocalStore extends EventEmitter {\n constructor() {\n super();\n this.client = null;\n this.user = null;\n this.organizations = [];\n this.settings = {};\n this.branding = {};\n }\n\n getApplicationID() {\n const appID = localStorage.getItem(\"applicationID\");\n if (appID === \"\") {\n return null;\n }\n\n return appID;\n }\n\n setApplicationID(id) {\n localStorage.setItem(\"applicationID\", id);\n this.emit(\"application.change\");\n }\n\n getView() {\n const view = localStorage.getItem(\"view\");\n if (view === \"\") {\n return 0;\n }\n return Number(view);\n }\n\n hasViewSystemAdmin() {\n return (this.getView() === VIEW_SYSADMIN);\n }\n\n hasViewOrgAdmin() {\n return (this.getView() >= VIEW_ORGADMIN);\n }\n\n hasViewUser() {\n return (this.getView() >= VIEW_USER);\n }\n\n setView(view) {\n // Check SessionStore.isAdmin and isOrganizationAdmin before calling this function\n // SessionStore needs to import this unit\n if (\n (view > VIEW_SYSADMIN) ||\n (view < VIEW_USER)\n // (view === VIEW_SYSADMIN && !SessionStore.isAdmin()) ||\n // (view === VIEW_ORGADMIN && !(SessionStore.isAdmin() || SessionStore.isOrganizationAdmin(SessionStore.getOrganizationID())))\n ) {\n view = VIEW_USER;\n }\n localStorage.setItem(\"view\", view);\n this.emit(\"view.change\");\n }\n\n}\n\nconst localStore = new LocalStore();\nexport default localStore;\n","import React, { Component } from \"react\";\n\nimport Table from '@material-ui/core/Table';\nimport TablePagination from '@material-ui/core/TablePagination';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableHead from '@material-ui/core/TableHead';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport SessionStore from \"../stores/SessionStore\";\n\nimport Paper from \"./Paper\";\n\n\nconst styles = {\n\n};\n\n\nclass DataTable extends Component {\n constructor() {\n super();\n\n this.state = {\n count: 0,\n rowsPerPage: SessionStore.getRowsPerPage(),\n page: 0,\n loaded: {\n rows: false,\n },\n };\n\n this.onChangePage = this.onChangePage.bind(this);\n this.onChangeRowsPerPage = this.onChangeRowsPerPage.bind(this);\n }\n\n componentDidMount() {\n this.onChangePage(null, 0);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props === prevProps) {\n return;\n }\n\n this.onChangePage(null, 0);\n }\n\n onChangePage(event, page) {\n this.props.getPage(this.state.rowsPerPage, (page) * this.state.rowsPerPage, (result) => {\n this.setState({\n page: page,\n count: parseInt(result.totalCount, 10),\n rows: result.result.map((row, i) => this.props.getRow(row)),\n });\n });\n }\n\n onChangeRowsPerPage(event) {\n this.setState({\n rowsPerPage: event.target.value,\n });\n\n SessionStore.setRowsPerPage(event.target.value);\n\n this.props.getPage(event.target.value, 0, (result) => {\n this.setState({\n page: 0,\n count: result.totalCount,\n rows: result.result.map((row, i) => this.props.getRow(row)),\n });\n });\n }\n\n render() {\n if (this.state.rows === undefined) {\n return(
);\n }\n\n return(\n \n \n \n {this.props.header}\n \n \n {this.state.rows}\n \n
\n \n
\n );\n }\n}\n\nexport default withStyles(styles)(DataTable);\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Typography from '@material-ui/core/Typography';\nimport Paper from '@material-ui/core/Paper';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport DateFnsUtils from '@date-io/date-fns'; // choose your lib\nimport { KeyboardTimePicker, MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport AlarmIcon from '@material-ui/icons/Alarm';\nimport DeviceQueueStore from \"../../stores/DeviceQueueStore\";\n//import DeviceStore from \"../../stores/DeviceStore\";\nimport AppDeviceStore from \"../../stores/AppDeviceStore\";\nimport { Button } from \"@material-ui/core\";\nimport SendIcon from '@material-ui/icons/Send';\nimport Grid from '@material-ui/core/Grid';\nimport Input from '@material-ui/core/Input';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Select from '@material-ui/core/Select';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport Chip from '@material-ui/core/Chip';\n\nimport moment from \"moment\";\n\n/**\n * Return number of mins since 00:00 on given date\n * Will never return zero. (Midnight = 1440)\n * @param {*} date\n */\nfunction utcDateToMins(date) {\n if (date == null) {\n return 0; //not set\n }\n const dayStart = moment.utc( date ).startOf('day');\n let result = moment.utc(date).diff(dayStart, 'minutes');\n if (result === 0) {\n result = 1440; // Zero means undefined\n }\n return result;\n}\n\nconst ITEM_HEIGHT = 48;\nconst ITEM_PADDING_TOP = 8;\n\nconst MenuProps = {\n PaperProps: {\n style: {\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\n width: 250,\n },\n },\n};\n\nclass AircomOutput extends Component {\n constructor() {\n super();\n this.state = {\n selectedDevices: [],\n devices: [],\n A1Time: null,\n B1Time: null,\n A2Time: null,\n B2Time: null,\n A3Time: null,\n B3Time: null,\n A4Time: null,\n B4Time: null,\n A5Time: null,\n B5Time: null,\n A6Time: null,\n B6Time: null\n };\n\n this.timeChangedA1 = this.timeChangedA1.bind(this);\n this.timeChangedA2 = this.timeChangedA2.bind(this);\n this.timeChangedA3 = this.timeChangedA3.bind(this);\n this.timeChangedA4 = this.timeChangedA4.bind(this);\n this.timeChangedA5 = this.timeChangedA5.bind(this);\n this.timeChangedA6 = this.timeChangedA6.bind(this);\n this.timeChangedB1 = this.timeChangedB1.bind(this);\n this.timeChangedB2 = this.timeChangedB2.bind(this);\n this.timeChangedB3 = this.timeChangedB3.bind(this);\n this.timeChangedB4 = this.timeChangedB4.bind(this);\n this.timeChangedB5 = this.timeChangedB5.bind(this);\n this.timeChangedB6 = this.timeChangedB6.bind(this);\n\n this.queueSchedule = this.queueSchedule.bind(this);\n\n this.handleChangeDevice = this.handleChangeDevice.bind(this);\n }\n\n timeChangedA1(date) { this.setState({ A1Time: date }); }\n\n timeChangedA2(date) { this.setState({ A2Time: date }); }\n\n timeChangedA3(date) { this.setState({ A3Time: date }); }\n\n timeChangedA4(date) { this.setState({ A4Time: date }); }\n\n timeChangedA5(date) { this.setState({ A5Time: date }); }\n\n timeChangedA6(date) { this.setState({ A6Time: date }); }\n\n timeChangedB1(date) { this.setState({ B1Time: date }); }\n\n timeChangedB2(date) { this.setState({ B2Time: date }); }\n\n timeChangedB3(date) { this.setState({ B3Time: date }); }\n\n timeChangedB4(date) { this.setState({ B4Time: date }); }\n\n timeChangedB5(date) { this.setState({ B5Time: date }); }\n\n timeChangedB6(date) { this.setState({ B6Time: date }); }\n\n\n queueSchedule() {\n if (window.confirm(\"Do you want to queue the new schedule for the selected devices? Any schedule previously queued, but not downloaded, will be replaced by the new one.\")) {\n //needs to be a base64 encoded string\n let buffer = Buffer.alloc(25);\n const { selectedDevices } = this.state;\n \n buffer.writeUInt8(1,0);\n buffer.writeUInt16BE(utcDateToMins(this.state.A1Time),1);\n buffer.writeUInt16BE(utcDateToMins(this.state.A2Time),3);\n buffer.writeUInt16BE(utcDateToMins(this.state.A3Time),5);\n buffer.writeUInt16BE(utcDateToMins(this.state.A4Time),7);\n buffer.writeUInt16BE(utcDateToMins(this.state.A5Time),9);\n buffer.writeUInt16BE(utcDateToMins(this.state.A6Time),11);\n buffer.writeUInt16BE(utcDateToMins(this.state.B1Time),13);\n buffer.writeUInt16BE(utcDateToMins(this.state.B2Time),15);\n buffer.writeUInt16BE(utcDateToMins(this.state.B3Time),17);\n buffer.writeUInt16BE(utcDateToMins(this.state.B4Time),19);\n buffer.writeUInt16BE(utcDateToMins(this.state.B5Time),21);\n buffer.writeUInt16BE(utcDateToMins(this.state.B6Time),23);\n\n selectedDevices.forEach((device) => {\n const queueItem = {\n devEUI: device.devEui,\n f_port: 2,\n data: buffer.toString('base64'),\n }\n\n DeviceQueueStore.flush(device.devEui, () => {\n DeviceQueueStore.enqueue(queueItem, () => {})\n })\n } \n );\n\n //this.props.history.push(`/organizations/${this.props.match.params.organizationID}/applications/${this.props.match.params.applicationID}/downlinks`);\n }\n };\n\n handleChangeDevice(event) {\n this.setState({ selectedDevices: event.target.value });\n }\n\n componentDidMount() {\n /*DeviceStore.list({\n applicationID: this.props.match.params.applicationID,\n limit: 999,\n offset: 0,\n }, resp => {\n this.setState({\n devices: resp.result\n });\n });*/\n const {applicationID} = this.props.match.params; //M.O. 2022-03-15 Seems to be empty!\n //NOTE: appDeviceGroupID: 0 means no group filter and outputControlType: 1 means Step\n AppDeviceStore.listByOutputType(this.props.application.id,0,1,999,0, resp => {\n console.log(resp);\n this.setState({\n devices: resp.result\n });\n });\n }\n\n render() {\n const {devices, selectedDevices} = this.state;\n\n return(\n \n \n New Schedule\n \n \n \n \n \n \n \n \n \n Output A\n Output B\n \n \n \n \n \n Pulse Time 1:\n \n \n }\n />\n \n \n }\n /> \n \n \n \n \n Pulse Time 2:\n \n \n }\n />\n \n \n }\n />\n \n \n \n \n Pulse Time 3:\n \n \n }\n />\n \n \n }\n />\n \n \n \n \n Pulse Time 4:\n \n \n }\n />\n \n \n }\n />\n \n \n \n \n Pulse Time 5:\n \n \n }\n />\n \n \n }\n />\n \n \n \n \n Pulse Time 6:\n \n \n }\n />\n \n \n }\n />\n \n \n \n
\n
\n
\n \n \n Apply to: \n \n \n \n \n }\n renderValue={(selected) => (\n
\n {selected.map((value) => (\n \n ))}\n
\n )}\n displayEmpty={true}\n MenuProps={MenuProps}\n >\n {devices.map((device) => (\n \n -1} />\n \n \n ))}\n \n \n
\n \n }\n onClick={() => { this.queueSchedule(); }}\n >\n Send\n \n \n
\n
\n
\n );\n }\n}\n\nAircomOutput.propTypes = {\n match: PropTypes.any.isRequired,\n}\n\nexport default AircomOutput;\n","import React, { Component } from \"react\";\nimport Typography from '@material-ui/core/Typography';\nimport AppDeviceStore from \"../../stores/AppDeviceStore\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport DataTable from \"../../components/DataTable\";\nimport moment from 'moment';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableHead from '@material-ui/core/TableHead';\nimport Button from '@material-ui/core/Button';\nimport ViewIcon from '@material-ui/icons/Visibility';\nimport DeleteIcon from '@material-ui/icons/DeleteOutline';\nimport IconButton from '@material-ui/core/IconButton';\nimport DeviceQueueStore from \"../../stores/DeviceQueueStore\";\n\nfunction utcMinsToDate(mins) {\n if (mins == null || mins === 0) {\n return null; //not set\n }\n return moment.utc().startOf('day').add(mins,'minutes').local().format('HH:mm');\n}\n\nclass ApplicationDownlinksDetails extends Component {\n constructor() {\n super();\n this.state = {\n open: false,\n modalScheduleEUI: \"\",\n modalScheduleName: \"\",\n modalScheduleData: \"\",\n modalScheduleA1: \"Not Set\",\n modalScheduleA2: \"Not Set\",\n modalScheduleA3: \"Not Set\",\n modalScheduleA4: \"Not Set\",\n modalScheduleA5: \"Not Set\",\n modalScheduleA6: \"Not Set\",\n modalScheduleB1: \"Not Set\",\n modalScheduleB2: \"Not Set\",\n modalScheduleB3: \"Not Set\",\n modalScheduleB4: \"Not Set\",\n modalScheduleB5: \"Not Set\",\n modalScheduleB6: \"Not Set\",\n refresh: \"\",\n };\n this.getPage = this.getPage.bind(this);\n this.getRow = this.getRow.bind(this);\n this.handleClickOpen = this.handleClickOpen.bind(this);\n this.handleClose = this.handleClose.bind(this);\n this.handleDelete = this.handleDelete.bind(this);\n }\n\n handleClickOpen = (devEUI, devName, devData) => event => {\n let buffer = Buffer.from(devData, 'base64');\n\n this.setState({ \n open: true, \n modalScheduleEUI: devEUI, \n modalScheduleName: devName, \n modalScheduleData: devData,\n modalScheduleA1: utcMinsToDate(buffer.readUInt16BE(1)) || \"Not Set\",\n modalScheduleA2: utcMinsToDate(buffer.readUInt16BE(3)) || \"Not Set\",\n modalScheduleA3: utcMinsToDate(buffer.readUInt16BE(5)) || \"Not Set\",\n modalScheduleA4: utcMinsToDate(buffer.readUInt16BE(7)) || \"Not Set\",\n modalScheduleA5: utcMinsToDate(buffer.readUInt16BE(9)) || \"Not Set\",\n modalScheduleA6: utcMinsToDate(buffer.readUInt16BE(11)) || \"Not Set\",\n modalScheduleB1: utcMinsToDate(buffer.readUInt16BE(13)) || \"Not Set\",\n modalScheduleB2: utcMinsToDate(buffer.readUInt16BE(15)) || \"Not Set\",\n modalScheduleB3: utcMinsToDate(buffer.readUInt16BE(17)) || \"Not Set\",\n modalScheduleB4: utcMinsToDate(buffer.readUInt16BE(19)) || \"Not Set\",\n modalScheduleB5: utcMinsToDate(buffer.readUInt16BE(21)) || \"Not Set\",\n modalScheduleB6: utcMinsToDate(buffer.readUInt16BE(23)) || \"Not Set\"\n });\n }\n\n handleClose() {\n this.setState({ open: false });\n }\n\n handleDelete = (devEUI) => event => {\n DeviceQueueStore.flush(devEUI, () => {\n this.setState({ refresh: moment.now()});\n })\n }\n\n getPage(limit, offset, callbackFunc) {\n AppDeviceStore.listDeviceWithQueue(this.props.application.id, limit, offset, callbackFunc);\n }\n\n getRow(obj) {\n return(\n \n {obj.name}\n {obj.devEUI}\n { moment(obj.lastSeenAt).format('YYYY-MM-DD HH:mm:ss') }\n \n { obj.queueItems.length > 0 &&\n
\n Show Pending Downlinks\n \n \n \n Frame Cnt\n Data\n { this.props.aircomOutput &&\n \n } \n \n \n \n {obj.queueItems.map((value) => {\n return \n {value.fCnt}\n {Buffer.from(value.data, 'base64')}\n { this.props.aircomOutput &&\n \n }\n \n })}\n \n
\n
\n }\n
\n \n \n \n \n \n \n );\n }\n\n render() {\n return(\n \n \n \n Name\n EUI\n Last Seen\n Downlinks\n \n \n }\n getPage={this.getPage}\n getRow={this.getRow}\n />\n \n \n Schedule for {this.state.modalScheduleName} ({this.state.modalScheduleEUI})\n \n \n The following schedule will be downloaded at the next transmission from the device\n \n \n \n \n Output A\n Output B\n \n \n \n \n \n Pulse Time 1:\n \n \n {this.state.modalScheduleA1}\n \n \n {this.state.modalScheduleB1}\n \n \n \n \n Pulse Time 2:\n \n \n {this.state.modalScheduleA2}\n \n \n {this.state.modalScheduleB2}\n \n \n \n \n Pulse Time 3:\n \n \n {this.state.modalScheduleA3}\n \n \n {this.state.modalScheduleB3}\n \n \n \n \n Pulse Time 4:\n \n \n {this.state.modalScheduleA4}\n \n \n {this.state.modalScheduleB4}\n \n \n \n \n Pulse Time 5:\n \n \n {this.state.modalScheduleA5}\n \n \n {this.state.modalScheduleB5}\n \n \n \n \n Pulse Time 6:\n \n \n {this.state.modalScheduleA6}\n \n \n {this.state.modalScheduleB6}\n \n \n \n
\n
\n
\n \n \n \n \n
\n \n );\n }\n}\n\nexport default ApplicationDownlinksDetails;\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport DateFnsUtils from '@date-io/date-fns'; // choose your lib\r\nimport { KeyboardTimePicker, MuiPickersUtilsProvider } from '@material-ui/pickers';\r\nimport AlarmIcon from '@material-ui/icons/Alarm';\r\nimport DeleteIcon from '@material-ui/icons/DeleteOutline';\r\nimport DeviceQueueStore from \"../../stores/DeviceQueueStore\";\r\n// import DeviceStore from \"../../stores/DeviceStore\";\r\nimport AppDeviceStore from \"../../stores/AppDeviceStore\";\r\nimport { Button, Divider, TextField } from \"@material-ui/core\";\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Input from '@material-ui/core/Input';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport Select from '@material-ui/core/Select';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport Chip from '@material-ui/core/Chip';\r\n\r\nimport moment from \"moment\";\r\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\r\nimport {setBit} from \"../../helpers/packetHelper\";\r\n\r\nconst MAX_PVC_SETPOINTS = 36;\r\nconst PVCH1_SETPOINTS\t= 0;\r\n// const PVCH1_MIN_SETPOINT = 1;\r\n// const PVCH1_MAX_SETPOINT = 2;\r\n// const PVCH1_SETPOINT_INC = 3;\r\nconst PVCH1_DEADBAND_UP\t= 4;\r\nconst PVCH1_DEADBAND_DOWN\t= 5;\r\n// const PVCH1_CHECK_FREQ = 6;\r\n// const PVCH1_EXTRA_HEADER = 7;\r\n// const PVCH2_PULSE_SIGNIFICANCE = 8;\r\n// const PVCH2_2_PULSE_THRESHOLD = 9;\r\n// const PVCH2_3_PULSE_THRESHOLD = 10;\r\n// const PVCH2_4_PULSE_THRESHOLD = 12;\r\n\r\n\r\n/**\r\n * Return number of mins since 00:00 on given date\r\n * Will never return zero. (Midnight = 1440)\r\n * @param {*} date\r\n */\r\nfunction utcDateToQuarterHour(date) {\r\n if (date == null) {\r\n return 0; //not set\r\n }\r\n const dayStart = moment.utc(date).startOf('day');\r\n let result = moment.utc(date).diff(dayStart, 'minutes') / 15;\r\n if (result === 0) {\r\n result = 96; // Zero means undefined\r\n }\r\n return Math.round(result);\r\n}\r\n\r\nfunction utcQuarterHourToTimeString(quarterHours) {\r\n return moment.utc().startOf('day').add(quarterHours * 15, 'minutes').local().format(\"HH:mm\");\r\n}\r\n\r\n/**\r\n * Used to pre-populate time control\r\n * @param {*} previousQHr \r\n * @param {*} previousIncrement \r\n */\r\nfunction getSuggestedSetpointTime(previousQHr) {\r\n let result = moment.utc().startOf('day');\r\n\r\n const newQuarterHour = ((previousQHr || 0) % 96) + 4;\r\n\r\n if (newQuarterHour < 95) {\r\n result.add(newQuarterHour * 15, 'minutes');\r\n }\r\n\r\n return result;\r\n\r\n}\r\n\r\n\r\n/**\r\n * Get setpoint increment for given min/max\r\n * Must return same result as the same function\r\n * in the aircom server ui\r\n * Where possible, returns numbers with significant digit 1, 5 or 25 (e.g. 1, 0.5, 0.25)\r\n * @param {*} min\r\n * @param {*} max\r\n * @returns\r\n */\r\n// function getDefaultSetpointIncrement(min, max) {\r\n// const range = max - min;\r\n\r\n// if (range <= 0) {\r\n// return 0;\r\n// }\r\n\r\n// // Calculate default result in case all else fails\r\n// let result = range / 254;\r\n// // Round up to 2 decimal places (to ensure range will be covered)\r\n// result = Math.ceil(result * 100) / 100;\r\n\r\n// // Start again, selecting power of 10 if possible, i.e. 10, 1, 0.1, 0.01\r\n// for (let exp = -10; exp <= 10; exp++) {\r\n// if (10 ** exp * 254 >= range) {\r\n// result = 10 ** exp;\r\n// break;\r\n// }\r\n// }\r\n\r\n// // Can increment be quartered?\r\n// if (result * 0.25 * 254 >= range) {\r\n// return result * 0.25;\r\n// }\r\n\r\n// // Can increment be halved?\r\n// if (result * 0.5 * 254 >= range) {\r\n// return result * 0.5;\r\n// }\r\n\r\n// return result;\r\n// }\r\n\r\nconst ITEM_HEIGHT = 48;\r\nconst ITEM_PADDING_TOP = 8;\r\n\r\nconst MenuProps = {\r\n PaperProps: {\r\n style: {\r\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\r\n width: 250,\r\n },\r\n },\r\n};\r\n\r\nclass PvControl extends Component {\r\n constructor() {\r\n super();\r\n this.state = {\r\n selectedDevices: [],\r\n devices: [],\r\n minSetpointValue: 20,\r\n minSetpointText: '20',\r\n maxSetpointValue: 80,\r\n maxSetpointText: '80',\r\n setpointIncrementValue: 0.25,\r\n setpointIncrementText: '0.25',\r\n deadbandUpValue: 0.5,\r\n deadbandUpText: '0.5',\r\n deadbandDownValue: 0.5,\r\n deadbandDownText: '0.5',\r\n defaultSetpointID: 0, // Not configured\r\n newSetpointTime: moment().startOf('day'),\r\n newSetpointID: 1, // Minimum value\r\n dlDeadbandUpChecked: false,\r\n dlDeadbandDownChecked: false,\r\n setpoints: [],\r\n };\r\n\r\n this.queueDownlinks = this.queueDownlinks.bind(this);\r\n this.handleChangeDevice = this.handleChangeDevice.bind(this);\r\n }\r\n\r\n queueDownlinks() {\r\n if (window.confirm(\"Do you want to queue the new configuration for the selected devices? Any setpoints previously queued, but not downloaded, will be replaced by the new ones.\")) {\r\n let buffer = Buffer.alloc(50);\r\n \r\n let {\r\n selectedDevices,\r\n setpoints,\r\n dlDeadbandUpChecked,\r\n dlDeadbandDownChecked,\r\n deadbandUpValue,\r\n deadbandDownValue\r\n } = this.state;\r\n\r\n setpoints.sort(\r\n (a, b) => (a.setpointTime % 96) - (b.setpointTime % 96),\r\n );\r\n\r\n const send2Messages = this.getDownlinkSize() > 50;\r\n\r\n let msg1Data;\r\n let msg2Data;\r\n let spHeader;\r\n let spHeaderBit;\r\n let spHeaderBytePos;\r\n let spHeaderPos;\r\n\r\n // Construct setpoint message first\r\n\r\n // Write downlink type. 2 = PV Control Configuration\r\n buffer.writeUInt8(2, 0);\r\n let header = 0;\r\n let headerPos = 1;\r\n let headerByteCount = 1;\r\n let dataPos = headerPos + headerByteCount;\r\n\r\n if (setpoints.length > 0) {\r\n spHeaderPos = headerPos + headerByteCount;\r\n dataPos = spHeaderPos + 12;\r\n // 12-bits after header indicate each of 96x quarter-hour times\r\n header = setBit(header, PVCH1_SETPOINTS);\r\n let pointsWritten = 0;\r\n setpoints.forEach((value) => {\r\n if (\r\n value.setpointTime > 0 &&\r\n value.setpointTime <= 96 &&\r\n value.setpointValueId > 0 &&\r\n value.setpointValueId <= 255\r\n ) {\r\n spHeaderBytePos = spHeaderPos + Math.floor((value.setpointTime % 96) / 8);\r\n spHeaderBit = value.setpointTime % 8;\r\n spHeader = buffer.readUInt8(spHeaderBytePos);\r\n spHeader = setBit(spHeader, spHeaderBit);\r\n buffer.writeUInt8(spHeader, spHeaderBytePos);\r\n buffer.writeUInt8(value.setpointValueId, dataPos);\r\n dataPos += 1;\r\n pointsWritten += 1;\r\n }\r\n });\r\n if (pointsWritten > 0) {\r\n if (headerByteCount == 2) {\r\n buffer.writeUInt16(header, headerPos);\r\n }\r\n else\r\n {\r\n buffer.writeUInt8(header, headerPos);\r\n }\r\n }\r\n if (send2Messages) {\r\n msg2Data = buffer.toString('base64', 0, dataPos);\r\n buffer.fill(0);\r\n buffer.writeUInt8(2, 0); // Downlink type\r\n headerPos = 1;\r\n header = 0;\r\n dataPos = headerPos + 1;\r\n }\r\n }\r\n\r\n if (dlDeadbandUpChecked) {\r\n header = setBit(header, PVCH1_DEADBAND_UP);\r\n buffer.writeFloatLE(deadbandUpValue, dataPos);\r\n dataPos += 4;\r\n }\r\n\r\n if (dlDeadbandDownChecked) {\r\n header = setBit(header, PVCH1_DEADBAND_DOWN);\r\n buffer.writeFloatLE(deadbandDownValue, dataPos);\r\n dataPos += 4;\r\n }\r\n\r\n buffer.writeUInt8(header, headerPos);\r\n msg1Data = buffer.toString('base64', 0, dataPos);\r\n\r\n selectedDevices.forEach((device) => {\r\n const queueItem = {\r\n devEUI: device.devEui,\r\n f_port: 2,\r\n data: msg1Data,\r\n }\r\n\r\n DeviceQueueStore.flush(device.devEui, () => {\r\n DeviceQueueStore.enqueue(queueItem, () => {\r\n if (send2Messages) {\r\n queueItem.data = msg2Data;\r\n DeviceQueueStore.enqueue(queueItem, () => {});\r\n }\r\n })\r\n })\r\n } \r\n );\r\n }\r\n };\r\n\r\n handleChangeDevice(event) {\r\n this.setState({ selectedDevices: event.target.value });\r\n }\r\n\r\n componentDidMount() {\r\n const {applicationID} = this.props.match.params; //M.O. 2022-03-15 Seems to be empty!\r\n //NOTE: appDeviceGroupID: 0 means no group filter and outputControlType: 2 means PV control\r\n AppDeviceStore.listByOutputType(this.props.application.id,0,2,999,0, resp => {\r\n this.setState({\r\n devices: resp.result\r\n });\r\n });\r\n }\r\n\r\n // onChangeMinSetpoint = (e) => {\r\n // let {\r\n // minSetpointValue,\r\n // maxSetpointValue,\r\n // setpointIncrementValue,\r\n // setpointIncrementText\r\n // } = this.state;\r\n // const minSetpointText = e.target.value;\r\n // minSetpointValue = Number.parseFloat(minSetpointText);\r\n // // Try to set setpointIncrementValue\r\n // if (maxSetpointValue > minSetpointValue) {\r\n // setpointIncrementValue = getDefaultSetpointIncrement(minSetpointValue, maxSetpointValue);\r\n // setpointIncrementText = setpointIncrementValue.toString();\r\n // }\r\n // this.setState({\r\n // minSetpointText,\r\n // minSetpointValue,\r\n // setpointIncrementValue,\r\n // setpointIncrementText\r\n // })\r\n // };\r\n\r\n // onChangeMaxSetpoint = (e) => {\r\n // let {\r\n // maxSetpointValue,\r\n // minSetpointValue,\r\n // setpointIncrementValue,\r\n // setpointIncrementText\r\n // } = this.state;\r\n // const maxSetpointText = e.target.value;\r\n // maxSetpointValue = Number.parseFloat(maxSetpointText);\r\n // // Try to set setpointIncrementValue\r\n // if (maxSetpointValue > minSetpointValue) {\r\n // setpointIncrementValue = getDefaultSetpointIncrement(minSetpointValue, maxSetpointValue);\r\n // setpointIncrementText = setpointIncrementValue.toString();\r\n // }\r\n // this.setState({\r\n // maxSetpointText,\r\n // maxSetpointValue,\r\n // setpointIncrementValue,\r\n // setpointIncrementText\r\n // })\r\n // };\r\n\r\n // onChangeSetpointIncrement = (e) => {\r\n // let {\r\n // setpointIncrementValue,\r\n // } = this.state;\r\n // const setpointIncrementText = e.target.value;\r\n // setpointIncrementValue = Number.parseFloat(setpointIncrementText);\r\n // // Don't touch min and max setpoints\r\n // this.setState({\r\n // setpointIncrementValue,\r\n // setpointIncrementText\r\n // })\r\n // };\r\n\r\n onChangeDeadbandUp = (e) => {\r\n const deadbandUpText = e.target.value;\r\n const deadbandUpValue = Number.parseFloat(deadbandUpText);\r\n this.setState({\r\n deadbandUpText,\r\n deadbandUpValue,\r\n dlDeadbandUpChecked: true,\r\n })\r\n };\r\n\r\n onChangeDeadbandDown = (e) => {\r\n const deadbandDownText = e.target.value;\r\n const deadbandDownValue = Number.parseFloat(deadbandDownText);\r\n this.setState({\r\n deadbandDownText,\r\n deadbandDownValue,\r\n dlDeadbandDownChecked: true,\r\n })\r\n };\r\n\r\n // onChangeDefaultSetpointID = (e) => {\r\n // const defaultSetpointID = e.target.value;\r\n // this.setState({defaultSetpointID});\r\n // };\r\n\r\n newSetpointTimeChanged = date => {\r\n // Round to nearest 15 mins (user could have amended text input value)\r\n date.setMinutes(Math.round(date.getMinutes() / 15) * 15);\r\n this.setState({newSetpointTime: date});\r\n };\r\n\r\n addSetpoint = () => {\r\n let {setpoints, newSetpointTime, newSetpointID} = this.state;\r\n if (setpoints.length >= MAX_PVC_SETPOINTS) {\r\n return;\r\n }\r\n const newSetpointTimeQHrs = utcDateToQuarterHour(newSetpointTime);\r\n // Delete existing setpoint with same date\r\n let newSetpoints = setpoints.filter(value => value.setpointTime !== newSetpointTimeQHrs);\r\n newSetpoints.push({\r\n setpointTime: newSetpointTimeQHrs,\r\n setpointValueId: newSetpointID,\r\n });\r\n newSetpoints.sort(\r\n (a, b) => (a.setpointTime % 96) - (b.setpointTime % 96),\r\n )\r\n\r\n // Set newSetpointTime to suggest next time to add\r\n newSetpointTime = getSuggestedSetpointTime(newSetpointTimeQHrs);\r\n\r\n this.setState({\r\n setpoints: newSetpoints,\r\n newSetpointTime,\r\n });\r\n }\r\n\r\n deleteSetpoint = (index) => {\r\n let {setpoints} = this.state;\r\n if (setpoints.length === 0 || index < 0 || index >= setpoints.length) {\r\n return;\r\n }\r\n setpoints.splice(index, 1);\r\n this.setState({setpoints});\r\n }\r\n\r\n onSetpointValueChanged = (index, value) => {\r\n let newSetpoints = this.state.setpoints;\r\n if (index >= 0 && index < newSetpoints.length) {\r\n const newId = value ? value.id : 0;\r\n newSetpoints[index].setpointValueId = newId;\r\n this.setState({setpoints: newSetpoints});\r\n }\r\n };\r\n\r\n getDownlinkSize = () => {\r\n const {dlDeadbandUpChecked, dlDeadbandDownChecked, setpoints} = this.state;\r\n\r\n const headerBytes = 1; // Amend if other config items included\r\n\r\n let downlinkBytes = 0;\r\n if (dlDeadbandUpChecked) {\r\n downlinkBytes += 4;\r\n }\r\n if (dlDeadbandDownChecked) {\r\n downlinkBytes += 4;\r\n }\r\n if (setpoints.length > 0) {\r\n downlinkBytes = downlinkBytes + 12 + setpoints.length;\r\n }\r\n\r\n if (downlinkBytes > 0) {\r\n return downlinkBytes + headerBytes;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n render() {\r\n const {\r\n devices,\r\n selectedDevices,\r\n minSetpointText,\r\n maxSetpointText,\r\n setpointIncrementText,\r\n minSetpointValue,\r\n maxSetpointValue,\r\n setpointIncrementValue,\r\n deadbandUpText,\r\n deadbandDownText,\r\n setpoints,\r\n dlDeadbandUpChecked,\r\n dlDeadbandDownChecked,\r\n // defaultSetpointID,\r\n } = this.state;\r\n let {newSetpointTime} = this.state;\r\n\r\n const downlinkSize = this.getDownlinkSize();\r\n const downlinkPackets = Math.ceil(downlinkSize / 50);\r\n\r\n if (newSetpointTime === 0) {\r\n newSetpointTime = utcDateToQuarterHour(moment.utc());\r\n }\r\n\r\n // Check if need to warn max setpoint out of range\r\n // const maxPossibleSetpoint = minSetpointValue + (254 * setpointIncrementValue);\r\n // const maxOutofRangeWarning = maxPossibleSetpoint < maxSetpointValue ? 'Max setpoint out of range' : '';\r\n let setpointOptions = [{label: 'Not configured', id: 0}];\r\n let setpointValue = minSetpointValue;\r\n for (let i = 0; i < 254; i++) {\r\n if (setpointValue >= maxSetpointValue) {\r\n setpointOptions.push({label: maxSetpointValue.toString(), id: i + 1});\r\n break;\r\n }\r\n setpointOptions.push({label: setpointValue.toString(), id: i + 1});\r\n setpointValue = setpointValue + setpointIncrementValue;\r\n }\r\n\r\n // let setpoints = [\r\n // {setpointTime: 60, setpointValueId: 50}\r\n // ]\r\n const sendButtonEnabled = (downlinkSize > 0) && (selectedDevices.length > 0);\r\n\r\n return(\r\n \r\n \r\n \r\n \r\n Device Configuration\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n this.setState({dlDeadbandUpChecked: !dlDeadbandUpChecked})}\r\n />\r\n Include in downlink\r\n \r\n \r\n \r\n \r\n \r\n this.setState({dlDeadbandDownChecked: !dlDeadbandDownChecked})}\r\n />\r\n Include in downlink\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n PV Setpoints\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n ID\r\n Local Time\r\n Setpoint\r\n \r\n \r\n \r\n \r\n {/* \r\n \r\n option.label}\r\n value={setpointOptions[0]}\r\n onChange={(event, newValue) => {\r\n this.setState({setpointValueId: newValue});\r\n }} \r\n renderInput={params => (\r\n \r\n )}\r\n />\r\n \r\n */}\r\n {setpoints.map((value, index) => {\r\n return (\r\n \r\n {index + 1}\r\n \r\n {utcQuarterHourToTimeString(value.setpointTime)}\r\n \r\n \r\n option.label}\r\n // getOptionSelected={(option, value) => option.id === value.id}\r\n value={setpointOptions[value.setpointValueId || 0]}\r\n onChange={(e, v) => {this.onSetpointValueChanged(index, v)}}\r\n renderInput={params => (\r\n \r\n )}\r\n style={{ width: 270 }}\r\n />\r\n \r\n \r\n this.deleteSetpoint(index)} />\r\n \r\n \r\n )\r\n })}\r\n \r\n \r\n \r\n New Setpoint\r\n \r\n }\r\n minutesStep={15}\r\n />\r\n \r\n \r\n }\r\n onClick={this.addSetpoint}\r\n disabled={setpoints.length >= MAX_PVC_SETPOINTS}\r\n >\r\n Add\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n Apply to: \r\n \r\n \r\n \r\n \r\n }\r\n renderValue={(selected) => (\r\n
\r\n {selected.map((value) => (\r\n \r\n ))}\r\n
\r\n )}\r\n displayEmpty={true}\r\n MenuProps={MenuProps}\r\n >\r\n {devices.map((device) => (\r\n \r\n -1} />\r\n \r\n \r\n ))}\r\n \r\n \r\n
\r\n \r\n }\r\n onClick={() => { this.queueDownlinks(); }}\r\n disabled={!sendButtonEnabled}\r\n >\r\n Send\r\n \r\n \r\n {(downlinkSize > 0) && (\r\n 1 ? {color: \"red\"} : {}}>\r\n Downlink packets: \r\n {downlinkPackets}\r\n  (Total bytes: \r\n {downlinkSize}\r\n )\r\n \r\n )}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nPvControl.propTypes = {\r\n match: PropTypes.any.isRequired,\r\n}\r\n\r\nexport default PvControl;\r\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\nimport { checkStatus, errorHandler, errorHandlerLogin } from \"./helpers\";\nimport LocalStore from \"./LocalStore\";\n\n\nclass SessionStore extends EventEmitter {\n constructor() {\n super();\n this.client = null;\n this.user = null;\n this.organizations = [];\n this.settings = {};\n this.branding = {};\n\n this.swagger = Swagger(\"/swagger/internal.swagger.json\", this.getClientOpts())\n \n this.swagger.then(client => {\n this.client = client;\n\n if (this.getToken() !== null) {\n this.fetchProfile(() => {});\n }\n });\n }\n\n getClientOpts() {\n return {\n requestInterceptor: (req) => {\n if (this.getToken() !== null) {\n req.headers[\"Grpc-Metadata-Authorization\"] = \"Bearer \" + this.getToken();\n }\n return req;\n },\n }\n }\n\n setToken(token) {\n localStorage.setItem(\"jwt\", token);\n }\n\n getToken() {\n return localStorage.getItem(\"jwt\");\n }\n\n getOrganizationID() {\n const orgID = localStorage.getItem(\"organizationID\");\n if (orgID === \"\") {\n return null;\n }\n\n return orgID;\n }\n\n setOrganizationID(id) {\n localStorage.setItem(\"organizationID\", id);\n this.emit(\"organization.change\");\n }\n\n emitChangeEvent() {\n // Use when view mode changed to cause app to update\n this.emit(\"change\");\n }\n\n getRowsPerPage() {\n const rowsPerPage = localStorage.getItem(\"rowsPerPage\");\n if (rowsPerPage === \"\" || rowsPerPage === null) {\n return 10;\n }\n\n return JSON.parse(rowsPerPage);\n }\n\n setRowsPerPage(rowsPerPage) {\n localStorage.setItem(\"rowsPerPage\", JSON.stringify(rowsPerPage));\n }\n\n getUser() {\n return this.user;\n }\n\n getSettings() {\n return this.settings;\n }\n\n isAdmin(checkViewMode = true) {\n // Call with checkViewMode === false only when nec. e.g. topnav when need to switch view modes\n if (this.user === undefined || this.user === null || (checkViewMode && !LocalStore.hasViewSystemAdmin()) ) {\n return false;\n }\n return this.user.isAdmin;\n }\n\n isOrganizationAdmin(organizationID, checkViewMode = true) {\n if (checkViewMode === true && LocalStore.hasViewOrgAdmin() !== true) {\n return false;\n }\n\n for (let i = 0; i < this.organizations.length; i++) {\n if (Number(this.organizations[i].organizationID) === Number(organizationID)) {\n return this.organizations[i].isAdmin;\n }\n }\n }\n\n isOrganizationDeviceAdmin(organizationID, checkViewMode = true) {\n if (checkViewMode && !LocalStore.hasViewOrgAdmin()) {\n return false;\n }\n\n for (let i = 0; i < this.organizations.length; i++) {\n if (this.organizations[i].organizationID === organizationID) {\n return this.organizations[i].isAdmin || this.organizations[i].isDeviceAdmin;\n }\n }\n }\n\n isOrganizationGatewayAdmin(organizationID, checkViewMode = true) {\n if (checkViewMode && !LocalStore.hasViewOrgAdmin()) {\n return false;\n }\n\n for (let i = 0; i < this.organizations.length; i++) {\n if (this.organizations[i].organizationID === organizationID) {\n return this.organizations[i].isAdmin || this.organizations[i].isGatewayAdmin;\n }\n }\n }\n\n login(login, callBackFunc) {\n this.swagger.then(client => {\n client.apis.InternalService.Login({body: login})\n .then(checkStatus)\n .then(resp => {\n this.setToken(resp.obj.jwt);\n this.fetchProfile(callBackFunc);\n })\n .catch(errorHandlerLogin);\n });\n }\n\n openidConnectLogin(code, state, callbackFunc) {\n this.swagger.then(client => {\n client.apis.InternalService.OpenIDConnectLogin({\n code: code,\n state: state,\n })\n .then(checkStatus)\n .then(resp => {\n this.setToken(resp.obj.jwtToken);\n this.fetchProfile(callbackFunc);\n })\n .catch(errorHandler);\n });\n }\n\n logout(emit, callBackFunc) {\n localStorage.clear();\n this.user = null;\n this.organizations = [];\n this.settings = {};\n\n if (emit === true) {\n this.emit(\"change\");\n }\n\n callBackFunc();\n }\n\n fetchProfile(callBackFunc) {\n this.swagger.then(client => {\n client.apis.InternalService.Profile({})\n .then(checkStatus)\n .then(resp => {\n this.user = resp.obj.user;\n\n if(resp.obj.organizations !== undefined) {\n this.organizations = resp.obj.organizations;\n }\n\n if(resp.obj.settings !== undefined) {\n this.settings = resp.obj.settings;\n }\n\n this.emit(\"change\");\n callBackFunc();\n })\n .catch(errorHandler);\n });\n }\n\n globalSearch(search, limit, offset, callbackFunc) {\n this.swagger.then(client => {\n client.apis.InternalService.GlobalSearch({\n search: search,\n limit: limit,\n offset: offset,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n}\n\nconst sessionStore = new SessionStore();\nexport default sessionStore;\n","import { EventEmitter } from \"events\";\n\nimport Swagger from \"swagger-client\";\n\nimport sessionStore from \"./SessionStore\";\nimport {checkStatus, errorHandler} from \"./helpers\";\nimport dispatcher from \"../dispatcher\";\n\nclass AppDeviceStore extends EventEmitter {\n constructor() {\n super();\n this.swagger = new Swagger(\"/swagger/appDevice.swagger.json\", sessionStore.getClientOpts());\n }\n\n listDeviceWithQueue(applicationId, limit, offset, callbackFunc) {\n this.swagger.then((client) => {\n client.apis.AppDeviceService.AppDeviceService_ListDeviceWithQueue({\n applicationId: applicationId,\n limit: limit,\n offset: offset,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n list(applicationID, appDeviceGroupID, limit, offset, callbackFunc) {\n this.swagger.then((client) => {\n client.apis.AppDeviceService.AppDeviceService_List({\n applicationId: applicationID,\n appDeviceGroupId: appDeviceGroupID,\n limit: limit,\n offset: offset,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n listByOutputType(applicationID, appDeviceGroupID, outputControlType, limit, offset, callbackFunc) {\n this.swagger.then((client) => {\n client.apis.AppDeviceService.AppDeviceService_ListDevicesByOutputType({\n applicationId: applicationID,\n appDeviceGroupId: appDeviceGroupID,\n outputControlType: outputControlType,\n limit: limit,\n offset: offset,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n get(devEUI, applicationID, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceService.AppDeviceService_Get({\n devEUI: devEUI,\n applicationID: applicationID,\n })\n .then(checkStatus)\n .then(resp => {\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n update(appDevice, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceService.AppDeviceService_Update({\n \"appDevice.id\": appDevice.id,\n body: {\n appDevice: appDevice,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"updated\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n pause(id, pause, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceService.AppDeviceService_Pause({\n id: id,\n body: {\n pause: pause,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(pause?\"paused\":\"started\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n disable(id, disable, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceService.AppDeviceService_Disable({\n id: id,\n body: {\n disable: disable,\n },\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(disable?\"disabled\":\"enabled\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n delete(devEUI, callbackFunc) {\n this.swagger.then(client => {\n client.apis.AppDeviceService.AppDeviceService_Delete({\n devEUI: devEUI,\n })\n .then(checkStatus)\n .then(resp => {\n this.notify(\"deleted\");\n callbackFunc(resp.obj);\n })\n .catch(errorHandler);\n });\n }\n\n notify(action) {\n dispatcher.dispatch({\n type: \"CREATE_NOTIFICATION\",\n notification: {\n type: \"success\",\n message: \"app device has been \" + action,\n },\n });\n }\n\n}\n\nconst appDeviceStore = new AppDeviceStore();\nexport default appDeviceStore;\n"],"sourceRoot":""}