{"version":3,"sources":["assets/img/svg/powered_by_stripe.svg","assets/img/uploadDataPics/excelLogo.png","assets/img/uploadDataPics/csvIcon.png","assets/img/uploadDataPics/importDataSnip.JPG","assets/img/FormatDataHelpers/Spring15min.png","assets/img/FormatDataHelpers/Fall15min.png","assets/img/FormatDataHelpers/Spring30min.png","assets/img/FormatDataHelpers/Fall30min.png","assets/img/FormatDataHelpers/Spring60min.png","assets/img/FormatDataHelpers/Fall60min.png","assets/img/svg/moon.svg","components/PrivateRoute.js","config.js","helpers/auth-header.js","services/serviceHelper.js","services/user.service.js","Login/components/Carousel.js","Login/components/loginTemplate.js","components/Spinners/pulse-loader.jsx","Login/index.js","layouts/Login.jsx","redux/actions/facility-actions.js","services/facility.service.js","js/validate.js","redux/actions/HomeActions/home-actions.js","redux/actions/MeterActions/EditMeterActions/edit-meter-actions.js","redux/actions/project-actions.js","services/project.service.js","redux/actions/dashboard-actions.js","components/Link/LinkText.js","Dashboard/components/ProjectEditAndDeleteIcons.jsx","Dashboard/containers/ProjectsTable.jsx","Dashboard/components/DashboardHelp.js","Dashboard/components/CreateProjectForm.js","components/Dialogs/customDialog.js","components/AntTabs/AntTabs.js","components/AntTabs/AntTab.js","components/Inputs/CustomOutlinedInput.js","Dashboard/components/EditProject/EditProjectForm.js","components/CustomButtons/GreenButton.js","Dashboard/components/CreateProjectDialog.jsx","Dashboard/components/EditProject/EditProjectDialog.jsx","Dashboard/components/DeleteProjectDialog.jsx","components/CustomButtons/AddNewButton.js","components/Snackbar/CustomSnackbar.jsx","ProjectHome/components/buttons/FacilityEditDeleteAddIcons.jsx","ProjectHome/components/tables/ProjectTableDetailPanel.js","ProjectHome/containers/FacilitiesTable.jsx","components/CustomInfoLayout/CustomInfoLayout.js","components/CustomButtons/BigGreenButton.js","components/EmptyGif/EmptyGif.js","FacilityHome/components/spinners/DataViewLoadingSpinner.js","Dashboard/components/DashboardComponent.js","Dashboard/components/EditProject/Three.js","components/TextMasks/PhoneNumberTextMaskInput.js","Dashboard/components/EditProject/index.jsx","Dashboard/containers/DashboardContainer.jsx","ProjectHome/components/cards/ProjectInfo.js","ProjectHome/components/charts/FacilitiesChartTable.js","ProjectHome/components/charts/FacilityChartLabels.jsx","ProjectHome/components/charts/FacilitiesSteamGraph.js","ProjectHome/components/forms/CreateFacilityForm.js","ProjectHome/components/dialogs/CreateFacilityDialog.jsx","ProjectHome/components/dialogs/EditFacilityDialog.jsx","ProjectHome/components/forms/EditFacilityForm.js","ImportData/js/DstDays.js","ImportData/components/cards/MicrosoftExcelCard.js","ImportData/components/cards/CsvCard.js","ImportData/components/cards/HandsontableCard.js","ImportData/components/Step1.js","ImportData/components/renderRadioGroupReact.js","ImportData/components/renderDatePickers.js","ImportData/components/Step2.js","components/Spinners/grid-loader.jsx","assets/jss/material-dashboard-react.jsx","assets/jss/material-dashboard-react/components/buttonStyle.jsx","components/CustomButtons/Button.jsx","ImportData/components/Handsontable.js","ImportData/components/Step3UploadFile.js","ImportData/js/createImportDataHandsontable.js","ImportData/js/formatManualData.js","services/intervalData.service.js","ImportData/components/spinner/UploadingDataSpinner.js","ImportData/components/UploadDataStepper.js","ImportData/components/ImportDataForm.js","ImportData/components/formatDataHelp/fileFormatHelp.js","ImportData/components/spinner/UploadingDataDialog.js","ImportData/js/formatCsvDataFromTableForSubmit.js","ImportData/components/Step3Manual.js","ImportData/ImportDataComponent.js","ImportData/js/makeHandsontableFromCsv.js","ProjectHome/components/dialogs/ImportDataDialog.jsx","ProjectHome/components/dialogs/DeleteFacilityDialog.jsx","ProjectHome/components/ProjectHomeComponent.js","js/generateDefaultChartOptions.js","js/createHandsontableSettingsFromData.js","js/CustomDataClasses/TimeSeriesData.js","components/Spinners/highchart-loading.js","components/Spinners/loading-weather.js","ProjectHome/containers/ProjectHomeContainer.jsx","js/CustomDataClasses/SummaryChartData.js","components/CustomInfoLayout/CustomInfoLayout2.js","FacilityHome/components/Overview/MeterHomeTopBanner.js","FacilityHome/components/Emissions/js/emissionsHelper.js","FacilityHome/components/components/MeterSectionTitleBar.js","FacilityHome/components/Overview/index.js","FacilityHome/components/Notes/NoteEditAndDeleteIcons.js","FacilityHome/components/Notes/NotesTable.js","FacilityHome/components/Notes/NoteForm.js","FacilityHome/components/Notes/Dialogs/CreateNoteDialog.js","FacilityHome/components/Notes/Dialogs/EditNoteDialog.js","FacilityHome/components/Notes/Dialogs/DeleteNoteDialog.js","js/FormValidation/formValidationHelpers.js","FacilityHome/components/Notes/index.js","FacilityHome/components/DataFilterForm/getDataFilterMessage.js","FacilityHome/components/DataFilterForm/ChartDataFilterFormObject.js","js/time-constants.js","js/CustomDataClasses/LoadCurveData.js","js/CustomDataClasses/HeatMapData.js","redux/actions/interval-data-actions.js","redux/actions/meter-charts-actions.js","redux/actions/DataChartActions/calendar-chart-actions.js","FacilityHome/components/Charts/CalendarChart/jsFunctions.js","FacilityHome/components/Charts/CalendarChart/HighchartForCalendarChartMonthView.js","FacilityHome/components/Charts/CalendarChart/HighchartForCalendarChartDayView.js","FacilityHome/components/Charts/CalendarChart/CalendarChartTable.js","FacilityHome/components/Charts/CalendarChart/index.jsx","components/tabs/CustomTabsPaper.js","components/ChartWrapper/ChartWrapper.js","FacilityHome/components/Charts/ChartsView.js","FacilityHome/components/Charts/TableView.js","FacilityHome/components/Charts/MainChartsComponent.jsx","FacilityHome/js/exportDataAsCsv.js","FacilityHome/components/Charts/SurfacePlot.js","redux/actions/chart-actions.js","FacilityHome/components/Charts/Tabs/index.js","FacilityHome/components/Charts/index.js","FacilityHome/components/ImportData/index.js","FacilityHome/components/DataFilterForm/data-filter-form-sections.js","FacilityHome/components/DataFilterForm/index.js","FacilityHome/components/MeterNavbar/MeterDataFilterFormContainer.js","FacilityHome/components/Overview/LeftSidebar/components/OverviewSidebarAddressSection.js","FacilityHome/components/Overview/LeftSidebar/components/OverviewSidebarUtilitySection.js","FacilityHome/components/Overview/LeftSidebar/components/OverviewSidebarUtilityAccountSection.js","FacilityHome/components/Overview/LeftSidebar/index.js","redux/actions/user-actions.js","FacilityHome/components/Regression/regressionTest.js","js/CustomDataClasses/DegreeDaysClass.js","js/CustomDataClasses/RegressionClass.js","redux/actions/weather-actions.js","js/degreeDayFunctions.js","FacilityHome/components/Weather/Sidebar/WeatherFilterForm/index.js","FacilityHome/components/Weather/Sidebar/index.js","FacilityHome/components/Charts/CalendarChart/CalendarChartSidebar.js","FacilityHome/components/Emissions/components/Sidebar/index.js","FacilityHome/components/Weather/Sidebar/RawDataSidebar/index.js","FacilityHome/components/MeterNavbar/index.js","FacilityHome/components/Weather/components/Tabs/index.js","FacilityHome/components/Weather/DegreeDays/index.js","FacilityHome/components/Weather/WeatherStation/WeatherStationMap.js","FacilityHome/components/Weather/WeatherStation/index.js","FacilityHome/components/Weather/RawWeatherData/index.js","FacilityHome/components/Weather/index.js","FacilityHome/components/Regression/CreateRegression/components/RegressionDetails.js","FacilityHome/components/Regression/CreateRegression/components/RegressionSummary.js","components/Sliders/CustomSlider.js","FacilityHome/components/Regression/CreateRegression/components/Schedule/ScheduleSlider.js","FacilityHome/components/Regression/CreateRegression/components/Schedule/index.js","FacilityHome/components/Regression/CreateRegression/components/PeriodLength.js","FacilityHome/components/Regression/CreateRegression/components/MonthlySetup.js","FacilityHome/components/Regression/CreateRegression/components/DateRanges.js","FacilityHome/components/Regression/CreateRegression/components/TemperatureSettings.js","FacilityHome/components/Regression/CreateRegression/components/Holidays.js","FacilityHome/components/Regression/CreateRegression/index.js","FacilityHome/components/Regression/index.js","FacilityHome/components/NavigationTabs/NavigationTabs.js","FacilityHome/components/Emissions/components/Meter/MeterEmissionsTable.js","FacilityHome/components/Emissions/components/Meter/MeterMonthlyEmissionsChart.js","FacilityHome/components/Emissions/components/Meter/MeterResourceMixChart.js","FacilityHome/components/Emissions/components/Meter/EmissionsComparisons/EquivalentCard.js","FacilityHome/components/Emissions/components/Meter/EmissionsComparisons/index.js","FacilityHome/components/Emissions/components/Meter/MeterCo2ECard.js","js/CustomDataClasses/GhgClass.js","redux/actions/EmissionsActions/emissions-actions.js","FacilityHome/components/Emissions/components/Meter/index.js","FacilityHome/components/Emissions/components/Tabs/index.js","FacilityHome/components/Emissions/index.js","FacilityHome/components/Settings/components/Tabs/index.js","components/ColorPicker/CustomColorPicker.js","FacilityHome/components/Settings/components/DatesAndRanges/components/CreateNewDate.js","FacilityHome/components/Settings/components/DatesAndRanges/index.js","FacilityHome/components/Settings/components/DatesAndRanges/components/NoDatesOrRanges.js","FacilityHome/components/Settings/index.js","FacilityHome/index.jsx","OrganizationSettings/components/buttons/FacilityEditDeleteAddIcons.jsx","OrganizationSettings/containers/UsersTable.jsx","OrganizationSettings/components/cards/OrganizationInfo.js","OrganizationSettings/components/forms/CreateUserForm.js","OrganizationSettings/components/dialogs/CreateUserDialog.jsx","OrganizationSettings/components/forms/EditUserForm.js","OrganizationSettings/components/dialogs/EditUserDialog.jsx","OrganizationSettings/components/dialogs/DeleteUserDialog.jsx","OrganizationSettings/components/dialogs/BuyMoreUsersDialog.jsx","OrganizationSettings/components/OrganizationSettingsHomeComponent.js","services/admin.service.js","OrganizationSettings/containers/OrganizationSettingsContainer.jsx","Account/Components/AccountSummary/Stats/UsageGauge.js","Account/Components/AccountSummary/Subscription/SubscriptionSummary.js","Account/Components/AccountSummary/Profile/index.js","Account/Components/AccountSummary/Profile/PdfTest.js","Account/Components/EditAccount/index.js","Account/Components/AccountSummary/index.js","Account/Components/NavBar/index.js","Account/Components/Password/ChangePasswordForm.js","Account/Components/Password/index.js","Account/Components/Subscription/PaymentMethod/CardSection.js","Account/Components/Subscription/PaymentMethod/CheckoutForm.js","Account/Components/Subscription/PaymentMethod/MyStoreCheckout.js","Account/Components/Subscription/PaymentMethod/index.js","Account/Components/Subscription/CurrentSubscription/Components/CancelSubscriptionDialog.js","Account/Components/Subscription/CurrentSubscription/Components/EditSubscriptionDialog.js","Account/Components/Subscription/CurrentSubscription/index.js","components/CustomButtons/LoadingButton.js","Account/Components/Subscription/PaymentMethodRev2/CheckoutForm/Components/CardForm.js","Account/Components/Subscription/PaymentMethodRev2/CheckoutForm/index.js","Account/Components/Subscription/PaymentMethodRev2/CurrentPaymentMethod.js","components/Dividers/HorizontalDivider.js","Account/Components/Subscription/PaymentMethodRev2/index.js","components/Counter/SubscriptionCounter.js","Account/Components/Subscription/Activate Subscription/Components/Step1.js","Account/Components/Subscription/Activate Subscription/Components/Step2.js","Account/Components/Subscription/Activate Subscription/Components/Step4.js","Legal/TermsOfUseContent.js","Account/Components/Subscription/Activate Subscription/Components/Step3.js","Account/Components/Subscription/Activate Subscription/Components/AccountActivationStepper.js","Account/Components/Subscription/Activate Subscription/index.js","Account/Components/Subscription/index.js","Account/Components/TestLayout/CardTest.js","Account/Components/TestLayout/GoogleLayout.js","Account/Components/TestLayout/index.js","Account/Components/AccountTabs/index.js","Account/Components/AccountHome.js","components/Breadcrumbs/breadcrumbs.js","components/Navbars/TopNavbar.jsx","components/Footer/Footer.js","Legal/TermsContent_2_18_2020.js","Legal/TermsOfUse.js","components/ReportBug/index.js","redux/actions/admin-actions.js","Legal/PrivacyContent.js","Legal/Privacy.js","components/StillThereDialog.js","layouts/Home.jsx","ResetPassword/index.js","layouts/ResetPassword.jsx","registerServiceWorker.js","redux/reducers/project-reducers.js","redux/reducers/MeterReducers/EditMeterReducers/edit-meter-reducers.js","redux/reducers/index.js","redux/reducers/user-reducer.js","redux/reducers/HomeReducers/home-reducers.js","redux/reducers/dashboard-reducers.js","redux/reducers/admin-reducers.js","redux/reducers/facility-reducers.js","redux/reducers/chart-reducers.js","redux/reducers/DataChartReducers/calendar-chart-reducers.js","redux/reducers/EmissionsReducers/emissions.reducers.js","redux/reducers/meter-charts-reducers.js","redux/reducers/interval-data-reducer.js","redux/reducers/contact-reducer.js","redux/reducers/weather-reducers.js","store.js","index.js","assets/img/ReactLogo_NoShadow.svg","assets/gifs/events.gif","assets/img/svg/thermometer.svg","assets/img/chartPics/ScatterForLogin.png","assets/gifs/notebooks.gif","assets/gifs/projects.gif","assets/img/chartPics/HeatmapForLogin.png","assets/gifs/meter3.gif","assets/img/svg/sun-white.svg","assets/img/svg/buildings.svg","assets/img/svg/meter.svg","assets/img/ghgComparisonSvgs/home.svg","assets/img/ghgComparisonSvgs/burningCoal.svg","assets/img/ghgComparisonSvgs/gasStation.svg","assets/img/ghgComparisonSvgs/car.svg","assets/img/ghgComparisonSvgs/oilBarrel.svg","assets/img/ghgComparisonSvgs/coalRailcar.svg"],"names":["module","exports","__webpack_require__","p","PrivateRoute","_ref","Component","component","rest","Object","objectWithoutProperties","react_default","a","createElement","Route","assign","render","prop","sessionStorage","getItem","Redirect","to","pathname","state","from","location","config","account","project","facility","intervalData","admin","authHeader","multiPartFormData","user","JSON","parse","window","token","Authorization","Content-Type","fetchHelper","apiURL","endpoint","param","requestType","toLowerCase","setItem","Date","fetchUrl","concat","requestOptions","method","headers","body","stringify","fetch","then","response","responseStatusHandler","catch","error","isSuccess","status","logout","reload","json","getErrorMessage","errorMessage","errors","length","message","ACCOUNT","ENDPOINTS","login","forgotPassword","resetPassword","submitFeedback","changePassword","refreshToken","$email","$password","Email","Password","getUser","Token","newPassword","NewPassword","subject","Subject","Message","oldPassword","OldPassword","removeItem","DemoCarousel","lib","showThumbs","infiniteLoop","autoPlay","width","style","backgroundColor","height","margin","src","heatmap","alt","scatterplot","withStyles","theme","main","paper","marginTop","spacing","unit","marginRight","marginLeft","display","flexDirection","alignItems","minHeight","carousel","defineProperty","breakpoints","up","avatar","palette","secondary","form","submit","hidden","red","color","blue","&:hover","textDecoration","cursor","props","classes","title","content","toggleViewText","toggleView","className","CssBaseline","Grid","container","xs","justify","Paper","item","lg","maxWidth","border","borderWidth","borderColor","grey","padding","textAlign","reactlogo","Typography","variant","paddingTop","onClick","Carousel","override","css","_templateObject","CustomPulseLoader","useTheme","primary","PulseLoader_default","sizeUnit","loading","onFormSubmit","handleChange","currentView","onNewPasswordSubmit","submitting","loginTemplate","FormControl","required","fullWidth","InputLabel","htmlFor","Input","id","name","autoComplete","autoFocus","value","email","onChange","e","Button","type","disabled","pulse_loader","onSubmit","FormLabel","password","SignIn","_this","setState","event","target","objectSpread","setError","preventDefault","redirectUrl","undefined","href","success","Login","this","selectFacility","payload","selectFacilityView","view","subview","toggleFacilitySideBar","open","FACILITY","facilityModel","FacilityId","OrganizationId","Name","Description","AccountNumber","MeterNumber","Address1","Address2","City","State","PostalCode","Phone","Utility","Notes","facilityNoteModel","FacilityNoteId","Title","getFacilityById","getFacilitiesByProjectId","createOrUpdateFacility","deleteFacility","getFacilityNoteById","getFacilityNotesByFacilityId","createOrUpdateFacilityNote","deleteFacilityNote","facilityId","organizationId","FacilityNote","facilityNoteId","minLengthValidator","minLength","requiredValidator","trim","emailValidator","test","String","passwordValidator","letter","capital","number","specialCharacter","match","zipcodeValidator","validate","rules","isValid","rule","setSnackbar","snackbar","openSnackbar","arguments","dispatch","getState","snackbarTemp","toggleEditMeterDialogOpen","boolean","editMeterDialogOpen","setSelectedMeterForEdit","meter","_getState2","selectedMeterForEdit","editMeterFormControls","editFacilityFormControls","description","meterNumber","accountNumber","utility","address1","address2","city","postalCode","onEditMeterSubmit","setAsSelectedMeter","_getState3","editMeterFormIsValid","submittedForm","keys","finalSubmission","forEach","key","facilityRequest","ProjectId","projectId","successMessage","getProjectsFacilities","x","edit_meter_actions_this","handleEditMeterInputChange","updatedControls","updatedFormElement","touched","valid","validationRules","formIsValid","inputIdentifier","selectProject","setFetchingFacilities","selectedProject","facilities","PROJECT","projectModel","CompanyName","ContactName","ContactJobTitle","ContactPhoneNumber","ContactEmail","getProjectsByUserId","getProjectsByOrganizationId","getProjectById","createOrUpdateProject","deleteProject","getProjectsForOrganization","projects","addProjectsToState","useStyles","makeStyles","link","dark","LinkText","text","object","Link","root","iconDelete","iconEdit","ProjectEditAndDeleteIcons","toggleEditProjectDialog","toggleDeleteProjectDialog","IconButton","aria-label","size","Icon_Icon","fontSize","ProjectsTable","_this$props","toggleCreateProjectDialog","dist_default","columns","field","rowData","Link_LinkText","moment","modifiedDate","format","react","data","options","search","pageSize","connect","bindActionCreators","flexGrow","appBar","boxShadow","card","media","textField","minWidth","borderBottom","bottomGreyBorder","textTransform","fontWeight","dialogContent","justifyContent","Transition","React","forwardRef","ref","Slide","direction","CustomDialog","_props$subTitle","subTitle","_props$title","onClose","_props$actions","actions","_props$fullWidth","Dialog","TransitionComponent","AppBar","position","Toolbar","Close_default","DialogContent","DialogActions","AntTabs","wrapper","indicator","button","green","Tabs","AntTab","typography","fontWeightRegular","marginBottom","paddingBottom","fontFamily","join","opacity","&$selected","&:focus","selected","Tab","disableRipple","adornment","icons","label","formLabel","CustomOutlinedInput","_props$label","placeHolder","_props$error","_props$inputComponent","inputComponent","_props$startAdornment","startAdornment","_props$multiline","multiline","_props$disabled","OutlinedInput","labelWidth","aria-describedby","placeholder","rows","CreateProjectForm","currentTab","tabs","changeTab","index","getComponent","handleInputChange","formControls","attemptedSubmit","companyName","contactName","contactJobTitle","contactPhoneNumber","textMask","contactEmail","_this2","_this$props2","alert","row","isRequired","AntTabs_AntTabs","map","tab","AntTabs_AntTab","GreenButton","lineHeight","borderStyle","hover","&:active","&:disabled","CreateProjectDialog","createProjectDialogOpen","createProjectFormControls","handleCreateProjectInputChange","onCreateProjectSubmit","attemptedCreateProjectSubmit","customDialog","EditProjectForm","CustomButtons_GreenButton","EditProjectDialog","DeleteProjectDialog","deleteProjectDialogOpen","selectedProjectForDelete","onDeleteProjectSubmit","contrast","borderRadius","AddNewButton","AddCircle_default","paddingLeft","variantIcon","CheckCircleIcon","warning","WarningIcon","ErrorIcon","info","InfoIcon","useStyles1","amber","icon","iconVariant","MySnackbarContentWrapper","other","Icon","SnackbarContent","clsx","action","useStyles2","CustomSnackbar","handleClose","reason","Snackbar","anchorOrigin","vertical","horizontal","autoHideDuration","iconAdd","Icons","facilityObject","toggleImportDataDialog","toggleEditFacilityDialog","toggleDeleteFacilityDialog","background","default","paddingRight","table","ProjectTableDetailPanel","Table","TableBody","TableRow","TableCell","intervalDataStartDate","tz","timezone","intervalDataEndDate","maximumkWValue","toString","replace","annualKwhValue","FacilitiesTable","importDataDialogOpen","build_default","start","end","duration","separator","suffix","decimal","decimals","useEasing","detailPanel","CustomInfoLayout","mainContent","_this$props$topRightC","topRightContent","BigGreenButton","EmptyGif","gif","buttonText","justifyItems","CustomButtons_BigGreenButton","progress","DataViewLoadingSpinner","_React$useState","useState","_React$useState2","slicedToArray","setProgress","useEffect","timer","setInterval","oldProgress","clearInterval","CircularProgress","fab","bottom","right","common","white","MainDashboard","fetchingProjects","editProjectDialogOpen","editProjectFormControls","handleEditProjectInputChange","onEditProjectSubmit","attemptedEditProjectSubmit","selectedProjectForEdit","components_EmptyGif_EmptyGif","projectsGif","components_CustomInfoLayout_CustomInfoLayout","containers_ProjectsTable","components_CreateProjectDialog","components_DeleteProjectDialog","array","PhoneNumberTextMaskInput","inputRef","reactTextMask_default","inputElement","mask","EditProject","prevProjectForEditName","editProjectFormIsValid","isEmail","varient","console","log","projectRequest","componentDidUpdate","prevProps","Dashboard","createProjectFormIsValid","updateTable","components_EditProject","projectProperty","projectProperties","SimpleAppBar","Card","CardContent","property","getProjectInfo","FacilityChartTable","PureComponent","classCallCheck","possibleConstructorReturn","getPrototypeOf","call","componentDidMount","count","seriesAndLists","getSeriesForChart","chartOptions","getChartOptions","internalChart","md","highcharts_react_min_default","highcharts","Highcharts","series","facilitiesList","facilityIds","chart","subtitle","xAxis","categories","labels","formatter","pos","useHTML","yAxis","min","align","overflow","opposite","tooltip","valueSuffix","plotOptions","bar","dataLabels","enabled","legend","layout","verticalAlign","y","floating","legendBackgroundColor","shadow","credits","push","highchartsStreamgraph","getOptions","colors","CreateFacilityForm","CreateFacilityDialog","createFacilityDialogOpen","toggleCreateFacilityDialog","createFacilityFormControls","handleCreateFacilityInputChange","onCreateFacilitySubmit","attemptedCreateFacilitySubmit","forms_CreateFacilityForm","EditFacilityDialog","prevState","snapshot","attemptedEditMeterSubmit","onEditComplete","getDSTDays","startDate","endDate","fallBackDays","springForwardDays","day","clone","prevIsDST","isDST","i","isBefore","add","cardActionArea","ExcelCard","handleClick","img","CardActionArea","CardMedia","image","require","gutterBottom","CsvCard","HandsontableCard","ContactForm","handleSubmit","reset","importMethods","year","month","date","reduxForm","enableReinitialize","formControl","group","RadioButtonsGroup","handleRadioChange","setValue","RadioGroup","FormControlLabel","control","Radio","renderDatePickers","handleDateChange","_useState","_useState2","selectedDate","handleLocalChange","material_ui_pickers_esm","utils","MomentUtils","views","CsvOrExcelStep2Form","handleTimeZoneChange","step2params","importMethod","radioKeys","radios","dateKeys","dateRange","containter","grid_loader_templateObject","CustomGridSpinner","_this$props$color","GridLoader_default","hexToRgb","input","Error","first","second","last","toUpperCase","parseInt","primaryColor","warningColor","dangerColor","successColor","infoColor","roseColor","grayColor","primaryBoxShadow","infoBoxShadow","successBoxShadow","warningBoxShadow","dangerBoxShadow","roseBoxShadow","borderTop","& small","buttonStyle","& a","letterSpacing","willChange","transition","whiteSpace","touchAction","&:hover,&:focus","& .fab,& .fas,& .far,& .fal, &.material-icons","top","& svg","&$justIcon","& .fab,& .fas,& .far,& .fal,& .material-icons","transform","left","&,&:focus,&:hover","rose","danger","simple","&$rose","&,&:focus,&:hover,&:visited","&$primary","&$info","&$success","&$warning","&$danger","transparent","pointerEvents","sm","round","block","&,&:hover,&:focus","justIcon","& .fab,& .fas,& .far,& .fal,& svg,& .material-icons","&$lg","&$sm","_classNames","esm_extends","children","muiClasses","btnClasses","classNames","UploadHandsontable","hotTable","current","hotInstance","validateCells","createRef","settings","react_handsontable","csv","uploadIcon","ImportDataFile","reading","setReading","formatDataFromCSV","toggleDialog","csvHandsontableSettings","clearFile","baseStyle","flex","outline","activeStyle","acceptStyle","rejectStyle","onDrop","useCallback","acceptedFiles","rejectedFiles","file","readXlsx","readCsv","reader","FileReader","onload","Uint8Array","result","sheets","XLSX","read","Sheets","sheet1","sheetAsCsvString","sheet_to_csv","formatCsvString","readAsArrayBuffer","fileAsBinaryString","onabort","onerror","readAsBinaryString","noheader","output","fromString","csvRows","toJson","aCsvRow","builtObject","aKey","valueToAddInBuiltObject","keyToAddInBuiltObject","_useDropzone","useDropzone","accept","getRootProps","getInputProps","isDragActive","isDragAccept","isDragReject","useMemo","path","Handsontable","grid_loader","CloudUpload_default","getStep2Values","orientation","dataType","endDateLastInterval","totalDays","diff","intervalsPerDay","getColumnHeaders","_getStep2Values","prev","hour","minutes","seconds","milliseconds","getColumns","_getStep2Values2","getRowHeaders","_getStep2Values3","totalIntervals","getTempData","_getStep2Values4","singleRowArray","j","checkDataValueType","getIntervalDataByFacilityId","importIntervalData","importIntervalDataJson","getIntervalDataTimestampByFacilityId","getIntervalDataHeatmapByFacilityId","getIntervalDataCalendarChartByFacilityId","getIntervalDataLoadCurveByFacilityId","getIntervalDataSummaryChartByFacilityId","getDegreeDays","getFacilityWeather","intervalDataRequestObject","Interval","IncludePercent","ChartType","DataType","SeriesType","SeriesPer","Months","Days","Years","StartDate","EndDate","StartTime","EndTime","IntervalDuration","importIntervalDataJsonRequestObject","IntervalDataType","Data","getDegreeDaysRequestObject","HeatingDegreeBase","CoolingDegreeBase","getFacilityWeatherRequestObject","INTERVALDATA","monthData","seriesData","UploadingDataSpinner","backButton","instructions","ImportDataStepper","activeStep","steps","Stepper","alternativeLabel","Step","StepLabel","gridContainer","handleReset","handleBack","handleNext","getStepContent","csvData","UploadDataStepper","FileFormatHelp","getNumberOfIntervals","getDataType","UploadingDataDialog","aria-labelledby","BackdropProps","PaperProps","react_spinners","temp","parseFloat","getImage","season","Step3Manual","handsontableSettings","maxHeight","ImportData","subtract","hours","isError","errorMessages","isWarning","warningMessages","dialogOpen","uploadingData","toggleSnackbar","_this$state","step2paramsCopy","colHeaders","rowHeaders","rowHeaderWidth","licenseKey","stretchH","maxRows","getHandsontableSettings","request","Timezone","arrayManual","millisecond","time","split","finalDate","DateTime","Value","formatHorizontalManualData","daylightSavingsFallBackArray","daylightSavingsFallBackDays","_loop","t","includes","find","utcOffset","kw","formatVerticalManualData","uploadData","arrayCsv","firstInterval","lastInterval","_getDSTDays","springForwardDayIntervals","datetime","formatHorizontalCsvDataForSubmit","selectedFacility","_getDSTDays2","interval","zoneInfo","zone","offsets","toConsumableArray","Set","tempP","valueOf","newOffset","filter","Math","abs","formatVerticalCsvDataForSubmit","onDataSubmissionSuccess","dataTypeLabel","lastDateTimeWasEmptyOrInvalid","_isValid","validator","dateFormat","correctFormat","numericFormat","pattern","makeHandsontableFromVerticalCsv","intervalDuration","startTime","minute","lastDateWasEmptyOrInvalid","defaultDate","callback","makeHandsontableFromHorizontalCsv","formattedData","Step1","Step2","components_Step3Manual","_this$state2","components_ImportDataForm","dataTypeObject","fileFormatHelp","spinner_UploadingDataDialog","ImportDataDialog","importDataFacility","ImportDataComponent","DeleteFacilityDialog","deleteFacilityDialogOpen","selectedFacilityForDelete","onDeleteFacilitySubmit","ProjectHome","currentComponent","containers_FacilitiesTable","setTab","FacilitiesChartTable","fetchingFacilities","editFacilityDialogOpen","handleEditFacilityInputChange","onEditFacilitySubmit","attemptedEdotFacilitySubmit","selectedFacilityForEdit","ProjectInfo_SimpleAppBar","MeterTestGif","dialogs_CreateFacilityDialog","dialogs_EditFacilityDialog","dialogs_DeleteFacilityDialog","dialogs_ImportDataDialog","summaryChartOptions","zoomType","events","setExtremes","showEmpty","headerFormat","pointFormat","footerFormat","column","pointPadding","zoomableOptions","axisTitle","tooltipSuffix","temperatureData","plotLines","plotBands","negativeColor","negativeFillColor","linearGradient","x1","y1","x2","y2","stops","fillColor","Color","setOpacity","get","dashStyle","document","ontouchstart","area","marker","radius","lineWidth","states","point","timeString","timeRange","points","closestPointRange","startDateTime","endDateTime","color2","line","tempLine","final","toFixed","tooltipFunction","createHandsontableSettingsFromData","dataForTable","Array","fill","floor","getLoadCurveHandsontable","maxKw","avgKw","minKw","maxKwh","avgKwh","minKwh","sumKwh","loadFactor","header","getSummaryChartHandsontable","utc","getHeatMapHandsontable","dateTimestamp","kW","kWh","temperature","getZoomableChartHandsontable","percentOverFiltered","getDemandDurationHandsontable","heatingDegreeBase","coolingDegreeBase","degreeDays","heatingDegreeDays","coolingDegreeDays","getDegreeDaysHandsontable","weatherDateLocal","humidity","dewpoint","precipitation","windSpeed","windDirection","pressure","getRawWeatherDataHandsonTable","prediction","variance","getRegressionDataHandsonTable","_formatDataForScatterOrZoomable","WeakMap","TimeSeriesData","formatDataForZoomableChart","formatDataForScatterPlot","formatDataForDemandDurationChart","dateTimeArray","fakeTimestamp","intervalDateTime","generateScatterPlotChartOptions","durationView","intervalDuraton","yAxisTitle","tickInterval","ceiling","meterSeries","ceil","max","random","boost","useGPUTranslations","usePreAllocated","days","scatter","lineColor","pointFormatter","turboThreshold","scatterPlotOptions","generateTimeSeriesHandsontableSettings","generateDemandDurationChartOptions","_this$formatDataForDe","totalDifference","navigator","percent","dateStamp","threshold","rangeSelector","demandDurationOptions","generateDemandDurationHandsontableSettings","generateZoomableChartOptions","temperatureView","set","animation","addSeries","renderer","attr","r","zIndex","setTimeout","fadeOut","useUTC","accessibility","announceNewData","minAnnounceInterval","announcementFormatter","allSeries","newSeries","newPoint","tickPixelInterval","gridLineColor","minorGridLineWidth","minorTickLength","tickLength","exporting","LoadingWeatherHighchart","newArray","remove","positive","LoadingWeather","tick","react_svg_esm","sun","buildings","highchart_loading","highchartsExporting","ProjectHomeContainer","finishedRetrievingMeters","createFacilityFormIsValid","isZipcode","allDataReceived","allData","params","getProject","getZoomableForAllFacilities","dataReceivedObject","allDataForZoomableReceived","_this$props$match$par","seriesObject","getZoomableChart","ProjectHomeComponent","fetchingNewWeatherData","SummaryChartData","getDataForDegreeDays","generateChartOptions","requestedDataPoints","singleOrMultiple","_formatDataForSummary","tempSeries","dataPoint","getTempSeries","formatDataForSummaryChart","charts","generateHandsontableSettings","Number","addLoadFactor","infoCard","MeterHomeTopBanner","meterAnnualC02e","intervalDataLengthInDays","cards","estimatedMessage","formatSubRegionEmissions","subRegionEmissions","abbr","co2","ch4","n2o","co2e","annualNox","ozoneNox","so2","subRegion","subRegionName","emissions","getIndividualResourceMixPieChartOptions","resourceMix","fossilFuels","renewables","formatResourceMixForPieChart","plotBackgroundColor","plotBorderWidth","plotShadow","pie","allowPointSelect","colorByPoint","getLocationEmissionsAndResources","stateOrRegion","includeLosses","locationEmissionsTemp","locationResourceMixTemp","eGridZipcodes","zipcode","eGridSubregionTotalEmissions","subRegion1","eGridSubregionResourceMix","eGridStateEmissions","eGridStateResourceMix","gridGrossLoss","locationEmissions","locationResourceMix","formatSubRegionResourceMix","coal","oil","gas","nuclear","otherFossil","hydro","biomass","wind","solar","MeterSectionTitleBar","rightContent","highchartsMore","DashboardSummaryChartsRequest","dataStartDate","dataEndDate","DashboardDemandRangeRequest","DaysOfWeek","DashboardLoadCurveRequest","FacilityOverviewTemp","peakAndUsageChartOptions","loadFactorChartOptions","demandRangeData","loadCurveData","demandRangeChartOptions","emissionsInfo","resourceMixChartOptions","getSummarychartData","summaryChartRequest","summaryChartData","getDemandRangeData","demandRangeRequest","getLoadCurveData","loadCurveRequest","buildDemandRangeChartOptions","tickPositions","crosshairs","shared","xDateFormat","low","high","linkedTo","fillOpacity","_callee","regenerator_default","wrap","_context","next","stop","FacilityOverview","selectedFacilityView","selectedFacilitySubview","peakDemand","statTitle","borderLeft","borderRight","NoteEditAndDeleteIcons","note","toggleEditNoteDialog","toggleDeleteNoteDialog","NotesTable","notes","components","Container","flexWrap","dense","menu","NoteForm","CreateNoteDialog","createNoteFormControls","handleCreateNoteChange","onCreateOrEditNoteSubmit","attemptedCreateNoteSubmit","EditNoteDialog","editNoteFormControls","handleEditNoteChange","attemptedEditNoteSubmit","DeleteNoteDialog","deleteNote","onDeleteNoteSubmit","handleTextInputChangeFormControl","FacilityNotes","createNoteFormIsValid","deleteNoteDialogOpen","editNoteFormIsValid","editNoteId","editNoteDialogOpen","createNoteDialogOpen","finishedFetchingNotes","_handleTextInputChang","_handleTextInputChang2","toggleCreateNoteDialog","submitNote","facilityNotes","Notes_NotesTable","notebooksGif","Dialogs_CreateNoteDialog","Dialogs_EditNoteDialog","Dialogs_DeleteNoteDialog","toolbar","mixins","getDataFilterMessage","chartDataFilterForm","summary","chartType","seriesTypeLabel","seriesTypes","seriesPer","getLoadCurveMessage","details","masterFormObject","months","dataTypeOptions","endTime","ChartDataFilterFormObject","getDefaultFormByChartType","loadCurveDefaultForm","summaryChartDefaultForm","heatmapDefaultForm","zoomableChartDefaultForm","demandDurationChartDefaultForm","calendarChartDefaultForm","scatterPlotDefaultForm","surfacePlotDefaultForm","getDefaultForm","getDefaultLoadCurveFormForCalendarChart","loadCurveForCalendarDefaultForm","getDefaultSummaryChartForm","getDefaultHeatMapForm","getDefaultZoomableChartForm","getDefaultDemandDurationForm","getDefaultCalendarChartForm","getDefaultScatterPlotForm","getRequestFromForm","selectedDaysNumbers","selectedDays","selectedMonthNumbers","selectedMonths","selectedYearNumbers","years","selectedYears","getIntervalDataRequestFromForm","startYear","endYear","shortLabel","LoadCurveData","fixedSeries","legendEnabled","loadCurveOptions","generateSurfacePlotOptions","z","firstIsGood","shift","zData","colorscale","autosize","scene","xaxis","yaxis","zaxis","aspectmode","aspectratio","domain","camera","center","eye","l","b","responsive","displaylogo","_formatDataForHeatMap","HeatMapData","xAxisLabels","sourceWidth","sourceHeight","rotation","symbolHeight","symbolWidth","inverted","showLastLabel","startOnTick","endOnTick","tickmarkPlacement","tempMinutes","tickWidth","reversed","tickPositioner","colorAxis","groupPadding","boostThreshold","rowsize","nullColor","colsize","heatMapOptions","dayTimestamp","addCalendarChartDataToState","setChartDataFilterFormObject","setChartOptions","setChartCanUpdateData","setDurationView","setTemperatureView","setShowMeterDatesAndRanges","onDataFilterFormSubmit","_getState","chartDataFilterFormObject","selectedChartView","dataFilterMessage","chartTableSettings","requestedDataPointsTemp","heatMapData","timeSeriesData","toggleCalendarChartShowPeakDemand","toggleCalendarChartShowTemperature","timeOfDayMatch","highchartSeries","showPeakDemand","crosshair","dateTimeLabelFormats","dateTimeMoment","dayOfWeek","outside","HighchartForCalendarChartMonthView","comparisonLoadCurveData","showComparisonLoadCurve","isLastDay","averageSeries","HighchartForCalendarChartDayView","data2","tempData","overflowX","tableCell","tableGreyCell","tableNoDataCell","CalendarChartTable","currentMoment","handlePrevious","changeViewToDay","changeViewToMonth","currentMonthData","selectDate","currentDayData","calendar","firstDay","daysInMonth","getDate","firstDayNumber","week","finalSeries","dayData","createCalendar","datePickerViews","getDataPickerViews","ButtonGroup","KeyboardArrowLeft_default","KeyboardArrowRight_default","minDate","maxDate","labelFunc","formatDateLabel","TableHead","CalendarChart","chartCanUpdateData","intervalDataForCalendarChart","currentMonth","isSame","isAfter","toggleShowPeakDemand","calendarChartShowPeakDemand","toggleShowComparisonLoadCurve","checkKey","keyCode","loadCurveForm","onkeydown","calendarChartShowTemperature","chartTitleBar","chartSection","tabsContainer","tabSelected","borderTopRightRadius","borderTopLeftRadius","tabsExtraSpace","chartTypeTab","toggleContainer","MainChartContainer","_React$useState3","_React$useState4","ChartWrapper","chartArea","titleBarRight","heatmapLegend","backgroundImage","button2","heatMapGradient","ChartsView","getTitleText","getChart","setOptions","constructorType","toggleTemperature","refs","chartComponent","reflow","toggleTemperatureView","handleChartOptionChange","toggleDurationView","showMeterDatesAndRanges","toggleShowDatesAndRangesView","startIcon","thermometer","components_ChartWrapper_ChartWrapper","TableView","exportDataAsCsv","highchartsHeatmap","highchartsBoost","getChartsView","Charts_ChartsView","Charts_TableView","CustomTabsPaper","hiddenElement","encodeURI","download","click","SurfacePlot","getCurrentComponent","plotlyChartOptions","react_plotly_default","selectChartView","ChartsTabs","selectedIndex","DataViewTemplateTemp","intervalDataForZoomable","intervalDataForHeatMap","setDefaultDataFilterForm","defaultForm","setDataFilterForm","exportDataAsCsvFunciton","getRightContent","CloudDownload_default","_this$props3","MainChartsComponent","Charts_SurfacePlot","Charts_CalendarChart","Charts_Tabs","DataViewTemplate","ImportDataFacilityView","BootstrapInput","label + &","transitions","create","InputBase","weekTable","selectedWeekTable","light","gridSection","hr","clear","formSectionTitle","DataTypeDropdown","handleDataFilterFormSelectChange","NativeSelect","SummaryLevelDropdown","_ref2","DaysSection","_ref3","handleDataFilterFormCheckboxChange","handleAggregateDataFilterFormInputs","MonthsSection","_ref4","Divider","YearsSection","_ref5","gridWidth","numberOfYears","DataTypesSection","_ref6","SeriesTypeSection","_ref7","seriesType","SeriesTypeDropdown","_ref8","handleSeriesTypeDropdownChange","currentValue","DateRangeSection","_ref9","handleDataFilterFormDateAndTimeChange","TimeRangeSection","_ref10","times","endTimes","sameDay","start2","ChartDataFilterForm","currentFormOptions","summaryLevel","seriesTypeDropdown","seriesTypeSection","dataRange","chartDataFilterFormHasChanged","seriesTypesDropdown","seriesTypesSection","dataTypesSection","seriesTypesDropdownSelection","updateChartDataFilterForm","formSubmitToolbar","FilterList_default","data_filter_form_sections_DataTypeDropdown","data_filter_form_sections_DataTypesSection","data_filter_form_sections_SummaryLevelDropdown","data_filter_form_sections_SeriesTypeDropdown","data_filter_form_sections_DaysSection","data_filter_form_sections_MonthsSection","data_filter_form_sections_YearsSection","data_filter_form_sections_SeriesTypeSection","data_filter_form_sections_DateRangeSection","data_filter_form_sections_TimeRangeSection","MeterDataFilterFormContainer","DataFilterForm","OverviewSidebarAddressSection","OverviewSidebarUtilitySection","Link_Link","OverviewSidebarUtilityAccountSection","OverviewLeftSidebar","editFacility","components_OverviewSidebarAddressSection","components_OverviewSidebarUtilitySection","components_OverviewSidebarUtilityAccountSection","addUsersToState","users","setActiveUser","regressionTest","inputArray","outputArray","mlr","MLR","sumY","yMean","predictionArray","sumVarianceSquared","sumYSquared","predict","pow","r2","numberOfPredictors","sampleSize","r2adjusted","pValues","tStats","n","ptype","m","bt","exp","gamnln","betacf","betai","pt","coef","tmp","ser","qab","qap","qam","c","d","h","m2","aa","del","DegreeDaysClass","setSummaryChartData","generateHandontableSettings","getRegression","degreeDayData","_this$data","dates","cdd","hdd","demand","userOptions","RegressionClass","daysArray","regression","getSummaryChartOptions","actual","_this$getRegression","setRawWeatherDataChartOptions","selectedDataType","weather","weatherData","tableSettings","currentDataTypeObject","axisLabel","setDegreeDayChartToUpdate","clearDegreeDaysRedux","getDegreeDaysRedux","cddBase","hddBase","degreeDaysRequest","getDefaultDegreeDayRequestObjectFromFacility","summaryChartsRequest","summaryChartResponse","degreeDayResponse","merged","itmInner","getTableSettingsPromise","Promise","resolve","reject","WeatherFilterForm","cddBaseInput","hddBaseInput","cddBaseCurrent","hddBaseCurrent","chartCanUpdate","formHasChanged","onDegreeDayChange","_this$setState","baseType","degreeDayTextField","WeatherSidebar","CalendarChartSidebar","toggleShowTemperature","Checkbox","checked","EmissionsSidebar","emissionsObject","stateName","subRegion1Abbr","subRegion1Name","RawWeatherDataSidebar","dataTypes","changeDataType","Select","labelId","MenuItem","rawWeatherDataChartOptions","FacilitySidebar","setNavbarState","visible","facilitySidebarOpen","LeftSidebar","MeterNavbar_MeterDataFilterFormContainer","CalendarChart_CalendarChartSidebar","Sidebar_WeatherFilterForm","RawDataSidebar","components_Sidebar","sidebar","drawer","flexShrink","drawerOpen","easing","sharp","enteringScreen","drawerClose","leavingScreen","drawerPaper","WeatherTabs","DegreeDaysTemp","changeChartType","newValue","ToggleButtonGroup","exclusive","ToggleButton","BarChart_default","degreeDaysHandsontableSettings","degreeDayChartToUpdate","DegreeDays","selectEmpty","AnyReactComponent","weatherStationName","LocationOn_default","WeatherStationMap","lat","weatherStation","latitude","lng","longitude","google_map_react_lib_default","bootstrapURLKeys","defaultCenter","defaultZoom","WeatherStationMap_AnyReactComponent","WeatherStation","WeatherStation_WeatherStationMap","RawWeatherData","Weather","Weather_WeatherStation","Weather_DegreeDays","Weather_RawWeatherData","weatherHandsontableSettings","components_Tabs","RegressionDetails","coefficient","weights","stdError","stdErrors","tStat","pValue","scope","RegressionSummary","CustomSlider","orange","rail","Slider","valueLabelComponent","popperRef","useRef","update","Tooltip","PopperProps","enterTouchDelay","placement","ScheduleSlider","_this$props$groups","groups","weekdays","weekends","schedule","startHours","start15Min","endHours","end15Min","changeSchedule","toggleDisabled","_this$props$groups2","bool","unoccupiedDay","defaultValue","Sliders_CustomSlider","slider","valueLabelDisplay","ValueLabelComponent","step","Schedule","formatValueAsTime","toggleGroupedDays","currentTarget","_this$state$groups","Schedule_ScheduleSlider","PeriodLength","setPeriodLength","periodLength","MonthlySetup","billingDate","billingDateSelectArray","monthBlockTableSettings","dailyData","monthBlocks","getBillingDateSelectArray","getDailySummaryData","hooks","editMonthBlocks","buildTableWithMonthblocks","handleBillingDateChange","buildDefaultMonthBlocks","previousEndDate","done","applyDataToMonth","buildMonthTable","total","totalKwh","datePickerConfig","toDate","hotTableComponent","displayEmpty","DateRanges","baseline","marks","valueLabelFormat","TemperatureSettings","monthly","cddActive","hddActive","cddTemp","hddTemp","toggleActiveCddOrHdd","changeTemperature","inputProps","getDayOfMonth","startOfMonth","startOf","getExactDates","dateAsMoment","Holidays","holidays","getDates","toggleHoliday","year1","year2","sort","FormGroup","holiday","CreateRegression","nextStep","previousStep","components_PeriodLength","components_MonthlySetup","components_DateRanges","components_TemperatureSettings","components_Holidays","components_Schedule","getSteps","Regression","exportCsv","regressionRedux","Regression_CreateRegression","NavigationTabs","MeterEmissionsTable","annualConsumption","meterEmissions","valueAsString","paging","exportButton","MeterMonthlyEmissionsChart","emissionConstants","MeterResourceMixChart","resources","EquivalentCard","textArea","EmissionsComparisons","metricTonsCo2e","carbonEquivalentPounds","constants","metricTonsRatios","metricTonsPer","equivalent","gasStation","homeSVG","burningCoal","coalRailcar","car","oilBarrel","EmissionsComparisons_EquivalentCard","cardContent","MeterCo2ECard","comparisonsOpen","toggleComparisonOpen","annualCo2","annualCh4","annualN2o","annualCo2e","divider","Meter_EmissionsComparisons","expandDown","eGridRegionName","GhgClass","stateOrSubregion","includeLineLosses","usStates","abbreviation","eGridRegions","subRegion2Name","subRegion2","subRegion3Name","subRegion3","subRegion2Abbr","subRegion3Abbr","getLocation","_getLocationEmissions","setEmissionsObject","emissionsStateVsRegion","emissionsIncludeLosses","toggleEmissionsIncludeLosses","handleEmissionsStateVsRegionChange","string","GhgMeter","subRegionEmissionChartOptions","GhgObject","toggleIncludeLosses","handleStateVsRegionChange","_this$props$emissions","Switch_Switch","Meter_MeterCo2ECard","Meter_MeterEmissionsTable","Meter_MeterMonthlyEmissionsChart","Meter_MeterResourceMixChart","EmissionsTabs","Emissions","Meter","MeterSettingsTabs","CustomColorPicker","displayColorPicker","styles","reactCSS","g","swatch","popover","cover","react_color_lib","MeterCreateNewDate","handleColorChange","rgb","handleTextChange","_this$state$form","hideTabs","autoOk","inputVariant","KeyboardButtonProps","ColorPicker_CustomColorPicker","MeterDatesAndRanges","createEventDialogOpen","eventsGif","CreateNewDate","MeterSettings","DatesAndRanges","Settings_components_Tabs","FacilityHomeContainerTemp","prevUrlParams","prevFacilityView","pushToDashboard","_this$props$selectedF","history","_this$props$match$par2","Overview","Charts","components_Weather","components_Emissions","components_Regression","Settings","_this$props$match$par3","subTitleBar","MeterNavbar","components_NavigationTabs_NavigationTabs","FacilityHomeContainer","userObject","toggleEditUserDialog","toggleDeleteUserDialog","UsersTable","FacilityEditDeleteAddIcons_Icons","CreateUserForm","handleCreateUserInputChange","createUserFormControls","attemptedCreateUserSubmit","CreateUserDialog","createUserDialogOpen","toggleCreateUserDialog","onCreateUserSubmit","forms_CreateUserForm","EditFacilityForm","handleEditUserInputChange","editUserFormControls","attemptedEditUserSubmit","EditUserDialog","editUserDialogOpen","onEditUserSubmit","selectedUserForEdit","EditUserForm","DeleteUserDialog","deleteUserDialogOpen","selectedUserForDelete","onDeleteUserSubmit","BuyMoreUsersDialog","buyMoreUsersDialog","toggleBuyMoreUsersDialog","OrganizationSettingsHomeComponent","organization","containers_UsersTable","dialogs_CreateUserDialog","dialogs_BuyMoreUsersDialog","dialogs_EditUserDialog","dialogs_DeleteUserDialog","ADMIN","createOrUpdateUserRequestObject","UserId","UserName","FirstName","LastName","OrganizationName","PhoneNumber","deleteUser","getOrganizationPaymentMethods","getActiveProductPlans","createOrUpdatePaymentMethod","removePaymentMethod","createOrUpdateOrganizationSubscription","cancelOrganizationSubscription","createOrUpdateUser","getOrganizationUsers","getOrganization","getOrganizationSubscription","getConfigurationSettings","subscription","organizationPaymentMethods","products","paymentMethodId","StripePaymentMethodId","User","userId","stripePlanId","quantity","StripePlanId","Quantity","getUserForm","firstName","lastName","phoneNumber","OrganizationSettingsContainer","createUserFormIsValid","editUserFormIsValid","toggleEditOrganizationDialog","userRequest","tiers","subheader","price","buttonVariant","SubscriptionCard","tier","CardHeader","titleTypographyProps","subheaderTypographyProps","StarBorder_default","cardHeader","cardPricing","@global","ul","li","listStyle","toolbarTitle","heroContent","footer","Profile","StyleSheet","paddingHorizontal","author","marginVertical","marginHorizontal","pageNumber","html2canvas","getElementById","canvas","appendChild","toDataURL","userInfo","username","organizationName","EditAccountInformation","editAccountFormIsValid","attemptedEditAccountSubmit","editAccountDialogOpen","editAccountFormControls","activeUser","toggleEditAccountDialog","onEditAccountSubmit","handleEditAccountInputChange","AccountSummary","AccountSummary_Profile","selectedLink","fade","selectedIcon","AccountNavbar","ChangePasswordForm","changePasswordFormIsValid","submitError","mesasge","changePasswordForm","currentPassword","showPassword","isPassword","confirmPassword","handleShowPassword","changePasswordFormKeys","endAdornment","InputAdornment","Visibility_default","VisibilityOff_default","FormHelperText","PasswordManagement","Password_ChangePasswordForm","CardSection","section","elementContainer","react_stripe_elements_es","disableUnderline","CheckoutForm","ev","elements","getElement","cardElement","stripe","createPaymentMethod","billing_details","paymentMethod","confirmCardPayment","payment_method","confirmCardSetup","createToken","createSource","owner","PaymentMethod_CardSection","injectStripe","MyStoreCheckout","PaymentMethod_CheckoutForm","PaymentMethod","apiKey","PaymentMethod_MyStoreCheckout","CancelSubscriptionDialog","currentPeriodEndDate","EditSubscriptionDialog","CurrentSubscription","chosenSubscription","cancelSubscriptionDialogOpen","editSubscriptionDialogOpen","cancelSubscription","resetActiveUser","toggleCancelSubscriptionDialog","cancelAtPeriodEnd","toggleEditSubscriptionDialog","trialPeriodEndDate","pricePerLicense","trialEnd","subscriptionDetails","plan","Edit_default","Components_CancelSubscriptionDialog","Components_EditSubscriptionDialog","fonstSize","cancel","iconTable","LoadingButton","_props$variant","buttonGroup","CardForm","useStripe","useElements","setName","_React$useState5","_React$useState6","setSubmitting","_React$useState7","_React$useState8","_React$useState9","_React$useState10","setNameIsValid","_React$useState11","_React$useState12","asyncToGenerator","mark","CardElement","sent","_x","_x2","_x3","apply","PoweredByStripeSVG","react_stripe_umd","base","::placeholder","invalid","CustomButtons_LoadingButton","showCancel","stripePromise","toggleShowUpdateCreditCard","loadStripe","stripePublishKey","cardIcon","warningIcon","CurrentPaymentMethod","organizationPaymentMethod","fetchingPaymentMethod","brand","last4","exp_month","exp_year","HorizontalDivider","verticalMargin","PaymentMethodRev2","uploadingNewPaymentMethod","removingPaymentMethod","showUpdateCreditCard","handleDelete","organizationPaymentMethodId","getPaymentMethod","HashLoader_default","PaymentMethodRev2_CurrentPaymentMethod","errorIcon","Dividers_HorizontalDivider","PaymentMethodRev2_CheckoutForm_CheckoutForm","SubscriptionCounter","handleQuantityChange","AccountActivationStep1","handleUserCountChange","Counter_SubscriptionCounter","AccountActivationStep2","Check_default","AccountActivationStep4","plans","loadingPlans","onActivateSubmit","handleSubscriptionDurationChange","subscriptionDuration","paymentTotal","selectedSubscriptionBox","subscriptionBox","centerGrid","subscriptionTitle","paragraphs","list","TermsOfUseContent","paragraph","AccountActivationStep3","setAgreeToTerms","agreeToTerms","setOpen","DialogTitle","Legal_TermsOfUseContent","AccountActivationStepper","submittingActivation","calculatePayment","costPerUser","wait","ms","getTime","resetUserInfo","Components_Step1","Components_Step2","Step3","Step4","stepper","actionsContainer","resetContainer","ActivateSubscription","showPaymentMethod","toggleShowPaymentMethod","Components_AccountActivationStepper","AccountSubscription","paymentMethods","isArray","getBannerMessage","Subscription_CurrentSubscription","Subscription_PaymentMethodRev2","bullet","hyphens","wordBreak","wordWrap","GoogleLayout","TestLayout","AccountTabs","centered","AccountHome","activeComponent","Home_default","Lock_default","CreditCard_default","People_default","tabs2","Dashboard_default","getMainComponent","Subscription","Components_AccountSummary","Components_TestLayout","containers_OrganizationSettingsContainer","Components_AccountTabs","accountSection","breadcrumbs","SimpleBreadcrumbs","alignContent","Breadcrumbs","textColor","borderRightWidth","titleText","borderBottomWidth","accountMenu","accountPopper","circle","initials","nameAndCompanyBlock","MenuAppBar","anchorEl","setAnchorEl","Boolean","firstInitial","charAt","lastInitial","Popover","transformOrigin","List","ListItem","ListItemIcon","ListItemText","ExitToApp_default","Footer","endUserLicenseAgreement","additionalTerms","TermsOfUse","TermsContent_2_18_2020","ReportBug","fields","addOrganizationSubscription","changeTheme","privacy","PrivacyContent","Privacy","Legal_PrivacyContent","StillThereDialog","toggleStillThereDialog","secondsLeft","DialogContentText","warningTimer","timeoutTimer","timeoutWarningSecondsDisplayInterval","theme2","createMuiTheme","black","timoutWarning","timoutNow","HomeFunc","reportBug","userSubscriptionIsActive","stillThereDialog","confirmedStillThere","secondsTillLogout","confirmStillThere","resetTimeOutTimer","toggleReportBugDialog","onReportBugSubmit","_this$state$reportBug","refreshTokenTimer","lastUserFeedbackString","lastUserFeedbackDateString","lastUserFeedbackDate","_unused","startWarningTimer","idleWarning","setUserLastClick","clearTimeout","setSecondsLeft","idleTimeout","MuiThemeProvider","TopNavbar","Switch","components_PrivateRoute","DashboardContainer","Fab","components_ReportBug","Activate_Subscription","tempThemeColor","passwordChanged","blankChangePasswordForm","ResetPassword","_this$state$changePas","queryString","src_ResetPassword","hostname","editMeterFormControlsDefault","allReducers","combineReducers","editedUserProperties","_action$payload","editedUser","changeCreditCardDialogOpen","organizationSubscription","editedProject","intervalDataForDemandDuration","returnData","timeLog","intervalDataForSurfacePlot","intervalDataForExport","intervalDataForLoadCurve","intervalDataForSummaryChart","importFacilityDataDialogOpen","initialName","formReducer","store","createStore","compose","applyMiddleware","thunk","devToolsEnhancer","trace","hist","createBrowserHistory","ReactDOM","react_redux_es","Router","Home","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.f8707273.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/powered_by_stripe.2a6a0649.svg\";","module.exports = __webpack_public_path__ + \"static/media/excelLogo.ee7f0239.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/importDataSnip.4ced13ab.JPG\";","module.exports = __webpack_public_path__ + \"static/media/Spring15min.101678a5.png\";","module.exports = __webpack_public_path__ + \"static/media/Fall15min.dbf7b6bf.png\";","module.exports = __webpack_public_path__ + \"static/media/Spring30min.187dca1c.png\";","module.exports = __webpack_public_path__ + \"static/media/Fall30min.8b3c1097.png\";","module.exports = __webpack_public_path__ + \"static/media/Spring60min.4760fa63.png\";","module.exports = __webpack_public_path__ + \"static/media/Fall60min.d468a826.png\";","module.exports = __webpack_public_path__ + \"static/media/moon.0c9c5c1c.svg\";","import React from \"react\";\r\nimport {Route, Redirect, Switch} from \"react-router-dom\";\r\n\r\nconst PrivateRoute = ({ component: Component, ...rest }) => (\r\n \r\n sessionStorage.getItem(\"user\") ? (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n />\r\n);\r\n\r\nexport default PrivateRoute;\r\n","/**\r\n * API URL PATHs\r\n */\r\n//forward slash in front of API means getting the data from the domain root, not the current page\r\nconst config = {\r\n account: \"/api/account\",\r\n project: \"/api/project\",\r\n facility: \"/api/facility\",\r\n intervalData: \"/api/intervalData\",\r\n admin: \"/api/admin\",\r\n \r\n};\r\n\r\nexport default config;\r\n","/**\r\n * Auth header is a helper function that returns an HTTP Authorization header\r\n * containing the basic authentication credentials (base64 username and password)\r\n * of the currently logged in user from local storage. If the user isn't logged\r\n * in an empty object is returned.\r\n *\r\n * The auth header is used to make authenticated HTTP requests to the server\r\n * api using basic authentication.\r\n */\r\n\r\nexport function authHeader(multiPartFormData) {\r\n let user = JSON.parse(window.sessionStorage.getItem(\"user\"));\r\n\r\n if (user && user.token) {\r\n if (multiPartFormData){\r\n return {\r\n Authorization: \"Bearer \" + user.token\r\n }\r\n }\r\n return {\r\n Authorization: \"Bearer \" + user.token,\r\n \"Content-Type\": \"application/json; charset=utf-8\"\r\n };\r\n } else {\r\n if (multiPartFormData){\r\n return {\r\n }\r\n }\r\n return {\r\n \"Content-Type\": \"application/json; charset=utf-8\"\r\n };\r\n }\r\n}\r\n","import config from \"../config\";\r\nimport { authHeader } from \"../helpers/auth-header\";\r\nimport { getUser } from \"../services/user.service\";\r\nimport {logout} from \"../services/user.service\";\r\n\r\nlet REQUESTTYPES = {\r\n get: {\r\n method: \"GET\",\r\n headers: authHeader()\r\n },\r\n post: {\r\n method: \"POST\",\r\n headers: authHeader()\r\n },\r\n postMultiPart: {\r\n method: \"POST\",\r\n headers: authHeader(true),\r\n }\r\n};\r\n\r\n// Primary fetch helper function\r\nconst fetchHelper = (apiURL, endpoint, param, requestType) => {\r\n \r\n //set LastUserFeedback on any URL request except refreshToken\r\n if(endpoint.toLowerCase() !== \"refreshtoken\")\r\n sessionStorage.setItem(\"LastUserFeedback\", new Date());\r\n \r\n //REQUESTTYPES[requestType].headers = authHeader(); // make sure the header includes the token\r\n let fetchUrl = `${apiURL}/${endpoint}`;\r\n\r\n let requestOptions = {};\r\n \r\n switch(requestType){\r\n case \"get\":{\r\n requestOptions = {\r\n method: \"GET\",\r\n headers: authHeader()\r\n }\r\n }\r\n break;\r\n case \"post\":{\r\n requestOptions = {\r\n method: \"POST\",\r\n headers: authHeader()\r\n }\r\n }\r\n break;\r\n case \"postMultiPart\":{\r\n requestOptions = {\r\n method: \"POST\",\r\n headers: authHeader(true),\r\n }\r\n }\r\n break;\r\n }\r\n \r\n // append url if param is present\r\n if (param && requestType === \"get\") {\r\n fetchUrl += \"/\" + param;\r\n }\r\n\r\n if (requestType === \"postMultiPart\") {\r\n requestOptions.body = param;\r\n }else if (requestType === \"post\") {\r\n requestOptions.body = JSON.stringify(param);\r\n }\r\n\r\n return fetch(fetchUrl, requestOptions).then(response => {\r\n // debugger;\r\n // if (!response.ok) {\r\n // throw Error(response.statusText);\r\n // }\r\n return responseStatusHandler(response);\r\n }).catch(function(error) {\r\n return {isSuccess: false}\r\n });\r\n};\r\n\r\n// Function for handling statuses inside fetchHelper()\r\nconst responseStatusHandler = response => {\r\n //debugger;\r\n // Unauthorized and server issue catch\r\n if (response.status === 401) {\r\n logout();\r\n window.location.reload();\r\n return response;\r\n }\r\n\r\n if (response.status === 501) {\r\n logout();\r\n return response;\r\n }\r\n \r\n if (response.status === 200) {\r\n response = response.json();\r\n return response;\r\n } else {\r\n // ...\r\n }\r\n // TODO: deal with friendly error responses here?\r\n};\r\n\r\n//get error message out of response\r\nconst getErrorMessage = (response) =>{\r\n //default error message\r\n let errorMessage = \"Something went wrong. Please try again or contact React Energy Support.\";\r\n\r\n //check if response returned a better error message\r\n if (response.errors && response.errors.length > 0){\r\n errorMessage = response.errors[0].message;\r\n }\r\n \r\n return errorMessage;\r\n};\r\n\r\nexport {\r\n REQUESTTYPES,\r\n fetchHelper,\r\n getErrorMessage\r\n};","import config from \"../config\";\r\nimport { authHeader } from \"../helpers/auth-header\";\r\nimport { REQUESTTYPES, fetchHelper, responseStatusHandler } from \"./serviceHelper\";\r\n\r\nconst ACCOUNT = config.account;\r\n\r\nconst ENDPOINTS = {\r\n account: {\r\n login: \"Login\",\r\n forgotPassword: \"ForgotPassword\",\r\n resetPassword: \"ResetPassword\",\r\n submitFeedback: \"SubmitFeedback\",\r\n changePassword: \"ChangePassword\",\r\n refreshToken: \"RefreshToken\"\r\n }\r\n};\r\n\r\nconst login = ($email, $password) => {\r\n const response = fetchHelper(\r\n ACCOUNT,\r\n ENDPOINTS.account.login,\r\n {Email: $email, Password: $password},\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (response.isSuccess) {\r\n // store the details and basic auth credentials in local storage\r\n // to keep user logged in between page refreshes\r\n sessionStorage.setItem(\"user\", JSON.stringify(response.user));\r\n // Perform redirect to '/'\r\n //window.location.href = \"/\";\r\n } else {\r\n return response;\r\n }\r\n });\r\n \r\n return response;\r\n};\r\n\r\nconst refreshToken = () => {\r\n let user = getUser();\r\n \r\n const response = fetchHelper(\r\n ACCOUNT,\r\n ENDPOINTS.account.refreshToken,\r\n {Token: user.token},\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (response.isSuccess) {\r\n //update token with new token\r\n user.token = response.token;\r\n \r\n // update local storage with new\r\n sessionStorage.setItem(\"user\", JSON.stringify(user));\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return response;\r\n};\r\n\r\nconst forgotPassword = ($email) => {\r\n const response = fetchHelper(\r\n ACCOUNT,\r\n ENDPOINTS.account.forgotPassword,\r\n {Email: $email},\r\n \"post\"\r\n ).then(response => {\r\n if (!response.isSuccess) {\r\n return response;\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return response;\r\n};\r\n\r\n//this method is used to verify the token is valid on first call (leave newPassword blank/null)\r\n//this method is then used to update the password by passing both the token and the new password\r\nconst resetPassword = (token, newPassword) => {\r\n const response = fetchHelper(\r\n ACCOUNT,\r\n ENDPOINTS.account.resetPassword,\r\n {Token: token, NewPassword: newPassword},\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n return response\r\n //todo: do something here on failure\r\n //todo: most likely invalid token\r\n //possibly failure to update password\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return response;\r\n};\r\n\r\nconst submitFeedback = (subject, message) => {\r\n const response = fetchHelper(\r\n ACCOUNT,\r\n ENDPOINTS.account.submitFeedback,\r\n {Subject: subject, Message: message},\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n return response\r\n //todo: do something here on failure\r\n //todo: most likely invalid token\r\n //possibly failure to update password\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return response;\r\n};\r\n\r\nconst changePassword = (oldPassword, newPassword) => {\r\n const response = fetchHelper(\r\n ACCOUNT,\r\n ENDPOINTS.account.changePassword,\r\n {OldPassword: oldPassword, NewPassword: newPassword},\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n return response\r\n //todo: do something here on failure\r\n //todo: most likely invalid token\r\n //possibly failure to update password\r\n // return response;\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return response;\r\n};\r\n\r\n\r\nconst logout = () => {\r\n sessionStorage.removeItem(\"user\");\r\n //window.location.href = '/';\r\n};\r\n\r\nconst getUser = () => {\r\n if (window.sessionStorage.user) {\r\n const user = JSON.parse(window.sessionStorage.user);\r\n return user;\r\n }\r\n return undefined;\r\n};\r\n\r\nexport {\r\n login,\r\n refreshToken,\r\n logout,\r\n getUser,\r\n forgotPassword,\r\n resetPassword,\r\n submitFeedback,\r\n changePassword\r\n};\r\n","import React, { Component } from 'react';\r\nimport \"react-responsive-carousel/lib/styles/carousel.min.css\";\r\nimport { Carousel } from 'react-responsive-carousel';\r\n// import heatmap from \"../../assets/img/macbookHeatmap.png\"\r\nimport heatmap from '../../assets/img/chartPics/HeatmapForLogin.png'\r\nimport scatterplot from '../../assets/img/chartPics/ScatterForLogin.png'\r\n\r\n// Colors\r\nimport blue from '@material-ui/core/colors/blue';\r\n\r\nclass DemoCarousel extends Component {\r\n render() {\r\n return (\r\n \r\n
\r\n \"Logo\"\r\n {/*

Legend 1

*/}\r\n
\r\n
\r\n \"Logo\"\r\n {/*

Legend 1

*/}\r\n
\r\n
\r\n );\r\n }\r\n};\r\n\r\nexport default DemoCarousel","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n// Material UI\r\nimport Button from '@material-ui/core/Button';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport Input from '@material-ui/core/Input';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport withStyles from '@material-ui/core/styles/withStyles';\r\nimport blue from '@material-ui/core/colors/blue';\r\nimport grey from '@material-ui/core/colors/grey';\r\n\r\n// Logo\r\nimport reactlogo from \"../../assets/img/ReactLogo_NoShadow.svg\"\r\n\r\n// Carousel\r\nimport LoginCarousel from './Carousel'\r\n\r\nconst styles = theme => ({\r\n main: {\r\n // width: 'auto',\r\n // display: 'block', // Fix IE 11 issue.\r\n // maxWidth: 400,\r\n // marginLeft: theme.spacing.unit * 3,\r\n // marginRight: theme.spacing.unit * 3,\r\n // [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: {\r\n // width: 800,\r\n // // marginLeft: 'auto',\r\n // // marginRight: 'auto',\r\n // },\r\n },\r\n paper: {\r\n marginTop: theme.spacing.unit * 8,\r\n marginRight: theme.spacing.unit * 1,\r\n marginLeft: theme.spacing.unit * 1,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n // padding: `${theme.spacing.unit * 1}px ${theme.spacing.unit * 1}px ${theme.spacing.unit * 1}px`,\r\n minHeight: 500,\r\n // maxWidth: 400\r\n \r\n },\r\n carousel: {\r\n // marginTop: theme.spacing.unit * 8,\r\n // display: 'flex',\r\n // flexDirection: 'column',\r\n // alignItems: 'center',\r\n // padding: `${theme.spacing.unit * 0}px ${theme.spacing.unit * 0}px ${theme.spacing.unit * 0}px`,\r\n // minHeight: 500,\r\n // maxWidth: 400,\r\n display: 'none',\r\n [theme.breakpoints.up('md')]: {\r\n display: 'flex',\r\n },\r\n },\r\n avatar: {\r\n margin: theme.spacing.unit,\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n form: {\r\n width: '100%', // Fix IE 11 issue.\r\n marginTop: theme.spacing.unit,\r\n },\r\n submit: {\r\n marginTop: theme.spacing.unit * 3,\r\n },\r\n hidden:{\r\n display: 'none'\r\n },\r\n red:{\r\n color: 'red'\r\n },\r\n forgotPassword: {\r\n color: blue[700],\r\n '&:hover': {\r\n color: blue[900],\r\n textDecoration: 'underline',\r\n cursor: 'pointer'\r\n }\r\n }\r\n});\r\n\r\nfunction LogInTemplate(props) {\r\n const { classes,\r\n title,\r\n content,\r\n toggleViewText,\r\n toggleView\r\n } = props;\r\n //console.log(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 \"Logo\"\r\n \r\n {title}\r\n \r\n {content}\r\n \r\n {toggleViewText}\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n
\r\n \r\n\r\n
\r\n\r\n
\r\n );\r\n}\r\n\r\nLogInTemplate.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(LogInTemplate);","import React, { Component } from 'react';\r\nimport { css } from '@emotion/core';\r\n// First way to import\r\n//import { ClipLoader } from 'react-spinners';\r\n// Another way to import\r\nimport PulseLoader from 'react-spinners/PulseLoader';\r\nimport { useTheme } from '@material-ui/core/styles';\r\n\r\n\r\nconst override = css`\r\n display: block;\r\n margin: 0 auto;\r\n border-color: red;\r\n`;\r\n\r\nfunction CustomPulseLoader(props) {\r\n const theme = useTheme();\r\n \r\n let color;\r\n props['color'] ? color = props.color : color = theme.palette.primary.main;\r\n \r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default CustomPulseLoader;","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n// Material UI\r\nimport Button from '@material-ui/core/Button';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport Input from '@material-ui/core/Input';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport withStyles from '@material-ui/core/styles/withStyles';\r\nimport blue from '@material-ui/core/colors/blue';\r\nimport grey from '@material-ui/core/colors/grey';\r\n\r\n// Services\r\nimport { login } from \"../services/user.service\";\r\n\r\n// Logo\r\nimport reactlogo from \"../assets/img/ReactLogo_NoShadow.svg\"\r\n\r\n// Carousel\r\nimport LoginCarousel from './components/Carousel'\r\nimport LogInTemplate from \"./components/loginTemplate\";\r\nimport CustomPulseLoader from \"../components/Spinners/pulse-loader\";\r\n\r\nconst styles = theme => ({\r\n main: {\r\n // width: 'auto',\r\n // display: 'block', // Fix IE 11 issue.\r\n // maxWidth: 400,\r\n // marginLeft: theme.spacing.unit * 3,\r\n // marginRight: theme.spacing.unit * 3,\r\n // [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: {\r\n // width: 800,\r\n // // marginLeft: 'auto',\r\n // // marginRight: 'auto',\r\n // },\r\n },\r\n paper: {\r\n marginTop: theme.spacing.unit * 8,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n padding: `${theme.spacing.unit * 2}px ${theme.spacing.unit * 3}px ${theme.spacing.unit * 3}px`,\r\n minHeight: 500,\r\n maxWidth: 400\r\n },\r\n carousel: {\r\n marginTop: theme.spacing.unit * 8,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n padding: `${theme.spacing.unit * 0}px ${theme.spacing.unit * 0}px ${theme.spacing.unit * 0}px`,\r\n minHeight: 500,\r\n maxWidth: 400\r\n },\r\n avatar: {\r\n margin: theme.spacing.unit,\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n form: {\r\n width: '100%', // Fix IE 11 issue.\r\n marginTop: theme.spacing.unit,\r\n },\r\n submit: {\r\n marginTop: theme.spacing.unit * 3,\r\n },\r\n hidden:{\r\n display: 'none'\r\n },\r\n red:{\r\n color: 'red'\r\n },\r\n forgotPassword: {\r\n color: blue[700],\r\n '&:hover': {\r\n color: blue[900],\r\n textDecoration: 'underline',\r\n cursor: 'pointer'\r\n }\r\n },\r\n message: {\r\n color: grey[700],\r\n margin: 10,\r\n textAlign: 'center'\r\n }\r\n});\r\n\r\nfunction LogIn(props) {\r\n const { classes,\r\n onFormSubmit,\r\n form,\r\n handleChange,\r\n currentView,\r\n toggleView,\r\n onNewPasswordSubmit, \r\n submitting\r\n } = props;\r\n //console.log(props);\r\n \r\n if (currentView === 'forgotPassword') {\r\n return (\r\n\r\n toggleView('logIn')}\r\n content={
\r\n \r\n If you have forgotten your password, enter the email address associated with your account and we will email you a new temporary password for you account. \r\n
\r\n Once you log in you can reset your password on the account page.\r\n
\r\n {/*{form.error}*/}\r\n \r\n Email Address\r\n handleChange(e)} />\r\n \r\n \r\n {submitting ? : 'Send Reset'}\r\n \r\n }\r\n toggleViewText=\"Back to Sign In\"\r\n />)\r\n } else if (currentView === 'emailSent') {\r\n return (\r\n toggleView('logIn')}\r\n content={
\r\n \r\n If this email is in our system, an email with password reset instructions has been sent to the address provided.\r\n \r\n
\r\n \r\n If you run into issues with the password reset, please reach out to us at Support@ReactEnergy.io.\r\n \r\n
}\r\n toggleViewText=\"Back to Login\"\r\n />\r\n )\r\n } else {\r\n return (\r\n\r\n toggleView('forgotPassword')}\r\n content={
\r\n {form.error}\r\n \r\n Email Address\r\n handleChange(e)} />\r\n \r\n \r\n Password\r\n handleChange(e)}/>\r\n \r\n {/*}*/}\r\n {/* label=\"Remember me\"*/}\r\n {/*/>*/}\r\n \r\n {submitting ? : 'Sign In'}\r\n \r\n }\r\n toggleViewText=\"Forgot Password?\"\r\n />)\r\n }\r\n \r\n}\r\n\r\nLogIn.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(LogIn);","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n// Material UI\r\nimport withStyles from '@material-ui/core/styles/withStyles'\r\n\r\n// Services\r\nimport { login, forgotPassword } from \"../services/user.service\";\r\n\r\n// Carousel\r\nimport LogIn from '../Login/index'\r\n\r\nconst styles = theme => ({\r\n main: {\r\n // width: 'auto',\r\n // display: 'block', // Fix IE 11 issue.\r\n // maxWidth: 400,\r\n // marginLeft: theme.spacing.unit * 3,\r\n // marginRight: theme.spacing.unit * 3,\r\n // [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: {\r\n // width: 800,\r\n // // marginLeft: 'auto',\r\n // // marginRight: 'auto',\r\n // },\r\n },\r\n paper: {\r\n marginTop: theme.spacing.unit * 8,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n padding: `${theme.spacing.unit * 2}px ${theme.spacing.unit * 3}px ${theme.spacing.unit * 3}px`,\r\n minHeight: 500,\r\n maxWidth: 400\r\n },\r\n carousel: {\r\n marginTop: theme.spacing.unit * 8,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n padding: `${theme.spacing.unit * 0}px ${theme.spacing.unit * 0}px ${theme.spacing.unit * 0}px`,\r\n minHeight: 500,\r\n maxWidth: 400\r\n },\r\n avatar: {\r\n margin: theme.spacing.unit,\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n form: {\r\n width: '100%', // Fix IE 11 issue.\r\n marginTop: theme.spacing.unit,\r\n },\r\n submit: {\r\n marginTop: theme.spacing.unit * 3,\r\n },\r\n hidden:{\r\n display: 'none'\r\n },\r\n red:{\r\n color: 'red'\r\n }\r\n});\r\n\r\nclass SignIn extends Component {\r\n state = {\r\n form: {\r\n email: '',\r\n password: '',\r\n error: ''\r\n },\r\n currentView: 'logIn',\r\n submitting: false,\r\n }\r\n \r\n toggleView = (value) => {\r\n this.setState({currentView: value})\r\n }\r\n \r\n handleChange = (event) => {\r\n if (event) {\r\n let value = event.target.value;\r\n let name = event.target.name;\r\n\r\n let form = {...this.state.form};\r\n form[name] = value;\r\n this.setState({form}) \r\n }\r\n \r\n }\r\n \r\n setError = (value) => {\r\n let form = {...this.state.form}\r\n form.error = value;\r\n this.setState({form})\r\n }\r\n\r\n onFormSubmit = e => {\r\n this.setState({submitting: true});\r\n e.preventDefault();\r\n const response = login(\r\n this.state.form.email,\r\n this.state.form.password\r\n );\r\n response.then(response => {\r\n if (response == null){\r\n let temp = this.props;\r\n\r\n let redirectUrl = \"/\";\r\n \r\n if (this.props.location && this.props.location.state){\r\n redirectUrl = this.props.location.state.from.pathname;\r\n if (redirectUrl === undefined || redirectUrl === null || redirectUrl === \"\" || redirectUrl === \"/\"){\r\n redirectUrl = \"/\";\r\n }\r\n }\r\n \r\n window.location.href = redirectUrl;\r\n }\r\n\r\n if (response != null && !response.success && response.errors && response.errors.length > 0){\r\n this.setError(response.errors[0].message)\r\n }\r\n this.setState({submitting: false});\r\n });\r\n };\r\n \r\n onNewPasswordSubmit = e => {\r\n e.preventDefault();\r\n this.setState({submitting: true});\r\n //TODO: send the user a new password. Email can be accessed at this.state.form.email\r\n let email = this.state.form.email;\r\n forgotPassword(this.state.form.email).then(response => {\r\n if (response.isSuccess) {\r\n this.setState({currentView: 'emailSent'})\r\n }\r\n this.setState({submitting: false});\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\nexport default withStyles(styles)(SignIn);","const TOGGLE_IMPORT_FACILITY_DATA_DIALOG = 'TOGGLE_IMPORT_FACILITY_DATA_DIALOG';\r\nconst FACILITY_SELECTED = 'FACILITY_SELECTED';\r\nconst SELECTED_FACILITY_VIEW = 'SELECTED_FACILITY_VIEW';\r\nconst TOGGLE_FACILITY_SIDEBAR = 'TOGGLE_FACILITY_SIDEBAR';\r\nconst SELECTED_FACILITY_SUBVIEW = 'SELECTED_FACILITY_SUBVIEW';\r\n\r\n\r\nconst toggleImportDataDialog = (currentState) => {\r\n return {\r\n type: TOGGLE_IMPORT_FACILITY_DATA_DIALOG,\r\n payload: currentState\r\n };\r\n};\r\n\r\nconst selectFacility = (facility) => {\r\n \r\n return {\r\n \r\n type: FACILITY_SELECTED,\r\n payload: facility\r\n };\r\n};\r\n\r\nconst selectFacilityView = (view, subview) => {\r\n return {\r\n type: SELECTED_FACILITY_VIEW,\r\n payload: {\r\n view,\r\n subview\r\n }\r\n };\r\n};\r\n\r\n\r\nconst toggleFacilitySideBar = (open) => {\r\n return {\r\n type: TOGGLE_FACILITY_SIDEBAR,\r\n payload: open\r\n };\r\n};\r\n\r\nexport {\r\n toggleImportDataDialog,\r\n selectFacility,\r\n selectFacilityView,\r\n toggleFacilitySideBar,\r\n TOGGLE_IMPORT_FACILITY_DATA_DIALOG,\r\n FACILITY_SELECTED,\r\n SELECTED_FACILITY_VIEW,\r\n TOGGLE_FACILITY_SIDEBAR,\r\n};\r\n\r\n","import config from \"../config\";\r\nimport { authHeader } from \"../helpers/auth-header\";\r\nimport { getUser } from \"../services/user.service\";\r\nimport { REQUESTTYPES, fetchHelper, responseStatusHandler } from \"./serviceHelper\";\r\n\r\n// Get api base URLs\r\nconst FACILITY = config.facility;\r\n\r\nconst facilityModel =\r\n {\r\n FacilityId: null,\r\n OrganizationId: null,\r\n Name: \"\",\r\n Description: \"\",\r\n AccountNumber: null,\r\n MeterNumber: null,\r\n Address1: \"\",\r\n Address2: \"\",\r\n City: \"\",\r\n State: \"\",\r\n PostalCode: \"\",\r\n Phone: \"\",\r\n Utility: \"\",\r\n Notes: \"\"\r\n };\r\n\r\nconst facilityNoteModel =\r\n {\r\n FacilityNoteId: null,\r\n FacilityId: null,\r\n Title: \"\",\r\n Notes: \"\"\r\n };\r\n\r\nconst ENDPOINTS = {\r\n facilities: {\r\n getFacilityById: \"GetFacilityById\",\r\n getFacilitiesByProjectId: \"GetFacilitiesByProjectId\",\r\n createOrUpdateFacility: \"CreateOrUpdateFacility\",\r\n deleteFacility: \"DeleteFacility\",\r\n getFacilityNoteById: \"GetFacilityNoteById\",\r\n getFacilityNotesByFacilityId: \"GetFacilityNotesByFacilityId\",\r\n createOrUpdateFacilityNote: \"CreateOrUpdateFacilityNote\",\r\n deleteFacilityNote: \"DeleteFacilityNote\",\r\n }\r\n};\r\n\r\n\r\nconst getFacilityById = (facilityId) => {\r\n const apiResponse = fetchHelper(\r\n FACILITY,\r\n ENDPOINTS.facilities.getFacilityById,\r\n {facilityId: facilityId},\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n return response;\r\n } else {\r\n return response.facility;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst createOrUpdateFacility = (facilityModel) => {\r\n\r\n if (!facilityModel.OrganizationId){\r\n let user = getUser();\r\n facilityModel.OrganizationId = user.organizationId;\r\n }\r\n\r\n const apiResponse = fetchHelper(\r\n FACILITY,\r\n ENDPOINTS.facilities.createOrUpdateFacility,\r\n {\r\n facility: facilityModel\r\n },\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n return response;\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst deleteFacility = (facilityId) => {\r\n const apiResponse = fetchHelper(\r\n FACILITY,\r\n ENDPOINTS.facilities.deleteFacility,\r\n {\r\n FacilityId: facilityId\r\n },\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n return response;\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst getFacilitiesByProjectId = (projectId) => {\r\n const apiResponse = fetchHelper(\r\n FACILITY,\r\n ENDPOINTS.facilities.getFacilitiesByProjectId,\r\n {ProjectId: projectId},\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response.facilities;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst getFacilityNotesByFacilityId = (facilityId) => {\r\n const apiResponse = fetchHelper(\r\n FACILITY,\r\n ENDPOINTS.facilities.getFacilityNotesByFacilityId,\r\n {FacilityId: facilityId},\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst getFacilityNoteById = (facilityNoteId) => {\r\n const apiResponse = fetchHelper(\r\n FACILITY,\r\n ENDPOINTS.facilities.getFacilityNoteById,\r\n {facilityNoteId: facilityNoteId},\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst createOrUpdateFacilityNote = (facilityNoteModel) => {\r\n\r\n const apiResponse = fetchHelper(\r\n FACILITY,\r\n ENDPOINTS.facilities.createOrUpdateFacilityNote,\r\n {\r\n FacilityNote: facilityNoteModel\r\n },\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n return response;\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst deleteFacilityNote = (facilityNoteId) => {\r\n const apiResponse = fetchHelper(\r\n FACILITY,\r\n ENDPOINTS.facilities.deleteFacilityNote,\r\n {\r\n FacilityNoteId: facilityNoteId\r\n },\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n return response;\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\n\r\nexport {\r\n facilityModel,\r\n getFacilitiesByProjectId,\r\n getFacilityById,\r\n createOrUpdateFacility,\r\n deleteFacility,\r\n facilityNoteModel,\r\n getFacilityNotesByFacilityId,\r\n getFacilityNoteById,\r\n createOrUpdateFacilityNote,\r\n deleteFacilityNote\r\n};\r\n","const validate = (value, rules) => {\r\n\r\n let isValid = true;\r\n\r\n for (let rule in rules) {\r\n\r\n switch (rule) {\r\n case 'minLength': isValid = isValid && minLengthValidator(value, rules[rule]); break;\r\n\r\n case 'isRequired': isValid = isValid && requiredValidator(value); break;\r\n\r\n case 'isEmail': isValid = isValid && emailValidator(value); break;\r\n\r\n case 'isPassword': isValid = isValid && passwordValidator(value); break;\r\n\r\n case 'isZipcode': isValid = isValid && zipcodeValidator(value); break;\r\n\r\n default: isValid = true;\r\n }\r\n\r\n }\r\n\r\n return isValid;\r\n}\r\n\r\n\r\nconst minLengthValidator = (value, minLength) => {\r\n return value.length >= minLength;\r\n}\r\n\r\nconst requiredValidator = value => {\r\n return value.trim() !== '';\r\n}\r\n\r\nconst emailValidator = value => {\r\n var re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return re.test(String(value).toLowerCase());\r\n}\r\n\r\nconst passwordValidator = value => {\r\n let letter = false;\r\n let capital = false;\r\n let number = false;\r\n let specialCharacter = false;\r\n let length = false;\r\n\r\n let lowerCaseLetters = /[a-z]/g;\r\n\r\n // if (value.match(lowerCaseLetters)) {\r\n // letter = true;\r\n // } else {\r\n // letter = false;\r\n // }\r\n // this is the same as the above statement\r\n letter = !!value.match(lowerCaseLetters);\r\n\r\n let upperCaseLetters = /[A-Z]/g;\r\n capital = !!value.match(upperCaseLetters);\r\n\r\n let numbers = /[0-9]/g;\r\n number = !!value.match(numbers);\r\n\r\n let specialCharacters = /[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/;\r\n specialCharacter = !!value.match(specialCharacters);\r\n\r\n length = value.length >= 8;\r\n\r\n return (letter && capital && number && length && specialCharacter)\r\n}\r\n\r\nconst zipcodeValidator = value => {\r\n return /(^\\d{5}$)|(^\\d{5}-\\d{4}$)/.test(value) \r\n || /(^\\d{4}$)|(^\\d{4}-\\d{3}$)/.test(value);\r\n}\r\n\r\nexport default validate","const SET_SNACKBAR = 'SET_SNACKBAR';\r\n\r\nconst setSnackbar = (snackbar) => {\r\n return {\r\n type: SET_SNACKBAR,\r\n payload: snackbar\r\n };\r\n};\r\n\r\nconst openSnackbar = (open = false) => {\r\n return (dispatch, getState) => {\r\n const {\r\n snackbar\r\n } = getState();\r\n let snackbarTemp = {...snackbar};\r\n snackbarTemp.open = open;\r\n dispatch({\r\n type: SET_SNACKBAR,\r\n payload: snackbarTemp\r\n });\r\n }\r\n};\r\n\r\nexport {\r\n setSnackbar,\r\n openSnackbar,\r\n SET_SNACKBAR\r\n};\r\n\r\n","import validate from \"../../../../js/validate\";\r\nimport {createOrUpdateFacility, facilityModel, getFacilityById} from \"../../../../services/facility.service\";\r\nimport {getErrorMessage} from \"../../../../services/serviceHelper\";\r\nimport {getProjectsFacilities} from \"../../project-actions\";\r\nimport {SET_SNACKBAR} from \"../../HomeActions/home-actions\";\r\nimport {selectFacility} from \"../../facility-actions\";\r\n\r\nconst SET_EDIT_METER_FORM_IS_VALID = 'SET_EDIT_METER_FORM_IS_VALID';\r\nconst SET_ATTEMPTED_EDIT_METER_SUBMIT = 'SET_ATTEMPTED_EDIT_METER_SUBMIT';\r\nconst TOGGLE_EDIT_METER_DIALOG_OPEN = 'TOGGLE_EDIT_METER_DIALOG_OPEN';\r\nconst SET_SELECTED_METER_FOR_EDIT = 'SET_SELECTED_METER_FOR_EDIT';\r\nconst SET_EDIT_METER_FORM_CONTROLS = 'SET_EDIT_METER_FORM_CONTROLS';\r\nconst SET_FETCHING_NEW_WEATHER_DATA = 'SET_FETCHING_NEW_WEATHER_DATA';\r\nconst SET_EDIT_METER_SNACKBAR = 'SET_EDIT_METER_SNACKBAR';\r\n\r\n\r\nconst setEditMeterFormIsValid = (boolean) => {\r\n return {\r\n type: SET_EDIT_METER_FORM_IS_VALID,\r\n payload: boolean\r\n };\r\n};\r\n\r\nconst setAttemptedEditFacilitySubmit = (boolean) => {\r\n return {\r\n type: SET_ATTEMPTED_EDIT_METER_SUBMIT,\r\n payload: boolean\r\n };\r\n};\r\n\r\nconst setFetchingNewWeatherData = (boolean) => {\r\n return {\r\n type: SET_FETCHING_NEW_WEATHER_DATA,\r\n payload: boolean\r\n };\r\n};\r\n\r\nconst toggleEditMeterDialogOpen = (boolean) => {\r\n return (dispatch, getState) => {\r\n const {\r\n editMeterDialogOpen\r\n } = getState();\r\n dispatch({\r\n type: TOGGLE_EDIT_METER_DIALOG_OPEN,\r\n payload: !editMeterDialogOpen\r\n });\r\n }\r\n\r\n\r\n};\r\n\r\nconst setSelectedMeterForEdit = (meter) => {\r\n return (dispatch, getState) => {\r\n const {\r\n selectedMeterForEdit,\r\n editMeterFormControls\r\n } = getState();\r\n\r\n let editFacilityFormControls = {...editMeterFormControls};\r\n if (selectedMeterForEdit !== null) {\r\n\r\n\r\n // set the state to the facility to edit\r\n\r\n editFacilityFormControls.name.value = meter.name;\r\n editFacilityFormControls.description.value = meter.description;\r\n editFacilityFormControls.meterNumber.value = meter.meterNumber;\r\n editFacilityFormControls.accountNumber.value = meter.accountNumber;\r\n editFacilityFormControls.utility.value = meter.utility;\r\n editFacilityFormControls.address1.value = meter.address1;\r\n editFacilityFormControls.address2.value = meter.address2;\r\n editFacilityFormControls.city.value = meter.city;\r\n editFacilityFormControls.state.value = meter.state;\r\n editFacilityFormControls.postalCode.value = meter.postalCode;\r\n\r\n }\r\n\r\n dispatch({\r\n type: SET_EDIT_METER_FORM_CONTROLS,\r\n payload: editFacilityFormControls\r\n });\r\n\r\n dispatch({\r\n type: SET_SELECTED_METER_FOR_EDIT,\r\n payload: meter\r\n });\r\n\r\n // let editFacilityDialogOpen = !this.state.editFacilityDialogOpen;\r\n // this.setState({ editFacilityDialogOpen, selectedFacilityForEdit: facility })\r\n\r\n }\r\n\r\n};\r\n\r\nconst setEditMeterFormControls = (meter) => {\r\n return {\r\n type: SET_EDIT_METER_FORM_CONTROLS,\r\n payload: meter\r\n };\r\n};\r\n\r\nconst onEditMeterSubmit = (setAsSelectedMeter = false) => {\r\n return (dispatch, getState) => {\r\n const {\r\n editMeterFormControls,\r\n selectedMeterForEdit,\r\n editMeterFormIsValid,\r\n editMeterDialogOpen\r\n } = getState();\r\n\r\n let submittedForm = {...editMeterFormControls};\r\n let keys = Object.keys(submittedForm);\r\n let finalSubmission = {};\r\n keys.forEach(key => {\r\n finalSubmission[key] = submittedForm[key].value\r\n });\r\n\r\n\r\n if (editMeterFormIsValid) {\r\n\r\n let facilityRequest = {...facilityModel};\r\n\r\n facilityRequest.FacilityId = selectedMeterForEdit.facilityId;\r\n facilityRequest.ProjectId = selectedMeterForEdit.projectId;\r\n facilityRequest.Name = finalSubmission.name;\r\n facilityRequest.Description = finalSubmission.description;\r\n facilityRequest.AccountNumber = finalSubmission.accountNumber;\r\n facilityRequest.MeterNumber = finalSubmission.meterNumber;\r\n facilityRequest.Utility = finalSubmission.utility;\r\n facilityRequest.Address1 = finalSubmission.address1;\r\n facilityRequest.Address2 = finalSubmission.address2;\r\n facilityRequest.City = finalSubmission.city;\r\n facilityRequest.State = finalSubmission.state;\r\n facilityRequest.PostalCode = finalSubmission.postalCode;\r\n\r\n if (submittedForm.postalCode.value !== selectedMeterForEdit.postalCode) {\r\n dispatch({\r\n type: SET_FETCHING_NEW_WEATHER_DATA,\r\n payload: true\r\n });\r\n }\r\n\r\n createOrUpdateFacility(facilityRequest).then((response) => {\r\n dispatch({\r\n type: SET_FETCHING_NEW_WEATHER_DATA,\r\n payload: false\r\n });\r\n if (response.isSuccess) {\r\n\r\n dispatch({\r\n type: TOGGLE_EDIT_METER_DIALOG_OPEN,\r\n payload: !editMeterDialogOpen\r\n });\r\n\r\n dispatch({\r\n type: SET_ATTEMPTED_EDIT_METER_SUBMIT,\r\n payload: false\r\n });\r\n let snackbar = {\r\n message: response.successMessage ? response.successMessage : \"Successfully Updated Facility\",\r\n open: true,\r\n variant: 'success'\r\n };\r\n dispatch({\r\n type: SET_SNACKBAR,\r\n payload: snackbar\r\n });\r\n dispatch(getProjectsFacilities());\r\n \r\n if (setAsSelectedMeter) {\r\n getFacilityById(selectedMeterForEdit.facilityId).then(x => {\r\n dispatch(selectFacility(x));\r\n })\r\n };\r\n\r\n } else {\r\n let snackbar = {\r\n message: \"There was an error updating the meter.\",\r\n open: true,\r\n variant: 'error'\r\n };\r\n dispatch({\r\n type: SET_SNACKBAR,\r\n payload: snackbar\r\n });\r\n this.setState({snackbar});\r\n }\r\n });\r\n\r\n } else {\r\n dispatch({\r\n type: SET_ATTEMPTED_EDIT_METER_SUBMIT,\r\n payload: true\r\n });\r\n }\r\n }\r\n};\r\n\r\nconst handleEditMeterInputChange = (event) => {\r\n return (dispatch, getState) => {\r\n const {\r\n editMeterFormControls,\r\n } = getState();\r\n\r\n const value = event.target.value;\r\n const name = event.target.name;\r\n\r\n const updatedControls = {...editMeterFormControls};\r\n\r\n const updatedFormElement = {...updatedControls[name]}\r\n\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n\r\n updatedControls[name] = updatedFormElement;\r\n\r\n\r\n // Check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n\r\n dispatch({\r\n type: SET_EDIT_METER_FORM_CONTROLS,\r\n payload: updatedControls\r\n });\r\n\r\n dispatch({\r\n type: SET_EDIT_METER_FORM_IS_VALID,\r\n payload: formIsValid\r\n });\r\n }\r\n};\r\n\r\n\r\nexport {\r\n setEditMeterFormIsValid,\r\n setAttemptedEditFacilitySubmit,\r\n toggleEditMeterDialogOpen,\r\n setSelectedMeterForEdit,\r\n setEditMeterFormControls,\r\n onEditMeterSubmit,\r\n handleEditMeterInputChange,\r\n SET_EDIT_METER_FORM_IS_VALID,\r\n SET_ATTEMPTED_EDIT_METER_SUBMIT,\r\n TOGGLE_EDIT_METER_DIALOG_OPEN,\r\n SET_SELECTED_METER_FOR_EDIT,\r\n SET_EDIT_METER_FORM_CONTROLS,\r\n SET_FETCHING_NEW_WEATHER_DATA,\r\n SET_EDIT_METER_SNACKBAR\r\n}","import {getFacilitiesByProjectId} from \"../../services/facility.service\";\r\nimport {SET_FETCHING_NEW_WEATHER_DATA} from \"./MeterActions/EditMeterActions/edit-meter-actions\";\r\n\r\nconst TOGGLE_DELETE_PROJECT_DIALOG = 'TOGGLE_DELETE_PROJECT_DIALOG';\r\nconst TOGGLE_EDIT_PROJECT_DIALOG = 'TOGGLE_EDIT_PROJECT_DIALOG';\r\nconst EDIT_PROJECT_PROPERTY = 'EDIT_PROJECT_PROPERTY';\r\nconst PROJECT_SELECTED = 'PROJECT_SELECTED';\r\nconst GET_PROJECT_FACILITIES = 'GET_PROJECT_FACILITIES';\r\nconst SET_FETCHING_FACILITIES = 'SET_FETCHING_FACILITIES';\r\n\r\n\r\n\r\nconst toggleDeleteProjectDialog = (currentState, project) => {\r\n return {\r\n type: TOGGLE_DELETE_PROJECT_DIALOG,\r\n payload: { open: !currentState, project: project }\r\n };\r\n};\r\n\r\nconst toggleEditProjectDialog = (currentState, project = {}) => {\r\n return {\r\n type: TOGGLE_EDIT_PROJECT_DIALOG,\r\n payload: { open: !currentState, project: project }\r\n };\r\n};\r\n\r\nconst editProjectProperty = (event, project = {}) => {\r\n return {\r\n type: EDIT_PROJECT_PROPERTY,\r\n payload: { event: event, project: project }\r\n };\r\n};\r\n\r\n\r\nconst selectProject = (project) => {\r\n return {\r\n type: PROJECT_SELECTED,\r\n payload: project\r\n };\r\n};\r\n\r\nconst setFetchingFacilities = (boolean) => {\r\n return {\r\n type: SET_FETCHING_FACILITIES,\r\n payload: boolean\r\n };\r\n}\r\n\r\nconst getProjectsFacilities = () => {\r\n \r\n return (dispatch, getState) => {\r\n const {\r\n selectedProject,\r\n } = getState();\r\n dispatch(setFetchingFacilities(true));\r\n getFacilitiesByProjectId(selectedProject.projectId)\r\n .then(facilities => {\r\n dispatch({\r\n type: GET_PROJECT_FACILITIES,\r\n payload: facilities\r\n });\r\n dispatch(setFetchingFacilities(false));\r\n })\r\n }\r\n};\r\n\r\n\r\n\r\nexport {\r\n toggleDeleteProjectDialog,\r\n toggleEditProjectDialog,\r\n selectProject,\r\n getProjectsFacilities,\r\n editProjectProperty,\r\n setFetchingFacilities,\r\n TOGGLE_DELETE_PROJECT_DIALOG,\r\n PROJECT_SELECTED,\r\n GET_PROJECT_FACILITIES,\r\n TOGGLE_EDIT_PROJECT_DIALOG,\r\n EDIT_PROJECT_PROPERTY,\r\n SET_FETCHING_FACILITIES\r\n};\r\n\r\n","import config from \"../config\";\r\nimport { authHeader } from \"../helpers/auth-header\";\r\nimport { getUser } from \"../services/user.service\";\r\nimport { REQUESTTYPES, fetchHelper, responseStatusHandler } from \"./serviceHelper\";\r\n\r\n\r\n// Get api base URLs\r\nconst PROJECT = config.project;\r\n\r\nconst projectModel =\r\n{\r\n ProjectId: null,\r\n Name: \"\",\r\n Description: \"\",\r\n CompanyName: \"\",\r\n ContactName: \"\",\r\n ContactJobTitle: \"\",\r\n ContactPhoneNumber: \"\",\r\n ContactEmail: \"\",\r\n Utility: \"\",\r\n Notes: \"\"\r\n}\r\n\r\nconst ENDPOINTS = {\r\n projects: {\r\n getProjectsByUserId: \"GetProjectsByUserId\",\r\n getProjectsByOrganizationId: \"GetProjectsByOrganizationId\",\r\n getProjectById: \"GetProjectById\",\r\n createOrUpdateProject: \"CreateOrUpdateProject\",\r\n deleteProject: \"DeleteProject\"\r\n }\r\n};\r\n\r\nconst getProjectsForUser = () => {\r\n var user = getUser();\r\n var userId = user.userId;\r\n const apiResponse = fetchHelper(\r\n PROJECT,\r\n ENDPOINTS.projects.getProjectsByUserId,\r\n {userId: userId},\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n return response;\r\n } else {\r\n return response.projects;\r\n }\r\n });\r\n \r\n return apiResponse;\r\n};\r\n\r\nconst getProjectsForOrganization = () => {\r\n var user = getUser();\r\n var organizationId = user.organizationId;\r\n const apiResponse = fetchHelper(\r\n PROJECT,\r\n ENDPOINTS.projects.getProjectsByOrganizationId,\r\n {OrganizationId: organizationId},\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response.projects;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst getProjectById = (projectId) => {\r\n const apiResponse = fetchHelper(\r\n PROJECT,\r\n ENDPOINTS.projects.getProjectById,\r\n {projectId: projectId},\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response.project;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst createOrUpdateProject = (projectModel) => {\r\n const apiResponse = fetchHelper(\r\n PROJECT,\r\n ENDPOINTS.projects.createOrUpdateProject,\r\n {\r\n project: projectModel\r\n },\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n\r\n return response;\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst deleteProject = (projectId) => {\r\n const apiResponse = fetchHelper(\r\n PROJECT,\r\n ENDPOINTS.projects.deleteProject,\r\n {\r\n ProjectId: projectId\r\n },\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\n\r\n\r\nexport {\r\n getProjectsForUser,\r\n getProjectById,\r\n createOrUpdateProject,\r\n deleteProject,\r\n projectModel,\r\n getProjectsForOrganization\r\n // startUserSession,\r\n // checkEmailAddress,\r\n // saveEnrollmentProgress,\r\n // submitEnrollment,\r\n // submitTeamPriceQuoteRequest\r\n};\r\n","\r\nconst PROJECTS_MOUNTED = 'PROJECTS_MOUNTED';\r\nconst TOGGLE_CREATE_PROJECT_DIALOG = 'TOGGLE_CREATE_PROJECT_DIALOG';\r\n\r\nconst addProjectsToState = (projects) => {\r\n return {\r\n type: PROJECTS_MOUNTED,\r\n payload: projects\r\n };\r\n};\r\n\r\n\r\n\r\nconst toggleCreateProjectDialog = (currentState) => {\r\n return {\r\n type: TOGGLE_CREATE_PROJECT_DIALOG,\r\n payload: currentState\r\n };\r\n};\r\n\r\nexport {\r\n addProjectsToState,\r\n toggleCreateProjectDialog,\r\n PROJECTS_MOUNTED,\r\n TOGGLE_CREATE_PROJECT_DIALOG\r\n}","import React from 'react'\r\nimport { Link } from 'react-router-dom';\r\n\r\n\r\n\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\n\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n link: {\r\n color: theme.palette.primary.main,\r\n '&:hover': {\r\n color: theme.palette.primary.dark,\r\n textDecoration: 'underline',\r\n }\r\n\r\n },\r\n}));\r\n\r\nfunction LinkText(props) {\r\n const { projectId, facilityId, text, object } = props;\r\n\r\n const classes = useStyles();\r\n\r\n if (projectId && facilityId) {\r\n return (\r\n {text}\r\n )\r\n } else {\r\n return (\r\n {text}\r\n)\r\n}\r\n \r\n}\r\n\r\nexport default LinkText;","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Icon from '@material-ui/core/Icon';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n // justifyContent: 'center',\r\n alignItems: 'flex-end',\r\n },\r\n iconDelete: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n },\r\n iconEdit: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n },\r\n margin: {\r\n margin: theme.spacing(0),\r\n },\r\n}));\r\n\r\nexport default function ProjectEditAndDeleteIcons(props) {\r\n const classes = useStyles();\r\n const { toggleEditProjectDialog, project, toggleDeleteProjectDialog } = props;\r\n\r\n return (\r\n
\r\n toggleEditProjectDialog(project)}>\r\n \r\n edit_outline\r\n \r\n \r\n toggleDeleteProjectDialog(project)}>\r\n \r\n delete_outline\r\n \r\n \r\n\r\n \r\n
\r\n );\r\n}","import React, { Component, Fragment } from \"react\";\r\n// Redux\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { selectProject } from '../../redux/actions/project-actions';\r\nimport { toggleDeleteProjectDialog, toggleEditProjectDialog } from '../../redux/actions/project-actions'\r\n\r\n// Material UI\r\nimport MaterialTable from 'material-table'\r\n\r\n//Components\r\nimport LinkText from '../../components/Link/LinkText';\r\nimport EditAndDeleteIcons from '../components/ProjectEditAndDeleteIcons'\r\n\r\n//Loader\r\nimport PulseLoader from '../../components/Spinners/pulse-loader'\r\n\r\nimport Button from '@material-ui/core/Button';\r\n\r\n//moment\r\nimport moment from 'moment'\r\nimport AddCircleIcon from \"@material-ui/icons/AddCircle\";\r\nimport {withStyles} from \"@material-ui/core/styles\";\r\nimport {green} from \"@material-ui/core/colors\";\r\n\r\nclass ProjectsTable extends Component {\r\n\r\n render() {\r\n const { projects, selectProject, toggleEditProjectDialog, toggleDeleteProjectDialog, toggleCreateProjectDialog, classes } = this.props;\r\n if (!projects) {\r\n return (\r\n \r\n )\r\n } else {\r\n return (\r\n
\r\n \r\n selectProject(rowData)} object={rowData} />\r\n },\r\n { title: 'Utility', field: 'utility' },\r\n { title: 'Last Modified', field: 'modifiedDate', render: rowData =>
selectProject(rowData)}>{moment(rowData.modifiedDate).format(\"MMMM D, YYYY\")}
},\r\n //{\r\n // title: 'Edit', render: rowData => (\r\n // \r\n // \r\n\r\n // \r\n // ) \r\n\r\n //},\r\n {\r\n title: 'Edit', render: rowData => (\r\n \r\n \r\n\r\n \r\n )\r\n\r\n },\r\n\r\n\r\n ]}\r\n data={this.props.projects}\r\n title={''}\r\n options={{\r\n search: true,\r\n pageSize: 10,\r\n padding: 'dense',\r\n // searchFieldAlignment: 'left'\r\n \r\n }}\r\n // component={{\r\n // Container: props =>
\r\n // }}\r\n //localization={{\r\n // pagination: {\r\n // labelRowsSelect: 10\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\nfunction mapStateToProps(state) {\r\n return {\r\n projects: state.projects,\r\n selectedProject: state.selectedProject,\r\n\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({ selectProject }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ProjectsTable)\r\n\r\n","import React from 'react';\r\n\r\n//Material UI\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\n\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n appBar: {\r\n boxShadow: \"none\"\r\n },\r\n card: {\r\n maxWidth: 345,\r\n },\r\n media: {\r\n height: 140,\r\n },\r\n link: {\r\n color: '#0da3e2',\r\n '&:hover': {\r\n color: '#0da3e2',\r\n textDecoration: 'underline',\r\n }\r\n\r\n },\r\n});\r\n\r\nconst helpers = [\r\n {\r\n label: 'Getting Started with React Energy'\r\n },\r\n {\r\n label: 'How-to Videos'\r\n },\r\n {\r\n label: 'Contact Support'\r\n },\r\n]\r\n\r\nexport default function SimpleAppBar() {\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n \r\n\r\n \r\n {helpers.map(helper => (\r\n \r\n {helper.label}\r\n ))}\r\n\r\n \r\n\r\n \r\n\r\n\r\n
\r\n );\r\n}","import React from 'react'\r\n\r\n// Material UI\r\nimport Grid from '@material-ui/core/Grid';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport Input from '@material-ui/core/Input';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n\r\n textField: {\r\n margin: theme.spacing(1),\r\n width: '100%'\r\n\r\n },\r\n\r\n}));\r\n\r\nconst CreateProjectForm = (props) => {\r\n const { handleCreateProjectInputChange, createProjectFormControls, attemptedCreateProjectSubmit } = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n
alert(\"submitted\")}>\r\n \r\n \r\n \r\n \r\n {createProjectFormControls.name.label}*\r\n \r\n {/*{createProjectFormControls.name.message}*/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/**/}\r\n \r\n {createProjectFormControls.contactPhoneNumber.label}\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 (CreateProjectForm)","import React, {Fragment} from 'react';\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 { makeStyles } from '@material-ui/core/styles';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport Slide from '@material-ui/core/Slide';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n appBar: {\r\n // backgroundColor: grey[300],\r\n backgroundColor: 'white',\r\n boxShadow: 'none',\r\n minWidth: 400,\r\n borderBottom: theme.palette.border.bottomGreyBorder\r\n },\r\n title: {\r\n color: 'black',\r\n flexGrow: 1,\r\n textTransform: 'none',\r\n fontWeight: 400\r\n },\r\n dialogContent: {\r\n display: 'flex',\r\n justifyContent: 'center'\r\n }\r\n\r\n}));\r\n\r\n\r\n\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n return ;\r\n});\r\n\r\nfunction CustomDialog(props) {\r\n const { open, subTitle = null, title = null, onClose, content, actions = null, fullWidth = false } = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {subTitle}\r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {content}\r\n \r\n \r\n \r\n \r\n {actions}\r\n \r\n \r\n
\r\n\r\n\r\n );\r\n}\r\n\r\nexport default CustomDialog;","import {withStyles} from \"@material-ui/core\";\r\nimport Tabs from \"@material-ui/core/Tabs\";\r\n\r\nconst AntTabs = withStyles(theme => ({\r\n root: {\r\n borderBottom: '1px solid #e8e8e8',\r\n height: 20\r\n },\r\n wrapper: {\r\n height: 0\r\n },\r\n indicator: {\r\n backgroundColor: theme.palette.button.green.main,\r\n },\r\n}))(Tabs);\r\n\r\nexport default AntTabs","import {withStyles} from \"@material-ui/core\";\r\nimport Tab from \"@material-ui/core/Tab\";\r\nimport React from \"react\";\r\n\r\n\r\nconst AntTab = withStyles(theme => ({\r\n root: {\r\n textTransform: 'none',\r\n minWidth: 40,\r\n height: 15,\r\n color: theme.palette.text.primary,\r\n fontWeight: theme.typography.fontWeightRegular,\r\n marginRight: theme.spacing(1.5),\r\n marginLeft: theme.spacing(1.5),\r\n marginTop: 0,\r\n marginBottom: 0,\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n fontFamily: [\r\n // '-apple-system',\r\n // 'BlinkMacSystemFont',\r\n // '\"Segoe UI\"',\r\n 'Roboto',\r\n '\"Helvetica Neue\"',\r\n 'Arial',\r\n 'sans-serif',\r\n '\"Apple Color Emoji\"',\r\n '\"Segoe UI Emoji\"',\r\n '\"Segoe UI Symbol\"',\r\n ].join(','),\r\n '&:hover': {\r\n color: '#000',\r\n opacity: 1,\r\n },\r\n '&$selected': {\r\n // color: '#1890ff',\r\n color: '#000',\r\n // fontWeight: theme.typography.fontWeightMedium,\r\n },\r\n '&:focus': {\r\n color: '#000',\r\n },\r\n },\r\n \r\n selected: {},\r\n}))(props => );\r\n\r\nexport default AntTab\r\n","import React, {Component} from 'react'\r\nimport {makeStyles} from \"@material-ui/core/styles\";\r\nimport OutlinedInput from \"@material-ui/core/OutlinedInput\";\r\nimport {Typography} from \"@material-ui/core\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport FormHelperText from \"@material-ui/core/FormHelperText\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Input from \"@material-ui/core/Input\";\r\nimport InputAdornment from '@material-ui/core/InputAdornment';\r\nimport Icon from '@material-ui/core/Icon';\r\n\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n textField: {\r\n // margin: theme.spacing(1),\r\n width: '100%'\r\n },\r\n adornment: {\r\n color: theme.palette.icons.grey,\r\n marginRight: 10\r\n },\r\n label: {\r\n color: theme.palette.text.formLabel,\r\n // marginLeft: theme.spacing(0),\r\n // marginRight: theme.spacing(0)\r\n },\r\n root: {\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(1),\r\n }\r\n}));\r\n\r\nexport default function CustomOutlinedInput(props) {\r\n const classes = useStyles();\r\n const {label = null, value, onChange, name, placeHolder, error = null, required = null, inputComponent = 'input', startAdornment = null, multiline = false, disabled = false} = props;\r\n \r\n return (\r\n \r\n {label ? {label} : null}\r\n \r\n {startAdornment} : null}\r\n multiline={multiline}\r\n rows={multiline ? 5 : null}\r\n disabled={disabled}\r\n />\r\n {/*{required ?*/}\r\n {/*required*/}\r\n {/* : null }*/}\r\n \r\n \r\n )\r\n}","import React, {Component} from 'react'\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport {withStyles} from '@material-ui/core/styles';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport Input from '@material-ui/core/Input';\r\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\nimport MaskedInput from 'react-text-mask';\r\nimport AntTabs from \"../../../components/AntTabs/AntTabs\";\r\nimport AntTab from \"../../../components/AntTabs/AntTab\";\r\nimport CustomOutlinedInput from \"../../../components/Inputs/CustomOutlinedInput\";\r\nimport {Typography} from \"@material-ui/core\";\r\n\r\nconst styles = theme => ({\r\n textField: {\r\n margin: theme.spacing(1),\r\n width: '100%'\r\n\r\n },\r\n root: {\r\n marginLeft: theme.spacing(2),\r\n marginRight: theme.spacing(2),\r\n },\r\n row: {\r\n paddingTop: 0,\r\n paddingBottom: 0\r\n }\r\n});\r\n\r\nclass CreateProjectForm extends Component {\r\n\r\n state = {\r\n currentTab: 0,\r\n tabs: [\r\n {\r\n label: 'Description',\r\n },\r\n {\r\n label: 'Company',\r\n },\r\n {\r\n label: 'Contact'\r\n },\r\n {\r\n label: 'Utility'\r\n }\r\n ]\r\n };\r\n\r\n changeTab = (index) => {\r\n this.setState({currentTab: index})\r\n };\r\n\r\n getComponent = () => {\r\n const {currentTab} = this.state;\r\n const {handleInputChange, formControls, attemptedSubmit} = this.props;\r\n switch (currentTab) {\r\n case 0:\r\n return ;\r\n case 1:\r\n return ;\r\n case 2:\r\n return \r\n \r\n \r\n \r\n \r\n\r\n ;\r\n case 3:\r\n return ;\r\n default:\r\n return 'Description'\r\n }\r\n }\r\n\r\n render() {\r\n const {handleInputChange, formControls, attemptedSubmit, classes} = this.props;\r\n\r\n\r\n return (\r\n
alert(\"submitted\")}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.tabs.map((tab, index) => (\r\n this.changeTab(index)}/>\r\n ))}\r\n \r\n \r\n \r\n {this.getComponent()}\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 withStyles(styles)(CreateProjectForm)","import {withStyles} from \"@material-ui/core/styles\";\r\nimport Button from \"@material-ui/core/Button\";\r\n\r\nconst GreenButton = withStyles(theme =>({\r\n root: {\r\n // boxShadow: 'none',\r\n textTransform: 'none',\r\n fontSize: '1em',\r\n color: 'white',\r\n // padding: '6px 12px',\r\n // border: '1px solid',\r\n lineHeight: 1.5,\r\n backgroundColor: theme.palette.button.green.main,\r\n borderWidth: 1,\r\n borderStyle: 'solid',\r\n borderColor: theme.palette.button.green.main,\r\n // borderColor: '#007bff',\r\n fontFamily: [\r\n // '-apple-system',\r\n // 'BlinkMacSystemFont',\r\n // '\"Segoe UI\"',\r\n 'Roboto',\r\n '\"Helvetica Neue\"',\r\n 'Arial',\r\n 'sans-serif',\r\n '\"Apple Color Emoji\"',\r\n '\"Segoe UI Emoji\"',\r\n '\"Segoe UI Symbol\"',\r\n ].join(','),\r\n '&:hover': {\r\n backgroundColor: theme.palette.button.green.hover,\r\n // borderColor: '#0062cc',\r\n // boxShadow: 'none',\r\n },\r\n '&:active': {\r\n // boxShadow: 'none',\r\n // backgroundColor: '#0062cc',\r\n // borderColor: '#005cbf',\r\n },\r\n '&:disabled': {\r\n border: 'none',\r\n backgroundColor: theme.palette.button.disabled\r\n },\r\n '&:focus': {\r\n // boxShadow: '0 0 0 0.2rem rgba(0,123,255,.5)',\r\n },\r\n },\r\n}))(Button);\r\n\r\nexport default GreenButton","import React, { Component, Fragment } from 'react';\r\n\r\n// Material UI\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport CreateProjectForm from './CreateProjectForm';\r\nimport CustomDialog from \"../../components/Dialogs/customDialog\";\r\nimport CustomPulseLoader from \"../../components/Spinners/pulse-loader\";\r\nimport EditProjectForm from \"./EditProject/EditProjectForm\";\r\nimport GreenButton from \"../../components/CustomButtons/GreenButton\";\r\n\r\n\r\nfunction CreateProjectDialog(props) {\r\n const { \r\n loading,\r\n createProjectDialogOpen,\r\n toggleCreateProjectDialog,\r\n createProjectFormControls,\r\n handleCreateProjectInputChange,\r\n onCreateProjectSubmit,\r\n attemptedCreateProjectSubmit } = props;\r\n\r\n return (\r\n \r\n }\r\n actions={\r\n {/**/}\r\n onCreateProjectSubmit()}>{loading ? : 'Add Project'}\r\n }\r\n />\r\n\r\n );\r\n}\r\n\r\nexport default CreateProjectDialog;","import React, { Fragment } from 'react';\r\n\r\n// Material UI\r\nimport Button from '@material-ui/core/Button';\r\n\r\n// Components\r\nimport EditProjectForm from './EditProjectForm';\r\nimport CustomDialog from \"../../../components/Dialogs/customDialog\";\r\n\r\nfunction EditProjectDialog(props) {\r\n const { editProjectDialogOpen,\r\n toggleEditProjectDialog,\r\n editProjectFormControls,\r\n handleEditProjectInputChange,\r\n onEditProjectSubmit,\r\n attemptedEditProjectSubmit,\r\n selectedProjectForEdit } = props;\r\n\r\n return (\r\n \r\n {selectedProjectForEdit === null ? null :\r\n \r\n }\r\n actions={}\r\n />\r\n }\r\n \r\n\r\n\r\n );\r\n}\r\n\r\nexport default EditProjectDialog;","import React, { Fragment } from 'react';\r\n\r\n// Material UI\r\nimport Button from '@material-ui/core/Button';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n// Components\r\nimport CustomDialog from \"../../components/Dialogs/customDialog\";\r\n\r\nconst useStyles = makeStyles({\r\n button: {\r\n color: 'red'\r\n }\r\n});\r\n\r\nfunction DeleteProjectDialog(props) {\r\n const {\r\n deleteProjectDialogOpen,\r\n toggleDeleteProjectDialog,\r\n selectedProjectForDelete,\r\n onDeleteProjectSubmit,\r\n } = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n {selectedProjectForDelete === null ? null :\r\n Are you sure you want to delete the project \"{selectedProjectForDelete.name}\"?\r\n }\r\n actions={}\r\n />\r\n }\r\n \r\n\r\n\r\n );\r\n}\r\n\r\nexport default DeleteProjectDialog;","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport AddCircleIcon from \"@material-ui/icons/AddCircle\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n button: {\r\n backgroundColor: theme.palette.success.main,\r\n color: theme.palette.success.contrast,\r\n borderRadius: 20,\r\n '&:hover': {\r\n backgroundColor: theme.palette.success.dark,\r\n }\r\n }\r\n}));\r\n\r\nexport default function AddNewButton(props) {\r\n const classes = useStyles();\r\n const {onClick, text} = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {text}\r\n
\r\n \r\n );\r\n}","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport clsx from 'clsx';\r\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\r\nimport ErrorIcon from '@material-ui/icons/Error';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { amber, green } from '@material-ui/core/colors';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport SnackbarContent from '@material-ui/core/SnackbarContent';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst variantIcon = {\r\n success: CheckCircleIcon,\r\n warning: WarningIcon,\r\n error: ErrorIcon,\r\n info: InfoIcon,\r\n};\r\n\r\nconst useStyles1 = makeStyles(theme => ({\r\n success: {\r\n backgroundColor: green[600],\r\n },\r\n error: {\r\n backgroundColor: theme.palette.error.dark,\r\n },\r\n info: {\r\n backgroundColor: theme.palette.primary.main,\r\n },\r\n warning: {\r\n backgroundColor: amber[700],\r\n },\r\n icon: {\r\n fontSize: 20,\r\n },\r\n iconVariant: {\r\n opacity: 0.9,\r\n marginRight: theme.spacing(1),\r\n },\r\n message: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n}));\r\n\r\nfunction MySnackbarContentWrapper(props) {\r\n const classes = useStyles1();\r\n const { className, message, onClose, variant, ...other } = props;\r\n const Icon = variantIcon[variant];\r\n\r\n return (\r\n \r\n \r\n {message}\r\n \r\n }\r\n action={[\r\n \r\n \r\n ,\r\n ]}\r\n {...other}\r\n />\r\n );\r\n}\r\n\r\nMySnackbarContentWrapper.propTypes = {\r\n className: PropTypes.string,\r\n message: PropTypes.string,\r\n onClose: PropTypes.func,\r\n variant: PropTypes.oneOf(['error', 'info', 'success', 'warning']).isRequired,\r\n};\r\n\r\nconst useStyles2 = makeStyles(theme => ({\r\n margin: {\r\n margin: theme.spacing(1),\r\n },\r\n}));\r\n\r\nexport default function CustomSnackbar(props) {\r\n const classes = useStyles2();\r\n const { snackbar, openSnackbar } = props;\r\n\r\n\r\n function handleClose(event, reason) {\r\n if (reason === 'clickaway') {\r\n return;\r\n }\r\n\r\n openSnackbar(false);\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n}","import React from 'react';\r\nimport {makeStyles} from '@material-ui/core/styles';\r\nimport Icon from '@material-ui/core/Icon';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\n// Font Awesome\r\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome'\r\nimport {faCircle, faCloudUploadAlt, faTrashAlt} from '@fortawesome/free-solid-svg-icons'\r\n\r\n// Colors\r\nimport {green, red} from '@material-ui/core/colors';\r\n\r\n// Material UI\r\nimport Box from '@material-ui/core/Box';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n // justifyContent: 'center',\r\n alignItems: 'flex-end',\r\n },\r\n iconDelete: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n fontSize: 30\r\n },\r\n iconEdit: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n fontSize: 30\r\n },\r\n iconAdd: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n fontSize: 30\r\n\r\n },\r\n margin: {\r\n margin: theme.spacing(0),\r\n },\r\n\r\n\r\n}));\r\n\r\nexport default function Icons(props) {\r\n const classes = useStyles();\r\n\r\n const {toggleImportDataDialog, facilityObject, toggleEditFacilityDialog, setSelectedMeterForEdit, toggleDeleteFacilityDialog} = props;\r\n\r\n\r\n return (\r\n
\r\n {\r\n toggleEditFacilityDialog(); \r\n setSelectedMeterForEdit(facilityObject)\r\n }}>\r\n \r\n edit\r\n \r\n \r\n {\r\n toggleDeleteFacilityDialog(facilityObject);\r\n }}\r\n >\r\n \r\n delete_outline\r\n \r\n \r\n {/* toggleImportDataDialog(facilityObject)}>*/}\r\n {/* */}\r\n {/* cloud_upload*/}\r\n {/* */}\r\n {/**/}\r\n\r\n\r\n
\r\n );\r\n}","import React from 'react'\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport moment from \"moment\";\r\nimport 'moment-timezone';\r\nimport Table from \"@material-ui/core/Table\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n backgroundColor: theme.palette.background.default,\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n // paddingBottom: 70\r\n },\r\n table: {\r\n \r\n }\r\n\r\n}));\r\n\r\nexport default function ProjectTableDetailPanel(props) {\r\n const {facility} = props;\r\n const classes = useStyles();\r\n \r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n Data Start Date\r\n \r\n \r\n {facility.intervalDataStartDate ? moment.tz(facility.intervalDataStartDate, facility.timezone).format(\"MM/DD/YYYY HH:mm\") : null}\r\n \r\n \r\n \r\n \r\n Data End Date\r\n \r\n \r\n {facility.intervalDataEndDate ? moment.tz(facility.intervalDataEndDate, facility.timezone).format(\"MM/DD/YYYY HH:mm\") : null}\r\n \r\n \r\n \r\n \r\n Peak Demand\r\n \r\n \r\n {facility.maximumkWValue ? facility.maximumkWValue.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") : null} kW\r\n \r\n \r\n \r\n \r\n Annual kWh\r\n \r\n \r\n {facility.annualKwhValue ? facility.annualKwhValue.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") : null} kWh\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Utility\r\n \r\n \r\n {facility.utility ? facility.utility : null}\r\n \r\n \r\n \r\n \r\n Account Number\r\n \r\n \r\n {facility.accountNumber ? facility.accountNumber : null}\r\n \r\n \r\n \r\n \r\n Meter Number\r\n \r\n \r\n {facility.meterNumber ? facility.meterNumber : null}\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\n\r\nimport {bindActionCreators} from 'redux';\r\nimport {connect} from 'react-redux';\r\nimport {selectProject} from '../../redux/actions/project-actions';\r\nimport {toggleEditMeterDialogOpen, setSelectedMeterForEdit} from \"../../redux/actions/MeterActions/EditMeterActions/edit-meter-actions\";\r\n\r\n//Material UI\r\nimport MaterialTable from 'material-table'\r\n\r\n\r\n// Components\r\nimport LinkText from '../../components/Link/LinkText';\r\nimport EditDeleteAddIcons from '../components/buttons/FacilityEditDeleteAddIcons'\r\n\r\n\r\nimport Button from '@material-ui/core/Button';\r\nimport Tab from '@material-ui/core/Tab';\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport ProjectTableDetailPanel from \"../components/tables/ProjectTableDetailPanel\";\r\n\r\nimport CountUp from \"react-countup\";\r\n\r\nclass FacilitiesTable extends Component {\r\n\r\n render() {\r\n\r\n const {importDataDialogOpen, toggleImportDataDialog, toggleEditFacilityDialog, toggleDeleteFacilityDialog} = this.props;\r\n\r\n\r\n return (\r\n\r\n
\r\n\r\n \r\n \r\n },\r\n {title: 'Peak Demand', field: 'maximumkWValue', render: (rowData) => {\r\n if (rowData.maximumkWValue) {\r\n return \r\n } else {\r\n return null\r\n }\r\n\r\n }},\r\n {\r\n title: 'Annual kWh', field: 'annualKwhValue', render: (rowData) => {\r\n if (rowData.annualKwhValue) {\r\n return \r\n } else {\r\n return null\r\n }\r\n\r\n }\r\n },\r\n {\r\n title: 'Edit',\r\n render: rowData => \r\n },\r\n\r\n\r\n ]}\r\n detailPanel={rowData => {\r\n return (\r\n \r\n )\r\n }}\r\n data={this.props.facilities}\r\n title={null}\r\n options={{\r\n search: true,\r\n pageSize: 10,\r\n padding: 'dense',\r\n // selection: true,\r\n\r\n }}\r\n style={{boxShadow: 'none'}}\r\n />\r\n\r\n
\r\n\r\n\r\n );\r\n\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n facilities: state.facilities,\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n selectProject,\r\n toggleEditMeterDialogOpen,\r\n setSelectedMeterForEdit\r\n }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FacilitiesTable);\r\n\r\n","import React, {Component} from 'react'\r\n\r\n//Material UI\r\nimport Paper from '@material-ui/core/Paper';\r\nimport {Grid, Typography} from \"@material-ui/core\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport FacilitiesTable from \"../../ProjectHome/containers/FacilitiesTable\";\r\n\r\nclass CustomInfoLayout extends Component {\r\n\r\n render() {\r\n const {title, mainContent, topRightContent = null} = this.props;\r\n\r\n return (\r\n \r\n\r\n \r\n \r\n {title}\r\n \r\n
\r\n {topRightContent ? topRightContent : null}\r\n
\r\n
\r\n \r\n {mainContent}\r\n\r\n\r\n \r\n\r\n\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default CustomInfoLayout","import {withStyles} from \"@material-ui/core/styles\";\r\nimport Button from \"@material-ui/core/Button\";\r\n\r\nconst BigGreenButton = withStyles(theme =>({\r\n root: {\r\n // boxShadow: 'none',\r\n textTransform: 'none',\r\n fontSize: '1.5em',\r\n color: 'white',\r\n padding: '15px 30px',\r\n // border: '1px solid',\r\n lineHeight: 1.5,\r\n backgroundColor: theme.palette.button.green.main,\r\n borderWidth: 1,\r\n borderStyle: 'solid',\r\n borderColor: theme.palette.button.green.main,\r\n // borderColor: '#007bff',\r\n fontFamily: [\r\n // '-apple-system',\r\n // 'BlinkMacSystemFont',\r\n // '\"Segoe UI\"',\r\n 'Roboto',\r\n '\"Helvetica Neue\"',\r\n 'Arial',\r\n 'sans-serif',\r\n '\"Apple Color Emoji\"',\r\n '\"Segoe UI Emoji\"',\r\n '\"Segoe UI Symbol\"',\r\n ].join(','),\r\n '&:hover': {\r\n backgroundColor: theme.palette.button.green.hover,\r\n // borderColor: '#0062cc',\r\n // boxShadow: 'none',\r\n },\r\n '&:active': {\r\n // boxShadow: 'none',\r\n // backgroundColor: '#0062cc',\r\n // borderColor: '#005cbf',\r\n },\r\n '&:disabled': {\r\n border: 'none',\r\n backgroundColor: theme.palette.button.disabled\r\n },\r\n '&:focus': {\r\n // boxShadow: '0 0 0 0.2rem rgba(0,123,255,.5)',\r\n },\r\n },\r\n}))(Button);\r\n\r\nexport default BigGreenButton","import React, {Component} from 'react'\r\nimport notebooksGif from '../../assets/gifs/notebooks.gif'\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport GreenButton from \"../../components/CustomButtons/GreenButton\";\r\nimport BigGreenButton from \"../../components/CustomButtons/BigGreenButton\";\r\n\r\n\r\nclass EmptyGif extends Component {\r\n\r\n render() {\r\n const {gif, title, message, buttonText, onClick} = this.props;\r\n return (\r\n
\r\n \r\n \r\n \r\n {'time\r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n {message}\r\n \r\n \r\n \r\n \r\n {buttonText}\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 EmptyGif","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n progress: {\r\n margin: theme.spacing(2),\r\n },\r\n}));\r\n\r\nexport default function DataViewLoadingSpinner(props) {\r\n const classes = useStyles();\r\n const [progress, setProgress] = React.useState(0);\r\n \r\n let message;\r\n \r\n props['message'] ? message = props.message : message = 'Fetching data...';\r\n\r\n React.useEffect(() => {\r\n function tick() {\r\n // reset when reaching 100%\r\n setProgress(oldProgress => (oldProgress >= 100 ? 0 : oldProgress + 1));\r\n }\r\n\r\n const timer = setInterval(tick, 20);\r\n return () => {\r\n clearInterval(timer);\r\n };\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n\r\n \r\n {message}\r\n \r\n
\r\n );\r\n}","import React from 'react';\r\n\r\n// Material UI\r\nimport {makeStyles} from '@material-ui/core/styles';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\n\r\n//Containers\r\nimport ProjectsTable from '../containers/ProjectsTable'\r\n//import CreateProjectDialogContainer from '../../containers/Dialogs/CreateProjectDialogContainer'\r\n\r\n//Material UI\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Button from '@material-ui/core/Button';\r\nimport {Grid, Typography} from \"@material-ui/core\";\r\nimport Fab from '@material-ui/core/Fab';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport {green, orange} from '@material-ui/core/colors';\r\n\r\n\r\n// Components\r\nimport DashboardHelp from './DashboardHelp'\r\nimport CreateProjectDialog from './CreateProjectDialog'\r\nimport EditProjectDialog from './EditProject/EditProjectDialog'\r\nimport DeleteProjectDialog from './DeleteProjectDialog'\r\nimport AddNewButton from \"../../components/CustomButtons/AddNewButton\";\r\n\r\n\r\nimport CustomSnackbar from '../../components/Snackbar/CustomSnackbar'\r\nimport FacilitiesTable from \"../../ProjectHome/containers/FacilitiesTable\";\r\nimport CustomInfoLayout from \"../../components/CustomInfoLayout/CustomInfoLayout\";\r\n\r\nimport AddCircleIcon from '@material-ui/icons/AddCircle';\r\nimport EmptyGif from \"../../components/EmptyGif/EmptyGif\";\r\n\r\nimport projectsGif from '../../assets/gifs/projects.gif'\r\nimport {PulseLoader} from \"react-spinners\";\r\nimport CustomPulseLoader from \"../../components/Spinners/pulse-loader\";\r\nimport DataViewLoadingSpinner from \"../../FacilityHome/components/spinners/DataViewLoadingSpinner\";\r\nimport GreenButton from \"../../components/CustomButtons/GreenButton\";\r\nimport Icon from \"@material-ui/core/Icon\";\r\n\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n },\r\n title: {\r\n flexGrow: 1,\r\n },\r\n fab: {\r\n position: 'fixed',\r\n bottom: theme.spacing(2),\r\n right: theme.spacing(2),\r\n color: theme.palette.common.white,\r\n backgroundColor: green[500],\r\n '&:hover': {\r\n backgroundColor: green[600],\r\n }\r\n },\r\n button: {\r\n backgroundColor: theme.palette.success.main,\r\n color: theme.palette.success.contrast,\r\n borderRadius: 20,\r\n '&:hover': {\r\n backgroundColor: theme.palette.success.dark,\r\n }\r\n }\r\n}));\r\n\r\n\r\nexport default function MainDashboard(props) {\r\n const classes = useStyles();\r\n const {\r\n loading,\r\n fetchingProjects,\r\n projects,\r\n //create project\r\n createProjectDialogOpen,\r\n toggleCreateProjectDialog,\r\n createProjectFormControls,\r\n handleCreateProjectInputChange,\r\n onCreateProjectSubmit,\r\n attemptedCreateProjectSubmit,\r\n\r\n //edit project\r\n editProjectDialogOpen,\r\n toggleEditProjectDialog,\r\n editProjectFormControls,\r\n handleEditProjectInputChange,\r\n onEditProjectSubmit,\r\n attemptedEditProjectSubmit,\r\n selectedProjectForEdit,\r\n\r\n // delete project\r\n toggleDeleteProjectDialog,\r\n deleteProjectDialogOpen,\r\n selectedProjectForDelete,\r\n onDeleteProjectSubmit,\r\n\r\n //snackbar\r\n snackbar,\r\n openSnackbar\r\n } = props;\r\n\r\n\r\n return (\r\n
\r\n \r\n \r\n\r\n \r\n {/*{!fetchingProjects ? :*/}\r\n {/* projects.length !== 0 ?*/}\r\n {/* */}\r\n {/* : */}\r\n {/* }*/}\r\n {/* mainContent={*/}\r\n {/* }*/}\r\n {/* />*/}\r\n \r\n {/* }*/}\r\n \r\n {!fetchingProjects && projects.length !== 0 ?\r\n \r\n add_circleAdd Project}\r\n mainContent={\r\n }\r\n />\r\n\r\n : !fetchingProjects && projects.length === 0 ?\r\n \r\n \r\n \r\n \r\n \r\n \r\n :\r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n\r\n
\r\n );\r\n}\r\n","import React, { Component } from \"react\";\r\nimport * as THREE from \"three\";\r\n\r\nlet array = [147.6,139,141,143,142,147,141,139,133,140,142,142,141,141,137,141,144,144,136,135,167,186,177,180,204,203,246,267,371,400,434,441,448,453,454,456,457,452,453,454,450,451,458,465,459,456,453,460,464,453,441,443,446,441,440,443,449,450,454,448,451,442,458,445,440,420,400,363,260,232,223,215,211,209,180,173,174,175,180,181,170,164,167,171,165,164,163,165,157,154,156,154,154,154,153,150];\r\n\r\n\r\nclass ThreeTest extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.three = React.createRef();\r\n }\r\n \r\n componentDidMount() {\r\n\r\n let container = this.three.current;\r\n var camera, scene, renderer;\r\n var line;\r\n init();\r\n animate();\r\n function init() {\r\n //\r\n camera = new THREE.PerspectiveCamera( 27, window.innerWidth / window.innerHeight, 1, 4000 );\r\n camera.position.z = 1000;\r\n camera.position.y = 300;\r\n scene = new THREE.Scene();\r\n \r\n for (let k = -50; k < 50; k++) {\r\n var segments = array.length;\r\n var geometry = new THREE.BufferGeometry();\r\n var material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors } );\r\n var positions = [];\r\n var colors = [];\r\n let sizes = [];\r\n var r = 800;\r\n \r\n for ( var i = 0; i < segments; i ++ ) {\r\n var x = i*3;\r\n var y = array[i] + Math.random()*20;\r\n var z = k*2;\r\n // positions\r\n positions.push( x, y, z );\r\n // colors\r\n colors.push( 255 );\r\n colors.push( 0 );\r\n colors.push( 0 );\r\n sizes.push(1000)\r\n }\r\n \r\n \r\n // debugger;\r\n \r\n geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( positions, 3 ) );\r\n geometry.setAttribute( 'color', new THREE.Float32BufferAttribute( colors, 3 ) );\r\n geometry.setAttribute( 'size', new THREE.Float32BufferAttribute( sizes, 1 ).setUsage( THREE.DynamicDrawUsage ) );\r\n geometry.computeBoundingSphere();\r\n line = new THREE.Points( geometry, material );\r\n scene.add( line );\r\n }\r\n //\r\n renderer = new THREE.WebGLRenderer();\r\n renderer.setPixelRatio( window.devicePixelRatio );\r\n renderer.setSize( window.innerWidth, window.innerHeight );\r\n renderer.outputEncoding = THREE.sRGBEncoding;\r\n container.appendChild( renderer.domElement );\r\n \r\n //\r\n window.addEventListener( 'resize', onWindowResize, false );\r\n }\r\n function onWindowResize() {\r\n camera.aspect = window.innerWidth / window.innerHeight;\r\n camera.updateProjectionMatrix();\r\n renderer.setSize( window.innerWidth, window.innerHeight );\r\n }\r\n //\r\n function animate() {\r\n requestAnimationFrame( animate );\r\n render();\r\n }\r\n function render() {\r\n // var time = Date.now() * 0.001;\r\n // line.rotation.x = time * 0.25;\r\n // line.rotation.y = time * 0.5;\r\n scene.rotation.y += 0.01;\r\n renderer.render( scene, camera );\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\nexport default ThreeTest\r\n","import MaskedInput from \"react-text-mask\";\r\nimport React from \"react\";\r\n\r\nfunction PhoneNumberTextMaskInput(props) {\r\n const { inputRef, ...other } = props;\r\n\r\n return (\r\n {\r\n inputRef(ref ? ref.inputElement : null);\r\n }}\r\n mask={['(', /[1-9]/, /\\d/, /\\d/, ')', ' ', /\\d/, /\\d/, /\\d/, '-', /\\d/, /\\d/, /\\d/, /\\d/]}\r\n // placeholderChar={'\\u2000'}\r\n // showMask\r\n />\r\n );\r\n}\r\n\r\nexport default PhoneNumberTextMaskInput","/* eslint-disable */\r\nimport React, { Component, Fragment } from \"react\";\r\nimport validate from '../../../js/validate'\r\nimport EditProjectDialog from './EditProjectDialog'\r\nimport CustomSnackbar from '../../../components/Snackbar/CustomSnackbar'\r\nimport {createOrUpdateProject, projectModel} from \"../../../services/project.service\";\r\nimport PhoneNumberTextMaskInput from \"../../../components/TextMasks/PhoneNumberTextMaskInput\";\r\nimport CustomDialog from \"../../../components/Dialogs/customDialog\";\r\nimport EditProjectForm from \"./EditProjectForm\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport GreenButton from \"../../../components/CustomButtons/GreenButton\";\r\n\r\n\r\nclass EditProject extends Component {\r\n\r\n state = {\r\n prevProjectForEditName: null,\r\n editProjectDialogOpen: false,\r\n selectedProjectForEdit: null,\r\n attemptedEditProjectSubmit: false,\r\n editProjectFormIsValid: true,\r\n \r\n editProjectFormControls: {\r\n name: {\r\n label: 'Project Name',\r\n value: null,\r\n valid: true,\r\n name: 'name',\r\n startAdornment: null,\r\n touched: false,\r\n validationRules: {\r\n isRequired: true\r\n }\r\n },\r\n description: {\r\n label: 'Project Description (Optional)',\r\n value: null,\r\n valid: true,\r\n name: 'description',\r\n startAdornment: null,\r\n touched: false,\r\n validationRules: {\r\n \r\n }\r\n },\r\n companyName: {\r\n label: 'Company Name',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n startAdornment: null,\r\n name: 'companyName',\r\n validationRules: {\r\n\r\n }\r\n },\r\n utility: {\r\n label: 'Utility',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n startAdornment: null,\r\n name: 'utility',\r\n validationRules: {\r\n\r\n }\r\n },\r\n contactName: {\r\n label: 'Contact Name',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n startAdornment: 'person',\r\n name: 'contactName',\r\n validationRules: {\r\n\r\n }\r\n },\r\n contactJobTitle: {\r\n label: 'Contact Job Title',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n startAdornment: 'work_outline',\r\n name: 'contactJobTitle',\r\n validationRules: {\r\n\r\n }\r\n },\r\n contactPhoneNumber: {\r\n label: 'Contact Phone Number',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n startAdornment: 'phone',\r\n name: 'contactPhoneNumber',\r\n validationRules: {\r\n\r\n },\r\n textMask: PhoneNumberTextMaskInput\r\n },\r\n contactEmail: {\r\n label: 'Contact Email',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n startAdornment: 'email',\r\n name: 'contactEmail',\r\n validationRules: {\r\n isEmail: true\r\n }\r\n },\r\n },\r\n \r\n snackbar: {\r\n open: false,\r\n message: '',\r\n varient: ''\r\n },\r\n\r\n \r\n };\r\n\r\n toggleEditProjectDialog = (project = null) => {\r\n let editProjectDialogOpen = !this.state.editProjectDialogOpen;\r\n this.setState({ editProjectDialogOpen, selectedProjectForEdit: project })\r\n }\r\n\r\n handleEditProjectInputChange = (event, form) => {\r\n\r\n const value = event.target.value;\r\n const name = event.target.name;\r\n\r\n const updatedControls = { ...this.state.editProjectFormControls };\r\n const updatedFormElement = { ...updatedControls[name] }\r\n\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n\r\n updatedControls[name] = updatedFormElement;\r\n\r\n // Check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n this.setState({\r\n editProjectFormControls: updatedControls,\r\n editProjectFormIsValid: formIsValid\r\n })\r\n }\r\n\r\n onEditProjectSubmit = () => {\r\n let submittedForm = { ...this.state.editProjectFormControls };\r\n let keys = Object.keys(submittedForm);\r\n let finalSubmission = {};\r\n keys.forEach(key => { finalSubmission[key] = submittedForm[key].value });\r\n\r\n if (this.state.editProjectFormIsValid) {\r\n console.log(finalSubmission);\r\n // TODO Edit Project. ProjectId = this.state.selectedProjectForEdit.projectId. finalSubmission is the new object that should have what you need\r\n\r\n let projectRequest = {...projectModel};\r\n\r\n projectRequest.ProjectId = this.props.selectedProjectForEdit.projectId;\r\n projectRequest.CompanyName = finalSubmission.companyName;\r\n projectRequest.ContactName = finalSubmission.contactName;\r\n projectRequest.ContactEmail = finalSubmission.contactEmail;\r\n projectRequest.ContactJobTitle = finalSubmission.contactJobTitle;\r\n projectRequest.ContactPhoneNumber = finalSubmission.contactPhoneNumber;\r\n projectRequest.Description = finalSubmission.description;\r\n projectRequest.Name = finalSubmission.name;\r\n projectRequest.Utility = finalSubmission.utility;\r\n\r\n createOrUpdateProject(projectRequest).then((response)=>{\r\n if (response.isSuccess){\r\n this.toggleEditProjectDialog();\r\n this.setState({ attemptedEditProjectSubmit: false })\r\n\r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = response.successMessage ? response.successMessage : \"Successfully Updated Project\";\r\n snackbar.open = true;\r\n snackbar.variant = \"success\";\r\n this.setState({ snackbar });\r\n\r\n this.props.onSubmit();\r\n this.props.toggleEditProjectDialog();\r\n }else{\r\n\r\n //default error message\r\n let errorMessage = \"Something went wrong. Please try again or contact React Energy Support.\";\r\n\r\n //check if response returned a better error message\r\n if (response.errors && response.errors.length > 0){\r\n errorMessage = response.errors[0].message;\r\n }\r\n \r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = errorMessage;\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n }\r\n });\r\n\r\n } else {\r\n this.setState({ attemptedEditProjectSubmit: true })\r\n }\r\n\r\n\r\n }\r\n\r\n openSnackbar = (value) => {\r\n let snackbar = { ...this.state.snackbar }\r\n snackbar.open = value;\r\n this.setState({ snackbar })\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n let project = { ...this.props.selectedProjectForEdit };\r\n // Make sure it's a new project and that the new one is different\r\n if (this.props.editProjectDialogOpen && project.name !== this.state.prevProjectForEditName) {\r\n // set the state to the project to edit\r\n let editProjectFormControls = { ...this.state.editProjectFormControls }\r\n editProjectFormControls.name.value = project.name;\r\n editProjectFormControls.companyName.value = project.companyName;\r\n editProjectFormControls.utility.value = project.utility;\r\n editProjectFormControls.description.value = project.description;\r\n editProjectFormControls.contactName.value = project.contactName;\r\n editProjectFormControls.contactJobTitle.value = project.contactJobTitle;\r\n editProjectFormControls.contactPhoneNumber.value = project.contactPhoneNumber;\r\n editProjectFormControls.contactEmail.value = project.contactEmail;\r\n this.setState({ editProjectFormControls, prevProjectForEditName: project.name })\r\n }\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n
\r\n \r\n {this.props.selectedProjectForEdit === null ? null :\r\n \r\n }\r\n actions={ this.onEditProjectSubmit()}>Update Project}\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 EditProject;\r\n\r\n","/* eslint-disable */\r\nimport React, { Component, Fragment } from \"react\";\r\n\r\n// Services\r\nimport { getProjectsForUser, createOrUpdateProject, projectModel, deleteProject, getProjectsForOrganization } from \"../../services/project.service\";\r\nimport { getErrorMessage } from \"../../services/serviceHelper\";\r\n\r\n// Redux\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { addProjectsToState } from '../../redux/actions/dashboard-actions';\r\n\r\n//Components\r\nimport DashboardComponent from '../components/DashboardComponent'\r\nimport ThreeTest from \"../components/EditProject/Three\";\r\n\r\n// Validate\r\nimport validate from '../../js/validate'\r\n\r\nimport CustomSnackbar from '../../components/Snackbar/CustomSnackbar'\r\n\r\nimport EditProject from '../components/EditProject/index'\r\nimport EditProjectDialog from \"../components/EditProject/EditProjectDialog\";\r\nimport PhoneNumberTextMaskInput from \"../../components/TextMasks/PhoneNumberTextMaskInput\";\r\n\r\nclass Dashboard extends Component {\r\n\r\n state = {\r\n loading: false,\r\n fetchingProjects: false,\r\n createProjectFormIsValid: false,\r\n attemptedCreateProjectSubmit: false,\r\n createProjectDialogOpen: false,\r\n createProjectFormControls: {\r\n name: {\r\n label: 'Project Name',\r\n value: null,\r\n valid: true,\r\n name: 'name',\r\n startAdornment: null,\r\n touched: false,\r\n validationRules: {\r\n isRequired: true\r\n }\r\n },\r\n description: {\r\n label: 'Project Description (Optional)',\r\n value: null,\r\n valid: true,\r\n name: 'description',\r\n startAdornment: null,\r\n touched: false,\r\n validationRules: {\r\n\r\n }\r\n },\r\n companyName: {\r\n label: 'Company Name',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n startAdornment: null,\r\n name: 'companyName',\r\n validationRules: {\r\n\r\n }\r\n },\r\n utility: {\r\n label: 'Utility',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n startAdornment: null,\r\n name: 'utility',\r\n validationRules: {\r\n\r\n }\r\n },\r\n contactName: {\r\n label: 'Contact Name',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n startAdornment: 'person',\r\n name: 'contactName',\r\n validationRules: {\r\n\r\n }\r\n },\r\n contactJobTitle: {\r\n label: 'Contact Job Title',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n startAdornment: 'work_outline',\r\n name: 'contactJobTitle',\r\n validationRules: {\r\n\r\n }\r\n },\r\n contactPhoneNumber: {\r\n label: 'Contact Phone Number',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n startAdornment: 'phone',\r\n name: 'contactPhoneNumber',\r\n validationRules: {\r\n\r\n },\r\n textMask: PhoneNumberTextMaskInput\r\n },\r\n contactEmail: {\r\n label: 'Contact Email',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n startAdornment: 'email',\r\n name: 'contactEmail',\r\n validationRules: {\r\n isEmail: true\r\n }\r\n },\r\n },\r\n\r\n editProjectDialogOpen: false,\r\n selectedProjectForEdit: null,\r\n\r\n attemptedEditProjectSubmit: false,\r\n editProjectFormControls: {\r\n name: {\r\n label: 'Name',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n message: 'required',\r\n validationRules: {\r\n isRequired: true\r\n },\r\n textMask: null\r\n },\r\n companyName: {\r\n label: 'Company Name',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n },\r\n textMask: null\r\n },\r\n utility: {\r\n label: 'Utility',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n },\r\n textMask: null\r\n },\r\n contactName: {\r\n label: 'Contact Name',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n },\r\n textMask: null\r\n },\r\n contactJobTitle: {\r\n label: 'Contact Job Title',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n },\r\n textMask: null\r\n },\r\n contactPhoneNumber: {\r\n label: 'Contact Phone Number',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n },\r\n textMask: PhoneNumberTextMaskInput\r\n },\r\n contactEmail: {\r\n label: 'Contact Email',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n isEmail: true\r\n },\r\n textMask: null\r\n },\r\n },\r\n\r\n selectedProjectForDelete: null,\r\n deleteProjectDialogOpen: false,\r\n\r\n snackbar: {\r\n open: false,\r\n message: '',\r\n varient: ''\r\n }\r\n \r\n \r\n\r\n }\r\n\r\n openSnackbar = (value) => {\r\n let snackbar = { ...this.state.snackbar }\r\n snackbar.open = value;\r\n this.setState({ snackbar })\r\n }\r\n\r\n toggleCreateProjectDialog = () => {\r\n let createProjectDialogOpen = !this.state.createProjectDialogOpen;\r\n this.setState({ createProjectDialogOpen })\r\n }\r\n\r\n toggleEditProjectDialog = (project = null) => {\r\n let editProjectDialogOpen = !this.state.editProjectDialogOpen;\r\n this.setState({ editProjectDialogOpen, selectedProjectForEdit: project })\r\n }\r\n\r\n toggleDeleteProjectDialog = (project = null) => {\r\n if (project !== null) {\r\n let selectedProjectForDelete = project\r\n this.setState({ selectedProjectForDelete })\r\n }\r\n\r\n let deleteProjectDialogOpen = !this.state.deleteProjectDialogOpen;\r\n this.setState({ deleteProjectDialogOpen })\r\n }\r\n\r\n onCreateProjectSubmit = () => {\r\n this.setState({loading: true});\r\n let submittedForm = { ...this.state.createProjectFormControls };\r\n let keys = Object.keys(submittedForm);\r\n let finalSubmission = {};\r\n keys.forEach(key => { finalSubmission[key] = submittedForm[key].value });\r\n if (this.state.createProjectFormIsValid) {\r\n console.log(finalSubmission);\r\n\r\n let projectRequest = {...projectModel};\r\n \r\n projectRequest.CompanyName = finalSubmission.companyName;\r\n projectRequest.ContactName = finalSubmission.contactName;\r\n projectRequest.ContactEmail = finalSubmission.contactEmail;\r\n projectRequest.ContactJobTitle = finalSubmission.contactJobTitle;\r\n projectRequest.ContactPhoneNumber = finalSubmission.contactPhoneNumber;\r\n projectRequest.Name = finalSubmission.name;\r\n projectRequest.Utility = finalSubmission.utility;\r\n \r\n createOrUpdateProject(projectRequest).then((response)=>{\r\n if (response.isSuccess){\r\n this.toggleCreateProjectDialog();\r\n\r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = response.successMessage ? response.successMessage : \"Successfully Created New Project\";\r\n snackbar.open = true;\r\n snackbar.variant = \"success\";\r\n this.setState({ snackbar });\r\n \r\n this.updateTable();\r\n }else{\r\n\r\n //default error message\r\n let errorMessage = getErrorMessage(response);\r\n \r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = errorMessage;\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n }\r\n });\r\n } else {\r\n this.setState({ attemptedCreateProjectSubmit: true })\r\n }\r\n this.setState({loading: false});\r\n\r\n \r\n }\r\n\r\n onEditProjectSubmit = () => {\r\n let submittedForm = { ...this.state.editProjectFormControls };\r\n let keys = Object.keys(submittedForm);\r\n let finalSubmission = {};\r\n keys.forEach(key => { finalSubmission[key] = submittedForm[key].value });\r\n\r\n if (this.state.editProjectFormIsValid) {\r\n console.log(finalSubmission);\r\n // TODO Edit Project. ProjectId = this.state.selectedProjectForEdit.projectId. finalSubmission is the new object that should have what you need\r\n\r\n let projectRequest = {...projectModel};\r\n\r\n projectRequest.ProjectId = this.state.selectedProjectForEdit.projectId;\r\n projectRequest.CompanyName = finalSubmission.companyName;\r\n projectRequest.ContactName = finalSubmission.contactName;\r\n projectRequest.ContactEmail = finalSubmission.contactEmail;\r\n projectRequest.ContactJobTitle = finalSubmission.contactJobTitle;\r\n projectRequest.ContactPhoneNumber = finalSubmission.contactPhoneNumber;\r\n projectRequest.Name = finalSubmission.name;\r\n projectRequest.Utility = finalSubmission.utility;\r\n\r\n createOrUpdateProject(projectRequest).then((response)=>{\r\n if (response.isSuccess){\r\n this.toggleEditProjectDialog();\r\n this.setState({ attemptedEditProjectSubmit: false })\r\n\r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = response.successMessage ? response.successMessage : \"Successfully Updated Project\";\r\n snackbar.open = true;\r\n snackbar.variant = \"success\";\r\n this.setState({ snackbar });\r\n\r\n this.updateTable();\r\n }else{\r\n\r\n //default error message\r\n let errorMessage = getErrorMessage(response);\r\n \r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = errorMessage;\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n }\r\n });\r\n\r\n } else {\r\n this.setState({ attemptedEditProjectSubmit: true })\r\n }\r\n\r\n\r\n }\r\n\r\n onDeleteProjectSubmit = () => {\r\n console.log(this.state.selectedProjectForDelete);\r\n this.toggleDeleteProjectDialog();\r\n // TODO Delete Project. projectId = this.state.selectedProjectForDelete.projectId\r\n\r\n deleteProject(this.state.selectedProjectForDelete.projectId).then((response)=>{\r\n if (response.isSuccess){\r\n //this.toggleDeleteProjectDialog();\r\n\r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = response.successMessage ? response.successMessage : \"Successfully Deleted Project\";\r\n snackbar.open = true;\r\n snackbar.variant = \"success\";\r\n this.setState({ snackbar });\r\n\r\n this.updateTable();\r\n }else{\r\n\r\n //default error message\r\n let errorMessage = getErrorMessage(response);\r\n \r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = errorMessage;\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n }\r\n });\r\n }\r\n\r\n handleCreateProjectInputChange = (event, form) => {\r\n \r\n const value = event.target.value;\r\n const name = event.target.name;\r\n\r\n const updatedControls = { ...this.state.createProjectFormControls };\r\n const updatedFormElement = { ...updatedControls[name] }\r\n\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n\r\n updatedControls[name] = updatedFormElement;\r\n\r\n // Check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n this.setState({\r\n createProjectFormControls: updatedControls,\r\n createProjectFormIsValid: formIsValid\r\n })\r\n }\r\n\r\n handleEditProjectInputChange = (event, form) => {\r\n\r\n const value = event.target.value;\r\n const name = event.target.name;\r\n\r\n const updatedControls = { ...this.state.editProjectFormControls };\r\n const updatedFormElement = { ...updatedControls[name] }\r\n\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n\r\n updatedControls[name] = updatedFormElement;\r\n\r\n // Check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n this.setState({\r\n editProjectFormControls: updatedControls,\r\n editProjectFormIsValid: formIsValid\r\n })\r\n }\r\n\r\n \r\n\r\n componentDidMount() {\r\n this.updateTable();\r\n }\r\n\r\n updateTable = () => {\r\n this.setState({fetchingProjects: true});\r\n getProjectsForOrganization().then(projects => {\r\n this.props.addProjectsToState(projects);\r\n this.setState({fetchingProjects: false});\r\n });\r\n }\r\n\r\n render() {\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\n\r\n\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n projects: state.projects,\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({ addProjectsToState }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Dashboard);\r\n\r\n","import React, {Fragment} from 'react';\r\n\r\n//Material UI\r\nimport {makeStyles} from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\n\r\nimport Table from '@material-ui/core/Table';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableRow from '@material-ui/core/TableRow';\r\n\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n\r\n card: {\r\n maxWidth: 345,\r\n },\r\n projectProperty: {\r\n color: theme.palette.primary.main,\r\n display: 'inline-block',\r\n paddingLeft: theme.spacing(1),\r\n '&:hover': {\r\n color: theme.palette.primary.dark,\r\n textDecoration: 'underline',\r\n cursor: 'pointer'\r\n }\r\n }\r\n}));\r\n\r\nconst projectProperties = [\r\n {\r\n name: 'name',\r\n label: 'Project'\r\n },\r\n {\r\n name: 'companyName',\r\n label: 'Company Name'\r\n },\r\n {\r\n name: 'contactName',\r\n label: 'Contact Name',\r\n },\r\n {\r\n name: 'contactJobTitle',\r\n label: 'Contact Job Title'\r\n },\r\n {\r\n name: 'contactPhoneNumber',\r\n label: 'Contact Phone Number',\r\n },\r\n {\r\n name: 'contactEmail',\r\n label: 'Contact Email'\r\n },\r\n];\r\n\r\nfunction getProjectInfo(project, classes, toggleEditProjectDialog) {\r\n\r\n return (\r\n \r\n \r\n {projectProperties.map(property => {\r\n // if (project[property.name]) {\r\n return (\r\n \r\n \r\n {property.label}:\r\n \r\n \r\n {project[property.name]}\r\n \r\n
\r\n
\r\n\r\n )\r\n // } else {\r\n // return null\r\n // } \r\n\r\n })}\r\n\r\n
\r\n )\r\n}\r\n\r\nexport default function SimpleAppBar(props) {\r\n const classes = useStyles();\r\n const {project, toggleEditProjectDialog} = props;\r\n\r\n return (\r\n
\r\n \r\n\r\n \r\n {project === null ? null : getProjectInfo(project, classes, toggleEditProjectDialog)}\r\n \r\n\r\n \r\n\r\n\r\n
\r\n );\r\n}","import React, {Component} from 'react'\r\nimport Highcharts from 'highcharts'\r\nimport HighchartsReact from 'highcharts-react-official'\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport { renderToString } from 'react-dom/server'\r\n\r\nimport LabelComponent from \"./FacilityChartLabels\";\r\n\r\n// Material UI\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nclass FacilityChartTable extends Component {\r\n constructor(props) {\r\n super(props);\r\n //this.afterChartCreated = this.afterChartCreated.bind(this);\r\n this.state = {\r\n chartOptions: null\r\n };\r\n }\r\n\r\n //afterChartCreated(chart) {\r\n // debugger;\r\n // this.internalChart = chart;\r\n // this.forceUpdate();\r\n //}\r\n\r\n componentDidUpdate() {\r\n //this.internalChart.getMargins(); // redraw\r\n //this.internalChart.reflow();\r\n }\r\n\r\n componentDidMount = () => {\r\n const { facilities } = this.props;\r\n let projectId = (facilities && facilities.count > 0) ? facilities[0].projectId : null;\r\n let seriesAndLists = getSeriesForChart(facilities);\r\n let chartOptions = getChartOptions(seriesAndLists, projectId);\r\n this.setState({ chartOptions });\r\n }\r\n\r\n render() {\r\n const chart = this.internalChart, customLabels = [];\r\n\r\n //if (chart && chart.xAxis[0]) {\r\n // debugger;\r\n // Highcharts.objectEach(chart.xAxis[0].ticks, function (tick) {\r\n // customLabels.push();\r\n // });\r\n //}\r\n\r\n return (\r\n \r\n \r\n \r\n {customLabels}\r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default FacilityChartTable;\r\n\r\n\r\nconst getChartOptions = (seriesAndLists, projectId) => {\r\n const { series, facilitiesList, facilityIds } = seriesAndLists;\r\n \r\n return (\r\n {\r\n chart: {\r\n type: 'bar',\r\n style: {\r\n fontFamily: \"Roboto\"\r\n }\r\n },\r\n title: {\r\n text: 'Facilities'\r\n },\r\n subtitle: {\r\n text: ''\r\n },\r\n xAxis: {\r\n categories: facilitiesList,\r\n title: {\r\n text: null\r\n },\r\n labels: {\r\n formatter: function () {\r\n let facility = facilitiesList[this.pos];\r\n return facility\r\n },\r\n useHTML: true\r\n }\r\n },\r\n yAxis: [{\r\n min: 0,\r\n title: {\r\n text: 'Peak Demand (kW)',\r\n align: 'high'\r\n },\r\n labels: {\r\n overflow: 'justify'\r\n },\r\n opposite: true\r\n },\r\n {\r\n min: 0,\r\n title: {\r\n text: 'Annual Usage (kWh)',\r\n align: 'high'\r\n },\r\n labels: {\r\n overflow: 'justify'\r\n },\r\n\r\n },\r\n ],\r\n tooltip: {\r\n valueSuffix: ' kW'\r\n },\r\n plotOptions: {\r\n bar: {\r\n dataLabels: {\r\n enabled: false\r\n }\r\n }\r\n },\r\n legend: {\r\n layout: 'vertical',\r\n align: 'right',\r\n verticalAlign: 'top',\r\n x: -40,\r\n y: 80,\r\n floating: false,\r\n borderWidth: 1,\r\n backgroundColor: ((Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'),\r\n shadow: true\r\n },\r\n credits: {\r\n enabled: false\r\n },\r\n series: series\r\n } \r\n )\r\n \r\n}\r\n\r\nconst getSeriesForChart = (facilities) => {\r\n let series = [\r\n {\r\n name: 'Peak Demand (kW)',\r\n data: [],\r\n yAxis: 0\r\n },\r\n {\r\n name: 'Annual Usage (kWh)',\r\n data: [],\r\n yAxis: 1\r\n }\r\n ];\r\n let facilitiesList = [];\r\n let facilityIds = [];\r\n\r\n facilities.forEach((facility, index) => {\r\n series[0].data.push(facility.maximumkWValue);\r\n series[1].data.push((facility.maximumkWValue * 1000));\r\n facilitiesList.push(facility.name);\r\n facilityIds.push(facility.facilityId)\r\n\r\n })\r\n return { series, facilitiesList, facilityIds}\r\n};\r\n\r\n//export default function FacilitiesChartTable({ facilities }) {\r\n// let projectId = facilities[0].projectId;\r\n// let seriesAndLists = getSeriesForChart(facilities);\r\n// let options = getChartOptions(seriesAndLists, projectId);\r\n\r\n// return (\r\n// \r\n// )\r\n//}","import React from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\n\r\nexport default class LabelComponent extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n this.handleClick = this.handleClick.bind(this);\r\n this.state = {\r\n render: true\r\n };\r\n }\r\n\r\n handleClick() {\r\n this.setState({ render: this.state.render ? false : true });\r\n }\r\n\r\n render() {\r\n const tick = this.props.tick;\r\n\r\n return (\r\n
\r\n {tick.label ? createPortal(\r\n
\r\n
React
\r\n {this.state.render ? tick.pos : null}\r\n
,\r\n tick.label.element\r\n ) : null}\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react'\r\nimport Highcharts from 'highcharts'\r\nimport HighchartsReact from 'highcharts-react-official'\r\nimport { Link } from 'react-router-dom';\r\nimport highchartsStreamgraph from \"highcharts/modules/streamgraph\";\r\nimport moment from 'moment'\r\n\r\n\r\nhighchartsStreamgraph(Highcharts);\r\n\r\nlet colors = Highcharts.getOptions().colors;\r\n\r\nconst getCategories = () => {\r\n let array = [];\r\n let initial = moment().date(1).hour(0).minute(0).second(0).millisecond(0).subtract(1, 'year');\r\n for (let i = 0; i < 12; i++) {\r\n array.push(moment(initial).add(i, 'month').format(\"MMMM YYYY\"))\r\n }\r\n return array\r\n}\r\n\r\nfunction getSeries(facilities) {\r\n let array = [];\r\n let data = [];\r\n for (let i = 0; i < 12; i++) {\r\n data.push(Math.random() * (2000000 - 1500000) + 1500000)\r\n }\r\n facilities.forEach(facility => array.push({ name: facility.name, data: data}))\r\n return array;\r\n}\r\n\r\nconst getOptions = (facilities) => {\r\n\r\n\r\n const options = {\r\n chart: {\r\n type: 'streamgraph',\r\n marginBottom: 30,\r\n zoomType: 'x',\r\n style: {\r\n fontFamily: \"Roboto\"\r\n }\r\n },\r\n\r\n //// Make sure connected countries have similar colors\r\n //colors: [\r\n // colors[0],\r\n // colors[1],\r\n // colors[2],\r\n // colors[3],\r\n // colors[4],\r\n // // East Germany, West Germany and Germany\r\n // Highcharts.color(colors[5]).brighten(0.2).get(),\r\n // Highcharts.color(colors[5]).brighten(0.1).get(),\r\n // colors[5],\r\n // colors[6],\r\n // colors[7],\r\n // colors[8],\r\n // colors[9],\r\n // colors[0],\r\n // colors[1],\r\n // colors[3],\r\n // // Soviet Union, Russia\r\n // Highcharts.color(colors[2]).brighten(-0.1).get(),\r\n // Highcharts.color(colors[2]).brighten(-0.2).get(),\r\n // Highcharts.color(colors[2]).brighten(-0.3).get()\r\n //],\r\n\r\n title: {\r\n floating: true,\r\n align: 'left',\r\n text: 'Aggregate Energy Usage'\r\n },\r\n subtitle: {\r\n floating: true,\r\n align: 'left',\r\n y: 30,\r\n },\r\n\r\n xAxis: {\r\n maxPadding: 0,\r\n type: 'category',\r\n crosshair: true,\r\n categories: getCategories(),\r\n labels: {\r\n align: 'left',\r\n reserveSpace: false,\r\n rotation: 270\r\n },\r\n lineWidth: 0,\r\n margin: 20,\r\n tickWidth: 0\r\n },\r\n\r\n yAxis: {\r\n visible: false,\r\n startOnTick: false,\r\n endOnTick: false\r\n },\r\n\r\n legend: {\r\n enabled: false\r\n },\r\n\r\n annotations: [\r\n {\r\n labels: [\r\n {\r\n point: {\r\n x: 5.5,\r\n xAxis: 0,\r\n y: 30,\r\n yAxis: 0\r\n },\r\n text: 'Cancelled
during
World War II'\r\n }, {\r\n point: {\r\n x: 18,\r\n xAxis: 0,\r\n y: 90,\r\n yAxis: 0\r\n },\r\n text: 'Soviet Union fell,
Germany united'\r\n }\r\n ],\r\n labelOptions: {\r\n backgroundColor: 'rgba(255,255,255,0.5)',\r\n borderColor: 'silver'\r\n }\r\n }\r\n ],\r\n\r\n plotOptions: {\r\n series: {\r\n label: {\r\n minFontSize: 5,\r\n maxFontSize: 15,\r\n style: {\r\n color: 'rgba(255,255,255,0.75)'\r\n }\r\n }\r\n }\r\n },\r\n\r\n // Data parsed with olympic-medals.node.js\r\n series: getSeries(facilities),\r\n\r\n exporting: {\r\n sourceWidth: 800,\r\n sourceHeight: 600\r\n }\r\n }\r\n return options\r\n}\r\n\r\n\r\n//const getSeriesForChart = (facilities) => {\r\n// let series = [\r\n// {\r\n// name: 'Peak Demand (kW)',\r\n// data: [],\r\n// yAxis: 0\r\n// },\r\n// {\r\n// name: 'Annual Usage (kWh)',\r\n// data: [],\r\n// yAxis: 1\r\n// }\r\n// ];\r\n// let facilitiesList = [];\r\n// let facilityIds = [];\r\n\r\n// facilities.forEach((facility, index) => {\r\n// series[0].data.push(facility.maximumkWValue);\r\n// series[1].data.push((facility.maximumkWValue * 1000));\r\n// facilitiesList.push(facility.name);\r\n// facilityIds.push(facility.facilityId)\r\n\r\n// })\r\n// return { series, facilitiesList, facilityIds }\r\n//};\r\n\r\nexport default function FacilitiesChartTable({ facilities }) {\r\n const options = getOptions(facilities)\r\n return (\r\n \r\n )\r\n}","import React, {Component} from 'react'\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport {withStyles} from '@material-ui/core/styles';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport Input from '@material-ui/core/Input';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\nimport CustomOutlinedInput from \"../../../components/Inputs/CustomOutlinedInput\";\r\nimport AntTabs from \"../../../components/AntTabs/AntTabs\";\r\nimport AntTab from \"../../../components/AntTabs/AntTab\";\r\n\r\nconst styles = theme => ({\r\n textField: {\r\n margin: theme.spacing(1),\r\n width: '100%'\r\n\r\n },\r\n root: {\r\n marginLeft: theme.spacing(2),\r\n marginRight: theme.spacing(2),\r\n },\r\n row: {\r\n paddingTop: 0,\r\n paddingBottom: 0\r\n }\r\n});\r\n\r\nclass CreateFacilityForm extends Component {\r\n state = {\r\n currentTab: 0,\r\n tabs: [\r\n {\r\n label: 'Description',\r\n },\r\n {\r\n label: 'Utility'\r\n },\r\n {\r\n label: 'Address'\r\n }\r\n ],\r\n };\r\n\r\n changeTab = (index) => {\r\n this.setState({currentTab: index})\r\n };\r\n\r\n getComponent = () => {\r\n const {currentTab} = this.state;\r\n const {handleInputChange, formControls, attemptedSubmit} = this.props;\r\n switch (currentTab) {\r\n case 0:\r\n return ;\r\n case 1:\r\n return
\r\n \r\n \r\n \r\n
;\r\n case 2:\r\n return \r\n \r\n \r\n \r\n \r\n ;\r\n default:\r\n return ;\r\n }\r\n }\r\n\r\n render() {\r\n const {handleInputChange, formControls, attemptedSubmit, classes} = this.props;\r\n\r\n return (\r\n
alert(\"submitted\")}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.tabs.map((tab, index) => (\r\n this.changeTab(index)}/>\r\n ))}\r\n \r\n \r\n \r\n {this.getComponent()}\r\n \r\n \r\n
\r\n )\r\n }\r\n\r\n\r\n}\r\n\r\n\r\nexport default withStyles(styles)(CreateFacilityForm)","import React, {Component, Fragment} from 'react';\r\n\r\n\r\n// Material UI\r\n\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport CreateFacilityForm from '../forms/CreateFacilityForm'\r\nimport CustomDialog from \"../../../components/Dialogs/customDialog\";\r\nimport CustomPulseLoader from \"../../../components/Spinners/pulse-loader\";\r\nimport GreenButton from \"../../../components/CustomButtons/GreenButton\";\r\n\r\n\r\nfunction CreateFacilityDialog(props) {\r\n const {\r\n createFacilityDialogOpen, \r\n toggleCreateFacilityDialog, \r\n createFacilityFormControls, \r\n handleCreateFacilityInputChange, \r\n onCreateFacilitySubmit, \r\n attemptedCreateFacilitySubmit,\r\n loading,\r\n } = props;\r\n\r\n return (\r\n \r\n }\r\n actions={ onCreateFacilitySubmit()}>{loading ? : 'Add Meter'}}\r\n />\r\n \r\n\r\n\r\n );\r\n}\r\n\r\nexport default CreateFacilityDialog;","import React, {Component, Fragment} from 'react';\r\n\r\n// Material UI\r\nimport Button from '@material-ui/core/Button';\r\n\r\n// Components\r\nimport EditFacilityForm from '../forms/EditFacilityForm';\r\nimport CustomDialog from \"../../../components/Dialogs/customDialog\";\r\nimport {bindActionCreators} from \"redux\";\r\nimport {connect} from \"react-redux\";\r\nimport {\r\n toggleEditMeterDialogOpen,\r\n onEditMeterSubmit,\r\n handleEditMeterInputChange,\r\n} from \"../../../redux/actions/MeterActions/EditMeterActions/edit-meter-actions\";\r\nimport CreateFacilityForm from \"../forms/CreateFacilityForm\";\r\nimport GreenButton from \"../../../components/CustomButtons/GreenButton\";\r\n\r\n\r\nclass EditFacilityDialog extends Component {\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n // if (this.props.editFacilityDialogOpen !== prevProps.editFacilityDialogOpen) {\r\n // debugger;\r\n // }\r\n }\r\n\r\n render() {\r\n const {\r\n //parent\r\n onEditComplete,\r\n \r\n //redux variables\r\n attemptedEditMeterSubmit,\r\n editMeterDialogOpen,\r\n selectedMeterForEdit,\r\n editMeterFormControls,\r\n\r\n //redux actions\r\n toggleEditMeterDialogOpen,\r\n onEditMeterSubmit,\r\n handleEditMeterInputChange\r\n } = this.props;\r\n\r\n\r\n return (\r\n \r\n {selectedMeterForEdit === null ? null :\r\n\r\n }\r\n actions={ {\r\n onEditMeterSubmit(true);\r\n }}>Update Meter}\r\n />\r\n\r\n }\r\n \r\n\r\n );\r\n }\r\n};\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n editMeterFormIsValid: state.editMeterFormIsValid,\r\n attemptedEditMeterSubmit: state.attemptedEditMeterSubmit,\r\n editMeterDialogOpen: state.editMeterDialogOpen,\r\n selectedMeterForEdit: state.selectedMeterForEdit,\r\n editMeterFormControls: state.editMeterFormControls,\r\n\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n toggleEditMeterDialogOpen,\r\n onEditMeterSubmit,\r\n handleEditMeterInputChange,\r\n }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(EditFacilityDialog);\r\n","import React from 'react'\r\n\r\n// Material UI\r\nimport Grid from '@material-ui/core/Grid';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport Input from '@material-ui/core/Input';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n\r\n textField: {\r\n margin: theme.spacing(1),\r\n width: '100%'\r\n\r\n },\r\n\r\n\r\n}));\r\n\r\nconst EditFacilityForm = (props) => {\r\n const { handleEditFacilityInputChange, editFacilityFormControls, attemptedEditFacilitySubmit } = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n
alert(\"submitted\")}>\r\n \r\n \r\n \r\n \r\n {editFacilityFormControls.name.label}*\r\n \r\n {/*{editFacilityFormControls.name.message}*/}\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 {editFacilityFormControls.postalCode.label}*\r\n \r\n {/*{createFacilityFormControls.name.message}*/}\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 (EditFacilityForm)","import moment from 'moment'\r\nimport 'moment-timezone';\r\n\r\n\r\n// the moment isDST() function returns true for ALL values in the DST time frame. For example, Texas participates in DST and the summer time \r\n// is the daylight savings time (winter is the standard time). So ANY time period during that summer will return true. So to find the dates\r\n// where the time actually changes you can check when that isDST() value goes from false to true\r\n\r\nlet getDSTDays = (startDate, endDate) => {\r\n // let start = moment().tz('Australia/Sydney').month(2).date(10).year(2017).hour(0).minute(0).second(0).millisecond(0);\r\n let fallBackDays = [];\r\n let springForwardDays = [];\r\n\r\n let day = startDate.clone();\r\n let prevIsDST = startDate.isDST();\r\n for (let i = 0; day.isBefore(endDate); i++) {\r\n if (prevIsDST !== day.isDST()) {\r\n if (prevIsDST) {\r\n fallBackDays.push(day.format(\"YYYY-MM-DD\"))\r\n } else {\r\n springForwardDays.push(day.format(\"YYYY-MM-DD\"))\r\n }\r\n\r\n }\r\n // days.push(day.format())\r\n prevIsDST = day.isDST();\r\n day.add(1, \"hour\");\r\n\r\n }\r\n return {fallBackDays, springForwardDays};\r\n\r\n}\r\n\r\nexport default getDSTDays","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardActionArea from '@material-ui/core/CardActionArea';\r\nimport CardActions from '@material-ui/core/CardActions';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport CardMedia from '@material-ui/core/CardMedia';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst useStyles = makeStyles({\r\n card: {\r\n minWidth: 345,\r\n height: \"100%\"\r\n },\r\n media: {\r\n height: 140,\r\n },\r\n cardActionArea: {\r\n height: \"100%\"\r\n },\r\n});\r\n\r\nexport default function ExcelCard({ title, description, handleClick, img }) {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n handleClick(\"excel\")}>\r\n \r\n\r\n\r\n \r\n \r\n {title}\r\n \r\n \r\n {description}\r\n \r\n \r\n \r\n \r\n );\r\n}","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardActionArea from '@material-ui/core/CardActionArea';\r\nimport CardActions from '@material-ui/core/CardActions';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport CardMedia from '@material-ui/core/CardMedia';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst useStyles = makeStyles({\r\n card: {\r\n minWidth: 345,\r\n height: \"100%\"\r\n },\r\n media: {\r\n height: 140,\r\n },\r\n cardActionArea: {\r\n height: \"100%\"\r\n },\r\n});\r\n\r\nexport default function CsvCard({ title, description, handleClick, img }) {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n handleClick(\"csv\")}>\r\n \r\n\r\n\r\n \r\n \r\n {title}\r\n \r\n \r\n {description}\r\n \r\n \r\n \r\n \r\n );\r\n}","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\n// Material UI\r\nimport Card from '@material-ui/core/Card';\r\nimport CardActionArea from '@material-ui/core/CardActionArea';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport CardMedia from '@material-ui/core/CardMedia';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst useStyles = makeStyles({\r\n card: {\r\n minWidth: 345,\r\n height: \"100%\"\r\n },\r\n media: {\r\n height: 140,\r\n },\r\n cardActionArea: {\r\n height: \"100%\"\r\n },\r\n});\r\n\r\nexport default function HandsontableCard({ title, description, handleClick, img }) {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n handleClick(\"manual\")}>\r\n \r\n\r\n\r\n \r\n \r\n {title}\r\n \r\n \r\n {description}\r\n \r\n \r\n \r\n \r\n );\r\n}","import React, { Fragment, Component, useState } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { Field, FieldArray, reduxForm, SubmissionError, FormSection } from 'redux-form'\r\nimport getDSTdays from '../js/DstDays'\r\n\r\n\r\n// Material UI\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\n\r\n// Cards\r\nimport ExcelCard from './cards/MicrosoftExcelCard'\r\nimport CsvCard from './cards/CsvCard'\r\nimport HandsontableCard from './cards/HandsontableCard'\r\n\r\n\r\n//Moment\r\nimport moment from 'moment'\r\n\r\nclass ContactForm extends Component {\r\n\r\n // componentDidMount() {\r\n //\r\n // let temp = moment.tz.zone('Australia/Sydney');\r\n // let offsets = [...new Set(temp.offsets)];\r\n // debugger;\r\n // }\r\n\r\n render() {\r\n const { handleSubmit, reset, handleClick } = this.props;\r\n const gridItemStyle = {\r\n alignItems: 'center',\r\n boxShadow: 'none',\r\n borderStyle: 'solid',\r\n borderColor: '#c2c2c2',\r\n borderWidth: 'thin',\r\n borderRadius: 10,\r\n height: \"100%\"\r\n };\r\n\r\n let minDate = moment().year(2019).month(0).date(1);\r\n let maxDate = moment().year(2020).month(0).date(1);\r\n\r\n let importMethods = [\r\n {\r\n title: 'Microsoft Excel',\r\n description: 'for .xlsx files',\r\n component: function() {\r\n return \r\n }\r\n },\r\n {\r\n title: 'CSV',\r\n description: 'for .csv files',\r\n component: function () {\r\n return \r\n }\r\n },\r\n {\r\n title: 'Paste Data',\r\n description: 'Paste Data into Spreadsheet',\r\n component: function () {\r\n return \r\n }\r\n },\r\n\r\n ]\r\n\r\n return (\r\n\r\n
\r\n\r\n \r\n {importMethods.map(method => (\r\n \r\n \r\n {method.component()}\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\nContactForm = reduxForm({\r\n // a unique name for the form\r\n form: 'selectImportMethodForm',\r\n enableReinitialize: true,\r\n})(ContactForm)\r\n\r\nexport default (ContactForm)","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n },\r\n formControl: {\r\n margin: theme.spacing(3),\r\n },\r\n group: {\r\n margin: theme.spacing(1, 0),\r\n },\r\n}));\r\n\r\nexport default function RadioButtonsGroup({ group, handleRadioChange}) {\r\n const classes = useStyles();\r\n const [value, setValue] = React.useState('female');\r\n\r\n function handleChange(event) {\r\n //something is super weird here. the event shows as synthetic. but you can access target if you go to that directly\r\n handleRadioChange(event.target.name, event.target.value)\r\n setValue(event.target.value);\r\n }\r\n\r\n return (\r\n
\r\n \r\n {group.label}\r\n \r\n {group.options.map(field => (\r\n } label={field.label} />\r\n ))}\r\n \r\n \r\n
\r\n );\r\n}","import MomentUtils from '@date-io/moment';\r\n\r\nimport React, { useState } from \"react\";\r\n\r\nimport { DatePicker, MuiPickersUtilsProvider } from \"@material-ui/pickers\";\r\n\r\nexport default function ({ group, handleDateChange}) {\r\n const [selectedDate, handleLocalChange] = useState(group.value);\r\n\r\n function changeDate(event, name) {\r\n handleDateChange(event, name);\r\n handleLocalChange(event)\r\n }\r\n\r\n return (\r\n \r\n changeDate(e, group.name)} format=\"MM/DD/YYYY\" views={[\"year\", \"month\", \"date\"]}/>\r\n \r\n );\r\n}","import React, {Fragment, Component } from 'react'\r\n\r\n// Material UI\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\n// Components\r\nimport RadioButtonsGroup from './renderRadioGroupReact'\r\nimport DatePicker from './renderDatePickers'\r\nimport FormLabel from \"@material-ui/core/FormLabel\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport Select from \"@material-ui/core/Select\";\r\nimport {withStyles} from \"@material-ui/core\";\r\n\r\nconst styles = theme => ({\r\n formControl: {\r\n margin: theme.spacing(3),\r\n minWidth: 120\r\n },\r\n});\r\n\r\nclass CsvOrExcelStep2Form extends Component {\r\n \r\n state = {\r\n timezone: \"America/New_York\" \r\n };\r\n\r\n handleTimeZoneChange = (event) => {\r\n this.setState({timezone: event.target.value});\r\n \r\n // bad code here, two sources of truth. Need to move all step2params down to this local state.\r\n // Did it this way because when trying to use the timezone from props it doesn't fire componentDidUpdate for unknown reason\r\n this.props.handleTimeZoneChange(event);\r\n };\r\n\r\n\r\n render() {\r\n const {step2params, handleRadioChange, handleDateChange, importMethod, classes} = this.props;\r\n\r\n let radioKeys = Object.keys(step2params.radios);\r\n let dateKeys = Object.keys(step2params.dateRange);\r\n\r\n return (\r\n
\r\n\r\n \r\n \r\n {/**/}\r\n {/* */}\r\n {/* */}\r\n {/* Time Zone*/}\r\n {/* */}\r\n {/* Eastern Time (ET)*/}\r\n {/* Central Time (CT)*/}\r\n {/* Mountain Time (MT)*/}\r\n {/* Pacific Time (PT)*/}\r\n {/* Alaska Time (AT)*/}\r\n {/* Hawaii-Aleutian Time (HT)*/}\r\n {/* Australian Eastern Daylight Time (AEDT)*/}\r\n {/* Australian Eastern Standard Time (AEST)*/}\r\n {/* Australian Central Daylight Time (ACDT)*/}\r\n {/* Australian Central Western Standard Time (ACWST)*/}\r\n {/* Australian Western Standard Time (AWST)*/}\r\n {/* Australian Central Standard Time (ACST)*/}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/**/}\r\n\r\n\r\n\r\n {radioKeys.map(key => {\r\n let group = step2params.radios[key];\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 {importMethod === 'manual' ?\r\n \r\n\r\n\r\n \r\n \r\n Date Range\r\n {dateKeys.map(key => {\r\n let group = step2params.dateRange[key];\r\n return \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\n\r\n
\r\n )\r\n }\r\n \r\n}\r\n\r\n\r\nexport default withStyles(styles)(CsvOrExcelStep2Form)","import React, { Component } from 'react';\r\nimport { css } from '@emotion/core';\r\n// First way to import\r\n//import { ClipLoader } from 'react-spinners';\r\n// Another way to import\r\nimport GridLoader from 'react-spinners/GridLoader';\r\n\r\nconst override = css`\r\n display: block;\r\n margin: 0 auto;\r\n border-color: red;\r\n`;\r\n\r\nclass CustomGridSpinner extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: true\r\n }\r\n }\r\n render() {\r\n let {color = '#2196f3'} = this.props;\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default CustomGridSpinner;","/*!\r\n\r\n =========================================================\r\n * Material Dashboard React - v1.6.0 based on Material Dashboard - v1.2.0\r\n =========================================================\r\n\r\n * Product Page: http://www.creative-tim.com/product/material-dashboard-react\r\n * Copyright 2018 Creative Tim (http://www.creative-tim.com)\r\n * Licensed under MIT (https://github.com/creativetimofficial/material-dashboard-react/blob/master/LICENSE.md)\r\n\r\n =========================================================\r\n\r\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\n */\r\n\r\n// ##############################\r\n// // // Function that converts from hex color to rgb color\r\n// // // Example: input = #9c27b0 => output = 156, 39, 176\r\n// // // Example: input = 9c27b0 => output = 156, 39, 176\r\n// // // Example: input = #999 => output = 153, 153, 153\r\n// // // Example: input = 999 => output = 153, 153, 153\r\n// #############################\r\nconst hexToRgb = input => {\r\n input = input + \"\";\r\n input = input.replace(\"#\", \"\");\r\n let hexRegex = /[0-9A-Fa-f]/g;\r\n if (!hexRegex.test(input) || (input.length !== 3 && input.length !== 6)) {\r\n throw new Error(\"input is not a valid hex color.\");\r\n }\r\n if (input.length === 3) {\r\n let first = input[0];\r\n let second = input[1];\r\n let last = input[2];\r\n input = first + first + second + second + last + last;\r\n }\r\n input = input.toUpperCase(input);\r\n let first = input[0] + input[1];\r\n let second = input[2] + input[3];\r\n let last = input[4] + input[5];\r\n return (\r\n parseInt(first, 16) +\r\n \", \" +\r\n parseInt(second, 16) +\r\n \", \" +\r\n parseInt(last, 16)\r\n );\r\n};\r\n\r\n// ##############################\r\n// // // Variables - Styles that are used on more than one component\r\n// #############################\r\n\r\nconst drawerWidth = 260;\r\n\r\nconst transition = {\r\n transition: \"all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1)\"\r\n};\r\n\r\nconst container = {\r\n paddingRight: \"15px\",\r\n paddingLeft: \"15px\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\"\r\n};\r\n\r\nconst defaultFont = {\r\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\r\n fontWeight: \"300\",\r\n lineHeight: \"1.5em\"\r\n};\r\n\r\nconst primaryColor = [\"#9c27b0\", \"#ab47bc\", \"#8e24aa\", \"#af2cc5\"];\r\nconst warningColor = [\"#ff9800\", \"#ffa726\", \"#fb8c00\", \"#ffa21a\"];\r\nconst dangerColor = [\"#f44336\", \"#ef5350\", \"#e53935\", \"#f55a4e\"];\r\nconst successColor = [\"#4caf50\", \"#66bb6a\", \"#43a047\", \"#5cb860\"];\r\nconst infoColor = [\"#00acc1\", \"#26c6da\", \"#00acc1\", \"#00d3ee\"];\r\nconst roseColor = [\"#e91e63\", \"#ec407a\", \"#d81b60\", \"#eb3573\"];\r\nconst grayColor = [\r\n \"#999\",\r\n \"#777\",\r\n \"#3C4858\",\r\n \"#AAAAAA\",\r\n \"#D2D2D2\",\r\n \"#DDD\",\r\n \"#b4b4b4\",\r\n \"#555555\",\r\n \"#333\",\r\n \"#a9afbb\",\r\n \"#eee\",\r\n \"#e7e7e7\"\r\n];\r\nconst blackColor = \"#000\";\r\nconst whiteColor = \"#FFF\";\r\n\r\nconst boxShadow = {\r\n boxShadow:\r\n \"0 10px 30px -12px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.42), 0 4px 25px 0px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.12), 0 8px 10px -5px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.2)\"\r\n};\r\n\r\nconst primaryBoxShadow = {\r\n boxShadow:\r\n \"0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.14), 0 7px 10px -5px rgba(\" +\r\n hexToRgb(primaryColor[0]) +\r\n \",.4)\"\r\n};\r\nconst infoBoxShadow = {\r\n boxShadow:\r\n \"0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.14), 0 7px 10px -5px rgba(\" +\r\n hexToRgb(infoColor[0]) +\r\n \",.4)\"\r\n};\r\nconst successBoxShadow = {\r\n boxShadow:\r\n \"0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.14), 0 7px 10px -5px rgba(\" +\r\n hexToRgb(successColor[0]) +\r\n \",.4)\"\r\n};\r\nconst warningBoxShadow = {\r\n boxShadow:\r\n \"0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.14), 0 7px 10px -5px rgba(\" +\r\n hexToRgb(warningColor[0]) +\r\n \",.4)\"\r\n};\r\nconst dangerBoxShadow = {\r\n boxShadow:\r\n \"0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.14), 0 7px 10px -5px rgba(\" +\r\n hexToRgb(dangerColor[0]) +\r\n \",.4)\"\r\n};\r\nconst roseBoxShadow = {\r\n boxShadow:\r\n \"0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.14), 0 7px 10px -5px rgba(\" +\r\n hexToRgb(roseColor[0]) +\r\n \",.4)\"\r\n};\r\n\r\nconst warningCardHeader = {\r\n background:\r\n \"linear-gradient(60deg, \" + warningColor[1] + \", \" + warningColor[2] + \")\",\r\n ...warningBoxShadow\r\n};\r\nconst successCardHeader = {\r\n background:\r\n \"linear-gradient(60deg, \" + successColor[1] + \", \" + successColor[2] + \")\",\r\n ...successBoxShadow\r\n};\r\nconst dangerCardHeader = {\r\n background:\r\n \"linear-gradient(60deg, \" + dangerColor[1] + \", \" + dangerColor[2] + \")\",\r\n ...dangerBoxShadow\r\n};\r\nconst infoCardHeader = {\r\n background:\r\n \"linear-gradient(60deg, \" + infoColor[1] + \", \" + infoColor[2] + \")\",\r\n ...infoBoxShadow\r\n};\r\nconst primaryCardHeader = {\r\n background:\r\n \"linear-gradient(60deg, \" + primaryColor[1] + \", \" + primaryColor[2] + \")\",\r\n ...primaryBoxShadow\r\n};\r\nconst roseCardHeader = {\r\n background:\r\n \"linear-gradient(60deg, \" + roseColor[1] + \", \" + roseColor[2] + \")\",\r\n ...roseBoxShadow\r\n};\r\n\r\nconst cardActions = {\r\n margin: \"0 20px 10px\",\r\n paddingTop: \"10px\",\r\n borderTop: \"1px solid \" + grayColor[10],\r\n height: \"auto\",\r\n ...defaultFont\r\n};\r\n\r\nconst cardHeader = {\r\n margin: \"-20px 15px 0\",\r\n borderRadius: \"3px\",\r\n padding: \"15px\"\r\n};\r\n\r\nconst card = {\r\n display: \"inline-block\",\r\n position: \"relative\",\r\n width: \"100%\",\r\n margin: \"25px 0\",\r\n boxShadow: \"0 1px 4px 0 rgba(\" + hexToRgb(blackColor) + \", 0.14)\",\r\n borderRadius: \"3px\",\r\n color: \"rgba(\" + hexToRgb(blackColor) + \", 0.87)\",\r\n background: whiteColor\r\n};\r\n\r\nconst defaultBoxShadow = {\r\n border: \"0\",\r\n borderRadius: \"3px\",\r\n boxShadow:\r\n \"0 10px 20px -12px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.42), 0 3px 20px 0px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.12), 0 8px 10px -5px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.2)\",\r\n padding: \"10px 0\",\r\n transition: \"all 150ms ease 0s\"\r\n};\r\n\r\nconst title = {\r\n color: grayColor[2],\r\n textDecoration: \"none\",\r\n fontWeight: \"300\",\r\n marginTop: \"30px\",\r\n marginBottom: \"25px\",\r\n minHeight: \"32px\",\r\n fontFamily: \"'Roboto', 'Helvetica', 'Arial', sans-serif\",\r\n \"& small\": {\r\n color: grayColor[1],\r\n fontWeight: \"400\",\r\n lineHeight: \"1\"\r\n }\r\n};\r\n\r\nconst cardTitle = {\r\n ...title,\r\n marginTop: \"0\",\r\n marginBottom: \"3px\",\r\n minHeight: \"auto\",\r\n \"& a\": {\r\n ...title,\r\n marginTop: \".625rem\",\r\n marginBottom: \"0.75rem\",\r\n minHeight: \"auto\"\r\n }\r\n};\r\n\r\nconst cardSubtitle = {\r\n marginTop: \"-.375rem\"\r\n};\r\n\r\nconst cardLink = {\r\n \"& + $cardLink\": {\r\n marginLeft: \"1.25rem\"\r\n }\r\n};\r\n\r\nexport {\r\n hexToRgb,\r\n //variables\r\n drawerWidth,\r\n transition,\r\n container,\r\n boxShadow,\r\n card,\r\n defaultFont,\r\n primaryColor,\r\n warningColor,\r\n dangerColor,\r\n successColor,\r\n infoColor,\r\n roseColor,\r\n grayColor,\r\n blackColor,\r\n whiteColor,\r\n primaryBoxShadow,\r\n infoBoxShadow,\r\n successBoxShadow,\r\n warningBoxShadow,\r\n dangerBoxShadow,\r\n roseBoxShadow,\r\n warningCardHeader,\r\n successCardHeader,\r\n dangerCardHeader,\r\n infoCardHeader,\r\n primaryCardHeader,\r\n roseCardHeader,\r\n cardActions,\r\n cardHeader,\r\n defaultBoxShadow,\r\n title,\r\n cardTitle,\r\n cardSubtitle,\r\n cardLink\r\n};\r\n","import {\r\n grayColor,\r\n primaryColor,\r\n infoColor,\r\n successColor,\r\n warningColor,\r\n dangerColor,\r\n roseColor,\r\n whiteColor,\r\n blackColor,\r\n hexToRgb\r\n} from \"assets/jss/material-dashboard-react.jsx\";\r\n\r\nconst buttonStyle = {\r\n button: {\r\n minHeight: \"auto\",\r\n minWidth: \"auto\",\r\n backgroundColor: grayColor[0],\r\n color: whiteColor,\r\n boxShadow:\r\n \"0 2px 2px 0 rgba(\" +\r\n hexToRgb(grayColor[0]) +\r\n \", 0.14), 0 3px 1px -2px rgba(\" +\r\n hexToRgb(grayColor[0]) +\r\n \", 0.2), 0 1px 5px 0 rgba(\" +\r\n hexToRgb(grayColor[0]) +\r\n \", 0.12)\",\r\n border: \"none\",\r\n borderRadius: \"3px\",\r\n position: \"relative\",\r\n padding: \"12px 30px\",\r\n margin: \".3125rem 1px\",\r\n fontSize: \"12px\",\r\n fontWeight: \"400\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0\",\r\n willChange: \"box-shadow, transform\",\r\n transition:\r\n \"box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\r\n lineHeight: \"1.42857143\",\r\n textAlign: \"center\",\r\n whiteSpace: \"nowrap\",\r\n verticalAlign: \"middle\",\r\n touchAction: \"manipulation\",\r\n cursor: \"pointer\",\r\n \"&:hover,&:focus\": {\r\n color: whiteColor,\r\n backgroundColor: grayColor[0],\r\n boxShadow:\r\n \"0 14px 26px -12px rgba(\" +\r\n hexToRgb(grayColor[0]) +\r\n \", 0.42), 0 4px 23px 0px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.12), 0 8px 10px -5px rgba(\" +\r\n hexToRgb(grayColor[0]) +\r\n \", 0.2)\"\r\n },\r\n \"& .fab,& .fas,& .far,& .fal, &.material-icons\": {\r\n position: \"relative\",\r\n display: \"inline-block\",\r\n top: \"0\",\r\n marginTop: \"-1em\",\r\n marginBottom: \"-1em\",\r\n fontSize: \"1.1rem\",\r\n marginRight: \"4px\",\r\n verticalAlign: \"middle\"\r\n },\r\n \"& svg\": {\r\n position: \"relative\",\r\n display: \"inline-block\",\r\n top: \"0\",\r\n width: \"18px\",\r\n height: \"18px\",\r\n marginRight: \"4px\",\r\n verticalAlign: \"middle\"\r\n },\r\n \"&$justIcon\": {\r\n \"& .fab,& .fas,& .far,& .fal,& .material-icons\": {\r\n marginTop: \"0px\",\r\n position: \"absolute\",\r\n width: \"100%\",\r\n transform: \"none\",\r\n left: \"0px\",\r\n top: \"0px\",\r\n height: \"100%\",\r\n lineHeight: \"41px\",\r\n fontSize: \"20px\"\r\n }\r\n }\r\n },\r\n white: {\r\n \"&,&:focus,&:hover\": {\r\n backgroundColor: whiteColor,\r\n color: grayColor[0]\r\n }\r\n },\r\n rose: {\r\n backgroundColor: roseColor[0],\r\n boxShadow:\r\n \"0 2px 2px 0 rgba(\" +\r\n hexToRgb(roseColor[0]) +\r\n \", 0.14), 0 3px 1px -2px rgba(\" +\r\n hexToRgb(roseColor[0]) +\r\n \", 0.2), 0 1px 5px 0 rgba(\" +\r\n hexToRgb(roseColor[0]) +\r\n \", 0.12)\",\r\n \"&:hover,&:focus\": {\r\n backgroundColor: roseColor[0],\r\n boxShadow:\r\n \"0 14px 26px -12px rgba(\" +\r\n hexToRgb(roseColor[0]) +\r\n \", 0.42), 0 4px 23px 0px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.12), 0 8px 10px -5px rgba(\" +\r\n hexToRgb(roseColor[0]) +\r\n \", 0.2)\"\r\n }\r\n },\r\n primary: {\r\n backgroundColor: primaryColor[0],\r\n boxShadow:\r\n \"0 2px 2px 0 rgba(\" +\r\n hexToRgb(primaryColor[0]) +\r\n \", 0.14), 0 3px 1px -2px rgba(\" +\r\n hexToRgb(primaryColor[0]) +\r\n \", 0.2), 0 1px 5px 0 rgba(\" +\r\n hexToRgb(primaryColor[0]) +\r\n \", 0.12)\",\r\n \"&:hover,&:focus\": {\r\n backgroundColor: primaryColor[0],\r\n boxShadow:\r\n \"0 14px 26px -12px rgba(\" +\r\n hexToRgb(primaryColor[0]) +\r\n \", 0.42), 0 4px 23px 0px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.12), 0 8px 10px -5px rgba(\" +\r\n hexToRgb(primaryColor[0]) +\r\n \", 0.2)\"\r\n }\r\n },\r\n info: {\r\n backgroundColor: infoColor[0],\r\n boxShadow:\r\n \"0 2px 2px 0 rgba(\" +\r\n hexToRgb(infoColor[0]) +\r\n \", 0.14), 0 3px 1px -2px rgba(\" +\r\n hexToRgb(infoColor[0]) +\r\n \", 0.2), 0 1px 5px 0 rgba(\" +\r\n hexToRgb(infoColor[0]) +\r\n \", 0.12)\",\r\n \"&:hover,&:focus\": {\r\n backgroundColor: infoColor[0],\r\n boxShadow:\r\n \"0 14px 26px -12px rgba(\" +\r\n hexToRgb(infoColor[0]) +\r\n \", 0.42), 0 4px 23px 0px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.12), 0 8px 10px -5px rgba(\" +\r\n hexToRgb(infoColor[0]) +\r\n \", 0.2)\"\r\n }\r\n },\r\n success: {\r\n backgroundColor: successColor[0],\r\n boxShadow:\r\n \"0 2px 2px 0 rgba(\" +\r\n hexToRgb(successColor[0]) +\r\n \", 0.14), 0 3px 1px -2px rgba(\" +\r\n hexToRgb(successColor[0]) +\r\n \", 0.2), 0 1px 5px 0 rgba(\" +\r\n hexToRgb(successColor[0]) +\r\n \", 0.12)\",\r\n \"&:hover,&:focus\": {\r\n backgroundColor: successColor[0],\r\n boxShadow:\r\n \"0 14px 26px -12px rgba(\" +\r\n hexToRgb(successColor[0]) +\r\n \", 0.42), 0 4px 23px 0px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.12), 0 8px 10px -5px rgba(\" +\r\n hexToRgb(successColor[0]) +\r\n \", 0.2)\"\r\n }\r\n },\r\n warning: {\r\n backgroundColor: warningColor[0],\r\n boxShadow:\r\n \"0 2px 2px 0 rgba(\" +\r\n hexToRgb(warningColor[0]) +\r\n \", 0.14), 0 3px 1px -2px rgba(\" +\r\n hexToRgb(warningColor[0]) +\r\n \", 0.2), 0 1px 5px 0 rgba(\" +\r\n hexToRgb(warningColor[0]) +\r\n \", 0.12)\",\r\n \"&:hover,&:focus\": {\r\n backgroundColor: warningColor[0],\r\n boxShadow:\r\n \"0 14px 26px -12px rgba(\" +\r\n hexToRgb(warningColor[0]) +\r\n \", 0.42), 0 4px 23px 0px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.12), 0 8px 10px -5px rgba(\" +\r\n hexToRgb(warningColor[0]) +\r\n \", 0.2)\"\r\n }\r\n },\r\n danger: {\r\n backgroundColor: dangerColor[0],\r\n boxShadow:\r\n \"0 2px 2px 0 rgba(\" +\r\n hexToRgb(dangerColor[0]) +\r\n \", 0.14), 0 3px 1px -2px rgba(\" +\r\n hexToRgb(dangerColor[0]) +\r\n \", 0.2), 0 1px 5px 0 rgba(\" +\r\n hexToRgb(dangerColor[0]) +\r\n \", 0.12)\",\r\n \"&:hover,&:focus\": {\r\n backgroundColor: dangerColor[0],\r\n boxShadow:\r\n \"0 14px 26px -12px rgba(\" +\r\n hexToRgb(dangerColor[0]) +\r\n \", 0.42), 0 4px 23px 0px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.12), 0 8px 10px -5px rgba(\" +\r\n hexToRgb(dangerColor[0]) +\r\n \", 0.2)\"\r\n }\r\n },\r\n simple: {\r\n \"&,&:focus,&:hover\": {\r\n color: whiteColor,\r\n background: \"transparent\",\r\n boxShadow: \"none\"\r\n },\r\n \"&$rose\": {\r\n \"&,&:focus,&:hover,&:visited\": {\r\n color: roseColor[0]\r\n }\r\n },\r\n \"&$primary\": {\r\n \"&,&:focus,&:hover,&:visited\": {\r\n color: primaryColor[0]\r\n }\r\n },\r\n \"&$info\": {\r\n \"&,&:focus,&:hover,&:visited\": {\r\n color: infoColor[0]\r\n }\r\n },\r\n \"&$success\": {\r\n \"&,&:focus,&:hover,&:visited\": {\r\n color: successColor[0]\r\n }\r\n },\r\n \"&$warning\": {\r\n \"&,&:focus,&:hover,&:visited\": {\r\n color: warningColor[0]\r\n }\r\n },\r\n \"&$danger\": {\r\n \"&,&:focus,&:hover,&:visited\": {\r\n color: dangerColor[0]\r\n }\r\n }\r\n },\r\n transparent: {\r\n \"&,&:focus,&:hover\": {\r\n color: \"inherit\",\r\n background: \"transparent\",\r\n boxShadow: \"none\"\r\n }\r\n },\r\n disabled: {\r\n opacity: \"0.65\",\r\n pointerEvents: \"none\"\r\n },\r\n lg: {\r\n padding: \"1.125rem 2.25rem\",\r\n fontSize: \"0.875rem\",\r\n lineHeight: \"1.333333\",\r\n borderRadius: \"0.2rem\"\r\n },\r\n sm: {\r\n padding: \"0.40625rem 1.25rem\",\r\n fontSize: \"0.6875rem\",\r\n lineHeight: \"1.5\",\r\n borderRadius: \"0.2rem\"\r\n },\r\n round: {\r\n borderRadius: \"30px\"\r\n },\r\n block: {\r\n width: \"100% !important\"\r\n },\r\n link: {\r\n \"&,&:hover,&:focus\": {\r\n backgroundColor: \"transparent\",\r\n color: grayColor[0],\r\n boxShadow: \"none\"\r\n }\r\n },\r\n justIcon: {\r\n paddingLeft: \"12px\",\r\n paddingRight: \"12px\",\r\n fontSize: \"20px\",\r\n height: \"41px\",\r\n minWidth: \"41px\",\r\n width: \"41px\",\r\n \"& .fab,& .fas,& .far,& .fal,& svg,& .material-icons\": {\r\n marginRight: \"0px\"\r\n },\r\n \"&$lg\": {\r\n height: \"57px\",\r\n minWidth: \"57px\",\r\n width: \"57px\",\r\n lineHeight: \"56px\",\r\n \"& .fab,& .fas,& .far,& .fal,& .material-icons\": {\r\n fontSize: \"32px\",\r\n lineHeight: \"56px\"\r\n },\r\n \"& svg\": {\r\n width: \"32px\",\r\n height: \"32px\"\r\n }\r\n },\r\n \"&$sm\": {\r\n height: \"30px\",\r\n minWidth: \"30px\",\r\n width: \"30px\",\r\n \"& .fab,& .fas,& .far,& .fal,& .material-icons\": {\r\n fontSize: \"17px\",\r\n lineHeight: \"29px\"\r\n },\r\n \"& svg\": {\r\n width: \"17px\",\r\n height: \"17px\"\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default buttonStyle;\r\n","import React from \"react\";\r\n// nodejs library that concatenates classes\r\nimport classNames from \"classnames\";\r\n// nodejs library to set properties for components\r\nimport PropTypes from \"prop-types\";\r\n\r\n// material-ui components\r\nimport withStyles from \"@material-ui/core/styles/withStyles\";\r\nimport Button from \"@material-ui/core/Button\";\r\n\r\nimport buttonStyle from \"assets/jss/material-dashboard-react/components/buttonStyle.jsx\";\r\nfunction RegularButton({ ...props }) {\r\n const {\r\n classes,\r\n color,\r\n round,\r\n children,\r\n disabled,\r\n simple,\r\n size,\r\n block,\r\n link,\r\n justIcon,\r\n className,\r\n muiClasses,\r\n ...rest\r\n } = props;\r\n const btnClasses = classNames({\r\n [classes.button]: true,\r\n [classes[size]]: size,\r\n [classes[color]]: color,\r\n [classes.round]: round,\r\n [classes.disabled]: disabled,\r\n [classes.simple]: simple,\r\n [classes.block]: block,\r\n [classes.link]: link,\r\n [classes.justIcon]: justIcon,\r\n [className]: className\r\n });\r\n return (\r\n \r\n );\r\n}\r\n\r\nRegularButton.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n color: PropTypes.oneOf([\r\n \"primary\",\r\n \"info\",\r\n \"success\",\r\n \"warning\",\r\n \"danger\",\r\n \"rose\",\r\n \"white\",\r\n \"transparent\"\r\n ]),\r\n size: PropTypes.oneOf([\"sm\", \"lg\"]),\r\n simple: PropTypes.bool,\r\n round: PropTypes.bool,\r\n disabled: PropTypes.bool,\r\n block: PropTypes.bool,\r\n link: PropTypes.bool,\r\n justIcon: PropTypes.bool,\r\n className: PropTypes.string,\r\n // use this to pass the classes props from Material-UI\r\n muiClasses: PropTypes.object\r\n};\r\n\r\nexport default withStyles(buttonStyle)(RegularButton);\r\n","import React, {Component} from 'react'\r\nimport { HotTable } from '@handsontable/react';\r\nimport Handsontable from 'handsontable';\r\nimport RegularButton from \"../../components/CustomButtons/Button\";\r\n\r\nclass UploadHandsontable extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.hotTable = React.createRef();\r\n }\r\n\r\n // componentDidMount = () => {\r\n // this.hotTable.current.hotInstance.validateCells();\r\n // }\r\n \r\n test = () => {\r\n \r\n this.hotTable.current.hotInstance.validateCells(() => {\r\n debugger;\r\n });\r\n\r\n }\r\n\r\n render() {\r\n const {settings} = this.props;\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default UploadHandsontable","import React, { useCallback, useMemo, useState, Fragment } from 'react';\r\nimport { useDropzone } from 'react-dropzone';\r\n\r\n// Material UI\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport Icon from '@material-ui/core/Icon';\r\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\r\n\r\n// Handsontable\r\nimport { HotTable } from '@handsontable/react';\r\n\r\n// Moment\r\nimport moment from 'moment'\r\n// XLSX \r\nimport XLSX from 'xlsx';\r\nimport CustomGridSpinner from \"../../components/Spinners/grid-loader\";\r\nimport UploadHandsontable from \"./Handsontable\";\r\n\r\n// CSV\r\n//import csv from 'csv';\r\nconst csv = require('csvtojson');\r\n\r\n\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n\r\n uploadIcon: {\r\n margin: theme.spacing(0),\r\n color: '#bdbdbd',\r\n fontSize: 100\r\n\r\n },\r\n\r\n}));\r\n\r\n\r\n\r\n\r\nexport default function ImportDataFile(props) {\r\n const classes = useStyles();\r\n\r\n const [reading, setReading] = useState(false);\r\n \r\n const { \r\n formatDataFromCSV, \r\n toggleDialog, \r\n csvHandsontableSettings,\r\n clearFile \r\n\r\n } = props;\r\n \r\n // debugger;\r\n const baseStyle = {\r\n flex: 1,\r\n height: 200,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n padding: '20px',\r\n borderWidth: 3,\r\n borderRadius: 5,\r\n borderColor: '#eeeeee',\r\n borderStyle: 'dashed',\r\n backgroundColor: '#fafafa',\r\n color: '#bdbdbd',\r\n outline: 'none',\r\n transition: 'border .24s ease-in-out'\r\n };\r\n\r\n const activeStyle = {\r\n borderColor: '#2196f3'\r\n };\r\n\r\n const acceptStyle = {\r\n borderColor: '#00e676'\r\n };\r\n\r\n const rejectStyle = {\r\n borderColor: '#ff1744'\r\n };\r\n\r\n const onDrop = useCallback((acceptedFiles, rejectedFiles) => {\r\n setReading(true);\r\n acceptedFiles.forEach(file => {\r\n console.log(\"Accepted Files: \", acceptedFiles);\r\n switch (file.type) {\r\n case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\r\n readXlsx(file);\r\n break;\r\n case 'application/vnd.ms-excel':\r\n case 'text/plain': \r\n case 'text/csv':\r\n readCsv(file);\r\n break;\r\n }\r\n\r\n });\r\n\r\n }, []);\r\n \r\n const readXlsx = (file) => {\r\n const reader = new FileReader();\r\n\r\n reader.onload = file => {\r\n \r\n var data = new Uint8Array(file.target.result);\r\n var workbook = XLSX.read(data, {type: 'array'});\r\n let sheets = workbook.Sheets;\r\n let sheetNames = Object.keys(sheets)\r\n let sheet1 = sheets[sheetNames[0]];\r\n let sheetAsCsvString = XLSX.utils.sheet_to_csv(sheet1);\r\n formatCsvString(sheetAsCsvString)\r\n }\r\n \r\n let temp = reader.readAsArrayBuffer(file);\r\n\r\n };\r\n \r\n const readCsv = (file) => {\r\n //FOR CSV\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n const fileAsBinaryString = reader.result;\r\n formatCsvString(fileAsBinaryString);\r\n };\r\n\r\n reader.onabort = () => console.log('file reading was aborted');\r\n reader.onerror = () => console.log('file reading has failed');\r\n\r\n reader.readAsBinaryString(file);\r\n }\r\n \r\n const formatCsvString = (fileAsBinaryString) => {\r\n \r\n csv({\r\n noheader: true,\r\n output: \"json\"\r\n })\r\n .fromString(fileAsBinaryString)\r\n .then((csvRows) => {\r\n const toJson = []\r\n csvRows.forEach((aCsvRow, i) => {\r\n\r\n if (i !== 0) {\r\n const builtObject = {}\r\n\r\n Object.keys(aCsvRow).forEach((aKey) => {\r\n const valueToAddInBuiltObject = aCsvRow[aKey];\r\n const keyToAddInBuiltObject = csvRows[0][aKey];\r\n builtObject[keyToAddInBuiltObject] = valueToAddInBuiltObject;\r\n })\r\n\r\n toJson.push(builtObject)\r\n }\r\n\r\n\r\n });\r\n formatDataFromCSV(toJson);\r\n setReading(false);\r\n })\r\n }\r\n \r\n let acceptableFileTypes = \"application/vnd.ms-excel, text/plain, text/csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\r\n const { acceptedFiles, getRootProps, getInputProps, isDragActive, isDragAccept, isDragReject } = useDropzone({ onDrop, accept: acceptableFileTypes });\r\n \r\n const style = useMemo(() => ({\r\n ...baseStyle,\r\n ...(isDragActive ? activeStyle : {}),\r\n ...(isDragAccept ? acceptStyle : {}),\r\n ...(isDragReject ? rejectStyle : {})\r\n }), [\r\n isDragActive,\r\n isDragReject\r\n ]);\r\n\r\n const files = acceptedFiles.map(file => (\r\n
  • \r\n {file.path} - {file.size} bytes\r\n
  • \r\n ));\r\n\r\n //const classes = useStyles();\r\n\r\n\r\n return (\r\n
    \r\n {csvHandsontableSettings ? \r\n
    \r\n \r\n {/**/}\r\n \r\n
    \r\n \r\n \r\n :\r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {reading ?\r\n \r\n
    \r\n Reading file...\r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n :\r\n \r\n \r\n \r\n Drop Interval Data File\r\n \r\n \r\n \r\n \r\n }\r\n
    \r\n \r\n
    \r\n {/**/}\r\n {/* {files.map(file => {file})}*/}\r\n {/**/}\r\n {/*{csvHandsontableSettings ? : null}*/}\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n }\r\n {/* */}\r\n {/*{reading ?*/}\r\n {/* Reading - {reading}*/}\r\n {/* : null*/}\r\n {/*}*/}\r\n \r\n
    \r\n );\r\n}\r\n","import moment from 'moment'\r\n\r\nexport default function getHandsontableSettings(step2params) {\r\n let colHeaders = getColumnHeaders(step2params);\r\n let rowHeaders = getRowHeaders(step2params);\r\n let data = getTempData(step2params);\r\n let columns = getColumns(step2params);\r\n\r\n return {\r\n colHeaders,\r\n rowHeaders,\r\n data,\r\n columns,\r\n width: 'auto',\r\n height: 500,\r\n rowHeaderWidth: 180,\r\n licenseKey: 'non-commercial-and-evaluation',\r\n stretchH: 'all',\r\n maxRows: rowHeaders.length\r\n } \r\n}\r\n\r\n\r\n\r\nconst getStep2Values = (step2params) => {\r\n const orientation = step2params.radios.orientation.selected;\r\n const duration = parseInt(step2params.radios.duration.selected);\r\n const dataType = step2params.radios.dataType.selected;\r\n const startDate = step2params.dateRange.startDate.value;\r\n const endDate = step2params.dateRange.endDate.value;\r\n const endDateLastInterval = moment(endDate).add(1, 'day');\r\n const totalDays = endDateLastInterval.diff(startDate, 'days');\r\n const intervalsPerDay = duration === 15 ? 96 : duration === 30 ? 48 : 24;\r\n return { orientation, duration, dataType, startDate, endDate, totalDays, intervalsPerDay, endDateLastInterval }\r\n}\r\n\r\nconst getColumnHeaders = (step2params) => {\r\n const { orientation, duration, dataType, intervalsPerDay } = getStep2Values(step2params);\r\n switch (orientation) {\r\n case 'horizontal':\r\n let array = [];\r\n let prev = moment().hour(0).minutes(0).seconds(0).milliseconds(0);\r\n for (let i = 0; i < intervalsPerDay; i++) {\r\n array.push(prev.add(duration, 'minutes').format(\"HH:mm\"))\r\n }\r\n return array;\r\n case 'vertical':\r\n switch (dataType) {\r\n case 'kw':\r\n return ['kW'];\r\n case 'kwh':\r\n return ['kWh'];\r\n }\r\n }\r\n}\r\n\r\nconst getColumns = (step2params) => {\r\n const { orientation, intervalsPerDay, dataType } = getStep2Values(step2params);\r\n switch (orientation) {\r\n case 'horizontal':\r\n let array = [];\r\n for (let i = 0; i < intervalsPerDay; i++) {\r\n array.push({ data: i, type: 'numeric' })\r\n }\r\n return array;\r\n case 'vertical':\r\n return [{ data: dataType, type: 'numeric' }]\r\n }\r\n}\r\n\r\n\r\nconst getRowHeaders = (step2params) => {\r\n const { orientation, duration, startDate, totalDays, endDateLastInterval } = getStep2Values(step2params);\r\n let array = [];\r\n switch (orientation) {\r\n case \"horizontal\":\r\n for (let i = 0; i < totalDays; i++) {\r\n array.push(startDate.clone().add(i, 'days').format('MM/DD/YYYY'))\r\n }\r\n return array;\r\n case \"vertical\":\r\n let totalMinutes = endDateLastInterval.diff(startDate, 'minutes');\r\n let totalIntervals = (totalMinutes / duration);\r\n for (let i = 1; i <= totalIntervals; i++) {\r\n array.push(startDate.clone().add(duration * i, 'minutes').format('MM/DD/YYYY HH:mm'))\r\n }\r\n return array;\r\n }\r\n};\r\n\r\n\r\nconst getTempData = (step2params) => {\r\n const { orientation, totalDays, intervalsPerDay } = getStep2Values(step2params);\r\n //debugger;\r\n let startDate = step2params.dateRange.startDate.value.clone();\r\n let endDate = step2params.dateRange.endDate.value.clone();\r\n let duration = parseInt(step2params.radios.duration.selected);\r\n \r\n let array = [];\r\n switch (orientation) {\r\n case 'horizontal':\r\n for (let i = 0; i < totalDays; i++) {\r\n let singleRowArray = [];\r\n for (let j = 0; j < intervalsPerDay; j++) {\r\n singleRowArray.push(null)\r\n }\r\n array.push(singleRowArray)\r\n }\r\n return array\r\n\r\n case 'vertical':\r\n let diff = endDate.diff(startDate, 'minutes');\r\n let totalIntervals = diff / duration;\r\n for (let i = 0; i < totalIntervals; i++) {\r\n array.push([null])\r\n }\r\n return array;\r\n }\r\n\r\n}","import moment from 'moment'\r\nimport 'moment-timezone';\r\n\r\n// function formatVerticalManualData(data, startDate, endDate, duration, handsontableSettings) {\r\n// let array = [];\r\n// // let durationInt = duration\r\n// // let date = startDate.clone();\r\n// for (let i = 0; i < data.length; i++) {\r\n// array.push({ DateTime: moment.utc(handsontableSettings.rowHeaders[i]), Value: checkDataValueType(data[i].kw) })\r\n// }\r\n// return array\r\n// }\r\n\r\nfunction formatVerticalManualData(data, startDate, endDate, duration, handsontableSettings, timezone) {\r\n let array = [];\r\n let daylightSavingsFallBackArray = [];\r\n let daylightSavingsFallBackDays = [\r\n \"2010-11-07\",\r\n \"2011-11-06\",\r\n \"2012-11-04\",\r\n \"2013-11-03\",\r\n \"2014-11-02\",\r\n \"2015-11-01\",\r\n \"2016-11-06\",\r\n \"2017-11-05\",\r\n \"2018-11-04\",\r\n \"2019-11-03\",\r\n \"2020-11-01\",\r\n \"2021-11-07\",\r\n ];\r\n \r\n \r\n for (let i = 0; i < data.length; i++) {\r\n let t = moment(handsontableSettings.rowHeaders[i]).format('YYYY-MM-DD HH:mm');\r\n let time = moment.tz(t, timezone);\r\n if (time.month() === 10 && daylightSavingsFallBackDays.includes(time.format(\"YYYY-MM-DD\"))) {\r\n \r\n // if (time.isSame(moment.tz(\"2018-11-04\", timezone), 'day')) {\r\n if (time.hour() === 1) {\r\n let isSecondHour = daylightSavingsFallBackArray.find(x => {\r\n return x === time.format();\r\n });\r\n if (isSecondHour) {\r\n let p = time.utcOffset();\r\n p -= 60;\r\n time.utcOffset(p).add(1, 'hour');\r\n }\r\n daylightSavingsFallBackArray.push(time.format());\r\n }\r\n // }\r\n }\r\n array.push({ DateTime: time.format(), Value: checkDataValueType(data[i].kw) })\r\n }\r\n debugger;\r\n return array\r\n}\r\n\r\n// function formatHorizontalManualData(data, startDate, endDate, duration, handsontableSettings) {\r\n// let array = [];\r\n// let durationInt = duration;\r\n// let date = moment.utc(startDate.format(\"MM/DD/YYYY\")).hour(0).minutes(0).seconds(0).millisecond(0);\r\n// for (let i = 0; i < data.length; i++) {\r\n// let day = data[i];\r\n// for (let j = 1; j <= day.length; j++) {\r\n// array.push({ DateTime: moment.utc(date).add(durationInt*j, 'minutes'), Value: checkDataValueType(day[j])})\r\n// }\r\n// date.add(1, 'day')\r\n// }\r\n// return array\r\n// }\r\n\r\n\r\nfunction formatHorizontalManualData(data, startDate, endDate, duration, handsontableSettings, timezone) {\r\n let array = [];\r\n let durationInt = duration;\r\n let date = moment.tz(startDate.format('YYYY-MM-DD HH:mm'), timezone).hour(0).minutes(0).seconds(0).millisecond(0);\r\n for (let i = 0; i < data.length; i++) {\r\n let day = data[i];\r\n for (let j = 0; j < day.length; j++) {\r\n let time = handsontableSettings.colHeaders[j].split(':');\r\n let hours = parseInt(time[0]);\r\n let minutes = parseInt(time[1]);\r\n let finalDate = date.clone().hours(hours).minutes(minutes);\r\n if (hours === 0 && minutes === 0) {\r\n finalDate.add(1, 'day')\r\n }\r\n array.push({ DateTime: finalDate.format(), Value: checkDataValueType(day[j])})\r\n }\r\n date.add(1, 'day')\r\n }\r\n debugger;\r\n return array\r\n}\r\n\r\nfunction checkDataValueType(value) {\r\n if (typeof value === 'number') {\r\n return value;\r\n } else {\r\n return null\r\n }\r\n}\r\n\r\n\r\nexport { formatHorizontalManualData, formatVerticalManualData }","import config from \"../config\";\r\nimport { authHeader } from \"../helpers/auth-header\";\r\nimport { REQUESTTYPES, fetchHelper, responseStatusHandler } from \"./serviceHelper\";\r\n\r\nconst ENDPOINTS = {\r\n intervalData: {\r\n getIntervalDataByFacilityId: \"GetIntervalDataByFacilityId\",\r\n importIntervalData: \"ImportIntervalData\",\r\n importIntervalDataJson: \"ImportIntervalDataJson\",\r\n getIntervalDataTimestampByFacilityId: \"GetIntervalDataTimestampByFacilityId\",\r\n getIntervalDataHeatmapByFacilityId: \"GetIntervalDataHeatmapByFacilityId\",\r\n getIntervalDataCalendarChartByFacilityId: \"GetIntervalDataCalendarChartByFacilityId\",\r\n getIntervalDataLoadCurveByFacilityId: \"GetIntervalDataLoadCurveByFacilityId\",\r\n getIntervalDataSummaryChartByFacilityId: \"GetIntervalDataSummaryChartByFacilityId\",\r\n getDegreeDays: \"GetDegreeDays\",\r\n getFacilityWeather: \"GetFacilityWeather\"\r\n }\r\n};\r\n\r\nconst intervalDataRequestObject = {\r\n ProjectId: null,\r\n FacilityId: null,\r\n Interval: null, //don't worry about\r\n IncludePercent: false, //boolean\r\n ChartType: null, //don't worry about\r\n DataType: null, //string - \"kw\", \"kwh\"\r\n SeriesType: null, //string - \"Average\", \"Max\", \"Min\"\r\n SeriesPer: null, //string - \"Year\",\"Month\",etc\r\n Months: null, //array - example [1,2,3,4,11]\r\n Days: null, //array - example [1,2,3,7]\r\n Years: null, //array - example [2017,2018]\r\n StartDate: null,\r\n EndDate: null,\r\n StartTime: null,\r\n EndTime: null,\r\n IntervalDuration: null\r\n};\r\n\r\nconst importIntervalDataJsonRequestObject = {\r\n ProjectId: null,\r\n FacilityId: null,\r\n IntervalDuration: null,\r\n IntervalDataType: \"\",\r\n Data: []\r\n}\r\n\r\nconst getDegreeDaysRequestObject = {\r\n FacilityId: null,\r\n StartDate: null,\r\n EndDate: null,\r\n HeatingDegreeBase: null,\r\n CoolingDegreeBase: null\r\n}\r\n\r\nconst getFacilityWeatherRequestObject = {\r\n FacilityId: null,\r\n StartDate: null,\r\n EndDate: null\r\n}\r\n\r\n// Get api base URLs\r\nconst INTERVALDATA = config.intervalData;\r\n\r\nconst getDegreeDays = (getDegreeDaysRequestObject) => {\r\n const response = fetchHelper(\r\n INTERVALDATA,\r\n ENDPOINTS.intervalData.getDegreeDays,\r\n getDegreeDaysRequestObject,\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n \r\n //todo: do something on error\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return response;\r\n};\r\n\r\nconst getFacilityWeather = (getFacilityWeatherRequestObject) => {\r\n const response = fetchHelper(\r\n INTERVALDATA,\r\n ENDPOINTS.intervalData.getFacilityWeather,\r\n getFacilityWeatherRequestObject,\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response.weather;\r\n }\r\n });\r\n\r\n return response;\r\n};\r\n\r\nconst getIntervalDataByFacilityId = (intervalDataRequestObject) => {\r\n const response = fetchHelper(\r\n INTERVALDATA,\r\n ENDPOINTS.intervalData.getIntervalDataByFacilityId,\r\n intervalDataRequestObject,\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response.intervalData;\r\n }\r\n });\r\n\r\n return response;\r\n};\r\n\r\nconst getIntervalDataCalendarChartByFacilityId = (intervalDataRequestObject) => {\r\n \r\n const response = fetchHelper(\r\n INTERVALDATA,\r\n ENDPOINTS.intervalData.getIntervalDataCalendarChartByFacilityId,\r\n intervalDataRequestObject,\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response.monthData;\r\n }\r\n });\r\n\r\n return response;\r\n};\r\n\r\nconst getIntervalDataLoadCurveByFacilityId = (intervalDataRequestObject) => {\r\n\r\n const response = fetchHelper(\r\n INTERVALDATA,\r\n ENDPOINTS.intervalData.getIntervalDataLoadCurveByFacilityId,\r\n intervalDataRequestObject,\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response.monthData;\r\n }\r\n });\r\n\r\n return response;\r\n};\r\n\r\nconst getIntervalDataSummaryChartByFacilityId = (intervalDataRequestObject) => {\r\n\r\n const response = fetchHelper(\r\n INTERVALDATA,\r\n ENDPOINTS.intervalData.getIntervalDataSummaryChartByFacilityId,\r\n intervalDataRequestObject,\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response.seriesData;\r\n }\r\n });\r\n return response;\r\n};\r\n\r\nconst getIntervalDataTimestampByFacilityId = (intervalDataRequestObject) => {\r\n \r\n if (!intervalDataRequestObject.IncludePercent)\r\n intervalDataRequestObject.IncludePercent = false;\r\n \r\n const response = fetchHelper(\r\n INTERVALDATA,\r\n ENDPOINTS.intervalData.getIntervalDataTimestampByFacilityId,\r\n intervalDataRequestObject,\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response.intervalData;\r\n }\r\n });\r\n\r\n return response;\r\n};\r\n\r\nconst getIntervalDataHeatmapByFacilityId = (intervalDataRequestObject) => {\r\n const response = fetchHelper(\r\n INTERVALDATA,\r\n ENDPOINTS.intervalData.getIntervalDataHeatmapByFacilityId,\r\n intervalDataRequestObject,\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response.intervalData;\r\n }\r\n });\r\n\r\n return response;\r\n};\r\n\r\nconst importIntervalDataJson = (importIntervalDataJsonRequestObject) => {\r\n const response = fetchHelper(\r\n INTERVALDATA,\r\n ENDPOINTS.intervalData.importIntervalDataJson,\r\n importIntervalDataJsonRequestObject,\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n return response\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return response;\r\n};\r\n\r\nconst importIntervalData = (inputEvent, projectId, facilityId, intervalDuration) => {\r\n\r\n //const files = Array.from(inputEvent.target.files);\r\n //this.setState({ uploading: true })\r\n\r\n const formData = new FormData(inputEvent.target);\r\n\r\n //formData.append('file', files[0]);\r\n\r\n // files.forEach((file, i) => {\r\n // formData.append('file', file)\r\n // });\r\n \r\n formData.append(\"projectId\", projectId);\r\n formData.append(\"facilityId\", facilityId);\r\n formData.append(\"intervalDuration\", intervalDuration)\r\n \r\n const response = fetchHelper(\r\n INTERVALDATA,\r\n ENDPOINTS.intervalData.importIntervalData,\r\n formData,\r\n \"postMultiPart\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return response;\r\n};\r\n\r\n\r\nexport {\r\n getIntervalDataByFacilityId,\r\n importIntervalData,\r\n importIntervalDataJson,\r\n getIntervalDataTimestampByFacilityId,\r\n getIntervalDataHeatmapByFacilityId,\r\n getIntervalDataCalendarChartByFacilityId,\r\n getIntervalDataLoadCurveByFacilityId,\r\n getIntervalDataSummaryChartByFacilityId,\r\n intervalDataRequestObject,\r\n importIntervalDataJsonRequestObject,\r\n getDegreeDays,\r\n getDegreeDaysRequestObject,\r\n getFacilityWeather,\r\n getFacilityWeatherRequestObject\r\n};\r\n","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport thermometer from '../../../assets/img/svg/thermometer.svg'\r\nimport ReactSVG from \"react-svg\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n progress: {\r\n margin: theme.spacing(2),\r\n },\r\n}));\r\n\r\nexport default function UploadingDataSpinner() {\r\n const classes = useStyles();\r\n const [progress, setProgress] = React.useState(0);\r\n\r\n React.useEffect(() => {\r\n function tick() {\r\n // reset when reaching 100%\r\n setProgress(oldProgress => (oldProgress >= 100 ? 0 : oldProgress + 1));\r\n }\r\n\r\n const timer = setInterval(tick, 20);\r\n return () => {\r\n clearInterval(timer);\r\n };\r\n }, []);\r\n\r\n return (\r\n
    \r\n \r\n\r\n \r\n \r\n Uploading data...\r\n \r\n
    \r\n );\r\n}","import React from 'react';\r\nimport { connect } from 'react-redux'\r\n\r\n//Material UI\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Stepper from '@material-ui/core/Stepper';\r\nimport Step from '@material-ui/core/Step';\r\nimport StepLabel from '@material-ui/core/StepLabel';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\n//Redux Form\r\nimport { submit } from 'redux-form'\r\n\r\n\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n width: '100%',\r\n },\r\n backButton: {\r\n marginRight: theme.spacing(1),\r\n },\r\n instructions: {\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(1),\r\n },\r\n paper: {\r\n padding: 10\r\n }\r\n}));\r\n\r\n\r\nconst ImportDataStepper = ({ activeStep, steps }) => {\r\n const classes = useStyles();\r\n return (\r\n
    \r\n\r\n \r\n {steps.map(label => (\r\n \r\n {label}\r\n \r\n))}\r\n\r\n\r\n
    \r\n);\r\n};\r\n\r\nexport default ImportDataStepper","import React, { Component, Fragment } from 'react';\r\nimport { connect } from 'react-redux'\r\n\r\n//Material UI\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\n//Component\r\nimport UploadDataStepper from './UploadDataStepper'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n\r\n },\r\n gridContainer: {\r\n alignItems: 'center',\r\n },\r\n backButton: {\r\n marginRight: theme.spacing(1),\r\n },\r\n instructions: {\r\n marginTop: theme.spacing(1),\r\n marginBottom: theme.spacing(1),\r\n },\r\n\r\n\r\n}));\r\n\r\n\r\nconst ImportDataForm = ({ activeStep, steps, handleReset, handleBack, handleNext, getStepContent, csvData, importMethod, csvHandsontableSettings }) => {\r\n const classes = useStyles();\r\n return (\r\n
    \r\n\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n\r\n {activeStep === steps.length ? (\r\n
    \r\n All steps completed\r\n \r\n
    \r\n ) : (\r\n
    \r\n
    \r\n {getStepContent(activeStep)}\r\n
    \r\n
    \r\n {\r\n activeStep === 0 ? null :\r\n \r\n \r\n Back\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()(ImportDataForm)","import React, {Component, Fragment} from 'react'\r\n\r\n\r\n// Material UI\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nfunction getNumberOfIntervals(duration) {\r\n switch (duration) {\r\n case '15':\r\n return '96 ';\r\n case '30':\r\n return '48 ';\r\n case '60':\r\n return '24 '\r\n }\r\n}\r\n\r\nfunction getDataType(dataType) {\r\n switch (dataType) {\r\n case 'kw':\r\n return 'kW';\r\n case 'kwh':\r\n return 'kWh';\r\n }\r\n}\r\n\r\nclass FileFormatHelp extends Component {\r\n render() {\r\n const {duration, orientation, dataType} = this.props;\r\n if (orientation === 'horizontal') {\r\n return (\r\n \r\n \r\n Orientation: \r\n Horizontal\r\n \r\n \r\n First Row: Time (Interval Ending)\r\n \r\n The first row will hold the time values for the data. We do not actually look at these\r\n values, but\r\n we assume you have them there since almost all\r\n horizontal interval data files have that for reference.\r\n \r\n \r\n \r\n First Column: Dates\r\n \r\n The first column will hold the dates for each rows data.\r\n \r\n \r\n \r\n Data\r\n \r\n Since you are uploading {duration} minute data, you will\r\n have {getNumberOfIntervals(duration)}\r\n intervals, or columns, of data.\r\n \r\n \r\n \r\n\r\n )\r\n } else {\r\n return (\r\n \r\n \r\n Orientation: \r\n Vertical\r\n \r\n \r\n First Row\r\n \r\n The first row is reserved for your own titles for the columns on your file. We do not look\r\n at the first row.\r\n \r\n \r\n \r\n First Column: Datetime\r\n \r\n The first column in your file should hold the datetimes. Any date format that Microsoft\r\n Excel accepts should work fine, and please\r\n use military time. Remeber that the datetimes should reflect the interval ENDING\r\n time, so for example,\r\n if your interval is 3:45-4:00, the datetime should show 4:00.\r\n \r\n \r\n \r\n Second Column: Data\r\n \r\n The second column in your file should hold the data ({getDataType(dataType)}) values.\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 FileFormatHelp;","import React, {Component} from 'react'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport {ScaleLoader} from \"react-spinners\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport blue from '@material-ui/core/colors/blue';\r\nimport thermometer from '../../../assets/img/svg/thermometer.svg'\r\nimport ReactSVG from \"react-svg\";\r\nimport {Translate} from \"@material-ui/icons\";\r\nimport './style.css'\r\n\r\nconst styles = theme => ({\r\n root: {\r\n // backgroundColor: \"transparent\",\r\n },\r\n\r\n paper: {\r\n backgroundColor: \"transparent\",\r\n boxShadow: \"none\",\r\n overflow: \"hidden\"\r\n },\r\n text: {\r\n color: '#fff'\r\n }\r\n});\r\n\r\nclass UploadingDataDialog extends Component {\r\n\r\n render() {\r\n const {classes, message} = this.props;\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 {message}\r\n\r\n\r\n \r\n \r\n {/**/}\r\n {/* */}\r\n {/* Loading Data*/}\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(styles)(UploadingDataDialog)","import moment from 'moment'\r\nimport 'moment-timezone';\r\nimport getDSTDays from \"./DstDays\";\r\n\r\nfunction formatHorizontalCsvDataForSubmit(data, duration, timezone, colHeaders) {\r\n // Checking user data is sorted by ascending or descending dates to get start and end dates\r\n let startDate;\r\n let endDate;\r\n let firstInterval = moment.tz(data[0][0], timezone);\r\n let lastInterval = moment.tz(data[data.length - 1][0], timezone);\r\n if (firstInterval.isBefore(lastInterval)) {\r\n startDate = firstInterval.clone();\r\n endDate = lastInterval.clone()\r\n } else {\r\n startDate = lastInterval.clone();\r\n endDate = firstInterval.clone();\r\n }\r\n\r\n const {fallBackDays, springForwardDays} = getDSTDays(startDate, endDate);\r\n \r\n let array = [];\r\n let springForwardDayIntervals = [];\r\n\r\n data.forEach(row => {\r\n let t = moment(row[0]).hour(0).minutes(0).seconds(0).millisecond(0).format(\"YYYY-MM-DD HH:mm\");\r\n let date = moment.tz(t, timezone);\r\n for (let i = 1; i < row.length; i++) {\r\n\r\n // use the column headers from the table to define the hours and minutes\r\n let time = colHeaders[i].split(\":\");\r\n let hours = parseInt(time[0]);\r\n let minutes = parseInt(time[1]);\r\n let datetime;\r\n \r\n // for the \"spring forward\" DST adjustment, the user should leave the skipped hour blank. So if it jumps from 2:00am - 3:00am\r\n // the user should leave any interval in that period blank. But, moment will still read the time hour = 2 and minutes = 30 (for example)\r\n // as hour = 1 and minutes = 30. So, to get around that, on spring forward days I log all the time periods that have been pushed so far,\r\n // and if the new datetime is a duplicate of a time already in that springForwardDayIntervals array I know if it that skipped hour \r\n if (springForwardDays.includes(date.format(\"YYYY-MM-DD\"))) {\r\n datetime = date.clone().hours(hours).minutes(minutes);\r\n let isSecondInterval = springForwardDayIntervals.find(x => {\r\n return x === datetime.format();\r\n });\r\n if (isSecondInterval) {\r\n // do nothing\r\n } else {\r\n \r\n array.push({\r\n DateTime: date.clone().hours(hours).minutes(minutes).format(),\r\n Value: checkDataValueType(row[i])\r\n });\r\n\r\n \r\n }\r\n springForwardDayIntervals.push(date.clone().hours(hours).minutes(minutes).format())\r\n \r\n } else {\r\n\r\n array.push({\r\n DateTime: date.clone().hours(hours).minutes(minutes).format(),\r\n Value: checkDataValueType(row[i])\r\n });\r\n }\r\n \r\n \r\n }\r\n });\r\n return array;\r\n}\r\n\r\nfunction formatVerticalCsvDataForSubmit(data, timezone) {\r\n debugger;\r\n\r\n // Checking user data is sorted by ascending or descending dates to get start and end dates\r\n let startDate;\r\n let endDate;\r\n let firstInterval = moment.tz(data[0][0], timezone);\r\n let lastInterval = moment.tz(data[data.length - 1][0], timezone);\r\n if (firstInterval.isBefore(lastInterval)) {\r\n startDate = firstInterval.clone();\r\n endDate = lastInterval.clone()\r\n } else {\r\n startDate = lastInterval.clone();\r\n endDate = firstInterval.clone();\r\n }\r\n\r\n let daylightSavingsFallBackArray = [];\r\n const {fallBackDays, springForwardDays} = getDSTDays(startDate, endDate);\r\n\r\n let array = [];\r\n data.forEach(interval => {\r\n let t = moment(interval[0]).format('YYYY-MM-DD HH:mm');\r\n let time = moment.tz(t, timezone);\r\n // let zone = moment.tz.zone(\"Pacific/Honolulu\");\r\n // debugger;\r\n\r\n // moment-timezone always uses the earlier instance of the duplicative hour, meaning that if \r\n // we do not do anything, the time shift will not occur until the 2:00am hour when in reality\r\n // it occurs at the 2nd 1:00am hour. Below is the manual code to check if it's the daylight \r\n // savings day, and if it is the second instance of a time inside the 1:00am hour it changes \r\n // the offset to the correct new offset\r\n\r\n\r\n let zoneInfo = moment.tz.zone(timezone);\r\n let offsets = [...new Set(zoneInfo.offsets)];\r\n\r\n if (fallBackDays.includes(time.format(\"YYYY-MM-DD\"))) {\r\n\r\n\r\n let isSecondInterval = daylightSavingsFallBackArray.find(x => {\r\n return x === time.format();\r\n });\r\n if (isSecondInterval) {\r\n let p = time.utcOffset();\r\n // p -= 60;\r\n // time.utcOffset(p).add(1, 'hour');\r\n \r\n let tempP = moment.tz.zone(timezone).utcOffset(time.valueOf());\r\n let newOffset = offsets.filter(x => x > tempP);\r\n \r\n // Why multiple by -1? The utc offset seems to be set up weird. If you pull the offsets with the moment.tz.zone(timezone)\r\n // function, it returns time to the West as positive. So for example eastern US time is either +240 (4 hours) of +300 (5 hours).\r\n // If you take an Eastern time and run it through time.tz.zone(timezone).utcOffset(time.valueOf()) it also returns positive numbers.\r\n // But, when you set a UTC offset for Eastern time you have to set it with the negative value (-300) for it to be correct\r\n \r\n time.utcOffset(-1*newOffset[0]).add(Math.abs(offsets[1] - offsets[0]), 'minutes');\r\n \r\n }\r\n daylightSavingsFallBackArray.push(time.format());\r\n\r\n }\r\n\r\n\r\n array.push({DateTime: time.format(), Value: checkDataValueType(interval[1])});\r\n });\r\n return array;\r\n}\r\n\r\n\r\nfunction checkDataValueType(value) {\r\n let temp = parseFloat(value);\r\n if (typeof temp === 'number') {\r\n return temp;\r\n } else {\r\n return null\r\n }\r\n}\r\n\r\n// function checkDataValueTypeVertical(value) {\r\n// let temp = parseFloat(value);\r\n// if (typeof temp === 'number') {\r\n// return temp;\r\n// } else {\r\n// return null\r\n// }\r\n// }\r\n//\r\n//\r\n// function checkDataValueTypeHorizontal(value) {\r\n// let temp = parseFloat(value);\r\n// if (typeof temp === 'number') {\r\n// return value;\r\n// } else {\r\n// return null\r\n// }\r\n// }\r\n\r\nexport {formatHorizontalCsvDataForSubmit, formatVerticalCsvDataForSubmit}","import React, { Component, Fragment } from 'react';\r\nimport ReactDOM from 'react-dom';\r\n\r\n// Handsontable\r\nimport { HotTable } from '@handsontable/react';\r\n\r\n// Moment\r\nimport moment from 'moment'\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\n\r\nconst getImage = (duration, season) => {\r\n switch (duration) {\r\n case '15':\r\n if (season === 'spring') {\r\n return \"Daylight\r\n } else {\r\n return \"Daylight\r\n }\r\n case '30':\r\n if (season === 'spring') {\r\n return \"Daylight\r\n } else {\r\n return \"Daylight\r\n }\r\n case '60':\r\n if (season === 'spring') {\r\n return \"Daylight\r\n } else {\r\n return \"Daylight\r\n }\r\n }\r\n}\r\n\r\nclass Step3Manual extends Component {\r\n\r\n render() {\r\n const {orientation, duration} = this.props;\r\n if (orientation === 'horizontal') {\r\n return (\r\n \r\n *Time Periods are Interval Ending\r\n \r\n \r\n );\r\n } else if (orientation === 'vertical') {\r\n return (\r\n \r\n \r\n *Time Periods are Interval Ending\r\n \r\n \r\n \r\n
    \r\n NOTE: Daylight Savings\r\n
    \r\n \r\n \r\n Daylight savings is handled differently in many vertical data files. Before copying and pasting your data in, check to make sure the format of your\r\n data matches that of our table here. \r\n \r\n \r\n Spring\r\n \r\n \r\n In the spring the time jumps forward 1 hour. This table will jump from the last interval in the 1:00am hour to the 3:00 hour.\r\n \r\n {getImage(duration, 'spring')}\r\n \r\n Fall\r\n \r\n \r\n In the fall the time falls back 1 hour. That means there are (2) 1:00am - 2:00am hours. \r\n \r\n {getImage(duration, 'fall')}\r\n
    \r\n
    \r\n );\r\n }\r\n \r\n }\r\n}\r\n\r\nexport default Step3Manual","import React, {Component, Fragment} from 'react';\r\n\r\n//Redux\r\n// Redux\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\n\r\n// Redux Actions\r\n\r\nimport { selectFacility } from '../redux/actions/facility-actions'\r\n\r\n// Moment\r\nimport moment from 'moment'\r\n\r\n// Forms\r\nimport Step1 from './components/Step1'\r\nimport Step2 from './components/Step2'\r\nimport Step3UploadFile from './components/Step3UploadFile'\r\n\r\n// Handsontable Settings Function\r\nimport getHandsontableSettings from './js/createImportDataHandsontable'\r\n\r\n//Data Manipulators\r\nimport { formatHorizontalManualData, formatVerticalManualData } from './js/formatManualData'\r\n\r\n// Upload Data Service\r\nimport { importIntervalDataJson, importIntervalDataJsonRequestObject } from '../services/intervalData.service'\r\nimport CustomDialog from \"../components/Dialogs/customDialog\";\r\nimport UploadingDataSpinner from \"./components/spinner/UploadingDataSpinner\";\r\n\r\n//Components/Services\r\nimport ImportDataForm from './components/ImportDataForm'\r\nimport FileFormatHelp from \"./components/formatDataHelp/fileFormatHelp\";\r\n\r\nimport UploadingDataDialog from \"./components/spinner/UploadingDataDialog\";\r\nimport {makeHandsontableFromVerticalCsv, makeHandsontableFromHorizontalCsv} from './js/makeHandsontableFromCsv'\r\n\r\nimport {formatHorizontalCsvDataForSubmit, formatVerticalCsvDataForSubmit} from \"./js/formatCsvDataFromTableForSubmit\";\r\nimport CustomSnackbar from \"../components/Snackbar/CustomSnackbar\";\r\nimport Step3Manual from \"./components/Step3Manual\";\r\nimport {getFacilityById} from \"../services/facility.service\";\r\n\r\n\r\n\r\nclass ImportData extends Component {\r\n state = {\r\n facilityId: this.props.facilityId,\r\n projectId: this.props.projectId,\r\n activeStep: 0,\r\n importMethod: null,\r\n \r\n step2params: {\r\n radios: {\r\n dataType: {\r\n name: 'dataType',\r\n label: 'Data Type',\r\n selected: 'kw',\r\n options: [\r\n {\r\n value: 'kw',\r\n label: 'kW'\r\n },\r\n {\r\n value: 'kwh',\r\n label: 'kWh'\r\n }\r\n ]\r\n },\r\n duration: {\r\n name: 'duration',\r\n label: 'Interval Duration',\r\n selected: '15',\r\n options: [\r\n {\r\n value: '15',\r\n label: '15 Minutes'\r\n },\r\n {\r\n value: '30',\r\n label: '30 Minutes'\r\n },\r\n {\r\n value: '60',\r\n label: '1 Hour'\r\n },\r\n ]\r\n },\r\n orientation: {\r\n name: 'orientation',\r\n label: 'Orientation',\r\n selected: 'horizontal',\r\n options: [\r\n {\r\n value: 'horizontal',\r\n label: 'Horizontal'\r\n },\r\n {\r\n value: 'vertical',\r\n label: 'Vertical'\r\n },\r\n\r\n ]\r\n },\r\n },\r\n dateRange: {\r\n startDate: {\r\n name: 'startDate',\r\n label: 'Start Date',\r\n value: moment().subtract(1, 'year').hours(0).minutes(0).seconds(0).milliseconds(0),\r\n },\r\n endDate: {\r\n name: 'endDate',\r\n label: 'End Date',\r\n value: moment().hours(0).minutes(0).seconds(0).milliseconds(0),\r\n },\r\n } \r\n },\r\n errors: [],\r\n steps: ['Choose Import Method', 'Details', 'Upload Data'],\r\n handsontableSettings: null,\r\n csvData: {\r\n data: null,\r\n isError: null,\r\n errorMessages: [],\r\n isWarning: null,\r\n warningMessages: []\r\n },\r\n csvHandsontableSettings: null,\r\n dialogOpen: false,\r\n uploadingData: false,\r\n snackbar: {\r\n message: null,\r\n open: false,\r\n variant: null,\r\n }\r\n }\r\n \r\n toggleSnackbar = (value) => {\r\n let snackbar = {...this.state.snackbar};\r\n snackbar.open = value;\r\n this.setState({snackbar});\r\n }\r\n\r\n toggleDialog = () => {\r\n this.setState({dialogOpen: !this.state.dialogOpen})\r\n };\r\n \r\n clearFile = () => {\r\n this.setState({csvHandsontableSettings: null})\r\n };\r\n \r\n \r\n \r\n handleNext = (value) => {\r\n let errors = [];\r\n const { importMethod, activeStep, step2params, handsontableSettings } = this.state;\r\n switch (activeStep) {\r\n case 0:\r\n this.setState({ importMethod: value });\r\n break;\r\n case 1:\r\n if (importMethod === 'csv' || importMethod === 'excel') {\r\n let step2paramsCopy = { ...step2params };\r\n let keys = Object.keys(step2paramsCopy.radios);\r\n keys.forEach(key => {\r\n if (step2paramsCopy.radios[key].selected === null) {\r\n errors.push(`error at ${key}`)\r\n }\r\n });\r\n this.setState({errors})\r\n } \r\n if (importMethod === 'manual') {\r\n let handsontableSettings = getHandsontableSettings(step2params);\r\n this.setState({ handsontableSettings });\r\n }\r\n \r\n break;\r\n case 2:\r\n this.setState({uploadingData: true});\r\n let duration = parseInt(this.state.step2params.radios.duration.selected);\r\n let dataType = this.state.step2params.radios.dataType.selected;\r\n const {timezone} = this.state.step2params;\r\n \r\n let request = importIntervalDataJsonRequestObject;\r\n request.Timezone = timezone;\r\n switch (importMethod) {\r\n case 'manual':\r\n let data = this.state.handsontableSettings.data;\r\n let startDate = this.state.step2params.dateRange.startDate.value.clone();\r\n let endDate = this.state.step2params.dateRange.endDate.value.clone();\r\n \r\n let arrayManual; \r\n switch (step2params.radios.orientation.selected) {\r\n case 'horizontal':\r\n arrayManual = formatHorizontalManualData(data, startDate, endDate, duration, handsontableSettings, timezone);\r\n break;\r\n case 'vertical':\r\n arrayManual = formatVerticalManualData(data, startDate, endDate, duration, handsontableSettings, timezone);\r\n break;\r\n }\r\n \r\n request.ProjectId = this.state.projectId;\r\n request.FacilityId = this.state.facilityId;\r\n request.IntervalDuration = duration;\r\n request.IntervalDataType = dataType;\r\n request.Data = arrayManual;\r\n this.uploadData(request);\r\n // importIntervalDataJson(request).then(response => {\r\n // this.setState({uploadingData: false})\r\n // });\r\n break;\r\n case 'csv':\r\n case 'excel':\r\n\r\n let arrayCsv;\r\n switch (step2params.radios.orientation.selected) {\r\n case 'horizontal':\r\n arrayCsv = formatHorizontalCsvDataForSubmit(this.state.csvHandsontableSettings.data, duration, this.props.selectedFacility.timezone, this.state.csvHandsontableSettings.colHeaders);\r\n break;\r\n case 'vertical':\r\n arrayCsv = formatVerticalCsvDataForSubmit(this.state.csvHandsontableSettings.data, this.props.selectedFacility.timezone);\r\n break;\r\n }\r\n \r\n request.ProjectId = this.state.projectId;\r\n request.FacilityId = this.state.facilityId;\r\n request.IntervalDuration = duration;\r\n request.IntervalDataType = dataType;\r\n request.Data = arrayCsv;\r\n this.uploadData(request);\r\n // importIntervalDataJson(request).then(response => {\r\n // \r\n // })\r\n }\r\n break;\r\n \r\n }\r\n \r\n if (errors.length === 0) {\r\n let activeStep = this.state.activeStep;\r\n if (activeStep !== 2) {\r\n activeStep = activeStep + 1;\r\n }\r\n \r\n this.setState({ activeStep })\r\n } else {\r\n alert(\"FORM NOT FILLED\")\r\n }\r\n \r\n };\r\n \r\n uploadData = (request) => {\r\n importIntervalDataJson(request).then(response => {\r\n let snackbar;\r\n if (response.success) {\r\n snackbar = {\r\n open: true,\r\n message: 'Successfully uploaded data',\r\n variant: 'success'\r\n };\r\n } else {\r\n snackbar = {\r\n open: true,\r\n message: 'Something went wrong in the data upload',\r\n variant: 'error'\r\n };\r\n }\r\n \r\n let facilityId = this.props.selectedFacility.facilityId;\r\n getFacilityById(facilityId).then(response => {\r\n this.props.selectFacility(response);\r\n if (this.props['onDataSubmissionSuccess']) {\r\n this.props.onDataSubmissionSuccess();\r\n }\r\n this.setState({uploadingData: false, snackbar});\r\n });\r\n \r\n\r\n })\r\n }\r\n\r\n\r\n handleDateChange = (event, name) => {\r\n let step2params = { ...this.state.step2params };\r\n step2params.dateRange[name].value = event.hours(0).minutes(0).seconds(0).milliseconds(0);\r\n this.setState({ step2params })\r\n };\r\n\r\n handleTimeZoneChange = (event) => {\r\n let step2params = {...this.state.step2params};\r\n step2params.timezone = event.target.value;\r\n this.setState({step2params});\r\n };\r\n\r\n formatDataFromCSV = (data) => {\r\n let orientation = this.state.step2params.radios.orientation.selected;\r\n let dataType = this.state.step2params.radios.dataType.selected;\r\n let formattedData;\r\n let csvHandsontableSettings;\r\n switch (orientation) {\r\n case 'vertical':\r\n // formattedData = formatVerticalCsvData(data);\r\n csvHandsontableSettings = makeHandsontableFromVerticalCsv(data, dataType);\r\n break;\r\n case 'horizontal':\r\n // formattedData = formatHorizontalCsvData(data);\r\n csvHandsontableSettings = makeHandsontableFromHorizontalCsv(data, parseInt(this.state.step2params.radios.duration.selected));\r\n break\r\n };\r\n\r\n this.setState({csvData: formattedData, csvHandsontableSettings})\r\n }\r\n\r\n\r\n \r\n\r\n handleRadioChange = (name, value) => {\r\n let step2params = { ...this.state.step2params };\r\n step2params.radios[name].selected = value;\r\n this.setState({ step2params })\r\n\r\n }\r\n\r\n handleBack = () => {\r\n let activeStep = this.state.activeStep;\r\n activeStep--;\r\n this.setState({ activeStep });\r\n }\r\n\r\n handleReset = () => {\r\n this.setState({ activeStep: 0 });\r\n }\r\n\r\n getStepContent = () => {\r\n switch (this.state.activeStep) {\r\n case 0:\r\n return ;\r\n case 1:\r\n return ;\r\n case 2:\r\n switch (this.state.importMethod) {\r\n case 'csv':\r\n case 'excel':\r\n switch (this.state.uploadingData) {\r\n case false:\r\n return ;\r\n case true:\r\n return \r\n }\r\n \r\n case 'manual':\r\n return ();\r\n\r\n };\r\n break;\r\n default:\r\n return 'Unknown stepIndex';\r\n }\r\n }\r\n\r\n render() {\r\n const { activeStep, steps, importMethod, dataType, csvData } = this.state;\r\n const { handleNext, handleReset, handleBack, getStepContent } = this;\r\n\r\n return (\r\n
    \r\n\r\n \r\n }\r\n onClose={this.toggleDialog}\r\n />\r\n \r\n \r\n
    \r\n );\r\n }\r\n \r\n};\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n selectedFacility: state.selectedFacility,\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n selectFacility,\r\n }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ImportData)","import moment from 'moment'\r\n\r\nfunction makeHandsontableFromVerticalCsv(data, dataType) {\r\n let array = [];\r\n data.forEach(x => {\r\n\r\n let row = [];\r\n let keys = Object.keys(x);\r\n let lastDateTimeWasEmptyOrInvalid = false;\r\n keys.forEach((key, index) => {\r\n if (index === 0 && (!x[key] || !moment(x[key])._isValid)) {\r\n lastDateTimeWasEmptyOrInvalid = true;\r\n } else if (index === 1 && lastDateTimeWasEmptyOrInvalid) {\r\n // do nothing\r\n } else {\r\n row.push(x[key]);\r\n \r\n }\r\n });\r\n if (row.length !== 0) {\r\n array.push(row);\r\n }\r\n });\r\n \r\n let dataTypeLabel;\r\n switch (dataType) {\r\n case 'kwh':\r\n dataTypeLabel = \"Usage (kWh)\";\r\n break;\r\n case 'kw':\r\n dataTypeLabel = \"Demand (kW)\";\r\n break;\r\n }\r\n \r\n let columns = [\r\n {\r\n // validator: function(value, callback) {\r\n // let temp = moment(value);\r\n // if (temp._isValid === true && value) {\r\n // callback(true)\r\n // } else {\r\n // callback(false)\r\n // }\r\n //\r\n // \r\n // }\r\n type: 'date',\r\n validator: 'date',\r\n dateFormat: 'M/D/YY H:mm',\r\n correctFormat: true,\r\n // datePicker additional options (see https://github.com/dbushell/Pikaday#configuration)\r\n },\r\n {\r\n type: 'numeric',\r\n validator: 'numeric',\r\n numericFormat: {\r\n pattern: '0,0.00'\r\n }\r\n }\r\n ]\r\n \r\n let colHeaders = ['Datetime', dataTypeLabel];\r\n return {\r\n data: array,\r\n rowHeaders: false,\r\n colHeaders,\r\n columns,\r\n width: 'auto',\r\n height: 500,\r\n rowHeaderWidth: 180,\r\n licenseKey: 'non-commercial-and-evaluation',\r\n stretchH: 'all',\r\n }\r\n}\r\n\r\nfunction makeHandsontableFromHorizontalCsv(data, intervalDuration) {\r\n let array = [];\r\n let colHeaders = ['Date'];\r\n let keys = Object.keys(data[0]);\r\n \r\n // Make colHeaders\r\n let startTime = moment().hour(0).minute(0).second(0);\r\n switch (intervalDuration) {\r\n case 15: \r\n for (let i = 1; i <= 96; i++) {\r\n colHeaders.push(moment(startTime).add(i * intervalDuration, 'minutes').format(\"H:mm\"))\r\n }\r\n break;\r\n case 30:\r\n for (let i = 1; i <= 48; i++) {\r\n colHeaders.push(moment(startTime).add(i * intervalDuration, 'minutes').format(\"H:mm\"))\r\n }\r\n break;\r\n case 60:\r\n for (let i = 1; i <= 24; i++) {\r\n colHeaders.push(moment(startTime).add(i * intervalDuration, 'minutes').format(\"H:mm\"))\r\n }\r\n break;\r\n }\r\n \r\n data.forEach(x => {\r\n let row = [];\r\n let lastDateWasEmptyOrInvalid = false;\r\n keys.forEach((key, index) => {\r\n if (index === 0 && moment(x[key])._isValid) {\r\n row.push(x[key]);\r\n } else if (index === 0) {\r\n lastDateWasEmptyOrInvalid = true;\r\n } else if (index !== 0 && !lastDateWasEmptyOrInvalid) {\r\n let number = parseFloat(x[key]);\r\n if (number) {\r\n row.push(number);\r\n } else {\r\n row.push(null)\r\n }\r\n \r\n }\r\n \r\n });\r\n if (row.length !== 0) {\r\n array.push(row);\r\n }\r\n \r\n\r\n });\r\n \r\n let columns = [];\r\n\r\n keys.forEach((key, index) => {\r\n if (index !== 0) {\r\n columns.push({\r\n type: 'numeric',\r\n validator: 'numeric',\r\n numericFormat: {\r\n pattern: '0,0.00'\r\n }\r\n })\r\n } else {\r\n columns.push({\r\n type: 'date',\r\n dateFormat: 'MM/DD/YYYY',\r\n correctFormat: true,\r\n defaultDate: '01/01/1900',\r\n validator: function(value, callback) {\r\n let temp = moment(value);\r\n if (temp._isValid === true) {\r\n callback(true)\r\n } else {\r\n callback(false)\r\n }\r\n }\r\n // datePicker additional options (see https://github.com/dbushell/Pikaday#configuration)\r\n })\r\n }\r\n })\r\n\r\n return {\r\n data: array,\r\n // rowHeaders: true,\r\n colHeaders,\r\n columns,\r\n width: 'auto',\r\n height: 500,\r\n rowHeaderWidth: 180,\r\n licenseKey: 'non-commercial-and-evaluation',\r\n stretchH: 'all',\r\n }\r\n}\r\n\r\nexport {makeHandsontableFromVerticalCsv, makeHandsontableFromHorizontalCsv}","import React from 'react';\r\n\r\n//Forms\r\nimport ImportDataComponent from '../../../ImportData/ImportDataComponent'\r\nimport CustomDialog from \"../../../components/Dialogs/customDialog\";\r\n\r\n\r\nfunction ImportDataDialog(props) {\r\n const { open, toggleDialog, importDataFacility } = props;\r\n\r\n return (\r\n
    \r\n {importDataFacility === null ? null :\r\n }\r\n />\r\n }\r\n
    \r\n\r\n\r\n );\r\n}\r\n\r\nexport default ImportDataDialog;","import React, { Fragment } from 'react';\r\n\r\n// Material UI\r\nimport Button from '@material-ui/core/Button';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n// Components\r\nimport CustomDialog from \"../../../components/Dialogs/customDialog\";\r\n\r\nconst useStyles = makeStyles({\r\n button: {\r\n color: 'red'\r\n }\r\n\r\n});\r\n\r\nfunction DeleteFacilityDialog(props) {\r\n const {\r\n deleteFacilityDialogOpen,\r\n toggleDeleteFacilityDialog,\r\n selectedFacilityForDelete,\r\n onDeleteFacilitySubmit,\r\n } = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n {selectedFacilityForDelete === null ? null :\r\n Are you sure you want to delete the meter \"{selectedFacilityForDelete.name}\"? }\r\n actions={}\r\n />\r\n }\r\n \r\n );\r\n}\r\n\r\nexport default DeleteFacilityDialog;","import React, { Component, Fragment } from 'react';\r\n\r\n// Material UI\r\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\r\n\r\n\r\nimport FacilitiesTable from '../containers/FacilitiesTable'\r\n\r\nimport {Grid, Typography} from \"@material-ui/core\";\r\nimport {green, orange} from '@material-ui/core/colors';\r\n\r\n\r\n\r\n\r\nimport PulseLoader from '../../components/Spinners/pulse-loader'\r\nimport ProjectInfo from './cards/ProjectInfo'\r\nimport FacilitiesChartTable from './charts/FacilitiesChartTable'\r\nimport FacilitiesSteamGraph from './charts/FacilitiesSteamGraph'\r\nimport AddNewButton from \"../../components/CustomButtons/AddNewButton\";\r\n\r\n\r\nimport CreateFacilityDialog from './dialogs/CreateFacilityDialog'\r\nimport EditFacilityDialog from './dialogs/EditFacilityDialog'\r\nimport ImportDataDialog from './dialogs/ImportDataDialog'\r\nimport DeleteFacilityDialog from './dialogs/DeleteFacilityDialog'\r\nimport CustomInfoLayout from \"../../components/CustomInfoLayout/CustomInfoLayout\";\r\n\r\n\r\nimport CustomSnackbar from '../../components/Snackbar/CustomSnackbar'\r\nimport EmptyGif from \"../../components/EmptyGif/EmptyGif\";\r\nimport MeterTestGif from '../../assets/gifs/meter3.gif'\r\nimport ProjectsTable from \"../../Dashboard/containers/ProjectsTable\";\r\nimport projectsGif from \"../../assets/gifs/projects.gif\";\r\nimport DataViewLoadingSpinner from \"../../FacilityHome/components/spinners/DataViewLoadingSpinner\";\r\nimport Icon from \"@material-ui/core/Icon\";\r\nimport GreenButton from \"../../components/CustomButtons/GreenButton\";\r\n\r\n\r\n\r\nconst styles = theme => ({\r\n\r\n paper: {\r\n margin: 20,\r\n },\r\n fab: {\r\n position: 'fixed',\r\n bottom: theme.spacing(2),\r\n right: theme.spacing(2),\r\n color: theme.palette.common.white,\r\n backgroundColor: green[500],\r\n '&:hover': {\r\n backgroundColor: green[600],\r\n }\r\n },\r\n});\r\n\r\n\r\n\r\nclass ProjectHome extends Component {\r\n state = {\r\n tabs: [\r\n {\r\n label: \"Table\",\r\n value: \"table\",\r\n },\r\n {\r\n label: \"Chart\",\r\n value: 'chart',\r\n }\r\n ],\r\n currentTab: 0,\r\n currentComponent: \r\n }\r\n\r\n setTab = (value) => {\r\n let currentComponent;\r\n switch (value) {\r\n case 0:\r\n currentComponent = \r\n break;\r\n case 1:\r\n currentComponent = \r\n break\r\n }\r\n\r\n this.setState({ currentComponent, currentTab: value });\r\n\r\n }\r\n\r\n render() {\r\n\r\n const {\r\n // Classes\r\n classes,\r\n\r\n // Project\r\n loading,\r\n project,\r\n facilities,\r\n toggleEditProjectDialog,\r\n fetchingFacilities,\r\n\r\n // Create Facility\r\n createFacilityDialogOpen,\r\n toggleCreateFacilityDialog,\r\n createFacilityFormControls,\r\n handleCreateFacilityInputChange,\r\n onCreateFacilitySubmit,\r\n attemptedCreateFacilitySubmit,\r\n\r\n //edit facility\r\n editFacilityDialogOpen,\r\n toggleEditFacilityDialog,\r\n editFacilityFormControls,\r\n handleEditFacilityInputChange,\r\n onEditFacilitySubmit,\r\n attemptedEdotFacilitySubmit,\r\n selectedFacilityForEdit,\r\n\r\n // Import Data\r\n importDataDialogOpen,\r\n toggleImportDataDialog,\r\n importDataFacility,\r\n\r\n // Delete Facility\r\n selectedFacilityForDelete,\r\n deleteFacilityDialogOpen,\r\n onDeleteFacilitySubmit,\r\n toggleDeleteFacilityDialog,\r\n\r\n // Snackbar\r\n snackbar,\r\n openSnackbar\r\n\r\n } = 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 {/*{!facilities || fetchingFacilities ?*/}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n \r\n {/* : facilities.length === 0 && !fetchingFacilities ? */}\r\n {/* :*/}\r\n {/* */}\r\n {/* }*/}\r\n {/* mainContent={}*/}\r\n {/* />*/}\r\n \r\n \r\n {/*}*/}\r\n {!fetchingFacilities && facilities.length !== 0 ?\r\n \r\n \r\n {/**/}\r\n add_circleAdd Meter\r\n
    }\r\n mainContent={}\r\n />\r\n\r\n : !fetchingFacilities && facilities.length === 0 ?\r\n \r\n \r\n \r\n \r\n\r\n \r\n :\r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n \r\n\r\n\r\n \r\n\r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n\r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(ProjectHome)","import Highcharts from 'highcharts';\r\nimport moment from 'moment';\r\nimport 'moment-timezone';\r\nimport blue from '@material-ui/core/colors/blue';\r\n\r\nlet colors = [blue[100], blue[200], blue[300], blue[400], blue[500], blue[600], blue[700], blue[800], blue[900]];\r\n\r\nconst loadCurveOptions = (series, dataType, timezone) => {\r\n let fixedSeries = [];\r\n series.forEach(x => {\r\n let temp = {\r\n name: x.name,\r\n data: []\r\n };\r\n \r\n \r\n\r\n x.data.forEach(y => {\r\n // debugger;\r\n let minutes = y[0] % 60;\r\n let hours = Math.floor(y[0] / 60);\r\n let time = moment().hours(hours).minutes(minutes).second(0).millisecond(0);\r\n\r\n temp.data.push([time.valueOf(), y[1]]);\r\n // temp.data.push([moment().hours(hours).minutes(minutes).valueOf(), y[1]]);\r\n });\r\n fixedSeries.push(temp);\r\n \r\n });\r\n\r\n let axisTitle;\r\n let tooltipSuffix;\r\n switch (dataType) {\r\n case 'kw':\r\n axisTitle = 'Demand (kW)';\r\n tooltipSuffix = 'kW';\r\n break;\r\n case 'kwh':\r\n axisTitle = 'Usage (kWh)';\r\n tooltipSuffix = 'kWh';\r\n break;\r\n }\r\n \r\n let legendEnabled = true;\r\n if (fixedSeries.length > 30) {\r\n legendEnabled = false\r\n }\r\n\r\n return {\r\n // colors: colors,\r\n chart: {\r\n type: 'line',\r\n height: null,\r\n style: {\r\n fontFamily: \"Roboto\"\r\n }\r\n },\r\n time: {\r\n timezone: timezone\r\n }, \r\n legend: {\r\n enabled: legendEnabled\r\n },\r\n title: {\r\n text: ''\r\n },\r\n subtitle: {\r\n text: ''\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n labels: {\r\n formatter: function () {\r\n let time = moment(this.value).format('H:mm');\r\n return '' +\r\n time + '';\r\n }\r\n }\r\n },\r\n yAxis: {\r\n // min: 0,\r\n title: {\r\n text: axisTitle\r\n }\r\n },\r\n tooltip: {\r\n // headerFormat: '{point.key}',\r\n // pointFormat: '' +\r\n // '',\r\n // footerFormat: '
    {series.name}: {point.y:.2f} {tooltipSuffix}
    ',\r\n \r\n // use this if shared is true\r\n // formatter: function() {\r\n // let temp = this;\r\n // debugger;\r\n // let time = moment(this.x).format('H:mm');\r\n // let array = [];\r\n // this.points.forEach(point => {\r\n // array.push({\r\n // name: point.series.name,\r\n // value: point.y.toFixed(2)\r\n // })\r\n // });\r\n //\r\n // let final = '' + time +'';\r\n //\r\n // array.forEach(x => {\r\n // final += '
    ' + x.name +':' + '' + x.value + ''\r\n // })\r\n //\r\n //\r\n // return final\r\n // },\r\n formatter: function() {\r\n // let temp = this;\r\n // debugger;\r\n let time = moment(this.x).format('H:mm');\r\n let name = this.series.name;\r\n let value = this.y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n let color = this.color;\r\n let line = ' ';\r\n \r\n let final = '
    ' + time +'
    ' + '
    ' + name +'
    ' + line + value + ' ' + tooltipSuffix + ' ' + line + '
    ';\r\n\r\n return final\r\n },\r\n shared: false,\r\n useHTML: true,\r\n backgroundColor: '#fafafa',\r\n xDateFormat: '%H:%M',\r\n // pointFormatter: function () {\r\n // console.log(this);\r\n // // let dateTime = moment.utc(this.x).add(this.y, 'minutes').format(\"ddd M/D/YY HH:mm\");\r\n // // let line = ' '\r\n //\r\n // return this.y\r\n //\r\n // }\r\n },\r\n plotOptions: {\r\n column: {\r\n pointPadding: 0.2,\r\n borderWidth: 0\r\n },\r\n series: {\r\n marker: {\r\n enabled: false\r\n }\r\n }\r\n },\r\n series: fixedSeries,\r\n credits: {\r\n enabled: false\r\n },\r\n exporting: {\r\n enabled: true\r\n }\r\n }\r\n}\r\n\r\nconst summaryChartOptions = (series, categories, height = 500) => {\r\n return {\r\n // colors: [blue[300], orange[300], green[300], grey[300], red[300]],\r\n chart: {\r\n type: 'column',\r\n height: height,\r\n style: {\r\n fontFamily: \"Roboto\"\r\n },\r\n zoomType: 'x'\r\n },\r\n title: {\r\n text: ''\r\n },\r\n subtitle: {\r\n text: ''\r\n },\r\n xAxis: {\r\n categories: categories,\r\n //crosshair: true,\r\n events: {\r\n setExtremes: null\r\n },\r\n },\r\n yAxis: [\r\n {\r\n //min: 0,\r\n title: {\r\n text: 'Peak Demand (kW)'\r\n },\r\n showEmpty: false\r\n },\r\n {\r\n //min: 0,\r\n title: {\r\n text: 'Consumption (kWh)'\r\n },\r\n opposite: true,\r\n showEmpty: false\r\n },\r\n {\r\n //min: 0,\r\n title: {\r\n text: 'Total Consumption (kWh)'\r\n },\r\n opposite: true,\r\n showEmpty: false\r\n },\r\n {\r\n //min: 0,\r\n title: {\r\n text: 'Load Factor'\r\n },\r\n showEmpty: false\r\n }\r\n ],\r\n tooltip: {\r\n headerFormat: '{point.key}',\r\n pointFormat: '' +\r\n '',\r\n footerFormat: '
    {series.name}: {point.y:.2f}
    ',\r\n //shared: true,\r\n useHTML: true,\r\n //backgroundColor: '#fafafa'\r\n },\r\n plotOptions: {\r\n // column: {\r\n // grouping: false,\r\n // }\r\n column: {\r\n pointPadding: 0.2\r\n }\r\n },\r\n series: series,\r\n credits: {\r\n enabled: false\r\n },\r\n\r\n }\r\n}\r\n\r\nconst heatMapOptions = (data, durationView, intervalDuration, dataType) => {\r\n let chartFont = 'Roboto';\r\n let tooltipSuffix;\r\n switch (dataType) {\r\n case 'kw':\r\n tooltipSuffix = 'kW';\r\n break;\r\n case 'kwh':\r\n tooltipSuffix = 'kWh';\r\n break;\r\n }\r\n \r\n let height;\r\n let tickPositions;\r\n let tickInterval;\r\n let xAxisLabels;\r\n let marginLeft;\r\n let tickLength;\r\n let exporting = {\r\n sourceWidth: 3000,\r\n sourceHeight: 1500,\r\n };\r\n if (durationView === 'week') {\r\n data.forEach(x => {\r\n let time = moment.utc(x[0]).add(x[1], 'minutes');\r\n x[0] = time.clone().day(0).hour(0).minutes(0).seconds(0).millisecond(0).valueOf();\r\n x[1] = time.day() * 24 * 60 + time.hours() * 60;\r\n });\r\n height = data.length / 20 + 400;\r\n tickPositions = [1440, 2880, 4320, 5760, 7200, 8640, 10080];\r\n tickInterval = 24 * 3600 * 1000 * 7;\r\n xAxisLabels = {\r\n align: 'right',\r\n style: {\r\n fontFamily: chartFont,\r\n fontSize: '15px',\r\n },\r\n x: -20,\r\n y: 5,\r\n rotation: 0,\r\n format: '{value:%b %e, %y}' // long month\r\n };\r\n marginLeft = 100;\r\n tickLength = 0;\r\n } else {\r\n height = data.length / 5 + 400;\r\n tickPositions = [180, 360, 540, 720, 900, 1080, 1260];\r\n tickInterval = 24 * 3600 * 1000 * 30;\r\n xAxisLabels = {\r\n align: 'right',\r\n style: {\r\n fontFamily: chartFont,\r\n fontSize: '15px',\r\n },\r\n x: -20,\r\n y: 10,\r\n rotation: -90,\r\n format: '{value:%b %y}' // long month\r\n };\r\n marginLeft = 50;\r\n tickLength = 51;\r\n exporting = {\r\n sourceWidth: 2000,\r\n sourceHeight: 3000,\r\n };\r\n }\r\n \r\n\r\n return {\r\n legend: {\r\n layout: 'horizontal',\r\n verticalAlign: 'top',\r\n y: 0,\r\n symbolHeight: 40,\r\n symbolWidth: 600,\r\n // width: '100%',\r\n // padding: 20,\r\n // borderRadius: 5,\r\n // shadow: true\r\n },\r\n\r\n chart: {\r\n type: 'heatmap',\r\n marginTop: 150,\r\n marginBottom: 20,\r\n height: height,\r\n marginLeft: marginLeft,\r\n marginRight: 50,\r\n inverted: true,\r\n plotBorderWidth: 1,\r\n borderRadius: 20,\r\n style: {\r\n fontFamily: chartFont\r\n }\r\n },\r\n\r\n boost: {\r\n useGPUTranslations: true\r\n },\r\n\r\n title: {\r\n text: null,\r\n align: 'left',\r\n x: 40\r\n },\r\n\r\n subtitle: {\r\n text: null,\r\n align: 'left',\r\n x: 40\r\n },\r\n\r\n xAxis: {\r\n type: 'datetime',\r\n //startOnTick: true,\r\n labels: xAxisLabels,\r\n showLastLabel: false,\r\n tickLength: tickLength,\r\n startOnTick: false,\r\n endOnTick: false,\r\n tickmarkPlacement: 'on',\r\n //datetime axes are based on milliseconds, so for example an interval of one day is expressed as 24 * 3600 * 1000\r\n tickInterval: tickInterval,\r\n //tickColor: 'black',\r\n },\r\n\r\n yAxis: {\r\n title: {\r\n text: null\r\n },\r\n type: 'datetime',\r\n //labels: {\r\n // format: '{value}'\r\n //},\r\n labels: {\r\n formatter: function () {\r\n if (durationView === 'day') {\r\n if (intervalDuration === 15) {\r\n let hours = Math.floor((this.value) / 60);\r\n let tempMinutes = this.value % 60;\r\n let minutes;\r\n if (tempMinutes === 0) {\r\n minutes = '00'\r\n } else {\r\n minutes = tempMinutes\r\n }\r\n return hours + ':' + minutes;\r\n } else if (intervalDuration === 60) {\r\n let hours = Math.floor((this.value) / 60);\r\n let tempMinutes = this.value % 60;\r\n let minutes;\r\n if (tempMinutes === 0) {\r\n minutes = '00'\r\n } else {\r\n minutes = tempMinutes\r\n }\r\n return hours + ':' + minutes;\r\n }\r\n } else {\r\n return moment().day(this.value / 1440).format('ddd');\r\n }\r\n \r\n\r\n },\r\n style: {\r\n fontFamily: chartFont,\r\n fontSize: '15px',\r\n //color: 'black'\r\n\r\n }\r\n },\r\n startOnTick: false,\r\n endOnTick: false,\r\n tickWidth: 1,\r\n reversed: false,\r\n opposite: true,\r\n //tickPositions: [360, 720, 1080],\r\n tickPositioner: function () {\r\n return tickPositions\r\n }\r\n },\r\n\r\n colorAxis: {\r\n stops: [\r\n [0, '#003d99'],\r\n [0.2, '#66a3ff'],\r\n [0.4, '#63BE7B'],\r\n [0.6, '#fae052'],\r\n [0.8, '#f40b0f'],\r\n [1, '#b30000']\r\n ],\r\n startOnTick: false,\r\n endOnTick: false,\r\n labels: {\r\n format: '{value} ' + tooltipSuffix\r\n },\r\n },\r\n\r\n\r\n plotOptions: {\r\n series: {\r\n //pointWidth: 5,\r\n pointPadding: 0,\r\n groupPadding: 0,\r\n shadow: false,\r\n },\r\n borderColor: 'black',\r\n },\r\n\r\n tooltip: {\r\n backgroundColor: {\r\n linearGradient: [0, 0, 0, 60],\r\n stops: [\r\n [0, '#FFFFFF'],\r\n [1, '#E0E0E0']\r\n ]\r\n },\r\n borderWidth: 1,\r\n borderColor: '#AAA',\r\n style: {\r\n color: 'black',\r\n fontSize: '15px'\r\n }\r\n },\r\n\r\n series: [\r\n {\r\n data: data,\r\n boostThreshold: 100,\r\n // rowsize: 14,\r\n rowsize: 60, // how many minutes does the cell cover \r\n borderWidth: .1,\r\n borderColor: 'black',\r\n nullColor: '#EFEFEF',\r\n // colsize: 24 * 36e5, // one day in milliseconds\r\n colsize: 24 * 36e5 * 7, // one day in milliseconds\r\n tooltip: {\r\n headerFormat: '',\r\n useHTML: true,\r\n\r\n //pointFormat: '{point.x:%e %b, %Y} {point.y}:00: {point.value}'\r\n\r\n pointFormatter: function () {\r\n let dateTime = moment.utc(this.x).add(this.y, 'minutes').format(\"ddd M/D/YY HH:mm\");\r\n let line = ' '\r\n\r\n return '
    ' + dateTime + '

    ' + line + this.value.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ' ' + tooltipSuffix + ' ' + line + '
    ';\r\n\r\n }\r\n },\r\n turboThreshold: 0 // #3404, remove after 4.0.5 release\r\n }\r\n ],\r\n credits: {\r\n enabled: false\r\n },\r\n\r\n exporting: exporting\r\n }\r\n}\r\n\r\nconst scatterPlotOptions = (data, dataType, durationView, timezone, intervalDuraton) => {\r\n let chartFont = 'Roboto';\r\n let tooltipSuffix;\r\n let yAxisTitle;\r\n switch (dataType) {\r\n case 'kw':\r\n tooltipSuffix = 'kW';\r\n yAxisTitle = \"Demand (kW)\";\r\n break;\r\n case 'kwh':\r\n tooltipSuffix = 'kWh';\r\n yAxisTitle = \"Consumption (kWh)\";\r\n break;\r\n };\r\n let ceiling = -1 * (intervalDuraton / 2);\r\n let floor = intervalDuraton / 2;\r\n \r\n let meterSeries = [];\r\n let min = Math.ceil(ceiling);\r\n let max = Math.floor(floor);\r\n\r\n let tickInterval;\r\n if (durationView === \"week\") {\r\n tickInterval = 60 * 12;\r\n data.forEach(x => {\r\n // let timeStamp = \r\n meterSeries.push({\r\n x: moment.tz(x[0], timezone).day() * (24*60) + moment.tz(x[0], timezone).minutes() + moment.tz(x[0], timezone).hour() * 60 + (Math.floor(Math.random() * (max - min)) + min),\r\n y: x[1],\r\n // color: \"#FF0000\",\r\n date: moment.tz(x[0], timezone).format(\"MMM D, YYYY\"),\r\n day: moment.tz(x[0], timezone).format(\"dddd\"),\r\n time: moment.tz(x[0], timezone).format(\"H:mm\"),\r\n });\r\n // let temp = series;\r\n // debugger;\r\n });\r\n } else {\r\n tickInterval = 60;\r\n data.forEach(x => {\r\n meterSeries.push({\r\n x: moment.tz(x[0], timezone).minutes() + moment.tz(x[0], timezone).hour() * 60 + (Math.floor(Math.random() * (max - min)) + min),\r\n y: x[1],\r\n date: moment.tz(x[0], timezone).format(\"MMM D, YYYY\"),\r\n day: moment.tz(x[0], timezone).format(\"dddd\"),\r\n time: moment.tz(x[0], timezone).format(\"H:mm\")\r\n })\r\n });\r\n };\r\n \r\n \r\n \r\n \r\n return {\r\n chart: {\r\n // type: 'scatter',\r\n zoomType: 'xy',\r\n style: {\r\n fontFamily: chartFont\r\n }\r\n },\r\n time: {\r\n // useUTC: true\r\n timezone: timezone\r\n },\r\n title: {\r\n text: ''\r\n },\r\n subtitle: {\r\n text: ''\r\n },\r\n boost: {\r\n useGPUTranslations: true,\r\n usePreAllocated: true\r\n },\r\n xAxis: {\r\n // type: 'datetime',\r\n tickInterval: tickInterval,\r\n labels: {\r\n formatter: function () {\r\n let label;\r\n // let value = this.value;\r\n // debugger;\r\n \r\n if (durationView === \"day\") {\r\n let hours = this.value/60;\r\n label = moment().hour(hours).minutes(0).format('H:mm');\r\n } else {\r\n let days = Math.floor(this.value/1440);\r\n let minutes = this.value % 1440;\r\n let hours = minutes / 60;\r\n \r\n label = moment().day(days).hour(hours).minutes(0).format('ddd H:mm');\r\n }\r\n \r\n return '' +\r\n label + '';\r\n }\r\n }\r\n },\r\n yAxis: {\r\n title: {\r\n text: yAxisTitle\r\n }\r\n },\r\n legend: {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n scatter: {\r\n marker: {\r\n radius: 1.5,\r\n states: {\r\n hover: {\r\n enabled: true,\r\n lineColor: 'rgb(100,100,100)'\r\n }\r\n }\r\n },\r\n states: {\r\n hover: {\r\n marker: {\r\n enabled: false\r\n }\r\n }\r\n },\r\n tooltip: {\r\n useHTML: true,\r\n headerFormat: '',\r\n pointFormatter: function () {\r\n console.log(this);\r\n return '
    Date: ' + this.date + '
    ' + '
    Day: ' + this.day + '
    ' + '
    Time: ' + this.time + '
    ' +'
    ' + tooltipSuffix + ': ' + this.y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +'
    ';\r\n\r\n }\r\n }\r\n }\r\n },\r\n series: [{\r\n name: 'Series',\r\n type: 'scatter',\r\n turboThreshold: 0,\r\n // setting boostthreshold to 0 will allow custom colors per point. by default if the series is longer than 2000 highcharts\r\n // will enter boost mode where boostmode where it only accepts an x and y parameter, not color\r\n // boostThreshold: 0,\r\n color: 'rgba(33, 150, 243, .5)',\r\n data: meterSeries,\r\n }], \r\n credits: {\r\n enabled: false\r\n }\r\n }\r\n};\r\n\r\nconst cbecsZoomableOptions = (data, dataType) => {\r\n let axisTitle;\r\n let tooltipSuffix;\r\n \r\n let cbecs = {\r\n spaceHeating: 0.02011263,\r\n cooling: .14883347,\r\n ventilation: .15768302,\r\n waterHeating: .00482703,\r\n lighting: 0.17055511,\r\n cooking: 0.02172164,\r\n refrigeration: 0.15768302,\r\n officeEquipment: 0.04022526,\r\n computing: 0.09573612,\r\n other: 0.18101386\r\n \r\n };\r\n\r\n switch (dataType) {\r\n case 'kw':\r\n axisTitle = 'Demand (kW)';\r\n tooltipSuffix = 'kW';\r\n break;\r\n case 'kwh':\r\n axisTitle = 'Usage (kWh)';\r\n tooltipSuffix = 'kWh';\r\n break;\r\n };\r\n \r\n let spaceHeating = [];\r\n let cooling = [];\r\n let ventilation = [];\r\n let waterHeating = [];\r\n let lighting = [];\r\n let cooking = [];\r\n let refrigeration = [];\r\n let officeEquipment = [];\r\n let computing = [];\r\n let other = [];\r\n \r\n data.forEach(x => {\r\n let dateTimeStamp = x[0];\r\n let value = x[1];\r\n spaceHeating.push([dateTimeStamp, value*cbecs.spaceHeating]);\r\n cooling.push([dateTimeStamp, value*cbecs.cooling]);\r\n ventilation.push([dateTimeStamp, value*cbecs.ventilation]);\r\n waterHeating.push([dateTimeStamp, value*cbecs.waterHeating]);\r\n lighting.push([dateTimeStamp, value*cbecs.lighting]);\r\n cooking.push([dateTimeStamp, value*cbecs.cooking]);\r\n refrigeration.push([dateTimeStamp, value*cbecs.refrigeration]);\r\n officeEquipment.push([dateTimeStamp, value*cbecs.officeEquipment]);\r\n computing.push([dateTimeStamp, value*cbecs.computing]);\r\n other.push([dateTimeStamp, value*cbecs.other]);\r\n \r\n\r\n });\r\n \r\n let series = [{\r\n // type: 'area',\r\n name: 'Space Heating',\r\n data: spaceHeating,\r\n // fillColor: \"#FF0000\",\r\n }, {\r\n // type: 'area',\r\n name: 'Cooling',\r\n data: cooling,\r\n // fillColor: '#0800FF',\r\n }, {\r\n // type: 'area',\r\n name: 'Ventilation',\r\n data: ventilation,\r\n // fillColor: '#0800FF',\r\n }, \r\n {\r\n // type: 'area',\r\n name: 'Water Heating',\r\n data: waterHeating,\r\n // fillColor: '#0800FF',\r\n }, \r\n {\r\n // type: 'area',\r\n name: 'Lighting',\r\n data: lighting,\r\n // fillColor: '#0800FF',\r\n }, \r\n {\r\n // type: 'area',\r\n name: 'Cooking',\r\n data: cooking,\r\n // fillColor: '#0800FF',\r\n }, \r\n {\r\n // type: 'area',\r\n name: 'Refrigeration',\r\n data: refrigeration,\r\n // fillColor: '#0800FF',\r\n }, {\r\n // type: 'area',\r\n name: 'Office Equipment',\r\n data: officeEquipment,\r\n // fillColor: '#0800FF',\r\n }, {\r\n // type: 'area',\r\n name: 'Computing',\r\n data: computing,\r\n // fillColor: '#0800FF',\r\n }, {\r\n // type: 'area',\r\n name: 'Other',\r\n data: other,\r\n // fillColor: '#0800FF',\r\n }\r\n ];\r\n\r\n let options = {\r\n chart: {\r\n zoomType: 'x',\r\n height: 500,\r\n style: {\r\n fontFamily: \"Roboto\"\r\n },\r\n },\r\n time: {\r\n useUTC: true\r\n },\r\n title: {\r\n text: ''\r\n },\r\n subtitle: {\r\n text: document.ontouchstart === undefined ?\r\n '' : ''\r\n },\r\n xAxis: {\r\n type: 'datetime'\r\n },\r\n yAxis: {\r\n title: {\r\n text: axisTitle\r\n },\r\n opposite: true\r\n },\r\n legend: {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n area: {\r\n stacking: 'normal',\r\n // fillColor: {\r\n // linearGradient: {\r\n // x1: 0,\r\n // y1: 0,\r\n // x2: 0,\r\n // y2: 1\r\n // },\r\n // stops: [\r\n // [0, Highcharts.getOptions().colors[0]],\r\n // [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\r\n // ]\r\n // },\r\n\r\n marker: {\r\n radius: 2\r\n },\r\n lineWidth: 1,\r\n states: {\r\n hover: {\r\n lineWidth: 1\r\n }\r\n },\r\n // threshold: null\r\n }\r\n },\r\n tooltip: {\r\n formatter: function () {\r\n console.log(this);\r\n //debugger;\r\n console.log(\"Time range: \", this.points[0].series.closestPointRange);\r\n let timeRange = this.points[0].series.closestPointRange;\r\n let startDateTime = moment.utc(this.x).subtract(timeRange, 'milliseconds')\r\n //.format(\"ddd M/D/YY HH:mm\");\r\n let endDateTime = moment.utc(this.x)\r\n let diffDays = endDateTime.date() !== startDateTime.date();\r\n let timeString;\r\n if (diffDays === true) {\r\n timeString = '
    ' + startDateTime.format(\"ddd M/D/YY HH:mm\") + '
    to ' + endDateTime.format(\"ddd M/D/YY HH:mm\") + '
    '\r\n } else {\r\n timeString = '
    ' + endDateTime.format(\"ddd M/D/YY\") + '
    ' + startDateTime.format(\"HH:mm\") + ' to ' + endDateTime.format(\"HH:mm\") + '
    '\r\n }\r\n let color;\r\n if (this.y >= 0) {\r\n color = this.points[0].series.color;\r\n } else {\r\n color = 'rgba(76, 175, 80, 1)'\r\n }\r\n\r\n let line = ' '\r\n //return '
    ' + startDateTime + '
    to ' + endDateTime + '

    ' + line + this.y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ' kW ' + line + '
    ';\r\n return timeString + '
    ' + line + this.y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ' ' + tooltipSuffix + ' ' + line + '
    ';\r\n },\r\n useHTML: true,\r\n backgroundColor: '#fafafa'\r\n },\r\n series: series,\r\n\r\n credits: {\r\n enabled: false\r\n }\r\n };\r\n\r\n return options\r\n};\r\n\r\n\r\nconst zoomableOptions = (data, dataType, timezone, temperatureData = null, plotLines = null, plotBands = null) => {\r\n let axisTitle;\r\n let tooltipSuffix;\r\n \r\n switch (dataType) {\r\n case 'kw':\r\n axisTitle = 'Demand (kW)';\r\n tooltipSuffix = 'kW';\r\n break;\r\n case 'kwh':\r\n axisTitle = 'Usage (kWh)';\r\n tooltipSuffix = 'kWh';\r\n break;\r\n };\r\n\r\n let series = [{\r\n type: 'area',\r\n name: axisTitle,\r\n data: data,\r\n negativeColor: 'rgba(76, 175, 80, 1)',\r\n negativeFillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 1,\r\n x2: 0,\r\n y2: 0\r\n },\r\n stops: [\r\n [0, 'rgba(76, 175, 80, 1)'],\r\n [1, 'rgba(76, 175, 80, 0)']\r\n ]\r\n },\r\n fillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 0,\r\n x2: 0,\r\n y2: 1\r\n },\r\n stops: [\r\n [0, Highcharts.getOptions().colors[0]],\r\n [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\r\n ]\r\n },\r\n }];\r\n \r\n let yAxis = [{\r\n title: {\r\n text: axisTitle\r\n },\r\n // opposite: true\r\n }, {\r\n title: {\r\n text: ''\r\n },\r\n }]\r\n \r\n if (temperatureData) {\r\n series.push({\r\n type: 'line',\r\n name: 'Temperature',\r\n data: temperatureData,\r\n yAxis: 1,\r\n color: 'rgb(255, 0, 0, 0.5)',\r\n dashStyle: 'ShortDot'\r\n });\r\n \r\n //for some reason pushing the whole object doesn't work quite as expected so this was an easy work around\r\n yAxis[1].title.text = 'Temperature'\r\n };\r\n\r\n const tooltipFunction = (point) => {\r\n // debugger;\r\n let timeRange = point.points[0].series.closestPointRange;\r\n let startDateTime = moment.tz(point.x, timezone).subtract(timeRange, 'milliseconds')\r\n let endDateTime = moment.tz(point.x, timezone)\r\n let diffDays = endDateTime.date() !== startDateTime.date();\r\n let timeString;\r\n if (diffDays === true) {\r\n timeString = '
    ' + startDateTime.format(\"ddd M/D/YY HH:mm\") + '
    to ' + endDateTime.format(\"ddd M/D/YY HH:mm\") + '
    '\r\n } else {\r\n timeString = '
    ' + endDateTime.format(\"ddd M/D/YY\") + '
    ' + startDateTime.format(\"HH:mm\") + ' to ' + endDateTime.format(\"HH:mm\") + '
    '\r\n }\r\n let color;\r\n if (point.y >= 0) {\r\n color = point.points[0].series.color;\r\n } else {\r\n color = 'rgba(76, 175, 80, 1)'\r\n }\r\n let color2 = 'rgb(255, 0, 0, 0.5)';\r\n let line = ' ';\r\n let tempLine = ' ';\r\n\r\n let final = timeString +\r\n '
    ' + line + point.y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ' ' + tooltipSuffix + ' ' + line + '
    ';\r\n if (temperatureData !== null && point.points.length > 1) {\r\n final += '
    ' + tempLine + point.points[1].y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + '°F' + ' ' + tempLine + '
    '\r\n }\r\n // return timeString +\r\n // '
    ' + line + point.y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ' ' + tooltipSuffix + ' ' + line + '
    '\r\n // + '
    ' + tempLine + point.points[1].y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + '°F' + ' ' + tempLine + '
    '\r\n // ;\r\n\r\n return final\r\n };\r\n\r\n return {\r\n chart: {\r\n zoomType: 'x',\r\n height: 500,\r\n style: {\r\n fontFamily: \"Roboto\"\r\n },\r\n },\r\n time: {\r\n // useUTC: true\r\n timezone: timezone\r\n },\r\n title: {\r\n text: ''\r\n },\r\n subtitle: {\r\n text: document.ontouchstart === undefined ?\r\n '' : ''\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n \r\n plotBands: plotBands,\r\n plotLines: plotLines,\r\n },\r\n yAxis: yAxis,\r\n legend: {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n area: {\r\n // stacking: 'normal',\r\n fillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 0,\r\n x2: 0,\r\n y2: 1\r\n },\r\n stops: [\r\n [0, Highcharts.getOptions().colors[0]],\r\n [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\r\n ]\r\n },\r\n\r\n marker: {\r\n radius: 2\r\n },\r\n lineWidth: 1,\r\n states: {\r\n hover: {\r\n lineWidth: 1\r\n }\r\n },\r\n // threshold: null\r\n }\r\n },\r\n tooltip: {\r\n formatter: function () {\r\n return tooltipFunction(this);\r\n },\r\n useHTML: true,\r\n backgroundColor: '#fafafa'\r\n },\r\n series: series,\r\n\r\n credits: {\r\n enabled: false\r\n }\r\n }\r\n}\r\n\r\nconst demandDurationOptions = (data, dateTimeArray) => {\r\n\r\n //let data = intervalDataForDemandDuration.data;\r\n\r\n return {\r\n chart: {\r\n zoomType: 'x',\r\n height: 500,\r\n style: {\r\n fontFamily: \"Roboto\"\r\n }\r\n },\r\n title: {\r\n text: ''\r\n },\r\n subtitle: {\r\n text: document.ontouchstart === undefined ?\r\n '' : ''\r\n },\r\n xAxis: {\r\n labels: {\r\n formatter: function () {\r\n let totalDifference = data[data.length - 1][0] - data[0][0];\r\n let difference = this.value - data[0][0];\r\n let percent = (difference / totalDifference) * 100;\r\n\r\n return percent.toFixed(2) + '%'\r\n }\r\n }\r\n },\r\n navigator: {\r\n xAxis: {\r\n labels: {\r\n formatter: function () {\r\n let totalDifference = data[data.length - 1][0] - data[0][0];\r\n let difference = this.value - data[0][0];\r\n let percent = (difference / totalDifference) * 100;\r\n\r\n return percent.toFixed(2) + '%'\r\n }\r\n }\r\n },\r\n },\r\n tooltip: {\r\n formatter: function () {\r\n let totalDifference = data[data.length - 1][0] - data[0][0];\r\n let difference = this.x - data[0][0];\r\n let percent = (difference / totalDifference) * 100;\r\n let index = this.points[0].point.index;\r\n let dateStamp = dateTimeArray[index].intervalDateTime;\r\n\r\n return 'kW: ' + this.y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + '
    Percent: ' + percent.toFixed(2) + '%' + '
    ' + moment.utc(dateStamp).format('MMMM Do YYYY, h:mm a')\r\n },\r\n },\r\n yAxis: {\r\n title: {\r\n text: 'Demand (kW)'\r\n }\r\n },\r\n legend: {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n area: {\r\n fillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 0,\r\n x2: 0,\r\n y2: 1\r\n },\r\n stops: [\r\n [0, Highcharts.getOptions().colors[0]],\r\n [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\r\n ]\r\n },\r\n marker: {\r\n radius: 2\r\n },\r\n lineWidth: 1,\r\n states: {\r\n hover: {\r\n lineWidth: 1\r\n }\r\n },\r\n threshold: null\r\n }\r\n },\r\n rangeSelector: {\r\n enabled: false\r\n },\r\n series: [{\r\n type: 'area',\r\n name: 'Demand (kW)',\r\n data: data,\r\n fillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 0,\r\n x2: 1,\r\n y2: 0\r\n },\r\n stops: [\r\n [0, Highcharts.getOptions().colors[0]],\r\n [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\r\n ]\r\n },\r\n }],\r\n credits: {\r\n enabled: false\r\n }\r\n }\r\n}\r\n\r\nexport {loadCurveOptions, summaryChartOptions, heatMapOptions, zoomableOptions, cbecsZoomableOptions, demandDurationOptions, scatterPlotOptions}","import moment from 'moment'\r\nimport 'moment-timezone'\r\n\r\nexport default function createHandsontableSettingsFromData(data, view, dataType, intervalDuration, timezone) {\r\n let settings;\r\n switch (view) {\r\n case 'load-curve':\r\n settings = getLoadCurveHandsontable(data, intervalDuration);\r\n break;\r\n case 'summary-chart':\r\n settings = getSummaryChartHandsontable(data);\r\n break;\r\n case 'heat-map':\r\n settings = getHeatMapHandsontable(data, dataType);\r\n break;\r\n case 'zoomable-chart':\r\n case 'scatter-plot':\r\n settings = getZoomableChartHandsontable(data, timezone);\r\n break;\r\n case 'demand-duration':\r\n settings = getDemandDurationHandsontable(data, timezone);\r\n break;\r\n case 'weather-degree-days':\r\n settings = getDegreeDaysHandsontable(data);\r\n break;\r\n case 'weather-raw-data':\r\n settings = getRawWeatherDataHandsonTable(data);\r\n break;\r\n case 'regression':\r\n settings = getRegressionDataHandsonTable(data);\r\n }\r\n\r\n return settings\r\n}\r\n\r\nfunction getLoadCurveHandsontable(data, intervalDuration) {\r\n let colHeaders = [];\r\n let rowHeaders = [];\r\n let dataForTable = [];\r\n let columns = [];\r\n\r\n \r\n // let intervalDuration;\r\n //TODO this is bad code below, need to use the facility/meter property of interval duration\r\n let start;\r\n if (intervalDuration === 15) {\r\n // intervalDuration = 15;\r\n start = moment().hour(0).minute(15).second(0);\r\n for (let i = 0; i < 96; i++) {\r\n colHeaders.push(moment(start).add(15 * i, 'minutes').format(\"HH:mm\"));\r\n columns.push({data: i, type: 'numeric'})\r\n }\r\n } else if (intervalDuration === 30) {\r\n intervalDuration = 30;\r\n start = moment().hour(0).minute(30).second(0);\r\n for (let i = 0; i < 48; i++) {\r\n colHeaders.push(moment(start).add(30 * i, 'minutes').format(\"HH:mm\"));\r\n columns.push({data: i, type: 'numeric'})\r\n }\r\n } else if (intervalDuration === 60) {\r\n intervalDuration = 60;\r\n start = moment().hour(1).minute(0).second(0);\r\n for (let i = 0; i < 24; i++) {\r\n colHeaders.push(moment(start).add(i, 'hours').format(\"HH:mm\"));\r\n columns.push({data: i, type: 'numeric'})\r\n }\r\n }\r\n\r\n data.forEach(series => {\r\n rowHeaders.push(series.name);\r\n });\r\n // debugger;\r\n for (let i = 0; i < data.length; i++) {\r\n dataForTable.push(Array(1440/intervalDuration).fill(0));\r\n //first time stamp\r\n let row = data[i];\r\n for (let j = 0; j < row.data.length; j++) {\r\n //find index\r\n let hours = Math.floor(row.data[j][0] / 60);\r\n let minutes = row.data[j][0] % 60;\r\n // Round it so the 95 index works. Technically the minutes re 59.999 for the last interval of the day which makes it index 94.9999 by calc if there's no rounding\r\n let index = Math.round((hours * 60/intervalDuration + minutes / intervalDuration) - 1);\r\n //rounds to 2 decimal places (toFixed makes it a string and that's no bueno)\r\n dataForTable[i][index] = (Math.round(row.data[j][1] * 100) / 100);\r\n\r\n }\r\n }\r\n\r\n return {\r\n colHeaders,\r\n rowHeaders,\r\n data: dataForTable,\r\n columns,\r\n width: 'auto',\r\n height: 500,\r\n rowHeaderWidth: 180,\r\n licenseKey: 'non-commercial-and-evaluation',\r\n stretchH: 'all',\r\n className: \"htCenter\",\r\n } \r\n\r\n}\r\n\r\nfunction getSummaryChartHandsontable(data) {\r\n\r\n let colHeaders = ['Max kW', 'Average kW', 'Min kW', 'Max kWh', 'Average kWh', 'Min kWh', 'Total kWh', 'Load Factor'];\r\n let rowHeaders = [];\r\n let dataForTable = [];\r\n let columns = [];\r\n\r\n data.forEach(series => {\r\n rowHeaders.push(series.name);\r\n dataForTable.push([series.maxKw, Math.round(series.avgKw * 100) / 100, series.minKw, series.maxKwh, Math.round(series.avgKwh * 100) / 100, series.minKwh, series.sumKwh, series.loadFactor]);\r\n })\r\n\r\n colHeaders.forEach((header, index) => columns.push({ data: index, type: 'numeric' }))\r\n\r\n return {\r\n colHeaders,\r\n rowHeaders,\r\n data: dataForTable,\r\n columns,\r\n width: 'auto',\r\n height: 500,\r\n rowHeaderWidth: 180,\r\n licenseKey: 'non-commercial-and-evaluation',\r\n stretchH: 'all',\r\n className: \"htCenter\",\r\n } \r\n}\r\n\r\nfunction getHeatMapHandsontable(data, dataType = \"kw\") {\r\n let colHeaders;\r\n if (dataType === 'kw') {\r\n colHeaders = ['kW']\r\n } else {\r\n colHeaders = ['kWh']\r\n }\r\n \r\n let rowHeaders = [];\r\n let dataForTable = [];\r\n let columns = [{data: 0, type: 'numeric'}]; \r\n \r\n \r\n data.forEach(interval => {\r\n rowHeaders.push(moment.utc(interval[0]).add(interval[1], 'minutes').format('MM/DD/YYYY HH:mm'));\r\n dataForTable.push([interval[2]])\r\n });\r\n\r\n return {\r\n colHeaders,\r\n rowHeaders,\r\n data: dataForTable,\r\n columns,\r\n width: 'auto',\r\n height: 500,\r\n rowHeaderWidth: 180,\r\n licenseKey: 'non-commercial-and-evaluation',\r\n stretchH: 'all',\r\n className: \"htCenter\",\r\n }\r\n}\r\n\r\nfunction getZoomableChartHandsontable(data, timezone) {\r\n let colHeaders = ['kW', 'kWh', 'Temperature'];\r\n let rowHeaders = [];\r\n let dataForTable = [];\r\n let columns = [{data: 0, type: 'numeric'}, {data: 1, type: 'numeric'}, {data: 2, type: 'numeric'}];\r\n\r\n data.forEach(interval => {\r\n rowHeaders.push(moment.tz(interval.dateTimestamp, timezone).format('MM/DD/YYYY HH:mm'));\r\n dataForTable.push([interval.kW, interval.kWh, interval.temperature])\r\n });\r\n \r\n // debugger;\r\n\r\n return {\r\n colHeaders,\r\n rowHeaders,\r\n data: dataForTable,\r\n columns,\r\n width: 'auto',\r\n height: 500,\r\n rowHeaderWidth: 180,\r\n licenseKey: 'non-commercial-and-evaluation',\r\n stretchH: 'all',\r\n className: \"htCenter\",\r\n }\r\n}\r\n\r\nfunction getDemandDurationHandsontable(data, timezone) {\r\n let colHeaders = ['kW', 'kWh', 'Percent (%)'];\r\n let rowHeaders = [];\r\n let dataForTable = [];\r\n let columns = [{data: 0, type: 'numeric'}, {data: 1, type: 'numeric'}, {data: 2, type: 'numeric'}];\r\n\r\n data.forEach(interval => {\r\n rowHeaders.push(moment.tz(interval.dateTimestamp, timezone).format('MM/DD/YYYY HH:mm'));\r\n dataForTable.push([interval.kW, interval.kWh, (interval.percentOverFiltered).toFixed(4)])\r\n });\r\n\r\n // debugger;\r\n\r\n return {\r\n colHeaders,\r\n rowHeaders,\r\n data: dataForTable,\r\n columns,\r\n width: 'auto',\r\n height: 500,\r\n rowHeaderWidth: 180,\r\n licenseKey: 'non-commercial-and-evaluation',\r\n stretchH: 'all',\r\n className: \"htCenter\",\r\n }\r\n}\r\n\r\nfunction getRawWeatherDataHandsonTable(data) {\r\n let colHeaders = ['Temperature', 'Humidity', 'Dew Point', 'Precipitation', 'Wind Speed', 'Wind Direction', 'Pressure'];\r\n let rowHeaders = [];\r\n let dataForTable = [];\r\n let columns = [];\r\n\r\n data.forEach(row => {\r\n rowHeaders.push(moment(row.weatherDateLocal).format('MM/DD/YYYY HH:mm'));\r\n dataForTable.push([row.temperature, row.humidity, row.dewpoint, row.precipitation, row.windSpeed, row.windDirection, row.pressure])\r\n // in case there are null values check before toFixed()\r\n });\r\n\r\n colHeaders.forEach((header, index) => columns.push({ data: index, type: 'numeric' }));\r\n\r\n return {\r\n colHeaders,\r\n rowHeaders,\r\n data: dataForTable,\r\n columns,\r\n width: 'auto',\r\n height: 500,\r\n rowHeaderWidth: 180,\r\n licenseKey: 'non-commercial-and-evaluation',\r\n stretchH: 'all',\r\n className: \"htCenter\",\r\n }\r\n}\r\n\r\nfunction getDegreeDaysHandsontable(data) {\r\n\r\n const {heatingDegreeBase, coolingDegreeBase, degreeDays} = data;\r\n\r\n let colHeaders = ['HDD Base: ' + heatingDegreeBase + '°F', 'CDD Base: ' + coolingDegreeBase + '°F', 'Peak Demand (kW)', 'Usage (kWh)'];\r\n let rowHeaders = [];\r\n let dataForTable = [];\r\n let columns = [];\r\n\r\n degreeDays.forEach(day => {\r\n rowHeaders.push(day.name);\r\n // in case there are null values check before toFixed()\r\n dataForTable.push([\r\n day.heatingDegreeDays ? day.heatingDegreeDays.toFixed(2) : day.heatingDegreeDays, \r\n day.coolingDegreeDays ? day.coolingDegreeDays.toFixed(2): day.coolingDegreeDays,\r\n day.maxKw ? day.maxKw : null,\r\n day.sumKwh ? day.sumKwh : null,\r\n \r\n ]);\r\n });\r\n\r\n colHeaders.forEach((header, index) => columns.push({ data: index, type: 'numeric' }));\r\n\r\n return {\r\n colHeaders,\r\n rowHeaders,\r\n data: dataForTable,\r\n columns,\r\n width: 'auto',\r\n height: 500,\r\n rowHeaderWidth: 180,\r\n licenseKey: 'non-commercial-and-evaluation',\r\n stretchH: 'all',\r\n className: \"htCenter\",\r\n }\r\n}\r\n\r\nfunction getRegressionDataHandsonTable(data) {\r\n\r\n let colHeaders = ['HDDs', 'CDDs', 'Consumption (kWh)', 'Prediction (kWh)', 'Variance (kWh)'];\r\n let rowHeaders = [];\r\n let dataForTable = [];\r\n let columns = [];\r\n\r\n data.forEach(day => {\r\n rowHeaders.push(day.name);\r\n // in case there are null values check before toFixed()\r\n dataForTable.push([\r\n day.heatingDegreeDays ? day.heatingDegreeDays : day.heatingDegreeDays, \r\n day.coolingDegreeDays ? day.coolingDegreeDays : day.coolingDegreeDays,\r\n day.sumKwh ? day.sumKwh : null,\r\n day.prediction ? day.prediction : null,\r\n day.variance ? day.variance : null,\r\n \r\n ]);\r\n });\r\n\r\n colHeaders.forEach((header, index) => columns.push({ data: index, type: 'numeric' }));\r\n\r\n return {\r\n colHeaders,\r\n rowHeaders,\r\n data: dataForTable,\r\n columns,\r\n width: 'auto',\r\n height: 500,\r\n rowHeaderWidth: 180,\r\n licenseKey: 'non-commercial-and-evaluation',\r\n stretchH: 'all',\r\n className: \"htCenter\",\r\n }\r\n}","import {scatterPlotOptions, demandDurationOptions, zoomableOptions, cbecsZoomableOptions} from \"../generateDefaultChartOptions\";\r\nimport createHandsontableSettingsFromData from \"../createHandsontableSettingsFromData\";\r\n\r\nconst _formatDataForScatterOrZoomable = new WeakMap();\r\n\r\nclass TimeSeriesData {\r\n constructor(data, timezone) {\r\n this.data = data;\r\n this.timezone = timezone;\r\n \r\n _formatDataForScatterOrZoomable.set(this, (dataType) => {\r\n let array = [];\r\n\r\n if (dataType === 'kwh') {\r\n this.data.forEach(interval => {\r\n array.push([interval.dateTimestamp, interval.kWh])\r\n });\r\n } else if (dataType === 'kw') {\r\n this.data.forEach(interval => {\r\n array.push([interval.dateTimestamp, interval.kW])\r\n });\r\n } else if (dataType === 'temp') {\r\n this.data.forEach(interval => {\r\n array.push([interval.dateTimestamp, interval.temperature])\r\n });\r\n }\r\n\r\n return array;\r\n })\r\n }\r\n\r\n formatDataForZoomableChart = (dataType = \"kw\") => {\r\n return _formatDataForScatterOrZoomable.get(this)(dataType)\r\n };\r\n\r\n formatDataForScatterPlot = (dataType = \"kw\") => {\r\n return _formatDataForScatterOrZoomable.get(this)(dataType)\r\n };\r\n \r\n formatDataForDemandDurationChart = () => {\r\n let data = [];\r\n let dateTimeArray = [];\r\n this.data.forEach(interval => {\r\n data.push([interval.fakeTimestamp, interval.kW]);\r\n dateTimeArray.push({ intervalDateTime: interval.dateTimestamp })\r\n });\r\n return {data, dateTimeArray}\r\n };\r\n \r\n generateScatterPlotChartOptions = (dataType = \"kw\", view = \"week\", timezone, intervalDuration) => {\r\n let array = this.formatDataForScatterPlot(dataType);\r\n return scatterPlotOptions(array, dataType, view, timezone, intervalDuration)\r\n }\r\n\r\n generateTimeSeriesHandsontableSettings = () => {\r\n return createHandsontableSettingsFromData(this.data, 'scatter-plot', 60, null, this.timezone)\r\n }\r\n \r\n generateDemandDurationChartOptions = () => {\r\n const {data, dateTimeArray} = this.formatDataForDemandDurationChart();\r\n return demandDurationOptions(data, dateTimeArray)\r\n }\r\n \r\n generateDemandDurationHandsontableSettings = () => {\r\n return createHandsontableSettingsFromData(this.data, 'demand-duration', 60, null, this.timezone)\r\n }\r\n \r\n generateZoomableChartOptions = (dataType = \"kw\", timezone, temperatureView = false, plotLines = null, plotBands = null) => {\r\n let data = this.formatDataForZoomableChart(dataType);\r\n let temperatureData = null;\r\n if (temperatureView) {\r\n temperatureData = this.formatDataForZoomableChart('temp'); \r\n }\r\n // return zoomableOptions(data, dataType)\r\n return zoomableOptions(data, dataType, timezone, temperatureData, plotLines, plotBands)\r\n }\r\n \r\n}\r\n\r\nexport default TimeSeriesData;","import React, {Component} from 'react'\r\n\r\nimport './style.css'\r\n// import LoadingHighchart from \"./highchart-loading\";\r\n\r\nimport Highcharts from 'highcharts';\r\nimport HighchartsReact from 'highcharts-react-official';\r\n\r\n\r\n\r\n\r\nlet array = [147.6,139,141,143,142,147,141,139,133,140,142,142,141,141,137,141,144,144,136,135,167,186,177,180,204,203,246,267,371,400,434,441,448,453,454,456,457,452,453,454,450,451,458,465,459,456,453,460,464,453,441,443,446,441,440,443,449,450,454,448,451,442,458,445,440,420,400,363,260,232,223,215,211,209,180,173,174,175,180,181,170,164,167,171,165,164,163,165,157,154,156,154,154,154,153,150];\r\nlet count = 0;\r\n\r\nlet options = {\r\n chart: {\r\n type: 'line',\r\n animation: {\r\n duration: 6000\r\n }, // don't animate in old IE\r\n backgroundColor: 'transparent',\r\n marginRight: 10,\r\n },\r\n events: {\r\n addSeries: function () {\r\n debugger;\r\n var label = this.renderer.label('A series was added, about to redraw chart', 100, 120)\r\n .attr({\r\n fill: Highcharts.getOptions().colors[0],\r\n padding: 10,\r\n r: 5,\r\n zIndex: 8\r\n })\r\n .css({\r\n color: '#FFFFFF'\r\n })\r\n .add();\r\n\r\n setTimeout(function () {\r\n label.fadeOut();\r\n }, 1000);\r\n }\r\n },\r\n\r\n time: {\r\n useUTC: false\r\n },\r\n\r\n title: {\r\n text: 'Live random data'\r\n },\r\n\r\n accessibility: {\r\n announceNewData: {\r\n enabled: true,\r\n minAnnounceInterval: 15000,\r\n announcementFormatter: function (allSeries, newSeries, newPoint) {\r\n if (newPoint) {\r\n return 'New point added. Value: ' + newPoint.y;\r\n }\r\n return false;\r\n }\r\n }\r\n },\r\n\r\n xAxis: {\r\n type: 'datetime',\r\n tickPixelInterval: 150,\r\n gridLineColor: 'transparent',\r\n lineWidth: 0,\r\n minorGridLineWidth: 0,\r\n labels: {\r\n enabled: false\r\n },\r\n minorTickLength: 0,\r\n tickLength: 0\r\n },\r\n\r\n yAxis: {\r\n title: {\r\n text: ''\r\n },\r\n gridLineColor: 'transparent',\r\n lineWidth: 0,\r\n minorGridLineWidth: 0,\r\n labels: {\r\n enabled: false\r\n },\r\n minorTickLength: 0,\r\n tickLength: 0\r\n },\r\n\r\n tooltip: {\r\n headerFormat: '{series.name}
    ',\r\n pointFormat: '{point.x:%Y-%m-%d %H:%M:%S}
    {point.y:.2f}'\r\n },\r\n plotOptions: {\r\n series: {\r\n animation: {\r\n duration: 6000\r\n },\r\n }\r\n },\r\n\r\n legend: {\r\n enabled: false\r\n },\r\n\r\n exporting: {\r\n enabled: false\r\n },\r\n\r\n series: [{\r\n name: 'series',\r\n data: array,\r\n color: '#ffffff'\r\n }]\r\n}\r\n\r\nclass LoadingWeatherHighchart extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.chart = React.createRef();\r\n this.options = {\r\n chart: {\r\n type: 'line',\r\n animation: {\r\n duration: 6000\r\n }, // don't animate in old IE\r\n backgroundColor: 'transparent',\r\n marginRight: 10,\r\n // events: {\r\n // addSeries: function () {\r\n // this.redraw();\r\n // var label = this.renderer.label('A series was added, about to redraw chart', 100, 120)\r\n // .attr({\r\n // fill: Highcharts.getOptions().colors[0],\r\n // padding: 10,\r\n // r: 5,\r\n // zIndex: 8\r\n // })\r\n // .css({\r\n // color: '#FFFFFF'\r\n // })\r\n // .add();\r\n //\r\n // setTimeout(function () {\r\n // label.fadeOut();\r\n // }, 1000);\r\n // \r\n // }\r\n // },\r\n },\r\n \r\n\r\n time: {\r\n useUTC: false\r\n },\r\n\r\n title: {\r\n text: 'Live random data'\r\n },\r\n\r\n accessibility: {\r\n announceNewData: {\r\n enabled: true,\r\n minAnnounceInterval: 15000,\r\n announcementFormatter: function (allSeries, newSeries, newPoint) {\r\n if (newPoint) {\r\n return 'New point added. Value: ' + newPoint.y;\r\n }\r\n return false;\r\n }\r\n }\r\n },\r\n\r\n xAxis: {\r\n type: 'datetime',\r\n tickPixelInterval: 150,\r\n gridLineColor: 'transparent',\r\n lineWidth: 0,\r\n minorGridLineWidth: 0,\r\n labels: {\r\n enabled: false\r\n },\r\n minorTickLength: 0,\r\n tickLength: 0\r\n },\r\n\r\n yAxis: {\r\n title: {\r\n text: ''\r\n },\r\n gridLineColor: 'transparent',\r\n lineWidth: 0,\r\n minorGridLineWidth: 0,\r\n labels: {\r\n enabled: false\r\n },\r\n minorTickLength: 0,\r\n tickLength: 0\r\n },\r\n\r\n tooltip: {\r\n headerFormat: '{series.name}
    ',\r\n pointFormat: '{point.x:%Y-%m-%d %H:%M:%S}
    {point.y:.2f}'\r\n },\r\n plotOptions: {\r\n series: {\r\n animation: {\r\n duration: 6000\r\n },\r\n }\r\n },\r\n\r\n legend: {\r\n enabled: false\r\n },\r\n\r\n exporting: {\r\n enabled: false\r\n },\r\n\r\n series: [{\r\n name: 'series',\r\n data: array,\r\n color: '#ffffff'\r\n }]\r\n }\r\n }\r\n \r\n\r\n \r\n // afterChartCreated = (chart) => {\r\n // this.internalChart = chart;\r\n // };\r\n\r\n componentDidMount = () => {\r\n let chart = this.chart.current.chart;\r\n \r\n\r\n\r\n //chart.series[0].addPoint({x: 10, y: 12});\r\n\r\n // set up the updating of the chart each second\r\n var series = chart.series[0];\r\n \r\n \r\n setInterval(function () {\r\n // chart.destroy();\r\n let newArray = [];\r\n chart.series[0].remove();\r\n array.forEach((x, index) => {\r\n let positive = Math.random() < 0.5 ? -1 : 1;\r\n let y = Math.floor(Math.random() * 20)*positive;\r\n newArray.push(array[index] + y)\r\n });\r\n chart.addSeries({\r\n name: 'series',\r\n color: '#FFFFFF',\r\n data: newArray\r\n });\r\n \r\n // chart.redraw()\r\n }, 6000);\r\n\r\n }\r\n\r\n\r\n render() {\r\n // this.yourFunction();\r\n\r\n return (\r\n \r\n )\r\n }\r\n\r\n\r\n}\r\n\r\nexport default LoadingWeatherHighchart","import React, {Component} from 'react'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport {ScaleLoader} from \"react-spinners\";\r\n\r\nimport Grid from \"@material-ui/core/Grid\";\r\n\r\nimport sun from '../../assets/img/svg/sun-white.svg'\r\nimport buildings from '../../assets/img/svg/buildings.svg'\r\nimport meter from '../../assets/img/svg/meter.svg'\r\nimport moon from '../../assets/img/svg/moon.svg'\r\nimport ReactSVG from \"react-svg\";\r\nimport {Translate} from \"@material-ui/icons\";\r\nimport './style.css'\r\n// import LoadingHighchart from \"./highchart-loading\";\r\nimport LoadingWeatherHighchart from \"./highchart-loading\";\r\n\r\nimport Highcharts from 'highcharts/highstock';\r\nimport HighchartsReact from 'highcharts-react-official';\r\nimport RegularButton from \"../CustomButtons/Button\";\r\n\r\n// const useStyles = makeStyles(theme => ({\r\n// root: {\r\n// // backgroundColor: \"transparent\",\r\n// },\r\n//\r\n// paper: {\r\n// backgroundColor: \"transparent\",\r\n// boxShadow: \"none\",\r\n// overflow: \"hidden\"\r\n// },\r\n// background: {\r\n// width: 600,\r\n// height: 400\r\n// }\r\n// // test: {\r\n// // transform: 'translateX(200px)'\r\n// // }\r\n// }));\r\n\r\nconst styles = theme => ({\r\n root: {\r\n // backgroundColor: \"transparent\",\r\n },\r\n\r\n paper: {\r\n backgroundColor: \"transparent\",\r\n boxShadow: \"none\",\r\n overflow: \"hidden\"\r\n },\r\n background: {\r\n width: 600,\r\n height: 400\r\n }\r\n});\r\n\r\nlet array = [147.6,139,141,143,142,147,141,139,133,140,142,142,141,141,137,141,144,144,136,135,167,186,177,180,204,203,246,267,371,400,434,441,448,453,454,456,457,452,453,454,450,451,458,465,459,456,453,460,464,453,441,443,446,441,440,443,449,450,454,448,451,442,458,445,440,420,400,363,260,232,223,215,211,209,180,173,174,175,180,181,170,164,167,171,165,164,163,165,157,154,156,154,154,154,153,150];\r\n\r\n\r\nclass LoadingWeather extends Component {\r\n\r\n tick = () => {\r\n\r\n \r\n \r\n // debugger;\r\n // chartOptions.series[0].data = array;\r\n // this.setState(prevState => ({\r\n // chartOptions: chartOptions\r\n // }));\r\n \r\n }\r\n \r\n //\r\n // afterChartCreated = (chart) => {\r\n // debugger;\r\n // this.internalChart = chart;\r\n // };\r\n //\r\n // componentDidMount = () => {\r\n // // example of use\r\n // \r\n // debugger;\r\n // this.internalChart.addSeries({ data: [1, 2, 3] })\r\n // }\r\n \r\n\r\n render() {\r\n const {classes} = this.props;\r\n let options = {\r\n chart: {\r\n backgroundColor: 'transparent'\r\n },\r\n title: {\r\n text: ''\r\n },\r\n\r\n subtitle: {\r\n text: ''\r\n },\r\n\r\n yAxis: {\r\n title: {\r\n text: 'Demand',\r\n },\r\n minorGridLineWidth: 0,\r\n // lineColor: 'transparent',\r\n labels: {\r\n enabled: false\r\n },\r\n // minorTickLength: 0,\r\n // tickLength: 0,\r\n gridLineColor: 'transparent',\r\n },\r\n\r\n xAxis: {\r\n accessibility: {\r\n rangeDescription: 'Range: 2010 to 2017'\r\n },\r\n lineWidth: 0,\r\n minorGridLineWidth: 0,\r\n gridLineColor: 'transparent',\r\n labels: {\r\n enabled: false\r\n },\r\n minorTickLength: 0,\r\n tickLength: 0\r\n },\r\n\r\n legend: {\r\n enabled: false,\r\n },\r\n tooltip: {\r\n enabled: false\r\n },\r\n exporting: {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n series: {\r\n animation: {\r\n duration: 6000\r\n },\r\n pointStart: 2010\r\n }\r\n },\r\n\r\n series: [{\r\n name: 'Installation',\r\n color: 'rgb(250,250,250,.3)',\r\n data: [147.6,139,141,143,142,147,141,139,133,140,142,142,141,141,137,141,144,144,136,135,167,186,177,180,204,203,246,267,371,400,434,441,448,453,454,456,457,452,453,454,450,451,458,465,459,456,453,460,464,453,441,443,446,441,440,443,449,450,454,448,451,442,458,445,440,420,400,363,260,232,223,215,211,209,180,173,174,175,180,181,170,164,167,171,165,164,163,165,157,154,156,154,154,154,153,150]\r\n }],\r\n\r\n responsive: {\r\n rules: [{\r\n condition: {\r\n maxWidth: 500\r\n },\r\n chartOptions: {\r\n legend: {\r\n layout: 'horizontal',\r\n align: 'center',\r\n verticalAlign: 'bottom'\r\n }\r\n }\r\n }]\r\n }\r\n }\r\n\r\n // this.yourFunction();\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\n \r\n {/**/}\r\n \r\n \r\n {/**/}\r\n {/* */}\r\n {/* Loading Data*/}\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(styles)(LoadingWeather)","/* eslint-disable */\r\nimport React, { Component, Fragment } from \"react\";\r\n\r\n/// Material UI\r\nimport { withStyles } from '@material-ui/styles';\r\nimport { green } from '@material-ui/core/colors';\r\n\r\n// Redux\r\nimport { getProjectsFacilities, selectProject } from '../../redux/actions/project-actions';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\n\r\n// components\r\nimport ProjectHome from '../components/ProjectHomeComponent'\r\n\r\n// Services\r\nimport { getFacilitiesByProjectId, facilityModel, createOrUpdateFacility, deleteFacility } from \"../../services/facility.service\";\r\nimport { getProjectById } from \"../../services/project.service\"\r\nimport { getErrorMessage } from \"../../services/serviceHelper\";\r\nimport {intervalDataRequestObject, getIntervalDataTimestampByFacilityId} from \"../../services/intervalData.service\";\r\n\r\n// Validate\r\nimport validate from '../../js/validate'\r\nimport EditProject from \"../../Dashboard/components/EditProject\";\r\n// import Highcharts from \"highcharts\";\r\nimport moment from \"moment\";\r\n\r\nimport TimeSeriesData from \"../../js/CustomDataClasses/TimeSeriesData\";\r\n\r\n\r\nimport HighchartsReact from \"highcharts-react-official\";\r\nimport Highcharts from 'highcharts/highstock';\r\n\r\nimport highchartsExporting from \"highcharts/modules/exporting\";\r\nimport LoadingWeather from \"../../components/Spinners/loading-weather\";\r\nimport UploadingDataDialog from \"../../ImportData/components/spinner/UploadingDataDialog\";\r\n\r\nhighchartsExporting(Highcharts);\r\n\r\nconst styles = theme => ({\r\n paper: {\r\n margin: 20,\r\n },\r\n fab: {\r\n position: 'fixed',\r\n bottom: theme.spacing(2),\r\n right: theme.spacing(2),\r\n color: theme.palette.common.white,\r\n backgroundColor: green[500],\r\n '&:hover': {\r\n backgroundColor: green[600],\r\n }\r\n },\r\n});\r\n\r\nfunction getZoomableChart(seriesObject) {\r\n let axisTitle;\r\n let tooltipSuffix;\r\n axisTitle = 'Demand (kW)';\r\n tooltipSuffix = 'kW';\r\n // switch (chartDataFilterForm.dataType) {\r\n // case 'kw':\r\n // axisTitle = 'Demand (kW)';\r\n // tooltipSuffix = 'kW';\r\n // break;\r\n // case 'kwh':\r\n // axisTitle = 'Usage (kWh)';\r\n // tooltipSuffix = 'kWh';\r\n // break;\r\n // }\r\n \r\n let series = [];\r\n for (let key in seriesObject) {\r\n series.push({\r\n name: key,\r\n data: seriesObject[key]\r\n })\r\n }\r\n\r\n return {\r\n chart: {\r\n zoomType: 'x',\r\n height: 500,\r\n style: {\r\n fontFamily: \"Roboto\"\r\n },\r\n },\r\n time: {\r\n useUTC: true\r\n },\r\n title: {\r\n text: ''\r\n },\r\n subtitle: {\r\n text: document.ontouchstart === undefined ?\r\n '' : ''\r\n },\r\n xAxis: {\r\n type: 'datetime'\r\n },\r\n yAxis: {\r\n title: {\r\n text: axisTitle\r\n },\r\n opposite: true\r\n },\r\n legend: {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n area: {\r\n fillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 0,\r\n x2: 0,\r\n y2: 1\r\n },\r\n stops: [\r\n [0, Highcharts.getOptions().colors[0]],\r\n [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\r\n ]\r\n },\r\n\r\n marker: {\r\n radius: 2\r\n },\r\n lineWidth: 1,\r\n states: {\r\n hover: {\r\n lineWidth: 1\r\n }\r\n },\r\n // threshold: null\r\n }\r\n },\r\n tooltip: {\r\n // formatter: function () {\r\n // //debugger;\r\n // let timeRange = this.points[0].series.closestPointRange;\r\n // let startDateTime = moment.utc(this.x).subtract(timeRange, 'milliseconds')\r\n // //.format(\"ddd M/D/YY HH:mm\");\r\n // let endDateTime = moment.utc(this.x)\r\n // let diffDays = endDateTime.date() !== startDateTime.date();\r\n // let timeString;\r\n // if (diffDays === true) {\r\n // timeString = '
    ' + startDateTime.format(\"ddd M/D/YY HH:mm\") + '
    to ' + endDateTime.format(\"ddd M/D/YY HH:mm\") + '
    '\r\n // } else {\r\n // timeString = '
    ' + endDateTime.format(\"ddd M/D/YY\") + '
    ' + startDateTime.format(\"HH:mm\") + ' to ' + endDateTime.format(\"HH:mm\") + '
    '\r\n // }\r\n // let color;\r\n // if (this.y >= 0) {\r\n // color = this.points[0].series.color;\r\n // } else {\r\n // color = 'rgba(76, 175, 80, 1)'\r\n // }\r\n //\r\n // let line = ' '\r\n // //return '
    ' + startDateTime + '
    to ' + endDateTime + '

    ' + line + this.y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ' kW ' + line + '
    ';\r\n // return timeString + '
    ' + line + this.y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ' ' + tooltipSuffix + ' ' + line + '
    ';\r\n // },\r\n useHTML: true,\r\n backgroundColor: '#fafafa'\r\n },\r\n series: series,\r\n\r\n credits: {\r\n enabled: false\r\n }\r\n }\r\n}\r\n\r\n\r\nclass ProjectHomeContainer extends Component {\r\n\r\n state = {\r\n loading: false,\r\n project: null,\r\n finishedRetrievingMeters: false,\r\n createFacilityFormIsValid: false,\r\n attemptedCreateFacilitySubmit: false,\r\n createFacilityDialogOpen: false,\r\n \r\n createFacilityFormControls: {\r\n name: {\r\n label: 'Name',\r\n name: 'name',\r\n value: null,\r\n valid: false,\r\n touched: false,\r\n message: 'required',\r\n validationRules: {\r\n isRequired: true\r\n }\r\n },\r\n description: {\r\n label: 'Description (Optional)',\r\n name: 'description',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n message: 'required',\r\n validationRules: {\r\n\r\n }\r\n },\r\n meterNumber: {\r\n label: 'Meter Number',\r\n name: 'meterNumber',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n }\r\n },\r\n accountNumber: {\r\n label: 'Account Number',\r\n name: 'accountNumber',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n }\r\n },\r\n utility: {\r\n label: 'Utility',\r\n name: 'utility',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n }\r\n },\r\n address1: {\r\n label: 'Address 1',\r\n name: 'address1',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n }\r\n },\r\n address2: {\r\n label: 'Address 2',\r\n name: 'address2',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n }\r\n },\r\n city: {\r\n label: 'City',\r\n name: 'city',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n isRequired: false\r\n }\r\n },\r\n state: {\r\n label: 'State',\r\n name: 'state',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n }\r\n },\r\n postalCode: {\r\n label: 'Zip Code',\r\n name: 'postalCode',\r\n value: null,\r\n valid: false,\r\n touched: false,\r\n validationRules: {\r\n isRequired: true,\r\n isZipcode: true\r\n }\r\n },\r\n \r\n },\r\n\r\n importDataDialogOpen: false,\r\n importDataFacility: null,\r\n\r\n // editFacilityFormIsValid: true,\r\n // attemptedEditFacilitySubmit: false,\r\n // editFacilityDialogOpen: false,\r\n // selectedFacilityForEdit: null,\r\n // fetchingNewWeatherData: false,\r\n // editFacilityFormControls: {\r\n // name: {\r\n // label: 'Name',\r\n // value: null,\r\n // valid: true,\r\n // touched: false,\r\n // message: 'required',\r\n // validationRules: {\r\n // isRequired: true\r\n // }\r\n // },\r\n // meterNumber: {\r\n // label: 'Meter Number',\r\n // value: null,\r\n // valid: true,\r\n // touched: false,\r\n // validationRules: {\r\n //\r\n // }\r\n // },\r\n // accountNumber: {\r\n // label: 'Account Number',\r\n // value: null,\r\n // valid: true,\r\n // touched: false,\r\n // validationRules: {\r\n //\r\n // }\r\n // },\r\n // utility: {\r\n // label: 'Utility',\r\n // value: null,\r\n // valid: true,\r\n // touched: false,\r\n // validationRules: {\r\n //\r\n // }\r\n // },\r\n // address1: {\r\n // label: 'Address 1',\r\n // value: null,\r\n // valid: true,\r\n // touched: false,\r\n // validationRules: {\r\n //\r\n // }\r\n // },\r\n // address2: {\r\n // label: 'Address 2',\r\n // value: null,\r\n // valid: true,\r\n // touched: false,\r\n // validationRules: {\r\n //\r\n // }\r\n // },\r\n // city: {\r\n // label: 'City',\r\n // value: null,\r\n // valid: true,\r\n // touched: false,\r\n // validationRules: {\r\n // // isRequired: false\r\n // }\r\n // },\r\n // state: {\r\n // label: 'State',\r\n // value: null,\r\n // valid: true,\r\n // touched: false,\r\n // validationRules: {\r\n //\r\n // }\r\n // },\r\n // postalCode: {\r\n // label: 'Zip Code',\r\n // value: null,\r\n // valid: true,\r\n // touched: false,\r\n // validationRules: {\r\n // isRequired: true,\r\n // isZipcode: true\r\n // }\r\n // },\r\n //\r\n // },\r\n\r\n // Delete Facility State\r\n selectedFacilityForDelete: null,\r\n deleteFacilityDialogOpen: false,\r\n\r\n // Edit Project State\r\n // editProjectDialogOpen: false,\r\n\r\n snackbar: {\r\n open: false,\r\n message: '',\r\n varient: ''\r\n },\r\n\r\n // aggregated zoomable chart\r\n allDataReceived: false,\r\n allData: {},\r\n chartOptions: null,\r\n }\r\n \r\n componentDidMount() {\r\n const { facilityId, projectId } = this.props.match.params;\r\n const {selectProject, getProjectsFacilities} = this.props;\r\n getProjectById(projectId).then(project => {\r\n selectProject(project);\r\n this.setState({project});\r\n getProjectsFacilities();\r\n });\r\n\r\n\r\n };\r\n\r\n toggleEditProjectDialog = (project = null) => {\r\n let editProjectDialogOpen = !this.state.editProjectDialogOpen;\r\n this.setState({ editProjectDialogOpen, selectedProjectForEdit: project })\r\n }\r\n\r\n openSnackbar = (value) => {\r\n let snackbar = { ...this.state.snackbar }\r\n snackbar.open = value;\r\n this.setState({ snackbar })\r\n }\r\n\r\n toggleImportDataDialog = (facilityObject = null) => {\r\n if (facilityObject !== null) {\r\n this.setState({ importDataFacility: facilityObject})\r\n }\r\n let importDataDialogOpen = !this.state.importDataDialogOpen;\r\n this.setState({ importDataDialogOpen })\r\n }\r\n\r\n toggleCreateFacilityDialog = () => {\r\n let createFacilityDialogOpen = !this.state.createFacilityDialogOpen;\r\n this.setState({ createFacilityDialogOpen })\r\n }\r\n\r\n toggleDeleteFacilityDialog = (facility = null) => {\r\n let deleteFacilityDialogOpen = !this.state.deleteFacilityDialogOpen;\r\n this.setState({ deleteFacilityDialogOpen, selectedFacilityForDelete: facility })\r\n }\r\n\r\n onCreateFacilitySubmit = () => {\r\n this.setState({loading: true});\r\n let submittedForm = { ...this.state.createFacilityFormControls };\r\n let keys = Object.keys(submittedForm);\r\n let finalSubmission = {};\r\n keys.forEach(key => { finalSubmission[key] = submittedForm[key].value });\r\n\r\n if (this.state.createFacilityFormIsValid) {\r\n let facilityRequest = {...facilityModel};\r\n\r\n facilityRequest.ProjectId = this.props.match.params.projectId;\r\n facilityRequest.Name = finalSubmission.name;\r\n facilityRequest.Description = finalSubmission.description;\r\n facilityRequest.AccountNumber = finalSubmission.accountNumber;\r\n facilityRequest.MeterNumber = finalSubmission.meterNumber;\r\n facilityRequest.Utility = finalSubmission.utility;\r\n facilityRequest.Address1 = finalSubmission.address1;\r\n facilityRequest.Address2 = finalSubmission.address2;\r\n facilityRequest.City = finalSubmission.city;\r\n facilityRequest.State = finalSubmission.state;\r\n facilityRequest.PostalCode = finalSubmission.postalCode;\r\n\r\n createOrUpdateFacility(facilityRequest).then((response)=>{\r\n if (response.isSuccess){\r\n this.toggleCreateFacilityDialog();\r\n this.setState({ attemptedCreateFacilitySubmit: false })\r\n\r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = response.successMessage ? response.successMessage : \"Successfully Created Facility\";\r\n snackbar.open = true;\r\n snackbar.variant = \"success\";\r\n this.setState({ snackbar });\r\n\r\n this.updateTable();\r\n }else{\r\n\r\n //default error message\r\n let errorMessage = getErrorMessage(response);\r\n \r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = errorMessage;\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n }\r\n });\r\n \r\n } else {\r\n this.setState({ attemptedCreateFacilitySubmit: true })\r\n }\r\n this.setState({loading: false})\r\n }\r\n\r\n onDeleteFacilitySubmit = () => {\r\n console.log(this.state.selectedFacilityForDelete);\r\n\r\n \r\n this.toggleDeleteFacilityDialog();\r\n // TODO Delete Project. projectId = this.state.selectedProjectForDelete.projectId\r\n\r\n deleteFacility(this.state.selectedFacilityForDelete.facilityId).then((response)=>{\r\n if (response.isSuccess){\r\n //this.toggleDeleteProjectDialog();\r\n\r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = response.successMessage ? response.successMessage : \"Successfully Deleted Facility\";\r\n snackbar.open = true;\r\n snackbar.variant = \"success\";\r\n this.setState({ snackbar });\r\n\r\n this.updateTable();\r\n }else{\r\n\r\n //default error message\r\n let errorMessage = getErrorMessage(response);\r\n \r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = errorMessage;\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n }\r\n });\r\n }\r\n\r\n handleCreateFacilityInputChange = (event) => {\r\n \r\n const value = event.target.value;\r\n const name = event.target.name;\r\n debugger;\r\n const updatedControls = { ...this.state.createFacilityFormControls };\r\n\r\n const updatedFormElement = { ...updatedControls[name] };\r\n\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n\r\n updatedControls[name] = updatedFormElement;\r\n\r\n\r\n // Check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n this.setState({\r\n createFacilityFormControls: updatedControls,\r\n createFacilityFormIsValid: formIsValid\r\n })\r\n }\r\n\r\n \r\n getProject = () => {\r\n const { projectId } = this.props.match.params;\r\n getProjectById(projectId).then(project => {\r\n this.setState({project});\r\n });\r\n }\r\n \r\n updateTable(){\r\n this.props.getProjectsFacilities()\r\n // .then(() => this.getZoomableForAllFacilities());\r\n \r\n }\r\n \r\n getZoomableForAllFacilities = () => {\r\n const {facilities} = this.props;\r\n let dataReceivedObject = {};\r\n facilities.forEach(facility => {\r\n \r\n let request = intervalDataRequestObject;\r\n request.ProjectId = facility.projectId;\r\n request.FacilityId = facility.facilityId;\r\n request.DataType = \"kw\";\r\n request.StartDate = facility.intervalDataStartDate;\r\n request.EndDate = facility.intervalDataEndDate;\r\n request.IncludePercent = false;\r\n\r\n dataReceivedObject[facility.facilityId] = false;\r\n getIntervalDataTimestampByFacilityId(request).then(data => {\r\n const timeSeriesData = new TimeSeriesData(data);\r\n let array = timeSeriesData.formatDataForZoomableChart(\"kw\");\r\n let allData = {...this.state.allData};\r\n allData[facility.name] = array;\r\n this.setState({allData})\r\n dataReceivedObject[facility.facilityId] = true;\r\n this.allDataForZoomableReceived(dataReceivedObject)\r\n })\r\n });\r\n\r\n };\r\n \r\n allDataForZoomableReceived = (dataReceivedObject) => {\r\n let allDataReceived = true;\r\n for (let key in dataReceivedObject) {\r\n if (dataReceivedObject[key] === false) {\r\n allDataReceived = false;\r\n break\r\n }\r\n }\r\n \r\n this.setState({allDataReceived})\r\n };\r\n \r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n if (prevState.allDataReceived !== this.state.allDataReceived) {\r\n let temp = {...this.state.allData};\r\n let chartOptions = getZoomableChart({...this.state.allData});\r\n this.setState({chartOptions});\r\n }\r\n }\r\n\r\n render() {\r\n const { facilities, classes } = this.props;\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\nfunction mapStateToProps(state) {\r\n return {\r\n facilities: state.facilities,\r\n selectedProject: state.selectedProject,\r\n fetchingNewWeatherData: state.fetchingNewWeatherData,\r\n fetchingFacilities: state.fetchingFacilities\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n getProjectsFacilities, \r\n selectProject \r\n }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(ProjectHomeContainer));\r\n\r\n","import {summaryChartOptions} from \"../generateDefaultChartOptions\";\r\nimport createHandsontableSettingsFromData from \"../createHandsontableSettingsFromData\";\r\n\r\nclass SummaryChartData {\r\n constructor(data) {\r\n this.data = addLoadFactor(data);\r\n\r\n }\r\n \r\n getDataForDegreeDays = () => {\r\n \r\n };\r\n \r\n generateChartOptions = (requestedDataPoints, height = null, singleOrMultiple = 'single') => {\r\n let { categories, series } = formatDataForSummaryChart(this.data, requestedDataPoints);\r\n if (singleOrMultiple === 'single') {\r\n return summaryChartOptions(series, categories, height)\r\n } else if (singleOrMultiple === 'multiple') {\r\n let charts = [];\r\n series.forEach(x => {\r\n let temp = summaryChartOptions([x], categories, height)\r\n charts.push(temp)\r\n \r\n });\r\n return charts\r\n }\r\n }\r\n\r\n generateHandsontableSettings = () => {\r\n return createHandsontableSettingsFromData(this.data, 'summary-chart')\r\n }\r\n\r\n}\r\n\r\nexport default SummaryChartData;\r\n\r\n\r\nfunction addLoadFactor(data) {\r\n data.forEach((series, index) => {data[index].loadFactor = Number((series.avgKwh / series.maxKwh).toFixed(2)) });\r\n return data\r\n};\r\n\r\nfunction formatDataForSummaryChart(data, requestedDataPoints = null) {\r\n\r\n // Make sure Load Factor data has been added\r\n if (!data[0].loadFactor) {\r\n data.forEach((series, index) => {data[index].loadFactor = (series.avgKwh / series.maxKwh) });\r\n }\r\n\r\n let categories = [];\r\n let tempSeries = getTempSeries(requestedDataPoints);\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n categories.push(data[i].name);\r\n for (let j = 0; j < tempSeries.length; j++) {\r\n tempSeries[j].data.push(data[i][tempSeries[j].value]);\r\n }\r\n\r\n }\r\n\r\n let keys = Object.keys(tempSeries);\r\n let series = [];\r\n keys.forEach(key => series.push(tempSeries[key]))\r\n\r\n return { categories, series }\r\n\r\n}\r\n\r\n\r\nfunction getTempSeries(requestedDataPoints) {\r\n let allSeries = {\r\n maxKw: {\r\n name: 'Peak kW',\r\n value: 'maxKw',\r\n data: [],\r\n },\r\n avgKw: {\r\n name: 'Avg kW',\r\n value: 'avgKw',\r\n data: [],\r\n },\r\n minKw: {\r\n name: 'Min kW',\r\n value: 'minKw',\r\n data: [],\r\n },\r\n maxKwh: {\r\n name: 'Max kWh',\r\n value: 'maxKwh',\r\n data: [],\r\n yAxis: 1,\r\n },\r\n minKwh: {\r\n name: 'Min kWh',\r\n value: 'minKwh',\r\n data: [],\r\n yAxis: 1,\r\n },\r\n avgKwh: {\r\n name: 'Average kWh',\r\n value: 'avgKwh',\r\n data: [],\r\n yAxis: 1,\r\n },\r\n sumKwh: {\r\n name: 'Sum kWh',\r\n value: 'sumKwh',\r\n data: [],\r\n yAxis: 2,\r\n },\r\n loadFactor: {\r\n name: 'Load Factor',\r\n value: 'loadFactor',\r\n data: [],\r\n yAxis: 3,\r\n },\r\n\r\n };\r\n\r\n let tempSeries = [];\r\n requestedDataPoints.forEach(dataPoint => {\r\n tempSeries.push(allSeries[dataPoint])\r\n });\r\n return tempSeries\r\n};\r\n","import React, {Component} from 'react'\r\n\r\n//Material UI\r\nimport Paper from '@material-ui/core/Paper';\r\nimport {Grid, Typography} from \"@material-ui/core\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport FacilitiesTable from \"../../ProjectHome/containers/FacilitiesTable\";\r\n\r\nclass CustomInfoLayout2 extends Component {\r\n\r\n render() {\r\n const {title, mainContent, topRightContent = null} = this.props;\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n {title}\r\n \r\n
    \r\n {topRightContent ? topRightContent : null}\r\n
    \r\n
    \r\n {mainContent}\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 CustomInfoLayout2","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Card from \"@material-ui/core/Card\";\r\nimport CountUp from \"react-countup\";\r\n\r\n\r\nconst useStyles = makeStyles({\r\n infoCard: {\r\n minHeight: 100,\r\n }\r\n});\r\n\r\nexport default function MeterHomeTopBanner(props) {\r\n const classes = useStyles();\r\n const {selectedFacility, meterAnnualC02e, intervalDataLengthInDays} = props;\r\n \r\n let cards = [\r\n {\r\n label: 'Peak Demand',\r\n value: selectedFacility.maximumkWValue,\r\n suffix: ' kW',\r\n estimatedMessage: null\r\n },\r\n {\r\n label: 'Annual kWh',\r\n value: selectedFacility.annualKwhValue,\r\n suffix: ' kWh',\r\n estimatedMessage: intervalDataLengthInDays < 365 ? ('Estimated from ' + intervalDataLengthInDays + ' days of data') : null\r\n },\r\n {\r\n label: 'Annual Emissions (CO2 Equivalent)',\r\n value: meterAnnualC02e,\r\n suffix: ' lbs',\r\n estimatedMessage: intervalDataLengthInDays < 365 ? ('Estimated from ' + intervalDataLengthInDays + ' days of data') : null\r\n },\r\n \r\n ]\r\n\r\n return (\r\n \r\n \r\n {cards.map(x => (\r\n \r\n \r\n \r\n \r\n
    \r\n {x.label}\r\n
    \r\n\r\n
    \r\n \r\n {x.value ?\r\n : null}\r\n \r\n {x.estimatedMessage ?\r\n \r\n
    \r\n {x.estimatedMessage}\r\n
    \r\n\r\n
    : null }\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 Data Span\r\n
    \r\n\r\n
    \r\n \r\n {intervalDataLengthInDays ?\r\n : null}\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","import React from 'react'\r\nimport eGridZipcodes from \"../../../../assets/GhgJsons/eGridZipcodes\";\r\nimport eGridSubregionTotalEmissions from \"../../../../assets/GhgJsons/eGridSubregionTotalEmissions\";\r\nimport eGridSubregionResourceMix from \"../../../../assets/GhgJsons/eGridSubregionResourceMix\";\r\nimport eGridStateEmissions from \"../../../../assets/GhgJsons/eGridStateEmissions\";\r\nimport eGridStateResourceMix from \"../../../../assets/GhgJsons/eGridStateResourceMix\";\r\n\r\nfunction subRegionEmissionChartOptions(subRegionEmissions) {\r\n let formatted = formatSubRegionEmissions(subRegionEmissions);\r\n\r\n return (\r\n {\r\n chart: {\r\n type: 'column'\r\n },\r\n title: {\r\n text: 'Monthly Average Rainfall'\r\n },\r\n subtitle: {\r\n text: 'Source: WorldClimate.com'\r\n },\r\n xAxis: {},\r\n yAxis: {\r\n min: 0,\r\n title: {\r\n text: 'Rainfall (mm)'\r\n }\r\n },\r\n tooltip: {\r\n headerFormat: '{point.key}',\r\n pointFormat: '' +\r\n '',\r\n footerFormat: '
    {series.name}: {point.y:.1f} mm
    ',\r\n // shared: true,\r\n useHTML: true\r\n },\r\n plotOptions: {\r\n column: {\r\n pointPadding: 0.2,\r\n borderWidth: 0\r\n }\r\n },\r\n series: [{\r\n name: 'Tokyo',\r\n data: [49.9]\r\n\r\n }, {\r\n name: 'New York',\r\n data: [83.6]\r\n\r\n }, {\r\n name: 'London',\r\n data: [48.9]\r\n\r\n }, {\r\n name: 'Berlin',\r\n data: [42.4]\r\n\r\n }]\r\n }\r\n )\r\n};\r\n\r\nfunction formatSubRegionEmissions(subRegionEmissions) {\r\n let array = [\r\n {\r\n abbr: 'co2',\r\n label:
    CO2
    ,\r\n name: 'Carbon Dioxide',\r\n value: subRegionEmissions.co2,\r\n },\r\n {\r\n abbr: 'ch4',\r\n label:
    CH4
    ,\r\n name: 'Methane',\r\n value: subRegionEmissions.ch4,\r\n },\r\n {\r\n abbr: 'n2o',\r\n label:
    N20
    ,\r\n name: 'Nitrous Oxide',\r\n value: subRegionEmissions.n2o,\r\n },\r\n {\r\n abbr: 'co2e',\r\n label:
    CO2E
    ,\r\n name: 'Carbon Dioxide Equivalent',\r\n value: subRegionEmissions.co2e,\r\n },\r\n {\r\n abbr: 'annualNox',\r\n label:
    Annual NOx
    ,\r\n name: 'Annual Oxides of Nitrogen',\r\n value: subRegionEmissions.annualNox,\r\n },\r\n {\r\n abbr: 'ozoneNox',\r\n label:
    Ozone NOx
    ,\r\n name: 'Ozone Oxides of Nitrogen',\r\n value: subRegionEmissions.ozoneNox,\r\n },\r\n {\r\n abbr: 'so2',\r\n label:
    SO2
    ,\r\n name: 'Sulfur Dioxide',\r\n value: subRegionEmissions.so2,\r\n },\r\n ];\r\n return {\r\n subRegion: subRegionEmissions.subRegion,\r\n subRegionName: subRegionEmissions.subRegionName,\r\n emissions: array\r\n }\r\n\r\n};\r\n\r\nfunction formatSubRegionResourceMix(formatSubRegionResourceMix) {\r\n let fossilFuels = [\r\n {\r\n name: 'Coal',\r\n value: formatSubRegionResourceMix.coal\r\n },\r\n {\r\n name: 'Oil',\r\n value: formatSubRegionResourceMix.oil\r\n },\r\n {\r\n name: 'Gas',\r\n value: formatSubRegionResourceMix.gas\r\n },\r\n {\r\n name: 'Nuclear',\r\n value: formatSubRegionResourceMix.nuclear\r\n },\r\n {\r\n name: 'Other Fossil Fuels',\r\n value: formatSubRegionResourceMix.otherFossil\r\n },\r\n\r\n ];\r\n let renewables = [\r\n\r\n {\r\n name: 'Hydro',\r\n value: formatSubRegionResourceMix.hydro\r\n },\r\n {\r\n name: 'Biomass',\r\n value: formatSubRegionResourceMix.biomass\r\n },\r\n {\r\n name: 'Wind',\r\n value: formatSubRegionResourceMix.wind\r\n },\r\n {\r\n name: 'Solar',\r\n value: formatSubRegionResourceMix.solar\r\n },\r\n {\r\n name: 'Geothermal',\r\n value: formatSubRegionResourceMix.solar\r\n },\r\n {\r\n name: 'Other Renewable',\r\n value: formatSubRegionResourceMix.other\r\n },\r\n ];\r\n\r\n return {\r\n subRegion: formatSubRegionResourceMix.subRegion,\r\n subRegionName: formatSubRegionResourceMix.subRegion,\r\n resourceMix: {\r\n fossilFuels,\r\n renewables,\r\n }\r\n }\r\n\r\n};\r\n\r\nfunction formatResourceMixForPieChart(resourceMix) {\r\n let fossilFuels = [\r\n {\r\n name: 'Coal',\r\n value: resourceMix.fossilFuels[0].value\r\n },\r\n {\r\n name: 'Oil',\r\n value: resourceMix.fossilFuels[1].value\r\n },\r\n {\r\n name: 'Gas',\r\n value: resourceMix.fossilFuels[2].value\r\n },\r\n {\r\n name: 'Nuclear',\r\n value: resourceMix.fossilFuels[3].value\r\n },\r\n {\r\n name: 'Other Fossil Fuels',\r\n value: resourceMix.fossilFuels[4].value\r\n },\r\n\r\n ];\r\n // let renewables = [\r\n //\r\n // {\r\n // name: 'Hydro',\r\n // value: resourceMix.renewables[0].value\r\n // },\r\n // {\r\n // name: 'Biomass',\r\n // value: resourceMix.renewables[1].value\r\n // },\r\n // {\r\n // name: 'Wind',\r\n // value: resourceMix.renewables[2].value\r\n // },\r\n // {\r\n // name: 'Solar',\r\n // value: resourceMix.renewables[3].value\r\n // },\r\n // {\r\n // name: 'Geothermal',\r\n // value: resourceMix.renewables[4].value\r\n // },\r\n // {\r\n // name: 'Other Renewable',\r\n // value: resourceMix.renewables[5].value\r\n // },\r\n // ];\r\n let renewables = [\r\n {\r\n name: 'Renewables',\r\n value: resourceMix.renewables[0].value + resourceMix.renewables[1].value + resourceMix.renewables[2].value + resourceMix.renewables[3].value + resourceMix.renewables[4].value + resourceMix.renewables[5].value\r\n }\r\n ]\r\n\r\n return fossilFuels.concat(renewables)\r\n\r\n\r\n}\r\n\r\nfunction getIndividualResourceMixPieChartOptions(resourceMix) {\r\n let temp = formatResourceMixForPieChart(resourceMix);\r\n let data = [];\r\n temp.forEach(x => data.push({name: x.name, y: x.value}));\r\n return {\r\n chart: {\r\n plotBackgroundColor: null,\r\n plotBorderWidth: null,\r\n plotShadow: false,\r\n type: 'pie'\r\n },\r\n title: {\r\n text: ''\r\n },\r\n tooltip: {\r\n pointFormat: '{series.name}: {point.percentage:.1f}%'\r\n },\r\n plotOptions: {\r\n pie: {\r\n allowPointSelect: true,\r\n cursor: 'pointer',\r\n dataLabels: {\r\n enabled: true,\r\n format: '{point.name}: {point.percentage:.1f} %'\r\n },\r\n // showInLegend: true\r\n }\r\n },\r\n series: [{\r\n name: 'Percentage',\r\n colorByPoint: true,\r\n data,\r\n }],\r\n credits: {\r\n enabled: false\r\n }\r\n }\r\n}\r\n\r\nfunction getLocationEmissionsAndResources(postalCode, stateOrRegion, includeLosses) {\r\n let location;\r\n let locationEmissionsTemp = null;\r\n let locationResourceMixTemp = null;\r\n if (postalCode) {\r\n location = eGridZipcodes.filter(x => x.zipcode.toString() === postalCode);\r\n\r\n }\r\n if (location.length === 0) {\r\n //TODO: throw an error. If it's 0 then the zipcode isn't real\r\n } else {\r\n location = location[0];\r\n switch (stateOrRegion) {\r\n case 'region':\r\n let temp = eGridSubregionTotalEmissions.filter(x => x.subRegion === location.subRegion1)[0];\r\n locationEmissionsTemp = {...temp};\r\n locationResourceMixTemp = eGridSubregionResourceMix.filter(x => x.subRegion === location.subRegion1)[0];\r\n break;\r\n case 'state':\r\n locationEmissionsTemp = eGridStateEmissions.filter(x => x.state === location.state)[0];\r\n locationResourceMixTemp = eGridStateResourceMix.filter(x => x.state === location.state)[0];\r\n break;\r\n }\r\n\r\n }\r\n\r\n if (stateOrRegion === 'region' && includeLosses) {\r\n let gridGrossLoss = 1 + locationEmissionsTemp.gridGrossLoss;\r\n locationEmissionsTemp.co2e *= gridGrossLoss;\r\n locationEmissionsTemp.co2 *= gridGrossLoss;\r\n locationEmissionsTemp.n2o *= gridGrossLoss;\r\n locationEmissionsTemp.ch4 *= gridGrossLoss;\r\n locationEmissionsTemp.annualNox *= gridGrossLoss;\r\n locationEmissionsTemp.ozoneNox *= gridGrossLoss;\r\n locationEmissionsTemp.so2 *= gridGrossLoss;\r\n\r\n }\r\n\r\n\r\n let locationEmissions = formatSubRegionEmissions(locationEmissionsTemp);\r\n let locationResourceMix = formatSubRegionResourceMix(locationResourceMixTemp);\r\n return {locationEmissions, locationResourceMix}\r\n}\r\n\r\nexport {\r\n subRegionEmissionChartOptions,\r\n formatSubRegionEmissions,\r\n formatSubRegionResourceMix,\r\n getIndividualResourceMixPieChartOptions,\r\n getLocationEmissionsAndResources\r\n}","import React from 'react';\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport {makeStyles, withStyles} from '@material-ui/core/styles';\r\nimport CloudDownload from '@material-ui/icons/CloudDownload';\r\nimport GreenButton from \"../../../components/CustomButtons/GreenButton\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n title: {\r\n paddingTop: theme.spacing(1),\r\n paddingBottom: theme.spacing(2),\r\n flexGrow: 1\r\n },\r\n}));\r\n\r\n\r\nexport default function MeterSectionTitleBar(props) {\r\n const classes = useStyles();\r\n const {title, rightContent} = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {title}\r\n \r\n {rightContent ? rightContent : null}\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} from 'react';\r\nimport Highcharts from 'highcharts';\r\nimport {withStyles} from '@material-ui/core/styles';\r\nimport HighchartsReact from 'highcharts-react-official';\r\nimport highchartsMore from \"highcharts/highcharts-more\";\r\nimport CountUp from 'react-countup';\r\n\r\nimport 'moment-timezone';\r\n\r\n\r\n// Material UI\r\nimport Grid from '@material-ui/core/Grid';\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\n\r\nimport TableRow from '@material-ui/core/TableRow';\r\n\r\n// Services\r\nimport {\r\n getIntervalDataLoadCurveByFacilityId,\r\n getIntervalDataSummaryChartByFacilityId,\r\n intervalDataRequestObject,\r\n\r\n} from '../../../services/intervalData.service'\r\n\r\nimport './helper.css';\r\n\r\n// Components\r\nimport CustomInfoLayout from \"../../../components/CustomInfoLayout/CustomInfoLayout\";\r\nimport CustomInfoLayout2 from \"../../../components/CustomInfoLayout/CustomInfoLayout2\";\r\nimport DataViewLoadingSpinner from \"../spinners/DataViewLoadingSpinner\";\r\n\r\nimport moment from \"moment\";\r\nimport SummaryChartData from \"../../../js/CustomDataClasses/SummaryChartData\";\r\nimport MeterHomeTopBanner from \"./MeterHomeTopBanner\";\r\nimport {\r\n getIndividualResourceMixPieChartOptions,\r\n getLocationEmissionsAndResources,\r\n getResourceMixChartOptionsFromPostalCode\r\n} from \"../Emissions/js/emissionsHelper\";\r\nimport {Typography} from \"@material-ui/core\";\r\nimport MeterSectionTitleBar from \"../components/MeterSectionTitleBar\";\r\nimport {bindActionCreators} from \"redux\";\r\nimport {selectFacility, selectFacilityView, toggleFacilitySideBar} from \"../../../redux/actions/facility-actions\";\r\nimport {connect} from \"react-redux\";\r\nimport {setSelectedMeterForEdit} from \"../../../redux/actions/MeterActions/EditMeterActions/edit-meter-actions\";\r\nimport EditFacilityDialog from \"../../../ProjectHome/components/dialogs/EditFacilityDialog\";\r\nimport {getFacilityById} from \"../../../services/facility.service\";\r\n\r\n\r\nhighchartsMore(Highcharts);\r\n\r\n\r\nconst styles = theme => ({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n title: {\r\n paddingTop: theme.spacing(1),\r\n flexGrow: 1\r\n },\r\n paper: {\r\n padding: 20,\r\n marginLeft: 5,\r\n marginRight: 5,\r\n marginBottom: 10\r\n },\r\n table: {\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n },\r\n control: {\r\n padding: theme.spacing(2),\r\n },\r\n peakDemand: {\r\n height: 60,\r\n },\r\n statTitle: {\r\n width: '100%',\r\n backgroundColor: grey[300],\r\n //height: 60,\r\n padding: 10,\r\n border: 'solid',\r\n borderColor: grey[300],\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderLeft: 'none',\r\n borderRight: 'none',\r\n },\r\n infoCard: {\r\n minHeight: 100,\r\n }\r\n\r\n});\r\n\r\nconst DashboardSummaryChartsRequest = (projectId, facilityId, dataStartDate, dataEndDate) => {\r\n let request = {...intervalDataRequestObject};\r\n\r\n request.ProjectId = projectId;\r\n request.FacilityId = facilityId;\r\n // request.ChartType = 'summary-chart';\r\n // request.DaysOfWeek = [1,2,3,4,5,6,7];\r\n request.Months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\r\n request.SeriesType = ['Average'];\r\n request.DataType = 'kw';\r\n request.SeriesPer = 'month';\r\n request.StartDate = moment.utc(dataEndDate).subtract(1, 'year').date(1);\r\n request.EndDate = moment.utc(dataEndDate);\r\n\r\n return request\r\n};\r\n\r\nconst DashboardDemandRangeRequest = (projectId, facilityId, dataStartDate, dataEndDate) => {\r\n let request = {...intervalDataRequestObject};\r\n\r\n request.ProjectId = projectId;\r\n request.FacilityId = facilityId;\r\n // request.ChartType = 'summary-chart';\r\n request.DaysOfWeek = null;\r\n request.Months = null;\r\n request.SeriesType = ['Range'];\r\n request.DataType = 'kw';\r\n request.SeriesPer = 'allData';\r\n request.StartDate = moment.utc(dataStartDate);\r\n request.EndDate = moment.utc(dataEndDate);\r\n\r\n return request\r\n};\r\nconst DashboardLoadCurveRequest = (projectId, facilityId, dataStartDate, dataEndDate) => {\r\n let request = {...intervalDataRequestObject};\r\n\r\n request.ProjectId = projectId;\r\n request.FacilityId = facilityId;\r\n // request.ChartType = 'summary-chart';\r\n request.DaysOfWeek = null;\r\n request.Months = null;\r\n request.SeriesType = ['Average'];\r\n request.DataType = 'kw';\r\n request.SeriesPer = 'allData';\r\n request.StartDate = moment.utc(dataStartDate);\r\n request.EndDate = moment.utc(dataEndDate);\r\n\r\n return request\r\n};\r\n\r\n\r\nclass FacilityOverviewTemp extends Component {\r\n state = {\r\n peakAndUsageChartOptions: null,\r\n loadFactorChartOptions: null,\r\n demandRangeData: null,\r\n loadCurveData: null,\r\n demandRangeChartOptions: null,\r\n emissionsInfo: null,\r\n meterAnnualC02e: null,\r\n resourceMixChartOptions: null,\r\n intervalDataLengthInDays: null\r\n }\r\n\r\n getSummarychartData = () => {\r\n const {selectedFacility} = this.props;\r\n let intervalDataLengthInDays = moment(selectedFacility.intervalDataEndDate).diff(moment(selectedFacility.intervalDataStartDate), 'days');\r\n this.setState({intervalDataLengthInDays});\r\n\r\n let summaryChartRequest = DashboardSummaryChartsRequest(selectedFacility.projectId, selectedFacility.facilityId, selectedFacility.intervalDataStartDate, selectedFacility.intervalDataEndDate);\r\n\r\n getIntervalDataSummaryChartByFacilityId(summaryChartRequest).then(data => {\r\n let summaryChartData = new SummaryChartData(data);\r\n\r\n // Summary Chart\r\n let requestedDataPointsPeakAndUsage = ['maxKw', 'sumKwh'];\r\n let peakAndUsageChartOptions = summaryChartData.generateChartOptions(requestedDataPointsPeakAndUsage, 400);\r\n // peakAndUsageChartOptions.series[0].color = Highcharts.getOptions().colors[5];\r\n // peakAndUsageChartOptions.series[1].color = Highcharts.getOptions().colors[3];\r\n\r\n // Load Factor Chart\r\n let requestedDataPointsLoadFactor = ['loadFactor'];\r\n let loadFactorChartOptions = summaryChartData.generateChartOptions(requestedDataPointsLoadFactor, 400);\r\n // loadFactorChartOptions.series[0].color = Highcharts.getOptions().colors[2];\r\n this.setState({peakAndUsageChartOptions, loadFactorChartOptions})\r\n });\r\n\r\n };\r\n\r\n getDemandRangeData = () => {\r\n const {selectedFacility} = this.props;\r\n let demandRangeRequest = DashboardDemandRangeRequest(selectedFacility.projectId, selectedFacility.facilityId, selectedFacility.intervalDataStartDate, selectedFacility.intervalDataEndDate);\r\n getIntervalDataLoadCurveByFacilityId(demandRangeRequest).then(data => {\r\n this.setState({demandRangeData: data[0].data});\r\n })\r\n }\r\n getLoadCurveData = () => {\r\n const {selectedFacility} = this.props;\r\n let loadCurveRequest = DashboardLoadCurveRequest(selectedFacility.projectId, selectedFacility.facilityId, selectedFacility.intervalDataStartDate, selectedFacility.intervalDataEndDate);\r\n getIntervalDataLoadCurveByFacilityId(loadCurveRequest).then(data => {\r\n this.setState({loadCurveData: data[0].data})\r\n })\r\n };\r\n\r\n buildDemandRangeChartOptions = () => {\r\n let options = {\r\n chart: {\r\n height: 400,\r\n style: {\r\n fontFamily: \"Roboto\"\r\n },\r\n },\r\n title: {\r\n text: ''\r\n },\r\n\r\n xAxis: {\r\n type: 'datetime',\r\n labels: {\r\n formatter: function () {\r\n let hours = Math.floor(this.value / 60);\r\n let minutes = Math.floor(this.value % 60);\r\n return moment().hours(hours).minutes(minutes).format(\"H:mm\")\r\n }\r\n },\r\n tickPositions: [360, 720, 1080]\r\n },\r\n\r\n yAxis: {\r\n title: {\r\n text: null\r\n }\r\n },\r\n\r\n tooltip: {\r\n crosshairs: true,\r\n shared: true,\r\n valueSuffix: ' kW',\r\n headerFormat: '
    ',\r\n xDateFormat: '%H:%M',\r\n pointFormatter: function () {\r\n // debugger;\r\n // let minutesOfDay = this.x;\r\n let hours = Math.floor(this.x / 60);\r\n let minutes = Math.floor(this.x % 60);\r\n let time = moment().hours(hours).minutes(minutes).format(\"H:mm\");\r\n let header = '
    ' + time + '

    ';\r\n let average;\r\n let range;\r\n if (this.options.y) {\r\n average = 'Average: ' + this.y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ' kW';\r\n return header + `` + average + '
    '\r\n }\r\n if (this.options.low && this.options.high) {\r\n range = 'Range: ' + this.low.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ' kW - ' + this.high.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ' kW';\r\n return range\r\n }\r\n\r\n },\r\n },\r\n\r\n series: [{\r\n name: 'Average kW',\r\n data: this.state.loadCurveData,\r\n zIndex: 1,\r\n marker: {\r\n fillColor: 'white',\r\n lineWidth: 2,\r\n lineColor: Highcharts.getOptions().colors[0]\r\n }\r\n }, {\r\n name: 'Range',\r\n data: this.state.demandRangeData,\r\n type: 'arearange',\r\n lineWidth: 0,\r\n linkedTo: ':previous',\r\n color: Highcharts.getOptions().colors[0],\r\n fillOpacity: 0.3,\r\n zIndex: 0,\r\n marker: {\r\n enabled: false\r\n },\r\n negativeColor: true,\r\n negativeFillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 1,\r\n x2: 0,\r\n y2: 0\r\n },\r\n stops: [\r\n [0, 'rgba(76, 175, 80, .6)'],\r\n [1, 'rgba(76, 175, 80, 0)']\r\n ]\r\n },\r\n fillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 0,\r\n x2: 0,\r\n y2: 1\r\n },\r\n stops: [\r\n [0, Highcharts.getOptions().colors[0]],\r\n [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0.2).get('rgba')]\r\n ]\r\n },\r\n }],\r\n credits: {\r\n enabled: false\r\n }\r\n }\r\n\r\n this.setState({demandRangeChartOptions: options})\r\n };\r\n \r\n onEditComplete = () => {\r\n getFacilityById(this.props.selectedFacility.facilityId).then(response => {\r\n debugger;\r\n this.props.selectFacility(response)\r\n })\r\n };\r\n\r\n\r\n componentDidMount = async () => {\r\n const {selectedFacility} = this.props;\r\n \r\n this.getSummarychartData();\r\n this.getDemandRangeData();\r\n this.getLoadCurveData();\r\n let emissionsInfo = getLocationEmissionsAndResources(selectedFacility.postalCode, 'region', true);\r\n let meterAnnualC02e = emissionsInfo.locationEmissions.emissions[3].value * selectedFacility.annualKwhValue / 1000;\r\n this.setState({emissionsInfo, meterAnnualC02e})\r\n let resourceMixChartOptions = getIndividualResourceMixPieChartOptions(emissionsInfo.locationResourceMix.resourceMix);\r\n this.setState({resourceMixChartOptions});\r\n \r\n };\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n let {loadCurveData, demandRangeData, demandRangeChartOptions} = this.state;\r\n\r\n\r\n if (loadCurveData && demandRangeData && demandRangeChartOptions === null) {\r\n this.buildDemandRangeChartOptions();\r\n }\r\n\r\n };\r\n\r\n render() {\r\n\r\n\r\n const {selectedFacility, classes} = this.props;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n : }\r\n />\r\n \r\n \r\n : }\r\n />\r\n \r\n \r\n : }\r\n />\r\n \r\n \r\n : }\r\n />\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n\r\n );\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n // selectedChartView: state.selectedChartView,\r\n selectedFacilityView: state.selectedFacilityView,\r\n selectedFacilitySubview: state.selectedFacilitySubview,\r\n // intervalData: state.intervalData,\r\n // facilitySidebarOpen: state.facilitySidebarOpen,\r\n selectedFacility: state.selectedFacility,\r\n // facilities: state.facilities,\r\n // intervalDataForLoadCurve: state.intervalDataForLoadCurve,\r\n // intervalDataForZoomable: state.intervalDataForZoomable,\r\n // chartDataFilterFormObject: state.chartDataFilterFormObject\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n setSelectedMeterForEdit,\r\n // selectFacilityView,\r\n selectFacility,\r\n // selectProject,\r\n // toggleFacilitySideBar,\r\n \r\n }, dispatch);\r\n};\r\n\r\nlet FacilityOverview = connect(mapStateToProps, mapDispatchToProps)(FacilityOverviewTemp);\r\n\r\nexport default withStyles(styles)(FacilityOverview)\r\n","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Icon from '@material-ui/core/Icon';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n // justifyContent: 'center',\r\n alignItems: 'flex-end',\r\n },\r\n iconDelete: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n },\r\n iconEdit: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n },\r\n margin: {\r\n margin: theme.spacing(0),\r\n },\r\n}));\r\n\r\nexport default function NoteEditAndDeleteIcons(props) {\r\n const classes = useStyles();\r\n const { note, toggleEditNoteDialog, toggleDeleteNoteDialog } = props;\r\n\r\n return (\r\n
    \r\n toggleEditNoteDialog(note)}>\r\n \r\n edit_outline\r\n \r\n \r\n toggleDeleteNoteDialog(note)}>\r\n \r\n delete_outline\r\n \r\n \r\n\r\n\r\n
    \r\n );\r\n}","import React, {Fragment} from 'react'\r\nimport MaterialTable from 'material-table'\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport EditAndDeleteIcons from \"../../../Dashboard/components/ProjectEditAndDeleteIcons\";\r\nimport NoteEditAndDeleteIcons from \"./NoteEditAndDeleteIcons\";\r\nimport moment from 'moment'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n detailPanel: {\r\n backgroundColor: theme.palette.background.default,\r\n padding: 10\r\n },\r\n}));\r\n\r\nfunction NotesTable(props) {\r\n const {notes, toggleDeleteNoteDialog, toggleEditNoteDialog} = props;\r\n const classes = useStyles();\r\n return (\r\n
    \r\n ({moment(rowData.modifiedDate).format(\"MM/DD/YY HH:mm\")}) },\r\n {\r\n title: 'Actions', render: rowData => (\r\n
    \r\n \r\n\r\n
    \r\n )\r\n\r\n },\r\n ]}\r\n data={notes}\r\n detailPanel={rowData => {\r\n return (\r\n \r\n {rowData.notes}\r\n \r\n \r\n )\r\n }}\r\n components={{\r\n Container: props => (\r\n
    \r\n {props.children}\r\n
    \r\n )\r\n }}\r\n // onRowClick={(event, rowData, togglePanel) => togglePanel()}\r\n options={{\r\n search: true,\r\n pageSize: 10,\r\n padding: 'dense'\r\n }}\r\n />\r\n
    \r\n )\r\n}\r\n\r\nexport default NotesTable;","import React from 'react';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport CustomOutlinedInput from \"../../../components/Inputs/CustomOutlinedInput\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n container: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n // textField: {\r\n // width: '90%'\r\n // },\r\n dense: {\r\n marginTop: 19,\r\n },\r\n menu: {\r\n width: 200,\r\n },\r\n}));\r\n\r\nexport default function NoteForm(props) {\r\n const classes = useStyles();\r\n const {formControls, handleChange, attemptedSubmit} = props;\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}","import React from 'react'\r\nimport CustomDialog from \"../../../../components/Dialogs/customDialog\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport NoteForm from \"../NoteForm\";\r\nimport GreenButton from \"../../../../components/CustomButtons/GreenButton\";\r\n\r\nfunction CreateNoteDialog(props) {\r\n const {\r\n open, \r\n onClose,\r\n createNoteFormControls,\r\n handleCreateNoteChange,\r\n onCreateOrEditNoteSubmit,\r\n attemptedCreateNoteSubmit\r\n } = props;\r\n \r\n return (\r\n onCreateOrEditNoteSubmit('create')}>Add Note}\r\n content={}\r\n fullWidth={true}\r\n />\r\n )\r\n}\r\n\r\nexport default CreateNoteDialog","import React from 'react'\r\nimport CustomDialog from \"../../../../components/Dialogs/customDialog\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport NoteForm from \"../NoteForm\";\r\nimport GreenButton from \"../../../../components/CustomButtons/GreenButton\";\r\n\r\nfunction EditNoteDialog(props) {\r\n const {\r\n open, \r\n onClose,\r\n editNoteFormControls,\r\n handleEditNoteChange,\r\n onCreateOrEditNoteSubmit,\r\n attemptedEditNoteSubmit\r\n } = props;\r\n \r\n return (\r\n onCreateOrEditNoteSubmit('edit')}>Update Note}\r\n content={}\r\n fullWidth={true}\r\n />\r\n )\r\n}\r\n\r\nexport default EditNoteDialog","import React from 'react'\r\nimport CustomDialog from \"../../../../components/Dialogs/customDialog\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\n\r\nfunction DeleteNoteDialog(props) {\r\n const {\r\n open, \r\n onClose,\r\n deleteNote,\r\n onDeleteNoteSubmit\r\n } = props;\r\n\r\n if (deleteNote) {\r\n return (\r\n Delete}\r\n content={Are you sure you want to delete note \"{deleteNote.title}\"?}\r\n fullWidth={true}\r\n />\r\n )\r\n } else {\r\n return (\r\n Something went wrong\"}\r\n fullWidth={true}\r\n />\r\n )\r\n }\r\n}\r\n\r\nexport default DeleteNoteDialog","import validate from \"../validate\";\r\n\r\n\r\nconst handleTextInputChangeFormControl = (event, formControls) => {\r\n const value = event.target.value;\r\n const name = event.target.name;\r\n\r\n const updatedControls = { ...formControls };\r\n const updatedFormElement = { ...updatedControls[name] }\r\n\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n\r\n updatedControls[name] = updatedFormElement;\r\n\r\n // Check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n \r\n return {isValid: formIsValid, updatedControls}\r\n};\r\n\r\nexport {handleTextInputChangeFormControl}","import React, {Component} from 'react'\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport NotesTable from \"./NotesTable\";\r\nimport moment from 'moment'\r\n\r\n// Services\r\nimport {createOrUpdateFacilityNote, facilityNoteModel, getFacilityNoteById, getFacilityNotesByFacilityId, deleteFacilityNote} from \"../../../services/facility.service\";\r\n\r\n// Components\r\nimport CreateNoteDialog from \"./Dialogs/CreateNoteDialog\";\r\nimport EditNoteDialog from \"./Dialogs/EditNoteDialog\";\r\nimport DeleteNoteDialog from \"./Dialogs/DeleteNoteDialog\";\r\nimport EmptyGif from \"../../../components/EmptyGif/EmptyGif\";\r\nimport notebooksGif from '../../../assets/gifs/notebooks.gif'\r\nimport CustomPulseLoader from \"../../../components/Spinners/pulse-loader\";\r\nimport {handleTextInputChangeFormControl} from \"../../../js/FormValidation/formValidationHelpers\";\r\nimport GreenButton from \"../../../components/CustomButtons/GreenButton\";\r\nimport {Icon} from \"@material-ui/core\";\r\n\r\nconst styles = theme => ({\r\n root: {\r\n display: 'flex',\r\n width: '100%',\r\n },\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(0),\r\n\r\n },\r\n toolbar: theme.mixins.toolbar,\r\n\r\n});\r\n\r\nclass FacilityNotes extends Component {\r\n state = {\r\n notes: [],\r\n attemptedCreateNoteSubmit: false,\r\n createNoteFormIsValid: false,\r\n createNoteFormControls: {\r\n title: {\r\n label: 'Name',\r\n placeHolder: 'Equipment behind the meter...',\r\n name: 'title',\r\n value: null,\r\n valid: false,\r\n touched: false,\r\n validationRules: {\r\n isRequired: true\r\n },\r\n },\r\n notes: {\r\n label: 'Notes',\r\n placeHolder: '2 chillers, 4 air handlers, 30 VAVs, etc...',\r\n name: 'notes',\r\n value: null,\r\n valid: false,\r\n touched: false,\r\n validationRules: {\r\n isRequired: true\r\n },\r\n },\r\n },\r\n deleteNote: null,\r\n deleteNoteDialogOpen: false,\r\n attemptedEditNoteSubmit: false,\r\n editNoteFormControls: null,\r\n editNoteFormIsValid: true,\r\n editNoteId: null,\r\n editNoteDialogOpen: false,\r\n createNoteDialogOpen: false,\r\n finishedFetchingNotes: false\r\n };\r\n \r\n handleCreateNoteChange = (event) => {\r\n const {isValid, updatedControls} = handleTextInputChangeFormControl(event, {...this.state.createNoteFormControls});\r\n this.setState({createNoteFormIsValid: isValid, createNoteFormControls: updatedControls})\r\n };\r\n\r\n handleEditNoteChange = (event) => {\r\n const {isValid, updatedControls} = handleTextInputChangeFormControl(event, {...this.state.editNoteFormControls});\r\n this.setState({editNoteFormIsValid: isValid, editNoteFormControls: updatedControls})\r\n };\r\n\r\n toggleCreateNoteDialog = () => {\r\n this.setState({createNoteDialogOpen: !this.state.createNoteDialogOpen})\r\n }\r\n \r\n toggleDeleteNoteDialog = (note = null) => {\r\n \r\n this.setState({deleteNoteDialogOpen: !this.state.deleteNoteDialogOpen, deleteNote: note})\r\n }\r\n\r\n toggleEditNoteDialog = (note = null) => {\r\n let editNoteFormControls = {\r\n title: {\r\n label: 'Name',\r\n placeHolder: 'Equipment behind the meter...',\r\n name: 'title',\r\n value: note.title,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n isRequired: true\r\n },\r\n },\r\n notes: {\r\n label: 'Notes',\r\n placeHolder: '2 chillers, 4 air handlers, 30 VAVs, etc...',\r\n name: 'notes',\r\n value: note.notes,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n isRequired: true\r\n },\r\n },\r\n };\r\n \r\n let editNoteId = note.facilityNoteId;\r\n this.setState({editNoteDialogOpen: !this.state.editNoteDialogOpen, editNoteFormControls, editNoteId})\r\n }\r\n \r\n onCreateOrEditNoteSubmit = (type) => {\r\n \r\n let request = facilityNoteModel;\r\n request.FacilityId = this.props.selectedFacility.facilityId;\r\n \r\n \r\n switch (type) {\r\n case 'create':\r\n if (this.state.createNoteFormIsValid) {\r\n request.Notes = this.state.createNoteFormControls.notes.value;\r\n request.Title = this.state.createNoteFormControls.title.value;\r\n request.FacilityNoteId = null;\r\n this.submitNote(request);\r\n this.setState({createNoteDialogOpen: false});\r\n } else {\r\n this.setState({attemptedCreateNoteSubmit: true})\r\n }\r\n\r\n break;\r\n case 'edit':\r\n if (this.state.editNoteFormIsValid) {\r\n request.Notes = this.state.editNoteFormControls.notes.value;\r\n request.Title = this.state.editNoteFormControls.title.value;\r\n request.FacilityNoteId = this.state.editNoteId;\r\n this.submitNote(request);\r\n this.setState({editNoteDialogOpen: false});\r\n } else {\r\n this.setState({attemptedCreateNoteSubmit: true})\r\n }\r\n\r\n break;\r\n // request.Notes = this.state.editNote.notes;\r\n // request.Title = this.state.editNote.title;\r\n // request.FacilityNoteId = this.state.editNote.facilityNoteId;\r\n // let temp = this.state.editNote;\r\n // this.setState({editNoteDialogOpen: false});\r\n // break;\r\n }\r\n \r\n \r\n };\r\n \r\n submitNote = (request) => {\r\n createOrUpdateFacilityNote(request).then(x => {\r\n getFacilityNotesByFacilityId(this.props.selectedFacility.facilityId).then(response => {\r\n let notes = response.facilityNotes;\r\n this.setState({notes})\r\n })\r\n });\r\n }\r\n \r\n onDeleteNoteSubmit = () => {\r\n let id = this.state.deleteNote;\r\n deleteFacilityNote(this.state.deleteNote.facilityNoteId).then(x => {\r\n getFacilityNotesByFacilityId(this.props.selectedFacility.facilityId).then(response => {\r\n let notes = response.facilityNotes;\r\n this.setState({notes})\r\n })\r\n });;\r\n this.toggleDeleteNoteDialog()\r\n }\r\n\r\n componentDidMount = () => {\r\n const {selectedFacility} = this.props;\r\n if (selectedFacility !== null) {\r\n getFacilityNotesByFacilityId(this.props.selectedFacility.facilityId).then(response => {\r\n let notes = response.facilityNotes;\r\n this.setState({notes, finishedFetchingNotes: true})\r\n })\r\n }\r\n \r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n const {selectedFacility} = this.props;\r\n if (selectedFacility !== null && prevProps.selectedFacility.facilityId !== selectedFacility.facilityId) {\r\n getFacilityNotesByFacilityId(this.props.selectedFacility.facilityId).then(response => {\r\n let notes = response.facilityNotes;\r\n this.setState({notes})\r\n })\r\n }\r\n }\r\n \r\n render() {\r\n const { classes, selectedFacility } = this.props;\r\n return (\r\n \r\n {this.state.notes.length && this.state.finishedFetchingNotes ?\r\n \r\n \r\n add_circleAdd Note\r\n \r\n : null }\r\n \r\n {this.state.notes.length !== 0 ?\r\n : this.state.finishedFetchingNotes ?\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 withStyles(styles)(FacilityNotes)","import moment from 'moment'\r\n\r\nconst getDataFilterMessage = (chartDataFilterForm) => {\r\n let summary = '';\r\n \r\n switch (chartDataFilterForm.chartType) {\r\n case 'load-curve':\r\n summary = getLoadCurveMessage(chartDataFilterForm);\r\n break;\r\n case 'summary-chart':\r\n case 'scatter-plot':\r\n summary = 'Highlight area to zoom in';\r\n break;\r\n case 'zoomable-chart':\r\n summary = 'Values averaged over time period shown';\r\n break;\r\n case 'heat-map':\r\n summary = 'Values averaged over time period shown';\r\n break;\r\n }\r\n \r\n return {\r\n summary,\r\n details: ''\r\n }\r\n \r\n}\r\n\r\nfunction getLoadCurveMessage(chartDataFilterForm) {\r\n let summary = '';\r\n let seriesTypeObject = chartDataFilterForm.seriesTypes.filter(x => x.value === true);\r\n let seriesTypeLabel = seriesTypeObject[0].label;\r\n let seriesPer = '';\r\n switch (chartDataFilterForm.seriesPer) {\r\n case 'day':\r\n seriesPer = 'Day';\r\n break;\r\n case 'month':\r\n seriesPer = 'Month';\r\n break;\r\n case 'dayOfWeek':\r\n seriesPer = 'Day of Week';\r\n break;\r\n case 'week':\r\n seriesPer = 'Week';\r\n break;\r\n case 'year':\r\n seriesPer = 'Year';\r\n break;\r\n case 'allData':\r\n seriesPer = 'All Data';\r\n break;\r\n default:\r\n seriesPer = '';\r\n \r\n }\r\n \r\n let dataType;\r\n switch (chartDataFilterForm.dataType) {\r\n case 'kw':\r\n dataType = 'Demand (kW)';\r\n break;\r\n case 'kwh':\r\n dataType = 'Usage (kWh)';\r\n break;\r\n default:\r\n dataType = '';\r\n\r\n }\r\n \r\n summary = seriesTypeLabel + ' ' + dataType + ' by ' + seriesPer;\r\n return summary\r\n \r\n}\r\n\r\nexport default getDataFilterMessage","import { daysOfWeekGenerator, monthsGenerator, kwAndKwh, seriesTypeGenerator, dataTypesGenerator } from '../../../js/time-constants';\r\nimport {intervalDataRequestObject} from \"../../../services/intervalData.service\";\r\nimport moment from \"moment\";\r\nimport \"moment-timezone\"\r\n\r\nconst masterFormObject = {\r\n chartType: null,\r\n days: null,\r\n months: null,\r\n // years: null,\r\n seriesTypes: null,\r\n dataTypeOptions: null,\r\n dataType: null,\r\n seriesPer: null,\r\n startDate: null,\r\n endDate: null,\r\n startTime: null,\r\n endTime: null\r\n}\r\n\r\nclass ChartDataFilterFormObject {\r\n\r\n constructor(selectedFacility) {\r\n this.facility = selectedFacility;\r\n }\r\n \r\n getDefaultFormByChartType = (chartType) => {\r\n switch (chartType) {\r\n case 'load-curve':\r\n case 'summary-chart':\r\n case 'heat-map':\r\n case 'demand-duration':\r\n case 'zoomable-chart':\r\n case 'calendar-chart':\r\n case 'scatter-plot':\r\n case 'surface-plot':\r\n \r\n return getDefaultForm(chartType, this.facility);\r\n \r\n }\r\n return null\r\n };\r\n \r\n getDefaultLoadCurveFormForCalendarChart = () => {\r\n return loadCurveForCalendarDefaultForm(this.facility);\r\n };\r\n \r\n getDefaultSummaryChartForm = () => {\r\n return summaryChartDefaultForm();\r\n };\r\n \r\n getDefaultHeatMapForm = () => {\r\n return heatmapDefaultForm();\r\n };\r\n \r\n getDefaultZoomableChartForm = () => {\r\n return zoomableChartDefaultForm();\r\n };\r\n \r\n getDefaultDemandDurationForm = () => {\r\n return demandDurationChartDefaultForm();\r\n };\r\n \r\n getDefaultCalendarChartForm = () => {\r\n return calendarChartDefaultForm();\r\n };\r\n \r\n getDefaultScatterPlotForm = () => {\r\n return scatterPlotDefaultForm();\r\n };\r\n \r\n getRequestFromForm = (form, selectedFacility) => {\r\n return getIntervalDataRequestFromForm(form, selectedFacility)\r\n }\r\n}\r\n\r\nexport default ChartDataFilterFormObject;\r\n\r\nfunction getIntervalDataRequestFromForm(form, selectedFacility) {\r\n // Get the days the user selected\r\n let selectedDaysNumbers = [];\r\n if (form.days) {\r\n let selectedDays = form.days.filter(day => day.value === true);\r\n selectedDays.forEach(day => selectedDaysNumbers.push(day.number))\r\n } else {\r\n selectedDaysNumbers = null\r\n }\r\n // Get the months the user selected\r\n let selectedMonthNumbers = [];\r\n if (form.months) {\r\n let selectedMonths = form.months.filter(month => month.value === true);\r\n selectedMonths.forEach(month => selectedMonthNumbers.push(month.number))\r\n } else {\r\n selectedMonthNumbers = null;\r\n }\r\n// Get the years the user selected\r\n let selectedYearNumbers = [];\r\n if (form.years) {\r\n let selectedYears = form.years.filter(year => year.value === true);\r\n selectedYears.forEach(year => selectedYearNumbers.push(year.number))\r\n } else {\r\n selectedYearNumbers = null;\r\n }\r\n // Get the series types the user selected\r\n let seriesTypes = [];\r\n if (form.seriesTypes) {\r\n\r\n form.seriesTypes.forEach(series => {\r\n if (series.value === true)\r\n seriesTypes.push(series.label)\r\n });\r\n } else {\r\n seriesTypes = null;\r\n }\r\n\r\n let request = intervalDataRequestObject;\r\n \r\n switch (form.chartType) {\r\n case 'zoomable-chart':\r\n request.IncludePercent = false;\r\n break;\r\n case 'demand-duration':\r\n request.IncludePercent = true;\r\n break;\r\n case 'heat-map':\r\n request.IntervalDuration = 60;\r\n break;\r\n }\r\n \r\n \r\n request.ProjectId = selectedFacility.projectId;\r\n request.FacilityId = selectedFacility.facilityId;\r\n request.DataType = form.dataType;\r\n request.SeriesPer = form.seriesPer;\r\n request.StartDate = form.startDate;\r\n request.EndDate = form.endDate;\r\n request.StartTime = form.startTime;\r\n request.EndTime = form.endTime;\r\n request.DaysOfWeek = selectedDaysNumbers;\r\n request.Months = selectedMonthNumbers;\r\n request.Years = selectedYearNumbers;\r\n request.SeriesType = seriesTypes;\r\n return request;\r\n}\r\n\r\nfunction getDefaultForm(chartType, facility) {\r\n switch (chartType) {\r\n case 'load-curve':\r\n return loadCurveDefaultForm(facility);\r\n case 'summary-chart':\r\n return summaryChartDefaultForm(facility);\r\n case 'heat-map':\r\n return heatmapDefaultForm(facility);\r\n case 'zoomable-chart':\r\n return zoomableChartDefaultForm(facility);\r\n case 'demand-duration':\r\n return demandDurationChartDefaultForm(facility);\r\n case 'calendar-chart':\r\n return calendarChartDefaultForm(facility);\r\n case 'scatter-plot':\r\n return scatterPlotDefaultForm(facility);\r\n case 'surface-plot':\r\n return surfacePlotDefaultForm(facility)\r\n }\r\n}\r\n\r\nconst loadCurveForCalendarDefaultForm = (facility) => {\r\n let form = loadCurveDefaultForm(facility);\r\n form.seriesPer = 'allData';\r\n return form;\r\n}\r\n\r\nconst loadCurveDefaultForm = (facility) => {\r\n let form = { ...masterFormObject };\r\n\r\n let days = daysOfWeekGenerator();\r\n for (let i = 0; i < days.length; i++) {\r\n days[i].value = true;\r\n }\r\n let months = monthsGenerator();\r\n for (let i = 0; i < months.length; i++) {\r\n months[i].value = true;\r\n }\r\n\r\n let timezone = facility.timezone;\r\n let startYear = moment.tz(facility.intervalDataStartDate, timezone).year();\r\n let endYear = moment.tz(facility.intervalDataEndDate, timezone).year();\r\n let years = [];\r\n for (let i = startYear; i <= endYear; i++) {\r\n years.push({value: true, label: i.toString(), number: i});\r\n }\r\n \r\n \r\n form.chartType = 'load-curve';\r\n form.days = days;\r\n form.months = months;\r\n form.years = years;\r\n form.seriesTypes = seriesTypeGenerator();\r\n form.dataType = 'kw';\r\n form.seriesPer = 'month';\r\n\r\n return form\r\n}\r\n\r\nconst summaryChartDefaultForm = (facility) => {\r\n let form = { ...masterFormObject };\r\n\r\n let days = daysOfWeekGenerator();\r\n for (let i = 0; i < days.length; i++) {\r\n days[i].value = true;\r\n }\r\n let months = monthsGenerator();\r\n for (let i = 0; i < months.length; i++) {\r\n months[i].value = true;\r\n }\r\n\r\n let timezone = facility.timezone;\r\n let startYear = moment.tz(facility.intervalDataStartDate, timezone).year();\r\n let endYear = moment.tz(facility.intervalDataEndDate, timezone).year();\r\n let years = [];\r\n for (let i = startYear; i <= endYear; i++) {\r\n years.push({value: true, label: i.toString(), number: i});\r\n }\r\n\r\n form.chartType = 'summary-chart';\r\n form.days = days;\r\n form.months = months;\r\n form.years = years;\r\n form.seriesTypes = seriesTypeGenerator();\r\n form.dataTypeOptions = dataTypesGenerator();\r\n form.dataType = 'kwh'; // this doesn't matter, backend doesn't look it\r\n form.seriesPer = 'month';\r\n return form;\r\n}\r\n\r\nconst heatmapDefaultForm = (facility) => {\r\n let form = { ...masterFormObject };\r\n\r\n let timezone = facility.timezone;\r\n let startYear = moment.tz(facility.intervalDataStartDate, timezone).year();\r\n let endYear = moment.tz(facility.intervalDataEndDate, timezone).year();\r\n let years = [];\r\n for (let i = startYear; i <= endYear; i++) {\r\n years.push({value: true, label: i.toString(), number: i});\r\n }\r\n \r\n form.years = years;\r\n form.chartType = 'heat-map';\r\n form.dataType = 'kw';\r\n\r\n return form\r\n}\r\n\r\nconst zoomableChartDefaultForm = (facility) => {\r\n let form = { ...masterFormObject };\r\n\r\n form.chartType = 'zoomable-chart';\r\n form.dataType = 'kw';\r\n\r\n return form\r\n}\r\n\r\nconst demandDurationChartDefaultForm = (facility) => {\r\n let form = { ...masterFormObject };\r\n\r\n let months = monthsGenerator();\r\n for (let i = 0; i < months.length; i++) {\r\n months[i].value = true;\r\n }\r\n let timezone = facility.timezone;\r\n let startYear = moment.tz(facility.intervalDataStartDate, timezone).year();\r\n let endYear = moment.tz(facility.intervalDataEndDate, timezone).year();\r\n let years = [];\r\n for (let i = startYear; i <= endYear; i++) {\r\n years.push({value: true, label: i.toString(), number: i});\r\n }\r\n\r\n \r\n form.chartType = 'demand-duration';\r\n form.dataType = 'kw';\r\n form.months = months;\r\n form.years = years;\r\n return form\r\n}\r\n\r\nconst calendarChartDefaultForm = (facility) => {\r\n let form = { ...masterFormObject };\r\n\r\n form.chartType = 'calendar-chart';\r\n form.dataType = 'kw';\r\n\r\n return form\r\n}\r\n\r\n\r\nconst scatterPlotDefaultForm = (facility) => {\r\n let form = { ...masterFormObject };\r\n\r\n let days = daysOfWeekGenerator();\r\n for (let i = 0; i < days.length; i++) {\r\n days[i].value = true;\r\n }\r\n let months = monthsGenerator();\r\n for (let i = 0; i < months.length; i++) {\r\n months[i].value = true;\r\n }\r\n\r\n let timezone = facility.timezone;\r\n let startYear = moment.tz(facility.intervalDataStartDate, timezone).year();\r\n let endYear = moment.tz(facility.intervalDataEndDate, timezone).year();\r\n let years = [];\r\n for (let i = startYear; i <= endYear; i++) {\r\n years.push({value: true, label: i.toString(), number: i});\r\n }\r\n \r\n form.chartType = 'scatter-plot';\r\n form.dataType = 'kw';\r\n form.days = days;\r\n form.months = months;\r\n form.years = years;\r\n return form\r\n}\r\n\r\nconst surfacePlotDefaultForm = (facility) => {\r\n let form = { ...masterFormObject };\r\n\r\n let days = daysOfWeekGenerator();\r\n for (let i = 0; i < days.length; i++) {\r\n days[i].value = true;\r\n }\r\n let months = monthsGenerator();\r\n for (let i = 0; i < months.length; i++) {\r\n months[i].value = true;\r\n }\r\n\r\n let timezone = facility.timezone;\r\n let startYear = moment.tz(facility.intervalDataStartDate, timezone).year();\r\n let endYear = moment.tz(facility.intervalDataEndDate, timezone).year();\r\n let years = [];\r\n for (let i = startYear; i <= endYear; i++) {\r\n years.push({value: true, label: i.toString(), number: i});\r\n }\r\n\r\n\r\n form.chartType = 'surface-plot';\r\n form.days = days;\r\n form.months = months;\r\n form.years = years;\r\n form.seriesTypes = seriesTypeGenerator();\r\n form.dataType = 'kw';\r\n form.seriesPer = 'day';\r\n\r\n return form\r\n}\r\n\r\n","\r\nconst daysOfWeekGenerator = () => [\r\n {\r\n value: true,\r\n label: \"S\",\r\n number: 1\r\n },\r\n {\r\n value: false,\r\n label: \"M\",\r\n number: 2\r\n },\r\n {\r\n value: false,\r\n label: \"T\",\r\n number: 3\r\n },\r\n {\r\n value: false,\r\n label: \"W\",\r\n number: 4\r\n },\r\n {\r\n value: false,\r\n label: \"T\",\r\n number: 5\r\n },\r\n {\r\n value: false,\r\n label: \"F\",\r\n number: 6\r\n },\r\n {\r\n value: false,\r\n label: \"S\",\r\n number: 7\r\n },\r\n];\r\n\r\nconst monthsGenerator = () => [\r\n {\r\n value: true,\r\n label: \"Jan\",\r\n number: 1\r\n },\r\n {\r\n value: true,\r\n label: \"Feb\",\r\n number: 2\r\n },\r\n {\r\n value: false,\r\n label: \"Mar\",\r\n number: 3\r\n },\r\n {\r\n value: false,\r\n label: \"Apr\",\r\n number: 4\r\n },\r\n {\r\n value: false,\r\n label: \"May\",\r\n number: 5\r\n },\r\n {\r\n value: false,\r\n label: \"Jun\",\r\n number: 6\r\n },\r\n {\r\n value: false,\r\n label: \"Jul\",\r\n number: 7\r\n },\r\n {\r\n value: false,\r\n label: \"Aug\",\r\n number: 8\r\n },\r\n {\r\n value: false,\r\n label: \"Sep\",\r\n number: 9\r\n },\r\n {\r\n value: false,\r\n label: \"Oct\",\r\n number: 10\r\n },\r\n {\r\n value: false,\r\n label: \"Nov\",\r\n number: 11\r\n },\r\n {\r\n value: false,\r\n label: \"Dec\",\r\n number: 12\r\n },\r\n];\r\n\r\nconst seriesTypeGenerator = () => [\r\n {\r\n value: true,\r\n label: \"Average\",\r\n shortLabel: \"Avg\"\r\n },\r\n {\r\n value: false,\r\n label: \"Maximum\",\r\n shortLabel: \"Max\"\r\n },\r\n {\r\n value: false,\r\n label: \"Minimum\",\r\n shortLabel: \"Min\"\r\n },\r\n];\r\n\r\nconst dataTypesGenerator = () => [\r\n {\r\n value: false,\r\n label: \"Min kW\",\r\n name: \"minKw\"\r\n },\r\n {\r\n value: false,\r\n label: \"Avg kW\",\r\n name: \"avgKw\"\r\n },\r\n {\r\n value: true,\r\n label: \"Max kW\",\r\n name: \"maxKw\"\r\n },\r\n {\r\n value: false,\r\n label: \"Min kWh\",\r\n name: \"minKwh\"\r\n },\r\n {\r\n value: false,\r\n label: \"Avg kWh\",\r\n name: \"avgKwh\"\r\n },\r\n {\r\n value: false,\r\n label: \"Max kWh\",\r\n name: \"maxKwh\"\r\n },\r\n \r\n \r\n {\r\n value: true,\r\n label: \"Sum kWh\",\r\n name: \"sumKwh\"\r\n },\r\n {\r\n value: true,\r\n label: \"Load Factor\",\r\n name: \"loadFactor\"\r\n },\r\n];\r\n\r\n\r\n\r\n\r\n\r\nexport { daysOfWeekGenerator, monthsGenerator, seriesTypeGenerator, dataTypesGenerator}","import {loadCurveOptions} from \"../generateDefaultChartOptions\";\r\nimport createHandsontableSettingsFromData from \"../createHandsontableSettingsFromData\";\r\nimport moment from \"moment\";\r\n\r\nclass LoadCurveData {\r\n constructor(data) {\r\n this.data = data;\r\n\r\n }\r\n \r\n generateChartOptions = (dataType, timezone) => {\r\n return loadCurveOptions(this.data, dataType, timezone)\r\n }\r\n \r\n generateSurfacePlotOptions = (dataType, intervalDuration) => {\r\n let y = [];\r\n let z = [];\r\n let intervalsPerDay = 1440 / intervalDuration;\r\n // The chart doesn't seem to work unless the first z array has the full correct number in the array, so shift() the first data if it doesn't match\r\n \r\n let formattedData = [...this.data];\r\n let firstIsGood = formattedData[0].data.length === intervalsPerDay;\r\n while (!firstIsGood) {\r\n formattedData.shift();\r\n firstIsGood = formattedData[0].data.length === intervalsPerDay;\r\n }\r\n formattedData.forEach(interval => {\r\n\r\n y.push(interval.name);\r\n let zData = [];\r\n interval.data.forEach(array => zData.push(array[1]));\r\n z.push(zData);\r\n\r\n });\r\n\r\n let start = moment().hour(0).minutes(0).seconds(0).millisecond(0);\r\n let x = [];\r\n \r\n for (let i = 1; i <= intervalsPerDay; i++) {\r\n x.push(start.clone().add(i * intervalDuration, 'minutes').format(\"HH:mm\"))\r\n }\r\n\r\n\r\n let colorscale = [\r\n [0, '#003d99'],\r\n [0.2, '#66a3ff'],\r\n [0.4, '#63BE7B'],\r\n [0.6, '#fae052'],\r\n [0.8, '#f40b0f'],\r\n [1, '#b30000']\r\n ];\r\n\r\n\r\n // https://plot.ly/javascript/reference/#surface\r\n // https://plot.ly/javascript/configuration-options/\r\n\r\n let data = [{\r\n x: x,\r\n y: y,\r\n z: z,\r\n colorscale: colorscale,\r\n type: 'surface'\r\n }];\r\n let layout = {\r\n autosize: true,\r\n\r\n // width: 1300,\r\n height: 600,\r\n scene: {\r\n xaxis: {\r\n title: 'Time',\r\n name: 'Time'\r\n },\r\n yaxis: {\r\n title: ' '\r\n },\r\n zaxis: {\r\n title: dataType === 'kw' ? 'Demand (kW)' : 'Consumption (kWh)'\r\n },\r\n aspectmode: 'manual',\r\n aspectratio: {x: 4, y: 4, z: 2},\r\n domain: {\r\n x: [0.00, 3],\r\n y: [0, 3],\r\n z: [0, 6]\r\n },\r\n camera: {\r\n center: {\r\n x: 0, y: 0, z: 0 },\r\n eye: {\r\n x: 2, y: 2, z: 2 },\r\n up: {\r\n x: 0, y: 0, z: 2 }\r\n },\r\n },\r\n margin: {\r\n l: 10,\r\n r: 10,\r\n b: 10,\r\n t: 15,\r\n }\r\n };\r\n let config = {\r\n responsive: true,\r\n displaylogo: false\r\n }\r\n return {data, layout, config}\r\n }\r\n\r\n generateHandsontableSettings = (intervalDuration) => {\r\n return createHandsontableSettingsFromData(this.data, 'load-curve', null, intervalDuration )\r\n }\r\n\r\n}\r\n\r\nexport default LoadCurveData;\r\n\r\n\r\n","import {heatMapOptions} from \"../generateDefaultChartOptions\";\r\nimport createHandsontableSettingsFromData from \"../createHandsontableSettingsFromData\";\r\n\r\nconst _formatDataForHeatMap = new WeakMap();\r\n\r\nclass HeatMapData {\r\n constructor(data) {\r\n this.data = data;\r\n\r\n _formatDataForHeatMap.set(this, (dataType) => {\r\n // let temp = this.data;\r\n \r\n let data = [];\r\n if (dataType === 'kwh') {\r\n this.data.forEach(interval => {\r\n data.push([interval.dayTimestamp, interval.minutes, interval.kWh])\r\n });\r\n } else {\r\n this.data.forEach(interval => {\r\n data.push([interval.dayTimestamp, interval.minutes, interval.kW])\r\n });\r\n }\r\n // debugger;\r\n return data;\r\n })\r\n }\r\n \r\n generateChartOptions = (dataType = \"kw\", durationView, intervalDuration = 15) => {\r\n let data = _formatDataForHeatMap.get(this)(dataType);\r\n // debugger;\r\n return heatMapOptions(data, durationView, intervalDuration, dataType);\r\n };\r\n\r\n generateHandsontableSettings = (dataType) => {\r\n let data = _formatDataForHeatMap.get(this)(dataType);\r\n return createHandsontableSettingsFromData(data, 'heat-map', dataType)\r\n }\r\n\r\n}\r\n\r\nexport default HeatMapData;\r\n\r\n","const INTERVAL_DATA_RECEIVED = 'INTERVAL_DATA_RECEIVED'\r\nconst TIMESTAMP_DATA_RECEIVED = 'TIMESTAMP_DATA_RECEIVED'\r\nconst HEATMAP_DATA_RECEIVED = 'HEATMAP_DATA_RECEIVED'\r\nconst CLEAR_INTERVAL_DATA = \"CLEAR_INTERVAL_DATA\"\r\nconst DEMAND_DURATION_DATA_RECEIVED = 'DEMAND_DURATION_DATA_RECEIVED'\r\nconst CALENDAR_CHART_DATA_RECEIVED = 'CALENDAR_CHART_DATA_RECEIVED'\r\nconst SURFACE_PLOT_DATA_RECEIVED = \"SURFACE_PLOT_DATA_RECEIVED\"\r\nconst LOAD_CURVE_DATA_RECIEVED = \"LOAD_CURVE_DATA_RECIEVED\"\r\nconst SUMMARY_CHART_DATA_RECIEVED = \"SUMMARY_CHART_DATA_RECIEVED\"\r\n\r\nconst addIntervalDataToState = (data) => {\r\n return {\r\n type: INTERVAL_DATA_RECEIVED,\r\n payload: data\r\n };\r\n};\r\n\r\nconst addTimeStampDataToState = (data) => {\r\n return {\r\n type: TIMESTAMP_DATA_RECEIVED,\r\n payload: data\r\n };\r\n};\r\n\r\nconst addDemandDurationDataToState = (data) => {\r\n return {\r\n type: DEMAND_DURATION_DATA_RECEIVED,\r\n payload: data\r\n };\r\n};\r\n\r\nconst addHeatmapDataToState = (data) => {\r\n debugger;\r\n return {\r\n type: HEATMAP_DATA_RECEIVED,\r\n payload: data\r\n };\r\n};\r\n\r\nconst addCalendarChartDataToState = (data) => {\r\n\r\n return {\r\n type: CALENDAR_CHART_DATA_RECEIVED,\r\n payload: data\r\n };\r\n};\r\n\r\nconst addLoadCurveDataToState = (data) => {\r\n\r\n return {\r\n type: LOAD_CURVE_DATA_RECIEVED,\r\n payload: data\r\n };\r\n};\r\n\r\nconst addSummaryChartDataToState = (data) => {\r\n\r\n return {\r\n type: SUMMARY_CHART_DATA_RECIEVED,\r\n payload: data\r\n };\r\n};\r\n\r\nconst clearIntervalData = (chartType) => {\r\n return {\r\n type: CLEAR_INTERVAL_DATA,\r\n payload: chartType\r\n };\r\n};\r\n\r\nconst addSurfacePlotDataToState = (data) => {\r\n\r\n return {\r\n type: SURFACE_PLOT_DATA_RECEIVED,\r\n payload: data\r\n };\r\n};\r\n\r\n\r\nexport {\r\n addIntervalDataToState,\r\n addTimeStampDataToState,\r\n addHeatmapDataToState,\r\n clearIntervalData,\r\n addDemandDurationDataToState,\r\n addCalendarChartDataToState,\r\n addSurfacePlotDataToState,\r\n addLoadCurveDataToState,\r\n addSummaryChartDataToState,\r\n INTERVAL_DATA_RECEIVED,\r\n TIMESTAMP_DATA_RECEIVED,\r\n HEATMAP_DATA_RECEIVED,\r\n CLEAR_INTERVAL_DATA,\r\n DEMAND_DURATION_DATA_RECEIVED,\r\n CALENDAR_CHART_DATA_RECEIVED,\r\n SURFACE_PLOT_DATA_RECEIVED,\r\n LOAD_CURVE_DATA_RECIEVED,\r\n SUMMARY_CHART_DATA_RECIEVED\r\n}","import getDataFilterMessage from \"../../FacilityHome/components/DataFilterForm/getDataFilterMessage\";\r\n\r\nimport {\r\n getIntervalDataCalendarChartByFacilityId,\r\n getIntervalDataHeatmapByFacilityId,\r\n getIntervalDataLoadCurveByFacilityId,\r\n getIntervalDataSummaryChartByFacilityId, getIntervalDataTimestampByFacilityId\r\n} from \"../../services/intervalData.service\";\r\n\r\nimport ChartDataFilterFormObject from \"../../FacilityHome/components/DataFilterForm/ChartDataFilterFormObject\";\r\nimport LoadCurveData from \"../../js/CustomDataClasses/LoadCurveData\";\r\nimport SummaryChartData from \"../../js/CustomDataClasses/SummaryChartData\";\r\nimport HeatMapData from \"../../js/CustomDataClasses/HeatMapData\";\r\nimport TimeSeriesData from \"../../js/CustomDataClasses/TimeSeriesData\";\r\n\r\nimport {\r\n CALENDAR_CHART_DATA_RECEIVED, \r\n TIMESTAMP_DATA_RECEIVED,\r\n HEATMAP_DATA_RECEIVED\r\n} from \"./interval-data-actions\";\r\n\r\nconst SET_CHART_DATA_FILTER_FORM_OBJECT = 'SET_CHART_DATA_FILTER_FORM_OBJECT';\r\nconst SET_CHART_OPTIONS = 'SET_CHART_OPTIONS';\r\nconst SET_PLOTLY_CHART_OPTIONS = 'SET_PLOTLY_CHART_OPTIONS';\r\nconst SET_CHART_TABLE_SETTINGS = 'SET_CHART_TABLE_SETTINGS';\r\nconst SET_DATA_FILTER_MESSAGE = 'SET_DATA_FILTER_MESSAGE';\r\nconst SET_CHART_CAN_UPDATE_DATA = 'SET_CHART_CAN_UPDATE_DATA';\r\nconst ON_DATA_FILTER_FORM_SUBMIT = 'ON_DATA_FILTER_FORM_SUBMIT';\r\nconst SET_DURATION_VIEW = 'SET_DURATION_VIEW';\r\nconst SET_TEMPERATURE_VIEW = 'SET_TEMPERATURE_VIEW';\r\nconst SET_SHOW_METER_DATES_AND_RANGES = 'SET_SHOW_METER_DATES_AND_RANGES';\r\n\r\n\r\nconst setChartDataFilterFormObject = (form) => {\r\n return {\r\n type: SET_CHART_DATA_FILTER_FORM_OBJECT,\r\n payload: form\r\n };\r\n};\r\n\r\nconst setChartOptions = (chartOptions) => {\r\n return {\r\n type: SET_CHART_OPTIONS,\r\n payload: chartOptions\r\n };\r\n};\r\n\r\nconst setChartTableSettings = (settings) => {\r\n return {\r\n type: SET_CHART_TABLE_SETTINGS,\r\n payload: settings\r\n };\r\n};\r\n\r\nconst setDataFilterMessage = (message) => {\r\n return {\r\n type: SET_DATA_FILTER_MESSAGE,\r\n payload: message\r\n };\r\n};\r\n\r\nconst setChartCanUpdateData = (boolean) => {\r\n return {\r\n type: SET_CHART_CAN_UPDATE_DATA,\r\n payload: boolean\r\n };\r\n};\r\n\r\nconst setDurationView = (view) => {\r\n return {\r\n type: SET_DURATION_VIEW,\r\n payload: view\r\n };\r\n};\r\n\r\nconst setTemperatureView = (boolean) => {\r\n return {\r\n type: SET_TEMPERATURE_VIEW,\r\n payload: boolean\r\n };\r\n};\r\n\r\nconst setShowMeterDatesAndRanges = (boolean) => {\r\n return {\r\n type: SET_SHOW_METER_DATES_AND_RANGES,\r\n payload: boolean\r\n };\r\n};\r\n\r\n\r\n\r\nconst onDataFilterFormSubmit = () => {\r\n return (dispatch, getState) => {\r\n const {\r\n facilities, \r\n selectedFacility, \r\n chartDataFilterFormObject,\r\n selectedChartView,\r\n selectedFacilitySubview,\r\n durationView\r\n } = getState();\r\n\r\n // clear chart options\r\n dispatch({\r\n type: SET_CHART_OPTIONS,\r\n payload: null\r\n });\r\n dispatch({\r\n type: SET_PLOTLY_CHART_OPTIONS,\r\n payload: null\r\n });\r\n \r\n let chartDataFilterForm;\r\n if (selectedFacilitySubview === chartDataFilterFormObject.chartType) {\r\n chartDataFilterForm = {...chartDataFilterFormObject};\r\n } else {\r\n // let temp = selectedFacility;\r\n let form = new ChartDataFilterFormObject(selectedFacility);\r\n chartDataFilterForm = form.getDefaultFormByChartType(selectedFacilitySubview)\r\n }\r\n \r\n dispatch({\r\n type: SET_CHART_DATA_FILTER_FORM_OBJECT,\r\n payload: chartDataFilterForm\r\n });\r\n\r\n \r\n // if (chartDataFilterForm !== null) {\r\n // this.props.clearIntervalData(chartDataFilterForm.chartType);\r\n // this.setState({chartOptions: null})\r\n // }\r\n\r\n\r\n let dataFilterMessage = getDataFilterMessage(chartDataFilterForm);\r\n \r\n dispatch({\r\n type: SET_DATA_FILTER_MESSAGE,\r\n payload: dataFilterMessage\r\n });\r\n\r\n let request = new ChartDataFilterFormObject(selectedFacility).getRequestFromForm(chartDataFilterForm, selectedFacility);\r\n\r\n // this.setState({chartDataFilterFormHasChanged: false, chartCanUpdateData: true});\r\n\r\n let chartOptions;\r\n let chartTableSettings;\r\n switch (chartDataFilterForm.chartType) {\r\n case 'load-curve':\r\n getIntervalDataLoadCurveByFacilityId(request).then(data => {\r\n // that that user still hasn't changed the view before response came back\r\n if (selectedFacilitySubview === 'load-curve' && data.length > 0) {\r\n // this.props.addLoadCurveDataToState(data);\r\n let loadCurveData = new LoadCurveData(data);\r\n chartOptions = loadCurveData.generateChartOptions(chartDataFilterForm.dataType, selectedFacility.timezone);\r\n chartTableSettings = loadCurveData.generateHandsontableSettings(selectedFacility.intervalDuration);\r\n dispatch({\r\n type: SET_CHART_OPTIONS,\r\n payload: chartOptions\r\n });\r\n dispatch({\r\n type: SET_CHART_TABLE_SETTINGS,\r\n payload: chartTableSettings\r\n });\r\n }\r\n\r\n });\r\n break;\r\n case 'surface-plot':\r\n getIntervalDataLoadCurveByFacilityId(request).then(data => {\r\n // that that user still hasn't changed the view before response came back\r\n if (selectedFacilitySubview === 'surface-plot' && data.length > 0) {\r\n // this.props.addLoadCurveDataToState(data);\r\n let loadCurveData = new LoadCurveData(data);\r\n chartOptions = loadCurveData.generateSurfacePlotOptions(chartDataFilterForm.dataType, selectedFacility.intervalDuration);\r\n chartTableSettings = loadCurveData.generateHandsontableSettings(selectedFacility.intervalDuration);\r\n\r\n dispatch({\r\n type: SET_PLOTLY_CHART_OPTIONS,\r\n payload: chartOptions\r\n });\r\n dispatch({\r\n type: SET_CHART_TABLE_SETTINGS,\r\n payload: chartTableSettings\r\n });\r\n }\r\n\r\n });\r\n break;\r\n case 'summary-chart':\r\n getIntervalDataSummaryChartByFacilityId(request).then(data => {\r\n if (selectedFacilitySubview === 'summary-chart') {\r\n // this.props.addSummaryChartDataToState(data);\r\n let summaryChartData = new SummaryChartData(data);\r\n\r\n let requestedDataPointsTemp = chartDataFilterForm.dataTypeOptions.filter(x => x.value === true);\r\n let requestedDataPoints = [];\r\n requestedDataPointsTemp.forEach(x => requestedDataPoints.push(x.name));\r\n\r\n chartOptions = summaryChartData.generateChartOptions(requestedDataPoints);\r\n chartTableSettings = summaryChartData.generateHandsontableSettings();\r\n // this.setState({ chartOptions, chartTableSettings });\r\n dispatch({\r\n type: SET_CHART_OPTIONS,\r\n payload: chartOptions\r\n });\r\n dispatch({\r\n type: SET_CHART_TABLE_SETTINGS,\r\n payload: chartTableSettings\r\n });\r\n }\r\n\r\n });\r\n break;\r\n case 'heat-map':\r\n //todo: add to formdata, make optional\r\n request.IntervalDuration = 60;\r\n getIntervalDataHeatmapByFacilityId(request).then(response => {\r\n if (selectedFacilitySubview === 'heat-map') {\r\n // this.props.addHeatmapDataToState(response);\r\n let heatMapData = new HeatMapData(response);\r\n dispatch({\r\n type: HEATMAP_DATA_RECEIVED,\r\n payload: heatMapData\r\n });\r\n chartOptions = heatMapData.generateChartOptions(chartDataFilterForm.dataType, durationView);\r\n chartTableSettings = heatMapData.generateHandsontableSettings(chartDataFilterForm.dataType);\r\n dispatch({\r\n type: SET_CHART_OPTIONS,\r\n payload: chartOptions\r\n });\r\n dispatch({\r\n type: SET_CHART_TABLE_SETTINGS,\r\n payload: chartTableSettings\r\n });\r\n }\r\n });\r\n break;\r\n case 'calendar-chart':\r\n getIntervalDataCalendarChartByFacilityId(request).then(data => {\r\n dispatch({\r\n type: CALENDAR_CHART_DATA_RECEIVED,\r\n payload: data\r\n });\r\n });\r\n break;\r\n case 'zoomable-chart':\r\n request.IncludePercent = false;\r\n getIntervalDataTimestampByFacilityId(request).then(data => {\r\n if (selectedFacilitySubview === 'zoomable-chart') {\r\n let timezone = selectedFacility.timezone;\r\n let timeSeriesData = new TimeSeriesData(data, timezone);\r\n dispatch({\r\n type: TIMESTAMP_DATA_RECEIVED,\r\n payload: timeSeriesData\r\n });\r\n \r\n // this.props.addTimeStampDataToState(timeSeriesData);\r\n chartOptions = timeSeriesData.generateZoomableChartOptions(chartDataFilterForm.dataType, timezone);\r\n chartTableSettings = timeSeriesData.generateTimeSeriesHandsontableSettings(timezone);\r\n // this.setState({ chartOptions, chartTableSettings });\r\n dispatch({\r\n type: SET_CHART_OPTIONS,\r\n payload: chartOptions\r\n });\r\n dispatch({\r\n type: SET_CHART_TABLE_SETTINGS,\r\n payload: chartTableSettings\r\n });\r\n }\r\n });\r\n break;\r\n case 'demand-duration':\r\n request.IncludePercent = true;\r\n getIntervalDataTimestampByFacilityId(request).then(response => {\r\n if (selectedFacilitySubview === 'demand-duration') {\r\n let timezone = selectedFacility.timezone;\r\n let timeSeriesData = new TimeSeriesData(response, timezone);\r\n // this.props.addDemandDurationDataToState(response);\r\n chartOptions = timeSeriesData.generateDemandDurationChartOptions();\r\n chartTableSettings = timeSeriesData.generateDemandDurationHandsontableSettings();\r\n // this.setState({ chartOptions, chartTableSettings });\r\n dispatch({\r\n type: SET_CHART_OPTIONS,\r\n payload: chartOptions\r\n });\r\n dispatch({\r\n type: SET_CHART_TABLE_SETTINGS,\r\n payload: chartTableSettings\r\n });\r\n }\r\n });\r\n break;\r\n case 'scatter-plot':\r\n request.IncludePercent = false;\r\n getIntervalDataTimestampByFacilityId(request).then(data => {\r\n if (selectedFacilitySubview === 'scatter-plot') {\r\n let timezone = selectedFacility.timezone;\r\n let timeSeriesData = new TimeSeriesData(data, timezone);\r\n dispatch({\r\n type: TIMESTAMP_DATA_RECEIVED,\r\n payload: timeSeriesData\r\n });\r\n // this.props.addTimeStampDataToState(timeSeriesData);\r\n chartOptions = timeSeriesData.generateScatterPlotChartOptions(chartDataFilterForm.dataType, durationView, selectedFacility.timezone, selectedFacility.intervalDuration);\r\n chartTableSettings = timeSeriesData.generateTimeSeriesHandsontableSettings(selectedFacility.timezone);\r\n // this.setState({ chartOptions, chartTableSettings });\r\n dispatch({\r\n type: SET_CHART_OPTIONS,\r\n payload: chartOptions\r\n });\r\n dispatch({\r\n type: SET_CHART_TABLE_SETTINGS,\r\n payload: chartTableSettings\r\n });\r\n }\r\n\r\n });\r\n break;\r\n }\r\n }\r\n};\r\n\r\n\r\nexport {\r\n setChartDataFilterFormObject,\r\n setChartOptions,\r\n setChartTableSettings,\r\n setDataFilterMessage,\r\n setChartCanUpdateData,\r\n onDataFilterFormSubmit,\r\n setDurationView,\r\n setTemperatureView,\r\n setShowMeterDatesAndRanges,\r\n SET_CHART_DATA_FILTER_FORM_OBJECT,\r\n SET_CHART_OPTIONS,\r\n SET_PLOTLY_CHART_OPTIONS,\r\n SET_CHART_TABLE_SETTINGS,\r\n SET_DATA_FILTER_MESSAGE,\r\n SET_CHART_CAN_UPDATE_DATA,\r\n ON_DATA_FILTER_FORM_SUBMIT,\r\n SET_DURATION_VIEW,\r\n SET_TEMPERATURE_VIEW,\r\n SET_SHOW_METER_DATES_AND_RANGES\r\n};\r\n\r\n","const TOGGLE_SHOW_PEAK_DEMAND = 'TOGGLE_SHOW_PEAK_DEMAND';\r\nconst SET_CALENDAR_CHART_TEMPERATURE_VIEW = 'SET_CALENDAR_CHART_TEMPERATURE_VIEW';\r\n\r\nconst toggleCalendarChartShowPeakDemand = (boolean) => {\r\n return {\r\n type: TOGGLE_SHOW_PEAK_DEMAND,\r\n payload: boolean\r\n };\r\n};\r\n\r\nconst toggleCalendarChartShowTemperature = (boolean) => {\r\n return {\r\n type: SET_CALENDAR_CHART_TEMPERATURE_VIEW,\r\n payload: boolean\r\n };\r\n};\r\n\r\nexport {\r\n TOGGLE_SHOW_PEAK_DEMAND,\r\n SET_CALENDAR_CHART_TEMPERATURE_VIEW,\r\n toggleCalendarChartShowPeakDemand,\r\n toggleCalendarChartShowTemperature\r\n};\r\n","\r\nfunction timeOfDayMatch(y, x) {\r\n // moment was giving me a hard time with the time zones and matching times. So this function uses the unix timestamp (in milliseconds) and \r\n // tells you if two different values are the same time of day (does 12:15AM === 12:15AM). there are 86400000 milliseconds per day, so finding\r\n // the remainder of dividing by 86,400,000 will return the milliseconds from midnight, and you can compare those two to match the time of the day\r\n \r\n if (x % 86400000 === y % 86400000) {\r\n return y\r\n }\r\n}\r\n\r\nexport {timeOfDayMatch}","import React from 'react'\r\nimport Highcharts from 'highcharts'\r\nimport HighchartsReact from 'highcharts-react-official'\r\nimport {timeOfDayMatch} from \"./jsFunctions\";\r\nimport moment from 'moment'\r\nimport 'moment-timezone'\r\n\r\nwindow.moment = moment;\r\n\r\nconst getOptions = (highchartSeries, peakDemand, showPeakDemand, timezone) => {\r\n \r\n if (!showPeakDemand) {\r\n peakDemand = null;\r\n }\r\n\r\n return {\r\n chart: {\r\n height: 100,\r\n style: {\r\n fontFamily: \"Roboto\"\r\n }\r\n },\r\n time: {\r\n timezone: timezone\r\n },\r\n title: {\r\n text: ''\r\n },\r\n xAxis: {\r\n crosshair: true,\r\n //labels: {\r\n // enabled: false\r\n //},\r\n dateTimeLabelFormats: {\r\n hour: \"%H:%M\"\r\n },\r\n type: 'datetime',\r\n labels: {\r\n enabled: false\r\n }\r\n },\r\n yAxis: [{\r\n max: peakDemand,\r\n title: {\r\n text: ''\r\n },\r\n labels: {\r\n enabled: false\r\n },\r\n plotLines: [{\r\n color: '#74cc79',\r\n width: 2,\r\n value: peakDemand,\r\n dashStyle: 'dash'\r\n }]\r\n }, {\r\n title: {\r\n text: ''\r\n },\r\n opposite: true,\r\n labels: {\r\n enabled: false\r\n }\r\n }],\r\n legend: {\r\n enabled: false\r\n },\r\n tooltip: {\r\n // headerFormat: '',\r\n // pointFormat: '' +\r\n // '',\r\n // footerFormat: '
    Time: {point.key: %b %e, %H:%M}
    {series.name}: {point.y:.2f} kW
    ',\r\n formatter: function() {\r\n let point = this;\r\n let dateTimeMoment = moment.tz(this.x, timezone)\r\n let dayOfWeek = dateTimeMoment.format('dddd');\r\n let date = dateTimeMoment.format('MMM D, YYYY');\r\n let time = dateTimeMoment.format('h:mm A')\r\n let color;\r\n let timeString = 'TIME';\r\n if (point.y >= 0) {\r\n color = point.points[0].series.color;\r\n } else {\r\n color = 'rgba(76, 175, 80, 1)'\r\n }\r\n let color2 = 'rgb(255, 0, 0, 0.5)';\r\n let line = ' ';\r\n let tempLine = ' ';\r\n\r\n let final = '
    ' + dayOfWeek +'
    ' + '
    ' + date +'
    ' + '
    ' + time +'
    ' +\r\n '
    ' + point.y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ' ' + 'kW
    ';\r\n if (highchartSeries.filter(x => x.name === 'Temperature').length !== 0) {\r\n if (point.points.length > 1) {\r\n final += '
    ' + point.points[1].y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + '°F
    '\r\n }\r\n }\r\n return final\r\n },\r\n shared: true,\r\n useHTML: true,\r\n outside: true\r\n },\r\n plotOptions: {\r\n column: {\r\n pointPadding: 0.1,\r\n borderWidth: 0\r\n },\r\n area: {\r\n // lineWidth: 1,\r\n states: {\r\n hover: {\r\n lineWidth: 1\r\n }\r\n },\r\n // threshold: null\r\n },\r\n series: {\r\n marker: {\r\n enabled: false\r\n },\r\n }\r\n },\r\n\r\n exporting: {\r\n enabled: false,\r\n },\r\n series: highchartSeries,\r\n credits: {\r\n enabled: false\r\n }\r\n }\r\n \r\n}\r\n\r\nexport default function HighchartForCalendarChartMonthView(props) {\r\n const { series, tempSeries, peakDemand, showPeakDemand, comparisonLoadCurveData, showComparisonLoadCurve, isLastDay, selectedFacility, temperatureView } = props;\r\n let averageSeries = [];\r\n if (showComparisonLoadCurve) {\r\n series.forEach(x => {\r\n // let temp = comparisonLoadCurveData.filter(y => moment(x[0]).minutes() + moment(x[0]).hours()*60 === moment(y[0]).minutes() + moment(y[0]).hours()*60);\r\n let temp = comparisonLoadCurveData.filter(y => timeOfDayMatch(y[0], x[0]));\r\n if (temp.length !== 0) {\r\n averageSeries.push([x[0], temp[0][1]])\r\n }\r\n });\r\n }\r\n\r\n let highchartSeries = [\r\n {\r\n name: 'Demand',\r\n type: 'area',\r\n data: series,\r\n negativeColor: true,\r\n negativeFillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 1,\r\n x2: 0,\r\n y2: 0\r\n },\r\n stops: [\r\n [0, 'rgba(76, 175, 80, 1)'],\r\n [1, 'rgba(76, 175, 80, 0)']\r\n ]\r\n },\r\n fillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 0,\r\n x2: 0,\r\n y2: 1\r\n },\r\n stops: [\r\n [0, Highcharts.getOptions().colors[0]],\r\n [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\r\n ]\r\n },\r\n }, \r\n {\r\n name: 'Average',\r\n data: averageSeries,\r\n fillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 0,\r\n x2: 0,\r\n y2: 0\r\n },\r\n stops: [\r\n [0, Highcharts.getOptions().colors[0]],\r\n [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\r\n ]\r\n },\r\n }, \r\n ];\r\n \r\n if (props.temperatureView) {\r\n highchartSeries.push({\r\n name: 'Temperature',\r\n data: tempSeries,\r\n yAxis: 1,\r\n color: 'rgb(255, 0, 0, 0.5)',\r\n dashStyle: 'ShortDot'\r\n })\r\n }\r\n let options = getOptions(highchartSeries, peakDemand, showPeakDemand, selectedFacility.timezone);\r\n\r\n return ()\r\n\r\n \r\n}\r\n \r\n\r\n\r\n","import React from 'react'\r\nimport Highcharts from 'highcharts'\r\nimport HighchartsReact from 'highcharts-react-official'\r\nimport highchartsExporting from \"highcharts/modules/exporting\";\r\nimport {timeOfDayMatch} from \"./jsFunctions\";\r\nimport moment from 'moment'\r\nimport 'moment-timezone'\r\n\r\nwindow.moment = moment;\r\n\r\nhighchartsExporting(Highcharts);\r\n\r\nconst getOptions = (highchartSeries, peakDemand, showPeakDemand, timezone) => {\r\n\r\n if (!showPeakDemand) {\r\n peakDemand = null;\r\n }\r\n \r\n const getTempTitle = () => {\r\n return '
    Temperature
    ';\r\n }\r\n\r\n return {\r\n chart: {\r\n // type: 'area',\r\n // height: 100,\r\n style: {\r\n fontFamily: \"Roboto\"\r\n }\r\n },\r\n time: {\r\n timezone: timezone \r\n },\r\n title: {\r\n text: ''\r\n },\r\n xAxis: {\r\n crosshair: true,\r\n dateTimeLabelFormats: {\r\n hour: \"%H:%M\"\r\n },\r\n type: 'datetime',\r\n labels: {\r\n enabled: true\r\n }\r\n },\r\n yAxis: [{\r\n // min: 0,\r\n max: peakDemand,\r\n title: {\r\n text: 'Demand (kW)'\r\n },\r\n // labels: {\r\n // enabled: true\r\n // },\r\n plotLines: [{\r\n color: '#74cc79',\r\n width: 2,\r\n value: peakDemand,\r\n dashStyle: 'dash',\r\n label: {\r\n formatter: function() {\r\n debugger;\r\n return 'Plot line value: ';\r\n }\r\n }\r\n }]\r\n }, {\r\n title: {\r\n text: getTempTitle()\r\n },\r\n opposite: true\r\n }],\r\n legend: {\r\n enabled: false\r\n },\r\n tooltip: {\r\n // headerFormat: '',\r\n // pointFormat: '' +\r\n // '',\r\n // footerFormat: '
    Time: {point.key: %b %e, %H:%M}
    {series.name}: {point.y:.2f} kW
    ',\r\n formatter: function() {\r\n let point = this;\r\n let dateTimeMoment = moment.tz(this.x, timezone)\r\n let dayOfWeek = dateTimeMoment.format('dddd');\r\n let date = dateTimeMoment.format('MMM D, YYYY');\r\n let time = dateTimeMoment.format('h:mm A')\r\n let color;\r\n let timeString = 'TIME';\r\n if (point.y >= 0) {\r\n color = point.points[0].series.color;\r\n } else {\r\n color = 'rgba(76, 175, 80, 1)'\r\n }\r\n let color2 = 'rgb(255, 0, 0, 0.5)';\r\n let line = ' ';\r\n let tempLine = ' ';\r\n\r\n let final = '
    ' + dayOfWeek +'
    ' + '
    ' + date +'
    ' + '
    ' + time +'
    ' +\r\n '
    ' + line + point.y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ' ' + 'kW' + ' ' + line + '
    ';\r\n if (highchartSeries.filter(x => x.name === 'Temperature').length !== 0) {\r\n if (point.points.length > 1) {\r\n final += '
    ' + tempLine + point.points[1].y.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + '°F' + ' ' + tempLine + '
    '\r\n }\r\n \r\n } \r\n return final\r\n },\r\n shared: true,\r\n useHTML: true,\r\n outside: false\r\n },\r\n plotOptions: {\r\n column: {\r\n pointPadding: 0.1,\r\n borderWidth: 0\r\n },\r\n area: {\r\n // lineWidth: 1,\r\n states: {\r\n hover: {\r\n lineWidth: 1\r\n }\r\n },\r\n // threshold: null\r\n },\r\n series: {\r\n marker: {\r\n enabled: false\r\n },\r\n }\r\n },\r\n exporting: {\r\n enabled: true,\r\n },\r\n series: highchartSeries,\r\n credits: {\r\n enabled: false\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default function HighchartForCalendarChartDayView(props) {\r\n const { series, peakDemand, showPeakDemand, comparisonLoadCurveData, showComparisonLoadCurve, selectedFacility, temperatureView } = props;\r\n let data = [];\r\n let data2 = [];\r\n let tempData= [];\r\n // let comparisonArray = [];\r\n series.forEach(x => {\r\n data.push([x.dateTimestamp, x.kW]);\r\n tempData.push([x.dateTimestamp, x.temperature]);\r\n if (showComparisonLoadCurve) {\r\n // let temp = comparisonLoadCurveData.filter(y => moment(x.dateTimestamp).minutes() + moment(x.dateTimestamp).hours()*60 === moment.utc(y[0]).minutes() + moment.utc(y[0]).hours()*60);\r\n let temp = comparisonLoadCurveData.filter(y => timeOfDayMatch(y[0], x.dateTimestamp));\r\n if (temp.length !== 0) {\r\n data2.push([x.dateTimestamp, temp[0][1]])\r\n }\r\n } \r\n });\r\n \r\n \r\n \r\n let highchartSeries = [\r\n {\r\n name: 'Demand',\r\n data: data,\r\n type: 'area',\r\n negativeColor: true,\r\n negativeFillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 1,\r\n x2: 0,\r\n y2: 0\r\n },\r\n stops: [\r\n [0, 'rgba(76, 175, 80, 1)'],\r\n [1, 'rgba(76, 175, 80, 0)']\r\n ]\r\n },\r\n fillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 0,\r\n x2: 0,\r\n y2: 1\r\n },\r\n stops: [\r\n [0, Highcharts.getOptions().colors[0]],\r\n [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\r\n ]\r\n },\r\n }, {\r\n name: 'Average',\r\n data: data2,\r\n // fillColor: {\r\n // linearGradient: {\r\n // x1: 0,\r\n // y1: 0,\r\n // x2: 0,\r\n // y2: 0\r\n // },\r\n // stops: [\r\n // [0, Highcharts.getOptions().colors[0]],\r\n // [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\r\n // ]\r\n // },\r\n }, \r\n \r\n ];\r\n \r\n if (temperatureView) {\r\n highchartSeries.push({\r\n name: 'Temperature',\r\n data: tempData,\r\n yAxis: 1,\r\n color: 'rgb(255, 0, 0, 0.5)',\r\n dashStyle: 'ShortDot'\r\n })\r\n }\r\n let options = getOptions(highchartSeries, peakDemand, showPeakDemand, selectedFacility.timezone);\r\n\r\n return ()\r\n\r\n}\r\n\r\n\r\n\r\n","import React from 'react';\r\n\r\n// Material UI\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport Button from '@material-ui/core/Button';\r\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\r\nimport KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';\r\nimport KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\n// DatePicker\r\nimport MomentUtils from '@date-io/moment';\r\nimport {\r\n DatePicker,\r\n MuiPickersUtilsProvider,\r\n} from \"@material-ui/pickers\";\r\n\r\n// Moment\r\nimport moment from 'moment'\r\n\r\n// Charts\r\nimport HighchartForCalendarChartMonthView from './HighchartForCalendarChartMonthView'\r\nimport HighchartForCalendarChartDayView from \"./HighchartForCalendarChartDayView\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n width: '100%',\r\n marginTop: theme.spacing(3),\r\n overflowX: 'auto',\r\n },\r\n table: {\r\n minWidth: 650,\r\n },\r\n tableCell: {\r\n borderStyle: 'solid',\r\n borderWidth: 1,\r\n borderColor: '#e6e6e6'\r\n },\r\n tableGreyCell: {\r\n borderStyle: 'solid',\r\n borderWidth: 1,\r\n borderColor: '#e6e6e6',\r\n backgroundColor: '#f2f2f2'\r\n },\r\n tableNoDataCell: {\r\n borderStyle: 'solid',\r\n borderWidth: 1,\r\n borderColor: '#e6e6e6',\r\n backgroundColor: '#fafafa'\r\n }\r\n}));\r\n\r\nfunction getHeaders() {\r\n return [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\r\n}\r\n\r\nfunction createCalendar(currentMoment, currentMonthData) {\r\n let month = currentMoment.month();\r\n let year = currentMoment.year();\r\n let firstDay = moment().date(1).month(month).year(year).hour(0).minutes(0).seconds(0);;\r\n let daysInMonth = 32 - new Date(year, month, 32).getDate();\r\n let firstDayNumber = firstDay.day();\r\n\r\n let array = [];\r\n let date = 1;\r\n let count = 1;\r\n for (let i = 0; i < 6; i++) {\r\n \r\n let week = [];\r\n for (let j = 0; j < 7; j++) {\r\n //let currentData = currentMonthData.dayData.find(x => x.date == date);\r\n let currentData = [];\r\n let finalSeries = [];\r\n let tempSeries = [];\r\n for (let i = 0; i < currentMonthData.dayData.length; i++) {\r\n if (currentMonthData.dayData[i].date === date) {\r\n currentData = currentMonthData.dayData[i].data\r\n \r\n currentData.forEach(x => {\r\n finalSeries.push([x.dateTimestamp, x.kW]);\r\n tempSeries.push([x.dateTimestamp, x.temperature])\r\n })\r\n }\r\n }\r\n if (i === 0 && j < firstDayNumber) {\r\n week.push({ date: 0, series: null })\r\n } else if (date > daysInMonth && j !== 0) {\r\n week.push({ date: 0, series: null })\r\n } else if (date > daysInMonth && j == 0) {\r\n break\r\n } else {\r\n week.push({ date, series: finalSeries, tempSeries })\r\n finalSeries = [];\r\n date++;\r\n count++;\r\n }\r\n }\r\n array.push(week)\r\n }\r\n\r\n return array;\r\n \r\n}\r\n\r\nfunction getDataPickerViews(currentView) {\r\n switch (currentView) {\r\n case 'month':\r\n return [\"year\", \"month\"]\r\n case 'day':\r\n return [\"year\", \"month\", \"date\"]\r\n }\r\n}\r\nfunction formatDateLabel(moment, view) {\r\n switch (view) {\r\n case 'month':\r\n return moment.format(\"MMMM YYYY\")\r\n case 'day':\r\n return moment.format(\"ddd MMM, D YYYY\")\r\n }\r\n}\r\n\r\nexport default function CalendarChartTable(props) {\r\n const { \r\n currentMoment, \r\n handleNext, \r\n handlePrevious, \r\n handleDateChange, \r\n changeViewToDay, \r\n changeViewToMonth, \r\n currentView, \r\n dataStartDate, \r\n dataEndDate, \r\n currentMonthData, \r\n peakDemand, \r\n selectDate, \r\n currentDayData,\r\n showPeakDemand,\r\n comparisonLoadCurveData,\r\n showComparisonLoadCurve,\r\n selectedFacility,\r\n temperatureView\r\n } = props;\r\n \r\n const classes = useStyles();\r\n let calendar = createCalendar(currentMoment, currentMonthData, temperatureView);\r\n let datePickerViews = getDataPickerViews(currentView);\r\n let headers = getHeaders();\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 formatDateLabel(moment, currentView)}\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 currentView === 'month' ?\r\n \r\n \r\n \r\n {headers.map(header => )}\r\n \r\n \r\n \r\n {headers.map((header, index) => {header})}\r\n \r\n \r\n \r\n \r\n {calendar.map((week, index) => (\r\n \r\n {week.map((day) => {\r\n let isLastDay = false;\r\n if (day.date === currentMonthData.dayData[currentMonthData.dayData.length - 1].date) {\r\n isLastDay = true;\r\n }\r\n if (day.date === 0) {\r\n return console.log(e, day)}> \r\n } else if (day.series.length !== 0) {\r\n \r\n // when we get the day view set up add 'onClick={e => selectDate(e, day)}'\r\n return (\r\n selectDate(e, day)} padding=\"none\">\r\n {day.date}\r\n
    \r\n \r\n
    \r\n )\r\n } else {\r\n return console.log(e, day)}>\r\n {day.date}\r\n }\r\n \r\n })}\r\n
    \r\n \r\n ))}\r\n \r\n
    \r\n
    \r\n
    \r\n :\r\n currentDayData ? \r\n : \"loading\"\r\n }\r\n
    \r\n\r\n );\r\n}","/* eslint-disable */\r\nimport React, { Component, Fragment } from \"react\";\r\n\r\n// Redux\r\nimport { connect } from 'react-redux';\r\nimport { bindActionCreators } from 'redux';\r\nimport {toggleCalendarChartShowPeakDemand, toggleCalendarChartShowTemperature} from \"../../../../redux/actions/DataChartActions/calendar-chart-actions\";\r\nimport { addCalendarChartDataToState } from '../../../../redux/actions/interval-data-actions';\r\n\r\n\r\n//import { getCalendarChartData } from \"../../services/intervalData.service\";\r\nimport moment from \"moment\";\r\n\r\n//Material UI\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\n\r\n// Components\r\nimport CalendarChartTable from './CalendarChartTable'\r\nimport DataViewLoadingSpinner from \"../../../components/spinners/DataViewLoadingSpinner\";\r\nimport ChartDataFilterFormObject from \"../../../components/DataFilterForm/ChartDataFilterFormObject\";\r\nimport {getIntervalDataLoadCurveByFacilityId} from \"../../../../services/intervalData.service\";\r\nimport CustomSnackbar from \"../../../../components/Snackbar/CustomSnackbar\";\r\n\r\n\r\n\r\n\r\nclass CalendarChart extends Component {\r\n state = {\r\n currentMoment: moment.tz(this.props.selectedFacility.intervalDataStartDate, this.props.selectedFacility.timezone),\r\n currentView: 'month',\r\n dataStartDate: moment.tz(this.props.selectedFacility.intervalDataStartDate, this.props.selectedFacility.timezone),\r\n dataEndDate: moment.tz(this.props.selectedFacility.intervalDataEndDate, this.props.selectedFacility.timezone),\r\n currentMonthData: null,\r\n currentDayData: null,\r\n showPeakDemand: false,\r\n comparisonLoadCurveData: null,\r\n showComparisonLoadCurve: false,\r\n snackbar: {\r\n open: false\r\n }\r\n }\r\n\r\n openSnackbar = (value) => {\r\n let snackbar = { ...this.state.snackbar }\r\n snackbar.open = value;\r\n this.setState({ snackbar })\r\n }\r\n\r\n \r\n \r\n componentDidMount() {\r\n const {selectedFacility} = this.props;\r\n let loadCurveForm = new ChartDataFilterFormObject(selectedFacility).getDefaultLoadCurveFormForCalendarChart();\r\n let request = new ChartDataFilterFormObject(selectedFacility).getRequestFromForm(loadCurveForm, this.props.selectedFacility);\r\n getIntervalDataLoadCurveByFacilityId(request).then(response => {\r\n this.setState({comparisonLoadCurveData: response[0].data})\r\n })\r\n }\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n const { chartCanUpdateData, setChartCanUpdateData, intervalDataForCalendarChart } = this.props;\r\n \r\n if (chartCanUpdateData && intervalDataForCalendarChart !== null || prevProps.intervalDataForCalendarChart !== this.props.intervalDataForCalendarChart) {\r\n this.handleChange();\r\n setChartCanUpdateData(false)\r\n }\r\n if (prevState.currentMoment.valueOf() !== this.state.currentMoment.valueOf()) {\r\n let currentDayData = this.state.currentMonthData.dayData.filter(day => day.date === this.state.currentMoment.date())[0];\r\n\r\n this.setState({currentDayData})\r\n }\r\n }\r\n\r\n handleChange = () => {\r\n const {timezone} = this.props.selectedFacility;\r\n // let currentMonth = moment.tz(this.state.currentMoment, timezone).date(1).hours(0).minutes(0).seconds(0).milliseconds(0).valueOf();\r\n let currentMonth = moment.tz(this.state.currentMoment, timezone);\r\n // debugger;\r\n let currentMonthData = this.props.intervalDataForCalendarChart.filter(month => moment.tz(month.month, timezone).isSame(currentMonth, 'month'));\r\n let currentDayData = currentMonthData[0].dayData.filter(day => day.date === this.state.currentMoment.date())[0];\r\n this.setState({ currentMonthData: currentMonthData[0], currentDayData })\r\n }\r\n\r\n handleNext = () => {\r\n const {timezone} = this.props.selectedFacility;\r\n let currentMoment = moment.tz(this.state.currentMoment, timezone)\r\n if (this.state.currentView === 'month') {\r\n currentMoment.add(1, 'month').date(1);\r\n if (currentMoment.isAfter(this.state.dataEndDate)) {\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = \"No data after this point\";\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n } else {\r\n this.setState({ currentMoment }, () => this.handleChange())\r\n }\r\n \r\n } else {\r\n currentMoment.add(1, 'day');\r\n if (currentMoment.isAfter(this.state.dataEndDate)) {\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = \"No data after this point\";\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n } else {\r\n this.setState({ currentMoment }, () => this.handleChange())\r\n }\r\n }\r\n \r\n }\r\n\r\n \r\n\r\n handlePrevious = () => {\r\n const {timezone} = this.props.selectedFacility;\r\n let currentMoment = moment.tz(this.state.currentMoment, timezone);\r\n if (this.state.currentView === 'month') {\r\n currentMoment.date(0);\r\n if (currentMoment.isBefore(this.state.dataStartDate)) {\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = \"No data before this point\";\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n\r\n } else {\r\n this.setState({ currentMoment }, () => this.handleChange())\r\n }\r\n } else {\r\n currentMoment.subtract(1, 'day');\r\n if (currentMoment.isBefore(this.state.dataStartDate)) {\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = \"No data before this point\";\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n } else {\r\n this.setState({ currentMoment }, () => this.handleChange())\r\n }\r\n }\r\n \r\n }\r\n\r\n handleDateChange = (e) => {\r\n \r\n if (e.isBefore(this.state.dataStartDate)) {\r\n this.setState({ currentMoment: this.state.dataStartDate })\r\n } else if (e.isAfter(this.state.dataEndDate)) {\r\n this.setState({ currentMoment: this.state.dataEndDate })\r\n } else {\r\n this.setState({ currentMoment: e }, () => this.handleChange())\r\n }\r\n \r\n }\r\n\r\n changeViewToDay = () => {\r\n this.setState({currentView: 'day'})\r\n }\r\n \r\n selectDate = (e, day) => {\r\n const {timezone} = this.props.selectedFacility;\r\n let date = day.date;\r\n let series = day.series;\r\n this.setState({currentView: 'day'});\r\n let currentMoment = moment.tz(this.state.currentMoment, timezone).date(date);\r\n currentMoment.date(date);\r\n this.setState({currentMoment});\r\n \r\n \r\n }\r\n\r\n changeViewToMonth = () => {\r\n this.setState({ currentView: 'month' })\r\n }\r\n \r\n toggleShowPeakDemand = () => {\r\n // let showPeakDemand = this.state.showPeakDemand;\r\n // this.setState({showPeakDemand: !showPeakDemand});\r\n this.props.toggleCalendarChartShowPeakDemand(!this.props.calendarChartShowPeakDemand)\r\n };\r\n\r\n toggleShowComparisonLoadCurve = () => {\r\n let showComparisonLoadCurve = this.state.showComparisonLoadCurve;\r\n this.setState({showComparisonLoadCurve: !showComparisonLoadCurve});\r\n };\r\n\r\n checkKey = (event) => {\r\n if (event.keyCode === 37) {\r\n this.handlePrevious()\r\n } else if (event.keyCode === 39) {\r\n this.handleNext()\r\n } else if (event.keyCode === 38) {\r\n this.props.toggleCalendarChartShowPeakDemand(!this.props.calendarChartShowPeakDemand)\r\n \r\n }\r\n \r\n };\r\n\r\n render() {\r\n //const { intervalDataForDemandDuration } = this.props;\r\n const { currentMoment, currentView, dataStartDate, dataEndDate, currentMonthData } = this.state;\r\n const peakDemand = this.props.selectedFacility.maximumkWValue;\r\n \r\n document.onkeydown = this.checkKey;\r\n console.log('rendering calendar chart')\r\n \r\n return (\r\n
    \r\n \r\n {currentMonthData ?\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\nfunction mapStateToProps(state) {\r\n return {\r\n selectedFacility: state.selectedFacility,\r\n intervalDataForCalendarChart: state.intervalDataForCalendarChart,\r\n calendarChartShowTemperature: state.calendarChartShowTemperature,\r\n calendarChartShowPeakDemand: state.calendarChartShowPeakDemand\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({ \r\n addCalendarChartDataToState,\r\n toggleCalendarChartShowTemperature,\r\n toggleCalendarChartShowPeakDemand\r\n }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CalendarChart);\r\n\r\n\r\n\r\n","/* eslint-disable */\r\nimport React, { Component, Fragment } from \"react\";\r\n\r\n// Redux\r\n\r\nimport { connect } from 'react-redux';\r\nimport { bindActionCreators } from 'redux';\r\n\r\nimport Highcharts from 'highcharts/highstock';\r\n//import Highcharts from 'highcharts';\r\nimport HighchartsReact from 'highcharts-react-official';\r\n\r\nimport highchartsExporting from \"highcharts/modules/exporting\";\r\nimport highchartsMore from \"highcharts/modules/heatmap\";\r\n\r\n//Material UI\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\n\r\n//Colors \r\nimport grey from '@material-ui/core/colors/grey';\r\nimport blue from '@material-ui/core/colors/blue';\r\n\r\n// Font Awesome\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faChartLine, faChartArea, faChartBar } from '@fortawesome/free-solid-svg-icons'\r\nimport AntTabs from \"../AntTabs/AntTabs\";\r\nimport AntTab from \"../AntTabs/AntTab\";\r\n\r\nhighchartsMore(Highcharts);\r\nhighchartsExporting(Highcharts);\r\n\r\nlet borderColor = grey[300];\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n content: {\r\n flexGrow: 1,\r\n // border: 'solid',\r\n // borderColor: borderColor,\r\n // borderWidth: 1,\r\n // borderTop: 'none'\r\n },\r\n title: {\r\n backgroundColor: grey[200],\r\n padding: 5,\r\n paddingLeft: 20,\r\n paddingRight: 20,\r\n align: 'center',\r\n border: 'solid',\r\n //backgroundColor: grey[200],\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderBottom: 'none',\r\n borderLeft: 'none',\r\n },\r\n chartTitleBar: {\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n },\r\n chartSection: {\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n paddingTop: 10,\r\n \r\n },\r\n tabsContainer: {\r\n border: 'solid',\r\n //backgroundColor: grey[200],\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderRight: 'none',\r\n borderLeft: 'none',\r\n },\r\n tabSelected: {\r\n backgroundColor: 'white',\r\n height: 40,\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderBottom: 'none',\r\n borderTopRightRadius: 5,\r\n borderTopLeftRadius: 5,\r\n //'&:hover': {\r\n // cursor: 'pointer'\r\n //}\r\n },\r\n tab: {\r\n height: 40,\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderRight: 'none',\r\n borderLeft: 'none',\r\n color: blue[500],\r\n fontWeight: 800,\r\n '&:hover': {\r\n cursor: 'pointer',\r\n textDecoration: 'underline'\r\n }\r\n },\r\n tabsExtraSpace: {\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderRight: 'none',\r\n borderLeft: 'none',\r\n height: '100%'\r\n },\r\n chartTypeTab: {\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderBottom: 'none',\r\n borderRight: 'none',\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n height: '100%',\r\n color: grey[700],\r\n backgroundColor: grey[200],\r\n '&:hover': {\r\n cursor: 'pointer',\r\n backgroundColor: grey[300],\r\n }\r\n },\r\n toggleContainer: {\r\n //margin: theme.spacing(2, 0),\r\n },\r\n}));\r\n\r\nfunction MainChartContainer(props) {\r\n const { tabs, currentComponent, setTab, currentTab } = props;\r\n const classes = useStyles();\r\n\r\n const [tabValue, setTabValue] = React.useState(0);\r\n const [component, setComponent] = React.useState(tabs[0].component);\r\n\r\n \r\n\r\n\r\n function handleChange(tab) {\r\n setTabValue(tab.value);\r\n setComponent(tab.component);\r\n }\r\n\r\n return (\r\n \r\n\r\n\r\n\r\n \r\n {/**/}\r\n {/* {tabs.map((tab, index) => (*/}\r\n {/* */}\r\n {/* setTab(index)}/>*/}\r\n {/* */}\r\n {/* ))}*/}\r\n {/* */}\r\n {/* */}\r\n \r\n {/* */}\r\n {/* */}\r\n {/**/}\r\n\r\n
    \r\n \r\n {currentComponent}\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 MainChartContainer\r\n\r\n\r\n\r\n","import React, {Component, Fragment} from \"react\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport Radio from \"@material-ui/core/Radio\";\r\nimport DataViewLoadingSpinnger from \"../../FacilityHome/components/spinners/DataViewLoadingSpinner\";\r\nimport grey from \"@material-ui/core/colors/grey\";\r\nimport {withStyles} from '@material-ui/core/styles';\r\nimport PropTypes from \"prop-types\";\r\n\r\nlet borderColor = grey[300];\r\n\r\nconst styles = theme => ({\r\n content: {\r\n flexGrow: 1,\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderRadius: 5\r\n },\r\n subtitle: {\r\n flexGrow: 1\r\n },\r\n title: {\r\n backgroundColor: grey[300],\r\n padding: 5,\r\n paddingLeft: 20,\r\n paddingRight: 20,\r\n align: 'center',\r\n border: 'solid',\r\n //backgroundColor: grey[200],\r\n borderColor: borderColor,\r\n borderRadius: '3px 0 0 0',\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderBottom: 'none',\r\n borderLeft: 'none',\r\n },\r\n chartTitleBar: {\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderLeft: 'none',\r\n borderRight: 'none',\r\n },\r\n chartSection: {\r\n paddingBottom: 5,\r\n // border: 'solid',\r\n // borderColor: borderColor,\r\n // borderWidth: 1,\r\n // borderTop: 'none',\r\n // borderRadius: 10,\r\n paddingTop: 10,\r\n },\r\n chartTypeTab: {\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderBottom: 'none',\r\n borderRight: 'none',\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n height: '100%',\r\n color: grey[700],\r\n backgroundColor: grey[200],\r\n '&:hover': {\r\n cursor: 'pointer',\r\n backgroundColor: grey[300],\r\n }\r\n },\r\n toggleContainer: {\r\n //margin: theme.spacing(2, 0),\r\n },\r\n heatmapLegend: {\r\n backgroundImage: 'linear-gradient(to right, red , yellow, green, blue)',\r\n },\r\n button: {\r\n marginBottom: theme.spacing(1)\r\n },\r\n button2: {\r\n marginBottom: theme.spacing(1),\r\n backgroundColor: grey[300],\r\n },\r\n heatMapGradient: {\r\n backgroundImage: 'linear-gradient(to right, #003d99 0%, #66a3ff 20%, #63BE7B 40%, #fae052 60%, #f40b0f 80%, #b30000 100%)',\r\n height: 20,\r\n width: 300\r\n }\r\n});\r\n\r\nclass ChartWrapper extends Component {\r\n render() {\r\n\r\n const {\r\n classes,\r\n message,\r\n title,\r\n chartArea,\r\n titleBarRight\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n {message}\r\n\r\n \r\n\r\n\r\n \r\n {titleBarRight}\r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n {chartArea}\r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nChartWrapper.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n // message: PropTypes.string,\r\n // title: PropTypes.string.isRequired,\r\n // chartArea: PropTypes.element\r\n};\r\n\r\nexport default withStyles(styles)(ChartWrapper)","/* eslint-disable */\r\nimport React, { Component, Fragment } from \"react\";\r\n\r\n\r\nimport Radio from '@material-ui/core/Radio';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport grey from '@material-ui/core/colors/grey';\r\n\r\nimport thermometer from '../../../assets/img/svg/thermometer.svg'\r\nimport ReactSVG from \"react-svg\";\r\nimport CloudUploadIcon from '@material-ui/icons/CloudUpload';\r\n\r\nimport Highcharts from 'highcharts/highstock';\r\nimport HighchartsReact from 'highcharts-react-official';\r\n\r\n\r\nimport DataViewLoadingSpinnger from \"../spinners/DataViewLoadingSpinner\";\r\nimport highchartsExporting from \"highcharts/modules/exporting\";\r\nimport highchartsMore from \"highcharts/modules/heatmap\";\r\nimport ChartWrapper from \"../../../components/ChartWrapper/ChartWrapper\";\r\n\r\nimport moment from 'moment'\r\nimport 'moment-timezone'\r\n\r\nwindow.moment = moment;\r\n\r\nhighchartsMore(Highcharts);\r\nhighchartsExporting(Highcharts);\r\n\r\nlet borderColor = grey[300];\r\n\r\nconst styles = theme => ({\r\n content: {\r\n flexGrow: 1,\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none'\r\n },\r\n subtitle: {\r\n flexGrow: 1\r\n },\r\n title: {\r\n backgroundColor: grey[200],\r\n padding: 5,\r\n paddingLeft: 20,\r\n paddingRight: 20,\r\n align: 'center',\r\n border: 'solid',\r\n //backgroundColor: grey[200],\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderBottom: 'none',\r\n borderLeft: 'none',\r\n },\r\n chartTitleBar: {\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n },\r\n chartSection: {\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n paddingTop: 10\r\n },\r\n chartTypeTab: {\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderBottom: 'none',\r\n borderRight: 'none',\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n height: '100%',\r\n color: grey[700],\r\n backgroundColor: grey[200],\r\n '&:hover': {\r\n cursor: 'pointer',\r\n backgroundColor: grey[300],\r\n }\r\n },\r\n toggleContainer: {\r\n //margin: theme.spacing(2, 0),\r\n },\r\n heatmapLegend: {\r\n backgroundImage: 'linear-gradient(to right, red , yellow, green, blue)',\r\n },\r\n button: {\r\n marginBottom: theme.spacing(1)\r\n },\r\n button2: {\r\n marginBottom: theme.spacing(1),\r\n backgroundColor: grey[300],\r\n },\r\n heatMapGradient: {\r\n backgroundImage: 'linear-gradient(to right, #003d99 0%, #66a3ff 20%, #63BE7B 40%, #fae052 60%, #f40b0f 80%, #b30000 100%)',\r\n height: 20,\r\n width: 300\r\n }\r\n});\r\n\r\nclass ChartsView extends Component {\r\n\r\n getTitleText = (selectedFacilityView) => {\r\n let text;\r\n switch (selectedFacilityView) {\r\n case 'load-curve':\r\n text = 'Load Curve'\r\n break;\r\n case 'summary-chart':\r\n text = 'Summary Chart'\r\n break;\r\n case 'zoomable-chart':\r\n text = 'Zoomable Chart'\r\n break;\r\n case 'demand-duration':\r\n text = 'Demand Duration'\r\n break;\r\n case 'heat-map':\r\n text = \"Heat Map\"\r\n break;\r\n case 'scatter-plot':\r\n text = \"Scatter Plot\"\r\n break;\r\n }\r\n return text\r\n }\r\n \r\n getChart = (chartOptions, view, timezone) => {\r\n if (!timezone) {\r\n alert('no timezone returned for facility')\r\n }\r\n if (view !== 'load-curve') {\r\n Highcharts.setOptions({\r\n time: {\r\n timezone: timezone\r\n }\r\n });\r\n }\r\n \r\n switch (view) {\r\n case 'load-curve':\r\n case 'summary-chart':\r\n case 'heat-map':\r\n case 'scatter-plot':\r\n return (\r\n \r\n \r\n \r\n )\r\n case 'demand-duration':\r\n case 'zoomable-chart':\r\n return (\r\n \r\n )\r\n }\r\n };\r\n \r\n toggleTemperature = () => {\r\n const chart = this.refs.chartComponent.chart;\r\n let refs = this.refs;\r\n debugger;\r\n chart.reflow();\r\n this.props.toggleTemperatureView();\r\n };\r\n \r\n \r\n \r\n render() {\r\n const { \r\n chartOptions, \r\n selectedFacilityView,\r\n selectedFacilitySubview,\r\n selectedFacility, \r\n handleChartOptionChange, \r\n dataFilterMessage, \r\n toggleDurationView,\r\n toggleTemperatureView,\r\n durationView, \r\n temperatureView,\r\n showMeterDatesAndRanges,\r\n toggleShowDatesAndRangesView,\r\n classes \r\n } = this.props;\r\n \r\n // stuff for heat map gradient calculation\r\n // let delta = selectedFacility.maximumkWValue - selectedFacility.minimumkWValue;\r\n // let divider = delta / 5;\r\n // let rounded = Math.ceil((24 + 1)/25) * 25\r\n //\r\n // debugger;\r\n\r\n return (\r\n \r\n \r\n {selectedFacilitySubview === 'zoomable-chart' ?\r\n
    \r\n }\r\n startIcon={}\r\n onClick={() => this.toggleTemperature()}\r\n >\r\n \r\n \r\n Temperature\r\n \r\n \r\n {/*}*/}\r\n {/* startIcon={}*/}\r\n {/* onClick={toggleShowDatesAndRangesView}*/}\r\n {/*>*/}\r\n {/* */}\r\n {/* */}\r\n {/* Shows Dates*/}\r\n {/* */}\r\n {/**/}\r\n
    \r\n \r\n : null}\r\n \r\n\r\n }\r\n titleBarRight={selectedFacilitySubview === \"scatter-plot\" || selectedFacilitySubview === \"heat-map\"?\r\n toggleDurationView()}>\r\n } label=\"Day\" />\r\n } label=\"Week\"/>\r\n \r\n : null}\r\n \r\n />\r\n\r\n
    \r\n
    \r\n )\r\n }\r\n \r\n}\r\n\r\nexport default withStyles(styles)(ChartsView)","/* eslint-disable */\r\nimport React, { Component, Fragment } from \"react\";\r\n\r\nimport Grid from '@material-ui/core/Grid'\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport { HotTable } from '@handsontable/react';\r\n\r\n\r\nimport DataViewLoadingSpinnger from \"../spinners/DataViewLoadingSpinner\";\r\n\r\nconst TableView = (props) => {\r\n const { chartTableSettings, exportDataAsCsv } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n chartTableSettings === null ? \r\n : \r\n\r\n }\r\n\r\n\r\n \r\n \r\n )\r\n}\r\n\r\nexport default TableView","/* eslint-disable */\r\nimport React, { Component, Fragment } from \"react\";\r\n\r\nimport Highcharts from 'highcharts/highstock';\r\n\r\nimport highchartsExporting from \"highcharts/modules/exporting\";\r\nimport highchartsHeatmap from \"highcharts/modules/heatmap\";\r\nimport highchartsBoost from \"highcharts/modules/boost\";\r\n// import highcharts3d from \"highcharts-3d\";\r\n\r\n//Material UI\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\n//Colors \r\nimport grey from '@material-ui/core/colors/grey';\r\n\r\nimport CustomTabsPaper from '../../../components/tabs/CustomTabsPaper'\r\n\r\n//Views\r\nimport ChartsView from '../../components/Charts/ChartsView'\r\nimport TableView from '../../components/Charts/TableView'\r\n\r\nhighchartsHeatmap(Highcharts);\r\nhighchartsExporting(Highcharts);\r\nhighchartsBoost(Highcharts);\r\n// highcharts3d(Highcharts);\r\n\r\n\r\nlet borderColor = grey[300];\r\n\r\nconst styles = theme => ({\r\n content: {\r\n flexGrow: 1,\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none'\r\n },\r\n title: {\r\n backgroundColor: grey[200],\r\n padding: 5,\r\n paddingLeft: 20,\r\n paddingRight: 20,\r\n align: 'center',\r\n border: 'solid',\r\n //backgroundColor: grey[200],\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderBottom: 'none',\r\n borderLeft: 'none',\r\n },\r\n chartTitleBar: {\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n },\r\n chartSection: {\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n paddingTop: 10\r\n },\r\n chartTypeTab: {\r\n border: 'solid',\r\n borderColor: borderColor,\r\n borderWidth: 1,\r\n borderTop: 'none',\r\n borderBottom: 'none',\r\n borderRight: 'none',\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n height: '100%',\r\n color: grey[700],\r\n backgroundColor: grey[200],\r\n '&:hover': {\r\n cursor: 'pointer',\r\n backgroundColor: grey[300],\r\n }\r\n },\r\n toggleContainer: {\r\n //margin: theme.spacing(2, 0),\r\n },\r\n});\r\n\r\nclass MainChartContainer extends Component {\r\n getChartsView = () => {\r\n \r\n return \r\n }\r\n \r\n state = {\r\n tabs: [\r\n {\r\n label: \"Chart\",\r\n value: \"chart\",\r\n },\r\n {\r\n label: \"Table\",\r\n value: 'table',\r\n }\r\n ],\r\n currentTab: 0,\r\n currentComponent: this.getChartsView()\r\n }\r\n \r\n \r\n\r\n setTab = (value) => {\r\n let currentComponent;\r\n switch (value) {\r\n case 0:\r\n currentComponent = this.getChartsView();\r\n break;\r\n case 1:\r\n currentComponent = \r\n break;\r\n }\r\n\r\n this.setState({ currentComponent, currentTab: value });\r\n\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.chartOptions !== this.props.chartOptions || prevProps.durationView !== this.props.durationView) {\r\n let currentComponent = this.getChartsView();\r\n this.setState({ currentComponent, currentTab: 0 })\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\n}\r\n\r\nexport default withStyles(styles)(MainChartContainer)\r\n\r\n\r\n\r\n","\r\n\r\nconst exportDataAsCsv = (handsontableSettings) => {\r\n // debugger;\r\n var data = handsontableSettings.data;\r\n var csv = ' ,';\r\n \r\n handsontableSettings.colHeaders.forEach(x => csv+= x + ',');\r\n csv += \"\\n\";\r\n data.forEach(function(row, index) {\r\n csv += handsontableSettings.rowHeaders[index] + ',';\r\n csv += row.join(',');\r\n csv += \"\\n\";\r\n });\r\n\r\n console.log(csv);\r\n var hiddenElement = document.createElement('a');\r\n hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csv);\r\n hiddenElement.target = '_blank';\r\n hiddenElement.download = 'data.csv';\r\n hiddenElement.click();\r\n}\r\n\r\nexport default exportDataAsCsv","import React, {Component} from 'react';\r\nimport Plot from 'react-plotly.js';\r\nimport {\r\n getIntervalDataLoadCurveByFacilityId,\r\n getIntervalDataTimestampByFacilityId\r\n} from \"../../../services/intervalData.service\";\r\nimport moment from \"moment\";\r\nimport 'moment-timezone'\r\nimport CustomTabsPaper from \"../../../components/tabs/CustomTabsPaper\";\r\nimport ChartWrapper from \"../../../components/ChartWrapper/ChartWrapper\";\r\nimport TableView from \"./TableView\";\r\nimport DataViewLoadingSpinner from \"../spinners/DataViewLoadingSpinner\";\r\n\r\nclass SurfacePlot extends Component {\r\n state = {\r\n layout: null,\r\n data: null,\r\n\r\n tabs: [\r\n {\r\n label: \"Chart\",\r\n value: \"chart\",\r\n },\r\n {\r\n label: \"Table\",\r\n value: 'table',\r\n }\r\n ],\r\n currentTab: 0,\r\n\r\n };\r\n \r\n getCurrentComponent = () => {\r\n if (this.state.currentTab === 0) {\r\n return (\r\n
    \r\n : }\r\n title={\"Surface Plot\"}\r\n />\r\n
    \r\n )\r\n } else if (this.state.currentTab === 1) {\r\n return \r\n }\r\n };\r\n\r\n setTab = (value) => {\r\n\r\n this.setState({ currentTab: value });\r\n\r\n }\r\n\r\n render() {\r\n\r\n\r\n return (\r\n )\r\n\r\n }\r\n}\r\n\r\nexport default SurfacePlot","const SELECTED_CHART_VIEW = 'SELECTED_CHART_VIEW';\r\n\r\nconst selectChartView = (view) => {\r\n return {\r\n type: SELECTED_CHART_VIEW,\r\n payload: view\r\n };\r\n};\r\n\r\nexport {\r\n SELECTED_CHART_VIEW,\r\n selectChartView\r\n};\r\n\r\n","import React, {Component} from 'react'\r\nimport {Link} from \"react-router-dom\";\r\nimport AntTab from \"../../../../components/AntTabs/AntTab\";\r\nimport AntTabs from \"../../../../components/AntTabs/AntTabs\";\r\n\r\nclass ChartsTabs extends Component {\r\n \r\n render() {\r\n\r\n const {selectedFacility} = this.props;\r\n const {projectId, facilityId} = selectedFacility;\r\n\r\n let tabs = [\r\n {\r\n label: 'Load Curve',\r\n link: `/${projectId}/${facilityId}/charts/load-curve`,\r\n chart: 'load-curve'\r\n },\r\n {\r\n label: 'Summary Chart',\r\n link: `/${projectId}/${facilityId}/charts/summary-chart`,\r\n chart: 'summary-chart'\r\n },\r\n {\r\n label: 'Heat Map',\r\n link: `/${projectId}/${facilityId}/charts/heat-map`,\r\n chart: 'heat-map'\r\n },\r\n {\r\n label: 'Time Series',\r\n link: `/${projectId}/${facilityId}/charts/zoomable-chart`,\r\n chart: 'zoomable-chart'\r\n },\r\n {\r\n label: 'Calendar Chart',\r\n link: `/${projectId}/${facilityId}/charts/calendar-chart`,\r\n chart: 'calendar-chart'\r\n },\r\n {\r\n label: 'Demand Duration',\r\n link: `/${projectId}/${facilityId}/charts/demand-duration`,\r\n chart: 'demand-duration'\r\n },\r\n {\r\n label: 'Scatter Plot',\r\n link: `/${projectId}/${facilityId}/charts/scatter-plot`,\r\n chart: 'scatter-plot'\r\n },\r\n {\r\n label: 'Surface Plot',\r\n link: `/${projectId}/${facilityId}/charts/surface-plot`,\r\n chart: 'surface-plot'\r\n },\r\n ]; \r\n \r\n let selectedIndex;\r\n tabs.forEach((x, index) => {\r\n if (x.chart === this.props.selectedFacilitySubview) {\r\n selectedIndex = index;\r\n } \r\n });\r\n \r\n return (\r\n \r\n {tabs.map(tab => (\r\n selectChartView(tab.chart)} \r\n >\r\n \r\n \r\n\r\n ))}\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default ChartsTabs","import React, {Component} from 'react';\r\n\r\n\r\nimport {bindActionCreators} from 'redux';\r\nimport {connect} from 'react-redux';\r\nimport {\r\n setChartCanUpdateData,\r\n setChartDataFilterFormObject,\r\n onDataFilterFormSubmit,\r\n setDurationView,\r\n setChartOptions,\r\n setTemperatureView,\r\n setShowMeterDatesAndRanges\r\n} from \"../../../redux/actions/meter-charts-actions\";\r\n\r\n\r\nimport CalendarChartContainer from './CalendarChart';\r\nimport MainChartsContainer from './MainChartsComponent'\r\n\r\n\r\nimport {withStyles} from '@material-ui/core/styles';\r\n\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\nimport {getProjectById} from \"../../../services/project.service\";\r\nimport {getFacilitiesByProjectId, getFacilityById} from \"../../../services/facility.service\";\r\nimport ChartDataFilterFormObject from \"../DataFilterForm/ChartDataFilterFormObject\";\r\nimport exportDataAsCsvFunciton from \"../../js/exportDataAsCsv\";\r\nimport SurfacePlot from \"./SurfacePlot\";\r\nimport AntTabs from \"../../../components/AntTabs/AntTabs\";\r\nimport AntTab from \"../../../components/AntTabs/AntTab\";\r\nimport {Link} from \"react-router-dom\";\r\nimport {Typography} from \"@material-ui/core\";\r\nimport {selectChartView} from \"../../../redux/actions/chart-actions\";\r\nimport ChartsTabs from \"./Tabs\";\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport MeterSectionTitleBar from \"../components/MeterSectionTitleBar\";\r\nimport GreenButton from \"../../../components/CustomButtons/GreenButton\";\r\nimport CloudDownload from \"@material-ui/icons/CloudDownload\";\r\nimport moment from \"moment\";\r\n\r\n\r\nconst styles = theme => ({\r\n root: {\r\n flexGrow: 1,\r\n paddingLeft: theme.spacing(1)\r\n },\r\n title: {\r\n paddingTop: theme.spacing(1),\r\n flexGrow: 1\r\n }\r\n});\r\n\r\n\r\nclass DataViewTemplateTemp extends Component {\r\n\r\n state = {\r\n currentTab: 0,\r\n }\r\n\r\n toggleDurationView = () => {\r\n this.props.setChartOptions(null);\r\n const {selectedFacilitySubview, selectedFacility} = this.props;\r\n const {timezone} = selectedFacility;\r\n let chartOptions;\r\n if (this.props.durationView === \"week\") {\r\n this.props.setDurationView(\"day\");\r\n if (selectedFacilitySubview === 'scatter-plot') {\r\n let timeSeriesData = this.props.intervalDataForZoomable;\r\n chartOptions = timeSeriesData.generateScatterPlotChartOptions(this.props.chartDataFilterFormObject.dataType, \"day\", timezone, selectedFacility.intervalDuration);\r\n } else if (selectedFacilitySubview === 'heat-map') {\r\n let heatMapData = this.props.intervalDataForHeatMap;\r\n chartOptions = heatMapData.generateChartOptions(this.props.chartDataFilterFormObject.dataType, \"day\");\r\n }\r\n\r\n\r\n } else {\r\n\r\n this.props.setDurationView(\"week\");\r\n if (selectedFacilitySubview === 'scatter-plot') {\r\n let timeSeriesData = this.props.intervalDataForZoomable;\r\n chartOptions = timeSeriesData.generateScatterPlotChartOptions(this.props.chartDataFilterFormObject.dataType, \"week\", timezone, selectedFacility.intervalDuration);\r\n } else if (selectedFacilitySubview === 'heat-map') {\r\n let heatMapData = this.props.intervalDataForHeatMap;\r\n chartOptions = heatMapData.generateChartOptions(this.props.chartDataFilterFormObject.dataType, \"week\");\r\n }\r\n\r\n\r\n }\r\n this.props.setChartOptions(chartOptions);\r\n\r\n };\r\n\r\n toggleTemperatureView = () => {\r\n debugger;\r\n const {selectedFacility} = this.props;\r\n const {timezone} = selectedFacility;\r\n let temperatureView = !this.props.temperatureView;\r\n this.props.setTemperatureView(temperatureView);\r\n let timeSeriesData = this.props.intervalDataForZoomable;\r\n let chartOptions = timeSeriesData.generateZoomableChartOptions(this.props.chartDataFilterFormObject.dataType, timezone, temperatureView);\r\n this.props.setChartOptions(chartOptions);\r\n };\r\n \r\n toggleShowDatesAndRangesView = () => {\r\n const {selectedFacility} = this.props;\r\n const {timezone} = selectedFacility;\r\n let showMeterDatesAndRanges = !this.props.showMeterDatesAndRanges;\r\n this.props.setShowMeterDatesAndRanges(showMeterDatesAndRanges);\r\n let timeSeriesData = this.props.intervalDataForZoomable;\r\n let plotLines;\r\n let plotBands;\r\n if (showMeterDatesAndRanges) {\r\n plotLines = [{\r\n color: '#0000ff',\r\n width: 2,\r\n value: moment().year(2019).month(5).valueOf(),\r\n label: {\r\n text: 'Event Here'\r\n }\r\n }, {\r\n color: '#FF0000',\r\n width: 2,\r\n value: moment().year(2019).month(7).valueOf(),\r\n label: {\r\n text: 'Event Here 2'\r\n },\r\n events: {\r\n click: function() {\r\n alert('clicked the line')\r\n }\r\n }\r\n }];\r\n plotBands = [{\r\n color: 'orange', // Color value\r\n from: moment().year(2019).month(4).valueOf(), // Start of the plot band\r\n to: moment().year(2019).month(6).valueOf(), // End of the plot band\r\n label: {\r\n text: 'Corona Virus'\r\n },\r\n events: {\r\n click: function() {\r\n alert('clicked the band')\r\n },\r\n }\r\n }, {\r\n color: 'yellow', // Color value\r\n from: moment().year(2019).month(6).valueOf(), // Start of the plot band\r\n to: moment().year(2019).month(7).valueOf(), // End of the plot band\r\n label: {\r\n text: 'Corona Virus'\r\n },\r\n events: {\r\n click: function() {\r\n alert('clicked the band')\r\n }\r\n }\r\n }];\r\n }\r\n\r\n let chartOptions = timeSeriesData.generateZoomableChartOptions(this.props.chartDataFilterFormObject.dataType, timezone, this.props.temperatureView, plotLines, plotBands);\r\n this.props.setChartOptions(chartOptions);\r\n };\r\n\r\n setDefaultDataFilterForm = (view) => {\r\n const {selectedFacility} = this.props;\r\n switch (view) {\r\n case 'load-curve':\r\n case 'summary-chart':\r\n case 'heat-map':\r\n case 'demand-duration':\r\n case 'zoomable-chart':\r\n case 'calendar-chart':\r\n case 'scatter-plot':\r\n case 'surface-plot':\r\n let defaultForm = new ChartDataFilterFormObject(selectedFacility).getDefaultFormByChartType(view);\r\n this.setDataFilterForm(defaultForm);\r\n }\r\n };\r\n\r\n setDataFilterForm = (chartDataFilterForm) => {\r\n //set state and call the default graph to populate\r\n this.setState({chartDataFilterForm}, this.onDataFilterFormSubmit);\r\n this.props.setChartDataFilterFormObject(chartDataFilterForm);\r\n };\r\n\r\n exportDataAsCsv = () => {\r\n exportDataAsCsvFunciton(this.props.chartTableSettings);\r\n };\r\n\r\n componentDidMount() {\r\n const {facilityId, projectId, selectedFacility, selectedFacilitySubview} = this.props;\r\n if (selectedFacility.maximumkWValue) {\r\n // this.setDefaultDataFilterForm(selectedFacilitySubview);\r\n }\r\n // this.props.onDataFilterFormSubmit();\r\n };\r\n\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n if (prevProps.selectedFacility !== this.props.selectedFacility || prevProps.selectedFacilitySubview !== this.props.selectedFacilitySubview) {\r\n // this.props.onDataFilterFormSubmit();\r\n }\r\n }\r\n\r\n getComponent() {\r\n\r\n const {\r\n\r\n //parent\r\n projectId,\r\n facilityId,\r\n\r\n //Table\r\n // exportDataAsCsv,\r\n\r\n //redux\r\n chartOptions,\r\n chartTableSettings,\r\n dataFilterMessage,\r\n chartCanUpdateData,\r\n setChartCanUpdateData,\r\n selectedFacilityView,\r\n selectedFacilitySubview,\r\n selectedFacility\r\n } = this.props;\r\n\r\n switch (this.props.selectedFacilitySubview) {\r\n case 'zoomable-chart':\r\n case 'demand-duration':\r\n case 'summary-chart':\r\n case 'load-curve':\r\n case 'heat-map':\r\n case 'scatter-plot':\r\n return ;\r\n\r\n case 'surface-plot':\r\n return ;\r\n\r\n case 'calendar-chart':\r\n return ;\r\n }\r\n };\r\n \r\n getRightContent = () => {\r\n switch (this.props.selectedFacilitySubview) {\r\n case 'zoomable-chart':\r\n case 'demand-duration':\r\n case 'summary-chart':\r\n case 'load-curve':\r\n case 'heat-map':\r\n case 'scatter-plot':\r\n case 'surface-plot':\r\n return (\r\n
    \r\n exportDataAsCsvFunciton(this.props.chartTableSettings)}>\r\n \r\n \r\n Export Data\r\n \r\n\r\n \r\n
    \r\n )\r\n }\r\n }\r\n\r\n render() {\r\n\r\n\r\n const {classes} = this.props;\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 {this.getComponent()}\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n selectedFacilitySubview: state.selectedFacilitySubview,\r\n chartDataFilterFormObject: state.chartDataFilterFormObject,\r\n chartOptions: state.chartOptions,\r\n plotlyChartOptions: state.plotlyChartOptions,\r\n chartTableSettings: state.chartTableSettings,\r\n dataFilterMessage: state.dataFilterMessage,\r\n chartCanUpdateData: state.chartCanUpdateData,\r\n selectedFacility: state.selectedFacility,\r\n selectedFacilityView: state.selectedFacilityView,\r\n durationView: state.durationView,\r\n temperatureView: state.temperatureView,\r\n showMeterDatesAndRanges: state.showMeterDatesAndRanges,\r\n intervalDataForZoomable: state.intervalDataForZoomable,\r\n intervalDataForHeatMap: state.intervalDataForHeatMap,\r\n\r\n\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n selectChartView,\r\n onDataFilterFormSubmit,\r\n setChartDataFilterFormObject,\r\n setChartCanUpdateData,\r\n setTemperatureView,\r\n setDurationView,\r\n setChartOptions,\r\n setShowMeterDatesAndRanges\r\n }, dispatch);\r\n};\r\n\r\nlet DataViewTemplate = connect(mapStateToProps, mapDispatchToProps)(DataViewTemplateTemp);\r\n\r\nexport default withStyles(styles)(DataViewTemplate)\r\n\r\n","import React, { Fragment } from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { HotTable } from '@handsontable/react';\r\nimport Handsontable from 'handsontable';\r\nimport ImportDataComponent from '../../../ImportData/ImportDataComponent'\r\nimport MeterSectionTitleBar from \"../components/MeterSectionTitleBar\";\r\n\r\n\r\n\r\n\r\nexport default function ImportDataFacilityView(props) {\r\n const { facilityId, projectId } = 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\n\r\n );\r\n}\r\n","import React, { Fragment, Component, useState } from 'react'\r\n\r\n// Material UI\r\nimport { withStyles, makeStyles } from '@material-ui/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport NativeSelect from '@material-ui/core/NativeSelect';\r\nimport InputBase from '@material-ui/core/InputBase';\r\nimport blue from '@material-ui/core/colors/blue';\r\n\r\n//Pickers\r\nimport {\r\n DatePicker,\r\n TimePicker,\r\n MuiPickersUtilsProvider,\r\n} from \"@material-ui/pickers\";\r\nimport MomentUtils from '@date-io/moment';\r\n\r\nimport moment from 'moment'\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst BootstrapInput = withStyles(theme => ({\r\n root: {\r\n 'label + &': {\r\n marginTop: theme.spacing(3),\r\n },\r\n },\r\n input: {\r\n borderRadius: 4,\r\n position: 'relative',\r\n backgroundColor: '#fcfcfc',\r\n border: '1px solid #ced4da',\r\n fontSize: 16,\r\n padding: '10px 26px 10px 12px',\r\n transition: theme.transitions.create(['border-color', 'box-shadow']),\r\n // Use the system font instead of the default Roboto font.\r\n fontFamily: [\r\n //'-apple-system',\r\n //'BlinkMacSystemFont',\r\n //'\"Segoe UI\"',\r\n //'Roboto',\r\n //'\"Helvetica Neue\"',\r\n //'Arial',\r\n //'sans-serif',\r\n //'\"Apple Color Emoji\"',\r\n //'\"Segoe UI Emoji\"',\r\n '\"Roboto\"',\r\n ].join(','),\r\n '&:focus': {\r\n //borderRadius: 4,\r\n //borderColor: '#80bdff',\r\n //boxShadow: '0 0 0 0.2rem rgba(0,123,255,.25)',\r\n },\r\n },\r\n}))(InputBase);\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n paper: {\r\n margin: 20,\r\n },\r\n weekTable: {\r\n backgroundColor: '#fcfcfc',\r\n borderStyle: 'solid',\r\n borderWidth: 1,\r\n borderColor: '#e6e6e6',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#ededed'\r\n }\r\n\r\n },\r\n selectedWeekTable: {\r\n color: 'white',\r\n backgroundColor: theme.palette.primary.light,\r\n borderStyle: 'solid',\r\n borderWidth: 1,\r\n borderColor: '#e6e6e6',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: theme.palette.primary.main\r\n }\r\n },\r\n gridSection: {\r\n paddingLeft: 5,\r\n paddingRight: 5,\r\n\r\n },\r\n hr: {\r\n border: 0,\r\n clear: 'both',\r\n display: 'block',\r\n width: '100%',\r\n backgroundColor: '#e6e6e6',\r\n height: '1px',\r\n marginTop: 10,\r\n marginBottom: 10\r\n },\r\n formSectionTitle: {\r\n variant: 'overline'\r\n }\r\n}));\r\n\r\n\r\n\r\nconst DataTypeDropdown = ({ chartDataFilterForm, handleDataFilterFormSelectChange }) => {\r\n\r\n const classes = useStyles();\r\n return (\r\n \r\n Data Type\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 SummaryLevelDropdown = ({ chartDataFilterForm, handleDataFilterFormSelectChange }) => {\r\n\r\n const classes = useStyles();\r\n return (\r\n \r\n Summary Level\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 DaysSection = ({ chartDataFilterForm, handleDataFilterFormCheckboxChange, handleAggregateDataFilterFormInputs }) => {\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n Days\r\n \r\n \r\n handleAggregateDataFilterFormInputs('all', 'days')}>\r\n All\r\n \r\n \r\n \r\n handleAggregateDataFilterFormInputs('weekdays', 'days')}>\r\n Weekdays\r\n \r\n \r\n \r\n handleAggregateDataFilterFormInputs('weekends', 'days')}>\r\n Weekends\r\n \r\n \r\n \r\n \r\n \r\n \r\n {chartDataFilterForm.days.map((day, index) =>\r\n handleDataFilterFormCheckboxChange('days', index)} >\r\n \r\n {day.label}\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst MonthsSection = ({ chartDataFilterForm, handleDataFilterFormCheckboxChange, handleAggregateDataFilterFormInputs }) => {\r\n \r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n Months\r\n \r\n \r\n handleAggregateDataFilterFormInputs('all', 'months')}>\r\n All\r\n \r\n \r\n \r\n handleAggregateDataFilterFormInputs('clear', 'months')}>\r\n Clear\r\n\r\n \r\n \r\n \r\n \r\n {chartDataFilterForm.months.map((month, index) =>\r\n handleDataFilterFormCheckboxChange('months', index)} >\r\n \r\n {month.label}\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst YearsSection = ({ chartDataFilterForm, handleDataFilterFormCheckboxChange, handleAggregateDataFilterFormInputs, selectedFacility }) => {\r\n \r\n let numberOfYears = chartDataFilterForm.years.length;\r\n let gridWidth;\r\n if (numberOfYears === 1) {\r\n gridWidth = 12\r\n } else if (numberOfYears % 3 === 0) {\r\n gridWidth = 4\r\n } else if (numberOfYears % 2 === 0) {\r\n gridWidth = 6\r\n } else {\r\n gridWidth = 12\r\n }\r\n \r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n Years\r\n \r\n \r\n handleAggregateDataFilterFormInputs('all', 'years')}>\r\n All\r\n \r\n \r\n \r\n \r\n {chartDataFilterForm.years.map((year, index) =>\r\n handleDataFilterFormCheckboxChange('years', index)} >\r\n \r\n {year.label}\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst DataTypesSection = ({ chartDataFilterForm, handleDataFilterFormCheckboxChange, handleAggregateDataFilterFormInputs }) => {\r\n\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n Data Types\r\n \r\n \r\n handleAggregateDataFilterFormInputs('all', 'dataTypeOptions')}>\r\n All\r\n \r\n \r\n \r\n handleAggregateDataFilterFormInputs('clear', 'dataTypeOptions')}>\r\n Clear\r\n\r\n \r\n \r\n \r\n \r\n {chartDataFilterForm.dataTypeOptions.map((dataType, index) => {\r\n if (index < 6) {\r\n return handleDataFilterFormCheckboxChange('dataTypeOptions', index)} >\r\n \r\n {dataType.label}\r\n \r\n \r\n } else {\r\n return handleDataFilterFormCheckboxChange('dataTypeOptions', index)} >\r\n \r\n {dataType.label}\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 SeriesTypeSection = ({ chartDataFilterForm, handleDataFilterFormCheckboxChange, handleAggregateDataFilterFormInputs }) => {\r\n\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n Series Type\r\n \r\n \r\n handleAggregateDataFilterFormInputs('all', 'seriesTypes')}>\r\n All\r\n \r\n \r\n \r\n \r\n \r\n \r\n {chartDataFilterForm.seriesTypes.map((seriesType, index) =>\r\n handleDataFilterFormCheckboxChange('seriesTypes', index)} >\r\n \r\n {seriesType.shortLabel}\r\n \r\n \r\n )}\r\n\r\n \r\n\r\n \r\n \r\n )\r\n}\r\n\r\nconst SeriesTypeDropdown = ({ chartDataFilterForm, handleSeriesTypeDropdownChange }) => {\r\n\r\n const classes = useStyles();\r\n const currentSelected = chartDataFilterForm.seriesTypes.filter(type => type.value === true);\r\n const currentValue = currentSelected.label;\r\n\r\n return (\r\n \r\n Series Type\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 DateRangeSection = ({ chartDataFilterForm, handleDataFilterFormDateAndTimeChange, selectedFacility }) => {\r\n // debugger;\r\n let minDate = moment.utc(selectedFacility.intervalDataStartDate).hour(0).minute(0).seconds(0).millisecond(0);\r\n let maxDate = moment(selectedFacility.intervalDataEndDate).hour(23).minute(59).seconds(59).millisecond(999);\r\n const classes = useStyles();\r\n return (\r\n \r\n Date Range\r\n \r\n \r\n \r\n handleDataFilterFormDateAndTimeChange(event.format('YYYY-MM-DD'), 'startDate')} minDate={minDate} maxDate={chartDataFilterForm.endDate} format=\"MM/DD/YYYY\" views={[\"year\", \"month\", \"date\"]} />\r\n \r\n \r\n \r\n \r\n {handleDataFilterFormDateAndTimeChange(event.format('YYYY-MM-DD'), 'endDate'); console.log('selected: ', event); console.log('max: ', maxDate)}} minDate={chartDataFilterForm.startDate} maxDate={maxDate} format=\"MM/DD/YYYY\" views={[\"year\", \"month\", \"date\"]} />\r\n \r\n \r\n \r\n\r\n\r\n \r\n )\r\n}\r\n\r\n// const TimeRangeSection = ({ chartDataFilterForm, handleDataFilterFormDateAndTimeChange }) => {\r\n//\r\n// const classes = useStyles();\r\n// return (\r\n// \r\n// Time Range\r\n// \r\n// \r\n// \r\n// handleDataFilterFormDateAndTimeChange(event.format('YYYY-MM-DD HH:mm:ss'), 'startTime')} />\r\n// \r\n// \r\n//\r\n// \r\n// \r\n// {handleDataFilterFormDateAndTimeChange(event.format('YYYY-MM-DD HH:mm:ss'), 'endTime')}} />\r\n// \r\n// \r\n// \r\n//\r\n//\r\n// \r\n// )\r\n// }\r\n\r\nconst TimeRangeSection = ({ chartDataFilterForm, handleDataFilterFormDateAndTimeChange }) => {\r\n const classes = useStyles();\r\n let times = [];\r\n let start = moment('1/1/2020').hours(0).minutes(0).milliseconds(0);\r\n for (let i = 0; i < 48; i++) {\r\n let value = start.clone().add(i * 30, 'minutes');\r\n let label = value.format(\"HH:mm\");\r\n times.push({value: value.valueOf(), label})\r\n }\r\n \r\n let endTimes = [];\r\n let sameDay = true;\r\n let start2 = chartDataFilterForm.startTime ? moment(parseInt(chartDataFilterForm.startTime)) : moment('1/1/2020').hours(0).minutes(0).milliseconds(0);\r\n for (let j = 1; sameDay; j++) {\r\n let value = start2.clone().add(j * 30, 'minutes');\r\n let label = value.format(\"HH:mm\");\r\n endTimes.push({value: value.valueOf(), label});\r\n if (!value.isSame(start2, 'day')) {\r\n sameDay = false\r\n }\r\n }\r\n\r\n \r\n \r\n return (\r\n \r\n \r\n Start Time\r\n \r\n {\r\n // let time = moment(parseInt(event.target.value)).format('HH:mm');\r\n let time = event.target.value;\r\n handleDataFilterFormDateAndTimeChange(time, 'startTime')\r\n }}\r\n name=\"seriesTypes\"\r\n style={{ width: '100%' }}\r\n input={}\r\n >\r\n {times.map((x, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n End Time\r\n \r\n {\r\n // let time = moment(parseInt(event.target.value)).format('HH:mm');\r\n let time = event.target.value;\r\n handleDataFilterFormDateAndTimeChange(time, 'endTime')\r\n }}\r\n name=\"seriesTypes\"\r\n style={{ width: '100%' }}\r\n input={}\r\n >\r\n {endTimes.map(x => (\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 { DataTypeDropdown, SummaryLevelDropdown, DaysSection, MonthsSection, DataTypesSection, SeriesTypeSection, DateRangeSection, TimeRangeSection, SeriesTypeDropdown, YearsSection }","import React, { Component, Fragment } from 'react'\r\n\r\n\r\n// Material UI\r\nimport { withStyles } from '@material-ui/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport FilterList from '@material-ui/icons/FilterList';\r\n\r\n//Components\r\nimport PulseLoader from '../../../components/Spinners/pulse-loader'\r\n\r\n// Form Sections\r\nimport {\r\n DataTypeDropdown,\r\n SummaryLevelDropdown,\r\n DaysSection,\r\n MonthsSection,\r\n YearsSection,\r\n SeriesTypeSection,\r\n DataTypesSection,\r\n DateRangeSection,\r\n TimeRangeSection,\r\n SeriesTypeDropdown\r\n} from './data-filter-form-sections'\r\n\r\nimport moment from \"moment\";\r\nimport GreenButton from \"../../../components/CustomButtons/GreenButton\";\r\n\r\nconst styles = theme => ({\r\n paper: {\r\n margin: 20,\r\n },\r\n weekTable: {\r\n backgroundColor: '#fcfcfc',\r\n borderStyle: 'solid',\r\n borderWidth: 1,\r\n borderColor: '#e6e6e6',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#ededed'\r\n }\r\n\r\n },\r\n button: {\r\n textTransform: 'none',\r\n // color: theme.palette.secondary.contrast \r\n },\r\n selectedWeekTable: {\r\n color: 'white',\r\n backgroundColor: theme.palette.primary.light,\r\n borderStyle: 'solid',\r\n borderWidth: 1,\r\n borderColor: '#e6e6e6',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#00c936'\r\n }\r\n },\r\n gridSection: {\r\n paddingLeft: 5,\r\n paddingRight: 5,\r\n\r\n },\r\n hr: {\r\n border: 0,\r\n clear: 'both',\r\n display: 'block',\r\n width: '100%',\r\n backgroundColor: '#e6e6e6',\r\n height: '1px',\r\n marginTop: 10,\r\n marginBottom: 10\r\n },\r\n formSectionTitle: {\r\n variant: 'overline'\r\n },\r\n formSubmitToolbar: {\r\n position: 'sticky',\r\n paddingTop: 10,\r\n paddingBottom: 10,\r\n // backgroundColor: 'white',\r\n },\r\n});\r\n\r\n\r\n\r\n\r\nclass ChartDataFilterForm extends Component {\r\n constructor(props) {\r\n super(props)\r\n }\r\n\r\n state = {\r\n currentFormOptions: {\r\n dataType: false,\r\n summaryLevel: false,\r\n seriesTypeDropdown: false,\r\n seriesTypeSection: false,\r\n days: false,\r\n months: false,\r\n dataRange: false,\r\n timeRange: false\r\n },\r\n chartDataFilterFormHasChanged: false,\r\n };\r\n\r\n setChartOptions = () => {\r\n const { chartDataFilterForm } = this.props;\r\n\r\n let options = {\r\n dataType: false,\r\n summaryLevel: false,\r\n seriesTypesDropdown: false,\r\n seriesTypesSection: false,\r\n dataTypesSection: false,\r\n days: false,\r\n months: false,\r\n years: false,\r\n dateRange: false,\r\n timeRange: false\r\n };\r\n \r\n switch (chartDataFilterForm.chartType) {\r\n case 'load-curve':\r\n options.dataType = true;\r\n options.summaryLevel = true;\r\n options.seriesTypesDropdown = true;\r\n options.days = true;\r\n options.months = true;\r\n options.years = true;\r\n // options.dateRange = true;\r\n this.setState({ currentFormOptions: options });\r\n break;\r\n case 'summary-chart':\r\n options.dataType = false;\r\n options.dataTypesSection = true;\r\n options.summaryLevel = true;\r\n options.seriesTypesDropdownSelection = true;\r\n options.days = true;\r\n options.months = true;\r\n options.years = true;\r\n // options.dateRange = true;\r\n // options.timeRange = true;\r\n\r\n this.setState({ currentFormOptions: options });\r\n break;\r\n case 'heat-map':\r\n options.dataType = true;\r\n options.years = true;\r\n // options.dateRange = true;\r\n this.setState({ currentFormOptions: options });\r\n break;\r\n case 'zoomable-chart':\r\n options.dataType = true;\r\n // options.dateRange = true;\r\n this.setState({ currentFormOptions: options });\r\n break;\r\n case 'demand-duration':\r\n // options.dataType = true;\r\n // options.dateRange = true;\r\n // options.days = true;\r\n options.months = true;\r\n options.years = true;\r\n this.setState({ currentFormOptions: options });\r\n break;\r\n case 'calendar-chart':\r\n options.dataType = true;\r\n this.setState({ currentFormOptions: options });\r\n break;\r\n case 'scatter-plot':\r\n options.dataType = true;\r\n options.days = true;\r\n options.months = true;\r\n options.years = true;\r\n // options.dateRange = true;\r\n this.setState({ currentFormOptions: options });\r\n break;\r\n case 'surface-plot':\r\n options.dataType = true;\r\n options.days = true;\r\n options.months = true;\r\n options.years = true;\r\n // options.dateRange = true;\r\n this.setState({ currentFormOptions: options });\r\n break;\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n this.setChartOptions();\r\n };\r\n \r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n // debugger;\r\n if (!prevProps.chartDataFilterForm) {\r\n this.setChartOptions();\r\n } else if (this.props.chartDataFilterForm) {\r\n if (prevProps.chartDataFilterForm.chartType !== this.props.chartDataFilterForm.chartType) {\r\n this.setChartOptions();\r\n }\r\n }\r\n \r\n }\r\n\r\n handleAggregateDataFilterFormInputs = (value, key) => {\r\n const {updateChartDataFilterForm} = this.props;\r\n let chartDataFilterForm = {...this.props.chartDataFilterForm};\r\n switch (value) {\r\n case 'all':\r\n chartDataFilterForm[key].forEach(x => x.value = true);\r\n break;\r\n case 'years':\r\n chartDataFilterForm[key].forEach(x => x.value = true);\r\n break;\r\n case 'weekdays':\r\n chartDataFilterForm[key].forEach(x => {\r\n if (x.number !== 1 && x.number !== 7)\r\n x.value = true\r\n else\r\n x.value = false\r\n\r\n });\r\n break;\r\n case 'weekends':\r\n chartDataFilterForm[key].forEach(x => {\r\n if (x.number === 1 || x.number === 7)\r\n x.value = true\r\n else\r\n x.value = false\r\n\r\n });\r\n break;\r\n case 'clear':\r\n chartDataFilterForm[key].forEach(x => x.value = false);\r\n break;\r\n }\r\n updateChartDataFilterForm(chartDataFilterForm);\r\n this.setState({chartDataFilterFormHasChanged: true})\r\n };\r\n\r\n handleDataFilterFormDateAndTimeChange = (event, key) => {\r\n const {updateChartDataFilterForm} = this.props;\r\n let chartDataFilterForm = {...this.props.chartDataFilterForm};\r\n chartDataFilterForm[key] = event;\r\n if (key === 'startTime') {\r\n chartDataFilterForm['endTime'] = moment(parseInt(event)).add(30, 'minutes').valueOf().toString();\r\n }\r\n updateChartDataFilterForm(chartDataFilterForm);\r\n this.setState({chartDataFilterFormHasChanged: true})\r\n };\r\n\r\n handleDataFilterFormSelectChange = (event) => {\r\n const {updateChartDataFilterForm} = this.props;\r\n let value = event.target.value;\r\n let name = event.target.name;\r\n let chartDataFilterForm = {...this.props.chartDataFilterForm};\r\n chartDataFilterForm[name] = value;\r\n updateChartDataFilterForm(chartDataFilterForm);\r\n this.setState({chartDataFilterFormHasChanged: true})\r\n };\r\n \r\n // this one is different because for load curves you can only select one but for summary charts it can be mulitple. So needs to be submitted as an array\r\n handleSeriesTypeDropdownChange = (event) => {\r\n const {updateChartDataFilterForm} = this.props;\r\n let value = event.target.value;\r\n let name = event.target.name;\r\n let chartDataFilterForm = {...this.props.chartDataFilterForm};\r\n chartDataFilterForm[name].forEach(seriesType => {\r\n if (seriesType.label === value)\r\n seriesType.value = true;\r\n else\r\n seriesType.value = false\r\n });\r\n updateChartDataFilterForm(chartDataFilterForm);\r\n this.setState({chartDataFilterFormHasChanged: true})\r\n };\r\n\r\n handleDataFilterFormCheckboxChange = (key, index) => {\r\n const {updateChartDataFilterForm} = this.props;\r\n let chartDataFilterForm = {...this.props.chartDataFilterForm}\r\n chartDataFilterForm[key][index].value = !chartDataFilterForm[key][index].value;\r\n updateChartDataFilterForm(chartDataFilterForm);\r\n this.setState({chartDataFilterFormHasChanged: true})\r\n };\r\n \r\n onSubmit = () => {\r\n this.setState({chartDataFilterFormHasChanged: false});\r\n this.props.onDataFilterFormSubmit();\r\n }\r\n \r\n render() {\r\n const {\r\n chartDataFilterForm,\r\n classes,\r\n onDataFilterFormSubmit,\r\n selectedFacility\r\n } = this.props;\r\n \r\n const {chartDataFilterFormHasChanged} = this.state;\r\n\r\n const { currentFormOptions } = this.state;\r\n return (\r\n\r\n
    \r\n {chartDataFilterForm === null ? :\r\n \r\n \r\n \r\n \r\n \r\n Apply Filters\r\n \r\n \r\n \r\n\r\n \r\n {/*
    */}\r\n {currentFormOptions.dataType ?\r\n \r\n \r\n {/*
    */}\r\n
    \r\n : null}\r\n \r\n {/*
    */}\r\n {currentFormOptions.dataTypesSection ?\r\n \r\n \r\n {/*
    */}\r\n
    \r\n : null}\r\n\r\n\r\n {currentFormOptions.summaryLevel ?\r\n \r\n \r\n {/*
    */}\r\n
    \r\n : null}\r\n\r\n \r\n\r\n {currentFormOptions.seriesTypesDropdown ?\r\n \r\n \r\n {/*
    */}\r\n
    \r\n : null}\r\n\r\n \r\n\r\n {currentFormOptions.days ?\r\n \r\n \r\n {/*
    */}\r\n
    \r\n : null}\r\n\r\n {currentFormOptions.months ?\r\n \r\n \r\n {/*
    */}\r\n
    \r\n \r\n : null}\r\n {currentFormOptions.years ?\r\n \r\n \r\n {/*
    */}\r\n
    \r\n\r\n : null}\r\n\r\n {currentFormOptions.seriesTypesSection ?\r\n \r\n \r\n {/*
    */}\r\n
    \r\n : null}\r\n\r\n\r\n {currentFormOptions.dateRange ?\r\n \r\n \r\n {/*
    */}\r\n
    \r\n : null}\r\n\r\n {currentFormOptions.timeRange ?\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\r\n\r\n}\r\n\r\nexport default withStyles(styles)(ChartDataFilterForm)","import React, {Component} from 'react'\r\n\r\n// Redux\r\nimport {bindActionCreators} from \"redux\";\r\nimport {\r\n setChartDataFilterFormObject,\r\n onDataFilterFormSubmit\r\n} from \"../../../redux/actions/meter-charts-actions\";\r\n\r\nimport {connect} from \"react-redux\";\r\n\r\n// Components\r\nimport ChartDataFilterForm from \"../DataFilterForm\";\r\nimport ChartDataFilterFormObject from \"../DataFilterForm/ChartDataFilterFormObject\";\r\n\r\nclass MeterDataFilterFormContainer extends Component {\r\n \r\n componentDidMount() {\r\n const {selectedFacility, selectedFacilitySubview} = this.props;\r\n if (selectedFacility) {\r\n let temp = new ChartDataFilterFormObject(this.props.selectedFacility);\r\n let chartDataFilterForm = temp.getDefaultFormByChartType(selectedFacilitySubview);\r\n this.props.setChartDataFilterFormObject(chartDataFilterForm);\r\n this.props.onDataFilterFormSubmit();\r\n }\r\n \r\n }\r\n\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n const {selectedFacility, selectedFacilitySubview} = this.props;\r\n if (selectedFacility && (selectedFacilitySubview !== prevProps.selectedFacilitySubview) || (selectedFacility !== prevProps.selectedFacility)) {\r\n // get new filter settings\r\n let temp = new ChartDataFilterFormObject(this.props.selectedFacility);\r\n let chartDataFilterForm = temp.getDefaultFormByChartType(selectedFacilitySubview);\r\n this.props.setChartDataFilterFormObject(chartDataFilterForm);\r\n this.props.onDataFilterFormSubmit();\r\n }\r\n }\r\n\r\n updateChartDataFilterForm = (chartDataFilterForm) => {\r\n // this.setState({chartDataFilterForm, chartDataFilterFormHasChanged: true});\r\n this.props.setChartDataFilterFormObject(chartDataFilterForm)\r\n };\r\n\r\n onDataFilterFormSubmit = () => {\r\n this.props.onDataFilterFormSubmit();\r\n };\r\n \r\n render() {\r\n const {\r\n //redux\r\n chartDataFilterFormObject,\r\n selectedFacility,\r\n \r\n } = this.props;\r\n if (chartDataFilterFormObject) {\r\n if (chartDataFilterFormObject.chartType === this.props.selectedFacilitySubview) {\r\n return (\r\n \r\n )\r\n } else {\r\n return 'Loading'\r\n }\r\n\r\n } else {\r\n return 'Loading'\r\n }\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n chartDataFilterFormObject: state.chartDataFilterFormObject,\r\n selectedFacility: state.selectedFacility,\r\n selectedFacilitySubview: state.selectedFacilitySubview\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n \r\n // chart options\r\n setChartDataFilterFormObject,\r\n onDataFilterFormSubmit,\r\n }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MeterDataFilterFormContainer)","import React from 'react'\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\n\r\nfunction OverviewSidebarAddressSection(props) {\r\n const {selectedFacility} = props;\r\n return (\r\n \r\n \r\n \r\n Address\r\n \r\n \r\n \r\n {selectedFacility.address1 ?\r\n \r\n {selectedFacility.address1}\r\n : null\r\n }\r\n {selectedFacility.address2 ?\r\n \r\n {selectedFacility.address2}\r\n : null\r\n }\r\n \r\n {selectedFacility.city ? selectedFacility.city + ',' : null} {selectedFacility.state ? selectedFacility.state : null} {selectedFacility.postalCode}\r\n \r\n \r\n \r\n\r\n \r\n )\r\n}\r\n\r\nexport default OverviewSidebarAddressSection","import React from 'react'\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Link from \"@material-ui/core/Link\";\r\nimport Icon from \"@material-ui/core/Icon\";\r\n\r\nfunction OverviewSidebarUtilitySection(props) {\r\n const {selectedFacility, toggleEditMeterDialogOpen} = props;\r\n return (\r\n \r\n \r\n \r\n Utility\r\n \r\n \r\n \r\n\r\n \r\n {selectedFacility.utility ? selectedFacility.utility : Add Utility}\r\n \r\n\r\n \r\n \r\n )\r\n}\r\n\r\nexport default OverviewSidebarUtilitySection","import React from 'react'\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Link from \"@material-ui/core/Link\";\r\n\r\n\r\nfunction OverviewSidebarUtilityAccountSection(props) {\r\n const {selectedFacility, toggleEditMeterDialogOpen} = props;\r\n return (\r\n \r\n \r\n \r\n \r\n Meter\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Meter Number: {selectedFacility.meterNumber ? selectedFacility.meterNumber :\r\n Add}\r\n \r\n \r\n Account Number: {selectedFacility.accountNumber ? selectedFacility.accountNumber :\r\n Add}\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default OverviewSidebarUtilityAccountSection","import React, {Component} from 'react'\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport {bindActionCreators} from \"redux\";\r\nimport {connect} from \"react-redux\";\r\nimport {withStyles} from \"@material-ui/core/styles\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport OverviewSidebarAddressSection from \"./components/OverviewSidebarAddressSection\";\r\nimport OverviewSidebarUtilitySection from \"./components/OverviewSidebarUtilitySection\";\r\nimport OverviewSidebarUtilityAccountSection from \"./components/OverviewSidebarUtilityAccountSection\";\r\nimport {setSelectedMeterForEdit, toggleEditMeterDialogOpen} from \"../../../../redux/actions/MeterActions/EditMeterActions/edit-meter-actions\";\r\nimport Icon from \"@material-ui/core/Icon\";\r\nimport Link from \"@material-ui/core/Link\";\r\n\r\nclass OverviewLeftSidebar extends Component {\r\n \r\n componentDidMount() {\r\n const {selectedFacility} = this.props;\r\n this.props.setSelectedMeterForEdit(selectedFacility);\r\n }\r\n \r\n editFacility = () => {\r\n this.props.toggleEditMeterDialogOpen()\r\n }\r\n\r\n render() {\r\n const {selectedFacility, toggleEditMeterDialogOpen} = this.props;\r\n if (selectedFacility) {\r\n return (\r\n \r\n \r\n \r\n Meter Information\r\n \r\n
    \r\n \r\n \r\n edit\r\n \r\n Edit\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 } else {\r\n return 'Loading'\r\n }\r\n\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n selectedFacility: state.selectedFacility,\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n setSelectedMeterForEdit,\r\n toggleEditMeterDialogOpen\r\n }, dispatch);\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(OverviewLeftSidebar);\r\n","import {getUser} from \"../../services/user.service\";\r\n\r\nconst GET_ORGANIZATION_USERS = 'GET_ORGANIZATION_USERS';\r\nconst EDIT_PROFILE_PROPERTY = 'EDIT_PROFILE_PROPERTY';\r\nconst SET_ACTIVE_USER = 'SET_ACTIVE_USER';\r\n\r\nconst editProfileProperty = (object) => {\r\n return {\r\n type: EDIT_PROFILE_PROPERTY,\r\n payload: object\r\n };\r\n};\r\n\r\nconst addUsersToState = (users) => {\r\n return {\r\n type: GET_ORGANIZATION_USERS,\r\n payload: users\r\n };\r\n};\r\n\r\nconst setActiveUser = () => {\r\n let user = getUser();\r\n // debugger;\r\n return {\r\n type: SET_ACTIVE_USER,\r\n payload: user\r\n };\r\n};\r\n\r\n\r\nexport {\r\n editProfileProperty,\r\n EDIT_PROFILE_PROPERTY,\r\n addUsersToState,\r\n GET_ORGANIZATION_USERS,\r\n SET_ACTIVE_USER,\r\n setActiveUser\r\n}\r\n","import MLR from \"ml-regression-multivariate-linear\";\r\n\r\nconst regressionTest = (inputArray, outputArray) => {\r\n\r\n let mlr = new MLR(inputArray, outputArray);\r\n\r\n //calculate r^2\r\n\r\n // calculate the standard error of the y\r\n let sumY = 0;\r\n outputArray.forEach(x => sumY += x[0]);\r\n let yMean = sumY / outputArray.length;\r\n \r\n\r\n let predictionArray = [];\r\n let sumVarianceSquared = 0;\r\n let sumYSquared = 0;\r\n inputArray.forEach((x, index) => {\r\n let prediction = mlr.predict(x)[0];\r\n let variance = outputArray[index][0] - prediction;\r\n sumVarianceSquared += variance**2;\r\n sumYSquared += (outputArray[index][0] - yMean)**2;\r\n predictionArray.push(prediction) \r\n\r\n });\r\n \r\n let r2 = 1 - (sumVarianceSquared / sumYSquared);\r\n let r = r2**0.5;\r\n \r\n // https://www.listendata.com/2014/08/adjusted-r-squared.html\r\n let numberOfPredictors = inputArray[0].length;\r\n let sampleSize = inputArray.length;\r\n \r\n \r\n let r2adjusted = 1 - (1 - r2)*(sampleSize - 1) / (sampleSize - numberOfPredictors - 1);\r\n\r\n let pValues = [];\r\n mlr.tStats.forEach(x => {\r\n pValues.push(pt(x, sampleSize - mlr.tStats.length, 2))\r\n });\r\n\r\n let regressionSummary = {...mlr, pValues, r2, r, r2adjusted};\r\n \r\n \r\n // P Value Calculation https://ytliu0.github.io/p-value_calculators/pt.html\r\n \r\n mlr.r = r;\r\n mlr.r2 = r2;\r\n mlr.r2adjusted = r2adjusted;\r\n mlr.pValues = pValues;\r\n return mlr\r\n // let prediction = mlr.predict([10,1])\r\n\r\n// [6, 6, 6]\r\n}\r\n\r\nexport default regressionTest\r\n\r\n// ptype = 0: calculate P(t) = 1 - F_t(t;n) (RIGHT TAIL)\r\n// ptype = 2: calculate P(>|t|) = 2[1-F_t(|t|;n)] (TWO TAILS)\r\n// ptype = 3: calculate P(<|t|) = 1 - 2[1-F_t(|t|;n)] (MIDDLE AREA)\r\nfunction pt(t,n,ptype) {\r\n let x = 1.0*n/(t*t+n);\r\n let p = betai(n,1,x);\r\n if (ptype === 0) {\r\n if (t > 0) {\r\n p = 1-0.5*p;\r\n } else {\r\n p = 0.5*p;\r\n }\r\n } else if (ptype === 1) {\r\n if (t > 0) {\r\n p = 0.5*p;\r\n } else {\r\n p = 1-0.5*p;\r\n }\r\n } else if (ptype === 3) {\r\n p = 1-p;\r\n }\r\n return p;\r\n}\r\n\r\nfunction betai(n,m,x) {\r\n let bt;\r\n let a = 0.5*n;\r\n let b = 0.5*m;\r\n if (x === 0 || x === 1) {\r\n bt = 0.0;\r\n } else {\r\n bt = Math.exp(gamnln(m+n)-gamnln(n)-gamnln(m) + a*Math.log(x) + b*Math.log(1-x) );\r\n }\r\n let beti;\r\n if (x < (a+1.0)/(a+b+2)) {\r\n // use continued fraction directly\r\n beti = bt*betacf(a,b,x)/a;\r\n } else {\r\n // use continued fraction after making the symmetry transformation\r\n beti = 1.0 - bt*betacf(b,a,1-x)/b;\r\n }\r\n return beti;\r\n}\r\n\r\nfunction gamnln(n) {\r\n // Tabulated values of ln(Gamma(n/2)) for n<201\r\n let lg = [0.5723649429247001, 0, -0.1207822376352452, 0, 0.2846828704729192, 0.6931471805599453, 1.200973602347074, 1.791759469228055, 2.453736570842442, 3.178053830347946, 3.957813967618717, 4.787491742782046, 5.662562059857142, 6.579251212010101, 7.534364236758733, 8.525161361065415, 9.549267257300997, 10.60460290274525, 11.68933342079727, 12.80182748008147, 13.94062521940376, 15.10441257307552, 16.29200047656724, 17.50230784587389, 18.73434751193645, 19.98721449566188, 21.2600761562447, 22.55216385312342, 23.86276584168909, 25.19122118273868, 26.53691449111561, 27.89927138384089, 29.27775451504082, 30.67186010608068, 32.08111489594736, 33.50507345013689, 34.94331577687682, 36.39544520803305, 37.86108650896109, 39.3398841871995, 40.8315009745308, 42.33561646075349, 43.85192586067515, 45.3801388984769, 46.91997879580877, 48.47118135183522, 50.03349410501914, 51.60667556776437, 53.19049452616927, 54.78472939811231, 56.38916764371993, 58.00360522298051, 59.62784609588432, 61.26170176100199, 62.9049908288765, 64.55753862700632, 66.21917683354901, 67.88974313718154, 69.56908092082364, 71.257038967168, 72.9534711841694, 74.65823634883016, 76.37119786778275, 78.09222355331531, 79.82118541361436, 81.55795945611503, 83.30242550295004, 85.05446701758153, 86.81397094178108, 88.58082754219767, 90.35493026581838, 92.13617560368709, 93.92446296229978, 95.71969454214322, 97.52177522288821, 99.33061245478741, 101.1461161558646, 102.9681986145138, 104.7967743971583, 106.6317602606435, 108.4730750690654, 110.3206397147574, 112.1743770431779, 114.0342117814617, 115.9000704704145, 117.7718813997451, 119.6495745463449, 121.5330815154387, 123.4223354844396, 125.3172711493569, 127.2178246736118, 129.1239336391272, 131.0355369995686, 132.9525750356163, 134.8749893121619, 136.8027226373264, 138.7357190232026, 140.6739236482343, 142.617282821146, 144.5657439463449, 146.5192554907206, 148.477766951773, 150.4412288270019, 152.4095925844974, 154.3828106346716, 156.3608363030788, 158.3436238042692, 160.3311282166309, 162.3233054581712, 164.3201122631952, 166.3215061598404, 168.3274454484277, 170.3378891805928, 172.3527971391628, 174.3721298187452, 176.3958484069973, 178.4239147665485, 180.4562914175438, 182.4929415207863, 184.5338288614495, 186.5789178333379, 188.6281734236716, 190.6815611983747, 192.7390472878449, 194.8005983731871, 196.86618167289, 198.9357649299295, 201.0093163992815, 203.0868048358281, 205.1681994826412, 207.2534700596299, 209.3425867525368, 211.435520202271, 213.5322414945632, 215.6327221499328, 217.7369341139542, 219.8448497478113, 221.9564418191303, 224.0716834930795, 226.1905483237276, 228.3130102456502, 230.4390435657769, 232.5686229554685, 234.7017234428182, 236.8383204051684, 238.9783895618343, 241.1219069670290, 243.2688490029827, 245.4191923732478, 247.5729140961868, 249.7299914986334, 251.8904022097232, 254.0541241548883, 256.2211355500095, 258.3914148957209, 260.5649409718632, 262.7416928320802, 264.9216497985528, 267.1047914568685, 269.2910976510198, 271.4805484785288, 273.6731242856937, 275.8688056629533, 278.0675734403662, 280.2694086832001, 282.4742926876305, 284.6822069765408, 286.893133295427, 289.1070536083976, 291.3239500942703, 293.5438051427607, 295.7666013507606, 297.9923215187034, 300.2209486470141, 302.4524659326413, 304.6868567656687, 306.9241047260048, 309.1641935801469, 311.4071072780187, 313.652829949879, 315.9013459032995, 318.1526396202093, 320.4066957540055, 322.6634991267262, 324.9230347262869, 327.1852877037753, 329.4502433708053, 331.7178871969285, 333.9882048070999, 336.2611819791985, 338.5368046415996, 340.815058870799, 343.0959308890863, 345.3794070622669, 347.6654738974312, 349.9541180407703, 352.2453262754350, 354.5390855194408, 356.835382823613, 359.1342053695754];\r\n\r\n if (n < 201) {\r\n return lg[n-1];\r\n }\r\n\r\n // For n>200, use the approx. formula given by numerical recipe\r\n // relative error < 2e-10\r\n let coef = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 1.208650973866179e-3, -5.395239384953e-6];\r\n let stp = 2.5066282746310005;\r\n let x = 0.5*n;\r\n let y = x;\r\n let tmp = x + 5.5;\r\n tmp = (x+0.5)*Math.log(tmp) - tmp;\r\n let ser = 1.000000000190015;\r\n for (let i=0; i<6; i++) {\r\n y = y + 1;\r\n ser = ser + coef[i]/y;\r\n }\r\n let gamln = tmp + Math.log(stp*ser/x);\r\n return gamln;\r\n}\r\n\r\nfunction betacf(a,b,x) {\r\n let maxit = 100000000;\r\n let qab = a+b;\r\n let qap = a+1.0;\r\n let qam = a-1.0;\r\n let c = 1.0;\r\n let d = 1 - qab*x/qap;\r\n let fpmin = 1.e-300;\r\n let eps = 1.e-8;\r\n if (Math.abs(d) < fpmin) { d = fpmin;}\r\n d = 1.0/d;\r\n let h=d;\r\n for (let m=1; m {\r\n this.summaryChartData = 'the test worked!'\r\n };\r\n\r\n\r\n generateHandontableSettings = () => {\r\n return createHandsontableSettingsFromData(this.data, 'weather-degree-days')\r\n };\r\n \r\n getRegression = () => {\r\n const temp = this.data;\r\n let degreeDayData = this.data.degreeDays;\r\n let inputArray = [];\r\n let outputArray = [];\r\n degreeDayData.forEach(day => {\r\n if (day.heatingDegreeDays !== null && day.coolingDegreeDays !== null && day.sumKwh !== null) {\r\n inputArray.push([day.coolingDegreeDays, day.heatingDegreeDays]);\r\n outputArray.push([day.sumKwh])\r\n }\r\n });\r\n let regression = regressionTest(inputArray, outputArray);\r\n return regression\r\n };\r\n\r\n getChartOptions = (chartType) => {\r\n let height = chartType === 'column' ? '600px' : '1200px';\r\n // let data = this.props.degreeDays.degreeDays;\r\n const {heatingDegreeBase, coolingDegreeBase, degreeDays} = this.data;\r\n let dates = [];\r\n let cdd = [];\r\n let hdd = [];\r\n let demand = [];\r\n degreeDays.forEach(interval => {\r\n dates.push(interval.name);\r\n cdd.push(interval.coolingDegreeDays);\r\n hdd.push(interval.heatingDegreeDays);\r\n demand.push(interval['maxKw'] ? interval.maxKw : null)\r\n });\r\n\r\n return {\r\n chart: {\r\n type: chartType,\r\n zoomType: 'x',\r\n height: height,\r\n style: {\r\n fontFamily: \"Roboto\"\r\n },\r\n },\r\n title: {\r\n // text: 'Degree Days'\r\n text: ''\r\n },\r\n subtitle: {\r\n // text: 'CDD Base: ' + coolingDegreeBase + '°F | HDD Base: ' + heatingDegreeBase + '°F'\r\n text: ''\r\n },\r\n xAxis: {\r\n categories: dates,\r\n crosshair: true\r\n },\r\n yAxis: [{\r\n // min: 0,\r\n title: {\r\n text: 'Days'\r\n }\r\n },\r\n {\r\n title: {\r\n text: 'Peak Demand (kW)'\r\n },\r\n opposite: true\r\n }],\r\n\r\n\r\n tooltip: {\r\n // headerFormat: '{point.key}',\r\n // pointFormat: '' +\r\n // '',\r\n // footerFormat: '
    {series.name}: {point.y:.1f} days
    ',\r\n formatter: function () {\r\n let temp = this;\r\n // debugger;\r\n let points = this.points;\r\n let header = points[0].x;\r\n let rows = [];\r\n points.forEach(point => {\r\n rows.push('
    ' + point.series.userOptions.name + ': ' + '' + point.y.toFixed(2) + point.series.userOptions.suffix + '')\r\n });\r\n let final = header;\r\n rows.forEach(row => {\r\n final += row;\r\n })\r\n \r\n return final\r\n\r\n },\r\n shared: true,\r\n useHTML: true\r\n },\r\n plotOptions: {\r\n column: {\r\n pointPadding: 0.2,\r\n borderWidth: 0\r\n }\r\n },\r\n series: [{\r\n name: 'CDD',\r\n data: cdd,\r\n yAxis: 0,\r\n suffix: ' CDD'\r\n\r\n }, {\r\n name: 'HDD',\r\n data: hdd,\r\n color: '#EF5350',\r\n yAxis: 0,\r\n suffix: ' HDD'\r\n\r\n }, {\r\n type: 'line',\r\n name: 'Peak Demand',\r\n data: demand,\r\n color: '#4caf50',\r\n yAxis: 1,\r\n suffix: ' kW'\r\n\r\n }],\r\n credits: {\r\n enabled: false\r\n }\r\n };\r\n }\r\n\r\n}\r\n\r\nexport default DegreeDaysClass;","import createHandsontableSettingsFromData from \"../createHandsontableSettingsFromData\";\r\nimport React from 'react'\r\nimport regressionTest from \"../../FacilityHome/components/Regression/regressionTest\";\r\n\r\nclass RegressionClass {\r\n constructor(data) {\r\n // this.data = data;\r\n const {regression, daysArray} = this.getRegression(data);\r\n this.regression = regression;\r\n this.array = daysArray;\r\n };\r\n\r\n\r\n generateHandontableSettings = () => {\r\n return createHandsontableSettingsFromData(this.array, 'regression')\r\n };\r\n \r\n getRegression = (data) => {\r\n let degreeDayData = data.degreeDays;\r\n let inputArray = [];\r\n let outputArray = [];\r\n let daysArray = [];\r\n degreeDayData.forEach(day => {\r\n if (day.heatingDegreeDays !== null && day.coolingDegreeDays !== null && (day.sumKwh || day.sumKwh === 0) ) {\r\n daysArray.push({name: day.name, sumKwh: day.sumKwh, coolingDegreeDays: day.coolingDegreeDays, heatingDegreeDays: day.heatingDegreeDays});\r\n inputArray.push([day.coolingDegreeDays, day.heatingDegreeDays]);\r\n outputArray.push([day.sumKwh])\r\n }\r\n });\r\n let regression = regressionTest(inputArray, outputArray);\r\n inputArray.forEach((x, index) => {\r\n let prediction = regression.predict(x)[0];\r\n daysArray[index]['prediction'] = prediction;\r\n daysArray[index]['variance'] = daysArray[index].sumKwh - prediction;\r\n \r\n });\r\n\r\n return {regression, daysArray}\r\n };\r\n\r\n getSummaryChartOptions = () => {\r\n\r\n // let data = this.props.degreeDays.degreeDays;\r\n let dates = [];\r\n let prediction = [];\r\n let actual = [];\r\n let variance = [];\r\n this.array.forEach(interval => {\r\n dates.push(interval.name);\r\n actual.push(interval.sumKwh);\r\n prediction.push(interval.prediction);\r\n variance.push(interval.variance)\r\n });\r\n\r\n return {\r\n chart: {\r\n // type: 'column',\r\n zoomType: 'x',\r\n height: '500px',\r\n style: {\r\n fontFamily: \"Roboto\"\r\n },\r\n },\r\n title: {\r\n // text: 'Degree Days'\r\n text: ''\r\n },\r\n subtitle: {\r\n // text: 'CDD Base: ' + coolingDegreeBase + '°F | HDD Base: ' + heatingDegreeBase + '°F'\r\n text: ''\r\n },\r\n xAxis: {\r\n categories: dates,\r\n crosshair: true\r\n },\r\n yAxis: [{\r\n title: {\r\n text: 'Consumption (kWh)'\r\n },\r\n opposite: true\r\n }],\r\n\r\n\r\n tooltip: {\r\n // headerFormat: '{point.key}',\r\n // pointFormat: '' +\r\n // '',\r\n // footerFormat: '
    {series.name}: {point.y:.1f} days
    ',\r\n formatter: function () {\r\n let temp = this;\r\n // debugger;\r\n let points = this.points;\r\n let header = points[0].x;\r\n let rows = [];\r\n points.forEach(point => {\r\n rows.push('
    ' + point.series.userOptions.name + ': ' + '' + point.y.toFixed(2) + point.series.userOptions.suffix + '')\r\n });\r\n let final = header;\r\n rows.forEach(row => {\r\n final += row;\r\n })\r\n \r\n return final\r\n\r\n },\r\n shared: true,\r\n useHTML: true\r\n },\r\n plotOptions: {\r\n column: {\r\n pointPadding: 0.2,\r\n borderWidth: 0\r\n }\r\n },\r\n series: [{\r\n name: 'Actual',\r\n data: actual,\r\n yAxis: 0,\r\n suffix: ' kWh'\r\n\r\n }, {\r\n name: 'Prediction',\r\n data: prediction,\r\n color: '#EF5350',\r\n yAxis: 0,\r\n suffix: ' kWh'\r\n\r\n }, {\r\n type: 'line',\r\n name: 'Variance',\r\n data: variance,\r\n color: '#4caf50',\r\n yAxis: 0,\r\n suffix: ' kWh'\r\n\r\n }],\r\n credits: {\r\n enabled: false\r\n }\r\n };\r\n }\r\n\r\n}\r\n\r\nexport default RegressionClass;","import {SET_CHART_DATA_FILTER_FORM_OBJECT} from \"./meter-charts-actions\";\r\nimport {\r\n getDegreeDays, getFacilityWeather, getFacilityWeatherRequestObject,\r\n getIntervalDataSummaryChartByFacilityId,\r\n intervalDataRequestObject\r\n} from \"../../services/intervalData.service\";\r\nimport {EDIT_PROFILE_PROPERTY} from \"./user-actions\";\r\nimport createHandsontableSettingsFromData from \"../../js/createHandsontableSettingsFromData\";\r\nimport DegreeDaysClass from \"../../js/CustomDataClasses/DegreeDaysClass\";\r\nimport {getDefaultDegreeDayRequestObjectFromFacility} from \"../../js/degreeDayFunctions\";\r\nimport RegressionClass from \"../../js/CustomDataClasses/RegressionClass\";\r\nimport moment from \"moment\";\r\nimport Highcharts from \"highcharts/highstock\";\r\n\r\nconst GET_DEGREE_DAYS = 'GET_DEGREE_DAYS';\r\nconst DEGREE_DAY_CHART_TO_UPDATE = 'DEGREE_DAY_CHART_TO_UPDATE';\r\nconst SET_WEATHER_HANDSONTABLE_SETTINGS_REDUX = 'SET_WEATHER_HANDSONTABLE_SETTINGS_REDUX';\r\nconst CLEAR_DEGREE_DAYS_REDUX = 'CLEAR_DEGREE_DAYS_REDUX';\r\nconst SET_REGRESSION = 'SET_REGRESSION';\r\nconst SET_RAW_WEATHER_DATA_CHART_OPTIONS = 'SET_RAW_WEATHER_DATA_CHART_OPTIONS';\r\n\r\nconst setRawWeatherDataChartOptions = (selectedDataType) => {\r\n return (dispatch, getState) => {\r\n const {\r\n selectedFacility,\r\n\r\n } = getState();\r\n\r\n let request = {...getFacilityWeatherRequestObject};\r\n request.FacilityId = selectedFacility.facilityId;\r\n request.StartDate = selectedFacility.intervalDataStartDate;\r\n request.EndDate = selectedFacility.intervalDataEndDate;\r\n getFacilityWeather(request).then(weatherData => {\r\n\r\n let tableSettings = createHandsontableSettingsFromData(weatherData, 'weather-raw-data');\r\n dispatch({\r\n type: SET_WEATHER_HANDSONTABLE_SETTINGS_REDUX,\r\n payload: tableSettings\r\n });\r\n \r\n \r\n //Build chart\r\n let data = [];\r\n\r\n let dataTypes = [\r\n {\r\n label: 'Temperature',\r\n value: 'temperature',\r\n unit: '°F',\r\n axisLabel: 'Temperature (°F)'\r\n },\r\n {\r\n label: 'Humidity',\r\n value: 'humidity',\r\n unit: '%',\r\n axisLabel: 'Humidity (%)'\r\n },\r\n {\r\n label: 'Dew Point',\r\n value: 'dewpoint',\r\n unit: '°F',\r\n axisLabel: 'Dew Point (°F)'\r\n },\r\n {\r\n label: 'Precipitation',\r\n value: 'precipitation',\r\n unit: ' mm',\r\n axisLabel: 'Precipitation (mm)'\r\n },\r\n {\r\n label: 'Wind Speed',\r\n value: 'windSpeed',\r\n unit: ' km/h',\r\n axisLabel: 'Wind Speed (km/h)'\r\n },\r\n {\r\n label: 'Pressure',\r\n value: 'pressure',\r\n unit: ' hPa',\r\n axisLabel: 'Pressure (hPa)'\r\n },\r\n\r\n ];\r\n weatherData.forEach(row => {\r\n // looks like this time is working correctly\r\n let time = moment(row.weatherDateLocal).valueOf();\r\n data.push([time, row[selectedDataType]]);\r\n });\r\n\r\n const currentDataTypeObject = dataTypes.filter(x => x.value === selectedDataType)[0];\r\n\r\n let yAxis = {\r\n title: {\r\n text: currentDataTypeObject.axisLabel\r\n }\r\n };\r\n\r\n let chartOptions = {\r\n chart: {\r\n zoomType: 'x',\r\n height: '600px'\r\n },\r\n title: {\r\n text: ''\r\n },\r\n time: {\r\n // useUTC: true\r\n timezone: selectedFacility.timezone\r\n },\r\n subtitle: {\r\n text: ''\r\n },\r\n tooltip: {\r\n formatter: function() {\r\n let time = moment(this.x).format('MM-DD-YYYY HH:mm');\r\n return '
    ' + time + '

    ' + this.points[0].series.name + ': ' + this.y.toFixed(2) + this.points[0].series.userOptions.suffix + '
    '\r\n }\r\n },\r\n // rangeSelector: {\r\n // buttons: [{\r\n // type: 'month',\r\n // count: 2,\r\n // text: '2m'\r\n // }, {\r\n // type: 'month',\r\n // count: 3,\r\n // text: '3m'\r\n // }, {\r\n // type: 'month',\r\n // count: 6,\r\n // text: '6m'\r\n // }, {\r\n // type: 'ytd',\r\n // text: 'YTD'\r\n // }, {\r\n // type: 'year',\r\n // count: 1,\r\n // text: '1y'\r\n // }, {\r\n // type: 'all',\r\n // text: 'All'\r\n // }],\r\n // buttonTheme: {\r\n // 'stroke': '#ff0000', // basic\r\n // 'stroke-width': 2, // hyphenated\r\n // 'rotation': 45 // custom\r\n // }\r\n // },\r\n\r\n yAxis: yAxis,\r\n\r\n\r\n xAxis: {\r\n type: 'datetime',\r\n // categories: xAxisCategories\r\n },\r\n\r\n legend: {\r\n layout: 'vertical',\r\n align: 'right',\r\n verticalAlign: 'middle'\r\n },\r\n\r\n series: [{\r\n name: currentDataTypeObject.label,\r\n data: data,\r\n type: 'area',\r\n suffix: currentDataTypeObject.unit,\r\n negativeColor: Highcharts.getOptions().colors[0],\r\n negativeFillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 1,\r\n x2: 0,\r\n y2: 0\r\n },\r\n stops: [\r\n [0, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')],\r\n [1, Highcharts.getOptions().colors[0]]\r\n ]\r\n },\r\n fillColor: {\r\n linearGradient: {\r\n x1: 0,\r\n y1: 0,\r\n x2: 0,\r\n y2: 1\r\n },\r\n stops: [\r\n [0, Highcharts.getOptions().colors[0]],\r\n [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]\r\n ]\r\n },\r\n },\r\n ],\r\n };\r\n dispatch({\r\n type: SET_RAW_WEATHER_DATA_CHART_OPTIONS,\r\n payload: chartOptions\r\n });\r\n });\r\n\r\n \r\n }\r\n}\r\n\r\nconst setDegreeDayChartToUpdate = (value) => {\r\n return {\r\n type: DEGREE_DAY_CHART_TO_UPDATE,\r\n payload: value\r\n };\r\n};\r\n\r\nconst setWeatherHandsonableSettingsRedux = (tableSettings) => {\r\n return {\r\n type: SET_WEATHER_HANDSONTABLE_SETTINGS_REDUX,\r\n payload: tableSettings\r\n };\r\n};\r\n\r\nconst clearDegreeDaysRedux = () => {\r\n return {\r\n type: CLEAR_DEGREE_DAYS_REDUX,\r\n payload: null\r\n };\r\n}\r\n\r\nconst getDegreeDaysRedux = (selectedFacility, cddBase = 65, hddBase = 65) => {\r\n return (dispatch, getState) => {\r\n\r\n let request = getDefaultDegreeDayRequestObjectFromFacility(selectedFacility, cddBase, hddBase);\r\n\r\n const summaryChartsRequest = {...intervalDataRequestObject};\r\n summaryChartsRequest.ProjectId = selectedFacility.projectId;\r\n summaryChartsRequest.FacilityId = selectedFacility.facilityId;\r\n summaryChartsRequest.IncludePercent = false;\r\n summaryChartsRequest.DataType = 'kwh';\r\n summaryChartsRequest.SeriesType = ['Average'];\r\n summaryChartsRequest.SeriesPer = 'day';\r\n summaryChartsRequest.Months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\r\n summaryChartsRequest.DaysOfWeek = [1, 2, 3, 4, 5, 6, 7];\r\n getIntervalDataSummaryChartByFacilityId(summaryChartsRequest).then(summaryChartResponse => {\r\n\r\n getDegreeDays(request).then(degreeDayResponse => {\r\n // the first record is always funky, something Jordan said is on the backend\r\n degreeDayResponse.degreeDays.shift();\r\n //\r\n // let arr1 = degreeDayResponse.data.degreeDays;\r\n //\r\n //\r\n // let arr2 = x;\r\n\r\n let merged = [];\r\n\r\n for (let i = 0; i < degreeDayResponse.degreeDays.length; i++) {\r\n merged.push({\r\n ...degreeDayResponse.degreeDays[i],\r\n ...(summaryChartResponse.find((itmInner) => itmInner.name === degreeDayResponse.degreeDays[i].name))\r\n }\r\n );\r\n }\r\n\r\n degreeDayResponse.degreeDays = merged;\r\n\r\n let degreeDays = new DegreeDaysClass(degreeDayResponse);\r\n // degreeDays.setSummaryChartData();\r\n\r\n dispatch({\r\n type: GET_DEGREE_DAYS,\r\n payload: degreeDays\r\n });\r\n dispatch({\r\n type: DEGREE_DAY_CHART_TO_UPDATE,\r\n payload: true\r\n });\r\n\r\n let getTableSettingsPromise = new Promise(function (resolve, reject) {\r\n let tableSettings;\r\n // tableSettings = createHandsontableSettingsFromData(response, 'weather-degree-days');\r\n tableSettings = degreeDays.generateHandontableSettings();\r\n if (tableSettings) {\r\n resolve(tableSettings)\r\n }\r\n });\r\n\r\n let getDegreeDayRegressionPromise = new Promise(function (resolve, reject) {\r\n let regression = new RegressionClass(degreeDays.data);\r\n\r\n // tableSettings = createHandsontableSettingsFromData(response, 'weather-degree-days');\r\n // regression = regression.getRegression();\r\n if (regression) {\r\n resolve(regression)\r\n }\r\n });\r\n\r\n getDegreeDayRegressionPromise.then(x => {\r\n dispatch({\r\n type: SET_REGRESSION,\r\n payload: x\r\n });\r\n \r\n });\r\n\r\n\r\n getTableSettingsPromise.then(tableSettings => {\r\n dispatch({\r\n type: SET_WEATHER_HANDSONTABLE_SETTINGS_REDUX,\r\n payload: tableSettings\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 {\r\n setDegreeDayChartToUpdate,\r\n getDegreeDaysRedux,\r\n clearDegreeDaysRedux,\r\n setRawWeatherDataChartOptions,\r\n DEGREE_DAY_CHART_TO_UPDATE,\r\n GET_DEGREE_DAYS,\r\n SET_WEATHER_HANDSONTABLE_SETTINGS_REDUX,\r\n CLEAR_DEGREE_DAYS_REDUX,\r\n SET_REGRESSION,\r\n SET_RAW_WEATHER_DATA_CHART_OPTIONS\r\n};\r\n\r\n","import {getDegreeDaysRequestObject} from \"../services/intervalData.service\";\r\nimport moment from 'moment'\r\nimport 'moment-timezone'\r\n\r\nconst getDefaultDegreeDayRequestObjectFromFacility = (selectedFacility, cddBase, hddBase) => {\r\n let degreeDaysRequest = { ...getDegreeDaysRequestObject };\r\n degreeDaysRequest.FacilityId = selectedFacility.facilityId;\r\n degreeDaysRequest.StartDate = selectedFacility.intervalDataStartDate;\r\n // if the facility enddatetime is at 23:59:59.99999 it screws up the call, so just add a minute and set seconds to 0\r\n degreeDaysRequest.EndDate = moment.tz(selectedFacility.intervalDataEndDate, selectedFacility.timezone).seconds(0).add(1, 'minute').format();\r\n degreeDaysRequest.CoolingDegreeBase = cddBase;\r\n degreeDaysRequest.HeatingDegreeBase = hddBase;\r\n return degreeDaysRequest\r\n}\r\n\r\nexport {getDefaultDegreeDayRequestObjectFromFacility}","import React, {Component} from \"react\";\r\nimport {bindActionCreators} from \"redux\";\r\nimport {selectFacility, selectFacilityView, toggleFacilitySideBar} from \"../../../../../redux/actions/facility-actions\";\r\nimport {connect} from \"react-redux\";\r\nimport {withStyles} from \"@material-ui/core\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport FilterList from \"@material-ui/icons/FilterList\";\r\nimport {getDegreeDaysRedux, setDegreeDayChartToUpdate, clearDegreeDaysRedux} from \"../../../../../redux/actions/weather-actions\";\r\nimport {getDegreeDaysRequestObject} from \"../../../../../services/intervalData.service\";\r\nimport CustomOutlinedInput from \"../../../../../components/Inputs/CustomOutlinedInput\";\r\n\r\nconst styles = theme => ({\r\n formSubmitToolbar: {\r\n position: 'sticky',\r\n paddingTop: 5,\r\n paddingBottom: 5,\r\n // backgroundColor: 'white',\r\n },\r\n degreeDayTextField: {\r\n margin: '10px 0',\r\n // backgroundColor: 'red'\r\n }\r\n});\r\n\r\n\r\nclass WeatherFilterForm extends Component {\r\n\r\n state = {\r\n cdd: [],\r\n hdd: [],\r\n dates: [],\r\n chartType: 'column',\r\n chartOptions: null,\r\n formIsValid: false,\r\n cddBaseInput: {\r\n value: 65,\r\n error: false\r\n },\r\n hddBaseInput: {\r\n value: 65,\r\n error: false\r\n },\r\n cddBaseCurrent: null,\r\n hddBaseCurrent: null,\r\n chartCanUpdate: false,\r\n formHasChanged: false\r\n };\r\n\r\n onFormSubmit = () => {\r\n this.props.clearDegreeDaysRedux();\r\n const {selectedFacility} = this.props;\r\n let degreeDaysRequest = { ...getDegreeDaysRequestObject };\r\n degreeDaysRequest.FacilityId = selectedFacility.facilityId;\r\n degreeDaysRequest.StartDate = selectedFacility.intervalDataStartDate;\r\n degreeDaysRequest.EndDate = selectedFacility.intervalDataEndDate;\r\n degreeDaysRequest.CoolingDegreeBase = parseFloat(this.state.cddBaseInput.value);\r\n degreeDaysRequest.HeatingDegreeBase = parseFloat(this.state.hddBaseInput.value);\r\n this.props.getDegreeDaysRedux(selectedFacility, this.state.cddBaseInput.value, this.state.hddBaseInput.value);\r\n this.setState({formHasChanged: false})\r\n };\r\n\r\n onDegreeDayChange = (event) => {\r\n let value = event.target.value;\r\n let baseType = event.target.name;\r\n let isError = !parseFloat(value);\r\n // if (event.target.value === '') {\r\n // this.setState({[baseType]: event.target.value})\r\n // }\r\n // let parsed = parseFloat(event.target.value);\r\n // if (parsed || parsed === 0) {\r\n // \r\n // }\r\n this.setState({[baseType]: {value, error: isError}, formHasChanged: true}, () => {\r\n if (this.state.cddBaseInput.error || this.state.hddBaseInput.error) {\r\n \r\n this.setState({formIsValid: false})\r\n } else {\r\n this.setState({formIsValid: true})\r\n }\r\n })\r\n };\r\n \r\n \r\n \r\n render() {\r\n \r\n const {classes} = this.props;\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n Get Degree Days\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\nfunction mapStateToProps(state) {\r\n return {\r\n selectedFacilityView: state.selectedFacilityView,\r\n // intervalData: state.intervalData,\r\n // facilitySidebarOpen: state.facilitySidebarOpen,\r\n selectedFacility: state.selectedFacility,\r\n // facilities: state.facilities,\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n // selectFacilityView,\r\n // selectFacility,\r\n // toggleFacilitySideBar,\r\n getDegreeDaysRedux,\r\n clearDegreeDaysRedux\r\n }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)((WeatherFilterForm)));\r\n\r\n","import React, {Component} from 'react'\r\nimport WeatherFilterForm from './WeatherFilterForm/index'\r\n\r\nfunction WeatherSidebar(props) {\r\n const {selectedFacilitySubview} = props;\r\n switch (selectedFacilitySubview) {\r\n case 'location': \r\n return
    Location
    ;\r\n case 'degree-days':\r\n return ;\r\n case 'raw-data':\r\n return
    Raw Data
    \r\n }\r\n\r\n}\r\n\r\nexport default WeatherSidebar","import React, {Component} from 'react'\r\nimport {bindActionCreators} from \"redux\";\r\nimport {addCalendarChartDataToState} from \"../../../../redux/actions/interval-data-actions\";\r\nimport {\r\n toggleCalendarChartShowPeakDemand,\r\n toggleCalendarChartShowTemperature\r\n} from \"../../../../redux/actions/DataChartActions/calendar-chart-actions\";\r\nimport {setChartDataFilterFormObject, onDataFilterFormSubmit} from \"../../../../redux/actions/meter-charts-actions\";\r\nimport {connect} from \"react-redux\";\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport ChartDataFilterFormObject from \"../../DataFilterForm/ChartDataFilterFormObject\";\r\n\r\nclass CalendarChartSidebar extends Component {\r\n componentDidMount() {\r\n const {selectedFacility, selectedFacilitySubview} = this.props;\r\n if (selectedFacility) {\r\n let temp = new ChartDataFilterFormObject(this.props.selectedFacility);\r\n let chartDataFilterForm = temp.getDefaultFormByChartType(selectedFacilitySubview);\r\n this.props.setChartDataFilterFormObject(chartDataFilterForm);\r\n this.props.onDataFilterFormSubmit();\r\n }\r\n\r\n }\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n const {selectedFacility, selectedFacilitySubview} = this.props;\r\n if (selectedFacility && (selectedFacilitySubview !== prevProps.selectedFacilitySubview) || (selectedFacility !== prevProps.selectedFacility)) {\r\n // get new filter settings\r\n let temp = new ChartDataFilterFormObject(this.props.selectedFacility);\r\n let chartDataFilterForm = temp.getDefaultFormByChartType(selectedFacilitySubview);\r\n this.props.setChartDataFilterFormObject(chartDataFilterForm);\r\n this.props.onDataFilterFormSubmit();\r\n }\r\n }\r\n \r\n\r\n toggleShowTemperature = () => {\r\n this.props.toggleCalendarChartShowTemperature(!this.props.calendarChartShowTemperature)\r\n };\r\n\r\n toggleShowPeakDemand = () => {\r\n // let showPeakDemand = this.state.showPeakDemand;\r\n // this.setState({showPeakDemand: !showPeakDemand});\r\n this.props.toggleCalendarChartShowPeakDemand(!this.props.calendarChartShowPeakDemand)\r\n };\r\n \r\n render() {\r\n return (\r\n \r\n \r\n }\r\n label=\"Show Peak Demand\"\r\n />\r\n \r\n }\r\n label={'Temperature'}\r\n />\r\n \r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n selectedFacility: state.selectedFacility,\r\n selectedFacilitySubview: state.selectedFacilitySubview,\r\n intervalDataForCalendarChart: state.intervalDataForCalendarChart,\r\n calendarChartShowTemperature: state.calendarChartShowTemperature,\r\n calendarChartShowPeakDemand: state.calendarChartShowPeakDemand\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n addCalendarChartDataToState,\r\n toggleCalendarChartShowTemperature,\r\n toggleCalendarChartShowPeakDemand,\r\n setChartDataFilterFormObject,\r\n onDataFilterFormSubmit\r\n }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CalendarChartSidebar);\r\n","import React, {Component} from 'react'\r\nimport {bindActionCreators} from \"redux\";\r\nimport {connect} from \"react-redux\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Link from '@material-ui/core/Link';\r\n\r\nclass EmissionsSidebar extends Component {\r\n render() {\r\n const {emissionsObject} = this.props;\r\n\r\n\r\n if (Object.keys(emissionsObject).length > 0) {\r\n return (\r\n \r\n \r\n \r\n \r\n Powered by eGRID\r\n \r\n \r\n \r\n \r\n Emissions are calculated through use of The Emissions & Generation Resource Integrated\r\n Database (eGRID). More eGRID information can be found on their website.\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n eGRID Information\r\n \r\n \r\n \r\n \r\n \r\n State: {emissionsObject.location.stateName}\r\n \r\n \r\n \r\n \r\n Postal Code: {emissionsObject.location.postalCode}\r\n \r\n \r\n \r\n \r\n Subregion Abbreviation: {emissionsObject.location.subRegion1Abbr}\r\n \r\n \r\n \r\n \r\n Subregion Name: {emissionsObject.location.subRegion1Name}\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n );\r\n } else {\r\n return 'Loading'\r\n }\r\n\r\n\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n selectedFacility: state.selectedFacility,\r\n selectedFacilitySubview: state.selectedFacilitySubview,\r\n emissionsObject: state.emissionsObject,\r\n };\r\n}\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({}, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(EmissionsSidebar);\r\n","import React, {Component} from \"react\";\r\nimport {bindActionCreators} from \"redux\";\r\nimport {selectFacility, selectFacilityView, toggleFacilitySideBar} from \"../../../../../redux/actions/facility-actions\";\r\nimport {addFacilitiesToState, selectProject} from \"../../../../../redux/actions/project-actions\";\r\nimport {connect} from \"react-redux\";\r\nimport {withStyles} from \"@material-ui/core\";\r\nimport {getDegreeDaysRedux, setDegreeDayChartToUpdate, clearDegreeDaysRedux, setRawWeatherDataChartOptions} from \"../../../../../redux/actions/weather-actions\";\r\nimport {getFacilityWeather, getFacilityWeatherRequestObject} from \"../../../../../services/intervalData.service\";\r\nimport createHandsontableSettingsFromData from \"../../../../../js/createHandsontableSettingsFromData\";\r\nimport moment from \"moment\";\r\nimport Highcharts from \"highcharts/highstock\";\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Select from '@material-ui/core/Select';\r\n\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\n\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport OutlinedInput from \"@material-ui/core/OutlinedInput\";\r\nimport {rawWeatherDataChartOptions} from \"../../../../../redux/reducers/weather-reducers\";\r\n\r\n\r\nconst styles = theme => ({\r\n\r\n});\r\n\r\n\r\nclass RawWeatherDataSidebar extends Component {\r\n\r\n state = {\r\n handsontableSettings: null,\r\n selectedDataType: 'temperature',\r\n dataTypes: [\r\n {\r\n label: 'Temperature',\r\n value: 'temperature',\r\n unit: '°F',\r\n axisLabel: 'Temperature (°F)'\r\n },\r\n {\r\n label: 'Humidity',\r\n value: 'humidity',\r\n unit: '%',\r\n axisLabel: 'Humidity (%)'\r\n },\r\n {\r\n label: 'Dew Point',\r\n value: 'dewpoint',\r\n unit: '°F',\r\n axisLabel: 'Dew Point (°F)'\r\n },\r\n {\r\n label: 'Precipitation',\r\n value: 'precipitation',\r\n unit: ' mm',\r\n axisLabel: 'Precipitation (mm)'\r\n },\r\n {\r\n label: 'Wind Speed',\r\n value: 'windSpeed',\r\n unit: ' km/h',\r\n axisLabel: 'Wind Speed (km/h)'\r\n },\r\n {\r\n label: 'Pressure',\r\n value: 'pressure',\r\n unit: ' hPa',\r\n axisLabel: 'Pressure (hPa)'\r\n },\r\n\r\n ]\r\n };\r\n\r\n componentDidMount = () => {\r\n this.props.setRawWeatherDataChartOptions(this.state.selectedDataType)\r\n };\r\n\r\n changeDataType = (event) => {\r\n this.setState({selectedDataType: event.target.value}, () => {\r\n this.props.setRawWeatherDataChartOptions(this.state.selectedDataType)\r\n })\r\n }\r\n\r\n render() {\r\n\r\n const {classes} = this.props;\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n Data Type\r\n \r\n }\r\n value={this.state.selectedDataType}\r\n // value={age}\r\n onChange={this.changeDataType}\r\n >\r\n {this.state.dataTypes.map(x => (\r\n {x.label}\r\n ))}\r\n \r\n \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n rawWeatherDataChartOptions: state.rawWeatherDataChartOptions\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n setRawWeatherDataChartOptions\r\n }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)((RawWeatherDataSidebar)));\r\n\r\n","import React, {Component, Fragment} from 'react';\r\n\r\nimport clsx from 'clsx';\r\n\r\n\r\nimport {withStyles} from '@material-ui/core/styles';\r\nimport Drawer from '@material-ui/core/Drawer';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport Tab from '@material-ui/core/Tab';\r\nimport MeterDataFilterFormContainer from \"./MeterDataFilterFormContainer\";\r\n\r\nimport OverviewLeftSidebar from \"../Overview/LeftSidebar\";\r\nimport WeatherFilterForm from '../Weather/Sidebar/WeatherFilterForm/index'\r\nimport WeatherSidebar from \"../Weather/Sidebar\";\r\nimport CalendarChartSidebar from \"../Charts/CalendarChart/CalendarChartSidebar\";\r\nimport EmissionsSidebar from \"../Emissions/components/Sidebar\";\r\nimport RawWeatherDataSidebar from '../Weather/Sidebar/RawDataSidebar/index'\r\n\r\nconst drawerWidth = 300;\r\n\r\nconst styles = theme => ({\r\n root: {\r\n display: 'flex',\r\n backgroundColor: theme.palette.background.sidebar,\r\n flexGrow: 1\r\n },\r\n\r\n appBar: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n },\r\n tabs: {\r\n width: drawerWidth\r\n },\r\n\r\n drawer: {\r\n width: drawerWidth,\r\n flexShrink: 0,\r\n whiteSpace: 'nowrap',\r\n },\r\n drawerOpen: {\r\n width: drawerWidth,\r\n border: 'none',\r\n transition: theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n },\r\n drawerClose: {\r\n transition: theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n overflowX: 'hidden',\r\n width: 0,\r\n [theme.breakpoints.up('sm')]: {\r\n width: 0,\r\n },\r\n },\r\n drawerPaper: {\r\n width: drawerWidth,\r\n border: 'none'\r\n },\r\n\r\n toolbar: theme.mixins.toolbar,\r\n // customTab: {\r\n // backgroundColor: '#d7dadd',\r\n // height: 50,\r\n // borderStyle: 'solid',\r\n // borderWidth: 1,\r\n // borderColor: '#e6e6e6',\r\n // color: blue[500],\r\n // cursor: 'pointer',\r\n // '&:hover': {\r\n // backgroundColor: '#d0d3d6',\r\n // textDecoration: 'underline'\r\n // },\r\n // '&:active': {\r\n // borderBottom: 'none',\r\n // backgroundColor: null\r\n // }\r\n // },\r\n // customTabSelected: {\r\n // //backgroundColor: '#d7dadd',\r\n // height: 50,\r\n // borderStyle: 'solid',\r\n // borderWidth: 1,\r\n // borderColor: '#e6e6e6',\r\n // borderBottom: 'none',\r\n // cursor: 'pointer',\r\n // '&:hover': {\r\n // backgroundColor: '#fcfcfc',\r\n // }\r\n // },\r\n // formSubmitToolbar: {\r\n // position: 'fixed',\r\n // bottom: theme.spacing(0),\r\n // backgroundColor: 'pink',\r\n // }\r\n});\r\n\r\nconst chartTabs = [\r\n {\r\n label: 'Main',\r\n value: 'main',\r\n },\r\n {\r\n label: 'Filter',\r\n value: 'data',\r\n },\r\n // {\r\n // label: 'Chart',\r\n // value: 'chart',\r\n // }\r\n];\r\n\r\n\r\nclass FacilitySidebar extends Component {\r\n\r\n state = {\r\n tab: 1,\r\n content: null,\r\n };\r\n\r\n setTab = (value) => {\r\n this.setState({tab: value})\r\n };\r\n \r\n setNavbarState = () => {\r\n const {\r\n selectFacilityView,\r\n selectedFacility,\r\n selectedFacilityView,\r\n selectedFacilitySubview,\r\n selectedChartView,\r\n projectId,\r\n facilityId,\r\n facilitySidebarOpen,\r\n } = this.props;\r\n let content;\r\n let visible = true;\r\n switch (selectedFacilityView) {\r\n case 'overview':\r\n content = ;\r\n break;\r\n case 'charts':\r\n switch (selectedFacilitySubview) {\r\n case 'load-curve':\r\n case 'summary-chart':\r\n case 'heat-map':\r\n case 'zoomable-chart':\r\n case 'scatter-plot':\r\n case 'demand-duration':\r\n \r\n case 'surface-plot':\r\n content = ;\r\n break;\r\n case 'calendar-chart':\r\n content = ;\r\n break;\r\n default:\r\n content = null;\r\n break;\r\n }\r\n break;\r\n case 'weather':\r\n switch (selectedFacilitySubview) {\r\n case 'location':\r\n content = null;\r\n visible = false;\r\n break;\r\n case 'degree-days':\r\n content = ;\r\n break;\r\n case 'raw-data':\r\n content = ;\r\n break;\r\n }\r\n break;\r\n case 'emissions':\r\n content = ;\r\n break;\r\n case 'regression':\r\n content = 'REGRESSION';\r\n break;\r\n case 'notes':\r\n content = null;\r\n visible = false;\r\n break;\r\n case 'data':\r\n content = null;\r\n visible = false;\r\n break;\r\n default:\r\n content = null;\r\n break;\r\n };\r\n this.setState({content, visible})\r\n };\r\n \r\n componentDidMount() {\r\n this.setNavbarState();\r\n }\r\n \r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n const {\r\n selectedFacilityView,\r\n selectedFacilitySubview\r\n } = this.props;\r\n \r\n if (selectedFacilityView !== prevProps.selectedFacilityView || selectedFacilitySubview !== prevProps.selectedFacilitySubview) {\r\n this.setNavbarState();\r\n }\r\n }\r\n\r\n\r\n render() {\r\n const {\r\n classes,\r\n facilitySidebarOpen,\r\n } = this.props;\r\n \r\n let width;\r\n if (this.state.visible) {\r\n width = 300\r\n } else {\r\n width = 0\r\n }\r\n if (this.props.selectedFacility) {\r\n return (\r\n
    \r\n \r\n
    \r\n {this.state.content ? this.state.content : null}\r\n
    \r\n
    \r\n
    \r\n\r\n\r\n );\r\n } else {\r\n return 'Loading'\r\n }\r\n \r\n }\r\n\r\n\r\n};\r\n\r\nexport default withStyles(styles)(FacilitySidebar)\r\n","import React, {Component} from 'react'\r\nimport {Link} from \"react-router-dom\";\r\nimport AntTab from \"../../../../../components/AntTabs/AntTab\";\r\nimport AntTabs from \"../../../../../components/AntTabs/AntTabs\";\r\n\r\nfunction WeatherTabs(props) {\r\n const {selectedFacility} = props;\r\n const {projectId, facilityId} = selectedFacility;\r\n\r\n let tabs = [\r\n \r\n {\r\n label: 'Degree Days',\r\n link: `/${projectId}/${facilityId}/weather/degree-days`,\r\n chart: 'degree-days'\r\n },\r\n {\r\n label: 'Raw Data',\r\n link: `/${projectId}/${facilityId}/weather/raw-data`,\r\n chart: 'raw-data'\r\n },\r\n {\r\n label: 'Location',\r\n link: `/${projectId}/${facilityId}/weather/location`,\r\n chart: 'location'\r\n },\r\n ];\r\n\r\n let selectedIndex;\r\n tabs.forEach((x, index) => {\r\n if (x.chart === props.selectedFacilitySubview) {\r\n selectedIndex = index;\r\n }\r\n });\r\n\r\n return (\r\n \r\n {tabs.map(tab => (\r\n \r\n \r\n \r\n\r\n ))}\r\n \r\n )\r\n\r\n}\r\n\r\nexport default WeatherTabs","import React, {Component} from 'react'\r\nimport Highcharts from 'highcharts'\r\nimport HighchartsReact from 'highcharts-react-official'\r\nimport {bindActionCreators} from \"redux\";\r\nimport {selectFacility, selectFacilityView, toggleFacilitySideBar} from \"../../../../redux/actions/facility-actions\";\r\nimport {connect} from \"react-redux\";\r\nimport {withStyles} from \"@material-ui/core\";\r\nimport ChartWrapper from \"../../../../components/ChartWrapper/ChartWrapper\";\r\nimport ToggleButton from '@material-ui/lab/ToggleButton';\r\nimport ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup';\r\nimport BarChartIcon from '@material-ui/icons/BarChart';\r\n\r\nimport CustomTabsPaper from \"../../../../components/tabs/CustomTabsPaper\";\r\nimport {getDegreeDaysRedux, setDegreeDayChartToUpdate} from \"../../../../redux/actions/weather-actions\";\r\nimport {getDefaultDegreeDayRequestObjectFromFacility} from \"../../../../js/degreeDayFunctions\";\r\nimport {HotTable} from '@handsontable/react';\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport DataViewLoadingSpinner from \"../../spinners/DataViewLoadingSpinner\";\r\nimport exportDataAsCsv from \"../../../js/exportDataAsCsv\";\r\n\r\nconst styles = theme => ({\r\n formControl: {\r\n margin: theme.spacing(1),\r\n minWidth: 120,\r\n },\r\n selectEmpty: {\r\n marginTop: theme.spacing(2),\r\n },\r\n});\r\n\r\nclass DegreeDaysTemp extends Component {\r\n\r\n state = {\r\n cdd: [],\r\n hdd: [],\r\n dates: [],\r\n chartType: 'column',\r\n chartOptions: null,\r\n cddBaseInput: 65,\r\n hddBaseInput: 65,\r\n cddBaseCurrent: null,\r\n hddBaseCurrent: null,\r\n chartCanUpdate: false,\r\n tabs: [\r\n {\r\n label: \"Chart\",\r\n value: \"chart\",\r\n },\r\n {\r\n label: \"Table\",\r\n value: 'table',\r\n }\r\n ],\r\n currentTab: 0,\r\n currentComponent: null\r\n }\r\n\r\n componentDidMount = () => {\r\n // let request = getDefaultDegreeDayRequestObjectFromFacility();\r\n this.props.getDegreeDaysRedux(this.props.selectedFacility);\r\n };\r\n\r\n changeChartType = (event, newValue) => {\r\n if (this.state.chartType !== newValue) {\r\n this.setState({chartType: newValue, chartCanUpdate: true})\r\n }\r\n };\r\n\r\n setChartOptions = () => {\r\n return new Promise((resolve, reject) => {\r\n let chartOptions = this.props.degreeDays.getChartOptions(this.state.chartType);\r\n this.setState({chartOptions, chartCanUpdate: false});\r\n resolve('Success')\r\n })\r\n\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n\r\n if (this.props.degreeDayChartToUpdate || (this.state.chartType !== prevState.chartType)) {\r\n this.setChartOptions().then(x => {\r\n // this.setCurrentComponent()\r\n });\r\n this.props.setDegreeDayChartToUpdate(false)\r\n }\r\n }\r\n\r\n getCurrentComponent = () => {\r\n const {currentTab} = this.state;\r\n if (currentTab === 0) {\r\n const {classes, degreeDays} = this.props;\r\n\r\n return (\r\n
    \r\n {degreeDays ? \r\n : }\r\n titleBarRight={
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    }\r\n /> : }\r\n {/*TODO: put loading spinner*/}\r\n\r\n\r\n
    \r\n )\r\n } else if (currentTab === 1) {\r\n const {degreeDaysHandsontableSettings} = this.props;\r\n if (degreeDaysHandsontableSettings) {\r\n return (\r\n\r\n \r\n\r\n \r\n exportDataAsCsv(degreeDaysHandsontableSettings)}\r\n >\r\n Export Data as CSV\r\n \r\n \r\n\r\n\r\n \r\n {\r\n degreeDaysHandsontableSettings === null ? \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\n\r\n };\r\n\r\n setTab = (value) => {\r\n this.setState({currentTab: value});\r\n }\r\n\r\n render() {\r\n\r\n\r\n return (\r\n
    \r\n\r\n {this.state.chartOptions ?\r\n \r\n\r\n : }\r\n\r\n
    \r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n selectedFacilityView: state.selectedFacilityView,\r\n // intervalData: state.intervalData,\r\n // facilitySidebarOpen: state.facilitySidebarOpen,\r\n selectedFacility: state.selectedFacility,\r\n // facilities: state.facilities,\r\n // intervalDataForLoadCurve: state.intervalDataForLoadCurve,\r\n // intervalDataForZoomable: state.intervalDataForZoomable,\r\n // chartDataFilterFormObject: state.chartDataFilterFormObject,\r\n degreeDays: state.degreeDays,\r\n degreeDayChartToUpdate: state.degreeDayChartToUpdate,\r\n degreeDaysHandsontableSettings: state.degreeDaysHandsontableSettings\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n // selectFacilityView,\r\n // selectFacility,\r\n // toggleFacilitySideBar,\r\n setDegreeDayChartToUpdate,\r\n getDegreeDaysRedux\r\n }, dispatch);\r\n};\r\n\r\nlet DegreeDays = withStyles(styles)(DegreeDaysTemp);\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DegreeDays);\r\n\r\n","import React, { Component } from 'react';\r\nimport GoogleMapReact from 'google-map-react';\r\nimport LocationOnIcon from '@material-ui/icons/LocationOn';\r\nimport Typography from \"@material-ui/core/Typography\";\r\n\r\nconst AnyReactComponent = ({ weatherStationName }) => {\r\n return (\r\n
    \r\n \r\n {weatherStationName}\r\n
    \r\n \r\n )\r\n \r\n};\r\n\r\nclass WeatherStationMap extends Component {\r\n\r\n render() {\r\n const {selectedFacility} = this.props;\r\n let center = {\r\n lat: selectedFacility.weatherStation.latitude,\r\n lng: selectedFacility.weatherStation.longitude\r\n }\r\n let zoom = 11;\r\n \r\n return (\r\n // Important! Always set the container height explicitly\r\n
    \r\n \r\n \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default WeatherStationMap;","import React, { Component } from 'react';\r\nimport WeatherStationMap from \"./WeatherStationMap\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\n\r\nclass WeatherStation extends Component {\r\n\r\n\r\n render() {\r\n \r\n const {selectedFacility} = this.props;\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n {/*TODO: take this away*/}\r\n {/*Hiding for now till deploying*/}\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 WeatherStation;","import React, {Component} from 'react'\r\nimport {getFacilityWeather, getFacilityWeatherRequestObject} from \"../../../../services/intervalData.service\";\r\nimport Highcharts from 'highcharts/highstock';\r\nimport HighchartsReact from 'highcharts-react-official'\r\nimport highchartsExporting from \"highcharts/modules/exporting\";\r\nimport moment from 'moment'\r\nimport CustomTabsPaper from \"../../../../components/tabs/CustomTabsPaper\";\r\nimport ChartWrapper from \"../../../../components/ChartWrapper/ChartWrapper\";\r\nimport ToggleButtonGroup from \"@material-ui/lab/ToggleButtonGroup\";\r\nimport ToggleButton from \"@material-ui/lab/ToggleButton\";\r\nimport BarChartIcon from \"@material-ui/icons/BarChart\";\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Select from '@material-ui/core/Select';\r\nimport {withStyles} from \"@material-ui/core\";\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport OutlinedInput from \"@material-ui/core/OutlinedInput\";\r\nimport WeatherStationMap from \"../WeatherStation\";\r\nimport {HotTable} from '@handsontable/react';\r\nimport createHandsontableSettingsFromData from \"../../../../js/createHandsontableSettingsFromData\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport exportDataAsCsv from \"../../../js/exportDataAsCsv\";\r\nimport DataViewLoadingSpinner from \"../../spinners/DataViewLoadingSpinner\";\r\nimport {bindActionCreators} from \"redux\";\r\nimport {setRawWeatherDataChartOptions} from \"../../../../redux/actions/weather-actions\";\r\nimport {connect} from \"react-redux\";\r\n\r\nconst styles = theme => ({\r\n formControl: {\r\n margin: theme.spacing(1),\r\n minWidth: 120,\r\n width: 200\r\n },\r\n selectEmpty: {\r\n marginTop: theme.spacing(2),\r\n },\r\n});\r\n\r\nclass RawWeatherData extends Component {\r\n\r\n state = {\r\n selectedDataType: 'temperature',\r\n dataTypes: [\r\n {\r\n label: 'Temperature',\r\n value: 'temperature',\r\n unit: '°F',\r\n axisLabel: 'Temperature (°F)'\r\n },\r\n {\r\n label: 'Humidity',\r\n value: 'humidity',\r\n unit: '%',\r\n axisLabel: 'Humidity (%)'\r\n },\r\n {\r\n label: 'Dew Point',\r\n value: 'dewpoint',\r\n unit: '°F',\r\n axisLabel: 'Dew Point (°F)'\r\n },\r\n {\r\n label: 'Precipitation',\r\n value: 'precipitation',\r\n unit: ' mm',\r\n axisLabel: 'Precipitation (mm)'\r\n },\r\n {\r\n label: 'Wind Speed',\r\n value: 'windSpeed',\r\n unit: ' km/h',\r\n axisLabel: 'Wind Speed (km/h)'\r\n },\r\n {\r\n label: 'Pressure',\r\n value: 'pressure',\r\n unit: ' hPa',\r\n axisLabel: 'Pressure (hPa)'\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\n
    \r\n\r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n rawWeatherDataChartOptions: state.rawWeatherDataChartOptions\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n setRawWeatherDataChartOptions\r\n }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)((RawWeatherData)));\r\n","import React, {Component} from 'react'\r\nimport {bindActionCreators} from \"redux\";\r\nimport {connect} from \"react-redux\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport MeterSectionTitleBar from \"../components/MeterSectionTitleBar\";\r\n\r\nimport WeatherTabs from \"./components/Tabs\";\r\nimport DegreeDays from \"./DegreeDays\";\r\nimport WeatherStation from \"./WeatherStation\";\r\nimport RawWeatherData from \"./RawWeatherData\";\r\nimport GreenButton from \"../../../components/CustomButtons/GreenButton\";\r\nimport exportDataAsCsvFunciton from \"../../js/exportDataAsCsv\";\r\nimport CloudDownload from \"@material-ui/icons/CloudDownload\";\r\nimport {Typography} from \"@material-ui/core\";\r\nimport {degreeDaysHandsontableSettings} from \"../../../redux/reducers/weather-reducers\";\r\n\r\nclass Weather extends Component {\r\n\r\n getComponent = () => {\r\n const {selectedFacility, selectedFacilitySubview} = this.props;\r\n switch (selectedFacilitySubview) {\r\n case 'location':\r\n return ;\r\n case 'degree-days':\r\n return ;\r\n case 'raw-data':\r\n return ;\r\n }\r\n }\r\n\r\n getRightContent = () => {\r\n switch (this.props.selectedFacilitySubview) {\r\n case 'degree-days':\r\n case 'raw-data':\r\n return (\r\n
    \r\n exportDataAsCsvFunciton(this.props.weatherHandsontableSettings)}>\r\n \r\n \r\n Export Data\r\n \r\n\r\n \r\n
    \r\n )\r\n }\r\n }\r\n\r\n render() {\r\n const {selectedFacility, selectedFacilitySubview} = this.props;\r\n return (\r\n \r\n \r\n
    \r\n \r\n
    \r\n {this.getComponent()}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n selectedFacility: state.selectedFacility,\r\n selectedFacilitySubview: state.selectedFacilitySubview,\r\n weatherHandsontableSettings: state.weatherHandsontableSettings\r\n };\r\n}\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({}, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Weather);\r\n","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\nconst useStyles = makeStyles({\r\n table: {\r\n minWidth: 650,\r\n },\r\n});\r\n\r\n\r\n\r\nexport default function RegressionDetails(props) {\r\n const classes = useStyles();\r\n const {regression} = props;\r\n // debugger;\r\n const rows = [\r\n {\r\n name: 'CDD', \r\n coefficient: regression.weights[0][0],\r\n stdError: regression.stdErrors[0],\r\n tStat: regression.tStats[0],\r\n pValue: regression.pValues[0],\r\n \r\n },\r\n {\r\n name: 'HDD', \r\n coefficient: regression.weights[1][0],\r\n stdError: regression.stdErrors[1],\r\n tStat: regression.tStats[1],\r\n pValue: regression.pValues[1],\r\n },\r\n {\r\n name: 'Intercept', \r\n coefficient: regression.weights[2][0],\r\n stdError: regression.stdErrors[2],\r\n tStat: regression.tStats[2],\r\n pValue: regression.pValues[2],\r\n },\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Name\r\n Coefficient\r\n Standard Error\r\n tStat\r\n p Value\r\n {/*Protein (g)*/}\r\n \r\n \r\n \r\n {rows.map(row => (\r\n \r\n \r\n {row.name}\r\n \r\n {row.coefficient.toFixed(2)}\r\n {row.stdError.toFixed(2)}\r\n {row.tStat.toFixed(2)}\r\n {row.pValue}\r\n {/*{row.protein}*/}\r\n \r\n ))}\r\n \r\n
    \r\n
    \r\n );\r\n}","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\nconst useStyles = makeStyles({\r\n\r\n});\r\n\r\n\r\n\r\nexport default function RegressionSummary(props) {\r\n const classes = useStyles();\r\n const {regression} = props;\r\n \r\n\r\n return (\r\n \r\n \r\n {/**/}\r\n {/* */}\r\n {/* Name*/}\r\n {/* Coefficient*/}\r\n {/* Standard Error*/}\r\n {/* tStat*/}\r\n {/* p Value*/}\r\n {/* /!*Protein (g)*!/*/}\r\n {/* */}\r\n {/**/}\r\n \r\n\r\n \r\n \r\n R\r\n \r\n {regression.r.toFixed(4)}\r\n \r\n \r\n \r\n R2\r\n \r\n {regression.r2.toFixed(4)}\r\n \r\n \r\n \r\n R2 Adjusted\r\n \r\n {regression.r2adjusted.toFixed(4)}\r\n \r\n\r\n \r\n
    \r\n
    \r\n );\r\n}","import Slider from '@material-ui/core/Slider';\r\nimport {withStyles} from \"@material-ui/core\";\r\nimport orange from \"@material-ui/core/colors/orange\";\r\n\r\nconst CustomSlider = withStyles({\r\n root: {\r\n color: orange[800],\r\n height: 2,\r\n padding: '15px 0',\r\n },\r\n rail: {\r\n height: 2,\r\n opacity: 0.5,\r\n backgroundColor: '#bfbfbf',\r\n },\r\n})(Slider);\r\n\r\nexport default CustomSlider","import React, {Component} from 'react'\r\nimport moment from \"moment\";\r\n\r\n//Material UI\r\nimport CustomSlider from \"../../../../../../components/Sliders/CustomSlider\";\r\nimport Typography from '@material-ui/core/Typography';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\nimport {withStyles} from \"@material-ui/core\";\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport orange from '@material-ui/core/colors/orange';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n width: '100%',\r\n },\r\n slider: {\r\n color: orange[800],\r\n }\r\n});\r\n\r\n\r\n\r\nfunction valueLabelComponent(event) {\r\n const popperRef = React.useRef(null);\r\n React.useEffect(() => {\r\n if (popperRef.current) {\r\n popperRef.current.update();\r\n }\r\n });\r\n\r\n\r\n // let label = event.value;\r\n let label = moment().hour(0).minutes(0).seconds(0).add(event.value*15, 'minutes').format('HH:mm');\r\n\r\n return (\r\n {label}}\r\n >\r\n {event.children}\r\n \r\n );\r\n}\r\n\r\n\r\nclass ScheduleSlider extends Component {\r\n\r\n handleChange = (event, newValue) => {\r\n const {weekdays, weekends} = this.props.groups;\r\n const {day} = this.props;\r\n let schedule = {...this.props.schedule};\r\n let startHours = Math.floor(newValue[0] / 4);\r\n let start15Min = newValue[0] % 4;\r\n let endHours = Math.floor(newValue[1] / 4);\r\n let end15Min = newValue[1] % 4;\r\n \r\n if ((day === 0 || day === 6 || day === 7) && weekends) {\r\n schedule[0].startTime = moment().hours(startHours).minutes(start15Min * 15).seconds(0).milliseconds(0);\r\n schedule[0].endTime = moment().hours(endHours).minutes(end15Min * 15).seconds(0).milliseconds(0);\r\n schedule[6].startTime = moment().hours(startHours).minutes(start15Min * 15).seconds(0).milliseconds(0);\r\n schedule[6].endTime = moment().hours(endHours).minutes(end15Min * 15).seconds(0).milliseconds(0);\r\n schedule[7].startTime = moment().hours(startHours).minutes(start15Min * 15).seconds(0).milliseconds(0);\r\n schedule[7].endTime = moment().hours(endHours).minutes(end15Min * 15).seconds(0).milliseconds(0);\r\n } else if ((day > 0 && day < 6) && weekdays) {\r\n for (let i = 1; i < 6; i++) {\r\n schedule[i].startTime = moment().hours(startHours).minutes(start15Min * 15).seconds(0).milliseconds(0);\r\n schedule[i].endTime = moment().hours(endHours).minutes(end15Min * 15).seconds(0).milliseconds(0);\r\n }\r\n } else {\r\n schedule[this.props.day].startTime = moment().hours(startHours).minutes(start15Min * 15).seconds(0).milliseconds(0);\r\n schedule[this.props.day].endTime = moment().hours(endHours).minutes(end15Min * 15).seconds(0).milliseconds(0);\r\n }\r\n \r\n \r\n \r\n this.props.changeSchedule(schedule);\r\n };\r\n \r\n toggleDisabled = () => {\r\n const {day} = this.props;\r\n const {weekdays, weekends} = this.props.groups;\r\n let schedule = {...this.props.schedule};\r\n let bool = !schedule[day].unoccupiedDay;\r\n if ((day === 0 || day === 6 || day === 7) && weekends) {\r\n schedule[0].unoccupiedDay = bool;\r\n schedule[6].unoccupiedDay = bool;\r\n schedule[7].unoccupiedDay = bool;\r\n } else if ((day > 0 && day < 6) && weekdays) {\r\n for (let i = 1; i < 6; i++) {\r\n schedule[i].unoccupiedDay = bool;\r\n }\r\n } else {\r\n schedule[day].unoccupiedDay = bool;\r\n }\r\n \r\n this.props.changeSchedule(schedule);\r\n \r\n }\r\n\r\n\r\n render() {\r\n const {classes, schedule, day} = this.props;\r\n let defaultStart = schedule[day].startTime.hours()*4 + schedule[day].startTime.minutes()/15;\r\n let defaultEnd = schedule[day].endTime.hours()*4 + schedule[day].endTime.minutes()/15;\r\n let defaultValue = [defaultStart, defaultEnd];\r\n\r\n return (\r\n \r\n \r\n {schedule[day].label}\r\n \r\n \r\n \r\n }\r\n label=\"Unoccupied Day\"\r\n />\r\n \r\n \r\n {schedule[day].unoccupiedDay ?\r\n Unoccupied\r\n : {schedule[day].startTime.format(\"HH:mm A\")} - {schedule[day].endTime.format(\"HH:mm A\")}\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 withStyles(styles)(ScheduleSlider)","import React, {Component} from 'react'\r\nimport moment from \"moment\";\r\n\r\n//Material UI\r\nimport Slider from '@material-ui/core/Slider';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport {withStyles} from \"@material-ui/core\";\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\n\r\n//Components\r\nimport ScheduleSlider from \"./ScheduleSlider\";\r\n\r\n\r\nconst styles = theme => ({\r\n root: {\r\n width: '100%',\r\n padding: theme.spacing(2)\r\n },\r\n});\r\n\r\nfunction valueLabelComponent(event) {\r\n const popperRef = React.useRef(null);\r\n React.useEffect(() => {\r\n if (popperRef.current) {\r\n popperRef.current.update();\r\n }\r\n });\r\n \r\n \r\n // let label = event.value;\r\n let label = moment().hour(0).minutes(0).seconds(0).add(event.value*15, 'minutes').format('HH:mm');\r\n\r\n return (\r\n {label}}\r\n >\r\n {event.children}\r\n \r\n );\r\n}\r\n\r\n\r\nclass Schedule extends Component {\r\n formatValueAsTime = (value) => {\r\n return moment().hour(value / 4).minutes((value % 4)*15).format(\"HH:mm\");\r\n };\r\n \r\n state = {\r\n schedule: [\r\n {\r\n label: 'Sunday',\r\n day: 0,\r\n startTime: moment().hour(8).minutes(0).seconds(0).milliseconds(0),\r\n endTime: moment().hour(17).minutes(0).seconds(0).milliseconds(0),\r\n unoccupiedDay: false\r\n },{\r\n label: 'Monday',\r\n day: 1,\r\n startTime: moment().hour(8).minutes(0).seconds(0).milliseconds(0),\r\n endTime: moment().hour(17).minutes(0).seconds(0).milliseconds(0),\r\n unoccupiedDay: false\r\n },{\r\n label: 'Tuesday',\r\n day: 2,\r\n startTime: moment().hour(8).minutes(0).seconds(0).milliseconds(0),\r\n endTime: moment().hour(17).minutes(0).seconds(0).milliseconds(0),\r\n unoccupiedDay: false\r\n },{\r\n label: 'Wednesday',\r\n day: 3,\r\n startTime: moment().hour(8).minutes(0).seconds(0).milliseconds(0),\r\n endTime: moment().hour(17).minutes(0).seconds(0).milliseconds(0),\r\n unoccupiedDay: false\r\n },{\r\n label: 'Thursday',\r\n day: 4,\r\n startTime: moment().hour(8).minutes(0).seconds(0).milliseconds(0),\r\n endTime: moment().hour(17).minutes(0).seconds(0).milliseconds(0),\r\n unoccupiedDay: false\r\n },{\r\n label: 'Friday',\r\n day: 5,\r\n startTime: moment().hour(8).minutes(0).seconds(0).milliseconds(0),\r\n endTime: moment().hour(17).minutes(0).seconds(0).milliseconds(0),\r\n unoccupiedDay: false\r\n },{\r\n label: 'Saturday',\r\n day: 6,\r\n startTime: moment().hour(8).minutes(0).seconds(0).milliseconds(0),\r\n endTime: moment().hour(17).minutes(0).seconds(0).milliseconds(0),\r\n unoccupiedDay: false\r\n },{\r\n label: 'Holidays',\r\n day: 7,\r\n startTime: moment().hour(8).minutes(0).seconds(0).milliseconds(0),\r\n endTime: moment().hour(17).minutes(0).seconds(0).milliseconds(0),\r\n unoccupiedDay: false\r\n },\r\n ],\r\n groups: {\r\n weekdays: true,\r\n weekends: true\r\n }\r\n };\r\n \r\n changeSchedule = (schedule) => {\r\n this.setState({schedule})\r\n };\r\n \r\n toggleGroupedDays = (event) => {\r\n let groups = {...this.state.groups};\r\n groups[event.currentTarget.value] = !groups[event.currentTarget.value];\r\n this.setState({groups});\r\n \r\n }\r\n\r\n render() {\r\n const {classes} = this.props;\r\n const {weekends, weekdays} = this.state.groups;\r\n \r\n return (\r\n
    \r\n \r\n \r\n Select Occupied Hours\r\n \r\n \r\n }\r\n label=\"Similar Weekdays\"\r\n />\r\n \r\n }\r\n label=\"Similar Weekends & Holidays\"\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 withStyles(styles)(Schedule)","import React, {Component} from 'react'\r\n\r\n//Material UI\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\n\r\nclass PeriodLength extends Component {\r\n \r\n handleChange = (event) => {\r\n const {setPeriodLength} = this.props;\r\n setPeriodLength(event.target.value);\r\n };\r\n \r\n // componentDidUpdate(prevProps, prevState, snapshot) {\r\n // const {periodLength} = this.props;\r\n // debugger;\r\n // }\r\n\r\n render() {\r\n const {periodLength} = this.props;\r\n return (\r\n
    \r\n {/*Gender*/}\r\n \r\n } label=\"Month\" />\r\n } label=\"Day\" />\r\n } label=\"Hour\" />\r\n } label=\"30 min\" />\r\n } label=\"15 min\" />\r\n\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default PeriodLength","import React, {Component, Fragment} from 'react'\r\nimport {\r\n getIntervalDataSummaryChartByFacilityId,\r\n intervalDataRequestObject\r\n} from \"../../../../../services/intervalData.service\";\r\nimport moment from \"moment\";\r\nimport 'moment-timezone'\r\nimport {HotTable} from \"@handsontable/react\";\r\nimport Handsontable from 'handsontable';\r\n\r\n// Material UI\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Select from '@material-ui/core/Select';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n\r\nclass MonthlySetup extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.hotTableComponent = React.createRef();\r\n }\r\n \r\n state = {\r\n billingDate: null,\r\n billingDateSelectArray: null,\r\n monthBlockTableSettings: null,\r\n dailyData: null,\r\n monthBlocks: null,\r\n };\r\n \r\n componentDidMount = () => {\r\n let billingDateSelectArray = this.getBillingDateSelectArray();\r\n this.setState({billingDateSelectArray});\r\n this.getDailySummaryData();\r\n Handsontable.hooks.add('afterChange', (event) => this.editMonthBlocks(event));\r\n \r\n };\r\n \r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n if (prevState.dailyData === null && this.state.dailyData !== null) {\r\n this.buildDefaultMonthBlocks();\r\n }\r\n };\r\n \r\n editMonthBlocks = (event) => {\r\n // event = [row, column, oldValue, newValue]\r\n const {selectedFacility} = this.props;\r\n if (event !== null) {\r\n let array = event[0];\r\n let row = array[0];\r\n let column = array[1];\r\n let newValue = array[3];\r\n let monthBlocks = [...this.state.monthBlocks];\r\n if (column === 0) {\r\n monthBlocks[row].startDate = moment.tz(newValue, selectedFacility.timezone);\r\n if (row > 0)\r\n monthBlocks[row - 1].endDate = moment.tz(newValue, selectedFacility.timezone).subtract(1, 'day');\r\n };\r\n if (column === 1) {\r\n monthBlocks[row].endDate = moment.tz(newValue, selectedFacility.timezone);\r\n monthBlocks[row + 1].startDate = moment.tz(newValue, selectedFacility.timezone).add(1, 'day');\r\n };\r\n this.buildTableWithMonthblocks(monthBlocks);\r\n }\r\n \r\n }\r\n\r\n handleBillingDateChange = (event) => {\r\n let billingDate = event.target.value;\r\n this.setState({billingDate}, () => this.buildDefaultMonthBlocks())\r\n };\r\n\r\n getBillingDateSelectArray = () => {\r\n let array = [];\r\n for (let i = 1; i < 29; i++) {\r\n array.push(i)\r\n };\r\n return array;\r\n }\r\n \r\n buildDefaultMonthBlocks = () => {\r\n const {selectedFacility} = this.props;\r\n const {intervalDataStartDate, intervalDataEndDate} = selectedFacility;\r\n let monthBlocks = [];\r\n let startDate = moment();\r\n let endDate = moment();\r\n if (this.state.billingDate === null) {\r\n let duration = moment.tz(intervalDataEndDate, selectedFacility.timezone).diff(moment.tz(intervalDataStartDate, selectedFacility.timezone), 'months') + 1;\r\n for (let i = 0; i < duration; i++ ) {\r\n startDate = moment.tz(intervalDataStartDate, selectedFacility.timezone).add(i, 'months');\r\n if (startDate.clone().add(1, 'month') > moment.tz(intervalDataEndDate, selectedFacility.timezone)) {\r\n endDate = moment.tz(intervalDataEndDate, selectedFacility.timezone);\r\n } else {\r\n endDate = startDate.clone().add(1, 'month').subtract(1, 'day');\r\n };\r\n monthBlocks.push({\r\n startDate,\r\n endDate,\r\n });\r\n };\r\n\r\n } else {\r\n let duration = moment.tz(intervalDataEndDate, selectedFacility.timezone).diff(moment.tz(intervalDataStartDate, selectedFacility.timezone), 'months') + 1;\r\n let previousStartDate = moment();\r\n let previousEndDate = moment();\r\n let done = false;\r\n \r\n for (let j = 0; !done; j++) {\r\n if (j === 0) {\r\n startDate = moment.tz(intervalDataStartDate, selectedFacility.timezone);\r\n if (moment.tz(intervalDataStartDate, selectedFacility.timezone).date() <= this.state.billingDate) {\r\n endDate = moment.tz(intervalDataStartDate, selectedFacility.timezone).date(this.state.billingDate);\r\n } else {\r\n endDate = moment.tz(intervalDataStartDate, selectedFacility.timezone).add(1, 'month').date(this.state.billingDate)\r\n }\r\n } else if (previousEndDate.clone().add(1, 'month').isAfter(moment.tz(intervalDataEndDate, selectedFacility.timezone))) {\r\n endDate = moment.tz(intervalDataEndDate, selectedFacility.timezone);\r\n startDate = moment.tz(previousEndDate, selectedFacility.timezone).add(1, 'day');\r\n done = true;\r\n } else {\r\n startDate = moment.tz(previousEndDate, selectedFacility.timezone).add(1, 'day');\r\n endDate = moment.tz(previousEndDate, selectedFacility.timezone).add(1, 'month');\r\n }\r\n\r\n monthBlocks.push({\r\n startDate,\r\n endDate,\r\n });\r\n previousStartDate = startDate;\r\n previousEndDate = endDate;\r\n };\r\n };\r\n this.buildTableWithMonthblocks(monthBlocks)\r\n };\r\n \r\n buildTableWithMonthblocks = (monthBlocks) => {\r\n this.setState({monthBlocks});\r\n monthBlocks = this.applyDataToMonth(monthBlocks);\r\n let monthBlockTableSettings = this.buildMonthTable(monthBlocks);\r\n this.setState({monthBlockTableSettings})\r\n };\r\n \r\n applyDataToMonth = (monthBlocks) => {\r\n const {selectedFacility} = this.props;\r\n monthBlocks.forEach(x => {\r\n let total = 0;\r\n this.state.dailyData.forEach(y => {\r\n // let startDate = x.startDate;\r\n // let endDate = x.endDate;\r\n // let intervalDay = y.moment.add(1, 'hour');\r\n if (moment.tz(y.moment, selectedFacility.timezone).add(1, 'hour') >= moment.tz(x.startDate, selectedFacility.timezone) && moment.tz(y.moment, selectedFacility.timezone) <= moment.tz(x.endDate, selectedFacility.timezone)) {\r\n total += y.sumKwh;\r\n }\r\n });\r\n x['totalKwh'] = total;\r\n });\r\n return monthBlocks;\r\n };\r\n \r\n getDailySummaryData = () => {\r\n const {selectedFacility} = this.props;\r\n let request = { ...intervalDataRequestObject };\r\n\r\n request.ProjectId = selectedFacility.projectId;\r\n request.FacilityId = selectedFacility.facilityId;\r\n // request.ChartType = 'summary-chart';\r\n // request.DaysOfWeek = [1,2,3,4,5,6,7];\r\n request.Months = [1,2,3,4,5,6,7,8,9,10,11,12];\r\n request.SeriesType = ['Average'];\r\n request.DataType = 'kw';\r\n request.SeriesPer = 'day';\r\n request.StartDate = moment.tz(selectedFacility.intervalDataStartDate, selectedFacility.timezone);\r\n request.EndDate = moment.tz(selectedFacility.intervalDataEndDate, selectedFacility.timezone);\r\n \r\n\r\n getIntervalDataSummaryChartByFacilityId(request).then(data => {\r\n data.forEach(x => {\r\n x['moment'] = moment.tz(x.name, selectedFacility.timezone)\r\n });\r\n this.setState({dailyData: data})\r\n });\r\n };\r\n \r\n buildMonthTable = (data) => {\r\n const {selectedFacility} = this.props;\r\n let colHeaders = ['Start Date','End Date', 'Consumption (kWh)','# of Days'];\r\n let rowHeaders = null;\r\n let dataForTable = [];\r\n let columns = [];\r\n\r\n data.forEach(series => {\r\n // rowHeaders.push(series.name);\r\n dataForTable.push([series.startDate.format('MM/DD/YYYY'), series.endDate.format('MM/DD/YYYY'), series.totalKwh]);\r\n });\r\n \r\n // this.setState({dataForTable})\r\n\r\n // colHeaders.forEach((header, index) => columns.push({ data: index, type: 'numeric' }))\r\n\r\n columns = [\r\n {\r\n data: 0,\r\n type: 'date',\r\n correctFormat: true,\r\n dateFormat: 'MM/DD/YYYY',\r\n datePickerConfig: {\r\n minDate: moment.tz(selectedFacility.intervalDataStartDate, selectedFacility.timezone).toDate()\r\n }\r\n },\r\n {\r\n data: 1,\r\n type: 'date',\r\n dateFormat: 'MM/DD/YYYY',\r\n },\r\n {\r\n data: 2,\r\n type: 'numeric',\r\n numericFormat: {\r\n pattern: '0,0.00',\r\n },\r\n },\r\n ];\r\n\r\n return {\r\n colHeaders,\r\n rowHeaders,\r\n data: dataForTable,\r\n columns,\r\n width: 'auto',\r\n height: 500,\r\n rowHeaderWidth: 180,\r\n licenseKey: 'non-commercial-and-evaluation',\r\n stretchH: 'all',\r\n }\r\n }\r\n\r\n \r\n render() {\r\n return (\r\n \r\n \r\n {this.state.billingDateSelectArray ? \r\n \r\n Billing Date\r\n \r\n {this.state.billingDateSelectArray.map(x => {x})}\r\n \r\n : null}\r\n \r\n \r\n {this.state.monthBlockTableSettings ? : 'Loading'}\r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default MonthlySetup","import React, {Component} from 'react'\r\nimport moment from \"moment\";\r\nimport 'moment-timezone'\r\nimport CustomSlider from \"../../../../../components/Sliders/CustomSlider\";\r\n\r\n//Material UI\r\nimport Typography from '@material-ui/core/Typography';\r\nimport {withStyles} from \"@material-ui/core\";\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n width: 300,\r\n },\r\n});\r\n\r\nfunction ValueLabelComponent(event, selectedFacility) {\r\n // const { children, open, value } = props;\r\n\r\n const popperRef = React.useRef(null);\r\n React.useEffect(() => {\r\n if (popperRef.current) {\r\n popperRef.current.update();\r\n }\r\n });\r\n \r\n let label = moment.tz(selectedFacility.intervalDataStartDate, selectedFacility.timezone).add(event.value, 'days').format('MM/DD/YYYY');\r\n\r\n return (\r\n {label}}\r\n >\r\n {event.children}\r\n \r\n );\r\n}\r\n\r\n\r\nclass DateRanges extends Component {\r\n \r\n state = {\r\n baseline: {\r\n startDate: 1000000,\r\n endDate: 2000000,\r\n \r\n },\r\n marks: [\r\n {\r\n value: 0,\r\n label: moment.tz(this.props.selectedFacility.intervalDataStartDate, this.props.selectedFacility.timezone).format('MM/DD/YYYY')\r\n },\r\n {\r\n value: moment.tz(this.props.selectedFacility.intervalDataEndDate, this.props.selectedFacility.timezone).diff(moment.tz(this.props.selectedFacility.intervalDataStartDate, this.props.selectedFacility.timezone), 'days'),\r\n label: moment.tz(this.props.selectedFacility.intervalDataEndDate, this.props.selectedFacility.timezone).format('MM/DD/YYYY')\r\n },\r\n ]\r\n };\r\n \r\n getDate = (value) => {\r\n return moment.tz(this.props.selectedFacility.intervalDataStartDate, this.props.selectedFacility.timezone).add(value, 'days').format('MM/DD/YYYY')\r\n };\r\n \r\n \r\n // componentDidUpdate(prevProps, prevState, snapshot) {\r\n // const {periodLength} = this.props;\r\n // debugger;\r\n // }\r\n\r\n render() {\r\n const {selectedFacility, classes} = this.props;\r\n let temp = moment.tz(this.props.selectedFacility.intervalDataStartDate, this.props.selectedFacility.timezone).format('MM/DD/YYYY HH:mm:ss');\r\n debugger;\r\n let duration = moment.tz(selectedFacility.intervalDataEndDate, this.props.selectedFacility.timezone).diff(moment.tz(selectedFacility.intervalDataStartDate, this.props.selectedFacility.timezone), 'days');\r\n return (\r\n
    \r\n {/*Gender*/}\r\n \r\n Select Baseline Range\r\n \r\n this.valuetext(value)}\r\n aria-labelledby=\"discrete-slider\"\r\n color={'secondary'}\r\n valueLabelDisplay=\"auto\"\r\n ValueLabelComponent={(event) => ValueLabelComponent(event, selectedFacility)}\r\n step={1}\r\n marks={this.state.marks}\r\n min={0}\r\n valueLabelFormat={x => this.getDate(x)}\r\n max={duration}\r\n />\r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(DateRanges)","import React, {Component} from 'react'\r\nimport moment from \"moment\";\r\n\r\n//Material UI\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport {withStyles} from \"@material-ui/core\";\r\nimport Input from '@material-ui/core/Input';\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n flexGrow: 1\r\n },\r\n});\r\n\r\n\r\n\r\nclass TemperatureSettings extends Component {\r\n \r\n state = {\r\n monthly: {\r\n cddActive: true,\r\n hddActive: false,\r\n cddTemp: 65,\r\n hddTemp: 65,\r\n }\r\n };\r\n \r\n toggleActiveCddOrHdd = (type) => {\r\n let monthly = {...this.state.monthly};\r\n monthly[type] = !monthly[type];\r\n this.setState({monthly})\r\n };\r\n \r\n changeTemperature = (event, type) => {\r\n let monthly = {...this.state.monthly};\r\n if (type === 'cdd') {\r\n monthly.cddTemp = event.target.value;\r\n } else {\r\n monthly.hddTemp = event.target.value;\r\n }\r\n this.setState({monthly})\r\n }\r\n \r\n \r\n render() {\r\n const {selectedFacility, classes} = this.props;\r\n let duration = moment(selectedFacility.intervalDataEndDate).diff(moment(selectedFacility.intervalDataStartDate), 'days');\r\n return (\r\n \r\n Temperature Settings\r\n \r\n this.toggleActiveCddOrHdd('cddActive')}\r\n value=\"cdd\"\r\n color=\"secondary\"\r\n />\r\n }\r\n label=\"CDD (Cooling Degree Days)\"\r\n />\r\n this.changeTemperature(event, 'cdd')}\r\n // onBlur={handleBlur}\r\n inputProps={{\r\n step: 1,\r\n min: 50,\r\n max: 75,\r\n type: 'number',\r\n 'aria-labelledby': 'input-slider',\r\n }}\r\n />\r\n }\r\n label={CDD Reference Temperature °F}\r\n />\r\n \r\n \r\n this.toggleActiveCddOrHdd('hddActive')}\r\n value=\"cdd\"\r\n color=\"secondary\"\r\n />\r\n }\r\n label=\"HDD (Heating Degree Days)\"\r\n />\r\n this.changeTemperature(event, 'hdd')}\r\n // onBlur={handleBlur}\r\n inputProps={{\r\n step: 1,\r\n min: 50,\r\n max: 75,\r\n type: 'number',\r\n 'aria-labelledby': 'input-slider',\r\n }}\r\n />\r\n }\r\n label=HDD Reference Temperature °F\r\n />\r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(TemperatureSettings)","import React, {Component} from 'react'\r\nimport moment from 'moment'\r\n\r\nimport Grid from '@material-ui/core/Grid'\r\nimport {FormGroup, withStyles} from \"@material-ui/core\";\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\n\r\nconst styles = theme => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n },\r\n});\r\n\r\n// function getDayOfMonth(years, dataStartDate, dataEndDate, month, index, dayOfWeek, label) {\r\n// // index is which one of that particular day. So if you want the 2nd Monday, index would be 2 and dayOfWeek should be 1\r\n// let temp = {\r\n// label: label,\r\n// dates: []\r\n// };\r\n// \r\n// years.forEach(year => {\r\n// let startDate = moment.utc().year(year).month(month).date(1).hour(0).minute(0).second(0);\r\n// let startOfMonth = moment.utc(startDate).startOf('month').startOf('isoweek').hour(0).minute(0).second(0);\r\n// let date = moment.utc(startDate).startOf('month').startOf('isoweek').add(index, 'w').add(dayOfWeek, 'day').hour(0).minute(0).second(0);\r\n// debugger;\r\n// if (date.month() == startOfMonth.month()) {\r\n// // debugger;\r\n// date = date.subtract(1, 'w');\r\n// }\r\n// \r\n// if (date.isAfter(dataStartDate) && date.isBefore(dataEndDate)) {\r\n// // using the valueOf() below is a jank way to get moment to format the UTC time instead of formatting it as your local computer's time\r\n// temp.dates.push(moment(date.valueOf()).format(\"MM/DD/YYYY\"));\r\n// }\r\n// });\r\n// \r\n// \r\n// return temp;\r\n// }\r\n\r\nfunction getDayOfMonth(years, dataStartDate, dataEndDate, month, index, dayOfWeek, label) {\r\n // index is which one of that particular day. So if you want the 2nd Monday, index would be 2 and dayOfWeek should be 1\r\n let temp = [];\r\n\r\n years.forEach(year => {\r\n let startDate = moment.utc().year(year).month(month).date(1).hour(0).minute(0).second(0);\r\n let startOfMonth = moment.utc(startDate).startOf('month').startOf('isoweek').hour(0).minute(0).second(0);\r\n let date = startOfMonth.clone().add(index, 'w').add(dayOfWeek, 'day').hour(0).minute(0).second(0);\r\n\r\n if (date.month() == startOfMonth.month() || dayOfWeek >= startDate.day()) {\r\n // debugger;\r\n date = date.subtract(1, 'w');\r\n }\r\n\r\n if (date.isAfter(dataStartDate) && date.isBefore(dataEndDate)) {\r\n // using the valueOf() below is a jank way to get moment to format the UTC time instead of formatting it as your local computer's time\r\n temp.push({date: moment(date.valueOf()).format(\"MM/DD/YYYY\"), label: label});\r\n }\r\n });\r\n\r\n\r\n return temp;\r\n}\r\n\r\nfunction getExactDates(years, dataStartDate, dataEndDate, month, date, label) {\r\n let temp = [];\r\n years.forEach(year => {\r\n let dateAsMoment = moment().year(year).month(month).date(date);\r\n if (dateAsMoment.isAfter(dataStartDate) && dateAsMoment.isBefore(dataEndDate)) {\r\n temp.push({date: dateAsMoment.format(\"MM/DD/YYYY\"), label: label});\r\n }\r\n\r\n });\r\n return temp\r\n}\r\n\r\nclass Holidays extends Component {\r\n \r\n \r\n state = {\r\n holidays: [\r\n {\r\n label: 'New Year\\'s Day',\r\n getDates: function(years, dataStartDate, dataEndDate) {\r\n return getExactDates(years, dataStartDate, dataEndDate, 0, 1, 'New Year\\'s Day')\r\n },\r\n value: false\r\n },{\r\n label: 'Martin Luther King Jr. Day',\r\n getDates: function(years, dataStartDate, dataEndDate) {\r\n return getDayOfMonth(years, dataStartDate, dataEndDate, 0,3, 1, 'Martin Luther King Jr. Day')\r\n },\r\n value: false,\r\n },\r\n {\r\n label: 'President\\'s Day',\r\n getDates: function(years, dataStartDate, dataEndDate) {\r\n return getDayOfMonth(years, dataStartDate, dataEndDate, 1,3, 1, 'President\\'s Day')\r\n },\r\n value: false\r\n },\r\n // {\r\n // label: 'Memorial Day',\r\n // onSpecificDate: true,\r\n // value: false\r\n // },\r\n {\r\n label: 'Independence Day',\r\n getDates: function(years, dataStartDate, dataEndDate) {\r\n return getExactDates(years, dataStartDate, dataEndDate, 6, 4, 'Independence Day')\r\n },\r\n value: false\r\n },\r\n {\r\n label: 'Labor Day',\r\n getDates: function(years, dataStartDate, dataEndDate) {\r\n return getDayOfMonth(years, dataStartDate, dataEndDate, 8,1, 1, 'Labor Day')\r\n },\r\n value: false\r\n },\r\n {\r\n label: 'Columbus Day',\r\n getDates: function(years, dataStartDate, dataEndDate) {\r\n return getDayOfMonth(years, dataStartDate, dataEndDate, 9,2, 1, 'Columbus Day')\r\n },\r\n value: false\r\n },\r\n // {\r\n // label: 'Veterans Day',\r\n // getDates: function(years, dataStartDate, dataEndDate) {\r\n // return getExactDates(years, dataStartDate, dataEndDate, 10, 11, 'Veterans Day')\r\n // },\r\n // value: false\r\n // },\r\n {\r\n label: 'Thanksgiving Day',\r\n getDates: function(years, dataStartDate, dataEndDate) {\r\n return getDayOfMonth(years, dataStartDate, dataEndDate, 10,4, 4, 'Thanksgiving Day')\r\n },\r\n value: false\r\n },\r\n {\r\n label: 'Christmas Eve',\r\n getDates: function(years, dataStartDate, dataEndDate) {\r\n return getExactDates(years, dataStartDate, dataEndDate, 11, 24, 'Christmas Eve')\r\n },\r\n value: false\r\n },\r\n {\r\n label: 'Christmas Day',\r\n getDates: function(years, dataStartDate, dataEndDate) {\r\n return getExactDates(years, dataStartDate, dataEndDate, 11, 25, 'Christmas Day')\r\n },\r\n value: false\r\n },\r\n ]\r\n };\r\n \r\n toggleHoliday = (event, index) => {\r\n let holidays = [...this.state.holidays];\r\n holidays[index].value = !holidays[index].value;\r\n this.setState({holidays});\r\n };\r\n \r\n render() {\r\n const {classes, selectedFacility} = this.props;\r\n const {intervalDataStartDate, intervalDataEndDate} = selectedFacility;\r\n const {holidays} = this.state;\r\n let dataStartDate = moment(intervalDataStartDate);\r\n let dataEndDate = moment(intervalDataEndDate);\r\n let temp = [];\r\n let years = [];\r\n let year1 = moment(intervalDataStartDate).year();\r\n let year2 = moment(intervalDataEndDate).year();\r\n for (let i = 0; year1 + i <= year2; i++) {\r\n years.push(year1 + i);\r\n }\r\n holidays.forEach(x => {\r\n if (x.value) {\r\n let result = x.getDates(years, dataStartDate, dataEndDate);\r\n result.forEach(y => {\r\n temp.push(y)\r\n })\r\n \r\n }\r\n \r\n });\r\n \r\n temp.sort(function(a, b) {\r\n return moment(a.date).valueOf() - moment(b.date).valueOf()\r\n });\r\n \r\n return (\r\n \r\n \r\n \r\n {holidays.map((holiday, index) => {\r\n return (\r\n this.toggleHoliday(event, index)}\r\n value={holiday.value}\r\n color=\"secondary\"\r\n />\r\n }\r\n label={holiday.label}\r\n />\r\n )\r\n })}\r\n \r\n \r\n \r\n Selected List\r\n {temp.map(holiday => {\r\n return (\r\n
    \r\n {holiday.date} - {holiday.label}\r\n
    \r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(Holidays)","import React, {Component} from 'react'\r\n\r\n// Material UI\r\nimport {withStyles} from \"@material-ui/core\";\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Stepper from '@material-ui/core/Stepper';\r\nimport Step from '@material-ui/core/Step';\r\nimport StepLabel from '@material-ui/core/StepLabel';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Button from '@material-ui/core/Button';\r\n\r\n//Components\r\nimport PeriodLength from \"./components/PeriodLength\";\r\nimport MonthlySetup from \"./components/MonthlySetup\";\r\nimport DateRanges from \"./components/DateRanges\";\r\nimport TemperatureSettings from \"./components/TemperatureSettings\";\r\nimport Holidays from \"./components/Holidays\";\r\nimport Schedule from \"./components/Schedule/index\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\n\r\nconst styles = theme => ({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n content: {\r\n margin: theme.spacing(1),\r\n }\r\n});\r\n\r\nclass CreateRegression extends Component {\r\n state = {\r\n steps: null,\r\n activeStep: 0,\r\n periodLength: 'hour',\r\n \r\n }\r\n \r\n componentDidMount() {\r\n this.getSteps();\r\n }\r\n\r\n nextStep = () => {\r\n let activeStep = this.state.activeStep + 1;\r\n this.setState({activeStep})\r\n }\r\n \r\n previousStep = () => {\r\n let activeStep = this.state.activeStep - 1;\r\n this.setState({activeStep})\r\n }\r\n \r\n getStepContent = () => {\r\n const {steps, activeStep} = this.state;\r\n switch (steps[activeStep].name) {\r\n case 'periodLength':\r\n return ;\r\n case 'monthSetup':\r\n return \r\n case 'dateRanges':\r\n return \r\n case 'tempSettings':\r\n return \r\n case 'holidays':\r\n return \r\n case 'scheduling':\r\n return \r\n };\r\n }\r\n \r\n setPeriodLength = (periodLength) => {\r\n this.setState({periodLength}, () => this.getSteps());\r\n }\r\n \r\n getSteps = () => {\r\n let steps = null;\r\n if (this.state.periodLength === 'month') {\r\n steps = [\r\n {\r\n label: 'Period Length',\r\n name: 'periodLength' \r\n },\r\n {\r\n label: 'Monthly Setup',\r\n name: 'monthSetup'\r\n },\r\n {\r\n label: 'Date Ranges',\r\n name: 'dateRanges'\r\n },\r\n {\r\n label: 'Temperature Settings',\r\n name: 'tempSettings'\r\n },\r\n {\r\n label: 'Holidays',\r\n name: 'holidays'\r\n },\r\n {\r\n label: 'Other',\r\n name: 'other'\r\n },\r\n\r\n ]\r\n } else {\r\n steps = [\r\n {\r\n label: 'Period Length',\r\n name: 'periodLength'\r\n },\r\n {\r\n label: 'Date Ranges',\r\n name: 'dateRanges'\r\n },\r\n {\r\n label: 'Temperature Settings',\r\n name: 'tempSettings'\r\n },\r\n {\r\n label: 'Scheduling',\r\n name: 'scheduling'\r\n },\r\n {\r\n label: 'Holidays',\r\n name: 'holidays'\r\n },\r\n {\r\n label: 'Other',\r\n name: 'other'\r\n },\r\n\r\n ]\r\n }\r\n this.setState({steps});\r\n }\r\n\r\n render() {\r\n const {classes} = this.props;\r\n if (this.state.steps !== null) {\r\n return(\r\n
    \r\n \r\n \r\n \r\n \r\n {this.state.steps.map((step, index) => {\r\n return (\r\n \r\n {step.label}\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n {this.getStepContent()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n } else {\r\n return 'Loading'\r\n }\r\n \r\n }\r\n}\r\n\r\nexport default withStyles(styles)(CreateRegression)\r\n","import React, {Component} from 'react'\r\nimport {bindActionCreators} from \"redux\";\r\nimport {getDegreeDaysRedux, setDegreeDayChartToUpdate} from \"../../../redux/actions/weather-actions\";\r\nimport { withStyles} from \"@material-ui/core\";\r\nimport {connect} from \"react-redux\";\r\nimport {regressionRedux} from \"../../../redux/reducers/weather-reducers\";\r\nimport Highcharts from \"highcharts/highstock\";\r\nimport HighchartsReact from \"highcharts-react-official\";\r\nimport {HotTable} from \"@handsontable/react\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport exportDataAsCsv from \"../../js/exportDataAsCsv\";\r\nimport RegressionDetails from \"./CreateRegression/components/RegressionDetails\";\r\nimport RegressionSummary from \"./CreateRegression/components/RegressionSummary\";\r\nimport MeterSectionTitleBar from \"../components/MeterSectionTitleBar\";\r\nimport Schedule from \"./CreateRegression/components/Schedule\";\r\nimport CreateRegression from \"./CreateRegression\";\r\n\r\n\r\nclass Regression extends Component {\r\n\r\n state = {\r\n chartOptions: null,\r\n handsontableSettings: null,\r\n };\r\n \r\n componentDidMount = () => {\r\n // let request = getDefaultDegreeDayRequestObjectFromFacility();\r\n this.props.getDegreeDaysRedux(this.props.selectedFacility);\r\n };\r\n \r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n if (this.props.regressionRedux !== prevProps.regressionRedux) {\r\n let chartOptions = this.props.regressionRedux.getSummaryChartOptions();\r\n let handsontableSettings = this.props.regressionRedux.generateHandontableSettings();\r\n this.setState({chartOptions, handsontableSettings})\r\n }\r\n }\r\n \r\n exportCsv = () => {\r\n exportDataAsCsv(this.state.handsontableSettings)\r\n };\r\n\r\n render() {\r\n if (this.state.chartOptions) {\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n } else {\r\n return 'Loading'\r\n }\r\n \r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n selectedFacilityView: state.selectedFacilityView,\r\n intervalData: state.intervalData,\r\n selectedFacility: state.selectedFacility,\r\n chartDataFilterFormObject: state.chartDataFilterFormObject,\r\n degreeDays: state.degreeDays,\r\n degreeDayChartToUpdate: state.degreeDayChartToUpdate,\r\n degreeDaysHandsontableSettings: state.degreeDaysHandsontableSettings,\r\n regressionRedux: state.regressionRedux\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n setDegreeDayChartToUpdate,\r\n getDegreeDaysRedux\r\n }, dispatch);\r\n};\r\n\r\n// let DegreeDays = withStyles(styles)(DegreeDaysTemp);\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Regression);\r\n\r\n","import React, {Component} from 'react'\r\nimport AntTabs from \"../../../components/AntTabs/AntTabs\";\r\nimport AntTab from \"../../../components/AntTabs/AntTab\";\r\nimport {Link} from 'react-router-dom';\r\n\r\nclass NavigationTabs extends Component {\r\n render() {\r\n const {selectedFacility} = this.props;\r\n const {projectId, facilityId} = selectedFacility;\r\n \r\n let tabs = [\r\n {\r\n label: 'Overview',\r\n link: `/${projectId}/${facilityId}/overview`,\r\n name: 'overview'\r\n },\r\n {\r\n label: 'Charts',\r\n link: `/${projectId}/${facilityId}/charts/load-curve`,\r\n name: 'charts'\r\n },\r\n {\r\n label: 'Weather',\r\n link: `/${projectId}/${facilityId}/weather/degree-days`,\r\n name: 'weather'\r\n },\r\n {\r\n label: 'Emissions',\r\n link: `/${projectId}/${facilityId}/emissions/summary`,\r\n name: 'emissions'\r\n },\r\n // {\r\n // label: 'Regression',\r\n // link: `/${projectId}/${facilityId}/regression`,\r\n // name: 'regression'\r\n // },\r\n {\r\n label: 'Notes',\r\n link: `/${projectId}/${facilityId}/notes`,\r\n name: 'notes'\r\n },\r\n {\r\n label: 'Data',\r\n link: `/${projectId}/${facilityId}/data`,\r\n name: 'data'\r\n },\r\n // {\r\n // label: 'Settings',\r\n // link: `/${projectId}/${facilityId}/settings/dates`,\r\n // name: 'settings'\r\n // },\r\n\r\n ];\r\n\r\n let selectedIndex;\r\n tabs.forEach((x, index) => {\r\n if (x.name === this.props.selectedFacilityView) {\r\n selectedIndex = index;\r\n }\r\n });\r\n \r\n return (\r\n \r\n {tabs.map(tab => (\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 NavigationTabs","import React, {Component} from 'react'\r\nimport MaterialTable from 'material-table'\r\n\r\nclass MeterEmissionsTable extends Component {\r\n render() {\r\n const {locationEmissions, selectedFacility} = this.props;\r\n let emissions = locationEmissions.emissions;\r\n let annualConsumption = selectedFacility.annualKwhValue;\r\n emissions.forEach(x => {\r\n // divide by 1000 to convert MWh to kWh (the emissions values are per MWh)\r\n x.meterEmissions = (x.value/1000 * annualConsumption).toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n x.valueAsString = x.value.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n });\r\n \r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default MeterEmissionsTable;","import React, {Component} from 'react'\r\n\r\nimport {\r\n getIntervalDataSummaryChartByFacilityId,\r\n intervalDataRequestObject,\r\n} from '../../../../../services/intervalData.service'\r\nimport moment from \"moment\";\r\nimport HighchartsReact from \"highcharts-react-official\";\r\nimport Highcharts from \"highcharts\";\r\nimport DataViewLoadingSpinner from \"../../../spinners/DataViewLoadingSpinner\";\r\n\r\nclass MeterMonthlyEmissionsChart extends Component {\r\n state = {\r\n chartOptions: null,\r\n };\r\n \r\n componentDidMount() {\r\n this.setChartOptions();\r\n };\r\n \r\n setChartOptions = () => {\r\n const { locationEmissions, selectedFacility} = this.props;\r\n\r\n let emissionConstants = {};\r\n locationEmissions.emissions.forEach(x => {\r\n // divide by 1000: lbs/MWh converted to lbs/kWh\r\n emissionConstants[x.abbr] = x.value / 1000\r\n });\r\n\r\n let request = intervalDataRequestObject;\r\n request.ProjectId = selectedFacility.projectId;\r\n request.FacilityId = selectedFacility.facilityId;\r\n request.Months = [1,2,3,4,5,6,7,8,9,10,11,12];\r\n request.SeriesType = ['Average'];\r\n request.DataType = 'kwh';\r\n request.SeriesPer = 'month';\r\n request.StartDate = moment.utc(selectedFacility.intervalDataStartDate);\r\n request.EndDate = moment.utc(selectedFacility.intervalDataEndDate);\r\n\r\n let array = [];\r\n let categories = [];\r\n let series = [{\r\n name: 'CO2 Equivalent',\r\n data: []\r\n }];\r\n getIntervalDataSummaryChartByFacilityId(request).then(response => {\r\n response.forEach(x => {\r\n categories.push(x.name);\r\n series[0].data.push(x.sumKwh * emissionConstants.co2e);\r\n array.push({\r\n month: x.name,\r\n sumKwh: x.sumKwh,\r\n co2: x.sumKwh * emissionConstants.co2,\r\n ch4: x.sumKwh * emissionConstants.ch4,\r\n n2o: x.sumKwh * emissionConstants.n2o,\r\n co2e: x.sumKwh * emissionConstants.co2e,\r\n annualNox: x.sumKwh * emissionConstants.annualNox,\r\n ozoneNox: x.sumKwh * emissionConstants.ozoneNox,\r\n so2: x.sumKwh * emissionConstants.so2,\r\n });\r\n });\r\n\r\n let chartOptions = this.getChartOptions(series, categories);\r\n this.setState({chartOptions})\r\n });\r\n };\r\n \r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n if (prevProps.locationEmissions.emissions.filter(x => x.abbr === 'co2e')[0] !== this.props.locationEmissions.emissions.filter(x => x.abbr === 'co2e')[0]) {\r\n this.setChartOptions()\r\n }\r\n }\r\n\r\n getChartOptions = (series, categories) => {\r\n return {\r\n chart: {\r\n type: 'column',\r\n height: 500,\r\n style: {\r\n fontFamily: \"Roboto\"\r\n },\r\n zoomType: 'x'\r\n },\r\n title: {\r\n text: ''\r\n },\r\n subtitle: {\r\n text: ''\r\n },\r\n xAxis: {\r\n categories: categories,\r\n //crosshair: true\r\n },\r\n yAxis: {\r\n title: {\r\n text: 'CO2 Equivalent'\r\n }\r\n },\r\n tooltip: {\r\n headerFormat: '{point.key}',\r\n pointFormat: '' +\r\n '',\r\n footerFormat: '
    {series.name}: {point.y:.2f}
    ',\r\n //shared: true,\r\n useHTML: true,\r\n //backgroundColor: '#fafafa'\r\n },\r\n plotOptions: {\r\n column: {\r\n pointPadding: 0.2\r\n }\r\n },\r\n series: series,\r\n credits: {\r\n enabled: false\r\n },\r\n }\r\n };\r\n\r\n render() {\r\n const {locationEmissions, selectedFacility} = this.props;\r\n let emissions = locationEmissions.emissions;\r\n let annualConsumption = selectedFacility.annualKwhValue;\r\n emissions.forEach(x => {\r\n // divide by 1000 to convert MWh to kWh (the emissions values are per MWh)\r\n x.meterEmissions = (x.value/1000 * annualConsumption).toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n x.valueAsString = x.value.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + ' lbs';\r\n });\r\n\r\n return (\r\n
    \r\n {this.state.chartOptions ? : }\r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default MeterMonthlyEmissionsChart;","import React, {Component} from 'react'\r\n\r\nimport {\r\n getIntervalDataSummaryChartByFacilityId,\r\n intervalDataRequestObject,\r\n} from '../../../../../services/intervalData.service'\r\nimport moment from \"moment\";\r\nimport HighchartsReact from \"highcharts-react-official\";\r\nimport Highcharts from \"highcharts\";\r\nimport DataViewLoadingSpinner from \"../../../spinners/DataViewLoadingSpinner\";\r\n\r\nclass MeterResourceMixChart extends Component {\r\n state = {\r\n chartOptions: null,\r\n };\r\n \r\n componentDidMount() {\r\n this.setChartOptions();\r\n };\r\n \r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n if (prevProps.locationResourceMix.resourceMix.fossilFuels[0].value !== this.props.locationResourceMix.resourceMix.fossilFuels[0].value) {\r\n this.setChartOptions();\r\n }\r\n }\r\n\r\n setChartOptions = () => {\r\n const {locationResourceMix} = this.props;\r\n let resources = locationResourceMix.resourceMix.fossilFuels.concat(locationResourceMix.resourceMix.renewables);\r\n let data = [];\r\n resources.forEach(x => {\r\n data.push({\r\n name: x.name,\r\n y: x.value,\r\n })\r\n })\r\n let temp = this.getChartOptions(data);\r\n this.setState({chartOptions: temp})\r\n\r\n };\r\n\r\n\r\n getChartOptions = (data) => {\r\n return {\r\n chart: {\r\n plotBackgroundColor: null,\r\n plotBorderWidth: null,\r\n plotShadow: false,\r\n type: 'pie',\r\n style: {\r\n fontFamily: 'Roboto'\r\n }\r\n },\r\n title: {\r\n text: ''\r\n },\r\n tooltip: {\r\n pointFormat: '{series.name}: {point.percentage:.1f}%'\r\n },\r\n plotOptions: {\r\n pie: {\r\n allowPointSelect: true,\r\n cursor: 'pointer',\r\n dataLabels: {\r\n enabled: true,\r\n format: '{point.name}: {point.percentage:.1f} %'\r\n }\r\n }\r\n },\r\n series: [{\r\n name: 'Percentage',\r\n colorByPoint: true,\r\n data: data\r\n }],\r\n credits: {\r\n enabled: false\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n\r\n return (\r\n
    \r\n {this.state.chartOptions ? : }\r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default MeterResourceMixChart;","import React, {Component} from 'react'\r\nimport ReactSVG from \"react-svg\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport {withStyles} from \"@material-ui/core\";\r\nimport CountUp from 'react-countup';\r\n\r\nconst styles = theme => ({\r\n card: {\r\n border: '2px solid #e0e0e0',\r\n borderRadius: 5,\r\n margin: theme.spacing(1)\r\n },\r\n textArea: {\r\n padding: theme.spacing(1),\r\n \r\n }\r\n});\r\n\r\nclass EquivalentCard extends Component {\r\n \r\n state = {\r\n prevProps: {\r\n value: 0,\r\n },\r\n };\r\n \r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n if (prevProps.value !== this.state.prevProps.value) {\r\n this.setState({prevProps});\r\n }\r\n \r\n }\r\n\r\n render() {\r\n let {description, value, image, classes} = this.props;\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 {description}\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(styles)(EquivalentCard);","import React, {Component} from 'react'\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport ReactSVG from 'react-svg'\r\n\r\nimport EquivalentCard from \"./EquivalentCard\";\r\n\r\n// SVGs\r\nimport homeSVG from '../../../../../../assets/img/ghgComparisonSvgs/home.svg'\r\nimport burningCoal from '../../../../../../assets/img/ghgComparisonSvgs/burningCoal.svg'\r\nimport gasStation from '../../../../../../assets/img/ghgComparisonSvgs/gasStation.svg'\r\nimport car from '../../../../../../assets/img/ghgComparisonSvgs/car.svg'\r\nimport oilBarrel from '../../../../../../assets/img/ghgComparisonSvgs/oilBarrel.svg'\r\nimport coalRailcar from '../../../../../../assets/img/ghgComparisonSvgs/coalRailcar.svg'\r\n\r\nclass EmissionsComparisons extends Component {\r\n render() {\r\n const {carbonEquivalentPounds} = this.props;\r\n // 0.0004536 metric tons per pound\r\n let metricTonsCo2e = carbonEquivalentPounds * 0.0004536;\r\n //Constants from eGRID in metric Tons CO2 per x (https://www.epa.gov/energy/greenhouse-gases-equivalencies-calculator-calculations-and-references)\r\n let constants = {\r\n gallonsOfGasoline: .008887,\r\n gallonsOfDiesel: .010180,\r\n passengerVehiclesPerYear: 4.71,\r\n milesAveragePassengerVehicle: .000409,\r\n thermsOfNaturalGas: .0053,\r\n mcfOfNaturalGas: .0551,\r\n barrelsOfOilConsumed: .43,\r\n tankerTrucksFilledWithGasoline: 75.54,\r\n numberOfIncandescentBulbsSwitchedToLed: .0263,\r\n homeElectricityUse: 5.734,\r\n homeEnergyUse: 8.35,\r\n urbanTreeSeedlingsTenYears: .060,\r\n acresOfForestOneYear: -.085,\r\n acresOfForestPreserved: -123.22,\r\n railcarsOfCoalBurned: 183.29,\r\n poundsOfCoalBurned: .000915,\r\n tonsOfWasteRecycledInsteadOfLandfilled: 2.87,\r\n numberOfGarbageTrucksWasteRecycledInsteadOfLandfilled: 20.07,\r\n trashBagsOfWasteRecycledInsteadOfLandfilled: .0029,\r\n coalFiredPowerPlantOneYear: 3893003.27,\r\n numberOfWindTurbinesOneYear: 4719,\r\n numberOfSmartphonesCharged: 0.00000784,\r\n\r\n\r\n };\r\n let metricTonsRatios = [\r\n {\r\n name: 'gallonsOfGasoline',\r\n description: 'Gallons of Gasoline',\r\n metricTonsPer: constants.gallonsOfGasoline,\r\n equivalent: metricTonsCo2e / constants.gallonsOfGasoline,\r\n image: gasStation\r\n },\r\n {\r\n name: 'homeEnergyUse',\r\n description: 'homes energy use for one year',\r\n metricTonsPer: constants.homeEnergyUse,\r\n equivalent: metricTonsCo2e / constants.homeEnergyUse,\r\n image: homeSVG\r\n },\r\n {\r\n name: 'poundsOfCoalBurned',\r\n description: 'pounds of coal burned',\r\n metricTonsPer: constants.poundsOfCoalBurned,\r\n equivalent: metricTonsCo2e / constants.poundsOfCoalBurned,\r\n image: burningCoal\r\n },\r\n {\r\n name: 'railcarsOfCoal',\r\n description: 'railcars worth of coal burned',\r\n metricTonsPer: constants.railcarsOfCoalBurned,\r\n equivalent: metricTonsCo2e / constants.railcarsOfCoalBurned,\r\n image: coalRailcar\r\n },\r\n {\r\n name: 'milesAveragePassengerVehicle',\r\n description: 'miles driven by an average passenger vehicle',\r\n metricTonsPer: constants.milesAveragePassengerVehicle,\r\n equivalent: metricTonsCo2e / constants.milesAveragePassengerVehicle,\r\n image: car\r\n },\r\n {\r\n name: 'barrelsOfOil',\r\n description: 'barrels of oil consumed',\r\n metricTonsPer: constants.barrelsOfOilConsumed,\r\n equivalent: metricTonsCo2e / constants.barrelsOfOilConsumed,\r\n image: oilBarrel\r\n },\r\n ]\r\n return (\r\n \r\n {metricTonsRatios.map(x => {\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\nexport default EmissionsComparisons","import React, {Component, Fragment} from 'react'\r\nimport CountUp from 'react-countup';\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport {withStyles} from \"@material-ui/core\";\r\nimport EmissionsComparisons from \"./EmissionsComparisons\";\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n expandDown: {\r\n marginTop: theme.spacing(1)\r\n },\r\n divider: {\r\n marginTop: theme.spacing(2),\r\n marginBottom: theme.spacing(2)\r\n },\r\n eGridRegionName: {\r\n marginTop: theme.spacing(2),\r\n },\r\n table: {\r\n minWidth: '100%',\r\n },\r\n});\r\n\r\nconst cardContent = (value, title, suffix) => {\r\n return (\r\n \r\n \r\n \r\n \r\n {suffix}\r\n \r\n\r\n\r\n \r\n \r\n {title}\r\n \r\n \r\n )\r\n};\r\n\r\n// const cardContent = (value, title, suffix) => {\r\n// return (\r\n// \r\n// \r\n// \r\n// {title}: \r\n// \r\n// {suffix}\r\n// \r\n//\r\n//\r\n// \r\n// {/**/}\r\n// {/* {title}*/}\r\n// {/**/}\r\n// \r\n// )\r\n// };\r\n\r\nclass MeterCo2ECard extends Component {\r\n state = {\r\n comparisonsOpen: false,\r\n };\r\n\r\n toggleComparisonOpen = () => {\r\n this.setState({comparisonsOpen: !this.state.comparisonsOpen});\r\n };\r\n\r\n\r\n render() {\r\n \r\n \r\n const {locationEmissions, selectedFacility, classes} = this.props;\r\n let co2 = locationEmissions.emissions.filter(x => x.abbr === 'co2')[0];\r\n let ch4 = locationEmissions.emissions.filter(x => x.abbr === 'ch4')[0];\r\n let n2o = locationEmissions.emissions.filter(x => x.abbr === 'n2o')[0];\r\n let co2e = locationEmissions.emissions.filter(x => x.abbr === 'co2e')[0];\r\n let annualCo2 = selectedFacility.annualKwhValue * co2.value / 1000;\r\n let annualCh4 = selectedFacility.annualKwhValue * ch4.value / 1000;\r\n let annualN2o = selectedFacility.annualKwhValue * n2o.value / 1000;\r\n let annualCo2e = selectedFacility.annualKwhValue * co2e.value / 1000;\r\n \r\n const {subRegion1Name} = this.props;\r\n\r\n return (\r\n \r\n {/**/}\r\n {/* */}\r\n {/* eGrid Subregion*/}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* {subRegion1Name}*/}\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 {/* Header 1*/}\r\n {/* Header 2*/}\r\n \r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n \r\n {/* */}\r\n {/* */}\r\n {/* Total Consumption*/}\r\n {/* */}\r\n {/* {selectedFacility.annualKwhValue}*/}\r\n \r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* Carbon Dioxide*/}\r\n {/* */}\r\n {/* {annualCo2}*/}\r\n \r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* Nitrous Oxide*/}\r\n {/* */}\r\n {/* {annualN2o}*/}\r\n \r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* Methane*/}\r\n {/* */}\r\n {/* {annualCh4}*/}\r\n \r\n {/* */}\r\n \r\n {/* */}\r\n {/*
    */}\r\n \r\n {cardContent(selectedFacility.annualKwhValue, 'Total Consumption', ' kWh')}\r\n \r\n \r\n {cardContent(annualCo2, 'Carbon Dioxide', ' lbs')}\r\n \r\n \r\n {cardContent(annualN2o, 'Nitrous Oxide', 'lbs')}\r\n \r\n \r\n {cardContent(annualCh4, 'Methane', 'lbs')}\r\n \r\n \r\n \r\n \r\n \r\n\r\n
    \r\n
    \r\n {this.state.comparisonsOpen ?\r\n \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\n \r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(MeterCo2ECard);","import eGridZipcodes from \"../../assets/GhgJsons/eGridZipcodes\";\r\nimport eGridSubregionTotalEmissions from \"../../assets/GhgJsons/eGridSubregionTotalEmissions\";\r\nimport eGridSubregionResourceMix from \"../../assets/GhgJsons/eGridSubregionResourceMix\";\r\nimport eGridStateEmissions from \"../../assets/GhgJsons/eGridStateEmissions\";\r\nimport eGridStateResourceMix from \"../../assets/GhgJsons/eGridStateResourceMix\";\r\nimport usStates from \"../../assets/GhgJsons/usStates\";\r\nimport eGridRegions from '../../assets/GhgJsons/eGridRegions'\r\nimport React from \"react\";\r\n\r\nclass GhgClass {\r\n constructor(zipcode, stateOrSubregion= 'subRegion', includeLineLosses = true) {\r\n this.location = getLocation(zipcode);\r\n this.stateOrSubregion = stateOrSubregion;\r\n this.includeLineLosses = includeLineLosses;\r\n const {locationEmissions, locationResourceMix} = getLocationEmissionsAndResources(this.location.postalCode, stateOrSubregion, includeLineLosses);\r\n this.locationEmissions = locationEmissions;\r\n this.locationResourceMix = locationResourceMix;\r\n };\r\n\r\n}\r\n\r\nexport default GhgClass;\r\n\r\nfunction subRegionEmissionChartOptions(subRegionEmissions) {\r\n let formatted = formatSubRegionEmissions(subRegionEmissions);\r\n\r\n return (\r\n {\r\n chart: {\r\n type: 'column'\r\n },\r\n title: {\r\n text: 'Monthly Average Rainfall'\r\n },\r\n subtitle: {\r\n text: 'Source: WorldClimate.com'\r\n },\r\n xAxis: {},\r\n yAxis: {\r\n min: 0,\r\n title: {\r\n text: 'Rainfall (mm)'\r\n }\r\n },\r\n tooltip: {\r\n headerFormat: '{point.key}',\r\n pointFormat: '' +\r\n '',\r\n footerFormat: '
    {series.name}: {point.y:.1f} mm
    ',\r\n // shared: true,\r\n useHTML: true\r\n },\r\n plotOptions: {\r\n column: {\r\n pointPadding: 0.2,\r\n borderWidth: 0\r\n }\r\n },\r\n series: [{\r\n name: 'Tokyo',\r\n data: [49.9]\r\n\r\n }, {\r\n name: 'New York',\r\n data: [83.6]\r\n\r\n }, {\r\n name: 'London',\r\n data: [48.9]\r\n\r\n }, {\r\n name: 'Berlin',\r\n data: [42.4]\r\n\r\n }]\r\n }\r\n )\r\n};\r\n\r\nfunction formatSubRegionEmissions(subRegionEmissions) {\r\n let array = [\r\n {\r\n abbr: 'co2',\r\n label:
    CO2
    ,\r\n name: 'Carbon Dioxide',\r\n value: subRegionEmissions.co2,\r\n },\r\n {\r\n abbr: 'ch4',\r\n label:
    CH4
    ,\r\n name: 'Methane',\r\n value: subRegionEmissions.ch4,\r\n },\r\n {\r\n abbr: 'n2o',\r\n label:
    N20
    ,\r\n name: 'Nitrous Oxide',\r\n value: subRegionEmissions.n2o,\r\n },\r\n {\r\n abbr: 'co2e',\r\n label:
    CO2E
    ,\r\n name: 'Carbon Dioxide Equivalent',\r\n value: subRegionEmissions.co2e,\r\n },\r\n {\r\n abbr: 'annualNox',\r\n label:
    Annual NOx
    ,\r\n name: 'Annual Oxides of Nitrogen',\r\n value: subRegionEmissions.annualNox,\r\n },\r\n {\r\n abbr: 'ozoneNox',\r\n label:
    Ozone NOx
    ,\r\n name: 'Ozone Oxides of Nitrogen',\r\n value: subRegionEmissions.ozoneNox,\r\n },\r\n {\r\n abbr: 'so2',\r\n label:
    SO2
    ,\r\n name: 'Sulfur Dioxide',\r\n value: subRegionEmissions.so2,\r\n },\r\n ];\r\n return {\r\n subRegion: subRegionEmissions.subRegion,\r\n subRegionName: subRegionEmissions.subRegionName,\r\n emissions: array\r\n }\r\n\r\n};\r\n\r\nfunction formatSubRegionResourceMix(formatSubRegionResourceMix) {\r\n let fossilFuels = [\r\n {\r\n name: 'Coal',\r\n value: formatSubRegionResourceMix.coal\r\n },\r\n {\r\n name: 'Oil',\r\n value: formatSubRegionResourceMix.oil\r\n },\r\n {\r\n name: 'Gas',\r\n value: formatSubRegionResourceMix.gas\r\n },\r\n {\r\n name: 'Nuclear',\r\n value: formatSubRegionResourceMix.nuclear\r\n },\r\n {\r\n name: 'Other Fossil Fuels',\r\n value: formatSubRegionResourceMix.otherFossil\r\n },\r\n\r\n ];\r\n let renewables = [\r\n\r\n {\r\n name: 'Hydro',\r\n value: formatSubRegionResourceMix.hydro\r\n },\r\n {\r\n name: 'Biomass',\r\n value: formatSubRegionResourceMix.biomass\r\n },\r\n {\r\n name: 'Wind',\r\n value: formatSubRegionResourceMix.wind\r\n },\r\n {\r\n name: 'Solar',\r\n value: formatSubRegionResourceMix.solar\r\n },\r\n {\r\n name: 'Geothermal',\r\n value: formatSubRegionResourceMix.solar\r\n },\r\n {\r\n name: 'Other Renewable',\r\n value: formatSubRegionResourceMix.other\r\n },\r\n ];\r\n\r\n return {\r\n subRegion: formatSubRegionResourceMix.subRegion,\r\n subRegionName: formatSubRegionResourceMix.subRegion,\r\n resourceMix: {\r\n fossilFuels,\r\n renewables,\r\n }\r\n }\r\n\r\n};\r\n\r\nfunction formatResourceMixForPieChart(resourceMix) {\r\n let fossilFuels = [\r\n {\r\n name: 'Coal',\r\n value: resourceMix.fossilFuels[0].value\r\n },\r\n {\r\n name: 'Oil',\r\n value: resourceMix.fossilFuels[1].value\r\n },\r\n {\r\n name: 'Gas',\r\n value: resourceMix.fossilFuels[2].value\r\n },\r\n {\r\n name: 'Nuclear',\r\n value: resourceMix.fossilFuels[3].value\r\n },\r\n {\r\n name: 'Other Fossil Fuels',\r\n value: resourceMix.fossilFuels[4].value\r\n },\r\n\r\n ];\r\n // let renewables = [\r\n //\r\n // {\r\n // name: 'Hydro',\r\n // value: resourceMix.renewables[0].value\r\n // },\r\n // {\r\n // name: 'Biomass',\r\n // value: resourceMix.renewables[1].value\r\n // },\r\n // {\r\n // name: 'Wind',\r\n // value: resourceMix.renewables[2].value\r\n // },\r\n // {\r\n // name: 'Solar',\r\n // value: resourceMix.renewables[3].value\r\n // },\r\n // {\r\n // name: 'Geothermal',\r\n // value: resourceMix.renewables[4].value\r\n // },\r\n // {\r\n // name: 'Other Renewable',\r\n // value: resourceMix.renewables[5].value\r\n // },\r\n // ];\r\n let renewables = [\r\n {\r\n name: 'Renewables',\r\n value: resourceMix.renewables[0].value + resourceMix.renewables[1].value + resourceMix.renewables[2].value + resourceMix.renewables[3].value + resourceMix.renewables[4].value + resourceMix.renewables[5].value\r\n }\r\n ]\r\n\r\n return fossilFuels.concat(renewables)\r\n\r\n\r\n}\r\n\r\nfunction getIndividualResourceMixPieChartOptions(resourceMix) {\r\n let temp = formatResourceMixForPieChart(resourceMix);\r\n let data = [];\r\n temp.forEach(x => data.push({name: x.name, y: x.value}));\r\n return {\r\n chart: {\r\n plotBackgroundColor: null,\r\n plotBorderWidth: null,\r\n plotShadow: false,\r\n type: 'pie'\r\n },\r\n title: {\r\n text: ''\r\n },\r\n tooltip: {\r\n pointFormat: '{series.name}: {point.percentage:.1f}%'\r\n },\r\n plotOptions: {\r\n pie: {\r\n allowPointSelect: true,\r\n cursor: 'pointer',\r\n dataLabels: {\r\n enabled: true,\r\n format: '{point.name}: {point.percentage:.1f} %'\r\n },\r\n // showInLegend: true\r\n }\r\n },\r\n series: [{\r\n name: 'Percentage',\r\n colorByPoint: true,\r\n data,\r\n }],\r\n credits: {\r\n enabled: false\r\n }\r\n }\r\n}\r\n\r\nfunction getLocation(postalCode) {\r\n let location;\r\n location = eGridZipcodes.filter(x => x.zipcode.toString() === postalCode)[0];\r\n let stateName = usStates.filter(x => x.abbreviation === location.state)[0].name;\r\n let subRegion1Name = eGridRegions.filter(x => x.subRegion === location.subRegion1)[0].subRegionName;\r\n let subRegion2Name = location.subRegion2 ? eGridRegions.filter(x => x.subRegion === location.subRegion2)[0].subRegionName : null;\r\n let subRegion3Name = location.subRegion3 ? eGridRegions.filter(x => x.subRegion === location.subRegion3)[0].subRegionName : null;\r\n return {\r\n postalCode,\r\n stateName,\r\n subRegion1Abbr: location.subRegion1 === \"\" ? null : location.subRegion1,\r\n subRegion2Abbr: location.subRegion2 === \"\" ? null : location.subRegion2,\r\n subRegion3Abbr: location.subRegion3 === \"\" ? null : location.subRegion3,\r\n subRegion1Name,\r\n subRegion2Name,\r\n subRegion3Name,\r\n }\r\n};\r\n\r\nfunction getLocationEmissionsAndResources(postalCode, stateOrRegion, includeLosses) {\r\n\r\n let location;\r\n let locationEmissionsTemp = null;\r\n let locationResourceMixTemp = null;\r\n if (postalCode) {\r\n location = eGridZipcodes.filter(x => x.zipcode.toString() === postalCode);\r\n\r\n }\r\n if (location.length === 0) {\r\n //TODO: throw an error. If it's 0 then the zipcode isn't real\r\n } else {\r\n location = location[0];\r\n switch (stateOrRegion) {\r\n case 'subRegion':\r\n let temp = eGridSubregionTotalEmissions.filter(x => x.subRegion === location.subRegion1)[0];\r\n locationEmissionsTemp = {...temp};\r\n locationResourceMixTemp = eGridSubregionResourceMix.filter(x => x.subRegion === location.subRegion1)[0];\r\n break;\r\n case 'state':\r\n locationEmissionsTemp = eGridStateEmissions.filter(x => x.state === location.state)[0];\r\n locationResourceMixTemp = eGridStateResourceMix.filter(x => x.state === location.state)[0];\r\n break;\r\n }\r\n\r\n }\r\n\r\n if (stateOrRegion === 'subRegion' && includeLosses) {\r\n let gridGrossLoss = 1 + locationEmissionsTemp.gridGrossLoss;\r\n locationEmissionsTemp.co2e *= gridGrossLoss;\r\n locationEmissionsTemp.co2 *= gridGrossLoss;\r\n locationEmissionsTemp.n2o *= gridGrossLoss;\r\n locationEmissionsTemp.ch4 *= gridGrossLoss;\r\n locationEmissionsTemp.annualNox *= gridGrossLoss;\r\n locationEmissionsTemp.ozoneNox *= gridGrossLoss;\r\n locationEmissionsTemp.so2 *= gridGrossLoss;\r\n\r\n }\r\n \r\n \r\n\r\n\r\n let locationEmissions = formatSubRegionEmissions(locationEmissionsTemp);\r\n let locationResourceMix = formatSubRegionResourceMix(locationResourceMixTemp);\r\n return {locationEmissions, locationResourceMix}\r\n}\r\n\r\n","import {SET_CHART_OPTIONS, SET_PLOTLY_CHART_OPTIONS} from \"../meter-charts-actions\";\r\nimport GhgClass from \"../../../js/CustomDataClasses/GhgClass\";\r\n\r\nconst SET_EMISSIONS_OBJECT = 'SET_EMISSIONS_OBJECT';\r\nconst TOGGLE_EMISSIONS_INCLUDE_LOSSES = 'TOGGLE_EMISSIONS_INCLUDE_LOSSES';\r\nconst HANDLE_EMISSIONS_STATE_VS_REGION_CHANGE = 'HANDLE_EMISSIONS_STATE_VS_REGION_CHANGE';\r\n\r\nconst setEmissionsObject = () => {\r\n return (dispatch, getState) => {\r\n const {\r\n selectedFacility,\r\n emissionsStateVsRegion,\r\n emissionsIncludeLosses\r\n } = getState();\r\n\r\n let emissionsObject = new GhgClass(selectedFacility.postalCode, emissionsStateVsRegion, emissionsIncludeLosses);\r\n \r\n\r\n // clear chart options\r\n dispatch({\r\n type: SET_EMISSIONS_OBJECT,\r\n payload: emissionsObject\r\n });\r\n }\r\n};\r\n\r\nconst toggleEmissionsIncludeLosses = (boolean) => {\r\n return {\r\n type: TOGGLE_EMISSIONS_INCLUDE_LOSSES,\r\n payload: boolean\r\n };\r\n};\r\n\r\nconst handleEmissionsStateVsRegionChange = (string) => {\r\n return {\r\n type: HANDLE_EMISSIONS_STATE_VS_REGION_CHANGE,\r\n payload: string\r\n };\r\n};\r\n\r\nexport {\r\n SET_EMISSIONS_OBJECT,\r\n TOGGLE_EMISSIONS_INCLUDE_LOSSES,\r\n HANDLE_EMISSIONS_STATE_VS_REGION_CHANGE,\r\n setEmissionsObject,\r\n toggleEmissionsIncludeLosses,\r\n handleEmissionsStateVsRegionChange\r\n};\r\n","import React, {Component, Fragment} from 'react';\r\n\r\n// Components\r\nimport CustomInfoLayout from \"../../../../../components/CustomInfoLayout/CustomInfoLayout\";\r\nimport MeterEmissions from \"./MeterEmissionsTable.js\";\r\nimport MeterMonthlyEmissionsChart from \"./MeterMonthlyEmissionsChart\";\r\nimport MeterResourceMixChart from \"./MeterResourceMixChart\";\r\n\r\n// Material UI\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport {Typography, withStyles} from \"@material-ui/core\";\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport Switch from '@material-ui/core/Switch';\r\nimport MeterCo2ECard from \"./MeterCo2ECard\";\r\nimport GhgClass from \"../../../../../js/CustomDataClasses/GhgClass\";\r\nimport MeterSectionTitleBar from \"../../../components/MeterSectionTitleBar\";\r\nimport {toggleEmissionsIncludeLosses} from \"../../../../../redux/actions/EmissionsActions/emissions-actions\";\r\n\r\n\r\nconst styles = theme => ({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n formControl: {\r\n margin: theme.spacing(0),\r\n },\r\n});\r\n\r\nclass GhgMeter extends Component {\r\n \r\n state = {\r\n subRegionEmissionChartOptions: null,\r\n stateOrRegion: 'subRegion', // 'state' or 'subRegion',\r\n includeLosses: true,\r\n GhgObject: null\r\n }\r\n\r\n //\r\n //\r\n // toggleIncludeLosses = (event) => {\r\n // let GhgObject = new GhgClass(this.props.selectedFacility.postalCode, this.state.stateOrRegion, !this.state.includeLosses);\r\n // this.setState({includeLosses: !this.state.includeLosses, GhgObject});\r\n // };\r\n //\r\n // handleStateVsRegionChange = (event) => {\r\n // let GhgObject = new GhgClass(this.props.selectedFacility.postalCode, event.target.value, !this.state.includeLosses);\r\n // this.setState({stateOrRegion: event.target.value, GhgObject})\r\n // };\r\n\r\n\r\n render() {\r\n const {\r\n selectedFacility, \r\n classes, \r\n emissionsObject,\r\n toggleIncludeLosses,\r\n handleStateVsRegionChange,\r\n emissionsStateVsRegion,\r\n emissionsIncludeLosses\r\n } = this.props;\r\n\r\n if (Object.keys(emissionsObject).length > 0) {\r\n const {locationEmissions, locationResourceMix} = this.props.emissionsObject;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n } label=\"Sub-Region\" />\r\n } label=\"State\" />\r\n \r\n \r\n {emissionsStateVsRegion === \"subRegion\" ?\r\n \r\n \r\n }\r\n label=\"Include Line Losses\"\r\n />\r\n : null}\r\n \r\n \r\n \r\n \r\n : 'no chart options yet'}\r\n />\r\n \r\n \r\n \r\n \r\n : 'no chart options yet'}\r\n />\r\n \r\n \r\n CO2 Equivalent}\r\n mainContent={locationEmissions ?\r\n \r\n : 'no chart options yet'}\r\n />\r\n \r\n \r\n \r\n : 'no chart options yet'}\r\n />\r\n \r\n \r\n \r\n \r\n\r\n\r\n )\r\n } else {\r\n return 'Loading'\r\n }\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(GhgMeter)","import React, {Component} from 'react'\r\nimport {Link} from \"react-router-dom\";\r\nimport AntTab from \"../../../../../components/AntTabs/AntTab\";\r\nimport AntTabs from \"../../../../../components/AntTabs/AntTabs\";\r\n\r\nfunction EmissionsTabs(props) {\r\n\r\n\r\n\r\n const {selectedFacility, selectedFacilitySubview} = props;\r\n const {projectId, facilityId} = selectedFacility;\r\n\r\n let tabs = [\r\n {\r\n label: 'Summary',\r\n link: `/${projectId}/${facilityId}/emissions/summary`,\r\n chart: 'summary'\r\n },\r\n {\r\n label: 'Sub-Region',\r\n link: `/${projectId}/${facilityId}/emissions/sub-region`,\r\n chart: 'sub-region'\r\n },\r\n {\r\n label: 'State',\r\n link: `/${projectId}/${facilityId}/emissions/state`,\r\n chart: 'state'\r\n },\r\n ];\r\n\r\n let selectedIndex;\r\n tabs.forEach((x, index) => {\r\n if (x.chart === selectedFacilitySubview) {\r\n selectedIndex = index;\r\n }\r\n });\r\n\r\n return (\r\n \r\n {tabs.map(tab => (\r\n \r\n \r\n \r\n\r\n ))}\r\n \r\n )\r\n\r\n}\r\n\r\nexport default EmissionsTabs","import React, {Component} from 'react'\r\nimport {bindActionCreators} from \"redux\";\r\nimport {connect} from \"react-redux\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport MeterSectionTitleBar from \"../components/MeterSectionTitleBar\";\r\nimport GhgMeter from \"./components/Meter\";\r\nimport EmissionsTabs from \"./components/Tabs\";\r\nimport {setEmissionsObject, toggleEmissionsIncludeLosses, handleEmissionsStateVsRegionChange} from \"../../../redux/actions/EmissionsActions/emissions-actions\";\r\n\r\nclass Emissions extends Component {\r\n \r\n componentDidMount = () => {\r\n const {selectedFacility} = this.props;\r\n if (selectedFacility.postalCode) {\r\n // let ghg = new GhgClass(selectedFacility.postalCode);\r\n this.props.setEmissionsObject()\r\n }\r\n };\r\n\r\n toggleIncludeLosses = () => {\r\n this.props.toggleEmissionsIncludeLosses(!this.props.emissionsIncludeLosses);\r\n this.props.setEmissionsObject()\r\n };\r\n\r\n handleStateVsRegionChange = (event) => {\r\n this.props.handleEmissionsStateVsRegionChange(event.target.value);\r\n this.props.setEmissionsObject()\r\n };\r\n \r\n render() {\r\n const {selectedFacility, selectedFacilitySubview} = this.props;\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\nfunction mapStateToProps(state) {\r\n return {\r\n selectedFacility: state.selectedFacility,\r\n selectedFacilitySubview: state.selectedFacilitySubview,\r\n emissionsObject: state.emissionsObject,\r\n emissionsIncludeLosses: state.emissionsIncludeLosses,\r\n emissionsStateVsRegion: state.emissionsStateVsRegion\r\n };\r\n}\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n setEmissionsObject,\r\n toggleEmissionsIncludeLosses,\r\n handleEmissionsStateVsRegionChange\r\n }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Emissions);\r\n","import React, {Component} from 'react'\r\nimport {Link} from \"react-router-dom\";\r\nimport AntTab from \"../../../../../components/AntTabs/AntTab\";\r\nimport AntTabs from \"../../../../../components/AntTabs/AntTabs\";\r\n\r\nfunction MeterSettingsTabs(props) {\r\n const {selectedFacility} = props;\r\n const {projectId, facilityId} = selectedFacility;\r\n\r\n let tabs = [\r\n\r\n {\r\n label: 'General',\r\n link: `/${projectId}/${facilityId}/settings/general`,\r\n chart: 'general'\r\n },\r\n {\r\n label: 'Dates',\r\n link: `/${projectId}/${facilityId}/settings/dates`,\r\n chart: 'dates'\r\n },\r\n ];\r\n\r\n let selectedIndex;\r\n tabs.forEach((x, index) => {\r\n if (x.chart === props.selectedFacilitySubview) {\r\n selectedIndex = index;\r\n }\r\n });\r\n\r\n return (\r\n \r\n {tabs.map(tab => (\r\n \r\n \r\n \r\n\r\n ))}\r\n \r\n )\r\n\r\n}\r\n\r\nexport default MeterSettingsTabs","'use strict'\r\n\r\nimport React from 'react'\r\nimport reactCSS from 'reactcss'\r\nimport { SketchPicker } from 'react-color'\r\n\r\nclass CustomColorPicker extends React.Component {\r\n state = {\r\n displayColorPicker: false,\r\n // color: {\r\n // r: '241',\r\n // g: '112',\r\n // b: '19',\r\n // a: '1',\r\n // },\r\n };\r\n\r\n handleClick = () => {\r\n this.setState({ displayColorPicker: !this.state.displayColorPicker })\r\n };\r\n\r\n handleClose = () => {\r\n this.setState({ displayColorPicker: false })\r\n };\r\n\r\n handleChange = (color) => {\r\n this.props.onChange(color);\r\n // this.setState({ color: color.rgb })\r\n };\r\n\r\n render() {\r\n\r\n const styles = reactCSS({\r\n 'default': {\r\n color: {\r\n width: '36px',\r\n height: '14px',\r\n borderRadius: '2px',\r\n background: `rgba(${ this.props.color.r }, ${ this.props.color.g }, ${ this.props.color.b }, ${ this.props.color.a })`,\r\n },\r\n swatch: {\r\n padding: '5px',\r\n background: '#fff',\r\n borderRadius: '1px',\r\n boxShadow: '0 0 0 1px rgba(0,0,0,.1)',\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n },\r\n popover: {\r\n position: 'absolute',\r\n zIndex: '2',\r\n },\r\n cover: {\r\n position: 'fixed',\r\n top: '0px',\r\n right: '0px',\r\n bottom: '0px',\r\n left: '0px',\r\n },\r\n },\r\n });\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n { this.state.displayColorPicker ?
    \r\n
    \r\n \r\n
    : null }\r\n\r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default CustomColorPicker","import React, {Component} from 'react'\r\nimport Grid from '@material-ui/core/Grid';\r\nimport moment from 'moment'\r\nimport MomentUtils from '@date-io/moment';\r\nimport {\r\n MuiPickersUtilsProvider,\r\n KeyboardDateTimePicker\r\n} from '@material-ui/pickers';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport CustomColorPicker from \"../../../../../../components/ColorPicker/CustomColorPicker\";\r\nimport eventsGif from '../../../../../../assets/gifs/events.gif'\r\nimport CustomOutlinedInput from \"../../../../../../components/Inputs/CustomOutlinedInput\";\r\n\r\nclass MeterCreateNewDate extends Component {\r\n \r\n state = {\r\n startDateTime: moment(),\r\n color: {\r\n r: '0',\r\n g: '0',\r\n b: '255',\r\n a: '100',\r\n },\r\n form: {\r\n label: {\r\n value: null,\r\n name: 'label'\r\n },\r\n description: {\r\n value: null,\r\n name: 'description'\r\n },\r\n },\r\n tabs: [\r\n {\r\n label: 'When'\r\n },\r\n {\r\n label: 'Details'\r\n }\r\n ]\r\n \r\n };\r\n\r\n handleColorChange = (color) => {\r\n this.setState({ color: color.rgb });\r\n };\r\n\r\n handleDateChange = (date) => {\r\n this.setState({startDate: date})\r\n };\r\n \r\n handleTextChange = event => {\r\n let value = event.target.value;\r\n let name = event.target.name;\r\n let form = {...this.state.form};\r\n form[name].value = value;\r\n this.setState({form})\r\n\r\n }\r\n \r\n render() {\r\n const {label, description} = this.state.form;\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default MeterCreateNewDate","import React, {Component} from 'react'\r\nimport MeterCreateNewDate from \"./components/CreateNewDate\";\r\nimport NoDatesOrRanges from \"./components/NoDatesOrRanges\";\r\nimport EmptyGif from \"../../../../../components/EmptyGif/EmptyGif\";\r\nimport eventsGif from '../../../../../assets/gifs/events.gif'\r\nimport CustomDialog from \"../../../../../components/Dialogs/customDialog\";\r\n\r\nclass MeterDatesAndRanges extends Component {\r\n state = {\r\n createEventDialogOpen: false\r\n }\r\n render() {\r\n return (\r\n
    \r\n \r\n }\r\n open={this.state.createEventDialogOpen}\r\n \r\n />\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default MeterDatesAndRanges","import React, {Component} from 'react'\r\nimport eventsGif from '../../../../../../assets/gifs/events.gif'\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport GreenButton from \"../../../../../../components/CustomButtons/GreenButton\";\r\n\r\nclass NoDatesOrRanges extends Component {\r\n\r\n render() {\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n {'time\r\n \r\n \r\n \r\n \r\n No Events Yet\r\n \r\n \r\n \r\n \r\n No events have been added yet.\r\n \r\n \r\n \r\n \r\n Create New Event\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 NoDatesOrRanges","import React, {Component} from 'react'\r\nimport {bindActionCreators} from \"redux\";\r\nimport {connect} from \"react-redux\";\r\nimport MeterSectionTitleBar from \"../components/MeterSectionTitleBar\";\r\nimport MeterSettingsTabs from \"./components/Tabs\";\r\nimport MeterDatesAndRanges from \"./components/DatesAndRanges\";\r\n\r\nclass MeterSettings extends Component {\r\n \r\n getComponent = () => {\r\n const {selectedFacilitySubview} = this.props;\r\n switch (selectedFacilitySubview) {\r\n case 'dates':\r\n return ;\r\n case 'general':\r\n return 'general'\r\n }\r\n };\r\n render() {\r\n return (\r\n
    \r\n \r\n \r\n {this.getComponent()}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n selectedFacility: state.selectedFacility,\r\n selectedFacilitySubview: state.selectedFacilitySubview\r\n\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n\r\n }, dispatch);\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MeterSettings)\r\n\r\n","import React, {Component, Fragment} from \"react\";\r\nimport {bindActionCreators} from 'redux';\r\nimport {connect} from 'react-redux';\r\nimport {Link} from 'react-router-dom'\r\nimport {selectFacility, selectFacilityView, toggleFacilitySideBar} from '../redux/actions/facility-actions';\r\nimport {selectProject} from '../redux/actions/project-actions';\r\nimport {getFacilityById} from \"../services/facility.service\";\r\nimport {getProjectById} from \"../services/project.service\"\r\nimport {Toolbar, withStyles} from \"@material-ui/core\";\r\nimport FacilityDashboardView from \"./components/Overview\";\r\nimport FacilityNotes from \"./components/Notes\";\r\nimport Charts from \"./components/Charts\";\r\nimport ImportDataView from \"./components/ImportData\";\r\nimport MeterNavbar from \"./components/MeterNavbar\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport StyledLink from '@material-ui/core/Link';\r\nimport Weather from \"./components/Weather\";\r\nimport 'moment-timezone';\r\nimport Regression from \"./components/Regression\";\r\nimport NavigationTabs from \"./components/NavigationTabs/NavigationTabs\";\r\nimport Emissions from \"./components/Emissions\";\r\nimport CustomPulseLoader from \"../components/Spinners/pulse-loader\";\r\nimport MeterSettings from \"./components/Settings\";\r\n\r\n\r\nconst styles = theme => ({\r\n root: {\r\n display: 'flex',\r\n flexGrow: 1,\r\n minHeight: '100vh'\r\n },\r\n title: {\r\n flexGrow: 1,\r\n },\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(1),\r\n },\r\n toolbar: theme.mixins.toolbar,\r\n fab: {\r\n zIndex: 2,\r\n alignItems: 'center'\r\n },\r\n subTitleBar: {\r\n backgroundColor: theme.palette.subTitleBar.main,\r\n zIndex: theme.zIndex.drawer + 1,\r\n borderBottom: '1px solid #e8e8e8'\r\n }\r\n});\r\n\r\nclass FacilityHomeContainerTemp extends Component {\r\n\r\n state = {\r\n prevUrlParams: null,\r\n prevFacilityView: null,\r\n };\r\n\r\n componentDidMount() {\r\n\r\n const {facilityId, projectId, view, subview} = this.props.match.params;\r\n const {selectProject, selectFacility, selectedProject, selectedFacility} = this.props;\r\n\r\n this.props.selectFacilityView(view, subview);\r\n\r\n if (!selectedProject) {\r\n getProjectById(projectId).then(project => {\r\n selectProject(project);\r\n });\r\n };\r\n \r\n if (!selectedFacility) {\r\n getFacilityById(facilityId).then(facility => {\r\n selectFacility(facility);\r\n });\r\n }\r\n };\r\n\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n const {projectId, facilityId, view, subview} = this.props.match.params;\r\n const {selectFacility} = this.props;\r\n\r\n if (view !== prevProps.match.params.view || subview !== prevProps.match.params.subview) {\r\n this.props.selectFacilityView(view, subview)\r\n }\r\n\r\n if (this.props.match.params.facilityId !== prevProps.match.params.facilityId) {\r\n selectFacility(null);\r\n getFacilityById(facilityId).then(facility => {\r\n this.props.selectFacility(facility);\r\n });\r\n }\r\n\r\n }\r\n\r\n pushToDashboard = () => {\r\n const {projectId, facilityId} = this.props.selectedFacility;\r\n this.props.history.push(`/${projectId}/${facilityId}/overview`)\r\n };\r\n\r\n getComponent(selectedFacilityView) {\r\n\r\n switch (selectedFacilityView) {\r\n case 'overview':\r\n return ;\r\n case 'notes':\r\n return ;\r\n case 'charts':\r\n return ;\r\n case 'weather':\r\n return ;\r\n case 'data':\r\n return ;\r\n case 'emissions':\r\n return ;\r\n case 'regression':\r\n return ;\r\n case 'settings':\r\n return \r\n }\r\n };\r\n\r\n render() {\r\n const {\r\n selectedFacilityView,\r\n selectedFacilitySubview,\r\n toggleFacilitySideBar,\r\n facilitySidebarOpen,\r\n selectedFacility,\r\n selectedProject,\r\n selectedChartView,\r\n classes\r\n } = this.props;\r\n const {facilityId, projectId, view} = this.props.match.params;\r\n\r\n\r\n return (\r\n
    \r\n \r\n {selectedProject ?\r\n\r\n \r\n \r\n \r\n {selectedProject ? selectedProject.name : null}\r\n \r\n \r\n \r\n : null}\r\n\r\n\r\n
    \r\n \r\n {selectedFacility ? '/' : null}\r\n \r\n
    \r\n \r\n {selectedFacility ? selectedFacility.name : null}\r\n \r\n\r\n
    \r\n \r\n\r\n {/**/}\r\n {selectedFacility ?\r\n selectedFacility.maximumkWValue ?\r\n
    \r\n
    \r\n \r\n
    \r\n\r\n\r\n
    \r\n \r\n\r\n\r\n
    \r\n {this.getComponent(selectedFacilityView, projectId, facilityId)}\r\n
    \r\n {/**/}\r\n \r\n {/* Fetching Facility Data..*/}\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 Fetching Facility Data..\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n
    \r\n\r\n \r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n selectedProject: state.selectedProject,\r\n selectedChartView: state.selectedChartView,\r\n selectedFacilityView: state.selectedFacilityView,\r\n selectedFacilitySubview: state.selectedFacilitySubview,\r\n // intervalData: state.intervalData,\r\n facilitySidebarOpen: state.facilitySidebarOpen,\r\n selectedFacility: state.selectedFacility,\r\n // facilities: state.facilities,\r\n // intervalDataForLoadCurve: state.intervalDataForLoadCurve,\r\n // intervalDataForZoomable: state.intervalDataForZoomable,\r\n // chartDataFilterFormObject: state.chartDataFilterFormObject\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n selectFacilityView,\r\n selectFacility,\r\n selectProject,\r\n toggleFacilitySideBar,\r\n }, dispatch);\r\n};\r\n\r\nlet FacilityHomeContainer = connect(mapStateToProps, mapDispatchToProps)(FacilityHomeContainerTemp);\r\n\r\nexport default withStyles(styles)(FacilityHomeContainer)\r\n\r\n\r\n","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Icon from '@material-ui/core/Icon';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\n// Font Awesome\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faCircle, faCloudUploadAlt, faTrashAlt } from '@fortawesome/free-solid-svg-icons'\r\n\r\n// Colors\r\nimport { green, red } from '@material-ui/core/colors';\r\n\r\n// Material UI\r\nimport Box from '@material-ui/core/Box';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n // justifyContent: 'center',\r\n alignItems: 'flex-end',\r\n },\r\n iconDelete: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n fontSize: 30\r\n },\r\n iconEdit: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n fontSize: 30\r\n },\r\n iconAdd: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n fontSize: 30\r\n\r\n },\r\n margin: {\r\n margin: theme.spacing(0),\r\n },\r\n\r\n\r\n}));\r\n\r\nexport default function Icons(props) {\r\n const classes = useStyles();\r\n\r\n const { userObject, toggleEditUserDialog, toggleDeleteUserDialog } = props;\r\n\r\n\r\n return (\r\n
    \r\n toggleEditUserDialog(userObject)}>\r\n \r\n edit\r\n \r\n \r\n toggleDeleteUserDialog(userObject)}>\r\n \r\n delete_outline\r\n \r\n \r\n \r\n
    \r\n );\r\n}","import React, { Component, Fragment } from \"react\";\r\n\r\n// Redux\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\n// import { selectUser } from '../../redux/actions/user-actions';\r\n\r\n//Material UI\r\nimport MaterialTable from 'material-table'\r\n\r\n\r\n// Components\r\nimport LinkText from '../../components/Link/LinkText';\r\nimport EditDeleteAddIcons from '../components/buttons/FacilityEditDeleteAddIcons'\r\n\r\n\r\n\r\n\r\n\r\nclass UsersTable extends Component {\r\n \r\n state = {\r\n \r\n };\r\n\r\n render() {\r\n\r\n \r\n \r\n\r\n const { toggleEditUserDialog, toggleDeleteUserDialog } = this.props;\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 data={this.props.users}\r\n title=\"\"\r\n style={{ boxShadow: 'none' }}\r\n options={{\r\n search: true,\r\n pageSize: 10,\r\n padding: 'dense',\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\nfunction mapStateToProps(state) {\r\n return {\r\n users: state.users,\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({ }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(UsersTable);\r\n\r\n","import React from 'react';\r\n\r\n//Material UI\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\n\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n\r\n card: {\r\n maxWidth: 345,\r\n },\r\n\r\n});\r\n\r\nconst projectProperties = [\r\n {\r\n name: 'address1',\r\n label: 'Address 1',\r\n },\r\n {\r\n name: 'address2',\r\n label: 'Address 2'\r\n },\r\n {\r\n name: 'city',\r\n label: 'City',\r\n },\r\n {\r\n name: 'state',\r\n label: 'State'\r\n },\r\n {\r\n name: 'postalCode',\r\n label: 'Zip Code',\r\n },\r\n {\r\n name: 'phone',\r\n label: 'Phone'\r\n }\r\n]\r\n\r\nfunction getOrganizationInfo(organization) {\r\n return (\r\n
    \r\n \r\n {organization.name}\r\n \r\n {projectProperties.map(property => {\r\n if (organization[property.name]) {\r\n return (\r\n \r\n {property.label}: {organization[property.name]}\r\n \r\n )\r\n } else {\r\n //show info with blank name if null/undefined\r\n return (\r\n \r\n {property.label}:\r\n \r\n )\r\n } \r\n \r\n })}\r\n\r\n
    \r\n )\r\n}\r\n\r\nexport default function SimpleAppBar(props) {\r\n const classes = useStyles();\r\n const { organization } = props;\r\n\r\n return (\r\n
    \r\n \r\n\r\n \r\n {!organization ? null : getOrganizationInfo(organization)}\r\n \r\n\r\n \r\n\r\n\r\n
    \r\n );\r\n}","import React from 'react'\r\n\r\n// Material UI\r\nimport Grid from '@material-ui/core/Grid';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport Input from '@material-ui/core/Input';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\nimport CustomOutlinedInput from \"../../../components/Inputs/CustomOutlinedInput\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n\r\n textField: {\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n\r\n },\r\n formControl: {\r\n margin: theme.spacing(1),\r\n },\r\n\r\n}));\r\n\r\nconst CreateUserForm = (props) => {\r\n const { handleCreateUserInputChange, createUserFormControls, attemptedCreateUserSubmit } = props;\r\n const classes = useStyles();\r\n let keys = Object.keys(createUserFormControls);\r\n \r\n return (\r\n
    alert(\"submitted\")}>\r\n \r\n\r\n {keys.map(key => (\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 (CreateUserForm)","import React, { Component, Fragment } from 'react';\r\n\r\n\r\n// Material UI\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\nimport Button from '@material-ui/core/Button';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\n// Icons\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\n\r\n//Form\r\nimport CreateUserForm from '../forms/CreateUserForm'\r\nimport CustomDialog from \"../../../components/Dialogs/customDialog\";\r\nimport GreenButton from \"../../../components/CustomButtons/GreenButton\";\r\n\r\n\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n appBar: {\r\n backgroundColor: grey[300]\r\n },\r\n title: {\r\n color: 'black',\r\n flexGrow: 1\r\n },\r\n\r\n});\r\n\r\nfunction CreateUserDialog(props) {\r\n const { createUserDialogOpen, toggleCreateUserDialog, createUserFormControls, handleCreateUserInputChange, onCreateUserSubmit, attemptedCreateUserSubmit } = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n }\r\n actions={\r\n onCreateUserSubmit()}>Add User}\r\n />\r\n \r\n\r\n\r\n );\r\n}\r\n\r\nexport default CreateUserDialog;","import React from 'react'\r\nimport Grid from '@material-ui/core/Grid';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport {makeStyles} from '@material-ui/core/styles';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport Input from '@material-ui/core/Input';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\nimport MaskedInput from 'react-text-mask'\r\nimport {Typography} from \"@material-ui/core\";\r\nimport CustomOutlinedInput from \"../../../components/Inputs/CustomOutlinedInput\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n\r\n textField: {\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n\r\n },\r\n formControl: {\r\n margin: theme.spacing(1),\r\n },\r\n\r\n}));\r\n\r\nconst EditFacilityForm = (props) => {\r\n const {handleEditUserInputChange, editUserFormControls, attemptedEditUserSubmit} = props;\r\n const classes = useStyles();\r\n let keys = Object.keys(editUserFormControls);\r\n\r\n return (\r\n
    alert(\"submitted\")} >\r\n \r\n {/**/}\r\n {/*
    */}\r\n {/* */}\r\n {/* User:*/}\r\n {/* */}\r\n {/* */}\r\n {/* {editUserFormControls.email.value}*/}\r\n {/* */}\r\n {/*
    */}\r\n {/* */}\r\n {/*
    */}\r\n {keys.map(key => (\r\n \r\n {/**/}\r\n\r\n {/*{editUserFormControls[key].label}*/}\r\n \r\n {/*{editUserFormControls[key].message ? {editUserFormControls[key].message} : null}*/}\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 (EditFacilityForm)\r\n\r\n","import React, { Component, Fragment } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport EditUserForm from '../forms/EditUserForm';\r\nimport CustomDialog from \"../../../components/Dialogs/customDialog\";\r\nimport GreenButton from \"../../../components/CustomButtons/GreenButton\";\r\n\r\nfunction EditUserDialog(props) {\r\n const {\r\n editUserDialogOpen,\r\n toggleEditUserDialog,\r\n editUserFormControls,\r\n handleEditUserInputChange,\r\n onEditUserSubmit,\r\n attemptedEditUserSubmit,\r\n selectedUserForEdit\r\n } = props;\r\n\r\n return (\r\n \r\n {selectedUserForEdit === null ? null :\r\n }\r\n actions={ onEditUserSubmit()}>Update User}\r\n />\r\n }\r\n \r\n\r\n\r\n );\r\n}\r\n\r\nexport default EditUserDialog;","import React, { Component, Fragment } from 'react';\r\n\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\nimport Button from '@material-ui/core/Button';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\n// Icons\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport EditUserForm from \"../forms/EditUserForm\";\r\nimport CustomDialog from \"../../../components/Dialogs/customDialog\";\r\n\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n appBar: {\r\n backgroundColor: grey[300]\r\n },\r\n title: {\r\n color: 'black',\r\n flexGrow: 1,\r\n display: 'inline-block'\r\n },\r\n button: {\r\n color: 'red'\r\n }\r\n\r\n});\r\n\r\n\r\nfunction DeleteUserDialog(props) {\r\n const {\r\n deleteUserDialogOpen,\r\n toggleDeleteUserDialog,\r\n selectedUserForDelete,\r\n onDeleteUserSubmit,\r\n } = props;\r\n const classes = useStyles();\r\n return (\r\n \r\n {selectedUserForDelete === undefined || selectedUserForDelete === null ? null :\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 DeleteUserDialog;","import React, { Component, Fragment } from 'react';\r\n\r\n\r\n// Material UI\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\nimport Button from '@material-ui/core/Button';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\n// Icons\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\n\r\n//Form\r\nimport CreateUserForm from '../forms/CreateUserForm'\r\nimport CustomDialog from \"../../../components/Dialogs/customDialog\";\r\n\r\nimport {Link} from \"react-router-dom\";\r\nimport GreenButton from \"../../../components/CustomButtons/GreenButton\";\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n appBar: {\r\n backgroundColor: grey[300]\r\n },\r\n title: {\r\n color: 'black',\r\n flexGrow: 1\r\n },\r\n\r\n});\r\n\r\nfunction BuyMoreUsersDialog(props) {\r\n const { buyMoreUsersDialog, toggleBuyMoreUsersDialog } = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n You'll need to add users to your subscription before you can create a new user. Visit your subscription page to add users.}\r\n actions={\r\n Edit Subscription}\r\n />\r\n \r\n\r\n\r\n );\r\n}\r\n\r\nexport default BuyMoreUsersDialog;","import React, { Fragment } from 'react';\r\n\r\n\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\n\r\nimport UsersTable from '../containers/UsersTable'\r\n//import CreateProjectDialogContainer from '../../containers/Dialogs/CreateProjectDialogContainer'\r\n\r\n\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { Grid } from \"@material-ui/core\";\r\n\r\nimport { green } from '@material-ui/core/colors';\r\n\r\n\r\n\r\n\r\nimport PulseLoader from '../../components/Spinners/pulse-loader'\r\nimport OrganizationInfo from './cards/OrganizationInfo'\r\nimport AddNewButton from \"../../components/CustomButtons/AddNewButton\";\r\n\r\n\r\nimport CreateUserDialog from './dialogs/CreateUserDialog'\r\nimport EditUserDialog from './dialogs/EditUserDialog'\r\nimport DeleteUserDialog from './dialogs/DeleteUserDialog'\r\n\r\nimport CustomSnackbar from '../../components/Snackbar/CustomSnackbar'\r\nimport ProjectInfo from \"../../ProjectHome/components/cards/ProjectInfo\";\r\nimport CustomInfoLayout from \"../../components/CustomInfoLayout/CustomInfoLayout\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport BuyMoreUsersDialog from \"./dialogs/BuyMoreUsersDialog\";\r\nimport AddCircleIcon from \"@material-ui/icons/AddCircle\";\r\n\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n paper: {\r\n // margin: 20,\r\n },\r\n fab: {\r\n position: 'fixed',\r\n bottom: theme.spacing(2),\r\n right: theme.spacing(2),\r\n color: theme.palette.common.white,\r\n backgroundColor: green[500],\r\n '&:hover': {\r\n backgroundColor: green[600],\r\n }\r\n },\r\n button: {\r\n backgroundColor: theme.palette.success.main,\r\n color: theme.palette.success.contrast,\r\n borderRadius: 20,\r\n '&:hover': {\r\n backgroundColor: theme.palette.success.dark,\r\n }\r\n }\r\n}));\r\n\r\n\r\n\r\nexport default function OrganizationSettingsHomeComponent(props) {\r\n const classes = useStyles();\r\n const {\r\n // Organization\r\n users,\r\n organization,\r\n \r\n //Buy more users\r\n toggleBuyMoreUsersDialog,\r\n buyMoreUsersDialog,\r\n\r\n // Create User\r\n createUserDialogOpen,\r\n toggleCreateUserDialog,\r\n createUserFormControls,\r\n handleCreateUserInputChange,\r\n onCreateUserSubmit,\r\n attemptedCreateUserSubmit,\r\n\r\n //edit User\r\n editUserDialogOpen,\r\n toggleEditUserDialog,\r\n editUserFormControls,\r\n handleEditUserInputChange,\r\n onEditUserSubmit,\r\n attemptedEditUserSubmit,\r\n selectedUserForEdit,\r\n\r\n // Delete User\r\n selectedUserForDelete,\r\n deleteUserDialogOpen,\r\n onDeleteUserSubmit,\r\n toggleDeleteUserDialog,\r\n\r\n // Snackbar\r\n // snackbar,\r\n // openSnackbar\r\n\r\n } = props;\r\n\r\n\r\n return (\r\n
    \r\n \r\n \r\n {!users ?\r\n \r\n \r\n \r\n \r\n \r\n\r\n :\r\n \r\n }\r\n mainContent={}\r\n />\r\n\r\n\r\n\r\n\r\n \r\n\r\n }\r\n\r\n \r\n \r\n\r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n
    \r\n );\r\n}\r\n","import config from \"../config\";\r\nimport { authHeader } from \"../helpers/auth-header\";\r\nimport { getUser } from \"../services/user.service\";\r\nimport { REQUESTTYPES, fetchHelper, responseStatusHandler } from \"./serviceHelper\";\r\n\r\n// Get api base URLs\r\nconst ADMIN = config.admin;\r\n\r\nconst createOrUpdateUserRequestObject = {\r\n UserId: null, //int\r\n UserName: \"\",\r\n Email: \"\",\r\n Password: \"\",\r\n FirstName: \"\",\r\n LastName: \"\",\r\n OrganizationId: null, //int\r\n OrganizationName: \"\",\r\n PhoneNumber: \"\"\r\n};\r\n\r\nconst ENDPOINTS = {\r\n admin: {\r\n getUser: \"GetUser\",\r\n deleteUser: \"DeleteUser\",\r\n getOrganizationPaymentMethods: \"GetOrganizationPaymentMethods\",\r\n getActiveProductPlans: \"GetActiveProductPlans\",\r\n createOrUpdatePaymentMethod: \"CreateOrUpdatePaymentMethod\",\r\n removePaymentMethod: \"RemovePaymentMethod\",\r\n createOrUpdateOrganizationSubscription: \"CreateOrUpdateOrganizationSubscription\",\r\n cancelOrganizationSubscription: \"CancelOrganizationSubscription\",\r\n createOrUpdateUser: \"CreateOrUpdateUser\",\r\n getOrganizationUsers: \"GetOrganizationUsers\",\r\n getOrganization: \"GetOrganization\",\r\n getOrganizationSubscription: \"GetOrganizationSubscription\",\r\n getConfigurationSettings: \"GetConfigurationSettings\"\r\n }\r\n};\r\n\r\n\r\nconst getOrganization = () => {\r\n\r\n var user = getUser();\r\n var organizationId = user.organizationId;\r\n\r\n const apiResponse = fetchHelper(\r\n ADMIN,\r\n ENDPOINTS.admin.getOrganization,\r\n {OrganizationId: organizationId},\r\n \"post\"\r\n ).then(response => {\r\n\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst getOrganizationSubscription = () => {\r\n\r\n const apiResponse = fetchHelper(\r\n ADMIN,\r\n ENDPOINTS.admin.getOrganizationSubscription,\r\n {},\r\n \"post\"\r\n ).then(response => {\r\n\r\n // debugger;\r\n\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n\r\n if (window.sessionStorage.user) {\r\n \r\n const user = JSON.parse(window.sessionStorage.user);\r\n \r\n user.subscription = response.subscription;\r\n\r\n sessionStorage.setItem(\"user\", JSON.stringify(user));\r\n }\r\n \r\n return response.subscription;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\n\r\nconst getOrganizationPaymentMethods = () => {\r\n\r\n var user = getUser();\r\n var organizationId = user.organizationId;\r\n \r\n const apiResponse = fetchHelper(\r\n ADMIN,\r\n ENDPOINTS.admin.getOrganizationPaymentMethods,\r\n {OrganizationId: organizationId},\r\n \"post\"\r\n ).then(response => {\r\n\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response.organizationPaymentMethods;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst getOrganizationUsers = () => {\r\n\r\n var user = getUser();\r\n var organizationId = user.organizationId;\r\n\r\n const apiResponse = fetchHelper(\r\n ADMIN,\r\n ENDPOINTS.admin.getOrganizationUsers,\r\n {OrganizationId: organizationId},\r\n \"post\"\r\n ).then(response => {\r\n\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst getActiveProductPlans = () => {\r\n\r\n const apiResponse = fetchHelper(\r\n ADMIN,\r\n ENDPOINTS.admin.getActiveProductPlans,\r\n {},\r\n \"post\"\r\n ).then(response => {\r\n\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response.products;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst createOrUpdatePaymentMethod = (paymentMethodId) => {\r\n const apiResponse = fetchHelper(\r\n ADMIN,\r\n ENDPOINTS.admin.createOrUpdatePaymentMethod,\r\n {\r\n StripePaymentMethodId: paymentMethodId\r\n },\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst removePaymentMethod = (paymentMethodId) => {\r\n const apiResponse = fetchHelper(\r\n ADMIN,\r\n ENDPOINTS.admin.removePaymentMethod,\r\n {\r\n StripePaymentMethodId: paymentMethodId\r\n },\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst cancelOrganizationSubscription = () => {\r\n\r\n var user = getUser();\r\n var organizationId = user.organizationId;\r\n \r\n const apiResponse = fetchHelper(\r\n ADMIN,\r\n ENDPOINTS.admin.cancelOrganizationSubscription,\r\n {\r\n OrganizationId: organizationId\r\n },\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst createOrUpdateUser = (createOrUpdateUserRequestObject) => {\r\n\r\n if (!createOrUpdateUserRequestObject.OrganizationId){\r\n var user = getUser();\r\n createOrUpdateUserRequestObject.OrganizationId = user.organizationId;\r\n }\r\n\r\n const apiResponse = fetchHelper(\r\n ADMIN,\r\n ENDPOINTS.admin.createOrUpdateUser,\r\n {\r\n User: createOrUpdateUserRequestObject\r\n },\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n return response;\r\n //todo: do something on error\r\n } else {\r\n return response;\r\n }\r\n });\r\n \r\n return apiResponse;\r\n};\r\n\r\nconst deleteUser = (userId) => {\r\n\r\n const apiResponse = fetchHelper(\r\n ADMIN,\r\n ENDPOINTS.admin.deleteUser,\r\n {\r\n UserId: userId\r\n },\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\n//intervalTimePeriod can just be a string \"Monthly\" or \"Annually\"\r\nconst createOrUpdateOrganizationSubscription = (stripePlanId, quantity) => {\r\n\r\n let user = getUser();\r\n let organizationId = user.organizationId;\r\n \r\n const apiResponse = fetchHelper(\r\n ADMIN,\r\n ENDPOINTS.admin.createOrUpdateOrganizationSubscription,\r\n {\r\n OrganizationId: organizationId,\r\n StripePlanId: stripePlanId,\r\n Quantity: quantity\r\n },\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\nconst getConfigurationSettings = () => {\r\n\r\n const apiResponse = fetchHelper(\r\n ADMIN,\r\n ENDPOINTS.admin.getConfigurationSettings,\r\n {},\r\n \"post\"\r\n ).then(response => {\r\n // login successful if there's a user in the response\r\n if (!response.isSuccess) {\r\n //todo: do something on error\r\n } else {\r\n return response.settings;\r\n }\r\n });\r\n\r\n return apiResponse;\r\n};\r\n\r\n\r\nexport {\r\n getOrganizationPaymentMethods,\r\n getActiveProductPlans,\r\n createOrUpdatePaymentMethod,\r\n createOrUpdateOrganizationSubscription,\r\n removePaymentMethod,\r\n createOrUpdateUser,\r\n cancelOrganizationSubscription,\r\n getOrganizationSubscription,\r\n createOrUpdateUserRequestObject,\r\n getOrganizationUsers,\r\n getOrganization,\r\n deleteUser,\r\n getConfigurationSettings\r\n};\r\n","\r\nimport React, { Component, Fragment } from \"react\";\r\n\r\nimport { Grid, Paper } from \"@material-ui/core\";\r\nimport { withStyles } from '@material-ui/styles';\r\nimport Fab from '@material-ui/core/Fab';\r\nimport AddIcon from '@material-ui/icons/Add';\r\n\r\nimport { green } from '@material-ui/core/colors';\r\n\r\n\r\n\r\nimport { addUsersToState } from '../../redux/actions/user-actions';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\n\r\n\r\nimport OrganizationSettingsHomeComponent from '../components/OrganizationSettingsHomeComponent'\r\n\r\nimport {\r\n getOrganizationUsers,\r\n getOrganization,\r\n createOrUpdateUserRequestObject,\r\n createOrUpdateUser,\r\n deleteUser\r\n} from \"../../services/admin.service\"\r\nimport validate from '../../js/validate'\r\nimport CustomSnackbar from \"../../components/Snackbar/CustomSnackbar\";\r\nimport PhoneNumberTextMaskInput from \"../../components/TextMasks/PhoneNumberTextMaskInput\";\r\n\r\n\r\nconst styles = theme => ({\r\n paper: {\r\n margin: 20,\r\n },\r\n fab: {\r\n position: 'fixed',\r\n bottom: theme.spacing(2),\r\n right: theme.spacing(2),\r\n color: theme.palette.common.white,\r\n backgroundColor: green[500],\r\n '&:hover': {\r\n backgroundColor: green[600],\r\n }\r\n },\r\n});\r\n\r\nfunction getUserForm(type) {\r\n let form = {\r\n email: {\r\n label: 'Email',\r\n value: null,\r\n valid: false,\r\n touched: false,\r\n message: 'required',\r\n validationRules: {\r\n isRequired: true\r\n },\r\n textMask: null,\r\n },\r\n firstName: {\r\n label: 'First Name',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n message: '',\r\n validationRules: {\r\n\r\n },\r\n textMask: null,\r\n },\r\n lastName: {\r\n label: 'Last Name',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n message: '',\r\n validationRules: {\r\n\r\n },\r\n textMask: null,\r\n },\r\n phoneNumber: {\r\n label: 'Phone Number',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n message: '',\r\n validationRules: {\r\n\r\n },\r\n textMask: PhoneNumberTextMaskInput\r\n },\r\n }\r\n \r\n if (type === 'edit') {\r\n form.email.valid = true;\r\n }\r\n \r\n return form\r\n \r\n}\r\n\r\nclass OrganizationSettingsContainer extends Component {\r\n\r\n state = {\r\n // users: null,\r\n organization: null,\r\n createUserFormIsValid: false,\r\n // attemptedCreateFacilitySubmit: false,\r\n createUserDialogOpen: false,\r\n createUserFormControls: getUserForm('create'),\r\n\r\n // Edit User\r\n editUserFormIsValid: true,\r\n attemptedEditUserSubmit: false,\r\n editUserDialogOpen: false,\r\n selectedUserForEdit: null,\r\n editUserFormControls: getUserForm('edit'),\r\n\r\n // Delete User\r\n selectedUserForDelete: null,\r\n deleteUserDialogOpen: false,\r\n \r\n //buy more users dialog\r\n buyMoreUsersDialog: false,\r\n \r\n\r\n snackbar: {\r\n open: false,\r\n message: '',\r\n varient: ''\r\n }\r\n\r\n }\r\n\r\n toggleEditOrganizationDialog = (project = null) => {\r\n let editProjectDialogOpen = !this.state.editProjectDialogOpen;\r\n this.setState({ editProjectDialogOpen, selectedProjectForEdit: project })\r\n }\r\n\r\n openSnackbar = (value) => {\r\n let snackbar = { ...this.state.snackbar }\r\n snackbar.open = value;\r\n this.setState({ snackbar })\r\n }\r\n \r\n toggleBuyMoreUsersDialog = () => {\r\n let buyMoreUsersDialog = !this.state.buyMoreUsersDialog;\r\n this.setState({ buyMoreUsersDialog })\r\n }\r\n\r\n toggleCreateUserDialog = () => {\r\n let userInfo = JSON.parse(window.sessionStorage.user);\r\n const {subscription} = userInfo;\r\n if (this.props.users.length >= subscription.quantity) {\r\n this.toggleBuyMoreUsersDialog();\r\n } else {\r\n let createUserDialogOpen = !this.state.createUserDialogOpen;\r\n this.setState({ createUserDialogOpen })\r\n }\r\n \r\n }\r\n\r\n toggleEditUserDialog = (user = null) => {\r\n\r\n if (user !== null) {\r\n\r\n\r\n // set the state to the project to edit\r\n let editUserFormControls = { ...this.state.editUserFormControls }\r\n editUserFormControls.email.value = user.email;\r\n editUserFormControls.firstName.value = user.firstName;\r\n editUserFormControls.lastName.value = user.lastName;\r\n editUserFormControls.phoneNumber.value = user.phoneNumber;\r\n\r\n this.setState({ editUserFormControls })\r\n } \r\n\r\n let editUserDialogOpen = !this.state.editUserDialogOpen;\r\n this.setState({ editUserDialogOpen, selectedUserForEdit: user })\r\n }\r\n\r\n toggleDeleteUserDialog = (user = null) => {\r\n let deleteUserDialogOpen = !this.state.deleteUserDialogOpen;\r\n this.setState({ deleteUserDialogOpen, selectedUserForDelete: user })\r\n }\r\n\r\n onCreateUserSubmit = () => { \r\n let submittedForm = { ...this.state.createUserFormControls };\r\n let keys = Object.keys(submittedForm);\r\n let finalSubmission = {};\r\n keys.forEach(key => { finalSubmission[key] = submittedForm[key].value });\r\n\r\n if (this.state.createUserFormIsValid) {\r\n let userRequest = {...createOrUpdateUserRequestObject};\r\n\r\n userRequest.OrganizationId = window.sessionStorage.user.organizationId;\r\n userRequest.Email = finalSubmission.email;\r\n userRequest.FirstName = finalSubmission.firstName;\r\n userRequest.LastName = finalSubmission.lastName;\r\n userRequest.PhoneNumber = finalSubmission.phoneNumber;\r\n\r\n createOrUpdateUser(userRequest).then((response)=>{\r\n if (response.isSuccess){\r\n this.toggleCreateUserDialog();\r\n this.setState({ attemptedCreateUserSubmit: false })\r\n\r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = response.successMessage ? response.successMessage : \"Successfully Added User\";\r\n snackbar.open = true;\r\n snackbar.variant = \"success\";\r\n this.setState({ snackbar });\r\n\r\n this.updateTable();\r\n }else{\r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = \"Something went wrong. Please try again or contact React Energy Support.\";\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n }\r\n });\r\n \r\n } else {\r\n this.setState({ attemptedCreateUserSubmit: true })\r\n }\r\n }\r\n\r\n onEditUserSubmit = () => {\r\n let submittedForm = { ...this.state.editUserFormControls };\r\n let keys = Object.keys(submittedForm);\r\n let finalSubmission = {};\r\n keys.forEach(key => { finalSubmission[key] = submittedForm[key].value });\r\n \r\n if (this.state.editUserFormIsValid) {\r\n let userRequest = {...createOrUpdateUserRequestObject};\r\n\r\n userRequest.UserId = this.state.selectedUserForEdit.userId;\r\n userRequest.OrganizationId = this.state.selectedUserForEdit.organizationId;\r\n userRequest.Email = finalSubmission.email;\r\n userRequest.FirstName = finalSubmission.firstName;\r\n userRequest.LastName = finalSubmission.lastName;\r\n userRequest.PhoneNumber = finalSubmission.phoneNumber;\r\n\r\n createOrUpdateUser(userRequest).then((response)=>{\r\n if (response.isSuccess){\r\n this.toggleEditUserDialog();\r\n this.setState({ attemptedEditUserSubmit: false })\r\n\r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = response.successMessage ? response.successMessage : \"Successfully Updated User\";\r\n snackbar.open = true;\r\n snackbar.variant = \"success\";\r\n this.setState({ snackbar });\r\n\r\n this.updateTable();\r\n }else{\r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = \"Something went wrong. Please try again or contact React Energy Support.\";\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n }\r\n });\r\n \r\n } else {\r\n this.setState({ attemptedEditUserSubmit: true })\r\n }\r\n }\r\n\r\n onDeleteUserSubmit = () => {\r\n const {selectedUserForDelete} = this.state;\r\n this.toggleDeleteUserDialog();\r\n // TODO Delete Project. projectId = this.state.selectedProjectForDelete.projectId\r\n deleteUser(selectedUserForDelete.userId).then(response => {\r\n if (response.isSuccess) {\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = `Succesfully deleted ${selectedUserForDelete.email}`;\r\n snackbar.open = true;\r\n snackbar.variant = \"success\";\r\n this.setState({ snackbar });\r\n this.updateTable();\r\n } else {\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = `Delete Unsuccessful`;\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n }\r\n });\r\n // set snackbar\r\n \r\n }\r\n\r\n\r\n handleCreateUserInputChange = (event) => {\r\n const value = event.target.value;\r\n const name = event.target.name;\r\n\r\n const updatedControls = { ...this.state.createUserFormControls };\r\n\r\n const updatedFormElement = { ...updatedControls[name] }\r\n\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n\r\n updatedControls[name] = updatedFormElement;\r\n\r\n\r\n // Check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n\r\n this.setState({\r\n createUserFormControls: updatedControls,\r\n createUserFormIsValid: formIsValid\r\n })\r\n }\r\n\r\n handleEditUserInputChange = (event) => {\r\n const value = event.target.value;\r\n const name = event.target.name;\r\n const updatedControls = { ...this.state.editUserFormControls };\r\n\r\n const updatedFormElement = { ...updatedControls[name] }\r\n\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n\r\n updatedControls[name] = updatedFormElement;\r\n\r\n\r\n // Check if form is valid\r\n let formIsValid = true;\r\n \r\n for (let inputIdentifier in updatedControls) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n this.setState({\r\n editUserFormControls: updatedControls,\r\n editUserFormIsValid: formIsValid\r\n })\r\n }\r\n\r\n componentDidMount() {\r\n \r\n this.updateTable();\r\n getOrganizationUsers().then(response => {\r\n var users = response.users;\r\n // this.setState({users})\r\n this.props.addUsersToState(response.users)\r\n });\r\n getOrganization().then(response => {\r\n var organization = response.organization;\r\n this.setState({organization})\r\n });\r\n }\r\n \r\n updateTable = () => {\r\n getOrganizationUsers().then(response => {\r\n this.props.addUsersToState(response.users)\r\n });\r\n }\r\n\r\n render() {\r\n const { users, classes } = this.props;\r\n\r\n // let userInfo = JSON.parse(window.sessionStorage.user);\r\n // const {subscription} = userInfo;\r\n // if (users.length >= subscription.quantity) {\r\n //\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\nfunction mapStateToProps(state) {\r\n return {\r\n users: state.users,\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({ addUsersToState }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(OrganizationSettingsContainer));\r\n\r\n","import React, {Component, Fragment} from 'react'\r\n\r\n//import Highcharts from 'highcharts';\r\nimport HighchartsReact from 'highcharts-react-official';\r\nimport Highcharts from 'highcharts';\r\nimport highchartsMore from \"highcharts/modules/solid-gauge\";\r\n\r\n// Material UI\r\nimport Grid from '@material-ui/core/Grid'\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport blue from '@material-ui/core/colors/blue';\r\nimport {Typography} from \"@material-ui/core\";\r\n\r\nhighchartsMore(Highcharts);\r\n\r\n\r\nclass Stats extends Component {\r\n render() {\r\n return (\r\n \r\n \r\n\r\n\r\n \r\n
    \r\n \r\n
    \r\n 30%\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 Stats","import React, {Component} from 'react'\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 Grid from '@material-ui/core/Grid';\r\nimport StarIcon from '@material-ui/icons/StarBorder';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport moment from 'moment'\r\n\r\nconst styles = theme => ({\r\n '@global': {\r\n body: {\r\n backgroundColor: theme.palette.common.white,\r\n },\r\n ul: {\r\n margin: 0,\r\n padding: 0,\r\n },\r\n li: {\r\n listStyle: 'none',\r\n },\r\n },\r\n appBar: {\r\n borderBottom: `1px solid ${theme.palette.divider}`,\r\n },\r\n toolbar: {\r\n flexWrap: 'wrap',\r\n },\r\n toolbarTitle: {\r\n flexGrow: 1,\r\n },\r\n link: {\r\n margin: theme.spacing(1, 1.5),\r\n },\r\n heroContent: {\r\n padding: theme.spacing(8, 0, 6),\r\n },\r\n cardHeader: {\r\n backgroundColor: theme.palette.grey[200],\r\n },\r\n cardPricing: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'baseline',\r\n marginBottom: theme.spacing(2),\r\n },\r\n footer: {\r\n borderTop: `1px solid ${theme.palette.divider}`,\r\n marginTop: theme.spacing(8),\r\n paddingTop: theme.spacing(3),\r\n paddingBottom: theme.spacing(3),\r\n [theme.breakpoints.up('sm')]: {\r\n paddingTop: theme.spacing(6),\r\n paddingBottom: theme.spacing(6),\r\n },\r\n },\r\n});\r\n\r\nconst tiers = [\r\n {\r\n title: 'Free Pilot Trial',\r\n subheader: 'Thanks for being a pilot user!',\r\n price: '0',\r\n description: [\r\n '10 users included',\r\n '10 GB of storage',\r\n 'Help center access',\r\n 'Priority email support',\r\n ],\r\n buttonText: 'Get started',\r\n buttonVariant: 'contained',\r\n },\r\n];\r\n\r\nclass SubscriptionCard extends Component {\r\n render() {\r\n const {classes} = this.props;\r\n\r\n \r\n \r\n \r\n \r\n return (\r\n\r\n \r\n {tiers.map(tier => (\r\n // Enterprise card is full width at sm breakpoint\r\n \r\n \r\n : null}\r\n className={classes.cardHeader}\r\n />\r\n \r\n
    \r\n \r\n ${tier.price}\r\n \r\n \r\n /mo\r\n \r\n
    \r\n
      \r\n {tier.description.map(line => (\r\n \r\n {line}\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 withStyles(styles)(SubscriptionCard);","import React, { Component } from 'react'\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport Table from '@material-ui/core/Table';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\n\r\nimport { Page, Text, View, Document, StyleSheet, PDFViewer, PDFDownloadLink } from '@react-pdf/renderer';\r\nimport html2canvas from 'html2canvas';\r\n\r\nimport PdfTest from \"./PdfTest\";\r\nimport HighchartForPDF from \"./HighchartForPDF\";\r\nimport Button from \"@material-ui/core/Button\";\r\n\r\nconst styles = theme => ({\r\n root: {\r\n width: '100%',\r\n overflowX: 'auto',\r\n },\r\n table: {\r\n marginLeft: 10,\r\n marginRight: 10\r\n }\r\n});\r\n\r\nclass Profile extends Component {\r\n state = {\r\n image: null\r\n };\r\n\r\n onClick = () => {\r\n let image;\r\n html2canvas(document.getElementById('highchart')).then(function (canvas) {\r\n document.body.appendChild(canvas);\r\n let a = document.createElement('a');\r\n a.href = canvas.toDataURL(\"image/jpeg\").replace(\"image/jpeg\", \"image/octet-stream\");\r\n image = a;\r\n\r\n canvas.download = 'somefilename.png';\r\n a.click();\r\n });\r\n debugger;\r\n this.setState({ image: image });\r\n };\r\n\r\n render() {\r\n let userInfo = JSON.parse(window.sessionStorage.user);\r\n const { classes } = this.props;\r\n\r\n return (\r\n\r\n \r\n \r\n \r\n \r\n First Name\r\n \r\n \r\n {userInfo.firstName}\r\n \r\n \r\n \r\n \r\n Last Name\r\n \r\n \r\n {userInfo.lastName}\r\n \r\n \r\n \r\n \r\n Email\r\n \r\n \r\n {userInfo.username}\r\n \r\n \r\n\r\n \r\n \r\n Phone Number\r\n \r\n \r\n {userInfo.phoneNumber}\r\n \r\n \r\n \r\n \r\n Organization\r\n \r\n \r\n {userInfo.organizationName}\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(styles)(Profile)","import React from 'react';\r\nimport { Page, Text, View, Document, StyleSheet, Image } from '@react-pdf/renderer';\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport image from '../../../../assets/img/chartPics/ScatterForLogin.png'\r\n\r\n// Create styles\r\nconst styles = StyleSheet.create({\r\n body: {\r\n paddingTop: 35,\r\n paddingBottom: 65,\r\n paddingHorizontal: 35,\r\n },\r\n title: {\r\n fontSize: 24,\r\n textAlign: 'center',\r\n fontFamily: 'Oswald'\r\n },\r\n author: {\r\n fontSize: 12,\r\n textAlign: 'center',\r\n marginBottom: 40,\r\n },\r\n subtitle: {\r\n fontSize: 18,\r\n margin: 12,\r\n fontFamily: 'Oswald'\r\n },\r\n text: {\r\n margin: 12,\r\n fontSize: 14,\r\n textAlign: 'justify',\r\n fontFamily: 'Times-Roman'\r\n },\r\n image: {\r\n marginVertical: 15,\r\n marginHorizontal: 100,\r\n },\r\n header: {\r\n fontSize: 12,\r\n marginBottom: 20,\r\n textAlign: 'center',\r\n color: 'grey',\r\n },\r\n pageNumber: {\r\n position: 'absolute',\r\n fontSize: 12,\r\n bottom: 30,\r\n left: 0,\r\n right: 0,\r\n textAlign: 'center',\r\n color: 'grey',\r\n },\r\n});\r\n\r\n// Create Document Component\r\nconst PDFTest = () => (\r\n \r\n \r\n \r\n ~ Created with react-pdf ~\r\n \r\n Don Quijote de la Mancha\r\n Miguel de Cervantes\r\n \r\n \r\n Capítulo I: Que trata de la condición y ejercicio del famoso hidalgo D.\r\n Quijote de la Mancha\r\n \r\n \r\n En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha\r\n mucho tiempo que vivía un hidalgo de los de lanza en astillero, adarga\r\n antigua, rocín flaco y galgo corredor. Una olla de algo más vaca que\r\n carnero, salpicón las más noches, duelos y quebrantos los sábados,\r\n lentejas los viernes, algún palomino de añadidura los domingos,\r\n consumían las tres partes de su hacienda. El resto della concluían sayo\r\n de velarte, calzas de velludo para las fiestas con sus pantuflos de lo\r\n mismo, los días de entre semana se honraba con su vellori de lo más\r\n fino. Tenía en su casa una ama que pasaba de los cuarenta, y una sobrina\r\n que no llegaba a los veinte, y un mozo de campo y plaza, que así\r\n ensillaba el rocín como tomaba la podadera. Frisaba la edad de nuestro\r\n hidalgo con los cincuenta años, era de complexión recia, seco de carnes,\r\n enjuto de rostro; gran madrugador y amigo de la caza. Quieren decir que\r\n tenía el sobrenombre de Quijada o Quesada (que en esto hay alguna\r\n diferencia en los autores que deste caso escriben), aunque por\r\n conjeturas verosímiles se deja entender que se llama Quijana; pero esto\r\n importa poco a nuestro cuento; basta que en la narración dél no se salga\r\n un punto de la verdad\r\n \r\n \r\n Es, pues, de saber, que este sobredicho hidalgo, los ratos que estaba\r\n ocioso (que eran los más del año) se daba a leer libros de caballerías\r\n con tanta afición y gusto, que olvidó casi de todo punto el ejercicio de\r\n la caza, y aun la administración de su hacienda; y llegó a tanto su\r\n curiosidad y desatino en esto, que vendió muchas hanegas de tierra de\r\n sembradura, para comprar libros de caballerías en que leer; y así llevó\r\n a su casa todos cuantos pudo haber dellos; y de todos ningunos le\r\n parecían tan bien como los que compuso el famoso Feliciano de Silva:\r\n porque la claridad de su prosa, y aquellas intrincadas razones suyas, le\r\n parecían de perlas; y más cuando llegaba a leer aquellos requiebros y\r\n cartas de desafío, donde en muchas partes hallaba escrito: la razón de\r\n la sinrazón que a mi razón se hace, de tal manera mi razón enflaquece,\r\n que con razón me quejo de la vuestra fermosura, y también cuando leía:\r\n los altos cielos que de vuestra divinidad divinamente con las estrellas\r\n se fortifican, y os hacen merecedora del merecimiento que merece la\r\n vuestra grandeza.\r\n \r\n \r\n Con estas y semejantes razones perdía el pobre caballero el juicio, y\r\n desvelábase por entenderlas, y desentrañarles el sentido, que no se lo\r\n sacara, ni las entendiera el mismo Aristóteles, si resucitara para sólo\r\n ello. No estaba muy bien con las heridas que don Belianis daba y\r\n recibía, porque se imaginaba que por grandes maestros que le hubiesen\r\n curado, no dejaría de tener el rostro y todo el cuerpo lleno de\r\n cicatrices y señales; pero con todo alababa en su autor aquel acabar su\r\n libro con la promesa de aquella inacabable aventura, y muchas veces le\r\n vino deseo de tomar la pluma, y darle fin al pie de la letra como allí\r\n se promete; y sin duda alguna lo hiciera, y aun saliera con ello, si\r\n otros mayores y continuos pensamientos no se lo estorbaran. Tuvo muchas\r\n veces competencia con el cura de su lugar (que era hombre docto graduado\r\n en Sigüenza), sobre cuál había sido mejor caballero, Palmerín de\r\n Inglaterra o Amadís de Gaula; mas maese Nicolás, barbero del mismo\r\n pueblo, decía que ninguno llegaba al caballero del Febo, y que si alguno\r\n se le podía comparar, era don Galaor, hermano de Amadís de Gaula, porque\r\n tenía muy acomodada condición para todo; que no era caballero\r\n melindroso, ni tan llorón como su hermano, y que en lo de la valentía no\r\n le iba en zaga.\r\n \r\n \r\n En resolución, él se enfrascó tanto en su lectura, que se le pasaban las\r\n noches leyendo de claro en claro, y los días de turbio en turbio, y así,\r\n del poco dormir y del mucho leer, se le secó el cerebro, de manera que\r\n vino a perder el juicio. Llenósele la fantasía de todo aquello que leía\r\n en los libros, así de encantamientos, como de pendencias, batallas,\r\n desafíos, heridas, requiebros, amores, tormentas y disparates\r\n imposibles, y asentósele de tal modo en la imaginación que era verdad\r\n toda aquella máquina de aquellas soñadas invenciones que leía, que para\r\n él no había otra historia más cierta en el mundo.\r\n \r\n \r\n Capítulo II: Que trata de la primera salida que de su tierra hizo el\r\n ingenioso Don Quijote\r\n \r\n\r\n \r\n Hechas, pues, estas prevenciones, no quiso aguardar más tiempo a poner\r\n en efeto su pensamiento, apretándole a ello la falta que él pensaba que\r\n hacía en el mundo su tardanza, según eran los agravios que pensaba\r\n deshacer, tuertos que enderezar, sinrazones que emendar y abusos que\r\n mejorar y deudas que satisfacer. Y así, sin dar parte a persona alguna\r\n de su intención y sin que nadie le viese, una mañana, antes del día, que\r\n era uno de los calurosos del mes de Julio, se armó de todas sus armas,\r\n subió sobre Rocinante, puesta su mal compuesta celada, embrazó su\r\n adarga, tomó su lanza y por la puerta falsa de un corral salió al campo\r\n con grandísimo contento y alborozo de ver con cuánta facilidad había\r\n dado principio a su buen deseo. Mas apenas se vio en el campo cuando le\r\n asaltó un pensamiento terrible, y tal, que por poco le hiciera dejar la\r\n comenzada empresa; y fue que le vino a la memoria que no era armado\r\n caballero, y que, conforme a ley de caballería, ni podía ni debía tomar\r\n armas con ningún caballero; y puesto que lo fuera, había de llevar armas\r\n blancas, como novel caballero, sin empresa en el escudo, hasta que por\r\n su esfuerzo la ganase. Estos pensamientos le hicieron titubear en su\r\n propósito; mas pudiendo más su locura que otra razón alguna, propuso de\r\n hacerse armar caballero del primero que topase, a imitación de otros\r\n muchos que así lo hicieron, según él había leído en los libros que tal\r\n le tenían. En lo de las armas blancas, pensaba limpiarlas de manera, en\r\n teniendo lugar, que lo fuesen más que un arminio; y con esto se quietó18\r\n y prosiguió su camino, sin llevar otro que aquel que su caballo quería,\r\n creyendo que en aquello consistía la fuerza de las aventuras\r\n \r\n \r\n Yendo, pues, caminando nuestro flamante aventurero, iba hablando consigo\r\n mesmo, y diciendo: —¿Quién duda, sino que en los venideros tiempos,\r\n cuando salga a luz la verdadera historia de mis famosos hechos, que el\r\n sabio que los escribiere no ponga, cuando llegue a contar esta mi\r\n primera salida tan de mañana, desta manera?: Apenas había el rubicundo\r\n Apolo tendido por la faz de la ancha y espaciosa tierra las doradas\r\n hebras de sus hermosos cabellos, y apenas los pequeños y pintados\r\n pajarillos con sus arpadas lenguas habían saludado con dulce y meliflua\r\n armonía la venida de la rosada Aurora, que, dejando la blanda cama del\r\n celoso marido, por las puertas y balcones del manchego horizonte a los\r\n mortales se mostraba, cuando el famoso caballero don Quijote de la\r\n Mancha, dejando las ociosas plumas, subió sobre su famoso caballo\r\n Rocinante y comenzó a caminar por el antiguo y conocido Campo de\r\n Montiel.\r\n \r\n \r\n Y era la verdad que por él caminaba; y añadió diciendo: —Dichosa edad y\r\n siglo dichoso aquel adonde saldrán a luz las famosas hazañas mías,\r\n dignas de entallarse en bronces, esculpirse en mármoles y pintarse en\r\n tablas, para memoria en lo futuro. ¡Oh tú, sabio encantador, quienquiera\r\n que seas, a quien ha de tocar el ser coronista desta peregrina historia!\r\n Ruégote que no te olvides de mi buen Rocinante, compañero eterno mío en\r\n todos mis caminos y carreras.\r\n \r\n \r\n Luego volvía diciendo, como si verdaderamente fuera enamorado: —¡Oh\r\n princesa Dulcinea, señora deste cautivo corazón! Mucho agravio me\r\n habedes fecho en despedirme y reprocharme con el riguroso afincamiento\r\n de mandarme no parecer ante la vuestra fermosura. Plégaos, señora, de\r\n membraros deste vuestro sujeto corazón, que tantas cuitas por vuestro\r\n amor padece. Con estos iba ensartando otros disparates, todos al modo de\r\n los que sus libros le habían enseñado, imitando en cuanto podía su\r\n lenguaje. Con esto caminaba tan despacio, y el sol entraba tan apriesa y\r\n con tanto ardor, que fuera bastante a derretirle los sesos, si algunos\r\n tuviera\r\n \r\n \r\n Casi todo aquel día caminó sin acontecerle cosa que de contar fuese, de\r\n lo cual se desesperaba, porque quisiera topar luego luego con quien\r\n hacer experiencia del valor de su fuerte brazo. Autores hay que dicen\r\n que la primera aventura que le avino fue la del Puerto Lápice, otros\r\n dicen que la de los molinos de viento; pero lo que yo he podido\r\n averiguar en este caso, y lo que he hallado escrito en los anales de la\r\n Mancha, es que él anduvo todo aquel día, y, al anochecer, su rocín y él\r\n se hallaron cansados y muertos de hambre, y que, mirando a todas partes\r\n por ver si descubriría algún castillo o alguna majada de pastores donde\r\n recogerse y adonde pudiese remediar su mucha hambre y necesidad, vio, no\r\n lejos del camino por donde iba, una venta,que fue como si viera una\r\n estrella que, no a los portales, sino a los alcázares de su redención le\r\n encaminaba. Diose priesa a caminar, y llegó a ella a tiempo que\r\n anochecía.\r\n \r\n (\r\n `${pageNumber} / ${totalPages}`\r\n )} fixed />\r\n \r\n \r\n\r\n \r\n);\r\n\r\nexport default PDFTest","import React, {Component} from 'react'\r\nimport {bindActionCreators} from \"redux\";\r\nimport {setActiveUser} from \"../../../redux/actions/user-actions\";\r\nimport {connect} from \"react-redux\";\r\nimport {withStyles} from \"@material-ui/core/styles\";\r\nimport PhoneNumberTextMaskInput from \"../../../components/TextMasks/PhoneNumberTextMaskInput\";\r\nimport {createOrUpdateUser, createOrUpdateUserRequestObject} from \"../../../services/admin.service\";\r\nimport validate from \"../../../js/validate\";\r\nimport EditUserDialog from \"../../../OrganizationSettings/components/dialogs/EditUserDialog\";\r\n\r\nclass EditAccountInformation extends Component {\r\n \r\n state = {\r\n editAccountFormIsValid: true,\r\n attemptedEditAccountSubmit: false,\r\n editAccountDialogOpen: true,\r\n editAccountFormControls: {\r\n email: {\r\n label: 'Email',\r\n value: this.props.activeUser.username,\r\n valid: true,\r\n touched: false,\r\n message: 'required',\r\n validationRules: {\r\n isRequired: true\r\n },\r\n textMask: null,\r\n },\r\n firstName: {\r\n label: 'First Name',\r\n value: this.props.activeUser.firstName,\r\n valid: true,\r\n touched: false,\r\n message: '',\r\n validationRules: {},\r\n textMask: null,\r\n },\r\n lastName: {\r\n label: 'Last Name',\r\n value: this.props.activeUser.lastName,\r\n valid: true,\r\n touched: false,\r\n message: '',\r\n validationRules: {},\r\n textMask: null,\r\n },\r\n phoneNumber: {\r\n label: 'Phone Number',\r\n value: this.props.activeUser.phoneNumber,\r\n valid: true,\r\n touched: false,\r\n message: '',\r\n validationRules: {},\r\n textMask: PhoneNumberTextMaskInput\r\n },\r\n }\r\n };\r\n\r\n toggleEditAccountDialog = (user = this.props.activeUser) => {\r\n\r\n if (user !== null) {\r\n\r\n\r\n // set the state to the project to edit\r\n let editAccountFormControls = { ...this.state.editAccountFormControls }\r\n editAccountFormControls.email.value = user.email;\r\n editAccountFormControls.firstName.value = user.firstName;\r\n editAccountFormControls.lastName.value = user.lastName;\r\n editAccountFormControls.phoneNumber.value = user.phoneNumber;\r\n\r\n this.setState({ editAccountFormControls })\r\n }\r\n\r\n let editAccountDialogOpen = !this.state.editAccountDialogOpen;\r\n this.setState({ editAccountDialogOpen })\r\n }\r\n\r\n onEditAccountSubmit = () => {\r\n let submittedForm = { ...this.state.editAccountFormControls };\r\n let keys = Object.keys(submittedForm);\r\n let finalSubmission = {};\r\n keys.forEach(key => { finalSubmission[key] = submittedForm[key].value });\r\n\r\n if (this.state.editAccountFormIsValid) {\r\n let userRequest = {...createOrUpdateUserRequestObject};\r\n\r\n userRequest.UserId = this.props.activeUser.userId;\r\n userRequest.OrganizationId = this.props.activeUser.organizationId;\r\n userRequest.Email = finalSubmission.email;\r\n userRequest.FirstName = finalSubmission.firstName;\r\n userRequest.LastName = finalSubmission.lastName;\r\n userRequest.PhoneNumber = finalSubmission.phoneNumber;\r\n\r\n createOrUpdateUser(userRequest).then((response)=>{\r\n if (response.isSuccess){\r\n this.toggleEditAccountDialog();\r\n this.setState({ attemptedEditUserSubmit: false })\r\n\r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = response.successMessage ? response.successMessage : \"Successfully Updated Account\";\r\n snackbar.open = true;\r\n snackbar.variant = \"success\";\r\n this.setState({ snackbar });\r\n }else{\r\n // set snackbar\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = \"Something went wrong. Please try again or contact React Energy Support.\";\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n }\r\n });\r\n\r\n } else {\r\n this.setState({ attemptedEditUserSubmit: true })\r\n }\r\n };\r\n\r\n handleEditAccountInputChange = (event) => {\r\n const value = event.target.value;\r\n const name = event.target.name;\r\n const updatedControls = { ...this.state.editAccountFormControls };\r\n\r\n const updatedFormElement = { ...updatedControls[name] };\r\n\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n\r\n updatedControls[name] = updatedFormElement;\r\n\r\n\r\n // Check if form is valid\r\n let formIsValid = true;\r\n\r\n for (let inputIdentifier in updatedControls) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n this.setState({\r\n editAccountFormControls: updatedControls,\r\n editAccountFormIsValid: formIsValid\r\n })\r\n }\r\n\r\n render() {\r\n\r\n \r\n return (\r\n
    \r\n \r\n
    \r\n \r\n )\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n activeUser: state.activeUser,\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n \r\n }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(EditAccountInformation);","import React, {Component} from 'react'\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport CustomInfoLayout from \"../../../components/CustomInfoLayout/CustomInfoLayout\";\r\nimport UsageGauge from './Stats/UsageGauge'\r\nimport SubscriptionCard from \"./Subscription/SubscriptionSummary\";\r\nimport Profile from \"./Profile\";\r\nimport EditAccountInformation from \"../EditAccount\";\r\n\r\nclass AccountSummary extends Component {\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\nexport default AccountSummary","import React, {Component} from 'react'\r\nimport HomeIcon from \"@material-ui/icons/Home\";\r\nimport LockIcon from \"@material-ui/icons/Lock\";\r\nimport CreditCardIcon from \"@material-ui/icons/CreditCard\";\r\nimport PeopleIcon from \"@material-ui/icons/People\";\r\nimport SettingsIcon from \"@material-ui/icons/Settings\";\r\nimport DashboardIcon from \"@material-ui/icons/Dashboard\";\r\nimport List from \"@material-ui/core/List\";\r\nimport {Link} from \"react-router-dom\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\r\nimport ListItemText from \"@material-ui/core/ListItemText\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport Drawer from \"@material-ui/core/Drawer\";\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport grey from \"@material-ui/core/colors/grey\";\r\nimport blue from \"@material-ui/core/colors/blue\";\r\nimport { fade } from '@material-ui/core/styles/colorManipulator';\r\n\r\nconst linkWidth = 280;\r\nlet drawerWidth = 300;\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n\r\n drawer: {\r\n width: 300,\r\n flexShrink: 0,\r\n // border: 'none',\r\n // whiteSpace: 'nowrap',\r\n // borderRight: '1px solid red'\r\n },\r\n drawerPaper: {\r\n width: 300,\r\n // borderRight: '1px solid red',\r\n border: 'none',\r\n whiteSpace: 'nowrap',\r\n backgroundColor: theme.palette.background.default\r\n },\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(2),\r\n },\r\n toolbar: theme.mixins.toolbar,\r\n link: {\r\n color: theme.palette.grey[700],\r\n width: linkWidth,\r\n borderRadius: '0 30px 30px 0',\r\n //backgroundColor: grey[200],\r\n '&:hover': {\r\n color: '#000000',\r\n }\r\n },\r\n selectedLink: {\r\n color: theme.palette.primary.dark,\r\n width: linkWidth,\r\n backgroundColor: fade(theme.palette.primary.light, 0.2),\r\n borderRadius: '0 30px 30px 0',\r\n },\r\n \r\n selectedIcon: {\r\n color: theme.palette.primary.dark,\r\n }\r\n}));\r\n\r\nfunction AccountNavbar(props) {\r\n \r\n const tabs = [ {\r\n label: 'Account Home',\r\n icon: ,\r\n link: `/account/home`\r\n }, {\r\n label: 'Password',\r\n icon: ,\r\n link: `/account/password`\r\n }, {\r\n label: 'Subscription',\r\n icon: ,\r\n link: `/account/subscription`\r\n },{\r\n label: 'Team',\r\n icon: ,\r\n link: `/account/team`\r\n }, \r\n // {\r\n // label: 'Settings',\r\n // icon: ,\r\n // link: `/account/settings`\r\n // }\r\n ];\r\n const tabs2 = [\r\n {\r\n label: 'Back to Dashboard',\r\n icon: ,\r\n link: `/`\r\n },\r\n ];\r\n \r\n const {currentPath} = props;\r\n \r\n const classes = useStyles();\r\n return (\r\n \r\n
    \r\n\r\n \r\n {tabs.map((item, index) => (\r\n \r\n \r\n {item.icon}\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n {tabs2.map((item, index) => (\r\n \r\n \r\n {item.icon}\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default AccountNavbar","import React, {Component} from 'react'\r\n\r\nimport {withStyles} from '@material-ui/core/styles';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Button from '@material-ui/core/Button';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport {Typography} from \"@material-ui/core\";\r\n\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Input from '@material-ui/core/Input';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Visibility from '@material-ui/icons/Visibility';\r\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\r\nimport InputAdornment from '@material-ui/core/InputAdornment';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport clsx from 'clsx';\r\n\r\nimport {changePassword} from '../../../services/user.service';\r\n\r\nimport validate from \"../../../js/validate\";\r\nimport CustomSnackbar from \"../../../components/Snackbar/CustomSnackbar\";\r\n\r\nconst styles = theme => ({\r\n container: {\r\n // display: 'flex',\r\n // flexWrap: 'wrap',\r\n // alignItems: \"center\",\r\n // justify: \"center\"\r\n // padding: 10\r\n },\r\n textField: {\r\n margin: theme.spacing(3),\r\n width: '80%',\r\n // color: 'red'\r\n },\r\n button: {\r\n margin: 15\r\n },\r\n})\r\n\r\nclass ChangePasswordForm extends Component {\r\n state = {\r\n changePasswordFormIsValid: false,\r\n submitError: {\r\n value: false,\r\n mesasge: ''\r\n },\r\n snackbar: {\r\n open: false,\r\n message: '',\r\n varient: ''\r\n },\r\n changePasswordForm: {\r\n currentPassword: {\r\n label: \"Current Password\",\r\n value: null,\r\n showPassword: false,\r\n valid: false,\r\n touched: false,\r\n message: 'required',\r\n validationRules: {\r\n isRequired: true,\r\n // shouldn't have to check the existing password\r\n // isPassword: true\r\n }\r\n },\r\n newPassword: {\r\n label: \"New Password\",\r\n value: null,\r\n showPassword: false,\r\n valid: false,\r\n touched: false,\r\n message: 'required',\r\n validationRules: {\r\n isRequired: true,\r\n isPassword: true\r\n }\r\n },\r\n confirmPassword: {\r\n label: \"Confirm Password\",\r\n value: null,\r\n showPassword: false,\r\n valid: false,\r\n touched: false,\r\n message: 'required',\r\n validationRules: {\r\n isRequired: true,\r\n isPassword: true\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n handleChange = event => {\r\n\r\n let value = event.target.value;\r\n let name = event.target.name;\r\n let updatedControls = {...this.state.changePasswordForm};\r\n\r\n const updatedFormElement = {...updatedControls[name]};\r\n\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n\r\n updatedControls[name] = updatedFormElement;\r\n\r\n\r\n // Check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n this.setState({\r\n changePasswordForm: updatedControls,\r\n changePasswordFormIsValid: formIsValid\r\n })\r\n\r\n }\r\n\r\n handleShowPassword = (name) => {\r\n let changePasswordForm = {...this.state.changePasswordForm};\r\n changePasswordForm[name].showPassword = !changePasswordForm[name].showPassword;\r\n this.setState({changePasswordForm})\r\n\r\n }\r\n\r\n onSubmit = () => {\r\n let changePasswordForm = {...this.state.changePasswordForm}\r\n const {currentPassword, newPassword, confirmPassword} = changePasswordForm;\r\n\r\n let match = (newPassword.value === confirmPassword.value);\r\n if (!match) {\r\n this.setState({submitError: {value: true, message: 'Passwords did not match'}})\r\n } else {\r\n this.setState({submitError: {value: false, message: ''}})\r\n \r\n changePassword(currentPassword.value, newPassword.value).then(response => {\r\n if (response.isSuccess) {\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = `Successfully Changed Password`;\r\n snackbar.open = true;\r\n snackbar.variant = \"success\";\r\n this.setState({ snackbar });\r\n } else {\r\n let snackbar = { ...this.state.snackbar };\r\n snackbar.message = `Password Change Unsuccessful`;\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({ snackbar });\r\n }\r\n \r\n })\r\n }\r\n return\r\n\r\n }\r\n\r\n render() {\r\n const {classes} = this.props;\r\n const {changePasswordForm} = this.state;\r\n\r\n let changePasswordFormKeys = Object.keys(changePasswordForm);\r\n return (\r\n
    \r\n\r\n\r\n {/*I have absolutely no idea why this doesn't work*/}\r\n {changePasswordFormKeys.map(key => {\r\n return \r\n \r\n {changePasswordForm[key].label}\r\n \r\n this.handleShowPassword(key)}\r\n >\r\n {changePasswordForm[key].showPassword ? :\r\n }\r\n \r\n \r\n }\r\n />\r\n {key === 'newPassword' ?\r\n New\r\n Password must have a capital letter, a lowercase letter, a number, a special\r\n character, and a minimum length of 8. : null}\r\n \r\n \r\n })}\r\n \r\n\r\n \r\n Submit\r\n \r\n \r\n \r\n\r\n {this.state.submitError.value ? {this.state.submitError.message} : null}\r\n\r\n \r\n \r\n\r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(ChangePasswordForm)","import React, {Component} from 'react'\r\nimport Grid from '@material-ui/core/Grid'\r\nimport CustomInfoLayout from \"../../../components/CustomInfoLayout/CustomInfoLayout\";\r\nimport ChangePasswordForm from \"./ChangePasswordForm\";\r\nimport Profile from \"../AccountSummary/Profile\";\r\n\r\nclass PasswordManagement extends Component {\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\n}\r\n\r\nexport default PasswordManagement","// CardSection.js\r\nimport React from 'react';\r\nimport {CardCVCElement, CardElement, CardExpiryElement, CardNumberElement} from 'react-stripe-elements';\r\n\r\n// Material UI\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\n\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Input from \"@material-ui/core/Input\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport {withStyles} from '@material-ui/core/styles';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n // padding: 15\r\n },\r\n section: {\r\n padding: 5\r\n },\r\n elementContainer: {\r\n border: \"1px solid #bdbdbd\",\r\n borderRadius: 5,\r\n padding: 8,\r\n marginTop: 5\r\n },\r\n\r\n\r\n});\r\n\r\n\r\nclass CardSection extends React.Component {\r\n render() {\r\n const {classes} = this.props;\r\n \r\n return (\r\n \r\n \r\n \r\n Card Number\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n Expires\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n CVC\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n Name on Card\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n Zip Code\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(styles)(CardSection);","// CheckoutForm.js\r\nimport React from 'react';\r\nimport {injectStripe} from 'react-stripe-elements';\r\n\r\nimport CardSection from \"./CardSection\";\r\n\r\n// react-stripe-elements\r\nimport {CardElement} from 'react-stripe-elements';\r\nimport {CardNumberElement} from 'react-stripe-elements';\r\nimport {CardExpiryElement} from 'react-stripe-elements';\r\nimport {CardCVCElement} from 'react-stripe-elements';\r\n\r\n\r\n//Material UI\r\nimport Button from '@material-ui/core/Button';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\n\r\n\r\nclass CheckoutForm extends React.Component {\r\n handleSubmit = (ev) => {\r\n debugger;\r\n // We don't want to let default form submission happen here, which would refresh the page.\r\n ev.preventDefault();\r\n\r\n // Use Elements to get a reference to the Card Element mounted somewhere\r\n // in your tree. Elements will know how to find your Card Element\r\n // because only one is allowed.\r\n // See our getElement documentation for more:\r\n // https://stripe.com/docs/stripe-js/reference#elements-get-element\r\n let props = this.props;\r\n let elements = this.props.elements.getElement('cardNumber');\r\n const cardElement = this.props.elements.getElement('CardNumberElement');\r\n\r\n // From here we can call createPaymentMethod to create a PaymentMethod\r\n // See our createPaymentMethod documentation for more:\r\n // https://stripe.com/docs/stripe-js/reference#stripe-create-payment-method\r\n this.props.stripe\r\n .createPaymentMethod({\r\n type: 'card',\r\n card: cardElement,\r\n billing_details: {name: 'Jenny Rosen'},\r\n })\r\n .then(({paymentMethod}) => {\r\n console.log('Received Stripe PaymentMethod:', paymentMethod);\r\n });\r\n\r\n // You can also use confirmCardPayment with the PaymentIntents API automatic confirmation flow.\r\n // See our confirmCardPayment documentation for more:\r\n // https://stripe.com/docs/stripe-js/reference#stripe-confirm-card-payment\r\n this.props.stripe.confirmCardPayment('{PAYMENT_INTENT_CLIENT_SECRET}', {\r\n payment_method: {\r\n card: cardElement,\r\n },\r\n });\r\n\r\n // You can also use confirmCardSetup with the SetupIntents API.\r\n // See our confirmCardSetup documentation for more:\r\n // https://stripe.com/docs/stripe-js/reference#stripe-confirm-card-setup\r\n this.props.stripe.confirmCardSetup('{PAYMENT_INTENT_CLIENT_SECRET}', {\r\n payment_method: {\r\n card: cardElement,\r\n },\r\n });\r\n\r\n // You can also use createToken to create tokens.\r\n // See our tokens documentation for more:\r\n // https://stripe.com/docs/stripe-js/reference#stripe-create-token\r\n // With createToken, you will not need to pass in the reference to\r\n // the Element. It will be inferred automatically.\r\n this.props.stripe.createToken({type: 'card', name: 'Jenny Rosen'});\r\n // token type can optionally be inferred if there is only one Element\r\n // with which to create tokens\r\n // this.props.stripe.createToken({name: 'Jenny Rosen'});\r\n\r\n // You can also use createSource to create Sources.\r\n // See our Sources documentation for more:\r\n // https://stripe.com/docs/stripe-js/reference#stripe-create-source\r\n // With createSource, you will not need to pass in the reference to\r\n // the Element. It will be inferred automatically.\r\n this.props.stripe.createSource({\r\n type: 'card',\r\n owner: {\r\n name: 'Jenny Rosen',\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\n }\r\n}\r\n\r\nexport default injectStripe(CheckoutForm);","// MyStoreCheckout.js\r\nimport React from 'react';\r\nimport {Elements} from 'react-stripe-elements';\r\n\r\nimport InjectedCheckoutForm from './CheckoutForm';\r\n\r\n\r\n\r\nclass MyStoreCheckout extends React.Component {\r\n render() {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default MyStoreCheckout;","// index.js\r\nimport React, {Component} from 'react';\r\nimport {StripeProvider} from 'react-stripe-elements';\r\nimport MyStoreCheckout from './MyStoreCheckout';\r\n\r\n\r\n//Material UI\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport {withStyles} from '@material-ui/core/styles';\r\nimport CustomInfoLayout from \"../../../../components/CustomInfoLayout/CustomInfoLayout\";\r\n\r\nconst styles = theme => ({\r\n root: {\r\n display: 'flex',\r\n width: '100%',\r\n paddingLeft: 15,\r\n paddingRight: 15\r\n },\r\n paper: {\r\n padding: 20,\r\n width: 600,\r\n }\r\n});\r\n\r\nclass PaymentMethod extends Component {\r\n render() {\r\n const {classes} = this.props;\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 withStyles(styles)(PaymentMethod);","import React, {Component} from 'react'\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Button from '@material-ui/core/Button';\r\nimport {makeStyles} from \"@material-ui/core/styles\";\r\nimport CustomDialog from \"../../../../../components/Dialogs/customDialog\";\r\nimport moment from \"moment\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n button: {\r\n color: 'red'\r\n }\r\n}));\r\n\r\nfunction CancelSubscriptionDialog(props) {\r\n\r\n\r\n const {open, handleClose, onSubmit, userInfo} = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n Are you sure you want to cancel your React Energy subscription for you and your entire\r\n team? You will continue to have access to the portal through {moment(userInfo.subscription.currentPeriodEndDate).format('MMMM D, YYYY')}.}\r\n actions={}\r\n />\r\n )\r\n\r\n}\r\n\r\nexport default CancelSubscriptionDialog","import React, {Component} from 'react'\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Button from '@material-ui/core/Button';\r\nimport {makeStyles} from \"@material-ui/core/styles\";\r\nimport CustomDialog from \"../../../../../components/Dialogs/customDialog\";\r\nimport moment from \"moment\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n // button: {\r\n // color: 'red'\r\n // }\r\n}));\r\n\r\nfunction EditSubscriptionDialog(props) {\r\n\r\n\r\n const {open, handleClose, onSubmit, userInfo} = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n The ability to edit your subscription online is coming soon. Until then,\r\n please reach out to us at support@reactenergy.io to request subscription changes.}\r\n />\r\n )\r\n\r\n}\r\n\r\nexport default EditSubscriptionDialog","import React, {Component, Fragment} from 'react'\r\n\r\n//Material UI\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport {withStyles} from '@material-ui/core/styles';\r\nimport CustomInfoLayout from \"../../../../components/CustomInfoLayout/CustomInfoLayout\";\r\nimport moment from \"moment\";\r\nimport {cancelOrganizationSubscription, getOrganizationSubscription} from \"../../../../services/admin.service\";\r\nimport CancelSubscriptionDialog from \"./Components/CancelSubscriptionDialog\";\r\nimport CustomSnackbar from \"../../../../components/Snackbar/CustomSnackbar\";\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport EditIcon from '@material-ui/icons/Edit'\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport EditSubscriptionDialog from \"./Components/EditSubscriptionDialog\";\r\n\r\nconst styles = theme => ({\r\n cancel: {\r\n color: theme.palette.primary.main,\r\n '&:hover': {\r\n cursor: 'pointer',\r\n textDecoration: 'underline',\r\n }\r\n },\r\n icon: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n fontSize: 30,\r\n display: 'inline-block'\r\n },\r\n iconTable: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n fontSize: 30\r\n },\r\n margin: {\r\n margin: theme.spacing(0),\r\n },\r\n\r\n});\r\n\r\nclass CurrentSubscription extends Component {\r\n\r\n state = {\r\n chosenSubscription: null,\r\n cancelSubscriptionDialogOpen: false,\r\n editSubscriptionDialogOpen: false,\r\n snackbar: {\r\n open: false,\r\n message: '',\r\n variant: ''\r\n },\r\n };\r\n\r\n componentDidMount() {\r\n // let userInfo = JSON.parse(window.sessionStorage.user);\r\n\r\n const {activeUser, resetActiveUser} = this.props;\r\n const {trialPeriodEndDate} = activeUser.subscription;\r\n let chosenSubscription = {\r\n title: 'Basic',\r\n pricePerLicense: '$40.00',\r\n description: ['Per User License', 'Unlimited Projects', 'Email support'],\r\n trialEnd: null,\r\n\r\n };\r\n this.setState({chosenSubscription})\r\n }\r\n\r\n openSnackbar = (value) => {\r\n let snackbar = {...this.state.snackbar};\r\n snackbar.open = value;\r\n this.setState({snackbar})\r\n };\r\n\r\n cancelSubscription = () => {\r\n // alert('Cancel Subscription');\r\n cancelOrganizationSubscription().then(x => {\r\n let snackbar = {...this.state.snackbar};\r\n if (x.isSuccess) {\r\n snackbar.message = 'Succesfully Cancelled Subscription';\r\n snackbar.variant = 'success';\r\n snackbar.open = true;\r\n getOrganizationSubscription().then(x => {\r\n this.props.resetActiveUser();\r\n })\r\n\r\n } else {\r\n snackbar.message = 'Something went wrong cancelling your account. Please reach out to support@reactenergy,com.';\r\n snackbar.variant = 'error';\r\n snackbar.open = true;\r\n }\r\n this.setState({snackbar: snackbar});\r\n this.toggleCancelSubscriptionDialog();\r\n });\r\n\r\n };\r\n\r\n componentDidUpdate = (prevProps, prevState, snapshot) => {\r\n let temp = this.props;\r\n\r\n if (prevProps.activeUser.subscription.cancelAtPeriodEnd !== this.props.activeUser.subscription.cancelAtPeriodEnd) {\r\n\r\n }\r\n }\r\n\r\n\r\n toggleCancelSubscriptionDialog = () => {\r\n this.setState({cancelSubscriptionDialogOpen: !this.state.cancelSubscriptionDialogOpen})\r\n };\r\n toggleEditSubscriptionDialog = () => {\r\n this.setState({editSubscriptionDialogOpen: !this.state.editSubscriptionDialogOpen})\r\n };\r\n \r\n\r\n render() {\r\n // let userInfo = JSON.parse(window.sessionStorage.user);\r\n const {classes} = this.props;\r\n const {activeUser, resetActiveUser} = this.props;\r\n\r\n\r\n const {chosenSubscription} = this.state;\r\n\r\n\r\n let data = [{\r\n index: 0,\r\n column1: 'Subscription Type',\r\n column2:
    \r\n {moment(activeUser.subscription.trialPeriodEndDate).isAfter(moment()) ?\r\n Free Trial\r\n Ending {moment().to(moment(activeUser.subscription.trialPeriodEndDate))}! \r\n :
    {moment(activeUser.subscription.currentPeriodEndDate).isAfter(moment()) ?\r\n {activeUser.subscription.plan.name} : ''}
    \r\n\r\n\r\n }\r\n
    \r\n }, {\r\n index: 1,\r\n column1: 'Quantity',\r\n column2: {activeUser.subscription.quantity} \r\n }];\r\n\r\n let subscriptionDetails = [\r\n {\r\n label: 'Product',\r\n value: activeUser.subscription.plan.name\r\n },\r\n \r\n {\r\n label: 'Quantity',\r\n value: activeUser.subscription.quantity\r\n },\r\n {\r\n label: 'Price',\r\n value: '$' + activeUser.subscription.plan.price\r\n },\r\n {\r\n label: 'Billed',\r\n value: activeUser.subscription.plan.interval === 'month' ? 'Monthly' : 'Annually'\r\n },\r\n {\r\n label: 'Edit',\r\n value: \r\n },\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 {subscriptionDetails.map(x => (\r\n {x.label}\r\n ))}\r\n \r\n \r\n \r\n \r\n {subscriptionDetails.map(x => (\r\n {x.value}\r\n ))}\r\n \r\n \r\n
    \r\n {activeUser.subscription.cancelAtPeriodEnd ? null :\r\n \r\n Cancel\r\n Subscription\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\r\nexport default withStyles(styles)(CurrentSubscription)","import { useTheme } from '@material-ui/core/styles';\r\nimport Button from \"@material-ui/core/Button\";\r\nimport React from \"react\";\r\nimport PulseLoader from 'react-spinners/PulseLoader';\r\nimport PropTypes from \"prop-types\";\r\n\r\nfunction LoadingButton(props) {\r\n \r\n const {loading, variant = null, onClick, color, message, disabled = false} = props;\r\n const theme = useTheme();\r\n if (variant === 'contained') {\r\n return (\r\n \r\n )\r\n } else {\r\n return (\r\n \r\n )\r\n \r\n }\r\n \r\n}\r\n\r\nLoadingButton.propTypes = {\r\n loading: PropTypes.bool.isRequired,\r\n onClick: PropTypes.func.isRequired,\r\n color: PropTypes.string.isRequired,\r\n message: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default LoadingButton\r\n\r\n","import {\r\n CardCvcElement,\r\n CardElement,\r\n CardExpiryElement,\r\n CardNumberElement, Elements,\r\n useElements,\r\n useStripe\r\n} from \"@stripe/react-stripe-js\";\r\nimport React from \"react\";\r\n\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Card from \"@material-ui/core/Card\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport {CardCVCElement} from \"react-stripe-elements\";\r\nimport Input from \"@material-ui/core/Input\";\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Icon from \"@material-ui/core/Icon\";\r\n\r\nimport validate from \"../../../../../../js/validate\";\r\nimport {createOrUpdatePaymentMethod, getOrganizationPaymentMethods} from \"../../../../../../services/admin.service\";\r\nimport CustomSnackbar from \"../../../../../../components/Snackbar/CustomSnackbar\";\r\nimport PulseLoader from 'react-spinners/PulseLoader';\r\nimport LoadingButton from \"../../../../../../components/CustomButtons/LoadingButton\";\r\nimport {loadStripe} from \"@stripe/stripe-js\";\r\nimport PoweredByStripeSVG from '../../../../../../assets/img/svg/powered_by_stripe.svg';\r\nimport ReactSVG from \"react-svg\";\r\n\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n card: {\r\n margin: 5,\r\n maxWidth: 400\r\n },\r\n\r\n root: {\r\n padding: 15\r\n },\r\n section: {\r\n padding: 5\r\n },\r\n elementContainer: {\r\n border: \"1px solid #bdbdbd\",\r\n borderRadius: 5,\r\n padding: 8,\r\n marginTop: 5\r\n },\r\n buttonGroup: {\r\n padding: 5\r\n }\r\n}));\r\n\r\n\r\n\r\nexport default function CardForm(props) {\r\n const stripe = useStripe();\r\n const elements = useElements();\r\n\r\n const [name, setName] = React.useState('');\r\n const [email, setEmail] = React.useState('');\r\n const [submitting, setSubmitting] = React.useState(false);\r\n const [emailIsValid, setEmailIsValid] = React.useState(false);\r\n const [nameIsValid, setNameIsValid] = React.useState(false);\r\n const [snackbar, setSnackbar] = React.useState({\r\n open: false,\r\n message: '',\r\n variant: ''\r\n });\r\n\r\n const openSnackbar = (value) => {\r\n let temp = { ...snackbar};\r\n temp.open = value;\r\n setSnackbar(temp)\r\n };\r\n\r\n const handleSubmit = async (event, name, email) => {\r\n setSubmitting(true);\r\n if (name.length !== 0) {\r\n const {paymentMethod} = await stripe.createPaymentMethod({\r\n type: 'card',\r\n card: elements.getElement(CardElement),\r\n billing_details: {\r\n name\r\n }\r\n });\r\n\r\n if (paymentMethod){\r\n createOrUpdatePaymentMethod(paymentMethod.id).then(x => {\r\n if (x.isSuccess) {\r\n setSnackbar({\r\n open: true,\r\n message: 'Successfully updated Payment Method',\r\n variant: 'success'\r\n });\r\n if (props['onSubmit']) {\r\n props.onSubmit();\r\n props.onClose();\r\n }\r\n \r\n } else {\r\n setSnackbar({\r\n open: true,\r\n message: 'The information entered was invalid, please try again',\r\n variant: 'error'\r\n })\r\n }\r\n setSubmitting(false);\r\n \r\n \r\n });\r\n } else {\r\n setSubmitting(false);\r\n\r\n }\r\n } else {\r\n setSnackbar({\r\n open: true,\r\n message: 'Please enter a name for the credit card',\r\n variant: 'error'\r\n });\r\n setSubmitting(false);\r\n\r\n }\r\n \r\n\r\n };\r\n\r\n const classes = useStyles();\r\n\r\n\r\n\r\n const changeName = (event) => {\r\n let name = event.target.value;\r\n let validationRules = {\r\n minLength: 2\r\n };\r\n let isValid = validate(name, validationRules);\r\n setNameIsValid(isValid);\r\n setName(event.target.value);\r\n };\r\n\r\n const changeEmail = (event) => {\r\n let email = event.target.value;\r\n let validationRules = {\r\n isEmail: true\r\n };\r\n let isValid = validate(email, validationRules);\r\n setEmailIsValid(isValid);\r\n setEmail(event.target.value);\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 \r\n \r\n \r\n \r\n Name on Card\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n Card Information\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n handleSubmit(event, name, email)}\r\n variant={\"contained\"}\r\n loading={submitting}\r\n color={\"primary\"}\r\n message={'Update'}\r\n disabled={!stripe}\r\n />\r\n {props.showCancel ? \r\n : null}\r\n \r\n
    \r\n\r\n
    \r\n\r\n
    \r\n
    \r\n );\r\n};","import {\r\n Elements,\r\n} from \"@stripe/react-stripe-js\";\r\nimport React from \"react\";\r\n\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport {loadStripe} from \"@stripe/stripe-js\";\r\nimport {makeStyles} from '@material-ui/core/styles';\r\nimport CardForm from \"./Components/CardForm\";\r\nimport {getConfigurationSettings} from \"../../../../../services/admin.service\";\r\nimport moment from 'moment'\r\n\r\n\r\n// let settings = getConfigurationSettings();\r\n// debugger;\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n center: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n }\r\n}));\r\n\r\nlet stripePromise;\r\ngetConfigurationSettings().then(x => {\r\n stripePromise = loadStripe(x.stripePublishKey);\r\n});\r\n\r\n\r\nexport default function CheckoutForm(props) {\r\n\r\n const {toggleShowUpdateCreditCard} = props;\r\n let userInfo = JSON.parse(window.sessionStorage.user);\r\n const classes = useStyles();\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 Updating your payment method will not result in any immediate charge to you\r\n account.\r\n \r\n {!userInfo.subscription.cancelAtPeriodEnd ?\r\n \r\n Your next payment is scheduled\r\n for {moment(userInfo.subscription.currentPeriodEndDate).format('MMMM D')} in the amount\r\n of ${userInfo.subscription.plan.price}, and your current subscription is\r\n billed {userInfo.subscription.plan.interval === 'month' ? 'monthly' : 'annually'}.\r\n : null}\r\n \r\n\r\n \r\n \r\n\r\n );\r\n};","import React, {Component} from 'react'\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Card from \"@material-ui/core/Card\";\r\nimport {withStyles, makeStyles} from \"@material-ui/core/styles\";\r\n\r\n\r\nimport Icon from '@material-ui/core/Icon';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n paddingLeft: 15,\r\n paddingRight: 15,\r\n\r\n },\r\n cardIcon: {\r\n margin: theme.spacing(0),\r\n color: theme.palette.primary.dark,\r\n fontSize: 25,\r\n // display: 'inline-block'\r\n },\r\n warningIcon: {\r\n margin: theme.spacing(0),\r\n color: theme.palette.warning.main,\r\n fontSize: 25,\r\n // display: 'inline-block',\r\n },\r\n margin: {\r\n margin: theme.spacing(0),\r\n },\r\n}));\r\n\r\nfunction CurrentPaymentMethod(props) {\r\n\r\n\r\n const {organizationPaymentMethod, fetchingPaymentMethod} = props;\r\n const classes = useStyles();\r\n \r\n return (\r\n \r\n\r\n \r\n
    \r\n \r\n \r\n {organizationPaymentMethod ? \r\n
    \r\n \r\n \r\n
    \r\n \r\n credit_card\r\n \r\n {organizationPaymentMethod.brand.replace(/^\\w/, c => c.toUpperCase())} ending in {organizationPaymentMethod.last4}\r\n
    \r\n
    \r\n Expires: {organizationPaymentMethod.exp_month} / {organizationPaymentMethod.exp_year}\r\n
    \r\n
    : \r\n
    \r\n {fetchingPaymentMethod ? null : \r\n
    \r\n \r\n warning\r\n \r\n No card on file\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 CurrentPaymentMethod","import React, {Component} from 'react'\r\nimport {withStyles} from '@material-ui/core/styles';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n // padding: 15\r\n borderBottom: '1px solid #e8e8e8',\r\n marginLeft: 10,\r\n marginRight: 10\r\n },\r\n\r\n});\r\n\r\n\r\nclass HorizontalDivider extends Component {\r\n render() {\r\n const {classes} = this.props;\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(HorizontalDivider)","import React, {Component, Fragment} from 'react';\r\nimport {loadStripe} from '@stripe/stripe-js';\r\nimport {\r\n CardElement,\r\n CardNumberElement,\r\n CardExpiryElement,\r\n CardCvcElement,\r\n Elements,\r\n useStripe,\r\n useElements,\r\n} from '@stripe/react-stripe-js';\r\n\r\nimport CheckoutForm from \"./CheckoutForm/index\";\r\nimport CurrentPaymentMethod from \"./CurrentPaymentMethod\";\r\nimport CustomInfoLayout from \"../../../../components/CustomInfoLayout/CustomInfoLayout\";\r\n\r\n\r\n// Material UI\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\n\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport {withStyles} from \"@material-ui/core/styles\";\r\nimport {getOrganizationPaymentMethods, removePaymentMethod} from \"../../../../services/admin.service\";\r\nimport CustomSnackbar from \"../../../../components/Snackbar/CustomSnackbar\";\r\nimport HashLoader from 'react-spinners/HashLoader';\r\nimport PulseLoader from 'react-spinners/PulseLoader';\r\nimport moment from 'moment';\r\nimport HorizontalDivider from \"../../../../components/Dividers/HorizontalDivider\";\r\nimport Icon from \"@material-ui/core/Icon\";\r\nimport {useTheme} from '@material-ui/core/styles';\r\nimport LoadingButton from \"../../../../components/CustomButtons/LoadingButton\";\r\n\r\nconst styles = theme => ({\r\n root: {\r\n padding: 15,\r\n width: '100%'\r\n // minHeight: 200\r\n },\r\n button: {\r\n padding: 0\r\n },\r\n buttonGroup: {\r\n padding: 10\r\n },\r\n icon: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n fontSize: 25,\r\n display: 'inline-block'\r\n },\r\n errorIcon: {\r\n color: theme.palette.error.main,\r\n },\r\n});\r\n\r\n\r\nclass PaymentMethodRev2 extends Component {\r\n state = {\r\n uploadingNewPaymentMethod: false,\r\n removingPaymentMethod: false,\r\n showUpdateCreditCard: false,\r\n snackbar: {\r\n open: false,\r\n message: '',\r\n variant: ''\r\n },\r\n }\r\n\r\n\r\n handleDelete = async (event, name, email) => {\r\n const {organizationPaymentMethod, organizationPaymentMethodId, fetchingPaymentMethod, getPaymentMethod} = this.props;\r\n\r\n this.setState({removingPaymentMethod: true});\r\n await removePaymentMethod(organizationPaymentMethodId).then(x => {\r\n if (x.isSuccess) {\r\n let snackbar = {...this.state.snackbar};\r\n snackbar.message = \"Successfully removed payment method.\";\r\n snackbar.open = true;\r\n snackbar.variant = \"success\";\r\n this.setState({snackbar});\r\n } else {\r\n let snackbar = {...this.state.snackbar};\r\n snackbar.message = \"Something went wrong. Please contact React Energy to resolve issue\";\r\n snackbar.open = true;\r\n snackbar.variant = \"error\";\r\n this.setState({snackbar});\r\n }\r\n getPaymentMethod();\r\n this.setState({removingPaymentMethod: false, showUpdateCreditCard: false});\r\n });\r\n\r\n // this.getPaymentMethod();\r\n };\r\n\r\n toggleShowUpdateCreditCard = () => {\r\n this.setState({showUpdateCreditCard: !this.state.showUpdateCreditCard})\r\n }\r\n\r\n openSnackbar = (value) => {\r\n let snackbar = {...this.state.snackbar}\r\n snackbar.open = value;\r\n this.setState({snackbar})\r\n }\r\n\r\n render() {\r\n const {classes} = this.props;\r\n const {showUpdateCreditCard} = this.state;\r\n let userInfo = JSON.parse(window.sessionStorage.user);\r\n const {organizationPaymentMethod, organizationPaymentMethodId, fetchingPaymentMethod, getPaymentMethod} = this.props;\r\n\r\n return (\r\n
    \r\n \r\n \r\n\r\n {this.state.fetchingPaymentMethod ?\r\n
    \r\n \r\n
    \r\n :\r\n \r\n\r\n \r\n\r\n \r\n
    \r\n {userInfo.subscription.currentPeriodEndDate && !userInfo.subscription.cancelAtPeriodEnd ?\r\n
    \r\n \r\n autorenew\r\n \r\n Your subscription is set for auto-renewal for\r\n ${userInfo.subscription.plan.price} on {moment(userInfo.subscription.currentPeriodEndDate).format('MMMM D, YYYY')}\r\n \r\n
    \r\n :
    \r\n \r\n error\r\n \r\n Your subscription will end\r\n on {moment(userInfo.subscription.currentPeriodEndDate).format('MMMM D, YYYY')}.\r\n Please email support@reactenergy.io to renew.\r\n
    \r\n }\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n Update Payment Method\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n
    \r\n }\r\n {showUpdateCreditCard ?\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 title={\"Payment Method\"}/>\r\n\r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(PaymentMethodRev2)\r\n\r\n\r\n","import React from 'react'\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Select from '@material-ui/core/Select';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Icon from \"@material-ui/core/Icon\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport {makeStyles} from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n icon: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n fontSize: 30\r\n },\r\n margin: {\r\n margin: theme.spacing(2),\r\n },\r\n\r\n\r\n}));\r\n\r\n\r\nfunction SubscriptionCounter(props) {\r\n\r\n const {quantity, handleQuantityChange} = props;\r\n\r\n const onAdd = (event) => {\r\n handleQuantityChange(quantity + 1)\r\n }\r\n\r\n const onSubtract = (event) => {\r\n if (quantity - 1 > 0) {\r\n handleQuantityChange(quantity - 1)\r\n }\r\n \r\n }\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n\r\n \r\n
    \r\n \r\n \r\n remove\r\n \r\n \r\n {quantity}\r\n \r\n \r\n add\r\n \r\n \r\n
    \r\n \r\n\r\n )\r\n}\r\n\r\nexport default SubscriptionCounter","import React from 'react'\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Select from '@material-ui/core/Select';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Icon from \"@material-ui/core/Icon\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport {makeStyles} from \"@material-ui/core/styles\";\r\nimport SubscriptionCounter from \"../../../../../components/Counter/SubscriptionCounter\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n icon: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n fontSize: 30\r\n },\r\n margin: {\r\n margin: theme.spacing(2),\r\n },\r\n\r\n\r\n}));\r\n\r\n\r\nfunction AccountActivationStep1(props) {\r\n\r\n const {quantity, handleUserCountChange} = props;\r\n\r\n const onAddUser = (event) => {\r\n handleUserCountChange(quantity + 1)\r\n }\r\n\r\n const onRemoveUser = (event) => {\r\n handleUserCountChange(quantity - 1)\r\n }\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n Select Number of Users\r\n \r\n \r\n \r\n \r\n \r\n\r\n )\r\n}\r\n\r\nexport default AccountActivationStep1","import React from 'react'\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Select from '@material-ui/core/Select';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport CheckoutForm from \"../../PaymentMethodRev2/CheckoutForm\";\r\nimport CheckIcon from '@material-ui/icons/Check';\r\n\r\nfunction AccountActivationStep2(props) {\r\n\r\n const {onSubmit, organizationPaymentMethod} = props;\r\n\r\n if (organizationPaymentMethod === null) {\r\n return (\r\n \r\n \r\n Payment Method\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\n \r\n Card ending in {organizationPaymentMethod.last4}\r\n \r\n \r\n \r\n )\r\n }\r\n \r\n}\r\n\r\nexport default AccountActivationStep2","import React, {Component, Fragment, useState} from 'react'\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport CheckoutForm from \"../../PaymentMethodRev2/CheckoutForm\";\r\nimport CheckIcon from '@material-ui/icons/Check';\r\nimport {withStyles} from '@material-ui/core/styles';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\n\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport Tab from '@material-ui/core/Tab';\r\n\r\nimport moment from 'moment'\r\nimport {PulseLoader} from \"react-spinners\";\r\nimport {getActiveProductPlans} from \"../../../../../services/admin.service\";\r\n\r\nconst styles = theme => ({\r\n table: {\r\n minWidth: 650,\r\n },\r\n subscriptionBox: {\r\n border: '1px solid #dadce0',\r\n borderRadius: 5,\r\n padding: 10,\r\n '&:hover': {\r\n backgroundColor: theme.palette.background.default,\r\n // borderColor: theme.palette.primary.main,\r\n cursor: 'pointer'\r\n }\r\n },\r\n selectedSubscriptionBox: {\r\n padding: 10,\r\n borderWidth: '2px',\r\n borderStyle: 'solid',\r\n borderColor: theme.palette.primary.main,\r\n borderRadius: 5,\r\n },\r\n subscriptionTitle: {\r\n fontWeight: 600,\r\n\r\n },\r\n centerGrid: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n }\r\n\r\n});\r\n\r\nclass AccountActivationStep4 extends Component {\r\n \r\n state = {\r\n plans: [],\r\n loadingPlans: true,\r\n }\r\n \r\n componentDidMount = () => {\r\n getActiveProductPlans().then(x => {\r\n // let plans = x[0].plans;\r\n // debugger;\r\n this.setState({plans: x[0].plans, loadingPlans: false});\r\n });\r\n }\r\n\r\n render() {\r\n const {\r\n quantity,\r\n organizationPaymentMethod,\r\n onActivateSubmit,\r\n handleSubscriptionDurationChange,\r\n subscriptionDuration,\r\n paymentTotal,\r\n classes\r\n } = this.props;\r\n\r\n let date = moment().date();\r\n\r\n \r\n\r\n if (this.state.loadingPlans) {\r\n return null\r\n } else {\r\n return (\r\n \r\n
    \r\n \r\n Checkout\r\n \r\n\r\n \r\n {this.state.plans.map(plan => {\r\n return (\r\n \r\n
    \r\n\r\n\r\n handleSubscriptionDurationChange(plan.interval)}\r\n >\r\n \r\n Billed {plan.interval === 'month' ? 'Monthly' : 'Annually'}\r\n \r\n \r\n ${plan.price}/user\r\n \r\n \r\n
    \r\n
    \r\n )\r\n })}\r\n {/**/}\r\n {/*
    */}\r\n\r\n\r\n {/* handleSubscriptionDurationChange('month')}*/}\r\n {/* >*/}\r\n {/* */}\r\n {/* Billed Monthly*/}\r\n {/* */}\r\n {/* */}\r\n {/* $39.99/user*/}\r\n {/* */}\r\n {/* */}\r\n {/*
    */}\r\n {/*
    */}\r\n {/**/}\r\n {/*
    */}\r\n {/* handleSubscriptionDurationChange('year')}*/}\r\n {/* >*/}\r\n {/* */}\r\n {/* Billed Annually*/}\r\n {/* */}\r\n {/* */}\r\n {/* $439.89/user*/}\r\n {/* */}\r\n {/* */}\r\n {/*
    */}\r\n {/*
    */}\r\n\r\n\r\n
    \r\n\r\n {/**/}\r\n {/* Monthly*/}\r\n {/**/}\r\n {/**/}\r\n {/* Quarterly*/}\r\n {/**/}\r\n\r\n \r\n \r\n \r\n \r\n Number of Users\r\n \r\n \r\n {quantity}\r\n \r\n \r\n \r\n \r\n Subscription\r\n \r\n \r\n Basic\r\n \r\n \r\n \r\n \r\n Payment Method\r\n \r\n \r\n\r\n {/*Card ending in {organizationPaymentMethod.last4}*/}\r\n \r\n \r\n \r\n \r\n Total\r\n \r\n \r\n ${paymentTotal.toFixed(2).replace(/\\d(?=(\\d{3})+\\.)/g, '$&,')}\r\n \r\n \r\n\r\n
    \r\n\r\n
    \r\n \r\n {subscriptionDuration === 'monthly' ?\r\n \r\n You will be charged the listed amount now and automatically\r\n on\r\n {date > 28 ?\r\n day {date}, or last day, of each month. Cancel\r\n anytime. :\r\n day {date} of each month. Cancel anytime.\r\n }\r\n :\r\n \r\n You will be charged the listed amount now and automatically\r\n on\r\n {moment().format('MMMM D')}, every year. Cancel anytime.\r\n \r\n }\r\n \r\n \r\n \r\n\r\n\r\n \r\n
    \r\n\r\n
    \r\n\r\n )\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n}\r\n\r\nexport default withStyles(styles)(AccountActivationStep4)","import React, {Component} from 'react'\r\nimport Paper from '@material-ui/core/Paper'\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst content = [\r\n {\r\n header: \"Website Terms of Use\",\r\n paragraphs: [\r\n `These Terms of Use, (“Terms”) govern your use of the website reactenergy.io (the “Website”) and shall include all pages within the Website which is owned by React Energy. These Terms apply to your use of the Website and by using the Website, you expressly accept all terms and conditions contained herein in full. If you object to any of the Terms you must stop using the Website by closing or otherwise navigating away from the Website.`,\r\n `Your use of any React Energy mobile software or the React Energy Portal (portal.reactenergy.io) is governed by further terms and conditions provided separately when accessing the React Energy software or React Energy Portal.`,\r\n `This Website is not for use by any minors (defined as those who are not at least 18 years of age), and you must not use this Website if you a minor.`\r\n\r\n ]\r\n },\r\n {\r\n header: 'Intellectual Property Rights',\r\n paragraphs: [\r\n `Unless otherwise specified, React Energy owns all rights to the intellectual property and material\r\n contained in this Website, and all such rights are reserved. You are granted a limited license\r\n only, subject to the restrictions provided in these Terms, for purposes of viewing the material\r\n contained on this Website.`,\r\n\r\n ]\r\n },\r\n {\r\n header: 'Restrictions',\r\n paragraphs: [\r\n `Unless otherwise agreed in writing, you are expressly restricted from any and all of the following:`\r\n ],\r\n list: [\r\n `Copying or reproducing any of the Website material;`,\r\n `Publishing any Website material in any media;`,\r\n `Selling, sublicensing and/or otherwise commercializing any Website material;`,\r\n `publicly performing and/or showing any Website material;`,\r\n `Using this Website in any way that is, or may be, damaging to this Website or React Energy;`,\r\n `Using this Website in any way that impacts user access to this Website;`,\r\n `Using this Website contrary to applicable laws and regulations, or in a way that causes, or\r\n may cause, harm to the Website, or to any person or business entity;`,\r\n `Engaging in any data mining, data harvesting, data extracting or any other similar activity in\r\n relation to this Website, or while using this Website;`,\r\n `Using this Website to engage in any advertising or marketing;`\r\n ]\r\n },\r\n {\r\n header: 'No Warranties',\r\n paragraphs: [\r\n `This Website is provided “as is,” with all faults, and React Energy makes no express or implied\r\n representations or warranties, of any kind related to this Website or the materials contained on\r\n this Website. Additionally, nothing contained on this Website shall be construed as providing\r\n consultation or advice to you. Any price information provided on this site is informational only\r\n and is not binding on any party unless and until agreed in writing by React Energy.`\r\n ]\r\n },\r\n {\r\n header: 'Limitation of Liability',\r\n paragraphs: [\r\n `In no event shall React Energy, nor any of its officers, directors, employees, consultants and advisors,\r\n be liable to you for anything arising out of or in any way connected with your use of the\r\n Website, whether such liability is under contract, tort or otherwise. Further, React Energy, including\r\n its officers, directors and employees shall not be liable for any indirect, consequential or special\r\n liability arising out of or in any way related to your use of this Website.`\r\n ]\r\n },\r\n {\r\n header: 'Indemnification',\r\n paragraphs: [\r\n `You hereby indemnify to the fullest extent React Energy from and against any and all liabilities, costs,\r\n demands, causes of action, damages and expenses (including reasonable attorney’s fees)\r\n arising out of or in any way related to your breach of any of the provisions of these Terms.`\r\n ]\r\n },\r\n {\r\n header: `Severability`,\r\n paragraphs: [\r\n `If any provision of these Terms is found to be unenforceable or invalid under any applicable\r\n law, such unenforceability or invalidity shall not render these Terms unenforceable or invalid as\r\n a whole, and such provisions shall be deleted without affecting the remaining provisions herein.`\r\n ]\r\n },\r\n {\r\n header: `Updates to Terms`,\r\n paragraphs: [\r\n `React Energy may revise these Terms at any time and by using this Website you are expected to\r\n review such Terms on a regular basis to ensure you understand all terms and conditions\r\n governing use of this Website.`\r\n ]\r\n },\r\n {\r\n header: 'Assignment',\r\n paragraphs: [\r\n `React Energy shall be permitted to assign, transfer, and subcontract its rights and/or obligations\r\n under these Terms without any notification or consent required. However, you shall not be\r\n permitted to assign, transfer, or subcontract any of your rights and/or obligations under these\r\n Terms.`\r\n ]\r\n },\r\n {\r\n header: 'Entire Agreement',\r\n paragraphs: [\r\n `Unless otherwise agreed in writing, these Terms, including any legal notices and disclaimers\r\n contained on this Website, constitute the entire agreement between you and React Energy in\r\n relation to your use of this Website, and supersede all prior agreements and understandings\r\n with respect to the same.`\r\n ]\r\n },\r\n {\r\n header: 'Governing Law & Jurisdiction',\r\n paragraphs: [\r\n `These Terms will be governed by and construed in accordance with the laws of the State of\r\n Texas, and you submit to the exclusive jurisdiction of the state and federal courts located in\r\n Tarrant County, Texas for the resolution of any disputes.`\r\n ]\r\n }\r\n\r\n]\r\n\r\nclass TermsOfUseContent extends Component {\r\n render() {\r\n return (\r\n\r\n \r\n {content.map(section => (\r\n
    \r\n \r\n {section.header}\r\n \r\n {section.paragraphs.map(paragraph => (\r\n
    \r\n \r\n {paragraph}\r\n \r\n
    \r\n\r\n ))}\r\n {section.list ?\r\n
      \r\n {section.list.map(item => (\r\n
    • {item}
    • \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}\r\n\r\nexport default TermsOfUseContent","import React from 'react'\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Select from '@material-ui/core/Select';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport CheckoutForm from \"../../PaymentMethodRev2/CheckoutForm\";\r\nimport CheckIcon from '@material-ui/icons/Check';\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\nimport {makeStyles} from \"@material-ui/core/styles\";\r\nimport TermsOfUseContent from \"../../../../../Legal/TermsOfUseContent\";\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'space-around',\r\n overflow: 'hidden',\r\n\r\n },\r\n});\r\n\r\nfunction AccountActivationStep3(props) {\r\n const {setAgreeToTerms, agreeToTerms, handleNext} = props;\r\n \r\n const [open, setOpen] = React.useState(false);\r\n\r\n const handleClickOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n const handleClose = (value) => {\r\n setOpen(false);\r\n setAgreeToTerms(value);\r\n if (value) {\r\n handleNext();\r\n }\r\n \r\n };\r\n \r\n \r\n \r\n const classes = useStyles();\r\n return (\r\n \r\n {/**/}\r\n {/* Terms of Service*/}\r\n {/**/}\r\n \r\n \r\n React Energy Terms of Use\r\n \r\n {/**/}\r\n {/* Let Google help apps determine location. This means sending anonymous location data to*/}\r\n {/* Google, even when no apps are running.*/}\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 AccountActivationStep3","import React, {Component} from 'react'\r\n\r\nimport {withStyles} from '@material-ui/core/styles';\r\nimport Stepper from '@material-ui/core/Stepper';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Step from '@material-ui/core/Step';\r\nimport StepLabel from '@material-ui/core/StepLabel';\r\nimport StepContent from '@material-ui/core/StepContent';\r\nimport Button from '@material-ui/core/Button';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport AccountActivationStep1 from \"./Step1\";\r\nimport AccountActivationStep2 from \"./Step2\";\r\nimport {\r\n createOrUpdateOrganizationSubscription, getActiveProductPlans,\r\n getOrganizationPaymentMethods\r\n} from \"../../../../../services/admin.service\";\r\nimport AccountActivationStep4 from \"./Step4\";\r\nimport AccountActivationStep3 from \"./Step3\";\r\nimport CustomSnackbar from \"../../../../../components/Snackbar/CustomSnackbar\";\r\nimport {ScaleLoader} from \"react-spinners\";\r\nimport Dialog from '@material-ui/core/Dialog';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n width: '100%',\r\n },\r\n paper: {\r\n backgroundColor: \"transparent\",\r\n boxShadow: \"none\",\r\n overflow: \"hidden\"\r\n },\r\n button: {\r\n marginTop: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n },\r\n actionsContainer: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n resetContainer: {\r\n padding: theme.spacing(3),\r\n },\r\n stepper: {\r\n backgroundColor: 'transparent',\r\n // maxWidth: 1200, \r\n padding: '0 30px',\r\n }\r\n\r\n});\r\n\r\nclass AccountActivationStepper extends Component {\r\n\r\n state = {\r\n activeStep: 0,\r\n quantity: 1,\r\n fetchingPaymentMethod: false,\r\n agreeToTerms: false,\r\n subscriptionDuration: 'month',\r\n organizationPaymentMethod: null,\r\n paymentTotal: 40,\r\n submittingActivation: false,\r\n steps: [\r\n {\r\n label: 'Select number of Users',\r\n },\r\n {\r\n label: 'Enter Payment Method',\r\n },\r\n {\r\n label: 'Terms',\r\n },\r\n {\r\n label: 'Activate',\r\n },\r\n\r\n ],\r\n snackbar: {\r\n message: null,\r\n open: false,\r\n variant: null\r\n },\r\n };\r\n\r\n handleSubscriptionDurationChange = (value) => {\r\n if (value === 'month' || value === 'year') {\r\n this.setState({subscriptionDuration: value}, () => this.calculatePayment());\r\n\r\n }\r\n }\r\n\r\n handleNext = () => {\r\n if (this.state.activeStep + 1 < this.state.steps.length) {\r\n this.setState({activeStep: this.state.activeStep + 1})\r\n }\r\n\r\n };\r\n\r\n calculatePayment = () => {\r\n let costPerUser;\r\n if (this.state.subscriptionDuration === 'month') {\r\n costPerUser = 39.99\r\n } else if (this.state.subscriptionDuration === 'year') {\r\n costPerUser = 439.89\r\n }\r\n let paymentTotal = this.state.quantity * costPerUser;\r\n this.setState({paymentTotal})\r\n };\r\n\r\n openSnackbar = (value) => {\r\n let snackbar = {...this.state.snackbar}\r\n snackbar.open = value;\r\n this.setState({snackbar})\r\n }\r\n\r\n handleBack = () => {\r\n if (this.state.activeStep - 1 >= 0) {\r\n this.setState({activeStep: this.state.activeStep - 1})\r\n }\r\n\r\n };\r\n\r\n setAgreeToTerms = (value) => {\r\n this.setState({agreeToTerms: value})\r\n }\r\n\r\n handleUserCountChange = (value) => {\r\n if (value > 0) {\r\n this.setState({quantity: value}, () => this.calculatePayment())\r\n\r\n }\r\n\r\n\r\n };\r\n\r\n getPaymentMethod = () => {\r\n this.setState({fetchingPaymentMethod: true});\r\n getOrganizationPaymentMethods().then(x => {\r\n if (x.length > 0) {\r\n this.setState({organizationPaymentMethod: x[0].card});\r\n this.setState({organizationPaymentMethodId: x[0].paymentMethodId});\r\n } else if (x.length === 0) {\r\n this.setState({organizationPaymentMethod: null})\r\n }\r\n this.setState({fetchingPaymentMethod: false, activeStep: this.state.activeStep + 1});\r\n });\r\n };\r\n\r\n\r\n // TODO: remove this \"wait\" funciton\r\n wait = (ms) => {\r\n let start = new Date().getTime();\r\n let end = start;\r\n while (end < start + ms) {\r\n end = new Date().getTime();\r\n }\r\n }\r\n\r\n onActivateSubmit = () => {\r\n this.setState({submittingActivation: true});\r\n createOrUpdateOrganizationSubscription(this.state.subscriptionDuration, this.state.quantity).then(x => {\r\n let snackbar;\r\n if (x.isSuccess) {\r\n snackbar = {...this.state.snackbar};\r\n snackbar.open = true;\r\n snackbar.message = \"Passwords did not match. Try again.\";\r\n snackbar.variant = \"error\";\r\n } else {\r\n snackbar = {...this.state.snackbar};\r\n snackbar.open = true;\r\n snackbar.message = \"Something went wrong. Please reach out to React Energy support\";\r\n snackbar.variant = \"error\";\r\n }\r\n this.setState({snackbar})\r\n });\r\n // let snackbar = {...this.state.snackbar};\r\n // snackbar.open = true;\r\n // snackbar.message = \"Something went wrong. Please reach out to React Energy support\";\r\n // snackbar.variant = \"error\";\r\n // this.setState({snackbar});\r\n\r\n this.props.resetUserInfo();\r\n this.setState({submittingActivation: false})\r\n\r\n }\r\n\r\n getComponent = () => {\r\n switch (this.state.activeStep) {\r\n case 0:\r\n return \r\n break;\r\n case 1:\r\n return ;\r\n break;\r\n case 2:\r\n return ;\r\n break;\r\n case 3:\r\n return \r\n }\r\n };\r\n\r\n componentDidMount = () => {\r\n getActiveProductPlans().then(x => {\r\n // debugger;\r\n })\r\n };\r\n\r\n render() {\r\n const {classes} = this.props;\r\n if (this.state.submittingActivation) {\r\n return (\r\n \r\n \r\n\r\n
    \r\n Activating your account\r\n
    \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\n React Energy: Account Activation\r\n \r\n \r\n\r\n \r\n\r\n {this.state.steps.map((step, index) => (\r\n \r\n {step.label}\r\n \r\n ))}\r\n \r\n
    \r\n {this.getComponent()}\r\n
    \r\n
    \r\n \r\n Back\r\n \r\n {this.state.activeStep !== this.state.steps.length - 1 ?\r\n \r\n {this.state.activeStep === this.state.steps.length - 1 ? 'Activate' : 'Next'}\r\n : null}\r\n
    \r\n
    \r\n )\r\n }\r\n\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(AccountActivationStepper)","import React, {Component, Fragment} from 'react'\r\n\r\n//Material UI\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Button from '@material-ui/core/Button';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Link from '@material-ui/core/Link';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport CustomInfoLayout from \"../../../../components/CustomInfoLayout/CustomInfoLayout\";\r\nimport HorizontalDivider from \"../../../../components/Dividers/HorizontalDivider\";\r\nimport CheckoutForm from \"../PaymentMethodRev2/CheckoutForm\";\r\nimport AccountActivationStepper from \"./Components/AccountActivationStepper\";\r\n\r\n\r\nconst styles = theme => ({\r\n cancel: {\r\n color: 'red',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n textDecoration: 'underline',\r\n }\r\n },\r\n icon: {\r\n margin: theme.spacing(0),\r\n color: '#4a4a4a',\r\n fontSize: 25,\r\n display: 'inline-block'\r\n },\r\n\r\n});\r\n\r\nclass ActivateSubscription extends Component {\r\n\r\n state = {\r\n showPaymentMethod: false,\r\n };\r\n\r\n componentDidMount = () => {\r\n let userInfo = JSON.parse(window.sessionStorage.user);\r\n\r\n };\r\n \r\n toggleShowPaymentMethod = (value) => {\r\n this.setState({showPaymentMethod: value})\r\n }\r\n\r\n\r\n render() {\r\n \r\n const {activeUser, resetUserInfo} = this.props;\r\n \r\n return (\r\n \r\n\r\n {this.state.showPaymentMethod ?\r\n \r\n \r\n :\r\n
    \r\n \r\n
    \r\n \r\n Oops! {activeUser.firstName}, looks like your subscription is no longer active. Activate your account and you will have access to all of the projects you have previously uploaded.\r\n \r\n
    \r\n \r\n\r\n \r\n \r\n this.toggleShowPaymentMethod(true)}\r\n disabled={this.state.showPaymentMethod}\r\n >\r\n Activate Subscription\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 withStyles(styles)(ActivateSubscription)","import React, {Component} from 'react'\r\n\r\n//Material UI\r\n//Material UI\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport {withStyles, useTheme} from '@material-ui/core/styles';\r\nimport PaymentMethod from \"./PaymentMethod\";\r\nimport CurrentSubscription from \"./CurrentSubscription\";\r\nimport PaymentMethodRev2 from \"./PaymentMethodRev2\";\r\nimport ActivateSubscription from \"./Activate Subscription\";\r\nimport Icon from \"@material-ui/core/Icon\";\r\nimport moment from 'moment'\r\nimport {getOrganizationPaymentMethods} from \"../../../services/admin.service\";\r\nimport CustomInfoLayout from \"../../../components/CustomInfoLayout/CustomInfoLayout\";\r\nimport ChangePasswordForm from \"../Password/ChangePasswordForm\";\r\n\r\nconst styles = theme => ({\r\n root: {\r\n padding: 15,\r\n // minHeight: 200\r\n },\r\n error: {\r\n backgroundColor: theme.palette.error.main,\r\n padding: 10,\r\n },\r\n warning: {\r\n backgroundColor: theme.palette.warning.main,\r\n padding: 10,\r\n },\r\n icon: {\r\n // margin: theme.spacing(0),\r\n color: '#ffffff',\r\n fontSize: 30\r\n },\r\n});\r\n\r\nclass AccountSubscription extends Component {\r\n\r\n state = {\r\n //default to value of length 1 just to not show it by default, probably a better way to do this\r\n paymentMethods: null,\r\n organizationPaymentMethod: null,\r\n organizationPaymentMethodId: null,\r\n fetchingPaymentMethod: null,\r\n };\r\n\r\n getPaymentMethod = () => {\r\n this.setState({fetchingPaymentMethod: true});\r\n getOrganizationPaymentMethods().then(x => {\r\n if (Array.isArray(x)) {\r\n if (x.length > 0) {\r\n this.setState({organizationPaymentMethod: x[0].card});\r\n this.setState({organizationPaymentMethodId: x[0].paymentMethodId});\r\n } else if (x.length === 0) {\r\n this.setState({organizationPaymentMethod: null})\r\n }\r\n } else {\r\n this.setState({organizationPaymentMethod: null})\r\n }\r\n this.setState({fetchingPaymentMethod: false})\r\n });\r\n };\r\n\r\n componentDidMount = () => {\r\n this.getPaymentMethod()\r\n };\r\n\r\n\r\n getBannerMessage = (activeUser) => {\r\n const {classes} = this.props;\r\n\r\n if (this.props.activeUser.subscription.cancelAtPeriodEnd) {\r\n return (\r\n \r\n \r\n
    \r\n \r\n error\r\n \r\n Your subscription has been\r\n cancelled and is set to expire\r\n on {moment(activeUser.subscription.currentPeriodEndDate).format('MMMM D')}.\r\n
    \r\n
    \r\n
    \r\n )\r\n } else if (this.state.organizationPaymentMethod === null && this.state.fetchingPaymentMethod === false) {\r\n return (\r\n \r\n \r\n
    \r\n \r\n warning\r\n \r\n You do not have any payment methods on\r\n file. Please add a payment method or your subscription will end on\r\n on {moment(activeUser.subscription.currentPeriodEndDate).format('MMMM D')}.\r\n
    \r\n
    \r\n
    \r\n )\r\n\r\n\r\n }\r\n\r\n }\r\n\r\n render() {\r\n\r\n // let userInfo = JSON.parse(window.sessionStorage.user);\r\n\r\n //TODO: REMOVE THIS WHEN DONE TESTING\r\n // userInfo.subscription = null;\r\n\r\n const {classes, activeUser, resetActiveUser} = this.props;\r\n\r\n return (\r\n
    \r\n {this.getBannerMessage(activeUser)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
    \r\n )\r\n\r\n\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(AccountSubscription)","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardActions from '@material-ui/core/CardActions';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n minWidth: 275,\r\n },\r\n bullet: {\r\n display: 'inline-block',\r\n margin: '0 2px',\r\n transform: 'scale(0.8)',\r\n },\r\n title: {\r\n fontSize: 14,\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n});\r\n\r\nexport default function CardTest() {\r\n const classes = useStyles();\r\n const bull = ;\r\n\r\n return (\r\n \r\n \r\n \r\n Word of the Day\r\n \r\n \r\n be{bull}nev{bull}o{bull}lent\r\n \r\n \r\n adjective\r\n \r\n \r\n well meaning and kindly.\r\n
    \r\n {'\"a benevolent smile\"'}\r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n );\r\n}","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport CardActions from '@material-ui/core/CardActions';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport PaymentMethodRev2 from \"../Subscription/PaymentMethodRev2\";\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n minWidth: 275,\r\n minHeight: 200,\r\n border: '1px solid #dadce0',\r\n borderRadius: 8\r\n },\r\n title: {\r\n fontFamily: 'Google Sans,Roboto,Arial,sans-serif',\r\n fontSize: '1.375rem',\r\n fontWeight: 400,\r\n letterSpacing: 0,\r\n lineHeight: '1.75rem',\r\n hyphens: 'auto',\r\n wordBreak: 'break-word',\r\n wordWrap: 'break-word',\r\n color: '#202124',\r\n }\r\n});\r\n\r\nexport default function GoogleLayout() {\r\n const classes = useStyles();\r\n\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n Subscription\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, {Component} from 'react'\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport {withStyles} from '@material-ui/core/styles';\r\nimport CardTest from \"./CardTest\";\r\nimport GoogleLayout from \"./GoogleLayout\";\r\n\r\nconst styles = theme => ({\r\n root: {\r\n width: '100%',\r\n height: '100%',\r\n minHeight: '100vh',\r\n backgroundColor: 'white'\r\n },\r\n container: {\r\n display: 'flex',\r\n justifyContent: 'center'\r\n },\r\n \r\n\r\n});\r\n\r\nclass TestLayout extends Component {\r\n render() {\r\n const {classes} = this.props;\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 withStyles(styles)(TestLayout)","import React, {Component} from 'react'\r\nimport {Link} from \"react-router-dom\";\r\nimport AntTab from \"../../../components/AntTabs/AntTab\";\r\nimport AntTabs from \"../../../components/AntTabs/AntTabs\";\r\n\r\nfunction AccountTabs(props) {\r\n\r\n\r\n let tabs = [\r\n {\r\n label: 'Home',\r\n link: `/account/home`,\r\n name: 'home'\r\n },\r\n {\r\n label: 'Password',\r\n link: `/account/password`,\r\n name: 'password'\r\n },\r\n {\r\n label: 'Subscription',\r\n link: `/account/subscription`,\r\n name: 'subscription'\r\n },\r\n {\r\n label: 'Team',\r\n link: `/account/team`,\r\n name: 'team'\r\n },\r\n \r\n ];\r\n\r\n let selectedIndex;\r\n tabs.forEach((x, index) => {\r\n if (x.name === props.currentComponent) {\r\n selectedIndex = index;\r\n }\r\n });\r\n\r\n return (\r\n \r\n {tabs.map(tab => (\r\n \r\n \r\n \r\n\r\n ))}\r\n \r\n )\r\n\r\n}\r\n\r\nexport default AccountTabs","import React, {Component} from 'react'\r\n\r\n// Material UI\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\nimport {withStyles} from '@material-ui/core/styles';\r\n\r\n// Components\r\nimport AccountSummary from './AccountSummary'\r\nimport OrganizationSettingsContainer from \"../../OrganizationSettings/containers/OrganizationSettingsContainer\";\r\nimport AccountNavbar from \"./NavBar\";\r\n\r\n// import ManageBilling from './Billing/ManageBilling'\r\nimport PasswordManagement from \"./Password/index\";\r\nimport AccountSubscription from \"./Subscription\";\r\nimport TestLayout from \"./TestLayout\";\r\n\r\n// Icons\r\nimport LockIcon from '@material-ui/icons/Lock';\r\nimport HomeIcon from '@material-ui/icons/Home';\r\nimport CreditCardIcon from '@material-ui/icons/CreditCard';\r\nimport SettingsIcon from '@material-ui/icons/Settings';\r\nimport DashboardIcon from '@material-ui/icons/Dashboard';\r\nimport PeopleIcon from '@material-ui/icons/People';\r\nimport {bindActionCreators} from \"redux\";\r\nimport {setActiveUser} from \"../../redux/actions/user-actions\";\r\nimport {connect} from \"react-redux\";\r\nimport AccountTabs from \"./AccountTabs\";\r\nimport MeterSectionTitleBar from \"../../FacilityHome/components/components/MeterSectionTitleBar\";\r\n\r\n\r\n\r\n\r\nconst styles = theme => ({\r\n\r\n accountSection: {\r\n backgroundColor: theme.palette.background.grey,\r\n minHeight: '100vh'\r\n }\r\n\r\n});\r\n\r\n\r\nclass AccountHome extends Component {\r\n state = {\r\n currentTab: 2,\r\n activeComponent: null,\r\n tabs: [ {\r\n label: 'Account Home',\r\n icon: ,\r\n link: `/account/home`\r\n }, {\r\n label: 'Password',\r\n icon: ,\r\n link: `/account/password`\r\n }, {\r\n label: 'Subscription',\r\n icon: ,\r\n link: `/account/subscription`\r\n },{\r\n label: 'Team',\r\n icon: ,\r\n link: `/account/team`\r\n }, \r\n // {\r\n // label: 'Settings',\r\n // icon: ,\r\n // link: `/account/settings`\r\n // }\r\n ],\r\n tabs2: [\r\n {\r\n label: 'Back to Dashboard',\r\n icon: ,\r\n link: `/`\r\n },\r\n ]\r\n };\r\n \r\n componentDidMount = () => {\r\n const {component} = this.props.match.params;\r\n this.getMainComponent(component)\r\n }\r\n \r\n componentDidUpdate = (prevProps, prevState, snapshot) => {\r\n if (prevProps.match.params.component !== this.props.match.params.component) {\r\n const {component} = this.props.match.params;\r\n this.getMainComponent(component)\r\n }\r\n \r\n };\r\n \r\n getMainComponent = (component) => {\r\n \r\n let userInfo = JSON.parse(window.sessionStorage.user);\r\n \r\n if (userInfo.subscription !== null) {\r\n switch (component) {\r\n case 'subscription':\r\n this.setState({activeComponent: });\r\n break;\r\n case 'home':\r\n this.setState({activeComponent: });\r\n break;\r\n case 'password':\r\n this.setState({activeComponent: });\r\n break;\r\n case 'settings':\r\n this.setState({activeComponent: });\r\n break;\r\n case 'team':\r\n this.setState({activeComponent: });\r\n break;\r\n }\r\n } else {\r\n this.setState({activeComponent: });\r\n }\r\n \r\n \r\n \r\n }\r\n\r\n render() {\r\n const {classes} = this.props;\r\n\r\n // let userInfo = JSON.parse(window.sessionStorage.user);\r\n // userInfo.subscription = null;\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\n
    \r\n \r\n \r\n {this.state.activeComponent}\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\nfunction mapStateToProps(state) {\r\n return {\r\n activeUser: state.activeUser,\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({setActiveUser }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(AccountHome));","import React from 'react';\r\nimport {Link} from 'react-router-dom';\r\n\r\n\r\n\r\nimport {makeStyles} from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Popover from '@material-ui/core/Popover';\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\n\r\nimport blue from '@material-ui/core/colors/blue';\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport PropTypes from 'prop-types';\r\n\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n // justifyContent: 'center',\r\n flexWrap: 'wrap',\r\n //display: 'flex',\r\n },\r\n paper: {\r\n padding: theme.spacing(1, 2),\r\n },\r\n formControl: {\r\n margin: theme.spacing(1),\r\n minWidth: 120,\r\n },\r\n selectEmpty: {\r\n marginTop: theme.spacing(2),\r\n },\r\n link: {\r\n color: theme.palette.appBar.contrast,\r\n '&:hover': {\r\n cursor: 'pointer',\r\n textDecoration: 'underline',\r\n color: blue[500],\r\n }\r\n },\r\n breadcrumbs: {\r\n color: theme.palette.appBar.contrast\r\n }\r\n}));\r\n\r\nexport default function SimpleBreadcrumbs({\r\n selectedFacility = null,\r\n selectedProject = null,\r\n facilities = null,\r\n selectedFacilityView = null,\r\n location,\r\n match,\r\n history\r\n }) {\r\n \r\n \r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n\r\n function handleClick(event) {\r\n setAnchorEl(event.currentTarget);\r\n }\r\n\r\n function handleClose() {\r\n setAnchorEl(null);\r\n }\r\n \r\n\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n Dashboard\r\n \r\n \r\n {/*{selectedProject ?*/}\r\n {/* */}\r\n {/* */}\r\n \r\n {/* {selectedProject.name}*/}\r\n {/* */}\r\n {/* : null*/}\r\n {/*}*/}\r\n \r\n {/*{selectedFacility ?*/}\r\n {/* */}\r\n {/* {selectedFacility.name} : ''}*/}\r\n \r\n {/**/}\r\n {/* {facilities ? facilities.map(facility => {*/}\r\n {/* return (*/}\r\n {/* */}\r\n {/* */}\r\n \r\n {/* {facility.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\r\n\r\n
    \r\n );\r\n \r\n}\r\n\r\nSimpleBreadcrumbs.propTypes = {\r\n location: PropTypes.object.isRequired,\r\n};","import React, {useState} from 'react';\r\nimport {fade, makeStyles} from '@material-ui/core/styles';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport MenuIcon from '@material-ui/icons/Menu';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Button from '@material-ui/core/Button';\r\nimport MenuList from \"@material-ui/core/MenuList\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport Box from '@material-ui/core/Box';\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Popper from \"@material-ui/core/Popper\";\r\nimport { Link } from 'react-router-dom';\r\nimport {logout} from '../../services/user.service'\r\nimport reactlogo from \"../../assets/img/ReactLogo_NoShadow.svg\"\r\nimport './TopNavbarCss.css';\r\nimport List from '@material-ui/core/List';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\n//Material Icons\r\n\r\nimport AccountCircle from '@material-ui/icons/AccountCircle';\r\n\r\n//colors\r\nimport grey from '@material-ui/core/colors/grey';\r\n\r\n// Breadcrumbs\r\nimport Breadcrumbs from '../Breadcrumbs/breadcrumbs'\r\nimport Popover from \"@material-ui/core/Popover\";\r\nimport blue from \"@material-ui/core/colors/blue\";\r\nimport InboxIcon from '@material-ui/icons/MoveToInbox';\r\nimport AccountCircleIcon from '@material-ui/icons/AccountCircle';\r\nimport PeopleIcon from '@material-ui/icons/People';\r\nimport ExitToApp from '@material-ui/icons/ExitToApp';\r\nimport CreditCardIcon from '@material-ui/icons/CreditCard';\r\nimport ErrorIcon from '@material-ui/icons/Error';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\nimport moment from 'moment'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n textColor: theme.palette.primary.contrast\r\n },\r\n appBar: {\r\n zIndex: theme.zIndex.drawer + 2,\r\n boxShadow: 'none',\r\n },\r\n link: {\r\n color: grey[800],\r\n '&:hover': {\r\n color: 'black',\r\n }\r\n },\r\n title: {\r\n borderStyle: 'solid',\r\n borderColor: theme.palette.grey[300],\r\n borderBottom: 0,\r\n borderTop: 0,\r\n borderLeft: 0,\r\n borderRightWidth: 1,\r\n paddingRight: 15\r\n },\r\n breadcrumbs: {\r\n flexGrow: 1,\r\n marginLeft: 20,\r\n alignContent: 'flex-end',\r\n },\r\n titleText: {\r\n color: theme.palette.appBar.contrast,\r\n display: 'inline-block',\r\n },\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(1),\r\n },\r\n toolbar: {\r\n backgroundColor: theme.palette.appBar.main,\r\n borderStyle: 'solid',\r\n borderColor: theme.palette.grey[200],\r\n borderBottomWidth: 1,\r\n borderTop: 0,\r\n borderLeft: 0,\r\n borderRight: 0,\r\n width: '100%'\r\n },\r\n accountMenu:{\r\n // color: 'white'\r\n },\r\n accountPopper: {\r\n // shadow: 'pink'\r\n },\r\n icon: {\r\n color: theme.palette.appBar.contrast,\r\n },\r\n errorIcon: {\r\n color: theme.palette.error.main \r\n },\r\n circle: {\r\n display: \"flex\",\r\n height: 50,\r\n width: 50,\r\n backgroundColor: theme.palette.appBar.contrast,\r\n borderRadius: 50,\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n '&:hover': {\r\n cursor: 'pointer'\r\n }\r\n },\r\n initials: {\r\n fontSize: '25px',\r\n color: theme.palette.appBar.main\r\n },\r\n message: {\r\n color: theme.palette.appBar.contrast,\r\n },\r\n nameAndCompanyBlock: {\r\n display: \"inline-block\",\r\n // backgroundColor: \"red\",\r\n height: \"100%\",\r\n paddingLeft: 10,\r\n verticalAlign: \"middle\"\r\n },\r\n}));\r\n\r\n\r\n\r\nfunction MenuAppBar(props) {\r\n const classes = useStyles();\r\n\r\n const {\r\n toggleFacilitySideBar, \r\n facilitySidebarOpen, \r\n selectedFacility,\r\n selectedProject,\r\n facilities,\r\n selectedFacilityView,\r\n activeUser,\r\n location,\r\n match,\r\n history\r\n } = props;\r\n\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n\r\n function handleClick(event) {\r\n setAnchorEl(event.currentTarget);\r\n }\r\n\r\n function handleClose() {\r\n setAnchorEl(null);\r\n }\r\n\r\n const open = Boolean(anchorEl);\r\n const id = open ? 'simple-popover' : undefined;\r\n\r\n let userInfo = JSON.parse(window.sessionStorage.user);\r\n let firstInitial = userInfo.firstName.charAt(0);\r\n let lastInitial = userInfo.lastName.charAt(0);\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n {/*{selectedFacility === null ? null :*/}\r\n {/* toggleFacilitySideBar(facilitySidebarOpen)} edge=\"start\" color=\"white\" className={classes.icon} aria-label=\"Menu\">*/}\r\n {/* */}\r\n {/* }*/}\r\n \"Logo\"\r\n \r\n \r\n React Energy \r\n PORTAL\r\n \r\n \r\n \r\n \r\n \r\n {moment(activeUser.subscription.trialPeriodEndDate).isAfter(moment()) ? \r\n
    \r\n Free trial ending {moment().to(moment(activeUser.subscription.trialPeriodEndDate))}!\r\n
    : null }\r\n
    \r\n {/**/}\r\n {/* */}\r\n {/**/}\r\n
    \r\n
    {firstInitial}{lastInitial}
    \r\n
    \r\n\r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    {firstInitial}{lastInitial}
    \r\n
    \r\n
    \r\n {userInfo.firstName} {userInfo.lastName}\r\n View Profile\r\n\r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n {/**/}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/**/}\r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n logout()} className={classes.link}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n );\r\n}\r\n\r\nexport default MenuAppBar;","import React, {Component} from 'react'\r\n\r\n// react Router\r\nimport { Link } from 'react-router-dom';\r\n\r\n//Material UI\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport blue from '@material-ui/core/colors/blue';\r\n\r\n\r\nconst styles = theme => ({\r\n root: {\r\n paddingTop: 40,\r\n paddingBottom: 15\r\n //backgroundColor: grey[50]\r\n },\r\n link: {\r\n paddingLeft: 5,\r\n paddingRight: 5,\r\n color: theme.palette.primary.main,\r\n '&:hover': {\r\n color: theme.palette.primary.dark,\r\n textDecoration: 'underline'\r\n }\r\n }\r\n\r\n});\r\n\r\nclass Footer extends Component {\r\n render() {\r\n const {classes} = this.props;\r\n return (\r\n \r\n © React Energy | Home | Terms of Service | Privacy Policy \r\n \r\n )\r\n \r\n\r\n }\r\n}\r\nexport default withStyles(styles)(Footer);\r\n\r\n","import React, {Component} from 'react'\r\nimport Paper from '@material-ui/core/Paper'\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst endUserLicenseAgreement = [\r\n {\r\n header: \"\",\r\n paragraphs: [\r\n
    IMPORTANT—PLEASE READ CAREFULLY:This End-User License Agreement\r\n is a legal contract between You and React Energy, (“Licensor” or “React”) that covers your use of\r\n the React Energy Application, which includes computer software and, as applicable, associated media,\r\n databases,\r\n printed materials, and “online” or electronic documentation (the “Software“).
    ,\r\n\r\n
    BY INSTALLING OR OTHERWISE USING THE SOFTWARE, YOU AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT AND\r\n THE ADDITIONAL TERMS FOUND ON poral.reactenergy.io/terms, INCLUDING THE WARRANTY DISCLAIMERS,\r\n LIMITATIONS OF\r\n LIABILITY AND TERMINATION PROVISIONS BELOW.
    ,\r\n\r\n
    IF YOU DO NOT AGREE TO THE TERMS OF THIS END USER LICENSE AGREEMENT AND/OR THE ADDITIONAL TERMS, DO NOT\r\n INSTALL OR USE THE SOFTWARE, AND EXIT NOW.
    ,\r\n\r\n
    IF YOU ARE NOT WILLING OR UNABLE TO ACCEPT THESE TERMS AND CONDITIONS, YOU SHOULD CLICK THE “DISAGREE”\r\n BUTTON BELOW. IF YOU DO NOT ACCEPT THESE TERMS YOU WILL NOT BE GRANTED ACCESS TO USE THE SOFTWARE OR THE\r\n LICENSOR WEB SITE (reactenergy.io, or the “SITE”).
    ,\r\n\r\n
    USE OF THE SOFTWARE WITHOUT SIGNIFYING YOUR AGREEMENT TO THESE TERMS IN THE MANNER INDICATED ABOVE IS\r\n STRICTLY PROHIBITED.
    \r\n\r\n ]\r\n },\r\n {\r\n header: 'ADDITIONAL TERMS',\r\n paragraphs: [\r\n
    This End User License Agreement, together with the Additional Terms, as they might change from\r\n time-to-time, shall constitute the entire agreement (collectively the Agreement).
    ,\r\n\r\n ]\r\n },\r\n {\r\n header: 'DISCLAIMER OF WARRANTIES',\r\n paragraphs: [\r\n
    THE SOFTWARE AND THE SITE ARE COPYRIGHTED AND LICENSED (NOT SOLD). THIS AGREEMENT REPRESENTS THE ENTIRE\r\n AGREEMENT CONCERNING THE SOFTWARE BETWEEN YOU AND LICENSOR, AND IT SUPERSEDES ANY PRIOR PROPOSAL,\r\n REPRESENTATION, OR UNDERSTANDING BETWEEN THE PARTIES.
    ,\r\n\r\n
    THE SOFTWARE IS LICENSED “WHERE IS” AND “AS IS,” AND LICENSOR DISCLAIMS ANY AND ALL WARRANTIES TO THE\r\n EXTENT PERMITTED BY LAW, WHETHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES AS TO THE\r\n ACCURACY, RELIABILITY, COMPLETENESS, OR CORRECTNESS OF THE SOFTWARE, AND OF ANY RESULTS.
    ,\r\n\r\n
    TO THE EXTENT PERMITTED BY LAW, LICENSOR DISCLAIMS, AMONG OTHERS, ANY IMPLIED WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND ALL WARRANTIES ARISING FORM COURSE OF DEALING OR\r\n USAGE OF TRADE.
    ,\r\n\r\n
    YOU ACKNOWLEDGE THAT THERE ARE RISKS INHERENT IN THE USE OF THE SOFTWARE, HARDWARE AND INTERNET\r\n CONNECTIVITY THAT MAY RESULT IN INTERRUPTIONS OR ERRORS IN THE SERVICE, LOSS OF PRIVACY,\r\n CONFIDENTIALITY, INFORMATION OR PROPERTY, AS WELL AS OTHER LOSSES, DAMAGES OR ADVERSE OCCURRENCES,\r\n REGARDLESS OF THE MEASURES TAKEN TO AVOID SUCH OCCURRENCES.
    ,\r\n\r\n
    IN NO EVENT WILL LICENSOR BE LIABLE TO YOU OR ANY THIRD PARTY IN CONTRACT, TORT, STRICT LIABILITY OR\r\n OTHERWISE, FOR ANY INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\r\n USE OF OR INABILITY TO USE THE SOFTWARE, AND LOST PROFITS OR DAMAGES\r\n EXTENDING FROM THE LOSS OR CORRUPTION OF DATA, EVEN IF LICENSOR HAS\r\n BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE LIMITATION OR\r\n EXCLUSION OF\r\n LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATION OR EXCLUSION MAY NOT APPLY TO\r\n YOU.
    \r\n\r\n ],\r\n },\r\n {\r\n header: 'LICENSE GRANT',\r\n paragraphs: [\r\n
    Licensor hereby grants to You, and You accept, a nonexclusive and nontransferable personal license to\r\n use the Software according to the terms set out herein. The license granted extends only to use of the\r\n Software in connection with services offered by Licensor. All other uses are strictly prohibited.
    ,\r\n\r\n
    The Software may only be used by You personally. Use by an individual other than yourself is not\r\n permitted without separate authorization from Licensor.
    ,\r\n\r\n
    Licensor reserves the right to refuse service, terminate accounts, remove or edit content, or cancel\r\n logins in its sole and absolute discretion.
    \r\n ]\r\n },\r\n {\r\n header: 'LICENSOR’S RIGHTS',\r\n paragraphs: [\r\n
    You acknowledge and agree that the Software is the proprietary property of Licensor and is protected\r\n under copyright and / or patent law both in the U.S. and in countries foreign thereto. You further\r\n acknowledge and agree that all right, title, and interest in and to the Software, including intellectual\r\n property rights associated therewith, are and shall remain with Licensor. This Agreement does not convey\r\n to You an interest in or to the Software, but only a limited right of use revocable in accordance with\r\n the terms of this Agreement.
    \r\n ]\r\n },\r\n {\r\n header: 'YOUR ACCOUNT',\r\n paragraphs: [\r\n
    You may be given an account and/or password that grants You access to the Software and/or additional\r\n features accessible through the Site. You are responsible for maintaining the confidentiality of your\r\n account or password. You may not transfer this account or the License granted hereunder to a third party\r\n without prior written consent of Licensor. You agree to accept full responsibility for all activities\r\n that occur under your account or password. Licensor reserves the right to refuse service, terminate\r\n accounts, remove or edit content, in its sole discretion.
    \r\n ]\r\n },\r\n {\r\n header: `RESTRICTIONS`,\r\n paragraphs: [\r\n
    You agree that You may not modify, adapt, translate, reverse engineer, or create derivative works based\r\n upon the Software or any part thereof. You also agree that You may not reverse assemble, reverse\r\n compile, or otherwise translate the Software or any portion thereof.
    ,\r\n\r\n
    You further agree that You will not assign, sublicense, transfer, pledge, lease, rent, loan, or share\r\n your rights under this Agreement.
    ,\r\n\r\n
    You still further agree that You may not use the Software for the direct benefit of, or for purpose of\r\n rendering services to, any third party business entities or organizations.
    \r\n ]\r\n },\r\n {\r\n header: `AMENDMENTS TO THE AGREEMENT`,\r\n paragraphs: [\r\n
    Licensor may amend this Agreement at any time by posting the amended terms on the Site at\r\n reactenergy.io/terms. Except as stated elsewhere, all amended terms shall automatically be\r\n effective 30\r\n days after they are initially posted. Additionally, we will endeavor to notify You of any such change\r\n using the contact information that You provided to us when You register on the site.
    \r\n ]\r\n },\r\n\r\n];\r\n\r\nconst additionalTerms = [\r\n {\r\n header: \"TERM\",\r\n paragraphs: [\r\n
    This Agreement is effective upon your acceptance of its terms and conditions and your successful\r\n activation of the Software, and shall continue until terminated. Either party may terminate this\r\n Agreement at any time upon thirty (30) days advance written notice to the other party. Licensor may\r\n terminate this Agreement with or without notice to You at any time and for any reason.
    ,\r\n ]\r\n },\r\n {\r\n header: 'DISPUTE RESOLUTION',\r\n paragraphs: [\r\n
    This Agreement shall be governed in all respects by the laws of the State of Texas as they apply to\r\n agreements entered into and to be performed entirely within Texas between Texas residents, without\r\n regard to conflict of law provisions. You agree that any claim or dispute You may have against Licensor\r\n must be resolved by a court located in Tarrant County, Texas, except as otherwise agreed by the parties.\r\n You agree to submit to the personal jurisdiction of the courts located within Tarrant County, Texas, for\r\n the purpose of litigating all such claims or disputes.
    ,\r\n\r\n ]\r\n },\r\n {\r\n header: 'NO AGENCY',\r\n paragraphs: [\r\n
    No agency, partnership, joint venture, employee-employer or franchiser-franchisee relationship is\r\n intended or created by this Agreement.
    ,\r\n\r\n ],\r\n },\r\n {\r\n header: 'AMENDMENTS TO THE AGREEMENT',\r\n paragraphs: [\r\n
    Licensor may amend this Agreement at any time by posting the amended terms on the Site at\r\n portal.reactenergy.io/terms. Except as stated elsewhere, all amended terms shall automatically be\r\n effective 30 days after they are initially posted. Additionally, we will endeavor to notify You of any\r\n such change using the contact information that You provided to us when You register on the site.
    ,\r\n\r\n
    This Agreement may not be otherwise amended except in a writing signed by You and Licensor. This\r\n Agreement sets forth the entire understanding and agreement between us with respect to the subject\r\n matter hereof. The following Sections survive any termination of this Agreement: Disclaimers, Release,\r\n Liability, Indemnity, Restrictions, Dispute Resolution, and Proprietary Information.
    ,\r\n ]\r\n },\r\n {\r\n header: 'LIMITATION OF LIABILITY',\r\n paragraphs: [\r\n
    Licensor’s cumulative liability to You or any other party for any loss or damages resulting from any\r\n claims, demands, or actions arising out of or relating to this Agreement or the Software shall not\r\n exceed the license fee paid to Licensor for the use of the Software and Site, if any.
    ,\r\n\r\n
    Under no circumstances shall Licensor be responsible for user error including, but not limited to,\r\n erroneous data input, misuse of the Software or Site, incorrect interpretation of data or missing data.\r\n Licensor shall additionally not be responsible for errors in the transmission or storage of your data\r\n that are beyond its control or supervision.
    \r\n ]\r\n },\r\n {\r\n header: 'PRIVACY POLICY',\r\n paragraphs: [\r\n
    When You create your login as a prerequisite to using the Software and the Site, Licensor will ask You\r\n to provide certain personal information which will be stored and retained by Licensor. Additionally,\r\n certain information and data that is obtained before and/or during tests performed using the Software\r\n may be transmitted to Licensor and stored. All information and data collected by Licensor is owned and\r\n used by Licensor and Licensor reserves the right to use the information and data for any internal\r\n purpose.
    ,\r\n\r\n
    Information that is collected in aggregate is information that is not tied to any particular user. This\r\n sort of information is primarily used for internal purposes in evaluating and improving the\r\n effectiveness of the Software and the databases it utilizes. Licensor may, at its sole discretion, share\r\n this aggregate information with third parties.
    ,\r\n\r\n
    Licensor uses the information that You provide for purposes such as responding to your requests,\r\n improving our products, helping us serve you better, and communicating with you.
    ,\r\n\r\n
    Licensor will not share your personal information with any third party without your prior permission,\r\n except in response to an order from a court of competent jurisdiction or in similar circumstances.\r\n Licensor may use your e-mail and physical addresses to send information to you that we think might be of\r\n interest to you.
    ,\r\n\r\n
    Licensor will not sell, rent, swap or authorize any third party to use the information or data in a way\r\n that personally identifies You without your permission. If you have additional questions about\r\n Licensor’s privacy policy, refer to portal.reactenergy.io/privacy and/or contact Licensor\r\n directly.
    \r\n ]\r\n },\r\n {\r\n header: `PROPRIETARY INFORMATION`,\r\n paragraphs: [\r\n
    The Software and all information and materials related thereto constitute proprietary information and\r\n trade secrets of Licensor. You shall use your best efforts to insure the confidentiality of the Software\r\n and all related materials and information supplied by Licensor.
    ,\r\n\r\n
    You warrant that You will not disclose, use, modify, copy, or reproduce the Software or any of the\r\n information or materials supplied by Licensor except in accordance with this Agreement or after first\r\n obtaining the written permission of Licensor.
    ,\r\n\r\n
    You specifically agree to prevent your employees, agents, attorneys and representatives, if any, from\r\n disclosing such proprietary information and shall hold Licensor harmless and protect and indemnify\r\n Licensor in the event of any disclosure by such persons.
    ,\r\n\r\n
    The non-disclosure provisions of this section shall continue beyond the term of the contract and shall\r\n be binding and enforceable even after termination of this Agreement.
    \r\n ]\r\n },\r\n {\r\n header: `INDEMNITY`,\r\n paragraphs: [\r\n
    You will indemnify and hold us (including our officers, directors, agents, subsidiaries, joint ventures\r\n and employees), harmless from any claim or demand, including reasonable attorneys’ fees, made by any\r\n third party due to or arising out of your breach of this Agreement, or your violation of any law or the\r\n rights of a third party using the Software.
    \r\n ]\r\n },\r\n {\r\n header: `GOVERNING LAW`,\r\n paragraphs: [\r\n
    This Agreement shall be construed and governed in accordance with the laws of the State of Texas,\r\n without regard to the choice of law provisions of that state, and all actions, regardless of the form or\r\n nature of such, to enforce this license or for the breach of same shall be brought within on (1) year\r\n from the occurrence of the grounds for such action in either state or federal court in Tarrant County,\r\n Texas.
    \r\n ]\r\n },\r\n {\r\n header: `COSTS OF LITIGATION`,\r\n paragraphs: [\r\n
    If any action is brought by either party to this Agreement against the other party regarding the\r\n subject matter hereof, the prevailing party shall be entitled to recover, in addition to any other\r\n relief granted, reasonable attorney fees and expenses of litigation.
    \r\n ]\r\n },\r\n {\r\n header: `SEVERABILITY`,\r\n paragraphs: [\r\n
    Should any term of this Agreement be declared void or unenforceable by any court of competent\r\n jurisdiction, such declaration shall have no effect on the remaining terms hereof.
    \r\n ]\r\n },\r\n {\r\n header: `NO WAIVER`,\r\n paragraphs: [\r\n
    The failure of either party to enforce any rights granted hereunder or to take action against the other\r\n party in the event of any breach hereunder shall not be deemed a waiver by that party as to subsequent\r\n enforcement of rights or subsequent actions in the event of future breaches.
    ,\r\n\r\n
    It is specifically agreed that the breach of this Agreement, and in particular the section concerning\r\n non-disclosure of proprietary information, will result in irreparable injury and the party who claims\r\n such a breach shall be entitled to specific performance and injunctive relief to correct and enjoin such\r\n breach in addition to all other remedies which might be available.
    \r\n ]\r\n },\r\n {\r\n header: `CANCELLATION/REFUND POLICY`,\r\n paragraphs: [\r\n
    If you are not satisfied with any React product purchased directly from React (reactenergy.io), contact\r\n support@reactenergy.io within 30 days of your purchase to inquire about a refund or to cancel your\r\n account. Refunds requested more than 30 days following a purchase will not be issued.
    ,\r\n\r\n //
    The React refund policy applies only to accounts purchased through reactenergy.io or directly from the\r\n // React Energy sales team. If you purchased React through a third party, any request for cancellation or\r\n // refund must be made through the third party from which it was purchased.
    \r\n ]\r\n },\r\n\r\n];\r\n\r\nclass TermsOfUseContent extends Component {\r\n render() {\r\n return (\r\n\r\n \r\n \r\n END USER LICENSE AGREEMENT\r\n \r\n {endUserLicenseAgreement.map(section => (\r\n
    \r\n \r\n {section.header}\r\n \r\n {section.paragraphs.map(paragraph => (\r\n
    \r\n \r\n {paragraph}\r\n \r\n
    \r\n\r\n ))}\r\n
    \r\n\r\n ))}\r\n \r\n TERMS\r\n \r\n {additionalTerms.map(section => (\r\n
    \r\n \r\n {section.header}\r\n \r\n {section.paragraphs.map(paragraph => (\r\n
    \r\n \r\n {paragraph}\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 TermsOfUseContent","import React, {Component} from 'react'\r\nimport Paper from '@material-ui/core/Paper'\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport TermsOfUseContent from \"./TermsContent_2_18_2020\";\r\n\r\n// const content = [\r\n// {\r\n// header: \"Website Terms of Service\",\r\n// paragraphs: [\r\n// `These Terms of Use, (“Terms”) govern your use of the website reactenergy.io (the “Website”) and shall include all pages within the Website which is owned by React Energy. These Terms apply to your use of the Website and by using the Website, you expressly accept all terms and conditions contained herein in full. If you object to any of the Terms you must stop using the Website by closing or otherwise navigating away from the Website.`,\r\n// `Your use of any React Energy mobile software or the React Energy Portal (portal.reactenergy.io) is governed by further terms and conditions provided separately when accessing the React Energy software or React Energy Portal.`,\r\n// `This Website is not for use by any minors (defined as those who are not at least 18 years of age), and you must not use this Website if you a minor.`\r\n//\r\n// ]\r\n// },\r\n// {\r\n// header: 'Intellectual Property Rights',\r\n// paragraphs: [\r\n// `Unless otherwise specified, React Energy owns all rights to the intellectual property and material\r\n// contained in this Website, and all such rights are reserved. You are granted a limited license\r\n// only, subject to the restrictions provided in these Terms, for purposes of viewing the material\r\n// contained on this Website.`,\r\n// \r\n// ]\r\n// },\r\n// {\r\n// header: 'Restrictions',\r\n// paragraphs: [\r\n// `Unless otherwise agreed in writing, you are expressly restricted from any and all of the following:`\r\n// ],\r\n// list: [\r\n// `Copying or reproducing any of the Website material;`,\r\n// `Publishing any Website material in any media;`,\r\n// `Selling, sublicensing and/or otherwise commercializing any Website material;`,\r\n// `publicly performing and/or showing any Website material;`,\r\n// `Using this Website in any way that is, or may be, damaging to this Website or React Energy;`,\r\n// `Using this Website in any way that impacts user access to this Website;`,\r\n// `Using this Website contrary to applicable laws and regulations, or in a way that causes, or\r\n// may cause, harm to the Website, or to any person or business entity;`,\r\n// `Engaging in any data mining, data harvesting, data extracting or any other similar activity in\r\n// relation to this Website, or while using this Website;`,\r\n// `Using this Website to engage in any advertising or marketing;`\r\n// ]\r\n// },\r\n// {\r\n// header: 'No Warranties',\r\n// paragraphs: [\r\n// `This Website is provided “as is,” with all faults, and React Energy makes no express or implied\r\n// representations or warranties, of any kind related to this Website or the materials contained on\r\n// this Website. Additionally, nothing contained on this Website shall be construed as providing\r\n// consultation or advice to you. Any price information provided on this site is informational only\r\n// and is not binding on any party unless and until agreed in writing by React Energy.`\r\n// ]\r\n// },\r\n// {\r\n// header: 'Limitation of Liability',\r\n// paragraphs: [\r\n// `In no event shall React Energy, nor any of its officers, directors, employees, consultants and advisors,\r\n// be liable to you for anything arising out of or in any way connected with your use of the\r\n// Website, whether such liability is under contract, tort or otherwise. Further, React Energy, including\r\n// its officers, directors and employees shall not be liable for any indirect, consequential or special\r\n// liability arising out of or in any way related to your use of this Website.`\r\n// ]\r\n// },\r\n// {\r\n// header: 'Indemnification',\r\n// paragraphs: [\r\n// `You hereby indemnify to the fullest extent React Energy from and against any and all liabilities, costs,\r\n// demands, causes of action, damages and expenses (including reasonable attorney’s fees)\r\n// arising out of or in any way related to your breach of any of the provisions of these Terms.`\r\n// ]\r\n// },\r\n// {\r\n// header: `Severability`,\r\n// paragraphs: [\r\n// `If any provision of these Terms is found to be unenforceable or invalid under any applicable\r\n// law, such unenforceability or invalidity shall not render these Terms unenforceable or invalid as\r\n// a whole, and such provisions shall be deleted without affecting the remaining provisions herein.`\r\n// ]\r\n// },\r\n// {\r\n// header: `Updates to Terms`,\r\n// paragraphs: [\r\n// `React Energy may revise these Terms at any time and by using this Website you are expected to\r\n// review such Terms on a regular basis to ensure you understand all terms and conditions\r\n// governing use of this Website.`\r\n// ]\r\n// },\r\n// {\r\n// header: 'Assignment',\r\n// paragraphs: [\r\n// `React Energy shall be permitted to assign, transfer, and subcontract its rights and/or obligations\r\n// under these Terms without any notification or consent required. However, you shall not be\r\n// permitted to assign, transfer, or subcontract any of your rights and/or obligations under these\r\n// Terms.`\r\n// ]\r\n// },\r\n// {\r\n// header: 'Entire Agreement',\r\n// paragraphs: [\r\n// `Unless otherwise agreed in writing, these Terms, including any legal notices and disclaimers\r\n// contained on this Website, constitute the entire agreement between you and React Energy in\r\n// relation to your use of this Website, and supersede all prior agreements and understandings\r\n// with respect to the same.`\r\n// ]\r\n// },\r\n// {\r\n// header: 'Governing Law & Jurisdiction',\r\n// paragraphs: [\r\n// `These Terms will be governed by and construed in accordance with the laws of the State of\r\n// Texas, and you submit to the exclusive jurisdiction of the state and federal courts located in\r\n// Tarrant County, Texas for the resolution of any disputes.`\r\n// ]\r\n// }\r\n// \r\n// ]\r\n\r\nclass TermsOfUse extends Component {\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\n}\r\n\r\nexport default TermsOfUse","import React, {Component} from 'react'\r\n\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport CustomOutlinedInput from \"../Inputs/CustomOutlinedInput\";\r\n\r\nconst styles = theme => ({\r\n textField: {\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n width: 400,\r\n },\r\n});\r\n\r\nclass ReportBug extends Component {\r\n \r\n \r\n render() {\r\n const {classes, handleChange, fields} = 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\n\r\nexport default withStyles(styles)(ReportBug)","\r\nconst ORGANIZATION_MOUNTED = 'ORGANIZATION_MOUNTED';\r\nconst PAYMENT_METHODS_MOUNTED = 'PAYMENT_METHODS_MOUNTED';\r\nconst TOGGLE_STRIPE_DIALOG = 'TOGGLE_STRIPE_DIALOG';\r\nconst ADD_ORGANIZATION_SUBSCRIPTION = 'ADD_ORGANIZATION_SUBSCRIPTION';\r\nconst CHANGE_THEME = 'CHANGE_THEME';\r\n\r\nconst addOrganizationToState = (organization) => {\r\n return {\r\n type: ORGANIZATION_MOUNTED,\r\n payload: organization\r\n };\r\n};\r\n\r\nconst addPaymentMethodsToState = (paymentMethods) => {\r\n return {\r\n type: PAYMENT_METHODS_MOUNTED,\r\n payload: paymentMethods\r\n };\r\n};\r\n\r\nconst toggleStripeCreditCardDialog = (currentState) => {\r\n return {\r\n type: TOGGLE_STRIPE_DIALOG,\r\n payload: currentState\r\n };\r\n};\r\n\r\nconst addOrganizationSubscription = (subscription) => {\r\n return {\r\n type: ADD_ORGANIZATION_SUBSCRIPTION,\r\n payload: subscription\r\n };\r\n};\r\n\r\nconst changeTheme = (primaryColor) => {\r\n return {\r\n type: CHANGE_THEME,\r\n payload: primaryColor\r\n };\r\n};\r\n\r\nexport {\r\n addOrganizationToState,\r\n addPaymentMethodsToState,\r\n toggleStripeCreditCardDialog,\r\n addOrganizationSubscription,\r\n changeTheme,\r\n ORGANIZATION_MOUNTED,\r\n PAYMENT_METHODS_MOUNTED,\r\n TOGGLE_STRIPE_DIALOG,\r\n ADD_ORGANIZATION_SUBSCRIPTION,\r\n CHANGE_THEME\r\n}","import React, {Component} from 'react'\r\nimport Paper from '@material-ui/core/Paper'\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst privacy = [\r\n {\r\n header: \"\",\r\n paragraphs: [\r\n
    This Privacy Policy is incorporated by reference into the React Energy Terms of Service (the\r\n \"Terms\"). The term \"React Energy,\" \"we,\" and \"us\" includes React Energy and our affiliates and\r\n subsidiaries. The Privacy Policy explains React Energy may collect, use, and disclose information we\r\n obtain through the Services. All other terms not defined herein will have the meanings set forth in the\r\n Terms.
    ,\r\n\r\n
    \"Personal Information\" means information that alone or when in\r\n combination with other information may be used to readily identify, contact, or locate you or your\r\n customers or potential customers, such as: name, address, email address, or phone number. We do not\r\n consider Personal Information to include information that has been anonymized so that it does not allow\r\n a third party to easily identify a specific individual.
    ,\r\n ]\r\n },\r\n {\r\n header: 'THE SERVICES COLLECT YOUR INFORMATION',\r\n paragraphs: [\r\n
    We collect Personal Information when you:\r\n\r\n
      \r\n
    • register to use the Services;
    • \r\n
    • use the Services; and
    • \r\n
    • communicate with us.
    • \r\n
    \r\n We also collect information, such as anonymous usage statistics, by using cookies, server logs, and\r\n other similar technology as you use the Services.
    ,\r\n\r\n
    Personal Information Collection. You must register to use the Services.\r\n To register, you may need to provide Personal Information, such as your name, phone number, and email\r\n address. You may also provide information about your company, your company’s address. To add users to\r\n your account, you will have to provide us with Personal Information about such users, including their\r\n names and email addresses. If you are adding users to your account, then you represent and warrant you\r\n have the right to provide those users’ Personal Information to us.
    ,\r\n\r\n
    Using the Service. We collect information when you use the Services.\r\n For\r\n example, when you create a meter, we will collect the information you submit for inclusion in the\r\n meter, including any Personal Information.
    ,\r\n\r\n
    Making Payments. When you make payments through the Services, you may\r\n need to provide Personal Information to our third-party service providers, such as your credit card\r\n number.
    ,\r\n
    Customer Support. We may collect Personal Information through your\r\n communications with our customer-support team.
    ,\r\n\r\n
    Cookies, Automatic Data Collection, and Related Technologies. The\r\n Services collect and stores information that is generated automatically as you use it, including your\r\n preferences and anonymous usage statistics.
    ,\r\n\r\n
    When you visit the Services, we and our third-party service providers receive and record information on\r\n our server logs from your browser, including your IP address, and from cookies and similar technology.\r\n Cookies are small text files placed in visitors’ computer browsers to store their preferences. Most\r\n browsers allow you to block and delete cookies. However, if you do that, the Services may not work\r\n properly.
    ,\r\n\r\n
    By using the Services, you are authorizing us to gather, parse, and retain data related to the\r\n provision of the Services.
    ,\r\n\r\n ]\r\n },\r\n {\r\n header: 'HOW REACT ENERGY USES YOUR INFORMATION',\r\n paragraphs: [\r\n
    We use Personal Information to:\r\n\r\n
      \r\n
    • facilitate and improve our services; and
    • \r\n
    • communicate with you.
    • \r\n\r\n
    \r\n We may use aggregate information for any purpose, including for marketing purposes.
    ,\r\n\r\n
    Internal and Services-Related Usage. We use information, including\r\n Personal Information, for internal and service-related purposes only and may provide it to third parties\r\n to allow us to facilitate the Services. We may use and retain any data we collect to provide and improve\r\n our services.
    ,\r\n\r\n
    Communication. We may send email to the email address you provide to us\r\n to verify your account and for informational and operational purposes, such as account management,\r\n customer service, or system maintenance.
    ,\r\n\r\n
    Marketing. We may use information, including Personal Information, to\r\n facilitate transmittal of information that may be useful, relevant, valuable or otherwise of interest to\r\n you.
    ,\r\n
    Aggregate Data. We may anonymize and aggregate data collected through\r\n the Services and use it for any purpose.
    ,\r\n\r\n ]\r\n },\r\n {\r\n header: 'REACT ENERGY MAY DISCLOSE YOUR INFORMATION',\r\n paragraphs: [\r\n
    We may share your information:\r\n\r\n
      \r\n
    • with our third-party service providers;
    • \r\n
    • to comply with legal obligations;
    • \r\n
    • to protect and defend our rights and property; and
    • \r\n
    • with your permission.
    • \r\n\r\n
    \r\n We do not rent, sell, or share Personal Information about you with other people or nonaffiliated\r\n companies for their direct marketing purposes, unless we have your permission.
    ,\r\n\r\n
    We Use Vendors and Service Providers. We may share any information we\r\n receive with vendors and service providers retained in connection with the provision of the Services.\r\n
    ,\r\n\r\n
    Displaying to Other Users. The content you post to the Services may be\r\n displayed on the Services. Other users associated with your account will be able to see your contact\r\n information and, if you are given editing permissions, any revisions, additions or edits you make to a\r\n proposal. We are not responsible for privacy practices of the other users who will view and use the\r\n posted information.
    ,\r\n\r\n
    Marketing. We do not rent, sell, or share Personal Information about\r\n you with other people or nonaffiliated companies for their direct marketing purposes, unless we have\r\n your permission. We may allow access to other data collected by the Services to enable facilitate\r\n transmittal of information that may be useful, relevant, valuable or otherwise of interest to you.\r\n
    ,\r\n
    As Required By Law and Similar Disclosures. We may access, preserve,\r\n and disclose your Personal Information, other account information, and content if we believe doing so is\r\n required or appropriate to: comply with law enforcement requests and legal process, such as a court\r\n order or subpoena; respond to your requests; or protect yours’, ours’ or others’ rights, property, or\r\n safety.
    ,\r\n\r\n
    Merger, Sale, or Other Asset Transfers. If we are involved in a merger,\r\n acquisition, financing due diligence, reorganization, bankruptcy, receivership, sale of company assets,\r\n or transition of service to another provider, then your information may be sold or transferred as part\r\n of such a transaction as permitted by law and/or contract. The use of your Personal Information\r\n following any of the foregoing events should be governed by the provisions of this Privacy Policy in\r\n effect at the time such Personal Information was collected.
    ,\r\n\r\n
    We may also disclose your Personal Information with your permission.
    \r\n\r\n ]\r\n },\r\n {\r\n header: 'SECURITY OF YOUR INFORMATION',\r\n paragraphs: [\r\n
    We take steps to ensure that your information is treated securely and in accordance with this Privacy\r\n Policy. Unfortunately, the Internet cannot be guaranteed to be 100% secure, and we cannot ensure or\r\n warrant the security of any information you provide to us. We do not accept liability for unintentional\r\n disclosure.
    ,\r\n\r\n
    By using the Services or providing Personal Information to us, you agree that we may communicate with\r\n you electronically regarding security, privacy, and administrative issues relating to your use of the\r\n Services. If we learn of a security system’s breach, we may attempt to notify you electronically by\r\n posting a notice on the Services or sending an e-mail to you. You may have a legal right to receive this\r\n notice in writing. To receive free written notice of a security breach (or to withdraw your consent from\r\n receiving electronic notice), please notify us at contactus@reactenergy.io.\r\n
    ,\r\n ]\r\n },\r\n {\r\n header: 'CHILDREN’S PRIVACY',\r\n paragraphs: [\r\n
    We do not knowingly collect, maintain, or use Personal Information from children under 13 years of age,\r\n and no part of the Services is directed to children under the age of 13. If you learn that your child\r\n has provided us with Personal Information without your consent, you may alert us at\r\n contactus@reactenergy.io. If we learn that we have collected any Personal Information from\r\n children under 13, we will promptly take steps to delete such information and terminate the child’s\r\n account.
    ,\r\n ],\r\n },\r\n {\r\n header: 'UPDATE YOUR INFORMATION OR POSE A QUESTION OR SUGGESTION',\r\n paragraphs: [\r\n\r\n
    If you would like to update or correct any information that you have provided to us through your use of\r\n the Services or otherwise, or if you have suggestions for improving this Privacy Policy, please send an\r\n e-mail to contactus@reactenergy.io.
    ,\r\n\r\n ],\r\n },\r\n {\r\n header: 'CHANGES TO OUR PRIVACY POLICY AND PRACTICES',\r\n paragraphs: [\r\n\r\n
    Posting of Revised Privacy Policy. We will post any adjustments to the\r\n Privacy Policy on this web page, and the revised version will be effective when it is posted. If you are\r\n concerned about how your information is used, bookmark this page and read this Privacy Policy\r\n periodically.
    ,\r\n\r\n
    New Uses of Personal Information. From time to time, we may desire to\r\n use Personal Information for uses not previously disclosed in our Privacy Policy. If our practices\r\n change regarding previously collected Personal Information in a way that would be materially less\r\n restrictive than stated in the version of this Privacy Policy in effect at the time we collected the\r\n information, we will make reasonable efforts to provide notice and obtain consent to any such uses as\r\n may be required by law.
    ,\r\n\r\n ],\r\n },\r\n];\r\n\r\n\r\nclass PrivacyContent extends Component {\r\n render() {\r\n return (\r\n\r\n \r\n \r\n PRIVACY POLICY\r\n \r\n {privacy.map(section => (\r\n
    \r\n \r\n {section.header}\r\n \r\n {section.paragraphs.map(paragraph => (\r\n
    \r\n \r\n {paragraph}\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 PrivacyContent","import React, {Component} from 'react'\r\nimport Paper from '@material-ui/core/Paper'\r\nimport Grid from '@material-ui/core/Grid';\r\nimport PrivacyContent from \"./PrivacyContent\";\r\n\r\nclass Privacy extends Component {\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\n}\r\n\r\nexport default Privacy","import React from 'react';\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\nexport default function StillThereDialog(props) {\r\n\r\n \r\n const {open, toggleStillThereDialog, onSubmit, secondsLeft} = props;\r\n\r\n return (\r\n \r\n Are you still working?\r\n \r\n \r\n If you are done working, you will be logged out in {secondsLeft} seconds.\r\n \r\n \r\n \r\n {/**/}\r\n \r\n \r\n \r\n );\r\n}","/* eslint-disable */\r\nimport React, {Component, Fragment} from \"react\";\r\n\r\n// Routing\r\nimport PrivateRoute from \"components/PrivateRoute\";\r\nimport { Switch } from 'react-router-dom';\r\n\r\n// Redux\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { toggleFacilitySideBar, selectFacility } from '../redux/actions/facility-actions'\r\nimport { selectProject } from '../redux/actions/project-actions'\r\nimport {openSnackbar, setSnackbar} from \"../redux/actions/HomeActions/home-actions\";\r\n\r\n\r\n// Containers\r\nimport DashboardContainer from '../Dashboard/containers/DashboardContainer.jsx';\r\nimport ProjectHomeContainer from '../ProjectHome/containers/ProjectHomeContainer.jsx';\r\nimport FacilityHomeContainer from '../FacilityHome';\r\nimport OrganizationSettingsContainer from '../OrganizationSettings/containers/OrganizationSettingsContainer';\r\n\r\n//Components\r\nimport AccountHome from '../Account/Components/AccountHome';\r\n\r\n// Components\r\nimport TopNavbar from '../components/Navbars/TopNavbar.jsx'\r\nimport Footer from '../components/Footer/Footer'\r\nimport TermsOfUse from '../Legal/TermsOfUse'\r\n\r\n\r\n// Material UI\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport { createMuiTheme } from '@material-ui/core/styles';\r\nimport { MuiThemeProvider } from '@material-ui/core/styles'\r\nimport Fab from '@material-ui/core/Fab';\r\n\r\nimport blue from '@material-ui/core/colors/blue';\r\nimport orange from '@material-ui/core/colors/orange';\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport Icon from \"@material-ui/core/Icon\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport CustomDialog from \"../components/Dialogs/customDialog\";\r\nimport ReportBug from \"../components/ReportBug\";\r\nimport validate from \"../js/validate\";\r\nimport CustomSnackbar from \"../components/Snackbar/CustomSnackbar\";\r\n\r\n//services\r\nimport {getUser, submitFeedback, refreshToken, logout} from '../services/user.service';\r\nimport {setActiveUser} from \"../redux/actions/user-actions\";\r\nimport {addOrganizationSubscription, changeTheme} from \"../redux/actions/admin-actions\";\r\nimport ActivateSubscription from \"../Account/Components/Subscription/Activate Subscription\";\r\nimport {getOrganizationSubscription} from \"../services/admin.service\";\r\nimport Privacy from \"../Legal/Privacy\";\r\nimport StillThereDialog from \"../components/StillThereDialog\";\r\nimport GreenButton from \"../components/CustomButtons/GreenButton\";\r\n\r\nconst theme2 = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: blue[500]\r\n // main: '#000147'\r\n },\r\n secondary: {\r\n main: orange[800]\r\n },\r\n background: {\r\n default: '#ffffff'\r\n // default: '#ffffff'\r\n },\r\n text: {\r\n primary: grey[800],\r\n }\r\n },\r\n status: {\r\n danger: 'orange',\r\n },\r\n typography: {\r\n // fontSize: 14,\r\n },\r\n});\r\n\r\nconst theme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: blue[500]\r\n // main: '#000147'\r\n },\r\n secondary: {\r\n main: orange[800],\r\n contrast: '#ffffff'\r\n },\r\n background: {\r\n default: '#ffffff',\r\n grey: grey[200],\r\n sidebar: grey[50],\r\n // default: '#ffffff'\r\n // default: '#ffffff'\r\n },\r\n warning: {\r\n light: '#ffb74d',\r\n main: '#ff9800',\r\n dark: '#f57c00',\r\n contrast: '#fff'\r\n },\r\n success: {\r\n light: '#81c784',\r\n main: '#4caf50',\r\n dark: '#388e3c',\r\n contrast: '#fff'\r\n },\r\n text: {\r\n primary: grey[800],\r\n formLabel: grey[600],\r\n },\r\n common: {\r\n black: \"#000\",\r\n white: \"#fff\",\r\n },\r\n appBar: {\r\n main: '#fff',\r\n contrast: grey[700],\r\n // main: '#673ab7',\r\n // contrast: '#fff',\r\n },\r\n subTitleBar: {\r\n main: '#f5f5f5',\r\n },\r\n border: {\r\n main: '#e8e8e8',\r\n bottomGreyBorder: '1px solid ' + grey[300], \r\n },\r\n button: {\r\n green: {\r\n main: '#59C894',\r\n contrast: '#fff',\r\n hover: '#3bb37b'\r\n },\r\n disabled: grey[200]\r\n },\r\n icons: {\r\n grey: grey[400]\r\n }\r\n \r\n },\r\n status: {\r\n danger: 'orange',\r\n },\r\n typography: {\r\n // fontSize: 14,\r\n },\r\n});\r\n\r\nconst theme3 = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: '#3c5574'\r\n // main: '#000147'\r\n },\r\n secondary: {\r\n main: '#c96500',\r\n contrast: '#ffffff'\r\n },\r\n background: {\r\n default: grey[50]\r\n // default: '#ffffff'\r\n },\r\n warning: {\r\n light: '#ffb74d',\r\n main: '#ff9800',\r\n dark: '#f57c00',\r\n contrast: '#fff'\r\n },\r\n success: {\r\n light: '#81c784',\r\n main: '#4caf50',\r\n dark: '#388e3c',\r\n contrast: '#fff'\r\n },\r\n text: {\r\n primary: grey[800],\r\n },\r\n common: {\r\n black: \"#000\",\r\n white: \"#fff\",\r\n },\r\n appBar: {\r\n main: '#3c5574',\r\n contrast: '#fff',\r\n // main: '#673ab7',\r\n // contrast: '#fff',\r\n }\r\n\r\n },\r\n status: {\r\n danger: 'orange',\r\n },\r\n typography: {\r\n // fontSize: 14,\r\n },\r\n});\r\n\r\n// burnt orange\r\nconst theme4 = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: '#c96500'\r\n // main: '#000147'\r\n },\r\n secondary: {\r\n main: '#3c5574',\r\n contrast: '#ffffff'\r\n },\r\n background: {\r\n default: grey[50]\r\n // default: '#ffffff'\r\n },\r\n warning: {\r\n light: '#ffb74d',\r\n main: '#ff9800',\r\n dark: '#f57c00',\r\n contrast: '#fff'\r\n },\r\n success: {\r\n light: '#81c784',\r\n main: '#4caf50',\r\n dark: '#388e3c',\r\n contrast: '#fff'\r\n },\r\n text: {\r\n primary: grey[800],\r\n },\r\n common: {\r\n black: \"#000\",\r\n white: \"#fff\",\r\n },\r\n appBar: {\r\n main: '#c96500',\r\n contrast: '#fff',\r\n // main: '#673ab7',\r\n // contrast: '#fff',\r\n }\r\n\r\n },\r\n status: {\r\n danger: 'orange',\r\n },\r\n typography: {\r\n // fontSize: 14,\r\n },\r\n});\r\n\r\n//Aggie Maroon\r\nconst theme5 = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: '#500000'\r\n // main: '#000147'\r\n },\r\n secondary: {\r\n main: '#3c5574',\r\n contrast: '#ffffff'\r\n },\r\n background: {\r\n default: grey[50]\r\n // default: '#ffffff'\r\n },\r\n warning: {\r\n light: '#ffb74d',\r\n main: '#ff9800',\r\n dark: '#f57c00',\r\n contrast: '#fff'\r\n },\r\n success: {\r\n light: '#81c784',\r\n main: '#4caf50',\r\n dark: '#388e3c',\r\n contrast: '#fff'\r\n },\r\n text: {\r\n primary: grey[800],\r\n },\r\n common: {\r\n black: \"#000\",\r\n white: \"#fff\",\r\n },\r\n appBar: {\r\n main: '#500000',\r\n contrast: '#fff',\r\n // main: '#673ab7',\r\n // contrast: '#fff',\r\n }\r\n\r\n },\r\n status: {\r\n danger: 'orange',\r\n },\r\n typography: {\r\n // fontSize: 14,\r\n },\r\n});\r\n\r\nconst styles = theme => ({\r\n root: {\r\n display: 'flex',\r\n //backgroundColor: grey[50]\r\n },\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(0),\r\n \r\n },\r\n toolbar: theme.mixins.toolbar,\r\n fab: {\r\n position: 'fixed',\r\n bottom: theme.spacing(2),\r\n right: theme.spacing(2),\r\n },\r\n});\r\n\r\nconst timoutWarningDelay = 30;\r\nconst timoutNowDelay = 1;\r\n\r\n// Set timeout variables.\r\nconst timoutWarning = 1000 * 60 * timoutWarningDelay; // Display warning in 45 seconds.\r\nconst timoutNow = 1000 * 60 * timoutNowDelay; // Warning has been shown, give the user 20 seconds to interact\r\n\r\nlet warningTimer;\r\nlet timeoutTimer;\r\nlet timeoutWarningSecondsDisplayInterval;\r\n\r\nclass HomeFunc extends Component {\r\n \r\n state = {\r\n reportBug: {\r\n open: false,\r\n content: {\r\n subject: null,\r\n message: null,\r\n }\r\n },\r\n snackbar: {\r\n open: false,\r\n content: null,\r\n variant: null,\r\n },\r\n userSubscriptionIsActive: false,\r\n stillThereDialog: false,\r\n confirmedStillThere: false,\r\n secondsTillLogout: null,\r\n secondsLeft: timoutNow / 1000,\r\n };\r\n \r\n toggleStillThereDialog = ( value = null ) => {\r\n //\r\n // if (this.state.stillThereDialog){\r\n // sessionStorage.setItem(\"LastUserFeedback\", new Date());\r\n // }\r\n this.setState({stillThereDialog: !this.state.stillThereDialog});\r\n };\r\n \r\n confirmStillThere = () => {\r\n // this.setState({confirmedStillThere: true})\r\n sessionStorage.setItem(\"LastUserFeedback\", new Date());\r\n this.resetTimeOutTimer();\r\n this.toggleStillThereDialog();\r\n };\r\n \r\n toggleReportBugDialog = () => {\r\n let reportBug = {...this.state.reportBug};\r\n reportBug.open = !reportBug.open;\r\n this.setState({reportBug})\r\n };\r\n \r\n toggleSnackbar = (value) => {\r\n this.props.openSnackbar(value);\r\n };\r\n\r\n handleInputChange = (event) => {\r\n const value = event.target.value;\r\n const name = event.target.name;\r\n \r\n let reportBug = {...this.state.reportBug};\r\n reportBug.content[name] = value;\r\n this.setState({reportBug})\r\n\r\n };\r\n \r\n onReportBugSubmit = () => {\r\n const {subject, message} = this.state.reportBug.content;\r\n let temp = {...this.state};\r\n \r\n //send to backend\r\n submitFeedback(subject, message).then(response => {\r\n //todo: do something on success/failure here\r\n });\r\n \r\n let snackbar = {\r\n open: true,\r\n message: 'Thanks for you feedback!',\r\n variant: 'success'\r\n };\r\n this.toggleReportBugDialog(); // this.setState({snackbar})\r\n this.props.setSnackbar(snackbar)\r\n\r\n };\r\n \r\n componentDidUpdate = (prevProps) => {\r\n const {selectFacility, selectProject, selectedFacility, selectedProject} = this.props;\r\n if (prevProps.match.params.projectId !== this.props.match.params.projectId) {\r\n\r\n }\r\n const path = this.props.location.pathname;\r\n \r\n let params = path.split('/');\r\n\r\n if (params[1].length === 0 && selectedProject !== null) {\r\n selectProject(null);\r\n selectFacility(null)\r\n }\r\n if (params.length < 3 && selectedFacility !== null) {\r\n selectFacility(null)\r\n }\r\n\r\n if (this.props.activeUser !== prevProps.activeUser) {\r\n let temp = this.props.activeUser;\r\n // debugger;\r\n\r\n }\r\n\r\n };\r\n \r\n componentDidMount = () => {\r\n this.props.setActiveUser();\r\n \r\n this.resetTimeOutTimer();\r\n };\r\n \r\n resetActiveUser = () => {\r\n this.props.setActiveUser();\r\n };\r\n \r\n refreshTokenTimer = () => {\r\n setInterval(function () {\r\n try{\r\n \r\n let lastUserFeedbackString = sessionStorage.getItem(\"LastUserFeedback\");\r\n let lastUserFeedbackDateString = Date.parse(lastUserFeedbackString);\r\n let lastUserFeedbackDate = new Date(lastUserFeedbackDateString);\r\n\r\n let seconds = 1000 * 60; //60 seconds\r\n let compareDate = new Date(lastUserFeedbackDate.getTime() + seconds);\r\n\r\n let now = new Date();\r\n \r\n if (compareDate > now){\r\n refreshToken();\r\n }\r\n }catch{\r\n //swallow\r\n }\r\n }, 1000 * 60); //60 seconds\r\n };\r\n \r\n startWarningTimer = () => {\r\n warningTimer = setTimeout(this.idleWarning, timoutWarning);\r\n };\r\n \r\n setUserLastClick = () => {\r\n // debugger;\r\n if (this.state.stillThereDialog) {\r\n this.toggleStillThereDialog();\r\n sessionStorage.setItem(\"LastUserFeedback\", new Date());\r\n }\r\n \r\n this.resetTimeOutTimer();\r\n };\r\n\r\n resetTimeOutTimer = () => {\r\n clearInterval(timeoutWarningSecondsDisplayInterval);\r\n clearTimeout(timeoutTimer);\r\n clearTimeout(warningTimer);\r\n this.refreshTokenTimer();\r\n this.startWarningTimer();\r\n //$(\"#timeout\").dialog('close');\r\n }\r\n \r\n setSecondsLeft = () => {\r\n let secondsLeft = this.state.secondsLeft - 1;\r\n this.setState({secondsLeft});\r\n }\r\n\r\n idleWarning = () => {\r\n clearTimeout(warningTimer);\r\n this.setState({secondsLeft: timoutNow / 1000});\r\n timeoutTimer = setTimeout(this.idleTimeout, timoutNow);\r\n\r\n timeoutWarningSecondsDisplayInterval = setInterval(this.setSecondsLeft, 1000);\r\n\r\n // let r = confirm(\"Are you still there?\");\r\n \r\n this.setState({stillThereDialog: true, confirmedStillThere: false});\r\n\r\n }\r\n\r\n idleTimeout = () => {\r\n clearInterval(timeoutWarningSecondsDisplayInterval);\r\n sessionStorage.removeItem(\"user\");\r\n window.location.reload();\r\n }\r\n \r\n render() {\r\n\r\n \r\n const {\r\n facilitySidebarOpen,\r\n toggleFacilitySideBar,\r\n selectedFacility,\r\n selectedProject,\r\n facilities,\r\n selectedFacilityView,\r\n activeUser,\r\n classes,\r\n } = this.props;\r\n\r\n if (this.props.activeUser) {\r\n //TODO: if !this.props.activeUser.subscription instead of \"true\"\r\n if (!this.props.activeUser.subscription) {\r\n return (\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\n \r\n\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n {/**/}\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n {/*
    */}\r\n {/*
    */}\r\n {/*
    */}\r\n\r\n
    \r\n\r\n
    \r\n \r\n \r\n message\r\n \r\n \r\n \r\n \r\n \r\n }\r\n open={this.state.reportBug.open}\r\n onClose={this.toggleReportBugDialog}\r\n actions={Submit}\r\n />\r\n {/**/}\r\n \r\n\r\n
    \r\n )\r\n }\r\n } else {\r\n return 'Loading'\r\n }\r\n \r\n }\r\n }\r\n \r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n facilitySidebarOpen: state.facilitySidebarOpen,\r\n selectedFacility: state.selectedFacility,\r\n selectedProject: state.selectedProject,\r\n facilities: state.facilities,\r\n selectedFacilityView: state.selectedFacilityView,\r\n activeUser: state.activeUser,\r\n tempThemeColor: state.tempThemeColor,\r\n snackbar: state.snackbar,\r\n };\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n return bindActionCreators({\r\n toggleFacilitySideBar, \r\n selectFacility, \r\n selectProject, \r\n setActiveUser, \r\n addOrganizationSubscription, \r\n changeTheme, \r\n openSnackbar,\r\n setSnackbar\r\n }, dispatch);\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(HomeFunc));\r\n\r\n","import React, {Fragment} from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n// Material UI\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport withStyles from '@material-ui/core/styles/withStyles';\r\nimport blue from '@material-ui/core/colors/blue';\r\n\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport Input from '@material-ui/core/Input';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\nimport Button from \"@material-ui/core/Button\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Visibility from '@material-ui/icons/Visibility';\r\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\r\n\r\n\r\n// Logo\r\nimport reactlogo from \"../assets/img/ReactLogo_NoShadow.svg\"\r\nimport {Link} from \"react-router-dom\";\r\n\r\n\r\nconst styles = theme => ({\r\n main: {\r\n // width: 'auto',\r\n // display: 'block', // Fix IE 11 issue.\r\n // maxWidth: 400,\r\n // marginLeft: theme.spacing.unit * 3,\r\n // marginRight: theme.spacing.unit * 3,\r\n // [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: {\r\n // width: 800,\r\n // // marginLeft: 'auto',\r\n // // marginRight: 'auto',\r\n // },\r\n },\r\n paper: {\r\n marginTop: theme.spacing.unit * 8,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n padding: `${theme.spacing.unit * 2}px ${theme.spacing.unit * 3}px ${theme.spacing.unit * 3}px`,\r\n minHeight: 500,\r\n maxWidth: 400\r\n },\r\n avatar: {\r\n margin: theme.spacing.unit,\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n form: {\r\n width: '100%', // Fix IE 11 issue.\r\n marginTop: theme.spacing.unit,\r\n },\r\n submit: {\r\n marginTop: theme.spacing.unit * 2,\r\n },\r\n hidden: {\r\n display: 'none'\r\n },\r\n\r\n});\r\n\r\nfunction ResetPasswordContent(props) {\r\n const {\r\n classes,\r\n onSubmit,\r\n form,\r\n handleChange,\r\n handleShowPassword,\r\n passwordChanged,\r\n } = props;\r\n //console.log(props);\r\n\r\n let keys = Object.keys(form);\r\n\r\n return (\r\n
    \r\n \r\n\r\n \r\n \r\n \r\n \"Logo\"/\r\n {passwordChanged ?\r\n \r\n \r\n Back to Login\r\n \r\n \r\n Your password was succesfully reset. Click the button below to go to the log in page.\r\n \r\n \r\n \r\n Log In\r\n \r\n \r\n \r\n \r\n :\r\n \r\n \r\n Reset Password\r\n \r\n \r\n Your password must be at least 8 characters in length, and must contain at least one\r\n uppercase letter, lowercase letter, number, and special character.\r\n \r\n
    \r\n {form.error}\r\n {keys.map(key => (\r\n \r\n {form[key].label}\r\n handleChange(e)}\r\n error={form[key].touched && !form[key].valid}\r\n endAdornment={\r\n \r\n handleShowPassword(key)}\r\n >\r\n {form[key].showPassword ? :\r\n }\r\n \r\n \r\n }\r\n />\r\n \r\n ))}\r\n\r\n \r\n Reset Password\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 ResetPasswordContent.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n };\r\n\r\n export default withStyles(styles)(ResetPasswordContent);","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport clsx from 'clsx';\r\n\r\n// Material UI\r\nimport withStyles from '@material-ui/core/styles/withStyles'\r\n\r\n// Services\r\nimport { resetPassword } from \"../services/user.service\";\r\n\r\n// Carousel\r\nimport ResetPasswordContent from '../ResetPassword/index'\r\nimport validate from \"../js/validate\";\r\nimport CustomSnackbar from \"../components/Snackbar/CustomSnackbar\";\r\n\r\nimport queryString from 'query-string'\r\n\r\nconst styles = theme => ({\r\n \r\n});\r\n\r\nlet blankChangePasswordForm = {\r\n password: {\r\n label: \"Password\",\r\n value: null,\r\n showPassword: false,\r\n valid: false,\r\n touched: false,\r\n message: 'required',\r\n validationRules: {\r\n isRequired: true,\r\n isPassword: true\r\n }\r\n },\r\n confirmPassword: {\r\n label: \"Confirm Password\",\r\n value: null,\r\n showPassword: false,\r\n valid: false,\r\n touched: false,\r\n message: 'required',\r\n validationRules: {\r\n isRequired: true,\r\n isPassword: true\r\n }\r\n },\r\n\r\n}\r\n\r\nclass ResetPassword extends Component {\r\n state = {\r\n changePasswordForm: {...blankChangePasswordForm},\r\n snackbar: {\r\n open: false,\r\n message: null,\r\n variant: null, \r\n },\r\n error: null,\r\n passwordChanged: false,\r\n }\r\n\r\n handleShowPassword = (name) => {\r\n if (name) {\r\n let changePasswordForm = {...this.state.changePasswordForm};\r\n changePasswordForm[name].showPassword = !changePasswordForm[name].showPassword;\r\n this.setState({changePasswordForm})\r\n }\r\n }\r\n\r\n openSnackbar = (value) => {\r\n let snackbar = { ...this.state.snackbar }\r\n snackbar.open = value;\r\n this.setState({ snackbar })\r\n }\r\n\r\n handleChange = event => {\r\n // debugger;\r\n let value = event.target.value;\r\n let name = event.target.name;\r\n let updatedControls = {...this.state.changePasswordForm};\r\n\r\n const updatedFormElement = {...updatedControls[name]};\r\n\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n\r\n updatedControls[name] = updatedFormElement;\r\n\r\n\r\n // Check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n this.setState({\r\n changePasswordForm: updatedControls,\r\n changePasswordFormIsValid: formIsValid\r\n })\r\n\r\n }\r\n\r\n setError = (value) => {\r\n let error = {...this.state.error}\r\n error = value;\r\n this.setState({error})\r\n }\r\n\r\n onSubmit = (e) => {\r\n e.preventDefault();\r\n \r\n const { password, confirmPassword} = this.state.changePasswordForm;\r\n let match = (password.value === confirmPassword.value);\r\n if (!match) {\r\n let snackbar = {...this.state.snackbar};\r\n snackbar.open = true;\r\n snackbar.message = \"Passwords did not match. Try again.\";\r\n snackbar.variant = \"error\";\r\n let changePasswordForm = {...blankChangePasswordForm};\r\n this.setState({snackbar});\r\n this.setState({submitError: {value: true, message: 'Passwords did not match'}})\r\n } else {\r\n this.setState({submitError: {value: false, message: ''}});\r\n \r\n let search = window.location.search;\r\n const parsed = queryString.parse(search);\r\n let token = parsed.token;\r\n resetPassword(token, password.value).then(response => {\r\n let snackbar = {...this.state.snackbar};\r\n\r\n if (!response.isSuccess) {\r\n snackbar.open = true;\r\n snackbar.message = \"Something went wrong\";\r\n snackbar.variant = \"error\";\r\n this.setState({snackbar});\r\n\r\n } else {\r\n this.setState({passwordChanged: true})\r\n }\r\n })\r\n //TODO: Submit new password\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\n }\r\n \r\n}\r\n\r\nexport default withStyles(styles)(ResetPassword);","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === \"localhost\" ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === \"[::1]\" ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register() {\r\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener(\"load\", () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === \"installed\") {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log(\r\n \"New content is available; please refresh.\"\r\n );\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log(\"Content is cached for offline use.\");\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error(\"Error during service worker registration:\", error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get(\"content-type\").indexOf(\"javascript\") ===\r\n -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n \"No internet connection found. App is running in offline mode.\"\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if (\"serviceWorker\" in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import {\r\n TOGGLE_DELETE_PROJECT_DIALOG,\r\n TOGGLE_EDIT_PROJECT_DIALOG,\r\n PROJECT_SELECTED,\r\n GET_PROJECT_FACILITIES,\r\n EDIT_PROJECT_PROPERTY,\r\n SET_FETCHING_FACILITIES\r\n} from '../actions/project-actions'\r\n\r\nconst selectedProject = (state = null, action) => {\r\n switch (action.type) {\r\n case PROJECT_SELECTED:\r\n return action.payload;\r\n }\r\n return state\r\n}\r\n\r\nconst facilitiesOfProject = (state = [], action) => {\r\n switch (action.type) {\r\n case GET_PROJECT_FACILITIES:\r\n return action.payload;\r\n }\r\n return state\r\n};\r\n\r\nconst toggleDeleteProjectDialog = (state = false, action) => {\r\n switch (action.type) {\r\n case TOGGLE_DELETE_PROJECT_DIALOG:\r\n return action.payload\r\n }\r\n return { open: false, project: null };\r\n};\r\n\r\nconst toggleEditProjectDialog = (state = false, action) => {\r\n switch (action.type) {\r\n case TOGGLE_EDIT_PROJECT_DIALOG:\r\n return action.payload;\r\n case EDIT_PROJECT_PROPERTY:\r\n const { event, project } = action.payload;\r\n let editedProject = { ...project };\r\n editedProject[event.currentTarget.name] = event.currentTarget.value\r\n return { open: true, project: editedProject }\r\n }\r\n return { open: false, project: null };\r\n};\r\n\r\nconst fetchingFacilities = (state = false, action) => {\r\n switch (action.type) {\r\n case SET_FETCHING_FACILITIES:\r\n return action.payload\r\n }\r\n return state\r\n};\r\n\r\n\r\nexport { selectedProject, facilitiesOfProject, toggleDeleteProjectDialog, toggleEditProjectDialog, fetchingFacilities }","import { \r\n SET_EDIT_METER_FORM_IS_VALID,\r\n SET_ATTEMPTED_EDIT_METER_SUBMIT,\r\n TOGGLE_EDIT_METER_DIALOG_OPEN,\r\n SET_SELECTED_METER_FOR_EDIT,\r\n SET_EDIT_METER_FORM_CONTROLS,\r\n SET_FETCHING_NEW_WEATHER_DATA,\r\n SET_EDIT_METER_SNACKBAR\r\n} from \"../../../actions/MeterActions/EditMeterActions/edit-meter-actions\";\r\n\r\nconst editMeterFormIsValid = (state = false, action) => {\r\n switch (action.type) {\r\n case SET_EDIT_METER_FORM_IS_VALID:\r\n return action.payload;\r\n }\r\n return state;\r\n};\r\n\r\nconst attemptedEditMeterSubmit = (state = false, action) => {\r\n switch (action.type) {\r\n case SET_ATTEMPTED_EDIT_METER_SUBMIT:\r\n return action.payload;\r\n }\r\n return state;\r\n};\r\nconst fetchingNewWeatherData = (state = false, action) => {\r\n switch (action.type) {\r\n case SET_FETCHING_NEW_WEATHER_DATA:\r\n return action.payload;\r\n }\r\n return state;\r\n};\r\n\r\nconst editMeterDialogOpen = (state = false, action) => {\r\n switch (action.type) {\r\n case TOGGLE_EDIT_METER_DIALOG_OPEN:\r\n return action.payload;\r\n }\r\n return state;\r\n};\r\n\r\nconst selectedMeterForEdit = (state = {}, action) => {\r\n switch (action.type) {\r\n case SET_SELECTED_METER_FOR_EDIT:\r\n return action.payload;\r\n }\r\n return state;\r\n};\r\n\r\nlet editMeterFormControlsDefault = {\r\n name: {\r\n label: 'Name',\r\n name: 'name',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n message: 'required',\r\n validationRules: {\r\n isRequired: true\r\n }\r\n },\r\n description: {\r\n label: 'Description (Optional)',\r\n name: 'description',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n message: 'required',\r\n validationRules: {\r\n isRequired: true\r\n }\r\n },\r\n meterNumber: {\r\n label: 'Meter Number',\r\n name: 'meterNumber',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n }\r\n },\r\n accountNumber: {\r\n label: 'Account Number',\r\n name: 'accountNumber',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n }\r\n },\r\n utility: {\r\n label: 'Utility',\r\n name: 'utility',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n }\r\n },\r\n address1: {\r\n label: 'Address 1',\r\n name: 'address1',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n }\r\n },\r\n address2: {\r\n label: 'Address 2',\r\n name: 'address2',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n }\r\n },\r\n city: {\r\n label: 'City',\r\n name: 'city',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n // isRequired: false\r\n }\r\n },\r\n state: {\r\n label: 'State',\r\n name: 'state',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n\r\n }\r\n },\r\n postalCode: {\r\n label: 'Zip Code',\r\n name: 'postalCode',\r\n value: null,\r\n valid: true,\r\n touched: false,\r\n validationRules: {\r\n isRequired: true,\r\n isZipcode: true\r\n }\r\n },\r\n\r\n}\r\n\r\nconst editMeterFormControls = (state = {...editMeterFormControlsDefault}, action) => {\r\n switch (action.type) {\r\n case SET_EDIT_METER_FORM_CONTROLS:\r\n return action.payload;\r\n }\r\n return state;\r\n};\r\n\r\n\r\n\r\nexport { \r\n editMeterFormIsValid,\r\n attemptedEditMeterSubmit,\r\n editMeterDialogOpen,\r\n selectedMeterForEdit,\r\n editMeterFormControls,\r\n fetchingNewWeatherData,\r\n};","import { combineReducers } from 'redux';\r\n\r\nimport { selectedProject, facilitiesOfProject, toggleDeleteProjectDialog, toggleEditProjectDialog, fetchingFacilities } from './project-reducers';\r\nimport { \r\n selectFacility, \r\n toggleImportDataDialog, \r\n facilityView,\r\n facilitySubview,\r\n toggleFacilitySidebar,\r\n} from './facility-reducers'\r\n\r\nimport {\r\n rawIntervalData,\r\n intervalDataForZoomable,\r\n intervalDataForHeatMap,\r\n intervalDataForExport,\r\n intervalDataForDemandDuration,\r\n intervalDataForCalendarChart,\r\n intervalDataForSurfacePlot,\r\n intervalDataForLoadCurve,\r\n intervalDataForSummaryChart\r\n} from './interval-data-reducer';\r\n\r\nimport {\r\n chartDataFilterFormObject,\r\n chartOptions,\r\n plotlyChartOptions,\r\n chartTableSettings,\r\n dataFilterMessage,\r\n chartCanUpdateData,\r\n durationView,\r\n temperatureView,\r\n showMeterDatesAndRanges\r\n} from \"./meter-charts-reducers\";\r\n\r\nimport { toggleCreateProjectDialog, projects } from './dashboard-reducers';\r\nimport { \r\n toggleStripeCreditCardDialog, \r\n paymentMethods, \r\n organizationSubscription,\r\n tempThemeColor\r\n} from './admin-reducers';\r\n\r\nimport {\r\n degreeDays, \r\n degreeDayChartToUpdate,\r\n weatherHandsontableSettings,\r\n regressionRedux,\r\n rawWeatherDataChartOptions\r\n} from \"./weather-reducers\";\r\n\r\nimport {selectedChartView} from \"./chart-reducers\";\r\n\r\nimport {calendarChartShowPeakDemand, calendarChartShowTemperature} from \"./DataChartReducers/calendar-chart-reducers\";\r\n\r\nimport {emissionsObject, emissionsIncludeLosses, emissionsStateVsRegion} from \"./EmissionsReducers/emissions.reducers\";\r\n\r\nimport {\r\n editMeterFormIsValid,\r\n attemptedEditMeterSubmit,\r\n editMeterDialogOpen,\r\n selectedMeterForEdit,\r\n editMeterFormControls,\r\n fetchingNewWeatherData,\r\n} from \"./MeterReducers/EditMeterReducers/edit-meter-reducers\";\r\n\r\nimport { editedUser, usersOfOrganization, activeUser } from './user-reducer';\r\n\r\nimport {snackbar} from \"./HomeReducers/home-reducers\";\r\nimport { reducer as formReducer } from 'redux-form'\r\nimport {setContact} from './contact-reducer'\r\n\r\nconst allReducers = combineReducers({\r\n // User Level\r\n editedUserProperties: editedUser,\r\n users: usersOfOrganization,\r\n activeUser: activeUser,\r\n \r\n //HomeLevel\r\n snackbar,\r\n\r\n // Dashboard Level\r\n projects: projects,\r\n\r\n createProjectDialogOpen: toggleCreateProjectDialog,\r\n\r\n // Admin Level\r\n paymentMethods: paymentMethods,\r\n changeCreditCardDialogOpen: toggleStripeCreditCardDialog,\r\n organizationSubscription: organizationSubscription,\r\n tempThemeColor: tempThemeColor,\r\n\r\n // Project Level\r\n selectedProject: selectedProject,\r\n facilities: facilitiesOfProject,\r\n deleteProjectDialogOpen: toggleDeleteProjectDialog,\r\n editProjectDialogOpen: toggleEditProjectDialog,\r\n fetchingFacilities: fetchingFacilities,\r\n\r\n // Facility Level\r\n selectedFacilityView: facilityView,\r\n selectedFacilitySubview: facilitySubview,\r\n facilitySidebarOpen: toggleFacilitySidebar,\r\n selectedFacility: selectFacility,\r\n \r\n // Edit Meter\r\n editMeterFormIsValid,\r\n attemptedEditMeterSubmit,\r\n editMeterDialogOpen,\r\n selectedMeterForEdit,\r\n editMeterFormControls,\r\n fetchingNewWeatherData,\r\n \r\n \r\n // Charts\r\n selectedChartView: selectedChartView,\r\n \r\n // Calendar Chart\r\n calendarChartShowPeakDemand: calendarChartShowPeakDemand,\r\n calendarChartShowTemperature: calendarChartShowTemperature,\r\n \r\n // Emissions\r\n emissionsObject,\r\n emissionsIncludeLosses,\r\n emissionsStateVsRegion,\r\n \r\n // Chart Tool Reducers\r\n chartDataFilterFormObject: chartDataFilterFormObject,\r\n chartOptions: chartOptions,\r\n plotlyChartOptions: plotlyChartOptions,\r\n chartTableSettings: chartTableSettings,\r\n dataFilterMessage: dataFilterMessage,\r\n chartCanUpdateData: chartCanUpdateData,\r\n durationView: durationView,\r\n temperatureView,\r\n showMeterDatesAndRanges,\r\n\r\n // Interval Data\r\n intervalData: rawIntervalData,\r\n intervalDataForZoomable: intervalDataForZoomable,\r\n intervalDataForDemandDuration: intervalDataForDemandDuration,\r\n intervalDataForHeatMap: intervalDataForHeatMap,\r\n intervalDataForCalendarChart: intervalDataForCalendarChart,\r\n intervalDataForSurfacePlot: intervalDataForSurfacePlot,\r\n intervalDataForExport: intervalDataForExport,\r\n intervalDataForLoadCurve: intervalDataForLoadCurve,\r\n intervalDataForSummaryChart: intervalDataForSummaryChart,\r\n importFacilityDataDialogOpen: toggleImportDataDialog,\r\n initialName: setContact,\r\n form: formReducer,\r\n \r\n // Weather\r\n degreeDays,\r\n degreeDayChartToUpdate,\r\n weatherHandsontableSettings,\r\n regressionRedux,\r\n rawWeatherDataChartOptions\r\n\r\n \r\n});\r\n\r\nexport default allReducers;","\r\n\r\nimport { EDIT_PROFILE_PROPERTY, GET_ORGANIZATION_USERS, SET_ACTIVE_USER} from '../actions/user-actions'\r\nimport {PROJECT_SELECTED} from \"../actions/project-actions\";\r\n\r\nconst editedUser = (state = {}, action) => {\r\n switch (action.type) {\r\n case EDIT_PROFILE_PROPERTY:\r\n const { key, value, userObject } = action.payload;\r\n let editedUser = { ...userObject };\r\n //editedUser[key] = value;\r\n if (key !== 'temp') {\r\n editedUser[key] = value;\r\n }\r\n \r\n return editedUser;\r\n }\r\n return state;\r\n};\r\n\r\nconst usersOfOrganization = (state = null, action) => {\r\n switch (action.type) {\r\n case GET_ORGANIZATION_USERS:\r\n return action.payload;\r\n }\r\n return state\r\n};\r\n\r\nconst activeUser = (state = null, action) => {\r\n \r\n switch (action.type) {\r\n case SET_ACTIVE_USER:\r\n return action.payload;\r\n }\r\n return state\r\n}\r\n\r\nexport { editedUser, usersOfOrganization, activeUser }","import {\r\n SET_SNACKBAR\r\n} from \"../../actions/HomeActions/home-actions\";\r\n\r\nconst snackbar = (state = {message: null, open: false, variant: \"success\"}, action) => {\r\n switch (action.type) {\r\n case SET_SNACKBAR:\r\n debugger;\r\n return action.payload;\r\n }\r\n return state\r\n};\r\n\r\n\r\nexport { snackbar }","import { TOGGLE_CREATE_PROJECT_DIALOG, PROJECTS_MOUNTED} from '../actions/dashboard-actions'\r\nimport moment from 'moment'\r\n\r\nconst toggleCreateProjectDialog = (state = false, action) => {\r\n switch (action.type) {\r\n case TOGGLE_CREATE_PROJECT_DIALOG:\r\n return !action.payload;\r\n }\r\n return state;\r\n};\r\n\r\nconst projects = (state = [], action) => {\r\n switch (action.type) {\r\n case PROJECTS_MOUNTED:\r\n let projects = action.payload;\r\n projects.sort(function(a, b) {\r\n if (moment(a.modifiedDate).isBefore(moment(b.modifiedDate))) {\r\n return 1\r\n } else {\r\n return -1\r\n }\r\n });\r\n return action.payload;\r\n }\r\n return state\r\n} \r\n\r\n\r\nexport { toggleCreateProjectDialog, projects };","import { TOGGLE_STRIPE_DIALOG, ORGANIZATION_MOUNTED, PAYMENT_METHODS_MOUNTED, ADD_ORGANIZATION_SUBSCRIPTION, CHANGE_THEME} from '../actions/admin-actions'\r\n\r\nconst toggleStripeCreditCardDialog = (state = false, action) => {\r\n switch (action.type) {\r\n case TOGGLE_STRIPE_DIALOG:\r\n return !action.payload;\r\n }\r\n return state;\r\n};\r\n\r\nconst organization = (state = null, action) => {\r\n switch (action.type) {\r\n case ORGANIZATION_MOUNTED:\r\n return action.payload;\r\n }\r\n return state\r\n}\r\n\r\nconst paymentMethods = (state = [], action) => {\r\n switch (action.type) {\r\n case PAYMENT_METHODS_MOUNTED:\r\n return action.payload;\r\n }\r\n return state\r\n}\r\n\r\nconst organizationSubscription = (state = null, action) => {\r\n switch (action.type) {\r\n case ADD_ORGANIZATION_SUBSCRIPTION:\r\n return action.payload;\r\n }\r\n return state\r\n}\r\n\r\nconst tempThemeColor = (state = null, action) => {\r\n switch (action.type) {\r\n case CHANGE_THEME:\r\n return action.payload;\r\n }\r\n return state\r\n}\r\n\r\n\r\nexport { toggleStripeCreditCardDialog, organization, paymentMethods, organizationSubscription, tempThemeColor };","import {\r\n TOGGLE_IMPORT_FACILITY_DATA_DIALOG,\r\n FACILITY_SELECTED,\r\n SELECTED_FACILITY_VIEW,\r\n TOGGLE_FACILITY_SIDEBAR,\r\n} from '../actions/facility-actions'\r\n\r\nconst selectFacility = (state = null, action) => {\r\n switch (action.type) {\r\n \r\n case FACILITY_SELECTED:\r\n return action.payload;\r\n }\r\n return state\r\n} \r\n\r\nconst toggleImportDataDialog = (state = false, action) => {\r\n switch (action.type) {\r\n case TOGGLE_IMPORT_FACILITY_DATA_DIALOG:\r\n return !action.payload;\r\n }\r\n return state;\r\n};\r\n\r\nconst facilityView = (state = 'overview', action) => {\r\n switch (action.type) {\r\n case SELECTED_FACILITY_VIEW:\r\n return action.payload.view;\r\n }\r\n return state;\r\n};\r\n\r\nconst facilitySubview = (state = '', action) => {\r\n switch (action.type) {\r\n case SELECTED_FACILITY_VIEW:\r\n if (action.payload.subview) {\r\n return action.payload.subview;\r\n } else {\r\n return null\r\n }\r\n \r\n }\r\n return state;\r\n};\r\n\r\nconst toggleFacilitySidebar = (state = true, action) => {\r\n switch (action.type) {\r\n case TOGGLE_FACILITY_SIDEBAR:\r\n return !action.payload;\r\n }\r\n return state;\r\n};\r\n\r\n\r\nexport { selectFacility, toggleImportDataDialog, facilityView, facilitySubview, toggleFacilitySidebar }","import {\r\n SELECTED_CHART_VIEW,\r\n} from '../actions/chart-actions'\r\n\r\nconst selectedChartView = (state = 'load-curve', action) => {\r\n switch (action.type) {\r\n case SELECTED_CHART_VIEW:\r\n return action.payload;\r\n }\r\n return state\r\n}; \r\n\r\n\r\nexport { selectedChartView }","import {\r\n TOGGLE_SHOW_PEAK_DEMAND, \r\n SET_CALENDAR_CHART_TEMPERATURE_VIEW\r\n} from '../../actions/DataChartActions/calendar-chart-actions'\r\n\r\nconst calendarChartShowPeakDemand = (state = false, action) => {\r\n switch (action.type) {\r\n case TOGGLE_SHOW_PEAK_DEMAND:\r\n return action.payload;\r\n }\r\n return state;\r\n};\r\n\r\nconst calendarChartShowTemperature = (state = false, action) => {\r\n switch (action.type) {\r\n\r\n case SET_CALENDAR_CHART_TEMPERATURE_VIEW:\r\n return action.payload;\r\n }\r\n return state\r\n};\r\n\r\nexport { calendarChartShowPeakDemand, calendarChartShowTemperature };","import {\r\n SET_EMISSIONS_OBJECT, \r\n TOGGLE_EMISSIONS_INCLUDE_LOSSES,\r\n HANDLE_EMISSIONS_STATE_VS_REGION_CHANGE\r\n} from \"../../actions/EmissionsActions/emissions-actions\";\r\n\r\nconst emissionsObject = (state = {}, action) => {\r\n switch (action.type) {\r\n case SET_EMISSIONS_OBJECT:\r\n return action.payload;\r\n }\r\n return state;\r\n};\r\n\r\nconst emissionsIncludeLosses = (state = true, action) => {\r\n switch (action.type) {\r\n case TOGGLE_EMISSIONS_INCLUDE_LOSSES:\r\n return action.payload;\r\n }\r\n return state;\r\n};\r\n\r\nconst emissionsStateVsRegion = (state = 'subRegion', action) => {\r\n switch (action.type) {\r\n case HANDLE_EMISSIONS_STATE_VS_REGION_CHANGE:\r\n return action.payload;\r\n }\r\n return state;\r\n};\r\n\r\nexport { emissionsObject, emissionsIncludeLosses, emissionsStateVsRegion };","import {\r\n SET_CHART_DATA_FILTER_FORM_OBJECT,\r\n SET_PLOTLY_CHART_OPTIONS,\r\n SET_CHART_OPTIONS,\r\n SET_CHART_TABLE_SETTINGS,\r\n SET_DATA_FILTER_MESSAGE,\r\n SET_CHART_CAN_UPDATE_DATA,\r\n SET_DURATION_VIEW,\r\n SET_TEMPERATURE_VIEW,\r\n SET_SHOW_METER_DATES_AND_RANGES\r\n} from '../actions/meter-charts-actions'\r\n\r\nimport {SELECTED_FACILITY_VIEW} from \"../actions/facility-actions\";\r\n\r\nconst chartDataFilterFormObject = (state = null, action) => {\r\n switch (action.type) {\r\n \r\n case SET_CHART_DATA_FILTER_FORM_OBJECT:\r\n return action.payload;\r\n }\r\n return state\r\n};\r\n\r\nconst chartOptions = (state = null, action) => {\r\n switch (action.type) {\r\n\r\n case SET_CHART_OPTIONS:\r\n return action.payload;\r\n }\r\n return state\r\n};\r\n\r\nconst plotlyChartOptions = (state = null, action) => {\r\n switch (action.type) {\r\n\r\n case SET_PLOTLY_CHART_OPTIONS:\r\n return action.payload;\r\n }\r\n return state\r\n};\r\n\r\nconst chartTableSettings = (state = null, action) => {\r\n switch (action.type) {\r\n\r\n case SET_CHART_TABLE_SETTINGS:\r\n return action.payload;\r\n }\r\n return state\r\n};\r\n\r\nconst dataFilterMessage = (state = null, action) => {\r\n switch (action.type) {\r\n\r\n case SET_DATA_FILTER_MESSAGE:\r\n return action.payload;\r\n }\r\n return state\r\n};\r\n\r\nconst chartCanUpdateData = (state = null, action) => {\r\n switch (action.type) {\r\n\r\n case SET_CHART_CAN_UPDATE_DATA:\r\n return action.payload;\r\n }\r\n return state\r\n};\r\n\r\nconst durationView = (state = 'week', action) => {\r\n switch (action.type) {\r\n\r\n case SET_DURATION_VIEW:\r\n return action.payload;\r\n }\r\n return state\r\n};\r\n\r\nconst temperatureView = (state = false, action) => {\r\n switch (action.type) {\r\n\r\n case SET_TEMPERATURE_VIEW:\r\n return action.payload;\r\n }\r\n return state\r\n};\r\n\r\nconst showMeterDatesAndRanges = (state = false, action) => {\r\n switch (action.type) {\r\n\r\n case SET_SHOW_METER_DATES_AND_RANGES:\r\n return action.payload;\r\n }\r\n return state\r\n};\r\n\r\n\r\n\r\nexport { \r\n chartDataFilterFormObject,\r\n chartOptions,\r\n plotlyChartOptions,\r\n chartTableSettings,\r\n dataFilterMessage,\r\n chartCanUpdateData,\r\n durationView,\r\n temperatureView,\r\n showMeterDatesAndRanges\r\n}","import moment from 'moment';\r\nimport {\r\n INTERVAL_DATA_RECEIVED,\r\n TIMESTAMP_DATA_RECEIVED,\r\n HEATMAP_DATA_RECEIVED,\r\n DEMAND_DURATION_DATA_RECEIVED,\r\n CALENDAR_CHART_DATA_RECEIVED,\r\n SURFACE_PLOT_DATA_RECEIVED,\r\n LOAD_CURVE_DATA_RECIEVED,\r\n CLEAR_INTERVAL_DATA,\r\n SUMMARY_CHART_DATA_RECIEVED,\r\n} from '../actions/interval-data-actions'\r\n\r\n\r\nconst rawIntervalData = (state = null, action) => {\r\n switch (action.type) {\r\n case INTERVAL_DATA_RECEIVED:\r\n return action.payload;\r\n }\r\n return state\r\n};\r\n\r\nconst intervalDataForZoomable = (state = null, action) => {\r\n switch (action.type) {\r\n case TIMESTAMP_DATA_RECEIVED:\r\n let newArray = [];\r\n let data = action.payload;\r\n //data.forEach(interval => {\r\n // newArray.push([interval.dateTimestamp, interval.kW])\r\n //});\r\n //console.timeLog(\"test1\");\r\n return data;\r\n }\r\n return state\r\n} \r\n\r\nconst intervalDataForDemandDuration = (state = null, action) => {\r\n \r\n switch (action.type) {\r\n case DEMAND_DURATION_DATA_RECEIVED:\r\n let newArray = [];\r\n let dateTimeArray = [];\r\n let data = action.payload;\r\n let returnData = {};\r\n data.forEach(interval => {\r\n newArray.push([interval.fakeTimestamp, interval.kW])\r\n dateTimeArray.push({intervalDateTime: interval.dateTimestamp})\r\n });\r\n \r\n returnData.data = newArray;\r\n returnData.dateTimeArray = dateTimeArray;\r\n \r\n console.timeLog(\"test1\");\r\n return returnData;\r\n }\r\n return state\r\n} \r\n\r\nconst intervalDataForHeatMap = (state = null, action) => {\r\n switch (action.type) {\r\n case HEATMAP_DATA_RECEIVED:\r\n // let newArray = [];\r\n // let data = action.payload;\r\n // debugger;\r\n // data.forEach(interval => {\r\n // newArray.push([interval.dayTimestamp, interval.minutes, interval.kW])\r\n // });\r\n // return newArray;\r\n let data = action.payload;\r\n return data\r\n }\r\n return state\r\n} \r\n\r\nconst intervalDataForCalendarChart = (state = null, action) => {\r\n switch (action.type) {\r\n case CALENDAR_CHART_DATA_RECEIVED:\r\n return action.payload;\r\n }\r\n return state\r\n}\r\n\r\n\r\nconst intervalDataForSurfacePlot = (state = null, action) => {\r\n switch (action.type) {\r\n case SURFACE_PLOT_DATA_RECEIVED:\r\n return action.payload;\r\n }\r\n return state\r\n}\r\n\r\nconst intervalDataForLoadCurve = (state = null, action) => {\r\n switch (action.type) {\r\n case LOAD_CURVE_DATA_RECIEVED:\r\n return action.payload;\r\n case CLEAR_INTERVAL_DATA:\r\n if (action.payload === 'load-curve')\r\n return null; \r\n }\r\n return state\r\n}\r\n\r\nconst intervalDataForSummaryChart = (state = null, action) => {\r\n switch (action.type) {\r\n case SUMMARY_CHART_DATA_RECIEVED:\r\n if (action.payload != null) {\r\n return action.payload;\r\n }\r\n else {\r\n return null\r\n }\r\n case CLEAR_INTERVAL_DATA:\r\n if (action.payload === 'summary-chart')\r\n return null;\r\n }\r\n return state\r\n}\r\n\r\n\r\nconst intervalDataForExport = (state = null, action) => {\r\n switch (action.type) {\r\n case INTERVAL_DATA_RECEIVED:\r\n let newArray = [];\r\n let data = action.payload;\r\n //intervalDataForHorizontalHandsontable(data)\r\n return newArray;\r\n }\r\n return state\r\n} \r\n\r\nexport {\r\n rawIntervalData,\r\n intervalDataForZoomable,\r\n intervalDataForHeatMap,\r\n intervalDataForExport,\r\n intervalDataForDemandDuration,\r\n intervalDataForCalendarChart,\r\n intervalDataForSurfacePlot,\r\n intervalDataForLoadCurve,\r\n intervalDataForSummaryChart\r\n };","//import { TOGGLE_STRIPE_DIALOG, ORGANIZATION_MOUNTED, PAYMENT_METHODS_MOUNTED} from '../actions/admin-actions'\r\n\r\nconst setContact = (state = {firstName: 'Bill'}, action) => {\r\n switch (action.type) {\r\n case 'Jimmy':\r\n return !action.payload;\r\n }\r\n return state;\r\n};\r\n\r\n\r\nexport { setContact };","import {\r\n GET_DEGREE_DAYS, \r\n DEGREE_DAY_CHART_TO_UPDATE,\r\n SET_WEATHER_HANDSONTABLE_SETTINGS_REDUX,\r\n CLEAR_DEGREE_DAYS_REDUX,\r\n SET_REGRESSION,\r\n SET_RAW_WEATHER_DATA_CHART_OPTIONS\r\n} from \"../actions/weather-actions\";\r\n\r\nconst degreeDayChartToUpdate = (state = null, action) => {\r\n switch (action.type) {\r\n\r\n case DEGREE_DAY_CHART_TO_UPDATE:\r\n return action.payload;\r\n }\r\n return state\r\n}\r\nconst rawWeatherDataChartOptions = (state = null, action) => {\r\n switch (action.type) {\r\n\r\n case SET_RAW_WEATHER_DATA_CHART_OPTIONS:\r\n return action.payload;\r\n }\r\n return state\r\n}\r\n\r\nconst degreeDays = (state = null, action) => {\r\n switch (action.type) {\r\n case GET_DEGREE_DAYS:\r\n return action.payload;\r\n case CLEAR_DEGREE_DAYS_REDUX:\r\n return action.payload;\r\n }\r\n return state\r\n}\r\n\r\nconst weatherHandsontableSettings = (state = null, action) => {\r\n switch (action.type) {\r\n case SET_WEATHER_HANDSONTABLE_SETTINGS_REDUX:\r\n return action.payload;\r\n case CLEAR_DEGREE_DAYS_REDUX:\r\n return action.payload;\r\n }\r\n return state\r\n}\r\n\r\nconst regressionRedux = (state = null, action) => {\r\n switch (action.type) {\r\n case SET_REGRESSION:\r\n return action.payload;\r\n }\r\n return state\r\n}\r\n\r\n\r\nexport { \r\n degreeDays, \r\n degreeDayChartToUpdate,\r\n weatherHandsontableSettings,\r\n regressionRedux,\r\n rawWeatherDataChartOptions\r\n}","import allReducers from './redux/reducers'\r\nimport { devToolsEnhancer } from 'redux-devtools-extension';\r\nimport { createStore, applyMiddleware, compose } from 'redux';\r\nimport thunk from \"redux-thunk\";\r\n\r\n// const store = createStore(allReducers, applyMiddleware(thunk), devToolsEnhancer(\r\n// // Specify custom devTools options\r\n// {\r\n// trace: true\r\n// }\r\n// )\r\n// );\r\n\r\nconst store = createStore(allReducers, compose(\r\n applyMiddleware(thunk),\r\n devToolsEnhancer(\r\n// // Specify custom devTools options\r\n {\r\n trace: true\r\n }\r\n)\r\n));\r\n\r\nexport default store","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { createBrowserHistory } from \"history\";\r\nimport { Router, Route, Switch, Redirect } from \"react-router-dom\";\r\nimport PrivateRoute from \"components/PrivateRoute\";\r\nimport SignIn from \"layouts/Login\";\r\nimport Home from \"./layouts/Home.jsx\";\r\nimport ResetPassword from \"./layouts/ResetPassword\"\r\nimport registerServiceWorker from \"./registerServiceWorker\";\r\nimport { unregister } from \"./registerServiceWorker\";\r\n\r\nimport { Provider } from 'react-redux';\r\nimport store from'./store'\r\n\r\n\r\nimport \"./assets/css/material-dashboard-react.css?v=1.6.0\";\r\nimport 'handsontable/dist/handsontable.full.css';\r\n\r\nconst hist = createBrowserHistory();\r\n\r\nReactDOM.render(\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 document.getElementById(\"root\")\r\n);\r\n\r\nunregister();\r\n","module.exports = __webpack_public_path__ + \"static/media/ReactLogo_NoShadow.aa7ca908.svg\";","module.exports = __webpack_public_path__ + \"static/media/events.7c002520.gif\";","module.exports = __webpack_public_path__ + \"static/media/thermometer.b88a95e2.svg\";","module.exports = __webpack_public_path__ + \"static/media/ScatterForLogin.f24c720c.png\";","module.exports = __webpack_public_path__ + \"static/media/notebooks.04026dd9.gif\";","module.exports = __webpack_public_path__ + \"static/media/projects.bf01ac02.gif\";","module.exports = __webpack_public_path__ + \"static/media/HeatmapForLogin.1c831d41.png\";","module.exports = __webpack_public_path__ + \"static/media/meter3.74429fc6.gif\";","module.exports = __webpack_public_path__ + \"static/media/sun-white.59dc3404.svg\";","module.exports = __webpack_public_path__ + \"static/media/buildings.b3843eed.svg\";","module.exports = __webpack_public_path__ + \"static/media/meter.fcf71f3e.svg\";","module.exports = __webpack_public_path__ + \"static/media/home.b0399875.svg\";","module.exports = __webpack_public_path__ + \"static/media/burningCoal.5f220127.svg\";","module.exports = __webpack_public_path__ + \"static/media/gasStation.49accdbf.svg\";","module.exports = __webpack_public_path__ + \"static/media/car.a63a8921.svg\";","module.exports = __webpack_public_path__ + \"static/media/oilBarrel.b1fdda4d.svg\";","module.exports = __webpack_public_path__ + \"static/media/coalRailcar.58b40c2b.svg\";"],"sourceRoot":""}