{"version":3,"sources":["components/utils/dateUtils.js","components/store/configureStore.js","i18n.js","translations.js","components/store/store.js","components/api-authorization/ApiAuthorizationConstants.js","components/api-authorization/AuthorizeService.js","components/api-authorization/LoginMenu.js","components/configuration/config.js","components/api/apiUtils.js","components/customer/api/customerApi.js","components/errors/actions/errorActions.js","components/customer/actions/customerActions.js","components/NavMenu.js","components/users/actions/usersActions.js","components/Layout.js","components/api-authorization/AuthorizeRoute.js","components/users/UsersService.js","components/customer/selectors/customerSelector.js","components/users/UsersAdd.js","components/users/UsersDelete.js","components/users/UsersEdit.js","components/users/UsersPasswordChange.js","components/customer/selectors/customersSelector.js","components/users/selectors/usersSelector.js","components/Pager.js","components/users/UsersList.js","components/users/UsersAdminPage.js","components/users/UsersRouter.js","components/api-authorization/Login.js","components/api-authorization/Logout.js","components/api-authorization/ApiAuthorizationRoutes.js","components/deviceList/DeviceTemperature.js","components/deviceList/DeviceDoor.js","components/deviceList/DeviceVoltage.js","components/deviceList/actions/deviceListActions.js","components/deviceList/api/deviceListApi.js","components/deviceTelemetry/api/deviceTelemetryApi.js","components/charts/selectors/deviceTelemetryChartDataSelector.js","components/deviceTelemetry/actions/deviceTelemetryActions.js","components/deviceList/DeviceFavourite.js","components/users/favourite/actions/userFavouritesActions.js","components/users/favourite/api/userFavouritesApi.js","components/customerContact/actions/customerContactActions.js","components/customerContact/api/customerContactApi.js","components/errors/errorType.js","components/deviceConfiguration/actions/alarmConfigActions.js","components/deviceConfiguration/api/alarmConfigApi.js","components/inventory/api/deviceInventoryApi.js","components/inventory/actions/deviceInventoryActions.js","components/incidents/actions/incidentActions.js","components/deviceList/DeviceListRow.js","components/deviceList/selectors/deviceListSelector.js","components/deviceList/DeviceListSortableColumnHeader.js","components/deviceList/DeviceListTableHeader.js","components/deviceList/DeviceList.js","components/deviceList/DeviceListSearch.js","components/deviceList/DeviceListPagination.js","components/application/selectors/applicationSelector.js","components/deviceGroup/actions/deviceGroupActions.js","components/deviceGroup/api/deviceGroupApi.js","components/deviceGroup/selectors/deviceGroupSelector.js","components/deviceList/DeviceListGroupFilterDropdown.js","components/deviceList/DeviceListFilters.js","components/utils/generalUtils.js","components/dataAnalysis/actions/dataAnalysisActions.js","components/date/DateRange.js","components/charts/chartColours.js","components/charts/AnalysisDeviceTelemetryChart.js","components/dataAnalysis/selectors/dataAnalysisSelector.js","components/deviceNotifications/api/deviceNotificationApi.js","components/deviceNotifications/actions/deviceNotificationActions.js","components/deviceNotifications/selectors/deviceNotificationSelectors.js","components/deviceNotifications/DeviceNotificationSubscription.js","components/charts/actions/chartActions.js","components/charts/CustomChartLayout.js","components/charts/DeviceTelemetryChart.js","components/incidents/selectors/deviceIncidentSelector.js","components/incidents/DeviceIncidentAlarmList.js","components/incidents/api/incidentApi.js","components/incidents/DeviceIncidentList.js","components/customerContact/selectors/customerContactSelector.js","components/customerContact/DeviceCustomerContactInformation.js","components/deviceList/DeviceListUpdate.js","components/deviceConfiguration/selectors/alarmConfigSelector.js","components/deviceConfiguration/selectors/alarmContactSelector.js","components/deviceConfiguration/AlarmContactEmail.js","components/deviceConfiguration/AlarmContactPhone.js","components/deviceConfiguration/AlarmContact.js","components/deviceConfiguration/AlarmContactConfiguration.js","components/deviceConfiguration/EditAlarmConfiguration.js","components/deviceConfiguration/AlarmConfiguration.js","components/deviceConfiguration/selectors/generalSettingsSelectors.js","components/customer/CustomerLocation.js","components/deviceConfiguration/actions/generalSettingsActions.js","components/deviceConfiguration/GeneralSettings.js","components/deviceConfiguration/api/generalSettingsApi.js","components/inventory/selectors/deviceInventorySelector.js","components/inventory/selectors/deviceInventoryHistorySelector.js","components/inventory/StockTable.js","components/inventory/InventoryHistory.js","components/inventory/selectors/deviceInventorySummarySelector.js","components/inventory/InventorySummary.js","components/inventory/InventoryHeading.js","components/inventory/Inventory.js","components/common/loader/Loader.js","components/dashboard/DashboardPage.js","components/incidents/DeviceIncidentsPage.js","components/ota/OtaGrid.js","components/prototype/TestPage.js","components/provisioning/selectors/provisioningSelector.js","components/provisioning/ProvisioningPage.js","components/provisioning/actions/provisioningActions.js","components/provisioning/api/provisioningApi.js","components/ota/OtaPage.js","components/users/PasswordResetPage.js","components/status/StatusPage.js","components/status/actions/statusActions.js","components/status/api/statusApi.js","App.js","index.js","components/common/fakeData/fakeDashboardDeviceList.js","components/common/state/initialState.js","components/deviceList/reducers/deviceListReducer.js","components/charts/helpers/telemetryDataToChartSeriesHelper.js","components/common/state/rootReducer.js","components/application/reducers/applicationReducer.js","components/eventLogs/reducers/eventLogReducer.js","components/incidents/reducers/latestIncidentsReducer.js","components/incidents/reducers/incidentDetailsReducer.js","components/errors/reducers/errorReducer.js","components/deviceNotifications/reducers/deviceNotificationReducer.js","components/customer/reducers/customerReducer.js","components/charts/reducers/deviceTelemetryChartDataReducer.js","components/charts/reducers/analysisDeviceTelemetryChartDataReducer.js","components/dataAnalysis/reducers/dataAnalysisReducers.js","components/incidents/reducers/incidentListReducer.js","components/incidents/reducers/incidentAlarmListReducer.js","components/incidents/reducers/incidentReportDropdownListReducer.js","components/customerContact/reducers/deviceContactReducer.js","components/deviceConfiguration/reducers/alarmConfigReducer.js","components/deviceConfiguration/reducers/newAlarmConfigDialogReducer.js","components/deviceConfiguration/reducers/generalSettingsReducer.js","components/customer/reducers/customerLocationReducer.js","components/deviceGroup/reducers/deviceGroupsReducer.js","components/inventory/reducers/deviceInventoryReducer.js","components/inventory/reducers/deviceInventoryHistoryReducer.js","components/inventory/reducers/deviceInventorySummaryReducer.js","components/deviceConfiguration/reducers/alarmContactReducer.js","components/deviceConfiguration/reducers/availableAlarmContactReducer.js","components/deviceConfiguration/reducers/timezoneReduder.js","components/deviceConfiguration/reducers/availabilityScheduleReducer.js","components/users/reducers/currentUserReducer.js","components/customer/reducers/customersReducer.js","components/provisioning/reducers/provisioningDeviceTemplateReducer.js","components/store/configureStore.prod.js","components/common/state/actionTypes.js"],"names":["formatDate","rawDate","Date","toLocaleString","formatDateIgnoreOffset","date","index","indexOf","dateWithoutOffsetString","substring","getTimeFromJavaScriptDate","hour","getHours","minutes","getMinutes","seconds","getSeconds","secs","concat","mins","hours","getTime","dataTime","getTimeWithoutTimezoneConversion","dataTimeWithoutOffset","slice","length","module","exports","require","resources","en","translation","FieldRequired","FieldInvalid","FirstName","el","Home","Counter","Hello","Logout","Users","i18n","use","initReactI18next","init","lng","keySeparator","interpolation","escapeValue","store","configureStore","ApplicationName","QueryParameterNames","LogoutActions","LoginActions","prefix","ApplicationPaths","DefaultLoginRedirectPath","ApiAuthorizationClientConfigurationUrl","ApiAuthorizationPrefix","Login","LoginFailed","LoginCallback","Register","Profile","LogOut","LoggedOut","LogOutCallback","IdentityRegisterPath","IdentityManagePath","UserRoles","authService","constructor","_callbacks","_nextSubscriptionId","_user","_isAuthenticated","_popUpDisabled","isAuthenticated","this","getUser","profile","ensureUserManagerInitialized","user","userManager","getAccessToken","access_token","hasRole","role","Array","includes","signIn","state","silentUser","signinSilent","createArguments","updateState","success","silentError","console","log","Error","popUpUser","signinPopup","popUpError","message","error","signinRedirect","redirect","redirectError","completeSignIn","url","signinCallback","signOut","sessionStorage","removeItem","signoutPopup","undefined","popupSignOutError","signoutRedirect","redirectSignOutError","completeSignOut","response","signoutCallback","data","notifySubscribers","subscribe","callback","push","subscription","unsubscribe","subscriptionId","subscriptionIndex","map","element","found","filter","splice","i","useReplaceToNavigate","status","AuthenticationResultStatus","Fail","Success","Redirect","fetch","ok","settings","json","automaticSilentRenew","includeIdTokenInSilentRenew","userStore","WebStorageStateStore","UserManager","events","addUserSignedOut","async","removeUser","instance","LoginMenuPlain","Component","props","super","userName","componentDidMount","_subscription","populateState","componentWillUnmount","Promise","all","setState","email","render","profilePath","logoutPath","pathname","local","authenticatedView","registerPath","loginPath","anonymousView","t","_jsxs","Fragment","children","_jsx","NavItem","NavLink","tag","Link","className","to","LoginMenu","withTranslation","FridgeInsightsApi","process","FridgeInsightsAuthorisationHeader","headers","Authorization","FridgeInsightsCustomerApi","appConfig","callAdminApiGet","header","contentType","token","getAuthHeader","then","handleResponse","catch","handleError","callAdminApiPost","method","body","JSON","stringify","callFridgeInsightsApiGet","resolve","jsonValue","text","getCustomerLocations","customerId","logError","type","types","setCustomerDetails","customer","customerLocationsLoadedSuccess","locations","loadCustomerLocations","dispatch","customerApi","err","toString","getAllCustomers","customers","customerListLoadedSuccess","NavMenu","hasAdminRights","isSuperAdmin","setCurrentUser","id","name","customerName","setItem","firstName","lastName","Navbar","collapseOnSelect","expand","Container","fluid","Brand","href","src","height","alt","Toggle","Collapse","Nav","Text","_Fragment","LinkContainer","NavDropdown","title","Item","mapDispatchToProps","connect","Layout","_Layout","displayName","AuthorizeRoute","ready","authenticated","hasAdminRole","hasSuperAdminRole","currentUser","authenticationChanged","populateAuthenticationState","redirectUrl","encodeURI","window","location","component","rest","Route","roles","usersService","getUsers","page","pageSize","sortOrder","searchString","encodeURIComponent","deleteUser","userId","addUser","updateUser","changeUserPassword","userPasswords","sendPasswordResetEmail","resetPassword","resetPasswordModel","getCustomer","customerLocations","UsersAdd","arguments","handleClickCancel","history","handleValidSubmit","event","values","AvForm","onValidSubmit","AvField","label","required","errorMessage","validate","value","minLength","FormGroup","Button","onClick","UsersDeletePlain","handleClickOk","users","loading","match","params","UsersDelete","withRouter","UsersEditPlain","retrieveFormData","renderUserForm","model","contents","UsersEdit","UsersPasswordChangePlain","UsersPasswordChange","getCustomers","getCurrentUser","Pager","handlePageChange","newPage","paginate","totalItems","maxPages","startPage","endPage","currentPage","totalPages","Math","ceil","maxPagesBeforeCurrentPage","floor","maxPagesAfterCurrentPage","startIndex","endIndex","min","pages","from","keys","Pagination","PaginationItem","disabled","PaginationLink","first","previous","active","next","last","defaultProps","UsersList","populateUserData","handleHeaderClick","preventDefault","newSortOrder","handleInputChange","target","checked","handleSearchFormSubmit","handleSearchFormReset","userEmailReset","userResetEmailError","componentDidUpdate","prevProps","handleChangePassword","e","renderUsersTable","totalUsers","Form","inline","onSubmit","Input","onChange","placeholder","UsersAdminPage","setSelectedCustomer","bind","_this$props$currentUs","parseInt","find","c","storeCustomer","item","UsersRouter","useRouteMatch","Switch","path","LoginPlain","action","language","document","cookie","login","getReturnUrl","processLoginCallback","URLSearchParams","search","get","redirectToProfile","redirectToRegister","returnUrl","result","navigateToReturnUrl","fromQuery","startsWith","origin","redirectToApiAuthorizationPath","apiAuthorizationPath","replace","isReady","logout","processLogoutCallback","ApiAuthorizationRoutes","loginAction","logoutAction","DeviceTemperature","_ref","statusClass","DeviceDoor","doorState","DeviceVoltage","searchByValue","loadDeviceList","deviceGroupId","deviceListApi","devices","deviceListLoadedSuccess","getAnalysisTelemetryData","deviceId","startTime","endTime","getTelemetrySeriesData","seriesData","deviceTelemetryChartData","device","d","series","resetAnalysisDeviceTelemetryChart","DeviceFavourite","favouriteClicked","favourite","deleteUserFavourite","saveUserFavourite","FontAwesomeIcon","icon","faStar","favouriteApi","userFavouriteAdded","userFavouriteDeleted","loadDeviceCustomerContactInfo","customerContactApi","contactInfo","deviceCustomerContactLoadedSuccess","originator","parameters","created","now","toggleNewAlarmConfigDialog","open","loadDeviceAlarmConfigList","alarmConfigApi","alarmConfigList","loadDeviceAlarmConfigListSuccess","loadAlarmContacts","alarmId","alarmContacts","loadAlarmContactsSuccess","loadTimezones","timezones","loadTimezonesSuccess","getDeviceInventory","getDeviceInventoryProductCounts","getDeviceInventoryHistory","recordsPerPage","getDeviceInventorySummary","scanInventorySp","checkScan2","loadDeviceInventorySuccess","deviceInventory","loadDeviceInventoryHistorySuccess","deviceInventoryHistory","loadDeviceInventorySummarySuccess","deviceInventorySummary","loadDeviceInventory","deviceInventoryApi","loadDeviceInventoryHistory","loadDeviceInventorySummary","resetDeviceIncidentList","DeviceListRow","setSelectedDevice","endDate","startDate","setHours","loadRecentHistoricalDeviceTelemetry","toISOString","hardwareId","resetDeviceAlarmConfigList","Row","Col","customerCode","voltageMain","temperatureProduct","doorFridge","getState","deviceTelemetryApi","telemetryData","loadRecentHistoricalDeviceTelemetrySuccess","getDeviceAlarmCount","deviceList","reduce","acc","cur","alarmed","getDeviceOkCount","getFilteredDevices","filteredDevices","getAllDevices","getOpenDoorCount","getSelectedDevice","selectedDevice","getFilteredPageListCount","filteredPages","getDeviceLocations","DeviceListSortableColumnHeader","onSort","activeFilter","setSortOrder","useState","handleSort","style","cursor","faChevronDown","faChevronUp","DeviceListTableHeader","DeviceList","filterByName","filterByCustomerCode","filterByVoltage","filterByProdTemp","sortByDoor","ListGroup","ownProps","DeviceListSearch","searchDevices","Group","Control","DeviceListPagination","setPageNumber","p","curr","max","filteredPageCount","pageButtonsToDisplay","items","First","loadExactPage","Prev","loadNewPage","number","leftside","rightside","Ellipsis","str","round","end","Next","Last","initialDeviceListLoaded","applicationState","getInitialDeviceId","initialDeviceId","loadDeviceGroups","deviceGroupApi","deviceGroups","loadDeviceGroupsSuccess","getDeviceGroups","g","getAllDeviceGroups","DeviceListGroupFilterDropdown","devicesLoaded","renderDropDownItem","deviceGroup","Dropdown","as","description","renderDeviceGroupDropdown","dropdown","variant","Menu","DeviceListFilters","condition","filterByLocation","renderLocationDropdown","deviceLocations","renderConditionDropdown","clearFilter","filterByAlarm","filterByDoor","showHighTempOnly","Label","htmlFor","Check","size","isEnabled","filterByStatus","filterByOk","filterByFavourite","deviceAlarmCount","deviceOkCount","deviceOpenDoorCount","isEmpty","obj","Object","saveStartDate","saveEndDate","DateRange","setStartDate","setEndDate","setPresetTime","isValidDate","moment","isDate","isMoment","actions","time","sm","Datetime","dateFormat","timeFormat","lg","DropdownButton","onSelect","bindActionCreators","dataAnalysisActions","chartColours","AnalysisDeviceTelemetryChart","initialLoad","tooltipData2","dataset","default","options","chart","zoom","enabled","autoScaleYaxis","dataPointMouseEnter","chartContext","seriesIndex","dataPointIndex","xValue","w","config","x","allDataPoints","point","labels","formattedData","y","colors","tooltip","intersect","shared","markers","dataLabels","stroke","curve","lineCap","width","align","grid","row","opacity","yaxis","seriesName","tickAmount","show","showAlways","decimalsInFloat","opposite","xaxis","format","setTooltipData","alert","getYaxis","doorSeries","tempFridgeSeries","s","loadAnalysisData","dtS","selectedDates","dtE","abs","submitReport","loadDeviceListAnalysisTelemetry","setChartOptions","maxValue","flatMap","serie","yaxis_temp","options_temp","submitReportNotify","toast","hideProgressBar","autoClose","reportParams","DeviceId","StartTime","EndTime","submitDeviceAnalysisReportRequest","renderInitialLoad","renderChart","Chart","analysisDeviceTelemetryChartDataLoaded","analysisDeviceTelemetryChartData","getAnalysisTelemetrySeriesData","dataAnalysisParameters","getDates","getServiceBusNotificationSubscription","filters","filterQueryString","includeData","includeAlarms","includeIncidents","buildFilterQueryString","deviceParam","queryString","buildQueryString","cosmosId","getServiceBusSubscriptionDetails","deviceNotification","serviceBusSubscription","DeviceNotificationSubscription","servicebusSubscription","connection","receivedData","alarms","incidents","closeExistingSubscriptionStream","getSubscriptionDetails","setUpSignalRConnection","startSubscriptionStream","getServiceBusNoticationSubscription","protocol","signalR","withUrl","withHubProtocol","build","invoke","start","on","dataNotification","alarmNotification","eventNotification","incidentNotification","deviceData","parse","updateDeviceTelemetryChartData","updateDeviceData","deviceListNotificationUpdate","notifications","deviceNotificationApi","serviceBusNotificationSubscriptionDetail","resetLiveDeviceTelemetryChart","CustomChartLayout","onHover","chartRef","useRef","tooltipRef","tooltipData","useEffect","customOptions","_ref2","ref","DeviceTelemetryChart","bDoorAdded","sharedDoorSeries","tempProdSeries","getOptions","yAxis","animations","easing","speed","animateGradually","dynamicAnimation","getIncidentList","incidentList","getDeviceIncidentAlarmList","incident","filtered","incidentAlarmList","inc","getTokenForMoreIncidents","getIncidentReportDropdownOptions","reportOptions","incidentReportDropdownList","DeviceIncidentAlarmList","acknowledgeAlarm","loadDeviceIncidentAlarmList","acknowledgIncidentAlarm","Table","responsive","alarm","key","alarmStatus","alarmName","activatedDate","resolvedDate","acknowledgedBy","acknowledgedTime","faCheckCircle","incidentApi","loadDeviceIncidentAlarmListSuccess","incidentId","incidentAlarmId","IncidentAlarmId","UserId","AcknowledgeFlag","defaultSorted","dataField","order","DeviceIncidentList","mobileIncidentMap","Map","columns","hidden","editable","formatter","dateFormatter","headerStyle","colum","colIndex","cell","reportDropdownOptions","editor","Type","SELECT","setOptions","column","submitReportFormatter","columnIndex","rowIndex","incidentsMobile","showIncidentDetails","mobileStartDateHandleFocus","mobileEndDateHandleFocusOut","loadIncidentReportDropdownList","loadDeviceIncidentList","loadMoreIncidents","dateFormatterIgnorOffset","reportFormatter","ReportId","customerReportId","reportStartDateNoOffset","reportEndDateNoOffset","Offset","reportStartDateOffset","submitDeviceIncidentReportRequest","faEdit","afterSaveCell","incidentMap","set","delete","renderMobileReportSelect","reportName","select","defaultValue","findIndex","Select","submitReportMobile","expandRow","renderer","showExpandColumn","expandByColumnOnly","expandHeaderColumnRenderer","isAnyExpands","faMinus","faPlus","expandColumnRenderer","_ref3","expanded","rowKey","expandable","ToolkitProvider","bootstrap4","keyField","defaultSearch","BootstrapTable","baseProps","hover","bordered","condensed","cellEdit","cellEditFactory","mode","blurToSave","RecordsPerPage","Token","loadDeviceIncidentListSuccess","dropdownlist","loadIncidentReportDropdownListSuccess","getDeviceCustomerContactInfo","deviceContacts","DeviceCustomerContactInformation","styleLine","info","recordType","itemLine","dangerouslySetInnerHTML","__html","buildIframe","refresh","listStyleType","signalRConfiguration","deviceListUpdateData","HubConnectionBuilder","accessTokenFactory","withAutomaticReconnect","connectSecurelyToStatusHub","getDeviceAlarmConfigList","deviceAlarmConfigList","getDeviceAlarmConfigInputs","inputDescription","self","getNextSortOrder","showNewAlarmConfigDialog","newAlarmConfigDialog","getAlarmContacts","contacts","getAvailableAlarmContacts","availableAlarmContacts","getTimezones","getAvailabilitySchedule","availabilitySchedule","AlarmContactEmail","updateSchedule","availabilityId","updateEmailAvailability","availabilityScheduleId","updateEmail","JSONPretty","isInvalid","errors","Feedback","AlarmContactPhone","initialSelectedValue","updatePhoneAvailability","updateSms","updateVoiceMessage","updatePhone","smsFlag","voice","phoneNumber","voiceFlag","selected","AlarmContact","forceChildControlsReRender","contactId","contactEditing","contactName","timezoneId","alarmContactUpdate","emailContacts","phoneContacts","saveContact","updateTimezone","handleEmailChanged","closeAddContact","loadAvailabilitySchedule","updateContactName","emails","getPhonesIndexFromId","getEmailIndexFromId","phones","addAlarmContactEmailComponent","components","addAlarmContactPhoneComponent","erors","newErrors","validateInput","forEach","alarmContactEmail","contactEmailId","phoneNos","alarmContactPhone","contactid","contactPhoneId","alarmContact","phoneNumbers","upsertContact","newContactId","addNewContact","emailsEntered","phonesEntered","missingEmailPhone","phoneErrors","validatePhoneNumber","phoneNo","test","schedule","loadAvailabilityScheduleSuccess","AlarmContactConfiguration","forceChildControlReRender","addContactToAllAlarmsClassname","removeContactFromAllAlarmsClassname","showAvailableContacts","showAddEditContact","contactIdDeleted","selectedContactId","multiselectRef","React","createRef","editContact","removeContact","setSelectedContact","addAlarmContact","deleteAlarmContact","loadAvailableAlarmContacts","getFullAlarmContact","phone","contact","selectedOption","hideAvailableContacts","showAddNewContact","hideAddEditContact","cancelAddContactToAllAlarms","addContactToAllAlarms","addAlarmContactToAllAlarmsForDevice","removeContactFromAllAlarms","removeAlarmContactToAllAlarmsForDevice","cancelRemoveContactFromAllAlarms","isClearable","availableContacts","loadAvailableContactsSuccess","loadContact","alarmCheckTypeList","checkTypeId","checkType","EditAlarmConfiguration","readOnly","newAlarm","alarmSettingDescription","threshold","restoreCheckType","restoreCheckTypeId","restoreThreshold","alarmHoldOff","restoreHoldoff","repeatInterval","mutedUntil","mutedFlag","mutedFlagBoolean","muteInputProps","showAlarmContactDialog","showAlarmActionDialog","alarmActions","cloudAlarmFlag","toggleEditMode","saveAlarmConfig","disableEditMode","deleteAlarmConfig","setMutedUntil","handleSnoozeCheckboxChanged","handleShowAlarmContactDialog","handleCloseAlarmContactDialog","handleShowAlarmActionDialog","handleCloseAlarmActionDialog","saveAlarmActions","inputDisabled","prevState","getAlarmActions","a","alarmActionChanged","alarmActionId","alarmAction","putAlarmAction","renderAlarmCheckTypeDropDown","updateAlarmSettingDescription","updateAlarmCheckType","updateThreshold","updateRestoreCheckType","updateRestoreThreshold","updateAlarmHoldOff","updateRestoreHoldoff","updateRepeatInterval","muteDate","muteInputDisabled","alarmConfig","logicalInputId","parseFloat","withoutNotification","alarmMuteConfig","muteFlag","muteUntil","setDeviceAlarmMute","updateDeviceAlarmConfig","deleteDeviceAlarmConfig","updateStateDisplayed","isNaN","notificationsFlag","actionsFlag","inputProps","Modal","onHide","Header","closeButton","Title","Body","muteConfig","AlarmConfiguration","selectedInput","selectedTabInput","selectedLogicalInputId","handleClose","handleShow","onTabSelect","setSelectedTabInputs","inputList","Tab","k","defaultActiveKey","input","eventKey","Content","ind","Pane","showDialog","nextSortOder","nextSortOrder","getGeneralDeviceSettings","generalDeviceSettings","CustomerLocation","_this$props$location$","_this$props$location$2","_this$props$location$3","_this$props$location$4","_this$props$location$5","_this$props$location$6","_this$props$location$7","_this$props$location$8","_this$props$location$9","_this$props$location$10","customerLocationId","shortName","address","postcode","timeZoneId","timezoneName","timeZoneName","gpsCoordinates","physicalRegion","logicalReason","customerRef","saveLocation","closeDialog","close","updateDescription","updateShortName","updateAddress","updatePhysicalRegion","updateCustomerRef","customerLocation","upsertLocation","updatedCustomerLocation","updateGeneralSettingLocation","GeneralSettings","handleCustomerLocationChange","minProductTemperature","maxProductTemperature","customerRef1","customerRef2","notes","customerLocationDropdownOptions","showCustomerLocationDialog","selectedLocation","showWarningDeleteDialog","activeFlag","saveSettings","onSelectDeviceGroup","onRemoveDeviceGroup","handleShowCustomerLocationDialog","handleHideCustomerLocationDialog","addNewCustomerLocation","closeWarningDeleteDialog","deleteCustomerLocation","renderValue","renderDropdownOption","locationToDelete","saveLocationSettings","deleteLocation","locationId","generalSettings","updateGeneralDeviceSettings","setUpCustomerLocationsDropDownData","loadGeneralDeviceSettings","_this$props$generalSe","_this$props$generalSe2","_this$props$generalSe3","_this$props$generalSe4","_this$props$generalSe5","l","option","snapshot","updateName","updateCustomerCode","updateMinProductTemperature","updateMaxProductTemperature","updateCustomerRef1","updateCustomerRef2","updatePeriodicReportFlag","periodicReportFlag","updateNotes","updateDeviceActiveFlag","selectedList","selectedItem","deviceGroupData","memberFlag","updateDeviceGroup","removedItem","pushConfigUi","valueProps","inputValue","focus","displayValue","SelectSearch","renderOption","filterOptions","fuzzySearch","rows","Multiselect","showCheckbox","closeOnSelect","disable","selectedValues","onRemove","updateCustomerLocation","generalSettingsApi","loadGeneralDeviceSettingsSuccess","inv","inventory","getUnidentifiedTags","undientifiedTags","getLastScanTime","inventoryTime","getProductCounts","productTotals","productCounts","inventoryHistory","getDeviceInventoryHistoryToken","StockTable","stockList","product","serialNumber","batch","expiryDate","epc","tagId","InventoryHistory","loadMoreStockEvents","loadDeviceInventoryHistoryMore","itemsAdded","itemsRemoved","loadDeviceInventoryHistoryMoreSuccess","inventorySummary","InventorySummary","sumTotal","total","currentValue","stock","InventoryHeading","productName","totals","getProductTotals","Inventory","getTimeRemaining","timerEvent","checkScan","beginTimer","timer","Ref","current","clearInterval","setInterval","getDeadTime","deadline","setSeconds","reviseExpiryTags","revisedReason","revisedDate","scanningState","scanCheckResult","refreshInventory","reviseExpiryCheckboxChanged","reviseExpiryPopup","toggleModal","setRevisedReason","setRevisedDate","inventoryApi","newresult","res","deviceInventoryState","refreshDeviceInventory","refreshDeviceInventorySummary","refreshDeviceInventoryHistory","tags","reviseExpiryData","revisedExpiryDate","reason","inventoryReviseExpiry","renderScanButtons","class","lastCheck","lastScanTime","xs","Tabs","borderless","dataTarget","dataTargetClass","ariaControls","showRevisedExpiryCheckbox","productCssClassName","firstSeenHere","customerRef3","customerRef4","customerRef5","colSpan","epcId","toggle","ModalBody","color","unidentifiedTags","reviseExpiry","loadDeviceInventoryProductCounts","loadDeviceInventoryProductCountSuccess","Loader","DashboardPage","forceChartReRender","handleSelect","isConnected","DeviceListUpdate","DeviceIncidentsPage","OtaGrid","onGridReady","gridApi","api","columnDefs","headerName","minWidth","field","headerCheckboxSelection","checkboxSelection","sortable","defaultColDef","flex","rowSelection","rowData","selectedRows","idNumber","updateStatus","softwareVersion","onButtonClick","selectedData","getSelectedNodes","node","AgGridReact","groupSelectsFiltered","rowMultiSelectWithClick","TestPage","test1","test2","getDeviceProvisioningTemplates","deviceProvisioningTemplates","DeviceIdNotSet","ProvisioningPage","handleDeviceChange","provisionNew","deviceCanBeProvisioned","selectedHardwareId","provisionNewDevice","provisionKey","provisionResponse","boxSerial","deviceProvisioningStatus","dbCreated","fisp_device_reprovision_check_response","fisp_device_provision_new_ui_response","fisp_device_provision_next_id_response","fisp_device_provisioned_check","deviceDropdownOptions","displayReprovisionResult","reprovisionResult","parameterTemplateId","checkDeviceCanBeReprovisioned","setParameterTemplateId","checkDeviceProvisioningStatus","loadDeviceProvisioningTemplates","setupDeviceDropdownOptions","updateProvisionKey","updateBoxSerial","hardwareid","locaction","unshift","reprovisionDeviceCheck","reprovsionResult","provisionDevice","deviceProvisionSettings","getNextDeviceId","newId","commissionDevice","deviceCommissionNewSettings","commissionNewDevice","provisioningTemplates","templateId","provisioningApi","deviceTemplates","loadDeviceProvisioningTemplatesSuccess","OtaPage","PasswordResetPage","password","code","resetResult","StatusPage","isLoaded","getPortalStatus","statusApi","App","Provider","exact","ToastContainer","transition","Slide","_App","baseUrl","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","BrowserRouter","basename","devicesListDashboard","SerialNumber","Name","Location","Company","BusinessType","CompanyName","Status","ProductTemperature","FridgeTemperature","Door","CategoryFilter","deviceDetails","deviceStatuses","deviceInputs","selectedDeviceStatus","dashboardStatusOverview","apiCallsInProgress","loggedOnUser","devTools","showIdentityServerInfo","dashboardSearch","dashboardDevicesList","currentCount","countPerPage","totalCount","filteredCount","statusFilter","inputQueryParameters","selectedInputs","dashboardData","dashboardTelemetryData","dataTableColumns","chartLines","dashboardAnalysisData","eventLogData","eventLogs","liveDeviceStatusData","liveDeviceTelemetryData","latestIncidents","incidentDetails","topic","signature","deviceScanCheck","sortDevices","isNumeric","sortedDevices","sort","b","localeCompare","addInputDataToGraphSeries","dataInputProperty","inputDisplayName","hasOwnProperty","newData","combinedSeriesData","dataPointCount","maxDataPointCount","getGraphSeries","graphSeries","tempProductSeries","compressorSeries","voltageMainSeries","voltageBatterySeries","doorMagnetSeries","tempAirSeries","rootReducer","combineReducers","initialState","newState","assign","eventLog","newEventLog","updatedEventLogData","updatedEventLog","firstState","loadedState","count","uniqueLocations","Set","alertState","toLocaleLowerCase","alertDevicesFiltered","doorDevicesFiltered","alarmState","alarmDevicesFiltered","okState","okDevicesFiltered","resetState","_device$hardwareId","_device$name","_device$location","_device$customerCode","locState","favouriteState","favouriteDevicesFiltered","selectedDeviceState","deviceListUpdateState","selectedDeviceId","updatedDevice","exactPageState","exactPage","pageDevices","pageStatusFilter","upperCountExact","lowerCountExact","exactDevices","loadNewPageState","addPages","begin","pageList","notificationState","deviceIndex","filteredDeviceIndex","notification","fridgeVoltage","door","maxTemperature","toLowerCase","dataTimeLoc","stateDevice","newDevice","valueTime","alarmIncident","incidentIndex","deviceContactData","newContactData","updatedContactInfoData","contactData","inventoryList","stockChangedEventList","newHistory","inventorySummaryList","alarmIndex","createStore","applyMiddleware","thunk","SET_CURRENT_USER","LOAD_EVENT_LOG_DATA_SUCCESS","LOAD_LATEST_CUSTOMER_INCIDENT_SUCCESS","LOAD_INCIDENT_DETAILS_SUCCESS","LOAD_DEVICE_INCIDENT_LIST_SUCCESS","RESET_DEVICE_INCIDENT_LIST","LOAD_DEVICE_INCIDENT_ALARM_LIST_SUCCESS","LOG_ERROR","LOAD_DEVICE_LIST_SUCCESS","DEVICE_LIST_FILTER_BY_STATUS","DEVICE_LIST_SEARCH_BY_VALUE","DEVICE_LIST_FILTER_BY_LOCATION","DEVICE_LIST_FILTER_BY_AlARM","DEVICE_LIST_FILTER_BY_OK","DEVICE_LIST_FILTER_CLEAR","DEVICE_LIST_FILTER_BY_FAVOURITE","DEVICE_LIST_FILTER_BY_DOOR","DEVICE_LIST_SET_SELECTED_DEVICE","DEVICE_LIST_LOAD_EXACT_PAGE","DEVICE_LIST_LOAD_NEW_PAGE","DEVICE_LIST_NOTIFICATION_UPDATE","DEVICE_LIST_UPDATE_DEVICE_DATA","DEVICE_LIST_UPDATE_DEVICE_LIST_DATA","SERVICE_BUS_SUBSCRIPTION_DETAILS_LOADED","CUSTOMER_DETAILS_LOADED","CUSTOMER_LOCATIONS_LOADED_SUCCESS","DEVICE_TELEMETRY_DATA_UPDATE","RESET_LIVE_DEVICE_TELEMETRY_DATA","LOAD_RECENT_TELEMETRY_DATA_SUCCESS","LOAD_ANALYSIS_DEVICE_TELEMETRY_DATA_SUCCESS","RESET_ANALYIS_DEVICE_TELEMETRY_DATA","SAVE_DATA_ANALYSIS_START_DATE","SAVE_DATA_ANALYSIS_END_DATE","USER_DEVICE_FAVOURITE_ADDED","USER_DEVICE_FAVOURITE_DELETED","LOAD_INCIDENT_REPORT_DROPDOWN_LIST_SUCCESS","LOAD_DEVICE_CUSTOMER_CONTACT_INFO_SUCCESS","LOAD_DEVICE_ALARM_CONFIG_LIST_SUCCESS","RESET_DEVICE_ALARM_CONFIG_LIST","TOGGLE_NEW_ALARM_CONFIG_DIALOG","LOAD_GENERAL_DEVICE_SETTINGS_SUCCESS","LOAD_DEVICE_GROUPS_SUCCESS","LOAD_DEVICE_INVENTORY_SUCCESS","LOAD_DEVICE_INVENTORY_PRODUCT_COUNT_SUCCESS","LOAD_DEVICE_INVENTORY_HISTORY_SUCCESS","LOAD_DEVICE_INVENTORY_SUMMARY_SUCCESS","REFRESH_DEVICE_INVENTORY_HISTORY_SUCCESS","REFRESH_DEVICE_INVENTORY_SUMMARY_SUCCESS","LOAD_DEVICE_INVENTORY_HISTORY_MORE_SUCCESS","LOAD_ALARM_CONTACTS_SUCCESS","LOAD_ALARM_AVIALABLE_CONTACTS_SUCCESS","LOAD_TIMEZONES_SUCCESS","LOAD_AVAILABILITY_SCHEDULE_SUCCESS","UPDATE_GENERAL_DEVICE_SETTINGS_LOCATION","CUSTOMER_LIST_LOADED","DEVICE_PROVISIONING_TEMPLATES_LOADED","DEVICE_LIST_SHOW_HIGH_TEMP","DEVICE_LIST_IS_ENBALED","DEVICE_LIST_FILTER_BY_NAME","DEVICE_LIST_FILTER_BY_CUSOMTER_CODE","DEVICE_LIST_FILTER_BY_VOLTAGE","DEVICE_LIST_FILTER_BY_PROD_TEMP","DEVICE_LIST_SORT_BY_DOOR","SET_IS_CONNECTED"],"mappings":"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","file":"static/js/main.2ccaa9c6.chunk.js","sourcesContent":["export const formatDate = (rawDate) => {\n if (rawDate && rawDate !== \"0001-01-01T00:00:00\") {\n const date = new Date(rawDate);\n return date.toLocaleString();\n }\n\n return \"\";\n};\n\nexport const formatDateIgnoreOffset = (rawDate) => {\n if (rawDate) {\n let date = new Date(rawDate);\n\n const index = rawDate.indexOf(\"+\");\n if (index > -1) {\n const dateWithoutOffsetString = rawDate.substring(0, index);\n date = new Date(dateWithoutOffsetString);\n }\n\n return date.toLocaleString();\n }\n\n return \"\";\n};\n\nconst getTimeFromJavaScriptDate = (date) => {\n const hour = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n let secs = seconds;\n if (seconds < 10) {\n secs = `0${seconds}`;\n }\n let mins = minutes;\n if (minutes < 10) {\n mins = `0${minutes}`;\n }\n let hours = hour;\n if (hour < 10) {\n hours = `0${hour}`;\n }\n const time = `${hours}:${mins}:${secs}`;\n\n return time;\n};\n\nexport const getTime = (dataTime) => {\n const date = new Date(dataTime);\n\n return getTimeFromJavaScriptDate(date);\n};\n\nexport const getTimeWithoutTimezoneConversion = (dataTime) => {\n const dataTimeWithoutOffset = dataTime.slice(0, dataTime.length - 6);\n const date = new Date(dataTimeWithoutOffset);\n const time = getTimeFromJavaScriptDate(date);\n\n return time;\n};\n","// Use CommonJS require below so we can dynamically import during build-time.\nif (process.env.NODE_ENV === \"production\") {\n module.exports = require(\"./configureStore.prod\");\n } else {\n module.exports = require(\"./configureStore.dev\");\n }\n ","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\nimport translations from \"./translations.js\";\n\n// the translations\n// (tip move them in a JSON file and import them)\n//const resources = {\n//\ten: {\n//\t\ttranslation: {\n//\t\t\t\"Welcome to React\": \"Welcome to React and react-i18next\",\n//\t\t\t\"Hello\": \"Hi there!\",\n//\t\t\t\"Logout\": \"Get out of here\"\n//\t\t}\n//\t},\n//\tel: {\n//\t\ttranslation: {\n//\t\t\t\"Hello\": \"Γεια σου!\",\n//\t\t\t\"Logout\": \"Αποσύνδεση\"\n//\t\t}\n//\t}\n//};\n\nconst resources = translations;\n\ni18n\n .use(initReactI18next) // passes i18n down to react-i18next\n .init({\n resources,\n lng: \"en\",\n\n keySeparator: false, // we do not use keys in form messages.welcome\n\n interpolation: {\n escapeValue: false, // react already safes from xss\n },\n });\n\nexport default i18n;\n","export default {\n en: {\n translation: {\n en: \"English\",\n \"Welcome to React\": \"Welcome to React and react-i18next\",\n FieldRequired: \"The field is required!\",\n FieldInvalid: \"The field is invalid!\",\n FirstName: \"First name\",\n },\n },\n el: {\n translation: {\n Home: \"Αρχική\",\n Counter: \"Μετρητής\",\n \"Fetch data\": \"Κατέβασε δεδομένα\",\n el: \"Ελληνικά\",\n Hello: \"Γεια σου!\",\n Logout: \"Αποσύνδεση\",\n Users: \"Χρήστες\",\n FieldRequired: \"Το πεδίο είναι απαραίτητο!\",\n FieldInvalid: \"Το πεδίο είναι λανθασμένο!\",\n FirstName: \"Όνομα\",\n },\n },\n};\n","import configureStore from \"./configureStore\";\n\nconst store = configureStore();\n\n/**\n * The redux store.\n */\nexport default store;\n","export const ApplicationName = \"FridgeInsights.Admin\";\n\nexport const QueryParameterNames = {\n ReturnUrl: \"returnUrl\",\n Message: \"message\",\n};\n\nexport const LogoutActions = {\n LogoutCallback: \"logout-callback\",\n Logout: \"logout\",\n LoggedOut: \"logged-out\",\n};\n\nexport const LoginActions = {\n Login: \"login\",\n LoginCallback: \"login-callback\",\n LoginFailed: \"login-failed\",\n Profile: \"profile\",\n Register: \"register\",\n};\n\nconst prefix = \"/authentication\";\n\nexport const ApplicationPaths = {\n DefaultLoginRedirectPath: \"/\",\n ApiAuthorizationClientConfigurationUrl: `/_configuration/${ApplicationName}`,\n ApiAuthorizationPrefix: prefix,\n Login: `${prefix}/${LoginActions.Login}`,\n LoginFailed: `${prefix}/${LoginActions.LoginFailed}`,\n LoginCallback: `${prefix}/${LoginActions.LoginCallback}`,\n Register: `${prefix}/${LoginActions.Register}`,\n Profile: `${prefix}/${LoginActions.Profile}`,\n LogOut: `${prefix}/${LogoutActions.Logout}`,\n LoggedOut: `${prefix}/${LogoutActions.LoggedOut}`,\n LogOutCallback: `${prefix}/${LogoutActions.LogoutCallback}`,\n IdentityRegisterPath: \"/Identity/Account/Register\",\n IdentityManagePath: \"/Identity/Account/Manage\",\n};\n\nexport const UserRoles = {\n SuperAdmin: \"superAdmin\",\n Administrator: \"administrator\",\n User: \"user\",\n};\n","import { UserManager, WebStorageStateStore } from \"oidc-client\";\nimport {\n ApplicationPaths,\n ApplicationName,\n UserRoles,\n} from \"./ApiAuthorizationConstants\";\n\nexport class AuthorizeService {\n _callbacks = [];\n _nextSubscriptionId = 0;\n _user = null;\n _isAuthenticated = false;\n\n // By default pop ups are disabled because they don't work properly on Edge.\n // If you want to enable pop up authentication simply set this flag to false.\n _popUpDisabled = true;\n\n async isAuthenticated() {\n const user = await this.getUser();\n return !!user;\n }\n\n async getUser() {\n if (this._user && this._user.profile) {\n return this._user.profile;\n }\n\n await this.ensureUserManagerInitialized();\n const user = await this.userManager.getUser();\n return user && user.profile;\n }\n\n async getAccessToken() {\n await this.ensureUserManagerInitialized();\n const user = await this.userManager.getUser();\n return user && user.access_token;\n }\n\n async hasRole(role) {\n const user = await this.getUser();\n\n if (user) {\n if (user.role instanceof Array)\n // if it has many roles role is an array\n return user.role.includes(UserRoles.Administrator);\n // beware that UserRoles apears as undefined when debugging, though it works fine\n // otherwise it is a string\n else return user.role === UserRoles.Administrator;\n } else return false;\n }\n\n // We try to authenticate the user in three different ways:\n // 1) We try to see if we can authenticate the user silently. This happens\n // when the user is already logged in on the IdP and is done using a hidden iframe\n // on the client.\n // 2) We try to authenticate the user using a PopUp Window. This might fail if there is a\n // Pop-Up blocker or the user has disabled PopUps.\n // 3) If the two methods above fail, we redirect the browser to the IdP to perform a traditional\n // redirect flow.\n async signIn(state) {\n await this.ensureUserManagerInitialized();\n try {\n const silentUser = await this.userManager.signinSilent(\n this.createArguments()\n );\n this.updateState(silentUser);\n return this.success(state);\n } catch (silentError) {\n // User might not be authenticated, fallback to popup authentication\n console.log(\"Silent authentication error: \", silentError);\n\n try {\n if (this._popUpDisabled) {\n throw new Error(\n \"Popup disabled. Change 'AuthorizeService.js:AuthorizeService._popupDisabled' to false to enable it.\"\n );\n }\n\n const popUpUser = await this.userManager.signinPopup(\n this.createArguments()\n );\n this.updateState(popUpUser);\n return this.success(state);\n } catch (popUpError) {\n if (popUpError.message === \"Popup window closed\") {\n // The user explicitly cancelled the login action by closing an opened popup.\n return this.error(\"The user closed the window.\");\n } else if (!this._popUpDisabled) {\n console.log(\"Popup authentication error: \", popUpError);\n }\n\n // PopUps might be blocked by the user, fallback to redirect\n try {\n await this.userManager.signinRedirect(this.createArguments(state));\n return this.redirect();\n } catch (redirectError) {\n console.log(\"Redirect authentication error: \", redirectError);\n return this.error(redirectError);\n }\n }\n }\n }\n\n async completeSignIn(url) {\n try {\n await this.ensureUserManagerInitialized();\n const user = await this.userManager.signinCallback(url);\n this.updateState(user);\n return this.success(user && user.state);\n } catch (error) {\n console.log(\"There was an error signing in: \", error);\n return this.error(\"There was an error signing in.\");\n }\n }\n\n // We try to sign out the user in two different ways:\n // 1) We try to do a sign-out using a PopUp Window. This might fail if there is a\n // Pop-Up blocker or the user has disabled PopUps.\n // 2) If the method above fails, we redirect the browser to the IdP to perform a traditional\n // post logout redirect flow.\n async signOut(state) {\n sessionStorage.removeItem(\"email\");\n sessionStorage.removeItem(\"name\");\n\n await this.ensureUserManagerInitialized();\n try {\n if (this._popUpDisabled) {\n throw new Error(\n \"Popup disabled. Change 'AuthorizeService.js:AuthorizeService._popupDisabled' to false to enable it.\"\n );\n }\n\n await this.userManager.signoutPopup(this.createArguments());\n this.updateState(undefined);\n return this.success(state);\n } catch (popupSignOutError) {\n console.log(\"Popup signout error: \", popupSignOutError);\n try {\n await this.userManager.signoutRedirect(this.createArguments(state));\n return this.redirect();\n } catch (redirectSignOutError) {\n console.log(\"Redirect signout error: \", redirectSignOutError);\n return this.error(redirectSignOutError);\n }\n }\n }\n\n async completeSignOut(url) {\n await this.ensureUserManagerInitialized();\n try {\n const response = await this.userManager.signoutCallback(url);\n this.updateState(null);\n return this.success(response && response.data);\n } catch (error) {\n console.log(`There was an error trying to log out '${error}'.`);\n return this.error(error);\n }\n }\n\n updateState(user) {\n this._user = user;\n this._isAuthenticated = !!this._user;\n this.notifySubscribers();\n }\n\n subscribe(callback) {\n this._callbacks.push({\n callback,\n subscription: this._nextSubscriptionId++,\n });\n return this._nextSubscriptionId - 1;\n }\n\n unsubscribe(subscriptionId) {\n const subscriptionIndex = this._callbacks\n .map((element, index) =>\n element.subscription === subscriptionId\n ? { found: true, index }\n : { found: false }\n )\n .filter((element) => element.found === true);\n if (subscriptionIndex.length !== 1) {\n throw new Error(\n `Found an invalid number of subscriptions ${subscriptionIndex.length}`\n );\n }\n\n this._callbacks = this._callbacks.splice(subscriptionIndex[0].index, 1);\n }\n\n notifySubscribers() {\n for (let i = 0; i < this._callbacks.length; i++) {\n const callback = this._callbacks[i].callback;\n callback();\n }\n }\n\n createArguments(state) {\n return { useReplaceToNavigate: true, data: state };\n }\n\n error(message) {\n return { status: AuthenticationResultStatus.Fail, message };\n }\n\n success(state) {\n return { status: AuthenticationResultStatus.Success, state };\n }\n\n redirect() {\n return { status: AuthenticationResultStatus.Redirect };\n }\n\n async ensureUserManagerInitialized() {\n if (this.userManager !== undefined) {\n return;\n }\n\n let response = await fetch(\n ApplicationPaths.ApiAuthorizationClientConfigurationUrl\n );\n if (!response.ok) {\n throw new Error(`Could not load settings for '${ApplicationName}'`);\n }\n\n let settings = await response.json();\n settings.automaticSilentRenew = true;\n settings.includeIdTokenInSilentRenew = true;\n settings.userStore = new WebStorageStateStore({\n prefix: ApplicationName,\n });\n\n this.userManager = new UserManager(settings);\n\n this.userManager.events.addUserSignedOut(async () => {\n await this.userManager.removeUser();\n this.updateState(undefined);\n });\n }\n\n static get instance() {\n return authService;\n }\n}\n\nconst authService = new AuthorizeService();\n\nexport default authService;\n\nexport const AuthenticationResultStatus = {\n Redirect: \"redirect\",\n Success: \"success\",\n Fail: \"fail\",\n};\n","import React, { Component, Fragment } from \"react\";\nimport { NavItem, NavLink } from \"reactstrap\";\nimport { Link } from \"react-router-dom\";\nimport authService from \"./AuthorizeService\";\nimport { ApplicationPaths } from \"./ApiAuthorizationConstants\";\nimport { withTranslation } from \"react-i18next\";\n\nclass LoginMenuPlain extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isAuthenticated: false,\n userName: null,\n };\n }\n\n componentDidMount() {\n this._subscription = authService.subscribe(() => this.populateState());\n this.populateState();\n }\n\n componentWillUnmount() {\n authService.unsubscribe(this._subscription);\n }\n\n async populateState() {\n const [isAuthenticated, user] = await Promise.all([\n authService.isAuthenticated(),\n authService.getUser(),\n ]);\n this.setState({\n isAuthenticated,\n userName: user && user.email,\n });\n }\n\n render() {\n const { isAuthenticated, userName } = this.state;\n if (!isAuthenticated) {\n const registerPath = `${ApplicationPaths.Register}`;\n const loginPath = `${ApplicationPaths.Login}`;\n return this.anonymousView(registerPath, loginPath);\n } else {\n const profilePath = `${ApplicationPaths.Profile}`;\n const logoutPath = {\n pathname: `${ApplicationPaths.LogOut}`,\n state: { local: true },\n };\n return this.authenticatedView(userName, profilePath, logoutPath);\n }\n }\n\n authenticatedView(userName, profilePath, logoutPath) {\n const { t } = this.props;\n\n return (\n \n \n \n {t(\"\")} {userName}\n \n \n \n \n {t(\"Logout\")}\n \n \n \n );\n }\n\n anonymousView(registerPath, loginPath) {\n return (\n \n \n \n Login\n \n \n \n );\n }\n}\n\nexport const LoginMenu = withTranslation()(LoginMenuPlain);\n","// Common config options that will be change depending on environment Dev/Testing/Production\n\n// LIVE\n// export const FridgeInsightsApi = \"https://fi-oz-api.azurewebsites.net\";\n\n// export const FridgeInsightsAuthorisationHeader = {\n// headers: {\n// Authorization: \"5Qgf80GiSPQQ6A97tMLDwPavPwYAGQsQj3pJdzDpo9RPV6EV\",\n// },\n// };\n\n// export const FridgeInsightsDeviceNotificationsHub =\n// \"https://api.fridgeinsights.com/NotificationsHub\";\n\n// LIVE END\n\n//export const FridgeInsightsServiceBusSubcriptionApi = `${FridgeInsightsApi}/GET /Customer/INSERVIO/notifications`\n\n// DEV\n//export const FridgeInsightsApi = \"https://devapi.fridgeinsights.com\";\nexport const Environment = process.env.REACT_APP_ENV;\nexport const FridgeInsightsApi = process.env.REACT_APP_FRIDGE_INSIGHTS_API;\nexport const FridgeInsightsAuthorisationHeader = {\n headers: {\n Authorization: process.env.REACT_APP_FRIDGE_INSIGHTS_AUTH_HEADER, //\"321\",\n },\n};\n\nexport const FridgeInsightsDeviceNotificationsHub =\n process.env.REACT_APP_FRIDGE_INSIGHTS_DEVICE_NOTIFICATIONS_HUB;\n//\"https://devapi.fridgeinsights.com/NotificationsHub\";\n\n// DEV END\n\nexport const FridgeInsightsCustomerApi = `${FridgeInsightsApi}/Customer`;\n\nexport const FridgeInsightsDeviceApi = `${FridgeInsightsApi}/Device`;\n\nexport const appConfig = {\n deviceInventoryHistoryRecordsPerPage: 18,\n};\n","import { FridgeInsightsAuthorisationHeader } from \"../configuration/config\";\nimport authService from \"../api-authorization/AuthorizeService\";\n\nasync function getAuthHeader(contentType) {\n const token = await authService.getAccessToken();\n const header = {\n headers: !token ? {} : { Authorization: `Bearer ${token}` },\n };\n\n return header;\n}\n\nexport async function callAdminApiGet(url) {\n const header = await getAuthHeader();\n return fetch(url, header).then(handleResponse).catch(handleError);\n}\n\nexport async function callAdminApiPost(url, data) {\n const token = await authService.getAccessToken();\n\n return fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(data),\n })\n .then(handleResponse)\n .catch(handleError);\n}\n\nexport function callFridgeInsightsApiGet(url) {\n return fetch(url, FridgeInsightsAuthorisationHeader)\n .then(handleResponse)\n .catch(handleError);\n}\n\nexport async function handleResponse(response) {\n if (response.status === 204) {\n return Promise.resolve();\n }\n\n if (response.ok) {\n const jsonValue = await response.json();\n return Promise.resolve(jsonValue);\n }\n const error = await response.text();\n throw new Error(error);\n}\n\nexport function handleError(error) {\n // debugger;\n throw error;\n}\n","import { callAdminApiGet, callAdminApiPost } from \"../../api/apiUtils\";\nimport authService from \"../../api-authorization/AuthorizeService\";\n\nexport async function getCustomerLocations() {\n const user = await authService.getUser();\n // console.log(`userId:${user.userId}, customerId:${user.customerId}`);\n const url = `api/customer/locations/${user.customerId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function upsertLocation(customerLocation) {\n const user = await authService.getUser();\n const url = `api/customer/upsertlocation/${user.customerId}`;\n\n return callAdminApiPost(url, customerLocation);\n}\n\nexport async function deleteLocation(customerLocationId) {\n const url = `api/customer/deletelocation/${customerLocationId}`;\n\n return callAdminApiPost(url, {});\n}\n\nexport async function getAllCustomers() {\n const url = `api/customer/getallcustomers`;\n\n return callAdminApiGet(url);\n}\n// export async function getSubCustomerFilter(customerId) {\n// const url = `api/customer/subcustomerfilter/${customerId}`;\n\n// return callAdminApiGet(url);\n// }\n","import * as types from \"../../common/state/actionTypes\";\n\nexport function logError(error) {\n return { type: types.LOG_ERROR, error };\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport * as customerApi from \"../api/customerApi\";\nimport { logError } from \"../../errors/actions/errorActions\";\n\nexport const setCustomerDetails = (customer) => ({\n type: types.CUSTOMER_DETAILS_LOADED,\n customer,\n});\n\nexport const customerLocationsLoadedSuccess = (locations) => ({\n type: types.CUSTOMER_LOCATIONS_LOADED_SUCCESS,\n locations,\n});\n\nexport const customerListLoadedSuccess = (customers) => ({\n type: types.CUSTOMER_LIST_LOADED,\n customers,\n});\n\nexport function loadCustomerLocations() {\n return function (dispatch) {\n return customerApi\n .getCustomerLocations()\n .then((locations) => {\n dispatch(customerLocationsLoadedSuccess(locations));\n })\n .catch((error) => {\n const params = [{}];\n const err = new Error(\n \"customerActions.js, loadCustomerLocations()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function upsertLocation(customerLocation) {\n return function (dispatch) {\n //let updatedCustomerLoc = {};\n\n return customerApi\n .upsertLocation(customerLocation)\n .then((updatedCustomerLocation) => {\n // updatedCustomerLoc = updatedCustomerLocation[0];\n\n return customerApi.getCustomerLocations().then((locations) => {\n dispatch(customerLocationsLoadedSuccess(locations));\n });\n })\n\n .catch((error) => {\n const params = [\n {\n customerLocation: customerLocation,\n },\n ];\n const err = new Error(\n \"customerActions.js, upsertLocation()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\n// export function deleteLocation(customerLocationId) {\n// console.log(\"deleteLocation, customerLocationId: \" + customerLocationId);\n// }\nexport function deleteLocation(customerLocationId) {\n return function (dispatch) {\n debugger;\n return customerApi\n .deleteLocation(customerLocationId)\n .then(() => {\n return customerApi.getCustomerLocations().then((locations) => {\n dispatch(customerLocationsLoadedSuccess(locations));\n // dispatch(updateGeneralSettingLocation(-1));\n });\n })\n .catch((error) => {\n const params = [\n {\n customerLocationId: customerLocationId,\n },\n ];\n const err = new Error(\n \"customerActions.js, deleteLocation()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function getAllCustomers() {\n return function (dispatch) {\n return customerApi\n .getAllCustomers()\n .then((customers) => {\n dispatch(customerListLoadedSuccess(customers));\n })\n .catch((error) => {\n const params = [{}];\n const err = new Error(\n \"customerActions.js, getAllCustomers()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n","import React, { Component } from \"react\";\nimport Navbar from \"react-bootstrap/Navbar\";\nimport Container from \"react-bootstrap/Container\";\nimport Nav from \"react-bootstrap/Nav\";\nimport NavDropdown from \"react-bootstrap/NavDropdown\";\nimport { LoginMenu } from \"./api-authorization/LoginMenu\";\nimport \"./NavMenu.css\";\nimport authService from \"./api-authorization/AuthorizeService\";\nimport { UserRoles } from \"./api-authorization/ApiAuthorizationConstants\";\nimport { connect } from \"react-redux\";\nimport { setCurrentUser } from \"../components/users/actions/usersActions\";\nimport { LinkContainer } from \"react-router-bootstrap\";\nimport { setCustomerDetails } from \"../components/customer/actions/customerActions\";\nclass NavMenu extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n hasAdminRights: false,\n isSuperAdmin: false,\n isAuthenticated: false,\n user: {},\n };\n }\n\n componentDidMount() {\n this._subscription = authService.subscribe(() => this.populateState());\n this.populateState();\n }\n\n async populateState() {\n const user = await authService.getUser();\n\n let hasAdminRights = false;\n let isAuthenticated = false;\n let isSuperAdmin = false;\n\n if (user) {\n isAuthenticated = true;\n if (\n user.role === UserRoles.Administrator ||\n user.role === UserRoles.SuperAdmin\n ) {\n hasAdminRights = true;\n }\n if (user.role === UserRoles.SuperAdmin) {\n isSuperAdmin = true;\n }\n\n this.props.setCurrentUser(user);\n\n const customer = {\n id: user.customerId,\n name: user.customerName,\n };\n this.props.setCustomerDetails(customer);\n\n sessionStorage.setItem(\"email\", user.email);\n sessionStorage.setItem(\"name\", `${user.firstName} ${user.lastName}`);\n }\n\n this.setState({\n hasAdminRights,\n isAuthenticated,\n isSuperAdmin,\n user,\n });\n }\n\n render() {\n return (\n
\n \n \n {this.state.isAuthenticated && (\n \n \n \n )}\n \n \n \n \n \n \n
\n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {};\n}\n\nconst mapDispatchToProps = {\n setCurrentUser,\n setCustomerDetails,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(NavMenu);\n","import * as types from \"../../common/state/actionTypes\";\n\nexport function setCurrentUser(user) {\n return { type: types.SET_CURRENT_USER, user };\n}\n","import React, { Component } from \"react\";\nimport { Container } from \"reactstrap\";\nimport NavMenu from \"./NavMenu\";\n\nexport class Layout extends Component {\n static displayName = Layout.name;\n\n render() {\n return (\n
\n \n {this.props.children}\n
\n );\n }\n}\n","import React from \"react\";\nimport { Component } from \"react\";\nimport { Route, Redirect } from \"react-router-dom\";\nimport {\n ApplicationPaths,\n QueryParameterNames,\n} from \"./ApiAuthorizationConstants\";\nimport authService from \"./AuthorizeService\";\nexport default class AuthorizeRoute extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n ready: false,\n authenticated: false,\n hasAdminRole: false,\n hasSuperAdminRole: false,\n currentUser: null,\n };\n }\n\n componentDidMount() {\n this._subscription = authService.subscribe(() =>\n this.authenticationChanged()\n );\n this.populateAuthenticationState();\n }\n\n componentWillUnmount() {\n authService.unsubscribe(this._subscription);\n }\n\n render() {\n const { ready, currentUser } = this.state;\n const redirectUrl = `${ApplicationPaths.Login}?${\n QueryParameterNames.ReturnUrl\n }=${encodeURI(window.location.href)}`;\n if (!ready) {\n return
;\n } else {\n const { component: Component, ...rest } = this.props;\n return (\n {\n if (!currentUser) {\n // not logged in, so redirect\n return ;\n }\n\n if (\n this.props.roles &&\n this.props.roles.indexOf(currentUser.role) === -1\n ) {\n // role not authorised, so redirect to home page\n return ;\n }\n // authorised so return component\n return ;\n }}\n />\n );\n }\n }\n\n async populateAuthenticationState() {\n const currentUser = await authService.getUser();\n\n this.setState({ ready: true, currentUser });\n }\n\n async authenticationChanged() {\n this.setState({ ready: false, authenticated: false });\n await this.populateAuthenticationState();\n }\n}\n","import authService from \"../api-authorization/AuthorizeService\";\nimport {\n ApplicationPaths,\n QueryParameterNames,\n} from \"../api-authorization/ApiAuthorizationConstants\";\n\nexport class UsersService {\n async getUsers(page, pageSize, sortOrder, searchString, customerId) {\n const token = await authService.getAccessToken();\n const offset = (page - 1) * pageSize;\n\n // Taken from here: https://fetch.spec.whatwg.org/#fetch-api\n let url =\n \"api/users?\" +\n \"offset=\" +\n offset +\n \"&limit=\" +\n pageSize +\n \"&sortOrder=\" +\n sortOrder +\n \"&cid=\" +\n customerId;\n if (searchString !== \"\")\n url += \"&searchString=\" + encodeURIComponent(searchString);\n\n try {\n const response = await fetch(url, {\n headers: !token ? {} : { Authorization: `Bearer ${token}` },\n });\n\n if (response.ok) {\n const jsonData = await response.json();\n return jsonData;\n } else {\n if (response.status === 401) {\n // Refresh access token if it is expired\n window.location.href = `${ApplicationPaths.Login}?${\n QueryParameterNames.ReturnUrl\n }=${encodeURI(window.location.href)}`;\n }\n\n throw new Error(\"HTTP error! Code: \" + response.status);\n }\n } catch (error) {\n console.log(error);\n throw error;\n }\n }\n\n async deleteUser(userId) {\n const token = await authService.getAccessToken();\n\n try {\n const headers = { \"content-type\": \"application/json\" };\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\n\n const response = await fetch(\"api/users/\" + userId, {\n method: \"DELETE\",\n headers: headers,\n });\n\n if (response.ok) {\n return;\n } else {\n throw new Error(\"HTTP error! Code: \" + response.status);\n }\n } catch (error) {\n console.log(error);\n throw error;\n }\n }\n\n async getUser(userId) {\n const token = await authService.getAccessToken();\n\n try {\n const response = await fetch(\"api/users/\" + userId, {\n headers: !token ? {} : { Authorization: `Bearer ${token}` },\n });\n\n if (response.ok) {\n const jsonData = await response.json();\n return jsonData;\n } else {\n throw new Error(\"HTTP error! Code: \" + response.status);\n }\n } catch (error) {\n console.log(error);\n throw error;\n }\n }\n\n async addUser(user) {\n const token = await authService.getAccessToken();\n\n try {\n const headers = { \"content-type\": \"application/json\" };\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\n\n const response = await fetch(\"api/users\", {\n method: \"POST\",\n body: JSON.stringify(user),\n headers: headers,\n });\n\n if (response.ok) {\n return;\n } else {\n throw new Error(\"HTTP error! Code: \" + response.status);\n }\n } catch (error) {\n console.log(error);\n throw error;\n }\n }\n\n async updateUser(userId, user) {\n const token = await authService.getAccessToken();\n\n try {\n const headers = { \"content-type\": \"application/json\" };\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\n\n const response = await fetch(\"api/users/\" + userId, {\n method: \"PUT\",\n body: JSON.stringify(user),\n headers: headers,\n });\n\n if (response.ok) {\n return;\n } else {\n throw new Error(\"HTTP error! Code: \" + response.status);\n }\n } catch (error) {\n console.log(error);\n throw error;\n }\n }\n\n async changeUserPassword(userId, userPasswords) {\n const token = await authService.getAccessToken();\n\n try {\n const headers = { \"content-type\": \"application/json\" };\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\n\n const response = await fetch(\"api/users/\" + userId + \"/change-password\", {\n method: \"POST\",\n body: JSON.stringify(userPasswords),\n headers: headers,\n });\n\n if (response.ok) {\n return;\n } else {\n throw new Error(\"HTTP error! Code: \" + response.status);\n }\n } catch (error) {\n console.log(error);\n throw error;\n }\n }\n\n async sendPasswordResetEmail(email) {\n const token = await authService.getAccessToken();\n\n try {\n const response = await fetch(\"api/users/sendpasswordresetmail/\" + email, {\n headers: !token ? {} : { Authorization: `Bearer ${token}` },\n });\n\n if (response.ok) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.log(error);\n throw error;\n }\n }\n\n async resetPassword(resetPasswordModel) {\n try {\n const headers = { \"content-type\": \"application/json\" };\n\n const response = await fetch(\"api/users/resetpassword\", {\n method: \"POST\",\n body: JSON.stringify(resetPasswordModel),\n headers: headers,\n });\n\n if (response.ok) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.log(error);\n throw error;\n }\n }\n\n static get instance() {\n return usersService;\n } // TODO: Check singleton/lifetime\n}\n\nconst usersService = new UsersService();\n\nexport default usersService;\n","export const getCustomer = (state) => state.customer;\n\nexport const getCustomerLocations = (state) => {\n return state.customerLocations;\n};\n\n// export const getCustomerLocaton = (state, customerLocationId) => {\n// return state.customerLocations.find(\n// (c) => c.customerLocationId === customerLocationId\n// );\n// };\n","import React, { Component } from \"react\";\nimport usersService from \"./UsersService\";\nimport { AvForm, AvField } from \"availity-reactstrap-validation\";\nimport { FormGroup, Button } from \"reactstrap\";\nimport { connect } from \"react-redux\";\nimport { getCustomer } from \"../customer/selectors/customerSelector\";\nclass UsersAdd extends Component {\n componentDidMount() {}\n\n handleClickCancel = () => {\n const { history } = this.props;\n\n history.push(\"/users\");\n };\n\n handleValidSubmit = (event, values) => {\n const { history } = this.props;\n values.customerId = this.props.customer.id;\n\n (async () => {\n await usersService.addUser(values);\n history.push(\"/users\");\n })();\n };\n\n render() {\n return (\n
\n
\n
\n

Add User

\n\n \n \n \n \n \n \n \n \n \n {/* \n */}\n \n  \n \n \n \n
\n
\n
\n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n customer: getCustomer(state),\n };\n}\n\nconst mapDispatchToProps = {};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UsersAdd);\n","import React, { Component } from \"react\";\nimport { withRouter } from \"react-router\";\nimport usersService from \"./UsersService\";\n//import { Button } from 'reactstrap';\n\nclass UsersDeletePlain extends Component {\n constructor(props) {\n super(props);\n this.state = { users: [], loading: true };\n\n const { match } = this.props;\n this.userId = match.params.userId;\n }\n\n componentDidMount() {}\n\n handleClickOk = () => {\n const { history } = this.props;\n\n (async () => {\n await usersService.deleteUser(this.userId);\n history.push(\"/users\");\n })();\n\n //usersService.deleteUser(this.userId)\n //\t.then(() => history.push('/users'));\n };\n\n handleClickCancel = () => {\n const { history } = this.props;\n\n history.push(\"/users\");\n };\n\n render() {\n return (\n
\n
\n
\n

Are you sure you want to delete user?

\n \n  \n \n No\n \n
\n
\n
\n );\n }\n}\n\nexport const UsersDelete = withRouter(UsersDeletePlain);\n","import React, { Component } from \"react\";\nimport { withRouter } from \"react-router\";\nimport usersService from \"./UsersService\";\nimport { AvForm, AvField } from \"availity-reactstrap-validation\";\nimport { FormGroup, Button } from \"reactstrap\";\nimport { withTranslation } from \"react-i18next\";\nclass UsersEditPlain extends Component {\n constructor(props) {\n super(props);\n this.state = { user: null, loading: true };\n\n const { match } = this.props;\n this.userId = match.params.userId;\n }\n\n componentDidMount() {\n this.retrieveFormData();\n }\n\n // handleInputChange = (event) => {\n // const target = event.target;\n // const value = target.type === \"checkbox\" ? target.checked : target.value;\n // const name = target.name;\n // debugger;\n // this.state.user[name] = value;\n // this.setState({ user: this.state.user });\n // };\n\n handleClickCancel = () => {\n const { history } = this.props;\n\n history.push(\"/users\");\n };\n\n handleValidSubmit = (event, values) => {\n const { history } = this.props;\n\n (async () => {\n await usersService.updateUser(this.userId, values);\n history.push(\"/users\");\n })();\n };\n\n renderUserForm(user) {\n const { t } = this.props;\n return (\n \n \n \n \n \n \n \n \n \n \n \n  \n \n \n \n );\n }\n\n render() {\n let contents = this.state.loading ? (\n

\n Loading...\n

\n ) : (\n this.renderUserForm(this.state.user)\n );\n\n return (\n
\n
\n
\n

Edit User

\n {contents}\n
\n
\n
\n );\n }\n\n async retrieveFormData() {\n const data = await usersService.getUser(this.userId);\n this.setState({ user: data, loading: false });\n }\n}\n\nexport const UsersEdit = withTranslation()(withRouter(UsersEditPlain));\n","import React, { Component } from \"react\";\nimport usersService from \"./UsersService\";\nimport { AvForm, AvField } from \"availity-reactstrap-validation\";\nimport { FormGroup, Button } from \"reactstrap\";\nimport { withTranslation } from \"react-i18next\";\n\nclass UsersPasswordChangePlain extends Component {\n constructor(props) {\n super(props);\n\n const { match } = this.props;\n this.userId = match.params.userId;\n }\n\n componentDidMount() {}\n\n handleClickCancel = () => {\n const { history } = this.props;\n\n history.push(\"/users\");\n };\n\n handleValidSubmit = (event, values) => {\n const { history } = this.props;\n\n (async () => {\n await usersService.changeUserPassword(this.userId, values);\n history.push(\"/users\");\n })();\n };\n\n render() {\n //const { t, i18n } = this.props;\n return (\n \n \n \n \n  \n \n \n \n );\n }\n}\n\nexport const UsersPasswordChange = withTranslation()(UsersPasswordChangePlain);\n","export const getCustomers = (state) => state.customers;\n","export const getCurrentUser = (state) => state.currentUser;\n","import React, { Component } from \"react\";\nimport { Pagination, PaginationItem, PaginationLink } from \"reactstrap\";\n\nexport class Pager extends Component {\n static defaultProps = {\n page: 1,\n totalItems: 100,\n pageSize: 10,\n maxPages: 5,\n };\n\n componentDidMount() {}\n\n paginate() {\n const { totalItems, page, pageSize, maxPages } = this.props;\n let currentPage = page;\n\n // calculate total pages\n let totalPages = Math.ceil(totalItems / pageSize);\n\n // ensure current page isn't out of range\n if (currentPage < 1) {\n currentPage = 1;\n } else if (currentPage > totalPages) {\n currentPage = totalPages;\n }\n\n let startPage, endPage;\n\n if (totalPages <= maxPages) {\n // total pages less than max so show all pages\n startPage = 1;\n endPage = totalPages;\n } else {\n // total pages more than max so calculate start and end pages\n let maxPagesBeforeCurrentPage = Math.floor(maxPages / 2);\n let maxPagesAfterCurrentPage = Math.ceil(maxPages / 2) - 1;\n if (currentPage <= maxPagesBeforeCurrentPage) {\n // current page near the start\n startPage = 1;\n endPage = maxPages;\n } else if (currentPage + maxPagesAfterCurrentPage >= totalPages) {\n // current page near the end\n startPage = totalPages - maxPages + 1;\n endPage = totalPages;\n } else {\n // current page somewhere in the middle\n startPage = currentPage - maxPagesBeforeCurrentPage;\n endPage = currentPage + maxPagesAfterCurrentPage;\n }\n }\n\n // calculate start and end item indexes\n let startIndex = (currentPage - 1) * pageSize;\n let endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1);\n\n // create an array of pages to ng-repeat in the pager control\n let pages = Array.from(Array(endPage + 1 - startPage).keys()).map(\n (i) => startPage + i\n );\n\n // return object with all pager properties required by the view\n return {\n totalItems: totalItems,\n currentPage: currentPage,\n pageSize: pageSize,\n totalPages: totalPages,\n startPage: startPage,\n endPage: endPage,\n startIndex: startIndex,\n endIndex: endIndex,\n pages: pages,\n };\n }\n\n handlePageChange = (newPage) => {\n this.props.handlePageChange(newPage);\n };\n\n render() {\n const { currentPage, totalPages, pages } = this.paginate();\n\n return (\n \n currentPage > 1 && this.handlePageChange(1)}\n >\n \n \n \n currentPage > 1 && this.handlePageChange(currentPage - 1)\n }\n >\n \n \n\n {pages.map((value, index) => (\n this.handlePageChange(value)}\n >\n {value}\n \n ))}\n\n \n currentPage < totalPages && this.handlePageChange(currentPage + 1)\n }\n >\n \n \n \n currentPage < totalPages && this.handlePageChange(totalPages)\n }\n >\n \n \n \n );\n }\n}\n","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport usersService from \"./UsersService\";\nimport { Pager } from \"../Pager\";\nimport { FormGroup, Form, Input, Button } from \"reactstrap\";\nimport { connect } from \"react-redux\";\nimport { getCustomer } from \"../customer/selectors/customerSelector\";\n\nclass UsersList extends Component {\n constructor(props) {\n super(props);\n this.state = {\n users: [],\n page: 1,\n pageSize: 10,\n maxPages: 5,\n sortOrder: \"Fname\",\n searchString: \"\",\n loading: true,\n userEmailReset: \"\",\n userResetEmailError: \"\",\n };\n }\n\n componentDidMount() {\n this.populateUserData();\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.customer !== prevProps.customer) {\n this.setState({ loading: true });\n this.populateUserData();\n }\n }\n\n handlePageChange = (page) => {\n this.setState({ page: page, loading: true }, () => this.populateUserData());\n };\n\n handleHeaderClick = (event, header) => {\n event.preventDefault();\n\n let newSortOrder = this.state.sortOrder;\n\n switch (header) {\n case \"Fname\": {\n newSortOrder =\n this.state.sortOrder === \"Fname\" ? \"Fname_desc\" : \"Fname\";\n break;\n }\n case \"Lname\": {\n newSortOrder =\n this.state.sortOrder === \"Lname\" ? \"Lname_desc\" : \"Lname\";\n break;\n }\n case \"Email\": {\n newSortOrder =\n this.state.sortOrder === \"Email\" ? \"Email_desc\" : \"Email\";\n break;\n }\n default: {\n newSortOrder = \"Fname\";\n break;\n }\n }\n\n this.setState({ page: 1, sortOrder: newSortOrder }, () =>\n this.populateUserData()\n );\n return false;\n };\n\n handleInputChange = (event) => {\n const target = event.target;\n const value = target.type === \"checkbox\" ? target.checked : target.value;\n const name = target.name;\n\n this.setState({ [name]: value });\n };\n\n handleSearchFormSubmit = (event) => {\n event.preventDefault();\n this.populateUserData();\n };\n\n handleSearchFormReset = (event) => {\n event.preventDefault();\n this.setState({ page: 1, searchString: \"\" }, () => this.populateUserData());\n };\n\n handleChangePassword(e, email) {\n this.setState({ userEmailReset: \"\", userResetEmailError: \"\" });\n\n (async () => {\n const result = await usersService.sendPasswordResetEmail(email);\n\n if (result === true) {\n this.setState({ userEmailReset: email });\n } else {\n this.setState({\n userResetEmailError: \"There was an error sending the reset email\",\n });\n }\n })();\n }\n\n renderUsersTable() {\n const { users, totalUsers, sortOrder } = this.state;\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n {users.map((user) => (\n \n \n \n \n \n \n \n \n \n ))}\n \n
Id\n this.handleHeaderClick(e, \"Fname\")}\n >\n First Name\n {sortOrder === \"Fname\" && }\n {sortOrder === \"Fname_desc\" && }\n \n \n this.handleHeaderClick(e, \"Lname\")}\n >\n Last Name\n {sortOrder === \"Lname\" && }\n {sortOrder === \"Lname_desc\" && }\n \n \n this.handleHeaderClick(e, \"Email\")}\n >\n Email\n {sortOrder === \"Email\" && }\n {sortOrder === \"Email_desc\" && }\n \n \n \n \n
{user.id}{user.firstName}{user.lastName}{user.email}\n Delete\n \n Edit\n \n this.handleChangePassword(e, user.email)}\n >\n Send Password Reset Email\n \n
\n \n {this.state.userEmailReset.length > 0 && (\n
\n A password reset email has been sent to {this.state.userEmailReset}\n
\n )}\n {this.state.userResetEmailError.length > 0 && (\n
\n {this.state.userResetEmailError}\n
\n )}\n
\n );\n }\n\n render() {\n let contents = this.state.loading ? (\n

\n Loading...\n

\n ) : (\n this.renderUsersTable()\n );\n\n return (\n
\n

Users

\n Add User\n
\n \n \n \n  \n  \n \n
\n
\n {contents}\n
\n );\n }\n\n async populateUserData() {\n try {\n const data = await usersService.getUsers(\n this.state.page,\n this.state.pageSize,\n this.state.sortOrder,\n this.state.searchString,\n this.props.customer.id\n );\n this.setState({\n totalUsers: data.totalUsers,\n users: data.users,\n loading: false,\n });\n } catch (error) {\n // Handle error\n }\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n customer: getCustomer(state),\n };\n}\n\nconst mapDispatchToProps = {};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UsersList);\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { UserRoles } from \"../api-authorization/ApiAuthorizationConstants\";\nimport {\n getAllCustomers,\n setCustomerDetails,\n} from \"../customer/actions/customerActions\";\nimport { getCustomers } from \"../customer/selectors/customersSelector\";\nimport { getCurrentUser } from \"./selectors/usersSelector\";\nimport UsersList from \"./UsersList\";\nclass UsersAdminPage extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isSuperAdmin: false,\n customerId: 0,\n customerName: \"\",\n };\n\n this.setSelectedCustomer = this.setSelectedCustomer.bind(this);\n }\n\n componentDidMount() {\n if (this.props.currentUser?.role) {\n if (this.props.currentUser.role === UserRoles.SuperAdmin) {\n this.props.getAllCustomers();\n this.setState({ isSuperAdmin: true });\n } else {\n this.setState({ customerId: this.props.currentUser.customerId });\n }\n }\n }\n\n setSelectedCustomer(e) {\n const customerId = parseInt(e.target.value);\n let customer = this.props.customers.find((c) => c.id === customerId);\n\n const storeCustomer = {\n id: customer.id,\n name: customer.name,\n };\n this.props.setCustomerDetails(storeCustomer);\n\n this.setState({ customerId: e.target.value, customerName: customer.name });\n }\n\n render() {\n return (\n
\n {/* */}\n {/* */}\n {/* */}\n
\n
\n
\n {this.state.isSuperAdmin && (\n <>\n

Selected Customer: {this.state.customerName}

\n \n {this.props.customers.map((item) => {\n return ;\n })}\n \n
\n
\n \n )}\n \n
\n
\n
\n
\n );\n }\n}\n\nUsersAdminPage.defaultProps = {\n customers: [],\n currentUser: {},\n};\n\nfunction mapStateToProps(state) {\n return {\n customers: getCustomers(state),\n currentUser: getCurrentUser(state),\n };\n}\n\nconst mapDispatchToProps = {\n getAllCustomers,\n setCustomerDetails,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UsersAdminPage);\n","import React from \"react\";\nimport { Switch, Route, useRouteMatch } from \"react-router-dom\";\nimport AuthorizeRoute from \"../api-authorization/AuthorizeRoute\";\n\nimport UsersAdd from \"./UsersAdd\";\nimport { UsersDelete } from \"./UsersDelete\";\nimport { UsersEdit } from \"./UsersEdit\";\nimport { UsersPasswordChange } from \"./UsersPasswordChange\";\nimport UsersAdminPage from \"./UsersAdminPage\";\n\nexport function UsersRouter() {\n let match = useRouteMatch();\n\n return (\n \n \n \n \n \n {/* */}\n \n \n );\n}\n","import React from \"react\";\nimport { Component } from \"react\";\nimport authService from \"./AuthorizeService\";\nimport { AuthenticationResultStatus } from \"./AuthorizeService\";\nimport {\n LoginActions,\n QueryParameterNames,\n ApplicationPaths,\n} from \"./ApiAuthorizationConstants\";\nimport { withTranslation } from \"react-i18next\";\n\n// The main responsibility of this component is to handle the user's login process.\n// This is the starting point for the login process. Any component that needs to authenticate\n// a user can simply perform a redirect to this component with a returnUrl query parameter and\n// let the component perform the login and return back to the return url.\nclass LoginPlain extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n message: undefined,\n };\n }\n\n componentDidMount() {\n const action = this.props.action;\n const { i18n } = this.props;\n const lng = i18n.language;\n\n // Set language cookie so that Identity login page is displayed in the same\n // language as the front-end\n document.cookie =\n \".AspNetCore.Culture=\" + encodeURIComponent(\"c=\" + lng + \"|uic=\" + lng);\n\n switch (action) {\n case LoginActions.Login:\n console.log(\"Process Login\", this.process);\n this.login(this.getReturnUrl());\n break;\n case LoginActions.LoginCallback:\n console.log(\"Process LoginCallback\", this.process);\n this.processLoginCallback();\n break;\n case LoginActions.LoginFailed:\n const params = new URLSearchParams(window.location.search);\n const error = params.get(QueryParameterNames.Message);\n this.setState({ message: error });\n break;\n case LoginActions.Profile:\n this.redirectToProfile();\n break;\n case LoginActions.Register:\n this.redirectToRegister();\n break;\n default:\n throw new Error(`Invalid action '${action}'`);\n }\n }\n\n render() {\n const action = this.props.action;\n const { message } = this.state;\n\n if (!!message) {\n return
{message}
;\n } else {\n switch (action) {\n case LoginActions.Login:\n return
Processing login
;\n case LoginActions.LoginCallback:\n return
Processing login callback
;\n case LoginActions.Profile:\n case LoginActions.Register:\n return
;\n default:\n throw new Error(`Invalid action '${action}'`);\n }\n }\n }\n\n async login(returnUrl) {\n const state = { returnUrl };\n const result = await authService.signIn(state);\n switch (result.status) {\n case AuthenticationResultStatus.Redirect:\n break;\n case AuthenticationResultStatus.Success:\n await this.navigateToReturnUrl(returnUrl);\n break;\n case AuthenticationResultStatus.Fail:\n this.setState({ message: result.message });\n break;\n default:\n throw new Error(`Invalid status result ${result.status}.`);\n }\n }\n\n async processLoginCallback() {\n const url = window.location.href;\n const result = await authService.completeSignIn(url);\n switch (result.status) {\n case AuthenticationResultStatus.Redirect:\n // There should not be any redirects as the only time completeSignIn finishes\n // is when we are doing a redirect sign in flow.\n throw new Error(\"Should not redirect.\");\n case AuthenticationResultStatus.Success:\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\n break;\n case AuthenticationResultStatus.Fail:\n this.setState({ message: result.message });\n break;\n default:\n throw new Error(\n `Invalid authentication result status '${result.status}'.`\n );\n }\n }\n\n getReturnUrl(state) {\n const params = new URLSearchParams(window.location.search);\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\n // This is an extra check to prevent open redirects.\n throw new Error(\n \"Invalid return url. The return url needs to have the same origin as the current page.\"\n );\n }\n return (\n (state && state.returnUrl) || fromQuery || `${window.location.origin}/`\n );\n }\n\n redirectToRegister() {\n this.redirectToApiAuthorizationPath(\n `${ApplicationPaths.IdentityRegisterPath}?${\n QueryParameterNames.ReturnUrl\n }=${encodeURI(ApplicationPaths.Login)}`\n );\n }\n\n redirectToProfile() {\n this.redirectToApiAuthorizationPath(ApplicationPaths.IdentityManagePath);\n }\n\n redirectToApiAuthorizationPath(apiAuthorizationPath) {\n const redirectUrl = `${window.location.origin}${apiAuthorizationPath}`;\n // It's important that we do a replace here so that when the user hits the back arrow on the\n // browser he gets sent back to where it was on the app instead of to an endpoint on this\n // component.\n window.location.replace(redirectUrl);\n }\n\n navigateToReturnUrl(returnUrl) {\n // It's important that we do a replace here so that we remove the callback uri with the\n // fragment containing the tokens from the browser history.\n window.location.replace(returnUrl);\n }\n}\n\nexport const Login = withTranslation()(LoginPlain);\n","import React from \"react\";\nimport { Component } from \"react\";\nimport authService from \"./AuthorizeService\";\nimport { AuthenticationResultStatus } from \"./AuthorizeService\";\nimport {\n QueryParameterNames,\n LogoutActions,\n ApplicationPaths,\n} from \"./ApiAuthorizationConstants\";\n\n// The main responsibility of this component is to handle the user's logout process.\n// This is the starting point for the logout process, which is usually initiated when a\n// user clicks on the logout button on the LoginMenu component.\nexport class Logout extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n message: undefined,\n isReady: false,\n authenticated: false,\n };\n }\n\n componentDidMount() {\n const action = this.props.action;\n switch (action) {\n case LogoutActions.Logout:\n if (!!window.history.state.state.local) {\n this.logout(this.getReturnUrl());\n } else {\n // This prevents regular links to /authentication/logout from triggering a logout\n this.setState({\n isReady: true,\n message: \"The logout was not initiated from within the page.\",\n });\n }\n break;\n case LogoutActions.LogoutCallback:\n this.processLogoutCallback();\n break;\n case LogoutActions.LoggedOut:\n this.setState({\n isReady: true,\n message: \"You successfully logged out!\",\n });\n window.location.replace(\"/\");\n break;\n default:\n throw new Error(`Invalid action '${action}'`);\n }\n\n this.populateAuthenticationState();\n }\n\n render() {\n const { isReady, message } = this.state;\n if (!isReady) {\n return
;\n }\n if (!!message) {\n return
{message}
;\n } else {\n const action = this.props.action;\n switch (action) {\n case LogoutActions.Logout:\n return
Processing logout
;\n case LogoutActions.LogoutCallback:\n return
Processing logout callback
;\n case LogoutActions.LoggedOut:\n return
{message}
;\n default:\n throw new Error(`Invalid action '${action}'`);\n }\n }\n }\n\n async logout(returnUrl) {\n const state = { returnUrl };\n const isauthenticated = await authService.isAuthenticated();\n if (isauthenticated) {\n const result = await authService.signOut(state);\n switch (result.status) {\n case AuthenticationResultStatus.Redirect:\n break;\n case AuthenticationResultStatus.Success:\n await this.navigateToReturnUrl(returnUrl);\n break;\n case AuthenticationResultStatus.Fail:\n this.setState({ message: result.message });\n break;\n default:\n throw new Error(\"Invalid authentication result status.\");\n }\n } else {\n this.setState({ message: \"You successfully logged out!\" });\n }\n }\n\n async processLogoutCallback() {\n const url = window.location.href;\n const result = await authService.completeSignOut(url);\n switch (result.status) {\n case AuthenticationResultStatus.Redirect:\n // There should not be any redirects as the only time completeAuthentication finishes\n // is when we are doing a redirect sign in flow.\n throw new Error(\"Should not redirect.\");\n case AuthenticationResultStatus.Success:\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\n break;\n case AuthenticationResultStatus.Fail:\n this.setState({ message: result.message });\n break;\n default:\n throw new Error(\"Invalid authentication result status.\");\n }\n }\n\n async populateAuthenticationState() {\n const authenticated = await authService.isAuthenticated();\n this.setState({ isReady: true, authenticated });\n }\n\n getReturnUrl(state) {\n const params = new URLSearchParams(window.location.search);\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\n // This is an extra check to prevent open redirects.\n throw new Error(\n \"Invalid return url. The return url needs to have the same origin as the current page.\"\n );\n }\n return (\n (state && state.returnUrl) ||\n fromQuery ||\n `${window.location.origin}${ApplicationPaths.LoggedOut}`\n );\n }\n\n navigateToReturnUrl(returnUrl) {\n return window.location.replace(returnUrl);\n }\n}\n","import React, { Component, Fragment } from 'react';\nimport { Route } from 'react-router';\nimport { Login } from './Login'\nimport { Logout } from './Logout'\nimport { ApplicationPaths, LoginActions, LogoutActions } from './ApiAuthorizationConstants';\n\nexport default class ApiAuthorizationRoutes extends Component {\n\n render () {\n return(\n \n loginAction(LoginActions.Login)} />\n loginAction(LoginActions.LoginFailed)} />\n loginAction(LoginActions.LoginCallback)} />\n loginAction(LoginActions.Profile)} />\n loginAction(LoginActions.Register)} />\n logoutAction(LogoutActions.Logout)} />\n logoutAction(LogoutActions.LogoutCallback)} />\n logoutAction(LogoutActions.LoggedOut)} />\n );\n }\n}\n\nfunction loginAction(name){\n return ();\n}\n\nfunction logoutAction(name) {\n return ();\n}\n","import React from \"react\";\n\nconst DeviceTemperature = ({ label, value }) => {\n let statusClass = \"ok\";\n if (value >= 10) statusClass = \"alarm\";\n\n return (\n \n {label}\n {value} C\n \n );\n};\n\nexport default DeviceTemperature;\n","import React from \"react\";\n\nconst DeviceDoor = ({ label, value }) => {\n let statusClass = \"ok\";\n let doorState = \"Closed\";\n\n if (value) {\n statusClass = \"alarm\";\n doorState = \"Open\";\n }\n return (\n \n {label}\n {doorState}\n \n );\n};\n\nexport default DeviceDoor;\n","import React from \"react\";\n\nconst DeviceVoltage = ({ label, value }) => {\n let statusClass = \"ok\";\n // TODO: get range of voltages\n return (\n \n {label}\n {value} v\n \n );\n};\n\nexport default DeviceVoltage;\n","import * as types from \"../../common/state/actionTypes\";\nimport * as deviceListApi from \"../api/deviceListApi\";\nimport { logError } from \"../../errors/actions/errorActions\";\n\nexport const searchByValue = (search) => ({\n type: types.DEVICE_LIST_SEARCH_BY_VALUE,\n search,\n});\n\nexport const filterByLocation = (location) => ({\n type: types.DEVICE_LIST_FILTER_BY_LOCATION,\n location,\n});\n\nexport const filterByAlarm = () => ({\n type: types.DEVICE_LIST_FILTER_BY_AlARM,\n});\n\nexport const filterByOk = () => ({\n type: types.DEVICE_LIST_FILTER_BY_OK,\n});\n\nexport const filterByStatus = (status) => ({\n type: types.DEVICE_LIST_FILTER_BY_STATUS,\n status,\n});\n\nexport const clearFilter = () => ({\n type: types.DEVICE_LIST_FILTER_CLEAR,\n});\n\nexport const filterByFavourite = () => ({\n type: types.DEVICE_LIST_FILTER_BY_FAVOURITE,\n});\n\nexport const filterByDoor = (doorState) => ({\n type: types.DEVICE_LIST_FILTER_BY_DOOR,\n doorState,\n});\n\nexport const setSelectedDevice = (device) => ({\n type: types.DEVICE_LIST_SET_SELECTED_DEVICE,\n device,\n});\n\nexport const loadExactPage = (page) => ({\n type: types.DEVICE_LIST_LOAD_EXACT_PAGE,\n page,\n});\n\nexport const loadNewPage = (page) => ({\n type: types.DEVICE_LIST_LOAD_NEW_PAGE,\n page,\n});\n\nexport const updateDeviceData = (device) => ({\n type: types.DEVICE_LIST_UPDATE_DEVICE_DATA,\n device,\n});\nexport const deviceListLoadedSuccess = (devices) => ({\n type: types.LOAD_DEVICE_LIST_SUCCESS,\n devices: devices,\n});\n\nexport const deviceListUpdateData = (devices) => ({\n type: types.DEVICE_LIST_UPDATE_DEVICE_LIST_DATA,\n devices: devices,\n});\n\nexport function loadDeviceList(deviceGroupId) {\n return function (dispatch) {\n return deviceListApi\n .getDeviceList(deviceGroupId)\n .then((devices) => {\n dispatch(deviceListLoadedSuccess(devices));\n })\n .catch((error) => {\n const err = new Error(\n \"deviceListActions.js, loadDeviceList()\",\n error.toString()\n );\n dispatch(logError(err));\n });\n };\n}\n\nexport const showHighTempOnly = (sortOrder) => ({\n type: types.DEVICE_LIST_SHOW_HIGH_TEMP,\n sortOrder,\n});\n\nexport const isEnabled = (isEnabled) => ({\n type: types.DEVICE_LIST_IS_ENBALED,\n isEnabled,\n});\n\nexport const filterByName = (sortOrder) => ({\n type: types.DEVICE_LIST_FILTER_BY_NAME,\n sortOrder,\n});\n\nexport const filterByCustomerCode = (sortOrder) => ({\n type: types.DEVICE_LIST_FILTER_BY_CUSOMTER_CODE,\n sortOrder,\n});\n\nexport const filterByVoltage = (sortOrder) => ({\n type: types.DEVICE_LIST_FILTER_BY_VOLTAGE,\n sortOrder,\n});\n\nexport const filterByProdTemp = (sortOrder) => ({\n type: types.DEVICE_LIST_FILTER_BY_PROD_TEMP,\n sortOrder,\n});\n\nexport const sortByDoor = (sortOrder) => ({\n type: types.DEVICE_LIST_SORT_BY_DOOR,\n sortOrder,\n});\n","import { callAdminApiGet } from \"../../api/apiUtils\";\nimport authService from \"../../api-authorization/AuthorizeService\";\n\nexport async function getDeviceList(deviceGroupId) {\n const user = await authService.getUser();\n // console.log(`userId:${user.userId}, customerId:${user.customerId}`);\n const url = `api/device/getdevicelist/${user.userId}/${deviceGroupId}`;\n\n return callAdminApiGet(url);\n}\n","import { callAdminApiGet } from \"../../api/apiUtils\";\nimport { callAdminApiPost } from \"../../api/apiUtils\";\n\n\nexport async function getAnalysisTelemetryData(deviceId, startTime, endTime) {\n // todo: temp\n // deviceId = 452;\n // startTime = \"2021-02-19T16:00:00.000Z\";\n // endTime = \"2021-02-19T18:00:00.000Z\";\n const url = `api/devicetelemetry/${deviceId}/${startTime}/${endTime}`;\n\n return callAdminApiGet(url);\n}\n// https://localhost:44396/api/devicetelemetry/452/2021-02-19T16:00:00.000Z/2021-02-19T18:00:00.000Z\n\n\nexport async function submitDeviceAnalysisReportRequest(reportParams) {\n const url = \"api/devicetelemetry/analysisrequest\";\n\n return callAdminApiPost(url, reportParams);\n}","export const getTelemetrySeriesData = (state, deviceId) => {\n let seriesData = [];\n if (state.deviceTelemetryChartData.length > 0) {\n let device = state.deviceTelemetryChartData.find(\n (d) => d.deviceId === deviceId\n );\n if (device !== undefined) {\n seriesData = device.series;\n }\n }\n return seriesData;\n //state.deviceTelemetryChartData.series;\n //return seriesData;\n};\n\nexport const getAnalysisTelemetrySeriesData = (state) =>\n state.analysisDeviceTelemetryChartData.series;\n","import * as types from \"../../common/state/actionTypes\";\nimport * as deviceTelemetryApi from \"../api/deviceTelemetryApi\";\nimport { logError } from \"../../errors/actions/errorActions\";\nimport { getTelemetrySeriesData } from \"../../charts/selectors/deviceTelemetryChartDataSelector\";\n\nexport const analysisDeviceTelemetryChartDataLoaded = (\n deviceId,\n telemetryData\n) => {\n return {\n type: types.LOAD_ANALYSIS_DEVICE_TELEMETRY_DATA_SUCCESS,\n deviceId,\n telemetryData,\n };\n};\n\nexport const resetAnalysisDeviceTelemetryChart = () => {\n return { type: types.RESET_ANALYIS_DEVICE_TELEMETRY_DATA };\n};\n\nexport const loadRecentHistoricalDeviceTelemetrySuccess = (\n deviceId,\n telemetryData\n) => {\n return {\n type: types.LOAD_RECENT_TELEMETRY_DATA_SUCCESS,\n deviceId,\n telemetryData,\n };\n};\n\nexport function loadDeviceListAnalysisTelemetry(deviceId, startTime, endTime) {\n return function (dispatch) {\n return deviceTelemetryApi\n .getAnalysisTelemetryData(deviceId, startTime, endTime)\n .then((telemetryData) => {\n dispatch(\n analysisDeviceTelemetryChartDataLoaded(deviceId, telemetryData)\n );\n })\n .catch((error) => {\n const err = new Error(\n \"deviceTelemtryActions.js, loadDeviceListAnalysisTelemetry()\",\n error.toString()\n );\n dispatch(logError(err));\n });\n };\n}\n\nexport function submitDeviceAnalysisReportRequest(reportParams) {\n return function (dispatch) {\n return deviceTelemetryApi\n .submitDeviceAnalysisReportRequest(reportParams)\n .catch((error) => {\n const params = [\n {\n reportParams: reportParams,\n },\n ];\n const err = new Error(\n \"deviceTelemtryActions.js, submitDeviceAnalisysReportRequest()\",\n error.toString(),\n params\n );\n dispatch(logError(err));\n });\n };\n}\n\nexport function loadRecentHistoricalDeviceTelemetry(\n deviceId,\n startTime,\n endTime,\n hardwareId\n) {\n return function (dispatch, getState) {\n const existingChartData = getTelemetrySeriesData(getState(), hardwareId);\n if (existingChartData.length > 0) {\n return;\n }\n\n return deviceTelemetryApi\n .getAnalysisTelemetryData(deviceId, startTime, endTime)\n .then((telemetryData) => {\n dispatch(\n loadRecentHistoricalDeviceTelemetrySuccess(hardwareId, telemetryData)\n );\n })\n .catch((error) => {\n const err = new Error(\n \"deviceTelemtryActions.js, loadRecentHistoricalDeviceTelemetry()\",\n error.toString()\n );\n dispatch(logError(err));\n });\n };\n}\n","import React, { Component } from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faStar } from \"@fortawesome/free-solid-svg-icons\";\nimport { connect } from \"react-redux\";\nimport {\n saveUserFavourite,\n deleteUserFavourite,\n} from \"../users/favourite/actions/userFavouritesActions\";\nimport \"./device.css\";\n\nclass DeviceFavourite extends Component {\n favouriteClicked() {\n if (this.props.favourite) {\n this.props.deleteUserFavourite(this.props.deviceId);\n } else {\n this.props.saveUserFavourite(this.props.deviceId);\n }\n }\n render() {\n let className = \"favourite-unselected\";\n if (this.props.favourite) className = \"favourite-selected\";\n\n return (\n
this.favouriteClicked()} className={className}>\n \n
\n );\n }\n}\n\nconst mapDispatchToProps = {\n saveUserFavourite,\n deleteUserFavourite,\n};\n\nexport default connect(null, mapDispatchToProps)(DeviceFavourite);\n","import * as types from \"../../../common/state/actionTypes\";\nimport * as favouriteApi from \"../api/userFavouritesApi\";\nimport { logError } from \"../../../errors/actions/errorActions\";\n\nexport const userFavouriteAdded = (deviceId) => ({\n type: types.USER_DEVICE_FAVOURITE_ADDED,\n deviceId,\n});\n\nexport const userFavouriteDeleted = (deviceId) => ({\n type: types.USER_DEVICE_FAVOURITE_DELETED,\n deviceId,\n});\n\nexport function saveUserFavourite(deviceId) {\n return function (dispatch) {\n return favouriteApi\n .addFavourite(deviceId)\n .then(() => {\n dispatch(userFavouriteAdded(deviceId));\n })\n .catch((error) => {\n const err = new Error(\n \"userFavouritesActions.js, saveUserFavourite()\",\n error.toString()\n );\n dispatch(logError(err));\n });\n };\n}\n\nexport function deleteUserFavourite(deviceId) {\n return function (dispatch) {\n return favouriteApi\n .deleteFavourite(deviceId)\n .then(() => {\n dispatch(userFavouriteDeleted(deviceId));\n })\n .catch((error) => {\n const err = new Error(\n \"userFavouritesActions.js, deleteUserFavourite()\",\n error.toString()\n );\n dispatch(logError(err));\n });\n };\n}\n","import { callAdminApiGet } from \"../../../api/apiUtils\";\nimport authService from \"../../../api-authorization/AuthorizeService\";\n\nexport async function addFavourite(deviceId) {\n const user = await authService.getUser();\n const url = `api/users/addfavourite/${user.userId}/${deviceId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function deleteFavourite(deviceId) {\n const user = await authService.getUser();\n const url = `api/users/deletefavourite/${user.userId}/${deviceId}`;\n\n return callAdminApiGet(url);\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport * as customerContactApi from \"../api/customerContactApi\";\nimport { logError } from \"../../errors/actions/errorActions\";\n\nexport const deviceCustomerContactLoadedSuccess = (deviceId, contactInfo) => ({\n type: types.LOAD_DEVICE_CUSTOMER_CONTACT_INFO_SUCCESS,\n deviceId: deviceId,\n contactInfo: contactInfo,\n});\n\nexport function loadDeviceCustomerContactInfo(deviceId) {\n return function (dispatch) {\n return customerContactApi\n .getDeviceCustomerContactInformation(deviceId)\n .then((contactInfo) => {\n dispatch(deviceCustomerContactLoadedSuccess(deviceId, contactInfo));\n })\n .catch((error) => {\n const err = new Error(\n \"customerContactActions.js, getDeviceCustomerContactInfo()\",\n error.toString()\n );\n dispatch(logError(err));\n });\n };\n}\n","import { callAdminApiGet } from \"../../api/apiUtils\";\n\nexport function getDeviceCustomerContactInformation(deviceId) {\n const url = `api/customer/getdevicecustomercontactinformation/${deviceId}`;\n\n return callAdminApiGet(url);\n}\n","export class Error {\n parameters = [];\n constructor(originator, message, params) {\n this.originator = originator;\n this.message = message;\n this.created = Date(Date.now()).toString();\n if (params) {\n this.parameters = params;\n }\n }\n}\n","import * as alarmConfigApi from \"../api/alarmConfigApi\";\nimport * as types from \"../../common/state/actionTypes\";\nimport { Error } from \"../../errors/errorType\";\nimport { logError } from \"../../errors/actions/errorActions\";\n\nexport function loadDeviceAlarmConfigListSuccess(alarmConfigList) {\n return { type: types.LOAD_DEVICE_ALARM_CONFIG_LIST_SUCCESS, alarmConfigList };\n}\n\nexport function resetDeviceAlarmConfigList() {\n return { type: types.RESET_DEVICE_ALARM_CONFIG_LIST };\n}\n\nexport function toggleNewAlarmConfigDialog(open) {\n return { type: types.TOGGLE_NEW_ALARM_CONFIG_DIALOG, open };\n}\n\nexport function loadAlarmContactsSuccess(alarmId, alarmContacts) {\n return { type: types.LOAD_ALARM_CONTACTS_SUCCESS, alarmId, alarmContacts };\n}\n\nexport function loadAvailableContactsSuccess(alarmId, alarmContacts) {\n return {\n type: types.LOAD_ALARM_AVIALABLE_CONTACTS_SUCCESS,\n alarmId,\n alarmContacts,\n };\n}\n\nexport function loadTimezonesSuccess(timezones) {\n return {\n type: types.LOAD_TIMEZONES_SUCCESS,\n timezones,\n };\n}\n\nexport function loadAvailabilityScheduleSuccess(schedule) {\n return {\n type: types.LOAD_AVAILABILITY_SCHEDULE_SUCCESS,\n schedule,\n };\n}\n\nexport function loadDeviceAlarmConfigList(deviceId) {\n return function (dispatch) {\n return alarmConfigApi\n .getDeviceIncidentAlarmList(deviceId)\n .then((alarmConfigList) => {\n dispatch(loadDeviceAlarmConfigListSuccess(alarmConfigList));\n })\n .catch((error) => {\n const params = [\n {\n deviceId: deviceId,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, loadDeviceAlarmConfigList()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function updateDeviceAlarmConfig(deviceId, alarmConfig) {\n return function (dispatch) {\n return alarmConfigApi\n .updateDeviceAlarmConfig(deviceId, alarmConfig)\n .catch((error) => {\n const params = [\n {\n deviceId: deviceId,\n alarmConfig: alarmConfig,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, udateDeviceAlarmConfig()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function deleteDeviceAlarmConfig(alarmId) {\n return function (dispatch) {\n return alarmConfigApi.deleteDeviceAlarmConfig(alarmId).catch((error) => {\n const params = [\n {\n alarmId: alarmId,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, deleteDeviceAlarmConfig()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function setDeviceAlarmMute(muteConfig) {\n return function (dispatch) {\n return alarmConfigApi.setDeviceAlarmMute(muteConfig).catch((error) => {\n const params = [\n {\n muteConfig: muteConfig,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, setDeviceAlarmMute()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function loadAlarmContacts(alarmId) {\n return function (dispatch) {\n return alarmConfigApi\n .getAlarmContacts(alarmId)\n .then((alarmContacts) => {\n dispatch(loadAlarmContactsSuccess(alarmId, alarmContacts));\n })\n .catch((error) => {\n const params = [\n {\n alarmId: alarmId,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, loadAlarmContacts()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function loadAvailableAlarmContacts(alarmId) {\n return function (dispatch) {\n return alarmConfigApi\n .getAvailableAlarmContacts(alarmId)\n .then((alarmContacts) => {\n dispatch(loadAvailableContactsSuccess(alarmId, alarmContacts));\n })\n .catch((error) => {\n const params = [\n {\n alarmId: alarmId,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, loadAlarmContacts()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function loadContact(contactId) {\n return function (dispatch) {\n return alarmConfigApi.getContact(contactId).catch((error) => {\n const params = [\n {\n contactId: contactId,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, loadContact()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function loadTimezones() {\n return function (dispatch) {\n return alarmConfigApi\n .getTimezones()\n .then((timezones) => {\n dispatch(loadTimezonesSuccess(timezones));\n })\n .catch((error) => {\n const params = [];\n const err = new Error(\n \"alarmConfigActions.js, loadTimezones()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function loadAvailabilitySchedule() {\n return function (dispatch) {\n return alarmConfigApi\n .getAvailabilitySchedule()\n .then((schedule) => {\n dispatch(loadAvailabilityScheduleSuccess(schedule));\n })\n .catch((error) => {\n const params = [];\n const err = new Error(\n \"alarmConfigActions.js, loadAvailabilitySchedule()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function addAlarmContact(alarmId, contactId) {\n return function (dispatch) {\n return alarmConfigApi\n .addAlarmContact(alarmId, contactId)\n .then(() => {\n dispatch(loadAlarmContacts(alarmId));\n })\n .catch((error) => {\n const params = [\n {\n alarmId: alarmId,\n contactId: contactId,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, addAlarmContact()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function deleteAlarmContact(alarmId, contactId) {\n return function (dispatch) {\n return alarmConfigApi\n .deleteAlarmContact(alarmId, contactId)\n .then(() => {\n dispatch(loadAlarmContacts(alarmId));\n })\n .catch((error) => {\n const params = [\n {\n alarmId: alarmId,\n contactId: contactId,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, addAlarmContact()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\n// TODO: might not need\nexport function addContact(contact) {\n return function (dispatch) {\n return alarmConfigApi.addContact(contact).catch((error) => {\n const params = [\n {\n contact: contact,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, addAlarmContact()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function upsertContact(alarmContactUpdate) {\n return function (dispatch) {\n return alarmConfigApi.upsertContact(alarmContactUpdate).catch((error) => {\n const params = [\n {\n alarmContactUpdate: alarmContactUpdate,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, upsertContact()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function getFullAlarmContact(contactId) {\n return function (dispatch) {\n return alarmConfigApi.getFullAlarmContact(contactId).catch((error) => {\n const params = [\n {\n contactId: contactId,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, getFullAlarmContact()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function addAlarmContactToAllAlarmsForDevice(deviceId, contactId) {\n return function (dispatch) {\n return (\n alarmConfigApi\n .addAlarmContactToAllAlarmsForDevice(deviceId, contactId)\n // .then(() => {\n // dispatch(loadAlarmContacts(deviceId));\n // })\n .catch((error) => {\n const params = [\n {\n deviceId: deviceId,\n contactId: contactId,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, addAlarmContactToAllAlarmsForDevice()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n })\n );\n };\n}\n\nexport function removeAlarmContactToAllAlarmsForDevice(deviceId, contactId) {\n return function (dispatch) {\n return (\n alarmConfigApi\n .removeAlarmContactToAllAlarmsForDevice(deviceId, contactId)\n // .then(() => {\n // dispatch(loadAlarmContacts(deviceId));\n // })\n .catch((error) => {\n const params = [\n {\n deviceId: deviceId,\n contactId: contactId,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, removeAlarmContactToAllAlarmsForDevice()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n })\n );\n };\n}\n\nexport function getAlarmActions(alarmId) {\n return function (dispatch) {\n return alarmConfigApi.getAlarmActions(alarmId).catch((error) => {\n const params = [\n {\n alarmId: alarmId,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, getAlarmActions()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function putAlarmAction(alarmId, alarmActionId) {\n return function (dispatch) {\n return alarmConfigApi\n .putAlarmAction(alarmId, alarmActionId)\n .catch((error) => {\n const params = [\n {\n alarmId: alarmId,\n alarmActionId: alarmActionId,\n },\n ];\n const err = new Error(\n \"alarmConfigActions.js, getAlarmActions()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n","import { callAdminApiPost, callAdminApiGet } from \"../../api/apiUtils\";\nimport authService from \"../../api-authorization/AuthorizeService\";\n\nexport async function getDeviceIncidentAlarmList(deviceId) {\n const url = `api/alarmconfig/devicealarms/${deviceId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function updateDeviceAlarmConfig(deviceId, alarmConfig) {\n const url = `api/alarmconfig/upsertdevicealarmconfig/${deviceId}`;\n\n return callAdminApiPost(url, alarmConfig);\n}\n\nexport async function deleteDeviceAlarmConfig(alarmId) {\n const url = `api/alarmconfig/deletealarmconfig/${alarmId}`;\n\n return callAdminApiPost(url, {});\n}\n\nexport async function setDeviceAlarmMute(muteConfig) {\n const url = `api/alarmconfig/setalarmmute`;\n\n return callAdminApiPost(url, muteConfig);\n}\n\nexport async function getAlarmContacts(alarmId) {\n const url = `api/alarmconfig/getAlarmContacts/${alarmId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function getAvailableAlarmContacts(alarmId) {\n const url = `api/alarmconfig/getAvailableAlarmContacts/${alarmId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function getContact(contactId) {\n const url = `api/alarmconfig/getContact/${contactId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function getTimezones() {\n const url = `api/alarmconfig/gettimezones`;\n\n return callAdminApiGet(url);\n}\n\nexport async function addAlarmContact(alarmId, contactId) {\n const url = `api/alarmconfig/addalarmcontact/${alarmId}/${contactId}`;\n\n return callAdminApiPost(url);\n}\n\nexport async function deleteAlarmContact(alarmId, contactId) {\n const url = `api/alarmconfig/deletealarmcontact/${alarmId}/${contactId}`;\n\n return callAdminApiPost(url);\n}\n\n// TOOD: might not need\nexport async function addContact(contact) {\n const url = \"api/alarmconfig/addcontact\";\n\n return callAdminApiPost(url, contact);\n}\n\nexport async function getAvailabilitySchedule() {\n const user = await authService.getUser();\n const url = `api/alarmconfig/getavailabilityschedule/${user.customerId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function upsertContact(alarmContactUpdate) {\n const user = await authService.getUser();\n alarmContactUpdate.alarmContact.customerId = user.customerId;\n const url = \"api/alarmconfig/upsertcontact\";\n\n return callAdminApiPost(url, alarmContactUpdate);\n}\n\nexport async function getFullAlarmContact(contactId) {\n const url = `api/alarmconfig/getfullalarmcontacttoupdate/${contactId}`;\n return callAdminApiGet(url, contactId);\n}\n\nexport async function addAlarmContactToAllAlarmsForDevice(deviceId, contactId) {\n const url = `api/alarmconfig/addalarmcontacttoallalarmsfordevice/${deviceId}/${contactId}`;\n\n return callAdminApiPost(url);\n}\n\nexport async function removeAlarmContactToAllAlarmsForDevice(\n deviceId,\n contactId\n) {\n const url = `api/alarmconfig/removealarmcontacttoallalarmsfordevice/${deviceId}/${contactId}`;\n\n return callAdminApiPost(url);\n}\n\nexport async function getAlarmActions(alarmId) {\n const user = await authService.getUser();\n const url = `api/alarmconfig/getalarmactions/${user.customerId}/${alarmId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function putAlarmAction(alarmId, alarmActionId) {\n const url = `api/alarmconfig/putalarmaction/${alarmId}/${alarmActionId}`;\n\n return callAdminApiPost(url);\n}\n","import {\n callAdminApiPost,\n callAdminApiGet,\n callFridgeInsightsApiGet,\n} from \"../../api/apiUtils\";\nimport { FridgeInsightsDeviceApi } from \"../../configuration/config\";\n\nexport async function getDeviceInventory(deviceId) {\n const url = `api/deviceinventory/getdeviceinventory/${deviceId}`;\n\n return callAdminApiGet(url);\n}\n\n\nexport async function getDeviceInventoryProductCounts(deviceId) {\n const url = `api/deviceinventory/getdeviceinventoryproductcounts/${deviceId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function getDeviceInventoryHistory(\n deviceId,\n recordsPerPage,\n token\n) {\n const data = {\n deviceId: deviceId,\n recordsPerPage: recordsPerPage,\n token: token,\n };\n\n const url = `api/deviceinventory/getdeviceinventoryhistory`;\n\n return callAdminApiPost(url, data);\n}\n\nexport async function getDeviceInventorySummary(deviceId) {\n const url = `api/deviceinventory/getdeviceinventorysummary/${deviceId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function reviseExpiry(reviseExpiry) {\n const url = \"api/deviceinventory/reviseExpiry\";\n\n return callAdminApiPost(url, reviseExpiry);\n}\n\nexport async function scanInventory(deviceHardwareId) {\n const url = `${FridgeInsightsDeviceApi}/${deviceHardwareId}/scan`;\n\n return callFridgeInsightsApiGet(url);\n}\n\nexport async function scanInventorySp(deviceId) {\n const url = `api/deviceinventory/scaninventorysp/${deviceId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function checkScan(deviceId) {\n const url = `api/deviceinventory/checkscan/${deviceId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function checkScan2(deviceId) {\n\n const url = `api/deviceinventory/checkscan2/${deviceId}`;\n\n return callAdminApiGet(url);\n}","import * as deviceInventoryApi from \"../api/deviceInventoryApi\";\nimport * as types from \"../../common/state/actionTypes\";\nimport { Error } from \"../../errors/errorType\";\nimport { logError } from \"../../errors/actions/errorActions\";\n\nexport function loadDeviceInventorySuccess(deviceInventory, deviceId) {\n return {\n type: types.LOAD_DEVICE_INVENTORY_SUCCESS,\n deviceInventory,\n deviceId,\n };\n}\n\nexport function loadDeviceInventoryProductCountSuccess(productTotals, deviceId) {\n return {\n type: types.LOAD_DEVICE_INVENTORY_PRODUCT_COUNT_SUCCESS,\n productTotals,\n deviceId,\n };\n}\n\nexport function loadDeviceInventoryHistorySuccess(\n deviceInventoryHistory,\n deviceId\n) {\n return {\n type: types.LOAD_DEVICE_INVENTORY_HISTORY_SUCCESS,\n deviceInventoryHistory,\n deviceId,\n };\n}\n\nexport function loadDeviceInventorySummarySuccess(\n deviceInventorySummary,\n deviceId\n) {\n return {\n type: types.LOAD_DEVICE_INVENTORY_SUMMARY_SUCCESS,\n deviceInventorySummary,\n deviceId,\n };\n}\n\nexport function loadDeviceInventoryHistoryMoreSuccess(\n deviceInventoryHistory,\n deviceId\n) {\n return {\n type: types.LOAD_DEVICE_INVENTORY_HISTORY_MORE_SUCCESS,\n deviceInventoryHistory,\n deviceId,\n };\n}\n\nexport function refreshDeviceInventoryHistorySuccess(\n deviceInventoryHistory,\n deviceId\n) {\n return {\n type: types.REFRESH_DEVICE_INVENTORY_HISTORY_SUCCESS,\n deviceInventoryHistory,\n deviceId,\n };\n}\n\nexport function refreshDeviceInventorySummarySuccess(\n deviceInventorySummary,\n deviceId\n) {\n return {\n type: types.REFRESH_DEVICE_INVENTORY_SUMMARY_SUCCESS,\n deviceInventorySummary,\n deviceId,\n };\n}\nexport function loadDeviceInventory(deviceId) {\n return function (dispatch) {\n return deviceInventoryApi\n .getDeviceInventory(deviceId)\n .then((deviceInventory) => {\n dispatch(loadDeviceInventorySuccess(deviceInventory, deviceId));\n })\n .catch((error) => {\n const err = new Error(\n \"deviceInventoryActions.js, loadDeviceInventory()\",\n error.toString()\n );\n dispatch(logError(err));\n });\n };\n}\n\nexport function loadDeviceInventoryProductCounts(deviceId) {\n return function (dispatch) {\n return deviceInventoryApi\n .getDeviceInventoryProductCounts\n .then((productTotals) => {\n dispatch(loadDeviceInventoryProductCountSuccess(productTotals, deviceId));\n })\n .catch((error) => {\n const err = new Error(\n \"deviceInventoryActions.js, loadDeviceInventoryProductCounts()\",\n error.toString()\n );\n dispatch(logError(err));\n });\n };\n}\nexport function inventoryReviseExpiry(reviseExpiry) {\n return function (dispatch) {\n return deviceInventoryApi.reviseExpiry(reviseExpiry).catch((error) => {\n const params = [\n {\n reviseExpiry: reviseExpiry,\n },\n ];\n const err = new Error(\n \"deviceInventoryActions.js, inventoryReviseExpiry\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function loadDeviceInventoryHistory(deviceId, recordsPerPage, token) {\n return function (dispatch) {\n return deviceInventoryApi\n .getDeviceInventoryHistory(deviceId, recordsPerPage, token)\n .then((deviceInventoryHistory) => {\n dispatch(\n loadDeviceInventoryHistorySuccess(deviceInventoryHistory, deviceId)\n );\n })\n .catch((error) => {\n const err = new Error(\n \"deviceInventoryActions.js, loadDeviceInventoryHistory()\",\n error.toString()\n );\n dispatch(logError(err));\n });\n };\n}\n\nexport function loadDeviceInventoryHistoryMore(\n deviceId,\n recordsPerPage,\n token\n) {\n return function (dispatch) {\n return deviceInventoryApi\n .getDeviceInventoryHistory(deviceId, recordsPerPage, token)\n .then((deviceInventoryHistory) => {\n dispatch(\n loadDeviceInventoryHistoryMoreSuccess(\n deviceInventoryHistory,\n deviceId\n )\n );\n })\n .catch((error) => {\n const err = new Error(\n \"deviceInventoryActions.js, loadDeviceInventoryHistory()\",\n error.toString()\n );\n dispatch(logError(err));\n });\n };\n}\n\nexport function loadDeviceInventorySummary(deviceId) {\n return function (dispatch) {\n return deviceInventoryApi\n .getDeviceInventorySummary(deviceId)\n .then((deviceInventorySummary) => {\n dispatch(loadDeviceInventorySummarySuccess(deviceInventorySummary, deviceId));\n })\n .catch((error) => {\n const err = new Error(\n \"deviceInventoryActions.js, loadDeviceInventorySummary()\",\n error.toString()\n );\n dispatch(logError(err));\n });\n };\n}\n\nexport function refreshDeviceInventory(deviceId, recordsPerPage, token) {\n return function (dispatch) {\n return deviceInventoryApi\n .getDeviceInventory(deviceId)\n .then((deviceInventory) => {\n dispatch(loadDeviceInventorySuccess(deviceInventory, deviceId));\n })\n .catch((error) => {\n const err = new Error(\n \"deviceInventoryActions.js, refreshDeviceInventory()\",\n error.toString()\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function refreshDeviceInventorySummary(deviceId) {\n return function (dispatch) {\n return deviceInventoryApi\n .getDeviceInventorySummary(deviceId)\n .then((deviceInventorySummary) => {\n dispatch(loadDeviceInventorySummarySuccess(deviceInventorySummary, deviceId));\n })\n .catch((error) => {\n const err = new Error(\n \"deviceInventoryActions.js, refreshDeviceInventorySummary()\",\n error.toString()\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function refreshDeviceInventoryHistory(deviceId,\n recordsPerPage,\n token) {\n return function (dispatch) {\n return deviceInventoryApi\n .getDeviceInventoryHistory(deviceId, recordsPerPage, token)\n .then((deviceInventoryHistory) => {\n dispatch(loadDeviceInventoryHistorySuccess(deviceInventoryHistory, deviceId));\n })\n .catch((error) => {\n const err = new Error(\n \"deviceInventoryActions.js, refreshDeviceInventoryHistory()\",\n error.toString()\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function scanInventorySp(deviceId) {\n return function (dispatch) {\n return deviceInventoryApi.scanInventorySp(deviceId).catch((error) => {\n const params = [\n {\n deviceId: deviceId,\n },\n ];\n const err = new Error(\n \"deviceInventoryActions.js, scanInventorySp()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function checkScan2(deviceId) {\n return function (dispatch) {\n return deviceInventoryApi.checkScan2(deviceId).catch((error) => {\n const params = [\n {\n deviceId: deviceId,\n },\n ];\n const err = new Error(\n \"deviceInventoryActions.js, checkScan2()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n/*\nexport function checkScan(deviceId) {\n return function (dispatch) {\n return deviceInventoryApi\n .checkScan(deviceId)\n .then((deviceInventory) => {\n dispatch(loadDeviceInventorySuccess(deviceInventory, deviceId));\n })\n .catch((error) => {\n const err = new Error(\n \"deviceInventoryActions.js, checkScan()\",\n error.toString()\n );\n\n dispatch(logError(err));\n });\n };\n}\n*/\n","import * as incidentApi from \"../api/incidentApi\";\nimport * as types from \"../../common/state/actionTypes\";\nimport { Error } from \"../../errors/errorType\";\nimport { logError } from \"../../errors/actions/errorActions\";\n\nexport function loadLatestCustomerIncidentsSuccess(incidents) {\n return { type: types.LOAD_LATEST_CUSTOMER_INCIDENT_SUCCESS, incidents };\n}\n\nexport function loadIndicentDetailsSuccess(incidentDetails) {\n return { type: types.LOAD_INCIDENT_DETAILS_SUCCESS, incidentDetails };\n}\n\nexport function loadDeviceIncidentListSuccess(incidents) {\n return { type: types.LOAD_DEVICE_INCIDENT_LIST_SUCCESS, incidents };\n}\n\nexport function resetDeviceIncidentList() {\n return { type: types.RESET_DEVICE_INCIDENT_LIST };\n}\nexport function loadDeviceIncidentAlarmListSuccess(\n incident,\n incidentAlarmList\n) {\n return {\n type: types.LOAD_DEVICE_INCIDENT_ALARM_LIST_SUCCESS,\n incident,\n incidentAlarmList,\n };\n}\n\n// export function acknowledgeIncidentAlarmSuccess(\n// incidentId,\n// incidentAlarmId,\n// ackAlarmResponse\n// ) {\n// return {\n// type: types.ACKNOWLEDGE_INCIDENT_ALARM_SUCCESS,\n// incidentId,\n// incidentAlarmId,\n// ackAlarmResponse,\n// };\n// }\n\nexport function loadIncidentReportDropdownListSuccess(dropdownlist) {\n return {\n type: types.LOAD_INCIDENT_REPORT_DROPDOWN_LIST_SUCCESS,\n dropdownlist,\n };\n}\n\nexport function loadLatestCustomerIncidents() {\n return function (dispatch) {\n return incidentApi\n .getActiveCustomerIncidents()\n .then((incidents) => {\n dispatch(loadLatestCustomerIncidentsSuccess(incidents));\n })\n .catch((error) => {\n const err = new Error(\n \"incidentActions.js, loadLatestCustomerIncidents()\",\n error.toString()\n );\n dispatch(logError(err));\n });\n };\n}\n\nexport function loadIncidentDetails(deviceId, incidentId) {\n return function (dispatch) {\n return incidentApi\n .getDeviceIncident(deviceId, incidentId)\n .then((incidentDetails) => {\n dispatch(loadIndicentDetailsSuccess(incidentDetails));\n })\n .catch((error) => {\n const params = [\n {\n deviceId: deviceId,\n },\n {\n incidentId: incidentId,\n },\n ];\n const err = new Error(\n \"incidentActions.js, loadIncidentDetails()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function loadDeviceIncidentList(deviceId, recordsPerPage, token) {\n return function (dispatch) {\n return incidentApi\n .getDeviceIncidentList(deviceId, recordsPerPage, token)\n .then((incidents) => {\n dispatch(loadDeviceIncidentListSuccess(incidents));\n })\n .catch((error) => {\n const params = [\n {\n deviceId: deviceId,\n },\n {\n token: token,\n },\n ];\n const err = new Error(\n \"incidentActions.js, loadDeviceIncidentList()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function loadDeviceIncidentAlarmList(deviceId, incident) {\n return function (dispatch) {\n return incidentApi\n .getDeviceIncidentAlarmList(deviceId, incident)\n .then((incidentAlarmList) => {\n dispatch(\n loadDeviceIncidentAlarmListSuccess(incident, incidentAlarmList)\n );\n })\n .catch((error) => {\n const params = [\n {\n deviceId: deviceId,\n },\n {\n token: incident,\n },\n ];\n const err = new Error(\n \"incidentActions.js, loadDeviceIncidentAlarmList()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function submitDeviceIncidentReportRequest(reportParams) {\n return function (dispatch) {\n return incidentApi\n .submitDeviceIncidentReportRequest(reportParams)\n .catch((error) => {\n const params = [\n {\n reportParams: reportParams,\n },\n ];\n const err = new Error(\n \"incidentActions.js, submitDeviceIncidentReportRequest()\",\n error.toString(),\n params\n );\n dispatch(logError(err));\n });\n };\n}\n\nexport function loadIncidentReportDropdownList() {\n return function (dispatch) {\n return incidentApi\n .getIncidentReportDropdownList()\n .then((dropdownlist) => {\n dispatch(loadIncidentReportDropdownListSuccess(dropdownlist));\n })\n .catch((error) => {\n const err = new Error(\n \"incidentActions.js, loadIncidentReportDropdownList()\",\n error.toString()\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function acknowledgIncidentAlarm(incidentId, incidentAlarmId, deviceId) {\n return function (dispatch) {\n return (\n incidentApi\n .acknowledgeAlarm(incidentAlarmId, deviceId)\n // .then(() => {\n // loadDeviceIncidentAlarmList(deviceId, incidentId);\n // })\n // .then((ackAlarmResponse) => {\n // dispatch(\n // acknowledgeIncidentAlarmSuccess(\n // incidentId,\n // incidentAlarmId,\n // ackAlarmResponse\n // )\n // );\n // })\n .catch((error) => {\n // debugger;\n const params = [\n {\n incidentId: incidentId,\n incidentAlarmId: incidentAlarmId,\n },\n ];\n const err = new Error(\n \"incidentActions.js, acknowledgIncidentAlarm()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n })\n );\n };\n}\n","import React, { Component } from \"react\";\nimport Item from \"react-bootstrap/ListGroupItem\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport DeviceTemperature from \"./DeviceTemperature\";\nimport DeviceDoor from \"./DeviceDoor\";\nimport DeviceVoltage from \"./DeviceVoltage\";\nimport DeviceListRowDevice from \"./DeviceListRowDevice\";\nimport { connect } from \"react-redux\";\nimport { setSelectedDevice } from \"./actions/deviceListActions\";\nimport {\n loadRecentHistoricalDeviceTelemetry,\n resetAnalysisDeviceTelemetryChart,\n} from \"../deviceTelemetry/actions/deviceTelemetryActions\";\nimport DeviceFavourite from \"./DeviceFavourite\";\nimport { loadDeviceCustomerContactInfo } from \"../customerContact/actions/customerContactActions\";\nimport { resetDeviceAlarmConfigList } from \"../deviceConfiguration/actions/alarmConfigActions\";\nimport {\n loadDeviceInventory,\n loadDeviceInventoryHistory,\n loadDeviceInventorySummary,\n} from \"../inventory/actions/deviceInventoryActions\";\nimport { resetDeviceIncidentList } from \"../incidents/actions/incidentActions\";\nimport { appConfig } from \"../configuration/config\";\nclass DeviceListRow extends Component {\n setSelectedDevice() {\n // TODO: look at moving this stuff to a more general 'reset ui' type area\n this.props.resetDeviceIncidentList();\n this.props.resetAnalysisDeviceTelemetryChart();\n this.props.setSelectedDevice(this.props.device);\n\n //console.log(this.props.device);\n const endDate = new Date();\n let startDate = new Date();\n //startDate.setMinutes(startDate.getMinutes() - 30);\n startDate.setHours(startDate.getHours() - 2);\n // console.log(\n // `deviceId:${\n // this.props.device.id\n // }, startDate:${startDate.toISOString()}, endDate:${endDate.toISOString()}`\n // );\n\n this.props.loadRecentHistoricalDeviceTelemetry(\n this.props.device.id,\n startDate.toISOString(),\n endDate.toISOString(),\n this.props.device.hardwareId\n );\n\n this.props.loadDeviceCustomerContactInfo(this.props.device.id);\n\n this.props.resetDeviceAlarmConfigList();\n\n this.props.loadDeviceInventory(this.props.device.id);\n this.props.loadDeviceInventorySummary(this.props.device.id);\n this.props.loadDeviceInventoryHistory(\n this.props.device.id,\n appConfig.deviceInventoryHistoryRecordsPerPage,\n \"token\"\n );\n // need deviceId, currentTime, currenttime - 10 minutes\n // this.props.loadRecentHistoricalDeviceTelemetry\n }\n render() {\n return (\n
\n this.setSelectedDevice()}>\n \n \n\n {this.props.device.customerCode ? (\n

{this.props.device.customerCode}

\n ) : \"-\"}
\n \n \n \n \n \n \n \n \n
\n \n \n
\n {this.props.device.name ? this.props.device.name : \"-\"}\n
\n \n\n
\n
\n
\n );\n }\n}\n\nconst mapDispatchToProps = {\n setSelectedDevice,\n loadRecentHistoricalDeviceTelemetry,\n loadDeviceCustomerContactInfo,\n resetDeviceAlarmConfigList,\n loadDeviceInventory,\n loadDeviceInventoryHistory,\n loadDeviceInventorySummary,\n resetDeviceIncidentList,\n resetAnalysisDeviceTelemetryChart,\n};\n\nexport default connect(null, mapDispatchToProps)(DeviceListRow);\n","export const getDeviceAlarmCount = (state) => {\n const count = state.deviceList.devices.reduce(\n (acc, cur) => (cur.alarmed === true ? ++acc : acc),\n 0\n );\n return count;\n};\n\nexport const getDeviceOkCount = (state) => {\n const count = state.deviceList.devices.reduce(\n (acc, cur) => (cur.alarmed !== true ? ++acc : acc),\n 0\n );\n return count;\n};\n\nexport const getFilteredDevices = (state) => {\n return state.deviceList.filteredDevices;\n};\n\nexport const getAllDevices = (state) => state.deviceList.devices;\n\nexport const getOpenDoorCount = (state) => {\n const count = state.deviceList.devices.reduce(\n (acc, cur) => (cur.doorFridge === true ? ++acc : acc),\n 0\n );\n return count;\n};\n\nexport const getSelectedDevice = (state) => state.deviceList.selectedDevice;\n\nexport const getFilteredPageListCount = (state) =>\n state.deviceList.filteredPages;\n\nexport const getDeviceLocations = (state) => state.deviceList.locations;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronDown, faChevronUp } from '@fortawesome/free-solid-svg-icons';\n\nconst DeviceListSortableColumnHeader = ({ label, onSort, activeFilter }) => {\n const [sortOrder, setSortOrder] = useState(\"ASC\");\n\n const handleSort = () => {\n const newSortOrder = sortOrder === \"ASC\" ? \"DESC\" : \"ASC\";\n setSortOrder(newSortOrder);\n onSort(label, newSortOrder);\n };\n\n return (\n \n {label} {activeFilter === label ? (\n sortOrder === \"ASC\" ? (\n \n ) : (\n \n )\n ) : (\n \n )}\n \n );\n};\n\nDeviceListSortableColumnHeader.propTypes = {\n label: PropTypes.string.isRequired,\n onSort: PropTypes.func.isRequired,\n activeFilter: PropTypes.string,\n};\n\nexport default DeviceListSortableColumnHeader;\n","import React from \"react\";\nimport Row from \"react-bootstrap/Row\";\nimport DeviceListSortableColumnHeader from \"./DeviceListSortableColumnHeader\";\nimport PropTypes from \"prop-types\";\n\nconst DeviceListTableHeader = ({ activeFilter, handleSort }) => (\n \n {[\"Code\", \"Name\", \"Voltage\", \"Product\", \"Door\"].map((label) => (\n \n ))}\n \n);\n\nDeviceListTableHeader.propTypes = {\n activeFilter: PropTypes.string,\n handleSort: PropTypes.func.isRequired,\n};\n\nexport default DeviceListTableHeader;\n","import React, { Component } from \"react\";\nimport ListGroup from \"react-bootstrap/ListGroup\";\nimport Row from \"react-bootstrap/Row\";\nimport DeviceListRow from \"./DeviceListRow\";\nimport { connect } from \"react-redux\";\nimport { loadDeviceList, filterByName, filterByCustomerCode, filterByVoltage, filterByProdTemp, sortByDoor } from \"./actions/deviceListActions\";\nimport { getFilteredDevices } from \"./selectors/deviceListSelector\";\nimport \"../dashboard/Dashboard.css\";\nimport PropTypes from \"prop-types\";\nimport DeviceListTableHeader from \"./DeviceListTableHeader\";\n\nclass DeviceList extends Component {\n\tstate = {\n activeFilter: null, // No active filter initially\n sortOrder: \"ASC\", // Initial sort order\n };\n\n componentDidMount() {\n // TODO: needs to be customer specific\n const deviceGroupId = 1;\n this.props.loadDeviceList(deviceGroupId);\n }\n\n\thandleSort = (filter, sortOrder) => {\n this.setState({ activeFilter: filter, sortOrder });\n switch (filter) {\n case \"Name\":\n this.props.filterByName(sortOrder);\n break;\n case \"Code\":\n this.props.filterByCustomerCode(sortOrder);\n break;\n case \"Voltage\":\n this.props.filterByVoltage(sortOrder);\n break;\n case \"Product\":\n this.props.filterByProdTemp(sortOrder);\n break;\n\t\t\tcase \"Door\":\n\t\t\t\tthis.props.sortByDoor(sortOrder);\n\t\t\t\tbreak;\n default:\n break;\n }\n }\n\n render() {\n return (\n \n \n {this.props.deviceList.map((device) => {\n return ;\n })}\n \n );\n }\n}\n\nDeviceList.propTypes = {\n deviceList: PropTypes.array.isRequired,\n};\n\nfunction mapStateToProps(state, ownProps) {\n return {\n deviceList: getFilteredDevices(state),\n };\n}\n\nconst mapDispatchToProps = {\n loadDeviceList,\n\tfilterByName,\n\tfilterByCustomerCode,\n\tfilterByVoltage,\n\tfilterByProdTemp,\n\tsortByDoor\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DeviceList);\n","import React, { Component } from \"react\";\nimport Form from \"react-bootstrap/Form\";\nimport { connect } from \"react-redux\";\nimport { searchByValue } from \"./actions/deviceListActions\";\n\nclass DeviceListSearch extends Component {\n searchDevices(e) {\n this.props.searchByValue(e.target.value);\n }\n render() {\n return (\n \n {\n this.searchDevices(e);\n }}\n />\n \n );\n }\n}\n\nconst mapDispatchToProps = {\n searchByValue,\n};\n\nexport default connect(null, mapDispatchToProps)(DeviceListSearch);\n","import React, { Component} from \"react\";\nimport { connect } from \"react-redux\";\nimport Pagination from \"react-bootstrap/Pagination\";\nimport { getFilteredPageListCount } from \"./selectors/deviceListSelector\";\nimport { loadNewPage, loadExactPage } from \"./actions/deviceListActions\";\n\nclass DeviceListPagination extends Component {\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n currentPage: 1\r\n };\r\n }\n setPageNumber(p){\r\n // if (p >= 1 && p <= maxLimit) {\r\n var curr = Math.max(1, Math.min(p, this.props.filteredPageCount));\r\n this.setState({ currentPage: curr });\r\n// this.state.currentPage = Math.max(1, Math.min(p, this.props.filteredPageCount));\r\n// }\r\n };\n\n render() {\n let pageButtonsToDisplay;\n if (this.props.filteredPageCount > 8) {\n pageButtonsToDisplay = 8;\n } else {\n pageButtonsToDisplay = this.props.filteredPageCount;\n }\n \r\n const items = [];\n items.push(\n { this.props.loadExactPage(1); this.setPageNumber(1); }} />\n );\n items.push(\n { this.props.loadNewPage(-1); this.setPageNumber(this.state.currentPage - 1); }} />\n );\n\n\n if (this.props.filteredPageCount <= pageButtonsToDisplay) {\n for (let number = 1; number <= pageButtonsToDisplay; number++) {\n items.push(\n { this.props.loadExactPage(number); this.setPageNumber(number); }}\n aria-current=\"page\"\n >\n {number}\n \n );\n }\n } else {\n const leftside = this.state.currentPage - pageButtonsToDisplay / 2 > 1;\r\n const rightside = this.state.currentPage + pageButtonsToDisplay / 2 < this.props.filteredPageCount;\r\n/* items.push(\r\n this.props.loadExactPage(1)}\r\n />\r\n );\r\n items.push(\r\n this.props.loadNewPage(-1)}\r\n />\r\n );\r\n */\r\n if (leftside) {\r\n items.push();\r\n }\r\n const str = Math.max(1, Math.round(this.state.currentPage - pageButtonsToDisplay / 2));\r\n const end = Math.min(this.props.filteredPageCount, Math.round(this.state.currentPage + pageButtonsToDisplay / 2));\r\n// alert(this.state.currentPage);\r\n// alert(items.length);\r\n for (let i = str; i <= end; i++) {\r\n items.push(\r\n { this.props.loadExactPage(i); this.setPageNumber(i); }}\n aria-current=\"page\"\n >\n {i}\n \n );\r\n }\r\n if (rightside) {\r\n items.push();\r\n }\r\n } \n items.push(\n { this.props.loadNewPage(1); this.setPageNumber(this.state.currentPage + 1); }}\n />\n );\n items.push(\n { this.props.loadExactPage(this.props.filteredPageCount); this.setPageNumber(this.props.filteredPageCount); } }\n />\n );\n return (\n
\n {items}\n
\n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n filteredPageCount: getFilteredPageListCount(state),\n currentPage: 1,\n };\n}\n\nconst mapDispatchToProps = {\n loadNewPage,\n loadExactPage,\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(DeviceListPagination);\n","export const initialDeviceListLoaded = (state) => {\n return state.applicationState.initialDeviceListLoaded;\n};\n\nexport const getInitialDeviceId = (state) => {\n return state.applicationState.initialDeviceId;\n};\n","import * as deviceGroupApi from \"../api/deviceGroupApi\";\nimport * as types from \"../../common/state/actionTypes\";\nimport { Error } from \"../../errors/errorType\";\nimport { logError } from \"../../errors/actions/errorActions\";\n\nexport function loadDeviceGroupsSuccess(deviceGroups) {\n return { type: types.LOAD_DEVICE_GROUPS_SUCCESS, deviceGroups };\n}\n\nexport function loadDeviceGroups(deviceId) {\n return function (dispatch) {\n return deviceGroupApi\n .getDeviceGroups(deviceId)\n .then((deviceGroups) => {\n dispatch(loadDeviceGroupsSuccess(deviceGroups));\n })\n .catch((error) => {\n const params = [\n {\n deviceId: deviceId,\n },\n ];\n const err = new Error(\n \"deviceGroupActions.js, loadDeviceGroups()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function updateDeviceGroup(deviceGroupData) {\n return function (dispatch) {\n return deviceGroupApi.updateDeviceGroups(deviceGroupData).catch((error) => {\n const params = [\n {\n deviceGroupData: deviceGroupData,\n },\n ];\n const err = new Error(\n \"deviceGroupActions.js, updateDeviceGroup()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n","import { callAdminApiPost, callAdminApiGet } from \"../../api/apiUtils\";\n\nexport async function getDeviceGroups(deviceId) {\n const url = `api/devicegroup/groups/${deviceId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function updateDeviceGroups(deviceGroupData) {\n const url = `api/devicegroup/updategroups`;\n return callAdminApiPost(url, deviceGroupData);\n}\n","export const getDeviceGroups = (state) => {\n return state.deviceGroups.filter((g) => g.deviceGroupId !== 1);\n};\n\nexport const getAllDeviceGroups = (state) => state.deviceGroups;\n","import React, { Component } from \"react\";\nimport Dropdown from \"react-bootstrap/Dropdown\";\nimport Button from \"react-bootstrap/Button\";\nimport { connect } from \"react-redux\";\nimport {\n initialDeviceListLoaded,\n getInitialDeviceId,\n} from \"../application/selectors/applicationSelector\";\nimport { loadDeviceGroups } from \"../deviceGroup/actions/deviceGroupActions\";\nimport { getAllDeviceGroups } from \"../deviceGroup/selectors/deviceGroupSelector\";\nimport { loadDeviceList } from \"../deviceList/actions/deviceListActions\";\n\nclass DeviceListGroupFilterDropdown extends Component {\nconstructor(props) {\n\tsuper(props);\n\t\tthis.state = {\n\t\t\t\tlocation: null,\n\t\t};\n\t}\n\n componentDidUpdate(prevProps) {\n if (this.props.devicesLoaded && prevProps.deviceGroups.length === 0) {\n this.props.loadDeviceGroups(this.props.initialDeviceId);\n }\n }\n renderDropDownItem(deviceGroup) {\n return (\n {\n\t\t\t\t\tthis.setState({ location: deviceGroup.description });\n\t\t\t\t\tthis.props.loadDeviceList(deviceGroup.deviceGroupId)\n\t\t\t\t}}\n key={deviceGroup.deviceGroupId}\n >\n {deviceGroup.description}\n \n );\n }\n\n renderDeviceGroupDropdown() {\n let dropdown;\n dropdown = (\n <>\n \n {this.state.location ? this.state.location : \"Location\"}\n {\" \"}\n \n {/* {this.props.deviceLocations.map((location, index) =>\n this.renderDropDownItem(location, index)\n )} */}\n {this.props.deviceGroups.map((deviceGroup, index) =>\n this.renderDropDownItem(deviceGroup)\n )}\n \n \n );\n return dropdown;\n }\n render() {\n return this.props.devicesLoaded ? (\n <>{this.renderDeviceGroupDropdown()}\n ) : (\n <>\n \n \n );\n }\n}\n\nDeviceListGroupFilterDropdown.defaultProps = {\n devicesLoaded: false,\n deviceGroups: [],\n initialDeviceId: null,\n};\n\nfunction mapStateToProps(state, ownProps) {\n return {\n devicesLoaded: initialDeviceListLoaded(state),\n initialDeviceId: getInitialDeviceId(state),\n deviceGroups: getAllDeviceGroups(state),\n };\n}\n\nconst mapDispatchToProps = {\n loadDeviceGroups,\n loadDeviceList,\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(DeviceListGroupFilterDropdown);\n","import React, { Component } from \"react\";\nimport Button from \"react-bootstrap/Button\";\nimport Dropdown from \"react-bootstrap/Dropdown\";\nimport Check from \"react-bootstrap/FormCheck\";\nimport Label from \"react-bootstrap/FormLabel\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faDoorOpen } from \"@fortawesome/free-solid-svg-icons\";\nimport { faBell } from \"@fortawesome/free-solid-svg-icons\";\nimport { connect } from \"react-redux\";\nimport {\n getDeviceAlarmCount,\n getDeviceOkCount,\n getOpenDoorCount,\n getDeviceLocations,\n} from \"./selectors/deviceListSelector\";\nimport {\n filterByStatus,\n filterByAlarm,\n filterByOk,\n searchByValue,\n filterByDoor,\n filterByFavourite,\n clearFilter,\n filterByLocation,\n showHighTempOnly,\n isEnabled,\n} from \"./actions/deviceListActions\";\nimport DeviceListGroupFilterDropdown from \"./DeviceListGroupFilterDropdown\";\nclass DeviceListFilters extends Component {\n constructor(props) {\n\t super(props);\n\t this.state = {\n\t condition: 'Conditions',\n\t };\n\t}\n\n renderDropDownItem(location, index) {\n return (\n this.props.filterByLocation(location)}\n key={index}\n >\n {location}\n \n );\n }\n\n renderLocationDropdown() {\n let dropdown;\n dropdown = (\n <>\n \n Location\n {\" \"}\n \n {this.props.deviceLocations.map((location, index) =>\n this.renderDropDownItem(location, index)\n )}\n \n \n );\n return dropdown;\n }\n\n renderConditionDropdown() {\n return (\n \n \n {this.state.condition}\n \n \n {\n\t\t\t\t\t\t\tthis.setState({ condition : \"All\" });\n\t\t\t\t\t\t\tthis.props.clearFilter()\n\t\t\t\t\t\t}}\n >\n All\n \n {\n\t\t\t\t\t\t\tthis.props.clearFilter()\n\t\t\t\t\t\t\tthis.setState({ condition : \"Alarmed\" });\n\t\t\t\t\t\t\tthis.props.filterByAlarm(true)\n\t\t\t\t\t\t}}\n >\n Alarmed\n \n {\n\t\t\t\t\t\t\tthis.props.clearFilter()\n\t\t\t\t\t\t\tthis.setState({ condition : \"Not Alarmed\" });\n\t\t\t\t\t\t\tthis.props.filterByAlarm(false)\n\t\t\t\t\t\t}}\n >\n Not Alarmed\n \n {\n\t\t\t\t\t\t\tthis.props.clearFilter()\n\t\t\t\t\t\t\tthis.setState({ condition : \"Door Open\" });\n\t\t\t\t\t\t\tthis.props.filterByDoor(true)\n\t\t\t\t\t\t}}\n >\n Door Open\n \n {\n\t\t\t\t\t\t\tthis.props.clearFilter()\n\t\t\t\t\t\t\tthis.setState({ condition : \"High Temperature\" });\n\t\t\t\t\t\t\tthis.props.showHighTempOnly()\n\t\t\t\t\t\t}}\n >\n High Temperature\n \n \n \n );\n }\n\n render() {\n return (\n
\n \n \n \n\n {this.renderConditionDropdown()}\n\n
\n \n \n this.props.isEnabled(e.target.checked)\n }\n />\n
\n
\n );\n }\n}\n\nfunction mapStateToProps(state, ownProps) {\n return {\n deviceAlarmCount: getDeviceAlarmCount(state),\n deviceOkCount: getDeviceOkCount(state),\n deviceOpenDoorCount: getOpenDoorCount(state),\n deviceLocations: getDeviceLocations(state),\n };\n}\n\nconst mapDispatchToProps = {\n filterByStatus,\n filterByAlarm,\n filterByOk,\n searchByValue,\n filterByDoor,\n filterByFavourite,\n clearFilter,\n filterByLocation,\n showHighTempOnly,\n isEnabled,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DeviceListFilters);\n","export const isEmpty = (obj) => {\n if (obj) return Object.keys(obj).length === 0;\n\n return true;\n};\n","import * as types from \"../../common/state/actionTypes\";\n\nexport function saveStartDate(startDate) {\n return { type: types.SAVE_DATA_ANALYSIS_START_DATE, startDate: startDate };\n}\n\nexport function saveEndDate(endDate) {\n return { type: types.SAVE_DATA_ANALYSIS_END_DATE, endDate };\n}\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { bindActionCreators } from \"redux\";\nimport { getSelectedDevice } from \"../deviceList/selectors/deviceListSelector\";\nimport Col from \"react-bootstrap/Col\";\nimport Dropdown from \"react-bootstrap/Dropdown\";\nimport DropdownButton from \"react-bootstrap/DropdownButton\";\nimport Datetime from \"react-datetime\";\nimport * as dataAnalysisActions from \"../dataAnalysis/actions/dataAnalysisActions\";\nimport moment from \"moment\";\nimport \"react-datetime/css/react-datetime.css\";\n\nclass DateRange extends Component {\n constructor(props) {\n super(props);\n this.state = {\n startDate: \"\",\n endDate: \"\",\n };\n\n this.setStartDate = this.setStartDate.bind(this);\n this.setEndDate = this.setEndDate.bind(this);\n this.setPresetTime = this.setPresetTime.bind(this);\n }\n\n isValidDate(date) {\n return moment.isDate(date) || moment.isMoment(date);\n }\n\n setStartDate(startDate) {\n if (this.isValidDate(startDate)) {\n this.props.actions.saveStartDate(startDate.toISOString());\n }\n\n this.setState({ startDate: startDate });\n }\n\n setEndDate(endDate) {\n if (this.isValidDate(endDate)) {\n this.props.actions.saveEndDate(endDate.toISOString());\n }\n this.setState({ endDate: endDate });\n }\n\n setPresetTime(time) {\n let startDate = new Date();\n let endDate = new Date();\n\n switch (time) {\n case \"Last Hour\": {\n endDate.setHours(endDate.getHours() - 1);\n break;\n }\n case \"Last 2 Hours\": {\n endDate.setHours(endDate.getHours() - 2);\n break;\n }\n case \"Last 6 Hours\": {\n endDate.setHours(endDate.getHours() - 6);\n break;\n }\n case \"Last 12 Hours\": {\n endDate.setHours(endDate.getHours() - 12);\n break;\n }\n case \"Last 24 Hours\": {\n endDate.setHours(endDate.getHours() - 24);\n break;\n }\n default: {\n endDate.setHours(endDate.getHours() - 1);\n break;\n }\n }\n\n this.setStartDate(endDate);\n this.setEndDate(startDate);\n }\n\n render() {\n return (\n <>\n \n \n \n \n \n \n \n \n this.setPresetTime(\"Last Hour\")}\n href=\"\"\n >\n Last hour\n \n this.setPresetTime(\"Last 2 Hours\")}\n href=\"\"\n >\n Last 2 hours\n \n this.setPresetTime(\"Last 6 Hours\")}\n href=\"\"\n >\n Last 6 hours\n \n this.setPresetTime(\"Last 12 Hours\")}\n href=\"\"\n >\n Last 12 hours\n \n this.setPresetTime(\"Last 24 Hours\")}\n href=\"\"\n >\n Last 24 hours\n \n \n \n \n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n device: getSelectedDevice(state),\n };\n}\n\nfunction mapDispatchToProps(dispatch) {\n return {\n actions: {\n saveStartDate: bindActionCreators(\n dataAnalysisActions.saveStartDate,\n dispatch\n ),\n saveEndDate: bindActionCreators(\n dataAnalysisActions.saveEndDate,\n dispatch\n ),\n },\n };\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DateRange);\n","export const chartColours = [\n \"#FF246D\", // temperature - product\n \"#00FF3F\", // door\n \"#0019FF\", // temperature - fridge\n \"#a3a3a3\", // compressor\n \"#FF00E9\", // voltage - main\n \"#9900E6\", // voltage - battery\n \"#FF8C00\", // door - magnet\n \"#158f66\",\n];\n","import React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { getAnalysisTelemetrySeriesData } from \"./selectors/deviceTelemetryChartDataSelector\";\r\nimport {\r\n loadDeviceListAnalysisTelemetry,\r\n resetAnalysisDeviceTelemetryChart,\r\n submitDeviceAnalysisReportRequest,\r\n} from \"../deviceTelemetry/actions/deviceTelemetryActions\";\r\nimport { getSelectedDevice } from \"../deviceList/selectors/deviceListSelector\";\r\nimport { getDates } from \"../dataAnalysis/selectors/dataAnalysisSelector\";\r\n//import CustomChartLayoutAnalysis from \"./CustomChartLayoutAnalysis\";\r\nimport Chart from \"react-apexcharts\";\r\n//import ApexCharts from \"apexcharts\";\r\nimport DateRange from \"../date/DateRange\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport Button from \"react-bootstrap/Button\";\r\nimport { toast } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport { isEmpty } from \"../utils/generalUtils\";\r\n// import JSONPretty from \"react-json-pretty\";\r\nimport \"react-json-pretty/themes/monikai.css\";\r\nimport { chartColours } from \"./chartColours\";\r\n\r\nclass AnalysisDeviceTelemetryChart extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n initialLoad: true,\r\n tooltipData2: {\r\n time: '--:--',\r\n dataset: [\r\n ],\r\n default: \"Please hover over a data point to see more information.\"\r\n },\r\n options: {\r\n chart: {\r\n id: \"analysisChart\",\r\n height: 750,\r\n type: \"line\",\r\n zoom: {\r\n type: \"x\",\r\n enabled: true,\r\n autoScaleYaxis: true,\r\n },\r\n\r\n events: {\r\n dataPointMouseEnter: (event, chartContext, { seriesIndex, dataPointIndex }) => {\r\n const data = chartContext.w.config.series[seriesIndex].data[dataPointIndex];\r\n const xValue = data.x;\r\n const allDataPoints = chartContext.w.config.series.map(series => series.data.find(point => point.x === xValue));\r\n const labels = chartContext.w.config.series.map(series => series.name);\r\n let formattedData = {\r\n time: xValue,\r\n dataset: [],\r\n };\r\n\r\n formattedData.dataset = allDataPoints.map((point, index) => ({\r\n label: labels[index],\r\n value: point.y\r\n }));\r\n\r\n //alert(\"here x\")\r\n //this.setTooltipData(formattedData);\r\n this.setState({ tooltipData2: formattedData });\r\n },\r\n },\r\n\r\n },\r\n colors: chartColours,\r\n// animations: {\r\n// enabled: false,\r\n// easing: \"linear\",\r\n// speed: 1000,\r\n// animateGradually: {\r\n// enabled: false,\r\n// //delay: 150,\r\n// },\r\n// dynamicAnimation: {\r\n// enabled: false,\r\n// speed: 1000,\r\n// },\r\n// },\r\n tooltip: {\r\n enabled: true,\r\n intersect: true,\r\n shared: false,\r\n },\r\n markers: {\r\n size: 4,\r\n },\r\n dataLabels: {\r\n enabled: false,\r\n },\r\n stroke: {\r\n curve: \"straight\",\r\n lineCap: \"round\",\r\n width: [1, 1, 1],\r\n },\r\n title: {\r\n text: \"Device Telemetry\",\r\n align: \"left\",\r\n },\r\n grid: {\r\n row: {\r\n colors: [\"#f3f3f3\", \"transparent\"], // takes an array which will be repeated on columns\r\n opacity: 0.5,\r\n },\r\n },\r\n yaxis: [{\r\n seriesName: \"Temperature - Product\",\r\n tickAmount: 4,\r\n show: true,\r\n showAlways: true,\r\n decimalsInFloat: 2,\r\n min: 0.0,\r\n title: {\r\n text: \"Temperature / Voltage\",\r\n },\r\n },\r\n {\r\n opposite: true,\r\n seriesName: \"Door - Fridge\",\r\n tickAmount: 1,\r\n decimalsInFloat: 1,\r\n min: -0.1,\r\n max: 1.1,\r\n title: {\r\n text: \"Door / Compressor\",\r\n },\r\n show: true,\r\n showAlways: true,\r\n },\r\n {\r\n seriesName: \"Temperature - Product\",\r\n show: false,\r\n min: 0.0,\r\n },\r\n {\r\n opposite: true,\r\n decimalsInFloat: 0,\r\n min: -0.1,\r\n max: 1.1,\r\n seriesName: \"Door - Fridge\",\r\n title: {\r\n text: \"Door - Magnet\",\r\n },\r\n show: false,\r\n },\r\n {\r\n seriesName: \"Temperature - Product\",\r\n show: false,\r\n min: 0.0,\r\n },\r\n {\r\n seriesName: \"Temperature - Product\",\r\n show: false,\r\n min: 0.0,\r\n },\r\n {\r\n opposite: true,\r\n decimalsInFloat: 0,\r\n min: -0.1,\r\n max: 1.1,\r\n seriesName: \"Door - Fridge\",\r\n title: {\r\n text: \"Door - Magnet\",\r\n },\r\n show: false,\r\n },\r\n {\r\n seriesName: \"Temperature - Product\",\r\n show: false,\r\n min: 0.0,\r\n },],\r\n xaxis: {\r\n type: \"time\",\r\n labels: {\r\n format: \"HH:mm\",\r\n },\r\n title: {\r\n text: \"Time\",\r\n },\r\n tickAmount: 10,\r\n },\r\n },\r\n };\r\n }\r\n\r\n setTooltipData(x) {\r\n alert(\"here\");\r\n this.setState({ tooltipData2: x });\r\n }\r\n\r\n getYaxis(seriesData) {\r\n const doorSeries = {\r\n opposite: true,\r\n seriesName: \"Door - Fridge\",\r\n tickAmount: 1,\r\n decimalsInFloat: 1,\r\n min: -0.1,\r\n max: 1.1,\r\n title: {\r\n text: \"Door / Compressor\",\r\n },\r\n show: true,\r\n showAlways: true,\r\n };\r\n\r\n const tempFridgeSeries = {\r\n seriesName: \"Temperature - Fridge\",\r\n tickAmount: 4,\r\n show: true,\r\n showAlways: true,\r\n decimalsInFloat: 2,\r\n title: {\r\n text: \"Temperature / Voltage\",\r\n },\r\n };\r\n\r\n const yAxis = seriesData.map((s) => {\r\n switch (s.name) {\r\n case \"Door - Fridge\":\r\n return doorSeries;\r\n case \"Temperature - Fridge\":\r\n return tempFridgeSeries;\r\n case \"Voltage - Main\":\r\n case \"Voltage - Main(Out)\":\r\n case \"Voltage - Battery\":\r\n case \"Temperature - Device Chip\":\r\n case \"Temperature - Product\":\r\n case \"Temperature - Air\": {\r\n const sharedTempSeries = {\r\n seriesName: \"Temperature - Fridge\",\r\n show: false,\r\n };\r\n return sharedTempSeries;\r\n }\r\n case \"Compressor\":\r\n case \"Door - Magnet\": {\r\n const sharedDoorSeries = {\r\n opposite: true,\r\n decimalsInFloat: 0,\r\n min: -0.1,\r\n max: 1.1,\r\n seriesName: \"Door - Fridge\",\r\n title: {\r\n text: \"Door - Magnet\",\r\n },\r\n show: false,\r\n };\r\n return sharedDoorSeries;\r\n }\r\n default: {\r\n const series = {\r\n seriesName: s.name,\r\n show: false,\r\n };\r\n\r\n return series;\r\n }\r\n }\r\n });\r\n\r\n return yAxis;\r\n }\r\n\r\n //hideSeries() {\r\n // if (this.props.seriesData.length > 0) {\r\n // ApexCharts.exec(\r\n // \"analysisChart\",\r\n // \"toggleSeries\",\r\n // \"Temperature - Device Chip\"\r\n // );\r\n // }\r\n //}\r\n\r\n componentDidUpdate() {\r\n // todo: causes problems with updates - graph redrawing\r\n //this.setChartOptions();\r\n }\r\n\r\n\r\n\r\n loadAnalysisData() {\r\n this.props.resetAnalysisDeviceTelemetryChart();\r\n\r\n var dtS = new Date(this.props.selectedDates.startDate);\r\n var dtE = new Date(this.props.selectedDates.endDate);\r\n var hours = Math.abs(dtS - dtE) / 36e5;\r\n\r\n if (hours > 48) {\r\n this.submitReport();\r\n } else {\r\n this.props.loadDeviceListAnalysisTelemetry(\r\n this.props.device.id,\r\n this.props.selectedDates.startDate,\r\n this.props.selectedDates.endDate\r\n );\r\n }\r\n\r\n this.setState({\r\n initialLoad: false,\r\n });\r\n\r\n this.setChartOptions();\r\n }\r\n\r\n setChartOptions() {\r\n if (this.props.seriesData.length > 0) {\r\n const maxValue = Math.max(\r\n ...this.props.seriesData.flatMap(serie => serie.data.map(point => point.y))\r\n );\r\n\r\n var yaxis_temp = this.getYaxis(this.props.seriesData);\r\n\r\n var options_temp = this.state.options;\r\n\r\n options_temp.yaxis = yaxis_temp;\r\n options_temp.max = maxValue + 1;\r\n\r\n\r\n this.setState({ options: options_temp });\r\n }\r\n }\r\n\r\n submitReportNotify() {\r\n toast.success(\r\n \"As your selection spans more than 48 hours the data will be delivered by email shortly.\",\r\n {\r\n hideProgressBar: true,\r\n autoClose: 10000,\r\n }\r\n );\r\n }\r\n\r\n submitReport() {\r\n const reportParams = {\r\n DeviceId: this.props.device.id,\r\n StartTime: this.props.selectedDates.startDate,\r\n EndTime: this.props.selectedDates.endDate,\r\n };\r\n\r\n this.props.submitDeviceAnalysisReportRequest(reportParams);\r\n this.submitReportNotify();\r\n }\r\n\r\n\r\n\r\n renderInitialLoad() {\r\n let initialLoad;\r\n\r\n if (this.state.initialLoad) {\r\n initialLoad = (\r\n
\r\n Select a device, data range and press Load Data to view a chart\r\n
\r\n );\r\n }\r\n\r\n return initialLoad;\r\n }\r\n\r\n renderChart() {\r\n let chart;\r\n\r\n if (!this.state.initialLoad && this.props.seriesData.length > 0) {\r\n chart = (\r\n
\r\n
\r\n \r\n
\r\n
\r\n {this.state.tooltipData2 && (\r\n
\r\n
\r\n

{this.state.tooltipData2.time}

\r\n
\r\n {this.state.tooltipData2.dataset.length ? (\r\n
\r\n {this.state.tooltipData2.dataset.map((data, index) => (\r\n \r\n \r\n

{data.label}:

\r\n \r\n \r\n

{data.value} 

\r\n \r\n
\r\n ))}\r\n
\r\n ) : (\r\n
\r\n

{this.state.tooltipData2.default}

\r\n
\r\n )}\r\n
\r\n )}\r\n
\r\n
\r\n );\r\n } else {\r\n chart =
No data for selected device
;\r\n }\r\n return chart;\r\n }\r\n\r\n render() {\r\n let device = \"No Device Selected\";\r\n if (!isEmpty(this.props.device)) {\r\n device = this.props.device.name;\r\n }\r\n\r\n return (\r\n
\r\n

{device}

\r\n {/*

this.props.seriesData

\r\n
{JSON.stringify(this.props.seriesData)}
*/}\r\n \r\n \r\n \r\n \r\n Load Data\r\n \r\n \r\n \r\n {this.renderInitialLoad()}\r\n {this.renderChart()}\r\n {/* */}\r\n
\r\n );\r\n }\r\n}\r\n\r\nAnalysisDeviceTelemetryChart.defaultProps = {\r\n seriesData: [],\r\n device: {},\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n const seriesData = getAnalysisTelemetrySeriesData(state);\r\n const device = getSelectedDevice(state);\r\n let selectedDates = {};\r\n if (!isEmpty(device)) {\r\n selectedDates = getDates(state);\r\n }\r\n\r\n return {\r\n seriesData: seriesData,\r\n device: device,\r\n selectedDates: selectedDates,\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n loadDeviceListAnalysisTelemetry,\r\n resetAnalysisDeviceTelemetryChart,\r\n submitDeviceAnalysisReportRequest,\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(AnalysisDeviceTelemetryChart);\r\n","import { isEmpty } from \"../../utils/generalUtils\";\n\nexport const getStartDate = (state) => state.dataAnalysisParameters.startDate;\n\nexport const getEndDate = (state) => state.dataAnalysisParameters.endDate;\n\nexport const getDates = (state) => {\n let startDate = \"Start Date\";\n\n let endDate = \"End Date\";\n\n if (!isEmpty(state.dataAnalysisParameters.startDate))\n startDate = state.dataAnalysisParameters.startDate;\n\n if (!isEmpty(state.dataAnalysisParameters.endDate)) {\n endDate = state.dataAnalysisParameters.endDate;\n }\n\n return { startDate: startDate, endDate: endDate };\n};\n","import { callFridgeInsightsApiGet } from \"../../api/apiUtils\";\nimport { FridgeInsightsCustomerApi } from \"../../configuration/config\";\nimport { isEmpty } from \"../../utils/generalUtils\";\nimport authService from \"../../api-authorization/AuthorizeService\";\n\nexport async function getServiceBusNotificationSubscription(deviceId, filters) {\n // TODO:\n // const token = await authService.getAccessToken();\n // todo get customer stuff from login auth\n\n const user = await authService.getUser();\n //const customer = \"INSERVIO\";\n\n const filterQueryString = buildQueryString(deviceId, filters);\n\n const url = `${FridgeInsightsCustomerApi}/${user.cosmosId}/notifications/${filterQueryString}`;\n //debugger;\n // console.log(\n // \"deviceNotificationSubscriptionApi.getServiceBusNoticationSubscription URL:\"\n // );\n // console.log(url);\n\n return callFridgeInsightsApiGet(url);\n}\n\n// TODO: should probably be private, but for now, makes testing easier\nexport function buildQueryString(deviceId, filters) {\n const filterQueryString = buildFilterQueryString(filters);\n\n let deviceParam = \"?\";\n if (deviceId) {\n deviceParam = `?deviceId=${deviceId}&`;\n }\n\n const queryString = deviceParam + filterQueryString;\n return queryString;\n}\n\nfunction buildFilterQueryString(filters) {\n if (isEmpty(filters))\n // default to getting alarms\n return \"includeAlarms=true\";\n\n return `includeData=${filters.includeData}&includeAlarms=${filters.includeAlarms}&includeIncidents=${filters.includeIncidents}`;\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport * as deviceNotificationApi from \"../api/deviceNotificationApi\";\nimport { logError } from \"../../errors/actions/errorActions\";\n\nexport const deviceListNotificationUpdate = (notifications) => ({\n type: types.DEVICE_LIST_NOTIFICATION_UPDATE,\n notifications,\n});\n\nexport const serviceBusNotificationSubscriptionDetail = (subscription) => ({\n type: types.SERVICE_BUS_SUBSCRIPTION_DETAILS_LOADED,\n subscription,\n});\n\nexport function getServiceBusNoticationSubscription(deviceId, filters) {\n return function (dispatch) {\n return deviceNotificationApi\n .getServiceBusNotificationSubscription(deviceId, filters)\n .then((subscription) => {\n dispatch(serviceBusNotificationSubscriptionDetail(subscription));\n })\n .catch((error) => {\n const err = new Error(\n \"deviceNotificationActions.js, getServiceBusNoticationSubscription()\",\n error.toString()\n );\n dispatch(logError(err));\n });\n };\n}\n\nexport const setIsConnectedStatus = (isConnected) => {\n return {\n type: types.SET_IS_CONNECTED,\n isConnected: isConnected\n };\n};\n","export const getServiceBusSubscriptionDetails = (state) =>\n state.deviceNotification.serviceBusSubscription;\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n deviceListNotificationUpdate,\n getServiceBusNoticationSubscription,\n} from \"./actions/deviceNotificationActions\";\nimport { updateDeviceData } from \"../deviceList/actions/deviceListActions\";\nimport { getServiceBusSubscriptionDetails } from \"../deviceNotifications/selectors/deviceNotificationSelectors\";\nimport * as signalR from \"@microsoft/signalr\";\n//import JSONPretty from \"react-json-pretty\";\nimport \"react-json-pretty/themes/monikai.css\";\nimport { getSelectedDevice } from \"../deviceList/selectors/deviceListSelector\";\nimport { FridgeInsightsDeviceNotificationsHub } from \"../configuration/config\";\nimport {\n updateDeviceTelemetryChartData,\n resetLiveDeviceTelemetryChart,\n} from \"../charts/actions/chartActions\";\nimport { resetDeviceIncidentList } from \"../incidents/actions/incidentActions\";\n\nclass DeviceNotificationSubscription extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n servicebusSubscription: {},\n connection: null,\n receivedData: [],\n alarms: [],\n events: [],\n incidents: [],\n filters: {\n includeData: true,\n includeAlarms: true,\n includeIncidents: true,\n },\n status: \"not connected to a device\",\n };\n }\n\n async componentDidUpdate(prevProps) {\n if (this.props.device !== prevProps.device) {\n if (this.state.connection) {\n const status = `disconnecting from ${prevProps.device.hardwareId}`;\n this.setState({ status: status });\n\n await this.closeExistingSubscriptionStream();\n }\n\n await this.getSubscriptionDetails();\n await this.setUpSignalRConnection();\n\n this.startSubscriptionStream();\n }\n }\n\n async getSubscriptionDetails() {\n this.props.getServiceBusNoticationSubscription(\n this.props.device.hardwareId,\n this.state.filters\n );\n }\n\n async setUpSignalRConnection() {\n const status = `connecting to ${this.props.device.hardwareId}`;\n this.setState({ status: status });\n\n const protocol = new signalR.JsonHubProtocol();\n\n this.setState({\n connection: new signalR.HubConnectionBuilder()\n .withUrl(FridgeInsightsDeviceNotificationsHub)\n .withHubProtocol(protocol)\n .build(),\n });\n }\n\n async closeExistingSubscriptionStream() {\n //this.props.resetLiveDeviceTelemetryChart();\n this.props.resetDeviceIncidentList();\n console.log(\"Stopping existing subscription stream\");\n const json = JSON.stringify(this.props.servicebusSubscription);\n await this.state.connection.invoke(\"StopSubscriptionStream\", json);\n await this.setState({ receivedData: [] });\n }\n\n /*\nstartSubscriptionStream = () => {\n const { connection, servicebusSubscription } = this.state;\n\n if (connection.state !== signalR.HubConnectionState.Disconnected) {\n console.error(\"Cannot start a HubConnection that is not in the 'Disconnected' state\");\n return;\n }\n\n return connection.start()\n .then(() => {\n console.log(\"Connection established\");\n const status = `connection established to ${this.props.device.hardwareId}`;\n this.setState({ status: status });\n\n const json = JSON.stringify(servicebusSubscription);\n return connection.invoke(\"StartSubscriptionStream\", json)\n .then(() => {\n console.log(\"Subscription stream started successfully\");\n connection.on(\"data\", this.dataNotification.bind(this));\n connection.on(\"alarm\", this.alarmNotification.bind(this));\n connection.on(\"event\", this.eventNotification.bind(this));\n connection.on(\"incident\", this.incidentNotification.bind(this));\n });\n })\n .catch((err) => {\n console.error(\"Error starting subscription stream: \", err);\n this.props.setIsConnectedStatus(false);\n });\n };\n */\n startSubscriptionStream() {\n this.state.connection\n .start()\n .then((data) => {\n console.log(\"Connection established\");\n const status = `connection established to ${this.props.device.hardwareId}`;\n this.setState({ status: status });\n\n const json = JSON.stringify(this.props.servicebusSubscription);\n this.state.connection\n .invoke(\"StartSubscriptionStream\", json)\n .then(() => {\n this.state.connection.on(\"data\", this.dataNotification.bind(this));\n this.state.connection.on(\n \"alarm\",\n this.alarmNotification.bind(this)\n );\n this.state.connection.on(\n \"event\",\n this.eventNotification.bind(this)\n );\n this.state.connection.on(\n \"incident\",\n this.incidentNotification.bind(this)\n );\n });\n })\n .catch((err) => console.error(err, \"red\"));\n }\n\n\n dataNotification(data) {\n // console.log(\"DATA NOTIFICATION\");\n // console.log(data);\n const deviceData = JSON.parse(data);\n this.props.updateDeviceTelemetryChartData(deviceData);\n this.props.updateDeviceData(deviceData);\n\n this.setState({\n receivedData: [...this.state.receivedData, deviceData],\n status: `receiving data from ${this.props.device.hardwareId}`,\n });\n }\n\n alarmNotification(data) {\n // console.log(\"ALARM NOTIFICATION\");\n // console.log(data);\n this.setState({\n receivedData: [...this.state.alarms, JSON.parse(data)],\n });\n }\n\n eventNotification(data) {\n // console.log(\"EVENT NOTIFICATION\");\n // console.log(data);\n this.setState({\n receivedData: [...this.state.events, JSON.parse(data)],\n });\n }\n\n incidentNotification(data) {\n // console.log(\"INCIDENT NOTIFICATION\");\n // console.log(data);\n this.setState({\n receivedData: [...this.state.incidents, JSON.parse(data)],\n });\n }\n\n render() {\n return (\n //<>\n // USEFUL DEBUGGING DATA\n
\n Current Status: {this.state.status}\n {/*
\n

Device Notifications Hub Url

\n \n
*/}\n {/*
\n

Service Bus Subscription

\n \n
*/}\n {/*
\n

Alarms

\n \n
\n
\n

Events

\n \n
\n
\n

Incidents

\n \n
*/}\n {/*
\n

Data

\n \n
*/}\n
\n );\n }\n}\n\nfunction mapStateToProps(state, ownProps) {\n return {\n servicebusSubscription: getServiceBusSubscriptionDetails(state),\n device: getSelectedDevice(state),\n };\n}\n\nconst mapDispatchToProps = {\n deviceListNotificationUpdate,\n getServiceBusNoticationSubscription,\n updateDeviceData,\n updateDeviceTelemetryChartData,\n resetLiveDeviceTelemetryChart,\n resetDeviceIncidentList,\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(DeviceNotificationSubscription);\n","import * as types from \"../../common/state/actionTypes\";\n\nexport const updateDeviceTelemetryChartData = (deviceData) => {\n return { type: types.DEVICE_TELEMETRY_DATA_UPDATE, deviceData };\n};\n\nexport const resetLiveDeviceTelemetryChart = () => {\n return { type: types.RESET_LIVE_DEVICE_TELEMETRY_DATA };\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport Chart from 'react-apexcharts';\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport { chartColours } from \"./chartColours\";\n\nfunction CustomChartLayout({ options, series, onHover }) {\n const chartRef = useRef(null);\n const tooltipRef = useRef(null);\n const [tooltipData, setTooltipData] = useState(null);\n\n\t// Calculate the maximum value from the series data\n const maxValue = Math.max(\n ...series.flatMap(serie => serie.data.map(point => point.y))\n );\n\n const minValue = Math.min(\n\t\t...series.flatMap(serie => serie.data.map(point => point.y))\n\t);\n\n\n\tuseEffect(() => {\n\t\t\tsetTooltipData({\n\t\t\ttime: '--:--',\n\t\t\tdataset: [\n\t\t\t],\n\t\t\tdefault: \"Please hover over a data point to see more information.\"\n\t\t\t});\n\t}, []);\n\n// Define the event handler in the options object\n\tvar customOptions = {\n\t\t...options,\n//\t\tyaxis: {\n// ...options.yaxis,\n// max: maxValue + 1,\n// },\n\t\ttooltip: {\n\t\t\tenabled: true,\n\t\t\tintersect: true,\n\t\t\tshared: false,\n\t\t},\n\t\tmarkers: {\n\t\t\tsize: 4,\n\t\t},\n\t\tchart: {\n\t\t\t...options.chart,\n\n\t\t\tevents: {\n\t\t\t\tdataPointMouseEnter: (event, chartContext, { seriesIndex, dataPointIndex }) => {\n\t\t\t\t\tconst data = chartContext.w.config.series[seriesIndex].data[dataPointIndex];\n\t\t\t\t\tconst xValue = data.x;\n\t\t\t\t\tconst allDataPoints = chartContext.w.config.series.map(series => series.data.find(point => point.x === xValue));\n\t\t\t\t\tconst labels = chartContext.w.config.series.map(series => series.name);\n\t\t\t\t\tlet formattedData = {\n\t\t\t\t\t\t\ttime: xValue,\n\t\t\t\t\t\t\tdataset: [],\n\t\t\t\t\t};\n\n\t\t\t\t\tformattedData.dataset = allDataPoints.map((point, index) => ({\n\t\t\t\t\t\t\tlabel: labels[index],\n\t\t\t\t\t\t\tvalue: point.y\n\t\t\t\t\t}));\n\n\t\t\t\t\tsetTooltipData(formattedData);\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t};\n\n\n//\tcustomOptions.max = maxValue + 1;\n//\tcustomOptions.min = 2;\n\tconst jf = 0;\n\n\n return (\n
\n
\n \n
\n
\n {tooltipData && (\n
\n
\n

{tooltipData.time}

\n
\n\t\t\t\t\t {tooltipData.dataset.length ? (\n
\n\t\t\t\t\t\t\t {tooltipData.dataset.map((data, index) => (\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t

{data.label}:

\n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t

{data.value} 

\n\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t
\n ))}\n
\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

{tooltipData.default}

\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t)}\n
\n )}\n
\n
\n );\n}\n\nexport default CustomChartLayout;\n","import React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { getTelemetrySeriesData } from \"./selectors/deviceTelemetryChartDataSelector\";\r\nimport CustomChartLayout from \"./CustomChartLayout\";\r\n//import ApexCharts from \"apexcharts\";\r\nimport { getSelectedDevice } from \"../deviceList/selectors/deviceListSelector\";\r\nimport { isEmpty } from \"../utils/generalUtils\";\r\nimport { chartColours } from \"./chartColours\";\r\nimport JSONPretty from \"react-json-pretty\";\r\n\r\nclass DeviceTelemetryChart extends Component {\r\n getYaxis(seriesData) {\r\n var bDoorAdded = false;\r\n var bTempAdded = false;\r\n\r\n const doorSeries = {\r\n opposite: true,\r\n seriesName: \"Door - Fridge\",\r\n tickAmount: 1,\r\n decimalsInFloat: 1,\r\n min: -0.1,\r\n max: 1.1,\r\n title: {\r\n text: \"Door / Compressor\",\r\n },\r\n show: true,\r\n showAlways: true,\r\n };\r\n\r\n const sharedDoorSeries = {\r\n opposite: true,\r\n decimalsInFloat: 0,\r\n min: -0.1,\r\n max: 1.1,\r\n seriesName: \"Door - Fridge\",\r\n title: {\r\n text: \"Door - Magnet\",\r\n },\r\n show: false,\r\n };\r\n\r\n\r\n const tempProdSeries = {\r\n seriesName: \"Temperature - Product\",\r\n tickAmount: 4,\r\n show: true,\r\n showAlways: true,\r\n decimalsInFloat: 2,\r\n min: 0.0,\r\n title: {\r\n text: \"Temperature / Voltage\",\r\n },\r\n };\r\n\r\n const yAxis = seriesData.map((s) => {\r\n switch (s.name) {\r\n case \"Door - Magnet\":\r\n if (bDoorAdded) {\r\n return sharedDoorSeries;\r\n } else {\r\n bDoorAdded = true;\r\n\r\n return doorSeries;\r\n }\r\n case \"Temperature - Product\":\r\n return tempProdSeries;\r\n case \"Voltage - Main\":\r\n case \"Voltage - Main(Out)\":\r\n case \"Voltage - Battery\":\r\n case \"Temperature - Device Chip\":\r\n case \"Temperature - Fridge\":\r\n case \"Temperature - Air\": {\r\n const sharedTempSeries = {\r\n seriesName: \"Temperature - Product\",\r\n show: false,\r\n min: 0.0,\r\n };\r\n return sharedTempSeries;\r\n }\r\n case \"Compressor\" :\r\n case \"Door - Fridge\": {\r\n if (bDoorAdded) {\r\n return sharedDoorSeries;\r\n } else {\r\n bDoorAdded = true;\r\n\r\n return doorSeries;\r\n }\r\n }\r\n default: {\r\n const series = {\r\n seriesName: s.name,\r\n show: false,\r\n min: 0.0,\r\n };\r\n\r\n return series;\r\n }\r\n }\r\n });\r\n\r\n return yAxis;\r\n }\r\n\r\n getOptions(seriesData) {\r\n const yAxis = this.getYaxis(seriesData);\r\n\r\n const jf = 1;\r\n \r\n\r\n const options = {\r\n id: \"telemetryChart\",\r\n height: 750,\r\n type: \"line\",\r\n zoom: {\r\n enabled: false,\r\n },\r\n colors: chartColours,\r\n // markers: {\r\n // size: [0, 0, 2, 2, 2, 2, 5, 10],\r\n // },\r\n animations: {\r\n enabled: false,\r\n easing: \"linear\",\r\n speed: 1000,\r\n animateGradually: {\r\n enabled: false,\r\n //delay: 150,\r\n },\r\n dynamicAnimation: {\r\n enabled: false,\r\n speed: 1000,\r\n },\r\n },\r\n dataLabels: {\r\n enabled: false,\r\n },\r\n stroke: {\r\n curve: \"straight\",\r\n lineCap: \"round\",\r\n width: [1, 1, 1],\r\n },\r\n title: {\r\n text: \"Device Telemetry\",\r\n align: \"left\",\r\n },\r\n grid: {\r\n row: {\r\n colors: [\"#f3f3f3\", \"transparent\"], // takes an array which will be repeated on columns\r\n opacity: 0.5,\r\n },\r\n },\r\n yaxis: yAxis.length > 0 ? yAxis : [],\r\n xaxis: {\r\n type: \"time\",\r\n labels: {\r\n format: \"HH:mm\",\r\n },\r\n title: {\r\n text: \"Time\",\r\n },\r\n },\r\n };\r\n\r\n return options;\r\n }\r\n\r\n componentDidUpdate() {\r\n // console.log(\"Device Telemetry Chart, componentDidUpdate\");\r\n // console.log(this.props.seriesData);\r\n // if (this.props.seriesData.length > 0)\r\n // ApexCharts.exec(\r\n // \"telemetryChart\",\r\n // \"hideSeries\",\r\n // \"Temperature - Device Chip\"\r\n // );\r\n }\r\n\r\n render() {\r\n let device = \"No Device Selected\";\r\n if (!isEmpty(this.props.device)) {\r\n device = this.props.device.name;\r\n }\r\n let options = [];\r\n options = this.getOptions(this.props.seriesData);\r\n\r\n\r\n\r\n return (\r\n
\r\n

{device}

\r\n \r\n {/* // Debug info */}\r\n {/*

Debug Info

\r\n

this.props.seriesData

\r\n
{JSON.stringify(this.props.seriesData)}
\r\n

seriesData

\r\n
\r\n \r\n
\r\n

options

\r\n \r\n
{JSON.stringify(options)}
*/}\r\n
\r\n );\r\n }\r\n}\r\n\r\nDeviceTelemetryChart.defaultProps = {\r\n seriesData: [],\r\n device: {},\r\n};\r\n\r\nfunction mapStateToProps(state, ownProps) {\r\n const device = getSelectedDevice(state);\r\n const seriesData = getTelemetrySeriesData(state, device.hardwareId);\r\n\r\n return {\r\n seriesData: seriesData,\r\n device: device,\r\n };\r\n}\r\nexport default connect(mapStateToProps, null)(DeviceTelemetryChart);\r\n","export const getDeviceIncident = (state, deviceId) => {\n const filtered = state.incidentDetails.filter((i) => i.deviceId === deviceId);\n\n if (filtered.length > 0) return filtered[0];\n\n return {};\n};\n\nexport default getDeviceIncident;\n\nexport const getIncidentList = (state) => state.incidentList;\n\nexport const getDeviceIncidentAlarmList = (state, incident) => {\n const filtered = state.incidentAlarmList.filter(\n (inc) => inc.incident === incident\n );\n if (filtered.length > 0) return filtered[0].alarms;\n\n return [];\n};\n\nexport const getTokenForMoreIncidents = (state) => {\n let token = \"\";\n if (state.incidentList.length > 0) {\n token = state.incidentList[state.incidentList.length - 1].token;\n }\n\n return token;\n};\n\nexport const getIncidentReportDropdownOptions = (state) => {\n // TODO: hook up to api etc\n\n // const reportOptions = [\n // {\n // value: 1,\n // label: \"Post Voltage Excursion (Product Temp)\",\n // },\n // {\n // value: 2,\n // label: \"Post Voltage Excursion (Fridge + Product Temp)\",\n // },\n // {\n // value: 3,\n // label: \"Post Door Open Event\",\n // },\n // ];\n\n let reportOptions = [];\n reportOptions = state.incidentReportDropdownList;\n\n return reportOptions;\n};\n","import React, { Component } from \"react\";\nimport {\n loadDeviceIncidentAlarmList,\n acknowledgIncidentAlarm,\n} from \"./actions/incidentActions\";\nimport { connect } from \"react-redux\";\nimport { getDeviceIncidentAlarmList } from \"./selectors/deviceIncidentSelector\";\nimport Table from \"react-bootstrap/Table\";\nimport { formatDate } from \"../utils/dateUtils\";\nimport Button from \"react-bootstrap/Button\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCheckCircle } from \"@fortawesome/free-solid-svg-icons\";\n\nclass DeviceIncidentAlarmList extends Component {\n constructor(props) {\n super(props);\n\n this.acknowledgeAlarm = this.acknowledgeAlarm.bind(this);\n }\n componentDidMount() {\n this.props.loadDeviceIncidentAlarmList(\n this.props.deviceId,\n this.props.incident\n );\n }\n\n acknowledgeAlarm(alarmId) {\n this.props\n .acknowledgIncidentAlarm(\n this.props.incident,\n alarmId,\n this.props.deviceId\n )\n .then(() => {\n this.props.loadDeviceIncidentAlarmList(\n this.props.deviceId,\n this.props.incident\n );\n });\n }\n\n render() {\n return (\n
\n {/*

DeviceIncidentAlarmList

\n {JSON.stringify(this.props.incidentAlarmList)} */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {this.props.incidentAlarmList.map((alarm, key) => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n })}\n \n
Alarm StatusAlarmIdAlarm NameActivated DateResolved DateAcknowledged ByAcknowledged Date
{alarm.alarmStatus}{alarm.alarmId}{alarm.alarmName}{formatDate(alarm.activatedDate)}{formatDate(alarm.resolvedDate)}{alarm.acknowledgedBy}{formatDate(alarm.acknowledgedTime)}\n {alarm.alarmStatus === \"Active\" &&\n alarm.acknowledgedBy === null && (\n this.acknowledgeAlarm(alarm.alarmId)}\n >\n \n \n )}\n
\n
\n );\n }\n}\n\nDeviceIncidentAlarmList.defaultProps = {\n incidentAlarmList: [],\n incident: \"\",\n};\n\nfunction mapStateToProps(state, ownProps) {\n const incident = ownProps.incident;\n return {\n incidentAlarmList: getDeviceIncidentAlarmList(state, incident),\n };\n}\n\nconst mapDispatchToProps = {\n loadDeviceIncidentAlarmList,\n acknowledgIncidentAlarm,\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(DeviceIncidentAlarmList);\n","import {\n callFridgeInsightsApiGet,\n callAdminApiPost,\n callAdminApiGet,\n} from \"../../api/apiUtils\";\n\nimport {\n FridgeInsightsCustomerApi,\n FridgeInsightsDeviceApi,\n} from \"../../configuration/config\";\nimport authService from \"../../api-authorization/AuthorizeService\";\n\n// Azure API\nexport async function getActiveCustomerIncidents() {\n // TODO:\n // const token = await authService.getAccessToken();\n // todo get customer stuff from login auth\n const customer = \"INSERVIO\";\n const url = `${FridgeInsightsCustomerApi}/${customer}/incidents/active`;\n\n return callFridgeInsightsApiGet(url);\n}\n\n// Azure API\n// API - TAKES EITHER THE INCIDENT ID or 'last'\nexport async function getDeviceIncident(deviceId, incidentId) {\n const url = `${FridgeInsightsDeviceApi}/${deviceId}/incidents/${incidentId}`;\n\n return callFridgeInsightsApiGet(url);\n}\n\n// Sql Server\nexport async function getDeviceIncidentList(deviceId, recordsPerPage, token) {\n const url = \"api/incident/list\";\n const data = {\n DeviceId: deviceId,\n RecordsPerPage: recordsPerPage,\n Token: token,\n };\n\n return callAdminApiPost(url, data);\n}\n\nexport async function getDeviceIncidentAlarmList(deviceId, incident) {\n const url = `api/incident/alarmlist/${deviceId}/${incident}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function submitDeviceIncidentReportRequest(reportParams) {\n const url = \"api/incident/reportrequest\";\n\n return callAdminApiPost(url, reportParams);\n}\n\nexport async function getIncidentReportDropdownList() {\n const url = `api/incident/reportdropdown`;\n return callAdminApiGet(url);\n}\n\nexport async function acknowledgeAlarm(incidentAlarmId, deviceId) {\n const user = await authService.getUser();\n var incidentAckRequest = {\n IncidentAlarmId: incidentAlarmId,\n UserId: user.userId,\n AcknowledgeFlag: \"Y\",\n DeviceId: deviceId,\n };\n\n const url = \"api/incident/acknowledgealarm\";\n\n return callAdminApiPost(url, incidentAckRequest);\n}\n","import React, { Component } from \"react\";\nimport {\n loadDeviceIncidentList,\n submitDeviceIncidentReportRequest,\n loadIncidentReportDropdownList,\n} from \"./actions/incidentActions\";\nimport { connect } from \"react-redux\";\nimport {\n getIncidentList,\n getTokenForMoreIncidents,\n getIncidentReportDropdownOptions,\n} from \"./selectors/deviceIncidentSelector\";\nimport ToolkitProvider from \"react-bootstrap-table2-toolkit\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport cellEditFactory, { Type } from \"react-bootstrap-table2-editor\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport DeviceIncidentAlarmList from \"./DeviceIncidentAlarmList\";\nimport { getSelectedDevice } from \"../deviceList/selectors/deviceListSelector\";\nimport Button from \"react-bootstrap/Button\";\nimport { formatDate, formatDateIgnoreOffset } from \"../utils/dateUtils\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faPlus, faMinus, faEdit } from \"@fortawesome/free-solid-svg-icons\";\nimport { toast } from \"react-toastify\";\nimport \"react-toastify/dist/ReactToastify.css\";\nimport \"./Incidents.css\";\nimport { ListGroup, ListGroupItem } from \"react-bootstrap\";\nimport Select from \"react-select\";\nimport { InlineInputEdit } from \"react-inline-input-edit\";\nimport JSONPretty from \"react-json-pretty\";\n\nconst defaultSorted = [\n {\n dataField: \"name\",\n order: \"asc\",\n },\n];\n\nclass DeviceIncidentList extends Component {\n constructor(props) {\n super(props);\n const mobileIncidentMap = new Map();\n\n this.state = {\n mobileIncidentMap: mobileIncidentMap,\n columns: [\n {\n dataField: \"sortOrder\",\n text: \"Sort Order\",\n hidden: true,\n editable: false,\n },\n {\n dataField: \"incident\",\n text: \"Incident\",\n hidden: true,\n editable: false,\n },\n {\n dataField: \"activatedDate\",\n text: \"Incident Activated\",\n formatter: this.dateFormatter,\n editable: false,\n },\n {\n dataField: \"resolvedDate\",\n text: \"Incident Resolved\",\n formatter: this.dateFormatter,\n editable: false,\n },\n {\n dataField: \"incidentStatus\",\n text: \"Status\",\n editable: false,\n headerStyle: (colum, colIndex) => {\n return { width: \"80px\" };\n },\n },\n {\n dataField: \"customerReportId\",\n text: \"Report\",\n hidden: false,\n editable: true,\n formatter: (cell, row) => {\n // console.log(\"customerReportId formatter\");\n if (\n this.props.reportDropdownOptions &&\n this.props.reportDropdownOptions.length > 0 &&\n cell !== null\n ) {\n // console.log(this.props.reportDropdownOptions);\n // console.log(cell);\n return this.props.reportDropdownOptions.find((x) => {\n return x.value.toString() === cell.toString();\n }).label;\n }\n return \"\";\n },\n editor: {\n type: Type.SELECT,\n getOptions: (setOptions, { row, column }) => {\n return this.props.reportDropdownOptions;\n },\n },\n },\n {\n dataField: \"reportStartDate\",\n text: \"Report Start Time\",\n hidden: true,\n },\n {\n dataField: \"reportStartDateNoOffset\",\n text: \"Report Start Time\",\n formatter: this.dateFormatter,\n },\n {\n dataField: \"reportStartDateOffset\",\n text: \"reportStartDateOffset\",\n hidden: true,\n },\n {\n dataField: \"reportEndDate\",\n text: \"Report End Time\",\n hidden: true,\n },\n {\n dataField: \"reportEndDateNoOffset\",\n text: \"Report End Time\",\n formatter: this.dateFormatter,\n },\n {\n dataField: \"reportEndDateOffset\",\n text: \"reportEndDateOffset\",\n hidden: true,\n },\n {\n dataField: \"token\",\n text: \"Token\",\n hidden: true,\n editable: false,\n },\n {\n dataField: \"submitReport\",\n text: \"\",\n hidden: false,\n editable: false,\n formatter: this.submitReportFormatter,\n headerStyle: (colum, colIndex) => {\n return { width: \"60px\" };\n },\n events: {\n onClick: (e, column, columnIndex, row, rowIndex) => {\n this.submitReport(row);\n },\n },\n },\n ],\n reportDropdownOptions: [],\n incidentsMobile: [],\n };\n\n this.submitReport = this.submitReport.bind(this);\n this.submitReportNotify = this.submitReportNotify.bind(this);\n this.showIncidentDetails = this.showIncidentDetails.bind(this);\n\n this.mobileStartDateHandleFocus =\n this.mobileStartDateHandleFocus.bind(this);\n this.mobileEndDateHandleFocusOut =\n this.mobileEndDateHandleFocusOut.bind(this);\n }\n componentDidMount() {\n this.props.loadIncidentReportDropdownList();\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.device !== prevProps.device) {\n this.loadDeviceIncidentList();\n }\n }\n\n getIncidentReportDropdownOptions() {\n return this.props.reportDropdownOptions;\n }\n\n loadDeviceIncidentList() {\n this.props.loadDeviceIncidentList(\n this.props.device.id,\n this.props.recordsPerPage,\n this.props.token\n );\n }\n loadMoreIncidents() {\n this.loadDeviceIncidentList();\n }\n\n dateFormatter(cell) {\n return {formatDate(cell)};\n }\n\n dateFormatterIgnorOffset(cell) {\n return {formatDateIgnoreOffset(cell)};\n }\n\n reportFormatter(cell) {\n //console.log(\"reportFormatter, cell:\" + cell);\n }\n\n submitReportNotify() {\n toast.success(\n \"Your report has been scheduled and will be delivered by email in the next 15 minutes.\",\n {\n hideProgressBar: true,\n autoClose: 10000,\n }\n );\n }\n\n submitReport(row) {\n const reportParams = {\n ReportId: parseInt(row.customerReportId),\n DeviceId: this.props.device.id,\n StartTime: row.reportStartDateNoOffset,\n EndTime: row.reportEndDateNoOffset,\n Offset: row.reportStartDateOffset,\n };\n\n this.props.submitDeviceIncidentReportRequest(reportParams);\n this.submitReportNotify();\n }\n\n submitReportFormatter(cell, row) {\n return (\n
\n \n
\n );\n }\n\n afterSaveCell(row, column, rowIndex, columnIndex) {\n //console.log(\"afterSaveCell, rowIndex:\" + rowIndex);\n }\n\n showIncidentDetails(incident) {\n let incidentMap = this.state.mobileIncidentMap;\n if (incidentMap.get(incident) === undefined) {\n incidentMap.set(incident, true);\n } else {\n incidentMap.delete(incident);\n }\n\n this.setState({ mobileIncidentMap: incidentMap });\n }\n\n renderMobileReportSelect(reportName) {\n let select = \"\";\n\n if (reportName.length > 0) {\n if (\n this.props.reportDropdownOptions &&\n this.props.reportDropdownOptions.length > 0\n ) {\n let defaultValue = -1;\n let options = this.props.reportDropdownOptions;\n\n if (reportName.length > 0)\n defaultValue = this.props.reportDropdownOptions.findIndex(\n (x) => x.label === reportName\n );\n\n select = (\n \n\n {this.props.errors.availabilityId && (\n
{this.props.errors.availabilityId}
\n )}\n \n \n );\n }\n}\n\nAlarmContactEmail.defaultProps = {\n availabilitySchedule: [],\n};\n\nfunction mapStateToProps(state) {\n return {\n availabilitySchedule: getAvailabilitySchedule(state),\n };\n}\nexport default connect(mapStateToProps, null)(AlarmContactEmail);\n","import React, { Component } from \"react\";\nimport Form from \"react-bootstrap/Form\";\nimport { connect } from \"react-redux\";\nimport { getAvailabilitySchedule } from \"./selectors/alarmContactSelector\";\nimport Col from \"react-bootstrap/Col\";\nimport Row from \"react-bootstrap/Row\";\nimport Check from \"react-bootstrap/FormCheck\";\nimport \"./DeviceConfig.css\";\n\nclass AlarmContactPhone extends Component {\n constructor(props) {\n super(props);\n this.state = {\n initialSelectedValue: {},\n };\n this.updatePhoneAvailability = this.updatePhoneAvailability.bind(this);\n this.updateSms = this.updateSms.bind(this);\n this.updateVoiceMessage = this.updateVoiceMessage.bind(this);\n }\n\n componentDidMount() {\n if (\n this.props.availabilitySchedule.length > 0 &&\n this.props.availabilityId === -1\n ) {\n this.props.updatePhoneAvailability(\n this.props.availabilitySchedule[0].availabilityScheduleId,\n this.props.id\n );\n }\n }\n\n updatePhone(e) {\n this.props.updatePhone(e, this.props.id);\n }\n\n updatePhoneAvailability(e) {\n this.props.updatePhoneAvailability(e.target.value, this.props.id);\n }\n\n updateSms(e) {\n let smsFlag = \"N\";\n if (e.target.checked === true) {\n smsFlag = \"Y\";\n }\n\n this.props.updateSms(smsFlag, this.props.id);\n }\n\n updateVoiceMessage(e) {\n let voice = \"N\";\n if (e.target.checked === true) {\n voice = \"Y\";\n }\n\n this.props.updateVoiceMessage(voice, this.props.id);\n }\n\n render() {\n return (\n <>\n \n
\n Phone:\n \n this.updatePhone(e)}\n isInvalid={!!this.props.errors.phoneNumber}\n >\n \n {this.props.errors.phoneNumber}\n \n \n Availability\n \n \n {this.props.availabilitySchedule.map((item, index) => {\n return (\n \n );\n })}\n \n\n {this.props.errors.availabilityId && (\n
{this.props.errors.availabilityId}
\n )}\n \n
\n \n \n \n \n \n \n \n );\n }\n}\n\nAlarmContactPhone.defaultProps = {\n availabilitySchedule: [],\n availabilityId: -1,\n initialSelectedValue: {},\n};\n\nfunction mapStateToProps(state, ownProps) {\n const availabilitySchedule = getAvailabilitySchedule(state);\n\n if (availabilitySchedule.length > 0) {\n const selected = availabilitySchedule[0];\n if (ownProps.availabilityId === -1) {\n ownProps.initialSelectedValue = {\n value: selected.availabilityId,\n label: selected.description,\n };\n }\n }\n\n return {\n availabilitySchedule: availabilitySchedule,\n };\n}\nexport default connect(mapStateToProps, null)(AlarmContactPhone);\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n loadTimezones,\n loadAvailabilitySchedule,\n upsertContact,\n} from \"./actions/alarmConfigActions\";\nimport {\n getTimezones,\n getAvailabilitySchedule,\n} from \"./selectors/alarmContactSelector\";\nimport Form from \"react-bootstrap/Form\";\nimport Col from \"react-bootstrap/Col\";\nimport Row from \"react-bootstrap/Row\";\nimport Button from \"react-bootstrap/Button\";\nimport \"./DeviceConfig.css\";\nimport AlarmContactEmail from \"./AlarmContactEmail\";\nimport AlarmContactPhone from \"./AlarmContactPhone\";\nclass AlarmContact extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n forceChildControlsReRender: 0, // not ideal but makes validation easier on child components - TODO put validation in redux\n contactId: this.props.contactEditing.contactId,\n contactName: this.props.contactEditing.contactName,\n timezoneId: this.props.contactEditing.timezoneId,\n alarmContactUpdate: {},\n emailContacts: this.props.contactEditing.emailContacts,\n phoneContacts: this.props.contactEditing.phoneContacts,\n errors: {},\n };\n this.saveContact = this.saveContact.bind(this);\n this.updateTimezone = this.updateTimezone.bind(this);\n this.updateEmailAvailability = this.updateEmailAvailability.bind(this);\n this.updatePhoneAvailability = this.updatePhoneAvailability.bind(this);\n this.updateSms = this.updateSms.bind(this);\n this.updateVoiceMessage = this.updateVoiceMessage.bind(this);\n this.handleEmailChanged = this.handleEmailChanged.bind(this);\n this.updatePhone = this.updatePhone.bind(this);\n this.closeAddContact = this.closeAddContact.bind(this);\n }\n\n componentDidMount() {\n this.props.loadTimezones();\n this.props.loadAvailabilitySchedule();\n }\n\n updateContactName(e) {\n this.setState({ contactName: e.target.value });\n }\n\n updateTimezone(e) {\n let timezoneId = null;\n timezoneId = e.target.value;\n this.setState({ timezoneId: timezoneId });\n }\n\n updateEmail(e) {\n this.setState({ email: e.target.value });\n }\n\n updateEmailAvailability(availabilityId, id) {\n let emails = this.state.emailContacts;\n let index = emails.findIndex((e) => {\n return e.id === id;\n });\n if (index > -1) {\n emails[index].availabilityId = availabilityId;\n this.setState({ emailContacts: emails });\n }\n }\n\n getPhonesIndexFromId(id) {\n let index = -1;\n\n let phones = this.state.phoneContacts;\n index = phones.findIndex((p) => {\n return p.id === id;\n });\n\n return index;\n }\n\n getEmailIndexFromId(id) {\n let index = -1;\n\n let emails = this.state.emailContacts;\n index = emails.findIndex((e) => {\n return e.id === id;\n });\n\n return index;\n }\n\n updatePhone(e, id) {\n let phones = this.state.phoneContacts;\n const index = this.getPhonesIndexFromId(id);\n\n if (index > -1) {\n phones[index].phoneNumber = e.target.value;\n this.setState({ phoneContacts: phones });\n }\n }\n\n updatePhoneAvailability(availabilityId, id) {\n let phones = this.state.phoneContacts;\n const index = this.getPhonesIndexFromId(id);\n\n if (index > -1) {\n phones[index].availabilityId = availabilityId;\n this.setState({ phoneContacts: phones });\n }\n }\n\n updateSms(smsFlag, id) {\n let phones = this.state.phoneContacts;\n const index = this.getPhonesIndexFromId(id);\n\n if (index > -1) {\n phones[index].smsFlag = smsFlag;\n this.setState({ phoneContacts: phones });\n }\n }\n\n updateVoiceMessage(voiceFlag, id) {\n let phones = this.state.phoneContacts;\n const index = this.getPhonesIndexFromId(id);\n\n if (index > -1) {\n phones[index].voiceFlag = voiceFlag;\n this.setState({ phoneContacts: phones });\n }\n }\n\n handleEmailChanged(e, id) {\n let emails = this.state.emailContacts;\n const index = this.getEmailIndexFromId(id);\n\n if (index > -1) {\n emails[index].email = e.target.value;\n this.setState({ emailContacts: emails });\n }\n }\n\n addAlarmContactEmailComponent() {\n let components = this.state.emailContacts;\n components.push({\n id: this.state.emailContacts.length,\n email: \"\",\n availabilityId: -1,\n errors: {\n email: \"\",\n availabilityId: \"\",\n },\n });\n\n this.setState({ emailContacts: components });\n }\n\n addAlarmContactPhoneComponent() {\n let components = this.state.phoneContacts;\n components.push({\n id: this.state.phoneContacts.length,\n phoneNumber: \"\",\n availabilityId: -1,\n smsFlag: \"N\",\n voiceFlag: \"N\",\n errors: {\n phoneNumber: \"\",\n availabilityId: \"\",\n },\n });\n\n this.setState({ phoneContacts: components });\n }\n\n saveContact() {\n this.setState({ erors: {} });\n const newErrors = this.validateInput();\n\n if (Object.keys(newErrors).length > 0) {\n this.setState({ errors: newErrors });\n return;\n }\n\n let emails = [];\n\n this.state.emailContacts.forEach((e) => {\n const alarmContactEmail = {\n contactId: this.state.contactId,\n email: e.email,\n availabilityScheduleId: e.availabilityId,\n contactEmailId: this.state.contactId === -1 ? -1 : e.id,\n };\n\n emails.push(alarmContactEmail);\n });\n\n let phoneNos = [];\n\n this.state.phoneContacts.forEach((p) => {\n const alarmContactPhone = {\n contactId: this.state.contactid,\n phoneNumber: p.phoneNumber,\n availabilityScheduleId: p.availabilityId,\n smsFlag: p.smsFlag,\n voiceFlag: p.voiceFlag,\n contactPhoneId: this.state.contactId === -1 ? -1 : p.id,\n };\n\n phoneNos.push(alarmContactPhone);\n });\n\n const alarmContactUpdate = {\n alarmContact: {\n contactId: this.state.contactId,\n name: this.state.contactName,\n customerId: -1,\n timezoneId: this.state.timezoneId,\n },\n emails: emails,\n phoneNumbers: phoneNos,\n };\n\n this.setState({ alarmContactUpdate: alarmContactUpdate });\n\n this.props.upsertContact(alarmContactUpdate).then((newContactId) => {\n this.closeAddContact();\n this.props.addNewContact(newContactId);\n });\n }\n\n validateInput() {\n const newErrors = {};\n\n if (this.state.contactName === \"\") {\n newErrors.contactName = \"Please enter a name\";\n }\n\n if (this.state.timezoneId === null) {\n newErrors.timezoneId = \"Please choose a timezone\";\n }\n\n const emailsEntered = this.state.emailContacts.filter(\n (e) => e.email.length > 0\n ).length;\n\n const phonesEntered = this.state.phoneContacts.filter(\n (p) => p.phoneNumber.length > 0\n ).length;\n\n if (emailsEntered === 0 && phonesEntered === 0) {\n newErrors.missingEmailPhone =\n \"Please enter at least one email or one phone number\";\n }\n\n // let emails = this.state.emailContacts;\n // let emailErrors = 0;\n // emails.forEach((e) => {\n // if (e.email === \"\") {\n // e.errors.email = \"Please enter an email address\";\n // emailErrors++;\n // } else {\n // e.errors.email = \"\";\n // }\n\n // if (e.availabilityId === -1) {\n // e.errors.availabilityId = \"Please select availability\";\n // emailErrors++;\n // } else {\n // e.errors.availabilityId = \"\";\n // }\n // });\n\n // if (emailErrors > 0) {\n // newErrors.emailErrors = emailErrors;\n // }\n\n let phones = this.state.phoneContacts;\n let phoneErrors = 0;\n phones.forEach((p) => {\n if (\n p.phoneNumber.length > 0 &&\n !this.validatePhoneNumber(p.phoneNumber)\n ) {\n p.errors.phoneNumber =\n \"Please enter a phone number in interational format e.g. +614321123123\";\n phoneErrors++;\n } else {\n p.errors.phoneNumber = \"\";\n }\n\n if (p.availabilityId === -1) {\n p.errors.availabilityId = \"Please select availability\";\n phoneErrors++;\n } else {\n p.errors.availabilityId = \"\";\n }\n });\n\n if (phoneErrors > 0) {\n newErrors.phoneErrors = phoneErrors;\n }\n\n this.setState({\n // emailcontacts: emails,\n phoneContacts: phones,\n forceChildControlsReRender: this.state.forceChildControlsReRender + 1,\n });\n\n return newErrors;\n }\n\n validatePhoneNumber(phoneNo) {\n // starts with a '+'\n // numbers only\n // no spaces\n // no brackets\n let re = /^\\+\\d+$/;\n return re.test(phoneNo);\n }\n\n closeAddContact() {\n this.props.closeAddContact();\n }\n\n render() {\n return (\n
\n
\n \n Name:\n \n this.updateContactName(e)}\n isInvalid={!!this.state.errors.contactName}\n >\n \n {this.state.errors.contactName}\n \n \n \n \n Timezone:\n \n \n {this.props.timezones.map((item, index) => {\n return ;\n })}\n \n {this.state.errors.timezoneId && (\n
{this.state.errors.timezoneId}
\n )}\n \n
\n
\n \n {this.state.errors.missingEmailPhone}\n \n Email Address(es)\n {this.state.emailContacts.map((item) => {\n return (\n \n );\n })}\n \n \n \n \n this.addAlarmContactEmailComponent()}\n >\n +\n \n \n \n Phone Number(s)\n {this.state.phoneContacts.map((item) => {\n return (\n \n );\n })}\n \n \n \n \n this.addAlarmContactPhoneComponent()}\n >\n +\n \n \n \n \n \n \n \n this.closeAddContact()}\n >\n Cancel\n \n \n \n \n \n
\n );\n }\n}\n\nAlarmContact.defaultProps = {\n timezones: [],\n availabilitySchedule: [],\n};\n\nfunction mapStateToProps(state, ownProps) {\n return {\n timezones: getTimezones(state),\n availabilitySchedule: getAvailabilitySchedule(state),\n };\n}\n\nconst mapDispatchToProps = {\n loadTimezones,\n loadAvailabilitySchedule,\n upsertContact,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AlarmContact);\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n loadAlarmContacts,\n loadAvailableAlarmContacts,\n loadContact,\n addAlarmContact,\n deleteAlarmContact,\n getFullAlarmContact,\n addAlarmContactToAllAlarmsForDevice,\n removeAlarmContactToAllAlarmsForDevice,\n loadDeviceAlarmConfigList,\n} from \"./actions/alarmConfigActions\";\nimport {\n getAlarmContacts,\n getAvailableAlarmContacts,\n} from \"./selectors/alarmContactSelector\";\nimport Table from \"react-bootstrap/Table\";\nimport Button from \"react-bootstrap/Button\";\nimport Select from \"react-select\";\nimport AlarmContact from \"./AlarmContact\";\n\nclass AlarmContactConfiguration extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n forceChildControlReRender: 0, // TODO: not ideal needs better way of updating the control\n addContactToAllAlarmsClassname: \"add-contact-all-alarms-container-hide\",\n removeContactFromAllAlarmsClassname:\n \"remove-contact-all-alarms-container-hide\",\n showAvailableContacts: false,\n showAddEditContact: false,\n contactIdDeleted: null,\n contactEditing: {\n contactId: -1,\n contactName: \"\",\n timezoneId: null,\n alarmContactUpdate: {},\n emailContacts: [\n {\n id: 0,\n email: \"\",\n availabilityId: -1,\n errors: {\n email: \"\",\n availabilityId: \"\",\n },\n },\n ],\n phoneContacts: [\n {\n id: 0,\n phoneNumber: \"\",\n availabilityId: -1,\n smsFlag: \"N\",\n voiceFlag: \"N\",\n errors: {\n phoneNumber: \"\",\n availabilityId: \"\",\n },\n },\n ],\n errors: {},\n },\n selectedContactId: null,\n };\n\n this.multiselectRef = React.createRef();\n this.editContact = this.editContact.bind(this);\n this.removeContact = this.removeContact.bind(this);\n this.setSelectedContact = this.setSelectedContact.bind(this);\n this.addAlarmContact = this.addAlarmContact.bind(this);\n this.deleteAlarmContact = this.deleteAlarmContact.bind(this);\n //this.hideAddEditContact = this.showAddEditContact.bind(this);\n }\n\n componentDidMount() {\n this.props.loadAlarmContacts(this.props.alarmId);\n this.props.loadAvailableAlarmContacts(this.props.alarmId);\n }\n\n editContact(contactId) {\n this.props.getFullAlarmContact(contactId).then((c) => {\n let emails = [];\n c.emails.forEach((e) => {\n const email = {\n id: e.contactEmailId,\n email: e.email,\n availabilityId: e.availabilityScheduleId,\n errors: {\n email: \"\",\n availabilityId: \"\",\n },\n };\n\n emails.push(email);\n });\n\n let phones = [];\n c.phoneNumbers.forEach((p) => {\n const phone = {\n id: p.contactPhoneId,\n phoneNumber: p.phoneNumber,\n availabilityId: p.availabilityScheduleId,\n smsFlag: p.smsFlag,\n voiceFlag: p.voiceFlag,\n errors: {\n phoneNumber: \"\",\n availabilityId: \"\",\n },\n };\n\n phones.push(phone);\n });\n\n const contact = {\n contactId: c.alarmContact.contactId,\n contactName: c.alarmContact.name,\n timezoneId: c.alarmContact.timezoneId,\n emailContacts: emails,\n phoneContacts: phones,\n };\n\n this.setState({\n contactEditing: contact,\n forceChildControlReRender: this.state.forceChildControlReRender + 1,\n showAddEditContact: true,\n });\n });\n }\n removeContact(alarmId, contactId) {\n alert(`removeContact alarmId:${alarmId}, contactId:${contactId}`);\n }\n\n setSelectedContact(selectedOption) {\n let selectedContactId = null;\n if (selectedOption !== null) {\n selectedContactId = selectedOption.value;\n }\n\n this.setState({ selectedContactId: selectedContactId });\n }\n\n addNewContact(contactId) {\n if (contactId !== undefined) {\n this.setState({ selectedContactId: contactId });\n this.props.addAlarmContact(this.props.alarmId, contactId);\n this.setState({\n addContactToAllAlarmsClassname: \"add-contact-all-alarms-container-show\",\n });\n }\n }\n\n addAlarmContact() {\n if (this.state.selectedContactId !== null) {\n this.props.addAlarmContact(\n this.props.alarmId,\n this.state.selectedContactId\n );\n this.setState({\n addContactToAllAlarmsClassname: \"add-contact-all-alarms-container-show\",\n });\n }\n }\n\n deleteAlarmContact(alarmId, contactId) {\n this.props.deleteAlarmContact(alarmId, contactId).then(() => {\n this.props.loadAvailableAlarmContacts(alarmId);\n });\n this.setState({\n removeContactFromAllAlarmsClassname:\n \"remove-contact-all-alarms-container-show\",\n contactIdDeleted: contactId,\n });\n }\n\n showAvailableContacts() {\n this.setState({ showAvailableContacts: true });\n }\n\n hideAvailableContacts() {\n this.setState({ showAvailableContacts: false });\n }\n\n showAddEditContact() {\n this.setState({ showAddEditContact: true });\n }\n\n showAddNewContact() {\n const resetContact = {\n contactId: -1,\n contactName: \"\",\n timezoneId: null,\n alarmContactUpdate: {},\n emailContacts: [\n {\n id: 0,\n email: \"\",\n availabilityId: -1,\n errors: {\n email: \"\",\n availabilityId: \"\",\n },\n },\n ],\n phoneContacts: [\n {\n id: 0,\n phoneNumber: \"\",\n availabilityId: -1,\n smsFlag: \"N\",\n voiceFlag: \"N\",\n errors: {\n phoneNumber: \"\",\n availabilityId: \"\",\n },\n },\n ],\n errors: {},\n };\n\n this.setState({\n contactEditing: resetContact,\n showAddEditContact: true,\n });\n }\n\n hideAddEditContact() {\n this.setState({ showAddEditContact: false });\n }\n\n cancelAddContactToAllAlarms() {\n this.setState({\n addContactToAllAlarmsClassname: \"add-contact-all-alarms-container-hide\",\n showAvailableContacts: false,\n });\n }\n\n addContactToAllAlarms() {\n if (this.state.selectedContactId !== null) {\n this.props\n .addAlarmContactToAllAlarmsForDevice(\n this.props.deviceId,\n this.state.selectedContactId\n )\n .then(() => {\n this.props.loadDeviceAlarmConfigList(this.props.deviceId);\n });\n }\n this.setState({\n addContactToAllAlarmsClassname: \"add-contact-all-alarms-container-hide\",\n showAvailableContacts: false,\n });\n }\n\n removeContactFromAllAlarms() {\n if (this.state.contactIdDeleted !== null) {\n this.props\n .removeAlarmContactToAllAlarmsForDevice(\n this.props.deviceId,\n this.state.contactIdDeleted\n )\n .then(() => {\n this.props.loadDeviceAlarmConfigList(this.props.deviceId);\n });\n }\n this.setState({\n removeContactFromAllAlarmsClassname:\n \"remove-contact-all-alarms-container-hide\",\n });\n }\n\n cancelRemoveContactFromAllAlarms() {\n this.setState({\n removeContactFromAllAlarmsClassname:\n \"remove-contact-all-alarms-container-hide\",\n });\n }\n\n render() {\n return (\n
\n {/* */}\n {/* */}\n \n \n \n \n \n \n \n {this.props.contacts.map((c, key) => {\n return (\n \n \n \n \n \n );\n })}\n \n
Name
{c.name}\n \n this.deleteAlarmContact(this.props.alarmId, c.contactId)\n }\n >\n Remove\n \n \n \n
\n
\n Do you want this contact removed from all alarms for this device?\n this.removeContactFromAllAlarms()}\n >\n Yes\n \n this.cancelRemoveContactFromAllAlarms()}\n >\n No\n \n
\n \n {this.state.showAvailableContacts && (\n
\n
\n
Available contacts
\n {\n return { value: item.contactId, label: item.name };\n })}\n />\n\n
\n Do you want this contact adding to all alarms for this device?\n this.addContactToAllAlarms()}\n >\n Yes\n \n this.cancelAddContactToAllAlarms()}\n >\n No\n \n
\n
\n this.hideAvailableContacts()}\n >\n Cancel\n \n this.addAlarmContact()}\n >\n Add\n \n
\n
\n \n
\n
\n )}\n
\n
\n {this.state.showAddEditContact && (\n this.hideAddEditContact()}\n forceChildControlReRender={this.state.forceChildControlReRender}\n addNewContact={(contactId) => this.addNewContact(contactId)}\n />\n )}\n
\n );\n }\n}\n\nAlarmContactConfiguration.defaultProps = {\n contacts: [],\n availableContacts: [],\n timezones: [],\n //alarmId: -1,\n};\nfunction mapStateToProps(state, ownProps) {\n return {\n contacts: getAlarmContacts(state, ownProps.alarmId),\n availableContacts: getAvailableAlarmContacts(state, ownProps.alarmId),\n };\n}\n\nconst mapDispatchToProps = {\n loadAlarmContacts,\n loadAvailableAlarmContacts,\n loadContact,\n addAlarmContact,\n deleteAlarmContact,\n getFullAlarmContact,\n addAlarmContactToAllAlarmsForDevice,\n removeAlarmContactToAllAlarmsForDevice,\n loadDeviceAlarmConfigList,\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(AlarmContactConfiguration);\n","import React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {\r\n updateDeviceAlarmConfig,\r\n toggleNewAlarmConfigDialog,\r\n loadDeviceAlarmConfigList,\r\n deleteDeviceAlarmConfig,\r\n setDeviceAlarmMute,\r\n getAlarmActions,\r\n putAlarmAction,\r\n} from \"./actions/alarmConfigActions\";\r\nimport { isEmpty } from \"../utils/generalUtils\";\r\nimport { formatDate } from \"../utils/dateUtils\";\r\nimport authService from \"../api-authorization/AuthorizeService\";\r\nimport { UserRoles } from \"../api-authorization/ApiAuthorizationConstants\";\r\nimport Button from \"react-bootstrap/Button\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Form from \"react-bootstrap/Form\";\r\nimport Datetime from \"react-datetime\";\r\nimport moment from \"moment\";\r\nimport Modal from \"react-bootstrap/Modal\";\r\nimport AlarmContactConfiguration from \"./AlarmContactConfiguration\";\r\nimport \"./DeviceConfig.css\";\r\n\r\n// TODO: potentially make an API call, confirm if they are likely to change\r\nconst alarmCheckTypeList = [\r\n {\r\n checkTypeId: 1,\r\n checkType: \">\",\r\n },\r\n {\r\n checkTypeId: 2,\r\n checkType: \">=\",\r\n },\r\n {\r\n checkTypeId: 3,\r\n checkType: \"<\",\r\n },\r\n {\r\n checkTypeId: 4,\r\n checkType: \"<=\",\r\n },\r\n {\r\n checkTypeId: 5,\r\n checkType: \"=\",\r\n },\r\n];\r\n\r\nclass EditAlarmConfiguration extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n readOnly: !this.props.newAlarm,\r\n alarmSettingDescription: this.props.alarmSettingDescription,\r\n checkType: this.props.checkType,\r\n checkTypeId: this.props.checkTypeId,\r\n threshold: this.props.threshold,\r\n restoreCheckType: this.props.restoreCheckType,\r\n restoreCheckTypeId: this.props.restoreCheckTypeId,\r\n restoreThreshold: this.props.restoreThreshold,\r\n alarmHoldOff: this.props.alarmHoldOff,\r\n restoreHoldoff: this.props.restoreHoldoff,\r\n repeatInterval: this.props.repeatInterval,\r\n mutedUntil: this.props.mutedUntil,\r\n mutedFlag: this.props.mutedFlag,\r\n mutedFlagBoolean: this.props.mutedFlagBoolean,\r\n muteInputProps: {\r\n placeholder: \"\",\r\n disabled: true,\r\n className: \"form-control form-control-sm\",\r\n },\r\n errors: {},\r\n showAlarmContactDialog: false,\r\n showAlarmActionDialog: false,\r\n alarmActions: [],\r\n cloudAlarmFlag: this.props.cloudAlarmFlag,\r\n hasAdminRights: false,\r\n isAuthenticated: false,\r\n\r\n };\r\n this.toggleEditMode = this.toggleEditMode.bind(this);\r\n this.saveAlarmConfig = this.saveAlarmConfig.bind(this);\r\n this.disableEditMode = this.disableEditMode.bind(this);\r\n this.deleteAlarmConfig = this.deleteAlarmConfig.bind(this);\r\n this.setMutedUntil = this.setMutedUntil.bind(this);\r\n this.handleSnoozeCheckboxChanged =\r\n this.handleSnoozeCheckboxChanged.bind(this);\r\n\r\n this.handleShowAlarmContactDialog =\r\n this.handleShowAlarmContactDialog.bind(this);\r\n this.handleCloseAlarmContactDialog =\r\n this.handleCloseAlarmContactDialog.bind(this);\r\n\r\n this.handleShowAlarmActionDialog =\r\n this.handleShowAlarmActionDialog.bind(this);\r\n this.handleCloseAlarmActionDialog =\r\n this.handleCloseAlarmActionDialog.bind(this);\r\n this.saveAlarmActions = this.saveAlarmActions.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n let mutedUntil = \"\";\r\n if (!isEmpty(this.props.mutedUntil)) {\r\n mutedUntil = this.props.mutedUntil;\r\n this.setState({ mutedUntil: this.props.mutedUntil });\r\n\r\n }\r\n\r\n const muteInputProps = {\r\n placeholder: mutedUntil,\r\n disabled: this.state.readOnly,\r\n className: \"form-control form-control-sm\",\r\n };\r\n\r\n this.setState({ muteInputProps: muteInputProps });\r\n\r\n this.populateState();\r\n }\r\n\r\n async populateState() {\r\n const user = await authService.getUser();\r\n\r\n let hasAdminRights = false;\r\n let isAuthenticated = false;\r\n\r\n if (user) {\r\n isAuthenticated = true;\r\n if (\r\n user.role === UserRoles.Administrator ||\r\n user.role === UserRoles.SuperAdmin\r\n ) {\r\n hasAdminRights = true;\r\n }\r\n// this.props.setCurrentUser(user);\r\n }\r\n\r\n this.setState({\r\n hasAdminRights,\r\n isAuthenticated,\r\n });\r\n }\r\n\r\n toggleEditMode() {\r\n let inputDisabled = true;\r\n if (this.state.readOnly && this.state.mutedFlagBoolean) {\r\n inputDisabled = false;\r\n }\r\n\r\n const muteInputProps = {\r\n placeholder: this.props.mutedUntil,\r\n disabled: inputDisabled,\r\n className: \"form-control form-control-sm\",\r\n };\r\n\r\n this.setState((prevState) => ({\r\n readOnly: !prevState.readOnly,\r\n muteInputProps: muteInputProps,\r\n }));\r\n }\r\n\r\n disableEditMode() {\r\n const muteInputProps = {\r\n placeholder: formatDate(this.props.mutedUntil),\r\n disabled: true,\r\n className: \"form-control form-control-sm\",\r\n };\r\n\r\n this.setState({ readOnly: true, muteInputProps: muteInputProps });\r\n }\r\n\r\n handleCloseAlarmContactDialog() {\r\n this.setState({ showAlarmContactDialog: false });\r\n }\r\n\r\n handleShowAlarmContactDialog() {\r\n this.setState({ showAlarmContactDialog: true });\r\n }\r\n\r\n handleCloseAlarmActionDialog() {\r\n this.setState({ showAlarmActionDialog: false });\r\n }\r\n\r\n handleShowAlarmActionDialog() {\r\n if (this.props.alarmId !== null) {\r\n this.props.getAlarmActions(this.props.alarmId).then((a) => {\r\n this.setState({\r\n alarmActions: a,\r\n showAlarmActionDialog: true,\r\n });\r\n });\r\n }\r\n }\r\n\r\n alarmActionChanged(e) {\r\n let alarmActions = this.state.alarmActions;\r\n alarmActions.forEach((a) => {\r\n if (a.alarmActionId === parseInt(e.target.id)) {\r\n a.setItem = \"Y\";\r\n } else {\r\n a.setItem = \"N\";\r\n }\r\n });\r\n this.setState({ alarmActions: alarmActions });\r\n }\r\n\r\n saveAlarmActions() {\r\n const alarmAction = this.state.alarmActions.find((a) => a.setItem === \"Y\");\r\n this.props\r\n .putAlarmAction(this.props.alarmId, alarmAction.alarmActionId)\r\n .then(() => {\r\n this.props.loadDeviceAlarmConfigList(this.props.deviceId);\r\n });\r\n\r\n this.setState({ showAlarmActionDialog: false });\r\n }\r\n\r\n renderAlarmCheckTypeDropDown() {\r\n return alarmCheckTypeList.map((checkType, i) => {\r\n return (\r\n \r\n );\r\n });\r\n }\r\n\r\n updateAlarmSettingDescription(e) {\r\n this.setState({ alarmSettingDescription: e.target.value });\r\n }\r\n\r\n updateAlarmCheckType(e) {\r\n this.setState({ checkTypeId: e.target.value });\r\n }\r\n\r\n updateThreshold(e) {\r\n this.setState({ threshold: e.target.value });\r\n }\r\n\r\n updateRestoreCheckType(e) {\r\n this.setState({ restoreCheckTypeId: e.target.value });\r\n }\r\n\r\n updateRestoreThreshold(e) {\r\n this.setState({ restoreThreshold: e.target.value });\r\n }\r\n\r\n updateAlarmHoldOff(e) {\r\n this.setState({ alarmHoldOff: e.target.value });\r\n }\r\n\r\n updateRestoreHoldoff(e) {\r\n this.setState({ restoreHoldoff: e.target.value });\r\n }\r\n\r\n updateRepeatInterval(e) {\r\n this.setState({ repeatInterval: e.target.value });\r\n }\r\n\r\n isValidDate(date) {\r\n return moment.isDate(date) || moment.isMoment(date);\r\n }\r\n\r\n setMutedUntil(muteDate) {\r\n if (this.isValidDate(muteDate)) {\r\n this.setState({ mutedUntil: muteDate });\r\n }\r\n }\r\n\r\n handleSnoozeCheckboxChanged(e) {\r\n let muteInputDisabled = true;\r\n let mutedFlag = \"N\";\r\n if (e.target.checked === true) {\r\n muteInputDisabled = false;\r\n mutedFlag = \"Y\";\r\n }\r\n\r\n const muteInputProps = {\r\n placeholder: formatDate(this.props.mutedUntil),\r\n disabled: muteInputDisabled,\r\n className: \"form-control form-control-sm\",\r\n };\r\n\r\n this.setState({\r\n mutedFlagBoolean: e.target.checked,\r\n muteInputProps: muteInputProps,\r\n mutedFlag: mutedFlag,\r\n });\r\n }\r\n\r\n saveAlarmConfig() {\r\n if (this.state.readOnly) return;\r\n\r\n const newErrors = this.validateInput();\r\n\r\n if (Object.keys(newErrors).length > 0) {\r\n this.setState({ errors: newErrors });\r\n return;\r\n }\r\n\r\n const alarmConfig = {\r\n alarmId: parseInt(this.props.alarmId),\r\n sortOrder: parseInt(this.props.sortOrder),\r\n alarmSettingDescription: this.state.alarmSettingDescription,\r\n logicalInputId: parseInt(this.props.logicalInputId),\r\n checkTypeId: parseInt(this.state.checkTypeId),\r\n threshold: parseFloat(this.state.threshold),\r\n alarmHoldOff: parseInt(this.state.alarmHoldOff),\r\n restoreThreshold: parseFloat(this.state.restoreThreshold),\r\n restoreHoldoff: parseInt(this.state.restoreHoldoff),\r\n restoreCheckTypeId: parseInt(this.state.restoreCheckTypeId),\r\n withoutNotification: this.props.withoutNotification,\r\n repeatInterval: parseInt(this.state.repeatInterval),\r\n };\r\n\r\n this.disableEditMode();\r\n\r\n if (this.props.newAlarm) {\r\n this.props.toggleNewAlarmConfigDialog(false);\r\n }\r\n\r\n if (this.state.mutedFlagBoolean === true) {\r\n if (this.state.mutedUntil) {\r\n const alarmMuteConfig = {\r\n alarmId: parseInt(this.props.alarmId),\r\n deviceId: this.props.deviceId,\r\n muteFlag: this.state.mutedFlag,\r\n muteUntil: this.state.mutedUntil,\r\n// muteUntil: formatDate(this.state.mutedUntil),\r\n };\r\n\r\n // console.log(`Date as is: ${this.state.mutedUntil}`);\r\n // console.log(`Date formatDate: ${formatDate(this.state.mutedUntil)}`);\r\n this.props.setDeviceAlarmMute(alarmMuteConfig);\r\n }\r\n } else {\r\n //this.state.mutedFlag = \"N\";\r\n this.setState({ mutedFlag: \"N\" });\r\n this.setState({ mutedUntil: null });\r\n \r\n\r\n const alarmMuteConfig = {\r\n alarmId: parseInt(this.props.alarmId),\r\n deviceId: this.props.deviceId,\r\n muteFlag: this.state.mutedFlag,\r\n muteUntil: this.state.mutedUntil,\r\n// muteUntil: formatDate(this.state.mutedUntil),\r\n };\r\n this.props.setDeviceAlarmMute(alarmMuteConfig);\r\n\r\n }\r\n\r\n this.props\r\n .updateDeviceAlarmConfig(this.props.deviceId, alarmConfig)\r\n .then(() => {\r\n this.props.loadDeviceAlarmConfigList(this.props.deviceId, true);\r\n });\r\n }\r\n\r\n deleteAlarmConfig() {\r\n if (this.props.alarmId === null) return;\r\n\r\n this.props.deleteDeviceAlarmConfig(this.props.alarmId).then(() => {\r\n this.props\r\n .loadDeviceAlarmConfigList(this.props.deviceId)\r\n .then(() => this.updateStateDisplayed());\r\n });\r\n }\r\n\r\n updateStateDisplayed() {\r\n this.setState({\r\n alarmSettingDescription: this.props.alarmSettingDescription,\r\n checkType: this.props.checkType,\r\n checkTypeId: this.props.checkTypeId,\r\n threshold: this.props.threshold,\r\n restoreCheckType: this.props.restoreCheckType,\r\n restoreCheckTypeId: this.props.restoreCheckTypeId,\r\n restoreThreshold: this.props.restoreThreshold,\r\n alarmHoldOff: this.props.alarmHoldOff,\r\n restoreHoldoff: this.props.restoreHoldoff,\r\n repeatInterval: this.props.repeatInterval,\r\n mutedUntil: this.props.mutedUntil,\r\n mutedFlag: this.props.mutedFlag,\r\n mutedFlagBoolean: this.props.mutedFlagBoolean,\r\n });\r\n }\r\n\r\n validateInput() {\r\n const newErrors = {};\r\n if (this.state.alarmSettingDescription === \"\") {\r\n newErrors.alarmSettingDescription = \"Please enter a name for the alarm\";\r\n }\r\n\r\n if (this.state.threshold === \"\" || isNaN(this.state.threshold)) {\r\n newErrors.threshold = \"Please enter a number\";\r\n }\r\n\r\n if (\r\n this.state.restoreThreshold === \"\" ||\r\n isNaN(this.state.restoreThreshold)\r\n ) {\r\n newErrors.restoreThreshold = \"Please enter a number\";\r\n }\r\n\r\n if (this.state.restoreHoldoff === \"\" || isNaN(this.state.alarmHoldOff)) {\r\n newErrors.alarmHoldOff = \"Please enter a number\";\r\n }\r\n\r\n if (this.state.restoreHoldoff === \"\" || isNaN(this.state.restoreHoldoff)) {\r\n newErrors.restoreHoldoff = \"Please enter a number\";\r\n }\r\n\r\n if (this.state.repeatInterval === \"\" || isNaN(this.state.repeatInterval)) {\r\n newErrors.repeatInterval = \"Please enter a number\";\r\n }\r\n\r\n return newErrors;\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n
\r\n \r\n Alarm Name\r\n Set Condition\r\n \r\n Reset Condition\r\n \r\n \r\n \r\n \r\n this.updateAlarmSettingDescription(e)}\r\n isInvalid={!!this.state.errors.alarmSettingDescription}\r\n />\r\n \r\n {this.state.errors.alarmSettingDescription}\r\n \r\n \r\n \r\n this.updateAlarmCheckType(e)}\r\n >\r\n {this.renderAlarmCheckTypeDropDown()}\r\n \r\n \r\n \r\n this.updateThreshold(e)}\r\n isInvalid={!!this.state.errors.threshold}\r\n />\r\n \r\n {this.state.errors.threshold}\r\n \r\n \r\n \r\n this.updateRestoreCheckType(e)}\r\n >\r\n {this.renderAlarmCheckTypeDropDown()}\r\n \r\n \r\n \r\n this.updateRestoreThreshold(e)}\r\n isInvalid={!!this.state.errors.restoreThreshold}\r\n />\r\n \r\n {this.state.errors.restoreThreshold}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Edit\r\n \r\n \r\n Hold off time\r\n \r\n Hold off time\r\n \r\n \r\n \r\n \r\n \r\n {/*
Actions
*/}\r\n \r\n Edit\r\n \r\n \r\n \r\n this.updateAlarmHoldOff(e)}\r\n isInvalid={!!this.state.errors.alarmHoldOff}\r\n />\r\n \r\n {this.state.errors.alarmHoldOff}\r\n \r\n \r\n \r\n \r\n this.updateRestoreHoldoff(e)}\r\n isInvalid={!!this.state.errors.restoreHoldoff}\r\n />\r\n \r\n {this.state.errors.restoreHoldoff}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n Repeat Alarm every\r\n \r\n this.updateRepeatInterval(e)}\r\n isInvalid={!!this.state.errors.repeatInterval}\r\n />\r\n \r\n {this.state.errors.repeatInterval}\r\n \r\n \r\n minutes\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n snooze until\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.hasAdminRights &&\r\n this.props.cloudAlarmFlag === null &&\r\n this.props.alarmId !== null && (\r\n \r\n Delete\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {!this.props.newAlarm && (\r\n \r\n Edit\r\n \r\n )}\r\n \r\n Save\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n Notification Contacts for {this.state.alarmSettingDescription}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Alarm Actions\r\n \r\n \r\n {/* */}\r\n
\r\n {this.state.alarmActions.map((a) => {\r\n return (\r\n
\r\n this.alarmActionChanged(e)}\r\n />\r\n \r\n
\r\n );\r\n })}\r\n
\r\n \r\n \r\n Cancel\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n updateDeviceAlarmConfig,\r\n toggleNewAlarmConfigDialog,\r\n loadDeviceAlarmConfigList,\r\n deleteDeviceAlarmConfig,\r\n setDeviceAlarmMute,\r\n getAlarmActions,\r\n putAlarmAction,\r\n};\r\n\r\nexport default connect(null, mapDispatchToProps)(EditAlarmConfiguration);\r\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { getSelectedDevice } from \"../deviceList/selectors/deviceListSelector\";\nimport { isEmpty } from \"../utils/generalUtils\";\nimport {\n loadDeviceAlarmConfigList,\n toggleNewAlarmConfigDialog,\n} from \"./actions/alarmConfigActions\";\nimport {\n getDeviceAlarmConfigList,\n getDeviceAlarmConfigInputs,\n getNextSortOrder,\n showNewAlarmConfigDialog,\n} from \"./selectors/alarmConfigSelector\";\n//import JSONPretty from \"react-json-pretty\";\nimport Tab from \"react-bootstrap/Tab\";\nimport Col from \"react-bootstrap/Col\";\nimport Row from \"react-bootstrap/Row\";\nimport Nav from \"react-bootstrap/Nav\";\nimport Button from \"react-bootstrap/Button\";\nimport Modal from \"react-bootstrap/Modal\";\nimport EditAlarmConfiguration from \"./EditAlarmConfiguration\";\nimport { formatDate } from \"../utils/dateUtils\";\nimport \"./DeviceConfig.css\";\n\nclass AlarmConfiguration extends Component {\n constructor(props) {\n super(props);\n this.state = {\n selectedInput: [],\n selectedTabInput: \"\",\n selectedLogicalInputId: 0,\n };\n this.handleClose = this.handleClose.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.onTabSelect = this.onTabSelect.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.device !== prevProps.device) {\n this.props.loadDeviceAlarmConfigList(this.props.device.id).then(() => {\n this.setSelectedTabInputs(this.props.inputList[0]);\n });\n }\n }\n\n handleClose() {\n this.props.toggleNewAlarmConfigDialog(false);\n }\n\n handleShow() {\n this.props.toggleNewAlarmConfigDialog(true);\n }\n\n onTabSelect(key) {\n this.setSelectedTabInputs(key);\n }\n\n setSelectedTabInputs(key) {\n let selectedInput = this.props.alarmConfigList.filter(\n (item) => item.inputDescription === key\n );\n\n if (selectedInput.length > 0) {\n this.setState({\n selectedTabInput: selectedInput[0].inputDescription,\n selectedLogicalInputId: selectedInput[0].logicalInputId,\n });\n }\n }\n\n render() {\n let device = \"No Device Selected\";\n if (!isEmpty(this.props.device)) {\n device = this.props.device.name;\n }\n return (\n
\n

{device}

\n this.onTabSelect(k)}\n defaultActiveKey=\"SYSTEM\"\n >\n \n \n \n \n \n \n {this.props.inputList.map((input, ind) => (\n \n {this.props.alarmConfigList\n .filter((item) => item.inputDescription === input)\n .map((config, index) => {\n return (\n
\n {config.alarmId && (\n \n )}\n
\n );\n })}\n {input !== \"SYSTEM\" && (\n \n Add Alarm\n \n )}\n \n \n \n Add New Alarm: {this.state.selectedTabInput}\n \n \n \n \"}\n checkTypeId={1}\n threshold={0}\n restoreThreshold={0}\n alarmHoldOff={0}\n restoreHoldoff={0}\n restoreCheckType={\">\"}\n restoreCheckTypeId={1}\n withoutNotification={\"N\"}\n repeatInterval={0}\n newAlarm={true}\n >\n \n \n
\n ))}\n
\n \n
\n \n
\n );\n }\n}\n\nAlarmConfiguration.defaultProps = {\n device: {},\n alarmConfigList: [],\n inputList: [],\n nextSortOrder: 0,\n showDialog: false,\n};\n\nfunction mapStateToProps(state) {\n const device = getSelectedDevice(state);\n return {\n device: device,\n alarmConfigList: getDeviceAlarmConfigList(state),\n inputList: getDeviceAlarmConfigInputs(state),\n nextSortOder: getNextSortOrder(state),\n showDialog: showNewAlarmConfigDialog(state),\n };\n}\n\nconst mapDispatchToProps = {\n loadDeviceAlarmConfigList,\n getDeviceAlarmConfigInputs,\n toggleNewAlarmConfigDialog,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AlarmConfiguration);\n","export const getGeneralDeviceSettings = (state) => state.generalDeviceSettings;\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport Form from \"react-bootstrap/Form\";\nimport Col from \"react-bootstrap/Col\";\nimport Button from \"react-bootstrap/Button\";\nimport { loadTimezones } from \"../deviceConfiguration/actions/alarmConfigActions\";\nimport { getTimezones } from \"../deviceConfiguration/selectors/alarmContactSelector\";\nimport { updateGeneralSettingLocation } from \"../deviceConfiguration/actions/generalSettingsActions\";\nimport {\n upsertLocation,\n loadCustomerLocations,\n} from \"./actions/customerActions\";\n\nclass CustomerLocation extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n customerLocationId: this.props.location.customerLocationId,\n description: this.props.location.description ?? \"\",\n shortName: this.props.location.shortName ?? \"\",\n address: this.props.location.address ?? \"\",\n postcode: this.props.location.postcode ?? \"\",\n timezoneId: this.props.location.timeZoneId ?? null,\n timezoneName: this.props.location.timeZoneName ?? \"\",\n gpsCoordinates: this.props.location.gpsCoordinates ?? null,\n physicalRegion: this.props.location.physicalRegion ?? \"\",\n logicalReason: this.props.location.logicalReason ?? null,\n customerRef: this.props.location.customerRef ?? \"\",\n errors: {},\n };\n\n this.updateTimezone = this.updateTimezone.bind(this);\n this.saveLocation = this.saveLocation.bind(this);\n this.closeDialog = this.closeDialog.bind(this);\n }\n\n closeDialog() {\n this.props.close();\n }\n\n updateDescription(e) {\n this.setState({ description: e.target.value });\n }\n\n updateShortName(e) {\n this.setState({ shortName: e.target.value });\n }\n\n updateAddress(e) {\n this.setState({ address: e.target.value });\n }\n\n updateTimezone(e) {\n let timezoneId = null;\n\n timezoneId = e.target.value;\n\n this.setState({ timezoneId: timezoneId });\n }\n\n updatePhysicalRegion(e) {\n this.setState({ physicalRegion: e.target.value });\n }\n\n updateCustomerRef(e) {\n this.setState({ customerRef: e.target.value });\n }\n\n componentDidMount() {\n this.props.loadTimezones();\n }\n\n saveLocation() {\n const newErrors = this.validateInput();\n\n if (Object.keys(newErrors).length > 0) {\n this.setState({ errors: newErrors });\n return;\n }\n\n let customerLocationId = null;\n if (this.state.customerLocationId !== 1) {\n customerLocationId = this.state.customerLocationId;\n }\n\n const customerLocation = {\n customerLocationId: customerLocationId,\n description: this.state.description,\n shortName: this.state.shortName,\n address: this.state.address,\n postcode: this.state.postcode,\n timeZoneId: this.state.timezoneId,\n gpsCoordinates: this.state.gpsCoordinates,\n physicalRegion: this.state.physicalRegion,\n logicalReason: this.state.logicalReason,\n customerRef: this.state.customerRef,\n };\n\n this.props.upsertLocation(customerLocation).then(() => {\n this.closeDialog();\n });\n }\n\n validateInput() {\n const newErrors = {};\n if (this.state.description === \"\") {\n newErrors.description = \"Please enter a description\";\n }\n\n if (this.state.shortName === \"\") {\n newErrors.shortName = \"Please enter a short name\";\n }\n\n if (this.state.address === \"\") {\n newErrors.address = \"Please enter an address\";\n }\n\n if (this.state.physicalRegion === \"\") {\n newErrors.physicalRegion = \"Please enter a physical region\";\n }\n\n return newErrors;\n }\n\n render() {\n return (\n
\n
\n \n Description\n this.updateDescription(e)}\n >\n \n {this.state.errors.description}\n \n \n \n Short Name\n this.updateShortName(e)}\n >\n \n {this.state.errors.shortName}\n \n \n \n Address\n this.updateAddress(e)}\n >\n\n \n {this.state.errors.address}\n \n \n \n Time Zone\n \n {this.props.timezones.map((item, index) => {\n return ;\n })}\n \n \n \n Physical Region\n this.updatePhysicalRegion(e)}\n >\n\n \n {this.state.errors.physicalRegion}\n \n \n \n Customer Ref\n this.updateCustomerRef(e)}\n >\n\n \n {this.state.errors.customerRef}\n \n \n \n \n \n Cancel\n \n \n Save\n \n \n \n
\n
\n );\n }\n}\n\nCustomerLocation.defaultProps = {\n timezones: [],\n};\n\nfunction mapStateToProps(state) {\n return {\n timezones: getTimezones(state),\n };\n}\n\nconst mapDispatchToProps = {\n loadTimezones,\n upsertLocation,\n loadCustomerLocations,\n updateGeneralSettingLocation,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CustomerLocation);\n","import * as generalSettingsApi from \"../api/generalSettingsApi\";\nimport * as types from \"../../common/state/actionTypes\";\nimport { Error } from \"../../errors/errorType\";\nimport { logError } from \"../../errors/actions/errorActions\";\n\nexport function loadGeneralDeviceSettingsSuccess(settings) {\n return { type: types.LOAD_GENERAL_DEVICE_SETTINGS_SUCCESS, settings };\n}\n\nexport function updateGeneralSettingLocation(customerLocationId) {\n return {\n type: types.UPDATE_GENERAL_DEVICE_SETTINGS_LOCATION,\n customerLocationId: customerLocationId,\n };\n}\n\nexport function loadGeneralDeviceSettings(deviceId) {\n return function (dispatch) {\n return generalSettingsApi\n .getGeneralDevicesettings(deviceId)\n .then((settings) => {\n dispatch(loadGeneralDeviceSettingsSuccess(settings));\n })\n .catch((error) => {\n const params = [\n {\n deviceId: deviceId,\n },\n ];\n const err = new Error(\n \"generalSettingsActions.js, loadGeneralDeviceSettings()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function updateGeneralDeviceSettings(deviceId, settings) {\n return function (dispatch) {\n return generalSettingsApi\n .updateGeneralDeviceSettings(deviceId, settings)\n .catch((error) => {\n const params = [\n {\n deviceId: deviceId,\n generalSettings: settings,\n },\n ];\n const err = new Error(\n \"generalSettingsActions.js, updateGeneralDeviceSettings()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function pushConfigUi(deviceId) {\n return function (dispatch) {\n return generalSettingsApi.pushConfigUi(deviceId).catch((error) => {\n const params = [\n {\n deviceId: deviceId,\n },\n ];\n const err = new Error(\n \"generalSettingsActions.js, pushConfigUi()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { getSelectedDevice } from \"../deviceList/selectors/deviceListSelector\";\nimport { getDeviceGroups } from \"../deviceGroup/selectors/deviceGroupSelector\";\nimport { isEmpty } from \"../utils/generalUtils\";\nimport {\n loadGeneralDeviceSettings,\n updateGeneralDeviceSettings,\n pushConfigUi,\n} from \"./actions/generalSettingsActions\";\nimport { getGeneralDeviceSettings } from \"./selectors/generalSettingsSelectors\";\nimport { getCustomerLocations } from \"../customer/selectors/customerSelector\";\nimport {\n loadCustomerLocations,\n deleteLocation,\n} from \"../customer/actions/customerActions\";\nimport {\n loadDeviceGroups,\n updateDeviceGroup,\n} from \"../deviceGroup/actions/deviceGroupActions\";\nimport Form from \"react-bootstrap/Form\";\nimport Col from \"react-bootstrap/Col\";\nimport Button from \"react-bootstrap/Button\";\nimport SelectSearch, { fuzzySearch } from \"react-select-search\";\nimport \"./SelectSearchStyles.css\";\nimport Multiselect from \"multiselect-react-dropdown\";\nimport Modal from \"react-bootstrap/Modal\";\nimport CustomerLocation from \"../customer/CustomerLocation\";\nimport JSONPretty from \"react-json-pretty\";\nimport { toast } from \"react-toastify\";\nimport \"react-toastify/dist/ReactToastify.css\";\nimport \"./DeviceConfig.css\";\nclass GeneralSettings extends Component {\n constructor(props) {\n super(props);\n this.state = {\n readOnly: true,\n name: \"\",\n customerCode: \"\",\n customerLocationId: 3,\n minProductTemperature: 0,\n maxProductTemperature: 0,\n customerRef1: \"\",\n customerRef2: \"\",\n notes: \"\",\n errors: {},\n customerLocationDropdownOptions: [],\n deviceGroups: [],\n options: [\n { name: \"Option 1\", id: 1 },\n { name: \"Option 2\", id: 2 },\n ],\n showCustomerLocationDialog: false,\n selectedLocation: {},\n showWarningDeleteDialog: false,\n activeFlag: \"Y\",\n };\n\n this.multiselectRef = React.createRef();\n\n this.toggleEditMode = this.toggleEditMode.bind(this);\n this.saveSettings = this.saveSettings.bind(this);\n this.disableEditMode = this.disableEditMode.bind(this);\n this.onSelectDeviceGroup = this.onSelectDeviceGroup.bind(this);\n this.onRemoveDeviceGroup = this.onRemoveDeviceGroup.bind(this);\n this.handleShowCustomerLocationDialog =\n this.handleShowCustomerLocationDialog.bind(this);\n this.handleHideCustomerLocationDialog =\n this.handleHideCustomerLocationDialog.bind(this);\n this.addNewCustomerLocation = this.addNewCustomerLocation.bind(this);\n this.showWarningDeleteDialog = this.showWarningDeleteDialog.bind(this);\n this.closeWarningDeleteDialog = this.closeWarningDeleteDialog.bind(this);\n this.deleteCustomerLocation = this.deleteCustomerLocation.bind(this);\n this.loadCustomerLocations = this.loadCustomerLocations.bind(this);\n\n this.renderValue = this.renderValue.bind(this);\n this.renderDropdownOption = this.renderDropdownOption.bind(this);\n }\n\n showWarningDeleteDialog() {\n this.setState({ showWarningDeleteDialog: true });\n }\n\n closeWarningDeleteDialog() {\n this.setState({ showWarningDeleteDialog: false });\n }\n\n deleteCustomerLocation() {\n // TODO: 3 == default - Not defined, for customerID 2, need to confirm best to set default or find this setting per customer\n if (this.state.customerLocationId === 3) return;\n\n const locationToDelete = this.state.customerLocationId;\n\n this.saveLocationSettings(0);\n this.props.deleteLocation(locationToDelete);\n this.closeWarningDeleteDialog();\n }\n\n saveLocationSettings(locationId) {\n const generalSettings = {\n name: this.state.name,\n customerCode: this.state.customerCode,\n customerLocationId: locationId,\n minProductTemperature: this.state.minProductTemperature,\n maxProductTemperature: this.state.maxProductTemperature,\n notes: this.state.notes,\n customerRef1: this.state.customerRef1, // todo\n customerRef2: this.state.customerRef2, // todo\n activeFlag: this.state.activeFlag,\n };\n\n debugger;\n this.props.updateGeneralDeviceSettings(\n this.props.device.id,\n generalSettings\n );\n }\n\n addNewCustomerLocation() {\n this.setState({\n selectedLocation: {},\n showCustomerLocationDialog: true,\n });\n }\n handleShowCustomerLocationDialog() {\n this.setState({ showCustomerLocationDialog: true });\n }\n\n handleHideCustomerLocationDialog() {\n this.setState({ showCustomerLocationDialog: false });\n }\n\n toggleEditMode() {\n this.setState((prevState) => ({ readOnly: !prevState.readOnly }));\n }\n\n disableEditMode() {\n this.setState({ readOnly: true, errors: {} });\n }\n\n componentDidMount() {\n this.loadCustomerLocations();\n }\n\n loadCustomerLocations() {\n this.props\n .loadCustomerLocations()\n .then(() => this.setUpCustomerLocationsDropDownData());\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.device !== prevProps.device) {\n this.props.loadGeneralDeviceSettings(this.props.device.id).then(() => {\n const selectedLocation = this.props.customerLocations.find(\n (c) =>\n c.customerLocationId ===\n this.props.generalSettings.customerLocationId\n );\n\n this.setState({\n name: this.props.generalSettings.name,\n customerLocationId: this.props.generalSettings.customerLocationId,\n customerCode: this.props.generalSettings.customerCode ?? \"\",\n minProductTemperature:\n this.props.generalSettings.minProductTemperature,\n maxProductTemperature:\n this.props.generalSettings.maxProductTemperature,\n customerRef1: this.props.generalSettings.customerRef1 ?? \"\",\n customerRef2: this.props.generalSettings.customerRef2 ?? \"\",\n notes: this.props.generalSettings.notes ?? \"\",\n selectedLocation: selectedLocation ?? {},\n activeFlag: this.props.generalSettings.activeFlag ?? \"Y\",\n });\n });\n\n this.props.loadDeviceGroups(this.props.device.id).then(() => {\n this.setState({\n deviceGroups: this.props.deviceGroups,\n });\n });\n }\n\n if (this.props.customerLocations !== prevProps.customerLocations) {\n this.setUpCustomerLocationsDropDownData();\n }\n }\n\n setUpCustomerLocationsDropDownData() {\n const options = this.props.customerLocations.map((l) => {\n return {\n name: l.description,\n value: l.customerLocationId,\n address: l.address,\n physicalRegion: l.physicalRegion,\n customerRef: l.customerRef,\n };\n });\n\n this.setState({\n customerLocationDropdownOptions: options,\n });\n }\n\n renderDropdownOption(props, option, snapshot, className) {\n return (\n \n );\n }\n\n updateName(e) {\n this.setState({ name: e.target.value });\n }\n updateCustomerCode(e) {\n this.setState({ customerCode: e.target.value });\n }\n\n handleCustomerLocationChange = (customerLocationId) => {\n this.setState({ customerLocationId });\n };\n\n updateMinProductTemperature(e) {\n this.setState({ minProductTemperature: e.target.value });\n }\n\n updateMaxProductTemperature(e) {\n this.setState({ maxProductTemperature: e.target.value });\n }\n\n updateCustomerRef1(e) {\n this.setState({ customerRef1: e.target.value });\n }\n\n updateCustomerRef2(e) {\n this.setState({ customerRef2: e.target.value });\n }\n\n updatePeriodicReportFlag(e) {\n this.setState({ periodicReportFlag: e.target.value });\n }\n\n updateNotes(e) {\n this.setState({ notes: e.target.value });\n }\n\n updateDeviceActiveFlag(e) {\n this.setState({ activeFlag: e.target.checked ? \"Y\" : \"N\" });\n }\n\n onSelectDeviceGroup(selectedList, selectedItem) {\n const deviceGroupData = {\n deviceId: this.props.device.id,\n deviceGroupId: selectedItem.deviceGroupId,\n memberFlag: \"Y\",\n };\n this.props.updateDeviceGroup(deviceGroupData);\n }\n\n onRemoveDeviceGroup(selectedList, removedItem) {\n const deviceGroupData = {\n deviceId: this.props.device.id,\n deviceGroupId: removedItem.deviceGroupId,\n memberFlag: \"N\",\n };\n this.props.updateDeviceGroup(deviceGroupData);\n }\n saveSettings() {\n if (this.state.readOnly) return;\n\n const newErrors = this.validateInput();\n\n if (Object.keys(newErrors).length > 0) {\n this.setState({ errors: newErrors });\n return;\n }\n\n const generalSettings = {\n name: this.state.name,\n customerCode: this.state.customerCode,\n customerLocationId: this.state.customerLocationId,\n minProductTemperature: this.state.minProductTemperature,\n maxProductTemperature: this.state.maxProductTemperature,\n notes: this.state.notes,\n customerRef1: this.state.customerRef1, // todo\n customerRef2: this.state.customerRef2, // todo\n activeFlag: this.state.activeFlag,\n };\n\n this.disableEditMode();\n\n this.props.updateGeneralDeviceSettings(\n this.props.device.id,\n generalSettings\n );\n }\n\n validateInput() {\n const newErrors = {};\n if (\n this.state.minProductTemperature === \"\" ||\n isNaN(this.state.minProductTemperature)\n ) {\n newErrors.minProductTemperature = \"Please enter a number\";\n }\n\n if (\n this.state.maxProductTemperature === \"\" ||\n isNaN(this.state.maxProductTemperature)\n ) {\n newErrors.maxProductTemperature = \"Please enter a number\";\n }\n\n return newErrors;\n }\n\n pushConfigUi() {\n this.props.pushConfigUi(this.props.device.id).then(() => {\n toast.success(\"Config settings successfully sent.\", {\n hideProgressBar: true,\n autoClose: 10000,\n });\n });\n }\n\n renderValue(valueProps, snapshot) {\n //const inputValue = this.state.selectedLocationInput;\n\n const inputValue = snapshot.focus ? snapshot.search : snapshot.displayValue;\n\n return (\n \n );\n }\n\n render() {\n let device = \"No Device Selected\";\n if (!isEmpty(this.props.device)) {\n device = `${this.props.device.hardwareId} - ${this.props.device.name}`;\n }\n return (\n
\n

{device}

\n
\n\n \n\n \n Name\n this.updateName(e)}\n />\n \n\n \n
\n Active Unit\n {\n this.updateDeviceActiveFlag(e);\n }}\n checked={this.state.activeFlag === \"Y\" ? true : false}\n />\n
\n \n {this.state.errors.activeFlag}\n \n
\n
\n \n \n Customer Code\n this.updateCustomerCode(e)}\n />\n \n \n \n Customer Location\n\n \n \n \n \n \n Delete\n \n \n Edit\n \n \n Add\n \n \n \n \n \n Minimum Product Temperature\n this.updateMinProductTemperature(e)}\n isInvalid={!!this.state.errors.minProductTemperature}\n />\n \n {this.state.errors.minProductTemperature}\n \n \n \n Maximum Product Temperature\n this.updateMaxProductTemperature(e)}\n isInvalid={!!this.state.errors.maxProductTemperature}\n />\n \n {this.state.errors.maxProductTemperature}\n \n \n \n \n \n Customer Ref 1\n this.updateCustomerRef1(e)}\n />\n \n \n Customer Ref 2\n this.updateCustomerRef2(e)}\n />\n \n \n \n Notes\n\n this.updateNotes(e)}\n />\n \n \n Device Groups\n g.memberFlag === \"Y\"\n )}\n onSelect={this.onSelectDeviceGroup}\n onRemove={this.onRemoveDeviceGroup}\n >\n \n \n \n \n \n \n \n Save\n \n \n Edit\n \n \n \n
\n
\n \n \n Customer Location\n \n \n \n \n \n \n \n Delete Location\n \n \n
Are you sure you want to delete this location?
\n \n No\n \n \n Yes\n \n
\n \n
\n );\n }\n}\n\nGeneralSettings.defaultProps = {\n device: {},\n generalSettings: {},\n customerLocations: [],\n deviceGroups: [],\n};\n\nfunction mapStateToProps(state) {\n const device = getSelectedDevice(state);\n return {\n device: device,\n generalSettings: getGeneralDeviceSettings(state),\n customerLocations: getCustomerLocations(state),\n deviceGroups: getDeviceGroups(state),\n };\n}\n\nconst mapDispatchToProps = {\n loadGeneralDeviceSettings,\n loadCustomerLocations,\n updateGeneralDeviceSettings,\n loadDeviceGroups,\n updateDeviceGroup,\n deleteLocation,\n pushConfigUi,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(GeneralSettings);\n","import { callAdminApiPost, callAdminApiGet } from \"../../api/apiUtils\";\n\nexport async function getGeneralDevicesettings(deviceId) {\n const url = `api/generaldevicesettings/settings/${deviceId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function updateGeneralDeviceSettings(deviceId, generalSettings) {\n const url = `api/generaldevicesettings/updatesettings/${deviceId}`;\n\n return callAdminApiPost(url, generalSettings);\n}\n\nexport async function pushConfigUi(deviceId) {\n const url = `api/generaldevicesettings/pushconfigui/${deviceId}`;\n\n return callAdminApiPost(url);\n}\n\n\n","import { formatDateIgnoreOffset } from \"../../utils/dateUtils\";\n\nexport const getDeviceInventory = (state, deviceId) => {\n const filtered = state.deviceInventory.filter(\n (inv) => inv.deviceId === deviceId\n );\n if (filtered.length > 0) return filtered[0].inventory;\n\n return [];\n};\n\nexport const getUnidentifiedTags = (state, deviceId) => {\n const filtered = state.deviceInventory.filter(\n (inv) => inv.deviceId === deviceId\n );\n if (filtered.length > 0) return filtered[0].undientifiedTags;\n\n return [];\n};\n\nexport const getLastScanTime = (state, deviceId) => {\n const filtered = state.deviceInventory.filter(\n (inv) => inv.deviceId === deviceId\n );\n if (filtered.length > 0 && filtered[0].inventory.length > 2)\n return formatDateIgnoreOffset(filtered[0].inventory[2].inventoryTime);\n\n console.log(\"JF lastscantime\");\n return \"\";\n};\n\nexport const getProductTotals = (state, deviceId) => {\n let productTotals = {\n totalItems: 0,\n productCounts: [],\n };\n\n const filtered = state.deviceInventory.filter(\n (inv) => inv.deviceId === deviceId\n );\n\n if (filtered.length > 0) {\n productTotals.totalItems = filtered[0].totalItems;\n productTotals.productCounts = filtered[0].productCounts;\n console.log(\"JF filtered \" +filtered[0]);\n\n }\n console.log(\"JF productTotals\" + productTotals.totalItems);\n\n return productTotals;\n};\n\nexport const getProductCounts = (state, deviceId) => {\n let productTotals = {\n totalItems: 0,\n productCounts: [],\n };\n\n const filtered = state.deviceInventory.filter(\n (inv) => inv.deviceId === deviceId\n );\n\n if (filtered.length > 0) {\n productTotals.totalItems = filtered[0].totalItems;\n productTotals.productCounts = filtered[0].productCounts;\n console.log(\"JF filtered yyy \" + filtered[0]);\n\n }\n console.log(\"JF productTotals yyy\" + productTotals.totalItems);\n\n return productTotals;\n};\n\nexport const getProductCountsInv = (inventory, deviceId) => {\n let productTotals = {\n totalItems: 0,\n productCounts: [],\n };\n\n const filtered = inventory.filter(\n (inv) => inv.deviceId === deviceId\n );\n\n if (filtered.length > 0) {\n productTotals.totalItems = filtered[0].totalItems;\n productTotals.productCounts = filtered[0].productCounts;\n console.log(\"JF filtered inv \" + filtered[0]);\n\n }\n console.log(\"JF productTotals inv\" + productTotals.totalItems);\n\n return productTotals;\n};\n\n\nexport const getDeviceInventoryProductCounts = (state, deviceId) => {\n let productTotals = {\n totalItems: 0,\n productCounts: [],\n };\n\n const filtered = state.deviceInventory.filter(\n (inv) => inv.deviceId === deviceId\n );\n\n if (filtered.length > 0) {\n productTotals.totalItems = filtered[0].totalItems;\n productTotals.productCounts = filtered[0].productCounts;\n console.log(\"JF filtered xxx \" + filtered[0]);\n\n }\n console.log(\"JF productTotals xxx\" + productTotals.totalItems);\n\n return productTotals;\n};\n\n","export const getDeviceInventoryHistory = (state, deviceId) => {\n const filtered = state.deviceInventoryHistory.filter(\n (inv) => inv.deviceId === deviceId\n );\n if (filtered.length > 0) return filtered[0].inventoryHistory;\n\n return [];\n};\n\nexport const getDeviceInventoryHistoryToken = (state, deviceId) => {\n const filtered = state.deviceInventoryHistory.filter(\n (inv) => inv.deviceId === deviceId\n );\n if (filtered.length > 0) return filtered[0].token;\n\n return [];\n};\n","import React, { Component } from \"react\";\nimport Table from \"react-bootstrap/Table\";\nimport \"./Inventory.css\";\n\nclass StockTable extends Component {\n render() {\n return (\n
\n {/* */}\n \n \n \n \n \n \n \n \n \n \n \n \n {this.props.stockList.map((item, key) => {\n return (\n \n \n \n \n \n \n \n \n );\n })}\n \n
ProductSerial NumberBatchExpiry DateEPCTag ID
{item.product}{item.serialNumber}{item.batch}{item.expiryDate}{item.epc}{item.tagId}
\n
\n );\n }\n}\n\nexport default StockTable;\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { getSelectedDevice } from \"../deviceList/selectors/deviceListSelector\";\nimport {\n getDeviceInventoryHistory,\n getDeviceInventoryHistoryToken,\n} from \"./selectors/deviceInventoryHistorySelector\";\nimport ToolkitProvider from \"react-bootstrap-table2-toolkit\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport { formatDateIgnoreOffset } from \"../utils/dateUtils\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faPlus, faMinus } from \"@fortawesome/free-solid-svg-icons\";\nimport StockTable from \"./StockTable\";\nimport { loadDeviceInventoryHistoryMore } from \"./actions/deviceInventoryActions\";\nimport Button from \"react-bootstrap/Button\";\nimport { appConfig } from \"../configuration/config\";\n\nclass InventoryHistory extends Component {\n constructor(props) {\n super(props);\n this.state = {\n columns: [\n {\n dataField: \"date\",\n text: \"Stock Changed\",\n editable: false,\n formatter: this.dateFormatter,\n },\n {\n dataField: \"itemsAddedCount\",\n text: \"Items Added\",\n editable: false,\n },\n {\n dataField: \"itemsRemovedCount\",\n text: \"Items Removed\",\n editable: false,\n },\n ],\n };\n\n this.loadMoreStockEvents = this.loadMoreStockEvents.bind(this);\n }\n\n loadMoreStockEvents() {\n this.props.loadDeviceInventoryHistoryMore(\n this.props.device.id,\n appConfig.deviceInventoryHistoryRecordsPerPage,\n this.props.token\n );\n }\n\n dateFormatter(cell) {\n return {formatDateIgnoreOffset(cell)};\n }\n\n render() {\n const expandRow = {\n renderer: (row) => (\n
\n
Added:
\n \n
Removed:
\n \n
\n ),\n showExpandColumn: true, // set to true to show + sign\n expandByColumnOnly: true,\n expandHeaderColumnRenderer: ({ isAnyExpands }) =>\n isAnyExpands ? (\n \n ) : (\n \n ),\n expandColumnRenderer: ({ expanded, rowKey, expandable }) =>\n expanded ? (\n \n ) : (\n \n ),\n };\n // let device = \"No Device Selected\";\n // if (!isEmpty(this.props.device)) {\n // device = this.props.device.name;\n // }\n return (\n
\n
\n {/* Inventory History: {device} */}\n {/* */}\n
\n
Stock Change Events
\n
\n \n {(props) => (\n
\n \n
\n )}\n \n \n {/* */}\n
\n {/* */}\n
\n );\n }\n}\n\nInventoryHistory.defaultProps = {\n device: {},\n inventoryHistory: [],\n token: \"token\",\n};\n\nfunction mapStateToProps(state) {\n const device = getSelectedDevice(state);\n return {\n device: device,\n inventoryHistory: getDeviceInventoryHistory(state, device.id),\n token: getDeviceInventoryHistoryToken(state, device.id),\n };\n}\n\nconst mapDispatchToProps = {\n loadDeviceInventoryHistoryMore,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(InventoryHistory);\n","export const getDeviceInventorySummary = (state, deviceId) => {\n const filtered = state.deviceInventorySummary.filter(\n (inv) => inv.deviceId === deviceId\n );\n if (filtered.length > 0) return filtered[0].inventorySummary;\n\n return [];\n};\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { getSelectedDevice } from \"../deviceList/selectors/deviceListSelector\";\nimport {\n getDeviceInventorySummary,\n} from \"./selectors/deviceInventorySummarySelector\";\nimport ToolkitProvider from \"react-bootstrap-table2-toolkit\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faPlus, faMinus } from \"@fortawesome/free-solid-svg-icons\";\n\nclass InventorySummary extends Component {\n constructor(props) {\n super(props);\n this.state = {\n columns: [\n {\n dataField: \"productVariant\",\n text: \"Product\",\n editable: false,\n },\n {\n dataField: \"customerRef3\",\n text: \"Category\",\n editable: false,\n },\n {\n dataField: \"stock\",\n text: \"Stock\",\n editable: false,\n },\n ],\n };\n\n }\n\n sumTotal() {\n const result = this.props.inventorySummary.reduce((total, currentValue) => total = total + currentValue.stock, 0);\r\n\r\n return result;\r\n }\n\n render() {\n return (\n
\n
\n {/* Inventory Summary: {device} */}\n {/* */}\n
\n
Stock Summary: {this.sumTotal()} items
\n
\n \n {(props) => (\n
\n \n
\n )}\n \n {/* */}\n
\n {/* */}\n
\n );\n }\n}\n\nInventorySummary.defaultProps = {\n device: {},\n inventorySummary: [],\n};\n\nfunction mapStateToProps(state) {\n const device = getSelectedDevice(state);\n return {\n device: device,\n inventorySummary: getDeviceInventorySummary(state, device.id),\n };\n}\n\nconst mapDispatchToProps = {\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(InventorySummary);\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { getSelectedDevice } from \"../deviceList/selectors/deviceListSelector\";\nimport { getProductTotals } from \"./selectors/deviceInventorySelector\";\n\nclass InventoryHeading extends Component {\n render() {\n return (\n <>\n
\n Inventory Items: {this.props.totalItems} {\" \"}\n {this.props.productCounts.map((item, key) => {\n return (\n \n {item.productName}: {item.totalItems}{\" \"}\n \n );\n })}\n
\n \n );\n }\n}\n\nInventoryHeading.defaultProps = {\n device: {},\n totalItems: 0,\n productCounts: [],\n};\n\nfunction mapStateToProps(state) {\n const device = getSelectedDevice(state);\n const totals = getProductTotals(state, device.id);\n return {\n device: device,\n totalItems: totals.totalItems,\n productCounts: totals.productCounts,\n };\n}\n\nexport default connect(mapStateToProps, null)(InventoryHeading);\n","import React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { getSelectedDevice } from \"../deviceList/selectors/deviceListSelector\";\r\n//import { getProductTotals } from \"./selectors/deviceInventorySelector\";\r\nimport { isEmpty } from \"../utils/generalUtils\";\r\nimport Table from \"react-bootstrap/Table\";\r\nimport Check from \"react-bootstrap/FormCheck\";\r\nimport \"./Inventory.css\";\r\nimport {\r\n inventoryReviseExpiry,\r\n refreshDeviceInventory,\r\n refreshDeviceInventorySummary,\r\n refreshDeviceInventoryHistory,\r\n loadDeviceInventory,\r\n loadDeviceInventoryProductCounts,\r\n loadDeviceInventoryHistory,\r\n loadDeviceInventorySummary,\r\n scanInventorySp,\r\n checkScan2,\r\n} from \"./actions/deviceInventoryActions\";\r\nimport {\r\n getDeviceInventory,\r\n getUnidentifiedTags,\r\n getLastScanTime,\r\n getProductCounts,\r\n} from \"./selectors/deviceInventorySelector\";\r\nimport { getDeviceInventoryHistoryToken } from \"./selectors/deviceInventoryHistorySelector\";\r\nimport Col from \"react-bootstrap/Col\";\r\nimport Row from \"react-bootstrap/Row\";\r\nimport Button from \"react-bootstrap/Button\";\r\nimport * as inventoryApi from \"./api/deviceInventoryApi\";\r\nimport Modal from \"react-bootstrap/Modal\";\r\nimport Form from \"react-bootstrap/Form\";\r\nimport { ModalBody } from \"react-bootstrap\";\r\nimport Datetime from \"react-datetime\";\r\nimport moment from \"moment\";\r\nimport InventoryHistory from \"./InventoryHistory\";\r\nimport InventorySummary from \"./InventorySummary\";\r\nimport { formatDate } from \"../utils/dateUtils\";\r\nimport InventoryHeading from \"./InventoryHeading\";\r\nimport Tabs from \"react-bootstrap/Tabs\";\r\nimport Tab from \"react-bootstrap/Tab\";\r\nimport \"bootstrap/js/src/collapse.js\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faPlus, faMinus } from \"@fortawesome/free-solid-svg-icons\";\r\nclass Inventory extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.Ref = React.createRef();\r\n\r\n this.state = {\r\n reviseExpiryTags: [],\r\n showDialog: false,\r\n revisedReason: \"\",\r\n revisedDate: \"\",\r\n timer: \"00:00:00\",\r\n scanningState: \"idle\",\r\nscanCheckResult: \"idle\",\r\n };\r\n\r\n this.refreshInventory = this.refreshInventory.bind(this);\r\n this.scanInventorySp = this.scanInventorySp.bind(this);\r\n this.reviseExpiryCheckboxChanged =\r\n this.reviseExpiryCheckboxChanged.bind(this);\r\n this.reviseExpiryPopup = this.reviseExpiryPopup.bind(this);\r\n this.toggleModal = this.toggleModal.bind(this);\r\n this.setRevisedReason = this.setRevisedReason.bind(this);\r\n this.setRevisedDate = this.setRevisedDate.bind(this);\r\n }\r\n\r\n scanInventorySp() {\r\n inventoryApi.scanInventorySp(this.props.device.id);\r\n this.setState({ scanningState: \"scanning\" });\r\n this.beginTimer(this.getDeadTime());\r\n }\r\n\r\n checkScan() {\r\n //inventoryApi.checkScan(this.props.device.id);\r\n //this.setState({ scanCheckResult: res });\r\n// inventoryApi.checkScan2(this.props.device.id).then(result => this.state.scanCheckResult = result);\r\n inventoryApi.checkScan2(this.props.device.id).then((result) => this.newresult({ result }));\r\n }\r\n\r\n newresult(res) {\r\n if (res.result.deviceInventoryState === \"REQUESTED\") {\r\n this.setState({ scanningState: \"scanning\" });\r\n } else {\r\n //change button display\r\n this.setState({ scanningState: \"idle\" });\r\n //stop the timer\r\n if (this.Ref.current) clearInterval(this.Ref.current);\r\n //refresh results\r\n this.refreshInventory();\r\n }\r\n }\r\n\r\n // scanInventory() {\r\n // inventoryApi.scanInventory(this.props.device.hardwareId);\r\n // }\r\n // scanInventorySp() {\r\n // this.props.scanInventorySp(this.props.device.id).then(() => {\r\n // toast.success(\"Scan started.\", {\r\n // hideProgressBar: true,\r\n // autoClose: 10000,\r\n // });\r\n // });\r\n // }\r\n\r\n refreshInventory() {\r\n // TODO: hardcoded records per page\r\n this.props.refreshDeviceInventory(this.props.device.id, 10, \"token\");\r\n this.props.refreshDeviceInventorySummary(this.props.device.id);\r\n this.props.refreshDeviceInventoryHistory(this.props.device.id, 10, \"token\");\r\n }\r\n\r\n\r\n\r\n reviseExpiryCheckboxChanged(tagId, e) {\r\n let tags = this.state.reviseExpiryTags;\r\n if (e.target.checked) {\r\n tags.push(tagId);\r\n this.setState({ reviseExpiryTags: tags });\r\n } else {\r\n const index = this.state.reviseExpiryTags.indexOf(tagId);\r\n if (index > -1) {\r\n tags.splice(index, 1);\r\n this.setState({ reviseExpiryTags: tags });\r\n }\r\n }\r\n }\r\n\r\n isValidDate(date) {\r\n return moment.isDate(date) || moment.isMoment(date);\r\n }\r\n\r\n setRevisedDate(revisedDate) {\r\n if (this.isValidDate(revisedDate))\r\n this.setState({ revisedDate: revisedDate });\r\n }\r\n\r\n setRevisedReason(e) {\r\n this.setState({ revisedReason: e.target.value });\r\n }\r\n\r\n toggleModal() {\r\n this.setState({ showDialog: !this.state.showDialog });\r\n }\r\n\r\n reviseExpiryPopup() {\r\n this.toggleModal();\r\n this.state.reviseExpiryTags.forEach((tag) => {\r\n const reviseExpiryData = {\r\n tagId: tag,\r\n revisedExpiryDate: formatDate(this.state.revisedDate),\r\n reason: this.state.revisedReason,\r\n };\r\n this.props\r\n .inventoryReviseExpiry(reviseExpiryData)\r\n .then(() => this.props.loadDeviceInventory(this.props.device.id));\r\n });\r\n }\r\n\r\n\r\n getTimeRemaining = (e) => {\r\n //This to check if we are up to maximum waiting time\r\n\r\n const total = Date.parse(e) - Date.parse(new Date());\r\n const seconds = Math.floor((total / 1000) % 60);\r\n const minutes = Math.floor((total / 1000 / 60) % 60);\r\n const hours = Math.floor((total / 1000 / 60 / 60) % 24);\r\n return {\r\n total,\r\n hours,\r\n minutes,\r\n seconds,\r\n };\r\n };\r\n\r\n timerEvent = (e) => {\r\n let { total, hours, minutes, seconds } = this.getTimeRemaining(e);\r\n if (total >= 0) {\r\n //here we check status\r\n\r\n // update the timer\r\n // check if less than 10 then we need to\r\n // add '0' at the beginning of the variable\r\n\r\n this.checkScan();\r\n\r\n }\r\n };\r\n\r\n beginTimer = (e) => {\r\n // If you adjust it you should also need to\r\n // adjust the Endtime formula we are about\r\n // to code next\r\n this.setState({ timer: \"00:10:00\" });\r\n\r\n // Sets the 5 second interval\r\n if (this.Ref.current) clearInterval(this.Ref.current);\r\n const id = setInterval(() => {\r\n this.timerEvent(e);\r\n }, 5000);\r\n this.Ref.current = id;\r\n };\r\n\r\n getDeadTime = () => {\r\n let deadline = new Date();\r\n\r\n // This is where you need to adjust if\r\n // you extend to add more time\r\n // 600 seconds = 10 minutes\r\n deadline.setSeconds(deadline.getSeconds() + 600);\r\n return deadline;\r\n };\r\n\r\n\r\n\r\n\r\n renderScanButtons() {\r\n if (this.state.scanningState === \"idle\") {\r\n return (
);\r\n }\r\n else {\r\n return (
\r\n \r\n
)\r\n }\r\n }\r\n\r\n\r\n\r\n render() {\r\n let device = \"No Device Selected\";\r\n let lastCheck = \"Last check: \";\r\n if (!isEmpty(this.props.device)) {\r\n device = this.props.device.name;\r\n lastCheck += this.props.lastScanTime;\r\n }\r\n return (\r\n
\r\n \r\n \r\n

{device}

\r\n \r\n \r\n

{lastCheck}

\r\n \r\n \r\n {this.renderScanButtons()}\r\n \r\n
\r\n\r\n \r\n \r\n
\r\n {/* Adding a key on here to force a complete re-render of this component when the device changes\r\n This isn't ideal but the table component does not seem to update when the underlying stock data changes,\r\n hence forcing an update of this component */}\r\n -1 ? `inventorySummary-${this.props.device.id}` : ''}>\r\n
\r\n\r\n \r\n
\r\n
\r\n <>\r\n
\r\n Inventory Items: {this.props.totals.totalItems}    \r\n {this.props.totals.productCounts.map((item, key) => {\r\n return (\r\n \r\n {item.productName}: {item.totalItems}    \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 {this.props.inventory.map((item, key) => {\r\n let dataTarget = \".multi-collapse\" + key;\r\n let dataTargetClass = \"collapse multi-collapse\" + key;\r\n let ariaControls = \"multiCollapse\" + key;\r\n // console.log(item);\r\n return (\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
ProductSerial NumberBatchExpiry DateRevised ReasonFirst Seen HereCustRef1CustRef2CustRef3CustRef4CustRef5
\r\n {item.showRevisedExpiryCheckbox && (\r\n \r\n )}\r\n \r\n {item.productName}\r\n \r\n {item.showRevisedExpiryCheckbox && (\r\n \r\n this.reviseExpiryCheckboxChanged(\r\n item.tagId,\r\n e\r\n )\r\n }\r\n key={`check-${item.tagId}`}\r\n />\r\n )}\r\n {item.serialNumber}{item.batch}{item.expiryDate}{item.revisedReason}{item.firstSeenHere}{item.customerRef1}{item.customerRef2}{item.customerRef3}{item.customerRef4}{item.customerRef5}
\r\n
\r\n EPC\r\n
\r\n
{item.epcId}
\r\n
\r\n
\r\n
\r\n Tag ID\r\n
\r\n
{item.tagId}
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n Revised Expiry Date:\r\n \r\n \r\n \r\n \r\n \r\n Revised Reason:\r\n \r\n this.setRevisedReason(e)}\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
Unidentified Tags
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.props.unidentifiedTags.map((item, key) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
ProductEPCTag ID
\r\n {item.productName}\r\n {item.epcId}{item.tagId}
\r\n
\r\n
\r\n \r\n
\r\n {/* Adding a key on here to force a complete re-render of this component when the device changes\r\n This isn't ideal but the table component does not seem to update when the underlying stock data changes,\r\n hence forcing an update of this component */}\r\n -1 ? `inventoryHistory-${this.props.device.id}` : ''}>\r\n
\r\n
\r\n\r\n {/* */}\r\n
\r\n );\r\n }\r\n}\r\n\r\nInventory.defaultProps = {\r\n device: {},\r\n inventory: [],\r\n unidentifiedTags: [],\r\n lastScanTime: \"\",\r\n token: \"token\",\r\n totals: [],\r\n productCounts: [],\r\nscanCheckResult: \"idle\",\r\n};\r\n\r\n\r\nfunction mapStateToProps(state) {\r\n const device = getSelectedDevice(state);\r\n //const totals = getProductTotals(state, device.id);\r\n return {\r\n device: device,\r\n inventory: getDeviceInventory(state, device.id),\r\n unidentifiedTags: getUnidentifiedTags(state, device.id),\r\n totals: getProductCounts(state, device.id),\r\n lastScanTime: getLastScanTime(state, device.id),\r\n token: getDeviceInventoryHistoryToken(state, device.id),\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n inventoryReviseExpiry,\r\n refreshDeviceInventory,\r\n refreshDeviceInventorySummary,\r\n refreshDeviceInventoryHistory,\r\n loadDeviceInventory,\r\n loadDeviceInventoryProductCounts,\r\n loadDeviceInventoryHistory,\r\n loadDeviceInventorySummary,\r\n scanInventorySp,\r\n checkScan2,\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Inventory);\r\n","import React from \"react\";\nimport \"./Loader.css\";\n\nconst Loader = () => {\n return (\n
\n
\n
\n );\n};\n\nexport default Loader;\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport Tabs from \"react-bootstrap/Tabs\";\nimport Tab from \"react-bootstrap/Tab\";\nimport Col from \"react-bootstrap/Col\";\nimport Row from \"react-bootstrap/Row\";\nimport DeviceList from \"../deviceList/DeviceList\";\nimport DeviceListSearch from \"../deviceList/DeviceListSearch\";\nimport DeviceListPagination from \"../deviceList/DeviceListPagination\";\nimport DeviceListFilters from \"../deviceList/DeviceListFilters\";\nimport AnalysisDeviceTelemetryChart from \"../charts/AnalysisDeviceTelemetryChart\";\nimport DeviceNotificationSubscription from \"../deviceNotifications/DeviceNotificationSubscription\";\n//import DeviceTelemetryChartExample from \"../charts/DeviceTelemetryChartExample\";\n//import FakeDeviceTelemetryGenerator from \"../utils/FakeDeviceTelemetryGenerator\";\nimport DeviceTelemetryChart from \"../charts/DeviceTelemetryChart\";\nimport \"react-datetime/css/react-datetime.css\";\nimport DeviceIncidentList from \"../incidents/DeviceIncidentList\";\nimport DeviceCustomerContactInformation from \"../customerContact/DeviceCustomerContactInformation\";\nimport DeviceListUpdate from \"../deviceList/DeviceListUpdate\";\nimport AlarmConfiguration from \"../deviceConfiguration/AlarmConfiguration\";\nimport GeneralSettings from \"../deviceConfiguration/GeneralSettings\";\nimport Inventory from \"../inventory/Inventory\";\nimport Loader from \"../common/loader/Loader\";\n\nclass DashboardPage extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n forceChartReRender: 0,\n };\n }\n\n handleSelect(eventKey) {\n //console.log(\"select: \" + eventKey);\n if (eventKey === \"liveDeviceStatus\") {\n this.setState({ forceChartReRender: this.state.forceChartReRender + 1 });\n }\n }\n\n render() {\n return (\n
\n {this.props.isConnected ? null : }\n \n \n \n \n {\" \"}\n \n \n \n \n this.handleSelect(eventKey)}\n >\n \n \n \n {/* */}\n \n \n \n {/* */}\n \n \n {/* TODO: MAKE RECORDSPERPAGE CONFIGURABLE */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n }\n}\n\n// const mapStateToProps = (state) => ({\n // isConnected: state.connection.isConnected,\n// });\n\nconst mapStateToProps = (state) => {\n // console.log(\"STATE\", state)\n return {\n isConnected: state.applicationState.isConnected,\n }\n};\n\nexport default connect(mapStateToProps)(DashboardPage);\n","import React, { Component } from \"react\";\n//import DeviceIncidentAlarmList from \"./DeviceIncidentAlarmList\";\nimport DeviceIncidentList from \"./DeviceIncidentList\";\n\n// import ActiveCustomerIncidents from \"./ActiveCustomerIncidents\";\n// import DeviceIncident from \"./DeviceIncident\";\n\nclass DeviceIncidentsPage extends Component {\n render() {\n return (\n
\n

DeviceIncidentsPage

\n {/* \n */}\n \n
\n );\n }\n}\n\nexport default DeviceIncidentsPage;\n","import React, { Component } from \"react\";\nimport { AgGridReact } from \"ag-grid-react\";\nimport Button from \"react-bootstrap/Button\";\nimport \"ag-grid-community/dist/styles/ag-grid.css\";\nimport \"ag-grid-community/dist/styles/ag-theme-alpine.css\";\nimport JSONPretty from \"react-json-pretty\";\n\nclass OtaGrid extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n columnDefs: [\n {\n headerName: \"DeviceId\",\n minWidth: 180,\n field: \"hardwareId\",\n headerCheckboxSelection: true,\n checkboxSelection: true,\n sortable: true,\n },\n {\n field: \"softwareVersion\",\n filter: \"agNumberColumnFilter\",\n //maxWidth: 100,\n sortable: true,\n },\n { field: \"updateStatus\" },\n ],\n defaultColDef: {\n flex: 1,\n minWidth: 150,\n filter: true,\n sortable: true,\n },\n rowSelection: \"multiple\",\n rowData: null,\n selectedRows: null,\n };\n }\n\n componentDidMount() {\n let rowData = [];\n for (let i = 0; i < 300; i++) {\n const idNumber = i + 1;\n let hardwareId = \"byte-snap-dev-\";\n if (idNumber < 10) hardwareId += \"0\" + idNumber;\n else hardwareId += idNumber;\n\n let updateStatus = \"Success\";\n if (i > 4 && i < 10) {\n updateStatus = \"Updating\";\n }\n\n if (i > 12 && i < 15) {\n updateStatus = \"Failed\";\n }\n const row = {\n hardwareId: hardwareId,\n softwareVersion: \"1.01\",\n updateStatus: updateStatus,\n };\n\n rowData.push(row);\n }\n\n this.setState({ rowData: rowData });\n }\n onGridReady = (params) => {\n this.gridApi = params.api;\n // this.gridColumnApi = params.columnApi;\n // const updateData = (data) => params.api.setRowData(data);\n // fetch(\"https://www.ag-grid.com/example-assets/olympic-winners.json\")\n // .then((resp) => resp.json())\n // .then((data) => updateData(data));\n //for (i = 0; i < 10; i++)\n };\n\n onButtonClick(e) {\n const selectedNodes = this.gridApi.getSelectedNodes();\n const selectedData = selectedNodes.map((node) => node.data);\n this.setState({ selectedRows: selectedData });\n }\n\n render() {\n return (\n
\n
\n \n
\n \n
\n
\n
Debug - Selected Rows to Update:
\n \n
\n
\n );\n }\n}\n\nexport default OtaGrid;\n","import React, { Component } from \"react\";\nimport { callAdminApiGet } from \"../../components/api/apiUtils\";\nimport OtaGrid from \"../ota/OtaGrid\";\n//import CurrentEnvironmentSettings from \"./CurrentEnvironmentSettings\";\n\nclass TestPage extends Component {\n test1() {\n const url = \"api/test/test1\";\n callAdminApiGet(url).then((result) => {\n alert(result.result);\n });\n }\n\n test2() {\n const url = \"api/test/test2\";\n callAdminApiGet(url).then((result) => {\n debugger;\n alert(result.result);\n });\n }\n render() {\n return (\n
\n
\n

Test

\n
\n
\n {/* \n \n
\n */}\n \n
\n
\n
\n
\n );\n }\n}\n\nexport default TestPage;\n","export const getDeviceProvisioningTemplates = (state) =>\n state.deviceProvisioningTemplates;\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n loadDeviceProvisioningTemplates,\n reprovisionDeviceCheck,\n provisionDevice,\n getNextDeviceId,\n commissionNewDevice,\n checkDeviceProvisioningStatus,\n} from \"./actions/provisioningActions\";\nimport { getDeviceProvisioningTemplates } from \"./selectors/provisioningSelector\";\nimport { getCurrentUser } from \"../users/selectors/usersSelector\";\nimport {\n setCustomerDetails,\n getAllCustomers,\n} from \"../customer/actions/customerActions\";\nimport { getAllDevices } from \"../deviceList/selectors/deviceListSelector\";\nimport { getCustomers } from \"../customer/selectors/customersSelector\";\nimport { loadDeviceList } from \"../deviceList/actions/deviceListActions\";\nimport SelectSearch, { fuzzySearch } from \"react-select-search\";\nimport \"./Provisioning.css\";\nimport { isEmpty } from \"../utils/generalUtils\";\nimport Button from \"react-bootstrap/Button\";\nimport Form from \"react-bootstrap/Form\";\nimport JSONPretty from \"react-json-pretty\";\n\nconst DeviceIdNotSet = \"Device ID Has Not Been Set\";\nclass ProvisioningPage extends Component {\n constructor(props) {\n super(props);\n\n // // can't use Super Admin at the moment, because the device list sproc is tied to a userid, not customerid\n // this.state = {\n // isSuperAdmin: false,\n // customerId: 0,\n // customerName: \"\",\n this.state = {\n deviceDropdownOptions: [],\n selectedHardwareId: \"\",\n customerId: -1,\n deviceCanBeProvisioned: false,\n provisionKey: \"\",\n boxSerial: \"\",\n displayReprovisionResult: false,\n reprovisionResult: \"\",\n provisionNewDevice: false,\n parameterTemplateId: 2,\n provisionResponse: \"\",\n deviceProvisioningStatus: \"\",\n dbCreated: \"\",\n fisp_device_reprovision_check_response: \"\",\n fisp_device_provision_new_ui_response: \"\",\n fisp_device_provision_next_id_response: \"\",\n fisp_device_provisioned_check: \"\",\n };\n\n this.renderValue = this.renderValue.bind(this);\n this.renderDropdownOption = this.renderDropdownOption.bind(this);\n this.handleDeviceChange = this.handleDeviceChange.bind(this);\n this.checkDeviceCanBeReprovisioned =\n this.checkDeviceCanBeReprovisioned.bind(this);\n this.setParameterTemplateId = this.setParameterTemplateId.bind(this);\n this.checkDeviceProvisioningStatus =\n this.checkDeviceProvisioningStatus.bind(this);\n }\n\n // this.setSelectedCustomer = this.setSelectedCustomer.bind(this);\n // }\n\n componentDidMount() {\n // Super Admin stuff\n // if (this.props.currentUser?.role) {\n // if (this.props.currentUser.role === UserRoles.SuperAdmin) {\n // this.props.getAllCustomers();\n // this.setState({ isSuperAdmin: true });\n // } else {\n // this.setState({ customerId: this.props.currentUser.customerId });\n // }\n // }\n\n this.setState({ customerId: this.props.currentUser.customerId });\n this.props.loadDeviceProvisioningTemplates(\n this.props.currentUser.customerId\n );\n this.setupDeviceDropdownOptions();\n }\n\n // Super Admin\n // setSelectedCustomer(e) {\n // const customerId = parseInt(e.target.value);\n // let customer = this.props.customers.find((c) => c.id === customerId);\n\n // const storeCustomer = {\n // id: customer.id,\n // name: customer.name,\n // };\n // this.props.setCustomerDetails(storeCustomer);\n // // TODO: needs to be customer specific\n // const deviceGroupId = 1;\n // this.props.loadDeviceList(deviceGroupId);\n // this.props.loadDeviceProvisioningTemplates(customer.id);\n\n // this.setState({ customerId: e.target.value, customerName: customer.name });\n // }\n\n updateProvisionKey(e) {\n this.setState({ provisionKey: e.target.value });\n }\n\n updateBoxSerial(e) {\n this.setState({ boxSerial: e.target.value });\n }\n\n setupDeviceDropdownOptions() {\n const options = this.props.devices.map((d) => {\n let name = \"NAME NOT SET\";\n if (!isEmpty(d.name)) {\n name = d.name;\n }\n\n let customerCode = \"CUSTOMER CODE NOT SET\";\n if (!isEmpty(d.customerCode)) {\n customerCode = d.customerCode;\n }\n\n let location = \"LOCATION NOT SET\";\n if (!isEmpty(d.location)) {\n location = d.location;\n }\n\n return {\n name: name,\n value: d.hardwareId,\n hardwareId: d.hardwareId,\n customerCode: customerCode,\n location: location,\n };\n });\n\n const provisionNew = {\n name: \"Provision New Device\",\n value: DeviceIdNotSet,\n hardwareid: DeviceIdNotSet,\n customerCode: \"NEW\",\n locaction: \"NEW\",\n };\n options.unshift(provisionNew);\n\n this.setState({\n deviceDropdownOptions: options,\n });\n }\n renderValue(valueProps, snapshot) {\n //const inputValue = this.state.selectedLocationInput;\n\n const inputValue = snapshot.focus ? snapshot.search : snapshot.displayValue;\n\n return (\n \n );\n }\n\n renderDropdownOption(props, option, snapshot, className) {\n return (\n \n );\n }\n\n handleDeviceChange = (hardwareId) => {\n let provisionNew = false;\n let deviceCanBeProvisioned = false;\n\n if (hardwareId === DeviceIdNotSet) {\n provisionNew = true;\n deviceCanBeProvisioned = true;\n }\n\n this.setState({\n selectedHardwareId: hardwareId,\n provisionNewDevice: provisionNew,\n deviceCanBeProvisioned: deviceCanBeProvisioned,\n provisionKey: \"\",\n provisionResponse: \"\",\n boxSerial: \"\",\n deviceProvisioningStatus: \"\",\n dbCreated: \"\",\n\n fisp_device_reprovision_check_response: \"\",\n fisp_device_provision_new_ui_response: \"\",\n fisp_device_provision_next_id_response: \"\",\n fisp_device_provisioned_check: \"\",\n });\n };\n\n checkDeviceCanBeReprovisioned() {\n this.props\n .reprovisionDeviceCheck(\n this.state.customerId,\n this.state.selectedHardwareId\n )\n .then((result) => {\n let reprovsionResult =\n \"Device is not ready to be reprovisioned. Make sure the device is switched off and check again after 5 minutes\";\n if (result === 0) {\n reprovsionResult = \"Device is ready to be reprovisioned\";\n }\n this.setState({\n fisp_device_reprovision_check_response: result,\n deviceCanBeProvisioned: result === 0,\n reprovisionResult: reprovsionResult,\n displayReprovisionResult: true,\n });\n });\n }\n\n provisionDevice() {\n const deviceProvisionSettings = {\n customerId: this.state.customerId,\n hardwareId: this.state.selectedHardwareId,\n boxSerial: this.state.boxSerial,\n provisionKey: this.state.provisionKey,\n userId: this.props.currentUser.userId,\n dbCreated: this.state.dbCreated,\n };\n\n this.props.provisionDevice(deviceProvisionSettings).then((result) => {\n this.setState({\n fisp_device_provision_new_ui_response: result,\n provisionResponse: result,\n });\n });\n }\n\n getNextDeviceId() {\n this.props.getNextDeviceId(this.state.customerId).then((result) => {\n this.setState({\n selectedHardwareId: result.newId,\n dbCreated: result.dbCreated,\n fisp_device_provision_next_id_response: JSON.stringify(result),\n });\n });\n }\n\n setParameterTemplateId(e) {\n const parameterTemplateId = e.target.value;\n\n this.setState({ parameterTemplateId: parameterTemplateId });\n }\n\n commissionDevice() {\n const deviceCommissionNewSettings = {\n customerId: this.state.customerId,\n hardwareId: this.state.selectedHardwareId,\n deviceId: 0,\n parameterTemplateId: this.state.parameterTemplateId,\n };\n\n this.props.commissionNewDevice(deviceCommissionNewSettings);\n }\n\n checkDeviceProvisioningStatus() {\n this.props\n .checkDeviceProvisioningStatus(\n this.state.customerId,\n this.state.selectedHardwareId\n )\n .then((result) => {\n let deviceProvisioningStatus = \"Device is not provisioned\";\n if (result === 0) {\n deviceProvisioningStatus = \"Device is provisioned and running\";\n }\n this.setState({\n deviceProvisioningStatus: deviceProvisioningStatus,\n fisp_device_provisioned_check: result,\n });\n });\n }\n\n render() {\n return (\n
\n
\n

Provisioning

\n
\n
\n {/* {this.state.isSuperAdmin && (\n <>\n

Selected Customer: {this.state.customerName}

\n \n {this.props.customers.map((item) => {\n return ;\n })}\n \n
\n
\n \n )} */}\n\n
\n {/* \n \n */}\n {/* */}\n \n
\n {!this.state.provisionNewDevice && (\n
\n \n Check Device Can Be Reprovisioned\n \n {this.state.displayReprovisionResult && (\n
\n {this.state.reprovisionResult}{\" \"}\n
\n )}\n
\n
\n
\n )}\n {this.state.provisionNewDevice && (\n
\n \n
\n
\n
\n )}\n {this.state.deviceCanBeProvisioned && (\n
\n

Provision Device: {this.state.selectedHardwareId}

\n
\n \n Provision Key\n this.updateProvisionKey(e)}\n />\n \n \n Box Serial\n this.updateBoxSerial(e)}\n />\n \n this.provisionDevice()}\n >\n Provision Device\n \n \n {/* \n Provision status: {this.state.provivisionResponse}\n */}\n {this.state.provisionResponse === 0 && (\n
\n
\n
Provisioning Status:
\n Provisioning started successfully\n
\n
\n \n Check Provisioning Progress\n \n {this.state.deviceProvisioningStatus.length > 0 && (\n
\n
\n {this.state.deviceProvisioningStatus}\n
\n )}\n
\n )}\n\n {this.state.provisionResponse === -1 && (\n
\n
\n
Provisioning Status:
\n An error occurred provisioning the device\n
\n )}\n
\n \n
\n )}\n\n {this.state.provisionNewDevice && (\n
\n
\n \n Device Templates\n \n {this.props.provisioningTemplates.map(\n (item, index) => {\n return (\n \n );\n }\n )}\n \n \n \n
\n
\n )}\n\n {/*
\n
\n\n

Debug Stored Proc Responses

\n
\n fisp_device_reprovision_check:{\" \"}\n {this.state.fisp_device_reprovision_check_response}\n
\n
\n fisp_device_provision_new_ui:{\" \"}\n {this.state.fisp_device_provision_new_ui_response}\n
\n
\n fisp_device_provision_next_id:{\" \"}\n {this.state.fisp_device_provision_next_id_response}\n
\n
\n fisp_device_provisioned_check:{\" \"}\n {this.state.fisp_device_provisioned_check}\n
\n
*/}\n
\n
\n
\n
\n
\n );\n }\n}\n\nProvisioningPage.defaultProps = {\n customers: [],\n provisioningTemplates: [],\n currentUser: {},\n devices: [],\n};\n\nfunction mapStateToProps(state) {\n return {\n customers: getCustomers(state),\n provisioningTemplates: getDeviceProvisioningTemplates(state),\n currentUser: getCurrentUser(state),\n devices: getAllDevices(state),\n };\n}\n\nconst mapDispatchToProps = {\n loadDeviceProvisioningTemplates,\n getAllCustomers,\n setCustomerDetails,\n loadDeviceList,\n reprovisionDeviceCheck,\n provisionDevice,\n getNextDeviceId,\n commissionNewDevice,\n checkDeviceProvisioningStatus,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ProvisioningPage);\n","import * as provisioningApi from \"../api/provisioningApi\";\nimport * as types from \"../../common/state/actionTypes\";\nimport { Error } from \"../../errors/errorType\";\nimport { logError } from \"../../errors/actions/errorActions\";\n\nexport function loadDeviceProvisioningTemplatesSuccess(deviceTemplates) {\n return { type: types.DEVICE_PROVISIONING_TEMPLATES_LOADED, deviceTemplates };\n}\n\nexport function loadDeviceProvisioningTemplates(customerId) {\n return function (dispatch) {\n return provisioningApi\n .getDeviceProvisioningTemplates(customerId)\n .then((deviceTemplates) => {\n dispatch(loadDeviceProvisioningTemplatesSuccess(deviceTemplates));\n })\n .catch((error) => {\n const params = [\n {\n customerId: customerId,\n },\n ];\n const err = new Error(\n \"provisioningActions.js, loadDeviceProvisioningTemplates()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function reprovisionDeviceCheck(customerId, hardwareId) {\n return function (dispatch) {\n return provisioningApi\n .canReprovisionDevice(customerId, hardwareId)\n .catch((error) => {\n const params = [\n {\n customerId: customerId,\n hardwareId: hardwareId,\n },\n ];\n const err = new Error(\n \"provisioningActions.js, reprovisionDeviceCheck()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function provisionDevice(deviceProvisionSettings) {\n return function (dispatch) {\n return provisioningApi\n .provisionDevice(deviceProvisionSettings)\n .catch((error) => {\n const params = [\n {\n deviceProvisionSettings: deviceProvisionSettings,\n },\n ];\n const err = new Error(\n \"provisioningActions.js, provisionDevice()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function getNextDeviceId(customerId) {\n return function (dispatch) {\n return provisioningApi.getNextDeviceId(customerId).catch((error) => {\n const params = [\n {\n customerId: customerId,\n },\n ];\n const err = new Error(\n \"provisioningActions.js, getNextDeviceId()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function commissionNewDevice(deviceCommissionNewSettings) {\n return function (dispatch) {\n return provisioningApi\n .commissionNewDevice(deviceCommissionNewSettings)\n .catch((error) => {\n const params = [\n {\n deviceCommissionNewSettings: deviceCommissionNewSettings,\n },\n ];\n const err = new Error(\n \"provisioningActions.js, commissionNewDevice()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n\nexport function checkDeviceProvisioningStatus(customerId, hardwareId) {\n return function (dispatch) {\n return provisioningApi\n .checkDeviceProvisioningStatus(customerId, hardwareId)\n .catch((error) => {\n const params = [\n {\n customerId: customerId,\n hardwareId: hardwareId,\n },\n ];\n const err = new Error(\n \"provisioningActions.js, checkDeviceProvisioningStatus()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n","import { callAdminApiPost, callAdminApiGet } from \"../../api/apiUtils\";\n\nexport async function getDeviceProvisioningTemplates(customerId) {\n const url = `api/provisioning/getdevicetemplates/${customerId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function canReprovisionDevice(customerId, hardwareId) {\n const url = `api/provisioning/canreprovisiondevice/${customerId}/${hardwareId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function provisionDevice(deviceProvisionSettings) {\n const url = `api/provisioning/provisiondevice`;\n\n return callAdminApiPost(url, deviceProvisionSettings);\n}\n\nexport async function getNextDeviceId(customerId) {\n const url = `api/provisioning/getnextdeviceid/${customerId}`;\n\n return callAdminApiGet(url);\n}\n\nexport async function commissionNewDevice(deviceCommissionNewSettings) {\n const url = `api/provisioning/commissionnewdevice`;\n\n return callAdminApiPost(url, deviceCommissionNewSettings);\n}\n\nexport async function checkDeviceProvisioningStatus(customerId, hardwareId) {\n const url = `api/provisioning/checkdeviceprovisioning/${customerId}/${hardwareId}`;\n\n return callAdminApiGet(url);\n}\n","import React, { Component } from \"react\";\nimport OtaGrid from \"../ota/OtaGrid\";\nclass OtaPage extends Component {\n render() {\n return (\n
\n
\n

Ota Updates

\n
\n
\n \n
\n
\n
\n
\n );\n }\n}\n\nexport default OtaPage;\n","import React, { Component } from \"react\";\nimport usersService from \"./UsersService\";\nimport { AvForm, AvField } from \"availity-reactstrap-validation\";\nimport { FormGroup, Button } from \"reactstrap\";\n\nclass PasswordResetPage extends Component {\n constructor(props) {\n super(props);\n this.state = {\n code: \"\",\n error: \"\",\n email: \"\",\n resetResult: undefined,\n };\n }\n\n componentDidMount() {\n // TODO: check that code exists, if not redirect to root\n const code = new URLSearchParams(window.location.search).get(\"code\");\n const email = new URLSearchParams(window.location.search).get(\"email\");\n this.setState({ code: code, email: email });\n }\n\n handleValidSubmit = (event, values) => {\n const resetPasswordModel = {\n email: this.state.email,\n password: values.password,\n code: this.state.code,\n };\n debugger;\n (async () => {\n const result = await usersService.resetPassword(resetPasswordModel);\n this.setState({ resetResult: result });\n })();\n // const { history } = this.props;\n // values.customerId = this.props.customer.id;\n // (async () => {\n // await usersService.addUser(values);\n // history.push(\"/users\");\n // })();\n };\n render() {\n return (\n
\n
\n
\n {this.state.resetResult === undefined && (\n
\n

Password Reset

\n \n \n \n \n  \n \n \n
\n )}\n {this.state.resetResult === true && (\n
\n

Your password has been successfully reset

\n
\n \n Login\n \n
\n )}\n {this.state.resetResult === false && (\n
\n

Password Reset

\n
\n There was a problem resetting your password, please contact\n your administrator\n
\n
\n )}\n {/* */}\n
\n
\n
\n );\n }\n}\n\nexport default PasswordResetPage;\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { getPortalStatus } from \"./actions/statusActions\";\n\nclass StatusPage extends Component {\n constructor(props) {\n super(props);\n this.state = {\n error: null,\n isLoaded: false,\n status: \"\",\n };\n }\n\n componentDidMount() {\n this.props.getPortalStatus().then((result) => {\n this.setState({\n isLoaded: true,\n status: result.status, // TODO: modify this if the object shape from the server is different\n });\n });\n }\n\n render() {\n const { error, isLoaded, status } = this.state;\n if (error) {\n return
Error: {error.message}
;\n } else if (!isLoaded) {\n return
Loading...
;\n } else {\n return
{status}
;\n }\n }\n}\nconst mapDispatchToProps = {\n getPortalStatus,\n};\n\nexport default connect(null, mapDispatchToProps)(StatusPage);\n","import * as statusApi from \"../api/statusApi\";\nimport { Error } from \"../../errors/errorType\";\nimport { logError } from \"../../errors/actions/errorActions\";\n\nexport function getPortalStatus() {\n return function (dispatch) {\n return statusApi.getPortalStatus().catch((error) => {\n const params = [];\n const err = new Error(\n \"statusActions.js, getPortalStatus()\",\n error.toString(),\n params\n );\n\n dispatch(logError(err));\n });\n };\n}\n","import { callAdminApiGet } from \"../../api/apiUtils\";\n\nexport async function getPortalStatus() {\n const url = `api/status/getportalstatus`;\n\n return callAdminApiGet(url);\n}\n","import React, { Component } from \"react\";\nimport { Route } from \"react-router\";\nimport store from \"./components/store/store\";\nimport { Provider } from \"react-redux\";\nimport { Layout } from \"./components/Layout\";\nimport { UsersRouter } from \"./components/users/UsersRouter\";\nimport AuthorizeRoute from \"./components/api-authorization/AuthorizeRoute\";\nimport ApiAuthorizationRoutes from \"./components/api-authorization/ApiAuthorizationRoutes\";\nimport {\n ApplicationPaths,\n UserRoles,\n} from \"./components/api-authorization/ApiAuthorizationConstants\";\nimport DashboardPage from \"./components/dashboard/DashboardPage\";\nimport { ToastContainer, Slide } from \"react-toastify\";\nimport \"react-toastify/dist/ReactToastify.css\";\nimport \"./custom.css\";\n// import KennyPage from \"./components/prototype/KennyPage\";\n// import AzureServiceBus from \"./components/prototype/AzureServiceBus\";\n// import AzureSignalrFunctionSubscription from \"./components/prototype/AzureSignalrFunctionSubscription\";\n// import AzureServiceBusSubscriptionDirect from \"./components/prototype/AzureServiceBusSubscriptionDirect\";\nimport DeviceIncidentsPage from \"./components/incidents/DeviceIncidentsPage\";\n// import DeviceListRedesignPage from \"./components/prototype/DeviceListRedesignPage\";\nimport TestPage from \"./components/prototype/TestPage\";\nimport ProvisioningPage from \"./components/provisioning/ProvisioningPage\";\nimport OtaPage from \"./components/ota/OtaPage\";\nimport PasswordResetPage from \"./components/users/PasswordResetPage\";\nimport StatusPage from \"./components/status/StatusPage\";\nexport default class App extends Component {\n static displayName = App.name;\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 \n */}\n {/* */}\n {/* */}\n \n \n \n
\n );\n }\n}\n","import 'bootstrap/dist/css/bootstrap.css';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\nimport './i18n';\nimport App from './App';\n//import registerServiceWorker from './registerServiceWorker';\n\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\nconst rootElement = document.getElementById('root');\n\nReactDOM.render(\n \n \n ,\n rootElement);\n\n// Uncomment the line above that imports the registerServiceWorker function\n// and the line below to register the generated service worker.\n// By default create-react-app includes a service worker to improve the\n// performance of the application by caching static assets. This service\n// worker can interfere with the Identity UI, so it is\n// disabled by default when Identity is being used.\n//\n//registerServiceWorker();\n\n","export const devicesListDashboard = [\n {\n id: 1,\n SerialNumber: \"AAO-780\",\n Name: \"proto-dev-C198\",\n Location: \"Meadow Heights\",\n Company: \"Buzzster\",\n BusinessType: \"Eye Centre\",\n CompanyName: \"Buzzster Meadow Heights Eye Centre\",\n Status: \"OK\",\n ProductTemperature: 6,\n FridgeTemperature: 25,\n Door: false,\n CategoryFilter: \"NSW\",\n },\n {\n id: 2,\n SerialNumber: \"AAQ-063\",\n Name: \"proto-dev-C119\",\n Location: \"Fitzroy\",\n Company: \"Eimbee\",\n BusinessType: \"Eye Centre\",\n CompanyName: \"Eimbee Fitzroy Eye Centre\",\n Status: \"Warning\",\n ProductTemperature: -4,\n FridgeTemperature: 41,\n Door: true,\n CategoryFilter: \"SA\",\n },\n {\n id: 3,\n SerialNumber: \"AAX-026\",\n Name: \"proto-dev-C195\",\n Location: \"Clifton Hill\",\n Company: \"Skyble\",\n BusinessType: \"Surgery\",\n CompanyName: \"Skyble Clifton Hill Surgery\",\n Status: \"Warning\",\n ProductTemperature: 41,\n FridgeTemperature: -7,\n Door: false,\n CategoryFilter: \"TAS\",\n },\n {\n id: 4,\n SerialNumber: \"AAI-278\",\n Name: \"proto-dev-C128\",\n Location: \"Balaclava\",\n Company: \"Brightbean\",\n BusinessType: \"Retina Clinic\",\n CompanyName: \"Brightbean Balaclava Retina Clinic\",\n Status: \"OK\",\n ProductTemperature: 38,\n FridgeTemperature: -10,\n Door: true,\n CategoryFilter: \"QLD\",\n },\n {\n id: 5,\n SerialNumber: \"AAP-946\",\n Name: \"proto-dev-C111\",\n Location: \"Hawthorn\",\n Company: \"Gevee\",\n BusinessType: \"Pharmacy\",\n CompanyName: \"Gevee Hawthorn Pharmacy\",\n Status: \"Alert\",\n ProductTemperature: -1,\n FridgeTemperature: -6,\n Door: true,\n CategoryFilter: \"SA\",\n },\n {\n id: 6,\n SerialNumber: \"AAO-123\",\n Name: \"proto-dev-C103\",\n Location: \"Belgrave\",\n Company: \"Omba\",\n BusinessType: \"Pharmacy\",\n CompanyName: \"Omba Belgrave Pharmacy\",\n Status: \"OK\",\n ProductTemperature: 20,\n FridgeTemperature: 47,\n Door: false,\n CategoryFilter: \"SA\",\n },\n {\n id: 7,\n SerialNumber: \"AAV-993\",\n Name: \"proto-dev-C184\",\n Location: \"Badger Creek\",\n Company: \"Zoomlounge\",\n BusinessType: \"Surgery\",\n CompanyName: \"Zoomlounge Badger Creek Surgery\",\n Status: \"Alert\",\n ProductTemperature: 19,\n FridgeTemperature: 9,\n Door: true,\n CategoryFilter: \"WA\",\n },\n {\n id: 8,\n SerialNumber: \"AAO-365\",\n Name: \"proto-dev-C196\",\n Location: \"Albert Park\",\n Company: \"Voolia\",\n BusinessType: \"Surgery\",\n CompanyName: \"Voolia Albert Park Surgery\",\n Status: \"Alert\",\n ProductTemperature: 3,\n FridgeTemperature: 0,\n Door: false,\n CategoryFilter: \"WA\",\n },\n {\n id: 9,\n SerialNumber: \"AAP-037\",\n Name: \"proto-dev-C113\",\n Location: \"Belgrave\",\n Company: \"Tekfly\",\n BusinessType: \"Eye Clinic\",\n CompanyName: \"Tekfly Belgrave Eye Clinic\",\n Status: \"Warning\",\n ProductTemperature: 7,\n FridgeTemperature: 28,\n Door: true,\n CategoryFilter: \"QLD\",\n },\n {\n id: 10,\n SerialNumber: \"AAF-600\",\n Name: \"proto-dev-C159\",\n Location: \"Mooroolbark\",\n Company: \"Gabtune\",\n BusinessType: \"Pharmacy\",\n CompanyName: \"Gabtune Mooroolbark Pharmacy\",\n Status: \"Alert\",\n ProductTemperature: 3,\n FridgeTemperature: -1,\n Door: false,\n CategoryFilter: \"NSW\",\n },\n {\n id: 11,\n SerialNumber: \"AAO-780\",\n Name: \"proto-dev-C198\",\n Location: \"Meadow Heights\",\n Company: \"Buzzster\",\n BusinessType: \"Eye Centre\",\n CompanyName: \"Buzzster Meadow Heights Eye Centre\",\n Status: \"OK\",\n ProductTemperature: 6,\n FridgeTemperature: 25,\n Door: false,\n CategoryFilter: \"NSW\",\n },\n {\n id: 12,\n SerialNumber: \"AAQ-063\",\n Name: \"proto-dev-C119\",\n Location: \"Fitzroy\",\n Company: \"Eimbee\",\n BusinessType: \"Eye Centre\",\n CompanyName: \"Eimbee Fitzroy Eye Centre 2\",\n Status: \"Warning\",\n ProductTemperature: -4,\n FridgeTemperature: 41,\n Door: true,\n CategoryFilter: \"SA\",\n },\n {\n id: 13,\n SerialNumber: \"AAX-026\",\n Name: \"proto-dev-C195\",\n Location: \"Clifton Hill\",\n Company: \"Skyble\",\n BusinessType: \"Surgery\",\n CompanyName: \"Skyble Clifton Hill Surgery\",\n Status: \"Warning\",\n ProductTemperature: 41,\n FridgeTemperature: -7,\n Door: false,\n CategoryFilter: \"TAS\",\n },\n {\n id: 14,\n SerialNumber: \"AAI-278\",\n Name: \"proto-dev-C128\",\n Location: \"Balaclava\",\n Company: \"Brightbean\",\n BusinessType: \"Retina Clinic\",\n CompanyName: \"Brightbean Balaclava Retina Clinic\",\n Status: \"OK\",\n ProductTemperature: 38,\n FridgeTemperature: -10,\n Door: true,\n CategoryFilter: \"QLD\",\n },\n {\n id: 15,\n SerialNumber: \"AAP-946\",\n Name: \"proto-dev-C111\",\n Location: \"Hawthorn\",\n Company: \"Gevee\",\n BusinessType: \"Pharmacy\",\n CompanyName: \"Gevee Hawthorn Pharmacy\",\n Status: \"Alert\",\n ProductTemperature: -1,\n FridgeTemperature: -6,\n Door: true,\n CategoryFilter: \"SA\",\n },\n {\n id: 16,\n SerialNumber: \"AAO-123\",\n Name: \"proto-dev-C103\",\n Location: \"Belgrave\",\n Company: \"Omba\",\n BusinessType: \"Pharmacy\",\n CompanyName: \"Omba Belgrave Pharmacy\",\n Status: \"OK\",\n ProductTemperature: 20,\n FridgeTemperature: 47,\n Door: false,\n CategoryFilter: \"SA\",\n },\n {\n id: 17,\n SerialNumber: \"AAV-993\",\n Name: \"proto-dev-C184\",\n Location: \"Badger Creek\",\n Company: \"Zoomlounge\",\n BusinessType: \"Surgery\",\n CompanyName: \"Zoomlounge Badger Creek Surgery\",\n Status: \"Alert\",\n ProductTemperature: 19,\n FridgeTemperature: 9,\n Door: true,\n CategoryFilter: \"WA\",\n },\n {\n id: 18,\n SerialNumber: \"AAO-365\",\n Name: \"proto-dev-C196\",\n Location: \"Albert Park\",\n Company: \"Voolia\",\n BusinessType: \"Surgery\",\n CompanyName: \"Voolia Albert Park Surgery\",\n Status: \"Alert\",\n ProductTemperature: 3,\n FridgeTemperature: 0,\n Door: false,\n CategoryFilter: \"WA\",\n },\n {\n id: 19,\n SerialNumber: \"AAP-037\",\n Name: \"proto-dev-C113\",\n Location: \"Belgrave\",\n Company: \"Tekfly\",\n BusinessType: \"Eye Clinic\",\n CompanyName: \"Tekfly Belgrave Eye Clinic\",\n Status: \"Warning\",\n ProductTemperature: 7,\n FridgeTemperature: 28,\n Door: true,\n CategoryFilter: \"QLD\",\n },\n {\n id: 20,\n SerialNumber: \"AAF-600\",\n Name: \"proto-dev-C159\",\n Location: \"Mooroolbark\",\n Company: \"Gabtune\",\n BusinessType: \"Pharmacy\",\n CompanyName: \"Gabtune Mooroolbark Pharmacy\",\n Status: \"Alert\",\n ProductTemperature: 3,\n FridgeTemperature: -1,\n Door: false,\n CategoryFilter: \"NSW\",\n },\n ];\n ","// import { devicesLocalPrototype, deviceDetailsLocalPrototype } from '../../../tools/mockDataLocalPrototype'\nimport { devicesListDashboard } from \"../fakeData/fakeDashboardDeviceList\";\n\nexport default {\n // TODO: reset to empty array once connected back to the API\n applicationState: {\n initialDeviceListLoaded: false,\n initialDeviceId: null,\n isConnected: true,\n },\n devices: [], // devicesLocalPrototype,//[],\n deviceDetails: [], //deviceDetailsLocalPrototype,//[],\n deviceStatuses: [],\n deviceInputs: [],\n selectedDeviceStatus: {},\n dashboardStatusOverview: {},\n apiCallsInProgress: 0,\n loggedOnUser: \"\",\n devTools: {\n showIdentityServerInfo: false,\n },\n dashboardSearch: \"\",\n dashboardDevicesList: {\n devices: devicesListDashboard,\n filteredDevices: devicesListDashboard,\n currentCount: 0,\n countPerPage: 10,\n totalCount: 0,\n currentPage: 0,\n totalPages: 0,\n filteredPages: 0,\n filteredCount: 0,\n statusFilter: \"\",\n selectedDevice: {},\n },\n inputQueryParameters: [\n {\n deviceId: \"\",\n startDate: \"\",\n endDate: \"\",\n selectedInputs: [],\n },\n ],\n dashboardData: [\n {\n deviceId: \"\",\n dashboardTelemetryData: [],\n dataTableColumns: [],\n chartLines: [],\n },\n ],\n dashboardAnalysisData: [\n {\n deviceId: \"\",\n seriesData: [],\n },\n ],\n eventLogData: [\n {\n deviceId: \"\",\n eventLogs: [],\n },\n ],\n liveDeviceStatusData: [\n {\n deviceId: \"\",\n telemetryData: [],\n dataTableColumns: [],\n chartLines: [],\n },\n ],\n liveDeviceTelemetryData: [\n {\n deviceId: \"\",\n seriesData: [],\n },\n ],\n latestIncidents: [],\n incidentDetails: [],\n errors: [],\n deviceList: {\n devices: [],\n filteredDevices: [],\n currentCount: 0,\n countPerPage: 10,\n totalCount: 0,\n currentPage: 0,\n totalPages: 0,\n filteredPages: 0,\n filteredCount: 0,\n statusFilter: \"\",\n selectedDevice: {},\n locations: [],\n },\n deviceNotification: {\n serviceBusSubscription: {\n url: \"\",\n topic: \"\",\n signature: \"\",\n token: \"\",\n },\n },\n customer: {\n id: null,\n name: \"\",\n },\n deviceTelemetryChartData: [],\n analysisDeviceTelemetryChartData: {\n deviceId: \"\",\n series: [],\n },\n dataAnalysisParameters: {\n startDate: \"\",\n endDate: \"\",\n },\n incidentList: [],\n incidentAlarmList: [],\n incidentReportDropdownList: [],\n deviceContacts: [\n {\n deviceId: \"\",\n contactInfo: [],\n },\n ],\n deviceAlarmConfigList: [],\n newAlarmConfigDialog: {\n open: false,\n },\n generalDeviceSettings: {},\n customerLocations: [],\n deviceGroups: [],\n deviceInventory: [],\n deviceInventoryHistory: [],\n deviceInventorySummary: [],\n deviceScanCheck: [],\n scanCheckResult: \"idle\",\n alarmContacts: [],\n availableAlarmContacts: [],\n timezones: [],\n availabilitySchedule: [],\n currentUser: {},\n customers: [],\n deviceProvisioningTemplates: [],\n};\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function deviceListReducer(\n state = initialState.deviceList,\n action\n) {\n switch (action.type) {\n case types.LOAD_DEVICE_LIST_SUCCESS: {\n \tconsole.log(\"LOAD_DEVICE_LIST_SUCCESS\");\n let loadedState = Object.assign({}, state);\n let count = action.devices.length;\n\n let countPerPage = loadedState.countPerPage;\n let totalPages = Math.ceil(count / countPerPage);\n\n let locations = action.devices.map((d) => d.location);\n const uniqueLocations = new Set(locations);\n\n\t\t\t// hide device with status enabled = false\n\t\t\tlet devices = action.devices.filter(device => device.enabled);\n\n loadedState.devices = devices;\n loadedState.filteredDevices = devices.slice(0, countPerPage);\n loadedState.currentCount = count; //countPerPage;\n loadedState.countPerPage = countPerPage;\n loadedState.totalCount = count;\n loadedState.currentPage = 1;\n loadedState.totalPages = totalPages;\n loadedState.filteredPages = totalPages;\n loadedState.locations = [...uniqueLocations];\n\n return loadedState;\n }\n case types.DEVICE_LIST_FILTER_BY_STATUS: {\n\t\t\tconsole.log(\"DEVICE_LIST_FILTER_BY_STATUS\");\n let alertState = Object.assign({}, state);\n let statusFilter = action.status.toLocaleLowerCase();\n let alertDevicesFiltered = state.devices.filter((device) => {\n return device.status.toLocaleLowerCase().includes(statusFilter);\n });\n\n alertState.statusFilter = statusFilter;\n alertState.filteredCount = alertDevicesFiltered.length;\n alertState.filteredPages = Math.ceil(\n alertState.filteredCount / alertState.countPerPage\n );\n\n alertState.filteredDevices = alertDevicesFiltered.slice(\n 0,\n alertState.countPerPage\n );\n\n return alertState;\n }\n case types.DEVICE_LIST_FILTER_BY_DOOR: {\n console.log(\"DEVICE_LIST_FILTER_BY_DOOR\");\n let doorState = Object.assign({}, state);\n\n let doorDevicesFiltered = state.devices.filter((device) => {\n return device.doorFridge === action.doorState;\n });\n\n doorState.filteredCount = doorDevicesFiltered.length;\n doorState.filteredPages = Math.ceil(\n doorState.filteredCount / doorState.countPerPage\n );\n\n doorState.filteredDevices = doorDevicesFiltered.slice(\n 0,\n doorState.countPerPage\n );\n return doorState;\n }\n\n case types.DEVICE_LIST_FILTER_BY_AlARM: {\n console.log(\"DEVICE_LIST_FILTER_BY_AlARM\");\n let alarmState = Object.assign({}, state);\n\n let alarmDevicesFiltered = state.devices.filter((device) => {\n return device.alarmed === true;\n });\n\n alarmState.filteredCount = alarmDevicesFiltered.length;\n alarmState.filteredPages = Math.ceil(\n alarmState.filteredCount / alarmState.countPerPage\n );\n\n alarmState.filteredDevices = alarmDevicesFiltered.slice(\n 0,\n alarmState.countPerPage\n );\n return alarmState;\n }\n case types.DEVICE_LIST_FILTER_BY_OK: {\n console.log(\"DEVICE_LIST_FILTER_BY_OK\");\n let okState = Object.assign({}, state);\n\n let okDevicesFiltered = state.devices.filter((device) => {\n return device.alarmed !== true;\n });\n\n okState.filteredCount = okDevicesFiltered.length;\n okState.filteredPages = Math.ceil(\n okState.filteredCount / okState.countPerPage\n );\n\n okState.filteredDevices = okDevicesFiltered.slice(\n 0,\n okState.countPerPage\n );\n return okState;\n }\n case types.DEVICE_LIST_FILTER_CLEAR: {\n console.log(\"DEVICE_LIST_FILTER_CLEAR\");\n let resetState = Object.assign({}, state);\n\n let count = state.devices.length;\n\n let countPerPage = resetState.countPerPage;\n let totalPages = Math.ceil(count / countPerPage);\n\n resetState.devices = state.devices;\n resetState.filteredDevices = state.devices.slice(0, countPerPage);\n resetState.filteredCount = resetState.filteredDevices.length;\n resetState.currentCount = countPerPage;\n resetState.countPerPage = countPerPage;\n resetState.totalCount = count;\n resetState.currentPage = 1;\n resetState.totalPages = totalPages;\n resetState.filteredPages = totalPages;\n resetState.statusFilter = \"\";\n\n return resetState;\n }\n case types.DEVICE_LIST_SEARCH_BY_VALUE: {\n console.log(\"DEVICE_LIST_SEARCH_BY_VALUE\");\n let newState = Object.assign({}, state);\n let value = action.search.toLocaleLowerCase();\n let filteredDevices = state.devices.filter((device) => {\n return (\n device.hardwareId?.toLocaleLowerCase().includes(value) ||\n device.name?.toLocaleLowerCase().includes(value) ||\n device.location?.toLocaleLowerCase().includes(value) ||\n device.customerCode?.toLocaleLowerCase().includes(value)\n );\n // TODO: put back in OR change to whatever data we are filtering on\n //device.serialNumber.toLocaleLowerCase().includes(value) ||\n //\n //device.status.toLocaleLowerCase().includes(value) ||\n //device.categoryFilter.toLocaleLowerCase().includes(value)\n });\n\n newState.filteredCount = filteredDevices.length;\n newState.filteredPages = Math.ceil(\n newState.filteredCount / newState.countPerPage\n );\n\n newState.filteredDevices = filteredDevices.slice(\n 0,\n newState.countPerPage\n );\n return newState;\n }\n case types.DEVICE_LIST_FILTER_BY_LOCATION: {\n console.log(\"DEVICE_LIST_FILTER_BY_LOCATION\");\n let locState = Object.assign({}, state);\n let value = action.location.toLocaleLowerCase();\n let filteredDevices = state.devices.filter((device) => {\n return device.location.toLocaleLowerCase().includes(value);\n });\n\n locState.filteredCount = filteredDevices.length;\n locState.filteredPages = Math.ceil(\n locState.filteredCount / locState.countPerPage\n );\n\n locState.filteredDevices = filteredDevices.slice(\n 0,\n locState.countPerPage\n );\n return locState;\n }\n case types.DEVICE_LIST_FILTER_BY_FAVOURITE: {\n console.log(\"DEVICE_LIST_FILTER_BY_FAVOURITE\");\n let favouriteState = Object.assign({}, state);\n let favouriteDevicesFiltered = state.devices.filter((device) => {\n return device.favourite === true;\n });\n\n favouriteState.filteredCount = favouriteDevicesFiltered.length;\n favouriteState.filteredPages = Math.ceil(\n favouriteState.filteredCount / favouriteState.countPerPage\n );\n\n favouriteState.filteredDevices = favouriteDevicesFiltered.slice(\n 0,\n favouriteState.countPerPage\n );\n\n return favouriteState;\n }\n case types.DEVICE_LIST_SET_SELECTED_DEVICE: {\n console.log(\"DEVICE_LIST_SET_SELECTED_DEVICE\");\n let selectedDeviceState = Object.assign({}, state);\n selectedDeviceState.selectedDevice = action.device;\n\n return selectedDeviceState;\n }\n case types.DEVICE_LIST_UPDATE_DEVICE_DATA: {\n console.log(\"DEVICE_LIST_UPDATE_DEVICE_DATA\");\n return {\n ...state,\n devices: state.devices.map((device) => {\n if (device.hardwareId === action.device.deviceId) {\n return {\n ...device,\n temperatureProduct: action.device.temperatureProduct,\n voltageMain: action.device.voltageMain,\n };\n }\n return device;\n }),\n filteredDevices: state.filteredDevices.map((device) => {\n if (device.hardwareId === action.device.deviceId) {\n return {\n ...device,\n temperatureProduct: action.device.temperatureProduct,\n voltageMain: action.device.voltageMain,\n };\n }\n return device;\n }),\n };\n }\n case types.DEVICE_LIST_UPDATE_DEVICE_LIST_DATA: {\n console.log(\"DEVICE_LIST_UPDATE_DEVICE_LIST_DATA\");\n let deviceListUpdateState = Object.assign({}, state);\n\n let selectedDeviceId = -1;\n if (state.selectedDevice.id) {\n selectedDeviceId = state.selectedDevice.id;\n }\n deviceListUpdateState.devices = action.devices;\n const filteredDevices = state.filteredDevices.map((d) => {\n const updatedDevice = action.devices.find((e) => e.id === d.id);\n if (updatedDevice && updatedDevice.id !== selectedDeviceId) {\n return updatedDevice;\n }\n return d;\n });\n deviceListUpdateState.filteredDevices = filteredDevices;\n\n return deviceListUpdateState;\n }\n case types.DEVICE_LIST_LOAD_EXACT_PAGE: {\n console.log(\"DEVICE_LIST_LOAD_EXACT_PAGE\");\n const exactPageState = Object.assign({}, state);\n const exactPage = action.page;\n let upperCountExact = exactPageState.countPerPage * exactPage;\n let lowerCountExact = upperCountExact - exactPageState.countPerPage;\n\n let pageDevices;\n let pageStatusFilter;\n if (exactPageState.statusFilter.length > 0) {\n pageStatusFilter = exactPageState.statusFilter.toLocaleLowerCase();\n pageDevices = exactPageState.devices.filter((device) => {\n return device.Status.toLocaleLowerCase().includes(pageStatusFilter);\n });\n } else {\n pageDevices = exactPageState.devices;\n }\n\n let exactDevices = pageDevices.slice(lowerCountExact, upperCountExact);\n exactPageState.filteredDevices = exactDevices;\n exactPageState.currentCount = upperCountExact;\n exactPageState.currentPage = exactPage;\n // window.history.pushState(\n // { page: 1 },\n // \"title 1\",\n // `?page=${exactPageState.currentPage}`\n // );\n\n return exactPageState;\n }\n case types.DEVICE_LIST_LOAD_NEW_PAGE: {\n console.log(\"DEVICE_LIST_LOAD_NEW_PAGE\");\n //Clone the previous state\n let loadNewPageState = Object.assign({}, state);\n\n let addPages = action.page;\n\n //add it to the current\n if (addPages === 1) {\n if (loadNewPageState.currentPage < loadNewPageState.totalPages)\n loadNewPageState.currentPage += 1;\n }\n\n if (addPages === -1) {\n if (loadNewPageState.currentPage > 1) loadNewPageState.currentPage -= 1;\n }\n\n let begin =\n (loadNewPageState.currentPage - 1) * loadNewPageState.countPerPage;\n let end = begin + loadNewPageState.countPerPage;\n\n let pageList = loadNewPageState.devices.slice(begin, end);\n loadNewPageState.filteredDevices = pageList;\n\n return loadNewPageState;\n }\n case types.DEVICE_LIST_NOTIFICATION_UPDATE: {\n console.log(\"DEVICE_LIST_NOTIFICATION_UPDATE\");\n let notificationState = Object.assign({}, state);\n\n let deviceIndex = -1;\n let filteredDeviceIndex = -1;\n\n const notification = action.notifications;\n\n deviceIndex = notificationState.devices.findIndex(\n (d) => d.hardwareId === notification.deviceId\n );\n\n notificationState.devices = state.devices.map((device, index) => {\n if (deviceIndex === index) {\n // TODO: Assumption that all devices will have status, product temp, voltage and door, will go bang if they are missing\n return {\n ...device,\n status: notification.hasOwnProperty(\"status\")\n ? notification.status\n : device.status,\n temperatureProduct: notification.hasOwnProperty(\n \"temperatureProduct\"\n )\n ? notification.temperatureProduct\n : device.temperatureProduct,\n fridgeVoltage: notification.hasOwnProperty(\"fridgeVoltage\")\n ? notification.fridgeVoltage\n : device.fridgeVoltage,\n door: notification.hasOwnProperty(\"door\")\n ? notification.door\n : device.door,\n };\n }\n\n return { ...device };\n });\n\n filteredDeviceIndex = notificationState.filteredDevices.findIndex(\n (d) => d.hardwareId === notification.deviceId\n );\n\n notificationState.filteredDevices = state.filteredDevices.map(\n (device, index) => {\n if (filteredDeviceIndex === index) {\n // TODO: Assumption that all devices will have status, product temp, voltage and door, will go bang if they are missing\n return {\n ...device,\n status: notification.hasOwnProperty(\"status\")\n ? notification.status\n : device.status,\n temperatureProduct: notification.hasOwnProperty(\n \"temperatureProduct\"\n )\n ? notification.temperatureProduct\n : device.temperatureProduct,\n fridgeVoltage: notification.hasOwnProperty(\"fridgeVoltage\")\n ? notification.fridgeVoltage\n : device.fridgeVoltage,\n door: notification.hasOwnProperty(\"door\")\n ? notification.door\n : device.door,\n };\n }\n\n return { ...device };\n }\n );\n\n return notificationState;\n }\n case types.USER_DEVICE_FAVOURITE_ADDED: {\n console.log(\"USER_DEVICE_FAVOURITE_ADDED\");\n return {\n ...state,\n devices: state.devices.map((device) => {\n if (device.id === action.deviceId) {\n return {\n ...device,\n favourite: true,\n };\n }\n return device;\n }),\n filteredDevices: state.filteredDevices.map((device) => {\n if (device.id === action.deviceId) {\n return {\n ...device,\n favourite: true,\n };\n }\n return device;\n }),\n };\n }\n case types.USER_DEVICE_FAVOURITE_DELETED: {\n console.log(\"USER_DEVICE_FAVOURITE_DELETED\");\n return {\n ...state,\n devices: state.devices.map((device) => {\n if (device.id === action.deviceId) {\n return {\n ...device,\n favourite: false,\n };\n }\n return device;\n }),\n filteredDevices: state.filteredDevices.map((device) => {\n if (device.id === action.deviceId) {\n return {\n ...device,\n favourite: false,\n };\n }\n return device;\n }),\n };\n }\n case types.DEVICE_LIST_SHOW_HIGH_TEMP: {\n console.log(\"DEVICE_LIST_SHOW_HIGH_TEMP\");\n let newState = Object.assign({}, state);\n let sortedDevices = [...state.devices];\n\n sortedDevices.filter(device => {\n return parseFloat(device.temperatureProduct) > parseFloat(device.maxTemperature);\n });\n\n newState.filteredCount = sortedDevices.length;\n newState.filteredPages = Math.ceil(\n newState.filteredCount / newState.countPerPage\n );\n\n newState.devices = sortedDevices;\n newState.filteredDevices = sortedDevices.slice(\n 0,\n newState.countPerPage\n );\n\n return newState;\n }\n case types.DEVICE_LIST_IS_ENBALED: {\n console.log(\"DEVICE_LIST_IS_ENBALED\");\n let newState = { ...state };\n let sortedDevices = [...state.devices];\n\n sortedDevices = action.isEnabled ? sortedDevices : sortedDevices.filter(device => device.enabled);\n\n sortedDevices.map(device => {\n console.log(\"Device \" + device.name, device.enabled);\n });\n\n if (action.isEnabled) {\n sortedDevices = sortedDevices.sort((a, b) => {\n // return (a.enabled === b.enabled) ? 0 : a.enabled ? 1 : -1;\n return +a.enabled - +b.enabled;\n });\n }\n\n newState.filteredCount = sortedDevices.length;\n newState.filteredPages = Math.ceil(\n newState.filteredCount / newState.countPerPage\n );\n\n newState.devices = sortedDevices;\n newState.filteredDevices = sortedDevices.slice(\n 0,\n newState.countPerPage\n );\n\n return newState;\n }\n case types.DEVICE_LIST_FILTER_BY_NAME : {\n console.log(\"DEVICE_LIST_FILTER_BY_NAME \");\n let newState = Object.assign({}, state);\n let sortedDevices = [...state.devices];\n\n if(action.sortOrder === \"ASC\") {\n sortedDevices.sort((a, b) => {\n if (a.name.toLowerCase() < b.name.toLowerCase()) return -1;\n if (a.name.toLowerCase() > b.name.toLowerCase()) return 1;\n return 0;\n });\n } else {\n sortedDevices.sort((a, b) => {\n if (a.name.toLowerCase() > b.name.toLowerCase()) return -1;\n if (a.name.toLowerCase() < b.name.toLowerCase()) return 1;\n return 0;\n });\n }\n\n newState.filteredCount = sortedDevices.length;\n newState.filteredPages = Math.ceil(\n newState.filteredCount / newState.countPerPage\n );\n\n newState.devices = sortedDevices;\n newState.filteredDevices = sortedDevices.slice(\n 0,\n newState.countPerPage\n );\n\n return newState;\n }\n case types.DEVICE_LIST_FILTER_BY_CUSOMTER_CODE : {\n console.log(\"DEVICE_LIST_FILTER_BY_CUSOMTER_CODE \");\n let newState = Object.assign({}, state);\n let sortedDevices = [...state.devices];\n\n if(action.sortOrder === \"ASC\") {\n sortedDevices.sort((a, b) => {\n if (a.customerCode.toLowerCase() < b.customerCode.toLowerCase()) return -1;\n if (a.customerCode.toLowerCase() > b.customerCode.toLowerCase()) return 1;\n return 0;\n });\n } else {\n sortedDevices.sort((a, b) => {\n if (a.customerCode.toLowerCase() > b.customerCode.toLowerCase()) return -1;\n if (a.customerCode.toLowerCase() < b.customerCode.toLowerCase()) return 1;\n return 0;\n });\n }\n\n newState.filteredCount = sortedDevices.length;\n newState.filteredPages = Math.ceil(\n newState.filteredCount / newState.countPerPage\n );\n\n newState.devices = sortedDevices;\n newState.filteredDevices = sortedDevices.slice(\n 0,\n newState.countPerPage\n );\n\n return newState;\n }\n case types.DEVICE_LIST_FILTER_BY_VOLTAGE: {\n console.log(\"DEVICE_LIST_FILTER_BY_VOLTAGE\");\n let newState = Object.assign({}, state);\n let sortedDevices = sortDevices(state.devices, \"voltageMain\", action.sortOrder, true);\n\n newState.filteredCount = sortedDevices.length;\n newState.filteredPages = Math.ceil(\n newState.filteredCount / newState.countPerPage\n );\n\n newState.devices = sortedDevices;\n newState.filteredDevices = sortedDevices.slice(\n 0,\n newState.countPerPage\n );\n\n return newState;\n }\n case types.DEVICE_LIST_FILTER_BY_PROD_TEMP: {\n console.log(\"DEVICE_LIST_FILTER_BY_PROD_TEMP\");\n let newState = Object.assign({}, state);\n let sortedDevices = sortDevices(state.devices, \"temperatureProduct\", action.sortOrder, true);\n\n newState.filteredCount = sortedDevices.length;\n newState.filteredPages = Math.ceil(\n newState.filteredCount / newState.countPerPage\n );\n\n newState.devices = sortedDevices;\n newState.filteredDevices = sortedDevices.slice(\n 0,\n newState.countPerPage\n );\n\n return newState;\n }\n case types.DEVICE_LIST_SORT_BY_DOOR: {\n console.log(\"DEVICE_LIST_SORT_BY_DOOR\");\n let newState = Object.assign({}, state);\n let sortedDevices = [...state.devices];\n\n sortedDevices = sortedDevices.sort((a, b) => {\n if (action.sortOrder === \"ASC\") {\n return a.doorFridge - b.doorFridge;\n } else {\n return b.doorFridge - a.doorFridge;\n }\n });\n\n newState.filteredCount = sortedDevices.length;\n newState.filteredPages = Math.ceil(\n newState.filteredCount / newState.countPerPage\n );\n\n // newState.devices = sortedDevices;\n newState.filteredDevices = sortedDevices.slice(\n 0,\n newState.countPerPage\n );\n\n return newState;\n }\n\n default:\n return state;\n }\n}\n\nfunction sortDevices(devices, key, sortOrder, isNumeric = false) {\n// @TODO: Implement based on type string/number/boolean\n const sortedDevices = [...devices];\n sortedDevices.sort((a, b) => {\n if (isNumeric) {\n return sortOrder === \"ASC\" ? a[key] - b[key] : b[key] - a[key];\n } else {\n return sortOrder === \"ASC\" ? a[key].localeCompare(b[key]) : b[key].localeCompare(a[key]);\n }\n });\n return sortedDevices;\n}\n","export const addInputDataToGraphSeries = (\n state,\n deviceData,\n dataInputProperty,\n inputDisplayName,\n time\n) => {\n if (deviceData.hasOwnProperty(dataInputProperty)) {\n let series = state.series.filter((s) => {\n return s.name === inputDisplayName;\n });\n\n if (series.length === 0) {\n series.push({\n name: inputDisplayName,\n data: [],\n });\n }\n\n const dataValue = deviceData[dataInputProperty];\n\n const newData = {\n x: time,\n y: dataValue,\n };\n\n let combinedSeriesData = [];\n\n if (state.dataPointCount >= state.maxDataPointCount) {\n // remove first data point and tag new on to the end\n combinedSeriesData = [\n ...series[0].data.slice(1, state.maxDataPointCount),\n newData,\n ];\n } else {\n combinedSeriesData = [...series[0].data, newData];\n }\n\n const updatedSeries = {\n name: inputDisplayName,\n data: combinedSeriesData,\n };\n\n return updatedSeries;\n }\n return;\n};\n\nexport const getGraphSeries = (state, deviceData, time) => {\n let graphSeries = [];\n\n const tempProductSeries = addInputDataToGraphSeries(\n state,\n deviceData,\n \"temperatureProduct\",\n \"Temperature - Product\",\n time\n );\n if (tempProductSeries) {\n graphSeries.push(tempProductSeries);\n }\n\n const doorSeries = addInputDataToGraphSeries(\n state,\n deviceData,\n \"doorFridge\",\n \"Door - Fridge\",\n time\n );\n if (doorSeries) {\n graphSeries.push(doorSeries);\n }\n\n const tempFridgeSeries = addInputDataToGraphSeries(\n state,\n deviceData,\n \"temperatureFridge\",\n \"Temperature - Fridge\",\n time\n );\n if (tempFridgeSeries) graphSeries.push(tempFridgeSeries);\n\n const compressorSeries = addInputDataToGraphSeries(\n state,\n deviceData,\n \"compressorFridge\",\n \"Compressor\",\n time\n );\n if (compressorSeries) {\n graphSeries.push(compressorSeries);\n }\n\n const voltageMainSeries = addInputDataToGraphSeries(\n state,\n deviceData,\n \"voltageMain\",\n \"Voltage - Main\",\n time\n );\n if (voltageMainSeries) {\n graphSeries.push(voltageMainSeries);\n }\n\n // TODO: Temporarily remove from chart\n // const voltageMainOutSeries = addInputDataToGraphSeries(\n // state,\n // deviceData,\n // \"voltageMainOut\",\n // \"Voltage - Main(Out)\",\n // time\n // );\n\n // if (voltageMainOutSeries) {\n // graphSeries.push(voltageMainOutSeries);\n // }\n\n const voltageBatterySeries = addInputDataToGraphSeries(\n state,\n deviceData,\n \"voltageBattery\",\n \"Voltage - Battery\",\n time\n );\n if (voltageBatterySeries) {\n graphSeries.push(voltageBatterySeries);\n }\n\n // TODO: Temporarily remove from chart\n // const tempDeviceChipSeries = addInputDataToGraphSeries(\n // state,\n // deviceData,\n // \"temperatureDeviceChip\",\n // \"Temperature - Device Chip\",\n // time\n // );\n // if (tempDeviceChipSeries) {\n // graphSeries.push(tempDeviceChipSeries);\n // }\n\n\n\n const doorMagnetSeries = addInputDataToGraphSeries(\n state,\n deviceData,\n \"doorMagnet\",\n \"Door - Magnet\",\n time\n );\n if (doorMagnetSeries) {\n graphSeries.push(doorMagnetSeries);\n }\n\n const tempAirSeries = addInputDataToGraphSeries(\n state,\n deviceData,\n \"temperatureAir\",\n \"Temperature - Air\",\n time\n );\n if (tempAirSeries) {\n graphSeries.push(tempAirSeries);\n }\n\n return graphSeries;\n};\n","import { combineReducers } from \"redux\";\nimport applicationState from \"../../application/reducers/applicationReducer\";\nimport eventLogData from \"../../eventLogs/reducers/eventLogReducer\";\nimport latestIncidents from \"../../incidents/reducers/latestIncidentsReducer\";\nimport incidentDetails from \"../../incidents/reducers/incidentDetailsReducer\";\nimport errors from \"../../errors/reducers/errorReducer\";\nimport deviceList from \"../../deviceList/reducers/deviceListReducer\";\nimport deviceNotification from \"../../deviceNotifications/reducers/deviceNotificationReducer\";\nimport customer from \"../../customer/reducers/customerReducer\";\nimport deviceTelemetryChartData from \"../../charts/reducers/deviceTelemetryChartDataReducer\";\nimport analysisDeviceTelemetryChartData from \"../../charts/reducers/analysisDeviceTelemetryChartDataReducer\";\nimport dataAnalysisParameters from \"../../dataAnalysis/reducers/dataAnalysisReducers\";\nimport incidentList from \"../../incidents/reducers/incidentListReducer\";\nimport incidentAlarmList from \"../../incidents/reducers/incidentAlarmListReducer\";\nimport incidentReportDropdownList from \"../../incidents/reducers/incidentReportDropdownListReducer\";\nimport deviceContacts from \"../../customerContact/reducers/deviceContactReducer\";\nimport deviceAlarmConfigList from \"../../deviceConfiguration/reducers/alarmConfigReducer\";\nimport newAlarmConfigDialog from \"../../deviceConfiguration/reducers/newAlarmConfigDialogReducer\";\nimport generalDeviceSettings from \"../../deviceConfiguration/reducers/generalSettingsReducer\";\nimport customerLocations from \"../../customer/reducers/customerLocationReducer\";\nimport deviceGroups from \"../../deviceGroup/reducers/deviceGroupsReducer\";\nimport deviceInventory from \"../../inventory/reducers/deviceInventoryReducer\";\nimport deviceInventoryHistory from \"../../inventory/reducers/deviceInventoryHistoryReducer\";\nimport deviceInventorySummary from \"../../inventory/reducers/deviceInventorySummaryReducer\";\nimport alarmContacts from \"../../deviceConfiguration/reducers/alarmContactReducer\";\nimport availableAlarmContacts from \"../../deviceConfiguration/reducers/availableAlarmContactReducer\";\nimport timezones from \"../../deviceConfiguration/reducers/timezoneReduder\";\nimport availabilitySchedule from \"../../deviceConfiguration/reducers/availabilityScheduleReducer\";\nimport currentUser from \"../../users/reducers/currentUserReducer\";\nimport customers from \"../../customer/reducers/customersReducer\";\nimport deviceProvisioningTemplates from \"../../provisioning/reducers/provisioningDeviceTemplateReducer\";\n\nconst rootReducer = combineReducers({\n applicationState,\n eventLogData,\n latestIncidents,\n incidentDetails,\n errors,\n deviceList,\n deviceNotification,\n customer,\n deviceTelemetryChartData,\n analysisDeviceTelemetryChartData,\n dataAnalysisParameters,\n incidentList,\n incidentAlarmList,\n incidentReportDropdownList,\n deviceContacts,\n deviceAlarmConfigList,\n newAlarmConfigDialog,\n generalDeviceSettings,\n customerLocations,\n deviceGroups,\n deviceInventory,\n deviceInventoryHistory,\n deviceInventorySummary,\n alarmContacts,\n availableAlarmContacts,\n timezones,\n availabilitySchedule,\n currentUser,\n customers,\n deviceProvisioningTemplates,\n});\n\nexport default rootReducer;\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function applicationReducer(\n state = initialState.applicationState,\n action\n) {\n switch (action.type) {\n case types.LOAD_DEVICE_LIST_SUCCESS: {\n let initialDeviceId = state.initialDeviceId;\n if (\n state.initialDeviceListLoaded === false &&\n initialDeviceId === null &&\n action.devices.length > 0\n ) {\n initialDeviceId = action.devices[0].id;\n }\n\n return {\n ...state,\n initialDeviceListLoaded: true,\n initialDeviceId: initialDeviceId,\n };\n }\n case types.SET_IS_CONNECTED: {\n let newState = Object.assign({}, state);\n newState.isConnected = action.isConnected;\n return newState;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\nexport default function eventLogDataReducer(\n state = initialState.eventLogData,\n action\n) {\n switch (action.type) {\n case types.LOAD_EVENT_LOG_DATA_SUCCESS: {\n if (state.length === 1 && state[0].eventLogs.length === 0) {\n const eventLogData = [];\n eventLogData.push(action.eventLog);\n const eventLogs = [];\n const newEventLog = {\n deviceId: action.deviceId,\n eventLogs: eventLogData,\n };\n eventLogs.push(newEventLog);\n\n return eventLogs;\n }\n\n const filtered = state.filter((e) => e.deviceId !== action.deviceId);\n\n const updatedEventLogData = [];\n const updatedEventLog = {\n deviceId: action.deviceId,\n eventLogs: action.eventLog,\n };\n updatedEventLogData.push(updatedEventLog);\n\n return [...filtered, ...updatedEventLogData];\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function latestIncidentsReducer(\n state = initialState.latestIncidents,\n action\n) {\n switch (action.type) {\n case types.LOAD_LATEST_CUSTOMER_INCIDENT_SUCCESS: {\n if (state.length === 0) {\n return action.incidents;\n }\n\n let newState = [...state];\n\n let index = -1;\n\n action.incidents.forEach((element) => {\n index = newState.findIndex((inc) => inc.id === element.id);\n\n if (index === -1) {\n newState.push(element);\n } else {\n newState[index] = element;\n }\n });\n\n return newState;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function incidentDetailsReducer(\n state = initialState.incidentDetails,\n action\n) {\n switch (action.type) {\n case types.LOAD_INCIDENT_DETAILS_SUCCESS: {\n if (state.length === 0) {\n let firstState = [];\n firstState.push(action.incidentDetails);\n return firstState;\n }\n\n let newState = [...state];\n let index = newState.findIndex(\n (inc) => inc.id === action.incidentDetails.id\n );\n\n if (index === -1) {\n newState.push(action.incidentDetails);\n } else {\n newState[index] = action.incidentDetails;\n }\n\n return newState;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function errorReducer(state = initialState.errors, action) {\n switch (action.type) {\n case types.LOG_ERROR: {\n let newState = [...state];\n newState.push(action.error);\n\n return newState;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function deviceNotificationReducer(\n state = initialState.deviceNotification,\n action\n) {\n switch (action.type) {\n case types.SERVICE_BUS_SUBSCRIPTION_DETAILS_LOADED: {\n let newState = Object.assign({}, state);\n newState.serviceBusSubscription = action.subscription;\n return newState;\n }\n // case types.SET_IS_CONNECTED: {\n // let newState = Object.assign({}, state);\n // newState.isConnected = action.isConnected;\n // return newState;\n // }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function customerReducer(state = initialState.customer, action) {\n switch (action.type) {\n case types.CUSTOMER_DETAILS_LOADED: {\n return action.customer;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\nimport {\n getTime,\n getTimeWithoutTimezoneConversion,\n} from \"../../utils/dateUtils\";\nimport { getGraphSeries } from \"../helpers/telemetryDataToChartSeriesHelper\";\n\nexport default function deviceTelemetryChartDataReducer(\n state = initialState.deviceTelemetryChartData,\n action\n) {\n switch (action.type) {\n case types.DEVICE_TELEMETRY_DATA_UPDATE: {\n const time = getTimeWithoutTimezoneConversion(\n action.deviceData.dataTimeLoc\n );\n\n let stateDevice = state.find(\n (d) => d.deviceId === action.deviceData.deviceId\n );\n\n let newDevice = false;\n if (stateDevice === undefined) {\n newDevice = true;\n stateDevice = {\n deviceId: action.deviceData.deviceId,\n series: [],\n dataPointCount: 0,\n maxDataPointCount: 10,\n };\n }\n let graphSeries = getGraphSeries(stateDevice, action.deviceData, time);\n\n if (state.length === 0) {\n stateDevice.series = graphSeries;\n stateDevice.dataPointCount = 1;\n let newState = [];\n newState.push(stateDevice);\n return newState;\n }\n\n if (newDevice) {\n stateDevice.series = graphSeries;\n stateDevice.dataPointCount = 1;\n\n return [...state, stateDevice];\n }\n\n return state.map((device) => {\n if (device.deviceId === action.deviceData.deviceId) {\n return {\n ...device,\n series: graphSeries,\n dataPointCount: device.dataPointCount + 1,\n };\n }\n return device;\n });\n }\n case types.RESET_LIVE_DEVICE_TELEMETRY_DATA: {\n return {\n deviceId: \"\",\n series: [],\n dataPointCount: 0,\n maxDataPointCount: 10,\n };\n }\n case types.LOAD_RECENT_TELEMETRY_DATA_SUCCESS: {\n let graphSeries = [];\n let time;\n\n let stateDevice = {\n deviceId: action.deviceId,\n series: [],\n dataPointCount: 0,\n maxDataPointCount: 10,\n };\n\n if (action.telemetryData.length > 10) {\n action.telemetryData = action.telemetryData.slice(-10);\n }\n\n action.telemetryData.forEach((element) => {\n time = getTime(element.valueTime);\n graphSeries = getGraphSeries(stateDevice, element, time);\n stateDevice.series = graphSeries;\n });\n\n stateDevice.dataPointCount = action.telemetryData.length;\n\n return [...state, stateDevice];\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\nimport { formatDateIgnoreOffset } from \"../../utils/dateUtils\";\nimport { getGraphSeries } from \"../helpers/telemetryDataToChartSeriesHelper\";\n\nexport default function analysisDeviceTelemetryChartDataReducer(\n state = initialState.analysisDeviceTelemetryChartData,\n action\n) {\n switch (action.type) {\n case types.LOAD_ANALYSIS_DEVICE_TELEMETRY_DATA_SUCCESS: {\n let graphSeries = [];\n let time;\n let newState = Object.assign({}, state);\n\n action.telemetryData.forEach((element) => {\n time = formatDateIgnoreOffset(element.valueTime);\n graphSeries = getGraphSeries(newState, element, time);\n\n newState.series = graphSeries;\n });\n\n newState.deviceId = action.deviceId;\n\n return newState;\n }\n case types.RESET_ANALYIS_DEVICE_TELEMETRY_DATA: {\n return {\n deviceId: \"\",\n series: [],\n };\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function dataAnalysisReducer(\n state = initialState.dataAnalysisParameters,\n action\n) {\n switch (action.type) {\n case types.SAVE_DATA_ANALYSIS_START_DATE: {\n return {\n ...state,\n startDate: action.startDate,\n };\n }\n case types.SAVE_DATA_ANALYSIS_END_DATE: {\n return {\n ...state,\n endDate: action.endDate,\n };\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function incidentListReducer(\n state = initialState.incidentList,\n action\n) {\n switch (action.type) {\n case types.LOAD_DEVICE_INCIDENT_LIST_SUCCESS: {\n if (state.length === 0) {\n return action.incidents;\n }\n\n return [...state, ...action.incidents];\n }\n case types.RESET_DEVICE_INCIDENT_LIST: {\n return [];\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function incidentListReducer(\n state = initialState.incidentAlarmList,\n action\n) {\n switch (action.type) {\n case types.LOAD_DEVICE_INCIDENT_ALARM_LIST_SUCCESS: {\n const alarmIncident = {\n incident: action.incident,\n alarms: action.incidentAlarmList,\n };\n\n if (state.length === 0) {\n let firstState = [];\n firstState.push(alarmIncident);\n return firstState;\n }\n\n const incidentIndex = state.findIndex(\n (inc) => inc.incident === action.incident\n );\n\n let newState = JSON.parse(JSON.stringify(state));\n\n if (incidentIndex > -1) {\n newState[incidentIndex].alarms = action.incidentAlarmList;\n } else {\n newState.push(alarmIncident);\n }\n\n return newState;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function incidentReportDropdownListReducer(\n state = initialState.incidentReportDropdownList,\n action\n) {\n switch (action.type) {\n case types.LOAD_INCIDENT_REPORT_DROPDOWN_LIST_SUCCESS: {\n return action.dropdownlist;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function deviceContactsReducer(\n state = initialState.deviceContacts,\n action\n) {\n switch (action.type) {\n case types.LOAD_DEVICE_CUSTOMER_CONTACT_INFO_SUCCESS: {\n if (state.length === 1 && state[0].contactInfo.length === 0) {\n const deviceContactData = [];\n const newContactData = {\n deviceId: action.deviceId,\n contactInfo: action.contactInfo,\n };\n deviceContactData.push(newContactData);\n return deviceContactData;\n }\n\n const updatedContactInfoData = [];\n const filtered = state.filter((e) => e.deviceId !== action.deviceId);\n const contactData = {\n deviceId: action.deviceId,\n contactInfo: action.contactInfo,\n };\n updatedContactInfoData.push(contactData);\n\n return [...filtered, ...updatedContactInfoData];\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function incidentListReducer(\n state = initialState.deviceAlarmConfigList,\n action\n) {\n switch (action.type) {\n case types.LOAD_DEVICE_ALARM_CONFIG_LIST_SUCCESS: {\n return action.alarmConfigList;\n }\n case types.RESET_DEVICE_ALARM_CONFIG_LIST: {\n return [];\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function newAlarmConfigDialogReducer(\n state = initialState.newAlarmConfigDialog,\n action\n) {\n switch (action.type) {\n case types.TOGGLE_NEW_ALARM_CONFIG_DIALOG: {\n return {\n ...state,\n open: action.open,\n };\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function generalDeviceSettingsReducer(\n state = initialState.generalDeviceSettings,\n action\n) {\n switch (action.type) {\n case types.LOAD_GENERAL_DEVICE_SETTINGS_SUCCESS: {\n return action.settings;\n }\n // case types.RESET_DEVICE_ALARM_CONFIG_LIST: {\n // return [];\n // }\n case types.UPDATE_GENERAL_DEVICE_SETTINGS_LOCATION: {\n return {\n ...state,\n customerLocationId: action.customerLocationId,\n };\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function customerLocationReducer(\n state = initialState.customerLocations,\n action\n) {\n switch (action.type) {\n case types.CUSTOMER_LOCATIONS_LOADED_SUCCESS: {\n return action.locations;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function deviceGroupsReducer(\n state = initialState.deviceGroups,\n action\n) {\n switch (action.type) {\n case types.LOAD_DEVICE_GROUPS_SUCCESS: {\n // remove the all groups setting, this is always selected\n // let deviceGroups = action.deviceGroups.filter(\n // (g) => g.deviceGroupId !== 1\n // );\n // deviceGroups[2].memberFlag = \"Y\";\n //return deviceGroups;\n //return action.deviceGroups.filter((g) => g.deviceGroupId !== 1);\n return action.deviceGroups;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function deviceInventoryReducer(\n state = initialState.deviceInventory,\n action\n) {\n switch (action.type) {\n case types.LOAD_DEVICE_INVENTORY_SUCCESS: {\n const deviceInventory = {\n deviceId: action.deviceId,\n inventory: action.deviceInventory.inventoryList,\n undientifiedTags: action.deviceInventory.undientifiedTags,\n totalItems: action.deviceInventory.totalItems,\n productCounts: action.deviceInventory.productCounts,\n scanCheckResult: action.deviceInventory.scanCheckResult,\n };\n\n if (state.length === 0) {\n let firstState = [];\n firstState.push(deviceInventory);\n return firstState;\n }\n\n const deviceIndex = state.findIndex(\n (inv) => inv.deviceId === action.deviceId\n );\n if (deviceIndex > -1) {\n let newState = JSON.parse(JSON.stringify(state));\n newState[deviceIndex].inventory = action.deviceInventory.inventoryList;\n newState[deviceIndex].undientifiedTags = action.deviceInventory.undientifiedTags;\n newState[deviceIndex].totalItems = action.deviceInventory.totalItems;\n newState[deviceIndex].productCounts = action.deviceInventory.productCounts;\n newState[deviceIndex].scanCheckResult = action.deviceInventory.scanCheckResult;\n\n return newState;\n } else {\n return [...state, deviceInventory];\n }\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function deviceInventoryHistoryReducer(\n state = initialState.deviceInventoryHistory,\n action\n) {\n switch (action.type) {\n case types.LOAD_DEVICE_INVENTORY_HISTORY_SUCCESS: {\n const deviceInventoryHistory = {\n deviceId: action.deviceId,\n inventoryHistory: action.deviceInventoryHistory.stockChangedEventList,\n token: action.deviceInventoryHistory.token,\n };\n\n if (state.length === 0) {\n let firstState = [];\n firstState.push(deviceInventoryHistory);\n return firstState;\n }\n\n const deviceIndex = state.findIndex(\n (inv) => inv.deviceId === action.deviceId\n );\n if (deviceIndex > -1) {\n let newState = JSON.parse(JSON.stringify(state));\n newState[deviceIndex].inventoryHistory =\n action.deviceInventoryHistory.stockChangedEventList;\n newState[deviceIndex].token = action.deviceInventoryHistory.token;\n\n return newState;\n } else {\n return [...state, deviceInventoryHistory];\n }\n }\n case types.LOAD_DEVICE_INVENTORY_HISTORY_MORE_SUCCESS: {\n const deviceIndex = state.findIndex(\n (inv) => inv.deviceId === action.deviceId\n );\n if (deviceIndex > -1) {\n let newState = JSON.parse(JSON.stringify(state));\n const currentHistory = newState[deviceIndex].inventoryHistory;\n const newHistory = currentHistory.concat(\n action.deviceInventoryHistory.stockChangedEventList\n );\n newState[deviceIndex].inventoryHistory = newHistory;\n newState[deviceIndex].token = action.deviceInventoryHistory.token;\n\n return newState;\n }\n return state;\n }\n case types.REFRESH_DEVICE_INVENTORY_HISTORY_SUCCESS: {\n const deviceInventoryHistory = {\n deviceId: action.deviceId,\n inventoryHistory: action.deviceInventoryHistory.stockChangedEventList,\n token: action.deviceInventoryHistory.token,\n };\n\n if (state.length === 0) {\n let firstState = [];\n firstState.push(deviceInventoryHistory);\n return firstState;\n }\n\n const deviceIndex = state.findIndex(\n (inv) => inv.deviceId === action.deviceId\n );\n if (deviceIndex > -1) {\n let newState = JSON.parse(JSON.stringify(state));\n newState[deviceIndex].inventoryHistory =\n action.deviceInventoryHistory.stockChangedEventList;\n newState[deviceIndex].token = action.deviceInventoryHistory.token;\n\n return newState;\n }\n return state;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function deviceInventorySummaryReducer(\n state = initialState.deviceInventorySummary,\n action\n) {\n switch (action.type) {\n case types.LOAD_DEVICE_INVENTORY_SUMMARY_SUCCESS: {\n const deviceInventorySummary = {\n deviceId: action.deviceId,\n inventorySummary: action.deviceInventorySummary.inventorySummaryList\n };\n\n if (state.length === 0) {\n let firstState = [];\n firstState.push(deviceInventorySummary);\n return firstState;\n }\n\n const deviceIndex = state.findIndex(\n (inv) => inv.deviceId === action.deviceId\n );\n if (deviceIndex > -1) {\n let newState = JSON.parse(JSON.stringify(state));\n newState[deviceIndex].inventorySummary =\n action.deviceInventorySummary.inventorySummaryList;\n\n return newState;\n } else {\n return [...state, deviceInventorySummary];\n }\n }\n case types.REFRESH_DEVICE_INVENTORY_SUMMARY_SUCCESS: {\n const deviceInventorySummary = {\n deviceId: action.deviceId,\n inventorySummary: action.deviceInventorySummary.inventorySummaryList,\n };\n\n if (state.length === 0) {\n let firstState = [];\n firstState.push(deviceInventorySummary);\n return firstState;\n }\n\n const deviceIndex = state.findIndex(\n (inv) => inv.deviceId === action.deviceId\n );\n if (deviceIndex > -1) {\n let newState = JSON.parse(JSON.stringify(state));\n newState[deviceIndex].inventorySummary =\n action.deviceInventorySummary.inventorySummaryList;\n\n return newState;\n }\n return state;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function alarmContactsReducer(\n state = initialState.alarmContacts,\n action\n) {\n switch (action.type) {\n case types.LOAD_ALARM_CONTACTS_SUCCESS: {\n const alarmContacts = {\n alarmId: action.alarmId,\n contacts: action.alarmContacts,\n };\n\n if (state.length === 0) {\n let firstState = [];\n firstState.push(alarmContacts);\n return firstState;\n }\n\n const alarmIndex = state.findIndex(\n (alarm) => alarm.alarmId === action.alarmId\n );\n\n let newState = JSON.parse(JSON.stringify(state));\n\n if (alarmIndex > -1) {\n newState[alarmIndex].contacts = action.alarmContacts;\n } else {\n newState.push(alarmContacts);\n }\n\n return newState;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function alarmContactsReducer(\n state = initialState.availableAlarmContacts,\n action\n) {\n switch (action.type) {\n case types.LOAD_ALARM_AVIALABLE_CONTACTS_SUCCESS: {\n const alarmContacts = {\n alarmId: action.alarmId,\n contacts: action.alarmContacts,\n };\n\n if (state.length === 0) {\n let firstState = [];\n firstState.push(alarmContacts);\n return firstState;\n }\n\n const alarmIndex = state.findIndex(\n (alarm) => alarm.alarmId === action.alarmId\n );\n\n let newState = JSON.parse(JSON.stringify(state));\n\n if (alarmIndex > -1) {\n newState[alarmIndex].contacts = action.alarmContacts;\n } else {\n newState.push(alarmContacts);\n }\n\n return newState;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function timezoneReducer(\n state = initialState.timezones,\n action\n) {\n switch (action.type) {\n case types.LOAD_TIMEZONES_SUCCESS: {\n return action.timezones;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function availabilityScheduleReducer(\n state = initialState.availabilitySchedule,\n action\n) {\n switch (action.type) {\n case types.LOAD_AVAILABILITY_SCHEDULE_SUCCESS: {\n return action.schedule;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function currentUserReducer(\n state = initialState.currentUser,\n action\n) {\n switch (action.type) {\n case types.SET_CURRENT_USER: {\n // todo: potentially reduce this down rather than have the whole user object in state\n return action.user;\n }\n // case types.RESET_DEVICE_ALARM_CONFIG_LIST: {\n // return [];\n // }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function customerReducer(\n state = initialState.customers,\n action\n) {\n switch (action.type) {\n case types.CUSTOMER_LIST_LOADED: {\n return action.customers;\n }\n default:\n return state;\n }\n}\n","import * as types from \"../../common/state/actionTypes\";\nimport initialState from \"../../common/state/initialState\";\n\nexport default function incidentListReducer(\n state = initialState.deviceProvisioningTemplates,\n action\n) {\n switch (action.type) {\n case types.DEVICE_PROVISIONING_TEMPLATES_LOADED: {\n return action.deviceTemplates;\n }\n default:\n return state;\n }\n}\n","import { createStore, applyMiddleware } from \"redux\";\nimport rootReducer from \"../common/state/rootReducer\";\nimport thunk from \"redux-thunk\";\n\nexport default function configureStore(initialState) {\n return createStore(rootReducer, initialState, applyMiddleware(thunk));\n}\n","export const BEGIN_API_CALL = \"BEGIN_API_CALL\";\nexport const API_CALL_ERROR = \"API_CALL_ERROR\";\nexport const LOAD_DEVICES_SUCCESS = \"LOAD_DEVICES_SUCCESS\";\nexport const LOAD_DEVICE_DETAILS_SUCCESS = \"LOAD_DEVICE_DETAILS_SUCCESS\";\nexport const LOAD_DEVICE_STATUS_SUCCESS = \"LOAD_DEVICE_STATUS_SUCCESS\";\nexport const LOAD_DEVICE_INPUTS_SUCCESS = \"LOAD_DEVICE_INPUTS_SUCCESS\";\nexport const DEVICE_STATUS_UPDATE = \"DEVICE_STATUS_UPDATE\";\nexport const DASHBOARD_STATUS_UPDATE = \"DASHBOARD_STATUS_UPDATE\";\nexport const SET_CURRENT_USER = \"SET_CURRENT_USER\";\nexport const USER_LOGGED_OUT = \"USER_LOGGED_OUT\";\n\nexport const LOAD_EVENT_LOG_DATA_SUCCESS = \"LOAD_EVENT_LOG_DATA_SUCCESS\";\nexport const DEVICE_TELEMETRY_UPDATE = \"DEVICE_TELEMETRY_UPDATE\";\nexport const LOAD_LATEST_CUSTOMER_INCIDENT_SUCCESS =\n \"LOAD_LATEST_CUSTOMER_INCIDENT_SUCCESS\";\nexport const LOAD_INCIDENT_DETAILS_SUCCESS = \"LOAD_INCIDENT_DETAILS_SUCCESS\";\nexport const LOAD_DEVICE_INCIDENT_LIST_SUCCESS =\n \"LOAD_DEVICE_INCIDENT_LIST_SUCCESS\";\nexport const RESET_DEVICE_INCIDENT_LIST = \"RESET_DEVICE_INCIDENT_LIST\";\nexport const LOAD_DEVICE_INCIDENT_ALARM_LIST_SUCCESS =\n \"LOAD_DEVICE_INCIDENT_ALARM_LIST_SUCCESS\";\nexport const LOG_ERROR = \"LOG_ERROR\";\nexport const LOAD_DEVICE_LIST_SUCCESS = \"LOAD_DEVICE_LIST_SUCCESS\";\nexport const DEVICE_LIST_FILTER_BY_STATUS = \"DEVICE_LIST_FILTER_BY_STATUS\";\nexport const DEVICE_LIST_SEARCH_BY_VALUE = \"DEVICE_LIST_SEARCH_BY_VALUE\";\nexport const DEVICE_LIST_FILTER_BY_LOCATION = \"DEVICE_LIST_FILTER_BY_LOCATION\";\nexport const DEVICE_LIST_FILTER_BY_AlARM = \"DEVICE_LIST_FILTER_BY_AlARM\";\nexport const DEVICE_LIST_FILTER_BY_OK = \"DEVICE_LIST_FILTER_BY_OK\";\nexport const DEVICE_LIST_FILTER_CLEAR = \"DEVICE_LIST_FILTER_CLEAR\";\nexport const DEVICE_LIST_FILTER_BY_FAVOURITE =\n \"DEVICE_LIST_FILTER_BY_FAVOURITE\";\nexport const DEVICE_LIST_FILTER_BY_DOOR = \"DEVICE_LIST_FILTER_BY_DOOR\";\nexport const DEVICE_LIST_SET_SELECTED_DEVICE =\n \"DEVICE_LIST_SET_SELECTED_DEVICE\";\nexport const DEVICE_LIST_LOAD_EXACT_PAGE = \"DEVICE_LIST_LOAD_EXACT_PAGE\";\nexport const DEVICE_LIST_LOAD_NEW_PAGE = \"DEVICE_LIST_LOAD_NEW_PAGE\";\nexport const DEVICE_LIST_NOTIFICATION_UPDATE =\n \"DEVICE_LIST_NOTIFICATION_UPDATE\";\nexport const DEVICE_LIST_UPDATE_DEVICE_DATA = \"DEVICE_LIST_UPDATE_DEVICE_DATA\";\nexport const DEVICE_LIST_UPDATE_DEVICE_LIST_DATA =\n \"DEVICE_LIST_UPDATE_DEVICE_LIST_DATA\";\nexport const SERVICE_BUS_SUBSCRIPTION_DETAILS_LOADED =\n \"SERVICE_BUS_SUBSCRIPTION_DETAILS_LOADED\";\nexport const CUSTOMER_DETAILS_LOADED = \"CUSTOMER_DETAILS_LOADED\";\nexport const CUSTOMER_LOCATIONS_LOADED_SUCCESS =\n \"CUSTOMER_LOCATIONS_LOADED_SUCCESS\";\nexport const CUSTOMER_SUBCUSTOMER_FILTER_LOADED_SUCCESS =\n \"CUSTOMER_SUBCUSTOMER_FILTER_LOADED_SUCCESS\";\nexport const DEVICE_TELEMETRY_DATA_UPDATE = \"DEVICE_TELEMETRY_DATA_UPDATE\";\nexport const RESET_LIVE_DEVICE_TELEMETRY_DATA =\n \"RESET_LIVE_DEVICE_TELEMETRY_DATA\";\nexport const LOAD_RECENT_TELEMETRY_DATA_SUCCESS =\n \"LOAD_RECENT_TELEMETRY_DATA_SUCCESS\";\nexport const LOAD_ANALYSIS_DEVICE_TELEMETRY_DATA_SUCCESS =\n \"LOAD_ANALYSIS_DEVICE_TELEMETRY_DATA_SUCCESS\";\nexport const RESET_ANALYIS_DEVICE_TELEMETRY_DATA =\n \"RESET_ANALYIS_DEVICE_TELEMETRY_DATA\";\nexport const SAVE_DATA_ANALYSIS_START_DATE = \"SAVE_DATA_ANALYSIS_START_DATE\";\nexport const SAVE_DATA_ANALYSIS_END_DATE = \"SAVE_DATA_ANALYSIS_END_DATE\";\nexport const USER_DEVICE_FAVOURITE_ADDED = \"USER_DEVICE_FAVOURITE_ADDED\";\nexport const USER_DEVICE_FAVOURITE_DELETED = \"USER_DEVICE_FAVOURITE_DELETED\";\nexport const LOAD_INCIDENT_REPORT_DROPDOWN_LIST_SUCCESS =\n \"LOAD_INCIDENT_REPORT_DROPDOWN_LIST_SUCCESS\";\nexport const LOAD_DEVICE_CUSTOMER_CONTACT_INFO_SUCCESS =\n \"LOAD_DEVICE_CUSTOMER_CONTACT_INFO_SUCCESS\";\nexport const LOAD_DEVICE_ALARM_CONFIG_LIST_SUCCESS =\n \"LOAD_DEVICE_ALARM_CONFIG_LIST_SUCCESS\";\nexport const RESET_DEVICE_ALARM_CONFIG_LIST = \"RESET_DEVICE_ALARM_CONFIG_LIST\";\nexport const TOGGLE_NEW_ALARM_CONFIG_DIALOG = \"TOGGLE_NEW_ALARM_CONFIG_DIALOG\";\nexport const LOAD_GENERAL_DEVICE_SETTINGS_SUCCESS =\n \"LOAD_GENERAL_DEVICE_SETTINGS_SUCCESS\";\nexport const LOAD_DEVICE_GROUPS_SUCCESS = \"LOAD_DEVICE_GROUPS_SUCCESS\";\nexport const ACKNOWLEDGE_INCIDENT_ALARM_SUCCESS =\n \"ACKNOWLEDGE_INCIDENT_ALARM_SUCCESS\";\nexport const LOAD_DEVICE_INVENTORY_SUCCESS = \"LOAD_DEVICE_INVENTORY_SUCCESS\";\nexport const LOAD_DEVICE_INVENTORY_PRODUCT_COUNT_SUCCESS = \"LOAD_DEVICE_INVENTORY_PRODUCT_COUNT_SUCCESS\";\nexport const LOAD_DEVICE_INVENTORY_HISTORY_SUCCESS =\n \"LOAD_DEVICE_INVENTORY_HISTORY_SUCCESS\";\nexport const LOAD_DEVICE_INVENTORY_SUMMARY_SUCCESS =\n \"LOAD_DEVICE_INVENTORY_SUMMARY_SUCCESS\";\nexport const REFRESH_DEVICE_INVENTORY_HISTORY_SUCCESS =\n \"REFRESH_DEVICE_INVENTORY_HISTORY_SUCCESS\";\nexport const REFRESH_DEVICE_INVENTORY_SUMMARY_SUCCESS =\n \"REFRESH_DEVICE_INVENTORY_SUMMARY_SUCCESS\";\nexport const LOAD_DEVICE_INVENTORY_HISTORY_MORE_SUCCESS =\n \"LOAD_DEVICE_INVENTORY_HISTORY_MORE_SUCCESS\";\nexport const LOAD_CHECK_SCAN_SUCCESS =\n \"LOAD_CHECK_SCAN_SUCCESS\";\nexport const LOAD_ALARM_CONTACTS_SUCCESS = \"LOAD_ALARM_CONTACTS_SUCCESS\";\nexport const LOAD_ALARM_AVIALABLE_CONTACTS_SUCCESS =\n \"LOAD_ALARM_AVIALABLE_CONTACTS_SUCCESS\";\nexport const LOAD_TIMEZONES_SUCCESS = \"LOAD_TIMEZONES_SUCCESS\";\nexport const LOAD_AVAILABILITY_SCHEDULE_SUCCESS =\n \"LOAD_AVAILABILITY_SCHEDULE_SUCCESS\";\nexport const UPDATE_GENERAL_DEVICE_SETTINGS_LOCATION =\n \"UPDATE_GENERAL_DEVICE_SETTINGS_LOCATION\";\nexport const CUSTOMER_LIST_LOADED = \"CUSTOMER_LIST_LOADED\";\nexport const DEVICE_PROVISIONING_TEMPLATES_LOADED =\n \"DEVICE_PROVISIONING_TEMPLATES_LOADED\";\nexport const DEVICE_LIST_SHOW_HIGH_TEMP = \"DEVICE_LIST_SHOW_HIGH_TEMP\";\nexport const DEVICE_LIST_IS_ENBALED = \"DEVICE_LIST_IS_ENBALED\";\nexport const DEVICE_LIST_FILTER_BY_NAME = \"DEVICE_LIST_FILTER_BY_NAME\";\nexport const DEVICE_LIST_FILTER_BY_CUSOMTER_CODE = \"DEVICE_LIST_FILTER_BY_CUSOMTER_CODE\";\nexport const DEVICE_LIST_FILTER_BY_VOLTAGE = \"DEVICE_LIST_FILTER_BY_VOLTAGE\";\nexport const DEVICE_LIST_FILTER_BY_PROD_TEMP = \"DEVICE_LIST_FILTER_BY_PROD_TEMP\";\nexport const DEVICE_LIST_SORT_BY_DOOR = \"DEVICE_LIST_SORT_BY_DOOR\";\nexport const SET_IS_CONNECTED = 'SET_IS_CONNECTED';\n"],"sourceRoot":""}