{"version":3,"sources":["env.js","environment.js","AuthProvider.js","Colors/WattsBluePrimary.js","Colors/WattsBlueSecondary.js","Colors/WattsTheme.js","Components/SideMenuDrawer.js","Components/WattsAppBar/WattsAppBar.js","Components/WattsSidebar.js","Components/WattsNotification.js","Components/Devices/DeviceStatusLookup.js","Components/styles.valiable.js","Helpers.js","Components/NotificationTray.js","Components/WattsLayout.js","Components/Dashboard/routes.js","Utils/ra/Loading.jsx","Components/WattsLoading.js","Components/WattsLoginPage.js","Components/ScrollToTop.js","Components/CancelButton.js","Components/WattsToolbar.js","Components/FormHeader.js","Components/WattsFormIterator.js","Components/RequiredFieldNote.js","Components/Locations/LocationFormLayout.js","Components/Locations/CreateLocation.js","Components/Locations/EditLocation.js","Components/Devices/DeviceCard.js","Components/Devices/TelemetryCardHelpModalButton.js","Components/TemperatureDialog.js","Components/Devices/TelemetryCardEditModalButton.js","Components/ContextMenuOption.js","Components/Devices/CreateDeviceModal.js","Components/Locations/InviteUserModal.js","Components/Buttons/AddDeviceOrUserButton.js","dataProvider.js","Components/DeleteModal.js","Components/Locations/UserCardMenu.js","Components/Locations/UserCard.js","Components/CardGrid.js","Components/Locations/LeaveLocationDialog.js","Components/Devices/DeviceInfoBanner.js","Components/Locations/LocationBanner.js","Components/NoAccessPage.js","Components/Locations/LocationViewLayout.js","Components/Locations/LocationView.js","Components/Dashboard/ApplicationTitle/style.js","Components/Dashboard/ApplicationTitle/index.jsx","Components/Dashboard/style.js","Components/Dashboard/IntellistationJuniorTile.jsx","Components/Dashboard/constants.js","Components/Dashboard/index.jsx","Components/DatePickerInput.js","Components/WattsImageField.js","Components/WattsImageInput.js","Components/Devices/DeviceFormLayout.js","Components/Devices/CreateDevice.js","Components/Devices/EditDevice.js","Components/Devices/TelemetryCard.js","Components/Devices/TelemetryCardMenu.js","Components/Devices/DeviceErrorHelpDialog.js","Components/Devices/DeviceStatusNotification.js","Components/Devices/DeviceHistoryChart.js","Components/Devices/DeviceLastUpdated.js","Components/Devices/DeviceDashboardTab.js","Components/Devices/DeviceMonitorTab.js","Components/Devices/DeviceScheduleTab.js","Components/Devices/DeviceInfoModal.js","Components/Devices/DeviceBanners.js","Components/Devices/DeviceView.js","Components/Settings/SettingsFormLayout.js","Components/Settings/EditSettings.js","Components/Account/AccountFormLayout.js","Components/Account/EditAccount.js","Components/OwnershipTransferModal.js","Components/CardList.js","Components/Locations/LocationCard.js","App.js","index.js"],"names":["envConfig","auth","instance","process","clientId","redirectUrl","logoutUri","scopes","split","environment","authorization","issuer","allowedUrls","redirectUri","setupAutomaticSilentRefresh","storage","b2cUrls","edit","resetPassword","baseUrl","_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","this","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","delegateYield","msalConfig","navigationClientService","NavigationClient","authority","concat","knownAuthorities","postLogoutRedirectUri","editProfileUrl","system","navigationClient","cache","cacheLocation","storeAuthStateInCookie","msalInstance","PublicClientApplication","authProvider","AuthProvider","_this","_classCallCheck","login","localStorage","clear","sessionStorage","loginRedirect","err","console","error","logout","logoutRedirect","removeItem","reject","editProfile","checkAuth","_asyncToGenerator","_callee","account","_context","window","location","href","includes","setTimeout","getUserAccount","localAccountId","setItem","acquireTokenSilent","res","accessToken","setUser","getItem","idTokenClaims","setUserAccount","checkError","getPermissions","idToken","axios","get","headers","Cache-control","Pragma","Expires","Authorization","response","data","user","JSON","stringify","userId","pendingLocationTransfers","version","claims","aad_givenname","given_name","aad_surname","family_name","country","emailAddress","email","getActiveAccount","getAllAccounts","handleRedirectPromise","oid","sub","WattsBluePrimary","50","100","200","300","400","500","600","700","800","900","main","WattsBlueSecondary","WattsTheme","createMuiTheme","palette","primary","secondary","breakpoints","xs","sm","md","lg","xl","overrides","MuiToolbar","root","backgroundColor","MuiFormControl","marginDense","marginBottom","MuiPaper","elevation1","boxShadow","MuiButton","textTransform","withStyles","link","textDecoration","color","button","fontSize","min-height","padding","drawer","width","menuLogo","menuDivider","margin","menuIcon","font-size","list","listItem","border-radius","font-weight","height","&:hover","background","listItemText","padding-left","menuText","&:hover div, &:hover svg, &:focus div, &:focus svg, &:active div, &:active svg","props","_React$useState","React","useState","isOpen","_React$useState2","_slicedToArray","state","setState","toggleDrawer","open","event","key","_objectSpread","navItems","manage","label","icon","faMapMarkerAlt","route","faUser","faCog","info","faQuestionCircle","faShieldCheck","access","faSignOut","onClick","ListGrouping","listProps","groupItems","navItemGroup","listClass","classes","createElement","Divider","className","map","navItem","Link","to","getLinkItem","target","ListItem","ListItemIcon","FontAwesomeIcon","ListItemText","disableTypography","VersionDisplay","useStyles","makeStyles","versionDisplay","font-family","font-stretch","font-style","line-height","letter-spacing","margin-top","margin-left","top","position","transform","styles","Button","faBars","Drawer","onClose","src","alt","role","onKeyDown","List","box-shadow","flex-direction","justify-content","flexContent","display","notificationIcon","right","cursor","WattsAppBar","transparent","appBarStyles","AppBar","SideMenuDrawer","iconPlaceholderStyles","iconPlaceholder","GetNavBar","rightcontent","WattsSidebar","WattsNotification","Notification","anchorOrigin","vertical","horizontal","statuses","0","faTimesOctagon","1","2","3","faWrench","4","faThermometerFull","5","faThermometerQuarter","6","faWifiSlash","7","faClock","8","faExclamationCircle","9","faCheckCircle","10","11","faBolt","12","13","faLeaf","downXl","downLg","downMd","downSm","downXs","upSm","getPermissionList","permissions","ret","Alerts","Devices","Locations","Users","undefined","permission","group","resources","resource","actions","action","getUserTempScale","device","tempScale","TempUnits","Val","getUserSettingsTempScale","DEFAULT_TEMP_VALUE","userString","parse","temperatureScale","getUTCDate","date","utcOffsetValue","ZoneOffset","zoneOff","Hours","Minutes","getUTCOffset","result","moment","add","toDate","formatToUTCDate","toLocaleString","getHelperStyles","_heading","heading2","heading3","heading4","_defineProperty","heading6","subtitle1","subtitle2","ADD_BUTTON_STYLES","left","minHeight","minWidth","marginLeft","z-index","&:hover, &:active, &:focus","SANITIZATION_STATUS","id","condition","cause","howToClear","controlBehavior","priority","prioritySort","first","second","status","getMixedOutletTemp","record","defaultValue","tempText","Sensors","MixOutlet","renderTemperature","isDeviceOffline","parsedValue","parseFloat","toFixed","NONE","getLocationAddress","address","addressBuilder","address2","city","state_province","zipcode","join","SomeDevicesHaveErrors","faBellSolid","style","marginRight","fontWeight","faTimes","close","NoNotificationMessage","container","textAlign","message","_ref","NotificationHeader","_ref2","headerText","NotificationTray","_React$Component","_possibleConstructorReturn","_getPrototypeOf","_isMounted","closeNotification","hideNotification","handleOpen","bind","_assertThisInitialized","trayOpen","anchorEl","notificationCount","sortby","notificationList","handleSnackbar","_inherits","_createClass","currentTarget","document","getElementById","sortType","sort","b","aDate","dateCreated","valueOf","bDate","deviceStatus","tempAlertList","sortNotificationList","token","jsonHeaders","comp","previousSnackbar","pathname","showNotification","thisState","autoHideDuration","test","thisLocationHasAnError","locationId","match","element","parentLocationId","otherTime","now","Date","oTime","utc","duration","diff","asDays","days","asHours","hours","asMinutes","minutes","_this2","_this$props","_objectWithoutProperties","notifications","deviceId","handleClose","alert","alertTime","getTimestamp","alertIcon","alertIconWarning","alertIconError","alertInfoContainer","deviceName","locationName","alertMessage","errMsg","notificationContainer","handleClick","faBell","Popover","transformOrigin","paper","popoverPaper","trayHeader","optionsIcon","Fragment","notificationControls","ToggleButtonGroup","exclusive","onChange","handleSorting","ToggleButton","aria-label","selected","sortButtonSelected","Component","mapDispatchToProps","withRouter","float","& button","borderColor","maxHeight","overflow","& a","borderTop","paddingTop","borderRadius","verticalAlign","connect","background-color","marginTop","content","Layout","assign","appBar","menu","Menu","notification","sidebar","routes","theme","_container","flexDirection","justifyContent","up","down","fontFamily","opacity","Loading","_props$loadingPrimary","loadingPrimary","_props$loadingSeconda","loadingSecondary","translate","useTranslate","classnames","CircularProgress","defaultProps","loadingStyles","loading","WattsLoading","loginStyles","backgroundSize","backgroundPosition","rightContent","_rightContent","lineHeight","letterSpacing","bottom","& > a","rightContentItem","title","_title","appLogo","_appLogo","maxWidth","banner","AccountControls","classTemplate","buttonStyle","variant","WattsLoginPage","params","headingStyle","_useAuthState","useAuthState","authenticated","showBanner","Redirect","MuiThemeProvider","ScrollToTopOnMount","useEffect","scrollTo","cancelButtonStyles","cancelDiv","history","goBack","text","WattsToolbar","basePath","SaveIcon","Grid","alignContent","justify","item","Toolbar","SaveButton","savebuttontext","redirect","submitOnEnter","CancelButton","FormHeader","WattsFormIterator","_Component","removeField","index","fields","ids","splice","remove","disableRemoveField","disableRemove","addField","nextId","Array","from","_this$props$classes","children","_this$props$meta","meta","submitFailed","source","disableAdd","addButtonText","removeButtonText","records","FormHelperText","ValidationError","TransitionGroup","component","member","CSSTransition","timeout","classNames","form","Children","input","index2","isValidElement","FormInput","cloneElement","InputProps","endAdornment","faMinusCircle","addButton","faPlusCircle","leftIcon","compose","createStyles","& > li:last-child","borderBottom","listStyleType","flex","spacing","requirementStyles","requiredText","fontStretch","fontStyle","RequiredFieldNote","LocationFormLayout","buildingTypes","validBuildingTypeIds","buildingTypeValue","countryStateMap","countries","states","stateValue","handleBuildingType","handleCountriesAndStates","compThis","results","sequence","buildingType","buildingTypeId","code","populateStateDropDown","context","stateMap","locationFormStyles","StyledLocationIcon","StyledSubLocationIcon","faBuilding","SelectInput","fullWidth","choices","validate","required","TextInput","inputProps","maxLength","onChangeCountry","allValues","isArray","some","ArrayInput","CreateLocation","createUseStyles","Create","successMessage","SimpleForm","toolbar","editStyles","EditLocation","hasCreate","hasEdit","hasList","hasShow","editUseStyles","Edit","undoable","savebuttonlabel","card","deviceType","deviceInfo","temperature","tempUnit","deviceFooter","redStatus","orangeStatus","greenStatus","statusIcon","statusMessage","statusValue","footerCardContent","&:last-child","paddingBottom","deviceImage","DeviceStatusBar","_ref$record","statusName","colorClass","RightContent","sanitizeEndTime","CardContent","TempField","_ref2$record","displayValue","DeviceCard","_ref3","_ref3$dataRecord","dataRecord","Card","CardHeader","TextField","TelemetryCardHelpModal","showDialog","handleCloseClick","helpData","topics","superProps","ThisButton","isMenu","ContextMenuOption","optionText","ThisIcon","helpContent","helpObject","helpKey","DialogTitle","body","helpError","Dialog","DialogActions","crudGetMatching","fetchEnd","fetchStart","DialogContent","MuiDialogContent","MuiDialogActions","ConfirmationModal","_getPrototypeOf2","_len","arguments","args","_key","apply","showError","errorText","handleConfirmClick","autoFocus","dialogStyles","dialogBody","dialogHeader","dialogContent","tempReadout","tempControlButton","dialogAction","TempDialog","callback","saveCallback","startingValue","setValue","_React$useState3","_React$useState4","setShowError","_React$useState5","_React$useState6","setErrorText","handleErrorClose","tempErrorCallback","revertValue","callbackErrorText","GetTitle","sliderMarks","Min","Max","aria-labelledby","Slider","newValue","min","max","marks","step","Step","Steps","faChevronUp","faChevronDown","TemperatureDialog","onTempDiagOpen","onTempDiagClose","onTempDiagSave","newVal","testTemp","addTodoItem","initialSetting","faPencil","thisDevice","uniqueKey","Parent","alignItems","Message","Icon","TheIcon","optionType","settingsValue","TelemetryCardHelpModalButton","TelemetryCardEditModalButton","CreateDeviceModal","handleSaveClick","setCode","componentDidMount","faWifi","locationid","roleOptions","postObj","emailAddressToShareWith","getElementsByName","groupRole","post","errorMessage","userRoles","groupRoles","groupName","roles","groupRoleId","faUsers","FloatingActionButton","AddDeviceOrUserButton","setAnchorEl","setSelectedIndex","options","Share","InviteUserModal","faPlus","keepMounted","Boolean","option","MenuItem","handleMenuItemClick","API_URL","httpClient","url","resourceIdMap","locations","devices","errorHandler","errorCode","errorNumber","dataProvider","getList","total","getOne","update","updateCallback","deviceParams","handleDeviceParams","shouldHandlePictures","handlePictures","createCallback","delete","installationDate","additionalNotes","locationDescription","commissionDate","pictures","installationImageUrl","requestMethod","file","fileReader","FileReader","readAsDataURL","rawFile","onload","onerror","installationImage","replace","DeleteModal","handleRemoveClick","submit","deviceCounter","thisRecord","origin","toUpperCase","faTrash","UserCardMenu","confirmationDiagOpen","transferDiagOpen","recordId","parentRecordId","handleConfirmDiagClose","handleTransferDiagClose","parentRecord","menuOptions","currentUserId","isOwner","openConfirmDiag","Transfer","faExchangeAlt","openTransferDiag","aria-describedby","DialogContentText","rescindUserAccess","transferOwnership","border","userType","clipPath","locationOwner","locationAdmin","typeText","userName","optionButton","UserTypeRibbon","userTypeText","colorStyle","UserCard","_ref2$dataRecord","_ref2$callbacks","callbacks","_ref2$parentRecordId","firstName","lastName","Cards","fetchedAt","loaded","noEntryMessage","noResultsMessage","sortFunction","cardComponent","CardGrid","LeaveLocationDialog","DeviceInfoBanner","ribbonBase","zIndex","userMessage","actionText","ribbonStyles","LocationBanner","_useState","_useState2","banners","setBanners","_useState3","_useState4","checkHash","setCheckHash","_useState5","_useState6","refreshTimer","setRefreshTimer","clearInterval","checkForUpdatedData","refreshCallback","CheckHash","faSyncAlt","setData","refreshPage","reload","timer","setInterval","pending","noAccessStyles","banIcon","NoAccessPage","useHistory","faBan","Typography","headerStyles","header","mainTitle","subTitle","topLeftInfo","counterContainer","counter","counterIcon","counterNumber","headerActionItem","LocationHeader","sublocationsCounter","sublocations","sublocation","subDevice","setCounterValues","mainTitleClass","Breadcrumbs","ol","Delete","userData","ownerId","Update","numberSubLocations","numberDevices","users","noLocationStyles","largeIcon","addIcon","NoLocationMessage","sublocationMenuStyles","sublocationFilter","locationFilter","setLocation","idArray","returnContent","sublocationMenuUseStyles","menuItems","missingStatus","cards","dropdown","FormControl","InputLabel","Select","labelId","LocationViewLayout","getRole","obj","getUserData","userCardList","indexOf","locCounter","nextProps","nextState","StyledTabbedShowLayout","TabbedShowLayout","other","tabContainer","Tab","onUserRescindSuccess","firstObj","secondObj","sortOrder","firstRole","secondRole","locationBody","&:first-child","& .MuiTabs-root","tabContent","ViewLocationComponent","StyledShow","Show","StyledLayout","&:first-child, &last-child","SimpleShowLayout","logo","logoFirstTile","arrowIcon","_arrowIcon","subtitle","_subtitle","titleSection","ApplicationTitle","applicationImage","classImage","isFirstTile","additionalClass","Paper","image","& .MuiAppBar-root","backgroundRepeat","logoContainer","_logo","tiles","_tiles","tile","_tile","_image","paddingRight","BoxIntelliStation","Dashboard","backgroundImage","setBackgroundImage","img","Image","preventDefault","DatePickerInput","PickerComponent","_makePicker","toISOString","onBlur","isRequired","touched","providerOptions","MuiPickersUtilsProvider","utils","DateFnsUtils","KeyboardDatePicker","FieldTitle","format","helperText","inputVariant","allowKeyboardControl","disabled","labelTime","locale","makePicker","DatePicker","tagLine","removeButton","WattsImageField","classesOverride","removeCallback","rest","sourceValue","titleValue","addLabel","allowEmpty","cellClassName","formClassName","headerClassName","linkType","sortable","sortBy","translateChoice","sanitizeRestProps","dropZone","default","getContrastText","preview","WattsImageInput","accept","_ref2$labelMultiple","labelMultiple","_ref2$labelSingle","labelSingle","maxSize","minSize","_ref2$multiple","multiple","_ref2$options","inputPropsOptions","placeholder","transformFile","File","_Children$only$props","only","URL","createObjectURL","transformedFile","transformFiles","files","_useInput","useInput","_useInput$input","onRemove","filteredFiles","filter","stateFile","shallowEqual","childrenElement","_useDropzone","useDropzone","onDrop","newFiles","updatedFiles","_toConsumableArray","getRootProps","getInputProps","Labeled","data-testid","InputHelperText","deviceFormStyles","pageContentContainer","imageFormContainer","deviceTextContainer","overlineTop","overlineBottom","headline6","formContainer","installInfoContainer","buildIcon","infoText","infoDesc","addPhotoButton","photoIcon","datePicker","& img","codeInput","installPhoto","imageFieldContainer","InstallImage","useForm","setInstallationImageUrl","evt","change","faCamera","LocationControls","defaulted","setDefaulted","_useState7","_useState8","setDefaultedLocation","_useState9","_useState10","setDefaultedSublocation","rawSubLocations","unshift","subLocations","locationFormObj","getFieldState","sublocationFormObj","sublocationId","locationSearch","hash","URLSearchParams","DeviceFormLayout","isImageCleared","populateLocationList","parentId","CreateDevice","TelemetryCard","dateContent","parsedDate","faCalendarDay","telemetryValue","iconType","TelemetryCardMenu","faEllipsisV","ErrorDetailsRow","nameClass","gray","DeviceErrorHelpDialog","errorDetailIcon","errorHelpTopics","StatusNotifWithLinkToHelp","toggleDialog","stopPropagation","StatusNotification","DeviceStatusNotification","_React$Component2","openHelp","showModal","closeModal","errorName","alertId","DeviceHistoryChart","showPdfReport","showCsvReport","reportType","legendOpen","notified","chartColors","mixedOutlet","setpoint","highLimit","lowLimit","onChangeReportType","handleChartClose","d3","getApiData","generateSetPointChart","apiData","datapointList","dateFormatString","dataResult","processSetPointDataMonthly","processSetPointDataWeekly","processSetPointDataHourly","outletResults","minValue","maxValue","svg","append","attr","x","domain","day","range","tickFormat","selectAll","decodeURIComponent","unit","datum","setpointResults","highTempDiffResults","lowTempDiffResults","resultsObject","getInitResults","currentData","dataDate","setHours","hour","getResultsForDate","weeklyTrend","hourAverages","k","currentWeek","startDate","setUTCHours","startHour","endDate","endHour","monthTrend","dailyAverages","currentMonth","scale","toLowerCase","Infinity","currentX","currentObject","highDiffTemp","mixSetpointTempAvg","highAlertDiffAvg","lowDiffTemp","lowAlertDiffAvg","getMinMaxValue","mixOutletTempAvg","Math","testValues","testFunc","anchorChartEl","anchorDownloadEl","chartMessage","noHistoricalDataMessage","_downloadFile","fetch","blob","_x","currentDate","downloadFile","toLocaleDateString","chartViews","faCalendarWeek","faCalendarAlt","reportOptions","faFileDownload","faFilePdf","faInfoCircle","handleLegendClickListItem","handleLegendClose","handleChartClickListItem","faArrowToBottom","handleDownloadClickListItem","handleDownloadClose","getReportTypeName","getLoadingSpinner","getChartMessage","getNotifications","DeviceLastUpdated","lastUpdated","formattedTime","SettingsCard","sanitization","SetValueFunction","parentKey","DeviceDashboardTab","SetMixedOutletSetpointValue","SetHighTempDiffValue","SetLowTempDiffValue","MixedOutletSetpointValue","HighTempDiffValue","LowTempDiffValue","remoteMax","RemoteMaxSetpoint","MixOutletSetpoint","log","HighAlertDiff","LowAlertDiff","getTempValuesFromRecord","getTelemetryDataValue","highAlertDiff","lowAlertDiff","fieldName","ErrorLogCard","thisIcon","errId","ClassColor","myIndex","dateString","HighLowTempValueCard","clearDate","highLowMixTemp","getTelemetryDataFromRecord","currentTemp","lastCleared","showConfirmation","clearType","clearData","DateCleared","show","offsetDateTime","faRedo","DeviceMonitorTab","_this3","errorLogCardList","isLoading","actuatorV","Outputs","ActuatorV","toString","logCards","actuatorPositionValue","getActuatorV","ActuatorPositionValue","field","dateCleared","substring","DEVICE_SCHEDULE_ALL_DAYS","ALL_DAYS","DEVICE_SCHEDULE_DAYS","All","Mon","Tue","Wed","Thr","Fri","Sat","Sun","SCHEDULE_DEVICE_DAYS","All Days","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday","scheduleStyles","switchLabel","scheduleRow","disabledRow","evenRows","checkboxCell","timePickerText","& input","timePickerTextDisabled","ScheduleTableBody","thisTab","scheduleDays","schedulingData","schedulingEnabled","allDaysChecked","getNearestTenInterval","nearestValue","ceil","getMinutes","minuteDiff","abs","getTime","Switch","checked","prevState","updateScheduleData","scheduleDay","enabled","Checkbox","TimePicker","timePicker","start","minutesStep","clearable","clearLabel","emptyLabel","initialFocusedDate","disableUnderline","end","DeviceScheduleTab","SetSetbackOffsetValue","setbackOffset","scheduleData","SetbackOffset","Schedule","schedule","Active","Type","isAllDays","dayShort","dayFull","dayData","dayScheduleData","processScheduleEventTime","Normal","Savings","SetbackOffsetValue","scheduleObject","uiScheduleData","scheduleObj","startIndex","uiDay","currentDayShortName","rootDayObj","valueDay","getDayObjectForAPI","inactiveDay","dayType","dayObj","paperContainer","scheduleTable","emptySchedule","tempHeader","tempHeaderText","tempOptionButton","tempDisplay","borderCollapse","& th","& tr","headerActionIcon","DeviceInfoModal","deviceData","imageUrl","modelName","modelNumber","firmware","subLocation","setStateData","deviceRecord","parentLocationName","sw","Release","deviceResults","getDeviceImageRow","bannerStyles","spacedBanner","DeviceBanners","sanitizeActive","setSanitizeActive","showSanitizationModal","setShowSanitizationModal","ribbons","sanitizeSetpoint","SanitizeEvent","addSanitizationBanner","headerTextContent","headerImage","iconContainer","overline","brandContainer","tempBrandContainer","brandImage","DeviceHeader","deviceOutletTemp","outlet","headerTempUnit","outletValue","getRecordOutletTemp","tempReadoutClass","DeviceViewLayout","setHelpObject","setHelpError","pendingHelp","setPendingHelp","bodyClasses","DeviceViewComponent","infoBanners","layoutStyles","gridBottom","subText","languageOptions","tempScaleOptions","measurementScaleOptions","BoolInputLeftLabel","boolGrid","boolLabel","boolButton","boolStyles","BooleanInput","SettingsForm","FormDataConsumer","formData","validation","smsChangedField","smsChanged","active","smsValue","smsNotificationEnabled","phoneDigits","recursiveDigits","string","matches","restOfString","faGlobe","EditSettings","SettingsFormLayout","fab","AccountForm","userAccount","faUserAlt","EditAccount","AccountFormLayout","OwnershipTransferModal","pendingTransfers","transfers","transferWindowOpen","accepted","urlSuffix","shift","currentTransfer","invitor","handleTransferSelection","CardList","empty","perPage","pagination","cardList","locationType","locationTypeHeader","locationIcon","locationCardContent","locationInfo","locationAddress","footerOffline","footerOnline","footerWarning","footerError","LocationField","LocationIcon","_ref2$locationType","faUniversity","faSchool","faHospital","faUserNurse","faAmbulance","faHotel","faChairOffice","faRunning","faCity","faGavel","StatusBar","footerClass","footerIcon","faExclamationTriangle","LocationCard","_ref4","_ref4$dataRecord","englishMessages","elogic","toastNotifications","setMixedOutletSetpointValue","setMixedOutletSetpointValueError","setHighTempDiffValue","setHighTempDiffValueError","setLowTempDiffValue","setLowTempDiffValueError","setSetbackOffset","setSetbackOffsetError","inviteUser","inviteUserError","rescindUser","rescindUserError","transferOwnershipError","setClearMixedOutletHigh","setClearMixedOutletHighError","setClearMixedOutletLow","setClearMixedOutletLowError","updateSchedule","updateScheduleError","leaveMessage","leaveMessageError","deviceCreated","deviceUpdated","deviceDeleted","deviceDeleteError","locationCreated","locationUpdated","locationDeleted","locationDeleteError","cannotDeleteLocationWithDevices","i18nProvider","polyglotI18nProvider","RedirectTarget","App","MomentUtils","BrowserRouter","Admin","disableTelemetry","loginPage","layout","WattsLayout","customRoutes","Route","exact","path","noLayout","Resource","ViewLocation","EditDevice","DeviceView","ReactDOM","render"],"mappings":"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","file":"static/js/main.e90a90e6.chunk.js","sourcesContent":["const config = {\r\n auth: {\r\n instance: '',\r\n clientId: '',\r\n redirectUrl: '',\r\n scopes: [],\r\n logoutUri: '',\r\n }\r\n};\r\n\r\n\r\nexport const envConfig = {\r\n auth: {\r\n instance: process.env.REACT_APP_AUTH_INSTANCE || config.auth.instance || '',\r\n clientId: process.env.REACT_APP_AUTH_CLIENT_ID || config.auth.clientId || '',\r\n redirectUrl: process.env.REACT_APP_AUTH_REDIRECT_URL || config.auth.redirectUrl || '',\r\n logoutUri: process.env.REACT_APP_AUTH_LOGOUT_URI || config.auth.logoutUri || '',\r\n scopes: process.env.REACT_APP_AUTH_SCOPES ? process.env.REACT_APP_AUTH_SCOPES.split(' ') : config.auth.scopes || [],\r\n }\r\n};","import { envConfig } from './env';\r\n\r\nconst storage = 'localStorage';\r\n\r\nexport const environment = {\r\n authorization: {\r\n issuer: envConfig.auth.instance,\r\n clientId: envConfig.auth.clientId,\r\n allowedUrls: [envConfig.auth.instance],\r\n redirectUri: envConfig.auth.redirectUrl,\r\n logoutUri: envConfig.auth.logoutUri,\r\n scopes: envConfig.auth.scopes,\r\n setupAutomaticSilentRefresh: false,\r\n storage,\r\n b2cUrls: {\r\n edit: envConfig.auth.instance + '/B2C_1A_UnifiedProfileEdit/',\r\n resetPassword: envConfig.auth.instance + '/B2C_1A_UnifiedPasswordReset/',\r\n },\r\n baseUrl: envConfig.baseUrl,\r\n },\r\n};\r\n","import { NavigationClient, PublicClientApplication } from \"@azure/msal-browser\";\r\nimport { environment } from './environment';\r\nimport axios from 'axios';\r\n\r\nexport const msalConfig = {\r\n auth: {\r\n instance: environment.authorization.issuer,\r\n clientId: environment.authorization.clientId,\r\n redirectUrl: environment.authorization.redirectUri,\r\n logoutUri: environment.authorization.logoutUri,\r\n scopes: environment.authorization.scopes,\r\n },\r\n};\r\n\r\nconst navigationClientService = new NavigationClient();\r\n\r\nconst authorization = {\r\n auth: {\r\n clientId: msalConfig.auth.clientId,\r\n authority: `${msalConfig.auth.instance}/B2C_1A_UnifiedSignUpOrSignIn/`,\r\n knownAuthorities: [msalConfig.auth.instance],\r\n\r\n redirectUri: msalConfig.auth.redirectUrl,\r\n postLogoutRedirectUri: msalConfig.auth.logoutUri,\r\n\r\n logoutUri: msalConfig.auth.logoutUri,\r\n scopes: msalConfig.auth.scopes,\r\n setupAutomaticSilentRefresh: true,\r\n\r\n baseUrl: '/',\r\n editProfileUrl: `${msalConfig.auth.instance}/B2C_1A_UnifiedProfileEdit/`,\r\n },\r\n system: {\r\n navigationClient: navigationClientService,\r\n },\r\n cache: {\r\n cacheLocation: \"localStorage\",\r\n storeAuthStateInCookie: true,\r\n },\r\n};\r\n\r\nexport const msalInstance = new PublicClientApplication(authorization);\r\n\r\nclass AuthProvider {\r\n constructor() {\r\n let account = this.getUserAccount();\r\n\r\n if (account) {\r\n msalInstance.acquireTokenSilent({ account, scopes: authorization.auth.scopes }).then((res) => {\r\n localStorage.setItem(\"authorizationToken\", res.accessToken);\r\n if (res && res.accessToken) {\r\n this.setUser(res.accessToken);\r\n }\r\n if (!sessionStorage.getItem('userAccount') && res && res.account && res.account.idTokenClaims) {\r\n this.setUserAccount(res.account.idTokenClaims);\r\n }\r\n })\r\n }\r\n\r\n msalInstance\r\n .handleRedirectPromise()\r\n .then((res) => {\r\n if (res) {\r\n localStorage.setItem(\"authorizationToken\", res.accessToken);\r\n const userId = res.idTokenClaims.oid ? res.idTokenClaims.oid : res.idTokenClaims.sub;\r\n localStorage.setItem('userId', userId);\r\n this.setUser(res.accessToken);\r\n this.setUserAccount(res.idTokenClaims);\r\n }\r\n })\r\n .catch((err) => {\r\n console.error(err);\r\n });\r\n }\r\n\r\n login = () => {\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n return msalInstance\r\n .loginRedirect({\r\n scopes: msalConfig.auth.scopes,\r\n })\r\n .catch((err) => {\r\n console.error(err);\r\n this.logout();\r\n });\r\n };\r\n logout = () => {\r\n return msalInstance\r\n .logoutRedirect()\r\n .then(() => {\r\n localStorage.removeItem(\"authorizationToken\");\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n return Promise.reject();\r\n });\r\n };\r\n editProfile = () => {\r\n return msalInstance\r\n .loginRedirect({\r\n scopes: authorization.auth.scopes,\r\n authority: authorization.auth.editProfileUrl,\r\n })\r\n .catch((err) => {\r\n console.error(err);\r\n });\r\n };\r\n checkAuth = async () => {\r\n if (window.location.href.includes('/dashboard')) {\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n }\r\n let account = this.getUserAccount();\r\n\r\n if (account && account.localAccountId) {\r\n localStorage.setItem('userId', account.localAccountId);\r\n }\r\n\r\n if (account) {\r\n await msalInstance.acquireTokenSilent({ account, scopes: authorization.auth.scopes }).then((res) => {\r\n localStorage.setItem(\"authorizationToken\", res.accessToken);\r\n if (res && res.accessToken) {\r\n this.setUser(res.accessToken);\r\n }\r\n if (!sessionStorage.getItem('userAccount') && res && res.account && res.account.idTokenClaims) {\r\n this.setUserAccount(res.account.idTokenClaims);\r\n }\r\n })\r\n return Promise.resolve();\r\n }\r\n\r\n return Promise.reject();\r\n };\r\n checkError = () => Promise.resolve();\r\n getPermissions = () => Promise.resolve();\r\n setUser = (idToken) => {\r\n axios.get(\"/api/User\", {\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${idToken}`\r\n }\r\n }).then((response) => {\r\n if (response && response.data) {\r\n const user = response.data;\r\n localStorage.setItem('user', JSON.stringify(user));\r\n if (response.data.userId) {\r\n localStorage.setItem('userId', response.data.userId);\r\n }\r\n localStorage.setItem('pendingLocationTransfers', JSON.stringify(response.data.pendingLocationTransfers));\r\n }\r\n axios.get(\"/manifest.json\").then((response) => {\r\n localStorage.setItem(\"version\", response.data.version);\r\n });\r\n\r\n })\r\n .catch(() => {\r\n localStorage.clear();\r\n return Promise.reject();\r\n });\r\n\r\n };\r\n setUserAccount = (claims) => {\r\n const user = {};\r\n\r\n user.aad_givenname = claims ? claims.given_name : \"\";\r\n user.aad_surname = claims ? claims.family_name : \"\";\r\n user.country = claims ? claims.country : \"\";\r\n user.emailAddress = claims ? claims.email : \"\";\r\n sessionStorage.setItem('userAccount', JSON.stringify(user));\r\n };\r\n getUserAccount = () => {\r\n let account = msalInstance.getActiveAccount();\r\n\r\n if (!account) {\r\n const accounts = msalInstance.getAllAccounts();\r\n account = accounts[0];\r\n }\r\n\r\n return account;\r\n }\r\n}\r\n\r\nconst authProvider = new AuthProvider();\r\n\r\nexport { authProvider };\r\n","const WattsBluePrimary = {\n 50: '#E2F1FC',\n 100: '#B8DBF9',\n 200: '#8BC5F5',\n 300: '#5DAEF1',\n 400: '#389DEF',\n 500: '#068DEC',\n 600: '#0680DE',\n 700: '#005DB9',\n 800: '#005DB9',\n 900: '#003F9A',\n main: '#005DB9'\n}\n\nexport default WattsBluePrimary;","const WattsBlueSecondary = {\n 50: '#E5E9EF',\n 100: '#BCC8D8',\n 200: '#91A4BD',\n 300: '#6781A2',\n 400: '#456791',\n 500: '#1C4F81',\n 600: '#144879',\n 700: '#083F6E',\n 800: '#013562',\n 900: '#00254A',\n main: '#00254A'\n}\n\nexport default WattsBlueSecondary;","import { createMuiTheme } from '@material-ui/core/styles';\r\nimport WattsBluePrimary from './WattsBluePrimary';\r\nimport WattsBlueSecondary from './WattsBlueSecondary';\r\n\r\nconst WattsTheme = createMuiTheme({\r\n palette: {\r\n primary: WattsBluePrimary,\r\n secondary: WattsBlueSecondary\r\n },\r\n breakpoints: {\r\n values: {\r\n xs: 0,\r\n sm: 600,\r\n md: 960,\r\n lg: 1348,\r\n xl: 1920\r\n }\r\n },\r\n overrides: {\r\n 'MuiToolbar': {\r\n 'root': {\r\n 'backgroundColor': '#FFF'\r\n }\r\n },\r\n 'MuiFormControl': {\r\n 'marginDense': {\r\n 'marginBottom': '27px'\r\n }\r\n },\r\n 'MuiPaper': {\r\n 'elevation1': {\r\n 'boxShadow': 'none'\r\n }\r\n },\r\n 'MuiButton': {\r\n 'root': {\r\n 'textTransform': 'none'\r\n }\r\n }\r\n }\r\n});\r\n\r\nexport default WattsTheme;","import React from 'react';\n\nimport { withStyles, makeStyles } from '@material-ui/core/styles';\nimport { Link } from 'react-router-dom';\nimport Drawer from '@material-ui/core/Drawer';\nimport Button from '@material-ui/core/Button';\nimport List from '@material-ui/core/List';\nimport Divider from '@material-ui/core/Divider';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\n\n// Icons\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faMapMarkerAlt, faUser, faCog, faQuestionCircle, faShieldCheck, faSignOut } from '@fortawesome/pro-solid-svg-icons';\nimport { faBars } from '@fortawesome/pro-regular-svg-icons';\n\nimport { authProvider } from '../AuthProvider';\n\nconst SideMenuDrawer = (props) => {\n\n // Stores the state for whether or not the open (visible) or not.\n const [state, setState] = React.useState({\n isOpen: false\n });\n\n const toggleDrawer = (open) => event => {\n if (event.type === 'keydown' && (event.key === 'Tab' || event.key === 'Shift')) {\n return;\n }\n\n // Handles the state of whether or not the drawer should be rendered.\n setState({ ...state, isOpen: open });\n };\n\n const userId = localStorage.getItem('userId');\n\n // Data representation of the menu structure.\n const navItems = {\n 'manage': [\n {\n 'label': 'Locations',\n 'icon': faMapMarkerAlt,\n 'route': '/locations'\n },\n {\n 'label': 'Account',\n 'icon': faUser,\n 'route': '/account/' + userId\n },\n {\n 'label': 'Settings',\n 'icon': faCog,\n 'route': '/user/' + userId\n }\n ],\n 'info': [\n {\n 'label': 'Help',\n 'icon': faQuestionCircle,\n 'link': 'https://watts.com/Support/WattsOnSite'\n },\n {\n 'label': 'Privacy',\n 'icon': faShieldCheck,\n 'link': 'https://www.watts.com/OnSitePrivacy'\n }\n ],\n 'access': [\n {\n 'label': 'Sign Out',\n 'icon': faSignOut,\n 'onClick': function () {\n localStorage.clear();\n localStorage.clear();\n authProvider.logout();\n }\n }\n ]\n };\n\n const ListGrouping = (listProps) => {\n\n const groupItems = listProps.navItemGroup;\n const listClass = props.classes.menuText + ' ' + props.classes.listItem;\n\n // Returns the state of the entire navigation grouping.\n return (\n
\n \n
\n {groupItems.map((navItem) => {\n\n if (navItem.route) {\n return (\n \n {getLinkItem(props.classes, navItem, listClass)}\n \n );\n }\n else {\n return (\n \n {getLinkItem(props.classes, navItem, listClass)}\n \n );\n }\n })}\n
\n
\n );\n };\n\n const getLinkItem = (classes, navItem, listClass) => {\n return (\n \n \n \n \n \n \n );\n }\n\n const VersionDisplay = () => {\n\n const styles = makeStyles({\n versionDisplay: {\n 'color': '#666',\n 'font-family': 'Roboto',\n 'font-size': '12px',\n 'font-weight': 'normal',\n 'font-stretch': 'normal',\n 'font-style': 'normal',\n 'line-height': '1.33',\n 'letter-spacing': '-0.12px',\n 'margin-top': '-20px',\n 'margin-left': '12px',\n 'top': '100%',\n 'position': 'absolute',\n 'transform': 'translateY(-100%)'\n }\n });\n\n const useStyles = styles();\n\n return (\n
Version: {localStorage.getItem(\"version\")}
\n );\n }\n\n const SideMenuContent = () => {\n // Renders the actual content that appears when the navigation drawer appears.\n return (\n \n \n \n \n \n \n \n );\n };\n\n return (\n \n \n \n
\n Watts\n
\n {SideMenuContent()}\n
\n
\n );\n};\n\nconst styles = {\n link: {\n 'textDecoration': 'none',\n 'color': 'inherit'\n },\n button: {\n 'color': '#FFF',\n 'fontSize': '20px',\n 'min-height': '26px',\n 'padding': '0 24px'\n },\n drawer: {\n 'padding': '0 8px',\n 'width': '256px'\n },\n menuLogo: {\n 'padding': '20px 16px'\n },\n menuDivider: {\n 'margin': '8px 0'\n },\n menuIcon: {\n 'font-size': '20px',\n 'width': '45px !important'\n },\n list: {\n 'padding': '0'\n },\n listItem: {\n 'border-radius': '4px',\n 'font-weight': '900',\n 'height': '44px',\n 'padding': '2px 0',\n 'color': '#757575',\n '&:hover': {\n 'background': 'rgba(3, 110, 203, 0.12)',\n 'color': '#005DB9'\n }\n },\n listItemText: {\n 'padding-left': '15px'\n },\n menuText: {\n '&:hover div, &:hover svg, &:focus div, &:focus svg, &:active div, &:active svg':\n {\n 'color': '#005DB9'\n }\n }\n};\n\nexport default withStyles(styles)(SideMenuDrawer);","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport './WattsAppBar.css';\r\nimport SideMenuDrawer from '../SideMenuDrawer';\r\n\r\nconst styles = {\r\n root: {\r\n 'box-shadow': 'none',\r\n 'flex-direction': 'row',\r\n 'justify-content': 'space-between',\r\n 'height': 64,\r\n 'padding': '20px 0'\r\n },\r\n flexContent: {\r\n 'display': 'flex'\r\n },\r\n notificationIcon: {\r\n color: 'white',\r\n fontSize: '20px',\r\n position: 'relative',\r\n right: '55px',\r\n cursor: 'pointer'\r\n }\r\n};\r\n\r\nconst WattsAppBar = (props) => {\r\n\r\n if (props.transparent) {\r\n styles.root.backgroundColor = 'transparent';\r\n }\r\n else {\r\n delete styles.root.backgroundColor;\r\n }\r\n\r\n const appBarStyles = makeStyles(styles);\r\n\r\n const useStyles = appBarStyles();\r\n\r\n return (\r\n
\r\n \r\n
\r\n {GetNavBar()}\r\n \"Watts\"\r\n
\r\n
\r\n {props.rightcontent}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nfunction GetNavBar() {\r\n var userId = localStorage.getItem('userId');\r\n\r\n if (userId) {\r\n return ;\r\n }\r\n else {\r\n\r\n // When the user is not signed in, replace the hamburger icon (and the entire side navigation) with a 20px\r\n // wide spacer. This is because the user will be redirected to the login page and the login page does not\r\n // have a navigation menu.\r\n const iconPlaceholderStyles = makeStyles({\r\n 'iconPlaceholder': {\r\n width: '20px'\r\n }\r\n });\r\n\r\n const useStyles = iconPlaceholderStyles();\r\n\r\n return ;\r\n }\r\n}\r\n\r\nexport default WattsAppBar;","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Sidebar } from 'react-admin';\n\nconst WattsSidebar = () => {\n return (\n
\n );\n};\n\nexport default WattsSidebar;","import React from 'react';\nimport { Notification } from 'react-admin';\n\nconst WattsNotification = (props) => {\n\n return (\n \n );\n};\n\nexport default WattsNotification;","import { \r\n faWifiSlash, \r\n faTimesOctagon, \r\n faClock, \r\n faExclamationCircle,\r\n faThermometerFull,\r\n faThermometerQuarter,\r\n faCheckCircle,\r\n faWrench,\r\n faLeaf,\r\n faBolt\r\n} from '@fortawesome/pro-regular-svg-icons';\r\n\r\n// red '#FFCCCC'\r\n// orange '#FFE7D0'\r\n// green '#CCF3CD'\r\n\r\nconst statuses = {\r\n 0 : { // No Status\r\n \"icon\": faTimesOctagon,\r\n \"color\" : \"red\"\r\n },\r\n 1 : { // NVM Error\r\n \"icon\": faTimesOctagon,\r\n \"color\" : \"red\"\r\n },\r\n 2 : { // Sensor Error\r\n \"icon\": faTimesOctagon,\r\n \"color\" : \"red\"\r\n },\r\n 3 : { // Manual Mixing Mode\r\n \"icon\": faWrench,\r\n \"color\" : \"green\"\r\n },\r\n 4 : { // High Temperature Alert\r\n \"icon\": faThermometerFull,\r\n \"color\" : \"orange\"\r\n },\r\n 5 : { // Low Temperature Alert\r\n \"icon\": faThermometerQuarter,\r\n \"color\" : \"orange\"\r\n },\r\n 6 : { // Device Offline\r\n \"icon\": faWifiSlash,\r\n \"color\" : \"orange\"\r\n },\r\n 7 : { // Sanitizing\r\n \"icon\": faClock,\r\n \"color\" : \"red\"\r\n },\r\n 8 : { // Cooling Down\r\n \"icon\": faExclamationCircle,\r\n \"color\" : \"red\"\r\n },\r\n 9 : { // Maintaining Setpoint\r\n \"icon\": faCheckCircle,\r\n \"color\" : \"green\"\r\n },\r\n 10 : { // Valve Selection is not Set\r\n \"icon\": faExclamationCircle,\r\n \"color\" : \"orange\"\r\n },\r\n 11 : { // Startup\r\n \"icon\": faBolt,\r\n \"color\" : \"green\"\r\n },\r\n 12 : { // Within Limits\r\n \"icon\": faCheckCircle,\r\n \"color\" : \"green\"\r\n },\r\n 13 : { // Saving Mode\r\n \"icon\": faLeaf,\r\n \"color\" : \"green\"\r\n },\r\n};\r\n\r\nexport default statuses;\r\n\r\nexport const SANITIZATION_STATUS = 7;","export const primary = '#005db9'\nconst width = {\n xxs: '0',\n xs: '320px',\n sm: '480px',\n md: '640px',\n lg: '960px',\n xl: '1350px',\n xxl: '1920px',\n}\nconst height = {\n xl: '600px'\n}\n\nexport const downXl = `@media (max-height: ${height.xl}), (max-width: ${width.xl})`\nexport const downLg = `@media (max-width: ${width.lg})`\nexport const downMd = `@media (max-width: ${width.md})`\nexport const downSm = `@media (max-width: ${width.sm})`\nexport const downXs = `@media (max-width: ${width.xs})`\nexport const upSm = `@media (min-width: ${width.sm})`\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nimport { downSm, downXs } from './Components/styles.valiable'\r\n\r\nexport const SBS_URL = process.env.REACT_APP_REDIRECT_SBS;\r\nexport const SHOW_BOX_INSTALLISTATION = process.env.REACT_APP_SHOW_INSTALLISTATION;\r\n\r\nexport function getPermissionList(permissions) {\r\n var ret = {\r\n Alerts: {},\r\n Devices: {},\r\n Locations: {},\r\n Users: {},\r\n };\r\n\r\n if (permissions == null || permissions == undefined) {\r\n return ret;\r\n }\r\n\r\n permissions.forEach(function (permission) {\r\n if (\r\n permission.group === 'intellistationjr' ||\r\n permission.group === 'default'\r\n ) {\r\n permission.resources.forEach(function (resource) {\r\n resource.actions.forEach(function (action) {\r\n ret[resource.name][action] = true;\r\n });\r\n });\r\n }\r\n });\r\n return ret;\r\n}\r\n\r\nexport function getDeviceImageOrDefault(dataRecord) {\r\n // Default installation image for Intellistation Jr.\r\n // TODO: If we end up adding more devices we need to add logic to pick the correct\r\n // default image.\r\n return '/img/device_placeholder.jpg';\r\n}\r\n\r\nexport function getUserField(fieldName) {\r\n const userStr = localStorage.getItem('user');\r\n\r\n if (userStr) {\r\n var user = JSON.parse(userStr);\r\n\r\n if (user && user.hasOwnProperty(fieldName)) {\r\n return user[fieldName];\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function getUserTempScale(device) {\r\n var tempScale = null;\r\n if (device && device.data && device.data.TempUnits) {\r\n tempScale = device.data.TempUnits.Val;\r\n }\r\n\r\n if (tempScale == null) {\r\n tempScale = getUserSettingsTempScale();\r\n }\r\n\r\n return tempScale;\r\n}\r\n\r\nexport const getUserSettingsTempScale = () => {\r\n var tempScale = DEFAULT_TEMP_VALUE;\r\n\r\n var userString = localStorage.getItem('user');\r\n if (userString != null) {\r\n tempScale = JSON.parse(userString).temperatureScale;\r\n }\r\n\r\n return tempScale;\r\n};\r\n\r\nexport function getUTCDate(date, device) {\r\n var utcOffsetValue = getUTCOffset(device);\r\n\r\n var result = moment(date); // Capture the date value in UTC.\r\n\r\n if (utcOffsetValue) {\r\n result.add(utcOffsetValue, 'm'); // Then apply the UTC offset.\r\n }\r\n\r\n return result.toDate(); // Convert to a Date object.\r\n}\r\n\r\nexport function formatToUTCDate(date, device) {\r\n return getUTCDate(date, device).toLocaleString(); // Then format as in the user's locale format.\r\n}\r\n\r\nexport function getDurationString(rawDuration) {\r\n var duration = moment.duration(rawDuration);\r\n\r\n var durationString = [];\r\n\r\n durationString.push(duration.hours().toString().padStart(2, '0'));\r\n durationString.push(duration.minutes().toString().padStart(2, '0'));\r\n durationString.push(duration.seconds().toString().padStart(2, '0'));\r\n\r\n return durationString.join(':');\r\n}\r\n\r\nexport function getUTCOffset(device) {\r\n var utcOffsetValue = 0;\r\n\r\n if (device.data && device.data.ZoneOffset) {\r\n var zoneOff = device.data.ZoneOffset;\r\n utcOffsetValue = zoneOff.Hours * 60 + zoneOff.Minutes;\r\n }\r\n\r\n return utcOffsetValue;\r\n}\r\n\r\nexport function getRecordOutletTemp(record, defaultValue, outlet) {\r\n const styles = makeStyles({\r\n headerTempUnit: {\r\n fontSize: '32px',\r\n verticalAlign: 'super',\r\n letterSpacing: '0',\r\n },\r\n });\r\n\r\n const classes = styles();\r\n\r\n var displayValue = '';\r\n if (outlet) {\r\n displayValue = (\r\n \r\n °{getUserTempScale(record)}\r\n \r\n );\r\n }\r\n\r\n var outletValue = getMixedOutletTemp(record, defaultValue);\r\n\r\n return (\r\n <>\r\n {outletValue}\r\n {displayValue}\r\n \r\n );\r\n}\r\n\r\nexport function getHelperStyles() {\r\n const styles = makeStyles({\r\n heading2: {\r\n 'font-family': 'Roboto',\r\n 'font-size': '64px',\r\n 'font-weight': '300',\r\n 'font-stretch': 'normal',\r\n 'font-style': 'normal',\r\n 'line-height': '1.13',\r\n 'letter-spacing': '-0.64px',\r\n },\r\n heading3: {\r\n 'font-family': 'Roboto',\r\n 'font-size': '48px',\r\n 'font-weight': '900',\r\n 'font-stretch': 'normal',\r\n 'font-style': 'normal',\r\n 'line-height': '1.17',\r\n 'letter-spacing': '-0.48px',\r\n },\r\n heading4: {\r\n 'font-family': 'Roboto',\r\n 'font-size': '32px',\r\n [downSm]: {\r\n 'fontSize': '24px'\r\n },\r\n [downXs]: {\r\n 'fontSize': '18px'\r\n },\r\n 'font-weight': '300',\r\n 'font-stretch': 'normal',\r\n 'font-style': 'normal',\r\n 'line-height': '1.13',\r\n 'letter-spacing': '-0.32px',\r\n },\r\n heading6: {\r\n 'font-family': 'Roboto',\r\n 'font-size': '20px',\r\n 'font-weight': '900',\r\n 'font-stretch': 'normal',\r\n 'font-style': 'normal',\r\n 'line-height': '1.2',\r\n 'letter-spacing': '-0.2px',\r\n },\r\n subtitle1: {},\r\n subtitle2: {\r\n 'font-family': 'Roboto',\r\n 'font-size': '14px',\r\n 'font-weight': '900',\r\n 'font-stretch': 'normal',\r\n 'font-style': 'normal',\r\n 'line-height': '1.14',\r\n 'letter-spacing': '-0.14px',\r\n },\r\n });\r\n\r\n return styles;\r\n}\r\n\r\nexport const ADD_BUTTON_STYLES = {\r\n root: {\r\n background: '#005DB9',\r\n 'border-radius': '100%',\r\n 'box-shadow':\r\n '0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0,0,0,.12)',\r\n color: '#FFF',\r\n height: '56px',\r\n left: '100%',\r\n transform: 'translateY(-50%)',\r\n minHeight: '56px',\r\n minWidth: '56px',\r\n position: 'absolute',\r\n marginLeft: '-14.2%',\r\n width: '56px',\r\n 'z-index': '100',\r\n 'font-size': '20px',\r\n 'font-weight': '300',\r\n\r\n '&:hover, &:active, &:focus': {\r\n background: '#005DB9',\r\n },\r\n },\r\n};\r\n\r\nexport const SANITIZATION_STATUS = {\r\n id: 7,\r\n name: 'Sanitizing',\r\n condition: 'Sanitization Alert',\r\n cause: 'Sanitization mode has been activated at the device',\r\n howToClear:\r\n 'Sanitizaton period must elapse. At the device, sanitization mode must be terminated',\r\n controlBehavior:\r\n 'Operates at elevated setpoint temperature for period of time',\r\n priority: 7,\r\n};\r\n\r\nexport const prioritySort = (first, second) => {\r\n return first.status.priority - second.status.priority;\r\n};\r\n\r\nexport const getMixedOutletTemp = (record, defaultValue) => {\r\n var tempText = defaultValue;\r\n\r\n // Check that the object we're getting the Mixed Outlet value from exists to prevent errors.\r\n if (record && record.status && record.status.id !== 6) {\r\n // Sensor error.\r\n if (record.status.id === 2) {\r\n tempText = '0';\r\n } else if (\r\n record.data &&\r\n record.data.Sensors &&\r\n record.data.Sensors.MixOutlet &&\r\n record.data.Sensors.MixOutlet.Val\r\n ) {\r\n tempText = renderTemperature(record.data.Sensors.MixOutlet.Val);\r\n }\r\n }\r\n\r\n return tempText;\r\n};\r\n\r\nexport const DEFAULT_TEMP_VALUE = '- - -';\r\n\r\nexport const isDeviceOffline = (device) => {\r\n return device && device.status && device.status && device.status.id === 6;\r\n};\r\n\r\nexport const renderTemperature = (value) => {\r\n var result = value;\r\n\r\n var parsedValue = parseFloat(value);\r\n\r\n if (!isNaN(parsedValue) && getUserTempScale() == 'C') {\r\n result = `${parsedValue.toFixed(1)}`;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport const NONE = 'none';\r\n\r\nexport const getLocationAddress = (address) => {\r\n const addressBuilder = [];\r\n\r\n if (address) {\r\n addressBuilder.push(address.address);\r\n\r\n if (address.address2) {\r\n addressBuilder.push(address.address2);\r\n }\r\n\r\n addressBuilder.push(address.city);\r\n addressBuilder.push(address.state_province);\r\n addressBuilder.push(address.zipcode);\r\n }\r\n\r\n return addressBuilder.join(', ');\r\n};\r\n","import React from 'react';\r\nimport axios from 'axios';\r\nimport moment from 'moment';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport Popover from '@material-ui/core/Popover';\r\nimport ToggleButton from '@material-ui/lab/ToggleButton';\r\nimport ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup';\r\nimport { withStyles, makeStyles } from '@material-ui/core/styles';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faBell, faCog, faTimes } from '@fortawesome/pro-regular-svg-icons';\r\nimport { faBell as faBellSolid } from '@fortawesome/pro-solid-svg-icons';\r\n\r\nimport { withRouter } from \"react-router\";\r\n\r\nimport { showNotification, hideNotification } from 'react-admin';\r\n\r\nimport { connect } from 'react-redux';\r\n\r\nimport statuses from './Devices/DeviceStatusLookup';\r\nimport { getHelperStyles } from '../Helpers.js'\r\n\r\nconst SomeDevicesHaveErrors = (props) => {\r\n\r\n return (\r\n
\r\n \r\n Some devices have errors.\r\n Show Notifications \r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nconst noNotificationStyles = {\r\n container: {\r\n fontWeight: 'normal',\r\n textAlign: 'center',\r\n padding: '70px'\r\n },\r\n\r\n icon: {\r\n fontSize: '80px',\r\n color: '#E0E0E0'\r\n },\r\n\r\n message: {\r\n fontSize: '16px',\r\n color: '#6D6D6D'\r\n }\r\n}\r\nconst NoNotificationMessage = withStyles(noNotificationStyles)(({ classes }) => {\r\n return (\r\n
\r\n \r\n

No New Notifications

\r\n
\r\n )\r\n});\r\n\r\nconst styles = {\r\n notificationContainer: {\r\n position: 'relative',\r\n right: '55px',\r\n cursor: 'pointer'\r\n },\r\n\r\n notificationIcon: {\r\n fontSize: '20px',\r\n color: 'white'\r\n },\r\n\r\n notificationCount: {\r\n fontSize: '12px',\r\n fontWeight: 'bold',\r\n color: '#5daef1',\r\n margin: 0,\r\n display: 'inline',\r\n position: 'absolute',\r\n top: '-5px'\r\n },\r\n\r\n popoverPaper: {\r\n width: '330px'\r\n },\r\n\r\n trayHeader: {\r\n backgroundColor: '#005db9',\r\n padding: '16px',\r\n position: 'relative',\r\n color: 'white',\r\n fontSize: '20px'\r\n },\r\n\r\n headerText: {\r\n margin: 0,\r\n padding: 0,\r\n display: 'inline',\r\n fontWeight: '900'\r\n },\r\n\r\n optionsIcon: {\r\n float: 'right',\r\n cursor: 'pointer',\r\n color: 'white'\r\n },\r\n\r\n notificationControls: {\r\n padding: '16px',\r\n textAlign: 'center',\r\n\r\n '& button': {\r\n width: '150px',\r\n textTransform: 'none',\r\n fontSize: '14px',\r\n fontWeight: '900',\r\n color: '#666',\r\n height: '36px'\r\n }\r\n },\r\n\r\n sortButtonSelected: {\r\n borderColor: '#036ecb !important',\r\n backgroundColor: '#E0EDF8 !important',\r\n color: '#005db9 !important'\r\n },\r\n\r\n notificationList: {\r\n maxHeight: '350px',\r\n overflow: 'auto',\r\n\r\n '& a': {\r\n color: 'inherit',\r\n textDecoration: 'inherit'\r\n }\r\n },\r\n\r\n alert: {\r\n borderTop: '1px solid #E0E0E0',\r\n padding: '16px',\r\n paddingTop: '10px',\r\n cursor: 'pointer',\r\n\r\n '&:hover': {\r\n backgroundColor: '#e2f1ff'\r\n }\r\n },\r\n\r\n alertIcon: {\r\n backgroundColor: '#fcc',\r\n borderRadius: '100%',\r\n width: '20px !important',\r\n height: '20px',\r\n padding: '10px',\r\n fontSize: '20px',\r\n color: '#666',\r\n display: 'inline-block',\r\n marginRight: '16px',\r\n verticalAlign: '26px'\r\n },\r\n\r\n alertTime: {\r\n fontSize: '10px',\r\n fontWeight: '300',\r\n margin: 0,\r\n marginBottom: '4px',\r\n textAlign: 'right'\r\n },\r\n\r\n alertInfoContainer: {\r\n display: 'inline-block'\r\n },\r\n\r\n deviceName: {\r\n fontSize: '16px',\r\n fontWeight: '900',\r\n margin: '4px 0'\r\n },\r\n\r\n locationName: {\r\n fontSize: '14px',\r\n fontWeight: '400',\r\n margin: '4px 0'\r\n },\r\n\r\n alertMessage: {\r\n fontSize: '12px',\r\n margin: '4px 0',\r\n color: '#666'\r\n },\r\n\r\n alertIconWarning: {\r\n backgroundColor: '#FFE7D0'\r\n },\r\n\r\n alertIconError: {\r\n backgroundColor: '#fcc'\r\n }\r\n}\r\n\r\nconst NotificationHeader = ({ classes }) => {\r\n const useStyles = getHelperStyles()();\r\n const className = useStyles.heading6 + ' ' + classes.headerText;\r\n\r\n return (\r\n

Notifications

\r\n );\r\n}\r\n\r\nclass NotificationTray extends React.Component {\r\n _isMounted = false;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.handleOpen = this.handleOpen.bind(this);\r\n this.state = {\r\n trayOpen: false,\r\n anchorEl: null,\r\n notificationCount: 0,\r\n sortby: 'priority',\r\n notificationList: [],\r\n vertical: 'top',\r\n horizontal: 'right',\r\n handleSnackbar: true\r\n };\r\n }\r\n // for alert popover\r\n handleClick(event) {\r\n this.setState({\r\n trayOpen: true,\r\n anchorEl: event.currentTarget,\r\n vertical: 'bottom'\r\n });\r\n }\r\n\r\n handleClose() {\r\n this.setState({\r\n trayOpen: false,\r\n });\r\n }\r\n\r\n // for toast notifiction\r\n closeNotification = () => {\r\n this.props.hideNotification();\r\n };\r\n\r\n handleOpen(event) {\r\n this.setState({\r\n trayOpen: true,\r\n anchorEl: document.getElementById(\"NotificationTray\"),\r\n vertical: 'bottom'\r\n });\r\n }\r\n\r\n\r\n\r\n sortNotificationList(list, sortType) {\r\n switch (sortType) {\r\n case \"time\":\r\n list.sort(function (a, b) {\r\n var aDate = moment(a.dateCreated).valueOf();\r\n var bDate = moment(b.dateCreated).valueOf();\r\n\r\n if (aDate == bDate) return 0;\r\n return aDate < bDate ? 1 : -1;\r\n });\r\n break;\r\n case \"priority\":\r\n list.sort(function (a, b) {\r\n if (a.deviceStatus == b.deviceStatus) return 0;\r\n return a.deviceStatus > b.deviceStatus ? 1 : -1;\r\n });\r\n break;\r\n }\r\n return list;\r\n }\r\n\r\n handleSorting(event, value) {\r\n if (value != null && value != undefined) {\r\n\r\n var tempAlertList = this.sortNotificationList(this.state.notificationList, value);\r\n\r\n this.setState({\r\n sortby: value,\r\n notificationList: tempAlertList\r\n });\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.props.hideNotification();\r\n this._isMounted = true;\r\n\r\n const token = localStorage.getItem('authorizationToken');\r\n\r\n var jsonHeaders = {\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n\r\n };\r\n\r\n var comp = this;\r\n\r\n axios.get(`/api/Notifications`, jsonHeaders)\r\n .then(function (response) {\r\n\r\n if (comp._isMounted) {\r\n\r\n let previousSnackbar = comp.state.handleSnackbar;\r\n\r\n comp.setState({\r\n notificationList: comp.sortNotificationList(response.data, comp.state.sortby),\r\n notificationCount: response.data.length,\r\n handleSnackbar: false\r\n });\r\n\r\n // Toast Notifications - based on route path location\r\n if (comp.props.location.pathname === \"/locations\") {\r\n if (response.data.length > 0 && previousSnackbar) {\r\n\r\n comp.props.showNotification(\r\n ,\r\n 'info',\r\n { autoHideDuration: 10000 }\r\n );\r\n }\r\n }\r\n else if (/^\\/locations\\/.+\\/show.*$/.test(comp.props.location.pathname)) { // match location show page\r\n var thisLocationHasAnError = false;\r\n\r\n // look and see if this route location ID has a device with an alert - match GUID\r\n var locationId = comp.props.location.pathname.match(/(\\{){0,1}[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}(\\}){0,1}/g)[0];\r\n response.data.forEach(element => {\r\n if (element.parentLocationId === locationId || element.locationId === locationId) {\r\n thisLocationHasAnError = true;\r\n }\r\n });\r\n\r\n if (thisLocationHasAnError && previousSnackbar) {\r\n\r\n comp.props.showNotification(\r\n ,\r\n 'info',\r\n { autoHideDuration: 10000 }\r\n );\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n this.props.hideNotification();\r\n }\r\n\r\n getTimestamp(otherTime) {\r\n\r\n var now = moment(new Date());\r\n var oTime = moment.utc(otherTime);\r\n var duration = moment.duration(now.diff(oTime));\r\n\r\n if (duration.asDays() > 1) {\r\n return duration.days() + 'd';\r\n }\r\n else if (duration.asHours() > 1) {\r\n return duration.hours() + 'h';\r\n }\r\n else if (duration.asMinutes() > 1) {\r\n return duration.minutes() + 'm';\r\n }\r\n else {\r\n return 'Now';\r\n }\r\n }\r\n\r\n render() {\r\n\r\n\r\n const { classes, ...other } = this.props;\r\n\r\n var userId = localStorage.getItem('userId');\r\n var recordIds = Object.keys(this.state.notificationList);\r\n var notifications = recordIds.map(id => {\r\n var record = this.state.notificationList[id];\r\n\r\n return (\r\n \r\n
\r\n

{this.getTimestamp(record.dateCreated)}

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

{record.deviceName}

\r\n

{record.locationName}

\r\n

{record.errMsg}

\r\n
\r\n
\r\n \r\n );\r\n });\r\n\r\n return (\r\n
\r\n
\r\n \r\n

{this.state.notificationCount}

\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n {this.state.notificationCount > 0 &&\r\n <>\r\n
\r\n \r\n \r\n Priority\r\n \r\n \r\n Time\r\n \r\n \r\n
\r\n
\r\n {notifications}\r\n
\r\n \r\n }\r\n {this.state.notificationCount == 0 &&\r\n \r\n }\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\r\n});\r\nconst mapDispatchToProps = {\r\n showNotification,\r\n hideNotification\r\n};\r\n\r\nexport default withRouter(withStyles(styles)(connect(mapStateToProps, mapDispatchToProps)(NotificationTray)));","import React from 'react';\nimport { Layout, Menu } from 'react-admin';\nimport { withStyles } from '@material-ui/core/styles';\nimport WattsAppBar from './WattsAppBar/WattsAppBar';\nimport WattsSidebar from './WattsSidebar';\nimport WattsNotification from './WattsNotification'\nimport NotificationTray from './NotificationTray';\n\nconst WattsLayout = props => {\n return ( }/>}\n menu={Menu}\n notification={WattsNotification}\n sidebar={WattsSidebar}\n classes={props.classes.content}\n {...props} />\n );\n};\n\nconst styles = {\n root: {\n 'background-color': '#F5F5F5',\n 'marginTop': '0',\n 'z-index': 'auto'\n },\n content: {\n 'padding': '0'\n }\n};\n\nexport default withStyles(styles)(WattsLayout);","export const routes = {\n locations : '/locations',\n login: '/login',\n dashboard: '/dashboard'\n}","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { useTranslate } from 'react-admin';\n\nconst useStyles = makeStyles(\n theme => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n [theme.breakpoints.up('md')]: {\n height: '100%',\n },\n [theme.breakpoints.down('lg')]: {\n height: '100vh',\n marginTop: '-48px',\n },\n },\n icon: {\n width: '144px',\n height: '144px',\n },\n message: {\n textAlign: 'center',\n fontFamily: 'Roboto, sans-serif',\n opacity: 0.5,\n margin: '0 16px',\n },\n }),\n { name: 'RaLoading' }\n);\n\nconst Loading = props => {\n const {\n className,\n loadingPrimary = 'ra.page.loading',\n loadingSecondary = 'ra.message.loading',\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n\n return (\n
\n
\n \n

{translate(loadingPrimary)}

\n
{translate(loadingSecondary)}
\n
\n
\n );\n};\n\nLoading.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n loadingPrimary: PropTypes.string,\n loadingSecondary: PropTypes.string,\n};\n\nLoading.defaultProps = {\n loadingPrimary: 'ra.page.loading',\n loadingSecondary: 'ra.message.loading',\n};\n\nexport default Loading;\n","import React from 'react';\r\nimport { Loading } from '../Utils/ra';\r\n\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst loadingStyles = makeStyles({\r\n 'loading': {\r\n 'margin': '50px'\r\n }\r\n});\r\n\r\nconst WattsLoading = () => {\r\n\r\n const useStyles = loadingStyles();\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default WattsLoading;\r\n","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { ThemeProvider as MuiThemeProvider } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport { useAuthState } from \"react-admin\";\r\nimport { Redirect } from \"react-router\";\r\n\r\nimport WattsTheme from '../Colors/WattsTheme';\r\nimport { getHelperStyles } from '../Helpers';\r\nimport { downSm, downXs, upSm } from './styles.valiable'\r\nimport { authProvider } from '../AuthProvider';\r\nimport { routes } from './Dashboard/routes'\r\nimport WattsLoading from \"./WattsLoading\";\r\n\r\nconst loginStyles = makeStyles({\r\n 'container': {\r\n 'background': '#00254A url(/img/launch.jpg)',\r\n 'backgroundSize': 'cover',\r\n 'backgroundPosition': '100%',\r\n 'height': '100vh'\r\n },\r\n 'rightContent': {\r\n 'fontSize': '14px',\r\n 'lineHeight': '1.14',\r\n 'letterSpacing': '-0.14px',\r\n [upSm]: {\r\n position: 'absolute',\r\n left: 'calc(50% - 63px)',\r\n top: '40%',\r\n textAlign: 'center',\r\n marginTop: 120\r\n },\r\n [downSm]: {\r\n position: 'absolute',\r\n bottom: 54,\r\n height: 36,\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n '& > a': {\r\n margin: 0,\r\n height: 36,\r\n width: '80%'\r\n }\r\n },\r\n [downXs]: {\r\n 'fontSize': '18px'\r\n },\r\n },\r\n 'rightContentItem': {\r\n 'color': '#FFF',\r\n 'marginRight': '20px',\r\n 'textDecoration': 'none',\r\n 'font-family': 'Helvetica Neue !important'\r\n },\r\n 'title': {\r\n 'position': 'absolute',\r\n 'left': '50%',\r\n 'top': '40%',\r\n 'textAlign': 'center',\r\n 'transform': 'translate(-50%, -50%);',\r\n 'fontSize': '32px',\r\n [downSm]: {\r\n 'fontSize': '24px'\r\n },\r\n [downXs]: {\r\n 'fontSize': '18px'\r\n },\r\n 'color': '#FFF'\r\n },\r\n 'appLogo': {\r\n 'width': '100%',\r\n 'maxWidth': '786px',\r\n 'minWidth': '400px',\r\n [downSm]: {\r\n 'minWidth': 300\r\n },\r\n [downXs]: {\r\n 'minWidth': 'unset'\r\n }\r\n },\r\n 'heading4': {\r\n 'font-family': 'Helvetica Neue !important',\r\n [downSm]: {\r\n 'fontSize': '24px'\r\n },\r\n [downXs]: {\r\n 'fontSize': '18px'\r\n },\r\n },\r\n 'banner': {\r\n 'backgroundColor': '#ED6C02',\r\n 'width': 'calc(100% - 16px)',\r\n 'fontSize': '16px',\r\n 'fontWeight': '700',\r\n 'color': 'black',\r\n 'position': 'fixed',\r\n 'top': '0',\r\n 'left': '0',\r\n 'display': 'flex',\r\n 'justifyContent': 'center',\r\n 'padding': '8px',\r\n [downSm]: {\r\n 'fontSize': '14px'\r\n },\r\n }\r\n});\r\n\r\n\r\nconst AccountControls = () => {\r\n const useStyles = loginStyles();\r\n const classTemplate = getHelperStyles()();\r\n const buttonStyle = useStyles.rightContentItem + ' ' + classTemplate.subtitle2;\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nconst WattsLoginPage = (params) => {\r\n\r\n const useStyles = loginStyles();\r\n const classTemplate = getHelperStyles()();\r\n const headingStyle = useStyles.heading4 + ' ' + classTemplate.heading4;\r\n const { loading, authenticated } = useAuthState();\r\n\r\n const currentDate = new Date();\r\n const bannerDueDate = new Date('2024-02-01');\r\n const showBanner = currentDate < bannerDueDate;\r\n\r\n if (loading) {\r\n return ;\r\n }\r\n\r\n if (authenticated) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n {showBanner && < div className={useStyles.banner}>If you are having problems logging in, hit Ctrl/Cmd + Shift + R to refresh your browser.
}\r\n \r\n
\r\n

