{"version":3,"sources":["rubblemaster_openapi3_typescript-fetch/models/AccessLevelDto.ts","rubblemaster_openapi3_typescript-fetch/models/MeasurementSystem.ts","rubblemaster_openapi3_typescript-fetch/models/BackendInfoDto.ts","rubblemaster_openapi3_typescript-fetch/models/CurrentUserDto.ts","rubblemaster_openapi3_typescript-fetch/models/ErrorDto.ts","rubblemaster_openapi3_typescript-fetch/models/MachineDto.ts","rubblemaster_openapi3_typescript-fetch/models/MachineTypeDto.ts","rubblemaster_openapi3_typescript-fetch/models/NextServiceDto.ts","rubblemaster_openapi3_typescript-fetch/models/OrganizationDto.ts","rubblemaster_openapi3_typescript-fetch/models/PointDto.ts","rubblemaster_openapi3_typescript-fetch/models/SampledTelemetryDto.ts","rubblemaster_openapi3_typescript-fetch/models/StateDto.ts","rubblemaster_openapi3_typescript-fetch/models/TagDto.ts","rubblemaster_openapi3_typescript-fetch/models/TelemetryRangeAveragesDto.ts","rubblemaster_openapi3_typescript-fetch/models/TelemetryRangeDto.ts","rubblemaster_openapi3_typescript-fetch/models/TelemetryRangeSavingsDto.ts","rubblemaster_openapi3_typescript-fetch/models/TelemetryRangeTotalsDto.ts","rubblemaster_openapi3_typescript-fetch/models/TelemetrySnapshotDto.ts","rubblemaster_openapi3_typescript-fetch/models/UnitValueDto.ts","rubblemaster_openapi3_typescript-fetch/models/UserDto.ts","rubblemaster_openapi3_typescript-fetch/models/index.ts","assets/img/logo.png","assets/img/rm_digital_solutions.jpg","assets/img/DefaultRM.png","assets/img/digital_insights.png","types/reduxTypes.ts","assets/icons/en-US.png","assets/icons/en-GB.png","assets/icons/de-AT.png","assets/icons/es-ES.png","assets/icons/fr-FR.png","assets/icons/it-IT.png","rubblemaster_openapi3_typescript-fetch/runtime.ts","assets/icons/marker-green.png","assets/icons/marker-red.png","assets/img/rm-background.jpg","assets/img/fleet_management.png","assets/img/documentation_portal.png","assets/img/webshop.png","assets/img/cockpit.png","assets/img/product_config.png","assets/img/academy.png","assets/img/virtual_world.png","assets/img/web.png","types/index.ts","rubblemaster_openapi3_typescript-fetch/apis/AccountApi.ts","rubblemaster_openapi3_typescript-fetch/apis/MachineTagsApi.ts","rubblemaster_openapi3_typescript-fetch/apis/MachinesApi.ts","rubblemaster_openapi3_typescript-fetch/apis/MachineTypesApi.ts","rubblemaster_openapi3_typescript-fetch/apis/SessionApi.ts","rubblemaster_openapi3_typescript-fetch/apis/OrganizationsApi.ts","rubblemaster_openapi3_typescript-fetch/apis/StatesApi.ts","rubblemaster_openapi3_typescript-fetch/apis/TagsApi.ts","rubblemaster_openapi3_typescript-fetch/apis/TelemetryApi.ts","rubblemaster_openapi3_typescript-fetch/models/UploadDto.ts","rubblemaster_openapi3_typescript-fetch/apis/UploadApi.ts","rubblemaster_openapi3_typescript-fetch/apis/UsersApi.ts","constants/helpers.tsx","constants/theme.tsx","constants/routes.tsx","components/history.tsx","actions/authActions.tsx","actions/types.tsx","components/Header/TopNavigation.tsx","components/Header/Logo.tsx","actions/searchActions.tsx","components/Header/MuiMenuAbout.tsx","components/Header/MuiMenuList.tsx","components/Header/MuiMenuLogout.tsx","components/Header/MuiMenuLogin.tsx","components/Search/AutoCompleteSearch.tsx","components/Search/DesktopSearchTextInput.tsx","components/Search/IgnitionCheckboxes.tsx","components/Search/MachineStateSelect.tsx","components/Search/SearchTextInput.tsx","components/Search/SearchButton.tsx","components/Search/SearchFilters.tsx","components/useWindowSize.tsx","components/Search/SearchTags.tsx","components/Search/MobileSearch.tsx","components/RubbleBreadcrumbs.tsx","components/Header/MuiMenuWelcome.tsx","components/Header/MuiMenuPortal.tsx","components/Header/MuiMenuMap.tsx","actions/machineDetailsActions.tsx","actions/machineActions.tsx","components/Header/RubbleBar.tsx","components/Header/index.tsx","components/ShareMachine.tsx","components/RubbleMap/MachineCard.tsx","components/RubbleMap/RubbleMarker.tsx","components/RubbleMap/index.tsx","components/usePosition.tsx","components/useIdle.tsx","components/Dashboard.tsx","components/NotFound.tsx","components/Auth/ProtectedRoute.tsx","components/MachineDetails/MachineImage.tsx","components/MachineDetails/EditMachineConstructionSite.tsx","components/MachineDetails/MachineGeneral.tsx","components/MachineDetails/NavigateToLocation.tsx","components/MachineDetails/MachineMap.tsx","components/MachineDetails/EditMachineState.tsx","components/MachineDetails/MachineStats.tsx","components/MachineDetails/DatesPopOver.tsx","components/MachineDetails/SkeletonLoaderTable.tsx","components/MachineDetails/MachineErrors.tsx","components/MachineDetails/SkeletonLoaderGraph.tsx","components/ActivePointLayer.tsx","components/MachineDetails/FuelLevels/FuelGraphLine.tsx","components/MachineDetails/SkeletonLoaderCardSmall.tsx","components/MachineDetails/FuelLevels/FuelGraphGauges.tsx","components/MachineDetails/GraphControls.tsx","components/MachineDetails/EngineUtilization/EngineUtilizationLine.tsx","components/MachineDetails/TotalHours.tsx","components/MachineDetails/EngineUtilization/EngineUtilizationGauge.tsx","components/MachineDetails/FuelConsumption/FuelConsumptionLine.tsx","components/MachineDetails/FuelConsumption/FuelConsumptionDisplay.tsx","components/MachineDetails/Throughput/ThroughputDisplay.tsx","components/MachineDetails/Throughput/ThroughputLine.tsx","components/MachineDetails/EditMachineTags.tsx","components/MachineDetails/EditMachineNote.tsx","components/MachineDetails/MachineNotes.tsx","components/MachineDetails/MachineTagsNotes.tsx","components/MachineDetails/SkeletonLoaderPdf.tsx","components/MachineDetails/EngineUtilization/EngineUtilizationGaugeHybrid.tsx","components/MachineDetails/MachineEnergySavings.tsx","components/MachineDetails/FuelConsumption/FuelConsumptionDisplayHybrid.tsx","components/MachineDetails/index.tsx","components/About.tsx","components/RubbleList/EnhancedTable.tsx","components/RubbleList/index.tsx","i18n.ts","components/Portal/ServiceCard.tsx","components/Portal/index.tsx","components/Welcome/index.tsx","constants/urls.tsx","App.tsx","serviceWorker.ts","reducers/authReducer.tsx","reducers/searchReducer.tsx","reducers/machineReducer.tsx","reducers/machineDetailsReducer.tsx","reducers/index.tsx","store/index.tsx","index.tsx"],"names":["AccessLevelDto","AccessLevelDtoFromJSON","json","ignoreDiscriminator","AccessLevelDtoFromJSONTyped","AccessLevelDtoToJSON","value","MeasurementSystem","BackendInfoDtoFromJSON","undefined","exists","BackendInfoDtoFromJSONTyped","CurrentUserDtoFromJSON","MeasurementSystemFromJSON","CurrentUserDtoFromJSONTyped","ErrorDtoFromJSON","console","log","Date","ErrorDtoFromJSONTyped","ErrorDtoToJSON","dateTime","toISOString","errorCode","hoursOfCrusherOperation","engineErrorSPN","engineErrorFMI","MachineDtoFromJSON","MachineTypeDtoFromJSON","StateDtoFromJSON","map","TagDtoFromJSON","TelemetrySnapshotDtoFromJSON","NextServiceDtoFromJSON","MachineDtoFromJSONTyped","MachineDtoToJSON","id","serialNumber","notes","organizationId","machineTypeId","MachineTypeDtoToJSON","machineType","owner","projectConstructionSite","StateDtoToJSON","state","stateText","tags","TagDtoToJSON","useBlacklist","errorBlackList","currentlyAuthenticatedUserAccessLevel","TelemetrySnapshotDtoToJSON","telemetrySnapshot","NextServiceDtoToJSON","nextService","info","logInfo","MachineTypeDtoFromJSONTyped","name","category","normalImage","hybridImage","isThirdParty","MeasurementSystemFromJSONTyped","MeasurementSystemToJSON","NextServiceDtoFromJSONTyped","workingHoursTillService","OrganizationDtoFromJSON","OrganizationDtoFromJSONTyped","OrganizationDtoToJSON","parentId","PointDtoFromJSON","PointDtoFromJSONTyped","PointDtoToJSON","longitude","latitude","SampledTelemetryDtoFromJSON","UnitValueDtoFromJSON","SampledTelemetryDtoFromJSONTyped","SampledTelemetryDtoToJSON","timestamp","isEmpty","durationInSeconds","UnitValueDtoToJSON","engineFuelRate","percentageLoadAtCurrentSpeed","fuelLevel","adBlueLevel","weightLoad1","weightLoad2","weightLoad3","weightLoad4","engineCrushSpeedActualValue","engineCrushSpeedDesiredValue","crusherEngineTemperature","crusherDriveCurrentLoad","intermediateCircuitVoltage","energyConsumeRate","mainDischargeConveyorFuelRate","mainDischargeConveyorEnergyRate","sideDischargeConveyorFuelRate","sideDischargeConveyorEnergyRate","StateDtoFromJSONTyped","key","TagDtoFromJSONTyped","TelemetryRangeAveragesDtoFromJSON","TelemetryRangeAveragesDtoFromJSONTyped","TelemetryRangeAveragesDtoToJSON","averageEngineUtilization","averageWeightLoad1","averageWeightLoad2","averageWeightLoad3","averageWeightLoad4","averageFuelLevel","averageAdBlueLevel","mainDischargeFuelRate","sideDischargeFuelRate","energyConsumptionRate","mainDischargeEnergyConsumptionRate","sideDischargeEnergyConsumptionRate","averageEnergyUtilization","TelemetryRangeDtoFromJSON","TelemetryRangeTotalsDtoFromJSON","TelemetryRangeSavingsDtoFromJSON","TelemetryRangeDtoFromJSONTyped","TelemetryRangeSavingsDtoFromJSONTyped","TelemetryRangeSavingsDtoToJSON","dieselSaved","energySaved","co2Saved","co2Emission","TelemetryRangeTotalsDtoFromJSONTyped","TelemetryRangeTotalsDtoToJSON","totalEngineFuelConsumed","totalEnergyConsumed","totalWeightLoad1","totalWeightLoad2","totalWeightLoad3","totalWeightLoad4","totalHoursOfEngineOperation","totalHoursOfCrusherOperation","totalHoursOfExternalPowerSupply","totalHoursOfInternalPowerSupply","TelemetrySnapshotDtoFromJSONTyped","updatedAt","isIgnitionOn","operationgModeGenerator","operatingModeExternal","operatingModeNeutral","location","isHybrid","UnitValueDtoFromJSONTyped","unit","UserDtoFromJSON","UserDtoFromJSONTyped","UserDtoToJSON","organization","isAdmin","email","isoLanguageCode","measurementSystem","organizationAccessLevel","module","exports","BASE_PATH","replace","BaseAPI","configuration","Configuration","middleware","fetchApi","url","init","a","fetchParams","pre","fetch","response","post","clone","this","next","concat","preMiddlewares","middlewares","withMiddleware","postMiddlewares","context","createFetchParams","status","basePath","path","query","Object","keys","length","queryParamsStringify","body","FormData","URLSearchParams","Blob","JSON","stringify","headers","assign","method","credentials","constructor","slice","RequiredError","field","msg","Error","window","bind","querystring","username","password","apiKey","accessToken","params","prefix","fullKey","Array","multiValue","singleValue","encodeURIComponent","String","join","filter","part","JSONApiResponse","raw","transformer","jsonValue","VoidApiResponse","TextApiResponse","text","runtime","MachineTagsApi","requestParameters","queryParameters","machineId","tagId","headerParameters","request","apiMachineTagsDeleteRaw","apiMachineTagsGetRaw","apiMachineTagsPostRaw","MachinesApi","toLocaleTimeString","apiMachinesGetRaw","res","apiMachinesIdDeleteRaw","apiMachinesIdGetRaw","machineDto","apiMachinesIdPutRaw","apiMachinesMachineIdNotesPutRaw","apiMachinesMachineIdProjectConstructionSitePutRaw","stateId","apiMachinesMachineIdStatePutRaw","apiMachinesPostRaw","SessionApi","apiSessionBackendinfoGetRaw","returnUrl","apiSessionLoginGetRaw","apiSessionLogoutGetRaw","apiSessionUserGetRaw","StatesApi","apiStatesGetRaw","apiStatesIdDeleteRaw","apiStatesIdGetRaw","stateDto","apiStatesIdPutRaw","apiStatesPostRaw","TagsApi","apiTagsGetRaw","apiTagsIdDeleteRaw","apiTagsIdGetRaw","tagDto","apiTagsIdPutRaw","apiTagsPostRaw","UploadResponseDtoFromJSON","UploadResponseDtoFromJSONTyped","UploadDtoToJSON","companyName","purpose","subject","description","UploadApi","uploadDto","apiUploadPostRaw","file","formData","append","apiUploadFileRaw","apiCommitRaw","apiStateRaw","UsersApi","apiUsersGetRaw","apiUsersIdDeleteRaw","apiUsersIdGetRaw","userDto","apiUsersIdPutRaw","apiUsersPostRaw","isoLanguageString","updatePreferencesPutRaw","rubbleMasterHq","lat","lng","protocol","host","machinesApi","api","fetchStatusApi","fetchTagsApi","machineTagsApi","fetchSessionApi","userApi","googleApiKey","googleMapUrlWithKey","googleGeoCodeUrl","openLinkWithRewrite","route","href","initialMachineState","AccessLevel","None","createPdfReportFooter","pdf","page","pageNumber","maxPage","setLineWidth","line","internal","pageSize","getHeight","getWidth","setFontSize","setFontType","i18next","t","moment","format","align","createPdfReportHeader","reportTitle","reportTimeframe","logoImg","Image","src","logo","addImage","createGraphReportsPage","imgLeft","imgRight","isMobile","graphWidth","smallChartWidth","languageOptions","img","flagEnGb","flagEnUs","flagDeAt","flagEsEs","flagFrFr","flagItIt","pdfUnitsFormatter","unitValue","fallbackUnitTranslation","noDataTranslation","toFixed","sensorInterval","themeColors","chartColors","red","pink","purple","deepPurple","indigo","blue","lightBlue","cyan","teal","green","lightGreen","lime","yellow","rmYellow","amber","orange","deepOrange","brown","gray","blueGray","white","black","electricBlue","rubbleMasterTheme","responsiveFontSizes","createMuiTheme","palette","type","primary","secondary","disabled","action","active","hover","selected","disabledBackground","background","default","paper","main","overrides","MuiMenuItem","root","backgroundColor","MuiCardHeader","textAlign","mapStyleDark","elementType","stylers","color","visibility","featureType","routes","portal","pathName","showSearch","searchOverlap","login","welcome","fleetManagement","list","about","documentation","cockpit","academy","virtualworld","machineConfigurator","webshop","digital","notFound","createBrowserHistory","fetchUserSession","dispatch","apiSessionUserGet","then","user","payload","history","push","catch","handleUserIdle","isIdle","pathname","useStyles","makeStyles","theme","createStyles","formControl","margin","spacing","width","display","selectEmpty","marginTop","flag","height","TopNavigation","useTranslation","i18n","classes","useState","language","setLanguage","Metric","units","setUnits","useHistory","useDispatch","showUnitsSelect","includes","auth","useSelector","changeLanguage","selectedLanguage","isAuthenticated","getState","updatePreferencesPut","error","changeMeasurementSystem","useCallback","selectedUnit","handleUserUnitChange","useEffect","Box","className","position","Grid","container","justify","alignItems","style","paddingLeft","FormControl","Select","labelId","onChange","ev","target","option","MenuItem","Tooltip","title","arrow","alt","Typography","fontSize","marginLeft","values","unitName","right","zIndex","top","breakpoints","up","Logo","to","updateSearchText","searchMachines","filterMachines","allMachines","machines","filteredMachines","searchText","search","toLowerCase","checkboxIgnitionOn","checkboxIgnitionOff","selectedMachineState","selectedMachineTags","machineTagOptions","item","selectedMachineTagIds","sort","b","machineTagIds","tagIds","forEach","tag","filterMachinesAccordingToSetFilterOptions","ownerRegex","RegExp","test","MuiMenuAbout","props","isActive","ListItemIcon","variant","MuiMenuList","MuiMenuLogout","Fragment","MuiMenuLogin","inputRoot","padding","transition","transitions","create","AutoCompleteSearch","autoCompleteOptions","isOpen","setIsOpen","handleClear","stringOptions","m","i","uniqueStringOptions","Set","Autocomplete","freeSolo","options","popupIcon","inputValue","multiple","getOptionLabel","paddingRight","open","onClose","event","handleEnter","filterOptions","renderInput","TextField","mobile","fullWidth","placeholder","InputProps","endAdornment","InputAdornment","IconButton","aria-label","onClick","searchIcon","pointerEvents","justifyContent","DesktopSearchTextInput","IgnitionCheckboxes","FormLabel","component","FormGroup","row","FormControlLabel","control","Checkbox","checked","label","minWidth","MachineStateSelect","machineStateOptions","extendedMachineStateOptions","handleChange","machineStateOption","updateSelectedMachineState","InputLabel","index","SearchTextInput","Container","maxWidth","searchButton","SearchButton","Button","SearchFilters","direction","useWindowSize","isClient","getSize","innerWidth","innerHeight","windowSize","setWindowSize","handleResize","addEventListener","removeEventListener","chips","flexWrap","chip","noLabel","MenuProps","PaperProps","maxHeight","ITEM_HEIGHT","SearchTags","size","isSmallScreen","React","setOpen","onOpen","updateSelectedMachineTags","input","Input","renderValue","Chip","borderColor","searchContainer","flexDirection","MobileSearch","Collapse","in","noValidate","autoComplete","activeRouteLink","light","textDecoration","nonActiveRouteLink","dark","RubbleBreadcrumbs","routeName","machine","machineDetails","current","home","charAt","toUpperCase","Breadcrumbs","aria-current","MuiMenuWelcome","MuiMenuPortal","MuiMenuMap","translationString","fetchMachineDetails","curEnddate","endDate","updateEndDate","startDate","calculateResolutionAndGraphTicks","resolutionInSeconds","graphTickValues","graphDateFormat","fetchMachineTags","fetchMachineStateOptions","fetchTelemetryMachineData","getSuggestedAddressForMachineDetails","secondsDifference","diff","from","till","telemetryDataResponse","telemetryRange","telemetry","errorCodes","filteredTelemetry","maxTimeStamp","setAverages","averages","totals","savings","CalculateFuelConsumed","calculateAverageEnergyUtilization","sampledTelemetry","engineFuelArray","engineFuelConsumedTotal","reduce","prev","curr","engineFuelConsumedAvg","duration","as","engineUtilizationArray","fuelLevelsArr","fuelConsumptionArr","engineFuelConsumed","energyConsumptionArr","energyUtilizationArray","results","formatted_address","getAllMachines","machineState","hasFetchedAllMachines","isFetchingAllMachines","fetchAllMachines","apiMachinesGet","suggestedAddress","err","apiStatesGet","statustypes","getUserPostion","confirmed","apiTagsGet","chartColorsKeys","tagsWithColor","randomNum","Math","floor","random","randomColor","grow","flexGrow","menuButton","marginRight","borderRadius","shape","fade","common","searchDesktop","searchMobile","sectionDesktop","sectionMobile","errorText","filterWrapper","paddingBottom","secondarySearchButton","RubbleBar","anchorEl","setAnchorEl","isMenuOpen","Boolean","showSearchError","hideFilter","setChecked","handleMenuClose","handleRouteChange","handleUserLogout","handleUserLogin","menuServices","renderMenu","Menu","anchorOrigin","vertical","horizontal","keepMounted","transformOrigin","searchError","showSearchBar","prop","AppBar","boxShadow","Toolbar","edge","currentTarget","Switch","Header","iconWrapper","noPaddingBottom","ShareMachine","dense","isDesktop","shareUrl","navigator","share","stopPropagation","clipboard","writeText","card","listItem","textItem","marginBottom","actionsArena","paddingTop","close","noPadding","MachineCard","isSmall","Card","CardContent","disablePadding","ListItem","ListItemText","CardActions","disableSpacing","startIcon","RubbleMarker","selectedMachine","componentDidUpdate","prevProps","setState","componentWillUnmount","hideOverlay","disableClick","optimized","clickable","noRedraw","icon","pinGreen","pinRed","anchor","x","y","scaledSize","Component","Map","defaultOptions","mapTypeControl","mapTypeControlOptions","mapTypeIds","google","maps","MapTypeControlStyle","HORIZONTAL_BAR","ControlPosition","BOTTOM_CENTER","clickableIcons","styles","streetViewControl","fullscreenControl","showMarkerCluster","center","zoom","panToCenter","bounds","LatLngBounds","rubbleMarkers","extend","defaultZoom","ref","fitBounds","getMapBounds","ignoreHidden","averageCenter","minimumClusterSize","gridSize","RubbleMap","connect","withScriptjs","withGoogleMap","defaultSettings","enableHighAccuracy","timeout","Infinity","maximumAge","useIdle","timeToIdle","inactivityEvents","setIsIdle","activityDetector","createActivityDetector","on","stop","loadingElement","fullHeight","Dashboard","userConfirmedGeo","CircularProgress","settings","setPosition","setError","coords","userCoords","onError","message","geo","geolocation","getCurrentPosition","usePosition","googleMapURL","containerElement","mapElement","wrapper","rmBackground","minHeight","textBox","opacity","NotFound","ProtectedRoute","useLocation","substr","userAuth","setUserAuth","isLoading","render","MachineImage","defaultImg","dialog","buttonWrapper","saveButton","tagsWrapper","content","contentWrapper","MachineProjectConstructionSiteDialog","machineProjectConstructionSite","setMachineProjectConstructionSite","handleClose","Dialog","aria-labelledby","DialogTitle","multiline","onKeyPress","preventDefault","preventEnter","apiMachinesMachineIdProjectConstructionSitePut","deleteMachineProjectConstructionSite","editMachineProjectConstructionSite","trim","EditmachineProjectConstructionSite","cardContent","constructionSite","MachineGeneral","CardMedia","image","Skeleton","animation","Write","NavigateToLocation","mapContainer","cardWrapper","noData","MachineMap","mapOptions","zoomControl","gestureHandling","draggableCursor","draggingCursor","mapCenter","MachineStateDialog","setSelectedMachineState","selectedMachineStateOption","updateMachineState","EditMachineState","chipRed","chipGreen","lastUpdate","MachineStats","averageFuelLevels","isServiceClose","utc","local","disableTypography","typography","DatesPopOver","aria-describedby","Popover","SkeletonLoaderTable","desc","orderBy","EnhancedTableHead","order","onRequestSort","showErrrorFrequency","headCells","class","tableCellFixedMedium","tableCellFixedSmall","tableCellFill","headCellsExtended","tableHead","TableHead","TableRow","tableRow","headCell","TableCell","sortDirection","TableSortLabel","property","visuallyHidden","border","clip","overflow","tableControls","helperText","MachineErrors","arr","startRowsPerPage","machineErrors","isFetchingTelemetry","isFetchingTelemtry","setOrder","setOrderBy","setPage","rowsPerPage","setRowsPerPage","showErrorFrequency","setShowErrorFrequency","errors","hasSPN","group","pdfErrors","frequency","_","errorsExtended","filteredErrors","rows","emptyRows","min","Paper","TableContainer","Table","rowCount","TableBody","array","cmp","stabilizedThis","el","stableSort","getSorting","date","tabIndex","scope","colSpan","inputProps","TablePagination","rowsPerPageOptions","labelRowsPerPage","count","onChangePage","newPage","onChangeRowsPerPage","parseInt","doc","jsPDF","reportFileName","autoTable","headStyles","fillColor","textColor","halign","minCellWidth","bodyStyles","didDrawPage","getNumberOfPages","bottom","left","showFoot","rowPageBreak","columns","header","dataKey","totalNumberOfPages","save","createReport","SkeletonLoaderGraph","ActivePointLayer","point","transform","r","fill","tooltipWrapper","tooltipLabel","FuelGraphLine","isPdfReport","telemetryData","setCurrent","handleHover","chartData","data","tooltip","axis","legend","ticks","stroke","animate","colors","d","lineWidth","xScale","precision","useUTC","xFormat","yScale","max","curve","axisTop","axisRight","enablePoints","layers","axisBottom","orient","tickSize","tickPadding","tickRotation","tick","pointData","serieId","serieColor","onMouseEnter","onMouseMove","onMouseLeave","axisLeft","legendOffset","legendPosition","enableGridX","enableCrosshair","pointSize","pointBorderWidth","pointBorderColor","pointLabel","pointLabelYOffset","useMesh","legends","translateX","translateY","itemsSpacing","itemDirection","itemWidth","itemHeight","itemOpacity","itemTextColor","symbolSize","symbolShape","symbolBorderColor","effects","itemBackground","SkeletonLoaderCardSmall","gaugesWrapper","gaugeWrapper","FuelGraphGauges","lastFuelLevel","lastAdBlueLevel","dataDiesel","dataAdblue","enableRadialLabels","enableSlicesLabels","isInteractive","startAngle","endAngle","innerRadius","padAngle","cornerRadius","modifiers","slicesLabelsSkipAngle","slicesLabelsTextColor","motionStiffness","motionDamping","datePickerWrapper","datePicker","updateButtonWrapper","updateButtonProgress","GraphControls","utils","DateFnsUtils","ampm","maxDate","updateStartDate","KeyboardButtonProps","strictCompareDates","disableFuture","minDate","updateMachineTelemetryData","onCreateReport","EngineUtilizationLine","dieselEngineLoadsTxt","isJawCrusher","electricDriveLoadsTxt","engineLoadsTxt","averageEnergyLoadsTxt","averageEngineLoadsTxt","utilization","enableArea","yFormatted","normalFont","smallFont","TotalHours","EngineUtilizationGauge","lastEngineUtilization","averageEnergyUtilizationTxt","loadsTxt","graphData","graphDataLoads","FuelConsumptionLine","filteredEngineFuelRateData","engineFuelRateUnit","filteredMainDischargeConveyorFuelRateData","mainDischargeConveyorFuelRateUnit","filteredSideDischargeConveyorFuelRateData","sideDischargeConveyorFuelRateUnit","reverse","gridYValues","base","toString","startsWith","tickValues","firstEntry","displayItem","FuelConsumptionDisplay","averageFuelConsumption","titleWrapper","ThroughputDisplay","averageThroughputs","maxBeltScales","ThroughputLine","weightLoadFiltered","weightLoadUnit","chartData2","chartData3","chartData4","enableSlices","MachineTagsDialog","machineTags","setMachineTags","handleAdd","machineTag","apiMachineTagsPost","addMachineTag","handleDelete","apiMachineTagsDelete","deleteMachineTag","tagOption","onDelete","deleteIcon","EditMachineTags","MachineNotesDialog","machineNote","setMachineNote","apiMachinesMachineIdNotesPut","deleteMachineNote","editMachineNote","EditMachineNote","overflowY","justifyItems","MachineNotes","gutterBottom","MachineTagsNotes","borderWidth","SkeletonLoaderPdf","xs","md","electricGaugeWrapper","noDataWrapper","EngineUtilizationGaugeHybrid","lastEnergyUtilization","electricGraphData","electricGraphDataLoads","savingsWrapper","saved","claim","fontStyle","rightCorner","MachineEnergySavings","valuesWrapper","FuelConsumptionDisplayHybrid","averageEnergyConsumption","report","graphControls","MachineDetails","match","isCreatingPdf","warn","fuelGaugesRef","useRef","fuelLevelsRef","engineUtilizationGaugeRef","engineUtilizationRef","fuelConsumptionDisplayRef","fuelConsumptionLineRef","throughputDisplayRef","throughputLineRef","machineImgRef","engineUtilizationGaugeHybridRef","fuelConsumptionDisplayHybridRef","renderToCanvas","elementToRender","html2canvas","imageTimeout","scale","ignoreElements","otherElement","contains","localName","engineOperationTotal","crusherOperationTotal","pdfTotalWeightLoad1","pdfTotalWeightLoad2","pdfTotalWeightLoad3","pdfTotalWeightLoad4","projectConstructionSiteWithAuth","Read","machineImg","machineImage","getMachineImage","callback","crossOrigin","onerror","onload","addMachineImage","imageData","w","h","lineHeight","lineFormatter","multiplier","curLine","split","element","addPage","Promise","all","images","sm","lg","separator","borderTop","About","userSettings","backendInfo","apiSessionBackendinfoGet","paragraph","Link","version","numeric","sortLabel","table","pagination","cell","tableBottom","getAddresses","EnhancedTable","getAddress","result","street_address","find","types","plus_code","RouterLink","machinesOnPage","RubbleList","updateLocale","week","dow","doy","use","Backend","initReactI18next","debug","fallbackLng","whitelist","interpolation","escapeValue","backend","requestOptions","cache","backfaceVisibility","cardDisabled","cardActive","fontFamily","textTransform","fontWeight","headerImage","shadowOuterHelper","shadowInnerHelper","ServiceCard","headerImageSrc","cardTitle","onClickHandler","loginButtonLabel","isAvailable","rmFleetManagement","rmProductConfigurator","rmWebshop","rmAcademy","rmDocumentation","rmCockpit","rmVirtualWorld","rmDigitalInsight","ButtonBase","disableRipple","backgroundImage","backgroundSize","backgroundPosition","cardsWrapper","headerWrapper","title1","letterSpacing","subtitleWrapper","subtitle","logoWrapper","cursor","linkText","logoText","Portal","redirectUrl","rel","rmWebIcon","pageTitle","playerWrapper","player","Welcome","frameBorder","allow","allowFullScreen","App","fallback","ThemeProvider","CssBaseline","exact","Machine","hostname","initialState","searchTextValue","userPosition","today","yesterday","setDate","getDate","setHours","getHours","isFetching","maxEndDate","combineReducers","updatedAllMachines","updatedFilteredMachines","sumEngineFuelConsumed","middleWare","thunk","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","store","createStore","rootReducer","applyMiddleware","ReactDOM","document","getElementById","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.df4b0757.chunk.js","sourcesContent":["/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n/**\r\n * \r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum AccessLevelDto {\r\n None = 'None',\r\n RestrictedRead = 'RestrictedRead',\r\n Read = 'Read',\r\n Write = 'Write'\r\n}\r\n\r\nexport function AccessLevelDtoFromJSON(json: any): AccessLevelDto {\r\n return AccessLevelDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function AccessLevelDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): AccessLevelDto {\r\n return json as AccessLevelDto;\r\n}\r\n\r\nexport function AccessLevelDtoToJSON(value?: AccessLevelDto | null): any {\r\n return value as any;\r\n}\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n/**\r\n * \r\n * @export\r\n * @enum {string}\r\n */\r\nexport enum MeasurementSystem {\r\n Metric = 'Metric',\r\n Imperial = 'Imperial'\r\n}\r\n\r\nexport function MeasurementSystemFromJSON(json: any): MeasurementSystem {\r\n return MeasurementSystemFromJSONTyped(json, false);\r\n}\r\n\r\nexport function MeasurementSystemFromJSONTyped(json: any, ignoreDiscriminator: boolean): MeasurementSystem {\r\n return json as MeasurementSystem;\r\n}\r\n\r\nexport function MeasurementSystemToJSON(value?: MeasurementSystem | null): any {\r\n return value as any;\r\n}\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * \r\n * @export\r\n * @interface BackendInfoDto\r\n */\r\nexport interface BackendInfoDto {\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof BackendInfoDto\r\n */\r\n version?: string | null;\r\n}\r\n\r\nexport function BackendInfoDtoFromJSON(json: any): BackendInfoDto {\r\n return BackendInfoDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function BackendInfoDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): BackendInfoDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'version': !exists(json, 'version') ? undefined : json['version'],\r\n };\r\n}\r\n\r\nexport function BackendInfoDtoToJSON(value?: BackendInfoDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'version': value.version,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n MeasurementSystem,\r\n MeasurementSystemFromJSON,\r\n MeasurementSystemFromJSONTyped,\r\n MeasurementSystemToJSON,\r\n} from './';\r\n\r\n/**\r\n * \r\n * @export\r\n * @interface CurrentUserDto\r\n */\r\nexport interface CurrentUserDto {\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof CurrentUserDto\r\n */\r\n id: number;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof CurrentUserDto\r\n */\r\n subjectId: string;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof CurrentUserDto\r\n */\r\n email: string;\r\n /**\r\n * \r\n * @type {boolean}\r\n * @memberof CurrentUserDto\r\n */\r\n isAdmin: boolean;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof CurrentUserDto\r\n */\r\n organizationName?: string | null;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof CurrentUserDto\r\n */\r\n isoLanguageCode?: string | null;\r\n /**\r\n * \r\n * @type {MeasurementSystem}\r\n * @memberof CurrentUserDto\r\n */\r\n measurementSystem?: MeasurementSystem;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof CurrentUserDto\r\n */\r\n organizationAccessLevel?: string | null;\r\n}\r\n\r\nexport function CurrentUserDtoFromJSON(json: any): CurrentUserDto {\r\n return CurrentUserDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function CurrentUserDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): CurrentUserDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'id': json['id'],\r\n 'subjectId': json['subjectId'],\r\n 'email': json['email'],\r\n 'isAdmin': json['isAdmin'],\r\n 'organizationName': !exists(json, 'organizationName') ? undefined : json['organizationName'],\r\n 'isoLanguageCode': !exists(json, 'isoLanguageCode') ? undefined : json['isoLanguageCode'],\r\n 'measurementSystem': !exists(json, 'measurementSystem') ? undefined : MeasurementSystemFromJSON(json['measurementSystem']),\r\n 'organizationAccessLevel': !exists(json, 'organizationAccessLevel') ? undefined : json['organizationAccessLevel'],\r\n };\r\n}\r\n\r\nexport function CurrentUserDtoToJSON(value?: CurrentUserDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'id': value.id,\r\n 'subjectId': value.subjectId,\r\n 'email': value.email,\r\n 'isAdmin': value.isAdmin,\r\n 'organizationName': value.organizationName,\r\n 'isoLanguageCode': value.isoLanguageCode,\r\n 'measurementSystem': MeasurementSystemToJSON(value.measurementSystem),\r\n 'organizationAccessLevel': value.organizationAccessLevel,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * \r\n * @export\r\n * @interface ErrorDto\r\n */\r\nexport interface ErrorDto {\r\n /**\r\n * \r\n * @type {Date}\r\n * @memberof ErrorDto\r\n */\r\n dateTime?: Date;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof ErrorDto\r\n */\r\n errorCode?: string | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof ErrorDto\r\n */\r\n hoursOfCrusherOperation?: number | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof ErrorDto\r\n */\r\n engineErrorSPN?: number | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof ErrorDto\r\n */\r\n engineErrorFMI?: number | null;\r\n}\r\n\r\nexport function ErrorDtoFromJSON(json: any): ErrorDto {\r\n return ErrorDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function ErrorDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): ErrorDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n console.log(\"In ErrorDto.ErrorDtoFromJSONTyped\");\r\n return {\r\n \r\n 'dateTime': !exists(json, 'dateTime') ? undefined : (new Date(json['dateTime'])),\r\n 'errorCode': !exists(json, 'errorCode') ? undefined : json['errorCode'],\r\n 'hoursOfCrusherOperation': !exists(json, 'hoursOfCrusherOperation') ? undefined : json['hoursOfCrusherOperation'],\r\n 'engineErrorSPN': !exists(json, 'engineErrorSPN') ? undefined : json['engineErrorSPN'],\r\n 'engineErrorFMI': !exists(json, 'engineErrorFMI') ? undefined : json['engineErrorFMI'],\r\n };\r\n}\r\n\r\nexport function ErrorDtoToJSON(value?: ErrorDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n console.log(\"In ErrorDto.ErrorDtoToJSON\");\r\n return {\r\n \r\n 'dateTime': value.dateTime === undefined ? undefined : (value.dateTime.toISOString()),\r\n 'errorCode': value.errorCode,\r\n 'hoursOfCrusherOperation': value.hoursOfCrusherOperation,\r\n 'engineErrorSPN': value.engineErrorSPN,\r\n 'engineErrorFMI': value.engineErrorFMI,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n AccessLevelDto,\r\n AccessLevelDtoFromJSON,\r\n AccessLevelDtoFromJSONTyped,\r\n AccessLevelDtoToJSON,\r\n MachineTypeDto,\r\n MachineTypeDtoFromJSON,\r\n MachineTypeDtoFromJSONTyped,\r\n MachineTypeDtoToJSON,\r\n NextServiceDto,\r\n NextServiceDtoFromJSON,\r\n NextServiceDtoFromJSONTyped,\r\n NextServiceDtoToJSON,\r\n StateDto,\r\n StateDtoFromJSON,\r\n StateDtoFromJSONTyped,\r\n StateDtoToJSON,\r\n TagDto,\r\n TagDtoFromJSON,\r\n TagDtoFromJSONTyped,\r\n TagDtoToJSON,\r\n TelemetrySnapshotDto,\r\n TelemetrySnapshotDtoFromJSON,\r\n TelemetrySnapshotDtoFromJSONTyped,\r\n TelemetrySnapshotDtoToJSON,\r\n} from './';\r\n\r\n/**\r\n * \r\n * @export\r\n * @interface MachineDto\r\n */\r\nexport interface MachineDto {\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof MachineDto\r\n */\r\n id: number;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof MachineDto\r\n */\r\n serialNumber: string;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof MachineDto\r\n */\r\n notes: string;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof MachineDto\r\n */\r\n organizationId?: number | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof MachineDto\r\n */\r\n machineTypeId: number;\r\n /**\r\n * \r\n * @type {MachineTypeDto}\r\n * @memberof MachineDto\r\n */\r\n machineType: MachineTypeDto;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof MachineDto\r\n */\r\n owner: string;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof MachineDto\r\n */\r\n projectConstructionSite: string;\r\n /**\r\n * \r\n * @type {StateDto}\r\n * @memberof MachineDto\r\n */\r\n state: StateDto;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof MachineDto\r\n */\r\n stateText: string;\r\n /**\r\n * \r\n * @type {Array}\r\n * @memberof MachineDto\r\n */\r\n tags?: Array | null;\r\n /**\r\n * \r\n * @type {boolean}\r\n * @memberof MachineDto\r\n */\r\n useBlacklist: boolean;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof MachineDto\r\n */\r\n errorBlackList: string;\r\n /**\r\n * \r\n * @type {AccessLevelDto}\r\n * @memberof MachineDto\r\n */\r\n currentlyAuthenticatedUserAccessLevel: AccessLevelDto;\r\n /**\r\n * \r\n * @type {TelemetrySnapshotDto}\r\n * @memberof MachineDto\r\n */\r\n telemetrySnapshot?: TelemetrySnapshotDto | null;\r\n /**\r\n * \r\n * @type {NextServiceDto}\r\n * @memberof MachineDto\r\n */\r\n nextService?: NextServiceDto | null;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof MachineDto\r\n */\r\n info: string;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof MachineDto\r\n */\r\n logInfo: string;\r\n}\r\n\r\nexport function MachineDtoFromJSON(json: any): MachineDto {\r\n return MachineDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function MachineDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): MachineDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'id': json['id'],\r\n 'serialNumber': json['serialNumber'],\r\n 'notes': json['notes'],\r\n 'organizationId': !exists(json, 'organizationId') ? undefined : json['organizationId'],\r\n 'machineTypeId': json['machineTypeId'],\r\n 'machineType': MachineTypeDtoFromJSON(json['machineType']),\r\n 'owner': json['owner'],\r\n 'projectConstructionSite': json['projectConstructionSite'],\r\n 'state': StateDtoFromJSON(json['state']),\r\n 'stateText': json['stateText'],\r\n 'tags': !exists(json, 'tags') ? undefined : (json['tags'] === null ? null : (json['tags'] as Array).map(TagDtoFromJSON)),\r\n 'useBlacklist': json['useBlacklist'],\r\n 'errorBlackList': json['errorBlackList'],\r\n 'currentlyAuthenticatedUserAccessLevel': AccessLevelDtoFromJSON(json['currentlyAuthenticatedUserAccessLevel']),\r\n 'telemetrySnapshot': !exists(json, 'telemetrySnapshot') ? undefined : TelemetrySnapshotDtoFromJSON(json['telemetrySnapshot']),\r\n 'nextService': !exists(json, 'nextService') ? undefined : NextServiceDtoFromJSON(json['nextService']),\r\n 'info': json['info'],\r\n 'logInfo': json['logInfo'],\r\n };\r\n}\r\n\r\nexport function MachineDtoToJSON(value?: MachineDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'id': value.id,\r\n 'serialNumber': value.serialNumber,\r\n 'notes': value.notes,\r\n 'organizationId': value.organizationId,\r\n 'machineTypeId': value.machineTypeId,\r\n 'machineType': MachineTypeDtoToJSON(value.machineType),\r\n 'owner': value.owner,\r\n 'projectConstructionSite': value.projectConstructionSite,\r\n 'state': StateDtoToJSON(value.state),\r\n 'stateText': value.stateText,\r\n 'tags': value.tags === undefined ? undefined : (value.tags === null ? null : (value.tags as Array).map(TagDtoToJSON)),\r\n 'useBlacklist': value.useBlacklist,\r\n 'errorBlackList': value.errorBlackList,\r\n 'currentlyAuthenticatedUserAccessLevel': AccessLevelDtoToJSON(value.currentlyAuthenticatedUserAccessLevel),\r\n 'telemetrySnapshot': TelemetrySnapshotDtoToJSON(value.telemetrySnapshot),\r\n 'nextService': NextServiceDtoToJSON(value.nextService),\r\n 'info': value.info,\r\n 'logInfo': value.logInfo,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * \r\n * @export\r\n * @interface MachineTypeDto\r\n */\r\nexport interface MachineTypeDto {\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof MachineTypeDto\r\n */\r\n id: number;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof MachineTypeDto\r\n */\r\n name: string;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof MachineTypeDto\r\n */\r\n category: string;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof MachineTypeDto\r\n */\r\n normalImage?: string | null;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof MachineTypeDto\r\n */\r\n hybridImage?: string | null;\r\n /**\r\n * \r\n * @type {boolean}\r\n * @memberof MachineTypeDto\r\n */\r\n isThirdParty?: boolean;\r\n /**\r\n * \r\n * @type {boolean}\r\n * @memberof MachineTypeDto\r\n */\r\n isJawCrusher?: boolean;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof MachineTypeDto\r\n */\r\n maxBeltScales?: number;\r\n}\r\n\r\nexport function MachineTypeDtoFromJSON(json: any): MachineTypeDto {\r\n return MachineTypeDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function MachineTypeDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): MachineTypeDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'id': json['id'],\r\n 'name': json['name'],\r\n 'category': json['category'],\r\n 'normalImage': !exists(json, 'normalImage') ? undefined : json['normalImage'],\r\n 'hybridImage': !exists(json, 'hybridImage') ? undefined : json['hybridImage'],\r\n 'isThirdParty': !exists(json, 'isThirdParty') ? undefined : json['isThirdParty'],\r\n };\r\n}\r\n\r\nexport function MachineTypeDtoToJSON(value?: MachineTypeDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'id': value.id,\r\n 'name': value.name,\r\n 'category': value.category,\r\n 'normalImage': value.normalImage,\r\n 'hybridImage': value.hybridImage,\r\n 'isThirdParty': value.isThirdParty,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * \r\n * @export\r\n * @interface NextServiceDto\r\n */\r\nexport interface NextServiceDto {\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof NextServiceDto\r\n */\r\n name?: string | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof NextServiceDto\r\n */\r\n workingHoursTillService?: number;\r\n}\r\n\r\nexport function NextServiceDtoFromJSON(json: any): NextServiceDto {\r\n return NextServiceDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function NextServiceDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): NextServiceDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'name': !exists(json, 'name') ? undefined : json['name'],\r\n 'workingHoursTillService': !exists(json, 'workingHoursTillService') ? undefined : json['workingHoursTillService'],\r\n };\r\n}\r\n\r\nexport function NextServiceDtoToJSON(value?: NextServiceDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'name': value.name,\r\n 'workingHoursTillService': value.workingHoursTillService,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * \r\n * @export\r\n * @interface OrganizationDto\r\n */\r\nexport interface OrganizationDto {\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof OrganizationDto\r\n */\r\n id?: number;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof OrganizationDto\r\n */\r\n name?: string | null;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof OrganizationDto\r\n */\r\n parentId?: string | null;\r\n}\r\n\r\nexport function OrganizationDtoFromJSON(json: any): OrganizationDto {\r\n return OrganizationDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function OrganizationDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): OrganizationDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'id': !exists(json, 'id') ? undefined : json['id'],\r\n 'name': !exists(json, 'name') ? undefined : json['name'],\r\n 'parentId': !exists(json, 'parentId') ? undefined : json['parentId'],\r\n };\r\n}\r\n\r\nexport function OrganizationDtoToJSON(value?: OrganizationDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'id': value.id,\r\n 'name': value.name,\r\n 'parentId': value.parentId,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * This class is used to model locations within the WGS84(SRID 4326) reference coordinate system.\r\n * @export\r\n * @interface PointDto\r\n */\r\nexport interface PointDto {\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof PointDto\r\n */\r\n longitude: number;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof PointDto\r\n */\r\n latitude: number;\r\n}\r\n\r\nexport function PointDtoFromJSON(json: any): PointDto {\r\n return PointDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function PointDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): PointDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'longitude': json['longitude'],\r\n 'latitude': json['latitude'],\r\n };\r\n}\r\n\r\nexport function PointDtoToJSON(value?: PointDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'longitude': value.longitude,\r\n 'latitude': value.latitude,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n UnitValueDto,\r\n UnitValueDtoFromJSON,\r\n UnitValueDtoFromJSONTyped,\r\n UnitValueDtoToJSON,\r\n} from './';\r\n\r\n/**\r\n * \r\n * @export\r\n * @interface SampledTelemetryDto\r\n */\r\nexport interface SampledTelemetryDto {\r\n /**\r\n * \r\n * @type {Date}\r\n * @memberof SampledTelemetryDto\r\n */\r\n timestamp?: Date;\r\n /**\r\n * \r\n * @type {boolean}\r\n * @memberof SampledTelemetryDto\r\n */\r\n isEmpty?: boolean;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof SampledTelemetryDto\r\n */\r\n durationInSeconds?: number | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof SampledTelemetryDto\r\n */\r\n engineFuelRate?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof SampledTelemetryDto\r\n */\r\n percentageLoadAtCurrentSpeed?: number | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof SampledTelemetryDto\r\n */\r\n fuelLevel?: number | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof SampledTelemetryDto\r\n */\r\n adBlueLevel?: number | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof SampledTelemetryDto\r\n */\r\n weightLoad1?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof SampledTelemetryDto\r\n */\r\n weightLoad2?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof SampledTelemetryDto\r\n */\r\n weightLoad3?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof SampledTelemetryDto\r\n */\r\n weightLoad4?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof SampledTelemetryDto\r\n */\r\n engineCrushSpeedActualValue?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof SampledTelemetryDto\r\n */\r\n engineCrushSpeedDesiredValue?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof SampledTelemetryDto\r\n */\r\n crusherEngineTemperature?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof SampledTelemetryDto\r\n */\r\n crusherDriveCurrentLoad?: number | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof SampledTelemetryDto\r\n */\r\n intermediateCircuitVoltage?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof SampledTelemetryDto\r\n */\r\n energyConsumeRate?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof SampledTelemetryDto\r\n */\r\n mainDischargeConveyorFuelRate?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof SampledTelemetryDto\r\n */\r\n mainDischargeConveyorEnergyRate?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof SampledTelemetryDto\r\n */\r\n sideDischargeConveyorFuelRate?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof SampledTelemetryDto\r\n */\r\n sideDischargeConveyorEnergyRate?: UnitValueDto | null;\r\n}\r\n\r\nexport function SampledTelemetryDtoFromJSON(json: any): SampledTelemetryDto {\r\n return SampledTelemetryDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function SampledTelemetryDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): SampledTelemetryDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'timestamp': !exists(json, 'timestamp') ? undefined : (new Date(json['timestamp'])),\r\n 'isEmpty': !exists(json, 'isEmpty') ? undefined : json['isEmpty'],\r\n 'durationInSeconds': !exists(json, 'durationInSeconds') ? undefined : json['durationInSeconds'],\r\n 'engineFuelRate': !exists(json, 'engineFuelRate') ? undefined : UnitValueDtoFromJSON(json['engineFuelRate']),\r\n 'percentageLoadAtCurrentSpeed': !exists(json, 'percentageLoadAtCurrentSpeed') ? undefined : json['percentageLoadAtCurrentSpeed'],\r\n 'fuelLevel': !exists(json, 'fuelLevel') ? undefined : json['fuelLevel'],\r\n 'adBlueLevel': !exists(json, 'adBlueLevel') ? undefined : json['adBlueLevel'],\r\n 'weightLoad1': !exists(json, 'weightLoad1') ? undefined : UnitValueDtoFromJSON(json['weightLoad1']),\r\n 'weightLoad2': !exists(json, 'weightLoad2') ? undefined : UnitValueDtoFromJSON(json['weightLoad2']),\r\n 'weightLoad3': !exists(json, 'weightLoad3') ? undefined : UnitValueDtoFromJSON(json['weightLoad3']),\r\n 'weightLoad4': !exists(json, 'weightLoad4') ? undefined : UnitValueDtoFromJSON(json['weightLoad4']),\r\n 'engineCrushSpeedActualValue': !exists(json, 'engineCrushSpeedActualValue') ? undefined : UnitValueDtoFromJSON(json['engineCrushSpeedActualValue']),\r\n 'engineCrushSpeedDesiredValue': !exists(json, 'engineCrushSpeedDesiredValue') ? undefined : UnitValueDtoFromJSON(json['engineCrushSpeedDesiredValue']),\r\n 'crusherEngineTemperature': !exists(json, 'crusherEngineTemperature') ? undefined : UnitValueDtoFromJSON(json['crusherEngineTemperature']),\r\n 'crusherDriveCurrentLoad': !exists(json, 'crusherDriveCurrentLoad') ? undefined : json['crusherDriveCurrentLoad'],\r\n 'intermediateCircuitVoltage': !exists(json, 'intermediateCircuitVoltage') ? undefined : UnitValueDtoFromJSON(json['intermediateCircuitVoltage']),\r\n 'energyConsumeRate': !exists(json, 'energyConsumeRate') ? undefined : UnitValueDtoFromJSON(json['energyConsumeRate']),\r\n 'mainDischargeConveyorFuelRate': !exists(json, 'mainDischargeConveyorFuelRate') ? undefined : UnitValueDtoFromJSON(json['mainDischargeConveyorFuelRate']),\r\n 'mainDischargeConveyorEnergyRate': !exists(json, 'mainDischargeConveyorEnergyRate') ? undefined : UnitValueDtoFromJSON(json['mainDischargeConveyorEnergyRate']),\r\n 'sideDischargeConveyorFuelRate': !exists(json, 'sideDischargeConveyorFuelRate') ? undefined : UnitValueDtoFromJSON(json['sideDischargeConveyorFuelRate']),\r\n 'sideDischargeConveyorEnergyRate': !exists(json, 'sideDischargeConveyorEnergyRate') ? undefined : UnitValueDtoFromJSON(json['sideDischargeConveyorEnergyRate']),\r\n };\r\n}\r\n\r\nexport function SampledTelemetryDtoToJSON(value?: SampledTelemetryDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'timestamp': value.timestamp === undefined ? undefined : (value.timestamp.toISOString()),\r\n 'isEmpty': value.isEmpty,\r\n 'durationInSeconds': value.durationInSeconds,\r\n 'engineFuelRate': UnitValueDtoToJSON(value.engineFuelRate),\r\n 'percentageLoadAtCurrentSpeed': value.percentageLoadAtCurrentSpeed,\r\n 'fuelLevel': value.fuelLevel,\r\n 'adBlueLevel': value.adBlueLevel,\r\n 'weightLoad1': UnitValueDtoToJSON(value.weightLoad1),\r\n 'weightLoad2': UnitValueDtoToJSON(value.weightLoad2),\r\n 'weightLoad3': UnitValueDtoToJSON(value.weightLoad3),\r\n 'weightLoad4': UnitValueDtoToJSON(value.weightLoad4),\r\n 'engineCrushSpeedActualValue': UnitValueDtoToJSON(value.engineCrushSpeedActualValue),\r\n 'engineCrushSpeedDesiredValue': UnitValueDtoToJSON(value.engineCrushSpeedDesiredValue),\r\n 'crusherEngineTemperature': UnitValueDtoToJSON(value.crusherEngineTemperature),\r\n 'crusherDriveCurrentLoad': value.crusherDriveCurrentLoad,\r\n 'intermediateCircuitVoltage': UnitValueDtoToJSON(value.intermediateCircuitVoltage),\r\n 'energyConsumeRate': UnitValueDtoToJSON(value.energyConsumeRate),\r\n 'mainDischargeConveyorFuelRate': UnitValueDtoToJSON(value.mainDischargeConveyorFuelRate),\r\n 'mainDischargeConveyorEnergyRate': UnitValueDtoToJSON(value.mainDischargeConveyorEnergyRate),\r\n 'sideDischargeConveyorFuelRate': UnitValueDtoToJSON(value.sideDischargeConveyorFuelRate),\r\n 'sideDischargeConveyorEnergyRate': UnitValueDtoToJSON(value.sideDischargeConveyorEnergyRate),\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * \r\n * @export\r\n * @interface StateDto\r\n */\r\nexport interface StateDto {\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof StateDto\r\n */\r\n id?: number;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof StateDto\r\n */\r\n key?: string | null;\r\n}\r\n\r\nexport function StateDtoFromJSON(json: any): StateDto {\r\n return StateDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function StateDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): StateDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'id': !exists(json, 'id') ? undefined : json['id'],\r\n 'key': !exists(json, 'key') ? undefined : json['key'],\r\n };\r\n}\r\n\r\nexport function StateDtoToJSON(value?: StateDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'id': value.id,\r\n 'key': value.key,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * \r\n * @export\r\n * @interface TagDto\r\n */\r\nexport interface TagDto {\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof TagDto\r\n */\r\n id?: number;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof TagDto\r\n */\r\n key?: string | null;\r\n}\r\n\r\nexport function TagDtoFromJSON(json: any): TagDto {\r\n return TagDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function TagDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): TagDto {\r\n console.log(\"TagDtoFromJSONTyped in: \");\r\n console.log(json);\r\n if ((json === undefined) || (json === null)) {\r\n console.log(\"out : \");\r\n console.log(json);\r\n return json;\r\n }\r\n console.log(\"out : struct\");\r\n return {\r\n \r\n 'id': !exists(json, 'id') ? undefined : json['id'],\r\n 'key': !exists(json, 'key') ? undefined : json['key'],\r\n };\r\n}\r\n\r\nexport function TagDtoToJSON(value?: TagDto | null): any {\r\n console.log(\"TagDtoToJSON in: \");\r\n console.log(value);\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'id': value.id,\r\n 'key': value.key,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n UnitValueDto,\r\n UnitValueDtoFromJSON,\r\n UnitValueDtoFromJSONTyped,\r\n UnitValueDtoToJSON,\r\n} from './';\r\n\r\n/**\r\n * \r\n * @export\r\n * @interface TelemetryRangeAveragesDto\r\n */\r\nexport interface TelemetryRangeAveragesDto {\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof TelemetryRangeAveragesDto\r\n */\r\n averageEngineUtilization?: number;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeAveragesDto\r\n */\r\n averageWeightLoad1?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeAveragesDto\r\n */\r\n averageWeightLoad2?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeAveragesDto\r\n */\r\n averageWeightLoad3?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeAveragesDto\r\n */\r\n averageWeightLoad4?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeAveragesDto\r\n */\r\n averageFuelLevel?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeAveragesDto\r\n */\r\n averageAdBlueLevel?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeAveragesDto\r\n */\r\n engineFuelRate?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeAveragesDto\r\n */\r\n mainDischargeFuelRate?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeAveragesDto\r\n */\r\n sideDischargeFuelRate?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeAveragesDto\r\n */\r\n energyConsumptionRate?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeAveragesDto\r\n */\r\n mainDischargeEnergyConsumptionRate?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeAveragesDto\r\n */\r\n sideDischargeEnergyConsumptionRate?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof TelemetryRangeAveragesDto\r\n */\r\n averageEnergyUtilization?: number;\r\n}\r\n\r\nexport function TelemetryRangeAveragesDtoFromJSON(json: any): TelemetryRangeAveragesDto {\r\n return TelemetryRangeAveragesDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function TelemetryRangeAveragesDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): TelemetryRangeAveragesDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'averageEngineUtilization': !exists(json, 'averageEngineUtilization') ? undefined : json['averageEngineUtilization'],\r\n 'averageWeightLoad1': !exists(json, 'averageWeightLoad1') ? undefined : UnitValueDtoFromJSON(json['averageWeightLoad1']),\r\n 'averageWeightLoad2': !exists(json, 'averageWeightLoad2') ? undefined : UnitValueDtoFromJSON(json['averageWeightLoad2']),\r\n 'averageWeightLoad3': !exists(json, 'averageWeightLoad3') ? undefined : UnitValueDtoFromJSON(json['averageWeightLoad3']),\r\n 'averageWeightLoad4': !exists(json, 'averageWeightLoad4') ? undefined : UnitValueDtoFromJSON(json['averageWeightLoad4']),\r\n 'averageFuelLevel': !exists(json, 'averageFuelLevel') ? undefined : UnitValueDtoFromJSON(json['averageFuelLevel']),\r\n 'averageAdBlueLevel': !exists(json, 'averageAdBlueLevel') ? undefined : UnitValueDtoFromJSON(json['averageAdBlueLevel']),\r\n 'engineFuelRate': !exists(json, 'engineFuelRate') ? undefined : UnitValueDtoFromJSON(json['engineFuelRate']),\r\n 'mainDischargeFuelRate': !exists(json, 'mainDischargeFuelRate') ? undefined : UnitValueDtoFromJSON(json['mainDischargeFuelRate']),\r\n 'sideDischargeFuelRate': !exists(json, 'sideDischargeFuelRate') ? undefined : UnitValueDtoFromJSON(json['sideDischargeFuelRate']),\r\n 'energyConsumptionRate': !exists(json, 'energyConsumptionRate') ? undefined : UnitValueDtoFromJSON(json['energyConsumptionRate']),\r\n 'mainDischargeEnergyConsumptionRate': !exists(json, 'mainDischargeEnergyConsumptionRate') ? undefined : UnitValueDtoFromJSON(json['mainDischargeEnergyConsumptionRate']),\r\n 'sideDischargeEnergyConsumptionRate': !exists(json, 'sideDischargeEnergyConsumptionRate') ? undefined : UnitValueDtoFromJSON(json['sideDischargeEnergyConsumptionRate']),\r\n 'averageEnergyUtilization': !exists(json, 'averageEnergyUtilization') ? undefined : json['averageEnergyUtilization'],\r\n };\r\n}\r\n\r\nexport function TelemetryRangeAveragesDtoToJSON(value?: TelemetryRangeAveragesDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'averageEngineUtilization': value.averageEngineUtilization,\r\n 'averageWeightLoad1': UnitValueDtoToJSON(value.averageWeightLoad1),\r\n 'averageWeightLoad2': UnitValueDtoToJSON(value.averageWeightLoad2),\r\n 'averageWeightLoad3': UnitValueDtoToJSON(value.averageWeightLoad3),\r\n 'averageWeightLoad4': UnitValueDtoToJSON(value.averageWeightLoad4),\r\n 'averageFuelLevel': UnitValueDtoToJSON(value.averageFuelLevel),\r\n 'averageAdBlueLevel': UnitValueDtoToJSON(value.averageAdBlueLevel),\r\n 'engineFuelRate': UnitValueDtoToJSON(value.engineFuelRate),\r\n 'mainDischargeFuelRate': UnitValueDtoToJSON(value.mainDischargeFuelRate),\r\n 'sideDischargeFuelRate': UnitValueDtoToJSON(value.sideDischargeFuelRate),\r\n 'energyConsumptionRate': UnitValueDtoToJSON(value.energyConsumptionRate),\r\n 'mainDischargeEnergyConsumptionRate': UnitValueDtoToJSON(value.mainDischargeEnergyConsumptionRate),\r\n 'sideDischargeEnergyConsumptionRate': UnitValueDtoToJSON(value.sideDischargeEnergyConsumptionRate),\r\n 'averageEnergyUtilization': value.averageEnergyUtilization,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n ErrorDto,\r\n ErrorDtoFromJSON,\r\n ErrorDtoFromJSONTyped,\r\n ErrorDtoToJSON,\r\n SampledTelemetryDto,\r\n SampledTelemetryDtoFromJSON,\r\n SampledTelemetryDtoFromJSONTyped,\r\n SampledTelemetryDtoToJSON,\r\n TelemetryRangeAveragesDto,\r\n TelemetryRangeAveragesDtoFromJSON,\r\n TelemetryRangeAveragesDtoFromJSONTyped,\r\n TelemetryRangeAveragesDtoToJSON,\r\n TelemetryRangeSavingsDto,\r\n TelemetryRangeSavingsDtoFromJSON,\r\n TelemetryRangeSavingsDtoFromJSONTyped,\r\n TelemetryRangeSavingsDtoToJSON,\r\n TelemetryRangeTotalsDto,\r\n TelemetryRangeTotalsDtoFromJSON,\r\n TelemetryRangeTotalsDtoFromJSONTyped,\r\n TelemetryRangeTotalsDtoToJSON,\r\n} from './';\r\n\r\n/**\r\n * \r\n * @export\r\n * @interface TelemetryRangeDto\r\n */\r\nexport interface TelemetryRangeDto {\r\n /**\r\n * \r\n * @type {Array}\r\n * @memberof TelemetryRangeDto\r\n */\r\n telemetry?: Array | null;\r\n /**\r\n * \r\n * @type {Array}\r\n * @memberof TelemetryRangeDto\r\n */\r\n errorCodes?: Array | null;\r\n /**\r\n * \r\n * @type {TelemetryRangeTotalsDto}\r\n * @memberof TelemetryRangeDto\r\n */\r\n totals?: TelemetryRangeTotalsDto | null;\r\n /**\r\n * \r\n * @type {TelemetryRangeAveragesDto}\r\n * @memberof TelemetryRangeDto\r\n */\r\n averages?: TelemetryRangeAveragesDto | null;\r\n /**\r\n * \r\n * @type {TelemetryRangeSavingsDto}\r\n * @memberof TelemetryRangeDto\r\n */\r\n savings?: TelemetryRangeSavingsDto | null;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof TelemetryRangeDto\r\n */\r\n info?: string | null;\r\n}\r\n\r\nexport function TelemetryRangeDtoFromJSON(json: any): TelemetryRangeDto {\r\n return TelemetryRangeDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function TelemetryRangeDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): TelemetryRangeDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'telemetry': !exists(json, 'telemetry') ? undefined : (json['telemetry'] === null ? null : (json['telemetry'] as Array).map(SampledTelemetryDtoFromJSON)),\r\n 'errorCodes': !exists(json, 'errorCodes') ? undefined : (json['errorCodes'] === null ? null : (json['errorCodes'] as Array).map(ErrorDtoFromJSON)),\r\n 'totals': !exists(json, 'totals') ? undefined : TelemetryRangeTotalsDtoFromJSON(json['totals']),\r\n 'averages': !exists(json, 'averages') ? undefined : TelemetryRangeAveragesDtoFromJSON(json['averages']),\r\n 'savings': !exists(json, 'savings') ? undefined : TelemetryRangeSavingsDtoFromJSON(json['savings']),\r\n 'info': !exists(json, 'info') ? undefined : json['info'],\r\n };\r\n}\r\n\r\nexport function TelemetryRangeDtoToJSON(value?: TelemetryRangeDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n 'telemetry': value.telemetry === undefined ? undefined : (value.telemetry === null ? null : (value.telemetry as Array).map(SampledTelemetryDtoToJSON)),\r\n 'errorCodes': value.errorCodes === undefined ? undefined : (value.errorCodes === null ? null : (value.errorCodes as Array).map(ErrorDtoToJSON)),\r\n 'totals': TelemetryRangeTotalsDtoToJSON(value.totals),\r\n 'averages': TelemetryRangeAveragesDtoToJSON(value.averages),\r\n 'savings': TelemetryRangeSavingsDtoToJSON(value.savings),\r\n 'info': value.info,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n UnitValueDto,\r\n UnitValueDtoFromJSON,\r\n UnitValueDtoFromJSONTyped,\r\n UnitValueDtoToJSON,\r\n} from './';\r\n\r\n/**\r\n * \r\n * @export\r\n * @interface TelemetryRangeSavingsDto\r\n */\r\nexport interface TelemetryRangeSavingsDto {\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeSavingsDto\r\n */\r\n dieselSaved?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeSavingsDto\r\n */\r\n energySaved?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeSavingsDto\r\n */\r\n co2Saved?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeSavingsDto\r\n */\r\n co2Emission?: UnitValueDto | null;\r\n}\r\n\r\nexport function TelemetryRangeSavingsDtoFromJSON(json: any): TelemetryRangeSavingsDto {\r\n return TelemetryRangeSavingsDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function TelemetryRangeSavingsDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): TelemetryRangeSavingsDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'dieselSaved': !exists(json, 'dieselSaved') ? undefined : UnitValueDtoFromJSON(json['dieselSaved']),\r\n 'energySaved': !exists(json, 'energySaved') ? undefined : UnitValueDtoFromJSON(json['energySaved']),\r\n 'co2Saved': !exists(json, 'co2Saved') ? undefined : UnitValueDtoFromJSON(json['co2Saved']),\r\n 'co2Emission': !exists(json, 'co2Emission') ? undefined : UnitValueDtoFromJSON(json['co2Emission']),\r\n };\r\n}\r\n\r\nexport function TelemetryRangeSavingsDtoToJSON(value?: TelemetryRangeSavingsDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'dieselSaved': UnitValueDtoToJSON(value.dieselSaved),\r\n 'energySaved': UnitValueDtoToJSON(value.energySaved),\r\n 'co2Saved': UnitValueDtoToJSON(value.co2Saved),\r\n 'co2Emission': UnitValueDtoToJSON(value.co2Emission),\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n UnitValueDto,\r\n UnitValueDtoFromJSON,\r\n UnitValueDtoFromJSONTyped,\r\n UnitValueDtoToJSON,\r\n} from './';\r\n\r\n/**\r\n * \r\n * @export\r\n * @interface TelemetryRangeTotalsDto\r\n */\r\nexport interface TelemetryRangeTotalsDto {\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeTotalsDto\r\n */\r\n totalEngineFuelConsumed?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeTotalsDto\r\n */\r\n totalEnergyConsumed?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeTotalsDto\r\n */\r\n totalWeightLoad1?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeTotalsDto\r\n */\r\n totalWeightLoad2?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeTotalsDto\r\n */\r\n totalWeightLoad3?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {UnitValueDto}\r\n * @memberof TelemetryRangeTotalsDto\r\n */\r\n totalWeightLoad4?: UnitValueDto | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof TelemetryRangeTotalsDto\r\n */\r\n totalHoursOfEngineOperation?: number | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof TelemetryRangeTotalsDto\r\n */\r\n totalHoursOfCrusherOperation?: number | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof TelemetryRangeTotalsDto\r\n */\r\n totalHoursOfExternalPowerSupply?: number | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof TelemetryRangeTotalsDto\r\n */\r\n totalHoursOfInternalPowerSupply?: number | null;\r\n}\r\n\r\nexport function TelemetryRangeTotalsDtoFromJSON(json: any): TelemetryRangeTotalsDto {\r\n return TelemetryRangeTotalsDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function TelemetryRangeTotalsDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): TelemetryRangeTotalsDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'totalEngineFuelConsumed': !exists(json, 'totalEngineFuelConsumed') ? undefined : UnitValueDtoFromJSON(json['totalEngineFuelConsumed']),\r\n 'totalEnergyConsumed': !exists(json, 'totalEnergyConsumed') ? undefined : UnitValueDtoFromJSON(json['totalEnergyConsumed']),\r\n 'totalWeightLoad1': !exists(json, 'totalWeightLoad1') ? undefined : UnitValueDtoFromJSON(json['totalWeightLoad1']),\r\n 'totalWeightLoad2': !exists(json, 'totalWeightLoad2') ? undefined : UnitValueDtoFromJSON(json['totalWeightLoad2']),\r\n 'totalWeightLoad3': !exists(json, 'totalWeightLoad3') ? undefined : UnitValueDtoFromJSON(json['totalWeightLoad3']),\r\n 'totalWeightLoad4': !exists(json, 'totalWeightLoad4') ? undefined : UnitValueDtoFromJSON(json['totalWeightLoad4']),\r\n 'totalHoursOfEngineOperation': !exists(json, 'totalHoursOfEngineOperation') ? undefined : json['totalHoursOfEngineOperation'],\r\n 'totalHoursOfCrusherOperation': !exists(json, 'totalHoursOfCrusherOperation') ? undefined : json['totalHoursOfCrusherOperation'],\r\n 'totalHoursOfExternalPowerSupply': !exists(json, 'totalHoursOfExternalPowerSupply') ? undefined : json['totalHoursOfExternalPowerSupply'],\r\n 'totalHoursOfInternalPowerSupply': !exists(json, 'totalHoursOfInternalPowerSupply') ? undefined : json['totalHoursOfInternalPowerSupply'],\r\n };\r\n}\r\n\r\nexport function TelemetryRangeTotalsDtoToJSON(value?: TelemetryRangeTotalsDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'totalEngineFuelConsumed': UnitValueDtoToJSON(value.totalEngineFuelConsumed),\r\n 'totalEnergyConsumed': UnitValueDtoToJSON(value.totalEnergyConsumed),\r\n 'totalWeightLoad1': UnitValueDtoToJSON(value.totalWeightLoad1),\r\n 'totalWeightLoad2': UnitValueDtoToJSON(value.totalWeightLoad2),\r\n 'totalWeightLoad3': UnitValueDtoToJSON(value.totalWeightLoad3),\r\n 'totalWeightLoad4': UnitValueDtoToJSON(value.totalWeightLoad4),\r\n 'totalHoursOfEngineOperation': value.totalHoursOfEngineOperation,\r\n 'totalHoursOfCrusherOperation': value.totalHoursOfCrusherOperation,\r\n 'totalHoursOfExternalPowerSupply': value.totalHoursOfExternalPowerSupply,\r\n 'totalHoursOfInternalPowerSupply': value.totalHoursOfInternalPowerSupply,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n PointDto,\r\n PointDtoFromJSON,\r\n PointDtoFromJSONTyped,\r\n PointDtoToJSON,\r\n} from './';\r\n\r\n/**\r\n * \r\n * @export\r\n * @interface TelemetrySnapshotDto\r\n */\r\nexport interface TelemetrySnapshotDto {\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof TelemetrySnapshotDto\r\n */\r\n serialNumber: string;\r\n /**\r\n * \r\n * @type {Date}\r\n * @memberof TelemetrySnapshotDto\r\n */\r\n updatedAt: Date;\r\n /**\r\n * \r\n * @type {boolean}\r\n * @memberof TelemetrySnapshotDto\r\n */\r\n isIgnitionOn?: boolean | null;\r\n /**\r\n * \r\n * @type {boolean}\r\n * @memberof TelemetrySnapshotDto\r\n */\r\n operationgModeGenerator?: boolean | null;\r\n /**\r\n * \r\n * @type {boolean}\r\n * @memberof TelemetrySnapshotDto\r\n */\r\n operatingModeExternal?: boolean | null;\r\n /**\r\n * \r\n * @type {boolean}\r\n * @memberof TelemetrySnapshotDto\r\n */\r\n operatingModeNeutral?: boolean | null;\r\n /**\r\n * \r\n * @type {PointDto}\r\n * @memberof TelemetrySnapshotDto\r\n */\r\n location?: PointDto | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof TelemetrySnapshotDto\r\n */\r\n totalHoursOfEngineOperation?: number | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof TelemetrySnapshotDto\r\n */\r\n totalHoursOfCrusherOperation?: number | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof TelemetrySnapshotDto\r\n */\r\n totalHoursOfInternalPowerSupply?: number | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof TelemetrySnapshotDto\r\n */\r\n totalHoursOfExternalPowerSupply?: number | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof TelemetrySnapshotDto\r\n */\r\n fuelLevel?: number | null;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof TelemetrySnapshotDto\r\n */\r\n adBlueLevel?: number | null;\r\n /**\r\n * \r\n * @type {boolean}\r\n * @memberof TelemetrySnapshotDto\r\n */\r\n isHybrid?: boolean | null;\r\n}\r\n\r\nexport function TelemetrySnapshotDtoFromJSON(json: any): TelemetrySnapshotDto {\r\n return TelemetrySnapshotDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function TelemetrySnapshotDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): TelemetrySnapshotDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'serialNumber': json['serialNumber'],\r\n 'updatedAt': (new Date(json['updatedAt'])),\r\n 'isIgnitionOn': !exists(json, 'isIgnitionOn') ? undefined : json['isIgnitionOn'],\r\n 'operationgModeGenerator': !exists(json, 'operationgModeGenerator') ? undefined : json['operationgModeGenerator'],\r\n 'operatingModeExternal': !exists(json, 'operatingModeExternal') ? undefined : json['operatingModeExternal'],\r\n 'operatingModeNeutral': !exists(json, 'operatingModeNeutral') ? undefined : json['operatingModeNeutral'],\r\n 'location': !exists(json, 'location') ? undefined : PointDtoFromJSON(json['location']),\r\n 'totalHoursOfEngineOperation': !exists(json, 'totalHoursOfEngineOperation') ? undefined : json['totalHoursOfEngineOperation'],\r\n 'totalHoursOfCrusherOperation': !exists(json, 'totalHoursOfCrusherOperation') ? undefined : json['totalHoursOfCrusherOperation'],\r\n 'fuelLevel': !exists(json, 'fuelLevel') ? undefined : json['fuelLevel'],\r\n 'adBlueLevel': !exists(json, 'adBlueLevel') ? undefined : json['adBlueLevel'],\r\n 'isHybrid': !exists(json, 'isHybrid') ? undefined : json['isHybrid'],\r\n };\r\n}\r\n\r\nexport function TelemetrySnapshotDtoToJSON(value?: TelemetrySnapshotDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'serialNumber': value.serialNumber,\r\n 'updatedAt': (value.updatedAt.toISOString()),\r\n 'isIgnitionOn': value.isIgnitionOn,\r\n 'operationgModeGenerator': value.operationgModeGenerator,\r\n 'operatingModeExternal': value.operatingModeExternal,\r\n 'operatingModeNeutral': value.operatingModeNeutral,\r\n 'location': PointDtoToJSON(value.location),\r\n 'totalHoursOfEngineOperation': value.totalHoursOfEngineOperation,\r\n 'totalHoursOfCrusherOperation': value.totalHoursOfCrusherOperation,\r\n 'fuelLevel': value.fuelLevel,\r\n 'adBlueLevel': value.adBlueLevel,\r\n 'isHybrid': value.isHybrid,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n/**\r\n * \r\n * @export\r\n * @interface UnitValueDto\r\n */\r\nexport interface UnitValueDto {\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof UnitValueDto\r\n */\r\n value?: number;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof UnitValueDto\r\n */\r\n unit?: string;\r\n}\r\n\r\nexport function UnitValueDtoFromJSON(json: any): UnitValueDto {\r\n return UnitValueDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function UnitValueDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): UnitValueDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'value': !exists(json, 'value') ? undefined : json['value'],\r\n 'unit': !exists(json, 'unit') ? undefined : json['unit'],\r\n };\r\n}\r\n\r\nexport function UnitValueDtoToJSON(value?: UnitValueDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'value': value.value,\r\n 'unit': value.unit,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\nimport {\r\n MeasurementSystem,\r\n MeasurementSystemFromJSON,\r\n MeasurementSystemFromJSONTyped,\r\n MeasurementSystemToJSON,\r\n OrganizationDto,\r\n OrganizationDtoFromJSON,\r\n OrganizationDtoFromJSONTyped,\r\n OrganizationDtoToJSON,\r\n} from './';\r\n\r\n/**\r\n * \r\n * @export\r\n * @interface UserDto\r\n */\r\nexport interface UserDto {\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof UserDto\r\n */\r\n id: number;\r\n /**\r\n * \r\n * @type {OrganizationDto}\r\n * @memberof UserDto\r\n */\r\n organization?: OrganizationDto | null;\r\n /**\r\n * \r\n * @type {boolean}\r\n * @memberof UserDto\r\n */\r\n isAdmin: boolean;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof UserDto\r\n */\r\n email: string;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof UserDto\r\n */\r\n isoLanguageCode?: string | null;\r\n /**\r\n * \r\n * @type {MeasurementSystem}\r\n * @memberof UserDto\r\n */\r\n measurementSystem?: MeasurementSystem;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof UserDto\r\n */\r\n organizationAccessLevel?: string | null;\r\n}\r\n\r\nexport function UserDtoFromJSON(json: any): UserDto {\r\n return UserDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function UserDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): UserDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n \r\n 'id': json['id'],\r\n 'organization': !exists(json, 'organization') ? undefined : OrganizationDtoFromJSON(json['organization']),\r\n 'isAdmin': json['isAdmin'],\r\n 'email': json['email'],\r\n 'isoLanguageCode': !exists(json, 'isoLanguageCode') ? undefined : json['isoLanguageCode'],\r\n 'measurementSystem': !exists(json, 'measurementSystem') ? undefined : MeasurementSystemFromJSON(json['measurementSystem']),\r\n 'organizationAccessLevel': !exists(json, 'organizationAccessLevel') ? undefined : json['organizationAccessLevel'],\r\n };\r\n}\r\n\r\nexport function UserDtoToJSON(value?: UserDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n \r\n 'id': value.id,\r\n 'organization': OrganizationDtoToJSON(value.organization),\r\n 'isAdmin': value.isAdmin,\r\n 'email': value.email,\r\n 'isoLanguageCode': value.isoLanguageCode,\r\n 'measurementSystem': MeasurementSystemToJSON(value.measurementSystem),\r\n 'organizationAccessLevel': value.organizationAccessLevel,\r\n };\r\n}\r\n\r\n\r\n","export * from './AccessLevelDto';\r\nexport * from './BackendInfoDto';\r\nexport * from './CurrentUserDto';\r\nexport * from './ErrorDto';\r\nexport * from './MachineDto';\r\nexport * from './MachineTypeDto';\r\nexport * from './MeasurementSystem';\r\nexport * from './NextServiceDto';\r\nexport * from './OrganizationDto';\r\nexport * from './PointDto';\r\nexport * from './SampledTelemetryDto';\r\nexport * from './StateDto';\r\nexport * from './TagDto';\r\nexport * from './TelemetryRangeAveragesDto';\r\nexport * from './TelemetryRangeDto';\r\nexport * from './TelemetryRangeSavingsDto';\r\nexport * from './TelemetryRangeTotalsDto';\r\nexport * from './TelemetrySnapshotDto';\r\nexport * from './UnitValueDto';\r\nexport * from './UserDto';\r\n","module.exports = __webpack_public_path__ + \"static/media/logo.db6d2f0a.png\";","module.exports = __webpack_public_path__ + \"static/media/rm_digital_solutions.38b3ae27.jpg\";","module.exports = __webpack_public_path__ + \"static/media/DefaultRM.6f122d44.png\";","module.exports = __webpack_public_path__ + \"static/media/digital_insights.090165f9.png\";","import {\r\n MachineDto,\r\n StateDto,\r\n TagDto,\r\n AccessLevelDto,\r\n SampledTelemetryDto,\r\n TelemetryRangeDto,\r\n ErrorDto,\r\n TelemetrySnapshotDto,\r\n UserDto,\r\n UnitValueDto,\r\n} from '../rubblemaster_openapi3_typescript-fetch/models';\r\n\r\nexport interface IRouteProps {\r\n isActive: boolean;\r\n translationString?: string;\r\n}\r\nexport interface IMachine extends MachineDto {\r\n suggestedAddress?: string | null;\r\n isHybrid?: boolean; // only for testing\r\n}\r\n\r\nexport interface IState extends StateDto {}\r\n\r\nexport interface ITelemetrySnapshot extends TelemetrySnapshotDto {}\r\n\r\nexport interface IError extends ErrorDto {}\r\n\r\nexport interface IErrorExtended extends ErrorDto {\r\n frequency: number;\r\n group: string;\r\n description: string;\r\n}\r\n\r\nexport interface ISampledTelemetry extends SampledTelemetryDto {}\r\n\r\nexport interface ITelemetryRange extends TelemetryRangeDto {}\r\n\r\nexport { AccessLevelDto as AccessLevel };\r\n\r\nexport interface IMachineTagOption extends TagDto {}\r\n\r\nexport interface IReduxAuthProps {\r\n isAuthenticated: boolean | null;\r\n isLoading: boolean | null;\r\n user: IReduxAuthUserProps | null;\r\n backendInfo: {\r\n version: string | null;\r\n };\r\n}\r\n\r\nexport interface IReduxAuthUserProps extends UserDto {}\r\n\r\nexport interface IMachineStateOption {\r\n id: number;\r\n key: string;\r\n}\r\n\r\nexport interface IReduxSearchProps {\r\n showSearch: boolean;\r\n showSearchError: boolean;\r\n searchText: string;\r\n searchTextValue: string;\r\n checkboxIgnitionOn: boolean;\r\n checkboxIgnitionOff: boolean;\r\n machineStateOptions: IMachineStateOption[];\r\n extendedMachineStateOptions: IMachineStateOption[];\r\n selectedMachineState: IMachineStateOption;\r\n map: {\r\n panToCenter: {\r\n lat: number;\r\n lng: number;\r\n };\r\n userConfirmedGeo: boolean;\r\n userPosition: {\r\n lat: number;\r\n lng: number;\r\n };\r\n error: string;\r\n };\r\n machineTagOptions: IMachineTagOption[];\r\n selectedMachineTags: IMachineTagOption[];\r\n}\r\n\r\nexport interface IReduxMachines {\r\n isFetchingAllMachines: boolean;\r\n hasFetchedAllMachines: boolean;\r\n allMachines: IMachine[];\r\n filteredMachines: IMachine[];\r\n}\r\n\r\nexport interface IReduxState {\r\n auth: IReduxAuthProps;\r\n search: IReduxSearchProps;\r\n machines: IReduxMachines;\r\n machineDetails: IReduxStateMachineDetails;\r\n}\r\n\r\nexport interface IMachineDetailsProps {\r\n machine: IMachine;\r\n}\r\n\r\nexport interface IMachineStateOption {\r\n id: number;\r\n}\r\n\r\nexport interface IMachineError {\r\n id: number;\r\n machineId: number;\r\n dateTime: Date | string | any;\r\n errorCode: string;\r\n frequency?: number;\r\n group?: string;\r\n hoursOfCrusherOperation?: number | null;\r\n}\r\n\r\nexport interface IReduxStateMachineDetailsSearch {\r\n startDate: Date;\r\n endDate: Date;\r\n maxEndDate: Date;\r\n}\r\n\r\nexport interface IFuel {\r\n fuelConsumption: number;\r\n dateTime: Date;\r\n}\r\n\r\nexport interface IWeight {\r\n weight: number;\r\n dateTime: Date;\r\n}\r\n\r\nexport interface IReduxStateMachineDetails {\r\n isFetching: boolean;\r\n updatedAt: Date;\r\n machine: IMachine;\r\n search: IReduxStateMachineDetailsSearch;\r\n suggestedAddress: string;\r\n isCreatingPdf: boolean;\r\n isFetchingTelemtry: boolean;\r\n telemetry: ISampledTelemetry | null;\r\n errorCodes: IError[] | null;\r\n graphTickValues: string;\r\n graphDateFormat: string;\r\n averageFuelLevels: {\r\n fuelLevel: number | null;\r\n adBlueLevel: number | null;\r\n timestamp: Date | null;\r\n };\r\n averageEngineUtilization: {\r\n value: number | null;\r\n timestamp: Date | null;\r\n };\r\n averageEnergyUtilization: {\r\n value: number | null;\r\n timestamp: Date | null;\r\n };\r\n averageThroughputs: {\r\n weightLoad1: UnitValueDto | null;\r\n weightLoad2: UnitValueDto | null;\r\n weightLoad3: UnitValueDto | null;\r\n weightLoad4: UnitValueDto | null;\r\n timestamp: Date | null;\r\n };\r\n averageFuelConsumption: {\r\n engineFuelRate: UnitValueDto | null;\r\n mainDischargeConveyorFuelRate: UnitValueDto | null;\r\n sideDischargeConveyorFuelRate: UnitValueDto | null;\r\n engineFuelConsumed: UnitValueDto | null;\r\n timestamp: number | null;\r\n };\r\n averageEnergyConsumption: {\r\n mainDischargeConveyorEnergyRate: UnitValueDto | null;\r\n sideDischargeConveyorEnergyRate: UnitValueDto | null;\r\n energyConsumeRate: UnitValueDto | null;\r\n totalEnergyConsumed: UnitValueDto | null;\r\n timestamp: number | null;\r\n };\r\n totalEngineFuelConsumed: UnitValueDto | null;\r\n totalWeightLoad1: UnitValueDto | null;\r\n totalWeightLoad2: UnitValueDto | null;\r\n totalWeightLoad3: UnitValueDto | null;\r\n totalWeightLoad4: UnitValueDto | null;\r\n totalHoursOfEngineOperation: number | null;\r\n totalHoursOfCrusherOperation: number | null;\r\n totalHoursOfExternalPowerSupply: number | null;\r\n totalHoursOfInternalPowerSupply: number | null;\r\n co2Saved: UnitValueDto | null;\r\n dieselSaved: UnitValueDto | null;\r\n energySaved: UnitValueDto | null;\r\n co2Emission: UnitValueDto | null;\r\n}\r\n\r\nexport interface IExtendedMachineTagOption extends IMachineTagOption {\r\n color?: string;\r\n}\r\n","module.exports = __webpack_public_path__ + \"static/media/en-US.a7b6e47e.png\";","module.exports = __webpack_public_path__ + \"static/media/en-GB.eec5df3d.png\";","module.exports = \"data:image/png;base64,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AABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAACg1zHiyHfdMSUAAADMcb5P673hBwAAAAAsQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEABMAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAAA1bQkI+7ElAAAADDv/d57wA8AAAAAWIAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAACAAmAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAKo5Rhz5rtuSAAAAMMn5Pt03/AAAAACABQgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAACAAGACAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAoJqWxAoAAABQnB8AAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAACAAGACAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAADo9g8A5s8Y+ZYVMswAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/es-ES.d84d660b.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAMAAABIw9uxAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAwFBMVEUAAAAADDIAJZ8AI5MAI5UAI5YMJ5cGHpMSLJyTodD6+/z+/v79/v7//////v76z9LxU2HtIDPtLz3tKDrtKDnqKDf6LD22HCi1HCi0HCizHCj7LD2xHCiyHCjqKDn6LDyzHCq1HCr7LDywHCr8LD2tHCf7KD2vIiizKiixLCj8KD2vKiivLCivKCiwKCiyKiixKiiwKiixKCj6KD2zIyj7Kj2wHiiwHCe2HCy2HCq2HiqzHiiyHCqyHC+yHDCyHC3D2rreAAAAAXRSTlMAQObYZgAAAAFiS0dEDfa0YfUAAAAJcEhZcwAAEE0AABBNAWeMAeAAAAAHdElNRQfnBxIMMgaCrMq+AAAUb0lEQVR42u3aV3IlVBAFQbz3cAWM4AkEPMzgvWf/u2IPU0GcDzIXUdHR3Y89BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8tx5/4smneERPP/Psc8+/8OJLL/NoXnnl5Vdfe/2NN9/iEZ2btwVgRgAiAagEYEkAIgGozs07AjAjAJEAVOfmXQGYEYBIAKpz80AAZgQgEoDq3L4nADMCEAlAJQBLAhAJQHVu3xeAGQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoBKAJQGIBKASgCUBiASgEoAlAYgEoDo3DwRgRgAiAagEYEkAIgGoLncfCMCMAEQCUJkAlgQgEoDq3LwrADMCEAlAJQBLAhAJQCUASwIQCUB1bt4RgBkBiASgutx9KAAzAhAJQOUMuCQAkQBUl/uPBGBGACIBqM7HnwjAjABEAlCd66cCMCMAkQBU5/qZAMwIQCQA1bl+LgAzAhAJQHW+eCgAMwIQCUB1rl8KwIwARAJQCcCSAEQCUJ3rVwIwIwCRAFTn+rUAzAhAJADVuX4jADMCEAlAJQBLAhAJQCUASwIQCUB1rt8KwIwARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlAJwJIARAJQCcCSAEQCUAnAkgBEAlCd63cCMCMAkQBU5/pQAGYEIBKA6ly/EoAZAYgEoDrX7wVgRgAiAajODz8KwIwARAJQnZ9+FoAZAYgEoDq3vwjAjABEAlCd2wcCMCMAkQBUl7tfBWBGACIBqC53vwnAjABEAlCdu98FYEYAIgGozu0fAjAjAJEAVOf2fQGYEYBIAKrL/Z8CMCMAkQBUl/u/BGBGACIBqC73fwvAjABEAlBd7v8RgBkBiASgsgNYEoBIAKpz4xV4RwAiAagEYEkAIgGoBGBJACIBqARgSQAiAah8Ai4JQCQAlQAsCUAkAJUALAlAJACVACwJQCQAlQAsCUAkAJUALAlAJACVACwJQCQAlQAsCUAkAJUALAlAJACVACwJQCQAlQAsCUAkAJUALAlAJACVACwJQCQAVQ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD87/0LRLaGTqfs+B4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMjMtMDctMThUMTI6NDk6NTArMDA6MDByEBbkAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIzLTA3LTE4VDEyOjQ5OjUwKzAwOjAwA02uWAAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAMAAABIw9uxAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAA2FBMVEUAAAAAkkYJk0gAkEIAlEphu4zz+vb////8/fz+/Pz89fXge4LPLzrNKDXOLDcNAAsSAAsMABAADAwADAgWAgQPAAAdAwQSAAATCgULCgURAAURAAMOAAEOAAQNAAMTAAARAAAQAAcOAA0NBAkKBQwQEBAJBwgLDgMXGgkgHQwdEwokDxQUAAYdChAaEA4WEwoUFAoPFwoKEAQLCAMWCRIbAh8XABgPABAZAgoWBgkGAA0IAA0PAAYWAA4TAA0MAgoTAQEUAAEPAAISAgMCBw0GBQ0JBAsKAwo8ArbpAAAAAXRSTlMAQObYZgAAAAFiS0dEBxZhiOsAAAAJcEhZcwAAEE0AABBNAWeMAeAAAAAHdElNRQfnBxIMJQfwKH6+AAAVDElEQVR42u3YV7IWVBBGUQx4RVBAQUC5gGAmiAFQTCBp/jOyygn8D24/qqy1RnBeelf3OXECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPhPvEHhzbfePvnO0btH/Gunjt47feb9Mx9QEIANAcgIQEkANgQgIwCls+cEYEEAMgJQOn9WABYEICMApQ+dABMCkBGA0kcCMCEAGQEoXbgoAAsCkBGA0seXBGBBADICULrsBJgQgIwAlK4IwIQAZASgdGj+BaAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEqfCMCEAGQEoPSpAEwIQEYASlcFYEIAMgJQ8gewIQAZASgJwIYAZASgdCwAEwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKF0TgAkByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQOhaACQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlA7NvwA0BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMApesCMCEAGQEo3RCACQHICEDpMwGYEICMAJRu3hKABQHICEDpcxvAhABkBKD0xZcCsCAAGQEofWUDmBCAjACUvhaACQHICEDpGwGYEICMAJS+FYAJAcgIQOn2HQFYEICMAJTu2gAmBCAjAKV7AjAhABkBKH0nABMCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASgKwIQAZASgJwIYAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAEoCsCEAGQEoCcCGAGQEoCQAGwKQEYCSAGwIQEYASvcFYEIAMgJQ+l4AJgQgIwClHwRgQgAyAlD6UQAmBCAjAKWfBGBCADICUHpwXgAWBCAjAKWHjwRgQQAyAlD6+RcBWBCAjACUbvgDmBCAjACUDs2/ADQEICMAJQHYEICMAJQeC8CEAGQEoPSrAEwIQEYASk6ADQHICEDpogBMCEBGAErXBWBCADICUBKADQHICEDJCbAhABkBKB0LwIQAZASgJAAbApARgJIAbAhARgBKArAhABkBKAnAhgBkBKAkABsCkBGAkgBsCEBGAErXBGBCADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjACUB2BCAjACUBGBDADICUBKADQHICEBJADYEICMAJQHYEICMAJQEYEMAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlI4FYEIAMgJQEoANAcgIQEkANgQgIwAlAdgQgIwAlARgQwAyAlASgA0ByAhASQA2BCAjAKXfBGBCADICUPr9nAAsCEBGAEp/CMCEAGQEoPSnE2BCADICUDo0/wLQEICMAJQEYEMAMgJQeiIAEwKQEYDS078EYEEAMgJQemYDmBCAjACU/AFsCEBGAEoCsCEAGQEoCcCGAGQEoHQwAAD/eP66HwAUXrx89bqfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/w9/A3Dr3DK+KpYLAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTA3LTE4VDEyOjM3OjAzKzAwOjAwPOonLQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wNy0xOFQxMjozNzowMyswMDowME23n5EAAAAASUVORK5CYII=\"","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nexport const BASE_PATH = \"http://localhost\".replace(/\\/+$/, \"\");\r\n\r\nconst isBlob = (value: any) => typeof Blob !== 'undefined' && value instanceof Blob;\r\n\r\n/**\r\n * This is the base class for all generated API classes.\r\n */\r\nexport class BaseAPI {\r\n\r\n private middleware: Middleware[];\r\n\r\n constructor(protected configuration = new Configuration()) {\r\n this.middleware = configuration.middleware;\r\n }\r\n\r\n withMiddleware(this: T, ...middlewares: Middleware[]) {\r\n const next = this.clone();\r\n next.middleware = next.middleware.concat(...middlewares);\r\n return next;\r\n }\r\n\r\n withPreMiddleware(this: T, ...preMiddlewares: Array) {\r\n const middlewares = preMiddlewares.map((pre) => ({ pre }));\r\n return this.withMiddleware(...middlewares);\r\n }\r\n\r\n withPostMiddleware(this: T, ...postMiddlewares: Array) {\r\n const middlewares = postMiddlewares.map((post) => ({ post }));\r\n return this.withMiddleware(...middlewares);\r\n }\r\n\r\n protected async request(context: RequestOpts): Promise {\r\n const { url, init } = this.createFetchParams(context);\r\n const response = await this.fetchApi(url, init);\r\n if (response.status >= 200 && response.status < 300) {\r\n return response;\r\n }\r\n throw response;\r\n }\r\n\r\n private createFetchParams(context: RequestOpts) {\r\n let url = this.configuration.basePath + context.path;\r\n if (context.query !== undefined && Object.keys(context.query).length !== 0) {\r\n // only add the querystring to the URL if there are query parameters.\r\n // this is done to avoid urls ending with a \"?\" character which buggy webservers\r\n // do not handle correctly sometimes.\r\n url += '?' + this.configuration.queryParamsStringify(context.query);\r\n }\r\n const body = (context.body instanceof FormData || context.body instanceof URLSearchParams || isBlob(context.body))\r\n\t ? context.body\r\n\t : JSON.stringify(context.body);\r\n\r\n const headers = Object.assign({}, this.configuration.headers, context.headers);\r\n const init = {\r\n method: context.method,\r\n headers: headers,\r\n body,\r\n credentials: this.configuration.credentials\r\n };\r\n return { url, init };\r\n }\r\n\r\n private fetchApi = async (url: string, init: RequestInit) => {\r\n let fetchParams = { url, init };\r\n for (const middleware of this.middleware) {\r\n if (middleware.pre) {\r\n fetchParams = await middleware.pre({\r\n fetch: this.fetchApi,\r\n ...fetchParams,\r\n }) || fetchParams;\r\n }\r\n }\r\n let response = await this.configuration.fetchApi(fetchParams.url, fetchParams.init);\r\n for (const middleware of this.middleware) {\r\n if (middleware.post) {\r\n response = await middleware.post({\r\n fetch: this.fetchApi,\r\n url,\r\n init,\r\n response: response.clone(),\r\n }) || response;\r\n }\r\n }\r\n return response;\r\n }\r\n\r\n /**\r\n * Create a shallow clone of `this` by constructing a new instance\r\n * and then shallow cloning data members.\r\n */\r\n private clone(this: T): T {\r\n const constructor = this.constructor as any;\r\n const next = new constructor(this.configuration);\r\n next.middleware = this.middleware.slice();\r\n return next;\r\n }\r\n};\r\n\r\nexport class RequiredError extends Error {\r\n name: \"RequiredError\" = \"RequiredError\";\r\n constructor(public field: string, msg?: string) {\r\n super(msg);\r\n }\r\n}\r\n\r\nexport const COLLECTION_FORMATS = {\r\n csv: \",\",\r\n ssv: \" \",\r\n tsv: \"\\t\",\r\n pipes: \"|\",\r\n};\r\n\r\nexport type FetchAPI = WindowOrWorkerGlobalScope['fetch'];\r\n\r\nexport interface ConfigurationParameters {\r\n basePath?: string; // override base path\r\n fetchApi?: FetchAPI; // override for fetch implementation\r\n middleware?: Middleware[]; // middleware to apply before/after fetch requests\r\n queryParamsStringify?: (params: HTTPQuery) => string; // stringify function for query strings\r\n username?: string; // parameter for basic security\r\n password?: string; // parameter for basic security\r\n apiKey?: string | ((name: string) => string); // parameter for apiKey security\r\n accessToken?: string | ((name?: string, scopes?: string[]) => string); // parameter for oauth2 security\r\n headers?: HTTPHeaders; //header params we want to use on every request\r\n credentials?: RequestCredentials; //value for the credentials param we want to use on each request\r\n}\r\n\r\nexport class Configuration {\r\n constructor(private configuration: ConfigurationParameters = {}) {}\r\n\r\n get basePath(): string {\r\n return this.configuration.basePath || BASE_PATH;\r\n }\r\n\r\n get fetchApi(): FetchAPI {\r\n return this.configuration.fetchApi || window.fetch.bind(window);\r\n }\r\n\r\n get middleware(): Middleware[] {\r\n return this.configuration.middleware || [];\r\n }\r\n\r\n get queryParamsStringify(): (params: HTTPQuery) => string {\r\n return this.configuration.queryParamsStringify || querystring;\r\n }\r\n\r\n get username(): string | undefined {\r\n return this.configuration.username;\r\n }\r\n\r\n get password(): string | undefined {\r\n return this.configuration.password;\r\n }\r\n\r\n get apiKey(): ((name: string) => string) | undefined {\r\n const apiKey = this.configuration.apiKey;\r\n if (apiKey) {\r\n return typeof apiKey === 'function' ? apiKey : () => apiKey;\r\n }\r\n return undefined;\r\n }\r\n\r\n get accessToken(): ((name: string, scopes?: string[]) => string) | undefined {\r\n const accessToken = this.configuration.accessToken;\r\n if (accessToken) {\r\n return typeof accessToken === 'function' ? accessToken : () => accessToken;\r\n }\r\n return undefined;\r\n }\r\n\r\n get headers(): HTTPHeaders | undefined {\r\n return this.configuration.headers;\r\n }\r\n\r\n get credentials(): RequestCredentials | undefined {\r\n return this.configuration.credentials;\r\n }\r\n}\r\n\r\nexport type Json = any;\r\nexport type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS';\r\nexport type HTTPHeaders = { [key: string]: string };\r\nexport type HTTPQuery = { [key: string]: string | number | null | boolean | Array | HTTPQuery };\r\nexport type HTTPBody = Json | FormData | URLSearchParams;\r\nexport type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original';\r\n\r\nexport interface FetchParams {\r\n url: string;\r\n init: RequestInit;\r\n}\r\n\r\nexport interface RequestOpts {\r\n path: string;\r\n method: HTTPMethod;\r\n headers: HTTPHeaders;\r\n query?: HTTPQuery;\r\n body?: HTTPBody;\r\n}\r\n\r\nexport function exists(json: any, key: string) {\r\n const value = json[key];\r\n return value !== null && value !== undefined;\r\n}\r\n\r\nexport function querystring(params: HTTPQuery, prefix: string = ''): string {\r\n return Object.keys(params)\r\n .map((key) => {\r\n const fullKey = prefix + (prefix.length ? `[${key}]` : key);\r\n const value = params[key];\r\n if (value instanceof Array) {\r\n const multiValue = value.map(singleValue => encodeURIComponent(String(singleValue)))\r\n .join(`&${encodeURIComponent(fullKey)}=`);\r\n return `${encodeURIComponent(fullKey)}=${multiValue}`;\r\n }\r\n if (value instanceof Object) {\r\n return querystring(value as HTTPQuery, fullKey);\r\n }\r\n return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`;\r\n })\r\n .filter(part => part.length > 0)\r\n .join('&');\r\n}\r\n\r\nexport function mapValues(data: any, fn: (item: any) => any) {\r\n return Object.keys(data).reduce(\r\n (acc, key) => ({ ...acc, [key]: fn(data[key]) }),\r\n {}\r\n );\r\n}\r\n\r\nexport function canConsumeForm(consumes: Consume[]): boolean {\r\n for (const consume of consumes) {\r\n if ('multipart/form-data' === consume.contentType) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport interface Consume {\r\n contentType: string\r\n}\r\n\r\nexport interface RequestContext {\r\n fetch: FetchAPI;\r\n url: string;\r\n init: RequestInit;\r\n}\r\n\r\nexport interface ResponseContext {\r\n fetch: FetchAPI;\r\n url: string;\r\n init: RequestInit;\r\n response: Response;\r\n}\r\n\r\nexport interface Middleware {\r\n pre?(context: RequestContext): Promise;\r\n post?(context: ResponseContext): Promise;\r\n}\r\n\r\nexport interface ApiResponse {\r\n raw: Response;\r\n value(): Promise;\r\n}\r\n\r\nexport interface ResponseTransformer {\r\n (json: any): T;\r\n}\r\n\r\nexport class JSONApiResponse {\r\n constructor(public raw: Response, private transformer: ResponseTransformer = (jsonValue: any) => jsonValue) {}\r\n\r\n async value() {\r\n return this.transformer(await this.raw.json());\r\n }\r\n}\r\n\r\nexport class VoidApiResponse {\r\n constructor(public raw: Response) {}\r\n\r\n async value() {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport class BlobApiResponse {\r\n constructor(public raw: Response) {}\r\n\r\n async value() {\r\n return await this.raw.blob();\r\n };\r\n}\r\n\r\nexport class TextApiResponse {\r\n constructor(public raw: Response) {}\r\n\r\n async value() {\r\n return await this.raw.text();\r\n };\r\n}\r\n","module.exports = __webpack_public_path__ + \"static/media/marker-green.afb582f9.png\";","module.exports = __webpack_public_path__ + \"static/media/marker-red.469c4d3e.png\";","module.exports = __webpack_public_path__ + \"static/media/rm-background.77bd36ae.jpg\";","module.exports = __webpack_public_path__ + \"static/media/fleet_management.0b2a0c12.png\";","module.exports = __webpack_public_path__ + \"static/media/documentation_portal.ffcfaaae.png\";","module.exports = __webpack_public_path__ + \"static/media/webshop.0f9ff808.png\";","module.exports = __webpack_public_path__ + \"static/media/cockpit.21528412.png\";","module.exports = __webpack_public_path__ + \"static/media/product_config.02228e0b.png\";","module.exports = __webpack_public_path__ + \"static/media/academy.0d48747d.png\";","module.exports = __webpack_public_path__ + \"static/media/virtual_world.9d422439.png\";","module.exports = __webpack_public_path__ + \"static/media/web.e27613ba.png\";","export * from './graphTypes';\r\nexport * from './reduxTypes';","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nimport * as runtime from '../runtime';\r\n\r\nexport interface AzureADB2CAccountEditProfileSchemeGetRequest {\r\n scheme: string;\r\n}\r\n\r\nexport interface AzureADB2CAccountResetPasswordSchemeGetRequest {\r\n scheme: string;\r\n}\r\n\r\nexport interface AzureADB2CAccountSignInSchemeGetRequest {\r\n scheme: string;\r\n}\r\n\r\nexport interface AzureADB2CAccountSignOutSchemeGetRequest {\r\n scheme: string;\r\n}\r\n\r\n/**\r\n * no description\r\n */\r\nexport class AccountApi extends runtime.BaseAPI {\r\n\r\n /**\r\n */\r\n async azureADB2CAccountEditProfileSchemeGetRaw(requestParameters: AzureADB2CAccountEditProfileSchemeGetRequest): Promise> {\r\n if (requestParameters.scheme === null || requestParameters.scheme === undefined) {\r\n throw new runtime.RequiredError('scheme','Required parameter requestParameters.scheme was null or undefined when calling azureADB2CAccountEditProfileSchemeGet.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/AzureADB2C/Account/EditProfile/{scheme}`.replace(`{${\"scheme\"}}`, encodeURIComponent(String(requestParameters.scheme))),\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.VoidApiResponse(response);\r\n }\r\n\r\n /**\r\n */\r\n async azureADB2CAccountEditProfileSchemeGet(requestParameters: AzureADB2CAccountEditProfileSchemeGetRequest): Promise {\r\n await this.azureADB2CAccountEditProfileSchemeGetRaw(requestParameters);\r\n }\r\n\r\n /**\r\n */\r\n async azureADB2CAccountResetPasswordSchemeGetRaw(requestParameters: AzureADB2CAccountResetPasswordSchemeGetRequest): Promise> {\r\n if (requestParameters.scheme === null || requestParameters.scheme === undefined) {\r\n throw new runtime.RequiredError('scheme','Required parameter requestParameters.scheme was null or undefined when calling azureADB2CAccountResetPasswordSchemeGet.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/AzureADB2C/Account/ResetPassword/{scheme}`.replace(`{${\"scheme\"}}`, encodeURIComponent(String(requestParameters.scheme))),\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.VoidApiResponse(response);\r\n }\r\n\r\n /**\r\n */\r\n async azureADB2CAccountResetPasswordSchemeGet(requestParameters: AzureADB2CAccountResetPasswordSchemeGetRequest): Promise {\r\n await this.azureADB2CAccountResetPasswordSchemeGetRaw(requestParameters);\r\n }\r\n\r\n /**\r\n */\r\n async azureADB2CAccountSignInSchemeGetRaw(requestParameters: AzureADB2CAccountSignInSchemeGetRequest): Promise> {\r\n if (requestParameters.scheme === null || requestParameters.scheme === undefined) {\r\n throw new runtime.RequiredError('scheme','Required parameter requestParameters.scheme was null or undefined when calling azureADB2CAccountSignInSchemeGet.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/AzureADB2C/Account/SignIn/{scheme}`.replace(`{${\"scheme\"}}`, encodeURIComponent(String(requestParameters.scheme))),\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.VoidApiResponse(response);\r\n }\r\n\r\n /**\r\n */\r\n async azureADB2CAccountSignInSchemeGet(requestParameters: AzureADB2CAccountSignInSchemeGetRequest): Promise {\r\n await this.azureADB2CAccountSignInSchemeGetRaw(requestParameters);\r\n }\r\n\r\n /**\r\n */\r\n async azureADB2CAccountSignOutSchemeGetRaw(requestParameters: AzureADB2CAccountSignOutSchemeGetRequest): Promise> {\r\n if (requestParameters.scheme === null || requestParameters.scheme === undefined) {\r\n throw new runtime.RequiredError('scheme','Required parameter requestParameters.scheme was null or undefined when calling azureADB2CAccountSignOutSchemeGet.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/AzureADB2C/Account/SignOut/{scheme}`.replace(`{${\"scheme\"}}`, encodeURIComponent(String(requestParameters.scheme))),\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.VoidApiResponse(response);\r\n }\r\n\r\n /**\r\n */\r\n async azureADB2CAccountSignOutSchemeGet(requestParameters: AzureADB2CAccountSignOutSchemeGetRequest): Promise {\r\n await this.azureADB2CAccountSignOutSchemeGetRaw(requestParameters);\r\n }\r\n\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nimport * as runtime from '../runtime';\r\nimport {\r\n StateDto,\r\n StateDtoFromJSON,\r\n StateDtoToJSON,\r\n TagDto,\r\n TagDtoFromJSON,\r\n TagDtoToJSON,\r\n} from '../models';\r\n\r\nexport interface ApiMachineTagsDeleteRequest {\r\n machineId?: number;\r\n tagId?: number;\r\n}\r\n\r\nexport interface ApiMachineTagsGetRequest {\r\n machineId?: number;\r\n}\r\n\r\nexport interface ApiMachineTagsPostRequest {\r\n machineId?: number;\r\n tagId?: number;\r\n}\r\n\r\n/**\r\n * no description\r\n */\r\nexport class MachineTagsApi extends runtime.BaseAPI {\r\n\r\n /**\r\n * Deletes a MachineTag-assignment for the given Ids. If the Ids are not assigned to each other a HTTP404 will be returned.\r\n */\r\n async apiMachineTagsDeleteRaw(requestParameters: ApiMachineTagsDeleteRequest): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n if (requestParameters.machineId !== undefined) {\r\n queryParameters['machineId'] = requestParameters.machineId;\r\n }\r\n\r\n if (requestParameters.tagId !== undefined) {\r\n queryParameters['tagId'] = requestParameters.tagId;\r\n }\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/MachineTags`,\r\n method: 'DELETE',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.TextApiResponse(response) as any;\r\n }\r\n\r\n /**\r\n * Deletes a MachineTag-assignment for the given Ids. If the Ids are not assigned to each other a HTTP404 will be returned.\r\n */\r\n async apiMachineTagsDelete(requestParameters: ApiMachineTagsDeleteRequest): Promise {\r\n const response = await this.apiMachineTagsDeleteRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiMachineTagsGetRaw(requestParameters: ApiMachineTagsGetRequest): Promise>> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n if (requestParameters.machineId !== undefined) {\r\n queryParameters['machineId'] = requestParameters.machineId;\r\n }\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/MachineTags`,\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(TagDtoFromJSON));\r\n }\r\n\r\n /**\r\n */\r\n async apiMachineTagsGet(requestParameters: ApiMachineTagsGetRequest): Promise> {\r\n const response = await this.apiMachineTagsGetRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiMachineTagsPostRaw(requestParameters: ApiMachineTagsPostRequest): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n if (requestParameters.machineId !== undefined) {\r\n queryParameters['machineId'] = requestParameters.machineId;\r\n }\r\n\r\n if (requestParameters.tagId !== undefined) {\r\n queryParameters['tagId'] = requestParameters.tagId;\r\n }\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/MachineTags`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => StateDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiMachineTagsPost(requestParameters: ApiMachineTagsPostRequest): Promise {\r\n const response = await this.apiMachineTagsPostRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nimport * as runtime from '../runtime';\r\nimport {\r\n MachineDto,\r\n MachineDtoFromJSON,\r\n MachineDtoToJSON,\r\n StateDto,\r\n StateDtoFromJSON,\r\n StateDtoToJSON,\r\n} from '../models';\r\n\r\nexport interface ApiMachinesIdDeleteRequest {\r\n id: number;\r\n}\r\n\r\nexport interface ApiMachinesIdGetRequest {\r\n id: number;\r\n}\r\n\r\nexport interface ApiMachinesIdPutRequest {\r\n id: number;\r\n machineDto?: MachineDto;\r\n}\r\n\r\nexport interface ApiMachinesMachineIdNotesPutRequest {\r\n machineId: number;\r\n notes?: string;\r\n}\r\n\r\nexport interface ApiMachinesMachineIdProjectConstructionSitePutRequest {\r\n machineId: number;\r\n projectConstructionSite?: string;\r\n}\r\n\r\nexport interface ApiMachinesMachineIdStatePutRequest {\r\n machineId: number;\r\n stateId?: number;\r\n}\r\n\r\nexport interface ApiMachinesPostRequest {\r\n machineDto?: MachineDto;\r\n}\r\n\r\n/**\r\n * no description\r\n */\r\nexport class MachinesApi extends runtime.BaseAPI {\r\n\r\n /**\r\n */\r\n async apiMachinesGetRaw(): Promise>> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Machines`,\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(MachineDtoFromJSON));\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesGet(): Promise> {\r\n console.log(\"apiMachinesGet: start \" + new Date().toLocaleTimeString());\r\n const response = await this.apiMachinesGetRaw();\r\n console.log(\"apiMachinesGet: ende \" + new Date().toLocaleTimeString());\r\n const res = await response.value();\r\n console.log(res);\r\n return res;\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesIdDeleteRaw(requestParameters: ApiMachinesIdDeleteRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiMachinesIdDelete.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Machines/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'DELETE',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => MachineDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesIdDelete(requestParameters: ApiMachinesIdDeleteRequest): Promise {\r\n const response = await this.apiMachinesIdDeleteRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesIdGetRaw(requestParameters: ApiMachinesIdGetRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiMachinesIdGet.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Machines/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => MachineDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesIdGet(requestParameters: ApiMachinesIdGetRequest): Promise {\r\n const response = await this.apiMachinesIdGetRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesIdPutRaw(requestParameters: ApiMachinesIdPutRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiMachinesIdPut.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/Machines/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'PUT',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: MachineDtoToJSON(requestParameters.machineDto),\r\n });\r\n\r\n return new runtime.VoidApiResponse(response);\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesIdPut(requestParameters: ApiMachinesIdPutRequest): Promise {\r\n await this.apiMachinesIdPutRaw(requestParameters);\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesMachineIdNotesPutRaw(requestParameters: ApiMachinesMachineIdNotesPutRequest): Promise> {\r\n if (requestParameters.machineId === null || requestParameters.machineId === undefined) {\r\n throw new runtime.RequiredError('machineId','Required parameter requestParameters.machineId was null or undefined when calling apiMachinesMachineIdNotesPut.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n if (requestParameters.notes !== undefined) {\r\n queryParameters['notes'] = requestParameters.notes;\r\n }\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Machines/{machineId}/notes`.replace(`{${\"machineId\"}}`, encodeURIComponent(String(requestParameters.machineId))),\r\n method: 'PUT',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.VoidApiResponse(response);\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesMachineIdNotesPut(requestParameters: ApiMachinesMachineIdNotesPutRequest): Promise {\r\n await this.apiMachinesMachineIdNotesPutRaw(requestParameters);\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesMachineIdProjectConstructionSitePutRaw(requestParameters: ApiMachinesMachineIdProjectConstructionSitePutRequest): Promise> {\r\n if (requestParameters.machineId === null || requestParameters.machineId === undefined) {\r\n throw new runtime.RequiredError('machineId','Required parameter requestParameters.machineId was null or undefined when calling apiMachinesMachineIdProjectConstructionSitePut.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n if (requestParameters.projectConstructionSite !== undefined) {\r\n queryParameters['projectConstructionSite'] = requestParameters.projectConstructionSite;\r\n }\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Machines/{machineId}/projectConstructionSite`.replace(`{${\"machineId\"}}`, encodeURIComponent(String(requestParameters.machineId))),\r\n method: 'PUT',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.VoidApiResponse(response);\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesMachineIdProjectConstructionSitePut(requestParameters: ApiMachinesMachineIdProjectConstructionSitePutRequest): Promise {\r\n await this.apiMachinesMachineIdProjectConstructionSitePutRaw(requestParameters);\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesMachineIdStatePutRaw(requestParameters: ApiMachinesMachineIdStatePutRequest): Promise> {\r\n if (requestParameters.machineId === null || requestParameters.machineId === undefined) {\r\n throw new runtime.RequiredError('machineId','Required parameter requestParameters.machineId was null or undefined when calling apiMachinesMachineIdStatePut.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n if (requestParameters.stateId !== undefined) {\r\n queryParameters['stateId'] = requestParameters.stateId;\r\n }\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Machines/{machineId}/state`.replace(`{${\"machineId\"}}`, encodeURIComponent(String(requestParameters.machineId))),\r\n method: 'PUT',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => StateDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesMachineIdStatePut(requestParameters: ApiMachinesMachineIdStatePutRequest): Promise {\r\n const response = await this.apiMachinesMachineIdStatePutRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesPostRaw(requestParameters: ApiMachinesPostRequest): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/Machines`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: MachineDtoToJSON(requestParameters.machineDto),\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => MachineDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiMachinesPost(requestParameters: ApiMachinesPostRequest): Promise {\r\n const response = await this.apiMachinesPostRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nimport * as runtime from '../runtime';\r\nimport {\r\n MachineTypeDto,\r\n MachineTypeDtoFromJSON,\r\n MachineTypeDtoToJSON,\r\n StateDto,\r\n StateDtoFromJSON,\r\n StateDtoToJSON,\r\n} from '../models';\r\n\r\nexport interface ApiMachineTypesDeleteRequest {\r\n id?: number;\r\n}\r\n\r\nexport interface ApiMachineTypesIdPutRequest {\r\n id: number;\r\n machineTypeDto?: MachineTypeDto;\r\n}\r\n\r\nexport interface ApiMachineTypesPostRequest {\r\n machineTypeDto?: MachineTypeDto;\r\n}\r\n\r\n/**\r\n * no description\r\n */\r\nexport class MachineTypesApi extends runtime.BaseAPI {\r\n\r\n /**\r\n */\r\n async apiMachineTypesDeleteRaw(requestParameters: ApiMachineTypesDeleteRequest): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n if (requestParameters.id !== undefined) {\r\n queryParameters['id'] = requestParameters.id;\r\n }\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/MachineTypes`,\r\n method: 'DELETE',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.TextApiResponse(response) as any;\r\n }\r\n\r\n /**\r\n */\r\n async apiMachineTypesDelete(requestParameters: ApiMachineTypesDeleteRequest): Promise {\r\n const response = await this.apiMachineTypesDeleteRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiMachineTypesGetRaw(): Promise>> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/MachineTypes`,\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(MachineTypeDtoFromJSON));\r\n }\r\n\r\n /**\r\n */\r\n async apiMachineTypesGet(): Promise> {\r\n const response = await this.apiMachineTypesGetRaw();\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiMachineTypesIdPutRaw(requestParameters: ApiMachineTypesIdPutRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiMachineTypesIdPut.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/MachineTypes/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'PUT',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: MachineTypeDtoToJSON(requestParameters.machineTypeDto),\r\n });\r\n\r\n return new runtime.VoidApiResponse(response);\r\n }\r\n\r\n /**\r\n */\r\n async apiMachineTypesIdPut(requestParameters: ApiMachineTypesIdPutRequest): Promise {\r\n await this.apiMachineTypesIdPutRaw(requestParameters);\r\n }\r\n\r\n /**\r\n */\r\n async apiMachineTypesPostRaw(requestParameters: ApiMachineTypesPostRequest): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/MachineTypes`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: MachineTypeDtoToJSON(requestParameters.machineTypeDto),\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => StateDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiMachineTypesPost(requestParameters: ApiMachineTypesPostRequest): Promise {\r\n const response = await this.apiMachineTypesPostRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nimport * as runtime from '../runtime';\r\nimport {\r\n BackendInfoDto,\r\n BackendInfoDtoFromJSON,\r\n BackendInfoDtoToJSON,\r\n CurrentUserDto,\r\n CurrentUserDtoFromJSON,\r\n CurrentUserDtoToJSON,\r\n} from '../models';\r\n\r\nexport interface ApiSessionLoginGetRequest {\r\n returnUrl?: string;\r\n}\r\n\r\nexport interface ApiSessionLogoutGetRequest {\r\n returnUrl?: string;\r\n}\r\n\r\n/**\r\n * no description\r\n */\r\nexport class SessionApi extends runtime.BaseAPI {\r\n\r\n /**\r\n */\r\n async apiSessionBackendinfoGetRaw(): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Session/backendinfo`,\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => BackendInfoDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiSessionBackendinfoGet(): Promise {\r\n const response = await this.apiSessionBackendinfoGetRaw();\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiSessionLoginGetRaw(requestParameters: ApiSessionLoginGetRequest): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n if (requestParameters.returnUrl !== undefined) {\r\n queryParameters['returnUrl'] = requestParameters.returnUrl;\r\n }\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Session/login`,\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.VoidApiResponse(response);\r\n }\r\n\r\n /**\r\n */\r\n async apiSessionLoginGet(requestParameters: ApiSessionLoginGetRequest): Promise {\r\n await this.apiSessionLoginGetRaw(requestParameters);\r\n }\r\n\r\n /**\r\n */\r\n async apiSessionLogoutGetRaw(requestParameters: ApiSessionLogoutGetRequest): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n if (requestParameters.returnUrl !== undefined) {\r\n queryParameters['returnUrl'] = requestParameters.returnUrl;\r\n }\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Session/logout`,\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.VoidApiResponse(response);\r\n }\r\n\r\n /**\r\n */\r\n async apiSessionLogoutGet(requestParameters: ApiSessionLogoutGetRequest): Promise {\r\n await this.apiSessionLogoutGetRaw(requestParameters);\r\n }\r\n\r\n /**\r\n */\r\n async apiSessionUserGetRaw(): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Session/user`,\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => CurrentUserDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiSessionUserGet(): Promise {\r\n const response = await this.apiSessionUserGetRaw();\r\n return await response.value();\r\n }\r\n\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nimport * as runtime from '../runtime';\r\nimport {\r\n OrganizationDto,\r\n OrganizationDtoFromJSON,\r\n OrganizationDtoToJSON,\r\n} from '../models';\r\n\r\nexport interface ApiOrganizationsIdDeleteRequest {\r\n id: string;\r\n}\r\n\r\nexport interface ApiOrganizationsIdGetRequest {\r\n id: string;\r\n}\r\n\r\nexport interface ApiOrganizationsIdPutRequest {\r\n id: number;\r\n organizationDto?: OrganizationDto;\r\n}\r\n\r\nexport interface ApiOrganizationsPostRequest {\r\n organizationDto?: OrganizationDto;\r\n}\r\n\r\n/**\r\n * no description\r\n */\r\nexport class OrganizationsApi extends runtime.BaseAPI {\r\n\r\n /**\r\n */\r\n async apiOrganizationsGetRaw(): Promise>> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Organizations`,\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(OrganizationDtoFromJSON));\r\n }\r\n\r\n /**\r\n */\r\n async apiOrganizationsGet(): Promise> {\r\n const response = await this.apiOrganizationsGetRaw();\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiOrganizationsIdDeleteRaw(requestParameters: ApiOrganizationsIdDeleteRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiOrganizationsIdDelete.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Organizations/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'DELETE',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => OrganizationDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiOrganizationsIdDelete(requestParameters: ApiOrganizationsIdDeleteRequest): Promise {\r\n const response = await this.apiOrganizationsIdDeleteRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiOrganizationsIdGetRaw(requestParameters: ApiOrganizationsIdGetRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiOrganizationsIdGet.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Organizations/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => OrganizationDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiOrganizationsIdGet(requestParameters: ApiOrganizationsIdGetRequest): Promise {\r\n const response = await this.apiOrganizationsIdGetRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiOrganizationsIdPutRaw(requestParameters: ApiOrganizationsIdPutRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiOrganizationsIdPut.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/Organizations/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'PUT',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: OrganizationDtoToJSON(requestParameters.organizationDto),\r\n });\r\n\r\n return new runtime.VoidApiResponse(response);\r\n }\r\n\r\n /**\r\n */\r\n async apiOrganizationsIdPut(requestParameters: ApiOrganizationsIdPutRequest): Promise {\r\n await this.apiOrganizationsIdPutRaw(requestParameters);\r\n }\r\n\r\n /**\r\n */\r\n async apiOrganizationsPostRaw(requestParameters: ApiOrganizationsPostRequest): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/Organizations`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: OrganizationDtoToJSON(requestParameters.organizationDto),\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => OrganizationDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiOrganizationsPost(requestParameters: ApiOrganizationsPostRequest): Promise {\r\n const response = await this.apiOrganizationsPostRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nimport * as runtime from '../runtime';\r\nimport {\r\n StateDto,\r\n StateDtoFromJSON,\r\n StateDtoToJSON,\r\n} from '../models';\r\n\r\nexport interface ApiStatesIdDeleteRequest {\r\n id: number;\r\n}\r\n\r\nexport interface ApiStatesIdGetRequest {\r\n id: number;\r\n}\r\n\r\nexport interface ApiStatesIdPutRequest {\r\n id: number;\r\n stateDto?: StateDto;\r\n}\r\n\r\nexport interface ApiStatesPostRequest {\r\n stateDto?: StateDto;\r\n}\r\n\r\n/**\r\n * no description\r\n */\r\nexport class StatesApi extends runtime.BaseAPI {\r\n\r\n /**\r\n */\r\n async apiStatesGetRaw(): Promise>> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/States`,\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(StateDtoFromJSON));\r\n }\r\n\r\n /**\r\n */\r\n async apiStatesGet(): Promise> {\r\n const response = await this.apiStatesGetRaw();\r\n return await response.value();\r\n }\r\n\r\n /**\r\n * Deletes a StateType for the given Id. If the StateType Id is used for any Machines then the deletion will fail. HTTP422 will be returned. If the Id does not exist HTTP404 will be returned.\r\n */\r\n async apiStatesIdDeleteRaw(requestParameters: ApiStatesIdDeleteRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiStatesIdDelete.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/States/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'DELETE',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => StateDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n * Deletes a StateType for the given Id. If the StateType Id is used for any Machines then the deletion will fail. HTTP422 will be returned. If the Id does not exist HTTP404 will be returned.\r\n */\r\n async apiStatesIdDelete(requestParameters: ApiStatesIdDeleteRequest): Promise {\r\n const response = await this.apiStatesIdDeleteRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiStatesIdGetRaw(requestParameters: ApiStatesIdGetRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiStatesIdGet.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/States/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => StateDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiStatesIdGet(requestParameters: ApiStatesIdGetRequest): Promise {\r\n const response = await this.apiStatesIdGetRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiStatesIdPutRaw(requestParameters: ApiStatesIdPutRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiStatesIdPut.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/States/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'PUT',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: StateDtoToJSON(requestParameters.stateDto),\r\n });\r\n\r\n return new runtime.VoidApiResponse(response);\r\n }\r\n\r\n /**\r\n */\r\n async apiStatesIdPut(requestParameters: ApiStatesIdPutRequest): Promise {\r\n await this.apiStatesIdPutRaw(requestParameters);\r\n }\r\n\r\n /**\r\n */\r\n async apiStatesPostRaw(requestParameters: ApiStatesPostRequest): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/States`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: StateDtoToJSON(requestParameters.stateDto),\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => StateDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiStatesPost(requestParameters: ApiStatesPostRequest): Promise {\r\n const response = await this.apiStatesPostRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nimport * as runtime from '../runtime';\r\nimport {\r\n TagDto,\r\n TagDtoFromJSON,\r\n TagDtoToJSON,\r\n} from '../models';\r\n\r\nexport interface ApiTagsIdDeleteRequest {\r\n id: number;\r\n}\r\n\r\nexport interface ApiTagsIdGetRequest {\r\n id: number;\r\n}\r\n\r\nexport interface ApiTagsIdPutRequest {\r\n id: number;\r\n tagDto?: TagDto;\r\n}\r\n\r\nexport interface ApiTagsPostRequest {\r\n tagDto?: TagDto;\r\n}\r\n\r\n/**\r\n * no description\r\n */\r\nexport class TagsApi extends runtime.BaseAPI {\r\n\r\n /**\r\n */\r\n async apiTagsGetRaw(): Promise>> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Tags`,\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(TagDtoFromJSON));\r\n }\r\n\r\n /**\r\n */\r\n async apiTagsGet(): Promise> {\r\n const response = await this.apiTagsGetRaw();\r\n return await response.value();\r\n }\r\n\r\n /**\r\n * Deletes a Tag for the given Id. If the Tag Id is used for any Machines then the deletion will fail. HTTP422 will be returned. If the Id does not exist HTTP404 will be returned.\r\n */\r\n async apiTagsIdDeleteRaw(requestParameters: ApiTagsIdDeleteRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiTagsIdDelete.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Tags/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'DELETE',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => TagDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n * Deletes a Tag for the given Id. If the Tag Id is used for any Machines then the deletion will fail. HTTP422 will be returned. If the Id does not exist HTTP404 will be returned.\r\n */\r\n async apiTagsIdDelete(requestParameters: ApiTagsIdDeleteRequest): Promise {\r\n const response = await this.apiTagsIdDeleteRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiTagsIdGetRaw(requestParameters: ApiTagsIdGetRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiTagsIdGet.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Tags/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => TagDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiTagsIdGet(requestParameters: ApiTagsIdGetRequest): Promise {\r\n const response = await this.apiTagsIdGetRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiTagsIdPutRaw(requestParameters: ApiTagsIdPutRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiTagsIdPut.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/Tags/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'PUT',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: TagDtoToJSON(requestParameters.tagDto),\r\n });\r\n\r\n return new runtime.VoidApiResponse(response);\r\n }\r\n\r\n /**\r\n */\r\n async apiTagsIdPut(requestParameters: ApiTagsIdPutRequest): Promise {\r\n await this.apiTagsIdPutRaw(requestParameters);\r\n }\r\n\r\n /**\r\n */\r\n async apiTagsPostRaw(requestParameters: ApiTagsPostRequest): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/Tags`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: TagDtoToJSON(requestParameters.tagDto),\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => TagDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiTagsPost(requestParameters: ApiTagsPostRequest): Promise {\r\n const response = await this.apiTagsPostRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nimport * as runtime from '../runtime';\r\nimport {\r\n MeasurementSystem,\r\n MeasurementSystemFromJSON,\r\n MeasurementSystemToJSON,\r\n TelemetryRangeDto,\r\n TelemetryRangeDtoFromJSON,\r\n TelemetryRangeDtoToJSON,\r\n} from '../models';\r\n\r\nexport interface ApiTelemetryMachineIdGetRequest {\r\n machineId: number;\r\n from?: Date;\r\n till?: Date;\r\n measurementSystem?: MeasurementSystem;\r\n resolutionInSeconds?: number;\r\n}\r\n\r\n/**\r\n * no description\r\n */\r\nexport class TelemetryApi extends runtime.BaseAPI {\r\n\r\n /**\r\n */\r\n async apiTelemetryMachineIdGetRaw(requestParameters: ApiTelemetryMachineIdGetRequest): Promise> {\r\n if (requestParameters.machineId === null || requestParameters.machineId === undefined) {\r\n throw new runtime.RequiredError('machineId','Required parameter requestParameters.machineId was null or undefined when calling apiTelemetryMachineIdGet.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n if (requestParameters.from !== undefined) {\r\n queryParameters['from'] = (requestParameters.from as any).toISOString();\r\n }\r\n\r\n if (requestParameters.till !== undefined) {\r\n queryParameters['till'] = (requestParameters.till as any).toISOString();\r\n }\r\n\r\n if (requestParameters.measurementSystem !== undefined) {\r\n queryParameters['measurementSystem'] = requestParameters.measurementSystem;\r\n }\r\n\r\n if (requestParameters.resolutionInSeconds !== undefined) {\r\n queryParameters['resolutionInSeconds'] = requestParameters.resolutionInSeconds;\r\n }\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Telemetry/{machineId}`.replace(`{${\"machineId\"}}`, encodeURIComponent(String(requestParameters.machineId))),\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => TelemetryRangeDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiTelemetryMachineIdGet(requestParameters: ApiTelemetryMachineIdGetRequest): Promise {\r\n console.warn(\"In apiTelemetryMachineIdGet\");\r\n const response = await this.apiTelemetryMachineIdGetRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\nimport { exists, mapValues } from '../runtime';\r\n\r\n/**\r\n * \r\n * @export\r\n * @interface UploadDto\r\n */\r\nexport interface UploadDto {\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof UploadDto\r\n */\r\n companyName: string;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof UploadDto\r\n */\r\n name: string;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof UploadDto\r\n */\r\n email: string | null;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof UploadDto\r\n */\r\n purpose: string;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof UploadDto\r\n */\r\n subject: string;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof UploadDto\r\n */\r\n description: string;\r\n}\r\n\r\n/**\r\n * \r\n * @export\r\n * @interface UploadResponseDto\r\n */\r\nexport interface UploadResponseDto {\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof UploadResponseDto\r\n */\r\n id: string;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof UploadResponseDto\r\n */\r\n status: string;\r\n /**\r\n * \r\n * @type {number}\r\n * @memberof UploadResponseDto\r\n */\r\n statusCode: number;\r\n /**\r\n * \r\n * @type {string}\r\n * @memberof UploadResponseDto\r\n */\r\n statusText: string;\r\n}\r\n\r\n\r\nexport function UploadDtoFromJSON(json: any): UploadDto {\r\n return UploadDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function UploadResponseDtoFromJSON(json: any): UploadResponseDto {\r\n return UploadResponseDtoFromJSONTyped(json, false);\r\n}\r\n\r\nexport function UploadDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): UploadDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n 'companyName': json['companyName'],\r\n 'name': json['name'],\r\n 'email': !exists(json, 'email') ? undefined : json['email'],\r\n 'purpose': json['purpose'],\r\n 'subject': json['subject'],\r\n 'description': json['description'],\r\n };\r\n}\r\n\r\nexport function UploadResponseDtoFromJSONTyped(json: any, ignoreDiscriminator: boolean): UploadResponseDto {\r\n if ((json === undefined) || (json === null)) {\r\n return json;\r\n }\r\n return {\r\n 'id': json['id'],\r\n 'status': json['status'],\r\n 'statusCode': json['statusCode'],\r\n 'statusText': json['statusText'],\r\n };\r\n}\r\n\r\nexport function UploadDtoToJSON(value?: UploadDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n 'companyName': value.companyName,\r\n 'name': value.name,\r\n 'email': value.email,\r\n 'purpose': value.purpose,\r\n 'subject': value.subject,\r\n 'description': value.description,\r\n };\r\n}\r\n\r\nexport function UploadResponseDtoToJSON(value?: UploadResponseDto | null): any {\r\n if (value === undefined) {\r\n return undefined;\r\n }\r\n if (value === null) {\r\n return null;\r\n }\r\n return {\r\n 'id': value.id,\r\n 'status': value.status,\r\n 'statusCode': value.statusCode,\r\n 'statusText': value.statusText,\r\n };\r\n}\r\n\r\n\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nimport * as runtime from '../runtime';\r\nimport {\r\n} from '../models';\r\nimport { UploadDto, UploadDtoToJSON, UploadResponseDto, UploadResponseDtoFromJSON } from '../models/UploadDto';\r\nimport { promises } from 'dns';\r\n\r\nexport interface ApiUploadPostRequest {\r\n uploadDto? : UploadDto;\r\n}\r\n\r\n/**\r\n * no description\r\n */\r\nexport class UploadApi extends runtime.BaseAPI {\r\n\r\n /**\r\n */\r\n async apiUploadPostRaw(requestParameters: ApiUploadPostRequest): Promise> {\r\n console.log(\"In apiUploadPostRaw\");\r\n console.log(requestParameters);\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/Upload/upload`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: UploadDtoToJSON(requestParameters.uploadDto),\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => UploadResponseDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiUploadPost(requestParameters: ApiUploadPostRequest): Promise {\r\n console.log(\"In apiUploadPost\");\r\n console.log(requestParameters);\r\n\r\n const response = await this.apiUploadPostRaw(requestParameters);\r\n\r\n console.log(\"apiUploadPostRaw completed\");\r\n console.log(response);\r\n \r\n return await response.value();\r\n }\r\n\r\n async apiUploadFileRaw(file: File, id: string): Promise> {\r\n console.log(\"Uploading file \" + file.name);\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n console.log(\"Uploading file...\");\r\n \r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n formData.append(\"id\", id);\r\n \r\n console.log(\"formData:\");\r\n console.log(formData);\r\n\r\n const response = await this.request({\r\n path: `/api/Upload/uploadFile`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: formData,\r\n });\r\n return new runtime.JSONApiResponse(response, (jsonValue) => UploadResponseDtoFromJSON(jsonValue));\r\n }\r\n\r\n async apiUploadFile(file: File, id: string): Promise {\r\n const response = await this.apiUploadFileRaw(file, id);\r\n return await response.value();\r\n }\r\n\r\n async apiCommitRaw(id: string): Promise> {\r\n console.log(\"In Commit(\" + id + \")\" );\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/Upload/commit`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: JSON.stringify(id),\r\n });\r\n return new runtime.JSONApiResponse(response, (jsonValue) => UploadResponseDtoFromJSON(jsonValue));\r\n }\r\n\r\n async apiCommit(id: string): Promise {\r\n const response = await this.apiCommitRaw(id);\r\n return await response.value();\r\n }\r\n\r\n async apiStateRaw(): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/Upload/state`,\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n return new runtime.JSONApiResponse(response);\r\n }\r\n\r\n async apiState(): Promise {\r\n const response = await this.apiStateRaw();\r\n return await response.value();\r\n }\r\n\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/**\r\n * FleetManagement Frontend API\r\n * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\r\n *\r\n * The version of the OpenAPI document: v1\r\n * \r\n *\r\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\r\n * https://openapi-generator.tech\r\n * Do not edit the class manually.\r\n */\r\n\r\n\r\nimport * as runtime from '../runtime';\r\nimport {\r\n MeasurementSystem,\r\n MeasurementSystemFromJSON,\r\n MeasurementSystemToJSON,\r\n UserDto,\r\n UserDtoFromJSON,\r\n UserDtoToJSON,\r\n} from '../models';\r\n\r\nexport interface ApiUsersIdDeleteRequest {\r\n id: number;\r\n}\r\n\r\nexport interface ApiUsersIdGetRequest {\r\n id: number;\r\n}\r\n\r\nexport interface ApiUsersIdPutRequest {\r\n id: number;\r\n userDto?: UserDto;\r\n}\r\n\r\nexport interface ApiUsersPostRequest {\r\n userDto?: UserDto;\r\n}\r\n\r\nexport interface UpdatePreferencesPutRequest {\r\n id?: number;\r\n isoLanguageString?: string;\r\n measurementSystem?: MeasurementSystem;\r\n}\r\n\r\n/**\r\n * no description\r\n */\r\nexport class UsersApi extends runtime.BaseAPI {\r\n\r\n /**\r\n */\r\n async apiUsersGetRaw(): Promise>> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Users`,\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(UserDtoFromJSON));\r\n }\r\n\r\n /**\r\n */\r\n async apiUsersGet(): Promise> {\r\n const response = await this.apiUsersGetRaw();\r\n return await response.value();\r\n }\r\n\r\n /**\r\n * Deletes a User for the given Id. If the Users Id is used for any relation then the deletion will fail. HTTP422 will be returned. If the Id does not exist HTTP404 will be returned.\r\n */\r\n async apiUsersIdDeleteRaw(requestParameters: ApiUsersIdDeleteRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiUsersIdDelete.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Users/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'DELETE',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => UserDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n * Deletes a User for the given Id. If the Users Id is used for any relation then the deletion will fail. HTTP422 will be returned. If the Id does not exist HTTP404 will be returned.\r\n */\r\n async apiUsersIdDelete(requestParameters: ApiUsersIdDeleteRequest): Promise {\r\n const response = await this.apiUsersIdDeleteRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiUsersIdGetRaw(requestParameters: ApiUsersIdGetRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiUsersIdGet.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/api/Users/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'GET',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => UserDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiUsersIdGet(requestParameters: ApiUsersIdGetRequest): Promise {\r\n const response = await this.apiUsersIdGetRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n */\r\n async apiUsersIdPutRaw(requestParameters: ApiUsersIdPutRequest): Promise> {\r\n if (requestParameters.id === null || requestParameters.id === undefined) {\r\n throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling apiUsersIdPut.');\r\n }\r\n\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/Users/{id}`.replace(`{${\"id\"}}`, encodeURIComponent(String(requestParameters.id))),\r\n method: 'PUT',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: UserDtoToJSON(requestParameters.userDto),\r\n });\r\n\r\n return new runtime.VoidApiResponse(response);\r\n }\r\n\r\n /**\r\n */\r\n async apiUsersIdPut(requestParameters: ApiUsersIdPutRequest): Promise {\r\n await this.apiUsersIdPutRaw(requestParameters);\r\n }\r\n\r\n /**\r\n */\r\n async apiUsersPostRaw(requestParameters: ApiUsersPostRequest): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n headerParameters['Content-Type'] = 'application/json';\r\n\r\n const response = await this.request({\r\n path: `/api/Users`,\r\n method: 'POST',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n body: UserDtoToJSON(requestParameters.userDto),\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => UserDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n */\r\n async apiUsersPost(requestParameters: ApiUsersPostRequest): Promise {\r\n const response = await this.apiUsersPostRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n /**\r\n * Update user preferences for isoLanguageCode and MeasurementSystem.\r\n */\r\n async updatePreferencesPutRaw(requestParameters: UpdatePreferencesPutRequest): Promise> {\r\n const queryParameters: runtime.HTTPQuery = {};\r\n\r\n if (requestParameters.id !== undefined) {\r\n queryParameters['id'] = requestParameters.id;\r\n }\r\n\r\n if (requestParameters.isoLanguageString !== undefined) {\r\n queryParameters['isoLanguageString'] = requestParameters.isoLanguageString;\r\n }\r\n\r\n if (requestParameters.measurementSystem !== undefined) {\r\n queryParameters['measurementSystem'] = requestParameters.measurementSystem;\r\n }\r\n\r\n const headerParameters: runtime.HTTPHeaders = {};\r\n\r\n const response = await this.request({\r\n path: `/update-preferences`,\r\n method: 'PUT',\r\n headers: headerParameters,\r\n query: queryParameters,\r\n });\r\n\r\n return new runtime.JSONApiResponse(response, (jsonValue) => UserDtoFromJSON(jsonValue));\r\n }\r\n\r\n /**\r\n * Update user preferences for isoLanguageCode and MeasurementSystem.\r\n */\r\n async updatePreferencesPut(requestParameters: UpdatePreferencesPutRequest): Promise {\r\n const response = await this.updatePreferencesPutRaw(requestParameters);\r\n return await response.value();\r\n }\r\n\r\n}\r\n","import * as api from '../rubblemaster_openapi3_typescript-fetch/';\r\nimport { AccessLevel } from '../types';\r\nimport jsPDF from 'jspdf';\r\nimport moment from 'moment';\r\nimport logo from '../assets/img/logo.png';\r\nimport i18next, { TFunction } from 'i18next';\r\nimport flagEnUs from '../assets/icons/en-US.png';\r\nimport flagEnGb from '../assets/icons/en-GB.png';\r\nimport flagDeAt from '../assets/icons/de-AT.png';\r\nimport flagEsEs from '../assets/icons/es-ES.png';\r\nimport flagFrFr from '../assets/icons/fr-FR.png';\r\nimport flagItIt from '../assets/icons/it-IT.png';\r\nimport { UnitValueDto } from '../rubblemaster_openapi3_typescript-fetch/';\r\n\r\nexport const rubbleMasterHq = {\r\n lat: +48.254022,\r\n lng: +14.379771,\r\n};\r\n\r\nexport const basePath =\r\n process.env.NODE_ENV === 'production'\r\n ? window.location.protocol + '//' + window.location.host\r\n : 'https://localhost:44306';\r\n\r\nexport const machinesApi = new api.MachinesApi(\r\n new api.Configuration({ basePath: basePath, credentials: 'include' })\r\n);\r\nexport const fetchStatusApi = new api.StatesApi(\r\n new api.Configuration({ basePath: basePath, credentials: 'include' })\r\n);\r\nexport const fetchTagsApi = new api.TagsApi(\r\n new api.Configuration({ basePath: basePath, credentials: 'include' })\r\n);\r\nexport const machineTagsApi = new api.MachineTagsApi(\r\n new api.Configuration({ basePath: basePath, credentials: 'include' })\r\n);\r\nexport const fetchSessionApi = new api.SessionApi(\r\n new api.Configuration({ basePath: basePath, credentials: 'include' })\r\n);\r\nexport const userApi = new api.UsersApi(\r\n new api.Configuration({ basePath: basePath, credentials: 'include' })\r\n);\r\n\r\nexport const uploadApi = new api.UploadApi(\r\n new api.Configuration({ basePath: basePath })\r\n);\r\n\r\n\r\nexport const googleApiKey = 'AIzaSyClV-PmY3CXAd0mrI2gMWJg3w7z02Aln8M';\r\n// ACHTUNG: hier KEIN async! Führt zu F5-Problem\r\n//export const googleMapUrlWithKey = `https://maps.googleapis.com/maps/api/js?key=${googleApiKey}&loading=async`;\r\nexport const googleMapUrlWithKey = `https://maps.googleapis.com/maps/api/js?key=${googleApiKey}`;\r\nexport const googleGeoCodeUrl = 'https://maps.googleapis.com/maps/api/geocode/json?latlng=';\r\n\r\n// The linking domains are subdomains. Rewrite is handled on backend.\r\nexport const openLinkWithRewrite = (route: string) => {\r\n console.log(\"In openLinkWithRewrite : \" + route)\r\n window.location.href = route;\r\n};\r\n\r\nexport const initialMachineState = {\r\n id: 0,\r\n serialNumber: '',\r\n notes: '',\r\n owner: '',\r\n machineTypeId: 0,\r\n state: {\r\n id: 0,\r\n key: '',\r\n },\r\n stateText: '',\r\n isHybrid: true, // only for testing\r\n projectConstructionSite: '',\r\n useBlacklist : false,\r\n errorBlackList: '',\r\n machineType: {\r\n id: 0,\r\n name: '',\r\n category: '',\r\n },\r\n currentlyAuthenticatedUserAccessLevel: AccessLevel.None,\r\n info: '',\r\n logInfo: '',\r\n};\r\n\r\nexport const createPdfReportFooter = (\r\n pdf: jsPDF,\r\n serialNumber: string,\r\n page: TFunction,\r\n pageNumber: number | null,\r\n maxPage: number | null\r\n) => {\r\n pdf\r\n .setLineWidth(0.25)\r\n .line(\r\n 16,\r\n pdf.internal.pageSize.getHeight() - 22,\r\n pdf.internal.pageSize.getWidth() - 16,\r\n pdf.internal.pageSize.getHeight() - 22\r\n )\r\n .setFontSize(12)\r\n .setFontType('italic')\r\n .text(\r\n `${i18next.t('report.created')}: ${moment().format('DD.MM.YYYY HH:mm')}`,\r\n 16,\r\n pdf.internal.pageSize.getHeight() - 16\r\n )\r\n .text(\r\n serialNumber,\r\n pdf.internal.pageSize.getWidth() / 2,\r\n pdf.internal.pageSize.getHeight() - 16,\r\n {\r\n align: 'center',\r\n }\r\n )\r\n .setFontSize(10)\r\n .text(\r\n i18next.t('report.accuracyNote'),\r\n pdf.internal.pageSize.getWidth() / 2,\r\n pdf.internal.pageSize.getHeight() - 10,\r\n {\r\n align: 'center',\r\n }\r\n );\r\n if (pageNumber !== null && maxPage !== null) {\r\n pdf\r\n .setFontSize(12)\r\n .text(\r\n `${page} ${pageNumber} / ${maxPage}`,\r\n pdf.internal.pageSize.getWidth() - 32,\r\n pdf.internal.pageSize.getHeight() - 16\r\n );\r\n }\r\n return pdf;\r\n};\r\n\r\nexport const createPdfReportHeader = (\r\n pdf: jsPDF,\r\n reportTitle: string,\r\n reportTimeframe: string\r\n) => {\r\n const logoImg = new Image();\r\n logoImg.src = logo;\r\n return pdf\r\n .setFontSize(20)\r\n .setFontType('bold')\r\n .text(reportTitle, 16, 16)\r\n .setFontSize(12)\r\n .setFontType('italic')\r\n .text(reportTimeframe, 16, 24)\r\n .addImage(\r\n logoImg,\r\n 'PNG',\r\n pdf.internal.pageSize.getWidth() - 70 / 2,\r\n 0,\r\n 37.5 / 2,\r\n 46.875 / 2\r\n )\r\n .setLineWidth(0.25)\r\n .line(16, 30, pdf.internal.pageSize.getWidth() - 16, 30);\r\n};\r\n\r\nexport const createGraphReportsPage = (\r\n pdf: jsPDF,\r\n imgLeft: HTMLCanvasElement,\r\n imgRight: HTMLCanvasElement,\r\n isMobile: boolean\r\n) => {\r\n const graphWidth = isMobile ? 80 : 90;\r\n const smallChartWidth = isMobile ? 65 : 75;\r\n return pdf\r\n .addImage(\r\n imgLeft,\r\n 'JPEG',\r\n 10,\r\n (pdf.internal.pageSize.getHeight() - 125) / 2,\r\n smallChartWidth,\r\n 125,\r\n undefined,\r\n 'FAST'\r\n )\r\n .addImage(\r\n imgRight,\r\n 'JPEG',\r\n graphWidth,\r\n (pdf.internal.pageSize.getHeight() - 125) / 2,\r\n 200,\r\n 125,\r\n undefined,\r\n 'FAST'\r\n );\r\n};\r\n\r\nexport const languageOptions: { isoLanguageString: string; img: string }[] = [\r\n {\r\n isoLanguageString: 'en-GB',\r\n img: flagEnGb,\r\n },\r\n {\r\n isoLanguageString: 'en-US',\r\n img: flagEnUs,\r\n },\r\n {\r\n isoLanguageString: 'de-AT',\r\n img: flagDeAt,\r\n },\r\n {\r\n isoLanguageString: 'es-ES',\r\n img: flagEsEs,\r\n },\r\n {\r\n isoLanguageString: 'fr-FR',\r\n img: flagFrFr,\r\n },\r\n {\r\n isoLanguageString: 'it-IT',\r\n img: flagItIt,\r\n },\r\n];\r\n\r\nexport const pdfUnitsFormatter = (\r\n unitValue: UnitValueDto | null,\r\n fallbackUnitTranslation: string,\r\n noDataTranslation: string\r\n) => {\r\n if (unitValue !== null && unitValue.value !== undefined) {\r\n return `${unitValue.value.toFixed(2)} ${unitValue.unit ??\r\n fallbackUnitTranslation}`;\r\n }\r\n return noDataTranslation;\r\n};\r\n\r\nexport const sensorInterval = {\r\n ignitionKeyOn: 60,\r\n engineFuelRate: 60,\r\n operatingMode: 900,\r\n percentLoad: 60,\r\n machineType: 60,\r\n machineSerialNo: 60,\r\n gpsLatitude: 60,\r\n gpsLongitude: 60,\r\n workingHoursIgnitionOn: 900,\r\n workingMinutesIgnitionOn: 900,\r\n workingSecondsIgnitionOn: 900,\r\n workingMilliSecondsIgnitionOn: 900,\r\n rmErrorMsg: 900,\r\n gpsSpeed: 900,\r\n gpsAccuracy: 900,\r\n crusherEngineSpeedIst: 60,\r\n crusherEngineSpeedSoll: 60,\r\n engineWorkingHoursH: 900,\r\n engineWorkingHoursMin: 900,\r\n engineWorkingHoursSec: 900,\r\n fuelLevel: 900,\r\n adBlueLevel: 900,\r\n temperatureCrusherEngine: 900,\r\n currentLoadCrusherDrive: 60,\r\n intermediateCircuitVoltage: 60,\r\n weigher1CurrentDisplayed: 60,\r\n weigher2CurrentDisplayed: 60,\r\n weigher3CurrentDisplayed: 60,\r\n weigher4CurrentDisplayed: 60,\r\n};\r\n","import { createMuiTheme, responsiveFontSizes } from '@material-ui/core/styles';\r\n\r\nexport const themeColors = {\r\n darkGray: '#30333c',\r\n lightGray: '#D9D9D9',\r\n black: '#000000',\r\n yellow: '#FFEB3B', // 500\r\n red: '#f44336',\r\n green: '#4caf50',\r\n white: 'rgba(255, 255, 255, 1)',\r\n petrol100: 'rgba(81, 101, 111, 1)',\r\n petrol20: 'rgba(81, 101, 111, 0.2)',\r\n petrol15: 'rgba(81, 101, 111, 0.15)',\r\n petrol10: 'rgba(81, 101, 111, 0.1)',\r\n gray: 'rgba(217, 218, 291, 1)',\r\n blueGray: '#B0BEC5',\r\n transparent: 'rgba(0,0,0,255)',\r\n};\r\n\r\n// based on SAP https://experience.sap.com/fiori-design-web/values-and-names/ and tablau\r\n// export const chartColors = {\r\n// blue: '#4e79a7',\r\n// green1: '#59a14f',\r\n// brown: '#9c755f',\r\n// orange: '#f28e2b',\r\n// yellow1: '#fd0',\r\n// yellow2: '#edc948',\r\n// gray: '#bab0ac',\r\n// red: '#e15759',\r\n// purple: '#b07aa1',\r\n// green2: '#76b7b2',\r\n// pink: '#ff9da7',\r\n// white: '#FFF',\r\n// }\r\n\r\n// based on material ui [200]: https://material.io/design/color/the-color-system.html\r\nexport const chartColors = {\r\n red: '#EF9A9A',\r\n pink: '#F48FB1',\r\n purple: '#CE93D8',\r\n deepPurple: '#B39DDB',\r\n indigo: '#9FA8DA',\r\n blue: '#90CAF9',\r\n lightBlue: '#81D4FA',\r\n //cyan: '#80DEEA',\r\n cyan: '#B39DDB',\r\n teal: '#80CBC4',\r\n green: '#A5D6A7',\r\n lightGreen: '#C5E1A5',\r\n lime: '#E6EE9C',\r\n yellow: '#FFEB3B', // 500\r\n rmYellow: '#fd0', // RM yellow\r\n amber: '#FFE082',\r\n orange: '#FFCC80',\r\n deepOrange: '#FFAB91',\r\n brown: '#BCAAA4',\r\n gray: '#EEEEEE',\r\n blueGray: '#B0BEC5',\r\n white: '#FFFFFF',\r\n black: '#000000',\r\n electricBlue: '#51D6E7',\r\n};\r\n\r\nexport const rubbleMasterTheme = responsiveFontSizes(\r\n createMuiTheme({\r\n palette: {\r\n type: 'dark',\r\n text: {\r\n primary: themeColors.white,\r\n secondary: 'rgba(255, 255, 255, 0.7)',\r\n disabled: themeColors.gray,\r\n },\r\n action: {\r\n active: themeColors.yellow,\r\n hover: 'rgba(255, 255, 255, 0.08)',\r\n selected: themeColors.yellow,\r\n disabled: 'rgba(255, 255, 255, 0.08)',\r\n disabledBackground: 'rgba(255, 255, 255, 0.12)',\r\n },\r\n background: {\r\n default: '#303030',\r\n paper: '#424242',\r\n },\r\n primary: {\r\n main: themeColors.yellow,\r\n },\r\n secondary: {\r\n main: themeColors.darkGray,\r\n },\r\n },\r\n overrides: {\r\n MuiMenuItem: {\r\n root: {\r\n '&$selected': {\r\n backgroundColor: themeColors.yellow,\r\n },\r\n },\r\n },\r\n MuiCardHeader: {\r\n root: {\r\n textAlign: 'left',\r\n },\r\n },\r\n },\r\n })\r\n);\r\n\r\nexport const mapStyleDark = [\r\n {\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#212121',\r\n },\r\n ],\r\n },\r\n {\r\n elementType: 'labels.icon',\r\n stylers: [\r\n {\r\n visibility: 'off',\r\n },\r\n ],\r\n },\r\n {\r\n elementType: 'labels.text.fill',\r\n stylers: [\r\n {\r\n color: '#757575',\r\n },\r\n ],\r\n },\r\n {\r\n elementType: 'labels.text.stroke',\r\n stylers: [\r\n {\r\n color: '#212121',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'administrative',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#757575',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'administrative.country',\r\n elementType: 'labels.text.fill',\r\n stylers: [\r\n {\r\n color: '#9e9e9e',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'administrative.land_parcel',\r\n stylers: [\r\n {\r\n visibility: 'off',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'administrative.locality',\r\n elementType: 'labels.text.fill',\r\n stylers: [\r\n {\r\n color: '#bdbdbd',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'poi',\r\n elementType: 'labels.text.fill',\r\n stylers: [\r\n {\r\n color: '#757575',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'poi.park',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#181818',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'poi.park',\r\n elementType: 'labels.text.fill',\r\n stylers: [\r\n {\r\n color: '#616161',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'poi.park',\r\n elementType: 'labels.text.stroke',\r\n stylers: [\r\n {\r\n color: '#1b1b1b',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'road',\r\n elementType: 'geometry.fill',\r\n stylers: [\r\n {\r\n color: '#2c2c2c',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'road',\r\n elementType: 'labels.text.fill',\r\n stylers: [\r\n {\r\n color: '#8a8a8a',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'road.arterial',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#373737',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'road.highway',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#3c3c3c',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'road.highway.controlled_access',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#4e4e4e',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'road.local',\r\n elementType: 'labels.text.fill',\r\n stylers: [\r\n {\r\n color: '#616161',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'transit',\r\n elementType: 'labels.text.fill',\r\n stylers: [\r\n {\r\n color: '#757575',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'water',\r\n elementType: 'geometry',\r\n stylers: [\r\n {\r\n color: '#000000',\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'water',\r\n elementType: 'labels.text.fill',\r\n stylers: [\r\n {\r\n color: '#3d3d3d',\r\n },\r\n ],\r\n },\r\n];\r\n","export interface IRoute {\r\n pathName: string;\r\n showSearch: boolean;\r\n searchOverlap: boolean;\r\n}\r\n\r\nexport interface IRoutes {\r\n [key: string]: IRoute;\r\n}\r\n\r\nexport const routes: IRoutes = {\r\n portal: {\r\n pathName: '/',\r\n showSearch: false,\r\n searchOverlap: true,\r\n },\r\n login: {\r\n pathName: '/login',\r\n showSearch: false,\r\n searchOverlap: true,\r\n },\r\n welcome: {\r\n pathName: '/welcome',\r\n showSearch: false,\r\n searchOverlap: true,\r\n },\r\n fleetManagement: {\r\n pathName: '/fleetmanagement',\r\n showSearch: true,\r\n searchOverlap: true,\r\n },\r\n map: {\r\n pathName: '/fleetmanagement/map',\r\n showSearch: true,\r\n searchOverlap: true,\r\n },\r\n list: {\r\n pathName: '/fleetmanagement/list',\r\n showSearch: true,\r\n searchOverlap: false,\r\n },\r\n about: {\r\n pathName: '/fleetmanagement/about',\r\n showSearch: false,\r\n searchOverlap: true,\r\n },\r\n documentation: {\r\n pathName: '/documentation',\r\n showSearch: false,\r\n searchOverlap: true,\r\n },\r\n cockpit: {\r\n pathName: 'https://rmcockpit.azurewebsites.net/', //'/cockpit',\r\n showSearch: false,\r\n searchOverlap: true,\r\n },\r\n academy: {\r\n pathName: 'https://rm-family.online/login/', //'/academy',\r\n showSearch: false,\r\n searchOverlap: true,\r\n },\r\n virtualworld: {\r\n pathName: 'https://virtualworld.rubblemaster.com/', //'/academy',\r\n showSearch: false,\r\n searchOverlap: true,\r\n },\r\n machineConfigurator: {\r\n pathName: '/machineConfigurator',\r\n showSearch: false,\r\n searchOverlap: true,\r\n },\r\n webshop: {\r\n pathName: 'https://shop.rubblemaster.com/',\r\n showSearch: false,\r\n searchOverlap: true,\r\n },\r\n digital: {\r\n pathName: 'https://www.rmdigitalservices.com/', // digital insight\r\n showSearch: false,\r\n searchOverlap: true,\r\n },\r\n// upload: {\r\n // pathName: '/upload',\r\n // showSearch: false,\r\n // searchOverlap: false,\r\n // },\r\n // uploadFile: {\r\n // pathName: '/uploadFile',\r\n // showSearch: false,\r\n // searchOverlap: false,\r\n // },\r\n notFound: {\r\n pathName: '*',\r\n showSearch: false,\r\n searchOverlap: true,\r\n },\r\n};\r\n","import { createBrowserHistory } from 'history';\r\n\r\nexport default createBrowserHistory();","import {\r\n FETCH_USER_REQUEST,\r\n FETCH_USER_SUCCESS,\r\n FETCH_USER_FAIL,\r\n REDIRECT_LOGOUT,\r\n REDIRECT_LOGIN,\r\n FETCH_BACKEND_INFO_FAIL,\r\n FETCH_BACKEND_INFO_SUCCESS,\r\n FETCH_BACKEND_INFO_REQUEST,\r\n USER_IS_IDLE,\r\n USER_IS_NOT_IDLE,\r\n USER_LANGUAGE_CHANGE,\r\n USER_UNIT_CHANGE,\r\n} from './types';\r\nimport history from '../components/history';\r\nimport { fetchSessionApi, basePath, routes, userApi } from '../constants';\r\nimport { IReduxState } from '../types';\r\nimport { MeasurementSystem } from '../rubblemaster_openapi3_typescript-fetch/models';\r\n\r\nexport const fetchUserSession = (returnUrl?: string) => {\r\n return (dispatch: any) => {\r\n dispatch({ type: FETCH_USER_REQUEST });\r\n fetchSessionApi\r\n .apiSessionUserGet()\r\n .then((user: any) => {\r\n // console.log('%c%s', 'color: green;', 'Fetching user - SUCCESS!');\r\n dispatch({ type: FETCH_USER_SUCCESS, payload: user });\r\n if (!returnUrl) {\r\n history.push('/');\r\n } else {\r\n history.push(`/${returnUrl}`);\r\n }\r\n })\r\n .catch(() => {\r\n return dispatch({ type: FETCH_USER_FAIL });\r\n });\r\n };\r\n};\r\n\r\nexport const redirectAzureB2CLogin = (returnUrl?: string) => {\r\n return (dispatch: any) => {\r\n dispatch({ type: REDIRECT_LOGIN });\r\n if (returnUrl) {\r\n window.location.replace(`${basePath}/api/session/login/${returnUrl}`);\r\n } else {\r\n window.location.replace(`${basePath}/api/session/login`);\r\n }\r\n };\r\n};\r\n\r\nexport const redirectLogin = (redirectUrl?: string) => {\r\n return (dispatch: any) => {\r\n dispatch({ type: FETCH_USER_REQUEST });\r\n fetchSessionApi\r\n .apiSessionUserGet()\r\n .then((user: any) => {\r\n console.log('%c%s', 'color: green;', 'Fetching user - SUCCESS!');\r\n dispatch({ type: FETCH_USER_SUCCESS, payload: user });\r\n if(!!redirectUrl) {\r\n console.log(\"redirectUrl : \" + redirectUrl);\r\n history.push(redirectUrl);\r\n }\r\n else {\r\n console.log(\"redirect: else\");\r\n history.push(routes.map.pathName);\r\n }\r\n })\r\n .catch(() => {\r\n dispatch({ type: FETCH_USER_FAIL });\r\n if (redirectUrl) {\r\n window.location.replace(\r\n `${basePath}/api/session/login?returnUrl=${redirectUrl?.substr(\r\n 1,\r\n redirectUrl.length\r\n )}`\r\n );\r\n } else {\r\n window.location.replace(`${basePath}/api/session/login`);\r\n }\r\n });\r\n };\r\n};\r\n\r\nexport const redirectAzureB2CLogout = (returnUrl?: string) => {\r\n return (dispatch: any) => {\r\n dispatch({ type: REDIRECT_LOGOUT });\r\n if (returnUrl) {\r\n window.location.replace(\r\n `${basePath}/api/session/logout?returnUrl=${returnUrl}`\r\n );\r\n } else {\r\n window.location.replace(`${basePath}/api/session/logout`);\r\n }\r\n };\r\n};\r\n\r\nexport const fetchBackendInfo = () => {\r\n return (dispatch: any) => {\r\n dispatch({ type: FETCH_BACKEND_INFO_REQUEST });\r\n fetchSessionApi\r\n .apiSessionBackendinfoGet()\r\n .then((response: any) => {\r\n dispatch({\r\n type: FETCH_BACKEND_INFO_SUCCESS,\r\n payload: response,\r\n });\r\n })\r\n .catch((error: any) => {\r\n console.error(error);\r\n dispatch({ type: FETCH_BACKEND_INFO_FAIL });\r\n });\r\n };\r\n};\r\n\r\nexport const handleUserIdle = (isIdle: boolean) => {\r\n return (dispatch: any) => {\r\n const pathName = !!history.location.pathname\r\n ? history.location.pathname\r\n : '/';\r\n // console.log(\r\n // '%c%s',\r\n // `color: ${isIdle ? 'red' : 'green'};`,\r\n // `User is ${isIdle ? 'idle' : 'active'} at ${new Date().toISOString()}`\r\n // );\r\n\r\n if (pathName !== routes.portal.pathName && isIdle) {\r\n dispatch({ type: USER_IS_IDLE });\r\n history.push(routes.portal.pathName);\r\n }\r\n\r\n if (!isIdle) {\r\n dispatch({ type: USER_IS_NOT_IDLE });\r\n }\r\n };\r\n};\r\n\r\nexport const handleUserLanguageChange = (isoLanguageString: string) => {\r\n return async (dispatch: any, getState: () => IReduxState) => {\r\n try {\r\n const user = getState().auth.user;\r\n if (user) {\r\n await userApi.updatePreferencesPut({\r\n id: user.id,\r\n isoLanguageString,\r\n measurementSystem: user.measurementSystem,\r\n });\r\n dispatch({\r\n type: USER_LANGUAGE_CHANGE,\r\n payload: { isoLanguageCode: isoLanguageString },\r\n });\r\n }\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n };\r\n};\r\n\r\nexport const handleUserUnitChange = (measurementSystem: MeasurementSystem) => {\r\n return async (dispatch: any, getState: () => IReduxState) => {\r\n try {\r\n const user = getState().auth.user;\r\n if (user) {\r\n await userApi.updatePreferencesPut({\r\n id: user.id,\r\n isoLanguageString: user.isoLanguageCode ?? undefined,\r\n measurementSystem,\r\n });\r\n dispatch({\r\n type: USER_UNIT_CHANGE,\r\n payload: { measurementSystem },\r\n });\r\n }\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n };\r\n};\r\n","// AUTH\r\nexport const FETCH_USER_REQUEST = 'FETCH_USER_REQUEST';\r\nexport const FETCH_USER_SUCCESS = 'FETCH_USER_SUCCESS';\r\nexport const FETCH_USER_FAIL = 'FETCH_USER_FAIL';\r\n// USER IDLE\r\nexport const USER_IS_IDLE = 'USER_IS_IDLE';\r\nexport const USER_IS_NOT_IDLE = 'USER_IS_NOT_IDLE';\r\n// USER UNIT CHANGE\r\nexport const USER_UNIT_CHANGE = 'USER_UNIT_CHANGE';\r\nexport const USER_LANGUAGE_CHANGE = 'USER_LANGUAGE_CHANGE';\r\n// BACKEND INFO\r\nexport const FETCH_BACKEND_INFO_REQUEST = 'FETCH_BACKEND_INFO_REQUEST';\r\nexport const FETCH_BACKEND_INFO_SUCCESS = 'FETCH_BACKEND_INFO_SUCCESS';\r\nexport const FETCH_BACKEND_INFO_FAIL = 'FETCH_BACKEND_INFO_FAIL';\r\n// AZURE B2C\r\nexport const REDIRECT_LOGIN = 'REDIRECT_LOGIN';\r\nexport const REDIRECT_LOGOUT = 'REDIRECT_LOGOUT';\r\n// SEARCH\r\nexport const TOGGLE_SEARCH = 'TOGGLE_SEARCH';\r\nexport const UPDATE_SEARCH_TEXTFIELD = 'UPDATE_SEARCH_TEXTFIELD';\r\nexport const UPDATE_SEARCH_IGNITION_ON = 'UPDATE_SEARCH_IGNITION_ON';\r\nexport const UPDATE_SEARCH_IGNITION_OFF = 'UPDATE_SEARCH_IGNITION_OFF';\r\nexport const UPDATE_SEARCH_MACHINE_STATE = 'UPDATE_SEARCH_MACHINE_STATE';\r\nexport const UPDATE_SEARCH_MACHINE_TAGS = 'UPDATE_SEARCH_MACHINE_TAGS';\r\nexport const SEARCH_MACHINES = 'SEARCH_MACHINES';\r\nexport const UPDATE_FILTERED_MACHINES = 'UPDATE_FILTERED_MACHINES';\r\nexport const MACHINES_FOUND = 'MACHINES_FOUND';\r\nexport const NO_MACHINES_FOUND = 'NO_MACHINES_FOUND';\r\nexport const RESET_SEARCH_FILTERS = 'RESET_SEARCH_FILTERS';\r\nexport const UPDATE_MAP_CENTER = 'UPDATE_MAP_CENTER';\r\nexport const RESET_MAP_CENTER = 'RESET_MAP_CENTER';\r\n// ONE SPEZIFIC MACHINE\r\nexport const FETCH_MACHINE_BY_ID_REQUEST = 'FETCH_MACHINE_BY_ID_REQUEST';\r\nexport const FETCH_MACHINE_BY_ID_SUCCESS = 'FETCH_MACHINE_BY_ID_SUCCESS';\r\nexport const FETCH_MACHINE_BY_ID_FAIL = 'FETCH_MACHINE_BY_ID_FAIL';\r\n// ALL_MACHINES\r\nexport const FETCH_ALL_MACHINES_REQUEST = 'FETCH_ALL_MACHINES_REQUEST';\r\nexport const FETCH_ALL_MACHINES_SUCCESS = 'FETCH_ALL_MACHINES_SUCCESS';\r\nexport const FETCH_ALL_MACHINES_FAIL = 'FETCH_ALL_MACHINES_FAIL';\r\n// MACHINE STATE OPTIONS\r\nexport const FETCH_MACHINE_STATE_OPTIONS_REQUEST =\r\n 'FETCH_MACHINE_STATE_OPTIONS_REQUEST';\r\nexport const FETCH_MACHINE_STATE_OPTIONS_SUCCESS =\r\n 'FETCH_MACHINE_STATE_OPTIONS_SUCCESS';\r\nexport const FETCH_MACHINE_STATE_OPTIONS_FAIL =\r\n 'FETCH_MACHINE_STATE_OPTIONS_FAIL';\r\nexport const FETCH_MACHINE_TAG_OPTIONS_REQUEST =\r\n 'FETCH_MACHINE_TAG_OPTIONS_REQUEST';\r\nexport const FETCH_MACHINE_TAG_OPTIONS_SUCCESS =\r\n 'FETCH_MACHINE_TAG_OPTIONS_SUCCESS';\r\nexport const FETCH_MACHINE_TAG_OPTIONS_FAIL = 'FETCH_MACHINE_TAG_OPTIONS_FAIL';\r\n// MAP\r\nexport const GET_USER_POSITION_REQUEST = 'FETCH_USER_GEO_POSITION_REQUEST';\r\nexport const GET_USER_POSITION_SUCCESS = 'FETCH_USER_GEO_POSITION_SUCCESS';\r\nexport const GET_USER_POSITION_FAIL = 'FETCH_USER_GEO_POSITION_FAIL';\r\n// ADDRESS\r\nexport const FETCH_MACHINE_ADDRESS_REQUEST = 'FETCH_MACHINE_ADDRESS_REQUEST';\r\nexport const FETCH_MACHINE_ADDRESS_SUCCESS = 'FETCH_MACHINE_ADDRESS_SUCCESS';\r\nexport const FETCH_MACHINE_ADDRESS_FAIL = 'FETCH_MACHINE_ADDRESS_FAIL';\r\n// MACHINE DETAILS\r\nexport const FETCH_MACHINE_DETAILS_REQUEST = 'FETCH_MACHINE_DETAILS_REQUEST';\r\nexport const FETCH_MACHINE_DETAILS_SUCCESS = 'FETCH_MACHINE_DETAILS_SUCCESS';\r\nexport const FETCH_MACHINE_DETAILS_FAIL = 'FETCH_MACHINE_DETAILS_FAIL';\r\nexport const RESET_MACHINE_DETAILS = 'RESET_MACHINE_DETAILS';\r\n// MACHINE DETAILS ADDRESS\r\nexport const FETCH_MACHINE_DETAILS_ADDRESS_REQUEST =\r\n 'FETCH_MACHINE_DETAILS_ADDRESS_REQUEST';\r\nexport const FETCH_MACHINE_DETAILS_ADDRESS_SUCCESS =\r\n 'FETCH_MACHINE_DETAILS_ADDRESS_SUCCESS';\r\nexport const FETCH_MACHINE_DETAILS_ADDRESS_FAIL =\r\n 'FETCH_MACHINE_DETAILS_ADDRESS_FAIL';\r\n// PDF\r\nexport const CREATE_PDF_REPORT = 'CREATE_PDF_REPORT';\r\nexport const CREATE_PDF_REPORT_SUCCESS = 'CREATE_PDF_REPORT_SUCCESS';\r\nexport const CREATE_PDF_REPORT_FAIL = 'CREATE_PDF_REPORT_FAIL';\r\n// MACHINE STATE\r\nexport const UPDATE_MACHINE_STATE_REQUEST = 'UPDATE_MACHINE_STATE_REQUEST';\r\nexport const UPDATE_MACHINE_STATE_SUCCESS = 'UPDATE_MACHINE_STATE_SUCCESS';\r\nexport const UPDATE_MACHINE_STATE_FAIL = 'UPDATE_MACHINE_STATE_FAIL';\r\n// MACHINE TAG\r\nexport const ADD_MACHINE_TAG_REQUEST = 'ADD_MACHINE_TAG_REQUEST';\r\nexport const ADD_MACHINE_TAG_SUCCESS = 'ADD_MACHINE_TAG_SUCCESS';\r\nexport const ADD_MACHINE_TAG_FAIL = 'ADD_MACHINE_TAG_FAIL';\r\nexport const DELETE_MACHINE_TAG_REQUEST = 'DELETE_MACHINE_TAG_REQUEST';\r\nexport const DELETE_MACHINE_TAG_SUCCESS = 'DELETE_MACHINE_TAG_SUCCESS';\r\nexport const DELETE_MACHINE_TAG_FAIL = 'DELETE_MACHINE_TAG_FAIL';\r\n// MACHINE NOTE\r\nexport const EDIT_MACHINE_NOTE_REQUEST = 'EDIT_MACHINE_NOTE_REQUEST';\r\nexport const EDIT_MACHINE_NOTE_SUCCESS = 'EDIT_MACHINE_NOTE_SUCCESS';\r\nexport const EDIT_MACHINE_NOTE_FAIL = 'EDIT_MACHINE_NOTE_FAIL';\r\nexport const DELETE_MACHINE_NOTE_REQUEST = 'DELETE_MACHINE_NOTE_REQUEST';\r\nexport const DELETE_MACHINE_NOTE_SUCCESS = 'DELETE_MACHINE_NOTE_SUCCESS';\r\nexport const DELETE_MACHINE_NOTE_FAIL = 'DELETE_MACHINE_NOTE_FAIL';\r\n// MACHINE PROJECT CONSTRUCTION SITE\r\nexport const EDIT_MACHINE_PROJECT_CONSTRUCTION_SITE_REQUEST =\r\n 'EDIT_MACHINE_PROJECT_CONSTRUCTION_SITE_REQUEST';\r\nexport const EDIT_MACHINE_PROJECT_CONSTRUCTION_SITE_SUCCESS =\r\n 'EDIT_MACHINE_PROJECT_CONSTRUCTION_SITE_SUCCESS';\r\nexport const EDIT_MACHINE_PROJECT_CONSTRUCTION_SITE_FAIL =\r\n 'EDIT_MACHINE_PROJECT_CONSTRUCTION_SITE_FAIL';\r\nexport const DELETE_MACHINE_PROJECT_CONSTRUCTION_SITE_REQUEST =\r\n 'DELETE_MACHINE_PROJECT_CONSTRUCTION_SITE_REQUEST';\r\nexport const DELETE_MACHINE_PROJECT_CONSTRUCTION_SITE_SUCCESS =\r\n 'DELETE_MACHINE_PROJECT_CONSTRUCTION_SITE_SUCCESS';\r\nexport const DELETE_MACHINE_PROJECT_CONSTRUCTION_SITE_FAIL =\r\n 'DELETE_MACHINE_PROJECT_CONSTRUCTION_SITE_FAIL';\r\n\r\n // UPLOAD\r\nexport const UPLOAD_CUSTOMER_DATA_REQUEST = 'UPLOAD_CUSTOMER_DATA_REQUEST';\r\nexport const UPLOAD_CUSTOMER_DATA_SUCCESS = 'UPLOAD_CUSTOMER_DATA_SUCCESS';\r\nexport const UPLOAD_CUSTOMER_DATA_FAIL = 'UPLOAD_CUSTOMER_DATA_FAIL';\r\n\r\n// TELEMETRY\r\nexport const LAST_TELEMETRY_TIMESTAMP =\r\n 'LAST_TELEMETRY_TIMESTAMP';\r\n// GET TELEMETRY DATA\r\nexport const FETCH_MACHINE_TELEMETRY_REQUEST =\r\n 'FETCH_MACHINE_TELEMETRY_REQUEST';\r\nexport const FETCH_MACHINE_TELEMETRY_SUCCESS =\r\n 'FETCH_MACHINE_TELEMETRY_SUCCESS';\r\nexport const FETCH_MACHINE_TELEMETRY_FAIL = 'FETCH_MACHINE_TELEMETRY_FAIL';\r\nexport const RESET_MACHINE_TELEMETRY = 'RESET_MACHINE_TELEMETRY';\r\n// TELEMETRY DATA CONTROLS\r\nexport const UPDATE_START_DATE = 'UPDATE_START_DATE';\r\nexport const UPDATE_END_DATE = 'UPDATE_END_DATE';\r\nexport const UPDATE_GRAPH_TICK_VALUES = 'UPDATE_GRAPH_TICK_VALUES';\r\n// PROCESS TELEMETRY DATA\r\nexport const GET_AVERAGE_FUEL_CONSUMPTION = 'GET_AVERAGE_FUEL_CONSUMPTION';\r\nexport const SET_AVERAGE_FUEL_CONSUMPTION = 'SET_AVERAGE_FUEL_CONSUMPTION';\r\nexport const RESET_AVERAGE_FUEL_CONSUMPTION = 'RESET_AVERAGE_FUEL_CONSUMPTION';\r\nexport const GET_AVERAGE_ENERGY_CONSUMPTION = 'GET_AVERAGE_ENERGY_CONSUMPTION';\r\nexport const SET_AVERAGE_ENERGY_CONSUMPTION = 'SET_AVERAGE_ENERGY_CONSUMPTION';\r\nexport const RESET_AVERAGE_ENERGY_CONSUMPTION =\r\n 'RESET_AVERAGE_ENERGY_CONSUMPTION';\r\nexport const GET_FUEL_CONSUMED = 'GET_FUEL_CONSUMED';\r\nexport const SET_FUEL_CONSUMED = 'SET_FUEL_CONSUMED';\r\nexport const RESET_FUEL_CONSUMED = 'RESET_FUEL_CONSUMED';\r\nexport const GET_TOTAL_HOURS = 'GET_TOTAL_HOURS';\r\nexport const SET_TOTAL_HOURS = 'SET_TOTAL_HOURS';\r\nexport const RESET_TOTAL_HOURS = 'RESET_TOTAL_HOURS';\r\n// CALCULATE AVERAGES\r\nexport const GET_AVERAGE_ENGINE_UTILIZATION = 'GET_AVERAGE_ENGINE_UTILIZATION';\r\nexport const SET_AVERAGE_ENGINE_UTILIZATION = 'SET_AVERAGE_ENGINE_UTILIZATION';\r\nexport const RESET_AVERAGE_ENGINE_UTILIZATION =\r\n 'RESET_AVERAGE_ENGINE_UTILIZATION';\r\nexport const GET_AVERAGE_THROUGHPUTS = 'GET_AVERAGE_THROUGHPUTS';\r\nexport const SET_AVERAGE_THROUGHPUTS = 'SET_AVERAGE_THROUGHPUTS';\r\nexport const RESET_AVERAGE_THROUGHPUTS = 'RESET_AVERAGE_THROUGHPUTS';\r\nexport const GET_AVERAGE_FUEL_LEVELS = 'GET_AVERAGE_FUEL_LEVELS';\r\nexport const SET_AVERAGE_FUEL_LEVELS = 'SET_AVERAGE_FUEL_LEVELS';\r\nexport const RESET_AVERAGE_FUEL_LEVELS = 'RESET_AVERAGE_FUEL_LEVELS';\r\nexport const GET_AVERAGE_ENERGY_UTILIZATION = 'GET_AVERAGE_ENERGY_UTILIZATION';\r\nexport const SET_AVERAGE_ENERGY_UTILIZATION = 'SET_AVERAGE_ENERGY_UTILIZATION';\r\nexport const RESET_AVERAGE_ENERGY_UTILIZATION =\r\n 'RESET_AVERAGE_ENERGY_UTILIZATION';\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\nimport {\r\n Box,\r\n createStyles,\r\n FormControl,\r\n Grid,\r\n makeStyles,\r\n MenuItem,\r\n Select,\r\n Theme,\r\n Tooltip,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { languageOptions, themeColors } from '../../constants';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { IReduxState } from '../../types';\r\nimport { MeasurementSystem } from '../../rubblemaster_openapi3_typescript-fetch/models';\r\nimport { useHistory } from 'react-router';\r\nimport {\r\n handleUserLanguageChange,\r\n handleUserUnitChange,\r\n} from '../../actions/authActions';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n background: themeColors.darkGray,\r\n },\r\n formControl: {\r\n margin: theme.spacing(1),\r\n width: 'fit-content',\r\n display: 'flex',\r\n },\r\n selectEmpty: {\r\n marginTop: theme.spacing(2),\r\n },\r\n flag: {\r\n height: '1rem',\r\n },\r\n })\r\n);\r\n\r\nexport default function TopNavigation() {\r\n const { t, i18n } = useTranslation();\r\n const classes = useStyles();\r\n const [language, setLanguage] = useState('en-GB');\r\n const [units, setUnits] = useState(\r\n MeasurementSystem.Metric\r\n );\r\n const history = useHistory();\r\n const dispatch = useDispatch();\r\n\r\n // show unitsSelect on all pages of fleet management\r\n const showUnitsSelect =\r\n history.location.pathname.includes('machine') ||\r\n history.location.pathname.includes('map') ||\r\n history.location.pathname.includes('list') ||\r\n history.location.pathname.includes('about');\r\n\r\n const auth = useSelector((state: IReduxState) => state.auth);\r\n const isoLanguageCode = auth.user?.isoLanguageCode ?? 'en-GB';\r\n const measurementSystem =\r\n auth.user?.measurementSystem ?? MeasurementSystem.Metric;\r\n\r\n const changeLanguage = (selectedLanguage: string) => {\r\n setLanguage(selectedLanguage);\r\n i18n\r\n .changeLanguage(selectedLanguage.slice(0, 2))\r\n .then(() => console.log('language changed successfully'));\r\n if (auth.isAuthenticated && selectedLanguage !== isoLanguageCode) {\r\n dispatch(handleUserLanguageChange(selectedLanguage));\r\n }\r\n };\r\n\r\n const changeMeasurementSystem = useCallback(\r\n (selectedUnit?: MeasurementSystem) => {\r\n if (selectedUnit) {\r\n setUnits(selectedUnit);\r\n if (auth.isAuthenticated && measurementSystem !== selectedUnit) {\r\n dispatch(handleUserUnitChange(selectedUnit));\r\n }\r\n }\r\n },\r\n [auth.isAuthenticated, dispatch, measurementSystem]\r\n );\r\n\r\n useEffect(() => {\r\n if (isoLanguageCode !== language && auth.isAuthenticated) {\r\n changeLanguage(isoLanguageCode);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [isoLanguageCode]);\r\n\r\n useEffect(() => {\r\n if (measurementSystem !== units) {\r\n changeMeasurementSystem(measurementSystem);\r\n }\r\n }, [changeMeasurementSystem, measurementSystem, units]);\r\n\r\n return (\r\n \r\n \r\n \r\n changeLanguage(ev.target.value as string)}\r\n >\r\n {languageOptions.map((option) => {\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n {t(`general.languages.${option.isoLanguageString}`)}\r\n \r\n
\r\n \r\n \r\n );\r\n })}\r\n \r\n
\r\n {showUnitsSelect && (\r\n \r\n \r\n changeMeasurementSystem(ev.target.value as MeasurementSystem)\r\n }\r\n >\r\n {Object.values(MeasurementSystem).map((unitName) => (\r\n \r\n \r\n {unitName}\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 { Link } from 'react-router-dom';\r\nimport logo from '../../assets/img/logo.png';\r\nimport { makeStyles } from '@material-ui/styles';\r\nimport { routes } from '../../constants/routes';\r\nimport { Theme } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n position: 'absolute',\r\n right: '1rem',\r\n zIndex: 9999,\r\n top: 0,\r\n width: 80,\r\n [theme.breakpoints.up('sm')]: {\r\n width: 100\r\n }\r\n }\r\n}));\r\n\r\nexport default function Logo() {\r\n const classes = useStyles();\r\n return (\r\n \r\n \"logo\"\r\n \r\n )\r\n}\r\n","import {\r\n TOGGLE_SEARCH,\r\n UPDATE_SEARCH_TEXTFIELD,\r\n UPDATE_SEARCH_IGNITION_ON,\r\n UPDATE_SEARCH_IGNITION_OFF,\r\n UPDATE_SEARCH_MACHINE_STATE,\r\n SEARCH_MACHINES,\r\n UPDATE_FILTERED_MACHINES,\r\n NO_MACHINES_FOUND,\r\n MACHINES_FOUND,\r\n RESET_SEARCH_FILTERS,\r\n UPDATE_MAP_CENTER,\r\n UPDATE_SEARCH_MACHINE_TAGS,\r\n} from './types';\r\nimport { IReduxState, IMachine, IMachineStateOption } from '../types';\r\n\r\nexport const toggleSearch = () => {\r\n return (dispatch: any) => {\r\n dispatch({\r\n type: TOGGLE_SEARCH,\r\n });\r\n };\r\n};\r\n\r\nexport const updateSearchText = (text: string) => {\r\n return (dispatch: any) => {\r\n dispatch({\r\n type: UPDATE_SEARCH_TEXTFIELD,\r\n payload: text,\r\n });\r\n };\r\n};\r\n\r\nexport const updateSearchIgnitionOn = () => {\r\n return (dispatch: any) => {\r\n dispatch({\r\n type: UPDATE_SEARCH_IGNITION_ON,\r\n });\r\n dispatch(filterMachines());\r\n };\r\n};\r\n\r\nexport const updateSearchIgnitionOff = () => {\r\n return (dispatch: any) => {\r\n dispatch({\r\n type: UPDATE_SEARCH_IGNITION_OFF,\r\n });\r\n dispatch(filterMachines());\r\n };\r\n};\r\n\r\nexport const updateSelectedMachineState = (\r\n selectedMachineState: IMachineStateOption\r\n) => {\r\n return (dispatch: any) => {\r\n dispatch({\r\n type: UPDATE_SEARCH_MACHINE_STATE,\r\n payload: selectedMachineState,\r\n });\r\n dispatch(filterMachines());\r\n };\r\n};\r\n\r\nexport const searchMachines = () => {\r\n return (dispatch: any) => {\r\n dispatch({\r\n type: SEARCH_MACHINES,\r\n });\r\n dispatch(filterMachines());\r\n };\r\n};\r\n\r\n// @TODO: Refactoring\r\nfunction filterMachinesAccordingToSetFilterOptions(\r\n machines: IMachine[],\r\n getState: () => IReduxState\r\n) {\r\n const allMachines: IMachine[] = getState().machines.allMachines;\r\n const checkboxIgnitionOn: boolean = getState().search.checkboxIgnitionOn;\r\n const checkboxIgnitionOff: boolean = getState().search.checkboxIgnitionOff;\r\n const selectedMachineState = getState().search.selectedMachineState;\r\n const selectedMachineTags = getState().search.selectedMachineTags;\r\n const machineTagOptions = getState().search.machineTagOptions;\r\n\r\n if (checkboxIgnitionOn && checkboxIgnitionOff) {\r\n machines = allMachines;\r\n } else if (checkboxIgnitionOn && !checkboxIgnitionOff) {\r\n machines = allMachines.filter(\r\n (item: IMachine) =>\r\n item.telemetrySnapshot?.isIgnitionOn === checkboxIgnitionOn\r\n );\r\n } else if (!checkboxIgnitionOn && checkboxIgnitionOff) {\r\n machines = allMachines.filter(\r\n (item: IMachine) =>\r\n !item.telemetrySnapshot?.isIgnitionOn === checkboxIgnitionOff\r\n );\r\n } else {\r\n machines = [];\r\n }\r\n\r\n if (selectedMachineState.id !== 0) {\r\n machines = machines.filter(\r\n (item: IMachine) => item.state?.id === selectedMachineState.id\r\n );\r\n }\r\n\r\n // filter by tags\r\n const selectedMachineTagIds = selectedMachineTags\r\n .map(({ id }) => id as number)\r\n .sort((a: number, b: number) => a - b);\r\n const machineTagIds = machineTagOptions\r\n .map(({ id }) => id as number)\r\n .sort((a: number, b: number) => a - b);\r\n if (selectedMachineTagIds.length !== machineTagIds.length) {\r\n machines = machines.filter((item: IMachine) => {\r\n const tagIds: number[] | null =\r\n item.tags !== null ? item.tags!.map(({ id }) => id as number) : null;\r\n let value = 0;\r\n if (!!tagIds) {\r\n tagIds.forEach(\r\n (tag: number) =>\r\n (value = value + +selectedMachineTagIds.includes(tag))\r\n );\r\n return value === 1;\r\n } else return value;\r\n });\r\n }\r\n return machines;\r\n}\r\n\r\nfunction filterBySearchString(item: IMachine, searchText: string, ownerRegex : RegExp) {\r\n console.log(\"curItem:\");\r\n console.log(item);\r\n if(!!item.serialNumber){\r\n if(item.serialNumber.toLowerCase().includes(searchText)){\r\n console.log(\"1-1\");\r\n return true;\r\n }\r\n else{\r\n console.log(\"!1-1\");\r\n }\r\n }\r\n else {\r\n console.log(\"!1\");\r\n }\r\n if(!!item.owner){\r\n if(ownerRegex.test(item.owner.toLowerCase())){\r\n console.log(\"2-1\");\r\n return true;\r\n }\r\n else{\r\n console.log(\"!2-1\");\r\n }\r\n }\r\n else {\r\n console.log(\"!2\");\r\n }\r\n return false;\r\n}\r\n\r\nexport const filterMachines = () => {\r\n return (dispatch: any, getState: () => IReduxState) => {\r\n const allMachines: IMachine[] = getState().machines.allMachines;\r\n let filteredMachines: IMachine[] = allMachines;\r\n const searchText = getState().search.searchText.toLowerCase();\r\n\r\n console.log(\"In filterMachines\");\r\n console.log(\"searchText : \" + searchText);\r\n console.log(\"allMachines: \");\r\n console.log(allMachines);\r\n\r\n filteredMachines = filterMachinesAccordingToSetFilterOptions(\r\n filteredMachines,\r\n getState\r\n );\r\n\r\n console.log(\"filteredMachines1 : \");\r\n console.log(filteredMachines);\r\n\r\n let ownerRegex = RegExp(\r\n '^' + searchText.toLowerCase() + '|\\\\s' + searchText.toLowerCase(),\r\n ''\r\n );\r\n\r\n // filteredMachines = filteredMachines.filter((item: IMachine) => filterBySearchString(item, searchText, ownerRegex) === true);\r\n\r\n // console.log(\"filteredMachines1a : \");\r\n // console.log(filteredMachines);\r\n\r\n\r\n filteredMachines = filteredMachines.filter(\r\n (item: IMachine) =>\r\n (!!item.serialNumber &&\r\n item.serialNumber.toLowerCase().includes(searchText)) ||\r\n (!!item.owner && ownerRegex.test(item.owner.toLowerCase()))\r\n );\r\n\r\n console.log(\"filteredMachines2 : \");\r\n console.log(filteredMachines);\r\n console.log(filteredMachines.length);\r\n\r\n if (!filteredMachines.length) {\r\n console.log(\"NO_MACHINES_FOUND\");\r\n dispatch({ type: NO_MACHINES_FOUND });\r\n } else {\r\n console.log(\"MACHINES_FOUND\");\r\n dispatch({ type: MACHINES_FOUND });\r\n dispatch({ type: TOGGLE_SEARCH });\r\n }\r\n\r\n if (filteredMachines.length === 1) {\r\n if (\r\n !!filteredMachines[0].telemetrySnapshot &&\r\n !!filteredMachines[0].telemetrySnapshot.location\r\n ) {\r\n console.log(\"!!filteredMachines[0].telemetrySnapshot.location\");\r\n const location = {\r\n lat: filteredMachines[0].telemetrySnapshot.location.latitude,\r\n lng: filteredMachines[0].telemetrySnapshot.location.longitude,\r\n };\r\n console.log(\"UPDATE_MAP_CENTER\");\r\n dispatch({\r\n type: UPDATE_MAP_CENTER,\r\n payload: location,\r\n });\r\n }\r\n }\r\n\r\n console.log(\"UPDATE_FILTERED_MACHINES\");\r\n console.log(filteredMachines);\r\n \r\n dispatch({\r\n type: UPDATE_FILTERED_MACHINES,\r\n payload: filteredMachines,\r\n });\r\n };\r\n};\r\n\r\nexport const resetFilters = () => {\r\n return (dispatch: any) => {\r\n dispatch({\r\n type: RESET_SEARCH_FILTERS,\r\n });\r\n dispatch(filterMachines());\r\n };\r\n};\r\n\r\nexport const updateSelectedMachineTags = (tags: any) => {\r\n return (dispatch: any) => {\r\n dispatch({\r\n type: UPDATE_SEARCH_MACHINE_TAGS,\r\n payload: tags,\r\n });\r\n dispatch(filterMachines());\r\n };\r\n};\r\n","import React from 'react';\r\nimport { ListItemIcon, Typography } from '@material-ui/core';\r\nimport HelpIcon from '@material-ui/icons/Help';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { themeColors } from '../../constants';\r\nimport { IRouteProps } from '../../types';\r\n\r\nexport default function MuiMenuAbout(props: IRouteProps) {\r\n const { t } = useTranslation();\r\n return (\r\n
\r\n \r\n \r\n \r\n {t('navigation.about')}\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { ListItemIcon, Typography } from '@material-ui/core';\r\nimport ListIcon from '@material-ui/icons/List';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { themeColors } from '../../constants';\r\nimport { IRouteProps } from '../../types';\r\n\r\nexport default function MuiMenuList(props: IRouteProps) {\r\n const { t } = useTranslation();\r\n return (\r\n
\r\n \r\n \r\n \r\n {t('navigation.list')}\r\n
\r\n )\r\n}\r\n","import React from 'react';\r\nimport { ListItemIcon, Typography } from '@material-ui/core';\r\nimport LockOpenIcon from '@material-ui/icons/LockOpen';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nexport default function MuiMenuLogout() {\r\n const { t } = useTranslation();\r\n return (\r\n \r\n \r\n \r\n \r\n {t('navigation.logout')}\r\n \r\n )\r\n}\r\n","import React from 'react';\r\nimport { ListItemIcon, Typography } from '@material-ui/core';\r\nimport LockIcon from '@material-ui/icons/Lock';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nexport default function MuiMenuLogin() {\r\n const { t } = useTranslation();\r\n return (\r\n
\r\n \r\n \r\n \r\n {t('navigation.login')}\r\n
\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport {\r\n makeStyles,\r\n createStyles,\r\n Theme,\r\n InputAdornment,\r\n IconButton,\r\n} from '@material-ui/core';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { updateSearchText, searchMachines } from '../../actions/searchActions';\r\nimport { IReduxState, IMachine } from '../../types';\r\nimport { RESET_MAP_CENTER } from '../../actions/types';\r\nimport { useTranslation } from 'react-i18next';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport ClearIcon from '@material-ui/icons/Clear';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n inputRoot: {\r\n color: 'inherit',\r\n padding: theme.spacing(1, 1, 1, 7),\r\n transition: theme.transitions.create('width'),\r\n width: '100%',\r\n [theme.breakpoints.up('md')]: {\r\n width: 300,\r\n },\r\n },\r\n })\r\n);\r\n\r\ninterface IProps {\r\n mobile?: boolean;\r\n}\r\n\r\nexport default function AutoCompleteSearch(props: IProps) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const searchText = useSelector(\r\n (state: IReduxState) => state.search.searchText\r\n );\r\n const autoCompleteOptions = useSelector(\r\n (state: IReduxState) => state.machines.allMachines\r\n );\r\n const { t } = useTranslation();\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleEnter = (event: any) => {\r\n if (event.key === 'Enter') {\r\n setIsOpen(false);\r\n dispatch(searchMachines());\r\n }\r\n };\r\n const handleClear = () => {\r\n dispatch(updateSearchText(''));\r\n dispatch(searchMachines());\r\n dispatch({ type: RESET_MAP_CENTER });\r\n };\r\n\r\n let stringOptions = autoCompleteOptions\r\n .map((m: IMachine) => m.owner)\r\n .concat(autoCompleteOptions.map((m: IMachine) => m.serialNumber))\r\n .filter((i) => i !== null);\r\n let uniqueStringOptions = [...new Set(stringOptions)];\r\n return (\r\n option}\r\n style={{ width: '100%', paddingRight: 0 }}\r\n open={searchText === '' || !isOpen ? false : true}\r\n onClose={() => setIsOpen(false)}\r\n onChange={(event: React.ChangeEvent<{}>, value: string | null) => {\r\n handleEnter(event);\r\n if (value === null) {\r\n handleClear();\r\n }\r\n if (value !== null) {\r\n dispatch(updateSearchText(value));\r\n dispatch(searchMachines());\r\n }\r\n }}\r\n filterOptions={(options: string[]) => {\r\n let ownerRegex = RegExp(\r\n '^' + searchText.toLowerCase() + '|\\\\s' + searchText.toLowerCase(),\r\n 'g'\r\n );\r\n\r\n const filteredOptions = options.filter((item: string) => {\r\n return (\r\n item.toLowerCase().includes(searchText.toLowerCase()) ||\r\n ownerRegex.test(item.toLowerCase())\r\n );\r\n });\r\n return filteredOptions;\r\n }}\r\n renderInput={(params) => (\r\n ) => {\r\n dispatch(updateSearchText(event.target.value));\r\n setIsOpen(true);\r\n }}\r\n value={searchText}\r\n fullWidth\r\n placeholder={t('search.inputPlaceholder')}\r\n InputProps={{\r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {searchText && searchText.length ? (\r\n \r\n \r\n \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 { makeStyles, createStyles, Theme } from '@material-ui/core';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport AutoCompleteSearch from './AutoCompleteSearch';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n searchIcon: {\r\n width: theme.spacing(7),\r\n height: '100%',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n })\r\n);\r\n\r\nexport default function DesktopSearchTextInput() {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { FormLabel, FormGroup, FormControlLabel, Checkbox } from '@material-ui/core';\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { updateSearchIgnitionOn, updateSearchIgnitionOff } from '../../actions/searchActions';\r\nimport { makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { IReduxState } from '../../types';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n margin: `${theme.spacing(1)}px 0`\r\n },\r\n}));\r\n\r\nexport default function IgnitionCheckboxes() {\r\n const dispatch = useDispatch();\r\n const checkboxIgnitionOn = useSelector((state: IReduxState) => state.search.checkboxIgnitionOn);\r\n const checkboxIgnitionOff = useSelector((state: IReduxState) => state.search.checkboxIgnitionOff);\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n return (\r\n
\r\n {t('search.ignitionStatus')}\r\n \r\n dispatch(updateSearchIgnitionOn())}\r\n color=\"primary\"\r\n name=\"ignition-on\"\r\n />\r\n }\r\n label={t('search.checkboxOn')}\r\n />\r\n dispatch(updateSearchIgnitionOff())}\r\n color=\"primary\"\r\n name=\"igntion-off\"\r\n />\r\n }\r\n label={t('search.checkboxOff')}\r\n />\r\n \r\n
\r\n )\r\n}\r\n","import React from 'react';\r\nimport { FormControl, InputLabel, MenuItem, Select } from '@material-ui/core';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { updateSelectedMachineState } from '../../actions/searchActions';\r\nimport { makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { IReduxState, IMachineStateOption } from '../../types';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n minWidth: '100px',\r\n margin: `${theme.spacing(4)}px`,\r\n [theme.breakpoints.up('md')]: {\r\n margin: `${theme.spacing(1)}px ${theme.spacing(4)}px`,\r\n },\r\n },\r\n}));\r\n\r\nexport default function MachineStateSelect() {\r\n const dispatch = useDispatch();\r\n const selectedMachineState: string = useSelector(\r\n (state: IReduxState) => state.search.selectedMachineState.key\r\n );\r\n const machineStateOptions = useSelector(\r\n (state: IReduxState) => state.search.extendedMachineStateOptions\r\n );\r\n const classes = useStyles();\r\n const handleChange = (key: string) => {\r\n const machineStateOption = machineStateOptions.filter(\r\n (item: IMachineStateOption) => item.key === key\r\n )[0];\r\n dispatch(updateSelectedMachineState({ ...machineStateOption }));\r\n };\r\n const { t, i18n } = useTranslation();\r\n return (\r\n \r\n \r\n {t('search.machineState.select')}\r\n \r\n \r\n ) => handleChange(event.target.value)}\r\n >\r\n {machineStateOptions.map(({ id, key }, index) => {\r\n return (\r\n \r\n {i18n.exists(`machine.state.${key}`) ? t(`machine.state.${key}`) : key}\r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { Container } from '@material-ui/core';\r\nimport AutoCompleteSearch from './AutoCompleteSearch';\r\n\r\nexport default function SearchTextInput() {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { Button, makeStyles, Theme } from '@material-ui/core';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { useDispatch } from 'react-redux';\r\nimport { searchMachines } from '../../actions/searchActions';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n margin: `${theme.spacing(1)}px 0`\r\n },\r\n searchButton: {\r\n padding: \"6px 12px\"\r\n }\r\n}),\r\n);\r\n\r\nexport default function SearchButton() {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n return (\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';\r\nimport IgnitionCheckboxes from './IgnitionCheckboxes';\r\nimport MachineStateSelect from './MachineStateSelect';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n textAlign: 'center'\r\n },\r\n container: {\r\n display: 'flex',\r\n }\r\n});\r\n\r\nexport default function SearchFilters() {\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","import { useState, useEffect } from 'react';\r\n\r\nexport const useWindowSize = () => {\r\n const isClient = typeof window === 'object';\r\n\r\n function getSize() {\r\n return {\r\n width: isClient ? window.innerWidth : undefined,\r\n height: isClient ? window.innerHeight : undefined\r\n };\r\n }\r\n\r\n const [windowSize, setWindowSize] = useState(getSize);\r\n\r\n // @ts-ignore\r\n useEffect(() => {\r\n if (!isClient) {\r\n return false;\r\n }\r\n\r\n const handleResize = () => {\r\n setWindowSize(getSize());\r\n }\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n // eslint-disable-next-line\r\n }, []); // Empty array ensures that effect is only run on mount and unmount\r\n\r\n return windowSize;\r\n}","import React from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport Input from '@material-ui/core/Input';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Select from '@material-ui/core/Select';\r\nimport Chip from '@material-ui/core/Chip';\r\nimport { IReduxState, IExtendedMachineTagOption } from '../../types';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { updateSelectedMachineTags } from '../../actions/searchActions';\r\nimport { useWindowSize } from '../useWindowSize';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n formControl: {\r\n margin: theme.spacing(1),\r\n minWidth: 120,\r\n maxWidth: 320,\r\n [theme.breakpoints.up('sm')]: {\r\n maxWidth: 600,\r\n },\r\n },\r\n chips: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n chip: {\r\n margin: 2,\r\n },\r\n noLabel: {\r\n marginTop: theme.spacing(3),\r\n },\r\n })\r\n);\r\n\r\nconst ITEM_HEIGHT = 48;\r\nconst ITEM_PADDING_TOP = 8;\r\nconst MenuProps = {\r\n PaperProps: {\r\n style: {\r\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\r\n width: 250,\r\n },\r\n },\r\n};\r\n\r\nexport default function SearchTags() {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const dispatch = useDispatch();\r\n const size = useWindowSize();\r\n const isSmallScreen =\r\n size.width !== undefined && size.width < 500 ? true : false;\r\n const machineTagOptions = useSelector(\r\n (state: IReduxState) => state.search.machineTagOptions\r\n );\r\n const selectedMachineTags = useSelector(\r\n (state: IReduxState) => state.search.selectedMachineTags\r\n );\r\n\r\n const handleChange = (event: React.ChangeEvent<{ value: any }>) => {\r\n const tags = event.target.value;\r\n dispatch(updateSelectedMachineTags(tags));\r\n if (isSmallScreen) {\r\n setOpen(false);\r\n }\r\n };\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const handleOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n {t('machine.machineTags')}\r\n \r\n }\r\n renderValue={(selected: any) => (\r\n
\r\n {selected.map(\r\n (item: IExtendedMachineTagOption, index: number) => (\r\n \r\n )\r\n )}\r\n
\r\n )}\r\n MenuProps={MenuProps}\r\n >\r\n {machineTagOptions &&\r\n machineTagOptions.map((tag: any, index: number) => (\r\n \r\n {tag.key}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport SearchTextInput from './SearchTextInput';\r\nimport SearchButton from './SearchButton';\r\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\r\nimport { Grid, Collapse } from '@material-ui/core';\r\nimport SearchFilters from './SearchFilters';\r\nimport { useSelector } from 'react-redux';\r\nimport { IReduxState } from '../../types';\r\nimport SearchTags from './SearchTags';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n height: 'auto',\r\n margin: `${theme.spacing(4)}px 0 0 0`,\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'none',\r\n },\r\n },\r\n searchContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n })\r\n);\r\n\r\nexport default function MobileSearch() {\r\n const classes = useStyles();\r\n const showSearch = useSelector(\r\n (state: IReduxState) => state.search.showSearch\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","import React from 'react';\r\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { routes } from '../constants';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\nimport { IReduxState } from '../types';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n margin: `${theme.spacing(2)}px 0`,\r\n width: 250,\r\n [theme.breakpoints.up('sm')]: {\r\n width: '100%',\r\n },\r\n },\r\n activeRouteLink: {\r\n color: theme.palette.primary.light,\r\n textDecoration: 'none',\r\n '&:hover': {\r\n textDecoration: 'underline',\r\n },\r\n },\r\n nonActiveRouteLink: {\r\n color: theme.palette.primary.dark,\r\n textDecoration: 'none',\r\n '&:hover': {\r\n textDecoration: 'underline',\r\n },\r\n },\r\n })\r\n);\r\n\r\ninterface IProps {\r\n home?: string;\r\n current: string;\r\n}\r\n\r\nexport default function RubbleBreadcrumbs(props: IProps) {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\r\n const machine = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine\r\n );\r\n\r\n const { current, home } = props;\r\n\r\n let routeName: string;\r\n\r\n if (current.includes('machine')) {\r\n routeName = `${t('navigation.machine')} / ${machine.serialNumber}`;\r\n } else {\r\n routeName = current.slice(16).charAt(1).toUpperCase() + current.slice(18);\r\n }\r\n\r\n return (\r\n
\r\n \r\n {home ? (\r\n \r\n {t('navigation.portal')}\r\n \r\n ) : (\r\n
\r\n \r\n {`${t('navigation.portal')} `}\r\n \r\n / \r\n \r\n {t('navigation.map')}\r\n \r\n
\r\n )}\r\n \r\n {routeName}\r\n \r\n
\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { ListItemIcon, Typography } from '@material-ui/core';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { themeColors } from '../../constants';\r\nimport { IRouteProps } from '../../types';\r\n\r\nexport default function MuiMenuWelcome(props: IRouteProps) {\r\n const { t } = useTranslation();\r\n return (\r\n
\r\n \r\n \r\n \r\n {t('navigation.welcome')}\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { ListItemIcon, Typography } from '@material-ui/core';\r\nimport DashboardIcon from '@material-ui/icons/Dashboard';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { themeColors } from '../../constants';\r\nimport { IRouteProps } from '../../types';\r\n\r\nexport default function MuiMenuPortal(props: IRouteProps) {\r\n const { t } = useTranslation();\r\n return (\r\n
\r\n \r\n \r\n \r\n {t('navigation.portal')}\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { ListItemIcon, Typography } from '@material-ui/core';\r\nimport MapIcon from '@material-ui/icons/Map';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { themeColors } from '../../constants';\r\nimport { IRouteProps } from '../../types';\r\n\r\nexport default function MuiMenuMap(props: IRouteProps) {\r\n const { t } = useTranslation();\r\n const translationString = props.translationString ? props.translationString : 'navigation.map';\r\n return (\r\n
\r\n \r\n \r\n \r\n {t(translationString)}\r\n
\r\n );\r\n}\r\n","import {\r\n ADD_MACHINE_TAG_FAIL,\r\n ADD_MACHINE_TAG_REQUEST,\r\n ADD_MACHINE_TAG_SUCCESS,\r\n DELETE_MACHINE_NOTE_FAIL,\r\n DELETE_MACHINE_NOTE_REQUEST,\r\n DELETE_MACHINE_NOTE_SUCCESS,\r\n DELETE_MACHINE_PROJECT_CONSTRUCTION_SITE_FAIL,\r\n DELETE_MACHINE_PROJECT_CONSTRUCTION_SITE_REQUEST,\r\n DELETE_MACHINE_PROJECT_CONSTRUCTION_SITE_SUCCESS,\r\n DELETE_MACHINE_TAG_FAIL,\r\n DELETE_MACHINE_TAG_REQUEST,\r\n DELETE_MACHINE_TAG_SUCCESS,\r\n EDIT_MACHINE_NOTE_FAIL,\r\n EDIT_MACHINE_NOTE_REQUEST,\r\n EDIT_MACHINE_NOTE_SUCCESS,\r\n EDIT_MACHINE_PROJECT_CONSTRUCTION_SITE_FAIL,\r\n EDIT_MACHINE_PROJECT_CONSTRUCTION_SITE_REQUEST,\r\n EDIT_MACHINE_PROJECT_CONSTRUCTION_SITE_SUCCESS,\r\n FETCH_MACHINE_DETAILS_ADDRESS_FAIL,\r\n FETCH_MACHINE_DETAILS_ADDRESS_REQUEST,\r\n FETCH_MACHINE_DETAILS_ADDRESS_SUCCESS,\r\n FETCH_MACHINE_DETAILS_FAIL,\r\n FETCH_MACHINE_DETAILS_REQUEST,\r\n FETCH_MACHINE_DETAILS_SUCCESS,\r\n FETCH_MACHINE_TELEMETRY_FAIL,\r\n FETCH_MACHINE_TELEMETRY_REQUEST,\r\n FETCH_MACHINE_TELEMETRY_SUCCESS,\r\n LAST_TELEMETRY_TIMESTAMP,\r\n GET_AVERAGE_ENERGY_CONSUMPTION,\r\n GET_AVERAGE_ENERGY_UTILIZATION,\r\n GET_AVERAGE_ENGINE_UTILIZATION,\r\n GET_AVERAGE_FUEL_CONSUMPTION,\r\n GET_AVERAGE_FUEL_LEVELS,\r\n GET_AVERAGE_THROUGHPUTS,\r\n GET_FUEL_CONSUMED,\r\n RESET_AVERAGE_ENERGY_CONSUMPTION,\r\n RESET_AVERAGE_ENERGY_UTILIZATION,\r\n RESET_AVERAGE_ENGINE_UTILIZATION,\r\n RESET_AVERAGE_FUEL_CONSUMPTION,\r\n RESET_AVERAGE_FUEL_LEVELS,\r\n RESET_AVERAGE_THROUGHPUTS,\r\n RESET_MACHINE_DETAILS,\r\n RESET_MACHINE_TELEMETRY,\r\n SET_AVERAGE_ENERGY_CONSUMPTION,\r\n SET_AVERAGE_ENERGY_UTILIZATION,\r\n SET_AVERAGE_ENGINE_UTILIZATION,\r\n SET_AVERAGE_FUEL_CONSUMPTION,\r\n SET_AVERAGE_FUEL_LEVELS,\r\n SET_AVERAGE_THROUGHPUTS,\r\n SET_FUEL_CONSUMED,\r\n SET_TOTAL_HOURS,\r\n UPDATE_END_DATE,\r\n UPDATE_GRAPH_TICK_VALUES,\r\n UPDATE_MACHINE_STATE_FAIL,\r\n UPDATE_MACHINE_STATE_REQUEST,\r\n UPDATE_MACHINE_STATE_SUCCESS,\r\n UPDATE_MAP_CENTER,\r\n UPDATE_START_DATE,\r\n} from './types';\r\n\r\nimport {\r\n basePath,\r\n googleApiKey,\r\n googleGeoCodeUrl,\r\n machinesApi,\r\n machineTagsApi,\r\n} from '../constants';\r\nimport { IMachine, IReduxState, ISampledTelemetry } from '../types';\r\nimport { fetchMachineStateOptions, fetchMachineTags } from './machineActions';\r\nimport moment from 'moment';\r\nimport {\r\n MeasurementSystem,\r\n SampledTelemetryDto,\r\n TelemetryRangeAveragesDto,\r\n TelemetryRangeTotalsDto,\r\n} from '../rubblemaster_openapi3_typescript-fetch/models';\r\nimport { unchangedTextChangeRange } from 'typescript';\r\n// import MachineStats from '../components/MachineDetails/MachineStats';\r\n// import { useSelector } from 'react-redux';\r\n\r\nexport const fetchMachineDetails = (machineId: number, curEnddate : Date = new Date()) => {\r\n // console.log(\"#################################\");\r\n // console.log(\"In fetchMachineDetails\");\r\n // console.log(\"#################################\");\r\n return (dispatch: any, getState: () => IReduxState) => {\r\n dispatch({ type: FETCH_MACHINE_DETAILS_REQUEST });\r\n //const endDate = new Date();\r\n const endDate = curEnddate;\r\n dispatch(updateEndDate(endDate));\r\n const startDate = getState().machineDetails.search.startDate;\r\n const {\r\n resolutionInSeconds,\r\n graphTickValues,\r\n graphDateFormat,\r\n } = calculateResolutionAndGraphTicks(startDate, endDate);\r\n fetch(`${basePath}/api/machines/${machineId}`, { credentials: 'include' })\r\n .then((res: any) => res.json())\r\n .then((machine: IMachine) => {\r\n dispatch(fetchMachineTags());\r\n dispatch(fetchMachineStateOptions());\r\n dispatch({\r\n type: FETCH_MACHINE_DETAILS_SUCCESS,\r\n payload: machine,\r\n });\r\n dispatch({\r\n type: UPDATE_GRAPH_TICK_VALUES,\r\n payload: {\r\n graphTickValues,\r\n graphDateFormat,\r\n },\r\n });\r\n dispatch(\r\n fetchTelemetryMachineData(\r\n machine.id,\r\n startDate,\r\n endDate,\r\n resolutionInSeconds\r\n )\r\n );\r\n if (\r\n !!machine.telemetrySnapshot &&\r\n !!machine.telemetrySnapshot.location\r\n ) {\r\n const { latitude, longitude } = machine.telemetrySnapshot.location;\r\n dispatch({\r\n type: UPDATE_MAP_CENTER,\r\n payload: {\r\n lat: latitude,\r\n lng: longitude,\r\n },\r\n });\r\n dispatch(getSuggestedAddressForMachineDetails(latitude, longitude));\r\n }\r\n })\r\n .catch((error: any) => {\r\n console.error(error);\r\n dispatch({ type: FETCH_MACHINE_DETAILS_FAIL });\r\n window.location.replace(`${basePath}/login`);\r\n });\r\n };\r\n};\r\n\r\nexport const calculateResolutionAndGraphTicks = (\r\n startDate: Date,\r\n endDate: Date\r\n) => {\r\n const secondsDifference = moment(endDate).diff(moment(startDate), 'seconds');\r\n let resolutionInSeconds: number | null;\r\n // graphTickValues - More info on axis ticks: https://nivo.rocks/guides/axes\r\n let graphTickValues = 'every day';\r\n let graphDateFormat = 'DD.MM';\r\n switch (secondsDifference !== 0) {\r\n case secondsDifference <= 86400: // 1 day\r\n resolutionInSeconds = null; // return raw data\r\n graphTickValues = 'every hour';\r\n graphDateFormat = 'HH:mm';\r\n break;\r\n case secondsDifference > 86400 && secondsDifference <= 86400 * 7: // 7 days\r\n resolutionInSeconds = 3600; // seconds per hour\r\n break;\r\n case secondsDifference > 86400 && secondsDifference <= 86400 * 14: // 14 days\r\n resolutionInSeconds = 3600 * 2;\r\n break;\r\n case secondsDifference > 86400 && secondsDifference <= 86400 * 30: // 30 days\r\n resolutionInSeconds = 3600 * 4;\r\n graphTickValues = 'every 3 day';\r\n graphDateFormat = 'DD.MM';\r\n break;\r\n default:\r\n resolutionInSeconds = 86400;\r\n graphTickValues = 'every day';\r\n graphDateFormat = 'DD.MM';\r\n break;\r\n }\r\n // console.log(\"In calculateResolutionAndGraphTicks\");\r\n // console.log(\"graphTickValues : \"+ graphTickValues);\r\n // console.log(\"graphDateFormat : \"+ graphDateFormat);\r\n\r\n return {\r\n resolutionInSeconds,\r\n graphTickValues,\r\n graphDateFormat,\r\n };\r\n};\r\n\r\nexport const updateMachineTelemetryData = (\r\n startDate: Date,\r\n endDate: Date,\r\n machineId: number\r\n) => {\r\n\r\n // console.log(\"***************************************\");\r\n // console.log(\"In updateMachineTelemetryData!! \");\r\n // console.log(\"***************************************\");\r\n\r\n const resolutionInSeconds = calculateResolutionAndGraphTicks(\r\n startDate,\r\n endDate\r\n ).resolutionInSeconds;\r\n console.log(\"resolutionInSeconds:\");\r\n console.log(resolutionInSeconds);\r\n\r\n const { graphTickValues, graphDateFormat } = calculateResolutionAndGraphTicks(\r\n startDate,\r\n endDate\r\n );\r\n\r\n // const machine = useSelector(\r\n // (state: IReduxState) => state.machineDetails.machine\r\n // );\r\n\r\n // console.log(\"calculateResolutionAndGraphTicks:\");\r\n // console.log({ graphTickValues, graphDateFormat });\r\n\r\n return (dispatch: any) => {\r\n dispatch({\r\n type: UPDATE_GRAPH_TICK_VALUES,\r\n payload: { graphTickValues, graphDateFormat },\r\n });\r\n\r\n // console.log(\"#################################\");\r\n // console.log(\"fetchTelemetryMachineData aus updateMachineTelemetryData\");\r\n // console.log(\"#################################\");\r\n \r\n dispatch(\r\n fetchTelemetryMachineData(\r\n machineId,\r\n startDate,\r\n endDate,\r\n resolutionInSeconds\r\n )\r\n );\r\n\r\n // console.log(\"machine.telemetrySnapshot\");\r\n // console.log(machine.telemetrySnapshot);\r\n\r\n // // Update lastReceivedValue\r\n // console.log(\"Update lastReceivedValue:\");\r\n // dispatch(\r\n // MachineStats()\r\n // );\r\n\r\n };\r\n};\r\n\r\n// var fetchTelemetryMachineDataAbortController : AbortController | null;\r\n\r\nexport const fetchTelemetryMachineData = (\r\n machineId: number,\r\n from: Date,\r\n till: Date,\r\n resolutionInSeconds?: number | null | undefined\r\n) => {\r\n return async (dispatch: any, getState: () => IReduxState) => {\r\n try {\r\n const measurementSystem =\r\n getState().auth.user?.measurementSystem ?? MeasurementSystem.Metric;\r\n dispatch({ type: FETCH_MACHINE_TELEMETRY_REQUEST });\r\n \r\n // if(!!fetchTelemetryMachineDataAbortController){\r\n // console.warn(\"In fetchTelemetryMachineDataAbortController.Abort\");\r\n // fetchTelemetryMachineDataAbortController.abort();\r\n // }\r\n \r\n // fetchTelemetryMachineDataAbortController = new AbortController();\r\n \r\n // const serverAddress : string = `${basePath}/api/telemetry/${machineId}?from=${from.toISOString()}&till=${till.toISOString()}${\r\n // resolutionInSeconds !== null\r\n // ? `&resolutionInSeconds=${resolutionInSeconds}`: ''};\r\n\r\n const telemetryDataResponse = await fetch(\r\n `${basePath}/api/telemetry/${machineId}?from=${from.toISOString()}&till=${till.toISOString()}${\r\n resolutionInSeconds !== null\r\n ? `&resolutionInSeconds=${resolutionInSeconds}`\r\n : ''\r\n }&measurementSystem=${measurementSystem}`,\r\n { \r\n credentials: 'include',\r\n // signal: fetchTelemetryMachineDataAbortController.signal,\r\n }\r\n );\r\n\r\n if (telemetryDataResponse.status === 204) {\r\n throw new Error('No Telemetry Data');\r\n }\r\n\r\n const telemetryRange = await telemetryDataResponse.json();\r\n\r\n console.log(\"*******************************\")\r\n console.log(\"Nach fetchTelemetryMachineData!\")\r\n console.log(\"*******************************\")\r\n console.info(telemetryRange.info);\r\n console.log(\"*******************************\")\r\n\r\n dispatch({\r\n type: FETCH_MACHINE_TELEMETRY_SUCCESS,\r\n payload: {\r\n telemetry: telemetryRange.telemetry,\r\n // errorCodes truncated to the last 1000 occurrences\r\n errorCodes: !!telemetryRange.errorCodes\r\n ? telemetryRange.errorCodes.length > 1000\r\n ? telemetryRange.errorCodes.slice(0, 1000)\r\n : telemetryRange.errorCodes\r\n : telemetryRange.errorCodes,\r\n },\r\n });\r\n\r\n const filteredTelemetry = telemetryRange.telemetry.filter(\r\n (item: ISampledTelemetry) =>\r\n item !== null\r\n );\r\n\r\n const maxTimeStamp = filteredTelemetry[filteredTelemetry.length - 1].timestamp ?? null;\r\n console.log(\"maxTimeStamp\");\r\n console.log(maxTimeStamp);\r\n\r\n if (!!telemetryRange.telemetry) {\r\n dispatch(\r\n setAverages(\r\n telemetryRange.averages,\r\n telemetryRange.telemetry,\r\n telemetryRange.totals\r\n )\r\n );\r\n\r\n dispatch({\r\n type : LAST_TELEMETRY_TIMESTAMP,\r\n payload : maxTimeStamp,\r\n });\r\n\r\n dispatch({\r\n type: SET_FUEL_CONSUMED,\r\n payload: telemetryRange.totals?.totalEngineFuelConsumed,\r\n });\r\n\r\n dispatch({\r\n payload: {\r\n totalWeightLoad1: telemetryRange.totals?.totalWeightLoad1,\r\n totalWeightLoad2: telemetryRange.totals?.totalWeightLoad2,\r\n totalWeightLoad3: telemetryRange.totals?.totalWeightLoad3,\r\n totalWeightLoad4: telemetryRange.totals?.totalWeightLoad4,\r\n totalHoursOfEngineOperation:\r\n telemetryRange.totals?.totalHoursOfEngineOperation,\r\n totalHoursOfCrusherOperation:\r\n telemetryRange.totals?.totalHoursOfCrusherOperation,\r\n totalHoursOfExternalPowerSupply:\r\n telemetryRange.totals?.totalHoursOfExternalPowerSupply,\r\n totalHoursOfInternalPowerSupply:\r\n telemetryRange.totals?.totalHoursOfInternalPowerSupply,\r\n co2Saved: telemetryRange.savings?.co2Saved,\r\n dieselSaved: telemetryRange.savings?.dieselSaved,\r\n energySaved: telemetryRange.savings?.energySaved,\r\n co2Emission: telemetryRange.savings?.co2Emission,\r\n },\r\n type: SET_TOTAL_HOURS,\r\n });\r\n\r\n if (resolutionInSeconds === null) {\r\n // raw telemetry data\r\n dispatch(CalculateFuelConsumed(telemetryRange.telemetry, from, till));\r\n }\r\n\r\n const isHybrid = !!getState().machineDetails.machine.telemetrySnapshot\r\n ?.isHybrid;\r\n\r\n if (isHybrid) {\r\n dispatch(calculateAverageEnergyUtilization(telemetryRange.telemetry));\r\n }\r\n }\r\n } catch (error) {\r\n // TODO: add error logger\r\n dispatch({ type: FETCH_MACHINE_TELEMETRY_FAIL });\r\n // Reset Telemetry data, if previous data is available and time range changed\r\n dispatch({ type: RESET_MACHINE_TELEMETRY });\r\n }\r\n // finally{\r\n // // Cleanup-Funktion, die bei Komponentendemontage oder neuem Rendern aufgerufen wird\r\n // // console.warn(\"=> fetchTelemetryMachineDataAbortController Cleanup-Funktion XX\");\r\n // // if(!!fetchTelemetryMachineDataAbortController){\r\n // // fetchTelemetryMachineDataAbortController.abort(); // Hier wird die Anfrage abgebrochen, wenn der Benutzer die Seite verlässt\r\n // // fetchTelemetryMachineDataAbortController = null;\r\n // // }\r\n // }\r\n };\r\n};\r\n\r\n// Calculate fuel consumed if RAW telemetry data\r\nexport const CalculateFuelConsumed = (\r\n sampledTelemetry: ISampledTelemetry[],\r\n from: Date,\r\n till: Date\r\n) => {\r\n return (dispatch: any) => {\r\n // console.log(\"In CalculateFuelConsumed\")\r\n if (!!sampledTelemetry) {\r\n dispatch({ type: GET_FUEL_CONSUMED });\r\n // KBC: Erweiterung des Filters um '&& item.engineFuelRate?.value !== undefined && item.engineFuelRate?.value > 0'\r\n const engineFuelArray = sampledTelemetry\r\n .filter((item: ISampledTelemetry) => item.engineFuelRate !== null && item.engineFuelRate?.value !== undefined && item.engineFuelRate?.value > 0)\r\n .map((item: ISampledTelemetry) => item.engineFuelRate?.value as number);\r\n console.log(engineFuelArray);\r\n\r\n // wenn Daten vorhanden:\r\n if (engineFuelArray.length) {\r\n // Ermittlung der Summe\r\n const engineFuelConsumedTotal = engineFuelArray.reduce((prev, curr) => prev + curr);\r\n console.log(\"Total: \" + engineFuelConsumedTotal);\r\n\r\n // optional START\r\n // Ermittlung des Durchschnitts\r\n const engineFuelConsumedAvg =\r\n engineFuelArray.reduce((prev, curr) => prev + curr) /\r\n engineFuelArray.length;\r\n // console.log(\"Average: \" + engineFuelConsumedAvg);\r\n\r\n const timespan = moment\r\n .duration(moment(till).diff(moment(from)))\r\n .as('hours');\r\n\r\n // console.log(\"Ermittelte timespan: \" + timespan);\r\n const engineFuelConsumedOld = engineFuelConsumedAvg * timespan;\r\n // console.log(\"Calculated consumptionOld: \" + engineFuelConsumedOld);\r\n\r\n const engineFuelConsumed_ = engineFuelConsumedAvg * engineFuelArray.length / 60;\r\n // console.log(\"Calculated consumption_: \" + engineFuelConsumed_);\r\n // optional END\r\n\r\n const engineFuelConsumed = engineFuelConsumedTotal / 60;\r\n // console.log(\"Calculated consumptionNew: \" + engineFuelConsumed);\r\n\r\n\r\n dispatch({\r\n type: SET_FUEL_CONSUMED,\r\n payload: {\r\n value: engineFuelConsumed,\r\n unit: sampledTelemetry[0].engineFuelRate?.unit,\r\n },\r\n });\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport const setAverages = (\r\n averages: TelemetryRangeAveragesDto | null | undefined,\r\n telemetry: Array,\r\n totals: TelemetryRangeTotalsDto | null | undefined\r\n) => (dispatch: any) => {\r\n if (averages) {\r\n // Average Engine Utilization\r\n if (averages.averageEngineUtilization !== undefined) {\r\n dispatch({ type: GET_AVERAGE_ENGINE_UTILIZATION });\r\n const engineUtilizationArray = telemetry.filter(\r\n (t) => t.percentageLoadAtCurrentSpeed !== null\r\n );\r\n dispatch({\r\n type: SET_AVERAGE_ENGINE_UTILIZATION,\r\n payload: {\r\n value: averages.averageEngineUtilization * 100,\r\n timestamp:\r\n engineUtilizationArray[engineUtilizationArray.length - 1]\r\n .timestamp ?? null,\r\n },\r\n });\r\n } else {\r\n dispatch({ type: RESET_AVERAGE_ENGINE_UTILIZATION });\r\n }\r\n\r\n // Average Weight Loads or Average Throughput\r\n if (\r\n averages.averageWeightLoad1 !== null ||\r\n averages.averageWeightLoad2 !== null ||\r\n averages.averageWeightLoad3 !== null ||\r\n averages.averageWeightLoad4 !== null\r\n ) {\r\n dispatch({ type: GET_AVERAGE_THROUGHPUTS });\r\n const filteredTelemetry = telemetry.filter(\r\n (item: ISampledTelemetry) =>\r\n item.weightLoad1 !== null ||\r\n item.weightLoad2 !== null ||\r\n item.weightLoad3 !== null ||\r\n item.weightLoad4 !== null\r\n );\r\n dispatch({\r\n type: SET_AVERAGE_THROUGHPUTS,\r\n payload: {\r\n value: {\r\n weightLoad1: averages.averageWeightLoad1 ?? null,\r\n weightLoad2: averages.averageWeightLoad2 ?? null,\r\n weightLoad3: averages.averageWeightLoad3 ?? null,\r\n weightLoad4: averages.averageWeightLoad4 ?? null,\r\n },\r\n timestamp:\r\n filteredTelemetry[filteredTelemetry.length - 1].timestamp ?? null,\r\n },\r\n });\r\n } else {\r\n dispatch({ type: RESET_AVERAGE_THROUGHPUTS });\r\n }\r\n\r\n // Average Fuel Levels\r\n if (\r\n averages.averageAdBlueLevel !== null ||\r\n averages.averageFuelLevel !== null\r\n ) {\r\n dispatch({ type: GET_AVERAGE_FUEL_LEVELS });\r\n const fuelLevelsArr = telemetry.filter(\r\n (item: ISampledTelemetry) =>\r\n item.adBlueLevel !== null || item.fuelLevel !== null\r\n );\r\n dispatch({\r\n type: SET_AVERAGE_FUEL_LEVELS,\r\n payload: {\r\n value: {\r\n adBlueLevel: averages.averageAdBlueLevel?.value ?? null,\r\n fuelLevel: averages.averageFuelLevel?.value ?? null,\r\n },\r\n timestamp: fuelLevelsArr[fuelLevelsArr.length - 1].timestamp ?? null,\r\n },\r\n });\r\n } else {\r\n dispatch({ type: RESET_AVERAGE_FUEL_LEVELS });\r\n }\r\n }\r\n\r\n // Average Fuel Consumption\r\n if (\r\n averages?.mainDischargeFuelRate !== undefined ||\r\n averages?.sideDischargeFuelRate !== undefined ||\r\n averages?.engineFuelRate !== undefined\r\n ) {\r\n dispatch({ type: GET_AVERAGE_FUEL_CONSUMPTION });\r\n const fuelConsumptionArr = telemetry.filter(\r\n (item: ISampledTelemetry) =>\r\n item.mainDischargeConveyorFuelRate !== null ||\r\n item.sideDischargeConveyorFuelRate !== null ||\r\n item.engineFuelRate !== null\r\n );\r\n dispatch({\r\n type: SET_AVERAGE_FUEL_CONSUMPTION,\r\n payload: {\r\n engineFuelRate: averages?.engineFuelRate ?? null,\r\n mainDischargeConveyorFuelRate: averages?.mainDischargeFuelRate ?? null,\r\n sideDischargeConveyorFuelRate: averages?.sideDischargeFuelRate ?? null,\r\n engineFuelConsumed: totals?.totalEngineFuelConsumed,\r\n timestamp:\r\n fuelConsumptionArr[fuelConsumptionArr.length - 1].timestamp ?? null,\r\n },\r\n });\r\n } else {\r\n dispatch({ type: RESET_AVERAGE_FUEL_CONSUMPTION });\r\n }\r\n\r\n // Average Energy Consumption\r\n if (\r\n averages?.energyConsumptionRate !== null ||\r\n averages.mainDischargeEnergyConsumptionRate !== null\r\n ) {\r\n dispatch({ type: GET_AVERAGE_ENERGY_CONSUMPTION });\r\n const energyConsumptionArr = telemetry.filter(\r\n (item) =>\r\n item.energyConsumeRate !== null ||\r\n item.mainDischargeConveyorEnergyRate !== null ||\r\n item.sideDischargeConveyorEnergyRate !== null\r\n );\r\n dispatch({\r\n type: SET_AVERAGE_ENERGY_CONSUMPTION,\r\n payload: {\r\n energyConsumeRate: averages?.energyConsumptionRate ?? null,\r\n mainDischargeConveyorEnergyRate:\r\n averages?.mainDischargeEnergyConsumptionRate ?? null,\r\n sideDischargeConveyorEnergyRate:\r\n averages?.sideDischargeEnergyConsumptionRate ?? null,\r\n totalEnergyConsumed: totals?.totalEnergyConsumed ?? null,\r\n timestamp: energyConsumptionArr.length\r\n ? energyConsumptionArr[energyConsumptionArr.length - 1].timestamp\r\n : null,\r\n },\r\n });\r\n } else {\r\n dispatch({ type: RESET_AVERAGE_ENERGY_CONSUMPTION });\r\n }\r\n};\r\n\r\nexport const calculateAverageEnergyUtilization = (\r\n sampledTelemetry?: ISampledTelemetry[]\r\n) => {\r\n return (dispatch: any) => {\r\n dispatch({ type: GET_AVERAGE_ENERGY_UTILIZATION });\r\n if (!!sampledTelemetry && sampledTelemetry.length) {\r\n const energyUtilizationArray = sampledTelemetry.filter(\r\n (item: ISampledTelemetry) => !!item.crusherDriveCurrentLoad\r\n );\r\n if (energyUtilizationArray.length) {\r\n const sumEngineUtilization = energyUtilizationArray\r\n .map(\r\n (item: ISampledTelemetry) => item.crusherDriveCurrentLoad as number\r\n )\r\n .reduce((prev, curr) => prev + curr, 0);\r\n const averageEnergyUtilization =\r\n sumEngineUtilization / energyUtilizationArray.length;\r\n\r\n dispatch({\r\n type: SET_AVERAGE_ENERGY_UTILIZATION,\r\n payload: {\r\n value: averageEnergyUtilization,\r\n timestamp:\r\n energyUtilizationArray[energyUtilizationArray.length - 1]\r\n .timestamp,\r\n },\r\n });\r\n }\r\n } else {\r\n dispatch({ type: RESET_AVERAGE_ENERGY_UTILIZATION });\r\n }\r\n };\r\n};\r\n\r\nexport const updateStartDate = (startDate: Date) => {\r\n return (dispatch: any) => {\r\n dispatch({\r\n type: UPDATE_START_DATE,\r\n payload: startDate,\r\n });\r\n };\r\n};\r\n\r\nexport const updateEndDate = (endDate: Date) => {\r\n return (dispatch: any) => {\r\n dispatch({\r\n type: UPDATE_END_DATE,\r\n payload: endDate,\r\n });\r\n };\r\n};\r\n\r\nexport const updateMachineState = (machineId: number, machineState: any) => {\r\n return (dispatch: any) => {\r\n dispatch({ type: UPDATE_MACHINE_STATE_REQUEST });\r\n machinesApi\r\n .apiMachinesMachineIdStatePutRaw({ machineId, stateId: machineState.id })\r\n .then(() => {\r\n dispatch({\r\n type: UPDATE_MACHINE_STATE_SUCCESS,\r\n payload: machineState,\r\n });\r\n })\r\n .catch((error: any) => {\r\n console.error(error);\r\n dispatch({ type: UPDATE_MACHINE_STATE_FAIL });\r\n });\r\n };\r\n};\r\n\r\nexport const addMachineTag = (machineId: number, machineTag: any) => {\r\n console.log(\"In addMachineTag\");\r\n console.log(machineTag);\r\n return (dispatch: any) => {\r\n dispatch({ type: ADD_MACHINE_TAG_REQUEST });\r\n machineTagsApi\r\n .apiMachineTagsPost({ machineId, tagId: machineTag.id })\r\n .then(() => {\r\n dispatch({\r\n type: ADD_MACHINE_TAG_SUCCESS,\r\n payload: machineTag,\r\n });\r\n })\r\n .catch((error: any) => {\r\n console.error(error);\r\n dispatch({ type: ADD_MACHINE_TAG_FAIL });\r\n });\r\n };\r\n};\r\n\r\nexport const deleteMachineTag = (machineId: number, machineTag: any) => {\r\n return (dispatch: any) => {\r\n dispatch({ type: DELETE_MACHINE_TAG_REQUEST });\r\n machineTagsApi\r\n .apiMachineTagsDelete({ machineId, tagId: machineTag.id })\r\n .then(() => {\r\n dispatch({\r\n type: DELETE_MACHINE_TAG_SUCCESS,\r\n payload: machineTag,\r\n });\r\n })\r\n .catch((error: any) => {\r\n console.error(error);\r\n dispatch({ type: DELETE_MACHINE_TAG_FAIL });\r\n });\r\n };\r\n};\r\n\r\nexport const editMachineNote = (machineId: number, notes: string) => {\r\n return (dispatch: any) => {\r\n dispatch({ type: EDIT_MACHINE_NOTE_REQUEST });\r\n machinesApi\r\n .apiMachinesMachineIdNotesPut({\r\n machineId,\r\n notes,\r\n })\r\n .then(() => {\r\n dispatch({\r\n type: EDIT_MACHINE_NOTE_SUCCESS,\r\n payload: notes,\r\n });\r\n })\r\n .catch((error: any) => {\r\n console.error(error);\r\n dispatch({ type: EDIT_MACHINE_NOTE_FAIL });\r\n });\r\n };\r\n};\r\n\r\nexport const deleteMachineNote = (machineId: number) => {\r\n return (dispatch: any) => {\r\n dispatch({ type: DELETE_MACHINE_NOTE_REQUEST });\r\n machinesApi\r\n .apiMachinesMachineIdNotesPut({\r\n machineId,\r\n notes: '',\r\n })\r\n .then(() => {\r\n dispatch({ type: DELETE_MACHINE_NOTE_SUCCESS });\r\n })\r\n .catch((error: any) => {\r\n console.error(error);\r\n dispatch({ type: DELETE_MACHINE_NOTE_FAIL });\r\n });\r\n };\r\n};\r\n\r\nexport const editMachineProjectConstructionSite = (\r\n machineId: number,\r\n projectConstructionSite: string\r\n) => {\r\n return (dispatch: any) => {\r\n dispatch({ type: EDIT_MACHINE_PROJECT_CONSTRUCTION_SITE_REQUEST });\r\n machinesApi\r\n .apiMachinesMachineIdProjectConstructionSitePut({\r\n machineId,\r\n projectConstructionSite,\r\n })\r\n .then(() => {\r\n dispatch({\r\n type: EDIT_MACHINE_PROJECT_CONSTRUCTION_SITE_SUCCESS,\r\n payload: projectConstructionSite,\r\n });\r\n })\r\n .catch((error: any) => {\r\n console.error(error);\r\n dispatch({ type: EDIT_MACHINE_PROJECT_CONSTRUCTION_SITE_FAIL });\r\n });\r\n };\r\n};\r\n\r\nexport const deleteMachineProjectConstructionSite = (machineId: number) => {\r\n return (dispatch: any) => {\r\n dispatch({ type: DELETE_MACHINE_PROJECT_CONSTRUCTION_SITE_REQUEST });\r\n machinesApi\r\n .apiMachinesMachineIdProjectConstructionSitePut({\r\n machineId,\r\n projectConstructionSite: '',\r\n })\r\n .then(() => {\r\n dispatch({ type: DELETE_MACHINE_PROJECT_CONSTRUCTION_SITE_SUCCESS });\r\n })\r\n .catch((error: any) => {\r\n console.error(error);\r\n dispatch({ type: DELETE_MACHINE_PROJECT_CONSTRUCTION_SITE_FAIL });\r\n });\r\n };\r\n};\r\n\r\nexport const getSuggestedAddressForMachineDetails = (\r\n latitude: number,\r\n longitude: number\r\n) => {\r\n return (dispatch: any) => {\r\n dispatch({ type: FETCH_MACHINE_DETAILS_ADDRESS_REQUEST });\r\n fetch(\r\n `${googleGeoCodeUrl}${latitude},${longitude}&key=${googleApiKey}&loading=async`\r\n ).then((res: any) => {\r\n res.json().then((body: any) => {\r\n if (body.results[0]) {\r\n dispatch({\r\n type: FETCH_MACHINE_DETAILS_ADDRESS_SUCCESS,\r\n payload: body.results[0].formatted_address,\r\n });\r\n } else {\r\n dispatch({ type: FETCH_MACHINE_DETAILS_ADDRESS_FAIL });\r\n }\r\n });\r\n });\r\n };\r\n};\r\n\r\nexport const resetMachineDetails = () => {\r\n return (dispatch: any) => {\r\n dispatch({ type: RESET_MACHINE_DETAILS });\r\n };\r\n};\r\n\r\n","import {\r\n FETCH_MACHINE_BY_ID_REQUEST,\r\n FETCH_MACHINE_BY_ID_SUCCESS,\r\n FETCH_MACHINE_BY_ID_FAIL,\r\n FETCH_ALL_MACHINES_REQUEST,\r\n FETCH_ALL_MACHINES_SUCCESS,\r\n FETCH_ALL_MACHINES_FAIL,\r\n FETCH_MACHINE_STATE_OPTIONS_REQUEST,\r\n FETCH_MACHINE_STATE_OPTIONS_SUCCESS,\r\n FETCH_MACHINE_STATE_OPTIONS_FAIL,\r\n GET_USER_POSITION_REQUEST,\r\n GET_USER_POSITION_SUCCESS,\r\n GET_USER_POSITION_FAIL,\r\n FETCH_MACHINE_ADDRESS_REQUEST,\r\n FETCH_MACHINE_ADDRESS_SUCCESS,\r\n FETCH_MACHINE_ADDRESS_FAIL,\r\n FETCH_MACHINE_TAG_OPTIONS_REQUEST,\r\n FETCH_MACHINE_TAG_OPTIONS_SUCCESS,\r\n FETCH_MACHINE_TAG_OPTIONS_FAIL,\r\n} from './types';\r\nimport {\r\n machinesApi,\r\n fetchStatusApi,\r\n googleGeoCodeUrl,\r\n googleApiKey,\r\n fetchTagsApi,\r\n chartColors,\r\n} from '../constants';\r\nimport { IReduxState, IMachine } from '../types';\r\nimport { resetMachineDetails } from './machineDetailsActions';\r\nimport { TagDto } from '../rubblemaster_openapi3_typescript-fetch/models';\r\n\r\nexport const getAllMachines = () => {\r\n return (dispatch: any, getState: () => IReduxState) => {\r\n const machineState = getState().machines;\r\n dispatch(resetMachineDetails());\r\n if (\r\n !machineState.hasFetchedAllMachines &&\r\n !machineState.isFetchingAllMachines\r\n ) {\r\n dispatch(fetchAllMachines());\r\n }\r\n };\r\n};\r\n\r\nexport const getMachineById = (id:number) => {\r\n return (dispatch: any, getState: () => IReduxState) => {\r\n const machineState = getState().machines;\r\n dispatch(resetMachineDetails());\r\n if (\r\n !machineState.hasFetchedAllMachines &&\r\n !machineState.isFetchingAllMachines\r\n ) {\r\n dispatch(fetchAllMachines());\r\n }\r\n };\r\n};\r\n\r\n// *******************************************************************\r\n// laden einer einzelnen Maschine inkl. abhängiger Felder\r\n// *******************************************************************\r\nexport const loadMachineById = (id: number) => {\r\n return (dispatch: any) => {\r\n dispatch({ type: FETCH_MACHINE_BY_ID_REQUEST });\r\n dispatch(fetchMachineStateOptions());\r\n dispatch(fetchMachineTags());\r\n\r\n machinesApi\r\n .apiMachinesIdGet({id: id})\r\n .then((response: IMachine) => {\r\n const machine = {\r\n response,\r\n suggestedAddress: null,\r\n \r\n };\r\n return dispatch({\r\n type: FETCH_MACHINE_BY_ID_SUCCESS,\r\n payload: machine,\r\n });\r\n })\r\n .catch((err: any) => {\r\n console.error(err);\r\n return dispatch({ type: FETCH_MACHINE_BY_ID_FAIL });\r\n });\r\n };\r\n};\r\n\r\n// *******************************************************************\r\n// laden der Liste der Maschinen inkl. abhängiger Felder\r\n// *******************************************************************\r\nexport const fetchAllMachines = () => {\r\n return (dispatch: any) => {\r\n dispatch({ type: FETCH_ALL_MACHINES_REQUEST });\r\n dispatch(fetchMachineStateOptions());\r\n dispatch(fetchMachineTags());\r\n\r\n machinesApi\r\n .apiMachinesGet()\r\n .then((response: IMachine[]) => {\r\n const machines = response.map((item: IMachine) => {\r\n return {\r\n ...item,\r\n suggestedAddress: null,\r\n };\r\n });\r\n return dispatch({\r\n type: FETCH_ALL_MACHINES_SUCCESS,\r\n payload: machines,\r\n });\r\n })\r\n .catch((err: any) => {\r\n console.error(err);\r\n return dispatch({ type: FETCH_ALL_MACHINES_FAIL });\r\n });\r\n };\r\n};\r\n\r\nexport const fetchMachineStateOptions = () => {\r\n return (dispatch: any) => {\r\n dispatch({ type: FETCH_MACHINE_STATE_OPTIONS_REQUEST });\r\n fetchStatusApi\r\n .apiStatesGet()\r\n .then((statustypes: any) => {\r\n return dispatch({\r\n type: FETCH_MACHINE_STATE_OPTIONS_SUCCESS,\r\n payload: statustypes,\r\n });\r\n })\r\n .catch((err: any) => {\r\n console.error(err);\r\n return dispatch({ type: FETCH_MACHINE_STATE_OPTIONS_FAIL });\r\n });\r\n };\r\n};\r\n\r\nexport const getUserPositionRequest = () => {\r\n return { type: GET_USER_POSITION_REQUEST };\r\n};\r\n\r\nexport const getUserPostion = (confirmed: boolean, payload: any) => {\r\n return (dispatch: any) => {\r\n if (confirmed) {\r\n dispatch({\r\n type: GET_USER_POSITION_SUCCESS,\r\n payload: payload,\r\n });\r\n } else {\r\n dispatch({\r\n type: GET_USER_POSITION_FAIL,\r\n payload: payload,\r\n });\r\n }\r\n };\r\n};\r\n\r\nexport const fetchMachineTags = () => {\r\n return (dispatch: any) => {\r\n dispatch({ type: FETCH_MACHINE_TAG_OPTIONS_REQUEST });\r\n fetchTagsApi\r\n .apiTagsGet()\r\n .then((tags: TagDto[]) => {\r\n const chartColorsKeys = Object.keys(chartColors);\r\n const tagsWithColor = tags.map((tag: TagDto) => {\r\n const randomNum: number = Math.floor(\r\n Math.random() * chartColorsKeys.length\r\n );\r\n // @ts-ignore\r\n const randomColor: string = chartColors[chartColorsKeys[randomNum]];\r\n return {\r\n id: tag.id,\r\n key: tag.key,\r\n color: randomColor,\r\n };\r\n });\r\n return dispatch({\r\n type: FETCH_MACHINE_TAG_OPTIONS_SUCCESS,\r\n payload: tagsWithColor,\r\n });\r\n })\r\n .catch((err: any) => {\r\n console.error(err);\r\n return dispatch({ type: FETCH_MACHINE_TAG_OPTIONS_FAIL });\r\n });\r\n };\r\n};\r\n\r\nexport const getSuggestedAddressForMachine = (\r\n id: number,\r\n latitude: number,\r\n longitude: number\r\n) => {\r\n return (dispatch: any) => {\r\n dispatch({ type: FETCH_MACHINE_ADDRESS_REQUEST });\r\n // console.log(\"**********************************\")\r\n // console.log(\"In getSuggestedAddressForMachine \" + latitude + \"/\" + longitude);\r\n // console.log(\"**********************************\")\r\n\r\n\r\n fetch(`${googleGeoCodeUrl}${latitude},${longitude}&key=${googleApiKey}&loading=async`)\r\n .then((res: any) => {\r\n res\r\n .json()\r\n .then((body: any) => {\r\n // console.log(\"Body:\");\r\n // console.log(body);\r\n\r\n if (body.status === 'OK') {\r\n console.log(\"body.status === 'OK' \");\r\n // console.log(\"body.results: \");\r\n // console.log(body.results);\r\n // console.log(\"body: \");\r\n // console.log(body);\r\n\r\n let result = undefined;\r\n // zuerst: street_address holen\r\n const street_address = body.results.find((r: any) =>\r\n r.types.includes('street_address'));\r\n\r\n // console.log(\"street_address: \");\r\n // console.log(street_address);\r\n\r\n if(!!street_address){\r\n result = street_address.formatted_address;\r\n // console.log(\"result:\");\r\n // console.log(result);\r\n }\r\n // alternativ: plus_code holen\r\n if(!result){\r\n const plus_code = body.results.find((r: any) =>\r\n r.types.includes('plus_code'));\r\n // console.log(\"plus_code: \");\r\n // console.log(plus_code);\r\n\r\n if(!!plus_code){\r\n result = plus_code.formatted_address;\r\n }\r\n }\r\n // sonst: 1. Wert holen\r\n if(!result){\r\n result = body.results[0].formatted_address;\r\n }\r\n\r\n dispatch({\r\n type: FETCH_MACHINE_ADDRESS_SUCCESS,\r\n payload: {\r\n machineId: id,\r\n suggestedAddress: result ?? undefined,\r\n },\r\n });\r\n } else if (body.status === 'ZERO_RESULTS') {\r\n console.log(\"(body.status === 'ZERO_RESULTS')\");\r\n dispatch({\r\n type: FETCH_MACHINE_ADDRESS_SUCCESS,\r\n payload: {\r\n machineId: id,\r\n suggestedAddress: undefined,\r\n },\r\n });\r\n } else {\r\n //console.log(\"In else : \" + body.status);\r\n \r\n // Other status codes will not result in an address, see details:\r\n // https://developers.google.com/maps/documentation/geocoding/overview#StatusCodes\r\n console.log(\"(body.status === \" + body.status);\r\n\r\n dispatch({\r\n type: FETCH_MACHINE_ADDRESS_FAIL,\r\n payload: {\r\n machineId: id,\r\n },\r\n });\r\n }\r\n });\r\n })\r\n .catch((err) => {\r\n console.error('error fetching address', err);\r\n dispatch({\r\n type: FETCH_MACHINE_ADDRESS_FAIL,\r\n payload: {\r\n machineId: id,\r\n },\r\n });\r\n });\r\n };\r\n};\r\n","import React from 'react';\r\nimport {\r\n fade,\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n} from '@material-ui/core/styles';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Menu from '@material-ui/core/Menu';\r\nimport MenuIcon from '@material-ui/icons/Menu';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport RefreshIcon from '@material-ui/icons/Refresh';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport {\r\n toggleSearch,\r\n searchMachines,\r\n resetFilters,\r\n} from '../../actions/searchActions';\r\nimport { openLinkWithRewrite, routes } from '../../constants';\r\nimport MuiMenuAbout from './MuiMenuAbout';\r\nimport MuiMenuList from './MuiMenuList';\r\nimport MuiMenuLogout from './MuiMenuLogout';\r\nimport MuiMenuLogin from './MuiMenuLogin';\r\nimport { useHistory } from 'react-router-dom';\r\nimport {\r\n redirectAzureB2CLogin,\r\n redirectAzureB2CLogout,\r\n} from '../../actions/authActions';\r\nimport {\r\n Button,\r\n FormControlLabel,\r\n Switch,\r\n Grid,\r\n Typography,\r\n ListItemIcon,\r\n} from '@material-ui/core';\r\nimport DesktopSearchTextInput from '../Search/DesktopSearchTextInput';\r\nimport IgnitionCheckboxes from '../Search/IgnitionCheckboxes';\r\nimport MachineStateSelect from '../Search/MachineStateSelect';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { IReduxState } from '../../types';\r\nimport MobileSearch from '../Search/MobileSearch';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { themeColors } from '../../constants';\r\nimport RubbleBreadcrumbs from '../RubbleBreadcrumbs';\r\nimport SearchTags from '../Search/SearchTags';\r\nimport MuiMenuWelcome from './MuiMenuWelcome';\r\nimport MuiMenuPortal from './MuiMenuPortal';\r\nimport MuiMenuMap from './MuiMenuMap';\r\nimport SettingsIcon from '@material-ui/icons/Settings';\r\nimport { fetchAllMachines } from '../../actions/machineActions';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n grow: {\r\n flexGrow: 1,\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(2),\r\n },\r\n title: {\r\n display: 'none',\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'block',\r\n },\r\n },\r\n search: {\r\n position: 'relative',\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: fade(theme.palette.common.white, 0.15),\r\n '&:hover': {\r\n backgroundColor: fade(theme.palette.common.white, 0.25),\r\n },\r\n marginRight: theme.spacing(2),\r\n marginLeft: 0,\r\n width: '100%',\r\n [theme.breakpoints.up('sm')]: {\r\n marginLeft: theme.spacing(3),\r\n width: 'auto',\r\n },\r\n },\r\n searchIcon: {\r\n width: theme.spacing(7),\r\n height: '100%',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n filter: {\r\n paddingLeft: theme.spacing(2),\r\n },\r\n searchDesktop: {\r\n display: 'none',\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n },\r\n searchMobile: {\r\n display: 'flex',\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'none',\r\n },\r\n },\r\n sectionDesktop: {\r\n display: 'none',\r\n [theme.breakpoints.up('md')]: {\r\n display: 'flex',\r\n },\r\n },\r\n sectionMobile: {\r\n display: 'flex',\r\n [theme.breakpoints.up('md')]: {\r\n display: 'none',\r\n },\r\n },\r\n error: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n marginLeft: theme.spacing(2),\r\n },\r\n errorText: {\r\n marginLeft: theme.spacing(1),\r\n },\r\n filterWrapper: {\r\n position: 'absolute',\r\n background: themeColors.darkGray,\r\n zIndex: 1010,\r\n width: '100%',\r\n paddingBottom: `${theme.spacing(2)}px`,\r\n '&$searchOverlap': {\r\n position: 'relative',\r\n },\r\n },\r\n searchOverlap: {},\r\n searchButton: {\r\n padding: '4px 12px',\r\n height: '40px',\r\n },\r\n secondarySearchButton: {\r\n marginLeft: theme.spacing(1),\r\n },\r\n })\r\n);\r\n\r\nexport default function RubbleBar() {\r\n\r\n // console.log(\"**************************\");\r\n // console.log(\"In RubbleBar\");\r\n // console.log(\"**************************\");\r\n\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const dispatch = useDispatch();\r\n const isAuthenticated = useSelector(\r\n (state: IReduxState) => state.auth.isAuthenticated\r\n );\r\n const history = useHistory();\r\n const isMenuOpen = Boolean(anchorEl);\r\n const showSearch = useSelector(\r\n (state: IReduxState) => state.search.showSearch\r\n );\r\n const showSearchError = useSelector(\r\n (state: IReduxState) => state.search.showSearchError\r\n );\r\n\r\n const [hideFilter, setChecked] = React.useState(false);\r\n const { t } = useTranslation();\r\n\r\n const toggleFilter = () => {\r\n setChecked((prev) => !prev);\r\n if (hideFilter) {\r\n dispatch(resetFilters());\r\n }\r\n };\r\n\r\n const handleMenuClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleMenuOpen = (event: React.MouseEvent) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleRouteChange = (route: string) => {\r\n history.push(route);\r\n handleMenuClose();\r\n };\r\n\r\n const handleUserLogout = () => {\r\n dispatch(redirectAzureB2CLogout(routes.portal.pathName));\r\n handleMenuClose();\r\n };\r\n\r\n const handleUserLogin = () => {\r\n dispatch(redirectAzureB2CLogin());\r\n handleMenuClose();\r\n };\r\n\r\n const menuId = 'primary-menu';\r\n const location = history.location.pathname;\r\n const menuServices = [\r\n handleRouteChange(routes.portal.pathName)}\r\n >\r\n \r\n ,\r\n handleRouteChange(routes.welcome.pathName)}\r\n >\r\n \r\n ,\r\n handleRouteChange(routes.map.pathName)}\r\n >\r\n \r\n ,\r\n // openLinkWithRewrite(routes.documentation.pathName)}\r\n // >\r\n // \r\n // \r\n // \r\n // {t('navigation.docuportal')}\r\n // ,\r\n // openLinkWithRewrite(routes.cockpit.pathName)}\r\n // >\r\n // \r\n // \r\n // \r\n // {t('navigation.cockpit')}\r\n // ,\r\n handleUserLogout()}>\r\n \r\n ,\r\n ];\r\n const renderMenu = (\r\n \r\n {isAuthenticated\r\n ? location === routes.portal.pathName \r\n || location === routes.welcome.pathName\r\n ? menuServices\r\n : [\r\n handleRouteChange(routes.portal.pathName)}\r\n >\r\n \r\n ,\r\n handleRouteChange(routes.map.pathName)}\r\n >\r\n \r\n ,\r\n handleRouteChange(routes.list.pathName)}\r\n >\r\n \r\n ,\r\n handleRouteChange(routes.about.pathName)}\r\n >\r\n \r\n ,\r\n handleUserLogout()}\r\n >\r\n \r\n ,\r\n ]\r\n : [\r\n handleRouteChange(routes.portal.pathName)}\r\n >\r\n \r\n ,\r\n handleRouteChange(routes.welcome.pathName)}\r\n >\r\n \r\n ,\r\n handleUserLogin()}>\r\n \r\n ,\r\n ]}\r\n \r\n );\r\n\r\n const searchError = (\r\n
\r\n \r\n \r\n {t('search.nothingFound')}\r\n \r\n
\r\n );\r\n\r\n // Check showSearch prop on route\r\n let showSearchBar: boolean = false;\r\n let searchOverlap: boolean = true;\r\n\r\n for (const prop in routes) {\r\n if (routes[prop].pathName === history.location.pathname) {\r\n searchOverlap = routes[prop].searchOverlap;\r\n showSearchBar = routes[prop].showSearch;\r\n }\r\n }\r\n\r\n const appBarOnlyBottomShadowStyle = {\r\n boxShadow:\r\n 'rgba(0, 0, 0, 0.2) 0px 2px 4px -4px, rgba(0, 0, 0, 0.14) 0px 4px 5px -5px, rgba(0, 0, 0, 0.12) 0px 1px 10px -10px',\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {showSearchBar ? (\r\n \r\n
\r\n dispatch(toggleSearch())}\r\n >\r\n {!showSearch ? : }\r\n \r\n dispatch(fetchAllMachines())}\r\n >\r\n \r\n \r\n {showSearchError && searchError}\r\n
\r\n
\r\n
\r\n \r\n
\r\n {\r\n dispatch(searchMachines());\r\n }}\r\n >\r\n {t('search.search')}\r\n \r\n \r\n }\r\n label={t('search.filters')}\r\n />\r\n {\r\n dispatch(fetchAllMachines());\r\n }}\r\n >\r\n \r\n \r\n {showSearchError && searchError}\r\n
\r\n
\r\n ) : null}\r\n {history.location.pathname.includes('machine') && (\r\n \r\n )}\r\n
\r\n \r\n {renderMenu}\r\n \r\n {hideFilter && showSearchBar && (\r\n \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 TopNavigation from './TopNavigation';\r\nimport Logo from './Logo';\r\nimport RubbleBar from './RubbleBar';\r\nimport { themeColors } from '../../constants';\r\n\r\nexport default function Header() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { IconButton, makeStyles, Theme, Typography } from '@material-ui/core';\r\nimport ShareIcon from '@material-ui/icons/Share';\r\nimport SmartphoneIcon from '@material-ui/icons/Smartphone';\r\nimport EmailIcon from '@material-ui/icons/Email';\r\nimport { IMachine } from '../types';\r\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useWindowSize } from './useWindowSize';\r\n\r\ninterface IProps {\r\n dense?: boolean;\r\n machine: IMachine;\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n width: 'auto',\r\n },\r\n iconWrapper: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n margin: 0,\r\n },\r\n noPaddingBottom: {\r\n paddingBottom: 0,\r\n },\r\n}));\r\n\r\nexport default function ShareMachine(props: IProps) {\r\n const { machine, dense } = props;\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const windowSize = useWindowSize();\r\n const isDesktop =\r\n !!windowSize && !!windowSize.width && windowSize.width > 1024\r\n ? true\r\n : false;\r\n\r\n const location = {\r\n latitude: machine.telemetrySnapshot?.location?.latitude,\r\n longitude: machine.telemetrySnapshot?.location?.longitude,\r\n };\r\n const shareUrl = `https://www.google.com/maps?q=${location.latitude},${location.longitude}`;\r\n\r\n const handleClick = () => {\r\n // @ts-ignore --> No type export for share\r\n if (window.navigator.share) {\r\n window.navigator\r\n // @ts-ignore --> No type export for share\r\n .share({\r\n title: `Machine ${machine.serialNumber}`,\r\n text: `Location for Machine ${machine.serialNumber}`,\r\n url: shareUrl,\r\n });\r\n }\r\n };\r\n\r\n const isShareApiSupported = () => {\r\n // @ts-ignore --> No type export for share\r\n if (window.navigator.share) return true;\r\n return false;\r\n };\r\n\r\n const shareViaSms = (event: React.MouseEvent) => {\r\n event.stopPropagation();\r\n window.open(\r\n `sms:;?&body=${t('general.machine')}%20%20${machine.serialNumber} ${t(\r\n 'general.location'\r\n )} ${shareUrl}`\r\n );\r\n };\r\n\r\n const shareViaEmail = (event: React.MouseEvent) => {\r\n event.stopPropagation();\r\n const body = `${t('general.location')}: ${shareUrl}`;\r\n window.open(\r\n `mailto:?subject=${t('general.machine')}%20${t('general.details')}%20${\r\n machine.serialNumber\r\n }&body=${body}`\r\n );\r\n };\r\n\r\n const copyLocation = () => {\r\n window.navigator.clipboard.writeText(\r\n `${location.latitude},${location.longitude}`\r\n );\r\n };\r\n if (isShareApiSupported()) {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {t('general.share')}\r\n \r\n
\r\n );\r\n } else {\r\n return (\r\n
\r\n {!isDesktop && (\r\n
\r\n \r\n \r\n \r\n \r\n {t('general.share')}\r\n \r\n
\r\n )}\r\n
\r\n \r\n \r\n \r\n \r\n {t('general.share')}\r\n \r\n
\r\n {window.navigator.clipboard && (\r\n
\r\n \r\n \r\n \r\n \r\n {t('general.copy')}\r\n \r\n
\r\n )}\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport { Card, CardContent, Typography, CardActions, Button, List, ListItem, IconButton, Grid, ListItemText, Theme } from '@material-ui/core';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport TuneIcon from '@material-ui/icons/Tune';\r\nimport { makeStyles } from '@material-ui/styles';\r\nimport history from '../history'\r\nimport ShareMachine from '../ShareMachine';\r\nimport { IMachineDetailsProps } from '../../types';\r\nimport { InfoWindow } from 'react-google-maps';\r\nimport { useTranslation } from 'react-i18next';\r\nimport './disableDefaultMap.css';\r\nimport { useWindowSize } from '../useWindowSize';\r\ninterface IProps {\r\n onClose: () => void\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n position: 'relative',\r\n zIndex: 1\r\n },\r\n card: {\r\n boxShadow: 'none',\r\n width: '250px',\r\n [theme.breakpoints.up('sm')]: {\r\n width: '300px'\r\n },\r\n },\r\n listItem: {\r\n paddingBottom: 0,\r\n },\r\n textItem: {\r\n marginBottom: 0,\r\n },\r\n actionsArena: {\r\n paddingTop: 0,\r\n paddingBottom: 0\r\n },\r\n close: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n position: 'absolute',\r\n right: 0,\r\n zIndex: 1000\r\n },\r\n noPadding: {\r\n padding: 0,\r\n }\r\n})\r\n);\r\n\r\nexport default function MachineCard(props: IProps & IMachineDetailsProps) {\r\n\r\n const { machine } = props;\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const windowSize = useWindowSize();\r\n\r\n const handleClose = () => {\r\n props.onClose();\r\n }\r\n\r\n const handleClick = (event: React.MouseEvent) => {\r\n event.stopPropagation();\r\n history.push(`/fleetmanagement/machine/${props.machine.id}`);\r\n }\r\n\r\n const isSmall = windowSize.height !== undefined && windowSize.height < 600;\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\n \r\n \r\n {machine.owner}\r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \r\n {machine.serialNumber}\r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \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 { Marker } from 'react-google-maps';\r\nimport pinGreen from '../../assets/icons/marker-green.png';\r\nimport pinRed from '../../assets/icons/marker-red.png';\r\nimport MachineCard from './MachineCard';\r\nimport { IMachineDetailsProps } from '../../types';\r\n\r\ninterface IProps {\r\n filteredMachines?: any;\r\n key: string;\r\n disableClick?: boolean;\r\n hideOverlay?: boolean;\r\n}\r\n\r\ntype IMergedProps = IProps & IMachineDetailsProps;\r\n\r\nexport default class RubbleMarker extends Component {\r\n state = {\r\n selectedMachine: null,\r\n };\r\n\r\n // Open Machine Card if Search Result is exact = only 1 machine\r\n componentDidUpdate = (prevProps: IMergedProps) => {\r\n if (this.props.filteredMachines !== prevProps.filteredMachines) {\r\n if (\r\n !!this.props.filteredMachines &&\r\n this.props.filteredMachines.length === 1 &&\r\n this.state.selectedMachine !== this.props.filteredMachines[0]\r\n ) {\r\n this.setState({\r\n selectedMachine: { ...this.props.filteredMachines[0] },\r\n });\r\n }\r\n }\r\n };\r\n\r\n // Reset State on unmount\r\n componentWillUnmount = () => {\r\n this.setState({ selectedMachine: null });\r\n };\r\n\r\n render() {\r\n const { machine, hideOverlay, disableClick } = this.props;\r\n const { selectedMachine } = this.state;\r\n const position = {\r\n lat: machine.telemetrySnapshot?.location?.latitude,\r\n lng: machine.telemetrySnapshot?.location?.longitude,\r\n };\r\n\r\n return (\r\n this.setState({ selectedMachine: { ...machine } })}\r\n >\r\n {selectedMachine && !hideOverlay && (\r\n this.setState({ selectedMachine: null })}\r\n />\r\n )}\r\n \r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport {\r\n withScriptjs,\r\n withGoogleMap,\r\n GoogleMap,\r\n GoogleMapProps,\r\n} from 'react-google-maps';\r\nimport { mapStyleDark } from '../../constants';\r\nimport MarkerClusterer from 'react-google-maps/lib/components/addons/MarkerClusterer';\r\nimport RubbleMarker from './RubbleMarker';\r\nimport { connect } from 'react-redux';\r\nimport { IReduxState, IMachine } from '../../types';\r\n\r\ninterface IProps {\r\n hideOverlay: boolean;\r\n showMarkerCluster: boolean;\r\n disableClick?: boolean;\r\n machines: IMachine[];\r\n center?: {\r\n lat: number;\r\n lng: number;\r\n };\r\n panToCenter?: {\r\n lat: number;\r\n lng: number;\r\n };\r\n options?: {\r\n styles: any;\r\n streetViewControl: boolean;\r\n fullscreenControl: boolean;\r\n };\r\n zoom?: number;\r\n filteredMachines?: IMachine[];\r\n allMachines?: IMachine[];\r\n}\r\n\r\ntype IMergedProps = GoogleMapProps & IProps;\r\n\r\nclass Map extends React.Component {\r\n render() {\r\n const defaultOptions = {\r\n mapTypeControl: true,\r\n mapTypeControlOptions: {\r\n mapTypeIds: ['roadmap', 'satellite'],\r\n // @ts-ignore\r\n style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,\r\n // @ts-ignore\r\n position: google.maps.ControlPosition.BOTTOM_CENTER,\r\n },\r\n clickableIcons: false,\r\n styles: mapStyleDark,\r\n streetViewControl: false,\r\n fullscreenControl: false,\r\n };\r\n const defaultZoom = 9;\r\n const {\r\n machines,\r\n showMarkerCluster,\r\n hideOverlay,\r\n center,\r\n options,\r\n zoom,\r\n panToCenter,\r\n filteredMachines,\r\n allMachines,\r\n disableClick,\r\n } = this.props;\r\n // @ts-ignore\r\n\r\n // KBC Anlage Google Maps\r\n // const { Map } = await google.maps.importLibrary(\"maps\");\r\n // const bounds = new Map.LatLngBounds();\r\n const bounds = new window.google.maps.LatLngBounds();\r\n\r\n const rubbleMarkers = machines.map((item: IMachine) => {\r\n if (\r\n !!item.telemetrySnapshot &&\r\n !!item.telemetrySnapshot.location?.latitude &&\r\n !!item.telemetrySnapshot.location.longitude\r\n ) {\r\n bounds.extend({\r\n lat: item.telemetrySnapshot?.location?.latitude,\r\n lng: item.telemetrySnapshot?.location?.longitude,\r\n });\r\n return (\r\n \r\n );\r\n } else return null;\r\n });\r\n\r\n const getMapBounds = (map: any) => {\r\n if (map && !center) {\r\n if (\r\n filteredMachines &&\r\n filteredMachines.length > 1 &&\r\n allMachines?.length !== filteredMachines.length\r\n ) {\r\n map.fitBounds(bounds);\r\n }\r\n }\r\n };\r\n\r\n return (\r\n \r\n getMapBounds(map)}\r\n >\r\n {showMarkerCluster ? (\r\n \r\n {rubbleMarkers}\r\n \r\n ) : (\r\n rubbleMarkers\r\n )}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: IReduxState) => {\r\n return {\r\n panToCenter: state.search.map.panToCenter,\r\n allMachines: state.machines.allMachines,\r\n filteredMachines: state.machines.filteredMachines,\r\n };\r\n};\r\n\r\nexport const RubbleMap = connect(\r\n mapStateToProps,\r\n null\r\n)(withScriptjs(withGoogleMap(Map)));\r\n","import { useState, useEffect } from 'react';\r\nimport { getUserPositionRequest, getUserPostion } from '../actions/machineActions';\r\nimport { useDispatch } from 'react-redux';\r\n\r\nexport interface ICoords {\r\n coords?: {\r\n latitude: Number,\r\n longitude: Number,\r\n }\r\n}\r\n\r\nconst defaultSettings = {\r\n enableHighAccuracy: false,\r\n timeout: Infinity,\r\n maximumAge: 0,\r\n};\r\n\r\nexport const usePosition = (userConfirmedGeo: boolean, settings = defaultSettings) => {\r\n const [position, setPosition] = useState({});\r\n const [error, setError] = useState(null);\r\n const dispatch = useDispatch();\r\n\r\n const onChange = (value: ICoords) => {\r\n const { coords } = value;\r\n const userCoords = {\r\n lat: coords?.latitude,\r\n lng: coords?.longitude\r\n };\r\n setPosition(userCoords);\r\n if (!userConfirmedGeo) {\r\n dispatch(getUserPostion(true, userCoords))\r\n }\r\n };\r\n\r\n const onError = (error: any) => {\r\n setError(error.message);\r\n dispatch(getUserPostion(false, error.message))\r\n };\r\n\r\n useEffect(() => {\r\n if (!userConfirmedGeo) {\r\n dispatch(getUserPositionRequest());\r\n }\r\n const geo = navigator.geolocation;\r\n if (!geo) {\r\n setError('Geolocation is not supported');\r\n return;\r\n }\r\n return geo.getCurrentPosition(onChange, onError, settings);\r\n // eslint-disable-next-line\r\n }, [userConfirmedGeo]);\r\n\r\n return { ...position, error };\r\n}\r\n","import { useState, useEffect } from 'react';\r\nimport createActivityDetector from 'activity-detector';\r\n\r\nexport const useIdle = () => {\r\n const options = {\r\n timeToIdle: 15 * 60 * 1000, // 15min in ms\r\n inactivityEvents: [],\r\n };\r\n const [isIdle, setIsIdle] = useState(false);\r\n useEffect(() => {\r\n const activityDetector = createActivityDetector(options);\r\n activityDetector.on('idle', () => {\r\n setIsIdle(true);\r\n });\r\n activityDetector.on('active', () => {\r\n setIsIdle(false);\r\n });\r\n return () => activityDetector.stop();\r\n // eslint-disable-next-line\r\n }, []);\r\n return isIdle;\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport { RubbleMap } from './RubbleMap';\r\nimport { googleMapUrlWithKey } from '../constants';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport {\r\n CircularProgress,\r\n makeStyles,\r\n Theme,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport { IReduxState } from '../types';\r\nimport { usePosition } from './usePosition';\r\nimport { getAllMachines } from '../actions/machineActions';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useIdle } from './useIdle';\r\nimport { handleUserIdle } from '../actions/authActions';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n loadingElement: {\r\n position: 'absolute',\r\n height: 'calc(100vH - (88px + 56px))',\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n fullHeight: {\r\n position: 'absolute',\r\n height: 'calc(100vH - (88px + 56px))',\r\n [theme.breakpoints.up('sm')]: {\r\n height: 'calc(100vH - 96px)',\r\n },\r\n width: `100%`,\r\n },\r\n}));\r\n\r\nexport default function Dashboard() {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const { t } = useTranslation();\r\n const isFetchingAllMachines = useSelector(\r\n (state: IReduxState) => state.machines.isFetchingAllMachines\r\n );\r\n const machines = useSelector(\r\n (state: IReduxState) => state.machines.filteredMachines\r\n );\r\n const userConfirmedGeo = useSelector(\r\n (state: IReduxState) => state.search.map.userConfirmedGeo\r\n );\r\n const loadingElement = (\r\n
\r\n \r\n \r\n {t('general.loadingText')}\r\n \r\n
\r\n );\r\n\r\n // Get user geo postion\r\n usePosition(userConfirmedGeo);\r\n\r\n const isIdle = useIdle();\r\n\r\n // Get all machines on mount\r\n useEffect(() => {\r\n dispatch(getAllMachines());\r\n //eslint-disable-next-line\r\n }, []);\r\n\r\n useEffect(() => {\r\n dispatch(handleUserIdle(isIdle));\r\n }, [isIdle, dispatch]);\r\n\r\n\r\n return (\r\n \r\n {isFetchingAllMachines ? (\r\n loadingElement\r\n ) : (\r\n \r\n }\r\n mapElement={\r\n
\r\n }\r\n />\r\n \r\n )}\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { Typography, makeStyles, Theme } from '@material-ui/core';\r\nimport rmBackground from '../assets/img/rm-background.jpg';\r\nimport { Link } from 'react-router-dom';\r\nimport { routes } from '../constants';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n wrapper: {\r\n background: `url(${rmBackground}) center`,\r\n minHeight: 'calc(100vH - 88px)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n [theme.breakpoints.up('sm')]: {\r\n minHeight: 'calc(100vH - 96px)',\r\n }\r\n },\r\n textBox: {\r\n maxWidth: '600px',\r\n background: '#fff',\r\n opacity: 0.8,\r\n padding: `${theme.spacing(4)}px`\r\n }\r\n}));\r\n\r\nexport default function NotFound() {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n return (\r\n
\r\n
\r\n {t('general.404Message')}\r\n {t('general.goBack')}\r\n
\r\n
\r\n )\r\n}\r\n","import React from 'react';\r\nimport { IReduxAuthProps, IReduxState } from '../../types';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { fetchUserSession } from '../../actions/authActions';\r\nimport { CircularProgress } from '@material-ui/core';\r\nimport { useLocation, Route, Redirect } from 'react-router';\r\n\r\ninterface IRouteProps {\r\n path?: string;\r\n component: any;\r\n}\r\n\r\nexport default function ProtectedRoute(props: IRouteProps) {\r\n const { component: Component } = props;\r\n const dispatch = useDispatch();\r\n const auth = useSelector((state: IReduxState) => state.auth);\r\n const location = useLocation();\r\n const pathName = location.pathname.substr(1);\r\n\r\n const [userAuth, setUserAuth] = React.useState();\r\n\r\n React.useEffect(() => {\r\n dispatch(fetchUserSession(pathName));\r\n //eslint-disable-next-line\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (auth !== undefined) {\r\n setUserAuth(auth);\r\n }\r\n }, [auth]);\r\n\r\n if (userAuth && !!userAuth.isLoading) {\r\n return (\r\n \r\n \r\n
\r\n );\r\n } else {\r\n if (userAuth && userAuth.isAuthenticated) {\r\n return } />;\r\n }\r\n\r\n if (userAuth && userAuth.isAuthenticated === false) {\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n }\r\n}\r\n","import { MachineTypeDto } from '../../rubblemaster_openapi3_typescript-fetch/models';\r\nimport defaultImg from '../../assets/img/DefaultRM.png';\r\n\r\nexport function MachineImage(machineType: MachineTypeDto, isHybrid: boolean) {\r\n if (machineType) {\r\n if (isHybrid) {\r\n return machineType?.hybridImage ?? defaultImg;\r\n }\r\n return machineType?.normalImage ?? defaultImg;\r\n }\r\n return defaultImg;\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport {\r\n Button,\r\n IconButton,\r\n TextField,\r\n InputAdornment,\r\n} from '@material-ui/core';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { IReduxState } from '../../types';\r\nimport { useTranslation } from 'react-i18next';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport {\r\n editMachineProjectConstructionSite,\r\n deleteMachineProjectConstructionSite,\r\n} from '../../actions/machineDetailsActions';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n dialog: {\r\n padding: `${theme.spacing(2)}px`,\r\n },\r\n buttonWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginBottom: `${theme.spacing(4)}px`,\r\n },\r\n saveButton: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginTop: `${theme.spacing(4)}px`,\r\n },\r\n tagsWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flexWrap: 'wrap',\r\n '& > *': {\r\n margin: theme.spacing(0.5),\r\n },\r\n },\r\n iconWrapper: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n margin: 0,\r\n },\r\n title: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n content: {\r\n padding: `${theme.spacing(2)}px ${theme.spacing(3)}px`,\r\n },\r\n contentWrapper: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n}));\r\n\r\nexport interface IMachineStateDialogProps {\r\n open: boolean;\r\n onClose: () => void;\r\n}\r\n\r\nfunction MachineProjectConstructionSiteDialog(props: IMachineStateDialogProps) {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const { onClose, open } = props;\r\n const dispatch = useDispatch();\r\n const machine = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine\r\n );\r\n const machineId = machine.id;\r\n const [machineProjectConstructionSite, setMachineProjectConstructionSite] = useState<\r\n string\r\n >('');\r\n\r\n const handleClose = () => {\r\n setMachineProjectConstructionSite(machine.projectConstructionSite as string);\r\n onClose();\r\n };\r\n\r\n const handleSave = () => {\r\n dispatch(\r\n editMachineProjectConstructionSite(machineId as number, machineProjectConstructionSite.trim())\r\n );\r\n onClose();\r\n };\r\n\r\n const handleDelete = () => {\r\n dispatch(deleteMachineProjectConstructionSite(machineId as number));\r\n handleClose();\r\n };\r\n\r\n const preventEnter = (ev: React.KeyboardEvent) => {\r\n if (ev.key === 'Enter') {\r\n ev.preventDefault();\r\n }\r\n };\r\n\r\n const handleChange = (text: string) => {\r\n if (text.length === 0) {\r\n text = '';\r\n }\r\n\r\n setMachineProjectConstructionSite(text);\r\n };\r\n\r\n useEffect(() => {\r\n const projectConstructionSite = machine.projectConstructionSite as string;\r\n setMachineProjectConstructionSite(projectConstructionSite);\r\n // eslint-disable-next-line\r\n }, [machine.projectConstructionSite]);\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n {t('machine.editConstructionSite')}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n ) =>\r\n preventEnter(ev)\r\n }\r\n onChange={(\r\n event: React.ChangeEvent<{ name?: string; value: string | any }>\r\n ) => handleChange(event.target.value)}\r\n InputProps={{\r\n endAdornment: (\r\n \r\n \r\n {machineProjectConstructionSite &&\r\n machineProjectConstructionSite.length ? (\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 {t('controls.save')}\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default function EditmachineProjectConstructionSite() {\r\n const classes = useStyles();\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 = () => {\r\n setOpen(false);\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","import React from 'react';\r\nimport {\r\n Card,\r\n CardContent,\r\n Typography,\r\n CardMedia,\r\n List,\r\n ListItem,\r\n ListItemText,\r\n Theme,\r\n} from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/styles';\r\nimport { IReduxState, AccessLevel } from '../../types';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\nimport { MachineImage } from './MachineImage';\r\nimport Skeleton from '@material-ui/lab/Skeleton';\r\nimport EditMachineConstructionSite from './EditMachineConstructionSite';\r\nimport { chartColors } from '../../constants';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(2)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n height: 400,\r\n margin: `${theme.spacing(2)}px ${theme.spacing(2)}px`,\r\n },\r\n },\r\n cardContent: {\r\n height: '100%',\r\n boxShadow: `0.25rem 0.25rem 0 0 ${chartColors.electricBlue}`,\r\n },\r\n actionsArena: {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n },\r\n constructionSite: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-around',\r\n width: '100%',\r\n },\r\n}));\r\n\r\nexport default function MachineGeneral() {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const machine = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine\r\n );\r\n const isHybrid = useSelector(\r\n (state: IReduxState) =>\r\n !!state.machineDetails.machine.telemetrySnapshot?.isHybrid\r\n );\r\n const currentlyAuthenticatedUserAccessLevel: AccessLevel = useSelector(\r\n (state: IReduxState) =>\r\n state.machineDetails.machine.currentlyAuthenticatedUserAccessLevel\r\n );\r\n\r\n return (\r\n
\r\n
\r\n \r\n {!!machine.machineType.name ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {machine.serialNumber}\r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \r\n {machine.owner}\r\n \r\n \r\n }\r\n />\r\n \r\n \r\n
\r\n \r\n \r\n { \r\n //currentlyAuthenticatedUserAccessLevel === AccessLevel.Read ||\r\n currentlyAuthenticatedUserAccessLevel === AccessLevel.Write\r\n ? machine.projectConstructionSite\r\n : t('accessLevel.placeholder')}\r\n \r\n \r\n }\r\n />\r\n {currentlyAuthenticatedUserAccessLevel ===\r\n AccessLevel.Write ? (\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","import React from 'react';\r\nimport { IconButton, makeStyles, Theme, Typography } from '@material-ui/core';\r\nimport DirectionsIcon from '@material-ui/icons/Directions';\r\nimport { IMachineDetailsProps } from '../../types';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n // margin: `${theme.spacing(2)}px`,\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: 'auto',\r\n },\r\n iconWrapper: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n margin: 0,\r\n },\r\n}));\r\n\r\nexport default function NavigateToLocation(props: IMachineDetailsProps) {\r\n const classes = useStyles();\r\n const { machine } = props;\r\n const { t } = useTranslation();\r\n const handleNavigate = () => {\r\n const url = `https://www.google.com/maps/dir/?api=1&destination=${machine.telemetrySnapshot?.location?.latitude},${machine.telemetrySnapshot?.location?.longitude}`;\r\n window.open(url);\r\n };\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n {t('machine.directions')}\r\n \r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport {\r\n Card,\r\n CardContent,\r\n Typography,\r\n List,\r\n ListItem,\r\n ListItemText,\r\n Theme,\r\n CircularProgress,\r\n} from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/styles';\r\nimport { RubbleMap } from '../RubbleMap';\r\nimport { chartColors, mapStyleDark } from '../../constants';\r\nimport ShareMachine from '../ShareMachine';\r\nimport NavigateToLocation from './NavigateToLocation';\r\nimport { IReduxState } from '../../types';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\nimport { googleMapUrlWithKey } from '../../constants';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n mapContainer: {\r\n height: 160,\r\n },\r\n cardWrapper: {\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n height: 400,\r\n },\r\n },\r\n card: {\r\n height: '100%',\r\n },\r\n actionsArena: {\r\n padding: 0,\r\n height: '100%',\r\n },\r\n content: {\r\n height: 'calc(100% - 160px)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-evenly',\r\n },\r\n share: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n flexDirection: 'row',\r\n margin: `0 ${theme.spacing(2)}px`,\r\n },\r\n noData: {\r\n display: 'flex',\r\n height: '100%',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n}));\r\n\r\nexport default function MachineMap() {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const { machine, suggestedAddress } = useSelector(\r\n (state: IReduxState) => state.machineDetails\r\n );\r\n const isHybrid = useSelector(\r\n (state: IReduxState) =>\r\n !!state.machineDetails.machine.telemetrySnapshot?.isHybrid\r\n );\r\n\r\n const loadingElement = (\r\n \r\n \r\n \r\n );\r\n\r\n const mapOptions = {\r\n styles: mapStyleDark,\r\n streetViewControl: false,\r\n fullscreenControl: false,\r\n zoomControl: false,\r\n mapTypeControl: false,\r\n gestureHandling: 'none',\r\n draggableCursor: 'default',\r\n draggingCursor: 'none',\r\n };\r\n\r\n const mapCenter = machine.telemetrySnapshot?.location\r\n ? {\r\n lat: machine.telemetrySnapshot?.location?.latitude,\r\n lng: machine.telemetrySnapshot?.location?.longitude,\r\n }\r\n : null;\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {machine.telemetrySnapshot !== null \r\n && machine.telemetrySnapshot?.location !== null ? (\r\n <>\r\n }\r\n mapElement={
}\r\n />\r\n\r\n
\r\n \r\n \r\n \r\n \r\n {suggestedAddress === 'notFound'\r\n ? t('machine.notFound')\r\n : suggestedAddress}\r\n \r\n \r\n }\r\n />\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n ) : (\r\n
\r\n {t('graph.noData')}\r\n
\r\n )}\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport {\r\n FormControl,\r\n InputLabel,\r\n MenuItem,\r\n Select,\r\n Button,\r\n IconButton,\r\n} from '@material-ui/core';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { IReduxState, IMachineStateOption } from '../../types';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { updateMachineState } from '../../actions/machineDetailsActions';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n maxWidth: 200,\r\n },\r\n dialog: {\r\n padding: `${theme.spacing(4)}px`,\r\n },\r\n buttonWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n },\r\n saveButton: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n marginTop: `${theme.spacing(4)}px`,\r\n },\r\n iconWrapper: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n margin: 0,\r\n },\r\n}));\r\n\r\nexport interface IMachineStateDialogProps {\r\n open: boolean;\r\n onClose: () => void;\r\n}\r\n\r\nfunction MachineStateDialog(props: IMachineStateDialogProps) {\r\n const classes = useStyles();\r\n const { t, i18n } = useTranslation();\r\n const { onClose, open } = props;\r\n const dispatch = useDispatch();\r\n const machineStateOptions = useSelector(\r\n (state: IReduxState) => state.search.machineStateOptions\r\n );\r\n const machineState = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine.state\r\n );\r\n const machineId = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine.id\r\n );\r\n const [selectedMachineState, setSelectedMachineState] = useState<\r\n IMachineStateOption\r\n >();\r\n\r\n const handleChange = (id: number) => {\r\n const selectedMachineStateOption = machineStateOptions.filter(\r\n (item: any) => item.id === id\r\n )[0];\r\n setSelectedMachineState(selectedMachineStateOption);\r\n };\r\n\r\n const saveMachineState = () => {\r\n dispatch(updateMachineState(machineId as number, selectedMachineState));\r\n handleClose();\r\n };\r\n\r\n const handleClose = () => {\r\n onClose();\r\n };\r\n\r\n useEffect(() => {\r\n setSelectedMachineState(machineState as IMachineStateOption);\r\n }, [machineState]);\r\n\r\n return (\r\n \r\n
\r\n \r\n {t('machine.editMachineState')}\r\n \r\n {machineState ? (\r\n
\r\n \r\n \r\n {t('search.machineState.select')}\r\n \r\n {selectedMachineState && (\r\n ) =>\r\n handleChange(event.target.value)\r\n }\r\n >\r\n {machineStateOptions.map(\r\n (item: IMachineStateOption, index: number) => (\r\n \r\n {i18n.exists(`machine.state.${item.key}`) ? t(`machine.state.${item.key}`) : item.key }\r\n \r\n )\r\n )}\r\n \r\n )}\r\n \r\n
\r\n \r\n {t('controls.save')}\r\n \r\n
\r\n
\r\n ) : null}\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default function EditMachineState() {\r\n const classes = useStyles();\r\n const [open, setOpen] = React.useState(false);\r\n const { t } = useTranslation();\r\n\r\n const handleClickOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n const handleClose = () => {\r\n setOpen(false);\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","import React from 'react';\r\nimport {\r\n Card,\r\n CardContent,\r\n Typography,\r\n List,\r\n ListItem,\r\n ListItemText,\r\n Theme,\r\n Chip,\r\n} from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/styles';\r\nimport { themeColors, chartColors } from '../../constants';\r\nimport { IReduxState, AccessLevel } from '../../types';\r\nimport { useTranslation } from 'react-i18next';\r\nimport EditMachineState from './EditMachineState';\r\nimport { useSelector } from 'react-redux';\r\nimport moment from 'moment';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n cardWrapper: {\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(2)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n height: 400,\r\n },\r\n },\r\n card: {\r\n height: '100%',\r\n },\r\n actionsArena: {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n display: 'flex',\r\n height: '100%',\r\n },\r\n chipRed: {\r\n backgroundColor: themeColors.red,\r\n color: themeColors.white,\r\n },\r\n chipGreen: {\r\n backgroundColor: themeColors.green,\r\n color: themeColors.white,\r\n },\r\n list: {\r\n width: '100%',\r\n },\r\n listItem: {\r\n marginTop: 0,\r\n marginBottom: 0,\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n },\r\n machineState: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-around',\r\n width: '100%',\r\n },\r\n lastUpdate: {\r\n color: themeColors.white,\r\n marginTop: 0,\r\n paddingBottom: 0,\r\n paddingLeft: theme.spacing(0),\r\n },\r\n}));\r\n\r\nexport default function MachineStats() {\r\n const classes = useStyles();\r\n\r\n // console.log(\"***************************************\");\r\n // console.log(\"In MachineStats()!! \");\r\n // console.log(\"***************************************\");\r\n\r\n const machine = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine\r\n );\r\n\r\n // console.log(\"machine:\");\r\n // console.log(machine);\r\n\r\n const isHybrid = useSelector(\r\n (state: IReduxState) =>\r\n !!state.machineDetails.machine.telemetrySnapshot?.isHybrid\r\n );\r\n const { t, i18n } = useTranslation();\r\n const currentlyAuthenticatedUserAccessLevel = useSelector(\r\n (state: IReduxState) =>\r\n state.machineDetails.machine.currentlyAuthenticatedUserAccessLevel\r\n );\r\n\r\n // console.log(\"currentlyAuthenticatedUserAccessLevel : \" + currentlyAuthenticatedUserAccessLevel);\r\n\r\n // const {\r\n // totalHoursOfExternalPowerSupply,\r\n // totalHoursOfInternalPowerSupply,\r\n // } = useSelector((state: IReduxState) => state.machineDetails);\r\n\r\n const updatedAt : Date = (useSelector((state: IReduxState) => state.machineDetails.machine.telemetrySnapshot?.updatedAt)) ?? new Date();\r\n\r\n const { averageEngineUtilization, averageFuelLevels } = useSelector(\r\n (state: IReduxState) => state.machineDetails\r\n );\r\n\r\n // console.log(\"updatedAt\");\r\n // console.log(\r\n // !!machine.telemetrySnapshot\r\n // ? moment\r\n // .utc(updatedAt)\r\n // .local()\r\n // .format(`DD.MM.YYYY HH:mm`)\r\n // : '-'\r\n // );\r\n // console.log(averageEngineUtilization);\r\n // console.log(averageFuelLevels);\r\n\r\n const isThirdParty = useSelector(\r\n (state: IReduxState) =>\r\n state.machineDetails.machine.machineType.isThirdParty\r\n );\r\n\r\n // returns true if service is closer than 50 hours\r\n const workingHoursTillService = !!machine.nextService\r\n ? machine.nextService.workingHoursTillService\r\n : null;\r\n const isServiceClose = !!workingHoursTillService\r\n ? workingHoursTillService < 50.0\r\n : false;\r\n \r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {`${t('machine.lastReceivedValue')}: ${\r\n !!machine.telemetrySnapshot\r\n ? moment\r\n .utc(updatedAt)\r\n .local()\r\n .format(`DD.MM.YYYY HH:mm`)\r\n : '-'\r\n }`}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n {!!machine.state && !!machine.state.key\r\n ? i18n.exists(`machine.state.${machine.state.key}`)\r\n ? t(`machine.state.${machine.state.key}`)\r\n : machine.state.key\r\n : '-'}\r\n \r\n \r\n }\r\n />\r\n {\r\n currentlyAuthenticatedUserAccessLevel === AccessLevel.Write \r\n ? ( ) \r\n : null}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n {!isThirdParty && (\r\n \r\n \r\n \r\n {!!machine.telemetrySnapshot &&\r\n machine.telemetrySnapshot\r\n .totalHoursOfCrusherOperation !== null\r\n ? machine.telemetrySnapshot\r\n .totalHoursOfCrusherOperation\r\n : '-'}\r\n \r\n \r\n }\r\n />\r\n \r\n )}\r\n {false && isHybrid && (\r\n \r\n \r\n // \r\n // {/* {totalHoursOfInternalPowerSupply !== null\r\n // ? totalHoursOfInternalPowerSupply\r\n // : '-'} */}\r\n // {!!machine.telemetrySnapshot &&\r\n // machine.telemetrySnapshot\r\n // .totalHoursOfInternalPowerSupply !== null\r\n // ? machine.telemetrySnapshot\r\n // .totalHoursOfInternalPowerSupply\r\n // : '-'}\r\n // \r\n // \r\n // }\r\n />\r\n \r\n )}\r\n
\r\n
\r\n \r\n \r\n \r\n {!!machine.telemetrySnapshot &&\r\n machine.telemetrySnapshot\r\n .totalHoursOfEngineOperation !== null\r\n ? machine.telemetrySnapshot\r\n .totalHoursOfEngineOperation\r\n : '-'}\r\n \r\n \r\n }\r\n />\r\n \r\n {/* momentan nicht verwenden : */}\r\n {false && isHybrid && (\r\n \r\n \r\n // \r\n // {/* {totalHoursOfExternalPowerSupply !== null\r\n // ? totalHoursOfExternalPowerSupply\r\n // : '-'} */}\r\n // {!!machine.telemetrySnapshot &&\r\n // machine.telemetrySnapshot\r\n // .totalHoursOfExternalPowerSupply !== null\r\n // ? machine.telemetrySnapshot\r\n // .totalHoursOfInternalPowerSupply\r\n // : '-'}\r\n\r\n // \r\n // \r\n // }\r\n />\r\n \r\n )}\r\n
\r\n \r\n \r\n \r\n {!!machine.telemetrySnapshot &&\r\n machine.telemetrySnapshot.fuelLevel !== null\r\n ? `${machine.telemetrySnapshot.fuelLevel} % ${t(\r\n 'graph.diesel'\r\n )}`\r\n : '-'}\r\n \r\n {isHybrid && (\r\n \r\n /\r\n \r\n )}\r\n \r\n {!!machine.telemetrySnapshot &&\r\n machine.telemetrySnapshot.adBlueLevel !== null\r\n ? `${machine.telemetrySnapshot.adBlueLevel} % ${t(\r\n 'graph.adblue'\r\n )}`\r\n : '-'}\r\n \r\n
\r\n }\r\n />\r\n \r\n {!isThirdParty && (\r\n \r\n \r\n \r\n {!!machine.nextService\r\n ? machine.nextService?.workingHoursTillService\r\n : '-'}\r\n \r\n \r\n {!!machine.nextService\r\n ? ` (${machine.nextService!.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","import React from 'react';\r\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\r\nimport Popover from '@material-ui/core/Popover';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Button from '@material-ui/core/Button';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n typography: {\r\n padding: theme.spacing(2),\r\n },\r\n })\r\n);\r\n\r\ninterface IProps {\r\n content: any;\r\n}\r\n\r\nexport default function DatesPopOver(props: IProps) {\r\n const classes = useStyles();\r\n const { content } = props;\r\n const [anchorEl, setAnchorEl] = React.useState(\r\n null\r\n );\r\n const handleClick = (event: React.MouseEvent) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const { t } = useTranslation();\r\n\r\n const open = Boolean(anchorEl);\r\n const id = open ? 'simple-popover' : undefined;\r\n\r\n return (\r\n
\r\n \r\n {open ? t('machine.hide') : t('machine.show')}\r\n \r\n \r\n {content.map((item: string, index: number) => {\r\n return (\r\n \r\n {moment(item).format(`DD.MM.YYYY HH:mm`)}\r\n \r\n );\r\n })}\r\n \r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport Skeleton from '@material-ui/lab/Skeleton';\r\n\r\nexport default function SkeletonLoaderTable() {\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","import React from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TablePagination,\r\n TableRow,\r\n TableSortLabel,\r\n Paper,\r\n Switch,\r\n FormControlLabel,\r\n Button,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport {\r\n themeColors,\r\n createPdfReportHeader,\r\n createPdfReportFooter,\r\n chartColors,\r\n} from '../../constants';\r\nimport moment from 'moment';\r\nimport DatesPopOver from './DatesPopOver';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { IReduxState, IErrorExtended, IError } from '../../types';\r\nimport GetAppIcon from '@material-ui/icons/GetApp';\r\nimport {\r\n CREATE_PDF_REPORT,\r\n CREATE_PDF_REPORT_SUCCESS,\r\n} from '../../actions/types';\r\nimport jsPDF from 'jspdf';\r\nimport 'jspdf-autotable';\r\nimport SkeletonLoaderTable from './SkeletonLoaderTable';\r\n\r\nfunction desc(a: T, b: T, orderBy: keyof T) {\r\n if (b[orderBy] < a[orderBy]) {\r\n return -1;\r\n }\r\n if (b[orderBy] > a[orderBy]) {\r\n return 1;\r\n }\r\n return 0;\r\n}\r\n\r\nfunction stableSort(array: IErrorExtended[], cmp: (a: T, b: T) => number) {\r\n const stabilizedThis = array.map((el: any, index: any) => [el, index]);\r\n stabilizedThis.sort((a, b) => {\r\n const order = cmp(a[0], b[0]);\r\n if (order !== 0) return order;\r\n return a[1] - b[1];\r\n });\r\n return stabilizedThis.map((el: any[]) => el[0]);\r\n}\r\n\r\ntype Order = 'asc' | 'desc';\r\n\r\nfunction getSorting(\r\n order: Order,\r\n orderBy: K\r\n): (\r\n a: { [key in K]: number | string },\r\n b: { [key in K]: number | string }\r\n) => number {\r\n return order === 'desc'\r\n ? (a, b) => desc(a, b, orderBy)\r\n : (a, b) => -desc(a, b, orderBy);\r\n}\r\n\r\ninterface HeadCell {\r\n disablePadding: boolean;\r\n id: string;\r\n label: string;\r\n class: string;\r\n}\r\n\r\ninterface EnhancedTableProps {\r\n classes: ReturnType;\r\n onRequestSort: (event: React.MouseEvent, property: string) => void;\r\n order: Order;\r\n orderBy: string;\r\n rowCount: number;\r\n showErrrorFrequency: boolean;\r\n}\r\n\r\nfunction EnhancedTableHead(props: EnhancedTableProps) {\r\n const { classes, order, orderBy, onRequestSort, showErrrorFrequency } = props;\r\n const createSortHandler = (property: string) => (\r\n event: React.MouseEvent\r\n ) => {\r\n onRequestSort(event, property);\r\n };\r\n\r\n const { t } = useTranslation();\r\n\r\n const headCells: HeadCell[] = [\r\n {\r\n id: 'dateTime',\r\n disablePadding: false,\r\n label: t('machine.dateTime'),\r\n class: classes.tableCellFixedMedium,\r\n },\r\n {\r\n id: 'errorCode',\r\n disablePadding: false,\r\n label: t('machine.errorCode'),\r\n class: classes.tableCellFixedSmall,\r\n },\r\n {\r\n id: 'group',\r\n disablePadding: false,\r\n label: t('machine.group'),\r\n class: classes.tableCellFixedSmall,\r\n },\r\n {\r\n id: 'hoursOfCrusherOperation',\r\n disablePadding: false,\r\n label: t('machine.crusherOperation'),\r\n class: classes.tableCellFixedSmall,\r\n },\r\n {\r\n id: 'description',\r\n disablePadding: false,\r\n label: t('machine.description'),\r\n class: classes.tableCellFill,\r\n },\r\n ];\r\n\r\n const headCellsExtended: HeadCell[] = [\r\n {\r\n id: 'dateTime',\r\n disablePadding: false,\r\n label: t('machine.dateTime'),\r\n class: classes.tableCellFixedMedium,\r\n },\r\n {\r\n id: 'errorCode',\r\n disablePadding: false,\r\n label: t('machine.errorCode'),\r\n class: classes.tableCellFixedSmall,\r\n },\r\n {\r\n id: 'group',\r\n disablePadding: false,\r\n label: t('machine.group'),\r\n class: classes.tableCellFixedSmall,\r\n },\r\n {\r\n id: 'description',\r\n disablePadding: false,\r\n label: t('machine.description'),\r\n class: classes.tableCellFill,\r\n },\r\n {\r\n id: 'frequency',\r\n disablePadding: false,\r\n label: t('machine.frequency'),\r\n class: classes.tableCellFixedSmall,\r\n },\r\n ];\r\n\r\n const tableHead = showErrrorFrequency ? headCellsExtended : headCells;\r\n\r\n return (\r\n \r\n \r\n {tableHead.map((headCell) => (\r\n \r\n \r\n {headCell.label}\r\n {orderBy === headCell.id ? (\r\n \r\n {order === 'desc' ? 'sorted descending' : 'sorted ascending'}\r\n \r\n ) : null}\r\n \r\n \r\n ))}\r\n \r\n \r\n );\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minHeight: 300,\r\n margin: `${theme.spacing(2)}px`,\r\n [theme.breakpoints.up('md')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n },\r\n buttonWrapper: {\r\n marginBottom: `${theme.spacing(2)}px`,\r\n marginRight: 8,\r\n paddingTop: 20,\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'flex',\r\n marginBottom: 0,\r\n marginRight: `${theme.spacing(2)}px`,\r\n },\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n float: 'right',\r\n },\r\n paper: {\r\n width: '100%',\r\n marginBottom: theme.spacing(2),\r\n },\r\n visuallyHidden: {\r\n border: 0,\r\n clip: 'rect(0 0 0 0)',\r\n height: 1,\r\n margin: -1,\r\n overflow: 'hidden',\r\n padding: 0,\r\n position: 'absolute',\r\n top: 20,\r\n width: 1,\r\n },\r\n chipRed: {\r\n backgroundColor: themeColors.red,\r\n color: themeColors.white,\r\n },\r\n chipGreen: {\r\n backgroundColor: themeColors.green,\r\n color: themeColors.white,\r\n },\r\n tableControls: {\r\n padding: theme.spacing(2),\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n flexDirection: 'column',\r\n [theme.breakpoints.up('sm')]: {\r\n justifyContent: 'space-between',\r\n flexDirection: 'row',\r\n },\r\n },\r\n tableRow: {\r\n height: 80,\r\n width: '100%',\r\n },\r\n helperText: {\r\n padding: theme.spacing(2),\r\n },\r\n tableCellFixedSmall: {\r\n width: '15%',\r\n minWidth: '130px',\r\n },\r\n tableCellFixedMedium: {\r\n width: '20%',\r\n minWidth: '160px',\r\n },\r\n tableCellFill: {},\r\n })\r\n);\r\n\r\ninterface IProps {\r\n startRowsPerPage?: number;\r\n}\r\n\r\nexport default function MachineErrors(props: IProps) {\r\n const startRowsPerPage = props.startRowsPerPage ? props.startRowsPerPage : 0;\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const { t } = useTranslation(['translation', 'errorcodes']);\r\n\r\n // console.log(\"***************************************************************************\");\r\n // console.log(\"In MachineErrors 24.11.19\");\r\n // console.log(\"***************************************************************************\");\r\n\r\n const useBlacklist : boolean = useSelector(\r\n (state: IReduxState) =>\r\n state.machineDetails.machine.useBlacklist\r\n );\r\n const errorBlackList = useSelector(\r\n (state: IReduxState) =>\r\n state.machineDetails.machine.errorBlackList\r\n );\r\n const info = useSelector(\r\n (state: IReduxState) =>\r\n state.machineDetails.machine.info\r\n );\r\n const machineErrors = useSelector(\r\n (state: IReduxState) => state.machineDetails.errorCodes\r\n );\r\n\r\n // const machineErrorsFiltered = useSelector(\r\n // (state: IReduxState) => state.machineDetails.errorCodes //filterErrors(state.machineDetails.errorCodes, useBlacklist, errorBlackList)\r\n // );\r\n\r\n // console.log(\"****************************************\");\r\n // console.log(\"useBlacklist : \" + useBlacklist);\r\n // console.log(\"errorBlackList : \" + errorBlackList);\r\n // console.log(\"########################################\");\r\n // console.warn(info);\r\n // console.log(\"########################################\");\r\n // console.log(\"machineErrors : \");\r\n // console.log(machineErrors);\r\n // console.log(\"****************************************\");\r\n\r\n const isHybrid = useSelector(\r\n (state: IReduxState) =>\r\n !!state.machineDetails.machine.telemetrySnapshot?.isHybrid\r\n );\r\n const isFetchingTelemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.isFetchingTelemtry\r\n );\r\n const search = useSelector(\r\n (state: IReduxState) => state.machineDetails.search\r\n );\r\n // const machineDetails = useSelector(\r\n // (state: IReduxState) => state.machineDetails\r\n // );\r\n // console.log(\"machineDetails:\");\r\n // console.log(machineDetails);\r\n\r\n const [order, setOrder] = React.useState('desc');\r\n const [orderBy, setOrderBy] = React.useState('dateTime');\r\n const [page, setPage] = React.useState(0);\r\n const [rowsPerPage, setRowsPerPage] = React.useState(startRowsPerPage);\r\n const machine = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine\r\n );\r\n const [showErrorFrequency, setShowErrorFrequency] = React.useState(false);\r\n\r\n // console.log(\"Machine:\");\r\n // console.log(machine);\r\n\r\n\r\n const errors: IErrorExtended[] = !!machineErrors\r\n ? machineErrors.map((item: any) => {\r\n // #40916 \r\n // Wenn eine Message mit SPN.FMI kommt, ...\r\n let hasSPN = !!item.engineErrorSPN\r\n // console.log(\"hasSPN0 : \" + hasSPN);\r\n // console.log(item);\r\n // ... muss in der Spalte \"Error Code\" 999 angezeigt werden\r\n const errorCode = hasSPN ? '999' : item.errorCode;\r\n // ...In der Spalte Group ist dann der Text \"Motor (SPN.FMI)\" anzuzeigen\r\n const group = hasSPN ? 'Motor (SPN.FMI)' : t(`errorcodes:${errorCode}.group`, '-');\r\n // ... In der Spalte Description ist der SPN.FMI numerisch und falls vorhanden, der zugehörige Beschreibungstext, anzuzeige.\r\n const description = hasSPN ? (item.engineErrorSPN + '.' + item.engineErrorFMI) : t(`errorcodes:${errorCode}.description`, '-');\r\n return {\r\n ...item,\r\n // group: t(`errorcodes:${errorCode}.group`, '-'),\r\n // description: t(`errorcodes:${errorCode}.description`, '-'),\r\n group: group,\r\n description: description,\r\n };\r\n })\r\n : [];\r\n\r\n const pdfErrors = errors\r\n // sorted descending\r\n .sort((a, b) => moment(b.dateTime).diff(a.dateTime))\r\n .map((item) => {\r\n const filteredErrors = errors.filter(\r\n (_) => _.errorCode === item.errorCode\r\n );\r\n const frequency = filteredErrors.length;\r\n return {\r\n ...item,\r\n dateTime: moment(item.dateTime).format(`DD.MM.YYYY HH:mm`),\r\n errorCode: item.errorCode,\r\n frequency,\r\n };\r\n });\r\n\r\n const errorsExtended = errors.map((item) => {\r\n const filteredErrors = errors.filter((_) => _.errorCode === item.errorCode);\r\n const frequency = filteredErrors.length;\r\n const dateArray = filteredErrors.map((item) => item.dateTime);\r\n return {\r\n dateTime: dateArray,\r\n errorCode: item.errorCode,\r\n frequency,\r\n group: item.group,\r\n description: item.description,\r\n };\r\n });\r\n\r\n const removeDuplicates = (arr: any[]) => {\r\n const key = 'errorCode';\r\n return [...new Map(arr.map((error) => [error[key], error])).values()];\r\n };\r\n\r\n let rows = showErrorFrequency ? removeDuplicates(errorsExtended) : errors;\r\n\r\n const handleRequestSort = (\r\n event: React.MouseEvent,\r\n property: string\r\n ) => {\r\n const isAsc = orderBy === property && order === 'asc';\r\n setOrder(isAsc ? 'desc' : 'asc');\r\n setOrderBy(property);\r\n };\r\n\r\n const handleChangePage = (event: unknown, newPage: number) => {\r\n setPage(newPage);\r\n };\r\n\r\n const handleChangeRowsPerPage = (\r\n event: React.ChangeEvent\r\n ) => {\r\n setRowsPerPage(parseInt(event.target.value, 10));\r\n setPage(0);\r\n };\r\n\r\n const toggleSwitch = () => {\r\n setShowErrorFrequency((prev) => !prev);\r\n };\r\n\r\n const createReport = () => {\r\n dispatch({ type: CREATE_PDF_REPORT });\r\n const doc = new jsPDF('landscape');\r\n const reportTitle = `${t('report.errorReport')}`;\r\n const reportTimeframe = `${moment(search.startDate).format(\r\n 'DD.MM.YYYY HH:mm'\r\n )} ${t('report.till')} ${moment(search.endDate).format(\r\n 'DD.MM.YYYY HH:mm'\r\n )}`;\r\n\r\n const serialNumber = !!machine.serialNumber ? machine.serialNumber : '';\r\n\r\n const reportFileName = `${serialNumber} - ${moment(\r\n search.startDate\r\n ).format('DD.MM.YYYY HHmm')} ${t('report.till')} ${moment(\r\n search.endDate\r\n ).format('DD.MM.YYYY HHmm')}`;\r\n\r\n // TODO: The library used for creating a pdf table on client side (jsPdf AutoTable) has no types.\r\n // @ts-ignore\r\n doc.autoTable({\r\n headStyles: {\r\n fillColor: themeColors.darkGray,\r\n fontSize: 14,\r\n textColor: chartColors.white,\r\n halign: 'center',\r\n minCellWidth: 50,\r\n },\r\n bodyStyles: { fontSize: 12, halign: 'center' },\r\n didDrawPage: () => {\r\n createPdfReportHeader(doc, reportTitle, reportTimeframe);\r\n createPdfReportFooter(\r\n doc,\r\n serialNumber,\r\n t('report.page'),\r\n doc.internal.getNumberOfPages(),\r\n null\r\n );\r\n },\r\n margin: { top: 40, right: 16, bottom: 20, left: 16 },\r\n showFoot: 'everyPage',\r\n rowPageBreak: 'auto',\r\n columns: [\r\n { header: `${t('report.errorCode')}`, dataKey: 'errorCode' },\r\n { header: `${t('report.dateAndTime')}`, dataKey: 'dateTime' },\r\n {\r\n header: `${t('report.crusherOperation')}`,\r\n dataKey: 'hoursOfCrusherOperation',\r\n },\r\n { header: `${t('report.description')}`, dataKey: 'description' },\r\n {\r\n header: `${t('machine.errorFrequency')}`,\r\n dataKey: 'frequency',\r\n },\r\n ],\r\n body: pdfErrors,\r\n });\r\n\r\n /*\r\n * totalNumberOfPages are only available after all pages are created\r\n * manually iterating over every page to add totalNumberOfPages\r\n * */\r\n const totalNumberOfPages = doc.internal.getNumberOfPages();\r\n for (let i = 1; i <= totalNumberOfPages; i++) {\r\n doc.setPage(i);\r\n doc\r\n .setFontSize(12)\r\n .text(\r\n `${t('report.page')} ${i} / ${totalNumberOfPages}`,\r\n doc.internal.pageSize.getWidth() - 32,\r\n doc.internal.pageSize.getHeight() - 16\r\n );\r\n }\r\n\r\n dispatch({ type: CREATE_PDF_REPORT_SUCCESS });\r\n\r\n doc.save(`${reportTitle} - ${reportFileName}.pdf`);\r\n };\r\n\r\n const emptyRows =\r\n rowsPerPage - Math.min(rowsPerPage, rows.length - page * rowsPerPage);\r\n\r\n return (\r\n
\r\n \r\n {!isFetchingTelemetry ? (\r\n \r\n \r\n \r\n \r\n {machineErrors !== null &&\r\n machineErrors.length !== 0 &&\r\n stableSort(rows, getSorting(order, orderBy))\r\n .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\r\n .map((row: any, index: number) => {\r\n const labelId = `enhanced-table-${index}`;\r\n\r\n const date = showErrorFrequency ? (\r\n row.frequency > 1 ? (\r\n \r\n ) : row.dateTime ? (\r\n // @ts-ignore\r\n moment(row.dateTime[0]).format(`DD.MM.YYYY HH:mm`)\r\n ) : (\r\n ''\r\n )\r\n ) : (\r\n moment(row.dateTime).format(`DD.MM.YYYY HH:mm`)\r\n );\r\n return (\r\n \r\n {date}\r\n \r\n {row.errorCode}\r\n \r\n \r\n {row.group}\r\n \r\n {!showErrorFrequency && (\r\n \r\n {row.hoursOfCrusherOperation}\r\n \r\n )}\r\n \r\n {!showErrorFrequency\r\n ? row.description\r\n : row.errorCode === '999'\r\n ? `${t('machine.generalEngineError')}`\r\n : row.description\r\n }\r\n \r\n {showErrorFrequency && (\r\n \r\n {row.frequency}\r\n \r\n )}\r\n \r\n );\r\n })}\r\n {machineErrors === null && (\r\n \r\n {t('graph.noData')}\r\n \r\n )}\r\n {machineErrors !== null && machineErrors.length === 0 && (\r\n \r\n {t('machine.noErrorDuringTime')}\r\n \r\n )}\r\n {emptyRows > 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 label={t('translation:machine.errorFrequency')}\r\n />\r\n \r\n }\r\n onClick={() => createReport()}\r\n >\r\n {t('report.errorReport')}\r\n \r\n
\r\n {!!machineErrors && machineErrors?.length >= 1000 && (\r\n \r\n {`${t('machine.pleaseNote')}: ${t(\r\n 'machine.errorTruncationMessage'\r\n )}`}\r\n \r\n )}\r\n \r\n
\r\n );\r\n}\r\n// function filterErrors(errorCodes: IError[] | null, useBlacklist: boolean, errorBlackList: string | undefined): IError[] | null {\r\n// console.debug(\"In filterErrors(\" + useBlacklist + \")\");\r\n// console.debug(errorCodes);\r\n// console.debug(errorBlackList);\r\n\r\n// // useBlacklist == false oder errorBlackList leer\r\n// if(useBlacklist !== true || !errorBlackList || errorBlackList === undefined){\r\n// console.log(\"Result:errorCodes\");\r\n// console.log(errorCodes);\r\n\r\n// return errorCodes;\r\n// }\r\n\r\n// // errorCodes leer\r\n// if(errorCodes === null){\r\n// console.log(\"Result: null\");\r\n// return null;\r\n// }\r\n\r\n// let filteredErrors : IError[] = [];\r\n// // errorBlackList (,-separierter String) in echte String-Liste umwandeln\r\n// var blackList = errorBlackList.split(\", \"); \r\n\r\n// console.log(blackList);\r\n\r\n// for (let i = 0; i < errorCodes.length; i++) {\r\n// if(!!errorCodes[i].errorCode){\r\n// const errorCode = errorCodes[i].errorCode?.toString();\r\n// if(!!errorCode){\r\n// if (!blackList.includes(errorCode) ) {\r\n// filteredErrors.push(errorCodes[i]);\r\n// }\r\n// }\r\n// }\r\n// }\r\n// console.log(\"Result:filteredErrors\");\r\n// console.log(filteredErrors);\r\n\r\n// return filteredErrors;\r\n// }\r\n\r\n","import React from 'react';\r\nimport Skeleton from '@material-ui/lab/Skeleton';\r\n\r\nexport default function SkeletonLoaderGraph() {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { IPointData } from '../types';\r\nimport { chartColors } from '../constants';\r\n\r\ninterface IProps {\r\n point: IPointData | null;\r\n}\r\n\r\nexport const ActivePointLayer = (props: IProps) => {\r\n const { point } = props;\r\n\r\n if (!point) return null;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n","import React, { useCallback, useState } from 'react';\r\nimport { ResponsiveLine } from '@nivo/line';\r\nimport { chartColors, sensorInterval, themeColors } from '../../../constants';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Card,\r\n CardContent,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\nimport { IReduxState, ISampledTelemetry, IChartProps } from '../../../types';\r\nimport { IPoint } from '../../../types';\r\nimport { useWindowSize } from '../../useWindowSize';\r\nimport SkeletonLoaderGraph from '../SkeletonLoaderGraph';\r\nimport { ActivePointLayer } from '../../ActivePointLayer';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n height: 500,\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n },\r\n cardContent: {\r\n height: '100%',\r\n },\r\n actionsArena: {\r\n height: '100%',\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n position: 'relative',\r\n },\r\n tooltipWrapper: {\r\n position: 'absolute',\r\n background: themeColors.white,\r\n opacity: 0.9,\r\n padding: theme.spacing(2),\r\n paddingRight: 0,\r\n color: theme.palette.secondary.main,\r\n zIndex: 100,\r\n top: 20,\r\n left: -50,\r\n [theme.breakpoints.up('sm')]: {\r\n width: 160,\r\n top: 20,\r\n left: -70,\r\n },\r\n },\r\n tooltipLabel: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n center: {\r\n display: 'flex',\r\n height: '100%',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n title: {\r\n position: 'absolute',\r\n width: '100%',\r\n top: theme.spacing(2),\r\n },\r\n })\r\n);\r\n\r\nexport default function FuelGraphLine(props: IChartProps) {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const size = useWindowSize();\r\n\r\n let isSmallScreen = size.width !== undefined && size.width < 500;\r\n const { isPdfReport } = props;\r\n // Set isSmallScreen to false for the charts used in the PDF report\r\n isSmallScreen = isPdfReport === true ? false : isSmallScreen;\r\n\r\n const graphMargin = { top: 50, right: 80, bottom: 100, left: 50 };\r\n const graphMarginMobile = { top: 25, right: 25, bottom: 150, left: 50 };\r\n\r\n const isHybrid = useSelector(\r\n (state: IReduxState) =>\r\n !!state.machineDetails.machine.telemetrySnapshot?.isHybrid\r\n );\r\n\r\n const isFetchingTelemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.isFetchingTelemtry\r\n );\r\n const telemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.telemetry\r\n );\r\n const telemetryData: ISampledTelemetry | any = !!telemetry ? telemetry : [];\r\n const graphDateFormat = useSelector(\r\n (state: IReduxState) => state.machineDetails.graphDateFormat\r\n );\r\n\r\n // animate point on hover\r\n const [current, setCurrent] = useState(null);\r\n const handleHover = useCallback(\r\n (point) => {\r\n setCurrent(point);\r\n },\r\n [setCurrent]\r\n );\r\n\r\n const chartData = [\r\n {\r\n id: t('graph.diesel'),\r\n color: chartColors.deepPurple,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.fuelLevel !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds > sensorInterval.fuelLevel) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n return {\r\n x: moment(item.timestamp)\r\n .utc()\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y:\r\n item.fuelLevel !== null && item.fuelLevel !== undefined\r\n ? item.fuelLevel.toFixed(2)\r\n : null,\r\n };\r\n }),\r\n },\r\n {\r\n id: t('graph.adblue'),\r\n color: chartColors.blue,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.adBlueLevel !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds > sensorInterval.adBlueLevel) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n return {\r\n x: moment(item.timestamp)\r\n .utc()\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y:\r\n item.adBlueLevel !== null && item.adBlueLevel !== undefined\r\n ? item.adBlueLevel.toFixed(2)\r\n : null,\r\n };\r\n }),\r\n },\r\n ];\r\n\r\n const CustomTooltip = (pointData: IPoint) => {\r\n const { data, serieId, serieColor } = pointData.point;\r\n return (\r\n
\r\n
\r\n
\r\n \r\n {serieId}\r\n \r\n
\r\n
\r\n {t('graph.date')}: \r\n {moment(data.x).format('DD.MM.YYYY')}\r\n
\r\n
\r\n {t('graph.time')}: \r\n {moment(data.x).format('HH:mm:ss')}\r\n
\r\n
\r\n \r\n {t('graph.fuelLevel')}:{' '}\r\n \r\n {data.y} %\r\n
\r\n
\r\n );\r\n };\r\n\r\n //console.log(chartData[0]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {!isFetchingTelemetry ? (\r\n \r\n {telemetryData.length === 0 ||\r\n (telemetryData.fuelLevel === null &&\r\n telemetryData.adBlueLevel === null) ? (\r\n
\r\n \r\n {t('graph.fuelLevels')}\r\n \r\n \r\n {t('graph.noData')}\r\n \r\n
\r\n ) : (\r\n \r\n {!isSmallScreen && (\r\n
\r\n \r\n {t('graph.fuelLevels')}\r\n \r\n
\r\n )}\r\n d.color}\r\n lineWidth={2}\r\n margin={isSmallScreen ? graphMarginMobile : graphMargin}\r\n xScale={{\r\n type: 'time',\r\n format: '%Y-%m-%d %H:%M:%S.%L',\r\n precision: 'millisecond',\r\n useUTC: false,\r\n }}\r\n xFormat=\"time:%Y-%m-%d %H:%M:%S.%L\"\r\n yScale={{ type: 'linear', min: 0, max: 100 }}\r\n curve=\"monotoneX\"\r\n axisTop={null}\r\n axisRight={null}\r\n enablePoints={true}\r\n layers={[\r\n 'grid',\r\n 'markers',\r\n 'axes',\r\n 'areas',\r\n 'lines',\r\n 'slices',\r\n 'points',\r\n 'mesh',\r\n 'legends',\r\n () => ,\r\n ]}\r\n //@ts-ignore\r\n axisBottom={{\r\n orient: 'bottom',\r\n tickSize: 10,\r\n tickPadding: 40,\r\n tickRotation: 270,\r\n format: (tick) => moment(tick).format(graphDateFormat),\r\n }}\r\n tooltip={CustomTooltip}\r\n onMouseEnter={handleHover}\r\n onMouseMove={handleHover}\r\n onMouseLeave={handleHover}\r\n axisLeft={{\r\n orient: 'left',\r\n tickSize: 5,\r\n tickPadding: 5,\r\n tickRotation: 0,\r\n legend: `${t('graph.fuelLevel')} [${t('graph.%')}]`,\r\n legendOffset: -40,\r\n legendPosition: 'middle',\r\n }}\r\n enableGridX={false}\r\n enableCrosshair={false}\r\n pointSize={2}\r\n pointBorderWidth={2}\r\n pointBorderColor={{ from: 'serieColor' }}\r\n pointLabel=\"x\"\r\n pointLabelYOffset={-12}\r\n useMesh={true}\r\n legends={[\r\n {\r\n anchor: isSmallScreen ? 'bottom-right' : 'bottom',\r\n direction: isSmallScreen ? 'column' : 'row',\r\n justify: false,\r\n translateX: 0,\r\n translateY: isSmallScreen ? 140 : 85,\r\n itemsSpacing: isSmallScreen ? 0 : 10,\r\n itemDirection: 'left-to-right',\r\n itemWidth: isSmallScreen ? 200 : 150,\r\n itemHeight: 20,\r\n itemOpacity: 0.75,\r\n itemTextColor: '#fff',\r\n symbolSize: 12,\r\n symbolShape: 'circle',\r\n symbolBorderColor: 'rgba(0, 0, 0, .5)',\r\n effects: [\r\n {\r\n on: 'hover',\r\n style: {\r\n itemBackground: 'rgba(0, 0, 0, .03)',\r\n itemOpacity: 1,\r\n },\r\n },\r\n ],\r\n },\r\n ]}\r\n />\r\n
\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 Skeleton from '@material-ui/lab/Skeleton';\r\n\r\nexport default function SkeletonLoaderCardSmall() {\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","import React from 'react';\r\nimport { ResponsivePie } from '@nivo/pie';\r\nimport { chartColors, themeColors } from '../../../constants';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Card,\r\n CardContent,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\nimport { IReduxState } from '../../../types';\r\nimport SkeletonLoaderCardSmall from '../SkeletonLoaderCardSmall';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n height: 500,\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n },\r\n cardContent: {\r\n height: '100%',\r\n [theme.breakpoints.up('md')]: {\r\n padding: `${theme.spacing(2)}px 0`,\r\n },\r\n },\r\n actionsArena: {\r\n position: 'relative',\r\n height: '100%',\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-evenly',\r\n alignItems: 'center',\r\n [theme.breakpoints.up('md')]: {\r\n paddingTop: theme.spacing(4),\r\n justifyContent: 'start',\r\n },\r\n },\r\n lastUpdate: {\r\n position: 'absolute',\r\n left: theme.spacing(1),\r\n top: 0,\r\n color: themeColors.white,\r\n },\r\n title: {\r\n marginTop: theme.spacing(2),\r\n },\r\n gaugesWrapper: {\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n gaugeWrapper: {\r\n height: 175,\r\n width: 200,\r\n },\r\n noData: {\r\n height: 100,\r\n width: 200,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n })\r\n);\r\n\r\nexport default function FuelGraphGauges() {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const averageFuelLevels = useSelector(\r\n (state: IReduxState) => state.machineDetails.averageFuelLevels\r\n );\r\n const isFetchingTelemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.isFetchingTelemtry\r\n );\r\n const lastFuelLevel = !!averageFuelLevels.fuelLevel\r\n ? averageFuelLevels.fuelLevel.toFixed(2)\r\n : null;\r\n const lastAdBlueLevel = !!averageFuelLevels.adBlueLevel\r\n ? averageFuelLevels.adBlueLevel.toFixed(2)\r\n : null;\r\n\r\n const dataDiesel = [\r\n {\r\n id: 'empty',\r\n color: themeColors.darkGray,\r\n value: !!lastFuelLevel ? 100 - +lastFuelLevel : 0,\r\n label: 'empty',\r\n },\r\n {\r\n id: 'diesel',\r\n color: chartColors.deepPurple,\r\n value: !!lastFuelLevel ? +lastFuelLevel : 100,\r\n label: 'diesel',\r\n },\r\n ];\r\n const dataAdblue = [\r\n {\r\n id: 'empty',\r\n color: themeColors.darkGray,\r\n value: !!lastAdBlueLevel ? 100 - +lastAdBlueLevel : 0,\r\n label: 'empty',\r\n },\r\n {\r\n id: 'adblue',\r\n color: chartColors.blue,\r\n value: !!lastAdBlueLevel ? +lastAdBlueLevel : 100,\r\n label: 'adblue',\r\n },\r\n ];\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {!isFetchingTelemetry ? (\r\n \r\n \r\n {`${t('graph.lastReceivedValue')}: ${\r\n !!averageFuelLevels.timestamp\r\n ? moment\r\n .utc(averageFuelLevels.timestamp)\r\n .local()\r\n .format(`DD.MM.YYYY HH:mm`)\r\n : '-'\r\n }`}\r\n \r\n \r\n {t('graph.averageFuelLevels')}\r\n \r\n {!!averageFuelLevels ? (\r\n
\r\n {lastFuelLevel !== null ? (\r\n
\r\n d.color}\r\n borderColor={{\r\n from: 'color',\r\n modifiers: [['darker', 0.6]],\r\n }}\r\n slicesLabelsSkipAngle={10}\r\n slicesLabelsTextColor={themeColors.white}\r\n animate={true}\r\n motionStiffness={90}\r\n motionDamping={15}\r\n />\r\n \r\n {`${lastFuelLevel} % ${t('graph.diesel')}`}\r\n \r\n
\r\n ) : (\r\n
\r\n \r\n {`${t('graph.noData')} - ${t('graph.diesel')}`}\r\n \r\n
\r\n )}\r\n {lastAdBlueLevel !== null ? (\r\n
\r\n d.color}\r\n borderColor={{\r\n from: 'color',\r\n modifiers: [['darker', 0.6]],\r\n }}\r\n slicesLabelsSkipAngle={10}\r\n slicesLabelsTextColor={themeColors.white}\r\n animate={true}\r\n motionStiffness={90}\r\n motionDamping={15}\r\n />\r\n \r\n {`${lastAdBlueLevel} % ${t('graph.adblue')}`}\r\n \r\n
\r\n ) : (\r\n
\r\n \r\n {`${t('graph.noData')} - ${t('graph.adblue')}`}\r\n \r\n
\r\n )}\r\n
\r\n ) : (\r\n \r\n {t('graph.noData')}\r\n \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 DateFnsUtils from '@date-io/moment';\r\nimport {\r\n MuiPickersUtilsProvider,\r\n KeyboardDateTimePicker,\r\n} from '@material-ui/pickers';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { IReduxState } from '../../types';\r\nimport {\r\n updateStartDate,\r\n updateEndDate,\r\n updateMachineTelemetryData,\r\n fetchMachineDetails,\r\n} from '../../actions/machineDetailsActions';\r\nimport {\r\n Button,\r\n makeStyles,\r\n Theme,\r\n Card,\r\n CardContent,\r\n CircularProgress,\r\n} from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport GetAppIcon from '@material-ui/icons/GetApp';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { useWindowSize } from '../useWindowSize';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n [theme.breakpoints.up('xs')]: {\r\n marginBottom: `${theme.spacing(2)}px`,\r\n },\r\n [theme.breakpoints.up('md')]: {\r\n margin: `0 ${theme.spacing(2)}px`,\r\n },\r\n },\r\n cardContent: {\r\n margin: `0 ${theme.spacing(1)}px`,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n [theme.breakpoints.up('sm')]: {\r\n flexDirection: 'row',\r\n },\r\n justifyContent: 'space-between',\r\n height: '100%',\r\n padding: 0,\r\n paddingBottom: 0,\r\n },\r\n datePickerWrapper: {\r\n display: 'flex',\r\n justifyContent: 'space-evenly',\r\n alignItems: 'center',\r\n flexDirection: 'row',\r\n padding: 0,\r\n },\r\n datePicker: {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n buttonWrapper: {\r\n marginBottom: `${theme.spacing(2)}px`,\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'flex',\r\n margin: `0 ${theme.spacing(2)}px`,\r\n },\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n updateButtonWrapper: {\r\n position: 'relative',\r\n },\r\n updateButtonProgress: {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n}));\r\n\r\ninterface IProps {\r\n onCreateReport: any;\r\n}\r\n\r\nexport default function GraphControls(props: IProps) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const { t } = useTranslation();\r\n const size = useWindowSize();\r\n const startDate = useSelector(\r\n (state: IReduxState) => state.machineDetails.search.startDate\r\n );\r\n const endDate = useSelector(\r\n (state: IReduxState) => state.machineDetails.search.endDate\r\n );\r\n const isFetchingTelemtry = useSelector(\r\n (state: IReduxState) => state.machineDetails.isFetchingTelemtry\r\n );\r\n const machineId = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine.id\r\n );\r\n\r\n const isSmallScreen =\r\n size.width !== undefined && size.width > 600 && size.width < 800\r\n ? true\r\n : false;\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n dispatch(updateStartDate(date))}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n strictCompareDates\r\n disableFuture \r\n />\r\n dispatch(updateEndDate(date))}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date',\r\n }}\r\n strictCompareDates\r\n disableFuture\r\n />\r\n \r\n
\r\n }\r\n disabled={isFetchingTelemtry}\r\n onClick={() =>\r\n {\r\n // Update der Daten\r\n dispatch(fetchMachineDetails(machineId, endDate));\r\n dispatch(updateMachineTelemetryData(startDate, endDate, machineId));\r\n }\r\n }\r\n >\r\n {size.width !== undefined &&\r\n size.width > 700 &&\r\n t('graph.update')}\r\n \r\n {isFetchingTelemtry && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n }\r\n disabled={!!isFetchingTelemtry ? true : false}\r\n onClick={() => props.onCreateReport()}\r\n >\r\n {t('report.report')}\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n","import React, { useCallback, useState } from 'react';\r\nimport { ResponsiveLine } from '@nivo/line';\r\nimport { chartColors, sensorInterval, themeColors } from '../../../constants';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Card,\r\n CardContent,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\nimport { IReduxState, IChartProps, ISampledTelemetry } from '../../../types';\r\nimport { IPoint } from '../../../types';\r\nimport { useWindowSize } from '../../useWindowSize';\r\nimport SkeletonLoaderGraph from '../SkeletonLoaderGraph';\r\nimport { ActivePointLayer } from '../../ActivePointLayer';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n height: 500,\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n },\r\n cardContent: {\r\n height: '100%',\r\n },\r\n actionsArena: {\r\n height: '100%',\r\n paddingTop: 0,\r\n position: 'relative',\r\n },\r\n tooltipWrapper: {\r\n position: 'absolute',\r\n background: themeColors.white,\r\n opacity: 0.9,\r\n padding: theme.spacing(2),\r\n paddingRight: 0,\r\n color: theme.palette.secondary.main,\r\n zIndex: 100,\r\n top: 20,\r\n left: -50,\r\n [theme.breakpoints.up('sm')]: {\r\n width: 160,\r\n top: 20,\r\n left: -70,\r\n },\r\n },\r\n tooltipLabel: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n center: {\r\n display: 'flex',\r\n height: '100%',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n title: {\r\n position: 'absolute',\r\n width: '100%',\r\n top: theme.spacing(2),\r\n },\r\n })\r\n);\r\n\r\nexport default function EngineUtilizationLine(props: IChartProps) {\r\n const classes = useStyles();\r\n const { t } = useTranslation(['translation']);\r\n const size = useWindowSize();\r\n const isHybrid = useSelector(\r\n (state: IReduxState) =>\r\n !!state.machineDetails.machine.telemetrySnapshot?.isHybrid\r\n );\r\n\r\n let isSmallScreen = size.width !== undefined && size.width < 500;\r\n const { isPdfReport } = props;\r\n // Set isSmallScreen to false for the charts used in the PDF report\r\n isSmallScreen = isPdfReport === true ? false : isSmallScreen;\r\n\r\n const graphMargin = { top: 50, right: 80, bottom: 100, left: 50 };\r\n const graphMarginMobile = { top: 25, right: 25, bottom: 150, left: 50 };\r\n\r\n const telemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.telemetry\r\n );\r\n const telemetryData: any = !!telemetry ? telemetry : [];\r\n const isFetchingTelemetry: boolean = useSelector(\r\n (state: IReduxState) => state.machineDetails.isFetchingTelemtry\r\n );\r\n // const graphTickValues = useSelector((state: IReduxState) => state.machineDetails.graphTickValues);\r\n const graphDateFormat = useSelector(\r\n (state: IReduxState) => state.machineDetails.graphDateFormat\r\n );\r\n\r\n // animate point on hover\r\n const [current, setCurrent] = useState(null);\r\n const handleHover = useCallback(\r\n (point) => {\r\n setCurrent(point);\r\n },\r\n [setCurrent]\r\n );\r\n // default: false\r\n const isJawCrusher = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine.machineType.isJawCrusher ?? false\r\n ) \r\n\r\n // #35067: Change Text Average Engine Utilisation to Average Engine Load : Diesel entfernen\r\n const dieselEngineLoadsTxt: string = t('graph.engineLoads');\r\n //const dieselEngineUtilizationTxt = t('graph.dieselEngineUtilization');\r\n const electricDriveLoadsTxt = t('graph.electricDriveLoads');\r\n //const electricDriveUtilizationTxt = t('graph.electricDriveUtilization');\r\n const engineLoadsTxt = t('graph.engineLoads');\r\n //const engineUtilizationTxt = t('graph.engineUtilization');\r\n //const averageEnergyUtilizationTxt = t('graph.averageEnergyUtilization');\r\n const averageEnergyLoadsTxt = t('graph.averageEnergyLoads');\r\n //const averageEngineUtilizationTxt = t('graph.averageEngineUtilization');\r\n const averageEngineLoadsTxt = t('graph.averageEngineLoads');\r\n\r\n let chartData: any[];\r\n if (isHybrid) {\r\n chartData = [\r\n {\r\n id: `${dieselEngineLoadsTxt}`,\r\n color: chartColors.rmYellow,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.percentageLoadAtCurrentSpeed !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds > sensorInterval.percentLoad) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n const utilization = !!item.percentageLoadAtCurrentSpeed\r\n ? item.percentageLoadAtCurrentSpeed * 100\r\n : item.percentageLoadAtCurrentSpeed;\r\n return {\r\n x: moment(item.timestamp)\r\n .utc()\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y: utilization,\r\n };\r\n }),\r\n },\r\n {\r\n id: `${electricDriveLoadsTxt}`,\r\n color: chartColors.electricBlue,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.crusherDriveCurrentLoad !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds >\r\n sensorInterval.currentLoadCrusherDrive) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n const utilization = !!item.crusherDriveCurrentLoad\r\n ? item.crusherDriveCurrentLoad\r\n : item.crusherDriveCurrentLoad;\r\n return {\r\n x: moment(item.timestamp)\r\n .utc()\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y: utilization,\r\n };\r\n }),\r\n },\r\n ];\r\n } else {\r\n chartData = [\r\n {\r\n id: `${engineLoadsTxt}`,\r\n color: chartColors.rmYellow,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.percentageLoadAtCurrentSpeed !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds > sensorInterval.percentLoad) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n const utilization = !!item.percentageLoadAtCurrentSpeed\r\n ? item.percentageLoadAtCurrentSpeed * 100\r\n : item.percentageLoadAtCurrentSpeed;\r\n return {\r\n x: moment(item.timestamp)\r\n .utc()\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y: utilization,\r\n };\r\n }),\r\n },\r\n ];\r\n }\r\n\r\n const CustomTooltip = (pointData: IPoint) => {\r\n const { data, serieId, serieColor } = pointData.point;\r\n const utilization: number = +data.yFormatted;\r\n return (\r\n
\r\n
\r\n
\r\n \r\n {serieId}\r\n \r\n
\r\n
\r\n {t('graph.date')}: \r\n {moment(data.x).format('DD.MM.YYYY')}\r\n
\r\n
\r\n {t('graph.time')}: \r\n {moment(data.x).format('HH:mm:ss')}\r\n
\r\n
\r\n {`${t(\r\n 'graph.utilization'\r\n )}: `}\r\n {utilization.toFixed(2)} %\r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {!isFetchingTelemetry ? (\r\n \r\n {telemetryData.length === 0 ||\r\n telemetryData.percentageLoadAtCurrentSpeed === null ? (\r\n
\r\n \r\n {isHybrid\r\n ? averageEnergyLoadsTxt\r\n : averageEngineLoadsTxt\r\n }\r\n \r\n \r\n {t('graph.noData')}\r\n \r\n
\r\n ) : (\r\n \r\n {!isSmallScreen && (\r\n
\r\n \r\n {averageEnergyLoadsTxt}\r\n \r\n
\r\n )}\r\n d.color}\r\n lineWidth={2}\r\n margin={isSmallScreen ? graphMarginMobile : graphMargin}\r\n xScale={{\r\n type: 'time',\r\n format: '%Y-%m-%d %H:%M:%S.%L',\r\n precision: 'millisecond',\r\n useUTC: false,\r\n }}\r\n xFormat=\"time:%Y-%m-%d %H:%M:%S.%L\"\r\n yScale={{ type: 'linear', min: 0, max: 130 }}\r\n axisTop={null}\r\n axisRight={null}\r\n enablePoints={true}\r\n enableArea={true}\r\n curve=\"step\"\r\n //@ts-ignore\r\n layers={[\r\n 'grid',\r\n 'markers',\r\n 'axes',\r\n 'areas',\r\n 'lines',\r\n 'slices',\r\n 'points',\r\n 'mesh',\r\n 'legends',\r\n () => ,\r\n ]}\r\n //@ts-ignore\r\n axisBottom={{\r\n orient: 'bottom',\r\n tickSize: 10,\r\n tickPadding: 40,\r\n tickRotation: 270,\r\n legendPosition: 'middle',\r\n format: (tick) => moment(tick).format(graphDateFormat),\r\n // tickValues: graphTickValues,\r\n }}\r\n tooltip={CustomTooltip}\r\n onMouseEnter={handleHover}\r\n onMouseMove={handleHover}\r\n onMouseLeave={handleHover}\r\n axisLeft={{\r\n orient: 'left',\r\n tickSize: 5,\r\n tickPadding: 5,\r\n tickRotation: 0,\r\n legend: `${t('graph.engineUtilization')} [${t(\r\n 'graph.%'\r\n )}]`,\r\n legendOffset: -40,\r\n legendPosition: 'middle',\r\n }}\r\n enableGridX={false}\r\n enableCrosshair={false}\r\n pointSize={2}\r\n pointBorderWidth={2}\r\n pointBorderColor={{ from: 'serieColor' }}\r\n pointLabel=\"x\"\r\n pointLabelYOffset={-12}\r\n useMesh={true}\r\n legends={[\r\n {\r\n anchor: isSmallScreen ? 'bottom-right' : 'bottom',\r\n direction: isSmallScreen ? 'column' : 'row',\r\n justify: false,\r\n translateX: 0,\r\n translateY: isSmallScreen ? 140 : 85,\r\n itemsSpacing: isSmallScreen ? 0 : 10,\r\n itemDirection: 'left-to-right',\r\n //itemWidth: isSmallScreen ? 200 : 150,\r\n // Abstand vergrößert!\r\n itemWidth: isSmallScreen ? 250 : 200,\r\n itemHeight: 20,\r\n itemOpacity: 0.75,\r\n itemTextColor: '#fff',\r\n symbolSize: 12,\r\n symbolShape: 'circle',\r\n symbolBorderColor: 'rgba(0, 0, 0, .5)',\r\n effects: [\r\n {\r\n on: 'hover',\r\n style: {\r\n itemBackground: 'rgba(0, 0, 0, .03)',\r\n itemOpacity: 1,\r\n },\r\n },\r\n ],\r\n },\r\n ]}\r\n />\r\n
\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 { makeStyles, Theme, createStyles, Typography } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { IReduxState } from '../../types';\r\nimport { useSelector } from 'react-redux';\r\nimport { chartColors } from '../../constants';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n title: {\r\n marginTop: theme.spacing(4),\r\n marginBottom: theme.spacing(2),\r\n },\r\n normalFont: {\r\n fontSize: 'unset',\r\n },\r\n smallFont: {\r\n fontSize: 12,\r\n },\r\n })\r\n);\r\n\r\ninterface IProps {\r\n isPdfReport?: boolean;\r\n isHybrid?: boolean;\r\n}\r\n\r\n// Total hours in telemetry time range\r\nexport default function TotalHours(props: IProps) {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const { isHybrid, isPdfReport } = props;\r\n\r\n const {\r\n totalHoursOfCrusherOperation,\r\n totalHoursOfEngineOperation,\r\n totalHoursOfInternalPowerSupply,\r\n totalHoursOfExternalPowerSupply,\r\n } = useSelector((state: IReduxState) => state.machineDetails);\r\n\r\n const isThirdParty = useSelector(\r\n (state: IReduxState) =>\r\n state.machineDetails.machine.machineType.isThirdParty\r\n );\r\n\r\n return (\r\n
\r\n \r\n {t('graph.totalHours')}\r\n \r\n {!isThirdParty && (\r\n \r\n {`${t('graph.crusherOperationTotal')}: `}\r\n \r\n {totalHoursOfCrusherOperation !== null\r\n ? `${totalHoursOfCrusherOperation.toFixed(2)} ${t('graph.h')}`\r\n : t('graph.noData')}\r\n \r\n \r\n )}\r\n \r\n {`${t('graph.engineOperationTotal')}: `}\r\n \r\n {totalHoursOfEngineOperation !== null\r\n ? `${totalHoursOfEngineOperation.toFixed(2)} ${t('graph.h')}`\r\n : t('graph.noData')}\r\n \r\n \r\n {isHybrid && (\r\n
\r\n {/* \r\n {`${t('graph.externalPowerSupply')}: `}\r\n \r\n {totalHoursOfExternalPowerSupply !== null\r\n ? `${totalHoursOfExternalPowerSupply.toFixed(2)} ${t(\r\n 'graph.h'\r\n )}`\r\n : t('graph.noData')}\r\n \r\n */}\r\n\r\n {/* \r\n {`${t('graph.internalPowerSupply')}: `}\r\n \r\n {totalHoursOfInternalPowerSupply !== null\r\n ? `${totalHoursOfInternalPowerSupply.toFixed(2)} ${t(\r\n 'graph.h'\r\n )}`\r\n : t('graph.noData')}\r\n \r\n */}\r\n
\r\n )}\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { ResponsivePie } from '@nivo/pie';\r\nimport { chartColors, themeColors } from '../../../constants';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Card,\r\n CardContent,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\nimport { IReduxState } from '../../../types';\r\nimport SkeletonLoaderCardSmall from '../SkeletonLoaderCardSmall';\r\nimport TotalHours from '../TotalHours';\r\nimport { log } from 'console';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n height: 500,\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n },\r\n cardContent: {\r\n height: '100%',\r\n [theme.breakpoints.up('md')]: {\r\n padding: `${theme.spacing(2)}px 0`,\r\n },\r\n },\r\n actionsArena: {\r\n position: 'relative',\r\n height: '100%',\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n [theme.breakpoints.up('md')]: {\r\n paddingTop: theme.spacing(4),\r\n justifyContent: 'start',\r\n },\r\n },\r\n lastUpdate: {\r\n position: 'absolute',\r\n left: theme.spacing(1),\r\n top: 0,\r\n color: themeColors.white,\r\n },\r\n title: {\r\n paddingTop: '1rem',\r\n marginBottom: '-1rem',\r\n },\r\n gaugeWrapper: {\r\n height: 175,\r\n width: 200,\r\n },\r\n })\r\n);\r\n\r\nexport default function EngineUtilizationGauge() {\r\n const classes = useStyles();\r\n const { t } = useTranslation(['translation']);\r\n const averageEngineUtilization = useSelector(\r\n (state: IReduxState) => state.machineDetails.averageEngineUtilization\r\n );\r\n\r\n const lastEngineUtilization = !!averageEngineUtilization.value\r\n ? averageEngineUtilization.value.toFixed(2)\r\n : 0;\r\n const isFetchingTelemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.isFetchingTelemtry\r\n );\r\n // default: false\r\n const isJawCrusher = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine.machineType.isJawCrusher ?? false\r\n )\r\n\r\n // console.log(\"***************************************************************************\");\r\n // console.log(\"In EngineUtilizationGauge\");\r\n // console.log(\"***************************************************************************\");\r\n\r\n // console.log(\"updatedAt\");\r\n // console.log(\r\n // !!averageEngineUtilization.timestamp\r\n // ? moment\r\n // .utc(averageEngineUtilization.timestamp)\r\n // .local()\r\n // .format(`DD.MM.YYYY HH:mm`)\r\n // : '-'\r\n // );\r\n\r\n const averageEngineLoadsTxt = t('graph.averageEngineLoads');\r\n const averageEnergyUtilizationTxt = t('graph.averageEnergyUtilization');\r\n const loadsTxt = t('graph.loads');\r\n const utilizationTxt = t('graph.utilization');\r\n\r\n // console.log(\"averageEngineLoadsTxt : \" + averageEngineLoadsTxt);\r\n // console.log(\"averageEnergyUtilizationTxt : \" + averageEnergyUtilizationTxt);\r\n // console.log(\"loadsTxt : \" + loadsTxt);\r\n // console.log(\"utilizationTxt : \" + utilizationTxt);\r\n // console.log(t('graph.averageEngineLoads'));\r\n // console.log(t('graph.averageEnergyUtilizationTxt'));\r\n\r\n const graphData = [\r\n {\r\n id: 'empty',\r\n color: themeColors.darkGray,\r\n value: 100 - +lastEngineUtilization,\r\n label: 'empty',\r\n },\r\n {\r\n id: 'averageEngineUtilization',\r\n color: chartColors.rmYellow,\r\n value: +lastEngineUtilization,\r\n label: 'Engine Utilization',\r\n },\r\n ];\r\n\r\n const graphDataLoads = [\r\n {\r\n id: 'empty',\r\n color: themeColors.darkGray,\r\n value: 100 - +lastEngineUtilization,\r\n label: 'empty',\r\n },\r\n {\r\n id: 'averageEngineUtilization',\r\n color: chartColors.rmYellow,\r\n value: +lastEngineUtilization,\r\n label: 'Engine Loads',\r\n },\r\n ];\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {!isFetchingTelemetry ? (\r\n \r\n \r\n {`${t('graph.lastReceivedValue')}: ${\r\n !!averageEngineUtilization.timestamp\r\n ? moment\r\n .utc(averageEngineUtilization.timestamp)\r\n .local()\r\n .format(`DD.MM.YYYY HH:mm`)\r\n : '-'\r\n }`}\r\n \r\n \r\n {averageEnergyUtilizationTxt}\r\n \r\n {averageEngineUtilization.value !== null ? (\r\n \r\n
\r\n d.color}\r\n borderColor={{\r\n from: 'color',\r\n modifiers: [['darker', 0.6]],\r\n }}\r\n slicesLabelsSkipAngle={10}\r\n slicesLabelsTextColor={themeColors.white}\r\n animate={true}\r\n motionStiffness={90}\r\n motionDamping={15}\r\n />\r\n
\r\n \r\n {graphData[1].value} % \r\n {/* {isJawCrusher ? loadsTxt : utilizationTxt} */}\r\n {loadsTxt}\r\n \r\n
\r\n ) : (\r\n \r\n {t('graph.noData')}\r\n \r\n )}\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, { useCallback, useState } from 'react';\r\nimport { ResponsiveLine } from '@nivo/line';\r\nimport { chartColors, sensorInterval, themeColors } from '../../../constants';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Card,\r\n CardContent,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\nimport { IReduxState, ISampledTelemetry, IChartProps } from '../../../types';\r\nimport { IPoint } from '../../../types';\r\nimport { useWindowSize } from '../../useWindowSize';\r\nimport SkeletonLoaderGraph from '../SkeletonLoaderGraph';\r\nimport { ActivePointLayer } from '../../ActivePointLayer';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n height: 500,\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n },\r\n cardContent: {\r\n height: '100%',\r\n },\r\n actionsArena: {\r\n height: '100%',\r\n overflow: 'visible',\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n position: 'relative',\r\n },\r\n tooltipWrapper: {\r\n position: 'absolute',\r\n background: themeColors.white,\r\n opacity: 0.9,\r\n padding: theme.spacing(1),\r\n color: theme.palette.secondary.main,\r\n zIndex: 100,\r\n top: 20,\r\n left: -60,\r\n [theme.breakpoints.up('sm')]: {\r\n padding: theme.spacing(2),\r\n paddingRight: 0,\r\n width: 160,\r\n top: 20,\r\n left: -70,\r\n },\r\n },\r\n tooltipLabel: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n center: {\r\n display: 'flex',\r\n height: '100%',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n title: {\r\n position: 'absolute',\r\n width: '100%',\r\n top: theme.spacing(2),\r\n },\r\n })\r\n);\r\n\r\nexport default function FuelConsumptionLine(props: IChartProps) {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const size = useWindowSize();\r\n\r\n let isSmallScreen = size.width !== undefined && size.width < 500;\r\n const { isPdfReport } = props;\r\n // Set isSmallScreen to false for the charts used in the PDF report\r\n isSmallScreen = isPdfReport === true ? false : isSmallScreen;\r\n\r\n const graphMargin = { top: 50, right: 80, bottom: 100, left: 50 };\r\n const graphMarginMobile = { top: 25, right: 25, bottom: 150, left: 50 };\r\n\r\n const isFetchingTelemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.isFetchingTelemtry\r\n );\r\n const isHybrid = useSelector(\r\n (state: IReduxState) =>\r\n !!state.machineDetails.machine.telemetrySnapshot?.isHybrid\r\n );\r\n const telemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.telemetry\r\n );\r\n const telemetryData: ISampledTelemetry | any = !!telemetry ? telemetry : [];\r\n const graphDateFormat = useSelector(\r\n (state: IReduxState) => state.machineDetails.graphDateFormat\r\n );\r\n\r\n // animate point on hover\r\n const [current, setCurrent] = useState(null);\r\n const handleHover = useCallback(\r\n (point) => {\r\n setCurrent(point);\r\n },\r\n [setCurrent]\r\n );\r\n\r\n const filteredEngineFuelRateData = telemetryData.filter(\r\n (item: ISampledTelemetry) => item.engineFuelRate !== null\r\n );\r\n\r\n const engineFuelRateUnit = filteredEngineFuelRateData.length\r\n ? filteredEngineFuelRateData[0].engineFuelRate?.unit\r\n : t('graph.l/t');\r\n\r\n const filteredMainDischargeConveyorFuelRateData = telemetryData.filter(\r\n (item: ISampledTelemetry) => item.mainDischargeConveyorFuelRate !== null\r\n );\r\n\r\n const mainDischargeConveyorFuelRateUnit = filteredMainDischargeConveyorFuelRateData.length\r\n ? filteredMainDischargeConveyorFuelRateData[0].mainDischargeConveyorFuelRate\r\n ?.unit\r\n : t('graph.l/t');\r\n\r\n const filteredSideDischargeConveyorFuelRateData = telemetryData.filter(\r\n (item: ISampledTelemetry) => item.sideDischargeConveyorFuelRate !== null\r\n );\r\n const sideDischargeConveyorFuelRateUnit = filteredSideDischargeConveyorFuelRateData.length\r\n ? filteredSideDischargeConveyorFuelRateData[0].sideDischargeConveyorFuelRate\r\n ?.unit\r\n : t('graph.l/t');\r\n\r\n const chartData = [\r\n {\r\n id: `${t('graph.fuelConsumption')} [${engineFuelRateUnit}]`,\r\n color: chartColors.purple,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.engineFuelRate !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds > sensorInterval.engineFuelRate) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n return {\r\n x: moment(item.timestamp)\r\n .utc()\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y:\r\n item.engineFuelRate !== null && item.engineFuelRate?.value\r\n ? Math.max(item.engineFuelRate.value, 0.01).toFixed(2)\r\n : null,\r\n };\r\n }),\r\n },\r\n {\r\n id: `${t(\r\n 'graph.mainDischargeConveyorShort'\r\n )} [${mainDischargeConveyorFuelRateUnit}]`,\r\n color: chartColors.cyan,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry) =>\r\n (!item.isEmpty && item.mainDischargeConveyorFuelRate !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds > sensorInterval.engineFuelRate)\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n return {\r\n x: moment(item.timestamp)\r\n .utc()\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y:\r\n item.mainDischargeConveyorFuelRate !== null &&\r\n item.mainDischargeConveyorFuelRate?.value\r\n ? Math.max(\r\n item.mainDischargeConveyorFuelRate.value,\r\n 0.01\r\n ).toFixed(2)\r\n : null,\r\n };\r\n }),\r\n },\r\n {\r\n id: `${t(\r\n 'graph.secondDischargeConveyorShort'\r\n )} [${sideDischargeConveyorFuelRateUnit}]`,\r\n color: chartColors.green,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.sideDischargeConveyorFuelRate !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds > sensorInterval.engineFuelRate) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n return {\r\n x: moment(item.timestamp)\r\n .utc()\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y:\r\n item.sideDischargeConveyorFuelRate !== null &&\r\n item.sideDischargeConveyorFuelRate?.value\r\n ? Math.max(\r\n item.sideDischargeConveyorFuelRate.value,\r\n 0.01\r\n ).toFixed(2)\r\n : null,\r\n };\r\n }),\r\n },\r\n ];\r\n\r\n const CustomTooltip = (pointData: IPoint) => {\r\n const { data, serieId, serieColor } = pointData.point;\r\n const unit = serieId.toString().startsWith(t('graph.fuelConsumption'))\r\n ? engineFuelRateUnit\r\n : mainDischargeConveyorFuelRateUnit;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n {serieId}\r\n \r\n
\r\n
\r\n {t('graph.date')}: \r\n {moment(data.x).format('DD.MM.YYYY')}\r\n
\r\n
\r\n {t('graph.time')}: \r\n {moment(data.x).format('HH:mm:ss')}\r\n
\r\n
\r\n {t('graph.value')}: \r\n \r\n {data.y} {unit}\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {!isFetchingTelemetry ? (\r\n \r\n {telemetryData.length === 0 ||\r\n (telemetryData.engineFuelRate === null &&\r\n telemetryData.mainDischargeConveyorFuelRate === null &&\r\n telemetryData.sideDischargeConveyorFuelRate === null) ? (\r\n
\r\n \r\n {t('graph.fuelConsumption')}\r\n \r\n \r\n {t('graph.noData')}\r\n \r\n
\r\n ) : (\r\n \r\n {!isSmallScreen && (\r\n
\r\n \r\n {t('graph.fuelConsumption')}\r\n \r\n
\r\n )}\r\n d.color}\r\n lineWidth={2}\r\n margin={isSmallScreen ? graphMarginMobile : graphMargin}\r\n xScale={{\r\n type: 'time',\r\n format: '%Y-%m-%d %H:%M:%S.%L',\r\n precision: 'millisecond',\r\n useUTC: false,\r\n }}\r\n xFormat=\"time:%Y-%m-%d %H:%M:%S.%L\"\r\n gridYValues={[0.01, 0.05, 0.1, 0.5, 1, 5, 10, 50, 100]}\r\n yScale={{ type: 'log', min: 0.01, max: 100, base: 10 }}\r\n curve=\"monotoneX\"\r\n axisTop={null}\r\n axisRight={null}\r\n enablePoints={true}\r\n layers={[\r\n 'grid',\r\n 'markers',\r\n 'axes',\r\n 'areas',\r\n 'lines',\r\n 'slices',\r\n 'points',\r\n 'mesh',\r\n 'legends',\r\n () => ,\r\n ]}\r\n //@ts-ignore\r\n axisBottom={{\r\n orient: 'bottom',\r\n tickSize: 10,\r\n tickPadding: 40,\r\n tickRotation: 270,\r\n legendPosition: 'middle',\r\n format: (tick) => moment(tick).format(graphDateFormat),\r\n // tickValues: graphTickValues,\r\n }}\r\n tooltip={CustomTooltip}\r\n onMouseEnter={handleHover}\r\n onMouseMove={handleHover}\r\n onMouseLeave={handleHover}\r\n axisLeft={{\r\n orient: 'left',\r\n tickSize: 5,\r\n tickPadding: 5,\r\n tickRotation: 0,\r\n tickValues: [0.01, 0.05, 0.1, 0.5, 1, 5, 10, 50, 100],\r\n legend: `${t('graph.fuelConsumption')}`,\r\n legendOffset: -40,\r\n legendPosition: 'middle',\r\n }}\r\n enableGridX={false}\r\n enableCrosshair={false}\r\n pointSize={2}\r\n pointBorderWidth={2}\r\n pointBorderColor={{ from: 'serieColor' }}\r\n pointLabel=\"x\"\r\n pointLabelYOffset={-12}\r\n useMesh={true}\r\n legends={[\r\n {\r\n anchor: isSmallScreen ? 'bottom-right' : 'bottom',\r\n direction: isSmallScreen ? 'column' : 'row',\r\n justify: false,\r\n translateX: 0,\r\n translateY: isSmallScreen ? 140 : 85,\r\n itemsSpacing: isSmallScreen ? 0 : 10,\r\n itemDirection: 'left-to-right',\r\n itemWidth: isSmallScreen ? 200 : 200,\r\n itemHeight: 20,\r\n itemOpacity: 0.75,\r\n itemTextColor: '#fff',\r\n symbolSize: 12,\r\n symbolShape: 'circle',\r\n symbolBorderColor: 'rgba(0, 0, 0, .5)',\r\n effects: [\r\n {\r\n on: 'hover',\r\n style: {\r\n itemBackground: 'rgba(0, 0, 0, .03)',\r\n itemOpacity: 1,\r\n },\r\n },\r\n ],\r\n },\r\n ]}\r\n />\r\n
\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 { chartColors, themeColors } from '../../../constants';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Card,\r\n CardContent,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\nimport { IChartProps, IReduxState } from '../../../types';\r\nimport SkeletonLoaderCardSmall from '../SkeletonLoaderCardSmall';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n height: 500,\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n },\r\n cardContent: {\r\n height: '100%',\r\n [theme.breakpoints.up('md')]: {\r\n padding: `${theme.spacing(2)}px 0`,\r\n },\r\n },\r\n actionsArena: {\r\n position: 'relative',\r\n height: '100%',\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n [theme.breakpoints.up('md')]: {\r\n paddingTop: theme.spacing(4),\r\n justifyContent: 'start',\r\n },\r\n },\r\n lastUpdate: {\r\n position: 'absolute',\r\n left: theme.spacing(1),\r\n top: 0,\r\n color: themeColors.white,\r\n },\r\n gaugeWrapper: {\r\n height: 175,\r\n width: 200,\r\n },\r\n firstEntry: {\r\n margin: `${theme.spacing(2)}px 0 0 0`,\r\n [theme.breakpoints.up('md')]: {\r\n margin: 0,\r\n },\r\n [theme.breakpoints.up('lg')]: {\r\n margin: `${theme.spacing(2)}px 0 ${theme.spacing(1)}px 0`,\r\n },\r\n },\r\n title: {\r\n marginTop: theme.spacing(2),\r\n },\r\n displayItem: {\r\n margin: theme.spacing(1),\r\n },\r\n display: {\r\n margin: theme.spacing(1),\r\n },\r\n })\r\n);\r\n\r\nexport default function FuelConsumptionDisplay(props: IChartProps) {\r\n const { isPdfReport } = props;\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const isFetchingTelemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.isFetchingTelemtry\r\n );\r\n const isHybrid = useSelector(\r\n (state: IReduxState) =>\r\n !!state.machineDetails.machine.telemetrySnapshot?.isHybrid\r\n );\r\n\r\n const averageFuelConsumption = useSelector(\r\n (state: IReduxState) => state.machineDetails.averageFuelConsumption\r\n );\r\n\r\n const isThirdParty = useSelector(\r\n (state: IReduxState) =>\r\n state.machineDetails.machine.machineType.isThirdParty\r\n );\r\n\r\n const {\r\n engineFuelRate,\r\n engineFuelConsumed,\r\n mainDischargeConveyorFuelRate,\r\n sideDischargeConveyorFuelRate,\r\n } = averageFuelConsumption;\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {!isFetchingTelemetry ? (\r\n \r\n \r\n {`${t('graph.lastReceivedValue')}: ${\r\n !!averageFuelConsumption.timestamp\r\n ? moment\r\n .utc(averageFuelConsumption.timestamp)\r\n .local()\r\n .format(`DD.MM.YYYY HH:mm`)\r\n : '-'\r\n }`}\r\n \r\n \r\n {t('graph.averageFuelConsumption')}\r\n \r\n
\r\n \r\n {t('graph.engine')}\r\n \r\n \r\n {engineFuelRate !== null &&\r\n engineFuelRate.value !== undefined\r\n ? `${engineFuelRate.value.toFixed(2)} ${\r\n engineFuelRate.unit\r\n }`\r\n : t('graph.noData')}\r\n \r\n
\r\n {!isThirdParty && (\r\n <>\r\n
\r\n \r\n {t('graph.mainDischargeConveyor')}\r\n \r\n \r\n {mainDischargeConveyorFuelRate !== null &&\r\n mainDischargeConveyorFuelRate.value !== undefined\r\n ? `${mainDischargeConveyorFuelRate.value.toFixed(\r\n 2\r\n )} ${mainDischargeConveyorFuelRate.unit}`\r\n : t('graph.noData')}\r\n \r\n
\r\n
\r\n \r\n {t('graph.secondDischargeConveyor')}\r\n \r\n \r\n {sideDischargeConveyorFuelRate !== null &&\r\n sideDischargeConveyorFuelRate.value !== undefined\r\n ? `${sideDischargeConveyorFuelRate?.value.toFixed(\r\n 2\r\n )} ${sideDischargeConveyorFuelRate.unit}`\r\n : t('graph.noData')}\r\n \r\n
\r\n \r\n )}\r\n
\r\n
\r\n \r\n {t('graph.engineFuelConsumed')}\r\n \r\n \r\n {engineFuelConsumed !== null &&\r\n engineFuelConsumed.value !== undefined\r\n ? `${engineFuelConsumed.value.toFixed(2)} ${\r\n engineFuelConsumed.unit\r\n }`\r\n : t('graph.noData')}\r\n \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 { chartColors, themeColors } from '../../../constants';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Card,\r\n CardContent,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\nimport { IChartProps, IReduxState } from '../../../types';\r\nimport SkeletonLoaderCardSmall from '../SkeletonLoaderCardSmall';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n height: 500,\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n },\r\n cardContent: {\r\n height: '100%',\r\n [theme.breakpoints.up('md')]: {\r\n padding: `${theme.spacing(2)}px 0`,\r\n },\r\n },\r\n actionsArena: {\r\n position: 'relative',\r\n height: '100%',\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n [theme.breakpoints.up('md')]: {\r\n paddingTop: theme.spacing(4),\r\n justifyContent: 'start',\r\n },\r\n },\r\n lastUpdate: {\r\n position: 'absolute',\r\n left: theme.spacing(1),\r\n top: 0,\r\n color: themeColors.white,\r\n },\r\n gaugeWrapper: {\r\n height: 175,\r\n width: 200,\r\n },\r\n title: {\r\n marginTop: '1rem',\r\n },\r\n titleWrapper: {\r\n margin: `${theme.spacing(2)}px 0 ${theme.spacing(1)}px 0`,\r\n [theme.breakpoints.up('md')]: {\r\n margin: 0,\r\n },\r\n [theme.breakpoints.up('lg')]: {\r\n margin: `${theme.spacing(2)}px 0 ${theme.spacing(1)}px 0`,\r\n },\r\n },\r\n display: {\r\n margin: theme.spacing(1),\r\n },\r\n })\r\n);\r\n\r\nexport default function ThroughputDisplay(props: IChartProps) {\r\n const { isPdfReport } = props;\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const averageThroughputs = useSelector(\r\n (state: IReduxState) => state.machineDetails.averageThroughputs\r\n );\r\n const isFetchingTelemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.isFetchingTelemtry\r\n );\r\n const isHybrid = useSelector(\r\n (state: IReduxState) =>\r\n !!state.machineDetails.machine.telemetrySnapshot?.isHybrid\r\n );\r\n\r\n// default: false\r\nconst isJawCrusher = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine.machineType.isJawCrusher ?? false\r\n)\r\n\r\n// default: 4\r\nconst maxBeltScales = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine.machineType.maxBeltScales ?? 4\r\n)\r\n\r\n\r\n const {\r\n weightLoad1,\r\n weightLoad2,\r\n weightLoad3,\r\n weightLoad4,\r\n } = averageThroughputs;\r\n const totalWeightLoad1 = useSelector(\r\n (state: IReduxState) => state.machineDetails.totalWeightLoad1\r\n );\r\n const totalWeightLoad2 = useSelector(\r\n (state: IReduxState) => state.machineDetails.totalWeightLoad2\r\n );\r\n const totalWeightLoad3 = useSelector(\r\n (state: IReduxState) => state.machineDetails.totalWeightLoad3\r\n );\r\n const totalWeightLoad4 = useSelector(\r\n (state: IReduxState) => state.machineDetails.totalWeightLoad4\r\n );\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {!isFetchingTelemetry ? (\r\n \r\n \r\n {`${t('graph.lastReceivedValue')}: ${\r\n !!averageThroughputs.timestamp\r\n ? moment\r\n .utc(averageThroughputs.timestamp)\r\n .local()\r\n .format(`DD.MM.YYYY HH:mm`)\r\n : '-'\r\n }`}\r\n \r\n \r\n {t('graph.throughput')}\r\n \r\n {!!averageThroughputs ? (\r\n \r\n
\r\n \r\n {t('graph.mainDischargeConveyor')}\r\n \r\n \r\n {`${t('graph.average')}: `}\r\n \r\n {weightLoad1 !== null &&\r\n weightLoad1.value !== undefined\r\n ? `${weightLoad1.value.toFixed(2)} ${\r\n weightLoad1.unit\r\n }`\r\n : t('graph.noData')}\r\n \r\n \r\n \r\n {`${t('graph.total')}: `}\r\n \r\n {totalWeightLoad1 !== null &&\r\n totalWeightLoad1.value !== undefined\r\n ? `${totalWeightLoad1.value.toFixed(2)} ${\r\n totalWeightLoad1.unit\r\n }`\r\n : t('graph.noData')}\r\n \r\n \r\n
\r\n
\r\n \r\n {t('graph.secondDischargeConveyor')}\r\n \r\n \r\n {`${t('graph.average')}: `}\r\n \r\n {weightLoad2 !== null &&\r\n weightLoad2.value !== undefined\r\n ? `${weightLoad2.value.toFixed(2)} ${\r\n weightLoad2.unit\r\n }`\r\n : t('graph.noData')}\r\n \r\n \r\n \r\n {`${t('graph.total')}: `}\r\n \r\n {totalWeightLoad2 !== null &&\r\n totalWeightLoad2.value !== undefined\r\n ? `${totalWeightLoad2.value.toFixed(2)} ${\r\n totalWeightLoad2.unit\r\n }`\r\n : t('graph.noData')}\r\n \r\n \r\n
\r\n {maxBeltScales >= 3 \r\n ? (\r\n
\r\n \r\n {t('graph.thirdDischargeConveyor')}\r\n \r\n \r\n {`${t('graph.average')}: `}\r\n \r\n {weightLoad3 !== null &&\r\n weightLoad3.value !== undefined\r\n ? `${weightLoad3.value.toFixed(2)} ${weightLoad3.unit}`\r\n : t('graph.noData')}\r\n \r\n \r\n \r\n {`${t('graph.total')}: `}\r\n \r\n {totalWeightLoad3 !== null &&\r\n totalWeightLoad3.value !== undefined\r\n ? `${totalWeightLoad3.value.toFixed(2)} ${totalWeightLoad3.unit}`\r\n : t('graph.noData')}\r\n \r\n \r\n
\r\n )\r\n : (
)\r\n }\r\n {maxBeltScales >= 4 \r\n ? (\r\n
\r\n \r\n {t('graph.fourthDischargeConveyor')}\r\n \r\n \r\n {`${t('graph.average')}: `}\r\n \r\n {weightLoad4 !== null &&\r\n weightLoad4.value !== undefined\r\n ? `${weightLoad4.value.toFixed(2)} ${weightLoad4.unit}`\r\n : t('graph.noData')}\r\n \r\n \r\n \r\n {`${t('graph.total')}: `}\r\n \r\n {totalWeightLoad4 !== null &&\r\n totalWeightLoad4.value !== undefined\r\n ? `${totalWeightLoad4.value.toFixed(2)} ${totalWeightLoad4.unit}`\r\n : t('graph.noData')}\r\n \r\n \r\n
\r\n )\r\n : (
)\r\n }\r\n
\r\n ) : (\r\n \r\n {t('graph.noData')}\r\n \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, { useCallback, useState } from 'react';\r\nimport { ResponsiveLine } from '@nivo/line';\r\nimport { chartColors, sensorInterval, themeColors } from '../../../constants';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Card,\r\n CardContent,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport moment, { RFC_2822 } from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\nimport { IReduxState, ISampledTelemetry, IChartProps } from '../../../types';\r\nimport { IPoint } from '../../../types';\r\nimport { useWindowSize } from '../../useWindowSize';\r\nimport SkeletonLoaderGraph from '../SkeletonLoaderGraph';\r\nimport { ActivePointLayer } from '../../ActivePointLayer';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n height: 500,\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n },\r\n cardContent: {\r\n height: '100%',\r\n },\r\n actionsArena: {\r\n position: 'relative',\r\n height: '100%',\r\n paddingTop: 0,\r\n },\r\n tooltipWrapper: {\r\n position: 'absolute',\r\n background: themeColors.white,\r\n opacity: 0.9,\r\n padding: theme.spacing(1),\r\n color: theme.palette.secondary.main,\r\n zIndex: 100,\r\n top: 20,\r\n left: -60,\r\n [theme.breakpoints.up('sm')]: {\r\n padding: theme.spacing(2),\r\n paddingRight: 0,\r\n width: 160,\r\n top: 20,\r\n left: -70,\r\n },\r\n },\r\n tooltipLabel: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n center: {\r\n display: 'flex',\r\n height: '100%',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n title: {\r\n position: 'absolute',\r\n width: '100%',\r\n top: theme.spacing(2),\r\n },\r\n })\r\n);\r\n\r\nexport default function ThroughputLine(props: IChartProps) {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const size = useWindowSize();\r\n const { isPdfReport } = props;\r\n let isSmallScreen = size.width !== undefined && size.width < 800;\r\n\r\n // Set isSmallScreen to false for the charts used in the PDF report\r\n isSmallScreen = isPdfReport === true ? false : isSmallScreen;\r\n\r\n const graphMargin = { top: 50, right: 80, bottom: 100, left: 50 };\r\n const graphMarginMobile = { top: 25, right: 25, bottom: 150, left: 50 };\r\n\r\n const isHybrid = useSelector(\r\n (state: IReduxState) =>\r\n !!state.machineDetails.machine.telemetrySnapshot?.isHybrid\r\n );\r\n\r\n const isFetchingTelemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.isFetchingTelemtry\r\n );\r\n const telemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.telemetry\r\n );\r\n const maxBeltScales = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine.machineType.maxBeltScales ?? 4\r\n );\r\n const telemetryData: ISampledTelemetry[] | any = !!telemetry ? telemetry : [];\r\n // const graphTickValues = useSelector((state: IReduxState) => state.machineDetails.graphTickValues);\r\n const graphDateFormat = useSelector(\r\n (state: IReduxState) => state.machineDetails.graphDateFormat\r\n );\r\n\r\n // animate point on hover\r\n const [current, setCurrent] = useState(null);\r\n const handleHover = useCallback(\r\n (point) => {\r\n setCurrent(point);\r\n },\r\n [setCurrent]\r\n );\r\n\r\n const weightLoadFiltered = telemetryData.filter(\r\n (item: ISampledTelemetry) => item.weightLoad1\r\n );\r\n const weightLoadUnit = weightLoadFiltered.length\r\n ? weightLoadFiltered[0].weightLoad1.unit\r\n : t('graph.t/h');\r\n\r\n // **********************************************************************************\r\n // aktuell nur 2, 3 und 4 vorsehen\r\n // Liste bei maxBeltScales = 2 und weniger gefüllt, sonst leer\r\n const chartData2 = [\r\n {\r\n id: `${t('graph.mainDischargeConveyorShort')}`,\r\n color: chartColors.cyan,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.weightLoad1 !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds >\r\n sensorInterval.weigher1CurrentDisplayed) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n return {\r\n x: moment\r\n .utc(item.timestamp)\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y: item.weightLoad1?.value\r\n ? item.weightLoad1.value.toFixed(2)\r\n : item.weightLoad1?.value ?? null,\r\n };\r\n }),\r\n },\r\n {\r\n id: `${t('graph.secondDischargeConveyorShort')}`,\r\n color: chartColors.green,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.weightLoad2 !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds >\r\n sensorInterval.weigher2CurrentDisplayed) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n return {\r\n x: moment\r\n .utc(item.timestamp)\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y: item.weightLoad2?.value\r\n ? item.weightLoad2.value.toFixed(2)\r\n : item.weightLoad2?.value ?? null,\r\n };\r\n }),\r\n },\r\n ];\r\n\r\n // **********************************************************************************\r\n // Liste bei maxBeltScales = 3 gefüllt, sonst leer\r\n const chartData3 = [\r\n {\r\n id: `${t('graph.mainDischargeConveyorShort')}`,\r\n color: chartColors.cyan,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.weightLoad1 !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds >\r\n sensorInterval.weigher1CurrentDisplayed) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n return {\r\n x: moment\r\n .utc(item.timestamp)\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y: item.weightLoad1?.value\r\n ? item.weightLoad1.value.toFixed(2)\r\n : item.weightLoad1?.value ?? null,\r\n };\r\n }),\r\n },\r\n {\r\n id: `${t('graph.secondDischargeConveyorShort')}`,\r\n color: chartColors.green,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.weightLoad2 !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds >\r\n sensorInterval.weigher2CurrentDisplayed) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n return {\r\n x: moment\r\n .utc(item.timestamp)\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y: item.weightLoad2?.value\r\n ? item.weightLoad2.value.toFixed(2)\r\n : item.weightLoad2?.value ?? null,\r\n };\r\n }),\r\n },\r\n {\r\n id: `${t('graph.thirdDischargeConveyorShort')}`,\r\n color: chartColors.orange,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.weightLoad3 !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds >\r\n sensorInterval.weigher3CurrentDisplayed) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n return {\r\n x: moment\r\n .utc(item.timestamp)\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y: item.weightLoad3?.value\r\n ? item.weightLoad3.value.toFixed(2)\r\n : item.weightLoad3?.value ?? null,\r\n };\r\n }),\r\n },\r\n ];\r\n\r\n // **********************************************************************************\r\n // Liste bei maxBeltScales = 4 gefüllt, sonst leer\r\n const chartData4 = [\r\n {\r\n id: `${t('graph.mainDischargeConveyorShort')}`,\r\n color: chartColors.cyan,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.weightLoad1 !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds >\r\n sensorInterval.weigher1CurrentDisplayed) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n return {\r\n x: moment\r\n .utc(item.timestamp)\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y: item.weightLoad1?.value\r\n ? item.weightLoad1.value.toFixed(2)\r\n : item.weightLoad1?.value ?? null,\r\n };\r\n }),\r\n },\r\n {\r\n id: `${t('graph.secondDischargeConveyorShort')}`,\r\n color: chartColors.green,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.weightLoad2 !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds >\r\n sensorInterval.weigher2CurrentDisplayed) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n return {\r\n x: moment\r\n .utc(item.timestamp)\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y: item.weightLoad2?.value\r\n ? item.weightLoad2.value.toFixed(2)\r\n : item.weightLoad2?.value ?? null,\r\n };\r\n }),\r\n },\r\n {\r\n id: `${t('graph.thirdDischargeConveyorShort')}`,\r\n color: chartColors.orange,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.weightLoad3 !== null) ||\r\n (item.durationInSeconds &&\r\n item.durationInSeconds >\r\n sensorInterval.weigher3CurrentDisplayed) ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n return {\r\n x: moment\r\n .utc(item.timestamp)\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y: item.weightLoad3?.value\r\n ? item.weightLoad3.value.toFixed(2)\r\n : item.weightLoad3?.value ?? null,\r\n };\r\n }),\r\n },\r\n {\r\n id: `${t('graph.fourthDischargeConveyorShort')}`,\r\n color: chartColors.lime,\r\n data: telemetryData\r\n .filter(\r\n (item: ISampledTelemetry, index: number) =>\r\n (!item.isEmpty && item.weightLoad4 !== null) ||\r\n (item.durationInSeconds \r\n && item.durationInSeconds > sensorInterval.weigher4CurrentDisplayed) \r\n ||\r\n // TODO KANM remove when updating NIVO and add min/max to xScale\r\n // enable first and last items\r\n index === 0 ||\r\n index === telemetryData.length - 1\r\n )\r\n .map((item: ISampledTelemetry) => {\r\n return {\r\n x: moment\r\n .utc(item.timestamp)\r\n .local()\r\n .format('YYYY-MM-DD HH:mm:ss.SSS'),\r\n y: item.weightLoad4?.value\r\n ? item.weightLoad4?.value.toFixed(2)\r\n : item.weightLoad4?.value ?? null,\r\n };\r\n }),\r\n },\r\n ];\r\n\r\n // **********************************************************************************\r\n // entsprechend der übergebenen maxBeltScales wird die korrekte Datenliste ausgewählt\r\n // var chartData = maxBeltScales === 4\r\n // ? chartData4\r\n // : maxBeltScales === 3\r\n // ? chartData3\r\n // : chartData2\r\n // ;\r\n\r\n const CustomTooltip = (pointData: IPoint) => {\r\n const { data, serieId, serieColor } = pointData.point;\r\n return (\r\n
\r\n
\r\n
\r\n \r\n {serieId}\r\n \r\n
\r\n
\r\n {t('graph.date')}: \r\n {moment(data.x).format('DD.MM.YYYY')}\r\n
\r\n
\r\n {t('graph.time')}: \r\n {moment(data.x).format('HH:mm:ss')}\r\n
\r\n
\r\n {`${t(\r\n 'graph.throughput'\r\n )}: `}\r\n {`${data.y} ${weightLoadUnit}`}\r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {!isFetchingTelemetry \r\n ? (\r\n \r\n {telemetryData.length === 0 ||\r\n (telemetryData.weightLoad1 === null &&\r\n telemetryData.weightLoad2 === null &&\r\n telemetryData.weightLoad3 === null &&\r\n telemetryData.weightLoad4 === null) \r\n ? (\r\n
\r\n \r\n {t('graph.throughput')}\r\n \r\n \r\n {t('graph.noData')}\r\n \r\n
\r\n ) \r\n : (\r\n \r\n {!isSmallScreen && (\r\n
\r\n \r\n {t('graph.throughput')}\r\n \r\n
\r\n )}\r\n d.color}\r\n lineWidth={2}\r\n margin={isSmallScreen ? graphMarginMobile : graphMargin}\r\n xScale={{\r\n type: 'time',\r\n format: '%Y-%m-%d %H:%M:%S.%L',\r\n precision: 'second',\r\n useUTC: false,\r\n }}\r\n xFormat=\"time:%Y-%m-%d %H:%M:%S.%L\"\r\n yScale={{ type: 'linear', min: 0 }}\r\n curve=\"monotoneX\"\r\n axisTop={null}\r\n axisRight={null}\r\n enablePoints={true}\r\n layers={[\r\n 'grid',\r\n 'markers',\r\n 'axes',\r\n 'areas',\r\n 'lines',\r\n 'slices',\r\n 'points',\r\n 'mesh',\r\n 'legends',\r\n () => ,\r\n ]}\r\n //@ts-ignore\r\n axisBottom={{\r\n orient: 'bottom',\r\n tickSize: 10,\r\n tickPadding: 40,\r\n tickRotation: 270,\r\n legendOffset: 60,\r\n legendPosition: 'start',\r\n format: (tick) => moment(tick).format(graphDateFormat),\r\n // tickValues: graphTickValues,\r\n }}\r\n tooltip={CustomTooltip}\r\n onMouseEnter={handleHover}\r\n onMouseMove={handleHover}\r\n onMouseLeave={handleHover}\r\n axisLeft={{\r\n orient: 'left',\r\n tickSize: 5,\r\n tickPadding: 5,\r\n tickRotation: 0,\r\n legend: `${t('graph.throughput')} [${weightLoadUnit}]`,\r\n legendOffset: -40,\r\n legendPosition: 'middle',\r\n }}\r\n enableGridX={false}\r\n enableCrosshair={false}\r\n pointSize={2}\r\n pointBorderWidth={2}\r\n pointBorderColor={{ from: 'serieColor' }}\r\n pointLabel=\"x\"\r\n pointLabelYOffset={-12}\r\n useMesh={true}\r\n enableSlices={false}\r\n legends={[\r\n {\r\n anchor: 'bottom',\r\n direction: isSmallScreen ? 'column' : 'row',\r\n justify: false,\r\n translateX: 0,\r\n translateY: isSmallScreen ? 140 : 85,\r\n itemsSpacing: 0,\r\n itemDirection: 'left-to-right',\r\n itemWidth: 150,\r\n itemHeight: 20,\r\n itemOpacity: 0.75,\r\n itemTextColor: '#fff',\r\n symbolSize: 10,\r\n symbolShape: 'circle',\r\n symbolBorderColor: 'rgba(0, 0, 0, .5)',\r\n },\r\n ]}\r\n />\r\n
\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, { useEffect, useState } from 'react';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport { Chip, IconButton, Typography } from '@material-ui/core';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { IReduxState, IExtendedMachineTagOption } from '../../types';\r\nimport { useTranslation } from 'react-i18next';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport {\r\n addMachineTag,\r\n deleteMachineTag,\r\n} from '../../actions/machineDetailsActions';\r\nimport { themeColors } from '../../constants';\r\nimport { TagDto } from '../../rubblemaster_openapi3_typescript-fetch';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n maxWidth: 200,\r\n },\r\n dialog: {\r\n padding: `${theme.spacing(2)}px`,\r\n },\r\n buttonWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n marginBottom: `${theme.spacing(4)}px`,\r\n },\r\n saveButton: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n marginTop: `${theme.spacing(4)}px`,\r\n },\r\n tagsWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flexWrap: 'wrap',\r\n '& > *': {\r\n margin: theme.spacing(0.5),\r\n },\r\n },\r\n iconWrapper: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n margin: 0,\r\n },\r\n title: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n content: {\r\n padding: `${theme.spacing(2)}px ${theme.spacing(3)}px`,\r\n },\r\n contentWrapper: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n}));\r\n\r\nexport interface IMachineStateDialogProps {\r\n open: boolean;\r\n onClose: () => void;\r\n}\r\n\r\nfunction MachineTagsDialog(props: IMachineStateDialogProps) {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const { onClose, open } = props;\r\n const dispatch = useDispatch();\r\n const machineTagOptions: IExtendedMachineTagOption[] = useSelector(\r\n (state: IReduxState) => state.search.machineTagOptions\r\n );\r\n const machine = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine\r\n );\r\n const machineId = machine.id;\r\n const [machineTags, setMachineTags] = useState();\r\n\r\n const handleClose = () => {\r\n onClose();\r\n };\r\n\r\n const handleAdd = (tag: any) => {\r\n dispatch(addMachineTag(machineId as number, tag));\r\n };\r\n\r\n const handleDelete = (tag: any) => {\r\n dispatch(deleteMachineTag(machineId as number, tag));\r\n };\r\n\r\n useEffect(() => {\r\n const tags = machine.tags;\r\n const machineTags = tags\r\n ? tags.map((machineTag: any) => {\r\n const color = machineTagOptions.length\r\n ? machineTagOptions.filter(\r\n (tagOption: any) => tagOption.id === machineTag.id\r\n )[0].color\r\n : themeColors.yellow;\r\n console.log(color);\r\n return {\r\n id: machineTag.id,\r\n key: machineTag.key,\r\n color,\r\n };\r\n })\r\n : [];\r\n console.log(machineTags);\r\n setMachineTags(machineTags);\r\n }, [machineTagOptions, machine]);\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n {t('machine.editMachineTags')}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n {t('machine.active')}\r\n {machineTags && (\r\n
\r\n {!!machineTags &&\r\n machineTags.map((item: any, index: number) => {\r\n return (\r\n handleDelete(item)}\r\n />\r\n );\r\n })}\r\n
\r\n )}\r\n
\r\n
\r\n {t('machine.available')}\r\n {machineTagOptions && machineTags && (\r\n
\r\n {machineTagOptions\r\n .filter(\r\n (tagOption: any) =>\r\n machineTags\r\n .map((tag: any) => tag.id)\r\n .includes(tagOption.id) === false\r\n )\r\n .map((item: any, index: number) => {\r\n return (\r\n }\r\n onDelete={() => handleAdd(item)}\r\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 function EditMachineTags() {\r\n const classes = useStyles();\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 = () => {\r\n setOpen(false);\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","import React, { useEffect, useState } from 'react';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport {\r\n Button,\r\n IconButton,\r\n TextField,\r\n InputAdornment,\r\n} from '@material-ui/core';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { makeStyles, Theme } from '@material-ui/core/styles';\r\nimport { IReduxState } from '../../types';\r\nimport { useTranslation } from 'react-i18next';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport {\r\n editMachineNote,\r\n deleteMachineNote,\r\n} from '../../actions/machineDetailsActions';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n dialog: {\r\n padding: `${theme.spacing(2)}px`,\r\n },\r\n buttonWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginBottom: `${theme.spacing(4)}px`,\r\n },\r\n saveButton: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginTop: `${theme.spacing(4)}px`,\r\n },\r\n tagsWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flexWrap: 'wrap',\r\n '& > *': {\r\n margin: theme.spacing(0.5),\r\n },\r\n },\r\n iconWrapper: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n margin: 0,\r\n },\r\n title: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n content: {\r\n padding: `${theme.spacing(2)}px ${theme.spacing(3)}px`,\r\n },\r\n contentWrapper: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n}));\r\n\r\nexport interface IMachineStateDialogProps {\r\n open: boolean;\r\n onClose: () => void;\r\n}\r\n\r\nfunction MachineNotesDialog(props: IMachineStateDialogProps) {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const { onClose, open } = props;\r\n const dispatch = useDispatch();\r\n const machine = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine\r\n );\r\n const machineId = machine.id;\r\n const [machineNote, setMachineNote] = useState('');\r\n\r\n const handleClose = () => {\r\n setMachineNote(machine.notes as string);\r\n onClose();\r\n };\r\n\r\n const handleSave = () => {\r\n dispatch(editMachineNote(machineId as number, machineNote.trim()));\r\n onClose();\r\n };\r\n\r\n const handleDelete = () => {\r\n dispatch(deleteMachineNote(machineId as number));\r\n handleClose();\r\n };\r\n\r\n const preventEnter = (ev: React.KeyboardEvent) => {\r\n if (ev.key === 'Enter') {\r\n ev.preventDefault();\r\n }\r\n };\r\n\r\n const handleChange = (text: string) => {\r\n if (text.length === 0) {\r\n text = '';\r\n }\r\n\r\n setMachineNote(text);\r\n };\r\n\r\n useEffect(() => {\r\n const machineNote = machine.notes as string;\r\n setMachineNote(machineNote);\r\n // eslint-disable-next-line\r\n }, [machine.notes]);\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n {t('machine.editMachineNotes')}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n ) => preventEnter(ev)}\r\n onChange={(event: React.ChangeEvent<{ name?: string; value: string | any }>) => handleChange(event.target.value)}\r\n InputProps={{\r\n endAdornment: (\r\n \r\n \r\n {machineNote && machineNote.length ? : null}\r\n \r\n \r\n ),\r\n }}\r\n />\r\n \r\n
\r\n
\r\n \r\n {t('controls.save')}\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default function EditMachineNote() {\r\n const classes = useStyles();\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 = () => {\r\n setOpen(false);\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","import React from 'react';\r\nimport { Theme, ListItem, Typography, ListItemText } from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/styles';\r\nimport { IReduxState, AccessLevel } from '../../types';\r\nimport { useSelector } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport EditMachineNote from './EditMachineNote';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px ${theme.spacing(2)}px`,\r\n height: 400,\r\n },\r\n },\r\n cardContent: {\r\n height: '100%',\r\n },\r\n actionsArena: {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n height: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n list: {\r\n height: '100%',\r\n overflowY: 'auto',\r\n width: '100%',\r\n },\r\n tagsWrapper: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n title: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyItems: 'space-around',\r\n },\r\n}));\r\n\r\nexport default function MachineNotes() {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const machineNote = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine.notes\r\n );\r\n const currentlyAuthenticatedUserAccessLevel = useSelector(\r\n (state: IReduxState) =>\r\n state.machineDetails.machine.currentlyAuthenticatedUserAccessLevel\r\n );\r\n return (\r\n \r\n \r\n
\r\n \r\n {t('machine.notes')}\r\n \r\n {currentlyAuthenticatedUserAccessLevel === AccessLevel.Write && (\r\n \r\n )}\r\n
\r\n
\r\n {machineNote ? (\r\n \r\n \r\n {machineNote}\r\n \r\n }\r\n />\r\n \r\n ) : (\r\n \r\n \r\n {t('machine.noNotes')}\r\n \r\n }\r\n />\r\n \r\n )}\r\n
\r\n );\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport {\r\n Card,\r\n CardContent,\r\n Theme,\r\n Chip,\r\n ListItem,\r\n List,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/styles';\r\nimport {\r\n IReduxState,\r\n IExtendedMachineTagOption,\r\n AccessLevel,\r\n} from '../../types';\r\nimport { useSelector } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport EditMachineTags from './EditMachineTags';\r\nimport MachineNotes from './MachineNotes';\r\nimport { chartColors, themeColors } from '../../constants';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(2)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n height: 400,\r\n },\r\n },\r\n cardContent: {\r\n height: '100%',\r\n },\r\n actionsArena: {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n height: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n list: {\r\n height: '100%',\r\n overflowY: 'auto',\r\n width: '100%',\r\n },\r\n tagsWrapper: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n title: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyItems: 'space-around',\r\n },\r\n}));\r\n\r\nexport default function MachineTagsNotes() {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const machine = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine\r\n );\r\n const machineTagOptions: IExtendedMachineTagOption[] = useSelector(\r\n (state: IReduxState) => state.search.machineTagOptions\r\n );\r\n const isHybrid = useSelector(\r\n (state: IReduxState) =>\r\n !!state.machineDetails.machine.telemetrySnapshot?.isHybrid\r\n );\r\n const currentlyAuthenticatedUserAccessLevel = useSelector(\r\n (state: IReduxState) =>\r\n state.machineDetails.machine.currentlyAuthenticatedUserAccessLevel\r\n );\r\n const [machineTags, setMachineTags] = useState();\r\n\r\n // console.log(\"******************************************************\");\r\n // console.log(\"In MachineTagsNotes\");\r\n // console.log(\"******************************************************\");\r\n // console.log(\"currentlyAuthenticatedUserAccessLevel : \" + currentlyAuthenticatedUserAccessLevel);\r\n\r\n useEffect(() => {\r\n const tags = machine.tags;\r\n const machineTags = tags\r\n ? tags.map((machineTag: any) => { \r\n const color = machineTagOptions.length\r\n ? machineTagOptions.filter(\r\n (tagOption: any) => tagOption.id === machineTag.id\r\n )[0].color\r\n : themeColors.yellow;\r\n return {\r\n id: machineTag.id,\r\n key: machineTag.key,\r\n color,\r\n };\r\n })\r\n : [];\r\n setMachineTags(machineTags);\r\n }, [machineTagOptions, machine.tags]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n {t('machine.machineTags')}\r\n \r\n { \r\n currentlyAuthenticatedUserAccessLevel === AccessLevel.Write \r\n && \r\n }\r\n
\r\n
\r\n \r\n
\r\n {!!machineTags &&\r\n machineTags.map((item: any, index: number) => {\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","import React from 'react';\r\nimport Skeleton from '@material-ui/lab/Skeleton';\r\nimport { Grid } from '@material-ui/core';\r\n\r\nexport default function SkeletonLoaderPdf() {\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\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { ResponsivePie } from '@nivo/pie';\r\nimport { chartColors, themeColors } from '../../../constants';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Card,\r\n CardContent,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\nimport { IChartProps, IReduxState } from '../../../types';\r\nimport SkeletonLoaderCardSmall from '../SkeletonLoaderCardSmall';\r\nimport TotalHours from '../TotalHours';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n height: 500,\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n },\r\n cardContent: {\r\n height: '100%',\r\n [theme.breakpoints.up('md')]: {\r\n padding: `${theme.spacing(2)}px 0`,\r\n },\r\n },\r\n actionsArena: {\r\n position: 'relative',\r\n height: '100%',\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n lastUpdate: {\r\n position: 'absolute',\r\n left: theme.spacing(1),\r\n top: 0,\r\n color: themeColors.white,\r\n },\r\n title: {\r\n margin: theme.spacing(2),\r\n marginBottom: '-1.5rem', // move title in chart to avoid making chart smaller\r\n },\r\n gaugesWrapper: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n width: '100%',\r\n },\r\n gaugeWrapper: {\r\n height: 175,\r\n width: 200,\r\n },\r\n electricGaugeWrapper: {\r\n top: 16,\r\n width: 150,\r\n height: 170,\r\n position: 'absolute',\r\n },\r\n noDataWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: 150,\r\n width: 200,\r\n },\r\n })\r\n);\r\n\r\nexport default function EngineUtilizationGaugeHybrid(props: IChartProps) {\r\n const { isPdfReport } = props;\r\n const classes = useStyles();\r\n const { t } = useTranslation(['translation']);\r\n const { averageEngineUtilization, averageEnergyUtilization } = useSelector(\r\n (state: IReduxState) => state.machineDetails\r\n );\r\n\r\n const lastEngineUtilization =\r\n averageEngineUtilization.value !== null\r\n ? averageEngineUtilization.value.toFixed(2)\r\n : 0;\r\n const lastEnergyUtilization =\r\n averageEnergyUtilization.value !== null\r\n ? averageEnergyUtilization.value.toFixed(2)\r\n : 0;\r\n const isFetchingTelemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.isFetchingTelemtry\r\n );\r\n // default: false\r\n const isJawCrusher = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine.machineType.isJawCrusher ?? false\r\n )\r\n\r\n // console.log(\"***************************************************************************\");\r\n // console.log(\"In EngineUtilizationGaugeHybrid\");\r\n // console.log(\"***************************************************************************\");\r\n\r\n // console.log(t);\r\n\r\n const averageEngineLoadsTxt = t('graph.averageEngineLoads');\r\n const averageEnergyUtilizationTxt = t('graph.averageEnergyUtilization');\r\n const dieselEngineLoadsTxt = t('graph.dieselEngineLoads');\r\n //const dieselEngineUtilizationTxt = t('graph.dieselEngineUtilization');\r\n const electricDriveLoadsTxt = t('graph.electricDriveLoads');\r\n //const electricDriveUtilizationTxt = t('graph.electricDriveUtilization');\r\n \r\n // console.log(\"averageEngineLoadsTxt : \" + averageEngineLoadsTxt);\r\n // console.log(\"averageEnergyUtilizationTxt : \" + averageEnergyUtilizationTxt);\r\n // console.log(\"dieselEngineLoadsTxt : \" + dieselEngineLoadsTxt);\r\n // console.log(\"dieselEngineUtilizationTxt : \" + dieselEngineUtilizationTxt);\r\n // console.log(\"electricDriveLoadsTxt : \" + electricDriveLoadsTxt);\r\n // console.log(\"electricDriveUtilizationTxt : \" + electricDriveUtilizationTxt);\r\n // console.log(t('graph.averageEngineLoads'));\r\n\r\n\r\n const graphData = [\r\n {\r\n id: 'empty',\r\n color: themeColors.darkGray,\r\n value: 100 - +lastEngineUtilization,\r\n label: 'empty',\r\n },\r\n {\r\n id: 'averageEngineUtilization',\r\n color: chartColors.rmYellow,\r\n value: +lastEngineUtilization,\r\n label: 'Engine Utilization',\r\n },\r\n ];\r\n const graphDataLoads = [\r\n {\r\n id: 'empty',\r\n color: themeColors.darkGray,\r\n value: 100 - +lastEngineUtilization,\r\n label: 'empty',\r\n },\r\n {\r\n id: 'averageEngineUtilization',\r\n color: chartColors.rmYellow,\r\n value: +lastEngineUtilization,\r\n label: 'Engine Loads',\r\n },\r\n ];\r\n const electricGraphData = [\r\n {\r\n id: 'empty',\r\n color: themeColors.darkGray,\r\n value: 100 - +lastEnergyUtilization,\r\n label: 'empty',\r\n },\r\n {\r\n id: 'averageEngineUtilization',\r\n color: chartColors.electricBlue,\r\n value: +lastEnergyUtilization,\r\n label: 'Engine Utilization',\r\n },\r\n ];\r\n const electricGraphDataLoads = [\r\n {\r\n id: 'empty',\r\n color: themeColors.darkGray,\r\n value: 100 - +lastEnergyUtilization,\r\n label: 'empty',\r\n },\r\n {\r\n id: 'averageEngineUtilization',\r\n color: chartColors.electricBlue,\r\n value: +lastEnergyUtilization,\r\n label: 'Engine Loads',\r\n },\r\n ];\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {!isFetchingTelemetry ? (\r\n \r\n \r\n {`${t('graph.lastReceivedValue')}: ${\r\n !!averageEngineUtilization.timestamp\r\n ? moment\r\n .utc(averageEngineUtilization.timestamp)\r\n .local()\r\n .format(`DD.MM.YYYY HH:mm`)\r\n : '-'\r\n }`}\r\n \r\n \r\n {averageEnergyUtilizationTxt}\r\n \r\n\r\n {averageEngineUtilization.value !== null ? (\r\n \r\n
\r\n
\r\n d.color}\r\n borderColor={{\r\n from: 'color',\r\n modifiers: [['darker', 0.6]],\r\n }}\r\n slicesLabelsSkipAngle={10}\r\n slicesLabelsTextColor={themeColors.white}\r\n animate={true}\r\n motionStiffness={90}\r\n motionDamping={15}\r\n />\r\n
\r\n
\r\n d.color}\r\n borderColor={{\r\n from: 'color',\r\n modifiers: [['darker', 0.6]],\r\n }}\r\n slicesLabelsSkipAngle={10}\r\n slicesLabelsTextColor={themeColors.white}\r\n animate={true}\r\n motionStiffness={90}\r\n motionDamping={15}\r\n />\r\n
\r\n
\r\n
\r\n \r\n {graphData[1].value} %{' '}\r\n {dieselEngineLoadsTxt}\r\n \r\n \r\n {electricGraphData[1].value} %{' '}\r\n {electricDriveLoadsTxt}\r\n \r\n
\r\n
\r\n ) : (\r\n
\r\n \r\n {t('graph.noData')}\r\n \r\n
\r\n )}\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 { chartColors, themeColors } from '../../constants';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Card,\r\n CardContent,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\nimport { IReduxState } from '../../types';\r\nimport SkeletonLoaderCardSmall from './SkeletonLoaderCardSmall';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n position: 'relative',\r\n height: 500,\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n },\r\n cardContent: {\r\n position: 'relative',\r\n height: '100%',\r\n [theme.breakpoints.up('md')]: {\r\n padding: `${theme.spacing(2)}px 0`,\r\n },\r\n },\r\n actionsArena: {\r\n position: 'relative',\r\n height: '100%',\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n lastUpdate: {\r\n position: 'absolute',\r\n left: theme.spacing(1),\r\n top: 0,\r\n color: themeColors.white,\r\n },\r\n title: {\r\n margin: '1rem 0',\r\n filter: `drop-shadow(1px 2px 3px ${chartColors.electricBlue})`,\r\n },\r\n gaugesWrapper: {\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n gaugeWrapper: {\r\n height: 175,\r\n width: 200,\r\n },\r\n noData: {\r\n height: 100,\r\n width: 200,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n savingsWrapper: {\r\n margin: `1rem`,\r\n },\r\n saved: {\r\n margin: `1rem`,\r\n },\r\n claim: {\r\n color: chartColors.electricBlue,\r\n fontSize: '1rem',\r\n textAlign: 'center',\r\n fontStyle: 'italic',\r\n },\r\n rightCorner: {\r\n position: 'absolute',\r\n bottom: 0,\r\n right: 0,\r\n zIndex: 2,\r\n height: '0.2rem',\r\n width: '0.2rem',\r\n backgroundColor: chartColors.electricBlue,\r\n },\r\n })\r\n);\r\n\r\nexport default function MachineEnergySavings() {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\r\n const isFetchingTelemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.isFetchingTelemtry\r\n );\r\n\r\n const { co2Emission, averageFuelLevels } = useSelector(\r\n (state: IReduxState) => state.machineDetails\r\n );\r\n\r\n const isHybrid = useSelector(\r\n (state: IReduxState) =>\r\n !!state.machineDetails.machine.telemetrySnapshot?.isHybrid\r\n );\r\n \r\n // isJawCrusher\r\n // default: false\r\n const isJawCrusher = useSelector(\r\n (state: IReduxState) => state.machineDetails.machine.machineType.isJawCrusher ?? false\r\n );\r\n \r\n // console.log(\"***************************************************************************\");\r\n // console.log(\"In MachineEnergySavings\");\r\n // console.log(\"***************************************************************************\");\r\n // console.log(\"isJawCrusher : \" + isJawCrusher);\r\n // console.log(\"co2Emission : \" + co2Emission?.value);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {!isFetchingTelemetry ? (\r\n \r\n \r\n {`${t('graph.lastReceivedValue')}: ${\r\n !!averageFuelLevels.timestamp\r\n ? moment\r\n .utc(averageFuelLevels.timestamp)\r\n .local()\r\n .format(`DD.MM.YYYY HH:mm`)\r\n : '-'\r\n }`}\r\n \r\n \r\n {/* {t('graph.energySavings')} */}\r\n \r\n CO2{t('graph.co2Emissions').replace(\"CO2\", \"\")}\r\n \r\n \r\n
\r\n \r\n {co2Emission !== null ? (\r\n \r\n {`${co2Emission.value} ${co2Emission.unit}`} CO2\r\n \r\n ) : (\r\n t('graph.noData')\r\n )}\r\n \r\n {/* \r\n {t('graph.estimatedEnergyClaim')}\r\n */}\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 { chartColors, themeColors } from '../../../constants';\r\nimport {\r\n makeStyles,\r\n Theme,\r\n createStyles,\r\n Card,\r\n CardContent,\r\n Typography,\r\n} from '@material-ui/core';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\nimport { IChartProps, IReduxState } from '../../../types';\r\nimport SkeletonLoaderCardSmall from '../SkeletonLoaderCardSmall';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n zIndex: 1,\r\n flexGrow: 1,\r\n },\r\n card: {\r\n height: 500,\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n },\r\n cardContent: {\r\n height: '100%',\r\n [theme.breakpoints.up('md')]: {\r\n padding: `${theme.spacing(2)}px 0`,\r\n },\r\n },\r\n actionsArena: {\r\n position: 'relative',\r\n height: '100%',\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n [theme.breakpoints.up('md')]: {\r\n paddingTop: theme.spacing(4),\r\n justifyContent: 'start',\r\n },\r\n },\r\n lastUpdate: {\r\n position: 'absolute',\r\n left: theme.spacing(1),\r\n top: 0,\r\n color: themeColors.white,\r\n },\r\n gaugeWrapper: {\r\n height: 175,\r\n width: 200,\r\n },\r\n firstEntry: {\r\n margin: `${theme.spacing(2)}px 0 0 0`,\r\n [theme.breakpoints.up('md')]: {\r\n margin: 0,\r\n },\r\n [theme.breakpoints.up('lg')]: {\r\n margin: `${theme.spacing(2)}px 0 ${theme.spacing(1)}px 0`,\r\n },\r\n },\r\n title: {\r\n marginTop: theme.spacing(2),\r\n },\r\n displayItem: {\r\n margin: theme.spacing(1),\r\n },\r\n display: {\r\n margin: theme.spacing(1),\r\n },\r\n valuesWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n },\r\n })\r\n);\r\n\r\nexport default function FuelConsumptionDisplayHybrid(props: IChartProps) {\r\n const { isPdfReport } = props;\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const isFetchingTelemetry = useSelector(\r\n (state: IReduxState) => state.machineDetails.isFetchingTelemtry\r\n );\r\n const isHybrid = useSelector(\r\n (state: IReduxState) =>\r\n !!state.machineDetails.machine.telemetrySnapshot?.isHybrid\r\n );\r\n\r\n const { averageFuelConsumption, averageEnergyConsumption } = useSelector(\r\n (state: IReduxState) => state.machineDetails\r\n );\r\n\r\n const {\r\n engineFuelRate,\r\n engineFuelConsumed,\r\n mainDischargeConveyorFuelRate,\r\n sideDischargeConveyorFuelRate,\r\n } = averageFuelConsumption;\r\n const {\r\n mainDischargeConveyorEnergyRate,\r\n sideDischargeConveyorEnergyRate,\r\n energyConsumeRate,\r\n totalEnergyConsumed,\r\n } = averageEnergyConsumption;\r\n\r\n // console.log(\"***************************************\");\r\n // console.log(\"In FuelConsumptionDisplayHybrid!! \");\r\n // console.log(\"***************************************\");\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {!isFetchingTelemetry ? (\r\n
\r\n \r\n {`${t('graph.lastReceivedValue')}: ${\r\n !!averageFuelConsumption.timestamp\r\n ? moment\r\n .utc(averageFuelConsumption.timestamp)\r\n .local()\r\n .format(`DD.MM.YYYY HH:mm`)\r\n : '-'\r\n }`}\r\n \r\n \r\n {t('graph.averageEnergyConsumption')}\r\n \r\n
\r\n \r\n {t('graph.dieselEngine')} / {t('graph.electricDrive')}\r\n \r\n
\r\n \r\n {engineFuelRate !== null &&\r\n engineFuelRate.value !== undefined\r\n ? ( engineFuelRate.value === 0 \r\n ? \"-\"\r\n : `${engineFuelRate.value.toFixed(2)} ${engineFuelRate.unit}`\r\n )\r\n : t('graph.noData')}\r\n \r\n \r\n /\r\n \r\n \r\n {energyConsumeRate !== null &&\r\n energyConsumeRate.value !== undefined\r\n ? ( energyConsumeRate.value === 0\r\n ? \"-\"\r\n :`${energyConsumeRate.value.toFixed(2)} ${energyConsumeRate.unit}`\r\n )\r\n : t('graph.noData')}\r\n \r\n
\r\n
\r\n
\r\n \r\n {t('graph.mainDischargeConveyor')}\r\n \r\n
\r\n \r\n {mainDischargeConveyorFuelRate !== null &&\r\n mainDischargeConveyorFuelRate.value !== undefined\r\n ? ( mainDischargeConveyorFuelRate.value === 0\r\n ? \"-\"\r\n : `${mainDischargeConveyorFuelRate.value.toFixed(2)} ${mainDischargeConveyorFuelRate.unit}`\r\n )\r\n : t('graph.noData')}\r\n \r\n \r\n /\r\n \r\n \r\n {mainDischargeConveyorEnergyRate !== null &&\r\n mainDischargeConveyorEnergyRate.value !== undefined\r\n ? ( mainDischargeConveyorEnergyRate.value === 0\r\n ? \"-\"\r\n : `${mainDischargeConveyorEnergyRate.value.toFixed(2)} ${mainDischargeConveyorEnergyRate.unit}`\r\n )\r\n : t('graph.noData')}\r\n \r\n
\r\n
\r\n
\r\n \r\n {t('graph.secondDischargeConveyor')}\r\n \r\n
\r\n \r\n {sideDischargeConveyorFuelRate !== null &&\r\n sideDischargeConveyorFuelRate.value !== undefined\r\n ? ( sideDischargeConveyorFuelRate?.value === 0\r\n ? \"-\"\r\n : `${sideDischargeConveyorFuelRate?.value.toFixed(2)} ${sideDischargeConveyorFuelRate.unit}`\r\n )\r\n : t('graph.noData')}\r\n \r\n \r\n /\r\n \r\n \r\n {sideDischargeConveyorEnergyRate !== null &&\r\n sideDischargeConveyorEnergyRate.value !== undefined\r\n ? `${sideDischargeConveyorEnergyRate?.value.toFixed(\r\n 2\r\n )} ${sideDischargeConveyorEnergyRate.unit}`\r\n : t('graph.noData')}\r\n \r\n
\r\n
\r\n
\r\n \r\n {t('graph.energyConsumed')}\r\n \r\n
\r\n \r\n {engineFuelConsumed !== null &&\r\n engineFuelConsumed.value !== undefined\r\n ? `${engineFuelConsumed.value.toFixed(2)} ${\r\n engineFuelConsumed.unit\r\n }`\r\n : t('graph.noData')}\r\n \r\n \r\n /\r\n \r\n \r\n {totalEnergyConsumed !== null &&\r\n totalEnergyConsumed.value !== undefined\r\n ? `${totalEnergyConsumed.value.toFixed(2)} ${\r\n totalEnergyConsumed.unit\r\n }`\r\n : t('graph.noData')}\r\n \r\n
\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, { useEffect, useRef } from 'react';\r\nimport MachineGeneral from './MachineGeneral';\r\nimport MachineMap from './MachineMap';\r\nimport MachineStats from './MachineStats';\r\nimport { makeStyles, Container, Grid, Theme } from '@material-ui/core';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { RouteComponentProps as IRouteComponentProps } from 'react-router-dom';\r\nimport { IReduxState, AccessLevel } from '../../types';\r\nimport MachineErrors from './MachineErrors';\r\nimport FuelGraphLine from './FuelLevels/FuelGraphLine';\r\nimport FuelGraphGauges from './FuelLevels/FuelGraphGauges';\r\nimport GraphControls from './GraphControls';\r\nimport { fetchMachineDetails } from '../../actions/machineDetailsActions';\r\nimport EngineUtilizationLine from './EngineUtilization/EngineUtilizationLine';\r\nimport EngineUtilizationGauge from './EngineUtilization/EngineUtilizationGauge';\r\nimport jsPDF from 'jspdf';\r\nimport html2canvas from 'html2canvas';\r\nimport { useTranslation } from 'react-i18next';\r\nimport moment from 'moment';\r\nimport FuelConsumptionLine from './FuelConsumption/FuelConsumptionLine';\r\nimport FuelConsumptionDisplay from './FuelConsumption/FuelConsumptionDisplay';\r\nimport {\r\n CREATE_PDF_REPORT_SUCCESS,\r\n CREATE_PDF_REPORT,\r\n CREATE_PDF_REPORT_FAIL,\r\n} from '../../actions/types';\r\nimport ThroughputDisplay from './Throughput/ThroughputDisplay';\r\nimport ThroughputLine from './Throughput/ThroughputLine';\r\nimport MachineTagsNotes from './MachineTagsNotes';\r\nimport { useWindowSize } from '../useWindowSize';\r\nimport {\r\n createPdfReportFooter,\r\n createPdfReportHeader,\r\n createGraphReportsPage,\r\n pdfUnitsFormatter,\r\n} from '../../constants';\r\nimport { useIdle } from '../useIdle';\r\nimport { handleUserIdle } from '../../actions/authActions';\r\nimport { MachineImage } from './MachineImage';\r\nimport SkeletonLoaderPdf from './SkeletonLoaderPdf';\r\nimport EngineUtilizationGaugeHybrid from './EngineUtilization/EngineUtilizationGaugeHybrid';\r\nimport MachineEnergySavings from './MachineEnergySavings';\r\nimport FuelConsumptionDisplayHybrid from './FuelConsumption/FuelConsumptionDisplayHybrid';\r\nimport { log } from 'console';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n marginTop: `${theme.spacing(2)}px`,\r\n flexGrow: 1,\r\n },\r\n report: {\r\n [theme.breakpoints.up('xs')]: {\r\n margin: `${theme.spacing(4)}px 0`,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n '@media print': {\r\n margin: `${theme.spacing(2)}px`,\r\n },\r\n },\r\n graphControls: {\r\n top: 0,\r\n width: '100%',\r\n zIndex: 100,\r\n [theme.breakpoints.up('sm')]: {\r\n position: 'relative',\r\n marginTop: theme.spacing(4),\r\n },\r\n },\r\n}));\r\n\r\nexport default function MachineDetails(props: IRouteComponentProps) {\r\n const windowSize = useWindowSize();\r\n const isMobile = !!windowSize && !!windowSize.width && windowSize.width < 601;\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const { t } = useTranslation();\r\n const machineId = props.match.params.id;\r\n const {\r\n averageFuelConsumption,\r\n averageEnergyConsumption,\r\n suggestedAddress,\r\n machine,\r\n search,\r\n totalHoursOfEngineOperation,\r\n totalHoursOfCrusherOperation,\r\n isCreatingPdf,\r\n totalWeightLoad1,\r\n totalWeightLoad2,\r\n totalWeightLoad3,\r\n totalWeightLoad4,\r\n energySaved,\r\n co2Saved,\r\n dieselSaved,\r\n co2Emission,\r\n } = useSelector((state: IReduxState) => state.machineDetails);\r\n\r\n const info = useSelector(\r\n (state: IReduxState) =>\r\n state.machineDetails.machine.info\r\n );\r\n \r\n // console.warn(\"****************************************\");\r\n // console.warn(\"Index\");\r\n // console.warn(\"****************************************\");\r\n console.log(\"########################################\");\r\n console.warn(\"In Index\");\r\n console.warn(info);\r\n console.log(\"########################################\");\r\n \r\n const currentlyAuthenticatedUserAccessLevel: AccessLevel = useSelector(\r\n (state: IReduxState) =>\r\n state.machineDetails.machine.currentlyAuthenticatedUserAccessLevel\r\n );\r\n\r\n const isHybrid = useSelector(\r\n (state: IReduxState) =>\r\n !!state.machineDetails.machine.telemetrySnapshot?.isHybrid\r\n );\r\n\r\n const isThirdParty = useSelector(\r\n (state: IReduxState) =>\r\n state.machineDetails.machine.machineType.isThirdParty\r\n );\r\n\r\n const isIdle = useIdle();\r\n\r\n // Get all machines on mount\r\n useEffect(() => {\r\n dispatch(fetchMachineDetails(machineId));\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n useEffect(() => {\r\n dispatch(handleUserIdle(isIdle));\r\n }, [isIdle, dispatch]);\r\n\r\n // PDF REPORT\r\n // chart refs are needed for using images in PDF Report\r\n const fuelGaugesRef = useRef(null);\r\n const fuelLevelsRef = useRef(null);\r\n const engineUtilizationGaugeRef = useRef(null);\r\n const engineUtilizationRef = useRef(null);\r\n const fuelConsumptionDisplayRef = useRef(null);\r\n const fuelConsumptionLineRef = useRef(null);\r\n const throughputDisplayRef = useRef(null);\r\n const throughputLineRef = useRef(null);\r\n const machineImgRef = useRef(null);\r\n // only hybrid machines\r\n const engineUtilizationGaugeHybridRef = useRef(null);\r\n const fuelConsumptionDisplayHybridRef = useRef(null);\r\n\r\n const renderToCanvas = async (elementToRender: HTMLElement) => {\r\n return html2canvas(elementToRender, {\r\n imageTimeout: 0,\r\n scale: 2,\r\n ignoreElements: (otherElement) =>\r\n !otherElement.contains(elementToRender) &&\r\n !elementToRender?.contains(otherElement) &&\r\n otherElement.localName !== 'head' &&\r\n otherElement.localName !== 'style',\r\n });\r\n };\r\n\r\n // TODO from KANM: Needs refactoring\r\n const createReport = async () => {\r\n dispatch({ type: CREATE_PDF_REPORT });\r\n\r\n console.log(\"***************************************\");\r\n console.log(\"In createReport!! \");\r\n console.log(\"***************************************\");\r\n // console.log(\"currentlyAuthenticatedUserAccessLevel : \" + currentlyAuthenticatedUserAccessLevel);\r\n\r\n try {\r\n const doc = new jsPDF('landscape');\r\n const reportTitle = `${t('report.machineReport')}`;\r\n const reportTimeframe = `${moment(search.startDate).format(\r\n 'DD.MM.YYYY HH:mm'\r\n )} ${t('report.till')} ${moment(search.endDate).format(\r\n 'DD.MM.YYYY HH:mm'\r\n )}`;\r\n\r\n const reportFileName = `${t('report.report')} - ${moment(\r\n search.startDate\r\n ).format('DD.MM.YYYY HHmm')} ${t('report.till')} ${moment(\r\n search.endDate\r\n ).format('DD.MM.YYYY HHmm')}`;\r\n\r\n const serialNumber = !!machine.serialNumber ? machine.serialNumber : '';\r\n const machineState = !!machine.state && !!machine.state.key ? machine.state.key : '-';\r\n\r\n const workingHoursTillService =\r\n !!machine.nextService && !!machine.nextService.workingHoursTillService\r\n ? `${machine.nextService.workingHoursTillService} ${t(\r\n 'machine.stats.hours'\r\n )}`\r\n : t('graph.noData');\r\n\r\n const engineOperationTotal =\r\n totalHoursOfEngineOperation !== null\r\n ? `${totalHoursOfEngineOperation} ${t('machine.stats.hours')}`\r\n : t('graph.noData');\r\n\r\n const crusherOperationTotal =\r\n totalHoursOfCrusherOperation !== null\r\n ? `${totalHoursOfCrusherOperation} ${t('machine.stats.hours')}`\r\n : t('graph.noData');\r\n \r\n // const energySavingsTxt : string = t('graph.energySavings');\r\n // const co2EmissionsTxt : string = t('co2Emissions');\r\n // const co2SavingsTxt : string = t('graph.co2Savings');\r\n\r\n const pdfTotalWeightLoad1 = pdfUnitsFormatter(totalWeightLoad1, t('machine.stats.t'), t('graph.noData'));\r\n const pdfTotalWeightLoad2 = pdfUnitsFormatter(totalWeightLoad2, t('machine.stats.t'), t('graph.noData'));\r\n const pdfTotalWeightLoad3 = pdfUnitsFormatter(totalWeightLoad3, t('machine.stats.t'), t('graph.noData'));\r\n const pdfTotalWeightLoad4 = pdfUnitsFormatter(totalWeightLoad4, t('machine.stats.t'), t('graph.noData'));\r\n\r\n const engineFuelConsumed = pdfUnitsFormatter(averageFuelConsumption.engineFuelConsumed, t('report.liter'), t('graph.noData'));\r\n\r\n const projectConstructionSiteWithAuth =\r\n currentlyAuthenticatedUserAccessLevel === AccessLevel.Read ||\r\n currentlyAuthenticatedUserAccessLevel === AccessLevel.Write\r\n ? !!machine.projectConstructionSite ? machine.projectConstructionSite : t('accessLevel.placeholder')\r\n : t('accessLevel.placeholder');\r\n\r\n console.log(\".. createPdfReportHeader\");\r\n createPdfReportHeader(doc, reportTitle, reportTimeframe);\r\n\r\n const machineImg = { width: 800, height: 450 }; // Original width\r\n const machineImage = new Image();\r\n\r\n const getMachineImage = (callback: {\r\n (machineImage: HTMLImageElement): void;\r\n (arg0: HTMLImageElement): void;\r\n }) => {\r\n machineImage.crossOrigin = 'Anonymous';\r\n machineImage.onerror = () => {\r\n console.log(`Error loading image for ${machine.machineType.name}`);\r\n };\r\n\r\n machineImage.onload = () => {\r\n callback(machineImage);\r\n };\r\n machineImage.src = MachineImage(machine.machineType, isHybrid);\r\n addMachineImage(machineImage);\r\n };\r\n\r\n const addMachineImage = (machineImage: HTMLImageElement) => {\r\n if (machineImage) {\r\n doc.addImage({\r\n imageData: machineImage,\r\n x: doc.internal.pageSize.getWidth() - (machineImg.width / 6 + 16),\r\n y:\r\n doc.internal.pageSize.getHeight() / 2 -\r\n machineImg.height / (6 * 2),\r\n w: machineImg.width / 6,\r\n h: machineImg.height / 6,\r\n });\r\n }\r\n };\r\n\r\n console.log(\".. getMachineImage\");\r\n getMachineImage(addMachineImage);\r\n\r\n const lineHeight = isHybrid ? 7 : 8;\r\n const lineFormatter = (multiplier: number) => {\r\n const startY = 40;\r\n\r\n return startY + lineHeight * multiplier;\r\n };\r\n\r\n let curLine: number = 0;\r\n\r\n // **************************************************\r\n // serialNumber, owner, machineState\r\n doc\r\n .setFontSize(12)\r\n .setFontType('bold')\r\n .text(`${t('machine.serialNumber')}:`, 16, lineFormatter(curLine + 1))\r\n .text(`${t('machine.owner')}:`, 16, lineFormatter(curLine + 2))\r\n .text(`${t('machine.machineState')}:`, 16, lineFormatter(curLine + 3));\r\n\r\n doc\r\n .setFontType('normal')\r\n .text(serialNumber, 80, lineFormatter(curLine + 1))\r\n .text(machine.owner, 80, lineFormatter(curLine + 2))\r\n .text(machineState, 80, lineFormatter(curLine + 3));\r\n\r\n curLine += 3;\r\n\r\n // **************************************************\r\n // crusherOperation (Betriebsstunden), nextService, mainDischargeConveyor (Hauptaustrageband) + 2/3/4\r\n\r\n if (!isThirdParty) {\r\n doc\r\n .setFontType('bold')\r\n .text(`${t('report.crusherOperation')}:`, 16, lineFormatter(curLine + 1))\r\n .setFontType('normal')\r\n .text(crusherOperationTotal, 80, lineFormatter(curLine + 1))\r\n \r\n curLine ++;\r\n }\r\n\r\n if(t('report.engineOperation2').length > 0){\r\n doc\r\n .setFontType('bold')\r\n .text(`${t('report.engineOperation')}`, 16, lineFormatter(curLine + 1))\r\n .text(`${t('report.engineOperation2')}:`, 16, lineFormatter(curLine + 2))\r\n .text(`${t('report.engineFuelConsumed')}:`, 16, lineFormatter(curLine + 3))\r\n .setFontType('normal')\r\n .text(engineOperationTotal, 80, lineFormatter(curLine + 2))\r\n // Zeile 2 : leer\r\n .text(engineFuelConsumed, 80, lineFormatter(curLine + 3))\r\n ;\r\n curLine += 3;\r\n }\r\n else{\r\n doc\r\n .setFontType('bold')\r\n .text(`${t('report.engineOperation')}:`, 16, lineFormatter(curLine + 1))\r\n .text(`${t('report.engineFuelConsumed')}:`, 16, lineFormatter(curLine + 2))\r\n .setFontType('normal')\r\n .text(engineOperationTotal, 80, lineFormatter(curLine + 1))\r\n .text(engineFuelConsumed, 80, lineFormatter(curLine + 2))\r\n ;\r\n curLine += 2;\r\n }\r\n\r\n if(currentlyAuthenticatedUserAccessLevel == AccessLevel.Write){\r\n doc\r\n .setFontType('bold')\r\n .text(`${t('machine.constructionSite')}:`, 16, lineFormatter(curLine + 1))\r\n .setFontType('normal')\r\n .text(projectConstructionSiteWithAuth, 80, lineFormatter(curLine + 1))\r\n ;\r\n curLine ++;\r\n }\r\n\r\n if (!isThirdParty) {\r\n if(t('report.mainDischargeConveyor2').length > 0) {\r\n doc\r\n .setFontType('bold')\r\n .text(`${t('machine.nextService')}:`, 16, lineFormatter(curLine + 1))\r\n .text(`${t('report.mainDischargeConveyor')}`, 16, lineFormatter(curLine + 2))\r\n .text(`${t('report.mainDischargeConveyor2')}:`, 16, lineFormatter(curLine + 3))\r\n .setFontType('normal')\r\n .text(workingHoursTillService, 80, lineFormatter(curLine + 1))\r\n .text(pdfTotalWeightLoad1, 80, lineFormatter(curLine + 3));\r\n curLine += 3;\r\n }\r\n else {\r\n doc\r\n .setFontType('bold')\r\n .text(`${t('machine.nextService')}:`, 16, lineFormatter(curLine + 1))\r\n .text(`${t('report.mainDischargeConveyor')}:`, 16, lineFormatter(curLine + 2))\r\n .setFontType('normal')\r\n .text(workingHoursTillService, 80, lineFormatter(curLine + 1))\r\n .text(pdfTotalWeightLoad1, 80, lineFormatter(curLine + 2));\r\n curLine += 2;\r\n }\r\n\r\n if (machine.machineType.maxBeltScales && machine.machineType.maxBeltScales >= 2){\r\n doc\r\n .setFontType('bold')\r\n .text(`${t('report.secondDischargeConveyor')}:`, 16, lineFormatter(curLine + 1))\r\n .setFontType('normal')\r\n .text(pdfTotalWeightLoad2, 80, lineFormatter(curLine + 1));\r\n curLine ++;\r\n }\r\n\r\n if (machine.machineType.maxBeltScales && machine.machineType.maxBeltScales >= 3){\r\n doc\r\n .setFontType('bold')\r\n .text(`${t('report.thirdDischargeConveyor')}:`, 16, lineFormatter(curLine + 1))\r\n .setFontType('normal')\r\n .text(pdfTotalWeightLoad3, 80, lineFormatter(curLine + 1));\r\n curLine ++;\r\n }\r\n if (machine.machineType.maxBeltScales && machine.machineType.maxBeltScales >= 4){\r\n doc\r\n .setFontType('bold')\r\n .text(`${t('report.fourthDischargeConveyor')}:`, 16, lineFormatter(curLine + 1))\r\n .setFontType('normal')\r\n .text(pdfTotalWeightLoad4, 80, lineFormatter(curLine + 1));\r\n curLine ++;\r\n }\r\n } \r\n\r\n // **************************************************\r\n // co2Emissions, Adresse\r\n if (isHybrid) {\r\n if(t('report.dieselEngine2').length > 0){\r\n doc\r\n .setFontSize(12)\r\n .setFontType('bold')\r\n .text(`${t('report.electricDrive')}:`, 16, lineFormatter(curLine + 1))\r\n .text(`${t('report.dieselEngine')}`, 16, lineFormatter(curLine + 2))\r\n .text(`${t('report.dieselEngine2')}:`, 16, lineFormatter(curLine + 3))\r\n .text(`${t('report.energySavings')}:`, 16, lineFormatter(curLine + 4))\r\n .text(`${t('report.co2Emissions')}:`, 16, lineFormatter(curLine + 5))\r\n .setFontType('normal')\r\n .text(pdfUnitsFormatter(energySaved, t('graph.kwh'), t('graph.noData')), 80, lineFormatter(curLine + 1))\r\n .text(pdfUnitsFormatter(co2Saved, t('graph.t') + 'CO', t('graph.noData')), 80, lineFormatter(curLine + 3))\r\n .text(pdfUnitsFormatter(dieselSaved, t('graph.l'), t('graph.noData')), 80, lineFormatter(curLine + 4))\r\n .text(pdfUnitsFormatter(co2Emission, t('graph.t') + 'CO2', t('graph.noData')), 80, lineFormatter(curLine + 5))\r\n ;\r\n\r\n curLine += 5;\r\n }\r\n else {\r\n doc\r\n .setFontSize(12)\r\n .setFontType('bold')\r\n .text(`${t('report.electricDrive')}:`, 16, lineFormatter(curLine + 1))\r\n .text(`${t('report.dieselEngine')}:`, 16, lineFormatter(curLine + 2))\r\n .text(`${t('report.energySavings')}:`, 16, lineFormatter(curLine + 3))\r\n .text(`${t('report.co2Emissions')}:`, 16, lineFormatter(curLine + 4))\r\n .setFontType('normal')\r\n .text(pdfUnitsFormatter(energySaved, t('graph.kwh'), t('graph.noData')), 80, lineFormatter(curLine + 1))\r\n .text(pdfUnitsFormatter(co2Saved, t('graph.t') + 'CO', t('graph.noData')), 80, lineFormatter(curLine + 2))\r\n .text(pdfUnitsFormatter(dieselSaved, t('graph.l'), t('graph.noData')), 80, lineFormatter(curLine + 3))\r\n .text(pdfUnitsFormatter(co2Emission, t('graph.t') + 'CO2', t('graph.noData')), 80, lineFormatter(curLine + 4))\r\n ;\r\n\r\n curLine += 4;\r\n }\r\n }\r\n\r\n // add suggested address to report\r\n doc\r\n .setFontSize(12)\r\n .setFontType('bold')\r\n .text(`${t('machine.suggestedAddress')}:`, 16, lineFormatter(curLine + 1))\r\n .setFontType('normal')\r\n ;\r\n\r\n // Adresse mehrzeilig anzeigen\r\n const suggestedAddressArray = suggestedAddress.split(', ');\r\n suggestedAddressArray.forEach((element) => {\r\n doc\r\n .text(element, 80, lineFormatter(curLine + 1));\r\n curLine++;\r\n });\r\n\r\n // **************************************************\r\n\r\n createPdfReportFooter(doc, serialNumber, t('report.page'), 1, 5);\r\n doc.addPage();\r\n\r\n // Get all chart images\r\n const images = await Promise.all([\r\n renderToCanvas(fuelGaugesRef.current as HTMLElement),\r\n renderToCanvas(fuelLevelsRef.current as HTMLElement),\r\n renderToCanvas(\r\n isHybrid\r\n ? (engineUtilizationGaugeHybridRef.current as HTMLElement)\r\n : (engineUtilizationGaugeRef.current as HTMLElement)\r\n ),\r\n renderToCanvas(engineUtilizationRef.current as HTMLElement),\r\n renderToCanvas(\r\n isHybrid\r\n ? (fuelConsumptionDisplayHybridRef.current as HTMLElement)\r\n : (fuelConsumptionDisplayRef.current as HTMLElement)\r\n ),\r\n renderToCanvas(fuelConsumptionLineRef.current as HTMLElement),\r\n renderToCanvas(throughputDisplayRef.current as HTMLElement),\r\n renderToCanvas(throughputLineRef.current as HTMLElement),\r\n ]);\r\n\r\n // Throughput\r\n if (!isThirdParty) {\r\n createPdfReportHeader(doc, reportTitle, reportTimeframe);\r\n createGraphReportsPage(doc, images[6], images[7], isMobile);\r\n createPdfReportFooter(doc, serialNumber, t('report.page'), 2, 5);\r\n doc.addPage();\r\n }\r\n\r\n // Fuel Consumption\r\n createPdfReportHeader(doc, reportTitle, reportTimeframe);\r\n createGraphReportsPage(doc, images[4], images[5], isMobile);\r\n createPdfReportFooter(doc, serialNumber, t('report.page'), 3, 5);\r\n doc.addPage();\r\n\r\n // Engine Utilization Graphs\r\n createPdfReportHeader(doc, reportTitle, reportTimeframe);\r\n createGraphReportsPage(doc, images[2], images[3], isMobile);\r\n createPdfReportFooter(doc, serialNumber, t('report.page'), 4, 5);\r\n doc.addPage();\r\n\r\n // Fuel Levels\r\n createPdfReportHeader(doc, reportTitle, reportTimeframe);\r\n createGraphReportsPage(doc, images[0], images[1], isMobile);\r\n createPdfReportFooter(doc, serialNumber, t('report.page'), 5, 5);\r\n doc.save(`${reportFileName}.pdf`);\r\n\r\n } \r\n catch (err) {\r\n console.error(\"########################################################\");\r\n console.error(\"In createReport => ERROR!! \");\r\n console.error(err);\r\n console.error(\"########################################################\");\r\n\r\n dispatch({ type: CREATE_PDF_REPORT_FAIL });\r\n }\r\n\r\n console.log(\"***************************************\");\r\n console.log(\"Ende createReport!! \");\r\n console.log(\"***************************************\");\r\n\r\n dispatch({ type: CREATE_PDF_REPORT_SUCCESS });\r\n };\r\n\r\n return (\r\n \r\n {console.warn(\"In Container\")}\r\n
\r\n {isCreatingPdf ? : null}\r\n {machine ? (\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* Display Charts */}\r\n {!isThirdParty && (\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n {isHybrid ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n\r\n \r\n {isHybrid ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n {isHybrid ? : }\r\n \r\n {/* Line Charts */}\r\n {!isThirdParty && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* TODO: Errors are not yet handled in third party machines */}\r\n {!isThirdParty && (\r\n \r\n \r\n \r\n )}\r\n\r\n {/* For PDF Report only */}\r\n \r\n \r\n\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n\r\n {/* Only used for hybrid machines */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) \r\n : (\r\n No Machine!\r\n \r\n //null\r\n )\r\n }\r\n \r\n \r\n);\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport {\r\n Container,\r\n Typography,\r\n makeStyles,\r\n Theme,\r\n Link,\r\n} from '@material-ui/core';\r\nimport { IReduxState } from '../types';\r\nimport RubbleBreadcrumbs from './RubbleBreadcrumbs';\r\nimport { routes } from '../constants';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { fetchBackendInfo, handleUserIdle } from '../actions/authActions';\r\nimport { useIdle } from './useIdle';\r\nimport rmBackground from '../assets/img/rm_digital_solutions.jpg';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n //marginTop: theme.spacing(2),\r\n background: `url(${rmBackground})`,\r\n minHeight: 'calc(100vH - 96px)',\r\n [theme.breakpoints.up('sm')]: {\r\n minHeight: 'calc(100vH - 96px)',\r\n },\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n container: {\r\n paddingLeft: theme.spacing(4),\r\n // margin: `${theme.spacing(4)}px auto`,\r\n position: 'relative',\r\n maxWidth: '1960px',\r\n },\r\n status: {},\r\n content: {\r\n maxWidth: '800px',\r\n margin: '0px auto',\r\n textAlign: 'center',\r\n },\r\n separator: {\r\n borderTop: '1px solid white',\r\n marginBottom: '20px',\r\n marginLeft: '100px',\r\n marginRight: '100px',\r\n },\r\n}));\r\n\r\nexport default function About() {\r\n const classes = useStyles();\r\n const userSettings = useSelector((state: IReduxState) => state.auth.user);\r\n const backendInfo = useSelector(\r\n (state: IReduxState) => state.auth.backendInfo\r\n );\r\n const dispatch = useDispatch();\r\n const { t } = useTranslation();\r\n const isIdle = useIdle();\r\n\r\n // Get all machines on mount\r\n useEffect(() => {\r\n dispatch(fetchBackendInfo());\r\n }, [dispatch]);\r\n\r\n useEffect(() => {\r\n dispatch(handleUserIdle(isIdle));\r\n }, [isIdle, dispatch]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n {t('about.productName')}\r\n \r\n\r\n \r\n {t('about.productDescription')}\r\n \r\n\r\n \r\n {t('about.technicalQuestionsParagraph')}\r\n  \r\n \r\n {t('about.technicalQuesionsEmailLabel')}\r\n \r\n \r\n \r\n\r\n \r\n
\r\n \r\n RUBBLE MASTER HMH GmbH\r\n
\r\n Im Südpark 196 | 4030 Linz | Austria\r\n
\r\n T +43 732 73 71 17 – 668\r\n
\r\n F +43 732 73 71 17 – 101\r\n
E{' '}\r\n \r\n {t('about.technicalQuesionsEmailLabel')}\r\n \r\n
\r\n \r\n\r\n \r\n
\r\n \r\n {`${t('about.version')}: ${\r\n !!backendInfo.version ? backendInfo.version.split(\"-\")[0] : '-'\r\n }` } \r\n \r\n \r\n {t('general.loggedInAs')} {userSettings?.email}\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\r\nimport {\r\n IMachine,\r\n ITelemetrySnapshot,\r\n IState,\r\n IReduxState,\r\n} from '../../types';\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TablePagination,\r\n TableRow,\r\n TableSortLabel,\r\n Paper,\r\n Chip,\r\n Link,\r\n Button,\r\n} from '@material-ui/core';\r\nimport { themeColors } from '../../constants';\r\nimport TuneIcon from '@material-ui/icons/Tune';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { getSuggestedAddressForMachine } from '../../actions/machineActions';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nfunction desc(a: T, b: T, orderBy: keyof T) {\r\n if (b[orderBy] < a[orderBy]) {\r\n return -1;\r\n }\r\n if (b[orderBy] > a[orderBy]) {\r\n return 1;\r\n }\r\n return 0;\r\n}\r\n\r\nfunction stableSort(array: ISortableMachine[], cmp: (a: T, b: T) => number) {\r\n const stabilizedThis = array.map((el, index) => [el, index] as [any, number]);\r\n stabilizedThis.sort((a, b) => {\r\n const order = cmp(a[0], b[0]);\r\n if (order !== 0) return order;\r\n return a[1] - b[1];\r\n });\r\n return stabilizedThis.map((el) => el[0]);\r\n}\r\n\r\ntype Order = 'asc' | 'desc';\r\n\r\nfunction getSorting(\r\n order: Order,\r\n orderBy: K\r\n): (\r\n a: { [key in K]: number | string },\r\n b: { [key in K]: number | string }\r\n) => number {\r\n return order === 'desc'\r\n ? (a, b) => desc(a, b, orderBy)\r\n : (a, b) => -desc(a, b, orderBy);\r\n}\r\n\r\ninterface HeadCell {\r\n disablePadding: boolean;\r\n id: string | number;\r\n label: string;\r\n numeric: boolean;\r\n}\r\n\r\ninterface EnhancedTableProps {\r\n classes: ReturnType;\r\n onRequestSort: (\r\n event: React.MouseEvent,\r\n property: string | number\r\n ) => void;\r\n order: Order;\r\n orderBy: string | number;\r\n rowCount: number;\r\n}\r\n\r\nfunction EnhancedTableHead(props: EnhancedTableProps) {\r\n const { classes, order, orderBy, onRequestSort } = props;\r\n const createSortHandler = (property: string | number) => (\r\n event: React.MouseEvent\r\n ) => {\r\n onRequestSort(event, property);\r\n };\r\n\r\n const { t } = useTranslation();\r\n\r\n const headCells: HeadCell[] = [\r\n {\r\n id: 'serialNumber',\r\n numeric: true,\r\n disablePadding: false,\r\n label: t('list.srn'),\r\n },\r\n {\r\n id: 'totalHoursOfCrusherOperation',\r\n numeric: true,\r\n disablePadding: false,\r\n label: t('list.totalOperationHours'),\r\n },\r\n {\r\n id: 'isIgnitionOn',\r\n numeric: false,\r\n disablePadding: false,\r\n label: t('list.ignition'),\r\n },\r\n // {\r\n // id: 'state',\r\n // numeric: false,\r\n // disablePadding: false,\r\n // label: t('list.machineState'),\r\n // },\r\n {\r\n id: 'stateText',\r\n numeric: false,\r\n disablePadding: false,\r\n label: t('list.machineState'),\r\n },\r\n {\r\n id: 'owner',\r\n numeric: false,\r\n disablePadding: false,\r\n label: t('list.owner'),\r\n },\r\n {\r\n id: 'nextService',\r\n numeric: false,\r\n disablePadding: false,\r\n label: t('list.nextServiceHours'),\r\n },\r\n {\r\n id: 'projectConstructionSite',\r\n numeric: false,\r\n disablePadding: false,\r\n label: t('list.constructionSite'),\r\n },\r\n {\r\n id: 'suggestedAddress',\r\n numeric: false,\r\n disablePadding: false,\r\n label: t('list.suggestedAddress'),\r\n },\r\n ];\r\n\r\n return (\r\n \r\n \r\n {headCells.map((headCell) => (\r\n \r\n \r\n {headCell.label}\r\n {orderBy === headCell.id ? (\r\n \r\n {order === 'desc' ? 'sorted descending' : 'sorted ascending'}\r\n \r\n ) : null}\r\n \r\n \r\n ))}\r\n {t('list.details')}\r\n \r\n \r\n );\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n maxWidth: '100%',\r\n margin: `${theme.spacing(4)}px ${theme.spacing(2)}px`,\r\n },\r\n paper: {\r\n width: '100%',\r\n marginBottom: theme.spacing(2),\r\n },\r\n table: {\r\n minWidth: 750,\r\n },\r\n visuallyHidden: {\r\n border: 0,\r\n clip: 'rect(0 0 0 0)',\r\n height: 1,\r\n margin: -1,\r\n overflow: 'hidden',\r\n padding: 0,\r\n position: 'absolute',\r\n top: 20,\r\n width: 1,\r\n },\r\n tableHead: {\r\n color: themeColors.yellow,\r\n },\r\n sortLabel: {\r\n color: `${themeColors.yellow} !important`,\r\n },\r\n pagination: {\r\n color: `${themeColors.yellow} !important`,\r\n },\r\n chipRed: {\r\n backgroundColor: themeColors.red,\r\n color: themeColors.white,\r\n },\r\n chipGreen: {\r\n backgroundColor: themeColors.green,\r\n color: themeColors.white,\r\n },\r\n cell: {\r\n maxWidth: 300,\r\n },\r\n tableBottom: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n },\r\n getAddresses: {\r\n margin: theme.spacing(2),\r\n [theme.breakpoints.up('md')]: {\r\n margin: `0 0 0 ${theme.spacing(2)}`,\r\n },\r\n },\r\n })\r\n);\r\n\r\ninterface IProps {\r\n startRowsPerPage?: number;\r\n}\r\n\r\ninterface ISortableMachine {\r\n id: number;\r\n serialNumber: string;\r\n totalHoursOfCrusherOperation: number | null;\r\n isIgnitionOn: boolean;\r\n owner: string;\r\n nextService: any;\r\n projectConstructionSite: string | null;\r\n state: IState;\r\n stateText: string;\r\n suggestedAddress?: string | null;\r\n telemetrySnapshot?: ITelemetrySnapshot | null;\r\n}\r\n\r\nexport default function EnhancedTable(props: IProps) {\r\n const machines = useSelector(\r\n (state: IReduxState) => state.machines.filteredMachines\r\n );\r\n const rows = !!machines\r\n ? machines.map((machine: IMachine, index) => {\r\n if(machine !== null && machine.logInfo !== null && !!machine.logInfo){\r\n console.log(\"###################################################\");\r\n console.log(machine.logInfo);\r\n console.log(\"###################################################\");\r\n }\r\n return {\r\n id: machine.id,\r\n serialNumber: machine.serialNumber,\r\n totalHoursOfCrusherOperation: !!machine.telemetrySnapshot\r\n ? (machine.telemetrySnapshot.totalHoursOfCrusherOperation as number)\r\n : 0,\r\n isIgnitionOn: !!machine.telemetrySnapshot\r\n ? (machine.telemetrySnapshot?.isIgnitionOn as boolean)\r\n : false,\r\n state: machine.state,\r\n stateText: machine.stateText,\r\n owner: machine.owner,\r\n nextService: !!machine.nextService\r\n ? machine.nextService.workingHoursTillService\r\n : '-',\r\n projectConstructionSite: machine.projectConstructionSite,\r\n suggestedAddress: machine.suggestedAddress,\r\n telemetrySnapshot: machine.telemetrySnapshot,\r\n };\r\n })\r\n : [];\r\n const startRowsPerPage = props.startRowsPerPage ? props.startRowsPerPage : 0;\r\n const classes = useStyles();\r\n const [order, setOrder] = React.useState('asc');\r\n const [orderBy, setOrderBy] = React.useState('id');\r\n const [page, setPage] = React.useState(0);\r\n const [rowsPerPage, setRowsPerPage] = React.useState(startRowsPerPage);\r\n const { t, i18n } = useTranslation();\r\n const dispatch = useDispatch();\r\n\r\n const handleRequestSort = (\r\n event: React.MouseEvent,\r\n property: string | number\r\n ) => {\r\n const isAsc = orderBy === property && order === 'asc';\r\n setOrder(isAsc ? 'desc' : 'asc');\r\n setOrderBy(property);\r\n };\r\n\r\n const handleChangePage = (event: unknown, newPage: number) => {\r\n setPage(newPage);\r\n };\r\n\r\n const handleChangeRowsPerPage = (\r\n event: React.ChangeEvent\r\n ) => {\r\n setRowsPerPage(parseInt(event.target.value, 10));\r\n setPage(0);\r\n };\r\n\r\n const getAddress = (machine: IMachine) => {\r\n console.log(\"***************************************\");\r\n console.log(\"In getAddress \" + machine.id + \" - \" + machine.serialNumber);\r\n if (!!machine.telemetrySnapshot) {\r\n console.log(\"***************************************\");\r\n console.log(\"In getAddress \" + machine.id + \" - \" + machine.serialNumber);\r\n const { location } = machine.telemetrySnapshot;\r\n\r\n console.log(\"location\");\r\n console.log(location);\r\n\r\n if (\r\n location &&\r\n location.latitude !== null &&\r\n location.longitude !== null\r\n ) {\r\n console.log(\"In then1\");\r\n dispatch(\r\n getSuggestedAddressForMachine(\r\n machine.id,\r\n location.latitude,\r\n location.longitude\r\n )\r\n );\r\n }\r\n else{\r\n console.log(\"In else1\");\r\n }\r\n }\r\n };\r\n\r\n const getPageAddresses = () => {\r\n console.log(\"In getPageAddresses\");\r\n\r\n const machinesOnPage = stableSort(rows, getSorting(order, orderBy)).slice(\r\n page * rowsPerPage,\r\n page * rowsPerPage + rowsPerPage\r\n );\r\n console.log(\"=> getAddress\");\r\n machinesOnPage.forEach((machine: IMachine) => getAddress(machine));\r\n };\r\n\r\n const emptyRows =\r\n rowsPerPage - Math.min(rowsPerPage, rows.length - page * rowsPerPage);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {stableSort(rows, getSorting(order, orderBy))\r\n .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\r\n .map((row: IMachine, index: number) => {\r\n const labelId = `enhanced-table-${index}`;\r\n return (\r\n \r\n\r\n \r\n \r\n {row.serialNumber}\r\n \r\n \r\n\r\n \r\n {row.telemetrySnapshot?.totalHoursOfCrusherOperation}\r\n \r\n\r\n \r\n \r\n \r\n\r\n {/* */}\r\n\r\n {/* */}\r\n\r\n \r\n {i18n.exists(`machine.state.${row.stateText}`)\r\n ? t(`machine.state.${row.stateText}`)\r\n : row.stateText}\r\n \r\n\r\n \r\n {row.owner}\r\n \r\n \r\n \r\n {!!row.nextService ? `${row.nextService}` : '-'}\r\n \r\n\r\n \r\n {row.projectConstructionSite}\r\n \r\n\r\n \r\n {row.telemetrySnapshot === undefined ? (\r\n t('list.addressNotFound')\r\n ) : row.suggestedAddress === null ? (\r\n getAddress(row)}\r\n >\r\n {t('list.getAddress')}\r\n \r\n ) : row.suggestedAddress === undefined ? (\r\n t('list.addressNotFound')\r\n ) : (\r\n row.suggestedAddress\r\n )}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n );\r\n })}\r\n {emptyRows > 0 && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n
\r\n \r\n {t('list.getAddresses')}\r\n \r\n \r\n
\r\n
\r\n
\r\n);\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport EnhancedTable from './EnhancedTable';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { CircularProgress, Grid, makeStyles, Theme, createStyles } from '@material-ui/core';\r\nimport RubbleBreadcrumbs from '../RubbleBreadcrumbs';\r\nimport { routes } from '../../constants';\r\nimport { IReduxState } from '../../types';\r\nimport { getAllMachines } from '../../actions/machineActions';\r\nimport { handleUserIdle } from '../../actions/authActions';\r\nimport { useIdle } from '../useIdle';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n paddingLeft: theme.spacing(4),\r\n margin: `${theme.spacing(4)}px auto`,\r\n position: 'relative',\r\n maxWidth: '1960px',\r\n },\r\n })\r\n);\r\n\r\nexport default function RubbleList() {\r\n const classes = useStyles();\r\n const isFetchingAllMachines = useSelector((state: IReduxState) => state.machines.isFetchingAllMachines);\r\n const dispatch = useDispatch();\r\n\r\n const isIdle = useIdle();\r\n\r\n console.log(\"******************************************\");\r\n console.log(\"In RubbleList\");\r\n console.log(\"******************************************\");\r\n\r\n // Get all machines on mount\r\n useEffect(() => {\r\n dispatch(getAllMachines());\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n useEffect(() => {\r\n dispatch(handleUserIdle(isIdle));\r\n }, [isIdle, dispatch]);\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n \r\n {isFetchingAllMachines ? : }\r\n \r\n
\r\n );\r\n}\r\n","import i18n from 'i18next';\r\nimport { initReactI18next } from 'react-i18next';\r\nimport Backend from 'i18next-xhr-backend';\r\nimport moment from \"moment\";\r\n\r\nmoment.updateLocale(\"en\", { week: { dow: 1, doy: 1}})\r\n\r\n// https://stackoverflow.com/questions/42308261/how-to-disable-caching-for-i18next-translation-json-files\r\n\r\ni18n\r\n // learn more: https://github.com/i18next/i18next-xhr-backend\r\n .use(Backend)\r\n // connect with React\r\n .use(initReactI18next)\r\n // for all options read: https://www.i18next.com/overview/configuration-options\r\n .init({\r\n debug: false,\r\n lng: 'en',\r\n fallbackLng: 'en',\r\n whitelist: ['en', 'de', 'es', 'fr', 'it'],\r\n interpolation: {\r\n escapeValue: false, // not needed for react as it escapes by default\r\n },\r\n backend:{\r\n requestOptions: {\r\n cache: 'no-store',\r\n },\r\n }\r\n });\r\nexport default i18n;","import React from 'react';\r\nimport { ButtonBase, makeStyles, Theme, Typography } from '@material-ui/core';\r\nimport { themeColors } from '../../constants';\r\nimport rmFleetManagement from '../../assets/img/fleet_management.png';\r\nimport rmDocumentation from '../../assets/img/documentation_portal.png';\r\nimport rmWebshop from '../../assets/img/webshop.png';\r\nimport rmCockpit from '../../assets/img/cockpit.png';\r\nimport rmProductConfigurator from '../../assets/img/product_config.png';\r\nimport rmAcademy from '../../assets/img/academy.png';\r\nimport rmVirtualWorld from '../../assets/img/virtual_world.png';\r\nimport rmDigitalInsight from '../../assets/img/digital_insights.png';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ninterface IServiceCardProps {\r\n // type: 'digital' | 'fleetmanagement' | 'documentation' | 'webshop' | 'cockpit' | 'machineConfigurator' | 'investmentCalculator' | 'upload';\r\n type: 'fleetmanagement' | 'productConfigurator' | 'webshop' | 'academy' | 'documentation' | 'cockpit' | 'virtualworld' | 'digital';\r\n isActive: boolean;\r\n isAvailable: boolean;\r\n cardTitle?: string;\r\n description?: string;\r\n loginButtonLabel?: string;\r\n onClickHandler?: () => void;\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n // Unterteilung der Seite\r\n cardWrapper: {\r\n height: 230,\r\n width: 276,\r\n margin: theme.spacing(2),\r\n [theme.breakpoints.up('md')]: {\r\n margin: `${theme.spacing(2)}px ${theme.spacing(4)}px`,\r\n },\r\n [theme.breakpoints.up('md')]: {\r\n margin: `${theme.spacing(4)}px`,\r\n },\r\n position: 'relative',\r\n },\r\n card: {\r\n // width: '225px',\r\n // height: '270px',\r\n width: 'fit-content',\r\n height: '236px',\r\n marginRight: '20px',\r\n color: themeColors.black,\r\n // backgroundColor: themeColors.blueGray,\r\n //backgroundColor: themeColors.green,\r\n transition: '0.1s all ease-in-out',\r\n transformOrigin: '50% 50%',\r\n backfaceVisibility: 'hidden',\r\n // clipPath: 'polygon(100% 0, 100% 250px, 205px 100%, 0 100%, 0 0)',\r\n // WebkitClipPath:'polygon(100% 0, 100% 250px, 205px 100%, 0 100%, 0 0)',\r\n '&:hover': {\r\n transform: 'scale(1.1)',\r\n boxShadow: '0px 3px 1px -2px rgba(0,0,0,0.2), 0px 2px 2px 0px rgba(0,0,0,0.14), 0px 1px 5px 0px rgba(0,0,0,0.12)',\r\n },\r\n alignItems: 'flex-start',\r\n zIndex: 1,\r\n position: 'relative',\r\n },\r\n cardDisabled: {\r\n position: 'absolute',\r\n height: '100%',\r\n width: '100%',\r\n backgroundColor: themeColors.white,\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n opacity: 0.5,\r\n },\r\n cardActive: {},\r\n cardContent: {\r\n color: themeColors.black,\r\n height: '270px',\r\n // background: themeColors.lightGray,\r\n },\r\n textBox: {\r\n maxWidth: '600px',\r\n opacity: 0.8,\r\n },\r\n title: {\r\n fontFamily: '\"EurostileLTStd\", \"Jura\", \"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\r\n textTransform: 'uppercase',\r\n fontWeight: 'bold',\r\n textAlign: 'left',\r\n minHeight: 50,\r\n marginLeft: theme.spacing(1),\r\n lineHeight: '1.25rem',\r\n },\r\n description: {\r\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\r\n marginLeft: theme.spacing(1),\r\n textAlign: 'left',\r\n },\r\n headerImage: {\r\n // width: 208,\r\n // height: 100,\r\n width: '260px',\r\n height: '220px',\r\n margin: theme.spacing(1),\r\n },\r\n label: {\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n bottom: theme.spacing(2),\r\n },\r\n shadowOuterHelper: {\r\n filter: 'drop-shadow(10px 10px 6px black)',\r\n width: '100%',\r\n height: '100%',\r\n top: 0,\r\n position: 'absolute',\r\n },\r\n shadowInnerHelper: {\r\n //clipPath: 'polygon(100% 0, 100% 250px, 205px 100%, 0 100%, 0 0)',\r\n //WebkitClipPath: 'polygon(100% 0, 100% 250px, 205px 100%, 0 100%, 0 0)',\r\n //background: themeColors.lightGray,\r\n width: '100%',\r\n height: '100%',\r\n top: 0,\r\n position: 'absolute',\r\n zIndex: 0,\r\n },\r\n}));\r\n\r\nexport default function ServiceCard(props: IServiceCardProps) {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const { type, description, cardTitle, isActive, onClickHandler, loginButtonLabel, isAvailable } = props;\r\n\r\n let headerImageSrc: string;\r\n\r\n // type: 'fleetmanagement' | 'productConfigurator' | 'webshop' | 'academy' | 'documentation' | 'cockpit' | 'virtualworld' | 'digital';\r\n switch (type) {\r\n case 'fleetmanagement':\r\n headerImageSrc = rmFleetManagement;\r\n break;\r\n case 'productConfigurator':\r\n headerImageSrc = rmProductConfigurator;\r\n break;\r\n case 'webshop':\r\n headerImageSrc = rmWebshop;\r\n break;\r\n case 'academy':\r\n headerImageSrc = rmAcademy;\r\n break;\r\n case 'documentation':\r\n headerImageSrc = rmDocumentation;\r\n break;\r\n case 'cockpit':\r\n headerImageSrc = rmCockpit;\r\n break;\r\n case 'virtualworld':\r\n headerImageSrc = rmVirtualWorld;\r\n break;\r\n case 'digital': // digital insight\r\n headerImageSrc = rmDigitalInsight;\r\n break;\r\n default:\r\n headerImageSrc = rmDigitalInsight;\r\n break;\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n {/* \r\n {cardTitle}\r\n \r\n {!!description && (\r\n \r\n {description}\r\n \r\n )}\r\n \r\n {isAvailable ? loginButtonLabel : `${t('login.comingSoon')}`}\r\n */}\r\n \r\n
\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 // {/* \r\n // {cardTitle}\r\n // \r\n // {!!description && (\r\n // \r\n // {description}\r\n // \r\n // )}\r\n // \r\n // {isAvailable ? loginButtonLabel : `${t('login.comingSoon')}`}\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 { makeStyles, Theme, Typography } from '@material-ui/core';\r\nimport rmBackground from '../../assets/img/rm_digital_solutions.jpg';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { redirectLogin, fetchUserSession } from '../../actions/authActions';\r\nimport ServiceCard from './ServiceCard';\r\nimport { useHistory } from 'react-router';\r\nimport { openLinkWithRewrite, routes } from '../../constants';\r\nimport rmWebIcon from '../../assets/img/web.png';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n wrapper: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n minHeight: 'calc(100vH - 96px)',\r\n [theme.breakpoints.up('sm')]: {\r\n minHeight: 'calc(100vH - 96px)',\r\n },\r\n background: `url(${rmBackground})`,\r\n backgroundPosition: 'top',\r\n backgroundSize: '600px 600px',\r\n [theme.breakpoints.up('sm')]: {\r\n backgroundPosition: 'center center',\r\n backgroundSize: 'cover',\r\n },\r\n position: 'relative',\r\n },\r\n container: {\r\n position: 'relative',\r\n [theme.breakpoints.up('xl')]: {\r\n minWidth: '1900px',\r\n top: '-40px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n },\r\n cardsWrapper: {\r\n maxWidth: 1680,\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n flexWrap: 'wrap',\r\n marginBottom: theme.spacing(4),\r\n [theme.breakpoints.up('lg')]: {\r\n marginBottom: 0,\r\n },\r\n // [theme.breakpoints.up('sm')]: {\r\n // flexDirection: 'column',\r\n // },\r\n },\r\n // firstLineCards: {\r\n // display: 'flex',\r\n // flexWrap: 'wrap',\r\n // justifyContent: 'center',\r\n // height: '280px',\r\n // },\r\n headerWrapper: {\r\n marginTop: theme.spacing(4),\r\n textAlign: 'center',\r\n maxWidth: 1680,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-evenly',\r\n flexWrap: 'wrap',\r\n [theme.breakpoints.up('md')]: {\r\n textAlign: 'inherit',\r\n },\r\n },\r\n titleWrapper: {\r\n margin: theme.spacing(4),\r\n [theme.breakpoints.up('lg')]: {\r\n width: `calc(100VW - ${theme.spacing(16)}px)`,\r\n // margin: 0,\r\n },\r\n [theme.breakpoints.up('xl')]: {\r\n // position: 'absolute',\r\n position: 'relative',\r\n width: 'auto',\r\n top: '-80px',\r\n // left: `${theme.spacing(4)}px`,\r\n // top: `-${theme.spacing(4)}px`,\r\n },\r\n\r\n },\r\n title: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'baseline',\r\n [theme.breakpoints.up('sm')]: {\r\n flexDirection: 'row',\r\n },\r\n letterSpacing: theme.spacing(1),\r\n },\r\n title1: {\r\n marginRight: theme.spacing(2),\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontWeight: 'bold',\r\n fontFamily:\r\n '\"EurostileLTStdDemi\", \"Jura\", \"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\r\n letterSpacing: '4px',\r\n transform: 'scale(1, 0.9)',\r\n },\r\n // title2: {\r\n // fontFamily:\r\n // '\"EurostileLTStd\", \"Jura\", \"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\r\n // transform: 'scaleX(1.2)',\r\n // WebkitTransform: 'scaleX(1.2)',\r\n // display: 'inline-block',\r\n // marginLeft: '32px',\r\n // },\r\n subtitleWrapper: {\r\n textAlign: 'center',\r\n },\r\n subtitle: {\r\n fontFamily: 'EurostileNextLTPro',\r\n textTransform: 'uppercase',\r\n },\r\n logoWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n margin: theme.spacing(2),\r\n textDecoration: 'none', // Entfernt Unterstrich vom Link\r\n color: 'inherit', // Verwendet die Standard-Textfarbe\r\n },\r\n logo: {\r\n height: '40px', // Passe die Größe des Icons an\r\n width: '40px',\r\n position: 'relative',\r\n top: '18px',\r\n cursor: 'pointer',\r\n marginRight: theme.spacing(1), // Platz zwischen Icon und Text\r\n [theme.breakpoints.up('xs')]: {\r\n height: '25px', // Passe die Größe des Icons an\r\n width: '25px',\r\n top: '3px',\r\n },\r\n },\r\n linkText: {\r\n color: 'inherit', // Verwendet Standard-Textfarbe\r\n textDecoration: 'none', // Entfernt Unterstrich vom Link\r\n },\r\n logoText: {\r\n color: 'inherit',\r\n },\r\n // firstLineCardsHelper: {\r\n // display: 'none',\r\n // [theme.breakpoints.up('lg')]: {\r\n // display: 'block',\r\n // width: '225px',\r\n // margin: theme.spacing(4),\r\n // },\r\n // },\r\n}));\r\n\r\nexport default function Portal() {\r\n const dispatch = useDispatch();\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const history = useHistory();\r\n React.useEffect(() => {\r\n dispatch(fetchUserSession());\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n {t('login.title1')}\r\n \r\n {/* \r\n {t('login.title2')}\r\n */}\r\n
\r\n
\r\n \r\n {t('login.subtitle1')}\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n {/*
*/}\r\n dispatch(redirectLogin(routes.map.pathName))\r\n }\r\n />\r\n openLinkWithRewrite(routes.machineConfigurator.pathName)}\r\n />\r\n openLinkWithRewrite(routes.webshop.pathName)}\r\n />\r\n history.push(routes.welcome.pathName)}\r\n onClickHandler={() => openLinkWithRewrite(routes.academy.pathName)}\r\n />\r\n
\r\n\r\n
\r\n openLinkWithRewrite(routes.documentation.pathName)\r\n }\r\n />\r\n openLinkWithRewrite(routes.cockpit.pathName)}\r\n />\r\n openLinkWithRewrite(routes.virtualworld.pathName)}\r\n />\r\n openLinkWithRewrite(routes.digital.pathName)}\r\n />\r\n
\r\n\r\n \r\n\r\n
\r\n
\r\n );\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { Container, makeStyles, Theme } from '@material-ui/core';\r\nimport RubbleBreadcrumbs from '../RubbleBreadcrumbs';\r\nimport { routes } from '../../constants';\r\nimport { handleUserIdle } from '../../actions/authActions';\r\nimport { useIdle } from '../useIdle';\r\nimport { digEcoSysYouTubeUrl } from '../../constants/index';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n marginTop: theme.spacing(2),\r\n },\r\n fullHeight: {\r\n minHeight: 'calc(100vH - 88px)',\r\n [theme.breakpoints.up('sm')]: {\r\n minHeight: 'calc(100vH - 96px)',\r\n },\r\n },\r\n pageTitle: {\r\n marginTop: theme.spacing(2),\r\n },\r\n content: {},\r\n container: {\r\n paddingLeft: theme.spacing(4),\r\n margin: `${theme.spacing(4)}px auto`,\r\n position: 'relative',\r\n maxWidth: '1960px',\r\n },\r\n playerWrapper: {\r\n position: 'relative',\r\n paddingTop: '56.25%' /* Player ratio: 100 / (1280 / 720) */,\r\n },\r\n player: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n },\r\n}));\r\n\r\nexport default function Welcome() {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const isIdle = useIdle();\r\n const { t } = useTranslation();\r\n\r\n useEffect(() => {\r\n dispatch(handleUserIdle(isIdle));\r\n }, [isIdle, dispatch]);\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","export const digEcoSysYouTubeUrl = 'https://www.youtube.com/embed/RXuLyOOcmaY';\r\n","import React, { Suspense } from 'react';\r\nimport Header from './components/Header/index';\r\nimport { ThemeProvider } from '@material-ui/core/styles';\r\nimport { rubbleMasterTheme, routes } from './constants';\r\nimport { Router, Switch, Route, Redirect } from 'react-router-dom';\r\nimport Dashboard from './components/Dashboard';\r\nimport NotFound from './components/NotFound';\r\nimport { CssBaseline } from '@material-ui/core';\r\nimport history from './components/history';\r\nimport ProtectedRoute from './components/Auth/ProtectedRoute';\r\nimport Machine from './components/MachineDetails/';\r\nimport About from './components/About';\r\nimport Upload from './components/uploader/Upload';\r\nimport RubbleList from './components/RubbleList/index';\r\nimport './i18n';\r\nimport Portal from './components/Portal/index';\r\nimport Welcome from './components/Welcome/index';\r\nimport UploadFile from './components/uploader/UploadFile';\r\n\r\nconst App: React.FC = () => {\r\n console.log(\"In App\");\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 // Production\r\n let adr = 'https://rmcockpit.azurewebsites.net/';\r\n window.location.href = adr;\r\n return null;\r\n }}\r\n />\r\n {\r\n // Production\r\n let adr = 'https://icy-desert-0f60c3203.5.azurestaticapps.net/';\r\n // Current\r\n //let adr = 'https://mango-moss-0a6bacc03.5.azurestaticapps.net/';\r\n window.location.href = adr;\r\n return null;\r\n }}\r\n />\r\n {\r\n // Production\r\n let adr = 'https://rm-family.online/login/';\r\n window.location.href = adr;\r\n return null;\r\n }}\r\n />\r\n {\r\n // Production\r\n let adr = 'https://virtualworld.rubblemaster.com/';\r\n window.location.href = adr;\r\n return null;\r\n }}\r\n />\r\n {\r\n // Production\r\n let adr = 'https://www.rmdigitalservices.com/';\r\n window.location.href = adr;\r\n return null;\r\n }}\r\n />\r\n {\r\n // Production\r\n let adr = 'https://shop.rubblemaster.com/';\r\n window.location.href = adr;\r\n return 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};\r\n\r\nexport default App;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\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 subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\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.0/8 are 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\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\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(\r\n process.env.PUBLIC_URL,\r\n window.location.href\r\n );\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/facebook/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. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\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 // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\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: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' }\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -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, config);\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 FETCH_USER_REQUEST,\r\n FETCH_USER_SUCCESS,\r\n FETCH_USER_FAIL,\r\n FETCH_BACKEND_INFO_SUCCESS,\r\n USER_LANGUAGE_CHANGE,\r\n USER_UNIT_CHANGE,\r\n} from '../actions/types';\r\nimport { IReduxAuthProps } from '../types';\r\n\r\nconst initialState: IReduxAuthProps = {\r\n isAuthenticated: null,\r\n isLoading: null,\r\n user: null,\r\n backendInfo: {\r\n version: null,\r\n },\r\n};\r\n\r\nexport default function(state = initialState, action: any) {\r\n switch (action.type) {\r\n case FETCH_USER_REQUEST:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n };\r\n case FETCH_USER_SUCCESS:\r\n return {\r\n ...state,\r\n isAuthenticated: true,\r\n isLoading: false,\r\n user: action.payload,\r\n };\r\n case FETCH_USER_FAIL:\r\n return {\r\n ...state,\r\n isAuthenticated: false,\r\n isLoading: false,\r\n };\r\n case FETCH_BACKEND_INFO_SUCCESS:\r\n return {\r\n ...state,\r\n backendInfo: action.payload,\r\n };\r\n case USER_LANGUAGE_CHANGE:\r\n return {\r\n ...state,\r\n user: {\r\n ...state.user,\r\n isoLanguageCode: action.payload.isoLanguageCode,\r\n },\r\n };\r\n case USER_UNIT_CHANGE:\r\n return {\r\n ...state,\r\n user: {\r\n ...state.user,\r\n measurementSystem: action.payload.measurementSystem,\r\n },\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import {\r\n UPDATE_SEARCH_TEXTFIELD,\r\n UPDATE_SEARCH_IGNITION_ON,\r\n UPDATE_SEARCH_IGNITION_OFF,\r\n UPDATE_SEARCH_MACHINE_STATE,\r\n TOGGLE_SEARCH,\r\n MACHINES_FOUND,\r\n NO_MACHINES_FOUND,\r\n RESET_SEARCH_FILTERS,\r\n UPDATE_MAP_CENTER,\r\n RESET_MAP_CENTER,\r\n FETCH_MACHINE_STATE_OPTIONS_SUCCESS,\r\n GET_USER_POSITION_SUCCESS,\r\n GET_USER_POSITION_FAIL,\r\n FETCH_MACHINE_TAG_OPTIONS_SUCCESS,\r\n UPDATE_SEARCH_MACHINE_TAGS,\r\n} from '../actions/types';\r\nimport { rubbleMasterHq } from '../constants';\r\nimport { IReduxSearchProps } from '../types';\r\n\r\nconst initialState: IReduxSearchProps = {\r\n showSearch: false,\r\n showSearchError: false,\r\n searchText: '',\r\n searchTextValue: '',\r\n checkboxIgnitionOn: true,\r\n checkboxIgnitionOff: true,\r\n machineStateOptions: [],\r\n extendedMachineStateOptions: [{ id: 0, key: 'all' }],\r\n selectedMachineState: { id: 0, key: 'all' },\r\n map: {\r\n panToCenter: rubbleMasterHq,\r\n userConfirmedGeo: false,\r\n userPosition: rubbleMasterHq,\r\n error: '',\r\n },\r\n machineTagOptions: [],\r\n selectedMachineTags: [],\r\n};\r\n\r\nexport default function(state = initialState, action: any) {\r\n switch (action.type) {\r\n case TOGGLE_SEARCH:\r\n return {\r\n ...state,\r\n showSearch: !state.showSearch,\r\n };\r\n case UPDATE_SEARCH_TEXTFIELD:\r\n return {\r\n ...state,\r\n searchText: action.payload,\r\n };\r\n case UPDATE_SEARCH_IGNITION_ON:\r\n return {\r\n ...state,\r\n checkboxIgnitionOn: !state.checkboxIgnitionOn,\r\n };\r\n case UPDATE_SEARCH_IGNITION_OFF:\r\n return {\r\n ...state,\r\n checkboxIgnitionOff: !state.checkboxIgnitionOff,\r\n };\r\n case UPDATE_SEARCH_MACHINE_STATE:\r\n return {\r\n ...state,\r\n selectedMachineState: action.payload,\r\n };\r\n case FETCH_MACHINE_STATE_OPTIONS_SUCCESS: {\r\n return {\r\n ...state,\r\n machineStateOptions: [...action.payload],\r\n extendedMachineStateOptions: [{ id: 0, key: 'all' }, ...action.payload],\r\n };\r\n }\r\n case MACHINES_FOUND:\r\n return {\r\n ...state,\r\n showSearchError: false,\r\n };\r\n case NO_MACHINES_FOUND:\r\n return {\r\n ...state,\r\n showSearchError: true,\r\n };\r\n case RESET_SEARCH_FILTERS:\r\n return {\r\n ...state,\r\n checkboxIgnitionOn: true,\r\n checkboxIgnitionOff: true,\r\n selectedMachineState: { id: 0, key: 'all' },\r\n selectedMachineTags: state.machineTagOptions,\r\n };\r\n case UPDATE_MAP_CENTER:\r\n return {\r\n ...state,\r\n map: {\r\n ...state.map,\r\n panToCenter: action.payload,\r\n },\r\n };\r\n case RESET_MAP_CENTER:\r\n return {\r\n ...state,\r\n map: {\r\n ...state.map,\r\n panToCenter: state.map.userPosition,\r\n },\r\n };\r\n case GET_USER_POSITION_SUCCESS: {\r\n return {\r\n ...state,\r\n map: {\r\n ...state.map,\r\n panToCenter: action.payload,\r\n userConfirmedGeo: true,\r\n userPosition: action.payload,\r\n },\r\n };\r\n }\r\n case GET_USER_POSITION_FAIL: {\r\n return {\r\n ...state,\r\n map: {\r\n ...state.map,\r\n userConfirmedGeo: false,\r\n error: action.payload,\r\n },\r\n };\r\n }\r\n case FETCH_MACHINE_TAG_OPTIONS_SUCCESS:\r\n return {\r\n ...state,\r\n machineTagOptions: action.payload,\r\n selectedMachineTags: action.payload,\r\n };\r\n case UPDATE_SEARCH_MACHINE_TAGS:\r\n return {\r\n ...state,\r\n selectedMachineTags: action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import {\r\n FETCH_ALL_MACHINES_REQUEST,\r\n FETCH_ALL_MACHINES_SUCCESS,\r\n FETCH_ALL_MACHINES_FAIL,\r\n UPDATE_FILTERED_MACHINES,\r\n SEARCH_MACHINES,\r\n FETCH_MACHINE_ADDRESS_SUCCESS,\r\n FETCH_MACHINE_ADDRESS_FAIL,\r\n FETCH_MACHINE_DETAILS_SUCCESS,\r\n} from '../actions/types';\r\nimport { IReduxMachines, IMachine } from '../types';\r\n\r\nconst initialState: IReduxMachines = {\r\n isFetchingAllMachines: false,\r\n hasFetchedAllMachines: false,\r\n allMachines: [],\r\n filteredMachines: [],\r\n};\r\n\r\nexport default function(state = initialState, action: any) {\r\n switch (action.type) {\r\n case FETCH_ALL_MACHINES_REQUEST:\r\n return {\r\n ...state,\r\n isFetchingAllMachines: true,\r\n };\r\n case FETCH_ALL_MACHINES_SUCCESS:\r\n return {\r\n ...state,\r\n hasFetchedAllMachines: true,\r\n isFetchingAllMachines: false,\r\n allMachines: action.payload,\r\n filteredMachines: action.payload,\r\n };\r\n case FETCH_ALL_MACHINES_FAIL:\r\n return {\r\n ...state,\r\n isFetchingAllMachines: false,\r\n };\r\n case SEARCH_MACHINES:\r\n return {\r\n ...state,\r\n filteredMachines: [],\r\n };\r\n case UPDATE_FILTERED_MACHINES:\r\n return {\r\n ...state,\r\n filteredMachines: action.payload,\r\n };\r\n case FETCH_MACHINE_ADDRESS_SUCCESS:\r\n const updatedAllMachines = state.allMachines.map((item: IMachine) => {\r\n if (item.id === action.payload.machineId) {\r\n return {\r\n ...item,\r\n suggestedAddress: action.payload.suggestedAddress,\r\n };\r\n } else {\r\n return item;\r\n }\r\n });\r\n const updatedFilteredMachines = state.filteredMachines.map(\r\n (item: IMachine) => {\r\n if (item.id === action.payload.machineId) {\r\n return {\r\n ...item,\r\n suggestedAddress: action.payload.suggestedAddress,\r\n };\r\n } else {\r\n return item;\r\n }\r\n }\r\n );\r\n return {\r\n ...state,\r\n allMachines: updatedAllMachines,\r\n filteredMachines: updatedFilteredMachines,\r\n };\r\n case FETCH_MACHINE_ADDRESS_FAIL:\r\n const notFound = 'notFound';\r\n return {\r\n ...state,\r\n allMachines: state.allMachines.map((item: IMachine) => {\r\n if (item.id === action.payload.machineId) {\r\n return {\r\n ...item,\r\n suggestedAddress: notFound,\r\n };\r\n } else {\r\n return item;\r\n }\r\n }),\r\n filteredMachines: state.filteredMachines.map((item: IMachine) => {\r\n if (item.id === action.payload.machineId) {\r\n return {\r\n ...item,\r\n suggestedAddress: notFound,\r\n };\r\n } else {\r\n return item;\r\n }\r\n }),\r\n };\r\n case FETCH_MACHINE_DETAILS_SUCCESS:\r\n return {\r\n ...state,\r\n allMachines: state.allMachines.map((item: IMachine) => {\r\n if (item.id === action.payload.id) {\r\n return action.payload;\r\n } else {\r\n return item;\r\n }\r\n }),\r\n filteredMachines: state.filteredMachines.map((item: IMachine) => {\r\n if (item.id === action.payload.id) {\r\n return action.payload;\r\n } else {\r\n return item;\r\n }\r\n }),\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import {\r\n FETCH_MACHINE_DETAILS_REQUEST,\r\n FETCH_MACHINE_DETAILS_SUCCESS,\r\n FETCH_MACHINE_DETAILS_FAIL,\r\n UPDATE_START_DATE,\r\n UPDATE_END_DATE,\r\n CREATE_PDF_REPORT,\r\n CREATE_PDF_REPORT_SUCCESS,\r\n UPDATE_MACHINE_STATE_SUCCESS,\r\n ADD_MACHINE_TAG_SUCCESS,\r\n DELETE_MACHINE_TAG_SUCCESS,\r\n EDIT_MACHINE_NOTE_SUCCESS,\r\n DELETE_MACHINE_NOTE_SUCCESS,\r\n FETCH_MACHINE_DETAILS_ADDRESS_FAIL,\r\n FETCH_MACHINE_DETAILS_ADDRESS_SUCCESS,\r\n FETCH_MACHINE_TELEMETRY_SUCCESS,\r\n FETCH_MACHINE_TELEMETRY_REQUEST,\r\n FETCH_MACHINE_TELEMETRY_FAIL,\r\n SET_AVERAGE_ENGINE_UTILIZATION,\r\n SET_AVERAGE_FUEL_CONSUMPTION,\r\n RESET_MACHINE_DETAILS,\r\n UPDATE_GRAPH_TICK_VALUES,\r\n EDIT_MACHINE_PROJECT_CONSTRUCTION_SITE_SUCCESS,\r\n DELETE_MACHINE_PROJECT_CONSTRUCTION_SITE_SUCCESS,\r\n RESET_AVERAGE_FUEL_CONSUMPTION,\r\n RESET_AVERAGE_ENGINE_UTILIZATION,\r\n SET_FUEL_CONSUMED,\r\n RESET_FUEL_CONSUMED,\r\n SET_AVERAGE_THROUGHPUTS,\r\n RESET_AVERAGE_THROUGHPUTS,\r\n SET_AVERAGE_FUEL_LEVELS,\r\n RESET_AVERAGE_FUEL_LEVELS,\r\n SET_TOTAL_HOURS,\r\n RESET_TOTAL_HOURS,\r\n RESET_MACHINE_TELEMETRY,\r\n SET_AVERAGE_ENERGY_UTILIZATION,\r\n RESET_AVERAGE_ENERGY_UTILIZATION,\r\n RESET_AVERAGE_ENERGY_CONSUMPTION,\r\n SET_AVERAGE_ENERGY_CONSUMPTION,\r\n} from '../actions/types';\r\nimport { IReduxStateMachineDetails, IExtendedMachineTagOption } from '../types';\r\nimport { initialMachineState } from '../constants';\r\n\r\nconst today = new Date();\r\n// Set initial start date to 12hours back\r\nconst yesterday = new Date(today);\r\nyesterday.setDate(yesterday.getDate() - 1);\r\nyesterday.setHours(yesterday.getHours() + 12);\r\nconst startDate = yesterday;\r\nconst initialState: IReduxStateMachineDetails = {\r\n machine: initialMachineState,\r\n isFetching: false,\r\n updatedAt: new Date(),\r\n search: {\r\n startDate,\r\n endDate: today,\r\n maxEndDate: today,\r\n },\r\n isFetchingTelemtry: false,\r\n errorCodes: null,\r\n telemetry: null,\r\n graphTickValues: 'every day',\r\n graphDateFormat: 'DD.MM',\r\n averageFuelLevels: {\r\n fuelLevel: null,\r\n adBlueLevel: null,\r\n timestamp: null,\r\n },\r\n averageEngineUtilization: {\r\n value: null,\r\n timestamp: null,\r\n },\r\n averageEnergyUtilization: {\r\n value: null,\r\n timestamp: null,\r\n },\r\n averageThroughputs: {\r\n weightLoad1: null,\r\n weightLoad2: null,\r\n weightLoad3: null,\r\n weightLoad4: null,\r\n timestamp: null,\r\n },\r\n averageFuelConsumption: {\r\n mainDischargeConveyorFuelRate: null,\r\n sideDischargeConveyorFuelRate: null,\r\n engineFuelConsumed: null,\r\n engineFuelRate: null,\r\n timestamp: null,\r\n },\r\n averageEnergyConsumption: {\r\n mainDischargeConveyorEnergyRate: null,\r\n sideDischargeConveyorEnergyRate: null,\r\n energyConsumeRate: null,\r\n totalEnergyConsumed: null,\r\n timestamp: null,\r\n },\r\n totalEngineFuelConsumed: null,\r\n totalWeightLoad1: null,\r\n totalWeightLoad2: null,\r\n totalWeightLoad3: null,\r\n totalWeightLoad4: null,\r\n totalHoursOfEngineOperation: null,\r\n totalHoursOfCrusherOperation: null,\r\n totalHoursOfExternalPowerSupply: null,\r\n totalHoursOfInternalPowerSupply: null,\r\n co2Saved: null,\r\n dieselSaved: null,\r\n energySaved: null,\r\n co2Emission: null,\r\n suggestedAddress: '',\r\n isCreatingPdf: false,\r\n};\r\n\r\nexport default function(state = initialState, action: any) {\r\n switch (action.type) {\r\n case FETCH_MACHINE_DETAILS_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n };\r\n case FETCH_MACHINE_DETAILS_SUCCESS:\r\n return {\r\n ...state,\r\n machine: action.payload,\r\n isFetching: false,\r\n };\r\n case FETCH_MACHINE_DETAILS_FAIL:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n };\r\n case UPDATE_START_DATE:\r\n return {\r\n ...state,\r\n search: {\r\n ...state.search,\r\n startDate: action.payload,\r\n },\r\n };\r\n case UPDATE_END_DATE:\r\n return {\r\n ...state,\r\n search: {\r\n ...state.search,\r\n endDate: action.payload,\r\n },\r\n };\r\n case FETCH_MACHINE_TELEMETRY_REQUEST:\r\n return {\r\n ...state,\r\n isFetchingTelemtry: true,\r\n };\r\n case FETCH_MACHINE_TELEMETRY_SUCCESS:\r\n return {\r\n ...state,\r\n isFetchingTelemtry: false,\r\n telemetry: action.payload.telemetry,\r\n errorCodes: action.payload.errorCodes,\r\n };\r\n case FETCH_MACHINE_TELEMETRY_FAIL:\r\n return {\r\n ...state,\r\n isFetchingTelemtry: false,\r\n };\r\n case RESET_MACHINE_TELEMETRY:\r\n return {\r\n ...state,\r\n isFetchingTelemtry: false,\r\n errorCodes: null,\r\n telemetry: null,\r\n graphTickValues: 'every day',\r\n graphDateFormat: 'DD.MM',\r\n averageFuelLevels: {\r\n fuelLevel: null,\r\n adBlueLevel: null,\r\n timestamp: null,\r\n },\r\n averageEngineUtilization: {\r\n value: null,\r\n timestamp: null,\r\n },\r\n averageThroughputs: {\r\n weightLoad1: null,\r\n weightLoad2: null,\r\n weightLoad3: null,\r\n weightLoad4: null,\r\n timestamp: null,\r\n },\r\n averageFuelConsumption: {\r\n mainDischargeConveyorFuelRate: null,\r\n sideDischargeConveyorFuelRate: null,\r\n engineFuelConsumed: null,\r\n engineFuelRate: null,\r\n timestamp: null,\r\n },\r\n averageEnergyConsumption: {\r\n mainDischargeConveyorEnergyRate: null,\r\n sideDischargeConveyorEnergyRate: null,\r\n energyConsumeRate: null,\r\n totalEnergyConsumed: null,\r\n timestamp: null,\r\n },\r\n sumEngineFuelConsumed: null,\r\n totalWeightLoad1: null,\r\n totalWeightLoad2: null,\r\n totalWeightLoad3: null,\r\n totalWeightLoad4: null,\r\n totalHoursOfEngineOperation: null,\r\n totalHoursOfCrusherOperation: null,\r\n totalHoursOfExternalPowerSupply: null,\r\n totalHoursOfInternalPowerSupply: null,\r\n totalEngineFuelConsumed: null,\r\n co2Saved: null,\r\n dieselSaved: null,\r\n energySaved: null,\r\n co2Emission: null,\r\n isCreatingPdf: false,\r\n };\r\n case SET_AVERAGE_FUEL_LEVELS:\r\n return {\r\n ...state,\r\n averageFuelLevels: {\r\n fuelLevel: action.payload.value.fuelLevel,\r\n adBlueLevel: action.payload.value.adBlueLevel,\r\n timestamp: action.payload.timestamp,\r\n },\r\n };\r\n case RESET_AVERAGE_FUEL_LEVELS:\r\n return {\r\n ...state,\r\n averageFuelLevels: {\r\n fuelLevel: null,\r\n adBlueLevel: null,\r\n timestamp: null,\r\n },\r\n };\r\n case SET_AVERAGE_ENGINE_UTILIZATION:\r\n return {\r\n ...state,\r\n averageEngineUtilization: {\r\n value: action.payload.value,\r\n timestamp: action.payload.timestamp,\r\n },\r\n };\r\n case RESET_AVERAGE_ENGINE_UTILIZATION:\r\n return {\r\n ...state,\r\n averageEngineUtilization: {\r\n value: null,\r\n timestamp: null,\r\n },\r\n };\r\n case SET_AVERAGE_ENERGY_UTILIZATION:\r\n return {\r\n ...state,\r\n averageEnergyUtilization: {\r\n value: action.payload.value,\r\n timestamp: action.payload.timestamp,\r\n },\r\n };\r\n case RESET_AVERAGE_ENERGY_UTILIZATION:\r\n return {\r\n ...state,\r\n averageEnergyUtilization: {\r\n value: null,\r\n timestamp: null,\r\n },\r\n };\r\n case SET_AVERAGE_THROUGHPUTS:\r\n return {\r\n ...state,\r\n averageThroughputs: {\r\n weightLoad1: action.payload.value.weightLoad1,\r\n weightLoad2: action.payload.value.weightLoad2,\r\n weightLoad3: action.payload.value.weightLoad3,\r\n weightLoad4: action.payload.value.weightLoad4,\r\n timestamp: action.payload.timestamp,\r\n },\r\n };\r\n case RESET_AVERAGE_THROUGHPUTS:\r\n return {\r\n ...state,\r\n averageThroughputs: {\r\n weightLoad1: null,\r\n weightLoad2: null,\r\n weightLoad3: null,\r\n weightLoad4: null,\r\n timestamp: null,\r\n },\r\n };\r\n case SET_AVERAGE_FUEL_CONSUMPTION:\r\n return {\r\n ...state,\r\n averageFuelConsumption: {\r\n mainDischargeConveyorFuelRate:\r\n action.payload.mainDischargeConveyorFuelRate,\r\n sideDischargeConveyorFuelRate:\r\n action.payload.sideDischargeConveyorFuelRate,\r\n engineFuelConsumed: action.payload.engineFuelConsumed,\r\n engineFuelRate: action.payload.engineFuelRate,\r\n timestamp: action.payload.timestamp,\r\n },\r\n };\r\n case RESET_AVERAGE_FUEL_CONSUMPTION:\r\n return {\r\n ...state,\r\n averageFuelConsumption: {\r\n mainDischargeConveyorFuelRate: null,\r\n sideDischargeConveyorFuelRate: null,\r\n engineFuelConsumed: null,\r\n engineFuelRate: null,\r\n timestamp: null,\r\n },\r\n };\r\n case SET_AVERAGE_ENERGY_CONSUMPTION:\r\n return {\r\n ...state,\r\n averageEnergyConsumption: {\r\n mainDischargeConveyorEnergyRate:\r\n action.payload.mainDischargeConveyorEnergyRate,\r\n sideDischargeConveyorEnergyRate:\r\n action.payload.sideDischargeConveyorEnergyRate,\r\n energyConsumeRate: action.payload.energyConsumeRate,\r\n totalEnergyConsumed: action.payload.totalEnergyConsumed,\r\n timestamp: action.payload.timestamp,\r\n },\r\n };\r\n case RESET_AVERAGE_ENERGY_CONSUMPTION:\r\n return {\r\n ...state,\r\n averageEnergyConsumption: {\r\n mainDischargeConveyorEnergyRate: null,\r\n sideDischargeConveyorEnergyRate: null,\r\n energyConsumeRate: null,\r\n totalEnergyConsumed: null,\r\n timestamp: null,\r\n },\r\n };\r\n case SET_FUEL_CONSUMED:\r\n return {\r\n ...state,\r\n totalEngineFuelConsumed: {\r\n value: action.payload.value,\r\n unit: action.payload.unit,\r\n },\r\n };\r\n case RESET_FUEL_CONSUMED:\r\n return {\r\n ...state,\r\n sumEngineFuelConsumed: null,\r\n };\r\n case SET_TOTAL_HOURS:\r\n return {\r\n ...state,\r\n totalWeightLoad1: action.payload.totalWeightLoad1,\r\n totalWeightLoad2: action.payload.totalWeightLoad2,\r\n totalWeightLoad3: action.payload.totalWeightLoad3,\r\n totalWeightLoad4: action.payload.totalWeightLoad4,\r\n totalHoursOfEngineOperation: action.payload.totalHoursOfEngineOperation,\r\n totalHoursOfCrusherOperation:\r\n action.payload.totalHoursOfCrusherOperation,\r\n totalHoursOfExternalPowerSupply:\r\n action.payload.totalHoursOfExternalPowerSupply,\r\n totalHoursOfInternalPowerSupply:\r\n action.payload.totalHoursOfInternalPowerSupply,\r\n co2Saved: action.payload.co2Saved,\r\n dieselSaved: action.payload.dieselSaved,\r\n energySaved: action.payload.energySaved,\r\n co2Emission: action.payload.co2Emission,\r\n };\r\n case RESET_TOTAL_HOURS:\r\n return {\r\n ...state,\r\n totalWeightLoad1: null,\r\n totalWeightLoad2: null,\r\n totalWeightLoad3: null,\r\n totalWeightLoad4: null,\r\n totalHoursOfEngineOperation: null,\r\n totalHoursOfCrusherOperation: null,\r\n totalHoursOfExternalPowerSupply: null,\r\n totalHoursOfInternalPowerSupply: null,\r\n co2Saved: null,\r\n dieselSaved: null,\r\n energySaved: null,\r\n co2Emission: null,\r\n };\r\n case FETCH_MACHINE_DETAILS_ADDRESS_SUCCESS:\r\n return {\r\n ...state,\r\n suggestedAddress: action.payload,\r\n };\r\n case FETCH_MACHINE_DETAILS_ADDRESS_FAIL:\r\n return {\r\n ...state,\r\n suggestedAddress: 'notFound',\r\n };\r\n case CREATE_PDF_REPORT:\r\n return {\r\n ...state,\r\n isCreatingPdf: true,\r\n };\r\n case CREATE_PDF_REPORT_SUCCESS:\r\n return {\r\n ...state,\r\n isCreatingPdf: false,\r\n };\r\n case UPDATE_MACHINE_STATE_SUCCESS:\r\n return {\r\n ...state,\r\n machine: {\r\n ...state.machine,\r\n state: action.payload,\r\n },\r\n };\r\n case ADD_MACHINE_TAG_SUCCESS:\r\n return {\r\n ...state,\r\n machine: {\r\n ...state.machine,\r\n tags: [...state.machine.tags, action.payload],\r\n },\r\n };\r\n case DELETE_MACHINE_TAG_SUCCESS:\r\n return {\r\n ...state,\r\n machine: {\r\n ...state.machine,\r\n tags: state.machine?.tags?.filter(\r\n (tag: IExtendedMachineTagOption) => tag.id !== action.payload.id\r\n ),\r\n },\r\n };\r\n case EDIT_MACHINE_NOTE_SUCCESS:\r\n return {\r\n ...state,\r\n machine: {\r\n ...state.machine,\r\n notes: action.payload,\r\n },\r\n };\r\n case DELETE_MACHINE_NOTE_SUCCESS:\r\n return {\r\n ...state,\r\n machine: {\r\n ...state.machine,\r\n notes: null,\r\n },\r\n };\r\n case EDIT_MACHINE_PROJECT_CONSTRUCTION_SITE_SUCCESS:\r\n return {\r\n ...state,\r\n machine: {\r\n ...state.machine,\r\n projectConstructionSite: action.payload,\r\n },\r\n };\r\n case DELETE_MACHINE_PROJECT_CONSTRUCTION_SITE_SUCCESS:\r\n return {\r\n ...state,\r\n machine: {\r\n ...state.machine,\r\n projectConstructionSite: null,\r\n },\r\n };\r\n case RESET_MACHINE_DETAILS:\r\n return {\r\n ...state,\r\n machine: initialMachineState,\r\n isFetchingTelemtry: false,\r\n errorCodes: null,\r\n telemetry: null,\r\n graphTickValues: 'every day',\r\n graphDateFormat: 'DD.MM',\r\n averageFuelLevels: {\r\n fuelLevel: null,\r\n adBlueLevel: null,\r\n timestamp: null,\r\n },\r\n averageEngineUtilization: {\r\n value: null,\r\n timestamp: null,\r\n },\r\n averageEnergyUtilization: {\r\n value: null,\r\n timestamp: null,\r\n },\r\n averageThroughputs: {\r\n weightLoad1: null,\r\n weightLoad2: null,\r\n weightLoad3: null,\r\n weightLoad4: null,\r\n timestamp: null,\r\n },\r\n averageFuelConsumption: {\r\n mainDischargeConveyorFuelRate: null,\r\n sideDischargeConveyorFuelRate: null,\r\n engineFuelConsumed: null,\r\n engineFuelRate: null,\r\n timestamp: null,\r\n },\r\n averageEnergyConsumption: {\r\n mainDischargeConveyorEnergyRate: null,\r\n sideDischargeConveyorEnergyRate: null,\r\n energyConsumeRate: null,\r\n totalEnergyConsumed: null,\r\n timestamp: null,\r\n },\r\n totalEngineFuelConsumed: null,\r\n totalWeightLoad1: null,\r\n totalWeightLoad2: null,\r\n totalWeightLoad3: null,\r\n totalWeightLoad4: null,\r\n totalHoursOfEngineOperation: null,\r\n totalHoursOfCrusherOperation: null,\r\n totalHoursOfExternalPowerSupply: null,\r\n totalHoursOfInternalPowerSupply: null,\r\n co2Saved: null,\r\n dieselSaved: null,\r\n energySaved: null,\r\n co2Emission: null,\r\n suggestedAddress: '',\r\n isCreatingPdf: false,\r\n };\r\n case UPDATE_GRAPH_TICK_VALUES:\r\n return {\r\n ...state,\r\n graphTickValues: action.payload.graphTickValues,\r\n graphDateFormat: action.payload.graphDateFormat,\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { combineReducers } from 'redux';\r\nimport authReducer from './authReducer'\r\nimport searchReducer from './searchReducer';\r\nimport machineReducer from './machineReducer';\r\nimport machineDetailsReducer from './machineDetailsReducer';\r\n\r\nexport default combineReducers({\r\n auth: authReducer,\r\n search: searchReducer,\r\n machines: machineReducer,\r\n machineDetails: machineDetailsReducer\r\n})\r\n","import { createStore, applyMiddleware, compose } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport rootReducer from '../reducers';\r\n\r\nconst initialState = {};\r\n\r\nconst middleWare = [thunk];\r\n\r\n// @ts-ignore\r\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\r\n\r\nconst store = createStore(\r\n rootReducer,\r\n initialState,\r\n composeEnhancers(applyMiddleware(...middleWare))\r\n);\r\n\r\nexport default store;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport { Provider } from 'react-redux'\r\nimport store from './store'\r\n\r\nReactDOM.render(\r\n\r\n \r\n\r\n, document.getElementById('root'));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}