Welcome to

\r\n \"Watts\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default WattsLoginPage;\r\n","import { useEffect } from 'react';\n\n// For more information on why this is necessary, see:\n// https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/docs/guides/scroll-restoration.md\nconst ScrollToTopOnMount = () => {\n useEffect(() => {\n window.scrollTo(0, 0);\n }, []);\n\n return null;\n};\n\nexport default ScrollToTopOnMount;","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst cancelButtonStyles = makeStyles({\n cancelDiv: {\n color: '#005DB9',\n cursor: 'pointer',\n fontWeight: 'bold',\n margin: '0 20px'\n }\n});\n\nconst CancelButton = ({ history, ...props }) => {\n\n const useStyles = cancelButtonStyles();\n\n // Uses the react-router to go back to the previous page.\n return (\n
history.goBack()}>\n {props.text}\n
\n );\n};\n\nexport default withRouter(CancelButton);","import React from 'react';\nimport { Toolbar, SaveButton } from 'react-admin';\nimport { withStyles } from '@material-ui/core';\nimport Grid from '@material-ui/core/Grid';\nimport CancelButton from './CancelButton';\n\n// Custom toolbar for the SimpleForms used by Watts.\nconst WattsToolbar = ({ classes, basePath, ...props }) => {\n\n const saveIconStyles = {\n 'root': {\n 'margin': 0\n }\n };\n\n // This is sort of a no-op icon. It's blank. The design (UI / UX) didn't specify one. \n const SaveIcon = withStyles(saveIconStyles)(({ classes, ...props }) => {\n return (\n \n );\n });\n\n return (\n \n \n \n \n \n \n \n }\n className=\"formSubmitButton\" />\n \n \n \n \n \n \n );\n};\n\nexport default WattsToolbar;","import React from 'react';\nimport { getHelperStyles } from '../Helpers';\n\nconst FormHeader = (props) => {\n\n const classTemplate = getHelperStyles()();\n\n return (\n
\n

{props.title}

\n
\n );\n}\n\nexport default FormHeader;","import React, {\r\n Children,\r\n cloneElement,\r\n Component,\r\n isValidElement,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport compose from 'recompose/compose';\r\nimport { CSSTransition, TransitionGroup } from 'react-transition-group';\r\nimport get from 'lodash/get';\r\nimport Button from '@material-ui/core/Button';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport { withStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPlusCircle } from '@fortawesome/pro-regular-svg-icons';\r\nimport { faMinusCircle } from '@fortawesome/pro-regular-svg-icons';\r\n\r\nimport { translate, ValidationError } from 'ra-core';\r\nimport classNames from 'classnames';\r\n\r\nimport { FormInput } from 'react-admin';\r\n\r\nconst styles = theme =>\r\n createStyles({\r\n root: {\r\n padding: 0,\r\n margin: 0,\r\n '& > li:last-child': {\r\n borderBottom: 'none',\r\n },\r\n },\r\n listItem: {\r\n display: 'flex',\r\n listStyleType: 'none'\r\n },\r\n index: {\r\n width: '3em',\r\n paddingTop: '1em',\r\n [theme.breakpoints.down('sm')]: { display: 'none' },\r\n },\r\n form: { flex: 2 },\r\n leftIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n addButton: {\r\n margin: '48px 0'\r\n }\r\n });\r\n\r\n\r\n// Based on the react-admin out of the box Array Input found here:\r\n// https://github.com/marmelab/react-admin/blob/master/packages/ra-ui-materialui/src/form/SimpleFormIterator.js\r\n// Unfortunately, out of the box this does not meet all of our needs, so we're creating\r\n// a new version of it here.\r\nexport class WattsFormIterator extends Component {\r\n constructor(props) {\r\n super(props);\r\n // we need a unique id for each field for a proper enter/exit animation\r\n // but redux-form doesn't provide one (cf https://github.com/erikras/redux-form/issues/2735)\r\n // so we keep an internal map between the field position and an auto-increment id\r\n this.nextId = props.fields.length\r\n ? props.fields.length\r\n : props.defaultValue\r\n ? props.defaultValue.length\r\n : 0;\r\n\r\n // We check whether we have a defaultValue (which must be an array) before checking\r\n // the fields prop which will always be empty for a new record.\r\n // Without it, our ids wouldn't match the default value and we would get key warnings\r\n // on the CssTransition element inside our render method\r\n this.ids = this.nextId > 0 ? Array.from(Array(this.nextId).keys()) : [];\r\n }\r\n\r\n removeField = index => () => {\r\n const { fields } = this.props;\r\n this.ids.splice(index, 1);\r\n fields.remove(index);\r\n };\r\n\r\n // Returns a boolean to indicate whether to disable the remove button for certain fields.\r\n // If disableRemove is a function, then call the function with the current record to\r\n // determining if the button should be disabled. Otherwise, use a boolean property that\r\n // enables or disables the button for all of the fields.\r\n disableRemoveField = (record, disableRemove) => {\r\n if (typeof disableRemove === 'boolean') {\r\n return disableRemove;\r\n }\r\n return disableRemove && disableRemove(record);\r\n };\r\n\r\n addField = () => {\r\n const { fields } = this.props;\r\n this.ids.push(this.nextId++);\r\n fields.push({});\r\n };\r\n\r\n render() {\r\n const {\r\n basePath,\r\n classes = {},\r\n children,\r\n fields,\r\n meta: { error, submitFailed },\r\n record,\r\n resource,\r\n source,\r\n translate,\r\n disableAdd,\r\n disableRemove,\r\n variant,\r\n margin,\r\n addButtonText,\r\n removeButtonText\r\n } = this.props;\r\n const records = get(record, source);\r\n\r\n return fields ? (\r\n
    \r\n {submitFailed && typeof error !== 'object' && error && (\r\n \r\n \r\n \r\n )}\r\n \r\n {fields.map((member, index) => (\r\n \r\n
  • \r\n
    \r\n {Children.map(children, (input, index2) =>\r\n isValidElement(input) ? (\r\n \r\n \r\n \r\n {removeButtonText}\r\n \r\n \r\n )\r\n }\r\n }\r\n />\r\n ) : null\r\n )}\r\n
    \r\n {}\r\n
  • \r\n \r\n ))}\r\n
    \r\n {!disableAdd && (\r\n
  • \r\n \r\n \r\n \r\n \r\n
  • \r\n )}\r\n
\r\n ) : null;\r\n }\r\n}\r\n\r\nWattsFormIterator.defaultProps = {\r\n disableAdd: false,\r\n disableRemove: false,\r\n};\r\n\r\nWattsFormIterator.propTypes = {\r\n defaultValue: PropTypes.any,\r\n basePath: PropTypes.string,\r\n children: PropTypes.node,\r\n classes: PropTypes.object,\r\n className: PropTypes.string,\r\n fields: PropTypes.object,\r\n meta: PropTypes.object,\r\n record: PropTypes.object,\r\n source: PropTypes.string,\r\n resource: PropTypes.string,\r\n translate: PropTypes.func,\r\n disableAdd: PropTypes.bool,\r\n disableRemove: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\r\n addButtonText: PropTypes.string,\r\n removeButtonText: PropTypes.string\r\n};\r\n\r\nexport default compose(\r\n translate,\r\n withStyles(styles)\r\n)(WattsFormIterator);\r\n","import React from 'react';\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\n\nconst requirementStyles = makeStyles({\n requiredText: {\n float: 'right',\n fontSize: '12px',\n fontWeight: 'normal',\n fontStretch: 'normal',\n fontStyle: 'normal',\n lineHeight: '1.33',\n letterSpacing: '-0.12px',\n color: '#666'\n }\n});\n\nconst RequiredFieldNote = (props) => {\n\n const classes = requirementStyles();\n\n return (\n

* Required

\n );\n};\n\nexport default RequiredFieldNote;","import React from 'react';\nimport axios from 'axios';\nimport { withStyles } from '@material-ui/core/styles';\nimport { TextInput, SelectInput, ArrayInput, required, choices } from 'react-admin';\nimport FormHeader from '../FormHeader';\nimport Grid from '@material-ui/core/Grid';\n\n// Icons\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faMapMarkerAlt, faBuilding } from '@fortawesome/pro-solid-svg-icons';\n\nimport WattsFormIterator from '../WattsFormIterator';\nimport RequiredFieldNote from '../RequiredFieldNote';\n\nconst isStateValid = (stateMap) => (value, allValues) => {\n var country = allValues.address.country;\n if(!country || !stateMap || !stateMap[country] || !Array.isArray(stateMap[country])) {\n return undefined;\n }\n var isStateValid = stateMap[country].some(state => state.id === value);\n return isStateValid ? undefined : {message: \"ra.validation.required\"}\n}\n\n\nclass LocationFormLayout extends React.Component {\n\n constructor(props) {\n super(props);\n\n // Initial state, we don't have any building types at the start.\n this.state = {\n buildingTypes: [],\n validBuildingTypeIds: [],\n buildingTypeValue: null,\n countryStateMap: {},\n countries: [],\n states: [],\n stateValue: null\n };\n }\n\n componentDidMount() {\n\n // Need to capture a reference to the component's 'this' object so\n // we can update the state in the callback from the API.\n var compThis = this;\n\n this.handleBuildingType(compThis);\n this.handleCountriesAndStates(compThis);\n }\n\n handleBuildingType(compThis) {\n const token = localStorage.getItem('authorizationToken');\n axios.get(\"/api/Locations/BuildingTypes\", {\n headers: {\n \"Cache-control\": \"no-cache, no-store\",\n \"Pragma\": \"no-cache\",\n \"Expires\": 0,\n \"Authorization\": `Bearer ${token}`\n }\n })\n .then(function (results) {\n // Sort the results and map them to the object schema the react-admin\n // select control expects.\n var buildingTypes = results.data.sort(function (first, second) {\n\n // Sort ascending based on sequence number.\n return first.sequence - second.sequence;\n }).map(function (buildingType) {\n\n // Map to an object with an id and name.\n return {\n id: buildingType.buildingTypeId,\n name: buildingType.name\n }\n });\n\n // Used for validation of the input on submit of the form.\n var validBuildingTypeIds = buildingTypes.map((buildingType) => {\n return buildingType.id;\n });\n\n // Now that we're populating the list of location types, we also need to populate the\n // value of it as well.\n var buildingTypeId = null;\n if (compThis.props.record && compThis.props.record.buildingType && compThis.props.record.buildingType.buildingTypeId) {\n buildingTypeId = compThis.props.record.buildingType.buildingTypeId;\n }\n\n // Update the state; need to call setState for the UI to re-render.\n compThis.setState({\n buildingTypes: buildingTypes,\n validBuildingTypeIds: validBuildingTypeIds,\n buildingTypeId: buildingTypeId\n });\n });\n }\n\n handleCountriesAndStates(compThis) {\n const token = localStorage.getItem('authorizationToken');\n axios.get(\"/api/Locations/CountriesStates\", {\n headers: {\n \"Cache-control\": \"no-cache, no-store\",\n \"Pragma\": \"no-cache\",\n \"Expires\": 0,\n \"Authorization\": `Bearer ${token}`\n }\n })\n .then(function (results) {\n if (results && results.data) {\n\n var countryStateMap = {};\n\n // Determine the list of countries from the data provided by the endpoint.\n var countries = results.data.map(function (value) {\n return {\n id: value.code,\n name: value.name\n };\n });\n\n // Determine a mapping of country code value to the list of states for that country.\n results.data.forEach(function (value) {\n\n var states = value.states.map(function (value) {\n return {\n id: value.code,\n name: value.name\n };\n });\n\n countryStateMap[value.code] = states;\n });\n\n // Set the state to update the UI.\n compThis.setState({\n 'countryStateMap': countryStateMap,\n 'countries': countries\n });\n\n if (compThis.props.record && compThis.props.record.address && compThis.props.record.address.country) {\n compThis.populateStateDropDown(compThis.props.record.address.country);\n }\n }\n });\n }\n\n onChangeCountry(compThis, context) {\n\n if (context && context.target) {\n // What value the country field is set to.\n var country = context.target.value;\n\n compThis.populateStateDropDown(country);\n }\n }\n\n populateStateDropDown(country) {\n\n var stateValue = null;\n\n if (this.props.record && this.props.record.address && this.props.record.address.state_province) {\n stateValue = this.props.record.address.state_province;\n }\n\n // If it's a valid country...\n if (country && this.state.countryStateMap.hasOwnProperty(country)) {\n\n // Set the state drop-down's options based on the country selected.\n this.setState({\n 'states': this.state.countryStateMap[country],\n 'stateValue': stateValue\n });\n }\n }\n\n render() {\n const locationFormStyles = {\n icon: {\n 'color': '#005DB9',\n 'font-size': '32px'\n }\n };\n\n const StyledLocationIcon = (withStyles(locationFormStyles)(({ classes }) => { return () }));\n const StyledSubLocationIcon = (withStyles(locationFormStyles)(({ classes }) => { return () }));\n\n return (\n
\n \n \n \n \n \n \n \n \n

Location Info

\n

Enter the details for your new location.

\n
\n \n \n\n \n \n this.onChangeCountry(this, value)} />\n \n \n \n \n \n \n \n
\n
\n \n \n

Sublocations

\n

Organize your devices in as many sublocations as you need.

\n
\n \n \n \n \n \n \n \n
\n
\n \n \n
\n
\n );\n }\n};\n\nexport default LocationFormLayout;\n","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { Create, SimpleForm, useAuthState } from 'react-admin';\r\nimport ScrollToTopOnMount from '../ScrollToTop'\r\nimport WattsToolbar from '../WattsToolbar';\r\nimport LocationFormLayout from './LocationFormLayout';\r\nimport WattsLoading from '../WattsLoading';\r\n\r\n// CSS\r\nimport '../css/LandingPage.css';\r\n\r\nconst createStyles = makeStyles({\r\n 'main': {\r\n 'margin': '0'\r\n }\r\n});\r\n\r\nconst CreateLocation = (props) => {\r\n\r\n const createUseStyles = createStyles();\r\n\r\n const { loading, authenticated } = useAuthState();\r\n\r\n if (loading) {\r\n return ;\r\n }\r\n\r\n if (!authenticated) {\r\n return
;\r\n }\r\n\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\nexport default CreateLocation;","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { Edit, SimpleForm, useAuthState } from 'react-admin';\r\nimport ScrollToTopOnMount from '../ScrollToTop'\r\nimport WattsToolbar from '../WattsToolbar';\r\nimport LocationFormLayout from './LocationFormLayout';\r\nimport WattsLoading from '../WattsLoading';\r\n\r\n// CSS\r\nimport '../css/LandingPage.css';\r\n\r\nconst editStyles = makeStyles({\r\n 'main': {\r\n 'margin': '0'\r\n }\r\n});\r\n\r\nconst EditLocation = ({ hasCreate, hasEdit, hasList, hasShow, ...props }) => {\r\n const editUseStyles = editStyles();\r\n\r\n const { loading, authenticated } = useAuthState();\r\n\r\n if (loading) {\r\n return ;\r\n }\r\n\r\n if (!authenticated) {\r\n return
;\r\n }\r\n\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\nexport default EditLocation;","import React from 'react';\r\nimport moment from \"moment\";\r\n\r\nimport { Link } from 'react-router-dom';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport CardHeader from '@material-ui/core/CardHeader';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nimport { TextField } from \"react-admin\";\r\n\r\nimport { getDeviceImageOrDefault, getUserTempScale, getDurationString, getRecordOutletTemp, getMixedOutletTemp, BLANK_TEMP_SCALE_VALUE, getUserSettingsTempScale } from '../../Helpers.js';\r\nimport statuses from './DeviceStatusLookup';\r\n\r\nconst MAINTAINING_SETPOINT = 9;\r\n\r\nconst styles = {\r\n card: {\r\n width: 330,\r\n margin: '12px',\r\n display: 'inline-block',\r\n verticalAlign: 'top',\r\n position: 'relative'\r\n },\r\n\r\n deviceType: {\r\n color: '#C1C1C1',\r\n fontSize: '10px',\r\n margin: 0,\r\n },\r\n\r\n deviceInfo: {\r\n padding: '10px 0'\r\n },\r\n\r\n deviceName: {\r\n color: '#000',\r\n fontSize: '16px',\r\n fontWeight: 'bold'\r\n },\r\n\r\n temperature: {\r\n color: '#212121',\r\n margin: 0,\r\n fontSize: '32px'\r\n },\r\n\r\n tempUnit: {\r\n fontSize: '14px',\r\n verticalAlign: 'top'\r\n },\r\n\r\n deviceFooter: {\r\n padding: '10px 16px',\r\n height: '20px',\r\n color: '#5d5d5d'\r\n },\r\n\r\n redStatus: {\r\n backgroundColor: '#FFCCCC',\r\n },\r\n orangeStatus: {\r\n backgroundColor: '#FFE7D0',\r\n },\r\n greenStatus: {\r\n backgroundColor: '#CCF3CD',\r\n },\r\n\r\n statusIcon: {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n height: '20px',\r\n float: 'left',\r\n fontSize: '20px'\r\n },\r\n\r\n statusMessage: {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n display: 'block',\r\n float: 'left',\r\n fontWeight: 'bold',\r\n lineHeight: '1.9',\r\n letterSpacing: '-0.12px',\r\n margin: 0,\r\n marginLeft: '10px'\r\n },\r\n statusValue: {\r\n display: 'block',\r\n float: 'right',\r\n fontWeight: 'normal'\r\n },\r\n footerCardContent: {\r\n fontSize: '12px',\r\n fontWeight: 'bold',\r\n lineHeight: '20px',\r\n verticalAlign: 'middle',\r\n \"&:last-child\": {\r\n paddingBottom: '10px'\r\n }\r\n },\r\n\r\n deviceImage: {\r\n width: '80px',\r\n position: 'absolute',\r\n top: '16px',\r\n right: '16px'\r\n }\r\n};\r\n\r\n\r\nconst DeviceStatusBar = withStyles(styles)(({ classes, record = {} }) => {\r\n // Get status name\r\n var statusName = \"\";\r\n var colorClass = \"\";\r\n var statusIcon = \"\";\r\n var durationString = \"\";\r\n var sanitizeInterval;\r\n var RightContent = (\r\n \r\n );\r\n\r\n const getTelemetryDataValue = (fieldName) => {\r\n\r\n if (record.data[fieldName]) {\r\n return record.data[fieldName].Val;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n const handleSanitizeCountdown = (endTime) => {\r\n var now = moment(new Date()).utc();\r\n\r\n var duration = endTime.diff(now);\r\n if (duration && duration > 0) {\r\n return getDurationString(duration);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n if (record.status) {\r\n statusName = record.status.name;\r\n // get color class\r\n if (statuses[record.status.id].color === \"red\") {\r\n colorClass = classes.redStatus;\r\n }\r\n else if (statuses[record.status.id].color === \"orange\") {\r\n colorClass = classes.orangeStatus;\r\n }\r\n else if (statuses[record.status.id].color === \"green\") {\r\n colorClass = classes.greenStatus;\r\n }\r\n // get icon\r\n statusIcon = statuses[record.status.id].icon;\r\n\r\n if (record.status.id == 7 && record.sanitizeEndTime) {\r\n RightContent = (\r\n
{record.sanitizeEndTime}
\r\n );\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n
{statusName}
\r\n {RightContent}\r\n
\r\n );\r\n});\r\n\r\nconst TempField = withStyles(styles)(({ classes, record = {} }) => {\r\n\r\n const tempText = getMixedOutletTemp(record, '- - -');\r\n const displayValue = getUserSettingsTempScale(record);\r\n\r\n return (

{tempText}°{displayValue});\r\n});\r\n\r\nTempField.defaultProps = { label: 'Name' };\r\n\r\nexport const DeviceCard = withStyles(styles)(({ classes, dataRecord = {}, location }) => {\r\n\r\n return (\r\n \r\n \r\n \r\n

{dataRecord.deviceType}

}\r\n />\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n )\r\n});","import React, { Component, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\n\r\nimport {\r\n fetchEnd,\r\n fetchStart,\r\n showNotification,\r\n crudGetMatching,\r\n} from 'react-admin';\r\n\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faQuestionCircle } from '@fortawesome/pro-solid-svg-icons';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\n\r\nimport ContextMenuOption from '../ContextMenuOption';\r\n\r\nimport '../css/HelpModal.css';\r\nimport '../css/TelemetryCard.css';\r\n\r\n\r\nclass TelemetryCardHelpModal extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n error: false,\r\n showDialog: false,\r\n helpData: {\r\n title: \"\",\r\n icon: \"\",\r\n topics: []\r\n }\r\n };\r\n }\r\n\r\n handleClick = () => {\r\n this.setState({ showDialog: true });\r\n };\r\n\r\n handleCloseClick = () => {\r\n this.setState({ showDialog: false });\r\n };\r\n\r\n render() {\r\n const { showDialog } = this.state;\r\n const superProps = this.props.superProps;\r\n\r\n // Check if this is a menu item button \r\n // If NOT, then use a regular card icon button\r\n var ThisButton = () => {\r\n if (superProps.isMenu) {\r\n return ();\r\n }\r\n else {\r\n var ThisIcon = superProps.icon;\r\n return ();\r\n\r\n }\r\n };\r\n\r\n var helpContent = null;\r\n if (this.props.superProps.helpObject) {\r\n\r\n const helpObject = this.props.superProps.helpObject[this.props.superProps.helpKey];\r\n\r\n helpContent = (\r\n <>\r\n {helpObject.title}\r\n {helpObject.body}\r\n \r\n );\r\n }\r\n else {\r\n helpContent = (\r\n <>\r\n Unable to retrieve help information.\r\n {this.props.superProps.helpError}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n {helpContent}\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n crudGetMatching,\r\n fetchEnd,\r\n fetchStart,\r\n showNotification\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(\r\n TelemetryCardHelpModal\r\n);","import React, { Fragment } from 'react';\r\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\r\n\r\nimport Button from '@material-ui/core/Button';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport MuiDialogContent from '@material-ui/core/DialogContent';\r\nimport MuiDialogActions from '@material-ui/core/DialogActions';\r\nimport Slider from '@material-ui/core/Slider';\r\nimport Dialog from '@material-ui/core/Dialog';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faChevronUp, faChevronDown } from '@fortawesome/pro-solid-svg-icons';\r\n\r\nimport { getUserTempScale } from '../Helpers.js';\r\n\r\nconst DialogContent = withStyles((theme) => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n },\r\n}))(MuiDialogContent);\r\n\r\nconst DialogActions = withStyles((theme) => ({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(1),\r\n },\r\n}))(MuiDialogActions);\r\n\r\nclass ConfirmationModal extends React.Component {\r\n state = {\r\n error: false,\r\n showDialog: false,\r\n showError: false,\r\n errorText: \"An error has occured\"\r\n };\r\n\r\n handleClick = () => {\r\n this.setState({ showDialog: true });\r\n };\r\n\r\n handleCloseClick = () => {\r\n this.setState({ showDialog: false });\r\n };\r\n\r\n handleConfirmClick = () => {\r\n var x = this.props;\r\n this.handleCloseClick();\r\n this.props.close();\r\n };\r\n\r\n render() {\r\n const { showDialog } = this.state;\r\n\r\n return (\r\n \r\n \r\n \r\n Are you sure?\r\n Changing this setting will update the device.\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst dialogStyles = makeStyles({\r\n dialogBody: {\r\n width: '328px',\r\n height: '464px'\r\n },\r\n\r\n dialogHeader: {\r\n 'font-family': 'Roboto',\r\n 'font-size': '20px',\r\n 'font-weight': '900',\r\n 'font-stretch': 'normal',\r\n 'font-style': 'normal',\r\n 'line-height': '1.2',\r\n 'letter-spacing': '-0.2px'\r\n },\r\n\r\n dialogContent: {\r\n width: '244px',\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n textAlign: 'center'\r\n },\r\n\r\n tempReadout: {\r\n fontSize: '64px',\r\n letterSpacing: '-0.64px',\r\n margin: 0,\r\n marginBottom: '20px'\r\n },\r\n\r\n tempUnit: {\r\n fontSize: '32px',\r\n verticalAlign: 'super'\r\n },\r\n\r\n tempControlButton: {\r\n 'background': '#00254a',\r\n 'border-radius': '100%',\r\n 'color': '#FFF',\r\n 'height': '40px',\r\n 'width': '40px',\r\n 'minHeight': '40px',\r\n 'minWidth': '40px',\r\n 'margin': '0 12px',\r\n\r\n '&:hover, &:active, &:focus': {\r\n 'background': '#005DB9'\r\n }\r\n },\r\n\r\n dialogAction: {\r\n fontSize: '14px',\r\n fontWeight: '900',\r\n textTransform: 'none',\r\n letterSpacing: '-0.14px'\r\n }\r\n});\r\n\r\nfunction TempDialog(props) {\r\n\r\n const { callback, saveCallback, startingValue, open, device, type } = props;\r\n\r\n const [value, setValue] = React.useState(startingValue);\r\n const [showError, setShowError] = React.useState(false);\r\n const [errorText, setErrorText] = React.useState(\"An Error has occured\");\r\n\r\n const handleSliderChange = (event, newValue) => {\r\n setValue(newValue);\r\n };\r\n\r\n const handleClose = () => {\r\n callback(startingValue);\r\n setValue(startingValue);\r\n };\r\n\r\n const handleSave = () => {\r\n saveCallback(value, tempErrorCallback);\r\n }\r\n\r\n const handleErrorClose = () => {\r\n setErrorText(\"An Error has occured\");\r\n setShowError(false);\r\n }\r\n\r\n const tempErrorCallback = (revertValue, callbackErrorText) => {\r\n if (callbackErrorText) {\r\n setErrorText(callbackErrorText);\r\n setShowError(true);\r\n }\r\n setValue(revertValue);\r\n }\r\n\r\n const classes = dialogStyles();\r\n\r\n const increaseTemp = () => {\r\n if (value < device.data[type].Max)\r\n setValue(value + device.data[type].Steps);\r\n }\r\n\r\n const decreaseTemp = () => {\r\n if (value > device.data[type].Min)\r\n setValue(value - device.data[type].Steps);\r\n }\r\n\r\n\r\n // TODO: Localize these titles...\r\n const GetTitle = () => {\r\n var title = \"\";\r\n if (type === \"MixedSetpoint\") {\r\n title = \"Mixed Outlet Setpoint\";\r\n }\r\n else if (type === \"HighAlertDiff\") {\r\n title = \"High Temperature Alert Differential\";\r\n }\r\n else if (type === \"LowAlertDiff\") {\r\n title = \"Low Temperature Alert Differential\";\r\n }\r\n return title;\r\n }\r\n\r\n if (device.data && device.data[type]) {\r\n const sliderMarks = [\r\n {\r\n value: device.data[type].Min,\r\n label: `${device.data[type].Min}`\r\n },\r\n {\r\n value: device.data[type].Max,\r\n label: `${device.data[type].Max}`\r\n }\r\n ];\r\n\r\n const displayValue = getUserTempScale(device);\r\n\r\n return (\r\n <>\r\n \r\n {GetTitle()}\r\n \r\n
\r\n

{value} °{displayValue}

\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 Remote Max Exceeded\r\n {errorText}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n else {\r\n return (\r\n \r\n {GetTitle()}\r\n \r\n
Unable to retrieve temperature data from the device. Please try again later.
\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default function TemperatureDialog(props) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n","import React, { Component, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n fetchEnd,\r\n fetchStart,\r\n showNotification,\r\n crudGetMatching,\r\n} from 'react-admin';\r\n\r\nimport { faPencil } from '@fortawesome/pro-solid-svg-icons';\r\n\r\nimport ContextMenuOption from '../ContextMenuOption';\r\nimport TemperatureDialog from '../TemperatureDialog';\r\n\r\nimport '../css/DeviceModal.css';\r\nimport '../css/TelemetryCard.css';\r\n\r\n\r\nclass TelemetryCardHelpModal extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n error: false,\r\n showDialog: false,\r\n testTemp: this.props.superProps.initialSetting,\r\n open : false,\r\n };\r\n }\r\n\r\n onTempDiagOpen = () => {\r\n this.setState({open: true});\r\n }\r\n\r\n onTempDiagClose = () => {\r\n this.setState({open: false});\r\n }\r\n\r\n onTempDiagSave = (newVal, tempErrorCallback) => {\r\n this.setState({open: false});\r\n this.setState({testTemp: newVal});\r\n this.props.superProps.addTodoItem(newVal, tempErrorCallback);\r\n }\r\n\r\n render() {\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\nconst mapStateToProps = state => ({\r\n \r\n});\r\n\r\nconst mapDispatchToProps = {\r\n crudGetMatching,\r\n fetchEnd,\r\n fetchStart,\r\n showNotification\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(\r\n TelemetryCardHelpModal\r\n);","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nimport TelemetryCardHelpModalButton from '../Components/Devices/TelemetryCardHelpModalButton';\r\nimport TelemetryCardEditModalButton from '../Components/Devices/TelemetryCardEditModalButton';\r\n\r\n//Styles\r\nconst Parent = {\r\n \"width\":\"280px\",\r\n \"height\":\"48px\",\r\n \"display\": \"flex\",\r\n \"alignItems\": \"center\",\r\n \"color\": \"#757575\"\r\n}\r\n\r\nconst Message = {\r\n \"width\": \"188px\",\r\n \"height\": \"20px\",\r\n \"fontSize\": \"16px\",\r\n \"fontWeight\": 900,\r\n \"fontStretch\": \"normal\",\r\n \"fontStyle\": \"normal\",\r\n \"lineHeight\": \"1.25\",\r\n \"letterSpacing\": \"-0.16px\",\r\n }\r\n\r\nconst Icon = {\r\n \"width\": \"25px\",\r\n \"height\": \"20px\",\r\n \"fontSize\": \"20px\",\r\n \"fontWeight\": \"normal\",\r\n \"fontStretch\": \"normal\",\r\n \"fontStyle\": \"normal\",\r\n \"lineHeight\": \"1\",\r\n \"letterSpacing\": \"normal\",\r\n \"textAlign\": \"center\",\r\n \"color\": \"rgba(0, 0, 0, 0.54)\",\r\n \"margin\": \"0px 15px 0px 26px\",\r\n }\r\n\r\nconst ContextMenuOption = (props) => {\r\n\r\n const TheIcon = props.icon;\r\n const optionText = props.optionText;\r\n const initialSetting = props.settingsValue;\r\n const thisDevice = props.thisDevice;\r\n const isMenu = props.isMenu;\r\n const optionType = props.optionType;\r\n\r\n // Help Modal\r\n if(optionType === `HelpModal`) {\r\n return(\r\n \r\n );\r\n }\r\n if(optionType === `EditModal`) {\r\n return(\r\n \r\n );\r\n }\r\n else {\r\n return(\r\n
\r\n {optionText}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ContextMenuOption;","import React, { Component, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n fetchEnd,\r\n fetchStart,\r\n showNotification,\r\n crudGetMatching\r\n} from 'react-admin';\r\n\r\nimport Button from '@material-ui/core/Button';\r\nimport TextField from '@material-ui/core/TextField';\r\n\r\nimport { faWifi } from '@fortawesome/pro-solid-svg-icons';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\n\r\nimport ContextMenuOption from '../ContextMenuOption';\r\n\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport '../css/DeviceModal.css';\r\n\r\nclass CreateDeviceModal extends Component {\r\n _isMounted = false;\r\n state = {\r\n error: false,\r\n showDialog: false\r\n };\r\n\r\n handleClick = () => {\r\n if (this._isMounted) {\r\n this.setState({ showDialog: true });\r\n }\r\n };\r\n\r\n handleCloseClick = () => {\r\n if (this._isMounted) {\r\n this.setState({ showDialog: false });\r\n }\r\n };\r\n\r\n handleSaveClick = () => {\r\n };\r\n\r\n setCode = () => {\r\n if (this._isMounted) {\r\n this.setState({\r\n code: document.getElementById('code').value\r\n });\r\n }\r\n };\r\n\r\n componentDidMount = () => {\r\n this._isMounted = true;\r\n }\r\n\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n\r\n render() {\r\n const { showDialog } = this.state;\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n Add a Device\r\n Enter the 8-digit registration code shown on the device.\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\nconst mapStateToProps = state => ({\r\n\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n crudGetMatching,\r\n fetchEnd,\r\n fetchStart,\r\n showNotification\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(\r\n CreateDeviceModal\r\n);","import React, { Component, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n fetchEnd,\r\n fetchStart,\r\n showNotification,\r\n crudGetMatching,\r\n SimpleForm,\r\n TextInput,\r\n SelectInput\r\n} from 'react-admin';\r\nimport axios from 'axios';\r\n\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport { faUsers } from '@fortawesome/pro-solid-svg-icons';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\n\r\nimport ContextMenuOption from '../ContextMenuOption';\r\n\r\nimport '../css/DeviceModal.css';\r\n\r\nclass CreateDeviceModal extends Component {\r\n _isMounted = false;\r\n state = {\r\n error: false,\r\n showDialog: false,\r\n roleOptions: [],\r\n };\r\n\r\n handleClick = () => {\r\n this.setState({ showDialog: true });\r\n };\r\n\r\n handleCloseClick = () => {\r\n this.setState({ showDialog: false });\r\n };\r\n\r\n handleSaveClick = () => {\r\n var postObj = {\r\n emailAddressToShareWith: document.getElementsByName(\"inviteUserEmail\")[0].value,\r\n groupRole: document.getElementsByName(\"inviteuserRole\")[0].value\r\n }\r\n\r\n var comp = this;\r\n\r\n const token = localStorage.getItem('authorizationToken');\r\n axios.post(`/api/Locations/${this.props.locationid}/share`, postObj, {\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n })\r\n .then(function (response) {\r\n comp.props.showNotification(\"elogic.toastNotifications.inviteUser\");\r\n comp.handleCloseClick();\r\n })\r\n .catch(function (error) {\r\n\r\n if (error && error.response && error.response.data && error.response.data.errorMessage) {\r\n comp.props.showNotification(error.response.data.errorMessage);\r\n }\r\n else {\r\n comp.props.showNotification(\"elogic.toastNotifications.inviteUserError\", \"error\");\r\n }\r\n });\r\n };\r\n\r\n componentDidMount = () => {\r\n this._isMounted = true;\r\n const token = localStorage.getItem('authorizationToken');\r\n var jsonHeaders = {\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n };\r\n\r\n var comp = this;\r\n\r\n axios.get(`/api/AppSettings/grantableroles/${this.props.locationid}`, jsonHeaders)\r\n .then(function (response) {\r\n var userRoles = [];\r\n \r\n response.data.groupRoles.forEach(function (group) {\r\n if (group.groupName == \"intellistationjr\") {\r\n group.roles.forEach(function (role) {\r\n userRoles.push({\r\n id: role.groupRoleId,\r\n name: role.role\r\n })\r\n });\r\n }\r\n });\r\n\r\n comp.setState({ roleOptions: userRoles });\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n\r\n render() {\r\n const { showDialog } = this.state;\r\n return (\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n Invite a User\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\nconst mapStateToProps = state => ({\r\n\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n crudGetMatching,\r\n fetchEnd,\r\n fetchStart,\r\n showNotification\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(\r\n CreateDeviceModal\r\n);","import React from 'react';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Menu from '@material-ui/core/Menu';\r\n\r\nimport { withStyles, makeStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPlus } from '@fortawesome/pro-regular-svg-icons';\r\n\r\nimport CreateDeviceModal from '../Devices/CreateDeviceModal';\r\nimport InviteUserModal from '../Locations/InviteUserModal.js';\r\nimport { ADD_BUTTON_STYLES } from '../../Helpers.js';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n width: '100%',\r\n maxWidth: 360,\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n}));\r\n\r\nconst FloatingActionButton = withStyles(ADD_BUTTON_STYLES)(Button);\r\n\r\nexport default function AddDeviceOrUserButton(props) {\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const [selectedIndex, setSelectedIndex] = React.useState(1);\r\n \r\n const options = []\r\n if (props.permissions && props.permissions.Devices && props.permissions.Devices.Create) {\r\n options.push();\r\n }\r\n\r\n if (props.permissions && props.permissions.Locations && props.permissions.Locations.Share) {\r\n options.push();\r\n\r\n }\r\n\r\n const handleClickListItem = event => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleMenuItemClick = (event, index) => {\r\n setSelectedIndex(index);\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {options.map((option, index) => (\r\n handleMenuItemClick(event, index)}\r\n locationid={props.locationId}\r\n >\r\n {option}\r\n \r\n ))}\r\n \r\n
\r\n );\r\n}","import axios from 'axios';\r\n\r\nimport { authProvider } from './AuthProvider';\r\nimport { NONE } from './Helpers';\r\n\r\nconst API_URL = '/api';\r\nconst HTTP_403 = 403;\r\n\r\nconst httpClient = (url, options = {}) => {\r\n const token = localStorage.getItem('authorizationToken');\r\n options.url = url;\r\n options.headers = { authorization: `Bearer ${token}` };\r\n\r\n return axios(options);\r\n};\r\n\r\n// Since react-admin requires a unique property specifically named 'id', we need\r\n// to make sure that we can easily map between the various resource ids and the\r\n// required id property.\r\nconst resourceIdMap = {\r\n locations: 'locationId',\r\n devices: 'deviceId',\r\n user: 'userId'\r\n}\r\n\r\nconst errorHandler = (error, id) => {\r\n if (error && error.response && error.response.status == HTTP_403) {\r\n authProvider.logout().then(function () {\r\n window.location.href = '/#/login?authentication';\r\n });\r\n }\r\n else if (error && error.response && error.response.data && error.response.data.errorCode === 1 && error.response.data.errorNumber == 403) {\r\n\r\n error.response.data.id = id;\r\n\r\n return {\r\n data: error.response.data\r\n };\r\n }\r\n}\r\n\r\nexport default {\r\n // GET_LIST\r\n getList: (resource, params) => {\r\n const url = `${API_URL}/${resource}`;\r\n\r\n return httpClient(url).then(result => {\r\n for (var i = 0; i < result.data.length; i++) {\r\n result.data[i].id = result.data[i][resourceIdMap[resource]];\r\n }\r\n return ({\r\n data: result.data,\r\n total: result.data.length,\r\n });\r\n }).catch(errorHandler);\r\n },\r\n\r\n // GET_ONE\r\n getOne: (resource, params) => {\r\n var url = `${API_URL}/${resource}/${params.id}`;\r\n\r\n if (resource === 'user' || resource === 'account') {\r\n\r\n if (resource === 'account') {\r\n resource = 'user';\r\n }\r\n\r\n // For user settings we don't have an id.\r\n url = `${API_URL}/${resource}`;\r\n }\r\n\r\n return httpClient(url).then(response => {\r\n\r\n response.data.id = response.data[resourceIdMap[resource]];\r\n\r\n return ({\r\n data: response.data,\r\n });\r\n }).catch((error) => errorHandler(error, params.id));\r\n },\r\n\r\n // UPDATE\r\n update: (resource, params) => {\r\n\r\n var url = `${API_URL}/${resource}/${params.id}`;\r\n\r\n if (resource === 'user') {\r\n\r\n localStorage.setItem('user', JSON.stringify(params.data));\r\n\r\n // For user settings we don't have an id.\r\n url = `${API_URL}/${resource}`;\r\n }\r\n\r\n const updateCallback = response => {\r\n\r\n response.data.id = response.data[resourceIdMap[resource]];\r\n\r\n // Put the device data back into the response we get.\r\n response.data.data = params.data.data;\r\n response.data.location = params.data.location\r\n\r\n return ({ data: response.data });\r\n };\r\n\r\n var deviceParams = handleDeviceParams(resource, params);\r\n\r\n if (shouldHandlePictures(resource, deviceParams.data)) {\r\n return handlePictures(resource, deviceParams.data, updateCallback, 'PATCH');\r\n }\r\n else {\r\n return httpClient(url, {\r\n method: 'PATCH',\r\n data: deviceParams.data,\r\n })\r\n .then(updateCallback)\r\n .catch(errorHandler);\r\n }\r\n\r\n },\r\n\r\n // CREATE\r\n create: (resource, params) => {\r\n const createCallback = response => {\r\n response.data.id = response.data[resourceIdMap[resource]];\r\n\r\n return ({\r\n data: response.data\r\n });\r\n };\r\n\r\n var deviceParams = handleDeviceParams(resource, params);\r\n\r\n if (shouldHandlePictures(resource, deviceParams.data)) {\r\n return handlePictures(resource, deviceParams.data, createCallback, 'POST');\r\n }\r\n else {\r\n return httpClient(`${API_URL}/${resource}`, {\r\n method: 'POST',\r\n data: deviceParams.data,\r\n })\r\n .then(createCallback)\r\n .catch(errorHandler);\r\n }\r\n },\r\n\r\n // DELETE\r\n delete: (resource, params) => {\r\n return httpClient(`${API_URL}/${resource}/${params.id}`, {\r\n method: 'DELETE',\r\n }).then(response => {\r\n return ({ data: response.data });\r\n }).catch(errorHandler);\r\n }\r\n};\r\n\r\nfunction handleDeviceParams(resource, params) {\r\n\r\n // This is necessary because for devices we only send a subset of the fields to the API.\r\n if (resource === 'devices') {\r\n var results = {\r\n data: {}\r\n };\r\n\r\n if (params.data['sublocationId'] && params.data['sublocationId'] !== NONE) {\r\n results.data['locationId'] = params.data['sublocationId'];\r\n }\r\n else {\r\n results.data['locationId'] = params.data['locationId'];\r\n }\r\n\r\n if (!params.data.deviceId) {\r\n results.data.installationDate = params.data['installationDate'];\r\n }\r\n\r\n results.data.name = params.data['name'];\r\n results.data.additionalNotes = params.data['additionalNotes'];\r\n results.data.locationDescription = params.data['locationDescription'];\r\n results.data.commissionDate = params.data['commissionDate'];\r\n results.data.code = params.data['code'];\r\n results.data.installationDate = params.data['installationDate'];\r\n\r\n if (params.data['pictures']) {\r\n results.data.pictures = params.data['pictures'];\r\n }\r\n else if (params.data['installationImageUrl'] === \"\") {\r\n // If installationImageUrl is blank, clear it in the API.\r\n results.data.installationImageUrl = params.data['installationImageUrl'];\r\n }\r\n\r\n results.data.deviceId = params.data['deviceId'];\r\n\r\n return results;\r\n }\r\n else if (resource === 'locations') {\r\n params.data['buildingTypeId'] = params.data['buildingType'].buildingTypeId;\r\n }\r\n\r\n return params;\r\n}\r\n\r\nfunction shouldHandlePictures(resource, data) {\r\n return resource == 'devices' && data && data.pictures;\r\n}\r\n\r\nfunction handlePictures(resource, data, createCallback, requestMethod) {\r\n\r\n return new Promise((resolve, reject) => {\r\n convertFileToBase64(data.pictures).then((installationImage) => {\r\n data['installationImageUrl'] = installationImage.replace(/^data:image\\/[a-z]+;base64,/, \"\");\r\n\r\n var deviceId = \"\";\r\n if (requestMethod === 'PATCH') {\r\n deviceId = `/${data.deviceId}`;\r\n }\r\n\r\n resolve(\r\n httpClient(`${API_URL}/${resource}${deviceId}`, {\r\n method: requestMethod,\r\n data: data\r\n })\r\n .then(createCallback)\r\n .catch(errorHandler)\r\n )\r\n })\r\n });\r\n}\r\n\r\n\r\nfunction convertFileToBase64(file) {\r\n return new Promise((resolve, reject) => {\r\n\r\n const fileReader = new FileReader();\r\n fileReader.readAsDataURL(file.rawFile);\r\n\r\n fileReader.onload = function () { resolve(fileReader.result) };\r\n fileReader.onerror = reject;\r\n\r\n });\r\n};","import React, { Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n fetchEnd,\r\n fetchStart,\r\n showNotification,\r\n crudGetMatching,\r\n\r\n} from 'react-admin';\r\nimport { Redirect } from \"react-router\";\r\n\r\nimport Button from '@material-ui/core/Button';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTrash } from '@fortawesome/pro-regular-svg-icons';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\n\r\nimport dataProvider from '../dataProvider';\r\n\r\nimport './css/LocationModal.css';\r\n\r\nclass DeleteModal extends React.Component {\r\n state = {\r\n error: false,\r\n showDialog: false\r\n };\r\n\r\n handleClick = () => {\r\n this.setState({ showDialog: true });\r\n };\r\n\r\n handleCloseClick = () => {\r\n this.setState({ showDialog: false });\r\n };\r\n\r\n handleRemoveClick = () => {\r\n const { submit } = this.props;\r\n\r\n\r\n if (this.props.deviceCounter && this.props.deviceCounter > 0) {\r\n this.props.showNotification(`elogic.toastNotifications.cannotDeleteLocationWithDevices`);\r\n this.handleCloseClick();\r\n }\r\n else {\r\n dataProvider.delete(this.props.type + 's', { id: this.props.thisRecord[this.props.type + 'Id'] })\r\n .then(({ data }) => {\r\n this.props.showNotification(`elogic.toastNotifications.${this.props.type}Deleted`);\r\n const url = '/#/' + this.props.type + 's'\r\n window.location.replace(window.location.origin + url)\r\n })\r\n .catch(error => {\r\n this.props.showNotification(`elogic.toastNotifications.${this.props.type}DeleteError`, 'error');\r\n const url = '/#/' + this.props.type + 's'\r\n window.location.replace(window.location.origin + url)\r\n });\r\n }\r\n };\r\n\r\n render() {\r\n const { showDialog } = this.state;\r\n\r\n const capitalType = this.props.type[0].toUpperCase() + this.props.type.slice(1);\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n Are you sure?\r\n This will permanently delete the {this.props.type} for you and all shared users. This action cannot be undone.\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n crudGetMatching,\r\n fetchEnd,\r\n fetchStart,\r\n showNotification\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(\r\n DeleteModal\r\n);","import React, { Fragment } from 'react';\r\nimport axios from 'axios';\r\nimport {\r\n showNotification,\r\n SimpleForm,\r\n TextInput\r\n} from 'react-admin';\r\nimport { connect } from 'react-redux';\r\n\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\n\r\nimport { getPermissionList } from '../../Helpers.js';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faMinusCircle } from '@fortawesome/pro-regular-svg-icons';\r\nimport { faUndo, faExchangeAlt } from '@fortawesome/pro-solid-svg-icons';\r\n\r\nclass UserCardMenu extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n // Initial state, we don't have any building types at the start.\r\n this.state = {\r\n confirmationDiagOpen: false,\r\n transferDiagOpen: false\r\n };\r\n }\r\n\r\n handleConfirmDiagClose() {\r\n this.setState({ confirmationDiagOpen: false });\r\n }\r\n\r\n rescindUserAccess() {\r\n var userId = this.props.recordId;\r\n var locationId = this.props.parentRecordId;\r\n\r\n var comp = this;\r\n\r\n const token = localStorage.getItem('authorizationToken');\r\n axios.delete(`/api/Locations/${locationId}/Rescind/${userId}`, {\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n })\r\n .then(function () {\r\n comp.handleConfirmDiagClose();\r\n comp.props.showNotification(\"elogic.toastNotifications.rescindUser\");\r\n })\r\n .catch(function () {\r\n comp.handleConfirmDiagClose();\r\n comp.props.showNotification(\"elogic.toastNotifications.rescindUserError\", \"error\");\r\n });\r\n }\r\n\r\n transferOwnership() {\r\n var locationId = this.props.parentRecordId;\r\n var comp = this;\r\n var data = {\r\n emailAddressToShareWith: document.getElementsByName(\"transferUserEmail\")[0].value,\r\n groupRole: \"1\",\r\n }\r\n\r\n const token = localStorage.getItem('authorizationToken');\r\n axios.post(`/api/Locations/${locationId}/Transfer`, data, {\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n })\r\n .then(function (response) {\r\n comp.handleTransferDiagClose();\r\n comp.props.showNotification(\"elogic.toastNotifications.transferOwnership\");\r\n })\r\n .catch(function (error) {\r\n comp.handleTransferDiagClose();\r\n comp.props.showNotification(\"elogic.toastNotifications.transferOwnershipError\", \"error\");\r\n });\r\n }\r\n\r\n openConfirmDiag() {\r\n this.setState({ confirmationDiagOpen: true });\r\n }\r\n\r\n handleTransferDiagClose() {\r\n this.setState({ transferDiagOpen: false });\r\n }\r\n\r\n openTransferDiag() {\r\n this.setState({ transferDiagOpen: true });\r\n }\r\n\r\n render() {\r\n const Icon = {\r\n \"fontWeight\": \"normal\",\r\n \"fontStretch\": \"normal\",\r\n \"fontStyle\": \"normal\",\r\n \"lineHeight\": \"1\",\r\n \"letterSpacing\": \"normal\",\r\n \"color\": \"#005DB9\"\r\n }\r\n\r\n const Menu = {\r\n position: 'relative',\r\n top: '5px',\r\n right: '-7px'\r\n }\r\n\r\n const permissions = getPermissionList(this.props.parentRecord.permissions);\r\n\r\n var menuOptions = [];\r\n\r\n var currentUserId = localStorage.getItem(\"userId\");\r\n\r\n if (permissions.Locations.Share && currentUserId != this.props.recordId && !this.props.isOwner)\r\n menuOptions.push(\r\n \r\n );\r\n\r\n if (permissions.Locations.Transfer && this.props.isOwner)\r\n menuOptions.push(\r\n \r\n );\r\n\r\n return (\r\n \r\n {menuOptions.length > 0 &&\r\n
\r\n {menuOptions}\r\n
\r\n }\r\n \r\n Are you sure?\r\n \r\n \r\n Rescinding access will remove selected user's access to the location and all associated devices. They may only regain access by being re-invited.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Transfer Ownership\r\n Enter the email address of the user that you would like to transfer ownership to:\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\nconst mapStateToProps = state => ({\r\n\r\n});\r\nconst mapDispatchToProps = {\r\n showNotification\r\n};\r\n//export default DeviceDashboardTab;\r\nexport default connect(mapStateToProps, mapDispatchToProps)(\r\n UserCardMenu\r\n);\r\n","import React from 'react';\r\n\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport UserCardMenu from './UserCardMenu'\r\n\r\nconst styles = {\r\n card: {\r\n border: '1px solid #E0E0E0',\r\n boxShadow: 'none',\r\n display: 'inline-block',\r\n margin: '12px',\r\n verticalAlign: 'top',\r\n width: 328\r\n },\r\n\r\n content: {\r\n paddingTop: '8px',\r\n position: 'relative'\r\n },\r\n\r\n userType: {\r\n display: 'inline-block',\r\n fontSize: '10px',\r\n fontWeight: 'bold',\r\n height: '24px',\r\n clipPath: 'polygon(85% 0, 100% 100%, 100% 100%, 0 100%, 0 0)',\r\n position: 'relative',\r\n left: '-16px',\r\n width: '72px'\r\n },\r\n\r\n locationOwner: {\r\n backgroundColor: '#00254A',\r\n color: 'white',\r\n },\r\n\r\n locationAdmin: {\r\n backgroundColor: '#F2F2F2',\r\n color: '#606060',\r\n },\r\n\r\n typeText: {\r\n margin: 0,\r\n marginLeft: '16px',\r\n lineHeight: '24px',\r\n verticalAlign: 'middle'\r\n },\r\n\r\n userName: {\r\n fontSize: '16px',\r\n fontWeight: 'bold',\r\n marginTop: '24px',\r\n marginBottom: '7px'\r\n },\r\n\r\n optionButton: {\r\n cursor: 'pointer',\r\n position: 'absolute',\r\n right: '8px',\r\n top: '8px',\r\n height: '24px',\r\n width: '24px',\r\n color: '#005DB9'\r\n }\r\n};\r\n\r\nconst UserTypeRibbon = withStyles(styles)(({ classes, record = {} }) => {\r\n\r\n var userTypeText = \"\";\r\n var colorStyle = \"\";\r\n\r\n if (record.permissions.length) {\r\n switch (record.permissions[0].roles[0]) {\r\n case \"Owner\":\r\n userTypeText = \"Owner\";\r\n colorStyle = classes.locationOwner;\r\n break;\r\n case \"Admin\":\r\n userTypeText = \"Admin\";\r\n colorStyle = classes.locationAdmin;\r\n break;\r\n default:\r\n return
;\r\n }\r\n }\r\n else {\r\n return
;\r\n }\r\n\r\n return (\r\n
\r\n

{userTypeText}

\r\n
\r\n );\r\n});\r\n\r\nexport const UserCard = withStyles(styles)(({ classes, dataRecord = {}, callbacks = {}, parentRecordId = \"\", ...props }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n

{dataRecord.firstName} {dataRecord.lastName}

\r\n
\r\n
\r\n
\r\n )\r\n});","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport WattsLoading from './WattsLoading';\r\n\r\nconst Cards = (props) => {\r\n if (props && props.data && (props.data.fetchedAt || (props.data.fetchedAt && Object.keys(props.data.fetchedAt).length) || props.loaded)) {\r\n var noEntryMessage = undefined;\r\n if (props.noResultsMessage != undefined) {\r\n noEntryMessage = props.noResultsMessage();\r\n }\r\n\r\n if (noEntryMessage == undefined) {\r\n noEntryMessage = (\r\n
\r\n );\r\n }\r\n\r\n if (props.ids.length == 0) {\r\n return noEntryMessage;\r\n }\r\n else {\r\n return (\r\n
\r\n {props.ids.sort((first, second) => {\r\n\r\n return props.sortFunction(props.data[first], props.data[second]);\r\n }).map(id =>\r\n \r\n )}\r\n
\r\n );\r\n }\r\n }\r\n else {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nCards.defaultProps = {\r\n data: {},\r\n ids: [],\r\n};\r\n\r\nexport const CardGrid = (props) => {\r\n\r\n return (\r\n \r\n );\r\n};","import React, { Fragment } from 'react';\nimport { connect } from 'react-redux';\n\nimport axios from 'axios';\n\nimport {\n fetchEnd,\n fetchStart,\n showNotification,\n crudGetMatching,\n\n} from 'react-admin';\n\nimport Button from '@material-ui/core/Button';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSignOut } from '@fortawesome/pro-regular-svg-icons';\n\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogActions from '@material-ui/core/DialogActions';\n\nimport dataProvider from '../../dataProvider';\n\nimport '../css/LocationModal.css';\n\nclass LeaveLocationDialog extends React.Component {\n state = {\n error: false,\n showDialog: false\n };\n\n handleClick = () => {\n this.setState({ showDialog: true });\n };\n\n handleCloseClick = () => {\n this.setState({ showDialog: false });\n };\n\n handleRemoveClick = () => {\n\n const token = localStorage.getItem('authorizationToken');\n axios.delete(`/api/locations/${this.props.thisRecord.locationId}/share/remove`, {\r\n headers: {\n \"Cache-control\": \"no-cache, no-store\",\n \"Pragma\": \"no-cache\",\n \"Expires\": 0,\n \"Authorization\": `Bearer ${token}`\n }\r\n})\n .then(({ data }) => {\n this.props.showNotification(`elogic.toastNotifications.leaveMessage`);\n const url = '/#/locations'\n window.location.replace(window.location.origin + url)\n })\n .catch(error => {\n this.props.showNotification(`elogic.toastNotifications.leaveMessageError`, 'error');\n const url = '/#/locations'\n window.location.replace(window.location.origin + url)\n });\n };\n\n render() {\n const { showDialog } = this.state;\n\n return (\n \n \n\n \n Are you sure?\n Leaving this location will cause you to lose access to all of its devices. You may only regain access by being invited back by an owner or admin.\n\n \n \n \n \n \n \n );\n }\n}\n\nconst mapStateToProps = state => ({\n\n});\n\nconst mapDispatchToProps = {\n crudGetMatching,\n fetchEnd,\n fetchStart,\n showNotification\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(\n LeaveLocationDialog\n);","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nconst DeviceInfoBanner = (props) => {\n\n const ribbonStyles = makeStyles({\n ribbonBase: {\n backgroundColor: props.color,\n color: \"#211102\",\n cursor: \"pointer\",\n left: '0',\n minHeight: \"20px\",\n padding: '14px 15.3%',\n position: 'sticky',\n top: '0',\n zIndex: '1200'\n },\n\n userMessage: {\n display: \"inline\",\n marginLeft: \"14px\",\n fontSize: \"14px\",\n lineHeight: \"1.43\",\n letterSpacing: \"-0.14px\",\n verticalAlign: \"bottom\"\n },\n\n actionText: {\n display: \"inline\",\n margin: \"0\",\n fontWeight: \"900\",\n fontSize: \"14px\",\n lineHeight: \"1.44\",\n letterSpacing: \"-0.14px\",\n float: \"right\"\n }\n });\n\n const useStyles = ribbonStyles();\n\n return (\n
\n \n

{props.userMessage}

\n

{props.actionText}

\n
\n );\n};\n\nexport default DeviceInfoBanner;","import React, { useState, useEffect } from 'react';\n\nimport axios from 'axios';\n\nimport { faSyncAlt} from '@fortawesome/pro-regular-svg-icons';\n\nimport DeviceInfoBanner from '../Devices/DeviceInfoBanner';\n\nconst LocationBanner = (props) => {\n const [banners, setBanners] = useState([]);\n const [checkHash, setCheckHash] = useState(\"\");\n const [refreshTimer, setRefreshTimer] = useState();\n\n useEffect(() => {\n return () => {\n if (refreshTimer) {\n clearInterval(refreshTimer);\n }\n };\n }, [refreshTimer]);\n\n const checkForUpdatedData = function (refreshCallback, refreshTimer) {\n\n var recordId = 'CheckHash';\n\n if (props.record.id) {\n recordId = props.record.id;\n }\n\n const token = localStorage.getItem('authorizationToken');\n axios.get(`/api/Locations/${recordId}`, {\r\n headers: {\n \"Cache-control\": \"no-cache, no-store\",\n \"Pragma\": \"no-cache\",\n \"Expires\": 0,\n \"Authorization\": `Bearer ${token}`\n }\r\n })\n .then(function (results) {\n\n if (props.record.CheckHash) {\n if (results.data.CheckHash != props.record.CheckHash) {\n clearInterval(refreshTimer);\n\n setBanners([\n \n ]);\n }\n }\n else if (props.setData) {\n props.setData({\n CheckHash: results.data.CheckHash\n });\n }\n });\n }\n\n if (props.record.CheckHash && checkHash != props.record.CheckHash) {\n setCheckHash(props.record.CheckHash);\n\n var refreshPage = () => { window.location.reload(); };\n\n clearInterval(refreshTimer);\n var timer = window.setInterval(() => {\n checkForUpdatedData(refreshPage, timer);\n }, 30000);\n\n setRefreshTimer(timer);\n }\n else if (!props.record.CheckHash && props.setData && !props.record.pending) {\n props.setData({\n pending: true\n });\n checkForUpdatedData();\n }\n\n return (\n <>\n {banners}\n \n );\n}\n\nexport default LocationBanner;","import React from 'react';\nimport { useHistory } from \"react-router-dom\";\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faBan } from '@fortawesome/pro-solid-svg-icons';\n\n\nconst noAccessStyles = makeStyles({\n container: {\n left: '50vw',\n marginTop: '64px',\n position: 'absolute',\n textAlign: 'center',\n top: '40vh',\n transform: 'translate(-50%, -50%)',\n width: '300px'\n },\n banIcon: {\n color: 'rgba(0, 0, 0, 0.12)',\n fontWeight: 'normal',\n fontSize: '80px',\n fontStretch: 'normal',\n fontStyle: 'normal',\n lineHeight: '1',\n letterSpacing: 'normal',\n textAlign: 'center'\n },\n message: {\n color: 'rgba(0, 0, 0, 0.6)',\n fontSize: '16px',\n fontStretch: 'normal',\n fontStyle: 'normal',\n fontWeight: 'normal',\n letterSpacing: '-0.16px',\n lineHeight: 'normal',\n margin: '30px 0',\n textAlign: 'center'\n }\n});\n\nconst NoAccessPage = (props) => {\n let history = useHistory();\n\n const useStyles = noAccessStyles();\n\n return (\n
\n \n \n {props.children}\n \n \n
\n );\n};\n\nexport default NoAccessPage;","import React, { useState} from 'react';\n\nimport { TabbedShowLayout, Tab } from 'react-admin';\nimport { Link } from 'react-router-dom';\n\nimport ScrollToTopOnMount from '../ScrollToTop'\nimport { DeviceCard } from '../Devices/DeviceCard';\n\nimport AddDeviceOrUserButton from '../Buttons/AddDeviceOrUserButton';\nimport DeleteModal from \"../DeleteModal\";\nimport { UserCard } from './UserCard';\nimport { CardGrid } from '../CardGrid';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faBuilding, faWifi, faUsers } from '@fortawesome/pro-solid-svg-icons';\nimport { faPencil, faPlusCircle } from '@fortawesome/pro-regular-svg-icons';\n\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\n\nimport WattsLoading from '../WattsLoading';\nimport LeaveLocationDialog from './LeaveLocationDialog';\nimport LocationBanner from './LocationBanner';\nimport NoAccessPage from '../NoAccessPage';\nimport { getPermissionList, getHelperStyles, getLocationAddress, prioritySort} from '../../Helpers.js';\n\nimport '../css/Breadcrumbs.css';\n\nconst headerStyles = makeStyles({\n header: {\n padding: '30px 15.3%',\n background: '#fff'\n },\n\n mainTitle: {\n fontWeight: 'bold',\n fontSize: '44px',\n margin: '25px 0px'\n },\n\n subTitle: {\n color: '#666666'\n },\n\n topLeftInfo: {\n color: '#999',\n fontSize: '12px'\n },\n\n counterContainer: {\n display: 'inline-block',\n color: '#838489',\n marginTop: '10px'\n },\n\n counter: {\n display: 'inline-block',\n height: '30px',\n minWidth: '50px',\n marginRight: '10px'\n },\n\n counterIcon: {\n display: 'inline-block',\n height: '100%',\n fontSize: '20px'\n },\n\n counterNumber: {\n float: 'right',\n margin: '0 10px 0 5px',\n lineHeight: '30px',\n verticalAlign: 'middle'\n },\n\n headerActionItem: {\n float: 'right',\n color: '#005DB9',\n cursor: 'pointer',\n marginLeft: '20px',\n fontSize: '20px'\n }\n});\n\n\nconst LocationHeader = (props) => {\n\n var state = props.state;\n\n var permissions = getPermissionList(props.record.permissions);\n\n // TODO: Localize this\n var buildingType = {\n 'name': 'Unknown'\n };\n\n if (props.record.buildingType && props.record.buildingType.name) {\n buildingType = props.record.buildingType;\n }\n\n // set location and device counters here - setCounterValues function\n var deviceCounter = 0;\n var sublocationsCounter = 0;\n\n // Get Parent Devices\n if (props.record.devices && props.record.devices.length > 0) {\n props.record.devices.forEach(function (device) {\n deviceCounter++;\n });\n }\n\n // Get Sublocation names and devices\n if (props.record.sublocations && props.record.sublocations.length > 0) {\n props.record.sublocations.forEach(function (sublocation) {\n sublocationsCounter++;\n if (sublocation.devices && sublocation.devices.length > 0) {\n sublocation.devices.forEach(function (subDevice) {\n deviceCounter++;\n });\n }\n });\n }\n\n // set device and location counter numbers\n props.setCounterValues(sublocationsCounter, deviceCounter);\n const classes = headerStyles();\n const classTemplate = getHelperStyles()();\n\n const userId = localStorage.getItem('userId');\n const mainTitleClass = classes.mainTitle + ' ' + classTemplate.heading3;\n\n return (\n
\n \n \n \n Locations\n \n

\n {props.record.name}\n

\n
\n {buildingType.name}\n {permissions && permissions.Locations && permissions.Locations.Delete && }\n {props.userData.ownerId && props.userData.ownerId != userId && }\n {permissions && permissions.Locations && permissions.Locations.Update && }\n

{props.record.name}

\n

{getLocationAddress(props.record.address)}

\n
\n
\n \n

{state.numberSubLocations}

\n
\n
\n \n

{state.numberDevices}

\n
\n
\n \n

{props.userData.users.length}

\n
\n
\n
\n );\n}\n\nconst noLocationStyles = makeStyles({\n container: {\n textAlign: 'center',\n paddingTop: '180px'\n },\n\n largeIcon: {\n fontSize: '100px',\n color: '#D7D7D7'\n },\n\n message: {\n color: '#626262',\n fontSize: '16px',\n margin: '30px 0',\n },\n\n addIcon: {\n fontSize: '16px',\n verticalAlign: 'middle'\n }\n});\nconst NoLocationMessage = () => {\n const classes = noLocationStyles();\n return (\n
\n \n

Tap to add your first device.

\n
\n );\n}\n\nconst sublocationMenuStyles = makeStyles({\n sublocationFilter: {\n 'width': '330px',\n 'marginLeft': '12px'\n }\n});\n\nconst Devices = (props) => {\n const [locationFilter, setLocation] = useState(\"All\")\n const handleChange = (event) => {\n setLocation(event.target.value);\n };\n\n var idArray = [];\n var data = {};\n\n var returnContent = ;\n\n var devices = [];\n var sublocations = [];\n\n var deviceCounter = 0;\n\n const sublocationMenuUseStyles = sublocationMenuStyles();\n\n var menuItems = [];\n menuItems.push(All Sublocations);\n\n // default status (used if device status is missing (NULL))\n const missingStatus = {\n \"id\": 0,\n \"name\": \"No Status\",\n \"priority\": 14\n };\n\n // Get Parent Devices\n if (props.location.devices && props.location.devices.length > 0) {\n props.location.devices.forEach(function (device) {\n deviceCounter++;\n if (!device.status) {\n device.status = missingStatus;\n }\n // check filter - show if all or parent location is set\n if (locationFilter === \"All\" || locationFilter === `${props.location.name}`) {\n devices.push(device);\n }\n });\n }\n\n // Get Sublocation names and devices\n if (props.location.sublocations && props.location.sublocations.length > 0) {\n props.location.sublocations.forEach(function (sublocation, i) {\n // get sublocation name\n sublocations.push(sublocation.name);\n menuItems.push({sublocation.name});\n\n // get sublocation devices\n if (sublocation.devices && sublocation.devices.length > 0) {\n sublocation.devices.forEach(function (subDevice) {\n deviceCounter++;\n if (!subDevice.status) {\n subDevice.status = missingStatus;\n }\n // check filter - show if all or sublocation location is set\n if (locationFilter === \"All\" || locationFilter === `${sublocation.name}`) {\n devices.push(subDevice);\n }\n });\n }\n });\n }\n\n // default card grid = no location message\n var cards = ;\n\n // if devices are found after filter - set device card grid\n if (devices.length > 0) {\n // sort by priority\n devices.sort(function (a, b) {\n return a.status.priority - b.status.priority;\n });\n\n // map device data for device cards\n devices.forEach(function (device) {\n idArray.push(device.deviceId);\n data[device.deviceId] = device;\n });\n\n cards = (\n \n );\n }\n\n // show form as long as this location has at least one device total (including sublocations - regardless of filter)\n // AND if this location has at least one sublocation\n if (deviceCounter > 0 && sublocations.length > 0) {\n // set menu items\n var dropdown = (\n \n Select Sublocation\n \n {menuItems}\n \n \n );\n returnContent = (\n
\n {dropdown}\n {cards}\n
\n );\n }\n // else just show cards if there are no sublocations for this location\n else if (deviceCounter > 0) {\n returnContent = (\n
\n {cards}\n
\n );\n }\n else if (props.location && props.location.devices == undefined) {\n returnContent = ();\n }\n\n return returnContent;\n}\n\nconst bodyStyles = {\n locationBody: {\n padding: '0 13%',\n \"&:first-child\": {\n paddingTop: 0\n },\n \"&:last-child\": {\n paddingBottom: 0\n }\n },\n\n tabContainer: {\n \"& .MuiTabs-root\": {\n background: 'white',\n padding: '0 13%'\n }\n },\n\n tabContent: {\n padding: '0 13px'\n }\n};\n\nclass LocationViewLayout extends React.Component {\n\n constructor(props) {\n super(props);\n this.setCounterValues = this.setCounterValues.bind(this);\n this.getUserData = this.getUserData.bind(this);\n this.state = {\n userCardList: [],\n numberSubLocations: \"0\",\n numberDevices: \"0\",\n ownerId: null\n };\n }\n\n getRole = (obj) => {\n var role = \"\";\n\n if (obj.permissions.length) {\n role = obj.permissions[0].roles[0];\n }\n\n return role;\n }\n\n\n getUserData() {\n var idArray = [];\n var data = {};\n var ownerId = null;\n\n // Process the user records from the API.\n this.props.record.users.forEach(function (user) {\n\n // Create a list of user ids.\n idArray.push(user.userId);\n\n // And a mapping of user ids to users for lookup purposes.\n data[user.userId] = user;\n\n // Determine the owner of the location.\n user.permissions.forEach((value) => {\n if (value.roles.indexOf(\"Owner\") > -1) {\n ownerId = user.userId;\n }\n });\n });\n\n return {\n users: idArray,\n data: data,\n ownerId: ownerId\n };\n }\n\n setCounterValues(locCounter, deviceCounter) {\n this.state.numberSubLocations = locCounter;\n this.state.numberDevices = deviceCounter;\n }\n shouldComponentUpdate(nextProps, nextState) {\n return JSON.stringify(this.props.record) !== JSON.stringify(nextProps.record);\n }\n\n\n render() {\n\n const tabbedShowLayoutStyles = {\n 'content': {\n 'padding': '0 13%',\n 'marginTop': '12px'\n }\n };\n\n const StyledTabbedShowLayout = withStyles(tabbedShowLayoutStyles)(TabbedShowLayout);\n const { classes, ...other } = this.props;\n const comp = this;\n\n if (this.props.record && this.props.record.errorNumber) {\n return {this.props.record.errorMessage}\n }\n else if (!this.props.record || (!this.props.record.users)) {\n // Don't render the page until the record contains the \"users\" property. When clicking a location card,\n // react-admin attempts to render the location page with the information it has, then lazy load the rest\n // of the data. Since this will cause stuttering in the UI, render a loading spinner until the UI has all of\n // the information it needs.\n return ;\n }\n else {\n const userData = this.getUserData();\n\n const permissions = getPermissionList(this.props.record.permissions);\n\n return (\n
\n \n \n {(permissions && permissions.Devices && permissions.Devices.Create || permissions && permissions.Locations && permissions.Locations.Share) &&\n \n }\n \n \n \n \n \n {\n\n const sortOrder = [\"Admin\", \"Owner\"];\n\n const firstRole = comp.getRole(firstObj);\n const secondRole = comp.getRole(secondObj)\n\n return sortOrder.indexOf(secondRole) - sortOrder.indexOf(firstRole);\n }}\n />\n \n \n
\n );\n }\n }\n}\n\nexport default withStyles(bodyStyles)(LocationViewLayout);\n","import React from 'react';\r\nimport { Show, SimpleShowLayout, useAuthState } from 'react-admin';\r\n\r\nimport WattsLoading from '../WattsLoading';\r\nimport LocationViewLayout from './LocationViewLayout';\r\n\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\n\r\nclass ViewLocationComponent extends React.Component {\r\n\r\n componentDidMount() {\r\n }\r\n\r\n render() {\r\n\r\n const layoutStyles = {\r\n 'root': {\r\n 'padding': 0,\r\n '&:first-child, &last-child': {\r\n 'padding': 0\r\n }\r\n }\r\n };\r\n\r\n const showStyles = {\r\n 'main': {\r\n 'margin': 0\r\n },\r\n 'card': {\r\n 'background': 'inherit',\r\n 'border-radius': '0px',\r\n 'boxShadow': 'none',\r\n 'overflow': 'visible'\r\n }\r\n };\r\n\r\n const StyledShow = withStyles(showStyles)(Show);\r\n const StyledLayout = withStyles(layoutStyles)(SimpleShowLayout);\r\n\r\n const { classes, ...other } = this.props;\r\n\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\nconst ViewLocation = (props) => {\r\n\r\n const { loading, authenticated } = useAuthState();\r\n\r\n if (loading) {\r\n return ;\r\n }\r\n\r\n if (!authenticated) {\r\n return
;\r\n }\r\n\r\n return ;\r\n};\r\n\r\nconst bodyStyles = {\r\n locationBody: {\r\n padding: '0 13%',\r\n \"&:first-child\": {\r\n paddingTop: 0\r\n },\r\n \"&:last-child\": {\r\n paddingBottom: 0\r\n }\r\n },\r\n\r\n tabContainer: {\r\n \"& .MuiTabs-root\": {\r\n background: 'white',\r\n padding: '0 13%'\r\n }\r\n },\r\n\r\n tabContent: {\r\n padding: '0 13px'\r\n }\r\n};\r\n\r\nexport default withStyles(bodyStyles)(ViewLocation);","import { makeStyles } from \"@material-ui/core\";\nimport { downXl, downLg, downMd, primary, downXs } from '../../styles.valiable'\n\nexport const useStyles = makeStyles({\n paper: {\n padding: 16,\n display: 'flex',\n position: \"relative\",\n },\n logo: {\n height:40,\n position: \"absolute\",\n bottom: 16,\n right: 16,\n [downXl]: {\n height: 20\n },\n },\n logoFirstTile: {\n [downXl]: {\n height: 18,\n },\n },\n arrowIcon: {\n position: 'absolute',\n right: 10,\n top: '38%',\n [downXl]: {\n height: 30\n },\n [downMd]: {\n height: 20\n },\n },\n subtitle : {\n fontSize: 22,\n marginBottom: 0,\n color: primary,\n [downXl]: {\n fontSize: 15,\n },\n [downLg]: {\n fontSize: 22,\n },\n [downMd]: {\n fontSize: 16,\n },\n },\n titleSection: {\n marginTop: 7,\n [downMd]: {\n marginTop: 10,\n marginBottom: 10\n },\n },\n title: {\n fontSize: 20,\n marginTop: 5,\n marginBottom: 12,\n fontWeight: \"bold\",\n color: primary,\n [downXl]: {\n fontSize: 17,\n },\n [downXs]: {\n fontSize: 15,\n },\n }\n});","import React from \"react\";\nimport Paper from \"@material-ui/core/Paper\";\n\nimport { useStyles } from './style'\n\n\nexport const ApplicationTitle = ({ logo, applicationImage, devices, classImage, isFirstTile }) => {\n const classes = useStyles();\n const additionalClass = isFirstTile ? classes.logoFirstTile : \"\";\n\n return (\n \n \n
\n {devices && devices.map(device =>

{device}

)}\n
\n \n
\n );\n};\n","import { makeStyles } from \"@material-ui/core/styles\";\nimport { downXl, downLg, downMd, downXs } from \"../styles.valiable\";\n\nexport const useStyles = makeStyles({\n root: {\n justifyContent: \"center\",\n \"& .MuiAppBar-root\": {\n display: \"none\",\n },\n },\n link: {\n textDecoration: \"none\",\n },\n body: {\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n backgroundPosition:'center',\n height: '100vh',\n minHeight: 580,\n minWidth: 320\n },\n container: {\n display: 'flex',\n height: '100%',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n },\n logoContainer: {\n [downMd]: {\n display: 'flex',\n justifyContent: 'center'\n },\n },\n logo: {\n height: 94,\n textAlign: \"center\",\n [downXl]: {\n height: 65,\n },\n [downMd]: {\n width: '80%',\n },\n },\n title: {\n color: '#fff',\n fontSize: 30,\n fontFamily: \"Helvetica Neue\",\n textAlign: \"center\",\n [downXl]: {\n fontSize: 21,\n },\n [downMd]: {\n fontSize: 16,\n },\n },\n tiles: {\n marginTop: 60,\n display: \"flex\",\n [downXl]: {\n marginTop: 0,\n },\n [downLg]: {\n flexDirection: 'column'\n },\n [downMd]: {\n width: '92%'\n },\n },\n tile: {\n margin: \"40px 24px\",\n width: 580,\n [downXl] : {\n width: 382,\n },\n [downLg]: {\n margin: '12px 0',\n width: 580,\n },\n [downMd]: {\n width: '100%',\n },\n '& > a' : {\n textDecoration: 'none'\n }\n },\n image: {\n height: 160,\n paddingRight: 12,\n [downMd]: {\n height: 125\n },\n [downXs]: {\n height: 102\n },\n }}\n);\n","import React from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport {\n SHOW_BOX_INSTALLISTATION,\n} from \"../../Helpers\";\nimport { ApplicationTitle } from \"./ApplicationTitle\";\nimport { routes } from './routes'\nimport { intelliStationJsImageDevice, intelliStationJsImageLogo } from \"./constants\";\n\nexport const BoxIntelliStation = ({ classImage }) => {\n\n return SHOW_BOX_INSTALLISTATION == 'true'? (\n \n \n \n ) : (\n \n );\n};\n","export const backgroundPlaceholder = '/img/app-logo-landing-placeholder.png';\nexport const backgroundFullImage = '/img/app-logo-landing-compressed.jpg';\nexport const intelliStationJsImageLogo = '/img/group-2.png';\nexport const intelliStationJsImageDevice = '/img/intellistation_device_bg_3x.png';\nexport const tekmarImageLogo = '/img/tekmar-logo-4-c.png';\nexport const tekmarDevice = '/img/tekmar_device_bg_3x.png';\nexport const logoWatts = '/img/app-logo.svg';","import React, { useState, useEffect } from \"react\";\nimport { useAuthState } from \"react-admin\";\nimport { Link } from \"react-router-dom\";\nimport { Redirect } from \"react-router\";\n\nimport WattsLoading from \"../WattsLoading\";\nimport { ApplicationTitle } from \"./ApplicationTitle\";\nimport {\n SBS_URL,\n} from \"../../Helpers\";\nimport { useStyles } from \"./style\";\nimport { BoxIntelliStation } from './IntellistationJuniorTile'\nimport { backgroundPlaceholder, backgroundFullImage, logoWatts, tekmarImageLogo, tekmarDevice } from './constants'\nimport { routes } from './routes'\n\nexport const Dashboard = () => {\n const [backgroundImage, setBackgroundImage] = useState(backgroundPlaceholder);\n const classes = useStyles()\n const { loading, authenticated } = useAuthState();\n\n useEffect(() => {\n const img = new Image()\n img.src = backgroundFullImage;\n img.onload = () => setBackgroundImage(backgroundFullImage);\n }, []);\n\n if (loading) {\n return ;\n }\n\n if (!authenticated) {\n return ;\n }\n\n return (\n
\n
\n
\n \n
\n
\n

Please select your product

\n
\n
\n
\n \n
\n
\n {\n event.preventDefault();\n window.location.replace(SBS_URL);\n }}\n to=\"/\"\n >\n \n \n
\n
\n
\n
)\n};\n\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { addField, FieldTitle } from 'ra-core';\nimport { DatePicker } from '@material-ui/pickers'\nimport TextField from '@material-ui/core/TextField';\nimport {\n MuiPickersUtilsProvider,\n KeyboardDatePicker\n} from '@material-ui/pickers';\nimport DateFnsUtils from '@date-io/date-fns';\n\n// This is based on:\n// https://github.com/vascofg/react-admin-date-inputs\n// But modified to fix issues with the latest version, specifically this bug report:\n// https://github.com/vascofg/react-admin-date-inputs/issues/37\n// The GitHub project above might not be compatible with react-admin 3.0.0 and / or the latest version of Material UI?\nconst makePicker = (PickerComponent) => {\n class _makePicker extends Component {\n onChange(date) {\n this.props.input.onChange(date.toISOString());\n this.props.input.onBlur();\n }\n\n render() {\n const {\n input,\n options,\n label,\n source,\n resource,\n isRequired,\n className,\n meta,\n providerOptions,\n } = this.props;\n\n const { touched, error } = meta;\n\n return (\n
\n \n }\n format=\"M/dd/yyyy\"\n margin=\"dense\"\n error={!!(touched && error)}\n helperText={touched && error}\n className={className}\n value={input.value ? input.value : null}\n onChange={date => this.onChange(date)}\n inputVariant=\"filled\"\n allowKeyboardControl={false}\n inputProps={{\n disabled: \"disabled\"\n }}\n />\n \n
\n );\n }\n }\n\n _makePicker.propTypes = {\n input: PropTypes.object,\n isRequired: PropTypes.bool,\n label: PropTypes.string,\n meta: PropTypes.object,\n options: PropTypes.object,\n resource: PropTypes.string,\n source: PropTypes.string,\n labelTime: PropTypes.string,\n className: PropTypes.string,\n providerOptions: PropTypes.shape({\n utils: PropTypes.func,\n locale: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n }),\n };\n\n _makePicker.defaultProps = {\n input: {},\n isRequired: 'false',\n meta: { touched: false, error: false },\n options: {},\n resource: '',\n source: '',\n labelTime: '',\n className: '',\n providerOptions: {\n utils: DateFnsUtils,\n locale: undefined,\n },\n };\n return _makePicker;\n};\n\nexport const DatePickerInput = addField(makePicker(DatePicker));","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faTrash } from '@fortawesome/pro-solid-svg-icons';\n\nconst useStyles = makeStyles({\n list: {\n display: 'flex',\n listStyleType: 'none',\n },\n image: {\n maxHeight: '300px'\n },\n tagLine: {\n background: 'rgba(0, 0, 0, 0.38)',\n color: '#FFF',\n marginTop: '-4px',\n padding: '8px',\n transform: 'translateY(-100%)'\n },\n removeButton: {\n color: '#A2A3A5',\n cursor: 'pointer',\n float: 'right'\n }\n});\n\nconst sanitizeRestProps =\n ({\n addLabel, allowEmpty, basePath, cellClassName, className, formClassName, headerClassName, label, linkType, link,\n locale, record, resource, sortable, sortBy, source, textAlign, translateChoice, ...props\n }) => props;\n\nexport const WattsImageField = ({\n className,\n classes: classesOverride,\n record,\n source,\n src,\n title,\n removeCallback,\n ...rest\n}) => {\n const sourceValue = record[source];\n const classes = useStyles({ classes: classesOverride });\n if (!sourceValue) {\n return
;\n }\n\n const titleValue = record[title];\n return (\n
\n \n
Installation Image\n\n \n
\n
\n );\n};\n\nexport default WattsImageField;","import React, {\n Children,\n cloneElement,\n isValidElement\n} from 'react';\nimport PropTypes from 'prop-types';\nimport { shallowEqual } from 'recompose';\nimport { useDropzone } from 'react-dropzone';\nimport { makeStyles } from '@material-ui/core/styles';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport classnames from 'classnames';\nimport { useInput, useTranslate } from 'ra-core';\n\nimport { Labeled, InputHelperText } from 'react-admin';\n\nconst useStyles = makeStyles(theme => ({\n dropZone: {\n background: theme.palette.background.default,\n cursor: 'pointer',\n padding: theme.spacing(1),\n textAlign: 'center',\n color: theme.palette.getContrastText(theme.palette.background.default),\n },\n preview: {},\n removeButton: {},\n root: { width: '100%' },\n}));\n\nconst sanitizeRestProps =\n ({\n addLabel, allowEmpty, basePath, cellClassName, className, formClassName, headerClassName, label, linkType, link,\n locale, record, resource, sortable, sortBy, source, textAlign, translateChoice, ...props\n }) => props;\n\nexport const WattsImageInput = ({\n accept,\n children,\n className,\n classes: classesOverride,\n format,\n helperText,\n label,\n labelMultiple = 'ra.input.file.upload_several',\n labelSingle = 'ra.input.file.upload_single',\n maxSize,\n minSize,\n multiple = false,\n options: { inputProps: inputPropsOptions, ...options } = {},\n parse,\n placeholder,\n resource,\n source,\n validate,\n ...rest\n}) => {\n const translate = useTranslate();\n const classes = useStyles({ classes: classesOverride });\n\n // turn a browser dropped file structure into expected structure\n const transformFile = file => {\n if (!(file instanceof File)) {\n return file;\n }\n\n const { source, title } = (Children.only(children)).props;\n\n const preview = URL.createObjectURL(file);\n const transformedFile = {\n rawFile: file,\n [source]: preview,\n };\n\n if (title) {\n transformedFile[title] = file.name;\n }\n\n return transformedFile;\n };\n\n const transformFiles = (files) => {\n if (!files) {\n return multiple ? [] : null;\n }\n\n if (Array.isArray(files)) {\n return files.map(transformFile);\n }\n\n return transformFile(files);\n };\n\n const {\n id,\n input: { onChange, value, ...inputProps },\n meta,\n isRequired,\n } = useInput({\n format: format || transformFiles,\n parse: parse || transformFiles,\n source,\n type: 'file',\n validate,\n ...rest,\n });\n const { touched, error } = meta;\n const files = value ? (Array.isArray(value) ? value : [value]) : [];\n\n const onDrop = newFiles => {\n const updatedFiles = multiple ? [...files, ...newFiles] : [...newFiles];\n\n if (multiple) {\n onChange(updatedFiles);\n } else {\n onChange(updatedFiles[0]);\n }\n };\n\n const onRemove = file => () => {\n if (multiple) {\n const filteredFiles = files.filter(\n stateFile => !shallowEqual(stateFile, file)\n );\n onChange(filteredFiles);\n } else {\n onChange(null);\n }\n };\n\n const childrenElement = isValidElement(Children.only(children))\n ? (Children.only(children))\n : undefined;\n\n const { getRootProps, getInputProps } = useDropzone({\n ...options,\n accept,\n maxSize,\n minSize,\n multiple,\n onDrop,\n });\n\n return (\n \n <>\n \n \n {placeholder ? (\n placeholder\n ) : multiple ? (\n

{translate(labelMultiple)}

\n ) : (\n

{translate(labelSingle)}

\n )}\n
\n {children && (\n
\n {files.map((file, index) => (\n
\n {cloneElement(childrenElement, {\n record: file,\n className: classes.preview,\n removeCallback: onRemove(file)\n })}\n
\n ))}\n
\n )}\n {(touched && error) || helperText ? (\n \n \n \n ) : null}\n \n \n );\n };\n\nWattsImageInput.propTypes = {\n accept: PropTypes.string,\n children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n id: PropTypes.string,\n isRequired: PropTypes.bool,\n label: PropTypes.string,\n labelMultiple: PropTypes.string,\n labelSingle: PropTypes.string,\n maxSize: PropTypes.number,\n minSize: PropTypes.number,\n multiple: PropTypes.bool,\n options: PropTypes.object,\n resource: PropTypes.string,\n source: PropTypes.string,\n placeholder: PropTypes.node,\n};\n\nexport default WattsImageInput;","import React, { useState, useEffect } from 'react';\nimport axios from 'axios';\n\nimport { TextInput, SelectInput, required } from 'react-admin';\nimport { useForm } from 'react-final-form';\n\nimport { withStyles } from '@material-ui/core/styles';\n\nimport Grid from '@material-ui/core/Grid';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faWrench, faCamera } from '@fortawesome/pro-solid-svg-icons';\n\nimport FormHeader from '../FormHeader';\nimport RequiredFieldNote from '../RequiredFieldNote'\nimport { NONE } from '../../Helpers';\nimport { DatePickerInput } from '../DatePickerInput';\nimport { WattsImageField } from '../WattsImageField';\nimport { WattsImageInput } from '../WattsImageInput';\n\n\n// CSS\nimport '../css/LandingPage.css';\n\nconst deviceFormStyles = {\n pageContentContainer: {\n backgroundColor: '#FFF',\n boxShadow: 'inset 0 -1px 0 0 rgba(0, 0, 0, 0.12)',\n overflow: 'auto',\n },\n imageFormContainer: {\n margin: '0 auto',\n paddingTop: '25px',\n\n maxWidth: '813px',\n border: 'none',\n boxShadow: 'none'\n },\n deviceTextContainer: {\n padding: '20px 0 40px 15px',\n boxShadow: 'inset 0 -1px 0 0 rgba(0, 0, 0, 0.12)',\n marginBottom: '44px'\n },\n overlineTop: {\n fontSize: '10px',\n fontWeight: 'bold',\n fontStretch: 'normal',\n fontStyle: 'normal',\n lineHeight: '.6',\n letterSpacing: '-0.1px',\n color: 'rgba(0, 0, 0, 0.87)',\n },\n overlineBottom: {\n fontSize: '10px',\n fontWeight: 'normal',\n fontStretch: 'normal',\n fontStyle: 'normal',\n lineHeight: '1.6',\n letterSpacing: '-0.1px',\n color: 'rgba(0, 0, 0, 0.6)'\n },\n headline6: {\n fontSize: '20px',\n fontWeight: 'normal',\n fontStretch: 'normal',\n fontStyle: 'normal',\n lineHeight: '.2',\n letterSpacing: '-0.2px',\n color: 'rgba(0, 0, 0, 0.87)',\n fontWeight: 'bold'\n },\n formContainer: {\n float: 'right',\n width: '467px',\n marginBottom: '55px',\n marginLeft: '40px',\n\n },\n installInfoContainer: {\n width: '256px',\n float: 'left',\n position: 'relative',\n top: '35px',\n },\n buildIcon: {\n color: '#005DB9',\n fontSize: '32px'\n },\n infoText: {\n fontSize: '16px',\n fontWeight: 'normal',\n fontStretch: 'normal',\n fontStyle: 'normal',\n lineHeight: '1.25',\n letterSpacing: '-0.16px',\n color: 'rgba(0, 0, 0, 0.87)',\n fontWeight: 'bold'\n },\n infoDesc: {\n fontSize: '14px',\n fontWeight: 'normal',\n fontStretch: 'normal',\n fontStyle: 'normal',\n lineHeight: '1.43',\n letterSpacing: '-0.14px',\n color: '#666'\n },\n addPhotoButton: {\n width: '225px',\n height: '36px',\n borderRadius: '4px',\n backgroundColor: '#00254A',\n padding: '0',\n fontSize: '14px',\n fontWeight: 'bold',\n fontStretch: 'normal',\n fontStyle: 'normal',\n lineHeight: '2.5',\n letterSpacing: '-0.14px',\n marginBottom: '20px',\n color: '#FFF',\n textAlign: 'center',\n '&:hover': {\n backgroundColor: '#005DB9',\n cursor: 'pointer'\n }\n },\n photoIcon: {\n fontSize: '20px',\n color: '#FFF',\n position: 'relative',\n top: '2px',\n marginRight: '12px',\n },\n datePicker: {\n width: '100%'\n },\n preview: {\n display: 'inline-block',\n '& img': {\n margin: '0'\n }\n },\n removeButton: {\n display: 'inline-block',\n position: 'relative',\n float: 'left',\n '& button': {\n position: 'absolute',\n }\n },\n codeInput: {\n display: 'none'\n },\n installPhoto: {\n maxWidth: '400px',\n padding: '15px'\n },\n imageFieldContainer: {\n 'display': 'inline-block'\n\n },\n deviceImage: {\n width: '50%',\n margin: '0 auto',\n display: 'block'\n }\n};\n\nconst InstallImage = (props) => {\n const form = useForm();\n const [installationImageUrl, setInstallationImageUrl] = useState(props.record[\"installationImageUrl\"]);\n\n if (!props.record.id || !installationImageUrl) {\n return (\n Add an Installation Photo}>\n \n );\n }\n else {\n return (\n {\n form.change(\"installationImageUrl\", \"\");\n setInstallationImageUrl(\"\");\n }} />\n );\n }\n};\n\nconst LocationControls = (props) => {\n\n const [state, setState] = useState({});\n const [defaulted, setDefaulted] = useState(false);\n const [defaultedLocation, setDefaultedLocation] = useState(false);\n const [defaultedSublocation, setDefaultedSublocation] = useState(false);\n const form = useForm();\n\n useEffect(() => {\n\n if (props.locationId && !state.locations) {\n // Fetch the sublocations.\n const token = localStorage.getItem('authorizationToken');\n axios.get(`/api/Locations/${props.locationId}`, {\n headers: {\n \"Cache-control\": \"no-cache, no-store\",\n \"Pragma\": \"no-cache\",\n \"Expires\": 0,\n \"Authorization\": `Bearer ${token}`\n }\n })\n .then(function (results) {\n\n // Need to map the location results in a way that the react-admin SelectInput control\n // will support.\n var rawSubLocations = results.data.sublocations.map(function (location) {\n\n // Map to an object with an id and name.\n return {\n id: location.locationId,\n name: location.name\n };\n });\n\n // Add an option to the top of the list for \"None\" which clears out\n // the sublocation value.\n rawSubLocations.unshift({\n id: NONE,\n name: '-- None --'\n });\n\n // Populate the state so the UI can be reflected with the correct data.\n\n // You can't change the location once you register the device, so the only option in the\n // locations drop down is the one it's currently associated with.\n setState({\n locations: [\n {\n id: results.data.locationId,\n name: results.data.name\n }\n ],\n subLocations: rawSubLocations\n });\n });\n }\n }, [defaulted]); // Only run when the location id changes.\n\n debugger;\n\n if (props.locationId && !defaulted) {\n setDefaulted(true);\n }\n\n // Once locations have been determined, set the default values now that there are values in the selects.\n const locationFormObj = form.getFieldState(\"locationId\");\n if (state.locations) {\n if (props.locationId && !locationFormObj.value) {\n form.change(\"locationId\", props.locationId);\n setDefaultedLocation(true);\n }\n }\n\n // Once sublocations have been determined, set the default values now that there are values in the selects.\n const sublocationFormObj = form.getFieldState(\"sublocationId\");\n if (state.subLocations) {\n if (props.sublocationId && !sublocationFormObj.value) {\n form.change(\"sublocationId\", props.sublocationId);\n setDefaultedSublocation(true);\n }\n }\n\n const locationSearch = window.location.hash.split('?');\n\n // Handle pre-populating the \"code\" field from the URL.\n if (locationSearch.length > 1) {\n const code = new URLSearchParams(locationSearch[1]).get('code');\n form.change(\"code\", code);\n }\n\n return (\n <>\n \n \n \n \n );\n};\n\n\nclass DeviceFormLayout extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n date: new Date(),\n isImageCleared: this.props.record[\"installationImageUrl\"] === null || this.props.record[\"installationImageUrl\"] === \"\"\n };\n }\n\n componentDidMount() {\n this.populateLocationList(this);\n }\n\n populateLocationList(compThis) {\n\n // Can't use location.search to get the query string params because react-admin uses /#/ for the\n // start of their routes. So we need to use location.hash and find the query string params ourselves.\n const locationSearch = window.location.hash.split('?');\n var locationId = null;\n var sublocationId = NONE;\n\n // Handle locationId\n if (compThis.props.record && compThis.props.record.location && compThis.props.record.location.parentId) {\n locationId = compThis.props.record.location.parentId;\n }\n else if (compThis.props.record && compThis.props.record.location) {\n locationId = compThis.props.record.location.locationId;\n }\n else if (locationSearch.length > 0) {\n locationId = new URLSearchParams(locationSearch[1]).get('locationId');\n }\n\n // Handle sublocationId\n if (compThis.props.record && compThis.props.record.location && compThis.props.record.location.parentId) {\n sublocationId = compThis.props.record.location.locationId;\n }\n\n this.setState({\n locationId: locationId,\n sublocationId: sublocationId\n });\n }\n\n render() {\n\n return (\n
\n \n \n \n \n \n \n \n \"IntelliStation\n
\n

Powers

\n

IntelliStation Jr.

\n

Digital Mixing Valve

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

Installation Info

\n

Give your device a custom name and update installation details.

\n
\n
\n \n \n\n \n \n \n \n \n \n \n \n
\n
\n \n \n
\n
\n );\n }\n};\n\nexport default withStyles(deviceFormStyles)(DeviceFormLayout);","import React from 'react';\r\nimport { Create, SimpleForm, useAuthState } from 'react-admin';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport DeviceFormLayout from './DeviceFormLayout';\r\nimport WattsToolbar from '../WattsToolbar';\r\nimport WattsLoading from '../WattsLoading';\r\n\r\nconst createStyles = makeStyles({\r\n 'main': {\r\n 'margin': '0'\r\n }\r\n});\r\n\r\nexport const CreateDevice = (props) => {\r\n const createUseStyles = createStyles();\r\n\r\n const { loading, authenticated } = useAuthState();\r\n\r\n if (loading) {\r\n return ;\r\n }\r\n\r\n if (!authenticated) {\r\n return
;\r\n }\r\n\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\nexport default (CreateDevice);","import React from 'react';\r\nimport { Edit, SimpleForm, useAuthState } from 'react-admin';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport DeviceFormLayout from './DeviceFormLayout';\r\nimport WattsToolbar from '../WattsToolbar';\r\nimport WattsLoading from '../WattsLoading';\r\n\r\nconst createStyles = makeStyles({\r\n 'main': {\r\n 'margin': '0'\r\n }\r\n});\r\n\r\nexport const CreateDevice = (props) => {\r\n\r\n const createUseStyles = createStyles();\r\n\r\n const { loading, authenticated } = useAuthState();\r\n\r\n if (loading) {\r\n return ;\r\n }\r\n\r\n if (!authenticated) {\r\n return
;\r\n }\r\n\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\nexport default (CreateDevice);","import React from 'react';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faCalendarDay } from '@fortawesome/pro-regular-svg-icons';\r\n\r\nimport { renderTemperature } from '../../Helpers.js';\r\nimport '../css/TelemetryCard.css';\r\n\r\n// Monitor Cards\r\nconst TelemetryCard = (props) => {\r\n\r\n // Set Date\r\n var dateContent = null;\r\n if (props.date) {\r\n\r\n // Verify the date passed in is valid.\r\n var parsedDate = Date.parse(props.date);\r\n\r\n // Only display the date content when the date value is a valid date.\r\n if (!isNaN(parsedDate)) {\r\n dateContent = (\r\n
\r\n \r\n {props.date}\r\n
\r\n );\r\n }\r\n }\r\n\r\n var className = props.className;\r\n\r\n if (!props.className) {\r\n className = \"monitorCard\"\r\n }\r\n\r\n var telemetryValue = renderTemperature(props.value);\r\n\r\n if (!props.value) {\r\n telemetryValue = '- - -';\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {props.iconType}\r\n

{props.message}

\r\n
\r\n\r\n
{telemetryValue}
\r\n\r\n {dateContent}\r\n
\r\n );\r\n}\r\n\r\nexport default TelemetryCard;","import React from 'react';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Menu from '@material-ui/core/Menu';\r\n\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faEllipsisV } from '@fortawesome/pro-regular-svg-icons';\r\n\r\nimport '../css/TelemetryCard.css';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n width: '100%',\r\n maxWidth: 360,\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n}));\r\n\r\n\r\nexport default function TelemetryCardMenu(props) {\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n\r\n const handleClickListItem = event => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleMenuItemClick = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const options = props.menuOptions;\r\n const uniqueKey = props.uniqueKey;\r\n\r\n return (\r\n
\r\n \r\n \r\n {options.map((option, index) => (\r\n handleMenuItemClick(event, index)}\r\n >\r\n {option}\r\n \r\n ))}\r\n \r\n
\r\n );\r\n}","import React from 'react';\n\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport '../css/HelpModal.css';\nimport '../css/DeviceInfoModal.css';\n\nimport statuses from './DeviceStatusLookup';\nimport { getHelperStyles, SANITIZATION_STATUS } from '../../Helpers.js';\n\nconst ErrorDetailsRow = (props) => {\n const classTemplate = getHelperStyles()();\n const nameClass = 'errorDetials-topicTitle ' + classTemplate.heading6;\n\n return (\n
\n
\n

{props.name}

\n
    \n
  • {props.body}
  • \n
\n
\n
\n );\n};\n\nconst DeviceErrorHelpDialog = (props) => {\n\n var status = props.status;\n\n // Override the cooldown status with the sanitization status for issue 12902.\n if (status.id === 8) {\n status = SANITIZATION_STATUS;\n }\n\n var colorClass = `errorDetails-color-${statuses[status.id].color}`;\n var errorDetailIcon = statuses[status.id].icon;\n\n var errorHelpTopics = [];\n\n // Cause\n errorHelpTopics.push(\n \n );\n\n // How To Clear\n errorHelpTopics.push(\n \n );\n\n\n // Control Behavior\n errorHelpTopics.push(\n \n );\n\n return (\n \n Event Details\n\n \n
\n
\n \n

{status.name}

\n
\n {errorHelpTopics}\n
\n
\n \n \n \n
\n );\n};\n\nexport default DeviceErrorHelpDialog;","import React from 'react';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTimes } from '@fortawesome/pro-regular-svg-icons';\r\n\r\nimport { showNotification } from 'react-admin';\r\nimport { hideNotification } from 'ra-core';\r\n\r\nimport { connect } from 'react-redux';\r\n\r\nimport '../css/HelpModal.css';\r\nimport '../css/DeviceInfoModal.css';\r\n\r\nimport statuses, { SANITIZATION_STATUS } from './DeviceStatusLookup';\r\nimport DeviceErrorHelpDialog from './DeviceErrorHelpDialog';\r\n\r\nclass StatusNotifWithLinkToHelp extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.toggleDialog = this.toggleDialog.bind(this);\r\n\r\n this.state = {\r\n open: false\r\n };\r\n }\r\n\r\n toggleDialog() {\r\n this.setState({\r\n open: !this.state.open\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n
{\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }}>\r\n \r\n {this.props.alert}\r\n See Event Details\r\n\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst StatusNotification = (props) => {\r\n\r\n return (\r\n
\r\n \r\n {props.alert}\r\n
\r\n );\r\n}\r\n\r\nclass DeviceStatusNotification extends React.Component {\r\n _isMounted = false;\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showModal: false,\r\n errorName: \"\",\r\n errorDetailIcon: null,\r\n errorHelpTopics: [],\r\n colorClass: \"\",\r\n };\r\n }\r\n // for help modal\r\n openHelp = () => {\r\n this.setState({ showModal: true });\r\n };\r\n\r\n closeModal = () => {\r\n this.setState({ showModal: false });\r\n };\r\n\r\n // for Snackbar\r\n closeNotification = () => {\r\n this.props.hideNotification();\r\n };\r\n\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n\r\n componentDidMount() {\r\n this._isMounted = true;\r\n\r\n // show notification\r\n if (this.props.device.status) {\r\n\r\n var status = this.props.device.status;\r\n var errorDetailIcon = statuses[status.id].icon;\r\n\r\n // For sanitization status we do not show the snackbar notification. Instead, we have a banner at the\r\n // top of the page that handles informing the user the device is in sanitization mode.\r\n if (status.id !== SANITIZATION_STATUS) {\r\n // show error notif with help link\r\n if (statuses[status.id].color === \"red\" || statuses[status.id].color === \"orange\"\r\n && status.id != 6) { // Offline status is the only exception, it does not have definition for the error code details.\r\n\r\n this.props.showNotification(\r\n , // message \r\n 'info', // type\r\n { autoHideDuration: 30000 }\r\n );\r\n }\r\n else if (status.priority > 0) {\r\n this.props.showNotification(\r\n , // message \r\n 'info', // type\r\n { autoHideDuration: 5000 }\r\n );\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n render() {\r\n return (\r\n <> \r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\r\n});\r\nconst mapDispatchToProps = {\r\n showNotification,\r\n hideNotification\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DeviceStatusNotification);","import React, { } from 'react';\nimport axios from 'axios';\n\nimport { withStyles } from '@material-ui/core/styles';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\n\nimport WattsLoading from '../WattsLoading';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCog, faArrowToBottom, faInfoCircle } from '@fortawesome/pro-regular-svg-icons';\nimport { faFileDownload, faFilePdf, faCalendarDay, faCalendarWeek, faCalendarAlt } from '@fortawesome/pro-solid-svg-icons';\n\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\n\nimport * as d3 from \"d3\";\nimport { getUTCDate } from '../../Helpers.js';\nimport DeviceStatusNotification from './DeviceStatusNotification';\n\nclass DeviceHistoryChart extends React.Component {\n constructor(props) {\n super(props);\n\n this.showPdfReport = this.showPdfReport.bind(this);\n this.showCsvReport = this.showCsvReport.bind(this);\n\n this.state = {\n reportType: 'daytrend',\n legendOpen: false,\n anchorEl: null,\n loading: true,\n notified: false,\n data: null,\n error: null,\n };\n\n this.chartColors = {\n mixedOutlet: \"#005db9\",\n setpoint: \"#00c509\",\n highLimit: \"#ff0000\",\n lowLimit: \"#a200d2\"\n }\n }\n\n componentDidMount() {\n this.onChangeReportType(this.state.reportType);\n }\n\n onChangeReportType(value) {\n this.handleChartClose();\n\n d3.select('#dashboardChart').remove();\n\n this.setState({\n reportType: value,\n loading: true\n });\n\n this.getApiData(value, this.generateSetPointChart);\n }\n\n /**\n * Generates the set point chart.\n */\n generateSetPointChart(reportType) {\n\n var apiData = this.state.data;\n\n // Only render the chart if we successfully retrieved data from the API.\n if (!this.state.error && apiData.data.datapointList.length > 0) {\n\n var margin = { top: 10, right: 30, bottom: 65, left: 60 };\n\n var fullWidth = 1100;\n var fullHeight = 200;\n\n var width = fullWidth - margin.left - margin.right;\n var height = fullHeight - margin.top - margin.bottom;\n\n var dateFormatString = \"%Y-%m-%d\";\n\n // Set point axis details.\n var yAxisPadding = 15;\n\n // Get the data.\n var dataResult = {};\n\n switch (reportType) {\n case 'monthlytrend':\n dataResult = this.processSetPointDataMonthly(apiData);\n break;\n case 'weektrend':\n dataResult = this.processSetPointDataWeekly(apiData);\n break;\n case 'daytrend':\n dataResult = this.processSetPointDataHourly(apiData);\n dateFormatString = \"%-I %p\";\n break;\n }\n\n var data = dataResult.outletResults;\n\n var minValue = dataResult.minValue;\n var maxValue = dataResult.maxValue;\n\n // Append the svg object to the body of the page.\n var svg = d3.select(\".chartContent\")\n .append(\"svg\")\n .attr(\"id\", \"dashboardChart\")\n .attr(\"width\", '100%')\n .attr(\"height\", '100%')\n .attr('viewBox', '0 0 ' + fullWidth + ' ' + fullHeight)\n .attr('preserveAspectRatio', 'xMinYMin')\n .append(\"g\")\n .attr(\"transform\",\n \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n // Tell d3 to use the data we processed.\n svg.data(data);\n\n // Set up the x-axis scale.\n var x = d3.scaleTime()\n .domain(d3.extent(data, function (d) {\n return d.day;\n })) // Our data set for the x axis.\n .range([0, width]); // Transform it to fit within the width of the graph.\n\n // Format and append the x-axis.\n svg.append(\"g\")\n .attr(\"transform\", \"translate(0,\" + height + \")\")\n .call(\n d3.axisBottom(x)\n .tickFormat(d3.timeFormat(dateFormatString))\n )\n .selectAll(\"text\")\n .style(\"text-anchor\", \"end\")\n .attr(\"dx\", \"-.8em\")\n .attr(\"dy\", \".15em\")\n .attr(\"transform\", \"rotate(-65)\");\n\n // TODO: Set up a custom step value / calculation to only show the 3 major points.\n\n // Set up the y-axis scale.\n var y = d3.scaleLinear()\n .domain([\n minValue - yAxisPadding,\n maxValue + yAxisPadding]) // Our data set for the y axis.\n .range([height, 0]); // Transform it to fit within the height of the graph.\n\n // Format and append the y-axis.\n svg.append(\"g\")\n .call(\n d3.axisLeft(y)\n .tickFormat(function (d, i) {\n if (i % 2 == 0) {\n return d + decodeURIComponent('%C2%B0') + dataResult.unit;\n }\n })\n );\n\n // Draw the set point average line.\n svg.append('path')\n .datum(dataResult.setpointResults)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", this.chartColors.setpoint)\n .attr(\"stroke-width\", 1)\n .attr(\"d\", d3.line()\n .x(function (d) { return x(d.day) })\n .y(function (d) { return y(d.y) })\n );\n\n // Draw the high temp diff average line.\n svg.append('path')\n .datum(dataResult.highTempDiffResults)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", this.chartColors.highLimit)\n .attr(\"stroke-width\", 1)\n .attr(\"d\", d3.line()\n .x(function (d) { return x(d.day) })\n .y(function (d) { return y(d.y) })\n );\n\n\n // Draw the low temp diff average line.\n svg.append('path')\n .datum(dataResult.lowTempDiffResults)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", this.chartColors.lowLimit)\n .attr(\"stroke-width\", 1)\n .attr(\"d\", d3.line()\n .x(function (d) { return x(d.day) })\n .y(function (d) { return y(d.y) })\n );\n\n // Draw the scatterplot from the data.\n svg.append('path')\n .datum(data)\n .attr(\"fill\", \"none\")\n .attr(\"stroke\", this.chartColors.mixedOutlet)\n .attr(\"stroke-width\", 2)\n .attr(\"d\", d3.line()\n .x(function (d) { return x(d.day) })\n .y(function (d) { return y(d.y) })\n );\n }\n }\n\n getApiData(reportType, callback) {\n var compThis = this;\n const token = localStorage.getItem('authorizationToken');\n var jsonHeaders = {\n headers: {\n \"Cache-control\": \"no-cache, no-store\",\n \"Pragma\": \"no-cache\",\n \"Expires\": 0,\n \"Authorization\": `Bearer ${token}`\n }\n };\n\n axios.get(`/api/devices/${this.props.thisDevice.id}/historicaldata/${reportType}`, jsonHeaders).then(function (response) {\n\n compThis.setState({\n loading: false,\n data: response.data\n });\n\n callback.call(compThis, reportType);\n }).catch(function (error) {\n compThis.setState({\n error: error\n });\n });\n }\n\n /**\n * Processes the API data into something we can use to generate the chart.\n * \n * @param {any} apiData The data from the API.\n * \n * @returns The processed API data.\n */\n processSetPointDataHourly(apiData) {\n\n var resultsObject = this.getInitResults(apiData);\n\n for (var i = 0; i < apiData.data.datapointList.length; i++) {\n var currentData = apiData.data.datapointList[i];\n\n var dataDate = new Date(currentData.date);\n dataDate.setHours(currentData.hour);\n dataDate = getUTCDate(dataDate, this.props.thisDevice)\n\n resultsObject = this.getResultsForDate(dataDate, i, currentData, resultsObject);\n }\n\n return resultsObject;\n }\n\n processSetPointDataWeekly(apiData) {\n var resultsObject = this.getInitResults(apiData);\n\n for (var i = 0; i < apiData.data.datapointList.length; i++) {\n var currentData = apiData.data.datapointList[i];\n\n var weeklyTrend = currentData.hourAverages;\n\n if (weeklyTrend) {\n for (var k = 0; k < weeklyTrend.length; k++) {\n\n var currentWeek = weeklyTrend[k];\n\n if (i == 0 && k == 0) {\n // Start time.\n var startDate = getUTCDate(currentData.date, this.props.thisDevice);\n startDate.setUTCHours(currentWeek.startHour);\n\n resultsObject = this.getResultsForDate(startDate, i, currentWeek, resultsObject);\n }\n\n // End time.\n var endDate = getUTCDate(currentData.date, this.props.thisDevice);\n endDate.setUTCHours(currentWeek.endHour);\n\n resultsObject = this.getResultsForDate(endDate, i, currentWeek, resultsObject);\n }\n }\n }\n\n return resultsObject;\n }\n\n /**\n * Processes the API data into something we can use to generate the chart.\n * \n * @param {any} apiData The data from the API.\n * \n * @returns The processed API data.\n */\n processSetPointDataMonthly(apiData) {\n var resultsObject = this.getInitResults(apiData);\n\n for (var i = 0; i < apiData.data.datapointList.length; i++) {\n var currentData = apiData.data.datapointList[i];\n\n var monthTrend = currentData.dailyAverages;\n\n if (monthTrend) {\n for (var k = 0; k < monthTrend.length; k++) {\n\n var currentMonth = monthTrend[k];\n var dataDate = getUTCDate(currentData.date, this.props.thisDevice);\n\n resultsObject = this.getResultsForDate(dataDate, i, currentMonth, resultsObject);\n }\n }\n }\n\n return resultsObject;\n }\n\n getInitResults(apiData) {\n\n var unit = 'F';\n\n if (apiData.data && apiData.data.scale) {\n switch (apiData.data.scale.toLowerCase()) {\n case 'metric':\n unit = 'C'\n break;\n case 'imperial':\n unit = 'F';\n break;\n default:\n // Redundant, but just to make it easier if we need a default in the future.\n unit = 'F';\n break;\n }\n }\n\n return {\n unit: unit,\n outletResults: [],\n setpointResults: [],\n highTempDiffResults: [],\n lowTempDiffResults: [],\n minValue: Infinity,\n maxValue: -Infinity\n };\n }\n\n getResultsForDate(date, currentX, currentObject, resultsObject) {\n\n var highDiffTemp = currentObject.mixSetpointTempAvg + currentObject.highAlertDiffAvg;\n var lowDiffTemp = currentObject.mixSetpointTempAvg - currentObject.lowAlertDiffAvg;\n\n\n resultsObject.minValue = this.getMinMaxValue([resultsObject.minValue, currentObject.mixOutletTempAvg,\n currentObject.mixSetpointTempAvg, highDiffTemp, lowDiffTemp],\n Math.min);\n\n resultsObject.maxValue = this.getMinMaxValue([resultsObject.maxValue, currentObject.mixOutletTempAvg,\n currentObject.mixSetpointTempAvg, highDiffTemp, lowDiffTemp],\n Math.max);\n\n var unit = \"F\";\n\n // Outlet temp average.\n resultsObject.outletResults.push({\n x: currentX,\n y: currentObject.mixOutletTempAvg,\n day: date\n });\n\n // Set point average\n resultsObject.setpointResults.push({\n x: currentX,\n y: currentObject.mixSetpointTempAvg,\n day: date\n });\n\n // High temp diff\n resultsObject.highTempDiffResults.push({\n x: currentX,\n y: highDiffTemp,\n day: date\n });\n\n // Low temp diff\n resultsObject.lowTempDiffResults.push({\n x: currentX,\n y: lowDiffTemp,\n day: date\n });\n\n return resultsObject;\n }\n\n getMinMaxValue(testValues, testFunc) {\n return testFunc(...testValues);\n }\n\n // Menu helper functions.\n handleChartClickListItem(event) {\n this.setState({\n anchorChartEl: event.currentTarget\n });\n }\n\n handleDownloadClickListItem(event) {\n this.setState({\n anchorDownloadEl: event.currentTarget\n });\n }\n\n handleLegendClickListItem(event) {\n this.setState({\n legendOpen: true\n });\n }\n\n handleChartClose() {\n this.setState({\n anchorChartEl: null\n });\n }\n\n handleDownloadClose() {\n this.setState({\n anchorDownloadEl: null\n });\n }\n\n handleLegendClose() {\n this.setState({\n legendOpen: false\n });\n }\n\n getLoadingSpinner() {\n if (this.state.loading) {\n return (\n \n );\n }\n else {\n return null;\n }\n }\n\n getNotifications() {\n if (!this.state.loading && !this.state.notified) {\n\n this.setState({\n notified: true\n });\n\n return (\n \n );\n }\n else {\n return null;\n }\n }\n\n getChartMessage() {\n if (!this.state.loading) {\n if (this.state.data.data.datapointList.length == 0) {\n return (\n
\n
No historical data yet.
\n
Check back later for updates.
\n
\n );\n }\n else if (this.state.error) {\n return (\n
\n
An error occurred while rendering this chart:
\n
{`${this.state.error.message}`}
\n
\n );\n }\n }\n\n return null;\n }\n\n getReportTypeName() {\n switch (this.state.reportType) {\n case 'monthlytrend':\n return '30 days';\n case 'weektrend':\n return '7 days';\n case 'daytrend':\n return '24 hours';\n }\n }\n\n async downloadFile(url) {\n const token = localStorage.getItem('authorizationToken');\n const options = {\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\n \"Pragma\": \"no-cache\",\n \"Expires\": 0,\n \"Authorization\": `Bearer ${token}`\r\n }\r\n }\n\n fetch(url, options)\r\n .then(res => res.blob())\r\n .then(blob => {\r\n const file = window.URL.createObjectURL(blob);\r\n window.open(file);\r\n });\n };\n\n showCsvReport() {\n var currentDate = new Date();\n this.downloadFile(`/api/Devices/${this.props.thisDevice.id}/historicalreport/${this.state.reportType}/${currentDate.toLocaleDateString().replace(/\\//g, '-')}-${this.props.thisDevice.name}-CsvExtract`);\n }\n\n showPdfReport() {\n var currentDate = new Date();\n this.downloadFile(`/api/HotWaterPerformanceSummary/${this.props.thisDevice.id}/${currentDate.toLocaleDateString().replace(/\\//g, '-')}-${this.props.thisDevice.name}-HotWaterSummary`);\n }\n\n render() {\n const chartViews = [\n {\n name: '24 hours',\n key: 'daytrend',\n icon: (),\n },\n {\n name: '7 days',\n key: 'weektrend',\n icon: ()\n },\n {\n name: '30 days',\n key: 'monthlytrend',\n icon: ()\n }\n ];\n\n const reportOptions = [\n {\n name: 'Download CSV',\n key: 'pdf',\n icon: (),\n callback: this.showCsvReport\n },\n {\n name: 'Download PDF',\n key: 'csv',\n icon: (),\n callback: this.showPdfReport\n }\n ];\n\n const compThis = this;\n\n return (\n
\n
\n \n \n {\"Legend\"}\n \n
\n
\n
\n

Mixed Outlet

\n
\n
\n
\n

Setpoint

\n
\n
\n
\n

High Limit

\n
\n
\n
\n

Low Limit

\n
\n
\n \n \n \n \n \n this.handleChartClickListItem(event)} className=\"chartHeaderIcon\" />\n compThis.handleChartClose(event)}\n classes={{ paper: this.props.classes.paper }}\n >\n {chartViews.map((option, index) => (\n compThis.onChangeReportType(`${option.key}`)}>\n {option.icon} {option.name}\n \n ))}\n \n this.handleDownloadClickListItem(event)} className=\"chartHeaderIcon\" />\n compThis.handleDownloadClose(event)}\n classes={{ paper: this.props.classes.paper }}\n >\n {reportOptions.map((option, index) => (\n \n {option.icon} {option.name}\n \n ))}\n \n History ({compThis.getReportTypeName()})\n
\n
\n {compThis.getLoadingSpinner()}\n {compThis.getChartMessage()}\n {compThis.getNotifications()}\n
\n
\n );\n }\n}\n\nconst chartStyles = {\n chartMessage: {\n fontSize: '14px',\n fontWeight: 'bold',\n padding: '12px',\n textAlign: 'center'\n },\n noHistoricalDataMessage: {\n marginBottom: '5px'\n },\n paper: {\n marginTop: '48px'\n },\n menuIcon: {\n color: '#757575',\n fontSize: '20px',\n margin: '14px 24px'\n },\n menuText: {\n color: '#666',\n fontSize: '16px',\n fontWeight: '900',\n marginRight: '24px'\n }\n};\n\nexport default withStyles(chartStyles)(DeviceHistoryChart);","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst DeviceLastUpdated = (props) => {\n\n const useStyles = makeStyles({\n lastUpdated: {\n fontSize: '12px',\n lineHeight: '1.33',\n letterSpacing: '-0.12px',\n color: '#212121',\n margin: '19px 0 13px 0',\n float: 'right'\n }\n });\n\n const classes = useStyles();\n\n var formattedTime = new Date().toLocaleString().replace(',', '');\n\n return (\n

Updated: {formattedTime}

\n );\n}\n\nexport default DeviceLastUpdated;","import React from 'react';\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nimport axios from 'axios';\r\n\r\nimport { showNotification } from 'react-admin';\r\nimport { connect } from 'react-redux';\r\n\r\nimport TelemetryCard from './TelemetryCard';\r\nimport TelemetryCardMenu from './TelemetryCardMenu';\r\nimport ContextMenuOption from '../ContextMenuOption';\r\nimport DeviceHistoryChart from './DeviceHistoryChart';\r\n\r\nimport DeviceLastUpdated from './DeviceLastUpdated';\r\n\r\nimport { faQuestionCircle, faPencil } from '@fortawesome/pro-solid-svg-icons';\r\n\r\nimport '../css/DeviceDashboardTab.css';\r\n\r\nimport { getUserTempScale, getPermissionList, isDeviceOffline } from \"../../Helpers.js\";\r\n\r\nconst SettingsCard = (props) => {\r\n var permissions = null;\r\n\r\n if (props.thisDevice) {\r\n permissions = getPermissionList(props.thisDevice.location.permissions);\r\n }\r\n\r\n var menuOptions = [];\r\n\r\n if (permissions && permissions.Devices && permissions.Devices.Update && !props.sanitization) {\r\n menuOptions.push(\r\n\r\n // Edit settings option.\r\n \r\n );\r\n }\r\n\r\n let className = props.className;\r\n if (props.sanitization) {\r\n className += \" disabledCard\";\r\n }\r\n else {\r\n\r\n // Help option.\r\n menuOptions.push(\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n }\r\n key={`${props.parentKey}-${0}`}\r\n />\r\n );\r\n};\r\n\r\nclass DeviceDashboardTab extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.SetMixedOutletSetpointValue = this.SetMixedOutletSetpointValue.bind(this);\r\n this.SetHighTempDiffValue = this.SetHighTempDiffValue.bind(this);\r\n this.SetLowTempDiffValue = this.SetLowTempDiffValue.bind(this);\r\n this.state = {\r\n MixedOutletSetpointValue: null,\r\n HighTempDiffValue: null,\r\n LowTempDiffValue: null,\r\n };\r\n }\r\n\r\n SetMixedOutletSetpointValue(value, tempErrorCallback) {\r\n var comp = this;\r\n var remoteMax = comp.props.record.data.RemoteMaxSetpoint.Val;\r\n var tempUnit = comp.props.record.data.TempUnits.Val;\r\n if (value > remoteMax) {\r\n var errorText = \"This device does not allow remote temperature settings to exceed \" + remoteMax + \"°\" + tempUnit + \". To adjust the Mixed Outlet Setpoint above this threshold, you must change it manually on the device or by contacting the device owner.\";\r\n tempErrorCallback(comp.state.MixedOutletSetpointValue, errorText);\r\n return;\r\n }\r\n\r\n // axios update device value - direct method\r\n const token = localStorage.getItem('authorizationToken');\r\n axios({\r\n method: 'patch',\r\n url: `/api/devices/${comp.props.record.id}/UpdateSetpoint`,\r\n data: {\r\n MixOutletSetpoint: value\r\n },\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n }).then(function (response) {\r\n // handle success\r\n comp.setState({ MixedOutletSetpointValue: value });\r\n comp.props.record.data[\"MixedSetpoint\"].Val = value;\r\n\r\n comp.props.showNotification(\"elogic.toastNotifications.setMixedOutletSetpointValue\");\r\n }).catch(function (error) {\r\n // handle error\r\n tempErrorCallback(comp.state.MixedOutletSetpointValue);\r\n comp.props.showNotification(\"elogic.toastNotifications.setMixedOutletSetpointValueError\", \"error\");\r\n console.log(error);\r\n });\r\n }\r\n\r\n SetHighTempDiffValue(value, tempErrorCallback) {\r\n var comp = this;\r\n // axios update device value - direct method\r\n const token = localStorage.getItem('authorizationToken');\r\n axios({\r\n method: 'patch',\r\n url: `/api/devices/${comp.props.record.id}/UpdateHighTempDiff`,\r\n data: {\r\n HighAlertDiff: value\r\n },\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n }).then(function (response) {\r\n // handle success\r\n comp.setState({ HighTempDiffValue: value });\r\n comp.props.record.data[\"HighAlertDiff\"].Val = value;\r\n\r\n comp.props.showNotification(\"elogic.toastNotifications.setHighTempDiffValue\");\r\n }).catch(function (error) {\r\n // handle error\r\n tempErrorCallback(comp.state.HighTempDiffValue);\r\n comp.props.showNotification(\"elogic.toastNotifications.setHighTempDiffValueError\", \"error\");\r\n console.log(error);\r\n });\r\n }\r\n\r\n SetLowTempDiffValue(value, tempErrorCallback) {\r\n var comp = this;\r\n // axios update device value - direct method\r\n const token = localStorage.getItem('authorizationToken');\r\n axios({\r\n method: 'patch',\r\n url: `/api/devices/${comp.props.record.id}/UpdateLowTempDiff`,\r\n data: {\r\n LowAlertDiff: value\r\n },\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n }).then(function (response) {\r\n // handle success\r\n comp.setState({ LowTempDiffValue: value });\r\n comp.props.record.data[\"LowAlertDiff\"].Val = value;\r\n\r\n comp.props.showNotification(\"elogic.toastNotifications.setLowTempDiffValue\");\r\n }).catch(function (error) {\r\n // handle error\r\n tempErrorCallback(comp.state.LowTempDiffValue);\r\n comp.props.showNotification(\"elogic.toastNotifications.setLowTempDiffValueError\", \"error\");\r\n console.log(error);\r\n });\r\n }\r\n\r\n componentDidMount() {\r\n this.getTempValuesFromRecord();\r\n }\r\n\r\n getTempValuesFromRecord() {\r\n // These values come from device record data block (see mock data)\r\n if (this.props.record.data) {\r\n\r\n var mixedOutlet = this.getTelemetryDataValue('MixedSetpoint');\r\n var highAlertDiff = this.getTelemetryDataValue('HighAlertDiff');\r\n var lowAlertDiff = this.getTelemetryDataValue('LowAlertDiff');\r\n\r\n if (mixedOutlet != this.state.MixedOutletSetpointValue ||\r\n highAlertDiff != this.state.HighTempDiffValue ||\r\n lowAlertDiff != this.state.LowTempDiffValue) {\r\n\r\n this.setState(\r\n {\r\n MixedOutletSetpointValue: mixedOutlet,\r\n HighTempDiffValue: highAlertDiff,\r\n LowTempDiffValue: lowAlertDiff,\r\n TempUnits: getUserTempScale(this.props.record)\r\n });\r\n }\r\n }\r\n }\r\n\r\n getTelemetryDataValue(fieldName) {\r\n\r\n if (this.props.record.data[fieldName]) {\r\n return this.props.record.data[fieldName].Val;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n\r\n render() {\r\n const displayValue = getUserTempScale(this.props.record);\r\n\r\n if (displayValue != this.state.TempUnits) {\r\n\r\n // If the temp scale changed since the state was rendered, we need to reset the state\r\n // from the record.\r\n this.getTempValuesFromRecord();\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \n
\n \n
\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\nexport default connect(null, { showNotification })(DeviceDashboardTab);","import React, { } from 'react';\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\nimport axios from 'axios';\r\n\r\nimport { showNotification } from 'react-admin';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faInfoCircle, faRedo } from '@fortawesome/pro-regular-svg-icons';\r\n\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport MuiDialogActions from '@material-ui/core/DialogActions';\r\nimport Dialog from '@material-ui/core/Dialog';\r\n\r\nimport ContextMenuOption from '../ContextMenuOption';\r\nimport TelemetryCard from './TelemetryCard';\r\nimport statuses from './DeviceStatusLookup';\r\n\r\nimport DeviceLastUpdated from './DeviceLastUpdated';\r\n\r\nimport '../css/DeviceMonitorTab.css';\r\nimport '../css/TelemetryCard.css';\r\n\r\nimport { getPermissionList, getUserTempScale, formatToUTCDate, isDeviceOffline } from '../../Helpers.js';\r\n\r\nconst ErrorLogCard = (props) => {\r\n\r\n // Set Icon\r\n var thisIcon = ;\r\n\r\n // color odd errors\r\n var ClassColor = \"\";\r\n if (props.myIndex % 2 == 0) {\r\n ClassColor = \"oddCard\"\r\n }\r\n\r\n var dateString = '- - -';\r\n if (props.dateCreated) {\r\n dateString = formatToUTCDate(props.dateCreated, props.record);\r\n }\r\n\r\n return (\r\n
\r\n {thisIcon}\r\n
\r\n {props.errMsg}
\r\n {dateString}\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst DialogActions = withStyles((theme) => ({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(1),\r\n },\r\n}))(MuiDialogActions);\r\n\r\nclass HighLowTempValueCard extends React.Component {\r\n constructor(props) {\r\n\r\n super(props);\r\n\r\n this.clearDate = this.clearDate.bind(this);\r\n\r\n var highLowMixTemp = getTelemetryDataFromRecord(this.props.record, this.props.fieldName);\r\n\r\n this.state = {\r\n currentTemp: highLowMixTemp.value,\r\n lastCleared: highLowMixTemp.date,\r\n showConfirmation: false\r\n };\r\n }\r\n\r\n clearDate(clearType) {\r\n var comp = this;\r\n // axios update device value - direct method\r\n const token = localStorage.getItem('authorizationToken');\r\n axios({\r\n method: 'patch',\r\n url: `/api/devices/${comp.props.record.id}/${clearType}`,\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n }).then(function (response) {\r\n\r\n var clearData = getTelemetryDataFromRecord(response.data, comp.props.fieldName);\r\n\r\n comp.setState({\r\n currentTemp: clearData.value,\r\n lastCleared: clearData.date\r\n });\r\n\r\n comp.props.record.data[comp.props.fieldName].Val = clearData.value;\r\n comp.props.record.data[comp.props.fieldName].DateCleared = clearData.date;\r\n\r\n comp.props.showNotification(`elogic.toastNotifications.set${clearType}`);\r\n\r\n comp.showConfirmation(false);\r\n\r\n }).catch(function (error) {\r\n // handle error\r\n comp.props.showNotification(`elogic.toastNotifications.set${clearType}Error`, \"error\");\r\n comp.showConfirmation(false);\r\n });\r\n }\r\n\r\n showConfirmation(show) {\r\n this.setState({\r\n showConfirmation: show\r\n });\r\n }\r\n\r\n render() {\r\n\r\n var offsetDateTime = formatToUTCDate(this.state.lastCleared, this.props.record);\r\n\r\n var icon = this.props.permissions.Devices.Update ? ( {this.showConfirmation(true); }} />) : null;\r\n return (\r\n <>\r\n \r\n \r\n Are you sure?\r\n {this.props.helpObject[this.props.helpKey].body}\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// Tab Content\r\nclass DeviceMonitorTab extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n errorLogCardList: [],\r\n isLoading: true\r\n };\r\n }\r\n\r\n getActuatorV(record) {\r\n var actuatorV = \"- - -\";\r\n if (record.data && record.data.Outputs && record.data.Outputs.ActuatorV) {\r\n actuatorV = record.data.Outputs.ActuatorV.toString();\r\n }\r\n\r\n return actuatorV;\r\n }\r\n _isMounted = false;\r\n\r\n componentDidMount() {\r\n this._isMounted = true;\r\n var comp = this;\r\n\r\n // Lists to hold returned compenents\r\n var logCards = [];\r\n\r\n const token = localStorage.getItem('authorizationToken');\r\n var jsonHeaders = {\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n };\r\n\r\n // Get alerts for device\r\n axios.get(`/api/alerts/${this.props.record.deviceId}/30/2`, jsonHeaders)\r\n .then(function (response) {\r\n\r\n for (var i = 0; i < response.data.length; i++) {\r\n logCards.push();\r\n }\r\n if (comp._isMounted) {\r\n comp.setState({ errorLogCardList: logCards, isLoading: false });\r\n }\r\n\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n }\r\n\r\n render() {\r\n var actuatorPositionValue = this.getActuatorV(this.props.record);\r\n var permissions = getPermissionList(this.props.record.location.permissions);\r\n\r\n return (\r\n
\r\n \r\n \n \n \r\n \r\n
\r\n

Event Log (30 days)

\r\n
\r\n
\r\n {this.state.errorLogCardList}\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n }\r\n key={`DeviceDashboardCard-${2}`}\r\n />\r\n\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nfunction getTelemetryDataFromRecord(record, fieldName) {\r\n var result = {\r\n value: '- - -',\r\n date: '- - -'\r\n };\r\n\r\n if (record.data && record.data[fieldName]) {\r\n var field = record.data[fieldName];\r\n\r\n if (field.Val) {\r\n result.value = field.Val;\r\n }\r\n\r\n if (field.DateCleared) {\r\n var dateCleared = field.DateCleared.substring(0, field.DateCleared.length - 3)\r\n result.date = new Date(dateCleared).toLocaleString();\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport default connect(null, { showNotification })(DeviceMonitorTab);","import React from 'react';\r\nimport moment from \"moment\";\r\nimport axios from 'axios';\r\n\r\nimport { showNotification } from 'react-admin';\r\nimport { connect } from 'react-redux';\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport Switch from '@material-ui/core/Switch';\r\nimport { TimePicker } from '@material-ui/pickers'\r\n\r\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\r\n\r\nimport TelemetryCard from './TelemetryCard';\r\nimport TelemetryCardMenu from './TelemetryCardMenu';\r\nimport ContextMenuOption from '../ContextMenuOption';\r\n\r\nimport DeviceLastUpdated from './DeviceLastUpdated';\r\n\r\nimport { faQuestionCircle, faPencil } from '@fortawesome/pro-solid-svg-icons';\r\n\r\nimport { getPermissionList, getUserTempScale, isDeviceOffline } from '../../Helpers.js'\r\n\r\nconst DEVICE_SCHEDULE_EACH_DAY = \"EachDay\";\r\nconst DEVICE_SCHEDULE_ALL_DAYS = \"AllDays\";\r\nconst ALL_DAYS = \"All\";\r\nconst DEVICE_SCHEDULE_DAYS = {\r\n 'All': 'All Days',\r\n 'Mon': 'Monday',\r\n 'Tue': 'Tuesday',\r\n 'Wed': 'Wednesday',\r\n 'Thr': 'Thursday',\r\n 'Fri': 'Friday',\r\n 'Sat': 'Saturday',\r\n 'Sun': 'Sunday'\r\n};\r\n\r\nconst SCHEDULE_DEVICE_DAYS = {\r\n 'All Days': 'All',\r\n 'Monday': 'Mon',\r\n 'Tuesday': 'Tue',\r\n 'Wednesday': 'Wed',\r\n 'Thursday': 'Thr',\r\n 'Friday': 'Fri',\r\n 'Saturday': 'Sat',\r\n 'Sunday': 'Sun'\r\n};\r\n\r\nconst scheduleStyles = makeStyles({\r\n switchLabel: {\r\n color: '#005db9'\r\n },\r\n\r\n scheduleRow: {\r\n fontSize: '14px',\r\n fontWeight: '900'\r\n },\r\n\r\n disabledRow: {\r\n color: '#9E9E9E'\r\n },\r\n\r\n evenRows: {\r\n backgroundColor: '#F5F5F5'\r\n },\r\n\r\n checkboxCell: {\r\n textAlign: 'center'\r\n },\r\n\r\n timePickerText: {\r\n '& input': {\r\n color: '#005db9',\r\n fontSize: '12px',\r\n fontWeight: 'normal',\r\n cursor: 'pointer'\r\n }\r\n },\r\n timePickerTextDisabled: {\r\n '& input': {\r\n color: '#005db9',\r\n fontSize: '12px',\r\n fontWeight: 'normal'\r\n }\r\n }\r\n});\r\n\r\nconst ScheduleTableBody = (props) => {\r\n\r\n var thisTab = props.thisTab;\r\n var permissions = getPermissionList(thisTab.props.record.location.permissions)\r\n const classes = scheduleStyles();\r\n var scheduleDays = thisTab.state.schedulingData.scheduleDays\r\n\r\n var schedulingEnabled = thisTab.state.schedulingData.schedulingEnabled;\r\n var allDaysChecked = schedulingEnabled && thisTab.state.schedulingData.type == DEVICE_SCHEDULE_ALL_DAYS;\r\n\r\n var getNearestTenInterval = () => {\r\n const now = new Date();\r\n\r\n var nearestValue = (Math.ceil((now.getMinutes() + 1) / 10) * 10);\r\n var minuteDiff = Math.abs(nearestValue - now.getMinutes());\r\n return new Date(now.getTime() + minuteDiff * 60000);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {\r\n var checked = event.target.checked;\r\n thisTab.setState(prevState => {\r\n let schedulingData = { ...prevState.schedulingData };\r\n schedulingData.schedulingEnabled = checked;\r\n return { schedulingData };\r\n }, function () {\r\n thisTab.updateScheduleData();\r\n });\r\n }}\r\n color=\"primary\"\r\n disabled={!permissions.Devices.Update}\r\n />\r\n \r\n {(thisTab.state.schedulingData.schedulingEnabled ? 'ON' : 'OFF')}\r\n Normal Start\r\n Savings Start\r\n \r\n\r\n {scheduleDays.map((scheduleDay, i) =>\r\n \r\n \r\n {(!allDaysChecked || i == 0) && schedulingEnabled &&\r\n {\r\n var checked = event.target.checked;\r\n thisTab.setState(prevState => {\r\n let schedulingData = { ...prevState.schedulingData };\r\n schedulingData.scheduleDays[i].enabled = checked;\r\n\r\n if (i == 0) {\r\n schedulingData.type = checked ? DEVICE_SCHEDULE_ALL_DAYS : DEVICE_SCHEDULE_EACH_DAY;\r\n }\r\n\r\n return { schedulingData };\r\n }, function () {\r\n thisTab.updateScheduleData();\r\n });\r\n }}\r\n color=\"primary\"\r\n disabled={!permissions.Devices.Update}\r\n />\r\n }\r\n \r\n {scheduleDay.name}\r\n \r\n {(!allDaysChecked || i == 0) && schedulingEnabled && scheduleDay.enabled &&\r\n {\r\n thisTab.setState(prevState => {\r\n let schedulingData = { ...prevState.schedulingData };\r\n if (date) {\r\n schedulingData.scheduleDays[i].start = date.format(\"HH:mm\");\r\n }\r\n else {\r\n schedulingData.scheduleDays[i].start = null;\r\n }\r\n\r\n return { schedulingData };\r\n }, function () {\r\n thisTab.updateScheduleData();\r\n });\r\n }}\r\n clearable\r\n clearLabel=\"Skip\"\r\n emptyLabel=\"Skip\"\r\n initialFocusedDate={getNearestTenInterval()}\r\n disabled={!permissions.Devices.Update}\r\n InputProps={{\r\n disableUnderline: true,\r\n className: permissions.Devices.Update ? classes.timePickerText : classes.timePickerTextDisabled\r\n }} />\r\n }\r\n \r\n \r\n {(!allDaysChecked || i == 0) && schedulingEnabled && scheduleDay.enabled &&\r\n {\r\n thisTab.setState(prevState => {\r\n let schedulingData = { ...prevState.schedulingData };\r\n if (date) {\r\n schedulingData.scheduleDays[i].end = date.format(\"HH:mm\");\r\n }\r\n else {\r\n schedulingData.scheduleDays[i].end = null;\r\n }\r\n return { schedulingData };\r\n }, function () {\r\n thisTab.updateScheduleData();\r\n });\r\n }}\r\n clearable\r\n clearLabel=\"Skip\"\r\n emptyLabel=\"Skip\"\r\n InputProps={{\r\n disableUnderline: true,\r\n className: permissions.Devices.Update ? classes.timePickerText : classes.timePickerTextDisabled\r\n }}\r\n disabled={!permissions.Devices.Update}\r\n />\r\n }\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nconst bodyStyles = {\r\n paperContainer: {\r\n border: '1px solid #E0E0E0',\r\n minHeight: '184px',\r\n position: 'relative'\r\n },\r\n\r\n emptySchedule: {\r\n border: '1px solid rgba(0, 0, 0, 0.12)',\r\n fontSize: '14px',\r\n fontWeight: 'bold',\r\n padding: '20px 12px',\r\n textAlign: 'center'\r\n },\r\n\r\n tempHeader: {\r\n padding: '12px 16px'\r\n },\r\n\r\n tempHeaderText: {\r\n margin: '0',\r\n fontSize: '10px',\r\n display: 'inline-block',\r\n lineHeight: '20px',\r\n verticalAlign: 'middle',\r\n },\r\n\r\n tempOptionButton: {\r\n cursor: 'pointer',\r\n height: '20px',\r\n float: 'right',\r\n color: '#005db9'\r\n },\r\n\r\n tempDisplay: {\r\n fontSize: '64px',\r\n margin: '0',\r\n position: 'absolute',\r\n top: '50% ',\r\n left: '50% ',\r\n transform: 'translate(-50%, -50%)'\r\n },\r\n\r\n scheduleTable: {\r\n borderCollapse: 'collapse',\r\n width: '100%',\r\n\r\n '& th': {\r\n fontSize: '10px',\r\n fontWeight: 'bold',\r\n textAlign: 'left',\r\n borderBottom: '1px solid #E0E0E0'\r\n },\r\n\r\n '& tr': {\r\n padding: '0 16px',\r\n height: '52px'\r\n }\r\n }\r\n}\r\n\r\nconst SettingsCard = (props) => {\r\n\r\n if (props.thisDevice) {\r\n var permissions = getPermissionList(props.thisDevice.location.permissions);\r\n\r\n var menuOptions = [\r\n \r\n ];\r\n\r\n if (permissions && permissions.Devices && permissions.Devices.Update) {\r\n menuOptions.unshift(\r\n\r\n // Edit settings option.\r\n \r\n );\r\n }\r\n }\r\n\r\n return (\r\n \r\n }\r\n key={`${props.parentKey}-${0}`}\r\n />\r\n );\r\n}\r\n\r\n\r\nclass DeviceScheduleTab extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.SetSetbackOffsetValue = this.SetSetbackOffsetValue.bind(this);\r\n\r\n var setbackOffset = null;\r\n\r\n var scheduleData = {\r\n schedulingEnabled: false\r\n };\r\n\r\n if (this.props.record && this.props.record.data) {\r\n if (this.props.record.data.SetbackOffset) {\r\n setbackOffset = this.props.record.data.SetbackOffset.Val;\r\n }\r\n\r\n if (this.props.record.data.Schedule) {\r\n\r\n var schedule = this.props.record.data.Schedule;\r\n\r\n scheduleData.schedulingEnabled = schedule.Active == 1;\r\n scheduleData.type = this.props.record.data.Schedule.Type ? this.props.record.data.Schedule.Type : DEVICE_SCHEDULE_ALL_DAYS;\r\n scheduleData.scheduleDays = [];\r\n\r\n var isAllDays = scheduleData.type == DEVICE_SCHEDULE_ALL_DAYS;\r\n\r\n // Convert the schedule from the API to the web format.\r\n for (var dayShort in DEVICE_SCHEDULE_DAYS) {\r\n var dayFull = DEVICE_SCHEDULE_DAYS[dayShort];\r\n\r\n if (schedule.hasOwnProperty(dayShort) || isAllDays) {\r\n var dayData = {};\r\n\r\n // Remove this if and go with the else case if we want to maintain schedule.\r\n if (isAllDays) {\r\n if (schedule.hasOwnProperty(ALL_DAYS)) {\r\n dayData = schedule[ALL_DAYS];\r\n }\r\n }\r\n else {\r\n dayData = schedule[dayShort];\r\n }\r\n\r\n // Default to disabled state.\r\n var dayScheduleData = {\r\n name: dayFull,\r\n enabled: false,\r\n start: null,\r\n end: null\r\n };\r\n\r\n // If it's active, or if it's \"All Days\". \"All Days\" does not return an active\r\n // flag on each individual day.\r\n if (isAllDays || dayData.Active == 1) {\r\n\r\n if (isAllDays || dayShort != ALL_DAYS) {\r\n dayScheduleData.enabled = true;\r\n }\r\n\r\n dayScheduleData.start = this.processScheduleEventTime(dayData.Normal);\r\n dayScheduleData.end = this.processScheduleEventTime(dayData.Savings);\r\n }\r\n\r\n scheduleData.scheduleDays.push(dayScheduleData);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n scheduleData.schedulingEnabled = false;\r\n scheduleData.type = DEVICE_SCHEDULE_ALL_DAYS;\r\n scheduleData.scheduleDays = [];\r\n }\r\n\r\n this.state = {\r\n schedulingData: scheduleData,\r\n SetbackOffsetValue: setbackOffset,\r\n }\r\n }\r\n\r\n processScheduleEventTime(scheduleObject) {\r\n if (!scheduleObject || scheduleObject.Active == 0) {\r\n\r\n // We handle \"off\" days with null values.\r\n return null;\r\n }\r\n else {\r\n return scheduleObject.Val;\r\n }\r\n }\r\n\r\n SetSetbackOffsetValue(value, tempErrorCallback) {\r\n var comp = this;\r\n // axios update device value - direct method\r\n const token = localStorage.getItem('authorizationToken');\r\n axios({\r\n method: 'patch',\r\n url: `/api/devices/${comp.props.record.id}/UpdateSetbackOffset`,\r\n data: {\r\n SetbackOffset: {\r\n Val: value\r\n }\r\n },\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n }).then(function (response) {\r\n // handle success\r\n comp.setState({ SetbackOffsetValue: value });\r\n comp.props.record.data.SetbackOffset.Val = value;\r\n\r\n comp.props.showNotification(\"elogic.toastNotifications.setSetbackOffset\");\r\n }).catch(function (error) {\r\n // handle error\r\n tempErrorCallback(comp.state.SetbackOffsetValue);\r\n comp.props.showNotification(\"elogic.toastNotifications.setSetbackOffsetError\", \"error\");\r\n console.log(error);\r\n });\r\n }\r\n\r\n componentDidMount() {\r\n }\r\n\r\n updateScheduleData() {\r\n // Need to convert the UI data structure back to the API expected value.\r\n var uiScheduleData = this.state.schedulingData;\r\n\r\n var scheduleObj = {\r\n Active: 0,\r\n Type: uiScheduleData.type\r\n };\r\n\r\n if (uiScheduleData.schedulingEnabled) {\r\n scheduleObj.Active = 1;\r\n\r\n var startIndex = 0;\r\n\r\n if (uiScheduleData.type == DEVICE_SCHEDULE_EACH_DAY) {\r\n // For each day schedule type, skip \"All Days\" object.\r\n startIndex = 1;\r\n }\r\n\r\n for (var i = startIndex; i < uiScheduleData.scheduleDays.length; i++) {\r\n var uiDay = uiScheduleData.scheduleDays[i];\r\n var currentDayShortName = SCHEDULE_DEVICE_DAYS[uiDay.name];\r\n\r\n var rootDayObj = {};\r\n\r\n var valueDay = uiDay;\r\n if (uiScheduleData.type == DEVICE_SCHEDULE_ALL_DAYS) {\r\n valueDay = uiScheduleData.scheduleDays[0];\r\n rootDayObj.Active = 1;\r\n }\r\n else {\r\n rootDayObj.Active = uiDay.enabled ? 1 : 0;\r\n }\r\n\r\n // Skip the first day because it's the \"all days\" option.\r\n\r\n // For \"EveryDay\" we follow the format of:\r\n //\"Day\": {\r\n // \"Active\": 1 (or 0),\r\n // \"Normal\": {\r\n // \"Active\": 1 (or 0),\r\n // \"Val\": \"HH:mm\"\r\n // },\r\n // \"Savings\": {\r\n // \"Active\": 1 (or 0),\r\n // \"Val\": \"HH:mm\"\r\n // }\r\n // }\r\n\r\n if (uiDay.enabled || uiScheduleData.type == DEVICE_SCHEDULE_ALL_DAYS) {\r\n rootDayObj[\"Normal\"] = this.getDayObjectForAPI(valueDay, \"start\");\r\n rootDayObj[\"Savings\"] = this.getDayObjectForAPI(valueDay, \"end\");\r\n }\r\n else {\r\n var inactiveDay = {\r\n Active: 0\r\n };\r\n\r\n rootDayObj[\"Normal\"] = inactiveDay; \r\n rootDayObj[\"Savings\"] = inactiveDay;\r\n }\r\n\r\n scheduleObj[currentDayShortName] = rootDayObj;\r\n }\r\n }\r\n\r\n var comp = this;\r\n // axios update device value - direct method\r\n const token = localStorage.getItem('authorizationToken');\r\n axios({\r\n method: 'patch',\r\n url: `/api/devices/${comp.props.record.id}/UpdateSchedule`,\r\n data: scheduleObj,\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n }).then(function (response) {\r\n // handle success\r\n\r\n comp.props.showNotification(\"elogic.toastNotifications.updateSchedule\");\r\n }).catch(function (error) {\r\n // handle error\r\n comp.props.showNotification(\"elogic.toastNotifications.updateScheduleError\", \"error\");\r\n console.log(error);\r\n });\r\n }\r\n\r\n getDayObjectForAPI(uiDay, dayType) {\r\n\r\n var dayObj = {\r\n \"Active\": 0,\r\n }\r\n\r\n if (uiDay[dayType] != null) {\r\n dayObj.Active = 1;\r\n dayObj.Val = uiDay[dayType];\r\n }\r\n\r\n return dayObj;\r\n }\r\n\r\n render() {\r\n const classes = this.props.classes;\r\n\r\n var thisTab = this;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n {!isDeviceOffline(thisTab.props.record) && \r\n \r\n \r\n
\r\n
}\r\n {isDeviceOffline(thisTab.props.record) && \r\n The device schedule is currently unavailable.\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\nexport default withStyles(bodyStyles)(connect(null, { showNotification })(DeviceScheduleTab));","import React, { Component, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport moment from \"moment\";\r\nimport axios from 'axios';\r\n\r\nimport {\r\n fetchEnd,\r\n fetchStart,\r\n showNotification,\r\n crudGetMatching\r\n} from 'react-admin';\r\n\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faInfoCircle } from '@fortawesome/pro-regular-svg-icons';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\n\r\nimport '../css/HelpModal.css';\r\nimport '../css/DeviceInfoModal.css';\r\nimport { getDeviceImageOrDefault, getLocationAddress } from '../../Helpers.js';\r\n\r\nconst headerActionIcon = {\r\n color: '#005db9',\r\n cursor: 'pointer',\r\n display: 'inline-block',\r\n margin: '0 14px',\r\n fontSize: '20px'\r\n}\r\n\r\nclass DeviceInfoModal extends Component {\r\n\r\n state = {\r\n error: false,\r\n showDialog: false,\r\n deviceData: {\r\n imageUrl: \"\",\r\n modelName: \"\",\r\n modelNumber: \"\",\r\n firmware: \"\",\r\n deviceType: \"\",\r\n name: \"\",\r\n location: \"\",\r\n subLocation: \"\",\r\n address: \"\",\r\n }\r\n };\r\n\r\n handleClick = () => {\r\n this.setState({ showDialog: true });\r\n };\r\n\r\n handleCloseClick = () => {\r\n this.setState({ showDialog: false });\r\n };\r\n\r\n setStateData = (deviceData) => {\r\n this.setState({ deviceData: deviceData });\r\n }\r\n\r\n componentDidMount() {\r\n\r\n var jsonHeaders = {\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0\r\n }\r\n };\r\n var comp = this;\r\n var deviceRecord = this.props.deviceRecord;\r\n\r\n // Get/Set Device Info\r\n // TODO - need a way to get Firmware version\r\n // - Need to implement sublocations\r\n // - How do we can model name vs model number from API?\r\n // TEMP Device Data\r\n\r\n // TODO: Remove this from the state\r\n this.state.deviceData.imageUrl = getDeviceImageOrDefault(deviceRecord);\r\n this.state.deviceData.modelName = deviceRecord.modelNumber;\r\n this.state.deviceData.modelNumber = deviceRecord.modelNumber;\r\n this.state.deviceData.deviceType = deviceRecord.deviceType;\r\n this.state.deviceData.name = deviceRecord.name;\r\n this.state.deviceData.location = deviceRecord.parentLocationName;\r\n this.state.deviceData.installationImage = deviceRecord.installationImageUrl;\r\n\r\n var firmware = 'N/A';\r\n if (deviceRecord.data && deviceRecord.data.sw && deviceRecord.data.sw.Release) {\r\n firmware = deviceRecord.data.sw.Release;\r\n }\r\n\r\n this.state.deviceData.firmware = firmware;\r\n\r\n // Build Address\r\n var address = \"\";\r\n if (deviceRecord.location) {\r\n if (deviceRecord.location.address && !deviceRecord.location.parentId) {\r\n this.state.deviceData.address = getLocationAddress(deviceRecord.location.address);\r\n }\r\n else if (deviceRecord.location.parentId) {\r\n const token = localStorage.getItem('authorizationToken');\r\n axios({\r\n method: 'get',\r\n url: `/api/locations/${deviceRecord.location.parentId}`,\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n }).then((results) => {\r\n\r\n // If it's a sublocation, we need to pull the location address data from the parent location.\r\n var deviceResults = this.state.deviceData;\r\n deviceResults.address = getLocationAddress(results.data.address);\r\n this.setState({\r\n deviceData: {\r\n ...deviceResults\r\n }\r\n })\r\n });\r\n }\r\n\r\n //Sublocation\r\n if (deviceRecord.location.parentId) {\r\n this.state.deviceData.subLocation = deviceRecord.location.name;\r\n }\r\n this.setState({ deviceData: this.state.deviceData });\r\n }\r\n }\r\n\r\n getDeviceImageRow() {\r\n if (this.props.deviceRecord.installationImageUrl) {\r\n return (\r\n
\r\n
\r\n Installation Image
\r\n \r\n
\r\n
\r\n );\r\n }\r\n else {\r\n return ();\r\n }\r\n }\r\n\r\n render() {\r\n const { showDialog } = this.state;\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n Device Info\r\n\r\n \r\n\r\n
\r\n\r\n
\r\n \"device\"
\r\n Powers
\r\n {this.state.deviceData.modelName}
\r\n {this.state.deviceData.deviceType}\r\n
\r\n\r\n
\r\n
\r\n Model
\r\n {this.state.deviceData.modelNumber}\r\n
\r\n
\r\n\r\n
\r\n
\r\n Firmware
\r\n {this.state.deviceData.firmware}\r\n
\r\n
\r\n\r\n
\r\n
\r\n Device Name
\r\n {this.state.deviceData.name}\r\n
\r\n
\r\n\r\n
\r\n
\r\n Location
\r\n {this.state.deviceData.location}
\r\n {this.state.deviceData.address}\r\n
\r\n
\r\n\r\n
\r\n
\r\n Sublocation
\r\n {this.state.deviceData.subLocation}\r\n
\r\n
\r\n\r\n
\r\n
\r\n Location Description
\r\n {this.props.deviceRecord.locationDescription}\r\n
\r\n
\r\n\r\n
\r\n
\r\n Commission Date
\r\n {moment(this.props.deviceRecord.commissionDate).toDate().toLocaleDateString()}\r\n
\r\n
\r\n\r\n
\r\n
\r\n Installation Date
\r\n {moment(this.props.deviceRecord.installationDate).toDate().toLocaleDateString()}\r\n
\r\n
\r\n\r\n
\r\n
\r\n Additional Notes
\r\n {this.props.deviceRecord.additionalNotes}\r\n
\r\n
\r\n\r\n {this.getDeviceImageRow()}\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\nconst mapStateToProps = state => ({\r\n\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n crudGetMatching,\r\n fetchEnd,\r\n fetchStart,\r\n showNotification\r\n};\r\n\r\nconst infoModalStyles = {\r\n installPhoto: {\r\n maxWidth: '400px'\r\n }\r\n}\r\n\r\nexport default withStyles(infoModalStyles)(connect(mapStateToProps, mapDispatchToProps)(\r\n DeviceInfoModal\r\n));","import React, { useState, useEffect } from 'react';\n\nimport axios from 'axios';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport { faSyncAlt, faClock } from '@fortawesome/pro-regular-svg-icons';\n\nimport DeviceInfoBanner from './DeviceInfoBanner';\nimport DeviceErrorHelpDialog from './DeviceErrorHelpDialog';\nimport { getUserTempScale } from '../../Helpers.js';\n\nconst bannerStyles = makeStyles({\n container: {\n left: '0',\n position: 'sticky',\n top: '0',\n zIndex: '1200'\n },\n spacedBanner: {\n marginRight: '20px'\n },\n tempUnit: {\n letterSpacing: '0'\n }\n});\n\nconst DeviceBanners = (props) => {\n const [banners, setBanners] = useState([]);\n const [sanitizeActive, setSanitizeActive] = useState(false);\n const [showSanitizationModal, setShowSanitizationModal] = useState(false);\n const [checkHash, setCheckHash] = useState(\"\");\n const [refreshTimer, setRefreshTimer] = useState();\n\n const useStyles = bannerStyles();\n\n useEffect(() => {\n return () => {\n if (refreshTimer) {\n clearInterval(refreshTimer);\n }\n };\n }, [refreshTimer]);\n\n const checkForUpdatedData = function (refreshCallback, refreshTimer) {\n const token = localStorage.getItem('authorizationToken');\n axios.get(`/api/Devices/${props.record.id}`, {\n headers: {\n \"Cache-control\": \"no-cache, no-store\",\n \"Pragma\": \"no-cache\",\n \"Expires\": 0,\n \"Authorization\": `Bearer ${token}`\n }\n })\n .then(function (results) {\n if (results.data.CheckHash != props.record.CheckHash) {\n clearInterval(refreshTimer);\n var ribbons = banners;\n ribbons.push(\n ()\n );\n\n setBanners([...ribbons]);\n }\n });\n }\n\n const addSanitizationBanner = function(record) {\n var ribbons = banners;\n\n const onclick = function () {\n setShowSanitizationModal(true);\n }\n\n let sanitizeSetpoint = props.record.data.SanitizeEvent.MixOutletSetpoint;\n\n ribbons.push(\n \n The device is sanitizing.\n Sanitization Setpoint: {sanitizeSetpoint}°{getUserTempScale()}.\n Time Remaining: {record.sanitizeEndTime}.\n \n }\n actionText={\"Show Event Details\"}\n callback={onclick}\n />\n );\n\n setBanners(ribbons);\n }\n\n if (checkHash != props.record.CheckHash) {\n setCheckHash(props.record.CheckHash);\n\n var refreshPage = () => { window.location.reload(); };\n\n clearInterval(refreshTimer);\n var timer = window.setInterval(() => {\n checkForUpdatedData(refreshPage, timer);\n }, 30000);\n\n setRefreshTimer(timer);\n }\n\n if (!sanitizeActive && props.record.sanitizeEndTime != null) {\n setSanitizeActive(true);\n addSanitizationBanner(props.record);\n }\n\n const closeSanitizationModal = function () {\n setShowSanitizationModal(false);\n }\n\n return (\n
\n {banners}\n \n
\n );\n}\n\nexport default DeviceBanners;","import React, { useState, useEffect } from 'react';\r\nimport { Show, TabbedShowLayout, Tab, SimpleShowLayout, useAuthState } from 'react-admin';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport axios from 'axios';\r\n\r\nimport ScrollToTopOnMount from '../ScrollToTop'\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\r\n\r\nimport WattsLoading from '../WattsLoading';\r\n\r\nimport DeviceDashboardTab from './DeviceDashboardTab';\r\nimport DeviceMonitorTab from './DeviceMonitorTab';\r\nimport DeviceScheduleTab from './DeviceScheduleTab';\r\n\r\nimport NoAccessPage from '../NoAccessPage';\r\nimport DeviceInfoModal from './DeviceInfoModal';\r\nimport DeviceBanners from './DeviceBanners';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPencil } from '@fortawesome/pro-regular-svg-icons';\r\n\r\nimport { getPermissionList, getDeviceImageOrDefault, getHelperStyles, getRecordOutletTemp } from '../../Helpers.js'\r\n\r\nimport '../css/Breadcrumbs.css';\r\n\r\nconst headerStyles = makeStyles({\r\n header: {\r\n padding: '30px 15.3%',\r\n background: '#fff',\r\n position: 'relative'\r\n },\r\n\r\n headerTextContent: {\r\n paddingTop: '34px'\r\n },\r\n\r\n headerImage: {\r\n height: '200px',\r\n float: 'right'\r\n },\r\n\r\n tempReadout: {\r\n margin: '0',\r\n fontSize: '64px',\r\n letterSpacing: '-5px'\r\n },\r\n\r\n mainTitle: {\r\n fontWeight: '900',\r\n fontSize: '44px',\r\n margin: '5px 0px',\r\n width: '100%'\r\n },\r\n\r\n subTitle: {\r\n 'color': '#666666',\r\n 'font-family': 'Roboto',\r\n 'font-size': '16px',\r\n 'font-weight': 'normal',\r\n 'font-stretch': 'normal',\r\n 'font-style': 'normal',\r\n 'line-height': '1.5',\r\n 'letter-spacing': '-0.16px'\r\n },\r\n\r\n topLeftInfo: {\r\n color: '#666',\r\n fontSize: '10px',\r\n marginBottom: '15px'\r\n },\r\n\r\n counterContainer: {\r\n display: 'inline-block',\r\n color: '#665C5C',\r\n marginTop: '10px'\r\n },\r\n\r\n counter: {\r\n display: 'inline-block',\r\n height: '30px',\r\n width: '50px',\r\n marginRight: '10px'\r\n },\r\n\r\n counterIcon: {\r\n display: 'inline-block',\r\n height: '100%'\r\n },\r\n\r\n counterNumber: {\r\n float: 'right',\r\n margin: '0 10px 0 0',\r\n lineHeight: '30px',\r\n verticalAlign: 'middle'\r\n },\r\n\r\n iconContainer: {\r\n position: 'absolute',\r\n top: '34px',\r\n right: '15.3%'\r\n },\r\n\r\n headerActionIcon: {\r\n color: '#005DB9',\r\n cursor: 'pointer',\r\n display: 'inline-block',\r\n margin: '0 14px',\r\n fontSize: '20px'\r\n },\r\n\r\n overline: {\r\n fontFamily: 'Roboto',\r\n fontSize: '12px',\r\n fontWeight: 'normal',\r\n fontStretch: 'normal',\r\n fontStyle: 'normal',\r\n lineHeight: 1.33,\r\n letterSpacing: '-0.12px',\r\n color: 'rgba(0, 0, 0, 0.87)'\r\n },\r\n\r\n brandContainer: {\r\n textAlign: 'right'\r\n },\r\n\r\n tempBrandContainer: {\r\n borderBottom: '1px solid rgba(0, 0, 0, 0.12)',\r\n marginBottom: '35px',\r\n paddingBottom: '25px'\r\n },\r\n\r\n brandImage: {\r\n position: 'relative',\r\n top: '50%',\r\n transform: 'translateY(-50%)'\r\n }\r\n});\r\n\r\nconst DeviceHeader = (props) => {\r\n const classes = headerStyles();\r\n\r\n const permissions = getPermissionList(props.record.location.permissions);\r\n\r\n var locationName = '';\r\n if (props.record.location) {\r\n\r\n if (props.record.location.parentId) {\r\n locationName = `${props.record.parentLocationName}, ${props.record.location.name}`;\r\n }\r\n else {\r\n locationName = props.record.location.name;\r\n }\r\n }\r\n\r\n var deviceOutletTemp = getRecordOutletTemp(props.record, \"- - -\", true);\r\n\r\n const classTemplate = getHelperStyles()();\r\n\r\n const tempReadoutClass = classes.tempReadout + ' ' + classTemplate.heading2;\r\n const mainTitleClass = classes.mainTitle + ' ' + classTemplate.heading3;\r\n\r\n // For sublocations, they'll have a parentId for the parent location.\r\n var parentLocationId = props.record.location.parentId;\r\n if (!parentLocationId) {\r\n // But for parent locations, they won't have a parent id, so we use the location id itself.\r\n parentLocationId = props.record.location.locationId;\r\n }\r\n\r\n return (\r\n
\r\n\r\n \r\n \r\n \r\n Locations\r\n \r\n \r\n {props.record.parentLocationName}\r\n \r\n

\r\n {props.record.name}\r\n

\r\n
\r\n
\r\n \r\n {permissions && permissions.Devices && permissions.Devices.Update && }\r\n
\r\n \r\n \r\n \r\n \r\n
Mixed Outlet Temp
\r\n

{deviceOutletTemp}

\r\n
\r\n \r\n \"POWERS\"\r\n \r\n
\r\n {props.record.deviceType}\r\n {props.record.name}\r\n

{locationName}

\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nconst bodyStyles = {\r\n locationBody: {\r\n padding: '0 15.3%',\r\n \"&:first-child\": {\r\n paddingTop: 0\r\n },\r\n \"&:last-child\": {\r\n paddingBottom: 0\r\n }\r\n },\r\n\r\n tabContainer: {\r\n \"& .MuiTabs-root\": {\r\n background: 'white',\r\n padding: '0 15.3%'\r\n }\r\n },\r\n\r\n tabContent: {\r\n padding: '0 15.3px'\r\n }\r\n}\r\n\r\nconst DeviceViewLayout = (props) => {\r\n\r\n const [helpObject, setHelpObject] = useState();\r\n const [helpError, setHelpError] = useState();\r\n const [pendingHelp, setPendingHelp] = useState(false);\r\n\r\n\r\n useEffect(() => {\r\n if (!pendingHelp && !helpObject && !helpError) {\r\n\r\n setPendingHelp(true);\r\n\r\n const token = localStorage.getItem('authorizationToken');\r\n axios({\r\n method: 'get',\r\n url: `/api/AppSettings/helpcontent`,\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n }).then(function (response) {\r\n\r\n var helpObject = {};\r\n\r\n response.data.forEach((result) => {\r\n helpObject[result.key] = result;\r\n });\r\n\r\n\r\n setHelpObject(helpObject);\r\n }).catch(function (error) {\r\n setHelpError(error);\r\n });\r\n }\r\n });\r\n\r\n\r\n const tabbedShowLayoutStyles = {\r\n 'content': {\r\n 'padding': '0 13%'\r\n }\r\n };\r\n\r\n const StyledTabbedShowLayout = withStyles(tabbedShowLayoutStyles)(TabbedShowLayout);\r\n\r\n const { classes, ...other } = props;\r\n const bodyClasses = props.classes;\r\n\r\n if (props.record && props.record.errorNumber) {\r\n return {props.record.errorMessage}\r\n }\r\n else if (!helpObject && !helpError) {\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 \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nclass DeviceViewComponent extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n infoBanners: []\r\n }\r\n }\r\n\r\n shouldComponentUpdate(nextProps, nextState) {\r\n if (this.state === nextState) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n render() {\r\n\r\n const layoutStyles = {\r\n 'root': {\r\n 'padding': 0,\r\n '&:first-child, &last-child': {\r\n 'padding': 0\r\n }\r\n }\r\n };\r\n\r\n const showStyles = {\r\n 'main': {\r\n 'margin': 0\r\n },\r\n 'card': {\r\n 'background': 'inherit',\r\n 'boxShadow': 'none',\r\n 'overflow': 'visible'\r\n }\r\n };\r\n\r\n const StyledShow = withStyles(showStyles)(Show);\r\n const StyledLayout = withStyles(layoutStyles)(SimpleShowLayout);\r\n\r\n const { classes, ...other } = this.props;\r\n const bodyClasses = this.props.classes;\r\n\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\nconst DeviceView = (props) => {\r\n const { loading, authenticated } = useAuthState();\r\n\r\n if (loading) {\r\n return ;\r\n }\r\n\r\n if (!authenticated) {\r\n return
;\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default (\r\n withStyles(bodyStyles)(DeviceView)\r\n);","import React from 'react';\nimport { useForm } from 'react-final-form';\r\n\nimport { TextInput, SelectInput, BooleanInput, required, FormDataConsumer } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport Grid from '@material-ui/core/Grid';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faBell, faGlobe } from '@fortawesome/pro-solid-svg-icons';\n\nimport FormHeader from '../FormHeader';\nimport RequiredFieldNote from '../RequiredFieldNote';\n\nconst layoutStyles = makeStyles({\n 'icon': {\n 'color': '#005DB9',\n 'font-size': '32px'\n },\n 'gridBottom': {\n 'marginBottom': '48px',\n 'paddingTop': '40px'\n },\n 'subText': {\r\n 'color': '#333',\r\n 'fontSize': '14px',\r\n 'lineHeight': 1.43,\r\n 'letterSpacing': '-0.14px'\r\n }\n});\n\nconst languageOptions = [\n {\n id: 'en',\n name: 'English'\n }\n];\n\nconst tempScaleOptions = [\n {\n id: 'F',\n name: 'Fahrenheit'\n },\n {\n id: 'C',\n name: 'Celsius'\n }\n];\n\nconst measurementScaleOptions = [\n {\n id: 'I',\n name: 'Imperial'\n },\n {\n id: 'M',\n name: 'Metric'\n }\n];\n\nconst SettingsForm = (props) => {\n\n const useStyles = layoutStyles();\n const form = useForm();\n\n return (\n
\n \n \n \n \n \n \n \n \n

Notifications

\n

Choose how you’d like to receive notifications about your locations and devices.

\n
\n \n \n\n \n \n \r\n {({ formData }) => {\r\n\r\n // Recursively parses digits from a string.\r\n function recursiveDigits(string) {\r\n\r\n if (string) {\r\n let matches = string.match(/(\\d+)/);\r\n\r\n if (matches && matches.length > 0) {\r\n let index = matches['index'];\r\n let restOfString = string.substring(index + matches[0].length);\r\n\r\n return matches[0] + recursiveDigits(restOfString);\r\n }\r\n }\r\n\r\n // Otherwise, return empty string to end recursion.\r\n return '';\r\n }\r\n\r\n var validation = [];\r\n validation.push(\r\n (() => {\r\n // This validation is triggered by react-admin in 2 different orders depending\r\n // on what triggers the change.\r\n // If the phone number field is changed, the sms notification toggle represents\r\n // the correct current value.\r\n // If the sms notification toggle is changed first, this function gets called\r\n // before that change takes effect in the formData value, so the old value is\r\n // passed in here, not the new one. This is a problem. So we check what field \r\n // is active.\r\n const smsChangedField = form.getFieldState(\"smsNotificationEnabled\");\r\n var smsChanged = false;\r\n\r\n // Determine if the sms field is what changed.\r\n if (smsChangedField) {\r\n smsChanged = smsChangedField.active;\r\n }\r\n\r\n var smsValue = formData.smsNotificationEnabled;\r\n\r\n if (smsChanged) {\r\n // If the sms field changed, invert it, because it's a boolean and the next\r\n // state will be the opposite of what it currently is.\r\n smsValue = !smsValue;\r\n }\r\n\r\n return Object.assign(\r\n (value) => {\r\n if (!value && smsValue) {\r\n // If it's required but not filled in, return the required message.\r\n return 'Required'\r\n }\r\n else {\r\n\r\n let phoneDigits = recursiveDigits(value);\r\n\r\n if (value && phoneDigits.length !== 10) {\r\n return 'Please enter a valid phone number. (e.g., 555-123-4567)';\r\n }\r\n else {\r\n // react-admin specifies to return undefined when the validation is\r\n // successful.\r\n return undefined;\r\n }\r\n }\r\n },\r\n // Need to do this assign for react-admin to show the '*' in front of\r\n // the field label.\r\n { isRequired: formData.smsNotificationEnabled }\r\n );\r\n })()\r\n );\r\n\r\n return (\n <>\n \n \r\n \r\n );\r\n }}\r\n \n \n \n
\n
\n \n \n

Preferences

\n

Select your preferred language and units of measurement.

\n
\n \n \n \n \n \n
\n
\n \n \n
\n
\n );\n\n};\n\nconst BoolInputLeftLabel = (props) => {\n\n const boolStyles = makeStyles({\n 'boolGrid': {\n 'marginBottom': '24px'\n },\n 'boolLabel': {\n 'padding': '16px 0'\n },\n 'boolButton': {\n 'display': 'inline-block',\n 'float': 'right'\n }\n });\n\n const useStyles = boolStyles();\n\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default SettingsForm;","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { Edit, SimpleForm, useAuthState } from 'react-admin';\r\nimport ScrollToTopOnMount from '../ScrollToTop'\r\nimport WattsToolbar from '../WattsToolbar';\r\nimport SettingsFormLayout from './SettingsFormLayout';\r\nimport WattsLoading from '../WattsLoading';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faCheckCircle } from '@fortawesome/pro-solid-svg-icons';\r\n\r\n// CSS\r\nimport '../css/LandingPage.css';\r\n\r\nconst editStyles = makeStyles({\r\n 'main': {\r\n 'margin': '0'\r\n }\r\n});\r\n\r\nconst EditSettings = ({ hasCreate, hasEdit, hasList, hasShow, ...props }) => {\r\n\r\n const editUseStyles = editStyles();\r\n\r\n const { loading, authenticated } = useAuthState();\r\n\r\n if (loading) {\r\n return ;\r\n }\r\n\r\n if (!authenticated) {\r\n return
;\r\n }\r\n\r\n return (\r\n
\r\n \r\n

Settings saved.

} {...props}>\r\n }>\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default EditSettings;","import React from 'react';\nimport { TextInput } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport Button from '@material-ui/core/Button';\nimport Grid from '@material-ui/core/Grid';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faUserAlt } from '@fortawesome/pro-solid-svg-icons';\nimport { faPencil } from '@fortawesome/pro-regular-svg-icons';\nimport { authProvider } from '../../AuthProvider';\n\nimport FormHeader from '../FormHeader';\n\nconst layoutStyles = makeStyles({\n 'icon': {\n 'color': '#005DB9',\n 'font-size': '32px'\n },\n 'gridBottom': {\n 'marginBottom': '48px',\n 'paddingTop': '40px'\n },\n 'subText': {\n 'color': '#333',\n 'fontSize': '14px',\n 'lineHeight': 1.43,\n 'letterSpacing': '-0.14px'\n },\n 'actionText': {\n 'color': '#005DB9',\n 'fontSize': '14px',\n 'lineHeight': 1.43,\n 'letterSpacing': '-0.14px'\n },\n 'fab': {\n 'background': '#005DB9',\n 'border-radius': '100%',\n 'box-shadow': '0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0,0,0,.12)',\n 'color': '#FFF',\n 'fontSize': '20px',\n 'height': '56px',\n 'left': '100%',\n 'transform': 'translateY(-50%)',\n 'minHeight': '56px',\n 'minWidth': '56px',\n 'position': 'absolute',\n 'marginLeft': '-14.2%',\n 'width': '56px',\n 'z-index': '100',\n\n '&:hover, &:active, &:focus': {\n 'background': '#005DB9'\n }\n },\n 'container': {\n 'background': '#FFF',\n 'minHeight': '100vh'\n }\n});\n\nconst AccountForm = (props) => {\n\n const useStyles = layoutStyles();\n const userAccount = JSON.parse(sessionStorage.getItem('userAccount'))\n\n return (\n
\n \n\n \n \n \n \n \n \n \n \n

Account Info

\n

The following information is managed outside the Watts OnSite app.

\n

Click to make changes.

\n
\n \n \n\n \n\n \n\n \n \n
\n
\n \n \n
\n
\n );\n\n};\n\n\nexport default AccountForm;","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Edit, SimpleForm, useAuthState } from 'react-admin';\nimport ScrollToTopOnMount from '../ScrollToTop'\nimport WattsToolbar from '../WattsToolbar';\nimport AccountFormLayout from './AccountFormLayout';\nimport WattsLoading from '../WattsLoading';\n\n// CSS\nimport '../css/LandingPage.css';\n\nconst editStyles = makeStyles({\n 'main': {\n 'margin': '0'\n }\n});\n\nconst EditAccount = ({ hasCreate, hasEdit, hasList, hasShow, ...props }) => {\n\n const editUseStyles = editStyles();\n\n const { loading, authenticated } = useAuthState();\n\n if (loading) {\n return ;\n }\n\n if (!authenticated) {\n return
;\n }\n\n return (\n
\n \n \n \n \n \n \n
\n );\n};\n\nexport default EditAccount;","import React, { Fragment } from 'react';\r\nimport axios from 'axios';\r\nimport { showNotification } from 'react-admin';\r\nimport { connect } from 'react-redux';\r\n\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\n\r\nclass OwnershipTransferModal extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n pendingTransfers: []\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const transfers = JSON.parse(localStorage.getItem(\"pendingLocationTransfers\"));\r\n if (transfers && transfers.length) {\r\n this.setState({\r\n pendingTransfers: transfers\r\n });\r\n }\r\n else {\r\n\r\n const token = localStorage.getItem('authorizationToken');\r\n var compThis = this;\r\n axios.get(\"/api/User\", {\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n })\r\n .then(function (response) {\r\n if (response && response.data) {\r\n\r\n var pendingTransfers = JSON.stringify(response.data.pendingLocationTransfers);\r\n\r\n localStorage.setItem('pendingLocationTransfers', pendingTransfers);\r\n\r\n compThis.setState({\r\n pendingTransfers: response.data.pendingLocationTransfers\r\n });\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n handleClose() {\r\n this.setState({ transferWindowOpen: false });\r\n }\r\n\r\n handleOpen() {\r\n this.setState({ transferWindowOpen: true });\r\n }\r\n\r\n handleTransferSelection(accepted = false) {\r\n var comp = this;\r\n var urlSuffix = accepted ? 'Accept' : 'Decline';\r\n\r\n const token = localStorage.getItem('authorizationToken');\r\n axios.post(`/api/Locations/${comp.state.pendingTransfers[0].locationId}/Transfer/${urlSuffix}`, {}, {\r\n headers: {\r\n \"Cache-control\": \"no-cache, no-store\",\r\n \"Pragma\": \"no-cache\",\r\n \"Expires\": 0,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n })\r\n .then(function () {\r\n var transfers = comp.state.pendingTransfers;\r\n transfers.shift();\r\n\r\n comp.setState({ pendingTransfers: transfers });\r\n\r\n localStorage.setItem(\"pendingLocationTransfers\", JSON.stringify(transfers));\r\n })\r\n .catch(function () {\r\n });\r\n }\r\n\r\n render() {\r\n const currentTransfer = this.state.pendingTransfers[0];\r\n if (currentTransfer) {\r\n return (\r\n 0}\r\n onClose={this.handleClose.bind(this)}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n >\r\n {\"Transfer Ownership\"}\r\n \r\n \r\n {currentTransfer.invitor.firstName} {currentTransfer.invitor.lastName} would like to transfer\r\n ownership of the location \"{currentTransfer.locationName}\" and its devices to you.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n else {\r\n return ();\r\n }\r\n }\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n\r\n});\r\nconst mapDispatchToProps = {\r\n showNotification\r\n};\r\n//export default DeviceDashboardTab;\r\nexport default connect(mapStateToProps, mapDispatchToProps)(\r\n OwnershipTransferModal\r\n);","import React, { useState } from 'react';\r\nimport { useAuthState, List } from \"react-admin\";\r\nimport { Link } from 'react-router-dom';\r\nimport { withStyles, makeStyles } from '@material-ui/core/styles';\r\n\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faMapMarkerAlt } from '@fortawesome/pro-solid-svg-icons';\r\nimport { faPlus, faPlusCircle } from '@fortawesome/pro-regular-svg-icons';\r\n\r\nimport FormHeader from './FormHeader';\r\nimport WattsLoading from './WattsLoading';\r\n\r\nimport { CardGrid } from './CardGrid';\r\nimport { ADD_BUTTON_STYLES } from '../Helpers.js';\r\nimport OwnershipTransferModal from './OwnershipTransferModal';\r\nimport LocationBanner from './Locations/LocationBanner';\r\n\r\nCardGrid.defaultProps = {\r\n data: {},\r\n ids: [],\r\n};\r\n\r\nconst noLocationStyles = makeStyles({\r\n container: {\r\n textAlign: 'center',\r\n paddingTop: '180px'\r\n },\r\n\r\n largeIcon: {\r\n fontSize: '100px',\r\n color: '#D7D7D7'\r\n },\r\n\r\n message: {\r\n color: '#626262',\r\n fontSize: '16px',\r\n margin: 0,\r\n marginTop: '30px'\r\n },\r\n\r\n addIcon: {\r\n fontSize: '16px',\r\n verticalAlign: 'middle'\r\n }\r\n});\r\n\r\nconst NoLocationMessage = () => {\r\n const classes = noLocationStyles();\r\n return (\r\n
\r\n \r\n

Click to add your first location.

\r\n
\r\n );\r\n}\r\n\r\nexport const CardList = (props) => { \r\n\r\n const [data, setData] = useState({});\r\n const useStyles = makeStyles({\r\n content: {\r\n margin: '0 13%',\r\n background: 'none',\r\n border: 'none',\r\n boxShadow: 'none'\r\n }\r\n });\r\n\r\n const classes = useStyles();\r\n\r\n const { loading, authenticated } = useAuthState();\r\n\r\n if (loading) {\r\n return ;\r\n }\r\n\r\n if (!authenticated) {\r\n return
;\r\n }\r\n\r\n const FloatingActionButton = withStyles(ADD_BUTTON_STYLES)(Button);\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n \r\n } title=\"All Cards\" perPage={999} pagination={null} actions={null} {...props}>\r\n \r\n \r\n
\r\n \r\n \r\n );\r\n};\r\n\r\n","import React from 'react';\r\nimport { TextField } from \"react-admin\";\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport CardHeader from '@material-ui/core/CardHeader';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faUniversity, faGavel, faHospital, faHotel, faCity, faUserNurse, faChairOffice, faRunning, faSchool, faAmbulance } from '@fortawesome/pro-solid-svg-icons';\r\nimport { faMapMarkerAlt, faClock, faExclamationTriangle, faWifiSlash, faCheckCircle, faTimesOctagon } from '@fortawesome/pro-regular-svg-icons'\r\n\r\nconst styles = {\r\n card: {\r\n border: '1px solid #E0E0E0',\r\n boxShadow: 'none',\r\n display: 'inline-block',\r\n margin: '12px',\r\n verticalAlign: 'top',\r\n width: 328\r\n },\r\n\r\n locationType: {\r\n color: '#666',\r\n fontSize: '10px',\r\n fontWeight: 'bold',\r\n margin: 0,\r\n },\r\n\r\n locationTypeHeader: {\r\n marginBottom: '56px',\r\n padding: '12px 0 0 16px'\r\n },\r\n\r\n locationIcon: {\r\n color: '#757575',\r\n fontSize: '32px',\r\n display: 'inline-block',\r\n },\r\n\r\n locationCardContent: {\r\n padding: '0 0 0 22px',\r\n marginBottom: 28\r\n },\r\n\r\n locationInfo: {\r\n display: 'inline-block',\r\n marginLeft: '20px'\r\n },\r\n\r\n locationName: {\r\n color: '#000',\r\n fontSize: '16px',\r\n fontWeight: 'bold'\r\n },\r\n\r\n locationAddress: {\r\n color: '#767676',\r\n fontSize: '12px',\r\n margin: 0\r\n },\r\n\r\n footerOffline: {\r\n backgroundColor: '#F2F2F2',\r\n padding: '10px 24px',\r\n height: '25px'\r\n },\r\n\r\n footerOnline: {\r\n backgroundColor: '#CCF3CE',\r\n padding: '10px 24px',\r\n height: '25px'\r\n },\r\n\r\n footerWarning: {\r\n backgroundColor: '#FFE7D0',\r\n padding: '10px 24px',\r\n height: '25px'\r\n },\r\n\r\n footerError: {\r\n backgroundColor: '#FFCCCC',\r\n padding: '10px 24px',\r\n height: '25px'\r\n },\r\n\r\n statusIcon: {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n display: 'inline-block',\r\n fontSize: '20px',\r\n height: '100%',\r\n marginRight: '10px'\r\n },\r\n\r\n statusMessage: {\r\n display: 'inline-block',\r\n fontSize: '12px',\r\n fontWeight: 'bold',\r\n lineHeight: '1.33',\r\n letterSpacing: '-0.12px',\r\n margin: 0,\r\n height: '100%',\r\n verticalAlign: 'middle',\r\n color: 'rgba(0, 0, 0, 0.54)'\r\n },\r\n\r\n footerCardContent: {\r\n \"&:last-child\": {\r\n paddingBottom: '5px'\r\n }\r\n }\r\n};\r\n\r\nconst LocationField = withStyles(styles)(({ classes, record = {} }) =>

{record.address.city}, {record.address.state_province}

);\r\nLocationField.defaultProps = { label: 'Name' };\r\n\r\nconst LocationIcon = withStyles(styles)(({ classes, locationType = 99 }) => {\r\n var map = {\r\n 1: faUniversity,\r\n 2: faSchool,\r\n 3: faHospital,\r\n 4: faUserNurse,\r\n 5: faAmbulance,\r\n 6: faHotel,\r\n 7: faChairOffice,\r\n 8: faRunning,\r\n 9: faCity,\r\n 10: faGavel\r\n }\r\n if (Object.keys(map).indexOf(\"\" + locationType) === -1) {\r\n return ;\r\n }\r\n else {\r\n return ;\r\n }\r\n});\r\n\r\nconst StatusBar = withStyles(styles)(({ classes, status }) => {\r\n\r\n var footerClass = null;\r\n var footerIcon = null;\r\n\r\n if (status) {\r\n switch (status.id) {\r\n case 1: // Device errors\r\n footerClass = classes.footerError;\r\n footerIcon = faTimesOctagon;\r\n break;\r\n\r\n case 2: // Alerts\r\n case 5: // Savings mode\r\n footerClass = classes.footerWarning;\r\n footerIcon = faExclamationTriangle;\r\n break;\r\n\r\n case 4: // Sanitizing\r\n footerClass = classes.footerError;\r\n footerIcon = faClock;\r\n break;\r\n\r\n case 3: // Device offline\r\n footerClass = classes.footerWarning;\r\n footerIcon = faWifiSlash;\r\n break;\r\n\r\n case 6: // No devices added\r\n footerClass = classes.footerOffline;\r\n footerIcon = null;\r\n break;\r\n default:\r\n footerClass = classes.footerOnline;\r\n footerIcon = faCheckCircle;\r\n }\r\n }\r\n\r\n return (\r\n \r\n {status && status.id != 6 &&\r\n \r\n }\r\n\r\n {status &&\r\n

{status.name}

\r\n }\r\n
\r\n )\r\n});\r\n\r\nexport const LocationCard = withStyles(styles)(({ classes, dataRecord = {}, basePath }) => {\r\n\r\n // TODO: Localize\r\n var buildingType = {\r\n 'name': 'Unknown'\r\n };\r\n\r\n if (dataRecord.buildingType) {\r\n buildingType = dataRecord.buildingType;\r\n }\r\n\r\n return (\r\n \r\n \r\n

{buildingType.name}

}\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});","import React from 'react';\nimport { Admin, Resource } from 'react-admin';\nimport { Route, BrowserRouter } from 'react-router-dom';\nimport { Redirect } from \"react-router\";\nimport { useAuthState } from \"react-admin\";\n\n// Localization\nimport polyglotI18nProvider from 'ra-i18n-polyglot';\nimport englishMessages from 'ra-language-english';\n\nimport { authProvider } from './AuthProvider';\nimport WattsTheme from './Colors/WattsTheme';\nimport WattsLayout from './Components/WattsLayout';\nimport WattsLoginPage from './Components/WattsLoginPage';\n\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport MomentUtils from '@date-io/moment';\n\n// Locations\nimport CreateLocation from './Components/Locations/CreateLocation';\nimport EditLocation from './Components/Locations/EditLocation';\nimport ViewLocation from './Components/Locations/LocationView';\n\n// Dashboard\nimport { Dashboard } from './Components/Dashboard';\nimport { routes } from './Components/Dashboard/routes';\n\n// Devices\nimport CreateDevice from './Components/Devices/CreateDevice';\nimport EditDevice from './Components/Devices/EditDevice';\nimport DeviceView from './Components/Devices/DeviceView';\n\n// User\nimport EditSettings from './Components/Settings/EditSettings';\nimport EditAccount from './Components/Account/EditAccount';\n\nimport dataProvider from './dataProvider';\nimport { CardList } from './Components/CardList';\nimport { LocationCard } from './Components/Locations/LocationCard';\nimport { prioritySort } from './Helpers.js';\n\nenglishMessages.elogic = {\n loading: 'Loading...',\n toastNotifications: {\n setMixedOutletSetpointValue: 'Updated Mixed Outlet Setpoint',\n setMixedOutletSetpointValueError: 'Error Updating Mixed Outlet Setpoint',\n setHighTempDiffValue: 'Updated High Temperature Alert Differential',\n setHighTempDiffValueError:\n 'Error Updating High Temperature Alert Differential',\n setLowTempDiffValue: 'Updated Low Temperature Alert Differential',\n setLowTempDiffValueError:\n 'Error Updating Low Temperature Alert Differential',\n setSetbackOffset: 'Updated Setback Offset',\n setSetbackOffsetError: 'Error Updating Setback Offset',\n inviteUser: 'User invited.',\n inviteUserError: 'Failed to invite User',\n rescindUser: 'Access rescinded.',\n rescindUserError: 'Failed to Rescind User',\n transferOwnership: 'Ownership Transfer Requested',\n transferOwnershipError: 'Failed to Create Transfer Ownership Request',\n setClearMixedOutletHigh: 'The mixed outlet high value has been cleared.',\n setClearMixedOutletHighError:\n 'There was an error clearing the mixed outlet high value.',\n setClearMixedOutletLow: 'The mixed outlet low value has been cleared.',\n setClearMixedOutletLowError:\n 'There was an error clearing the mixed outlet low value.',\n updateSchedule: 'The schedule has been updated.',\n updateScheduleError: 'There was an error updating the schedule.',\n leaveMessage: 'Location left.',\n leaveMessageError: 'There was an error trying to leave this location.',\n deviceCreated: 'Device created.',\n deviceUpdated: 'Device updated.',\n deviceDeleted: 'Device deleted.',\n deviceDeleteError: 'Error removing device.',\n locationCreated: 'Location created.',\n locationUpdated: 'Location updated.',\n locationDeleted: 'Location deleted.',\n locationDeleteError: 'Error removing location.',\n cannotDeleteLocationWithDevices:\n 'Cannot delete location as it has active devices. User must delete devices or move devices to another location.',\n },\n};\n\nconst i18nProvider = polyglotI18nProvider((locale) => englishMessages);\n\nconst RedirectTarget = () => {\n const { authenticated } = useAuthState();\r\n\r\n if (authenticated && window.location.href.includes('/state=')) {\n\n return ;\n }\r\n return <>\r\n}\n\nconst App = () => (\n \n \n }\n noLayout // Skip the layout\n />,\n ]}\n >\n \n \n\n \n \n \n }\n noLayout // Skip the layout\n />\n \n \n \n);\n\nexport default App;\n","import \"ie-string-startswith-polyfill\";\nimport \"string.prototype.repeat\";\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\n\nReactDOM.render(, document.getElementById('root'));\n"],"sourceRoot":""}