{"version":3,"sources":["shared_components/services/active_project_base_service.js","services/active_project_service.js","services/translation_service.js","shared_components/services/distance_service.js","components/document/video/camera_service.js","shared_components/document/video/camera_base_service.js","services/config_service.js","shared_components/document/instrumentation/robot/robot_client_service.js","shared_components/services/geo_service.js","shared_components/services/config_settings.js","services/dialog_service.js","shared_components/document/document_control_service.js","components/document/robot/sonarLidar/sonar_player_service.js","shared_components/document/instrumentation/robot/robot_player_base_service.js","components/document/robot/robot_player_service.js","services/gps/gps_service.js","shared_components/services/error_extractor.js","shared_components/services/assets_base_service.js","services/assets_service.js","shared_components/document/measurement_service.js","components/video_engine/engine_service.js","shared_components/services/time.js","shared_components/services/time_service.js","services/project_base_service.js","shared_components/services/project_service.js","shared_components/services/lidar_data_service.js","shared_components/services/buffer_helpers.js","shared_components/services/code_selector_service.js","services/codes_base_service.js","shared_components/document/instrumentation/robot/robot_base_service.js","components/document/robot/sonarLidar/lidar_player_service.js","shared_components/document/instrumentation/sonarLidar/player_base_service.js","shared_components/layouts/two_col_layout_component.js","shared_components/document/inspection/gps_addorner_component.js","shared_components/document/inspection/observations_component.js","shared_components/document/inspection/observation/observations_title_box_component.js","shared_components/services/cal.js","shared_components/document/inspection/strengs/streng_info_combobox.js","shared_components/document/inspection/strengs/streng_info_textfield.js","shared_components/document/inspection/strengs/streng_info_autocomplete_component.js","shared_components/document/inspection/strengs/streng_info_gps_autocomplete_component.js","shared_components/document/inspection/strengs/streng_info_numberfield.js","shared_components/document/inspection/strengs/streng_info_number_autoLidar_component.js","shared_components/document/inspection/strengs/streng_info_timepicker.js","shared_components/document/inspection/strengs/streng_info_datepicker.js","shared_components/document/inspection/strengs/streng_info_coordinates_field.js","shared_components/document/inspection/strengs/streng_info_component.js","shared_components/services/server_config_service.js","shared_components/document/inspection/observation/direction_selector_component.js","shared_components/services/strand_props_service.js","shared_components/document/instrumentation/sonarLidar/lidar_service.js","shared_components/services/constants.js","shared_components/services/sleep.js","shared_components/services/user_service.js","shared_components/services/fetch_services.js","shared_components/icons.js","services/storage_service.js","shared_components/document/instrumentation/sonarLidar/sonar_service.js","images/medium_logo.png","images/dashboard/top.svg","images/dashboard/front.svg","images/dashboard/side.svg","images/dashboard/front_cam.svg","images/dashboard/top_cam.svg","images/dashboard/side_cam.svg","shared_components/document/instrumentation/sonarLidar/lidar_player_base_service.js","shared_components/document/instrumentation/sonarLidar/sonar_player_base_service.js","shared_components/document/inspection/strengs/strengs_component.js","shared_components/document/inspection/strengs/streng_component.js","shared_components/document/inspection/observation/observation_component.js","shared_components/document/inspection/observation/location_editor_component.js","shared_components/document/inspection/code_selector/code_selector_component.js","shared_components/document/inspection/code_selector/code_selector_tree_dialog.js","shared_components/document/inspection/code_selector/code_selector_list_popup.js","shared_components/document/inspection/observation/continuous_question_dialog.js","shared_components/document/inspection/observation/observation_focus_service.js","shared_components/document/inspection/observation/observation_translations.js","shared_components/services/cloud_documents_service.js","shared_components/start/copyright_component.js","shared_components/services/auth_service.js","shared_components/auth/login_component.js","shared_components/auth/reset_pwd_component.js","shared_components/auth/register_component.js","shared_components/documents/recipient_details_component.js","shared_components/services/table_service.js","shared_components/documents/docs_list_component.js","shared_components/documents/dowload_dialog.js","shared_components/services/micro_services.js","shared_components/documents/cloud_docs_list_component.js","services/image_service.js","shared_components/auth/account_details_dialog.js","shared_components/auth/account_component.js","shared_components/documents/documents_bar_component.js","shared_components/overlays/paywall_component.js","shared_components/document/inspection/strengs/strengs_summary_component.js","shared_components/document/inspection/strengs/strengs_summary_dialog.js","shared_components/document/inspection/observation/observation_image_dialog.js","shared_components/documents/dashboard/new_projects_component.js","shared_components/documents/dashboard/google_auto_complete.js","shared_components/services/analysis.js","shared_components/maps/google_map_component.js","shared_components/maps/map_dialog.js","shared_components/services/filenames_service.js","components/ar/ar_component.js","components/ar/ar_dialog.js","shared_components/services/download_service.js","services/download_base_service.js","shared_components/documents/dashboard/search_component.js","shared_components/services/convertor_service.js","shared_components/documents/dashboard/dashboard_component.js","components/start/home_component.js","shared_components/layouts/main_layout_component.js","shared_components/settings/company_component.js","components/settings/general_component.js","components/settings/settings_component.js","components/ar/ar_page.js","components/document/toast_component.js","components/document/report_dialog.js","components/document/document_base_component.js","shared_components/document/attachements/attachments_service.js","components/document/attachments_base_service.js","shared_components/document/attachements/attachments_component.js","shared_components/document/inspection/main_info_comonent.js","shared_components/document/inspection/inspection_component.js","shared_components/document/video/webrtc_player_service.js","shared_components/document/video/video_channel_player_component.js","shared_components/document/video/video_player_component.js","shared_components/document/video/robot_overlay_component.js","shared_components/document/video/video_source_toolbar_camera_select.js","shared_components/document/video/video_source_toolbar_component.js","shared_components/overlays/base_measure_component.js","shared_components/document/video/measure_component.js","shared_components/document/video/measure_angle_component.js","shared_components/overlays/base_overlay_component.js","shared_components/document/video/water_height_measure_component.js","shared_components/services/draw_service.js","shared_components/document/video/freeform_surface_measure_component.js","shared_components/document/video/deformation_measure_component.js","components/document/video/video_section_base_component.js","shared_components/document/video/video_meta_loader_component.js","shared_components/document/video/video_section_component.js","shared_components/controls/ticked_progress_bar_component.js","shared_components/document/instrumentation/dashboard/speedometer_component.js","shared_components/controls/range_progress_bar_component.js","shared_components/services/tts.js","shared_components/document/instrumentation/dashboard/image_rotation_component.js","shared_components/document/instrumentation/dashboard/custom_slider_component.js","shared_components/document/instrumentation/dashboard/gauge_component.js","shared_components/services/lists.js","shared_components/document/instrumentation/dashboard/battery_indicator_component.js","shared_components/services/remote_control_service.js","shared_components/settings/calibrate_campos_dialog.js","shared_components/document/instrumentation/dashboard/camera_pos_component.js","shared_components/controls/measured_icon_component.js","shared_components/document/instrumentation/dashboard/distance_gauge_component.js","shared_components/document/instrumentation/dashboard/dashboard_body_component.js","shared_components/document/instrumentation/dashboard/dashboard_component.js","shared_components/document/instrumentation/track/track_server_service.js","shared_components/document/instrumentation/track/track_base_service.js","components/video_engine/screen_manager_service.js","shared_components/document/layout/layout_service.js","shared_components/document/instrumentation/track/tractor_reset_dlg.js","shared_components/document/instrumentation/sonarLidar/config_sonar_component.js","shared_components/document/instrumentation/sonarLidar/config_lidar_range_dlg.js","shared_components/document/instrumentation/sonarLidar/config_lidar_roll_component.js","shared_components/document/instrumentation/robot/robot_toolbar_component.js","shared_components/document/instrumentation/track/svg_track_service.js","shared_components/document/instrumentation/track/track_view_component.js","shared_components/document/instrumentation/sonarLidar/imaging_service.js","shared_components/document/instrumentation/sonarLidar/deformation_calculator_component.js","shared_components/document/instrumentation/sonarLidar/lidar_dist_calculator.component.js","shared_components/document/instrumentation/sonarLidar/sonar_component.js","shared_components/document/instrumentation/sonarLidar/lidar_rollout_dist_display_component.js","shared_components/document/instrumentation/sonarLidar/lidar_rollout_angle_display_component.js","shared_components/document/instrumentation/sonarLidar/lidar_rollout_measure_canvas_component.js","shared_components/document/instrumentation/sonarLidar/lidar_rollout_component.js","shared_components/document/instrumentation/robot/robot_section_body_component.js","shared_components/document/instrumentation/robot_section_component.js","shared_components/document/instrumentation/controller/controller_buttons_components.js","shared_components/document/instrumentation/controller/min_controller_buttons_components.js","shared_components/document/instrumentation/controller/time_info_component.js","shared_components/document/instrumentation/controller/tablet/tablet_slider_component.js","shared_components/document/instrumentation/controller/time_slider_component.js","shared_components/document/instrumentation/controller/speed_controller_component.js","shared_components/layouts/crosshair_buttons_component.js","shared_components/controls/duo_measured_icon_component.js","shared_components/settings/calibrate_accelero_dialog.js","shared_components/document/instrumentation/controller/tractor_direction_component.js","shared_components/document/instrumentation/controller/robot_controller_component.js","shared_components/document/instrumentation/controller/camera_direction_component.js","shared_components/document/instrumentation/controller/light_controller_component.js","shared_components/document/instrumentation/controller/camera_controller_component.js","shared_components/document/instrumentation/controller/elevator_controller_component.js","shared_components/document/instrumentation/controller/controller_component.js","shared_components/document/instrumentation/instrumentation_component.js","shared_components/document/document_default_body_component.js","shared_components/document/inspection/main_info_dialog.js","shared_components/document/inspection/strengs/streng_info_dialog.js","shared_components/document/inspection/observations_dialog.js","shared_components/document/inspection/inspection_bar_component.js","shared_components/document/instrumentation/robot_section_bar_component.js","shared_components/document/instrumentation/controller/tablet/single_button_controller_components.js","shared_components/document/instrumentation/controller/tablet/controller_bar_component.js","shared_components/document/instrumentation/controller/tablet/tablet_camera_controller_component.js","shared_components/document/tablet_document_body_component.js","shared_components/dialogs/ok_cancel_dialog.js","shared_components/document/layout/layout_manager_component.js","shared_components/document/instrumentation/sonarLidar/lidar_verify_dimensions_dlg.js","shared_components/document/document_component.js","App.js","serviceWorker.js","index.js","shared_components/dialogs/confirmation_dialog.js"],"names":["events","require","activeProjectService","this","projectName","data","loadedFrom","dirtyTimer","_activeStrengIdx","EventEmitter","continuousIdxGen","streng","activeStreng","videoUrl","Object","keys","length","robotRevDataUrl","sonarDataUrl","lidarDataUrl","dest","projectService","createNew","save","clearTimeout","id","load","Promise","resolve","reject","cloudDocsService","getProject","then","checkVersion","tryUpgradeForCloud","path","name","catch","error","dialogService","i18n","t","pathToFile","errExtractor","get","version","updateStrengs_110_to_121","updateStrengs_120_to_121","updateStrengs_121_to_122","strengs","channel","main","inspectionMethode","cams","cam","tOnV","iOnV","addI","addT","equipmentSerialNr","updateProject","addProject","cloudData","markDirty","console","log","field","setTimeout","emit","changed","oldKey","oldIdx","params","record","codeSelectorService","isContinuous","values","push","continuousIdx","continuousChanged","key","join","found","findIndex","value","undefined","keyOfValue","duplicate","message","details","responses","ask","selectedIdx","response","prevKey","idx","indexOf","pop","removeDeletedIdxGen","list","startObs","find","item","observations","obs","video","def","height","videoHeight","width","videoWidth","scalingFactor1","scalingFactor2","videoLength","duration","sort","a","b","longitude","result","canContinue","Error","map","x","filter","index","lst","buildContinuousIdxGenList","strandPropsService","init","isDev","process","REACT_APP_DEBUG","use","initReactI18next","resources","en","nl","lng","configService","fallbackLng","ns","defaultNS","interpolation","escapeValue","react","wait","keySeparator","nsSeparator","debug","LanguageOptions","label","getSelectedLanguage","distanceService","current","cameraService","isRecording","isDemo","isCloud","isSite","isMobile","isViewer","loc","window","location","hostname","substring","replace","endsWith","setServerConfig","localStorage","getItem","fields","split","configDefaults","JSON","parse","setItem","stringify","removeItem","robotRecorderClient","_isRecording","currentItem","onReverseRecordReady","engineService","tractor","lidarProvider","lidarService","sonarProvider","sonarService","startRevRecord","onDone","stopRevRecord","assign","rec","onData","_recorder","hasPitch","hasYaw","hasRoll","hasCameraPan","hasCameraTilt","hasDistance","hasSonar","hasLidar","hasElevator","canToggleLightDirection","canToggleScanDirection","hasClutch","needsClutch","remote","hasAccelerometer","hasLensPressure","hasTractorPressure","hasWheelPressure","hasBattery","hasLifeLeft","hasLaserMeasure","hasCameraGotoCenter","speedMode","autoStart","startLaser","stopLaser","sensorLimits","RobotBase","geoCodeInitDone","initGeoCode","Geocode","setApiKey","GOOGLE_API_KEY","setLocationType","region","getCurrentGeoLocation","geoInfo","countryCode","set","setRegion","setLanguage","getCurrentLocation","getFromIp","orError","fetch","method","mode","headers","getHeaders","status","json","res","navigator","geolocation","getCurrentPosition","pos","coords","err","geoTranslate","language","search","route","city","state","country","generic","fromAddress","results","extractDataFromGoogleGeoLocation","latitude","lat","lon","useStreet","fromLatLng","CoordinatesToAddress","province","postCode","number","requestedCity","address_components","i","j","types","long_name","short_name","address","formatted_address","coordinates","geometry","isPartial","partial_match","calcCrow","lat1","lon1","lat2","lon2","dLat","toRadian","dLon","Math","sin","cos","atan2","sqrt","general","foldersToMonitor","lastInspector","lastEquipmentSerialNr","lastInspectionPurpose","homeTab","activeDashboard","showInventory","showAR","layout","document","presets","layoutMode","showVideoSection","robotSection","HorSplit1","HorSplit2","VerSplit1","displayMode","parts","1","source","inclination","adjustHeightDif","showPuddles","seriesStyle","sampleDistance","showGrid","showStartEndLabels","sonar","zoom","lidar","lidarRoll","colorStops","colors","filterRange","grayMode","2","3","dashboardOpen","screens","fullscreen","channelIdx","openScreens","vitec","firstRun","recorder","verticalSplitWidth","horizontalSplitWidth","forceLiveFeed","robot","InclinationAsPercentage","showTractorDataOverVideo","stopOnSecondBtn","highCutoff","lowCutoff","verifyDimensionsBeforeRecord","errorOnNonFullObservation","onlyNewObservationDuringRec","onlyAllowObsOnFulStreng","fullscreenOnMeasureValue","distanceTimeEditLinked","showObsDetails","onNewStrengCopyPrevData","onNewStrengShowGeneral","onlyAllowStrengsOnFullMain","reports","landscapeWritingMode","title","selectedBurnDataMethod","engine","activeConfig","gps","port","baudRate","dataBits","stopBits","parity","active","shortcuts","geo","api","url","google","at","messages","onMessagesChanged","onAskQuestion","severity","splice","callback","options","ok","cancel","action","detail","documentControlService","handleRoboData","distance","handleRobotDataLoaded","handleRoboDataLoading","handleStrandSizeChanged","robotDs","robotPlayer","lidarPlayer","internalHandleRecordStopped","files","onControlStateChanged","controlState","file","processFile","gotoStopped","internalHandleRevRecordStopped","reverseTractorOffset","canEdit","liveTractor","onVerifyDimensions","currentTime","documentPos","mounted","addListener","onRecordingDone","gpsService","start","startTractor","isRunning","startInputs","reInit","leaveCamera","stopTractor","stopInputs","stop","needCallLoaded","onDataLoaded","onDataLoading","live","setTractorSource","askYesNo","activeStrengHasReverseRobotData","startRecord","startReverseRecord","activeStrengIdx","curStreng","verifyRobotState","actualInspectionLength","recStartTime","Date","now","camDetails","getCameraDetails","getTractorDetails","updateStartObservation","verifyDimensions","Width","adjusted","stopRecord","stopReverseRecord","timestamp","time","timeService","updateFromObsList","setCurrentTimestamp","SonarPlayerService","SonarPlayerBaseService","csv","RobotPlayer","reverse","storageService","getCsvData","robotDataUrl","currentIdx","currentTimeStamp","sonarPlayer","_hasSonar","_hasLidar","isLoading","activeStrengHasSonarData","activeStrengHasLidarData","loadData","LidarPlayerService","convertData","reset","folder","readContent","bucket","autoplay","internalLoadData","content","config","buildCsvConfig","fromString","playCurrent","itemsOnFirstLine","nrOfColumns","hasHeader","firstLine","slice","startsWith","delimiter","eol","colParser","noheader","updateRecForPlay","forced","prevIdx","next","curRec","includes","limits","Array","isArray","e","msg","sqlMessage","AssetsBaseService","user","userService","getCurrentUser","companyId","API_URL","body","assetsService","loadJSONFromCloud","saveJSONToCloud","measurementService","measureData","precision","validifierData","toFixed","measuring","waarde1","waarde2","getActiveEngineConfig","getAllVideoChannelCamTypes","configs","getPrimaryChannel","getActiveRobotCalibration","setActiveRobotCalibration","deviceConfig","pad","num","hhmmss","secs","minutes","floor","hours","hhmmssToSec","ProjectBaseService","moment","momentUtils","isEmpty","val","isEmptyOr0","ERROR_KEYS","TERMINATE_KEY","TERMINATE_KEY2","CHANGE_SHAPE_KEY","PIPE_INSPECTIONS","mtime","date","codeInsp","purpose","creationDate","format","norm","managingInstance","opdrCodeOpdrGever","opdrCodeBedrijf","assistant","createNewStreng","template","createNewObservation","equipment","remark","type","ref","inspectionDate","inspectionTime","depthStartPointRel","depthEndPointRel","startPointRef","startPointCoord","pointRef1","coordPoint1","pointRef2","coordPoint2","pointRef3","coordPoint3","distanceStartLateral","clockPosStartLateral","startpointLateralInspection","lateralStrengRef","inspectionDirection","inspMethod","locationType","district","sewerName","propertyOwnership","axialRefPoint","storageVideo","storageVideoZ","storageImages","storageImagesZ","positionVideoImages","imagePacketRef","expectedInspectionLength","shape","material","liningType","liningMaterial","lengthOfTubePart","sewerType","sewerUsage","strategic","cleaning","remarks","yearOfCommisioning","connectionType","precipitation","temperature","fluidControl","coverLevel","verticalRefPoint","CircularRefPoint","inspectionStage","litShape","litMaterial","litHeight","litWidth","stepType","stepMaterial","atmosphere","descriptiveLoc","includePicture","joint","strengType","valueCount","getValueCount","directionCount","getDirectionCount","requireType","isObsValueRequired","isObsDirectionRequired","direction1","direction2","obsDef","valueRequired","getValueRequired","directionRequired","purposeZ","axialRefPointZ","litShapeZ","litMaterialZ","stepTypeZ","locationTypeZ","inspectionStageZ","shapeZ","materialZ","sewerUsageZ","yearOfCommisioningY","fluidControlZ","versions","videoPos","position","firstLetter","terminatorKey","endObs","cdObs","runningObs","substr","toString","newObs","cameraType","project","uploadedAt","uploadedBy","cloudState","trackDataUrl","trackRevDataUrl","lidarRevDataUrl","locations","stats","maxErr","totalErr","locationsTotalErr","strengCount","strengsWError","errorCodeIdx","strCount","getLeaf","errRating","unpackLidar","angles","readFloatLE","getMinMaxFor","minX","minY","maxX","maxY","corner","y","centerLidar","expWidth","expHeight","isHalf","getCenterFor","centerX","centerY","coord","newX","newY","newValue","pow","newAngle","calculateAngle","realWidth","abs","realHeight","halfExpHeight","halfExpWidth","allowedDif","divergenceMinX","round","divergenceMaxX","divergenceDifX","divergenceMinY","divergenceMaxY","divergenceDifY","c","angle","degrees","toDegrees","rotateToStart","len","shift","mergeLidarLists","valuesA","anglesA","valuesB","anglesB","posA","posB","angleA","angleB","valueA","valueB","readDegree16BE","buf","readInt16BE","readTemp16LE","readInt16LE","_dict","currentPos","getDict","matchesFilter","forceLeafFor","getLeafFromDictPath","_ref","_getSubDict","children","leafLabel","valueType","valueLabel","node","filterValue","codes","LidarPlayerBaseService","PlayerBaseService","playRec","TwoColLayout","props","onResize","setState","rootStyle","classes","rootTwoCol","leftChildStyle","leftCol","rightChildStyle","rightCol","rootOneCol","leftColSingle","rightColSingle","className","handleWidth","left","right","React","PureComponent","withStyles","theme","marginRight","spacing","flex","flexDirection","display","marginLeft","flexGrow","GpsAdorner","handleGetLocation","onLocation","row","editor","readOnly","aria-label","size","disabled","isAvailable","onClick","Component","withTranslation","root","alignItems","justifyContent","Observations","expandItem","checkObservationCanLooseFocus","expandedIdx","handleGetList","handleDeleteRequest","deleteRequestOpen","idxToDelete","handleCloseDlg","ack","deleteItem","addItem","_addItem","handleDistanceChanged","newList","onChanged","handleKeyboard","keyCode","ctrlKey","stopPropagation","handleGotoNext","focusedValueIdx","handleGotoPrev","handleMoveDown","valueIdx","handleMoveUp","handleRecordingReady","forceUpdate","handleObsGenerated","handleCanContinueOnObs","handleRecordingStarted","handleContinuousClosed","obsToClose","requestedAction","gotoRec","code","addRecToList","processNewContinuousRecord","obsIndex","showEmptyError","treeOpen","captureKeyboard","addEventListener","addNewObs","removeEventListener","removeListener","prevProps","prevState","initLoaded","isExpanded","onExpand","onDelete","onPositionChanged","onDistanceChanged","onTerminated","onFocusedInit","onTreeOpened","onGotoNext","onGotoPrev","onMoveDown","onMoveUp","onStartMeasure","onStopMeasure","onStartMeasureAngle","onStartMeasureDepth","onStartMeasureAreaSize","onStartMeasureFreeform","onContinuousClosed","onGetList","style","textAlign","question","open","onClose","removed","deleteContinuous","isObservationComplete","showTree","allowed","checkAddAllowed","ObservationsTitleBox","detailsBtn","detailsBtnTip","heading","onToggleObsDetails","color","fontSize","typography","pxToRem","fontWeight","PI","pitchInDegrees","pitch","radians","x1","y1","x2","y2","dx","dy","getCircumference","wid","scrollbarWidth","measureScrollbarWidth","scrollbox","createElement","overflow","appendChild","offsetWidth","clientWidth","removeChild","coord1","coord2","coord3","coord4","dx0","dy0","dx1","dy1","StrengInfoComboBox","handleValueChanged","ev","target","onChange","handleZChanged","valueZ","handleXChanged","valueX","handleYearChanged","valueYear","valueYearError","isYearOk","zField","xField","yearField","secondarySource","required","showMissingErrors","cmb","TextField","select","InputLabelProps","shrink","whiteSpace","cmbField","InputProps","SelectProps","native","margin","Fragment","inputProps","maxLength","textField","min","max","step","defaultProps","StrengInfoTextField","handleTextChanged","onValueChanged","StrengInfoAutoComplete","openPopup","popupOpen","closePopup","setValue","nativeEvent","MouseEvent","keyPressed","getAllValuesForStrengField","Autocomplete","freeSolo","disableClearable","autoComplete","clearOnEscape","inputValue","onInputChange","onFocus","onBlur","onKeyDown","renderInput","StrengInfoGPSAutoComplete","handleLocationChanged","StrengInfoNumberField","handleFocusLost","digits","isValueOk","unit","endAdornment","InputAdornment","StrengInfoNumberAutoLidar","handleUpdateFromLidar","dimensions","getDimensions","numberField","rightBtn","renderRightButton","provider","Tooltip","IconButton","StrengTimeField","clearable","mask","ampm","StrengDateField","StrengInfoCoordinatesField","handleGetCoordinates","storeValue","StrengInfo","handleSerialChanged","handleWidthChanged","handleHeightChanged","handleShapeChanged","handleSetType","typeStr","toStr","onTypeChanged","radioProps","stationaryDisabled","inspMethodOptions","inspectionMethodOptions_S","inspectionMethodOptions","FormControl","component","FormLabel","RadioGroup","FormControlLabel","control","Radio","locationTypeOptions","propertyOwnershipOptions","axialRefPointOptions","directionOptions","direction","onDirectionChanged","connectionTypeOptions","verticalRefPointOptions","CircularRefPointOptions","storageVideoOptions","positionVideoImagesOptions","inspectionStageOptions","inspectionMethodOptions_M","shapeOptions","materialOptions","liningTypeOptions","liningMaterialOptions","sewerTypeOptions","sewerUsageOptions","cleaningOptions","yearOfCommisioningOptions","precipitationOptions","temperatureOptions","fluidControlOptions","shapeOptionsM","sewerUsageOptionsM","stepTypeOptions","stepMaterialOptions","atmosphereOptions","paper","REACT_APP_IS_STAGING","API_SERVICES","googleKey","DirectionSelector","handleClick","center","getRelMousePos","atan","onKeypress","event","char","which","keyPressTimeout","inner","renderExpanded","renderCollapsed","dots","dotStyle","background","borderColor","dotWrapper","transform","dot","variant","requiredTxt","rootExpanded","tabIndex","icon","errorRoot","rect","getBoundingClientRect","clientX","clientY","top","focus","borderBottom","pointerEvents","bottom","borderRadius","borderWidth","borderStyle","backgroundClip","lineHeight","userSelect","StrandPropsService","_width","_height","_shape","sizeIsLocked","shapeIsLocked","lastPlayIdx","newIdx","updateFromObs","fromPlay","setSizeFromObs","handleData","timer","nextData","nextAngles","onWater","reverseProvider","_normalizedData","newService","linkTimestamps","srcIdx","isReversed","roundedWidth","roundedHeight","inspectionPurposeOptions","inspectors","inspectorsList","descriptiveLocOptions","sleep","ms","Editor","Viewer","curUser","invitedTo","userId","newPwd","password","statusText","clear","getCompany","company","saveUser","authorised","token","Accept","Headers","NoClutchIcon","d","LeftSideIcon","RightSideIcon","TopSideIcon","DuoHorView","TripleHorView","opacity","TopLargeDuoBottomHorView","LayoutMore","LidarRollout","SonarView","Lidar","TopTractorIcon","fill","viewBox","xmlns","rx","FrontTractorIcon","cx","cy","ry","SideTractrorIcon","stroke","TopCamIcon","SideCamIcon","StartEndLabel","StartEndLabelOutline","SeriesWide","fillOpacity","strokeOpacity","SeriesDouble","ArrowUpBoldPath","ArrowDownBoldPath","ArrowRightBoldPath","ArrowLeftBoldPath","StopPath","MeasureArrow","AVATAR_BUCKET","TEMP_ZIP_BUCKET","text","getUrl","header","Origin","origin","arrayBuffer","task","AngleAdjust","roll","range","yaw","channels","valuesPerChannel","_lowCutoff","_highCutoff","_grayMode","module","exports","Buffer","_config","minMax","nrLinesToCombine","readBinaryContent","internalLoad","strandProps","parsed","parseData","from","readHeader","smallV","expectDistance","readConfig","Number","MAX_SAFE_INTEGER","dataLine","readDataLine","recToAdd","valuesList","offset","forEach","finalValues","finalAngles","readDoubleLE","lengths","readUInt32LE","newVals","charCodeAt","robotData","robotIdx","trySaveConfig","baseYaw","errMsg","readUInt8","temp","readUInt16LE","Strengs","resetForced","forceStrengDetails","handleTabChange","tabs","newTabs","changeTab","handleStrengChanged","selectedTab","handleDeleteStrengReq","handleDeleteDlgClose","deleteStreng","toAdd","newPos","rootPath","deleteDataForStreng","tabsActions","createRef","updateIndicator","setImmediate","currentStreng","tabBar","indicatorColor","scrollButtons","tab","padding","onExpandChanged","onStrengDetailsForced","minWidth","toolbar","borderBottomStyle","borderBottomWidth","palette","Streng","handleToggleObsDetails","switchExpanded","panelIdx","isStrengComplete","handleObservationsChanged","handleTypeChanged","GeneralInfo","expanded","expandIcon","aria-controls","GeneralInfoSummary","GeneralInfoDetails","boxShadow","Observation","handleDistanceValueChanged","distanceValueChanged","handleTimeValueChanged","translations","handleContinuousObsChanged","otherKey","checkIsContinuous","clearContinuousIdx","showContinuous","continuousMsg","errorMsg","continuousComplete","complete","showCloseContinuousDlg","continuousDlgOpen","preventDefault","closeContinuousDlg","expand","isPropagationStopped","deleteObservation","toggleIncludePic","screenX","screenY","focsMgr","moveRight","toggleIncludeSonar","includeSonar","toggleIncludeLidar","includeLidar","handleFieldChanged","newState","handleDirectionChanged","withMouse","updateFocus","handleCheckJoint","handleDescriptiveLocChanged","handleContinuousIdxChanged","handleValueComplete","prevComplete","valueComplete","prevContinuous","related","getRelatedStartObs","findDuplicateToClose","toClose","checkLinkedObs","clearContinuousRecord","contSettings","deleteValues","deleteDirections","observationDef","moveToFirstAfterCode","docChanged","changeErr","handleStartMeasure","stopAllMeasurements","handleMeasurementDone","obsMeasureErrMsg","handleReadyClicked","handleCodeSelectorGotoNext","allowSelectorFocus","handleTreeClosed","blockSelectorFocus","currentlyFocused","shiftKey","notInText","moveLeft","currentlyFocusedIsInput","handleCodeSelectorClicked","ObsTranslations","obsDefPath","translatePath","valueLabels","getLabelsFromDictPath","rootRef","ObservationFocusService","buildRefs","scrollIntoView","dictPathIsLeaf","hasMoreThanSelector","focusLast","focusFirstError","selected","navDistance","locRef","navTime","timeRef","locRefIdx","onTimeChanged","onValuesChanged","onIsCompleteChanged","onTreeClosed","allowFocus","handleStartOfFocusListReached","renderContinuous","removeObs","buildLoc","buildContinousTerminationSelector","needsExtraData","renderRow1","renderRow2","renderRemark","renderButtons","items","renderRow1Part","tfRef1","tfRef1Idx","tfRef2","tfRef2Idx","valuesRow","inputId","refIdx","adorner","end","textValue","wInputProps","buildInputAttribs","isRequired","inError","invalidValue","measure","measureBtn","inputRef","dir1","buildDirection","dRef1","dRef1Idx","dir2","dRef2","dRef2Idx","fieldName","cardActionsRoot","renderButtonJoint","renderButtonPicture","renderButtonSonar","renderButtonLidar","readyBtnRef","cardActionItem","ready","jointStyle","joinChecked","IconUnChecked","jointTip","onJoint","onStrand","jRefIdx","jRef","includePicStyle","cameraIconChecked","imageTip","withPic","noPic","iRefIdx","iRef","sonarTip","withSonar","noSonar","sonarRefIdx","sonarRef","withLidar","noLidar","lidarRefIdx","lidarRef","rRef","multiline","rRefIdx","lRef","locLabel","lRefIdx","includeClosure","el","cRef","relatedStart","cRefIdx","valueLength","buildValueTypeForInputAttribs","procent","newObj","prevWasContinuous","multipleEnd","noStart","multipleStartMsg","isNaN","valueParts","fractionLength","ROCameraIconChecked","ROCameraIconUnChecked","paddingRight","separator","maxItems","tooltip","valueLabelBreadCrumbs","light","isContinuousIcon","isContinuousErrIcon","image","notClosed","paddingLeft","paddingTop","paddingBottom","marginBottom","canSelectIcon","canSelectIconHover","checkedCameraIcon","secondary","fontStyle","flexWrap","LocationEditor","updateErrors","toggleLinked","linked","errorDistance","getErrorStateDistance","distanceToTime","handleTimeChanged","stringValue","errorTime","getErrorStateTime","timeToDistance","hasFocus","linkIcon","tooltipDistance","tooltipTime","defaultInputClass","focusedLocationInput","locationInput","inputTagClassesDistance","locationInputError","focused","focusedLocationError","inputTagClassesTime","inputPropsTime","buildInputProps","inputPropsDistance","endAdornerDistance","in","unmountOnExit","timeout","asFirst","charLength","boxSizing","test","borderBottomColor","CodeSelector","getLinkColor","errorIdx","getTooltipFor","selectionNodes","showSelectionList","getChildren","popupAnchorEl","currentTarget","currentList","editIdx","handleLinkFocused","partial","handleNewFocused","handleClosePopup","callIsCompleteOnTreeClose","valueOnTreeClose","handleTreeOpened","updateValues","needsNextValue","hasChildren","focusedIdx","focusItem","QuestionInputRef","handleSetItemFromTree","isLeaf","handleRemoveItemsFromTree","level","newValues","anchor","removePartial","moveDown","moveUp","addPartial","toUpperCase","treeRoot","linkRefs","lastValueChange","calculateSelectionNodes","calculateFocusedIdx","putFocus","objRef","ReactDOM","findDOMNode","currentLst","toLowerCase","needsNextVal","codeSelectorVal","breadcrumbs","input","href","cursor","tree","onRemoveItems","onSetItem","isOpen","showOk","treeShowsOk","selectedValue","newPartial","listItemText","listItemSecondaryText","primary","PaperComponent","handle","CodeSelectorTreeDlg","handleKeyDown","dlgOpen","canPressOk","handleOk","handleTreeClose","selectItem","child","selectLeaf","showTreeSearch","renderTree","iconButton","aria-labelledby","parent","itemStyle","TreeItemInPath","treeItem","classname","selectedTreeItem","visibility","CodeSelectorListPopup","handleValueClicked","handleValueSelected","getIdx","searchFirst","getData","listItems","selectedlistItem","button","anchorEl","anchorOrigin","vertical","horizontal","transformOrigin","dense","letter","ContinuousQuestionDialog","handleNew","handleCancel","disableBackdropClick","disableEscapeKeyDown","maxWidth","dividers","autoFocus","backgroundColor","marginTop","refs","readyBtnRefIdx","timeRefIdx","prevFocused","atStart","selectionStart","URL","param","URLSearchParams","reportId","accessFilters","markRead","statistics","textRes","Copyright","Typography","align","Link","getFullYear","authService","apiOk","email","newUser","setCurrentUser","licenseId","accessToken","license","installationKey","force","firstname","lastname","firstName","lastName","emailSent","clearCurrentUser","Login","handleSubmit","login","verifyUserInvitation","pathname","history","handleServiceChanged","service","Container","src","alt","avatar","form","noValidate","onSubmit","fullWidth","Button","submit","Grid","container","xs","Box","mt","Backdrop","backdrop","CircularProgress","cred","zIndex","drawer","ResetPwd","requestPwdReset","info","Register","signUp","Avatar","sm","justify","RouterLink","to","allRecipients","RecipientDetails","opts","valuesKey","allValues","multiple","forcePopupIcon","renderTags","getTagProps","invalidValues","Chip","placeholder","helperText","tableIcons","Add","forwardRef","Check","Clear","Delete","DetailPanel","Edit","Export","Filter","FirstPage","LastPage","NextPage","PreviousPage","ResetSearch","Search","SortArrow","ThirdStateCheck","ViewColumn","DocsList","renderPublishedAt","toLocaleDateString","buildRecipientsToggle","rowData","sendToColor","sendToTip","recipients","toggleDetails","askDelete","dataToDelete","isAskToDeleteOpen","deleting","deleteProgression","nrDeleted","onDeleteDocument","doc","tableData","showDetailPanel","renderRecipients","invalidRecipients","handleRecipientsChanged","columns","render","defaultSort","cellStyle","wordBreak","grouping","isEditor","role","getColumns","customActions","actions","onShowDetails","onShowPdf","onIsShowPdfDisabled","detailPanel","infoBoxVisibility","icons","localization","pagination","labelDisplayedRows","nRowsSelected","emptyDataSourceMessage","noValuesText","filterRow","filterTooltip","showTitle","actionsColumnIndex","selection","showTextRowsSelected","detailPanelColumnAlignment","spinnerBox","needsUpdateUI","difference","onRecipientsChanged","withRouter","DownloadDialog","handleSelect","obj","checked","handleIsChecked","pdfReport","concat","xml","downloadProject","prj","Dialog","DialogTitle","DialogContent","DialogContentText","List","ListSubheader","disableSticky","ListItem","listItem","ListItemIcon","renderCheckBox","ListItemText","attachments","DialogActions","Checkbox","edge","checkBox","disableRipple","textTransform","subHeader","microServices","projectId","CloudDocsList","handleStartDownload","downloadDlgOpen","handleCloseDownloadDlg","onDownloadFiles","getProjectZipFile","tryGetUrl","request","zipProject","urls","handleShowDetails","hanldeIsShowPdfDisabled","rawData","showPdf","onOpenPdf","deleteReport","report","delete","newReports","saveRecipients","operation","onLine","addRecipients","removeRecipients","updateRec","downloading","getDocs","docs","publishedAt","companyName","docRoot","alignSelf","default","logo","getLogoImg","logoImg","getDashboardImg","topImg","frontImg","sideImg","frontCamImg","topCamImg","sideCamImg","INPUT_LABEL_PROPS","AccountDetailsDialog","changeObj","avatarFile","uploadAvatar","getAvatarUrl","pwd","changePwd","handlePwdChanged","selectImg","imgs","openImage","username","badgeContent","allowUploadFoto","subIcon","Badge","overlap","textBox","Account","toggleMenu","newVal","handleClose","handleCloseAccountDetails","dlgAccountDtlsOpen","askLogOut","dlgLogOutOpen","handleLogOut","logout","gotoAccountSettings","isElectron","fullName","Popover","rootPopover","popoverBox","accountBtn","canLogOut","Divider","getlogInLogOutButton","btn","DocumentsBar","renderBody","AppBar","Toolbar","showLogo","toolbarBtns","Tabs","onTabChanged","currentTab","Paywall","handleResize","boxStyle","needsMargin","handleHeight","StrengsSummary","updateDimensions","innerWidth","renderStrengDetail","isLargeScreen","breakpoints","buildIcon","buildSecondary","buildPrimary","handleGoto","primaryTypographyProps","secondaryTypographyProps","handleClickChip","strengIdx","onClickObs","realIdx","onShowAR","onClickStreng","handleToggleShowInventory","handleShowAR","totalActualLength","totalExpectedLength","scrollbarVisible","calculateData","scrollHeight","clientHeight","getStrengDetails","errResults","otherObs","errors","getObsDetails","inventory","inv","getObsTooltipAndLabel","imgIdx","other","obsIdx","tipParts","remarkAtEnd","popped","dialogContentStyle","isReallySmall","titleStyle","titleBar","titleToggleSmall","titleToggle","Switch","rightSideHeaderToolbox","ToggleButton","renderProjectOverview","buildProjectOverviewStyle","summaryTotalRow","summaryTotalCell","summaryTotalValueCell","getScrollbarWidth","summaryTable","summaryTableSmall","div","overflowY","append","scrollWidth","remove","iconStyle","dropletStyle","vLine","borderRight","detailTitle","detailLength","idx2","withTheme","StrengsSummaryDialog","fullScreen","ObservationImageDialog","paperStyle","dialogPaper","ImgContHeight","paperScrollPaper","objectFit","NewProjects","selectProject","loaded","summaryDlgOpen","selectedProject","isRead","handleCloseStrengSummary","goToStreng","handleOpenPrj","handleShowObsDetails","img","images","searchStr","strengDetailsTip","strengDetailsUrl","handleCloseObsDetails","projects","needsCal","calculateStats","count","saveStats","rightSide","wideScreen","buildRightSide","leftSide","buildleftPart","Paper","subheader","listHeader","searchBtn","onSearch","renderProject","rightCss","streets","prjDate","String","prjColor","ListItemAvatar","inline","selectAll","GoogleAutoComplete","_handleLoadScript","Loader","instance","querySelectorAll","script","maps","apiKey","libraries","handleLoadScript","Analyzer","aDateParts","aTimeParts","aDate","bDateParts","bTimeParts","bDate","sortedData","sortForMap","locCoordinates","sortedEl","buildStrengKey","strKey","isReverse","subRec","oldSub","obsKey","ref1","ref2","nr1","nr2","matches","match","curLan","_getLocationToSearcFor","docIdx","localSearch","regions","GoogleMap","heatmapData","dataPoints","heatmap","weight","positions","radius","bootstrapURLKeys","defaultCenter","defaultZoom","MapDialog","INVALID_PATH_CHARS","replaceInValidChars","replaceAll","oldBuildReportFotoFilename","includeExt","abh","afb","ext","recTime","recTimeStr","toISOString","AugmentedReality","collecting","requestMeasurePermissions","all","measureCurrentLocation","measureHeading","handleNext","stepCount","useCompass","activeStep","places","handleBack","collectionCountDown","Stepper","orientation","Step","StepLabel","renderStepIntro","renderStepStart","renderStepReady","StepContent","actionsContainer","renderStepButtons","renderMeasureButton","nextDisabled","permissions","perms","query","every","startTime","newTime","SAMPLE_DURATION","getGPS","nextTime","newCountDown","trunc","frequency","referenceFrame","sensor","AbsoluteOrientationSensor","q","quaternion","alpha","sum","reduce","enableHighAccuracy","maximumAge","calculateAvgCoordinates","calculateAddStrengData","addStrengData","elements","avg","startPoint","LatLng","lastDistance","totalInsplength","spherical","computeOffset","endPoint","computeHeading","ARDialog","downloadUrl","filename","download","clickHandler","revokeObjectURL","click","downloadResource","blob","createObjectURL","downloadService","Blob","ARData","ARShowInventory","detailsDlgOpen","handlePlaceValueChanged","searchValue","handleGetCurrentLocation","performSearch","handleDownloadData","prjDict","prjRec","strengRec","projectsToCsv","handlePlaceSelected","place","oldName","showMap","searchAfterDataLoaded","onPlaceSelected","onNewProjects","analyser","buildMap","dates","Set","dataColor","Dashboard","switchView","newView","selectedView","docRootSmall","Home","handleDownloadFiles","Tab","minHeight","MainLayout","appbarHeight","appbar","updateHeight","toolbarIsCollapsed","offsetHeight","allowCollaps","bodyStyle","toolbarStyle","collapsableToolbar","defaultToolbar","leftBtns","menuTextSmall","menuText","rightBtns","Fade","textOverflow","CompanySettings","buildToolbar","allowProFeatures","total","nrProLicenses","available","nrLicensesUsed","renderAdminBadge","companyRole","verticalAlign","proAccount","addUser","users","tryAddUserToCompany","updateUser","newData","oldData","_saveUser","deleteUser","getUsers","usr","prev","tooMany","isCurrentTab","badgeEdit","editable","editComponent","_","components","onRowAdd","onRowUpdate","regBtn","GeneralSettings","changeLanguage","lang","REACT_APP_IS_VIEWER","hidden","formControl","InputLabel","htmlFor","Select","MenuItem","FormHelperText","subTitle","Settings","goBack","isCompanyAdmin","menuButton","divider","ARPage","sendDataToAr","iFrame","contentWindow","postMessage","handleReload","arRefresh","allowfullscreen","onLoad","border","float","Toast","updateMessagesOnUI","toasts","closeToast2","removeMessage","askQuestion","questionOptions","closeDialog","Snackbar","snackbarStyle","Alert","elevation","AlertTitle","okText","cancelText","ReportDlg","reason","DocumentBaseComponent","handleCloseFullScreen","webkitIsFullScreen","mozFullScreen","isFullScreen","verSplit","horSplit","isDesktop","openResult","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","openFullscreen","screen","exitFullscreen","mozCancelFullScreen","webkitExitFullscreen","msExitFullscreen","attachmentsService","blockAdd","blockAdds","Attachments","handleShowFile","showFile","handleStartRemove","toRemove","dlgRemoveOpen","handleRemoveDoc","handleAddDoc","selectFile","add","initAfterLoad","noFilesItem","ListItemSecondaryAction","MainInfo","handleInspectorChanged","selectedIndex","inspectorName","inspector","defaultValue","Inspection","checkOverflow","element","inOverflow","openSummaryDialog","showSummary","handleCloseSummaryDialog","panelName","isMainComplete","inspectionExpIdx","rootClass","rootWithPadding","ExpansionPanel","ExpansionPanelSummary","ExpansionPanelDetails","strengsDetails","WebRtcPlayer","handleVideoLoadError","unloadCamera","detachCamera","startEngine","canvas","errCallback","internalStart","attachCamera","VideoChannelPlayer","handleStrengDeleted","notVideoFromCamera","videoEl","srcObject","removeAttribute","onIsLoading","isStreaming","currentTimeOffset","webRtc","VideoRef","on","attachHandlersToVideo","loadVideo","destroy","adjustWidthAndHeight","onDurationChanged","canPlay","onEnded","onCurrentTimeChanged","liveFeed","loadVideoFromCloud","loadVideoFromFile","loadVideoFromCamera","filename1","getVideoFileForCurrentStreng","tryFixRecording","videoLoaded","setWidth","setHeight","isMain","isVisible","showSameSizedVideos","updateControlState","prom","play","pause","removeAttribsOfSub","onSizePosChanged","setAttribute","onSizeSet","autoPlay","videoStyle","videoClassName","hiddenStyle","onLoadedMetadata","onMetaLoaded","textStyle","VideoPlayer","handleSwitchCameras","onToggleChannels","handleSubLoaded","storeVideoRef","videoRefs","handleSizePosChanged","inView","handleIsCameraLoading","channelsLoading","handleVideoCanPlay","channel2","videoStyleDuo","videoStyleSingle","subElementRef","channelsSwitched","visible","subStyleWide","subStyle","handleCurrentTimeChanged","handleDurationChanged","handleEnded","handleMeta","primaryChannel","leftIcon","rightIcon","subHiddenStyle","RobotData","handleRobotDataArrived","prevData","buildText","pitchTxt","rollTxt","distanceTxt","tiltTxt","panTxt","pan","camPanRef","innerHTML","tilt","camTiltRef","distanceRef","rollRef","pitchRef","getLastEvent","robotFrameStyle","textShadow","infoRow","pitchUnit","tiltValue","panValue","CameraSelect","front","back","fisheye","ToggleButtonGroup","selectedChannel","exclusive","onSetChannel","allowInview","VideoSourceToolbar","tabletMode","minimalControls","renderToolbar","iconSize","fullscreenClass","newScreenClass","newScreen","toggle1Style","notSelected","toggle2Style","isLiveFeed","isLive","fullscreenIcon","onToggleForceLiveFeed","empty","onToggleFullScreen","showTractorData","disableToggleTractorData","onToggleShowTractorData","onOpenVideoScreen","BaseMeasure","point1","resetLine","closeMeasure","onMeasured","toggleLaser","laserOn","handleMouseUp","drawLine","point2","calculateDistance","handleMouseMove","tempPoint","hasLaser","allowLaserControl","canvasRef","cavnasStyle","mixBlendMode","laserStyle","onMouseUp","onMouseMove","showCloseButton","ctx","getContext","clearRect","getDrawPoint1","getDrawPoint2","beginPath","moveTo","lineTo","strokeStyle","actualDistance","actualDif","factorStart","scalingDistance1","scalingDistance2","distanceDif","factorDif","laserRange","maxSize","Measure","scalingFactor","getScalingFactor","ratio","propTypes","MeasureAngle","firstPartDone","point3","point4","distance1","actuallength","adjacent","BaseOverlay","closeLayout","internalCloseLayout","toggleLayoutMode","handleStopResize","handleMouseDownOnImage","internalHandleMouseDownOnImage","handleStop","internalHandleStop","internalMouseMove","handleStartResize","buttons","startPos","mouseAction","overlayX","overlayY","overlaySize","imageRef","point","posX","posY","relPos","absRelPos","ImageSize","dif","qSize","svgParentStyle","buildSvgImage","onMouseDown","buildIcons","buildRenderObjects","leftTop","rightTop","leftBottom","rightBottom","checkStyle","bgcolor","buildExtraIcons","buildMeasureIcons","toolIcon","handleMove","handleMoveResize","handleRotate","xDif","yDif","imageX","imageY","rotate","WaterHeightMeasure","sectHeight","sectHeightPart","fullLineStyle","dashLineStyle","relativeToCenterImage","createImgObj","Image","onload","FreeformSurfaceMeasure","toggleSelectedArea","inverseSelection","calculateResult","canvasEl","context","img1","CircleImage","fillStyle","fillRect","drawImage","imgData","getImageData","totalCount","calculateNrBlack","img2","selectedImage","selectedCount","points","closePath","buildImageContent","fullCircleStroke","selectedStrokeClr","selectedOpacity","invertColors","fillColor","buildPath","selectedArea","p","DeformationMeasure","sectR","sectRPart","selectedFullLineStyle","selectedTextStyle","mid","calculatePos","calculateRadius","valueY","divBy","VideoSectionBase","VideoMetaLoader","onMeta","VideoSection","handleToggleAddT","popupPos","handleToggleAddI","showPopup","hanldeClose","handleRemoveVideo","removeVideoFile","onVideoLoaded","handleLoadVideo","withConversion","openVideo","isImportingVideo","importVideoFile","outFile","loadedVideo","hanldeMetaAvailable","storeVideoSize","handleToggleShowTractorData","showTractor","handleSetChannel","setInview","inViewChannel","onSelectChannel","handleSwitchChannels","switched","newChannel","getShowTractor","stateBeforeMeasure","setSetlectedChannel","allChannels","showData","screensize","getScreenSize","tonv","channelNames","disableAddI","disableAddT","onContextMenu","videoControlState","jumpToTime","buildMeasurOverlay","Menu","anchorReference","anchorPosition","parentMenuOpen","PropTypes","bool","any","func","gridArea","TickedProgressBar","initAnimation","animationInited","getProgress","initialAnimation","progress","getStrokeDashoffset","strokeLength","counterClockwise","inverse","steps","progressLength","getStrokeDashArray","circumference","getTrackStrokeDashArray","getExtendedWidth","strokeWidth","pointerRadius","pointerStrokeWidth","trackStrokeWidth","pointerWidth","getPointerAngle","cut","initialAnimationDelay","pointerFillColor","pointerStrokeColor","trackStrokeColor","trackStrokeLinecap","strokeColor","strokeLinecap","trackTransition","transition","r","strokeDasharray","strokeDashoffset","renderTicks","ticks","translateValue","tick","Speedometer","valueTxt","throttleTimer","nextValue","nextValueTxt","createThrottleTimer","RangeProgressBar","limit","trackStrokelength","trackStrokeGapLength","say","speech","SpeechSynthesisUtterance","volume","rate","speechSynthesis","speak","ImageRotationComponent","internalSetValue","lastAlert","showStroke","startLeft","imgSize","imgRotate","Icon","absValue","alertMsg","SayAlert","CustomSlider","Slider","Gauge","buildTicks","checkBounderies","asDefault","warning","moveContent","BatteryIndicator","sayAlert","minTxt","warningTxt","setValues","battery","lifeLeft","rounded","renderIcon","inset","showLifeLeft","REMOTE_ACTIONS","DRIVE_STATE","TURN_DIRECTION","remoteControlService","drivingState","turnDirection","speed","speedReel","speedLinkType","speedLinkMode","scanDir","isHeaterOn","lightLevel","auxLightLevel","lightsLinked","camZoom","camFocus","camMove","elevator","isClutchOn","zoomLevel","setStop","goForward","goBackward","updateSpeed","setSpeed","updateInnerState","isFrontLight","CalibrateCamPosDialog","handleCalibrate","sampling","handleCalibrationDone","samples","minTilt","maxTilt","minPan","maxPan","samplingDone","handleRobotData","canAutoPos","startTxt","requestState","bodyTxt","closeTxt","aria-describedby","CamerapPosition","showMenu","redraw","showCalibration","handleCloseCalibration","handleReloadCalibration","setCamPosCalibration","calib","handleCloseMenu","calibrateTxt","panAdjust","setSize","innerRad","lineWidth","arc","translate","arcTo","cameraColor","setTransform","ValueDirection","MeasuredIcon","pathRef","lastValue","showValue","getColor","clipPath","getClipPath","SvgIcon","gridTemplate","placeItems","gridColumn","gridRow","DistanceGauge","lastVal","toLocaleString","span","backValue","handleToggleLaser","handleRemoteUpdate","laserPosService","calibrate","laserOnTxt","laserOffTxt","laserFromVideo","menuOpen","actionTxt","overflowWrap","DashboardBody","lastTimestamp","newTimestamp","speedHandle","timeDif","camPosHandle","panHandle","tiltHandle","liftPosHandle","liftPos","rollHandle","pitchHandle","yawHandle","camPressureHandle","lensPressure","batteryHandle","batteryHandle2","leftWheelPressureHandle","leftDrivePressure","rightWheelPressureHandle","rightDrivePressure","tractorPressureHandle","pressure","laserRangeHandle","resizeTimer","panPosTxt","yawTxt","speedTxt","rollAlert","pitchAlert","camPressureTxt","leftWheelPressureTxt","rightWheelPressureTxt","tractrPressureTxt","batteryTxt","batteryWarningTxt","batteryMinTxt","laserRangeTxt","render2Row","render3Row","render1Col","render2Col","slider","renderSpeed","renderRoll","renderYaw","renderPitch","renderSlider","renderCamera","renderBattery","renderMeasureDistance","renderCamPressure","renderTractorPressure","renderLeftWheelPressure","renderRightWheelPressure","ctrls","renderControls","reshuffleForFor2Row","colBox","rowBox","colBox2","reshuffleForFor3Row","colBox3","nrEmptyInLastRow","extraOnRightSide","last","half","btnRadius","leftWheelPressure","rightWheelPressure","VideoBox","tractorPressure","measureDistance","totalButtonCount","allowedHeight","mainBox","trackService","tempDataHorDist","horDist","deltaDistance","verDist","prevDistance","tempDataTimestamp","recording","fp","flushTempData","trigData","calculateTrigData","raw","tractorDistance","flatHorDist","onUpdateData","recalculateData","robotLoader","tempDataVerDistMin","tempDataVerDistMax","distanceMin","distanceMax","screenManager","layoutService","_presets","preset","getDefinition","tryApplyPresetItem","innerHeight","applyDefinition","closeAll","defaultVal","setter","TractorResetDlg","handleFocused","handleChange","SonarConfigPopup","handleSetRange","handleSetPulse","pulse","handleSetFreq","freq","handleSetGain","gain","handleSetLow","low","handleSetHigh","high","handleSetGrayMode","canSetPulse","canSetGain","canSetFreq","canSetFrequency","rangeTxt","pulseTxt","gainTxt","FreqTxt","grayModeTxt","lowTxt","hightTxt","Boolean","playMode","box","zoomSlider","LidarRangeConfigDlg","filterToStr","LidarRolloutConfigPopup","handleRangeFilterChanged","rangeFilterTimer","nextRangeFilterValue","onFilterRangeChanged","handleStartEditColor","colorIdx","colorPickerAnchor","editColorIdx","handleCloseColorPicker","handlePickColor","onColorsChanged","newColors","hex","handleReset","onColorStopsChanged","handleEditRange","showRangeEdit","rangeEditIdx","closeRangeEdit","maxFilterRange","newFilterRange","gradients","maxFilter0","maxFilter1","maxFilters","filter0","filter1","lastBox","track","valueLabelDisplay","valueLabelFormat","onGrayModeChanged","ValueLabelComponent","enterTouchDelay","placement","zoomMarks","sampleDistanceMarks","StyledToggleButton","RobotToolbar","handleZoomChange","onZoomChanged","zoomUpdateDelay","nextZoom","handleSampleDistanceChange","onSampleDistanceChange","handleToggleTrackSonarView","resetDlgOpen","menuAnchorEl","onToggleTrackSonarView","handleToggleShowPuddles","onToggleShowPuddles","handleToggleSeriesStyle","onToggleSeriesStyle","handleToggleAdjustHeight","onToggleHeightDif","handleTogglGrid","onToggleGrid","handleTogglStartEndLabels","onToggleStartEndLabels","handleTogglShowObsDistances","onToggleShowObsDistances","handleTogglShowReverse","onToggleShowReverse","handleOpenMenu","handleCloseDisplayModePopover","displayModeAnchorEl","handleShowZoom","zoomAnchorEl","handleShowLidarRolloutZoom","lidarRollZoomAnchorEl","handleLidarRolloutZoomChanged","handleShowSelectDisplayMode","handleShowSelectSource","sourcAnchorEl","handleSelectSource","onSelectSource","handleShowSampleDist","sampleDistanceAnchorEl","handleCloseZoom","handleCloseLidarRolloutZoom","handleCloseSampleDistance","handleShowConfigureSonar","sonarConfigAnchorEl","handleCloseConfigureSonar","handleShowConfigureLidarRoll","lidarRollConfigAnchorEl","handleCloseConfigureLidarRoll","nrSeparators","showDashboardFunctions","maxButtons","maxButtonsTrunc","handleSetDistance","resetDistance","sendResetDistanceRequest","handleSetDlgClose","sendDistanceSet","onFindTimeForDistance","handleSelectDisplayMode","onSelectLayout","handleToggleDisformation","showDisformation","onShowDeformationChanged","handleToggleMeasureDistanceCrossSection","showMeasureDistanceCrossSection","onShowMeasureDistanceCrossSectionChanged","handleToggleMeasureDistanceRollout","showMeasureDistanceRollout","showMeasureAngleRollout","onShowMeasureAngleRolloutChanged","onShowMeasureDistanceRolloutChanged","handleToggleMeasureAngleRollout","dashboardToggle","visibleItems","invisibleItems","renderMenuItems","onToggleDashboard","selectedSource","renderZoomPopover","renderSampleDistancePopover","renderSonarConfigPopover","renderLidarRolloutItems","renderSelectDisplayModePopover","renderLidarRolloutZoomPopover","renderLidarRolloutConfigPopover","showTrack","zoomSliderVer","marks","zoomSliderHorBox","lidarRollSnap","onLidarRollSnapChanged","renderSelectDisplayModeItems","renderSelectSourceItems","selectedLayout","lidarGrayMode","onLidarGrayModeChanged","lidarFilterRange","maxLidarFilterRange","onLidarFilterRangeChanged","lidarColors","onLidarColorsChanged","lidarColorStops","onLidarColorStopsChanged","showMainCrawlerFunctions","renderTopGenericBtns","renderSourceSelector","renderSonarBtns","renderLidarBtns","renderLidarRollBtns","renderInclinationBtns","txt","bottomSeparator","onToggleVideoSection","topSeparator","renderSelectSourcePopover","selectRevIcon","showReverse","hasReverse","btnStyle","viewToggle","heightIcon","getAdjustHeightIcon","styleIcon","getSeriesStyleIcon","viewGrid","xAxisLabels","showObsDistances","viewStartEndLabels","onExportImage","renderTopGenericMenus","renderSourceSelectorMenus","renderSonarMenus","renderLidarMenus","renderLidarRollMenus","renderInclinationMenus","addMenuSeparator","seperated","borderTopWidth","borderTopStyle","SvgTrackService","dataReduceWithAdjust","dataReduceWithAdjustMinMax","dataReduce","checkMinMax","dataReduceMinMax","videoPosDistance","videoPosDistanceIdx","dataWidth","renderedDataWidth","renderedDataHeight","dataHeight","dataHeightMin","dataHeightMax","widthAdjuster","heighthAdjuster","rangePath","standingWaterPaths","firstPoint","lastPoint","lastHeight","svgHeight","svgWidth","isUpstream","distanceStart","renderVideoPos","renderIdealLine","renderMarkers","renderStandingWater","renderLabels","renderStartEndLabels","renderSeriesOutline","renderSeriesSimple","xLabels","resetCalculatedData","curPos","dataHeightDiv","heightMax","heightAdjuster","noHeight","videPosLine","idealLine","waterPaths","getColorForPuddle","viewBoxStart","startEndLabels","buildStartEndLabels","axis","markers","buildMarkers","endVal","heightMin","buildHorMarkers","buildVerMarkers","distanceOfPrev","distanceToPrev","totalHorMarkers","TOTAL_HOR_MARKERS","textStepSize","stepSize","totalVerMarkers","TOTAL_VER_MARKERS","getTotalVerMarkers","verStart","verStartLabel","accums","calculateAcummulatedValues","adjustMinMaxHeightForRecord","calcRelSizeAdjusters","buildSeries","buildStandingWaterSvgs","buildInitSvg","compileSvg","pathParts","useMinMax","minParts","maxParts","setLastPoint","startHeight","endHeight","flowIsCorrect","startOfIncorrectFlow","buildPuddleData","subList","getPuddleEndDistance","getHeigthDif","buildStandingWaterSvg","neededHeight","lastIdx","first","heightDiv","procentToAdd","distanceDiv","totalHeight","relHeight","lastX","lastY","idealWidth","toAddPerTick","reducer","applyCompensationForHeightDrift","percentage","extraSpace","buildSvg","adjustedHeight","adjustedWidth","TrackView","svg","trackSource","handleUpdateData","addData","handleStrengContentChanged","reportMode","resetData","buildObsDistances","handleRobotLoading","prevTime","gotoDistance","advanced","distanceOk","offsetX","flattenedDistanceToTime","renderObsDistances","trackData","strengDetails","needRebuild","obsList","rawTrackData","uniqueValues","distances","mappedDistance","lookup","buildLidarRolloutColorConverter","inGrayMode","grd","createLinearGradient","addColorStop","drawLidarRollout","startIdx","startDistance","endDistance","distancePerPixel","colorDict","imagedata","accumFraction","spread","foundStart","counter","newDistance","nrCols","integerPart","fraction","xl","angleAccum","prevAngle","prevY","yl","nrRows","pixelindex","putImageData","DeformationCalculator","handleSizeChanged","setDeformation","handleAccept","onAccept","calculateDeformation","valueEl","setInterval","showAccept","checkbox","centerWidth","centerHeight","ideal","real","resUi","idealImg","idealImage","imgIdealData","realImage","imgRealData","calculateNrDif","LidarDistCrossSectionCalculator","setMeasure","angle1","angle2","dist1","dist2","curAngle","nextCorner","angleDif","base","handleLidarClick","isMeasuring","showMeasDistCrossSection","handleLidarMouseMove","tempEndAngle","handleRobotReady","strandSizeChanged","draw","handleSonarData","handleSonarConfig","fillValueColorConvertor","handleLidarData","showSonar","showLidar","buildValueColorConvertor","metersInDiameter","resizeRequest","calculators","renderDeformationCalculator","isFreeForm","showDeformationChanged","desiredMeters","scale","getIdealScaleSize","col","distancePerValue","pixelsPerMm","threshold","valueRange","highCutoffLeftOver","tractorAngle","angle1Cos","angle2Cos","angle1Sin","angle2Sin","valAdjForLow","valAdjForRange","multiplier","multiplier2","ceil","valAdjForLowHigh","drawSonar","nrDecimals","font","scaleCount","fillText","drawTicks","inPath","foundDot","pixelsPerMeter","drawLidar","curCorner","drawLidarDistanceTriangle","LidarDistRolloutDisplay","distanceValue","LidarAngleRolloutDisplay","angleValue","LidarRolloutMeasureCanvas","isMeasuringAngle","onMeasure","processed","showMeasDistRollout","handleClickForDistance","showMeasAngleRollout","handleClickForAngle","tempEndCoord","angleCoord1","angleCoord4","angleTempEndCoord","angleCoord2","angleCoord3","coord1Abs","coord2Abs","angleCoord1Abs","angleCoord2Abs","angleCoord3Abs","angleCoord4Abs","displays","renderMeasuresAngle","onRellToAbsCoord","drawMeasureLine","avg1","avg2","onAbsToRelCoord","handleScroll","scrollStart","scrollLeft","drawTimeIndicator","realignMeasureCanvas","handleVScroll","curDistance","prevLiveDistance","zoomVal","getZoomValue","curEndDistance","canvasWidth","liveRefresher","buildRenderMap","setImageSize","setTimeCanvasSize","curTime","blockTimeUpdate","curTimeIdx","maxLen","handleGotoDistance","handleGotoPos","scrollbar","scrollboxRef","tryGotoPos","handleRellToAbsCoord","distanceNotVisible","vScrollbar","scrollTop","canvasHeight","handleAbsToRelCoord","handleMeasureDistance","new1","new2","hiddenCanvasRef","timeCanvasRef","measureCanvasRef","renderMap","scrollbarSize","needsDraw","needsBuildRenderMap","needsSetImageSize","needsRobotRefresh","needsResetTime","diff","newCanvasWidth","snapToHeight","zoomValue","prevAdjustedWindowSize","getZoomValueFrom","newAdjustedWindowSize","needsScrollbar","zoomedCanvasWidth","newScrollPos","loadReverseProvider","spinnerText","needsVScrollbar","canvasParentStyle","overflowX","timeCanvasStyle","overlayStyle","canvasStyle","showScrollFiller","hasVerScroll","onScroll","overFlowX","recalculateRelCoords","timeCanvas","smallest","largest","largestCircumference","distancePerPixelHeight","deltaDistances","accum","distancePerPixelWidth","apply","normalizedData","nrSameDistance","distFirstSample","distDelta","toDistribute","maxIdxs","acc","lastDataIdx","ctxHidden","endPos","curMap","mapStartDistance","mapEndDistance","curRenderStart","curRenderEnd","jumpToPos","lidarCanvas","distanceVisible","scrolledAway","RobotSectionBody","handleDataLoaded","handleToggleHeightDif","handleToggleGrid","handleToggleShowReverse","hasReverseTrackData","getSource","setLidarConfig","handleToggleStartEndLabels","handleExportImage","trackView","trackRef","downloadSvg","downloadSvgAsUrl","handleToggleShowObsDistance","handleZoomChanged","configId","sonarZoom","lidarZoom","lidarRollZoom","handleLidarRollSnapChanged","handleLidarGrayModeChanged","getLidarProvider","handleLidarFilterRangeChanged","handleLidarColorsChanged","handleLidarColorStopsChanged","handleShowDeformationChanged","handleMeasDistCrossSectionChanged","handleMeasDistRolloutChanged","handleMeasAngleRolloutChanged","handleLayoutChanged","defaults","robotHasSonar","robotHasLidar","getZoom","innerRef","changePosAllowed","getDisplayMode","RobotSection","storeVerSplitPos1","verSplit1","storeHorSplitPos1","horSplit1","split2","horSplit2","storeHorSplitPos2","handleToggleDashboard","handleSelectLayout","findTimeForDistance","splitPaneRef1","splitPaneRef2","renderContent","height2","renderSectionBody","minSize","onDragStarted","onDragFinished","pane2Style","ControllerButtons","revereTractorIcon","buttonBar","pauseBtnDisabled","onBtnPress","stopBtnDisabled","playBtnDisabled","recordBtnDisabled","recClass","reverseTractorBtnDisabled","reverseRecClass","MinControllerButtons","txtRec","txtReverse","txtStop","recBtn","btnTop","btnBottom","borderBottomLeftRadius","borderBottomRightRadius","disabledBackground","borderTopLeftRadius","borderTopRightRadius","TimeInfo","isFinite","onSetter","leftTimeInfoCol","thumb","rail","TabletSlider","TimeSlider","Comp","SpeedController","linkType","setSpeedLinkType","handleSpeed","speedUpdateDelay","nextSpeed","handleSpeed2","speedUpdateDelay2","nextSpeed2","setSpeed2","speed2","linkTypeTip","slider1Tip","slider2Tip","getLinkIcon","colorClass1","getColorClass","colorClass2","linkMode","disabled2","red","orange","green","gridTemplateColumns","gridTemplateRows","justifyItems","gridTemplateAreas","CrosshairButtons","leftBtn","topBtn","centerBtn","bottomBtn","DuoMeasuredIcon","upPathRef","downPathRef","lastUpVal","lastDownVal","upStyle","downStyle","topDown","topUp","upVal","downVal","CalibrateAcceleroDialog","aX","aY","minZ","aZ","maxZ","supportedActions","TractorDirectionButtons","handleBtnClick","setDirection","value2","setValueState","ax","ay","az","leftValue","rightValue","forwardValue","z","upDownValue","valueUp","valueDown","setAcceleroCalibration","hasRobotDataListener","titleDown","titleUp","titleLeft","titleRight","titleStop","showAccelero","accelero","disabledReason","disabledButtons","profile","borderRightStyle","borderLeftStyle","RobotController","handleToggleClutch","tractorImg","clutchActiveBtnsMap","clutch","txtClutch","txtLaser","clutchIcon","directionDisabled","allowedBtns","allowSpeedAdjust","tractorIcon","CameraDirectionButtons","actionLeft","actionRight","leftRightAsFocus","titleCenter","leftBtnStyle","rightBtnStyle","topBtnStyle","BottomBtnStyle","centerBtnStyle","centerBtnTablet","regularMode","centerBtnRegular","onTouchStart","onTouchEnd","LightController","setLightLinkType","handleSetLight","light1","updateDelay","setLightLevel","handleSetLight2","light2","updateDelay2","nextValue2","setLightLevel2","txtLightIntensity","titleIcon2","grid","CameraController","handleZoomIn","handleZoomOut","handleStopZoom","handleFocusIn","handleFocusOut","handleToggleLightDir","handleToggleHeater","handleSetScanDir","handleBtnPress","txtLightDirection","txtHeater","txtScanDir","txtZoomIn","txtZoomOut","txtFocusIn","txtFocusOut","lightImg","scanDirImg","renderHeater","col2","zoomButton","radiatorImg","btnCenter","titleIcon","sliderBox","ElevatorController","titleMoveUp","titleLower","borderLeftWidth","borderRightWidth","Controller","setPosCallback","buttonState","setLengthCallback","setSliderCallback","handleLengthChanged","handlePosChange","onButtonPressed","posTxt","lengthTxt","canMove","doCallbacks","reverseTractorDisabled","canReverseRecord","canRecord","hasRemote","renderFullControl","renderBasic","topBarBasic","timeInfoBar","infoBox","paper2","topBar2","tolerance","topBar","Instrumentation","robotSectionAllowedHeight","controllerRef","DefaultDocumentBody","storeVerSplitPos","storeHorSplitPos","instrumentationHeight","VerplitPaneRef","pane2","windowResized","handleToggleVideoSection","showVideo","pane1Style","renderRightSide","resizerStyle","panel1Style","onControlChanged","string","MainInfoDialog","StrengInfoDialog","ObservationsDialog","obsRef","InspectionBar","handleRootClick","handleShowMainInfo","showMainInfo","handleCloseMainInfo","showMainInfoError","showStrengDetails","showStrengInfo","handleCloseStrengInfo","onlyAllowObsOnFullStreng","showStrengInfoError","handleShowStrengSummary","showStrengSummary","handleShowObsList","showObsList","gotoAtEndMeasure","handleCloseObsList","obsDlgRef","handleAddObs","handleStartMeasureDepth","callbackDone","curObsIdx","handleStopMeasure","handleAddStreng","selectedObs","toolbarBtn","onToggleMinimalControls","renderObsIcons","mountOnEnter","toolbarBtnBottom","toolbarBtnTop","RobotSectionBar","gridColumnStart","gridColumnEnd","gridRowStart","gridRowEnd","SingleButtonController","txtPlay","txtPause","buttonType","ControllerBar","activeButtonType","disableBtn","setActiveButtonType","timeInfoBox","TabletCameraController","handleSliderClick","handleZoom","handleChangeLightLevel","handleContiniousZoom","handleStopContiniousZoom","txtZoom","tryInitZoom","hideControls","sliderBox2Style","sliderBox2","renderZoomSlider","ThumbComponent","extraClassName","clsx","onChangeCommitted","TabletDocumentBody","handleMeasured","inspectionBarRef","OkCancelDialog","LayoutManager","handleNameChanged","newName","renderItem","handleApplyPreset","applyPreset","handleRemovePreset","layouts","handleStartAddDoc","dlgSaveOpen","storeCurrent","Input","LidarVerifyDimensionsDlg","handleChangeWidth","handleChangeHeight","entryDoneResolver","handleVerifyDimensions","prevWidth","prevHeight","waitForHandler","leftInput","row2","margiTop","Document","handleToggleMinControls","goHome","toggleForceLiveFeed","isLiveCamera","setLiveInputSource","toggleFullScreen","setFullScreen","handleSelectChannel","handleControlChanged","checkControlStateChangeAllowed","setControlState","handleJumpToPos","handlePlayPosChanged","activeStrengHasVideo","loadStreng","Infinity","handleVideoLoaded","allowRecord","handleStrengLoaded","emitLengthChanged","handleVideoEnded","newClosures","closeContinuousObservations","addEndOfRecordingObservations","added","handleBuildReports","isReportDlgOpen","isNotCalibratedForMeasure","handleMeasuringDone","tryGotoFullscreenForMeasure","handleStartMeasureAngle","positionX","positionY","handleStartMeasureAreaSize","handleStartMeasureFreeform","measurementDone","handleTerminateRecFromObs","handleOpenVideoScreen","openVideoScreen","measuringAngle","mount","edit","loadFromCloud","initAfterLoadData","onUnload","unMount","signalEndOfRecording","signalStartOfRecord","menuButtonLogo","borderRightColor","laserCalibration","distance2","radius1","radius2","createMuiTheme","PrivateRoute","rest","App","ThemeProvider","utils","MomentUtils","CssBaseline","exact","StrictMode","I18nextProvider","getElementById","serviceWorker","registration","unregister","ConfirmationDialog","lines","line"],"mappings":"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","file":"static/js/main.d42eb7ec.chunk.js","sourcesContent":["/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport { codeSelectorService } from './code_selector_service';\r\nimport i18n from \"i18next\";\r\nimport { errExtractor } from './error_extractor';\r\nimport { projectService, PROJECT_VERSION } from './project_service';\r\nimport { dialogService } from '../../services/dialog_service';\r\nimport { cloudDocsService } from './cloud_documents_service';\r\nimport { configService } from '../../services/config_service';\r\nimport { strandPropsService } from './strand_props_service';\r\n\r\nconst events = require('events');\r\n\r\n/**\r\n * base class for the ActiveProjectService.\r\n * This provides all the platform generic stuff. Descendents should implement platform specific stuff (getting data from disk,...)\r\n */\r\nexport class ActiveProjectBaseService {\r\n\r\n\r\n constructor() {\r\n //this.path = null;\r\n this.projectName = null;\r\n this.data = null;\r\n this.loadedFrom = null; // when data gets loaded, this indicates from where. allowed: 'cloud', 'file'. This is so we know how to handle everything correctly (cloud is always read-only).\r\n this.dirtyTimer = null;\r\n this._activeStrengIdx = -1; // the current streng. stored here so it can easily be shared accross components working on the currently active doc, managed by Strengs component.\r\n this.events = new events.EventEmitter(); // both videoplayer as robotplayer need to monitor activeStrengIdx.\r\n this.continuousIdxGen = []; // used to track all the currently open continuous observations, so we can assign correct index nr to objects.\r\n }\r\n\r\n get activeStrengIdx () {\r\n return this._activeStrengIdx;\r\n }\r\n set activeStrengIdx(value) {\r\n this._activeStrengIdx = value;\r\n this.buildContinuousIdxGenList();\r\n strandPropsService.init(this.activeStreng); // when the streng has changed, the streng props also need to be reset to init\r\n this.events.emit(\"strengChanged\", value);\r\n }\r\n\r\n get activeStreng () {\r\n if (this.data && this._activeStrengIdx >= 0 && this._activeStrengIdx < this.data.strengs.length) {\r\n return this.data.strengs[this._activeStrengIdx];\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * checks if there is a data file available for the currently active streng\r\n */\r\n activeStrengHasVideo() {\r\n const streng = this.activeStreng;\r\n return (streng && streng.videoUrl != null && Object.keys(streng.videoUrl).length > 0); // important: != cause we want to check if video has a value !== would not work for undefined\r\n }\r\n\r\n /**\r\n * checks if there is a robot data file available for the currently active streng\r\n */\r\n activeStrengHasReverseRobotData() {\r\n const streng = this.activeStreng;\r\n return (streng && streng.robotRevDataUrl != null);\r\n }\r\n\r\n activeStrengHasSonarData() {\r\n const streng = this.activeStreng;\r\n return (streng && streng.sonarDataUrl != null);\r\n }\r\n\r\n activeStrengHasLidarData() {\r\n const streng = this.activeStreng;\r\n return (streng && streng.lidarDataUrl != null);\r\n }\r\n \r\n\r\n /**\r\n * creates a new project and saves it.\r\n * is async cause it might also save to the cloud\r\n * @param {string} dest the path to store all the info in. This may end in '.cami', it will be stripped.\r\n */\r\n async createNew(dest) {\r\n this.projectName = dest;\r\n this.data = projectService.createNew();\r\n this.loadedFrom = 'file';\r\n this.save();\r\n }\r\n\r\n /**\r\n * saves the current project.\r\n * this only clears the timer, inheritor does the save.\r\n * @param {bool} blockCloud when true: no cloud update is done. This is for when project is created, in which case, cloud-save is already done\r\n */\r\n save() { \r\n if (this.dirtyTimer) { // when it's saved, no longer need to have any timers running to save changes,\r\n clearTimeout(this.dirtyTimer);\r\n }\r\n this.dirtyTimer = null;\r\n }\r\n\r\n /**\r\n * loads the project data.\r\n * inheritors should further implement, also set the projectName\r\n * @param {string} id id of the project\r\n */\r\n load(id) {\r\n this.data = projectService.load(id);\r\n this.loadedFrom = 'file';\r\n }\r\n\r\n /**\r\n * loads the project data.\r\n * inheritors should further implement, also set the projectName\r\n * @param {string} id id of the project\r\n * @returns true upon success, false otherwise\r\n */\r\n async loadFromCloud(id) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n cloudDocsService.getProject(id).then((data) => {\r\n projectService.checkVersion(data);\r\n this.tryUpgradeForCloud(data); // need to make certain that older file formats that haven't been converted yet, are loaded correctly.\r\n this.path = null;\r\n this.data = data;\r\n this.projectName = data.name;\r\n this.loadedFrom = 'cloud';\r\n resolve(true);\r\n }).catch((error) => {\r\n this.data = null;\r\n dialogService.error(i18n.t(\"Openen\"), i18n.t(\"load_error\", {pathToFile: id, error: errExtractor.get(error)}));\r\n resolve(false);\r\n });\r\n }\r\n catch(error) {\r\n dialogService.error(i18n.t(\"Openen\"), i18n.t(\"load_error\", {pathToFile: id, error: errExtractor.get(error)}));\r\n resolve(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * called when a project is loaded from cloud\r\n * Will make certain that the project is consistent with the latest version of the project file definition.\r\n * does not store anything\r\n */\r\n tryUpgradeForCloud(data) {\r\n if (data.version === \"1.1.0\") { // earliest version we need to try and upgrade\r\n this.updateStrengs_110_to_121(data);\r\n data.version = \"1.2.1\";\r\n }\r\n else if (data.version === \"1.2.0\") { // earliest version we need to try and upgrade\r\n this.updateStrengs_120_to_121(data);\r\n data.version = \"1.2.1\";\r\n }\r\n if (data.version === \"1.2.1\") {\r\n this.updateStrengs_121_to_122(data);\r\n data.version = \"1.2.2\";\r\n }\r\n }\r\n\r\n updateStrengs_110_to_121(data) {\r\n for(const streng of data.strengs) {\r\n streng['inspMethod'] = data.main.inspectionMethode;\r\n for(const channel in streng.cams) { // need to make certain that these fields are real booleans, cause something went wrong in the past with this\r\n const cam = streng.cams[channel];\r\n cam.tOnV = cam.tOnV === 'true' || cam.tOnV === true;\r\n cam.iOnV = cam.iOnV === 'true' || cam.iOnV === true;\r\n cam.addI = cam.addI === 'true' || cam.addI === true;\r\n cam.addT = cam.addT === 'true' || cam.addT === true;\r\n }\r\n }\r\n delete data.main.inspectionMethode;\r\n }\r\n\r\n updateStrengs_120_to_121(data) {\r\n for(const streng of data.strengs) { // need to make certain that these fields are real booleans, cause something went wrong in the past with this\r\n for(const channel in streng.cams) {\r\n const cam = streng.cams[channel];\r\n cam.tOnV = cam.tOnV === 'true' || cam.tOnV === true;\r\n cam.iOnV = cam.iOnV === 'true' || cam.iOnV === true;\r\n cam.addI = cam.addI === 'true' || cam.addI === true;\r\n cam.addT = cam.addT === 'true' || cam.addT === true;\r\n }\r\n }\r\n }\r\n\r\n updateStrengs_121_to_122(data) {\r\n for(const streng of data.strengs) { // need to make certain that these fields are real booleans, cause something went wrong in the past with this\r\n streng.equipmentSerialNr = data.main.equipmentSerialNr;\r\n }\r\n delete data.main.equipmentSerialNr;\r\n }\r\n\r\n /**\r\n * saves the current project to the cloud\r\n */\r\n async saveToCloud() {\r\n try {\r\n if (this.data.id) {\r\n await cloudDocsService.updateProject(this.data);\r\n }\r\n else {\r\n const cloudData = await cloudDocsService.addProject(this.data);\r\n // important: keep original data, there might be references to it\r\n this.data.id = cloudData.id;\r\n this.markDirty();\r\n }\r\n }\r\n catch (error) {\r\n //todo: inform user that cloud project is no longer in sync with local\r\n console.log(error);\r\n }\r\n }\r\n\r\n /**\r\n * called by the components when they modify the data to indicate that it needs to be saved.\r\n * The timer delay prevents from saving too often.\r\n * @param {string} field the name of the field that has changed, if known. This is used to allow\r\n * UI elements to perform updates upon changes to a particular field (ex: track-view uses this to \r\n * monitor for changes in expected distance, start & end height offsets)\r\n */\r\n markDirty(field=null) {\r\n if (this.dirtyTimer) {\r\n clearTimeout(this.dirtyTimer);\r\n }\r\n this.dirtyTimer = setTimeout(() => {\r\n try {\r\n this.dirtyTimer = null;\r\n this.save();\r\n }\r\n catch(error) {\r\n dialogService.error(i18n.t(\"Bewaren\"), i18n.t(\"save_doc_err\", {error: errExtractor.get(error)} ));\r\n }\r\n }, 2000);\r\n this.events.emit(\"dirty\", field);\r\n }\r\n\r\n\r\n\r\n /**\r\n * emits an event to all interested observatsions (those that are continuous, but not closures) \r\n * to indicate that an observation that is a continuous (closure or not) has been added/changed/removed.\r\n * This is only used by the currently loaded observation components, so it's always but a fractio of the\r\n * dataset and always from the same list (each observation knows the list it belongs to)\r\n * @param {object} changed the observation data object that changed, null in case of delete\r\n * @param {list} oldKey in case that the code of an observation changed, the previous code\r\n * @param {list} oldKey in case that the code of an observation changed, the previous code\r\n */\r\n continuousChanged(changed, oldKey=null, oldIdx=null) {\r\n let params = {changed, oldKey, oldIdx};\r\n this.events.emit(\"continuousChanged\", params);\r\n }\r\n\r\n /**\r\n * checks if the new record is a continuous observation and if so, assigns an index number to it.\r\n * also checks for duplicate running continous obs.\r\n * @param {object} record the newly created observation\r\n */\r\n processNewContinuousRecord(record) {\r\n const isContinuous = codeSelectorService.isContinuous(record.values);\r\n if (isContinuous) {\r\n if (record.values[record.values.length-1] !== \"1\") {\r\n this.continuousIdxGen.push(record);\r\n record['continuousIdx'] = this.continuousIdxGen.length;\r\n }\r\n else if (record.continuousIdx) { // cant be 0, so that's ok\r\n this.continuousIdxGen[record.continuousIdx-1] = null; // close it so that findDuplicateToClose doesn't trip on it.\r\n }\r\n this.continuousChanged(record);\r\n }\r\n }\r\n\r\n /**\r\n * checks if the new obs has the same code as an already running\r\n * continuous observation. If so, the user is asked what to do: close the previous\r\n * one or keep both open. The first case is for changing values (ex water level), the second\r\n * is for a new situation, ex: a second crack\r\n * @param {object} record the newly created observation\r\n * @returns the duplicate object or null\r\n */\r\n findDuplicateToClose(record) {\r\n return new Promise((resolve, reject) => {\r\n const key = record.values.join('');\r\n const found = this.continuousIdxGen.findIndex((value) => {\r\n if (value !== record && value != null && value != undefined) {\r\n const keyOfValue = value.values.join('');\r\n return (key === keyOfValue);\r\n }\r\n return false;\r\n });\r\n if (found > -1) {\r\n const duplicate = this.continuousIdxGen[found];\r\n const message = i18n.t(\"duplicate_cont_obs_message\");\r\n const details = i18n.t(\"duplicate_cont_obs_details\");\r\n const responses = [\r\n i18n.t(\"duplicate_cont_obs_change_value_of_prev\"),\r\n i18n.t(\"duplicate_cont_obs_new_obs\")\r\n ];\r\n dialogService.ask(i18n.t('Observation'), message, details, responses, (selectedIdx) => {\r\n if (selectedIdx.response === 0) { // user wants to change the value of prev obs, so close prev obs.\r\n resolve(duplicate);\r\n }\r\n else {\r\n resolve (null); // callback is called out of sync, so this statement is reuired, cant rely on end of code block\r\n }\r\n });\r\n }\r\n else {\r\n resolve(null);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * called when a continuous observation is changed to non-continuous\r\n * @param {object} record the observation being modified\r\n */\r\n clearContinuousRecord(record, prevKey) {\r\n this.continuousChanged(record, prevKey, record.continuousIdx);\r\n let idx = this.continuousIdxGen.indexOf(record);\r\n if (idx === this.continuousIdxGen.length -1) { // it's the last one, can be cleared?\r\n this.continuousIdxGen.pop();\r\n this.removeDeletedIdxGen();\r\n }\r\n else if (idx > -1) {\r\n this.continuousIdxGen[idx] = undefined;\r\n }\r\n delete record.continuousIdx;\r\n }\r\n\r\n /**\r\n * pops the records from this.continuousIdxGen from as long as the value is undefined.\r\n * when null -> existing, but closed\r\n */\r\n removeDeletedIdxGen() {\r\n while(this.continuousIdxGen.length > 0 && this.continuousIdxGen[this.continuousIdxGen.length - 1] === undefined) {\r\n this.continuousIdxGen.pop();\r\n }\r\n }\r\n\r\n\r\n /**\r\n * called when observation is removed. Makes certain that the internal list is kept in sync.\r\n * @param {object} record observation being deleted\r\n * @param {lsit} list the list of all the records, used in case that a terminator is deleted, so we can restore the obs in the continuousIdxGen list\r\n */\r\n deleteContinuous(record, list) {\r\n const isContinuous = codeSelectorService.isContinuous(record.values);\r\n if (isContinuous) {\r\n if (record.values[record.values.length-1] !== \"1\") {\r\n if (this.continuousIdxGen.length === +record.continuousIdx) { // it's the last item on the list remove it.\r\n this.continuousIdxGen.pop();\r\n this.removeDeletedIdxGen();\r\n }\r\n else {\r\n this.continuousIdxGen[record.continuousIdx-1] = undefined; // in the middle of the list, remove it.\r\n }\r\n }\r\n else {\r\n const startObs = list.find((item) => item.continuousIdx === record.continuousIdx);\r\n this.continuousIdxGen[record.continuousIdx-1] = startObs; \r\n }\r\n this.continuousChanged(record);\r\n }\r\n }\r\n\r\n /**\r\n * called whenever switched from streng. Makes certain that the list continuousIdxGen\r\n * is in sync with the currently selected streng.\r\n */\r\n buildContinuousIdxGenList() {\r\n const streng = this.activeStreng; \r\n this.continuousIdxGen = [];\r\n for(const obs of streng.observations) {\r\n const isContinuous = codeSelectorService.isContinuous(obs.values);\r\n if (isContinuous) {\r\n if (obs.values[obs.values.length-1] === \"1\") {\r\n this.continuousIdxGen[obs.continuousIdx-1] = null;\r\n }\r\n else {\r\n while (+obs.continuousIdx > this.continuousIdxGen.length) {\r\n this.continuousIdxGen.push(undefined);\r\n }\r\n this.continuousIdxGen[(+obs.continuousIdx)-1] = obs;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * stores the size & length of the video in the current streng (when need be). \r\n * This makes it easier for other parts of the system to use this info without having\r\n * to render the video first.\r\n */\r\n storeVideoSize(streng, video, channel) {\r\n if (!streng) return;\r\n if (!video) return; // can happen if you open and go back too fast\r\n const def = streng.cams[channel];\r\n if (!def || def.height !== video.videoHeight || def.width !== video.videoWidth) { \r\n streng.cams[channel] = {idx:0, width: video.videoWidth, height: video.videoHeight, tOnV: false, iOnV: false, addI: true, addT: true, scalingFactor1: 0, scalingFactor2: 0};\r\n this.markDirty();\r\n }\r\n if (streng.videoLength !== video.duration) { // all channels should have a video file of same length (migth differ a few frames, but not so important)\r\n streng.videoLength = video.duration;\r\n this.markDirty();\r\n }\r\n }\r\n\r\n /**\r\n * adds the observatio to the currently active streng and raises an event to let\r\n * ui know.\r\n * Note: this method should be used by non UI services that want to add observations.\r\n * @param {obj} obs the new observaion to add\r\n */\r\n addObsToStreng(obs) {\r\n const streng = this.activeStreng;\r\n streng.observations.push(obs);\r\n streng.observations.sort((a, b) => a.longitude-b.longitude);\r\n const idx = streng.observations.indexOf(obs);\r\n this.markDirty();\r\n this.events.emit(\"obsGenerated\", idx);\r\n }\r\n\r\n /**\r\n * requests the editors that are showing an observation, if they are ok, with a new one\r\n * being added.\r\n * This is used by services that want to add new observations that need to become active (auto generators)\r\n * to ask editors if they are ok with switching to a newly active observation.\r\n * This allows obervations to run checkObservationCanLooseFocus.\r\n */\r\n canEditorsContinueOnObs() {\r\n let result = {canContinue: true}\r\n this.events.emit(\"canContinueOnObs\", result);\r\n return result.canContinue;\r\n }\r\n\r\n\r\n /**\r\n * used to let other parts of the system know that the recording has stopped.\r\n * This is currently used to let the observations component know that it needs to reload the data and\r\n * need to move focus.\r\n */\r\n signalEndOfRecording() {\r\n this.events.emit(\"recordingReady\");\r\n }\r\n\r\n /**\r\n * used to let obervations know that record has started. It should refresh it's ui completely cause some observation\r\n * records might have changed cause of the record start.\r\n */\r\n signalStartOfRecord() {\r\n this.events.emit(\"recordingStart\");\r\n }\r\n\r\n /**\r\n * creates a string with the path and filename for the currently selected streng.\r\n */\r\n getRobotDataFileForCurrentStreng(reverse=false){\r\n throw new Error(\"implemented by inheritor\");\r\n }\r\n\r\n /**\r\n * creates a string with the path and filename for the currently selected streng.\r\n */\r\n getVideoFileForCurrentStreng(channel, raw=true){\r\n throw new Error(\"implemented by inheritor\");\r\n }\r\n\r\n\r\n /**\r\n * creates a string with the path and filename for a pdf file in this project\r\n */\r\n getPdfFilePath(){\r\n throw new Error(\"implemented by inheritor\");\r\n }\r\n\r\n getReportPath() {\r\n throw new Error(\"implemented by inheritor\");\r\n }\r\n\r\n /**\r\n * returns the path to the project's temp folder, and the filename appended to it when supplied.\r\n * @param {string} filename the filename to append to the path, optional\r\n */\r\n getTempPath(filename=null) {\r\n throw new Error(\"implemented by inheritor\");\r\n }\r\n\r\n /**\r\n * returns all the unique values that were entered for the specified streng-field.\r\n * @param {string} field name of the field to filter on\r\n */\r\n getAllValuesForStrengField(field) {\r\n if (this.data && this.data.strengs) {\r\n let result = this.data.strengs.map(x => x[field]).filter((value, index, lst) => {\r\n return (typeof value === 'string') && value !== \"\" && value !== undefined && value !== null && lst.indexOf(value) === index; // also skip empty values and duplicate\r\n });\r\n return result;\r\n }\r\n return [];\r\n }\r\n \r\n}","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport { ActiveProjectBaseService } from '../shared_components/services/active_project_base_service';\r\n\r\n\r\nclass ActiveProjectService extends ActiveProjectBaseService {\r\n constructor() {\r\n super();\r\n }\r\n \r\n}\r\n\r\nexport const activeProjectService = new ActiveProjectService();","import i18n from \"i18next\";\r\nimport { initReactI18next } from \"react-i18next\";\r\n\r\nimport en from '../shared_components/translations/en';\r\nimport nl from '../shared_components/translations/nl';\r\nimport { configService } from \"./config_service\";\r\n\r\nconst isDev = process.env.REACT_APP_DEBUG;\r\n\r\nexport const options =\r\n [ \r\n { value: 'en', label: 'English' },\r\n { value: 'nl', label: 'Dutch' }\r\n ];\r\n\r\n\r\n\r\ni18n.use(initReactI18next) // passes i18n down to react-i18next\r\n .init({\r\n resources: {\r\n en,\r\n nl\r\n },\r\n lng: configService.get('general.language'),\r\n fallbackLng: \"en\",\r\n ns: ['translations'],\r\n defaultNS: 'translations',\r\n interpolation: {\r\n escapeValue: false\r\n },\r\n react: {\r\n wait: true,\r\n },\r\n keySeparator: false,\r\n nsSeparator: false,\r\n debug: isDev\r\n });\r\n\r\nexport default i18n; \r\n\r\nexport const LanguageOptions = [ \r\n { value: 'en', label: 'English' },\r\n { value: 'nl', label: 'Nederlands' },\r\n { value: 'it', label: 'Italiana' } \r\n];\r\n\r\nexport function getSelectedLanguage() {\r\n let lng = configService.get(\"general.language\");\r\n if (!lng) {\r\n lng = \"en\";\r\n }\r\n return lng;\r\n}","\r\n/**\r\n * used to keep track of the current play/recording distance traveled by the crawler. This allows everyone to get access\r\n * to this value.\r\n * \r\n * Todo: move event handler here instead of documentControlService\r\n */\r\n class DistanceService {\r\n constructor() {\r\n this.current = 0;\r\n }\r\n}\r\n\r\nexport const distanceService = new DistanceService();","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport { CameraBaseService } from '../../../shared_components/document/video/camera_base_service' ;\r\n\r\nclass CameraService extends CameraBaseService{\r\n constructor() {\r\n super();\r\n }\r\n\r\n async start() {\r\n return Promise.reject(\"not implemented\");\r\n }\r\n\r\n async stop() {\r\n return Promise.reject(\"not implemented\");\r\n }\r\n\r\n async tryFixRecording() {\r\n return Promise.resolve();\r\n }\r\n\r\n stopRecord() {\r\n // don't need to do anything, recording not yet supported through web. Needed for code protability with recorder\r\n }\r\n detachCamera(channel) {\r\n }\r\n \r\n}\r\nexport const cameraService = new CameraService();","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n\r\nexport class CameraBaseService {\r\n constructor() {\r\n this.isRecording = false; // to keep track if engine is currently set to record or not\r\n }\r\n\r\n async start() {\r\n return Promise.reject(\"not implemented\");\r\n }\r\n\r\n async stop() {\r\n return Promise.reject(\"not implemented\");\r\n }\r\n \r\n}\r\n","import { configDefaults } from \"../shared_components/services/config_settings\";\r\nimport {isMobile} from 'react-device-detect';\r\nimport { setServerConfig } from \"../shared_components/services/server_config_service\";\r\n\r\n\r\nconst defaults = {\r\n\r\n};\r\n\r\nclass ConfigService {\r\n\r\n constructor() {\r\n this.isDemo = false; // for compatibility with the desktop version\r\n this.isCloud = true; // this is website, so is cloud\r\n this.isSite = true;\r\n this.isMobile = isMobile; // desktop can never be mobile, we can \r\n this.isViewer = true;\r\n }\r\n\r\n\r\n load() {\r\n let loc = window.location.hostname;\r\n //app-dot-cami-global.ew.r.appspot.com/home\r\n loc = loc.substring(8);\r\n loc = loc.replace('.appspot.com', '');\r\n if (loc.endsWith(\".ew.r\")) {\r\n loc = loc.substring(0, loc.length-5);\r\n }\r\n if (loc === \"cami-global\") { // small hack: need to put in code, easiest for now\r\n setServerConfig('https://api-dot-cami-global.ew.r.appspot.com', \"AIzaSyDhVr0PFQ5yBzV6yb_GxYZae95aBO55R88\");\r\n }\r\n \r\n }\r\n\r\n /**\r\n * gets the value, returns the default if no value found yet.\r\n * We need to do it like this, cause the default store only returns the default value if there was no store\r\n * yet. After an upgrade, new fields could have been added, which would return undefined. Can't have that.\r\n * @param {string} field the fieldname\r\n */\r\n get(field) {\r\n let result = localStorage.getItem(field);\r\n if (result === undefined || result === null) {\r\n const fields = field.split('.');\r\n if (fields.length > 0) {\r\n result = configDefaults;\r\n for(const f of fields) {\r\n result = result[f];\r\n if (result === undefined || result === null) {\r\n return null;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n try {\r\n result = JSON.parse(result);\r\n }\r\n catch(error) {\r\n console.log(error);\r\n return null;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n set(field, value) {\r\n localStorage.setItem(field, JSON.stringify(value));\r\n }\r\n\r\n clear(field) {\r\n localStorage.removeItem(field);\r\n }\r\n}\r\n\r\nexport const configService = new ConfigService();","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n\r\nimport { engineService } from '../../../../components/video_engine/engine_service';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\nimport { RobotBase } from './robot_base_service';\r\nimport i18n from \"i18next\";\r\nimport { errExtractor } from '../../../services/error_extractor';\r\nimport { lidarService } from '../sonarLidar/lidar_service';\r\nimport { sonarService } from '../sonarLidar/sonar_service';\r\n\r\n/**\r\n * a robot service that receives the data from the engine processes through the pipe connection.\r\n */\r\nexport class RobotClient extends RobotBase {\r\n constructor() {\r\n super();\r\n this._isRecording = false; // keep track if engine is recording somehow\r\n this.currentItem = {};\r\n this.onReverseRecordReady = null; // callback called when reverse recording is ready\r\n }\r\n\r\n /**\r\n * when this service starts, load the data or make connection to robot.\r\n */\r\n start() {\r\n this.data = null; // need to init this to null, can only store recs while recording\r\n if (engineService.tractor) {\r\n if (engineService.tractor.lidarProvider) { // need to re-init the UI service cause we might have switched from video to live mode in the UI, in which case, the engine isn't restarted if it is already running, stil need to init the ui though\r\n lidarService.init(engineService.tractor.lidarProvider);\r\n }\r\n if (engineService.tractor.sonarProvider) { \r\n sonarService.init(engineService.tractor.sonarProvider);\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * returns the data event that was last played.\r\n * This is used by the ui component to perform a proper init when loaded\r\n * return null if there isn't any\r\n */\r\n getLastEvent() {\r\n return this.currentItem;\r\n }\r\n\r\n setCurrentTimestamp(value) {\r\n // dont do anything. this is only here so that we comply to the interface of a robot under\r\n // control of DocumentControlService\r\n }\r\n\r\n startRecord() {\r\n this.data = []; // create at record, but don't destroy after recording is done, keep it, so that it can still be used to search in when user keeps camera on after record but wants to change time info\r\n this._isRecording = true;\r\n // dont reset the currentItem, cause then the user looses the view, which is the only thing it serves\r\n }\r\n\r\n\r\n /**\r\n *\r\n */\r\n isRecording() {\r\n return this._isRecording;\r\n }\r\n\r\n /**\r\n * send message to engine to start recording reverse\r\n */\r\n startReverseRecord() {\r\n engineService.startRevRecord().then(() => {\r\n this._isRecording = true;\r\n }).catch((error) => {\r\n dialogService.error(i18n.t(\"Tractor\"), errExtractor.get(error));\r\n });\r\n }\r\n\r\n stopReverseRecord(onDone) {\r\n engineService.stopRevRecord().then(() => {\r\n this._isRecording = false;\r\n if (onDone) {\r\n onDone(true);\r\n }\r\n }).catch((error) => {\r\n onDone(false);\r\n dialogService.error(i18n.t(\"Tractor\"), errExtractor.get(error));\r\n });\r\n }\r\n\r\n /**\r\n * processes robot data sent from engine process to ui process\r\n * @param {ojbect} data robot data\r\n */\r\n addRecord(data) {\r\n Object.assign(this.currentItem, data); // retrieve all the values and merge with those that didn't change.\r\n const rec = Object.assign({}, this.currentItem); // create a new object for adding to the data points list, so that it can be consulted for time-v-distance translations during record\r\n if (this.onData) { // for in this process (overlay)\r\n this.onData(rec);\r\n }\r\n if (this.data) { // only save the record while recording, otherwise we drop it cause it could fill things up\r\n this.data.push(rec);\r\n }\r\n }\r\n\r\n hasPitch() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasPitch();\r\n }\r\n\r\n hasYaw() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasYaw();\r\n }\r\n\r\n hasRoll() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasRoll();\r\n }\r\n\r\n hasCameraPan() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasCameraPan();\r\n }\r\n\r\n hasCameraTilt() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasCameraTilt();\r\n }\r\n\r\n hasDistance() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasDistance();\r\n }\r\n\r\n hasSonar() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasSonar();\r\n }\r\n\r\n hasLidar() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasLidar();\r\n }\r\n\r\n hasElevator() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasElevator();\r\n }\r\n\r\n canToggleLightDirection() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.canToggleLightDirection();\r\n }\r\n\r\n canToggleScanDirection() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.canToggleScanDirection();\r\n }\r\n\r\n hasClutch() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasClutch();\r\n }\r\n\r\n needsClutch() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.needsClutch();\r\n }\r\n\r\n hasRemote() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.remote != null;\r\n }\r\n\r\n hasAccelerometer() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasAccelerometer();\r\n }\r\n\r\n hasLensPressure() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasLensPressure();\r\n }\r\n\r\n hasTractorPressure() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasTractorPressure();\r\n }\r\n\r\n hasWheelPressure() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasWheelPressure();\r\n }\r\n\r\n hasBattery() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasBattery();\r\n }\r\n\r\n hasLifeLeft() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasLifeLeft();\r\n }\r\n\r\n hasLaserMeasure() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasLaserMeasure();\r\n }\r\n\r\n /**\r\n * for the button on the controller dashboard\r\n */\r\n hasCameraGotoCenter() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.hasCameraGotoCenter();\r\n }\r\n\r\n /**\r\n * gets the mode by which speed should be applied to the device.\r\n * possible values:\r\n * - single: only 1 speed control available\r\n * - dual: speed control available for tractor and wheel. can be controlled individually (and thus also combined)\r\n * - clutchToggled: speed control available for tractor and wheel but value of clutch determins which one is currently possible (clutch in-> tractor, clutch out-> wheel)\r\n * - none: no speed control allowed\r\n */\r\n speedMode() {\r\n return engineService.tractor && engineService.tractor._recorder && engineService.tractor._recorder.speedMode();\r\n }\r\n\r\n startLaser(autoStart=true) {\r\n engineService.startLaser(autoStart);\r\n }\r\n\r\n stopLaser() {\r\n engineService.stopLaser();\r\n }\r\n\r\n get sensorLimits() {\r\n if (engineService.tractor && engineService.tractor._recorder) {\r\n return engineService.tractor && engineService.tractor._recorder.sensorLimits;\r\n }\r\n return super.sensorLimits;\r\n }\r\n\r\n}\r\n\r\nexport const robotRecorderClient = new RobotClient();","import { getHeaders } from \"./fetch_services\";\r\nimport Geocode from \"react-geocode\";\r\nimport { API_URL, GOOGLE_API_KEY } from \"./server_config_service\";\r\nimport { configService } from \"../../services/config_service\";\r\nimport { similarity } from \"./strings\";\r\nimport { getSelectedLanguage } from \"../../services/translation_service\";\r\nimport { toRadian } from './cal'\r\n\r\nlet geoCodeInitDone = false;\r\n\r\n\r\n\r\nasync function initGeoCode() {\r\n if (!geoCodeInitDone) {\r\n geoCodeInitDone = true;\r\n Geocode.setApiKey(GOOGLE_API_KEY);\r\n Geocode.setLocationType(\"ROOFTOP\");\r\n let region = configService.get(\"geo.region\");\r\n if (!region) {\r\n const geoInfo = await getCurrentGeoLocation(false);\r\n if (geoInfo && geoInfo.countryCode) {\r\n region = geoInfo.countryCode;\r\n configService.set(\"geo.region\", region);\r\n }\r\n }\r\n if (region) {\r\n Geocode.setRegion(region);\r\n }\r\n Geocode.setLanguage(getSelectedLanguage()); // needed to make certain that we collect the data in the right language. This language will ge stored in the statiscs as well, so the other side can query in the same language\r\n }\r\n}\r\n\r\nexport async function getCurrentLocation() {\r\n return new Promise((resolve, reject) => {\r\n\r\n async function getFromIp(orError) {\r\n const result = await fetch('http://ip-api.com/json', { method: 'GET', mode: 'cors', headers: getHeaders(false) })\r\n if (result.status === 200) {\r\n const res = await result.json();\r\n resolve(res);\r\n }\r\n else {\r\n reject(orError ?? \"failed to get location\");\r\n }\r\n }\r\n\r\n if (navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition((pos) => {\r\n resolve(pos.coords);\r\n }, (err) => {\r\n getFromIp(err);\r\n });\r\n }\r\n else {\r\n getFromIp(null);\r\n }\r\n });\r\n}\r\n\r\n\r\n/**\r\n * translates frome one language to another\r\n * @param {object} location a previous geo query result\r\n */\r\nexport async function geoTranslate(location, language) {\r\n await initGeoCode();\r\n Geocode.setLanguage(language);\r\n let search = [];\r\n if (location.route) {\r\n search = [location.route];\r\n }\r\n if (location.city) {\r\n search.push(location.city);\r\n }\r\n if (location.state) {\r\n search.push(location.state);\r\n }\r\n if (location.country) {\r\n search.push(location.country);\r\n }\r\n if (search.length === 0 && location.generic) {\r\n search.push(location.generic);\r\n }\r\n let result = await Geocode.fromAddress(search.join(', '));\r\n Geocode.setLanguage(getSelectedLanguage());\r\n if (result && result.results.length === 1) {\r\n result = extractDataFromGoogleGeoLocation(result.results[0]); // stil ned to convert back to a usable object\r\n }\r\n else {\r\n result = null;\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * \r\n * @param {bool} doInit when true, init code is done. This allows us to call the function from init itself, when needed.\r\n * @returns \r\n */\r\nexport async function getCurrentGeoLocation(doInit = true) {\r\n if (doInit) {\r\n await initGeoCode();\r\n }\r\n let location = await getCurrentLocation();\r\n let lat, lon, useStreet;\r\n if (location.latitude && location.longitude) { // we got an (reasnably) acurate value from system or google\r\n lat = location.latitude;\r\n lon = location.longitude;\r\n useStreet = true;\r\n }\r\n else { // got non accurate from ip\r\n lat = location.lat;\r\n lon = location.lon;\r\n useStreet = false;\r\n }\r\n const response = await Geocode.fromLatLng(lat, lon);\r\n return extractDataFromGoogleGeoLocation(response.results[0], null, useStreet);\r\n}\r\n\r\n/**\r\n * translates a set of coordinates into an address.\r\n * @param {number} lat latitude\r\n * @param {number} lon longitude\r\n */\r\nexport async function CoordinatesToAddress(lat, lon) {\r\n await initGeoCode();\r\n const response = await Geocode.fromLatLng(lat, lon);\r\n return extractDataFromGoogleGeoLocation(response.results[0]);\r\n}\r\n\r\n\r\nexport function extractDataFromGoogleGeoLocation(response, requestedCity = null, useStreet = true) {\r\n let city, state, country, countryCode, province, route, postCode, generic, number;\r\n if (response.address_components) {\r\n for (let i = 0; i < response.address_components.length; i++) {\r\n for (let j = 0; j < response.address_components[i].types.length; j++) {\r\n switch (response.address_components[i].types[j]) {\r\n case \"locality\":\r\n city = response.address_components[i].long_name;\r\n break;\r\n case \"administrative_area_level_1\":\r\n state = response.address_components[i].long_name;\r\n break;\r\n case \"administrative_area_level_2\":\r\n province = response.address_components[i].long_name;\r\n break;\r\n case \"postal_code\":\r\n postCode = response.address_components[i].long_name;;\r\n break;\r\n case \"country\":\r\n country = response.address_components[i].long_name;\r\n countryCode = response.address_components[i].short_name;\r\n break;\r\n case \"route\":\r\n if (useStreet) {\r\n route = response.address_components[i].long_name;\r\n }\r\n break;\r\n case \"street_number\":\r\n if (useStreet) {\r\n number = response.address_components[i].long_name;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n else if (response.name) {\r\n generic = response.name;\r\n }\r\n if (route && !city && requestedCity) { // occationally, google gives a result but skips the city, doesn't put it in the list, even though it gives ok on the website, so fix this.\r\n city = requestedCity;\r\n }\r\n const address = (useStreet) ? response.formatted_address : city; // when useStreet is false, it means we need to force the address to only a city. this is for when we get the current position from a very coarse source.\r\n const coordinates = response.geometry?.location;\r\n return { address, city, state, country, countryCode, province, route, number, postCode, coordinates, isPartial: response.partial_match, generic };\r\n}\r\n\r\nfunction buildRegions(rec) {\r\n let result = [];\r\n if (rec.city) {\r\n result.push(rec.city);\r\n }\r\n if (rec.province) {\r\n result.push(rec.province);\r\n }\r\n if (rec.state) {\r\n result.push(rec.state);\r\n }\r\n if (rec.country) {\r\n result.push(rec.country);\r\n }\r\n return result;\r\n}\r\n\r\nasync function resolveCity(city) {\r\n let res = await Geocode.fromAddress(city);\r\n if (res.length === 1) {\r\n res = extractDataFromGoogleGeoLocation(res.raw.results[0], city);\r\n if (similarity(res.city, city) > 0.8) {\r\n return res;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/**checks if the locations in \r\n * main.location and strengs.location are valid\r\n * replaces any strings as needed.\r\n * When a city or street can't be resolved (multiple results), the user is \r\n * asked to resolve.\r\n */\r\nexport async function resolveGeoLocations(prj) {\r\n if (!prj.statistics) {\r\n return new Error(\"statistics not calculated\");\r\n }\r\n await initGeoCode();\r\n let streetsToReplace = {};\r\n let regions = [];\r\n let coordinates = {}; // dict of coordinates for all the streets, will be resolved later to a list\r\n for (let i = 0; i < prj.statistics.locations.length; i++) {\r\n let allowRegions = true;\r\n const route = prj.statistics.locations[i];\r\n let address;\r\n if (prj.main.location !== route) {\r\n address = `${prj.main.location}, ${route}`;\r\n }\r\n else if (prj.main.location) {\r\n address = `${prj.main.location}`;\r\n }\r\n let res;\r\n try {\r\n res = await Geocode.fromAddress(address);\r\n }\r\n catch(error) {\r\n console.log('skipping adres, geocode returned error: ', error);\r\n continue;\r\n }\r\n res = res.status === 'OK' ? res.results : res;\r\n if (!res || res.length !== 1) {\r\n let good = [];\r\n let cityOk = []; // if we cant find one for 'good', try to find one where the city is ok\r\n if (res.length > 1) {\r\n for (let resIdx = 0; resIdx < res.length; resIdx++) {\r\n let resItem = extractDataFromGoogleGeoLocation(res[resIdx], prj.main.location);\r\n if (resItem.route && resItem.city && similarity(resItem.route, route, resItem.number) >= 0.8 && similarity(resItem.city, prj.main.location) >= 0.8) {\r\n good.push(resItem);\r\n }\r\n if (resItem.city && similarity(resItem.city, prj.main.location) >= 0.8) {\r\n cityOk.push(resItem);\r\n }\r\n }\r\n }\r\n if (good.length !== 1) {\r\n if (cityOk.length === 0) {\r\n console.log(\"problem: \", prj.id, ', ', res);\r\n continue;\r\n }\r\n else {\r\n good = cityOk; // use the city, this is close enough for region resolving\r\n }\r\n }\r\n res = good[0];\r\n }\r\n else {\r\n res = extractDataFromGoogleGeoLocation(res[0], prj.main.location);\r\n }\r\n if (res.isPartial && (!res.route || !res.city || similarity(res.route, route, res.number) < 0.8 || similarity(res.city, prj.main.location) < 0.8)) { // couldn't find it poperly, don't know what to do with it.\r\n console.log('found only partial result for: ', address, ', ', res);\r\n continue;\r\n }\r\n if (res.route && res.route !== route) { // google corrected the value, store fixes\r\n if (similarity(res.route, route, res.number) >= 0.8) { // the strings need to be closely related, otherwise we treat it as an issue\r\n if (res.number) {\r\n streetsToReplace[route] = `${res.route} ${res.number}`;\r\n }\r\n else {\r\n streetsToReplace[route] = res.route;\r\n }\r\n await logGeoChange(prj, null, prj.statistics.locations[i], res.route, 'statistics.locations');\r\n prj.statistics.locations[i] = res.route;\r\n console.log(\"streetname replace found: \", prj.id, \", from: \", route, \" to: \", res.route);\r\n }\r\n else if (similarity(res.city, prj.main.location) > 0.8) {\r\n console.log(\"street \", route, \" treated as new street in \", res.city);\r\n res.route = route;\r\n }\r\n else {\r\n allowRegions = false;\r\n }\r\n }\r\n if (res.city && res.city !== prj.main.location) {\r\n if (res.city === route && !res.route) { // the city was resolved ok, but it wasn't specified in main.location, but in streng.location. This can happen for small places (gehuchten), ex: Sint-Truiden, Engelmanshoven\r\n console.log(\"city found (and accepted) in streng.location: \", prj.id, ', ', prj.main.location, \", in streng: \", route);\r\n }\r\n else if (similarity(res.city, prj.main.location) >= 0.8) { // the strings need to be closely related, otherwise we treat it as an issue\r\n console.log(\"city replace found: \", prj.id, ', ', prj.main.location, \" to: \", res.city);\r\n await logGeoChange(prj, null, prj.main.location, res.city, 'main.location');\r\n prj.main.location = res.city;\r\n }\r\n else {\r\n allowRegions = false;\r\n }\r\n }\r\n if (!prj.statistics.regions && regions.length === 0) {\r\n if (!allowRegions) {\r\n let cityRes;\r\n if (address !== prj.main.location) { // when we searched for city and street, found something bogus. Still can try to resolve the city for the region.\r\n cityRes = await resolveCity(prj.main.location); // try to resolve again, only for the city\r\n }\r\n if (cityRes) {\r\n res = cityRes;\r\n allowRegions = true;\r\n console.log(\"street \", route, \" treated as new street in \", res.city);\r\n }\r\n }\r\n if (allowRegions) {\r\n regions = buildRegions(res);\r\n prj.statistics.regions = regions;\r\n }\r\n else {\r\n console.log(\"problem addres differ too much: \", prj.id, ', ', address, \" vs \", res.city, ', ', res.route, \", \", JSON.stringify(res));\r\n res.route = null;\r\n }\r\n }\r\n coordinates[res.route ?? route] = res.coordinates;\r\n }\r\n if (Object.keys(streetsToReplace).length > 0) {\r\n for (const streng of prj.strengs) {\r\n if (streng.location in streetsToReplace) {\r\n await logGeoChange(prj, streng.id, streng.location, streetsToReplace[streng.location], 'streng.city');\r\n streng.location = streetsToReplace[streng.location];\r\n }\r\n }\r\n prj.statistics.locations = [... new Set(prj.statistics.locations)]; // make certain that streets are unique, can happen if we corrected typos\r\n }\r\n const newCoord = [];\r\n for (const loc of prj.statistics.locations) {\r\n newCoord.push(coordinates[loc]);\r\n }\r\n prj.statistics.coordinates = newCoord;\r\n prj.statistics.language = getSelectedLanguage(); // we need this so that the other side can query in the same language.\r\n}\r\n\r\n\r\n/*\r\n * \r\n * @param {object} prj ref to the project (required)\r\n * @param {string} streng id of streng , otional\r\n * @param {string} or original text\r\n * @param {string} replacement new text\r\n * @param {strign} desc description for change\r\n * @returns \r\n */\r\nexport async function logGeoChange(prj, streng, or, replacement, desc) {\r\n const str = streng?.toString() ?? null;\r\n const log = {\r\n prj: prj.id,\r\n streng: str,\r\n original: or,\r\n replacement: replacement,\r\n date: new Date(Date.now()).toLocaleDateString(),\r\n desc: desc\r\n }\r\n const result = await fetch(`${API_URL}/log/geochange`, { method: 'POST', mode: 'cors', body: JSON.stringify(log), headers: getHeaders() })\r\n if (result.status === 200) {\r\n return await result.json();\r\n }\r\n else {\r\n const error = await result.json();\r\n throw new Error(JSON.stringify(error));\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * calcualte distance between 2 points \r\n * @param {number} lat1 latitude 1\r\n * @param {number} lon1 longitued 1\r\n * @param {number} lat2 latitude 2\r\n * @param {number} lon2 longitude 2\r\n * @returns distance between 2 points\r\n */\r\nexport function calcCrow(lat1, lon1, lat2, lon2) {\r\n var R = 6371; // km\r\n var dLat = toRadian(lat2 - lat1);\r\n var dLon = toRadian(lon2 - lon1);\r\n lat1 = toRadian(lat1);\r\n lat2 = toRadian(lat2);\r\n\r\n var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);\r\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n var d = R * c;\r\n return d;\r\n}","export const configDefaults = {\r\n general: {\r\n language: null, // by default, no language is set, so use the system default\r\n foldersToMonitor: [], // list of folders that should be monitored by the cloud-recorder, for projects that might need uploading\r\n lastInspector: \"\", // last used insector code, so a default value can be given for new projects\r\n lastEquipmentSerialNr: \"\", // laset used value, so a default value can be provided for new projects\r\n lastInspectionPurpose: \"A\", // last selected value for inspection purpose: inspectors usually do the same thing\r\n homeTab: null, // the last tab used on the home page\r\n activeDashboard: null, // the last active view on the dashboard\r\n showInventory: false, // when true, streng summary will show the inventory instead of the errors\r\n showAR: false, // when true, the system will show an augmented reality view of the selected streng instead of going to the streng details\r\n },\r\n layout: { // layout config settings\r\n document: { // document layouts\r\n presets: [], // list of stored layouts\r\n layoutMode: 'default', // supported values: default, tablet\r\n showVideoSection: true, // to hide/show the video on hte main form\r\n robotSection: { // stuff related to the robot section\r\n HorSplit1: null, // init split values, init to null so that calculation is done to get half\r\n HorSplit2: null,\r\n VerSplit1: null,\r\n displayMode: 'single', // determins which mode is shown: single, duoVer, duoHor, tripleHor, combo\r\n parts: { // config for each part on the robot section. How many parts are visible depends on te displaymode\r\n 1: {\r\n source: 'inclination', // which type of data is being displayed in this part. possible values: sonar, lidar, inclination\r\n inclination: {\r\n adjustHeightDif: false,\r\n showPuddles: false, // in track view: show puddle data or not\r\n seriesStyle: 'error+ideal', // allowed values: error+ideal, error, ideal\r\n sampleDistance: 0.10, // distnace in meters that gets combined to 1 point on the track \r\n showGrid: false, // shows horizontal and vertical markers + horizontal grid lines\r\n showStartEndLabels: false, // show actual values for start & end points\r\n },\r\n sonar: {\r\n zoom: 50, // zoom value for the sonar/lidar view\r\n },\r\n lidar: {\r\n zoom: 50, // zoom value for the sonar/lidar view\r\n },\r\n lidarRoll: {\r\n zoom: 100, // zoom value (%)\r\n colorStops: [0, 0.25, 0.5, 0.75, 1], // stop points for rendering the color range mapped to the values\r\n colors: [ // all the initial colors used\r\n \"#B71C1C\",\r\n \"#FBC02D\",\r\n \"#4CAF50\",\r\n \"#1976D2\",\r\n \"#1A237E\"\r\n ],\r\n filterRange: [0, 255],\r\n grayMode: false\r\n }\r\n },\r\n 2: {\r\n source: \"lidar\"\r\n },\r\n 3: {\r\n source: \"sonar\"\r\n }\r\n }\r\n },\r\n dashboardOpen: true, // store state that user selected for showing/hiding the tractor dashboard\r\n },\r\n screens: { // dictionary of all possible screens and their last known state\r\n \"1\": {fullscreen: true, channelIdx: 0}\r\n },\r\n openScreens: [] // list of dict-keys that determine which screens were last open, so that we can restore them\r\n },\r\n vitec: {\r\n firstRun: true // used by the vite card, so it can see if it needs to run a script or not.\r\n },\r\n recorder: {\r\n verticalSplitWidth: 600,\r\n horizontalSplitWidth: 500,\r\n forceLiveFeed: false, // when true video & tractor input alwasy comes from live data. when false, it only comes from live data if there is no recording yet for the active streng.\r\n },\r\n robot: {\r\n InclinationAsPercentage: true,\r\n showTractorDataOverVideo: true,\r\n remote: {\r\n stopOnSecondBtn: true, // when true, the remote-control unit will send a stop message when the same direction button is pressed 2 times, otherwise it will simply resend the same message\r\n },\r\n },\r\n sonar: { // settings for the sonar. depend on the type of sonar, so no default values here, but in the sonar def itself\r\n highCutoff: 255,\r\n lowCutoff: 0,\r\n grayMode: false\r\n },\r\n lidar: {\r\n verifyDimensionsBeforeRecord: true, // when true, lidar data will be used to verify the dimensions of a streng before recording starts\r\n },\r\n observations: {\r\n errorOnNonFullObservation: true,\r\n onlyNewObservationDuringRec: true,\r\n onlyAllowObsOnFulStreng: true,\r\n fullscreenOnMeasureValue: false,\r\n distanceTimeEditLinked: true, // the distance - time editor field of the observation has a 'link' button, who's value is persisted with this.\r\n showObsDetails: false, // hide/show the code-labels as a list for all observations\r\n },\r\n strengs: {\r\n onNewStrengCopyPrevData: true,\r\n onNewStrengShowGeneral: false,\r\n onlyAllowStrengsOnFullMain: true\r\n },\r\n reports: {\r\n landscapeWritingMode: \"lr\",\r\n },\r\n video:{\r\n title: \"Your company name\",\r\n selectedBurnDataMethod: \"burn\", // stores the last selected value for the report builder dialog on how to add data to video\r\n },\r\n engine: {\r\n activeConfig: \"custom 2\", // the currently selected configuration\r\n },\r\n gps: {\r\n port: '', // empty port -> no gps\r\n baudRate: 19200,\r\n dataBits: 8,\r\n stopBits: 1,\r\n parity: 'none',\r\n active: false\r\n },\r\n shortcuts: {\r\n active: false,\r\n },\r\n geo: {\r\n region: null\r\n },\r\n api: {\r\n key: \"\",\r\n url: \"https://api-dot-camera-inspector.appspot.com\",\r\n google: \"AIzaSyDhVr0PFQ5yBzV6yb_GxYZae95aBO55R88\"\r\n },\r\n at: \"nova\", // demo timestamp, last run timestamp. \r\n};","import i18n from \"i18next\";\r\n\r\n//provides access to the documents api\r\nclass DialogService {\r\n\r\n\r\n constructor() {\r\n this.messages = [];\r\n this.onMessagesChanged = null; // callback for popup messages\r\n this.onAskQuestion = null; // callback for blocking question\r\n }\r\n\r\n error(title, message) {\r\n console.log(message);\r\n const value = {severity: 'error', title, message};\r\n this.messages.push(value);\r\n if (this.onMessagesChanged) {this.onMessagesChanged()}\r\n }\r\n\r\n info(title, message) {\r\n console.log(message);\r\n const value = {severity: 'info', title, message};\r\n this.messages.push(value);\r\n if (this.onMessagesChanged) {this.onMessagesChanged()}\r\n }\r\n\r\n removeMessage(item) {\r\n const idx = this.messages.indexOf(item);\r\n this.messages.splice(idx, 1);\r\n if (this.onMessagesChanged) {this.onMessagesChanged()}\r\n }\r\n \r\n /**\r\n * \r\n * @param {string} title the title\r\n * @param {string} message message text\r\n * @param {string} details more details\r\n * @param {function} callback (response) => {} \r\n */\r\n askYesNo(title, message, details, callback) {\r\n if (this.onAskQuestion) {\r\n const options = {\r\n ok: i18n.t('Ja'),\r\n cancel: i18n.t('Nee'),\r\n action: callback,\r\n title: title,\r\n message: message,\r\n detail: details,\r\n };\r\n this.onAskQuestion(options);\r\n }\r\n }\r\n\r\n /**\r\n * \r\n * @param {string} title the title\r\n * @param {string} message message text\r\n * @param {string} details more details\r\n * @return promise(response: int)\r\n */\r\n ask(title, message, details, responses, callback) {\r\n throw new Error(\"not supported\");\r\n }\r\n\r\n \r\n}\r\n\r\nexport const dialogService = new DialogService();","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport { robotPlayer } from '../../components/document/robot/robot_player_service';\r\nimport { cameraService } from '../../components/document/video/camera_service';\r\nimport { activeProjectService } from '../../services/active_project_service';\r\nimport { projectService } from '../services/project_service';\r\nimport i18n from \"i18next\";\r\nimport { errExtractor } from '../../shared_components/services/error_extractor';\r\nimport { dialogService } from '../../services/dialog_service';\r\nimport { robotRecorderClient } from './instrumentation/robot/robot_client_service';\r\nimport { engineService } from '../../components/video_engine/engine_service';\r\nimport { configService } from '../../services/config_service';\r\nimport { gpsService } from '../../services/gps/gps_service';\r\nimport { timeService } from '../services/time_service';\r\nimport { strandPropsService } from '../services/strand_props_service';\r\nimport { distanceService } from '../services/distance_service';\r\nconst events = require('events');\r\n\r\n\r\n/**\r\n * ties up all the different data gathering services (other than text)\r\n * and controls where the data is going to and coming from (from file or device)\r\n */\r\nclass DocumentControlService {\r\n constructor() {\r\n this.canEdit = false; // when true, the document is in edit mode and stuff can be recorded, otherwise stuff can only be played.\r\n this.liveTractor = false; // when true, will force tractor as recorder (for reverse tractor record)\r\n this.controlState = 'stopped'; // stores the current state of the machine (record, play,...)\r\n this.events = new events.EventEmitter(); // callback for visualizing robot data and video time. also used by dashboard, when visible\r\n this.onControlStateChanged = null; // callback for when the controlstate has changed from here. used by the document component to update the ui when needed\r\n this.onVerifyDimensions = null; // called when the lidar indicated that the dimensions of the strand might be wrong. is called async so that the user can provide new values before recording starts.\r\n this.robotDs = null; // the datasource for the robot\r\n this.currentTime = null; // stores the current time stamp, so we can get to this value from editor and observations\r\n this.documentPos = null; // when there is an object, document components should store their state in this object when unmounting. When creating and there is an object, they should use the info to restore their state, like selected streng,... This is used for switching between fullscrreen\r\n this.mounted = false; // true when fully mounted. other parts of the system can use this to determine if they want to access video or tractor (when mount failed, error is shown, no need to show again.)\r\n strandPropsService.events.addListener('sizeEdited', this.handleStrandSizeChanged); // when the size of the strand has changed and we have lidar data, we need to reload the data cause it changes the centralization.\r\n }\r\n\r\n /**\r\n * \r\n * @param {bool} canEdit when true, video & tractor recorders will be loaded, otherwise players.\r\n * @param {bool} liveTractor when true, will force tractor as recorder\r\n */\r\n async mount(canEdit, liveTractor=false) {\r\n cameraService.onRecordingDone = this.internalHandleRecordStopped; // setup handler for when recordings are done, do here, instead of constructor, maybe cameraEngine not yet running in constructor\r\n try {\r\n this.canEdit = canEdit;\r\n this.liveTractor = liveTractor;\r\n distanceService.current = 0;\r\n\r\n if (!configService.isViewer) { // need to start gps here, originally done in engineService, but that is too late, need to have gps available when project opens with last streng already recorded, and it will open in read-mode\r\n gpsService.start();\r\n }\r\n if (this.canEdit || liveTractor) { \r\n this.robotDs = robotRecorderClient;\r\n this.startTractor(); // important: start robot before engine cause engine will update robot\r\n if (!engineService.isRunning) { // dont restart if already running\r\n await engineService.startInputs();\r\n }\r\n else {\r\n engineService.reInit(); // mostly for the tractors\r\n }\r\n }\r\n else {\r\n this.robotDs = robotPlayer;\r\n this.startTractor();\r\n }\r\n this.mounted = true;\r\n }\r\n catch (error) {\r\n dialogService.error(i18n.t(\"Camera\"), i18n.t(\"problem_loading_camera\", {error: errExtractor.get(error)}));\r\n }\r\n }\r\n\r\n /**\r\n * \r\n * @param {boolean} leaveCamera when true, the camera service will not be stopped. This can speed up switching between strengs\r\n */\r\n async unMount(leaveCamera = false) {\r\n this.mounted = false;\r\n this.stopTractor(); // stops the frontend of the robot which always needs to be replaced with an unmount, backend can remain (is in engineservice)\r\n distanceService.current = 0;\r\n if (engineService.isRunning && leaveCamera === false) {\r\n await engineService.stopInputs();\r\n }\r\n if (!configService.isViewer) { // no gps service in viewer\r\n await gpsService.stop();\r\n }\r\n }\r\n\r\n startTractor() {\r\n if (this.robotDs) { // this should normally not happen, but is technically possible (browser requesting a robot recorder)\r\n this.robotDs.onData = this.handleRoboData; // important: set before calling start, otherwise we might mis the first call.\r\n let needCallLoaded = false;\r\n if (this.robotDs.onDataLoaded !== undefined) { // is undefined if doesn't exist (recorder), if exists, it is at least null\r\n this.robotDs.onDataLoaded = this.handleRobotDataLoaded;\r\n this.robotDs.onDataLoading = this.handleRoboDataLoading;\r\n }\r\n else {\r\n needCallLoaded = true;\r\n this.handleRoboDataLoading(); // for recorder, need this to load lidar data properly when switching tabs from existing to new strand\r\n }\r\n this.robotDs.start();\r\n if (needCallLoaded) {\r\n this.handleRobotDataLoaded();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * stops the robot client (which receives from the engine process)\r\n */\r\n stopTractor() {\r\n if (this.robotDs) {\r\n this.robotDs.stop();\r\n this.robotDs.onData = null;\r\n if (this.robotDs.onDataLoaded) {\r\n this.robotDs.onDataLoaded = null;\r\n this.robotDs.onDataLoading = null;\r\n }\r\n this.robotDs = null;\r\n }\r\n }\r\n\r\n /**\r\n * used to switch between live camera\r\n * @param {bool} live when true, data comes from tractor directly, otherwise from file\r\n */\r\n setTractorSource(live) {\r\n let changed = false;\r\n if (this.robotDs === robotRecorderClient && live === false) { // switch to player\r\n this.stopTractor();\r\n this.robotDs = robotPlayer;\r\n this.robotDs.onDataLoaded = this.handleRobotDataLoaded;\r\n this.robotDs.onDataLoading = this.handleRoboDataLoading;\r\n changed = true;\r\n }\r\n else if (this.robotDs === robotPlayer && live === true) { // switch to live.\r\n this.stopTractor();\r\n this.robotDs = robotRecorderClient;\r\n changed = true;\r\n }\r\n if (changed) {\r\n this.robotDs.onData = this.handleRoboData; // important: set before calling start, otherwise we might mis the first call.\r\n this.robotDs.start(); // this will load the data or start reading from serial\r\n }\r\n }\r\n\r\n /**\r\n * called by the document to switch between video and live feed.\r\n * When going to live feed, makes certain that engine is running.\r\n * @param {bool} live when true, data comes from tractor and video directly, otherwise from file\r\n */\r\n async setLiveInputSource(live) {\r\n if (live && engineService.isRunning === false) {\r\n await engineService.startInputs();\r\n }\r\n this.setTractorSource(live);\r\n }\r\n\r\n /**\r\n * checks if the new controlstate is allowed. \r\n * Will ask the user for feedback if necessary. \r\n * returns true if allowed, otherwise false.\r\n * @param {string} value new control state\r\n */\r\n async checkControlStateChangeAllowed(value) {\r\n if (value === \"record\") {\r\n const streng = activeProjectService.activeStreng;\r\n if (streng) {\r\n if (this.canEdit === false) {\r\n return new Promise((resolve, reject) => {\r\n const message = i18n.t('Er bestaat reeds een video opname voor deze streng/put');\r\n const detail = i18n.t(\"De opname overschrijven? Selecteer 'ja' om een nieuwe opname te maken, 'nee' om de bestaande te behouden.\");\r\n dialogService.askYesNo(i18n.t('Record'), message, detail, (response) => {\r\n resolve(response.response === 0);\r\n });\r\n });\r\n }\r\n return Promise.resolve(true); // there is a streng and no video yet, so record is allowed\r\n }\r\n return Promise.resolve(false); // there is no streng so can't record\r\n }\r\n else if (value === \"reverseTractor\" && activeProjectService.activeStrengHasReverseRobotData()) {\r\n return new Promise((resolve, reject) => {\r\n const message = i18n.t('Er bestaat reeds een opname van de tractor die in omgekeerde richting reed.');\r\n const detail = i18n.t(\"De opname overschrijven? Selecteer 'ja' om een nieuwe opname te maken, 'nee' om de bestaande te behouden.\");\r\n dialogService.askYesNo(i18n.t('Record'), message, detail, (response) => {\r\n resolve(response.response === 0);\r\n });\r\n });\r\n }\r\n return Promise.resolve(true);\r\n }\r\n\r\n /**\r\n * returns true if the operatoin was succesfull\r\n * @param {string} value new control state\r\n */\r\n async setControlState(value) {\r\n try {\r\n if (value !== this.controlState) {\r\n \r\n if (value === 'record') {\r\n await this.startRecord(); \r\n }\r\n else if (value === 'reverseTractor') {\r\n this.startReverseRecord();\r\n }\r\n else if (value === 'stop') {\r\n value = this.stop(value);\r\n }\r\n this.controlState = value;\r\n this.events.emit(\"controlState\", value); // -> not yet used\r\n }\r\n return true;\r\n }\r\n catch (error) {\r\n dialogService.error(i18n.t(\"Control\"), `${error}`);\r\n return false;\r\n }\r\n }\r\n\r\n async startRecord() {\r\n if (this.canEdit === false) throw new Error(\"can't record in view mode\"); // these are mostly internal errors, only possible when something has been programmed wrong, so can remain in enlgish\r\n if (!engineService.isRunning) throw new Error(\"can't record, no camera available\");\r\n if (activeProjectService.activeStrengIdx === -1) throw new Error(\"can't record, no streng selected\");\r\n \r\n const curStreng = activeProjectService.activeStreng;\r\n if (!curStreng) throw new Error(\"can't record, no streng selected\");\r\n\r\n await this.verifyRobotState();\r\n curStreng.actualInspectionLength = 0; // when recording new data, always make certain that this is reset. If there is no robot but prebiously there was, data needs to be reset.\r\n curStreng.recStartTime = Date.now();\r\n const camDetails = cameraService.getCameraDetails(); // when recording starts, also store the size of the video. Previously, this was only done when first played, but with new live/video modus toggle, some videos never get loaded 1 time. also stores calibration in project for later use\r\n curStreng.cams = camDetails; // important: must be done before camera recording starts, cause this contains info used by the camera\r\n curStreng.tractor = engineService.getTractorDetails();\r\n projectService.updateStartObservation(curStreng);\r\n activeProjectService.markDirty();\r\n\r\n await engineService.startRecord(); // need to start camera service before tractor recording, otherwise time will not yet be at 0\r\n }\r\n\r\n /**\r\n * called before recording, to make certain that the document is in a correct state\r\n * as specified by the robot: \r\n * - are the dimensions of the strand correct, if not ask to correct\r\n */\r\n async verifyRobotState() {\r\n const doCheck = configService.get('lidar.verifyDimensionsBeforeRecord');\r\n if (doCheck && engineService.tractor && engineService.tractor.lidarProvider) {\r\n const streng = activeProjectService.activeStreng;\r\n let result = await engineService.tractor.lidarProvider.verifyDimensions(streng.Width, streng.height);\r\n if (result && result.result) {\r\n const adjusted = await this.onVerifyDimensions(+streng.Width, +streng.height, result.width, result.height); // we get the corrected results back from the user\r\n if (adjusted) {\r\n streng.Width = adjusted.width;\r\n streng.height = adjusted.height;\r\n strandPropsService.init(streng); // dimensions have been updated, so also update the strandprops service so that the rest of the system nows this, not done automatically cause not through one of the normal channels (ui)\r\n activeProjectService.markDirty(); // need to make certain that the changes are also saved.\r\n }\r\n }\r\n }\r\n }\r\n\r\n startReverseRecord() {\r\n if (this.canEdit === false && this.liveTractor === false) throw new Error(\"can't record in view mode\"); // these are mostly internal errors, only possible when something has been programmed wrong, so can remain in enlgish\r\n if (activeProjectService.activeStrengIdx === -1) throw new Error(\"can't record, no streng selected\");\r\n const streng = activeProjectService.activeStreng;\r\n streng.reverseTractorOffset = 0;\r\n activeProjectService.markDirty();\r\n this.robotDs.startReverseRecord();\r\n }\r\n\r\n stop(value) {\r\n if (engineService.isRecording) { // stopping recording is an async matter, after video has truly stopped, the state is set to 'stopped'\r\n if (engineService.tractor && this.controlState === \"record\") { // only do when recording stopped, not when reverse track recording stopped\r\n const streng = activeProjectService.activeStreng;\r\n streng.actualInspectionLength = distanceService.current; // when recording new data, always make certain that this is reset. If there is no robot but prebiously there was, data needs to be reset.\r\n activeProjectService.markDirty();\r\n }\r\n engineService.stopRecord();\r\n }\r\n else if (this.controlState === \"reverseTractor\") { // only go to stopped when async message arrives from engine\r\n this.robotDs.stopReverseRecord(this.internalHandleRevRecordStopped);\r\n }\r\n else {\r\n this.gotoStopped(); // stop state needs to be switched to stopped manually (if we don't, the video controller component will remain blocked cause it will thing that the stop has not yet fully been processed)\r\n value = \"stopped\"; // gotoStopped also changes controlState, we want to keep this new state. if we don't do this, stopping video play back will not work properly\r\n }\r\n this.setTractorSource(this.liveTractor); // need to do this, cause otherwise the tractor will not switch to player after record and 'forceLive' is not activated.\r\n return value;\r\n }\r\n\r\n\r\n handleRoboData = (value) => {\r\n if (value) {\r\n distanceService.current = value.distance; // so other parts of the system can get to this value \r\n this.events.emit(\"onRobotData\", value);\r\n }\r\n }\r\n\r\n handleRobotDataLoaded = () => {\r\n this.events.emit(\"onRobotDataLoaded\"); // translate to an event so multiple consumers can monitor this event without knowing the actual source\r\n }\r\n\r\n handleRoboDataLoading = () => {\r\n this.events.emit(\"onRobotDataLoading\"); // translate to an event so multiple consumers can monitor this event without knowing the actual source\r\n }\r\n\r\n /**\r\n * when the size of the strand has changed, we need to reload\r\n * lidar data cause it is dependent on these values.\r\n * We do this from here and not in the lidarPlayer & lidarRecorder\r\n * so that we can do this from 1 central place + if done in lidarPlayer,\r\n * we get a memory leak (lidarPlayer is dynamically created & destroyed, so any event-handlers to global objects would remain)\r\n * we can also trigger the correct events from here so that the UI components get reloaded correctly.\r\n */\r\n handleStrandSizeChanged = async () => {\r\n try {\r\n if (this.robotDs === robotPlayer) {\r\n if (robotPlayer.lidarPlayer) {\r\n this.handleRoboDataLoading(); // give the user some visual feedback that the data is reloading\r\n try {\r\n await robotPlayer.lidarPlayer.load();\r\n } \r\n finally {\r\n this.handleRobotDataLoaded();\r\n }\r\n }\r\n }\r\n else if (this.robotDs === robotRecorderClient) {\r\n // not yet supported\r\n //if (engineService.tractor && engineService.tractor.lidarProvider) {\r\n // engineService.tractor.lidarProvider.\r\n // }\r\n }\r\n }\r\n catch(error) {\r\n dialogService.error(\"Robot\", errExtractor.get(error));\r\n }\r\n }\r\n\r\n gotoStopped() {\r\n if (this.onControlStateChanged) {\r\n this.onControlStateChanged('stopped');\r\n }\r\n //cameraService.stopRecord(); // when stopped, make certain recording is also labeled as stopped. This is important cause stopRecord calls this to go to the stopped state\r\n if (this.robotDs) {\r\n this.robotDs._isRecording = false;\r\n }\r\n this.controlState = 'stopped';\r\n }\r\n\r\n /**\r\n * called when camera engine manager reports that all recordings are done and files should be processed\r\n * @param {lsit} files list of raw video files\r\n */\r\n internalHandleRecordStopped = async (files) => {\r\n try {\r\n if (this.onControlStateChanged) {\r\n this.onControlStateChanged('processing');\r\n }\r\n this.controlState = 'processing';\r\n for (const file of files) {\r\n if (typeof file === 'string') { // vitec card sends object to indicate it is vitec. These files need to be processed differently\r\n await cameraService.processFile(file);\r\n }\r\n else {\r\n await cameraService.processFile(file.file, true);\r\n }\r\n }\r\n }\r\n finally {\r\n this.gotoStopped();\r\n }\r\n }\r\n\r\n internalHandleRevRecordStopped = (result) => {\r\n if (result) {\r\n const streng = activeProjectService.activeStreng;\r\n streng.reverseTractorOffset = +result; // we need the total length, so if the reverse tractor didn't stop at 0, we need to substract that \r\n activeProjectService.markDirty();\r\n }\r\n this.gotoStopped();\r\n }\r\n\r\n /**\r\n * looks up the closest distance that is equal or smaller to the specified distance\r\n * and returns the timestamp.\r\n * This is used when editing the the distance\r\n * @param {number} distance the distance to search for\r\n */\r\n distanceToTime(distance) {\r\n const data = this.robotDs ? this.robotDs.data : null; // both recorder and player have a data field\r\n\r\n if (data && data.length > 0) {\r\n let rec = data.find((value) => value.distance >= distance)\r\n if (rec === undefined) {\r\n return data[data.length-1].timestamp; // got to the end of the list, so return that timstamp\r\n }\r\n else {\r\n return rec.timestamp;\r\n }\r\n }\r\n else {\r\n return 0; // no data to look through, can't set time\r\n }\r\n }\r\n\r\n /**\r\n * looks up the closest video time and returns the related distance.\r\n * @param {number} time the video time in seconds\r\n */\r\n timeToDistance(time) {\r\n const data = this.robotDs ? this.robotDs.data : null; // both recorder and player have a data field\r\n \r\n if (data && data.length > 0) {\r\n let rec = data.find((value) => value.timestamp >= time)\r\n if (rec === undefined) {\r\n return data[data.length-1].distance; // got to the end of the list, so return that timstamp\r\n }\r\n else {\r\n return rec.distance;\r\n }\r\n }\r\n else {\r\n return 0; // no data to look through, can't set time\r\n }\r\n }\r\n\r\n setCurrentTimestamp(value) {\r\n this.currentTime = value;\r\n timeService.current = value;\r\n\r\n // important: do first so that when any sensor-data views render again, they get the correct settings\r\n if (this.controlState !== \"record\") { // when playing or when in pause and user jumps, need to update the strand properties according to the current active (and passed) observations\r\n strandPropsService.updateFromObsList(activeProjectService.activeStreng, value);\r\n } \r\n if (this.robotDs) { // can be 0 when unloading, need to update the players so that they go to the correct pos and update the ui's\r\n this.robotDs.setCurrentTimestamp(value);\r\n }\r\n this.events.emit(\"onCurrentTime\", value);\r\n }\r\n\r\n /**\r\n * emits the event onLengthChanged. Used by the controller to display the duration of a newly imported video.\r\n */\r\n emitLengthChanged() {\r\n this.events.emit(\"onLengthChanged\");\r\n }\r\n\r\n}\r\n\r\nexport const documentControlService = new DocumentControlService();","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2021] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport { SonarPlayerBaseService } from '../../../../shared_components/document/instrumentation/sonarLidar/sonar_player_base_service';\r\n\r\n/**\r\n * UI-process version of the TrackService. It is able to load data from file and receive\r\n * live recorded data from the TrackServerService (responsible for recording, runs in\r\n * engine process).\r\n */\r\nexport class SonarPlayerService extends SonarPlayerBaseService {\r\n\r\n\r\n}\r\n","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport { activeProjectService } from '../../../../services/active_project_service';\r\nimport i18n from \"i18next\";\r\nimport { errExtractor } from '../../../services/error_extractor';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\nimport { storageService } from \"../../../../services/storage_service\";\r\nimport { RobotBase } from './robot_base_service';\r\nimport { lidarService } from '../sonarLidar/lidar_service';\r\nimport { sonarService } from '../sonarLidar/sonar_service';\r\nimport { SonarPlayerService } from '../../../../components/document/robot/sonarLidar/sonar_player_service';\r\nimport { LidarPlayerService } from '../../../../components/document/robot/sonarLidar/lidar_player_service';\r\nconst csv = require( \"csvtojson\" );\r\n\r\n\r\n/**\r\n * platform generic base class for the robot player.\r\n */\r\nexport class RobotPlayerBase extends RobotBase {\r\n constructor() {\r\n super();\r\n this.currentIdx = -1;\r\n this.currentTimeStamp = 0; // provided by external video time\r\n this.onDataLoaded = null; // callback for robotSection (view) so that it knows when the data has been fully loaded (and can do a refresh of the layout, depending on the available data of the robot)\r\n this.onDataLoading = null; // callback for lidarRoll (and optionally others), so the system knows when a load starts and can show a loading icon\r\n this.sonarPlayer = null; // when set, there is sonar. this object manages the data \r\n this.lidarPlayer = null; // when set, there is sonar. this object manages the data \r\n this.headers = []; // to easily find what data is available\r\n this._hasSonar = false; // store this so we can get to the value before the entire data set is loaded. previously we checked if the sonar service already existed, which gavae a problem while switching tabs because ui was faster than loading of data\r\n this._hasLidar = false; // see _hasSonar\r\n this.isLoading = false; // so others know that we are in the process of loading (in case they got created afer the event was triggered, before data is loaded)\r\n }\r\n\r\n /**\r\n * when this service starts, load the data and start monitoring switches in selected streng.\r\n * when selection changes, need to reload data. Only start monitoring when a document is loaded\r\n * that will play the robot data.\r\n */\r\n start() {\r\n const hasSonar = activeProjectService.activeStrengHasSonarData();\r\n this._hasSonar = hasSonar;\r\n const hasLidar = activeProjectService.activeStrengHasLidarData();\r\n this._hasLidar = hasLidar;\r\n this.isLoading = true;\r\n if (this.onDataLoading) this.onDataLoading();\r\n this.loadData().then(() =>{\r\n if (hasSonar) {\r\n this.sonarPlayer = new SonarPlayerService();\r\n return this.sonarPlayer.load();\r\n }\r\n }).then(() => {\r\n if (hasLidar) {\r\n this.lidarPlayer = new LidarPlayerService();\r\n return this.lidarPlayer.load();\r\n }\r\n }).then(() => {\r\n if (hasSonar) { // we can only int the services when the data has been loaded, otherwise some data might still be missing.\r\n sonarService.init(this.sonarPlayer);\r\n }\r\n if (hasLidar) {\r\n if (this.lidarPlayer.version === 1) { // check if there needs to be a conversion on the data and do so if needed\r\n this.lidarPlayer.convertData(this.data);\r\n }\r\n lidarService.init(this.lidarPlayer);\r\n }\r\n this.isLoading = false;\r\n if (this.onDataLoaded) this.onDataLoaded();\r\n }).catch(() => {\r\n this.isLoading = false;\r\n if (this.onData) this.onData(null); // make certain that no previous data gets stuck, but the error is hwn that there is no data for this streng.\r\n }); \r\n }\r\n \r\n stop() {\r\n this.currentIdx = -1;\r\n this.currentTimeStamp = 0;\r\n super.stop();\r\n if (this.lidarPlayer) {\r\n this.lidarPlayer.reset();\r\n this.lidarPlayer = null;\r\n }\r\n if (this.sonarPlayer) {\r\n this.sonarPlayer.reset();\r\n this.sonarPlayer = null;\r\n }\r\n }\r\n\r\n internalLoadData(streng, reverse, folder) {\r\n streng = streng ?? activeProjectService.activeStreng;\r\n const url = reverse ? streng.robotRevDataUrl : streng.robotDataUrl;\r\n return (url) ? storageService.readContent(url.bucket, url.name) : Promise.resolve(\"\");\r\n }\r\n\r\n /**\r\n * loads tractor data and returns the value. \r\n * @param {object/null} streng the streng to load data for. When null, activeStreng is used\r\n * @param {bool} autoplay when true, first event is sent through event engine after loading, so ui can show new value\r\n * @param {bool} reverse when true, reverse tractor data is recorded\r\n * @param {string/null} folder root folder to the project. When null, the active project is used\r\n */\r\n async loadData(streng=null, autoplay=true, reverse=false, folder=null) {\r\n return new Promise( (resolve, reject) => {\r\n try {\r\n this.internalLoadData(streng, reverse, folder).then((content) => {\r\n if (content) {\r\n const config = this.buildCsvConfig(content);\r\n csv(config).fromString(content).then((data) => {\r\n this.data = data;\r\n if (autoplay && data && this.data.length > 0) {\r\n this.currentIdx = 0;\r\n this.playCurrent(true); // force playing, cause it's initial state\r\n }\r\n else {\r\n this.currentIdx = -1;\r\n }\r\n resolve(data);\r\n }).catch((error) => {\r\n dialogService.error(i18n.t(\"Laden\"), i18n.t(\"doc_load_error\", {error: errExtractor.get(error)}));\r\n reject();\r\n });\r\n }\r\n else {\r\n resolve([]);\r\n }\r\n }).catch((error) => {\r\n dialogService.error(i18n.t(\"Laden\"), i18n.t(\"doc_load_error\", {error: errExtractor.get(error)}));\r\n reject();\r\n });\r\n }\r\n catch(error) {\r\n dialogService.error(i18n.t(\"Laden\"), i18n.t(\"doc_load_error\", {error: errExtractor.get(error)}));\r\n reject();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * checks the version of the file by reading the first line and checking the nr of columns\r\n * @param {string} content the csv data\r\n */\r\n buildCsvConfig(content) {\r\n const idx = content.indexOf('\\n');\r\n let nrOfColumns = 6; // default value = use original format\r\n let hasHeader = false;\r\n let itemsOnFirstLine;\r\n if (idx > 0) { // if file is empty, use default, it doesn't matter\r\n const firstLine = content.slice(0, idx);\r\n itemsOnFirstLine = firstLine.split('|'); \r\n nrOfColumns = itemsOnFirstLine.length;\r\n hasHeader = firstLine.startsWith('timestamp'); // if the first line starts with text, we have a header. Oldest formats didn't have one\r\n \r\n }\r\n\r\n if (hasHeader) {\r\n this.headers = itemsOnFirstLine;\r\n return ({\r\n delimiter: \"|\", \r\n eol: '\\n',\r\n colParser:{\r\n \"timestamp\":\"number\",\r\n \"pitch\":\"number\",\r\n \"roll\":\"number\",\r\n \"distance\":\"number\",\r\n \"tilt\":\"number\",\r\n \"pan\":\"number\",\r\n \"yaw\": \"number\",\r\n \"aX\": \"number\",\r\n \"aY\": \"number\",\r\n \"aZ\": \"number\",\r\n \"liftPos\": \"number\",\r\n \"lensPressure\": \"number\",\r\n \"pressure\": \"number\",\r\n \"battery\": \"number\",\r\n \"laserRange\": \"number\",\r\n }\r\n });\r\n }\r\n else if (nrOfColumns === 6) {\r\n this.headers = ['timestamp','pitch', 'roll', 'distance', 'tilt', 'pan'];\r\n return (\r\n {headers: this.headers, \r\n delimiter: \"|\", \r\n noheader: true, \r\n eol: '\\n',\r\n colParser:{\r\n \"timestamp\":\"number\",\r\n \"pitch\":\"number\",\r\n \"roll\":\"number\",\r\n \"distance\":\"number\",\r\n \"tilt\":\"number\",\r\n \"pan\":\"number\",\r\n }\r\n }\r\n );\r\n } else if (nrOfColumns === 7) {\r\n this.headers = ['timestamp','pitch', 'roll', 'distance', 'tilt', 'pan', 'yaw'];\r\n return (\r\n {headers: this.headers, \r\n delimiter: \"|\", \r\n noheader: true, \r\n eol: '\\n',\r\n colParser:{\r\n \"timestamp\":\"number\",\r\n \"pitch\":\"number\",\r\n \"roll\":\"number\",\r\n \"distance\":\"number\",\r\n \"tilt\":\"number\",\r\n \"pan\":\"number\",\r\n \"yaw\": \"number\",\r\n }\r\n }\r\n );\r\n }\r\n else {\r\n throw new Error(\"internal error: unknown tractor data format\");\r\n }\r\n }\r\n\r\n\r\n /**\r\n * returns the data event that was last played.\r\n * This is used by the ui component to perform a proper init when loaded\r\n * return null if there isn't any\r\n */\r\n getLastEvent() {\r\n if (this.data && this.currentIdx > -1 && this.currentIdx < this.data.length) {\r\n return this.updateRecForPlay(this.data[this.currentIdx]);\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * allows inheriters to add/modify data at runtime.\r\n * this is used to add laser measurements to the robot data.\r\n * @param {object} rec the robot data record to play\r\n * @returns the updated data record\r\n */\r\n updateRecForPlay(rec) {\r\n return rec;\r\n }\r\n\r\n /**\r\n * find position in list for current time stamp and call callback with new data.\r\n * @param {bool} forced when true, the event will always be triggered, when false, only when current pos changed.\r\n */\r\n playCurrent(forced = false) {\r\n try {\r\n if (this.data) {\r\n const prevIdx = this.currentIdx;\r\n while(this.currentIdx < this.data.length - 1) {\r\n let next = this.data[this.currentIdx+1];\r\n if (next.timestamp >= this.currentTimeStamp) break;\r\n this.currentIdx++;\r\n }\r\n if((prevIdx != this.currentIdx || forced) && this.currentIdx < this.data.length) {\r\n const curRec = this.data[this.currentIdx];\r\n if (curRec && this.onData) {\r\n this.onData(this.updateRecForPlay(curRec));\r\n }\r\n }\r\n }\r\n }\r\n catch(error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n setCurrentTimestamp(value) {\r\n let forced = false;\r\n if(value < this.currentTimeStamp) {\r\n this.currentIdx = 0; // going back in the dataset, so start search from beginning (easiest)\r\n if (value == 0) forced = true; // need to force playing the first item, cause there is no change in index nr, so otherwise no data would be played -> when playing ends, no going back to start automatically\r\n }\r\n this.currentTimeStamp = value;\r\n this.playCurrent(forced);\r\n\r\n if (this.lidarPlayer) {\r\n this.lidarPlayer.setCurrentTimestamp(value);\r\n }\r\n if (this.sonarPlayer) {\r\n this.sonarPlayer.setCurrentTimestamp(value);\r\n }\r\n }\r\n\r\n /**\r\n * never recording\r\n */\r\n isRecording() {\r\n return false;\r\n }\r\n\r\n hasLaserMeasure() {\r\n return this.headers.includes('laserRange');\r\n }\r\n\r\n hasPitch() {\r\n return this.headers.includes('pitch');\r\n }\r\n\r\n hasYaw() {\r\n return this.headers.includes('yaw');\r\n }\r\n\r\n hasRoll() {\r\n return this.headers.includes('roll');\r\n }\r\n\r\n hasCameraPan() {\r\n return this.headers.includes('pan');\r\n }\r\n\r\n hasCameraTilt() {\r\n return this.headers.includes('tilt');\r\n }\r\n\r\n hasDistance() {\r\n return this.headers.includes('distance');\r\n }\r\n\r\n hasSonar() {\r\n return this._hasSonar;\r\n }\r\n\r\n hasLidar() {\r\n return this._hasLidar;\r\n }\r\n\r\n hasElevator() {\r\n return this.headers.includes('liftPos');\r\n }\r\n\r\n hasAccelerometer() {\r\n return this.headers.includes('aX');\r\n }\r\n\r\n hasLensPressure() {\r\n return this.headers.includes('lensPressure');\r\n }\r\n\r\n hasTractorPressure() {\r\n return this.headers.includes('pressure');\r\n }\r\n\r\n hasWheelPressure() {\r\n return this.headers.includes('leftDrivePressure');\r\n }\r\n\r\n /**\r\n * the min/max for all supported sensors\r\n */\r\n get sensorLimits() {\r\n const streng = activeProjectService.activeStreng;\r\n if (streng && streng.tractor && streng.tractor.limits) {\r\n return streng.tractor.limits;\r\n }\r\n return {};\r\n }\r\n\r\n}","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport { RobotPlayerBase } from '../../../shared_components/document/instrumentation/robot/robot_player_base_service';\r\nimport { storageService } from '../../../services/storage_service';\r\nimport { activeProjectService } from '../../../services/active_project_service';\r\n\r\n\r\nexport class RobotPlayer extends RobotPlayerBase {\r\n constructor() {\r\n super();\r\n }\r\n\r\n\r\n /**\r\n * this is a re-implementatio of hte default one, cause the base implementation reads\r\n * data from google storage directly. This is not a good idea in web-app, so data is retrieved\r\n * from cloud\r\n * @param {object} streng the streng to get data for. when null, the active streng is used\r\n * @param {bool} reverse when true, the reverse data set is retrieved\r\n */\r\n internalLoadData(streng, reverse) {\r\n streng = streng ?? activeProjectService.activeStreng;\r\n if (reverse) {\r\n return storageService.getCsvData(streng.robotRevDataUrl);\r\n }\r\n else {\r\n return storageService.getCsvData(streng.robotDataUrl);\r\n }\r\n }\r\n}\r\n\r\nexport const robotPlayer = new RobotPlayer();","\r\n\r\n/**\r\n * provides gps functionality\r\n */\r\nclass GpsService {\r\n constructor() {\r\n\r\n }\r\n\r\n /**\r\n * get the current gps position. full state object.\r\n * if not active, doesn't return value (null).\r\n */\r\n get currentPos () {\r\n return null;\r\n }\r\n\r\n /**\r\n * returns true when there is a gps available, otherwise false.\r\n */\r\n get isAvailable() {\r\n return false;\r\n }\r\n\r\n\r\n /**\r\n * start reading data from the gps.\r\n */\r\n start() {\r\n \r\n }\r\n\r\n async stop() {\r\n \r\n }\r\n}\r\n\r\nexport const gpsService = new GpsService();","class ErrorExtractorService {\r\n\r\n get(err) {\r\n if (err === undefined || err === null) { // just to be save, otherwise it causes an error on the in operator\r\n return \"\";\r\n }\r\n else if (typeof err === 'string'){\r\n return err;\r\n }\r\n else if (Array.isArray(err)) {\r\n return err.map((e) => this.get(e)).join(', ');\r\n }\r\n else if ('message' in err) { // must be before error, cause server returns objects with both, but valid is in message\r\n return this.get(err.message);\r\n }\r\n else if ('error' in err) {\r\n return this.get(err.error);\r\n }\r\n else if ('msg' in err) {\r\n return this.get(err.msg);\r\n }\r\n else if ('sqlMessage' in err) {\r\n return this.get(err.sqlMessage);\r\n }\r\n else {\r\n return 'unknown error';\r\n }\r\n\r\n }\r\n}\r\n\r\nexport const errExtractor = new ErrorExtractorService();","import { API_URL } from './server_config_service';\r\nimport { getHeaders } from './fetch_services';\r\nimport i18n from \"i18next\";\r\nimport { userService } from './user_service';\r\n\r\n/**\r\n * base class for platform independent implementation.\r\n * Each platform (web, electron,...) has it's own platform specific version.\r\n * platform independent allows for cloud storage/retrieval of assets.\r\n */\r\nexport class AssetsBaseService {\r\n /**\r\n * loads a json asset from the cloud and returns the data object\r\n * the asset is global for the entire organisation. The organisation can be found in the license\r\n * information of the current user (all users that can access assets have bought a license)\r\n * @param {string} name the name of the asset\r\n */\r\n async loadJSONFromCloud(name) {\r\n return new Promise((resolve, reject) => {\r\n let user = userService.getCurrentUser();\r\n if (!user) { reject(\"no current user\"); }\r\n if (!user.companyId) { reject(\"user does not belong to a company, can't save settings to cloud\"); }\r\n \r\n /* //for debug: remove until fetch\r\n resolve(\r\n {\"id\":\"test\",\"createdBy\":\"1\",\"creationDate\":\"2020-07-15\",\"version\":\"1.0.0\",\"main\":{\"norm\":\"NBN EN 13508-2:2003 + A1:2011\",\"managingInstance\":\"dfa\",\"location\":\"asdf\",\"codeInsp\":\"D002/DEMO\",\"purpose\":\"A\",\"opdrCodeOpdrGever\":\"\",\"opdrCodeBedrijf\":\"asdf\",\"assistant\":\"asdf\",\"equipmentSerialNr\":\"\",\"inspectorName\":\"Demo user 2\"},\"strengs\":[{\"type\":\"dp\",\"id\":1,\"observations\":[{\"values\":[\"B\",\"D\",\"B\"],\"time\":0,\"includePicture\":false,\"joint\":false,\"longitude\":0,\"descriptiveLoc\":null,\"remark\":\"Start\"},{\"values\":[\"B\",\"C\",\"D\",\"A\"],\"time\":0,\"includePicture\":false,\"joint\":false,\"longitude\":0,\"descriptiveLoc\":null,\"waarde1\":\"\",\"waarde2\":\"\"},{\"values\":[\"B\",\"D\",\"B\"],\"time\":4.431355999999999,\"includePicture\":false,\"joint\":false,\"longitude\":0,\"descriptiveLoc\":null,\"remark\":\"Einde\"},{\"values\":[\"B\",\"C\",\"E\",\"A\"],\"time\":4.431355999999999,\"includePicture\":false,\"joint\":false,\"longitude\":0,\"descriptiveLoc\":null,\"waarde1\":\"\",\"waarde2\":\"\"}],\"ref\":\"L-01\",\"startPointRef\":\"\",\"startPointCoord\":\"\",\"pointRef1\":\"\",\"coordPoint1\":\"\",\"pointRef2\":\"\",\"coordPoint2\":\"\",\"pointRef3\":\"\",\"coordPoint3\":\"\",\"distanceStartLateral\":\"0.00\",\"clockPosStartLateral\":\"\",\"startpointLateralInspection\":\"\",\"lateralStrengRef\":\"\",\"location\":\"\",\"inspectionDirection\":\"A\",\"locationType\":\"A\",\"district\":\"\",\"sewerName\":\"\",\"propertyOwnership\":\"A\",\"axialRefPoint\":\"B\",\"inspectionDate\":\"2020-07-15\",\"inspectionTime\":\"19:27:37\",\"recStartTime\":1595076084524,\"storageVideo\":\"F\",\"storageImages\":\"E\",\"positionVideoImages\":\"A\",\"imagePacketRef\":\"\",\"expectedInspectionLength\":\"200.00\",\"actualInspectionLength\":0,\"reverseTractorOffset\":0.49,\"shape\":\"A\",\"height\":\"400\",\"Width\":\"400\",\"material\":\"AE\",\"liningType\":\"\",\"liningMaterial\":\"\",\"lengthOfTubePart\":\"2500\",\"depthStartPointRel\":\"999.00\",\"depthEndPointRel\":\"999.00\",\"sewerType\":\"A\",\"sewerUsage\":\"A\",\"strategic\":\"\",\"cleaning\":\"A\",\"remarks\":\"\",\"yearOfCommisioning\":\"*UNKNOWN*\",\"connectionType\":\"A\",\"precipitation\":\"A\",\"temperature\":\"A\",\"fluidControl\":\"A\",\"coverLevel\":\"0.00\",\"verticalRefPoint\":\"A\",\"CircularRefPoint\":\"A\",\"inspectionStage\":\"B\",\"litShape\":\"B\",\"litMaterial\":\"AG\",\"litHeight\":\"0.00\",\"litWidth\":\"0.00\",\"stepType\":\"C\",\"stepMaterial\":\"A\",\"videoWidth\":1920,\"videoHeight\":1080,\"videoLength\":4.523,\"atmosphere\":\"\",\"videoUrl\":{\"bucket\":\"cami_video\",\"name\":\"test_test11_1.mp4\"},\"robotDataUrl\":{\"bucket\":\"cami_robot_csv\",\"name\":\"test_test11_1_robot.csv\"},\"robotRevDataUrl\":{\"bucket\":\"cami_robot_csv\",\"name\":\"test_test11_1_robot_rev.csv\"},\"trackDataUrl\":{\"bucket\":\"cami_track_csv\",\"name\":\"test_test11_1_track.csv\"},\"trackRevDataUrl\":{\"bucket\":\"cami_track_csv\",\"name\":\"test_test11_1_track_rev.csv\"}}],\"recipients\":[\"aa@b.com\"],\"name\":\"test11\",\"xml\":[{\"bucket\":\"cami_xml_reports\",\"name\":\"test_asdf__D002DEMO_20200715_dp.xml\"}],\"pdfReport\":{\"bucket\":\"cami_pdf_reports\",\"name\":\"undefined_test11.pdf\"},\"images\":[]}\r\n );\r\n return; */\r\n\r\n fetch(`${API_URL}/companySettings/${user.companyId}/${name}`, {method: 'GET', mode: 'cors', headers: getHeaders()})\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data ? data.value : null);\r\n }\r\n else {\r\n //todo: add error message\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error))\r\n ;\r\n });\r\n }\r\n\r\n /**\r\n * stores the json object in the cloud as an asset, which is global to the organisation of the current user.\r\n * @param {sting} name the name of the json resource\r\n * @param {object} data the json data\r\n */\r\n async saveJSONToCloud(name,data) {\r\n return new Promise((resolve, reject) => {\r\n\r\n let user = userService.getCurrentUser();\r\n if (!user) { reject(\"no current user\"); }\r\n if (!user.companyId) { reject(\"user does not belong to a company, can't save settings to cloud\"); }\r\n\r\n const options = {method: 'PUT', mode: 'cors', body: JSON.stringify(data), headers: getHeaders()};\r\n fetch(`${API_URL}/companySettings/${user.companyId}/${name}`, options)\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n }\r\n}","import { AssetsBaseService } from \"../shared_components/services/assets_base_service\";\r\nimport { dialogService } from \"./dialog_service\";\r\n\r\n/**\r\n * platform specific version of assets service.\r\n */\r\nclass AssetsService extends AssetsBaseService {\r\n\r\n /**\r\n * loads a json data structure. In this case, always only from the cloud.\r\n * @param {string} name of the asset\r\n */\r\n async loadAsset(name) {\r\n return this.loadJSONFromCloud(name);\r\n }\r\n\r\n /**\r\n * saves the data to the cloud as a compamy wide global asset.\r\n * @param {string} name of the asset\r\n * @param {object} data to save\r\n */\r\n async saveAsset(name, data) {\r\n this.saveJSONToCloud(name, data).catch((error) => {\r\n dialogService.error(error);\r\n });\r\n }\r\n\r\n}\r\n\r\nexport const assetsService = new AssetsService();","/* \r\n * \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport { activeProjectService } from '../../services/active_project_service';\r\nimport i18n from \"i18next\";\r\nimport { dialogService } from '../../services/dialog_service';\r\n\r\n/**\r\n * provides services for measuring on the screen.\r\n */\r\nclass MeasurementService {\r\n\r\n constructor() {\r\n this.measureData = null; // field idx and validation data\r\n this.obs = null; // observation currently measuring for.\r\n }\r\n\r\n\r\n /**\r\n * converts (for precision) and stores the value in the obs\r\n * @param {number} value the raw value\r\n */\r\n measurementDone(value) {\r\n if (value != null) { // null indicates canceled operation\r\n const precision = (this.measureData.validifierData.precision !== undefined) ? this.measureData.validifierData.precision : 2;\r\n value =value.toFixed(precision); // we store a string, better control over number precision. Other parts of the system expect strings, so convert\r\n if (this.measureData.measuring === 1) {\r\n this.obs.waarde1 = value;\r\n activeProjectService.markDirty();\r\n }\r\n else if (this.measureData.measuring === 2) {\r\n this.obs.waarde2 = value;\r\n activeProjectService.markDirty();\r\n }\r\n else {\r\n dialogService.error(i18n.t(\"Waarneming\"), i18n.t(\"Er was een probleem tijdens het meten: ongeldige waarde.\\nDe operatie is stop gezet.\"));\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n\r\nexport const measurementService = new MeasurementService();","import { assetsService } from \"../../services/assets_service\";\r\nimport { dialogService } from \"../../services/dialog_service\";\r\n\r\n/**\r\n * sync-version of loadActiveEngienConfig, for when it doesn't ahve to be loaded, but simply return what is already known\r\n */\r\nexport function getActiveEngineConfig() {\r\n return null;\r\n}\r\n\r\nexport async function loadActiveEngineConfig() {\r\n}\r\n\r\nexport function getAllVideoChannelCamTypes(configs) {\r\n return null;\r\n}\r\n\r\nexport function getPrimaryChannel(configs) {\r\n return null;\r\n}\r\n\r\nexport function getActiveRobotCalibration() {\r\n return null;\r\n}\r\n\r\nexport function setActiveRobotCalibration() {\r\n return null;\r\n}\r\n\r\nexport function saveActiveProfile() {\r\n /*\r\n not yet supported in the cloud to save\r\n try {\r\n assetsService.saveAsset('engine.json', JSON.stringify(engineConfigData));\r\n }\r\n catch (error) {\r\n dialogService.error(i18n.t(\"Hardware\"), errExtractor.get(error));\r\n }\r\n */\r\n}\r\n\r\nclass EngineService {\r\n\r\n constructor() {\r\n }\r\n\r\n /**\r\n * builds an object that can be used to pass to the engine process and which describes\r\n * the current project and streng. This can be used by the engine process to build file names and such\r\n * @returns {object} that describes the current project & streng and which can savely be passed to another process\r\n */\r\n buildProjectDef() {\r\n }\r\n\r\n /**\r\n * sends an async message to the main process with the instruction to\r\n * start the engines as described in the definition that gets loaded in this call.\r\n * @param {object} deviceConfig the engine configuration to start. When null, the active config will be loaded.\r\n */\r\n async startInputs(deviceConfig = null) { \r\n }\r\n\r\n /**\r\n * create a new browser window to show video on a different window (so it can be put on a different monitor)\r\n */\r\n openVideoScreen() {\r\n }\r\n\r\n async stopInputs() {\r\n }\r\n\r\n\r\n loadDefinitions(deviceConfig, resolve, reject) {\r\n \r\n }\r\n\r\n async setPosition(pos) {\r\n }\r\n\r\n /**\r\n * sends instruction to start recording\r\n * @param {object} definition contains project & streng info\r\n */\r\n async startRecord() {\r\n }\r\n\r\n stopRecord() {\r\n } \r\n}\r\n\r\nexport const engineService = new EngineService();","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nfunction pad(num) {\r\n return (\"0\"+num).slice(-2);\r\n}\r\n\r\nfunction pads(num) {\r\n if (num >= 10) {\r\n return `${num}`.slice(0, 2);\r\n }\r\n return (\"0\"+num).slice(0, 2);\r\n}\r\n\r\nexport function hhmmss(secs) {\r\n var minutes = Math.floor(secs / 60);\r\n secs = secs%60;\r\n var hours = Math.floor(minutes/60)\r\n minutes = minutes%60;\r\n return `${pad(hours)}:${pad(minutes)}:${pads(secs)}`;\r\n // return pad(hours)+\":\"+pad(minutes)+\":\"+pad(secs); for old browsers\r\n}\r\n\r\nexport function hhmmssToSec(value) {\r\n let parts = value.split(\":\");\r\n if (parts.length === 3) {\r\n return (+parts[0] * 60 * 60) + (+parts[1] * 60) + +parts[2];\r\n }\r\n else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function isValidDate(d) {\r\n return d instanceof Date && !isNaN(d);\r\n }","\r\n/**\r\n * used to keep track of the current play/recording time pos.\r\n */\r\nclass TimeService {\r\n constructor() {\r\n this.current = 0;\r\n }\r\n}\r\n\r\nexport const timeService = new TimeService();","/**\r\n * base class for platform independent implementation.\r\n * Each platform (web, electron,...) has it's own base class that implements platform specific functions.\r\n * the inheriter, projectService, is in the shared lib.\r\n */\r\nexport class ProjectBaseService {\r\n /**\r\n * create a new empty project data structure\r\n * is called by generic inheriter so, always must be here.\r\n * should eventually add the userId of current user (who\r\n * ceated the new project) \r\n */\r\n createNew() {\r\n return ({});\r\n }\r\n}","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport momentUtils from \"@date-io/moment\";\r\nimport { codeSelectorService } from './code_selector_service';\r\nimport i18n from \"i18next\";\r\nimport { ProjectBaseService } from '../../services/project_base_service';\r\nimport { configService } from \"../../services/config_service\";\r\n\r\nconst moment = new momentUtils();\r\n\r\nexport function isEmpty(val) {\r\n return ( val === null || val === \"\" || val === undefined );\r\n}\r\n\r\n\r\nexport function isEmptyOr0(val) {\r\n return ( val === 0 || val === null || val === \"\" || val === undefined );\r\n}\r\n\r\nexport const PROJECT_VERSION = \"1.2.2\";\r\nexport const ERROR_KEYS = [\"A-A\",\"A-B\", \"A-C\",\"A-D\",\"A-E\",\"A-F\",\"A-G\",\"A-H\",\"A-I\",\"A-J\",\"A-K\",\"A-L\",\"A-M\",\"A-N\",\"A-O\",\"A-P\",\"B-A\",\"B-B\",\"B-C\",\"B-D\",\"B-E\",\"B-F\",\"B-G\",\"B-H\",\"D-D\"]\r\nexport const TERMINATE_KEY = 'B-D-C'; // for pipe inspections\r\nexport const TERMINATE_KEY2 = 'D-D-C'; // for manhole inspections\r\nexport const CHANGE_SHAPE_KEY = 'A-E-C';\r\nexport const PIPE_INSPECTIONS = ['dp', 's']; // are similar in many ways \r\n\r\nclass ProjectService extends ProjectBaseService {\r\n\r\n // constructor() {\r\n // super();\r\n // }\r\n\r\n /**\r\n * create a new empty project data structure\r\n */\r\n createNew() {\r\n const mtime = moment.date(new Date());\r\n const codeInsp = configService.get(\"general.lastInspector\") ?? \"\";\r\n //const equipment = configService.get(\"general.lastEquipmentSerialNr\") ?? \"\";\r\n const purpose = configService.get(\"general.lastInspectionPurpose\") ?? \"A\";\r\n let result = super.createNew();\r\n Object.assign(result, {\r\n creationDate: mtime.format(\"YYYY-MM-DD\"), // primarily for internal use, so we know when the file was created. Also used to generate the name of the video file\r\n version: PROJECT_VERSION,\r\n main: {\r\n norm: \"NBN EN 13508-2:2003 + A1:2011\",\r\n managingInstance: \"\",\r\n location: \"\",\r\n codeInsp: codeInsp,\r\n purpose: purpose,\r\n opdrCodeOpdrGever: \"\",\r\n opdrCodeBedrijf: \"\",\r\n assistant: \"\",\r\n //equipmentSerialNr: equipment\r\n },\r\n strengs: [\r\n this.createNewStreng(1)\r\n ]\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * creates a new streng\r\n * @param {string/nr} label to id the streng visually\r\n * @param {streng object} template optional data object that will first be copied into the new streng. this can be used to supply other default values. The observations list is always new.\r\n */\r\n createNewStreng(id, template=null) {\r\n const startObs = this.createNewObservation(0,0, [\"B\", 'D', 'B']); // common for both cases, but could be not used (for template type m)\r\n const equipment = configService.get(\"general.lastEquipmentSerialNr\") ?? \"\";\r\n startObs.remark = \"Start\";\r\n const mtime = moment.date(new Date());\r\n if (template) {\r\n let result = Object.assign({}, template);\r\n if (template.type === \"dp\") {\r\n result.observations = [\r\n startObs,\r\n this.createNewObservation(0,0, ['B', 'C', 'D', 'A'])\r\n ];\r\n }\r\n else {\r\n result.observations = [];\r\n }\r\n result.id = id;\r\n result.ref = id > 9 ? `L-${id}` : `L-0${id}`;\r\n result.inspectionDate = mtime.format(\"YYYY-MM-DD\");\r\n result.inspectionTime = mtime.format(\"HH:mm:ss\");\r\n result.depthStartPointRel = \"999.00\"; // request by customer, should be reset\r\n result.depthEndPointRel = \"999.00\"; // request by customer, should be reset\r\n result.actualInspectionLength = 0;\r\n result.reverseTractorOffset = 0;\r\n result.videoLength = 0;\r\n result.cams = {};\r\n return result;\r\n }\r\n return {\r\n type: 'dp', // supported values 'dp' (streng), 'm'(pit)\r\n id: id,\r\n observations: [\r\n startObs,\r\n this.createNewObservation(0, 0, ['B', 'C', 'D', 'A'])\r\n ],\r\n ref: id > 9 ? `L-${id}` : `L-0${id}`,\r\n startPointRef: '',\r\n startPointCoord: '',\r\n pointRef1: '',\r\n coordPoint1: '',\r\n pointRef2: '',\r\n coordPoint2: '',\r\n pointRef3: '',\r\n coordPoint3: '',\r\n distanceStartLateral: \"0.00\",\r\n clockPosStartLateral: \"\",\r\n startpointLateralInspection: '',\r\n lateralStrengRef: '',\r\n location: '',\r\n inspectionDirection: 'A',\r\n inspMethod: 'B',\r\n locationType: 'A',\r\n district: '', // wijk\r\n sewerName: '',\r\n propertyOwnership: 'A',\r\n axialRefPoint: 'B',\r\n inspectionDate: mtime.format(\"YYYY-MM-DD\"),\r\n inspectionTime: mtime.format(\"HH:mm:ss\"),\r\n recStartTime: 0, // the time at which recording started. We use this to make certain that the time displayed on the video is correct (for rendering videos)\r\n storageVideo: configService.isCloud ? 'Z' : 'F',\r\n storageVideoZ: 'cloud',\r\n storageImages: configService.isCloud ? 'Z' : 'E',\r\n storageImagesZ: 'cloud',\r\n positionVideoImages: 'A',\r\n imagePacketRef: '',\r\n expectedInspectionLength: \"200.00\",\r\n actualInspectionLength: 0,\r\n reverseTractorOffset: 0, // the offset that needs to be substracted from 0 in order to get the real starting point of the reverse tractor record. This is used to put the correct labels (peak in chart corresponds to position in video)\r\n shape: 'A',\r\n height: \"400\",\r\n Width: \"400\",\r\n material: 'AE',\r\n liningType: '',\r\n liningMaterial: '',\r\n lengthOfTubePart: \"2500\",\r\n depthStartPointRel: \"999.00\",\r\n depthEndPointRel: \"999.00\",\r\n sewerType: 'A',\r\n sewerUsage: 'A',\r\n strategic: '',\r\n cleaning: 'A',\r\n remarks: '',\r\n yearOfCommisioning: \"*UNKNOWN*\",\r\n connectionType: 'A',\r\n //wallThickness: 0,\r\n //surfaceHardening: 'Steenslag',\r\n precipitation: 'A',\r\n temperature: 'A',\r\n fluidControl: 'A',\r\n coverLevel: \"0.00\", // for inspection of pits\r\n verticalRefPoint: 'A',\r\n CircularRefPoint: 'A',\r\n inspectionStage: 'B',\r\n litShape: 'B',\r\n litMaterial: 'AG',\r\n litHeight: \"0\",\r\n litWidth: \"0\",\r\n stepType: 'C',\r\n stepMaterial: 'A',\r\n videoLength: 0, // stored when recording. Used for rendering to xml. All video files of a streng are of the same length\r\n atmosphere: '',\r\n cams: {}, // dict of camera def objets. For each camera channel an object under key 'channel' (name of cam). contains, widht, height, tonv,...\r\n tractor: {}, // extra info stored about the tractor like limits. This is set when recording starts\r\n equipmentSerialNr: equipment\r\n /*\r\n old, is now replaced with 'cams', where multiple entries are allowed.\r\n videoWidth: 0, // not part of standard, but used by the system to quickly get these values for rendering stuff. Automatically filled in\r\n videoHeight: 0, // not part of standard, but used by the system to quickly get these values for rendering stuff. Automatically filled in\r\n tOnV: \"\", // default is empty, meaning not set. When video is recorded, specifies if tractor data was burned on the video during recordin or not.\r\n iOnV: \"\", // default is empty, meaning not set. When video is recorded and flag is true, first 10 sec of video contains summary details about inspection\r\n addI: \"\", // when true, report builder will add inspeciton info to start of video. only valid when iOnV=false\r\n addT: \"\", // when true, report builder will add tractor data to video. only valid when iOnV=false\r\n scalingFactor1: 0, // camera calibration data for onscreen measurement, so settings are stored for recording, this way, global settings can change, measurement on video after recording stays accurate.\r\n scalingFactor2: 0, // see scalingFactor1\r\n scalingDistance1: 0, // see scalingFactor1\r\n scalingDistance2: 0, // see scalingFactor1\r\n */\r\n };\r\n }\r\n\r\n /**\r\n * \r\n * @param {number} time the position in the video at which the observation was made\r\n * @param {number} location: the distance traveled by the robot, so it can be rendered in the xml reports\r\n */\r\n createNewObservation(time, location, values=[], descriptiveLoc=null) {\r\n if (descriptiveLoc) {\r\n return {values: values, time: time, includePicture: false, joint: false, longitude: location, descriptiveLoc: descriptiveLoc}; //descriptiveLoc is only for pits\r\n }\r\n else {\r\n return {values: values, time: time, includePicture: false, joint: false, longitude: location}; \r\n }\r\n }\r\n\r\n /**\r\n * checks if all the data is supplied for the observation (all fields are filled in).\r\n * @param {object} obs the observation data object.\r\n * @param {object} def the definition of the observation data.\r\n */\r\n isObservationComplete(obs, def, strengType) {\r\n if (obs && def) {\r\n const valueCount = codeSelectorService.getValueCount(def, strengType);\r\n const directionCount = codeSelectorService.getDirectionCount(def, strengType);\r\n if (def.requireType && def.requireType === \"minOneOf\") {\r\n if (isEmpty(obs.waarde1) && isEmpty(obs.waarde2)) {return false;}\r\n }\r\n else {\r\n if (valueCount > 0 && this.isObsValueRequired(def, 0, strengType) && isEmpty(obs.waarde1)) {return false;}\r\n if (valueCount > 1 && this.isObsValueRequired(def, 1, strengType) && isEmpty(obs.waarde2)) {return false;}\r\n }\r\n if (directionCount > 0 && this.isObsDirectionRequired(def, 0) && isEmpty(obs.direction1)) return false;\r\n if (directionCount > 1 && this.isObsDirectionRequired(def, 1) && isEmpty(obs.direction2)) return false;\r\n if (def.remark && isEmpty(obs.remark)) return false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n isObsValueRequired(obsDef, idx, strengType) {\r\n const valueRequired = codeSelectorService.getValueRequired(obsDef, strengType);\r\n if ((valueRequired && valueRequired.length > idx && valueRequired[idx] === false)\r\n || (obsDef.requireType && obsDef.requireType===\"minOneOf\") ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n isObsDirectionRequired(obsDef, idx) {\r\n if (obsDef.directionRequired && obsDef.directionRequired.length >idx && obsDef.directionRequired[idx] === false ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n\r\n isMainComplete(data) {\r\n if(isEmpty(data.norm)) return false;\r\n if(isEmpty(data.managingInstance)) return false;\r\n if(isEmpty(data.location)) return false;\r\n if(isEmpty(data.codeInsp)) return false;\r\n if(isEmpty(data.opdrCodeBedrijf)) return false;\r\n if(isEmpty(data.purpose)) return false;\r\n if(data.purpose === \"Z\" && isEmpty(data.purposeZ)) return false;\r\n return true;\r\n }\r\n\r\n isStrengComplete(data) {\r\n if(isEmpty(data.ref)) return false;\r\n if (PIPE_INSPECTIONS.includes(data.type)) {\r\n if(isEmpty(data.pointRef1)) return false;\r\n if(isEmpty(data.pointRef2)) return false;\r\n if(isEmpty(data.inspectionDirection)) return false;\r\n if(isEmpty(data.axialRefPoint)) return false;\r\n if (data.axialRefPoint === \"Z\" && isEmpty(data.axialRefPointZ)) return false;\r\n if(isEmpty(data.sewerType)) return false;\r\n }\r\n else {\r\n if(isEmpty(data.litShape)) return false;\r\n if (data.litShape === \"Z\" && isEmpty(data.litShapeZ)) return false;\r\n if(isEmpty(data.litMaterial)) return false;\r\n if (data.litMaterial === \"Z\" && isEmpty(data.litMaterialZ)) return false;\r\n if(isEmpty(data.litWidth)) return false;\r\n\r\n if(isEmpty(data.stepType)) return false;\r\n if (data.stepType === \"Z\" && isEmpty(data.stepTypeZ)) return false;\r\n }\r\n if(isEmpty(data.location)) return false;\r\n if(isEmpty(data.locationType)) return false;\r\n if (data.locationType === \"Z\" && isEmpty(data.locationTypeZ)) return false;\r\n if(isEmpty(data.propertyOwnership)) return false;\r\n if(isEmpty(data.inspectionDate)) return false;\r\n if(isEmpty(data.inspectionTime)) return false;\r\n if(isEmpty(data.inspectionStage)) return false;\r\n if(isEmpty(data.inspMethod)) return false;\r\n if (data.inspectionStage === \"Z\" && isEmpty(data.inspectionStageZ)) return false;\r\n if(isEmpty(data.shape)) return false;\r\n if (data.shape === \"Z\" && isEmpty(data.shapeZ)) return false;\r\n if(isEmpty(data.height)) return false;\r\n if(isEmpty(data.material)) return false;\r\n if (data.material === \"Z\" && isEmpty(data.materialZ)) return false;\r\n if(isEmpty(data.sewerUsage)) return false;\r\n if (data.sewerUsage === \"Z\" && isEmpty(data.sewerUsageZ)) return false;\r\n if(isEmpty(data.cleaning)) return false;\r\n if(isEmpty(data.yearOfCommisioning)) return false;\r\n if (data.yearOfCommisioning === \"year\" && isEmpty(data.yearOfCommisioningY)) return false;\r\n if(isEmpty(data.precipitation)) return false;\r\n if(isEmpty(data.temperature)) return false;\r\n if(isEmpty(data.fluidControl)) return false;\r\n if (data.fluidControl === \"Z\" && isEmpty(data.fluidControlZ)) return false;\r\n return true;\r\n\r\n }\r\n \r\n\r\n checkVersion(result) {\r\n if (result.version === undefined) {\r\n throw new Error (i18n.t(\"not a project file\"));\r\n }\r\n const versions = result.version.split('.');\r\n if (versions.length !== 3) {\r\n throw new Error (i18n.t(\"invalid version format\"));\r\n }\r\n if (+(versions[0]) > 1) {\r\n throw new Error (i18n.t(\"newer project version\"));\r\n }\r\n }\r\n\r\n \r\n /**\r\n * adds observations to a streng that are used to indicate the end of the recording.\r\n * @param {object} streng the streng to add observations to\r\n */\r\n addEndOfRecordingObservations(streng, videoPos, position) {\r\n let firstLetter = PIPE_INSPECTIONS.includes(streng.type) ? \"B\": \"D\"; // when pit, first letter is D, when streng, it's B \r\n const terminatorKey = firstLetter === 'B' ? TERMINATE_KEY : TERMINATE_KEY2; // there is a different terminator for manhole and for pipe inspections\r\n const isTerminated = streng.observations.find(x => x.values.join('-').startsWith(terminatorKey)); // if the inspection was terminated with a B-D-C code, don't add 'end' items\r\n if (!isTerminated) {\r\n if (streng.type === \"dp\") { // 'D' section dont have this code\r\n const descriptiveLoc = (streng.type === \"m\") ? 'A' : null;\r\n const endObs = this.createNewObservation(videoPos,position, [firstLetter, 'D', 'B'], descriptiveLoc); // no start either\r\n endObs.remark = i18n.t(\"End\");\r\n streng.observations.push(endObs);\r\n\r\n const cdObs = this.createNewObservation(videoPos,position, [firstLetter, 'C', 'E', 'A']);\r\n cdObs.waarde1 = streng.pointRef2;\r\n cdObs.waarde2 = streng.coordPoint2;\r\n streng.observations.push(cdObs);\r\n }\r\n }\r\n }\r\n\r\n closeContinuousObservations(streng, videoPos, position) {\r\n const lst = streng.observations.sort((a, b) => a.longitude - b.longitude); // make certain that items are sorted on where they occur\r\n let runningObs = {}; // dict of observations for which we found an end and are expecting a beginning, so we don't add closures for items that are already closed\r\n let changed = [];\r\n for(let i=lst.length-1; i>=0;i--) {\r\n const obs = lst[i];\r\n if (codeSelectorService.isContinuous(obs.values)) {\r\n if (obs.continuousIdx === undefined) { // something strange going on here.\r\n continue;\r\n }\r\n let key = obs.values.join(\"\").substr(0, 3) + obs.continuousIdx.toString(); \r\n if (obs.values.indexOf('1') > -1) { // it's a terminator, set a runningObs\r\n runningObs[key] = true;\r\n }\r\n else if (key in runningObs) { // it's ok.\r\n delete runningObs[key];\r\n }\r\n else { \r\n const newObs = this.createNewObservation(videoPos,position, [key[0], key[1], key[2], '1']);\r\n newObs['continuousIdx'] = obs.continuousIdx;\r\n streng.observations.push(newObs);\r\n changed.push(newObs);\r\n }\r\n }\r\n }\r\n return changed;\r\n }\r\n\r\n /**\r\n * updates the last obs in the list with key BCD (not DCD cause that dont exist)\r\n * @param {object} streng the streng to process\r\n */\r\n updateStartObservation(streng) {\r\n if( streng.type === \"dp\"){\r\n let key = `B-C-D`;\r\n for(let i=streng.observations.length-1; i>=0; i--) {\r\n const obs = streng.observations[i];\r\n if(obs.values.join(\"-\").startsWith(key)) {\r\n let newObs = Object.assign({}, obs); // create a copy of the object, this way, the ui will update\r\n newObs.waarde1 = streng.pointRef1;\r\n newObs.waarde2 = streng.coordPoint1;\r\n streng.observations[i] = newObs;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * get the video channel that has the index value 0 (primary) out of the \r\n * dictionary of cameras.\r\n * @param {object} streng a streng object that contains the field 'cams'\r\n */\r\n getPrimaryChannel(streng) {\r\n let channel = null;\r\n for(channel in streng.cams) { // find the primary channel (object has idx value 0)\r\n if(Object.keys(streng.cams).length === 1 || streng.cams[channel].idx === 0) {\r\n break\r\n };\r\n }\r\n return channel;\r\n }\r\n\r\n /**\r\n * returns a list of all the camera channels and their camera types. Used by video player to show selection box\r\n * @param {object} streng the streng object that contains a cams dict\r\n */\r\n getAllVideoChannelCamTypes(streng) {\r\n let result = [];\r\n for (let channel in streng.cams) {\r\n result.push({channel: channel, cameraType: streng.cams[channel].cameraType});\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * removes any cloud information from the project, like id, pu\r\n * @param {object} project full project data\r\n */\r\n clearCloudFromProject(project) {\r\n delete project.id;\r\n delete project.uploadedAt;\r\n delete project.uploadedBy;\r\n delete project.cloudState;\r\n delete project.files;\r\n for(const streng of project.strengs) {\r\n delete streng.trackDataUrl;\r\n delete streng.trackRevDataUrl;\r\n delete streng.robotDataUrl;\r\n delete streng.robotRevDataUrl;\r\n delete streng.videoUrl;\r\n delete streng.lidarDataUrl;\r\n delete streng.lidarRevDataUrl;\r\n delete streng.sonarDataUrl;\r\n }\r\n }\r\n\r\n /**\r\n * calculates stats about the project and stores them in the project object.\r\n * This is for faster showing to the user. \r\n * calculates: \r\n * - unique street names (multiple strengs can be for the same street)\r\n * - maxErr: max nr of errors found in a streng\r\n * - totalErr: total nr of errors found in all strengs\r\n * - strengCount: nr of strengs\r\n * - strengsWError: nr of strengs with an error\r\n * @param project the project to process\r\n */\r\n calculateStats(project) {\r\n let locations = {}; //dict to quickly find duplicates\r\n let stats = {locations: [], \r\n maxErr: 0,\r\n totalErr: 0,\r\n locationsTotalErr: [], // totalErrors per location, for faster rendering of info\r\n strengCount: 0,\r\n strengsWError: 0,\r\n };\r\n let errorCodeIdx = project.main.purpose == \"A\"? 0: 1; // if new streng, use idx 0, otherwise error idx 1\r\n if (project.strengs) {\r\n stats.strengCount = project.strengs.length;\r\n for (const streng of project.strengs) {\r\n if (streng.location && !(streng.location in locations)) {\r\n locations[streng.location] = 0; // keep a count of the nr of errors per location\r\n stats.locations.push(streng.location);\r\n }\r\n let strCount = 0;\r\n for(const obs of streng.observations) {\r\n if (obs.values[obs.values.length-1] !== \"1\") { // if the last item in the key is 1, it's a terminator for continuous-observations, so skip that\r\n let key = obs.values.join(\"-\");\r\n let found = ERROR_KEYS.find((value) => key.startsWith(value)); // find the first item in the list that's the same as the start of the key\r\n const def = codeSelectorService.getLeaf(obs.values, streng.type);\r\n if (found && def && def.errRating && def.errRating[errorCodeIdx]) { // found a problem observation\r\n strCount++;\r\n stats.totalErr++;\r\n locations[streng.location]++;\r\n }\r\n }\r\n }\r\n if (strCount > 0) {\r\n stats.strengsWError++;\r\n if (strCount > stats.maxErr) {\r\n stats.maxErr = strCount;\r\n }\r\n }\r\n }\r\n for (const loc of stats.locations) { // copy over all the counts for the streets in the correct order\r\n stats.locationsTotalErr.push(locations[loc]);\r\n }\r\n }\r\n return stats;\r\n }\r\n\r\n}\r\n\r\nexport const projectService = new ProjectService();","import { toRadian, toDegrees, distance } from \"./cal\";\r\n\r\nconst CUTOFF_DISTANCE = 0.2; // distance at which a lidar point is considered invalid cause too close to the lidar (blocked by something). important for the dual-lidar, where each has a dead point\r\nconst ALLOWED_SIZE_DIF = 0.11; // % size difference allowed before the adjustment to the expected size on 1 side kicks in\r\n\r\n/**\r\n * unpacks a lidar data line\r\n * @param {list} data bytearray, the input data\r\n * @param {array} values list of numbers, output, the distance measured at each angle\r\n * @param {array} angles list of numbers, the angle that correpsond to each value\r\n */\r\nexport function unpackLidar(data, values, angles) {\r\n \r\n for(let i=0; i < data.length; i+=8) {\r\n let value = data.readFloatLE(i);\r\n angles.push(value);\r\n\r\n value = data.readFloatLE(i+4);\r\n values.push(value/1000); // converts to meters, this is a more practial number to work with since most diameters are between 0.2 and 10 meters, otherwise it would be to big a nubmers for float32\r\n }\r\n}\r\n\r\n/**\r\n * packs the lidar data into a more compact format for storage\r\n * @param {array} values list of numbers, the distance measured at each angle\r\n * @param {array} angles list of numbers, the angle that correpsond to each value\r\n * @returns bytearray (Buffer)\r\n */\r\nexport function packLidar(values, angles) {\r\n let result = Buffer.alloc(values.length * 8); // 4 bytes for value, 4 for angle\r\n for(let i=0; i < values.length; i++) {\r\n result.writeFloatLE(angles[i], i*8);\r\n result.writeFloatLE(values[i] * 1000, (i*8)+4);\r\n }\r\n return result;\r\n}\r\n\r\nexport function getMinMaxFor(values, angles) {\r\n let minX, minY, maxX, maxY;\r\n for(let i = 0; i < values.length; i++) {\r\n let value = values[i];\r\n let corner = angles[i];\r\n const x = Math.cos(toRadian(corner)) * value;\r\n const y = Math.sin(toRadian(corner)) * value;\r\n if (x < minX || minX === undefined) minX = x;\r\n if (y < minY || minY === undefined) minY = y;\r\n if (x > maxX || maxX === undefined) maxX = x;\r\n if (y > maxY || maxY === undefined) maxY = y;\r\n }\r\n return {minX, maxX, minY, maxY};\r\n}\r\n\r\n/**\r\n * modifies the values and angles list so that the data is centered.\r\n * process:\r\n * - calculate x, y for each value/angle\r\n * - get max/min for x & y\r\n * - average of max/min for x & y defines the new center\r\n * - for each value/angle, calculate distance & angle of new center to point:\r\n * - x1 & y1 of value for old center\r\n * - x2 & y2 of new center tov old center (are supplied by the coordinates of the new center\r\n * - do x1 - x2 and y1 - y2 to get x & y of value tov new center - > this transposes the coordinates of the destination point from the old center (coordinate system) to the new center\r\n * - distance formula d = sqrt( (x2-x1)2 + (y2-y1)2 )\r\n * - for the angle, can be calculated from there\r\n * @param {array} values list of numbers, the distance measured at each angle\r\n * @param {array} angles list of numbers, the angle that correpsond to each value\r\n * @param {number} expWidth hte expected width of the strand, used to adjust the center\r\n * @param {number} expHeight hte expected height of the strand\r\n */\r\nexport function centerLidar(values, angles, expWidth, expHeight, isHalf=false) {\r\n let minX, minY, maxX, maxY;\r\n const coordinates = []; // so we only have to calculate cos & sin of value tov old center\r\n for(let i = 0; i < values.length; i++) {\r\n let value = values[i];\r\n let corner = angles[i];\r\n const x = Math.cos(toRadian(corner)) * value;\r\n const y = Math.sin(toRadian(corner)) * value;\r\n coordinates.push({x, y});\r\n if (x < minX || minX === undefined) minX = x;\r\n if (y < minY || minY === undefined) minY = y;\r\n if (x > maxX || maxX === undefined) maxX = x;\r\n if (y > maxY || maxY === undefined) maxY = y;\r\n }\r\n if (isHalf) {\r\n minY = -maxY;\r\n }\r\n const {centerX, centerY} = getCenterFor(minX, maxX, minY, maxY, expWidth, expHeight);\r\n\r\n for(let i = 0; i < coordinates.length; i++) {\r\n if (values[i] <= CUTOFF_DISTANCE) { // if we are at a dead spot, dont calculate, but indicate taht this is a dead spot, so that the values are skipped later on (when merged with list of other lidar)\r\n values[i] = null;\r\n angles[i] = null;\r\n continue;\r\n }\r\n const coord = coordinates[i];\r\n const newX = coord.x - centerX; // translate the old coordinates to the new coordinate system\r\n const newY = coord.y - centerY;\r\n const newValue = Math.sqrt(Math.pow(newX, 2) + Math.pow(newY, 2)); // this is a distance calculation between the new x,y and the new (0,0)\r\n const newAngle = calculateAngle(newX, newY, newValue);\r\n values[i] = newValue;\r\n angles[i] = newAngle;\r\n }\r\n}\r\n\r\nfunction getCenterFor(minX, maxX, minY, maxY, expWidth, expHeight) {\r\n let centerX = (minX + maxX) / 2;\r\n let centerY = (minY + maxY) / 2;\r\n const realWidth = (Math.abs(minX) + Math.abs(maxX));\r\n const realHeight = (Math.abs(minY) + Math.abs(maxY));\r\n const halfExpHeight = expHeight / 2;\r\n const halfExpWidth = expWidth / 2;\r\n\r\n let allowedDif = expWidth * ALLOWED_SIZE_DIF;\r\n if (realWidth < expWidth - allowedDif || realWidth > expWidth + allowedDif) { // width is out of range\r\n const divergenceMinX = Math.round((Math.abs(minX) - halfExpWidth) * 10000); // *x and to int so that we only use x nr of digets\r\n const divergenceMaxX = Math.round((Math.abs(maxX) - halfExpWidth) * 10000);\r\n const divergenceDifX = Math.abs(divergenceMaxX - divergenceMinX);\r\n if (divergenceDifX > divergenceMinX || divergenceDifX > divergenceMaxX) { // there must be a great difference on 1 side, if the distance to the left wall is about the same as the distance to the right wall, dont try to adjust\r\n if (divergenceMinX > divergenceMaxX) {\r\n centerX = maxX - halfExpWidth;\r\n }\r\n else if (divergenceMaxX > divergenceMinX) {\r\n centerX = minX + halfExpWidth;\r\n }\r\n }\r\n // both sides differ about the same size, nothing to be done about it, do regular center\r\n }\r\n\r\n allowedDif = expHeight * ALLOWED_SIZE_DIF;\r\n if (realHeight < expHeight - allowedDif || realHeight > expHeight + allowedDif) { // width is out of range\r\n const divergenceMinY = Math.abs(Math.round((Math.abs(minY) - halfExpHeight) * 10000)); // *x and to int so that we only use x nr of digets\r\n const divergenceMaxY = Math.abs(Math.round((Math.abs(maxY) - halfExpHeight) * 10000));\r\n const divergenceDifY = Math.abs(divergenceMaxY - divergenceMinY);\r\n if (divergenceDifY > divergenceMinY || divergenceDifY > divergenceMaxY) {\r\n if (divergenceMinY > divergenceMaxY) {\r\n centerY = maxY - halfExpHeight;\r\n }\r\n else if (divergenceMaxY > divergenceMinY) {\r\n centerY = minY + halfExpHeight;\r\n }\r\n }\r\n // both sides differ about the same size, nothing to be done about it, do regular center, already set\r\n }\r\n return {centerX, centerY};\r\n}\r\n\r\n/**\r\n * calculate the angle value in the circle\r\n * depends on the quadrant\r\n * @param {number} a x value (cos), distance of side a\r\n * @param {number} b y value, (sin), distance of side b\r\n * @param {number} c new-value (radius) distance of side c\r\n */\r\nfunction calculateAngle(a, b, c) {\r\n const angle = Math.atan2(b,a);\r\n const degrees = toDegrees(angle);\r\n if (degrees < 0) {\r\n return 360 + degrees;\r\n }\r\n else {\r\n return degrees;\r\n }\r\n}\r\n\r\n/**\r\n * re-order both lists so that the angles start at the lowest number and then go up\r\n * @param {list} values list of measurement value\r\n * @param {list} angles list of angles\r\n */\r\nexport function rotateToStart(values, angles) {\r\n const len = angles.length - 1;\r\n if (len > 1) {\r\n while(angles[0] > angles[len]) {\r\n angles.push(angles.shift());\r\n values.push(values.shift());\r\n }\r\n }\r\n}\r\n\r\n\r\n/**\r\n * merges set A and B of lidar data. \r\n * @param {array} valuesA list of values for set A\r\n * @param {arra} anglesA list of angles for set A\r\n * @param {array} valuesB lsit of valeus for set B\r\n * @param {array} anglesB list of angles for set B\r\n * @returns { object} {values, angles}\r\n */\r\nexport function mergeLidarLists(valuesA, anglesA, valuesB, anglesB) {\r\n let posA = 0;\r\n let posB = 0;\r\n \r\n rotateToStart(valuesA, anglesA);\r\n rotateToStart(valuesB, anglesB);\r\n while (posA < valuesA.length && valuesA[posA] == null) posA++;\r\n while (posB < valuesB.length && valuesB[posB] == null) posB++;\r\n const values = [];\r\n const angles = [];\r\n while(posA < valuesA.length && posB < valuesB.length) {\r\n const angleA = anglesA[posA];\r\n const angleB = anglesB[posB];\r\n const valueA = valuesA[posA];\r\n const valueB = valuesB[posB];\r\n if (angleA < angleB) {\r\n values.push(valueA);\r\n angles.push(angleA);\r\n posA++;\r\n }\r\n else if (angleA > angleB) {\r\n values.push(valueB);\r\n angles.push(angleB);\r\n posB++;\r\n }\r\n else { // angles are the same\r\n values.push((valueA + valueB) / 2); // when the angles are the same, we take the average measurement\r\n angles.push(angleA);\r\n posA++;\r\n posB++;\r\n }\r\n while (posA < valuesA.length && valuesA[posA] == null) posA++;\r\n while (posB < valuesB.length && valuesB[posB] == null) posB++;\r\n }\r\n if (posA < valuesA.length) {\r\n values.push(...valuesA.slice(posA));\r\n angles.push(...anglesA.slice(posA));\r\n }\r\n else if (posB < valuesB.length) {\r\n values.push(...valuesB.slice(posB));\r\n angles.push(...anglesB.slice(posB));\r\n }\r\n return {values, angles};\r\n}\r\n","export function readDegree16BE(buf, start) {\r\n //return ((data[start] << 8) | data[start+1]) / 32768 * 180;\r\n return buf.readInt16BE(start) / 32768 * 180;\r\n}\r\n\r\nexport function readDegree16LE(buf, start) {\r\n //return ((data[start] << 8) | data[start+1]) / 32768 * 180;\r\n return buf.readInt16LE(start) / 32768 * 180;\r\n}\r\n\r\nexport function readTemp16LE(buf, start) {\r\n return buf.readInt16LE(start) / 100;\r\n}\r\n\r\nexport function readAcceleration16BE(buf, start) {\r\n //return ((data[start] << 8) | data[start+1]) / 32768 * 16;\r\n return buf.readInt16BE(start) / 32768 * 16;\r\n}","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport { CodesBaseService } from \"../../services/codes_base_service\";\r\n\r\n/** platform independent part. \r\n * CodesBaseService provides a mechanism for loading the data.\r\n */\r\nclass CodeSelectorService extends CodesBaseService{\r\n\r\n constructor() {\r\n super();\r\n this._dict = null;\r\n }\r\n\r\n\r\n /**\r\n * checks if the specifield list of values points to a leaf or not.\r\n * returns null if the path is invalid, true if it is a leaf and otherwise false.\r\n * @param {array} path array of strings.\r\n * @param {string} strengType the type of stren (dp, m, s), so we can follow the filters correctly (dp & s have BCA, leaf in s, not in dp)\r\n */\r\n isLeaf(path, strengType) {\r\n if (path) {\r\n let currentPos = this.getDict();\r\n for(let item of path) {\r\n if (currentPos === null || currentPos === undefined) return null;\r\n if (!this.matchesFilter(currentPos, strengType)) return null; // this node is not allowed for the specified streng type, so stop\r\n currentPos = currentPos[item];\r\n }\r\n // leafs have a property 'label'. Non leafs are pure dictionaries with only single letters as props\r\n // some leafs (BCA) are condionall leafs, depending on the strengtype, so also check for that.\r\n return currentPos != null && currentPos.label !== undefined && (!currentPos.forceLeafFor || currentPos.forceLeafFor.includes(strengType));\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * checks if the specifield list of values points to a leaf or not.\r\n * returns true if it is a leaf and otherwise false.\r\n * Note: this function doesn't take into account the possibility that the\r\n * path might be incorrect for the strengtype that currently contains the obs. Strengtype can determine the path cause of\r\n * the code BCA can be a leaf at 3 and 4 items, depending on if the strengtype is stationary or not.\r\n * @param {array} path array of dictionary items previously built with translatePath.\r\n */\r\n dictPathIsLeaf(path) {\r\n let leaf = this.getLeafFromDictPath(path);\r\n return leaf != null;\r\n }\r\n\r\n /**\r\n * checks if the node at the specified path specifies an observation type that\r\n * is considured continuous (has an element with value '1')\r\n * @param {array} path array of strings\r\n */\r\n isContinuous(path) {\r\n if (path) {\r\n let currentPos = this.getDict();\r\n if (currentPos == null) return false;\r\n for(let item of path) {\r\n currentPos = currentPos[item];\r\n if (currentPos === null || currentPos === undefined) return false;\r\n if ('1' in currentPos) return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * returns the definition at the specified path. If the item is not a leaf,\r\n * return null\r\n * @param {array} path array of strings.\r\n */\r\n getLeaf(path, strengType) {\r\n if (path) {\r\n let currentPos = this.getDict();\r\n if (currentPos === null) return null;\r\n for(let item of path) {\r\n currentPos = currentPos[item];\r\n if (currentPos === null || currentPos === undefined) return null;\r\n if (!this.matchesFilter(currentPos, strengType)) return null; // this node is not allowed for the specified streng type, so stop\r\n }\r\n if (currentPos.label !== undefined) { // it's a leaf\r\n if (currentPos.forceLeafFor && !currentPos.forceLeafFor.includes(strengType)) { // this is a conditional leaf, but for the wrong streng type, so not allowed\r\n return;\r\n }\r\n return currentPos;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * returns the definition at the end of the path.\r\n * @param {array} path list of dict objects that was previously built using translatePath\r\n */\r\n getLeafFromDictPath(path) {\r\n if (path && path.length > 0) {\r\n const res = path[path.length-1];\r\n if (res.label !== undefined) {\r\n return res;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * returns a list of labels. for each item in the path, 1 label\r\n * @param {array} path \r\n */\r\n getLabelsFromDictPath(path) {\r\n let result = [];\r\n for(let item of path) {\r\n if (item.label === undefined) { \r\n if (item._ref !== undefined) {\r\n item = item._ref;\r\n }\r\n }\r\n if (item.label !== undefined) {\r\n result.push(item.label);\r\n }\r\n else {\r\n result.push(\"\"); // found nothing, so add empty string so that we have equal nr items in result list\r\n }\r\n \r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * returns a list of dict objects that represent the path.\r\n * When the last object is a dict item, it's a leaf,\r\n * other objects are key-value pairs, with 1 _ref object that references the dict item.\r\n * Use getLeafFromDictPath and dictPathIsLeaf\r\n * @param {array} path array of strings, keys into the dict.\r\n */\r\n translatePath(path) {\r\n let result = [];\r\n if (path) {\r\n let currentPos = this.getDict();\r\n if (currentPos !== null) {\r\n for(let item of path) {\r\n currentPos = currentPos[item];\r\n if (currentPos === null || currentPos === undefined) {break;}\r\n result.push(currentPos);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * returns the node at the specified path\r\n * @param {array} path array of strings\r\n */\r\n getNode(path) {\r\n if (path) {\r\n let currentPos = this.getDict();\r\n for(let item of path) {\r\n if (currentPos === null) return null;\r\n currentPos = currentPos[item];\r\n }\r\n if (currentPos === undefined) { // can be when last item was not in currentPos or currentPos was already an endnode\r\n return null;\r\n }\r\n if (currentPos.label !== undefined) { // it's a leaf\r\n return currentPos;\r\n }\r\n return currentPos._ref; // ref to the node\r\n }\r\n return null;\r\n }\r\n\r\n\r\n\r\n getDict() {\r\n if (this._dict) {\r\n return this._dict;\r\n }\r\n else {\r\n if (this.data === null) {\r\n throw new Error(\"Codes list not yet loaded\");\r\n }\r\n this._dict = this._getSubDict(this.data.children);\r\n return this._dict;\r\n }\r\n }\r\n\r\n _getSubDict(list) {\r\n let res = {};\r\n for (const item of list) {\r\n if (item.children && item.children.length > 0) {\r\n res[item.value] = this._getSubDict(item.children);\r\n res[item.value][\"_ref\"] = item; // so we still have a reference to the object, but hidden. This allows us to find non-leaf objects quickly\r\n if (item.forceLeafFor) { // BCA is terminator for stationary, not for dp. \r\n res[item.value][\"forceLeafFor\"] = item.forceLeafFor;\r\n res[item.value]['label'] = item.leafLabel ?? item.label;\r\n if (item.directionCount) res[item.value]['directionCount'] = item.directionCount;\r\n if (item.valueCount) res[item.value]['valueCount'] = item.valueCount;\r\n if (item.valueRequired) res[item.value]['valueRequired'] = item.valueRequired;\r\n if (item.valueType) res[item.value]['valueType'] = item.valueType;\r\n if (item.valueLabel) res[item.value]['valueLabel'] = item.valueLabel;\r\n }\r\n }\r\n else {\r\n res[item.value] = item; // store a ref to the item itself, so we can return it\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n getValueCount(node, strengType) {\r\n if (!node) return 0;\r\n if (typeof node.valueCount === 'object' && node.valueCount !== null) {\r\n return node.valueCount[strengType];\r\n }\r\n else {\r\n return node.valueCount ?? 0;\r\n }\r\n }\r\n\r\n getDirectionCount(node, strengType) {\r\n if (!node) return 0;\r\n if (typeof node.directionCount === 'object' && node.directionCount !== null) {\r\n return node.directionCount[strengType];\r\n }\r\n else {\r\n return node.directionCount ?? 0;\r\n }\r\n }\r\n\r\n getValueRequired(node, strengType) {\r\n if (Array.isArray(node.valueRequired)) {\r\n return node.valueRequired;\r\n }\r\n else if (typeof node.valueRequired === 'object' && node.valueRequired !== null) {\r\n return node.valueRequired[strengType];\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * returns true if the node has no filter or if the filter matches the requested value.\r\n * @param {object} node observation definition item\r\n * @param {string} filterValue m, s, dp\r\n */\r\n matchesFilter(node, filterValue) {\r\n return node.filter == undefined || node.filter == filterValue || (Array.isArray(node.filter) && node.filter.includes(filterValue))\r\n }\r\n\r\n /**\r\n * returns true if the node has children within the specified context (BCA is terminator for stationary, not for streng)\r\n * @param {object} child observation definition item\r\n * @param {string} strengType m, s, dp\r\n */\r\n hasChildren(node, strengType) {\r\n return (node.children && node.children.length > 0 && (!node.forceLeafFor || !node.forceLeafFor.includes(strengType)) );\r\n }\r\n\r\n /**\r\n * returns the list of children, if there is any and if it is allowed in the current contxt (stationary has terminator on BCA)\r\n * @param {object} child observation definition item\r\n * @param {string} strengType m, s, dp\r\n */\r\n getChildren(node, strengType) {\r\n if (node.children && node.children.length > 0 && (!node.forceLeafFor || !node.forceLeafFor.includes(strengType)) ){\r\n return (node.children);\r\n }\r\n return null;\r\n }\r\n \r\n}\r\n\r\nexport const codeSelectorService = new CodeSelectorService();","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport codes from '../assets/observations.json';\r\n\r\n\r\n/**platform specific, base class for codeSelector service.\r\n * provides a mechanisme to load the data.\r\n */\r\nexport class CodesBaseService {\r\n\r\n constructor() {\r\n this.data = codes;\r\n }\r\n}","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n\r\n/**\r\n * platform generic base class for robot recorders & players..\r\n */\r\nexport class RobotBase {\r\n constructor() {\r\n\r\n this.data = null;\r\n this.onData = null; //callback\r\n }\r\n\r\n /**\r\n * when this service starts, load the data or make connection to robot.\r\n */\r\n start() {\r\n throw new Error (\"not implemented\");\r\n }\r\n \r\n /**after stopping, makes certain all data is cleaned up. */\r\n stop() {\r\n this.data = null;\r\n }\r\n\r\n \r\n\r\n /**\r\n * returns the data event that was last played.\r\n * This is used by the ui component to perform a proper init when loaded\r\n * return null if there isn't any\r\n */\r\n getLastEvent() {\r\n throw new Error (\"not implemented\");\r\n }\r\n\r\n \r\n\r\n /**\r\n * never recording\r\n */\r\n isRecording() {\r\n throw new Error (\"not implemented\");\r\n }\r\n\r\n /**\r\n * checks if the current tractor is able to perform a laser measurement\r\n * by default not suported\r\n */\r\n hasLaserMeasure() {\r\n return false;\r\n }\r\n\r\n hasPitch() {\r\n return false;\r\n }\r\n\r\n hasYaw() {\r\n return false;\r\n }\r\n\r\n hasRoll() {\r\n return false;\r\n }\r\n\r\n hasCameraPan() {\r\n return false;\r\n }\r\n\r\n hasCameraTilt() {\r\n return false;\r\n }\r\n\r\n /**\r\n * some tractors can send a command to put the camera\r\n * in the center. This can be used to automatically calibrate the center of a camera\r\n */\r\n hasCameraGotoCenter() {\r\n return false;\r\n }\r\n\r\n hasDistance() {\r\n return false;\r\n }\r\n\r\n hasSonar() {\r\n return false;\r\n }\r\n\r\n hasLidar() {\r\n return false;\r\n }\r\n\r\n hasElevator() {\r\n return false;\r\n }\r\n\r\n hasAccelerometer() {\r\n return false;\r\n }\r\n\r\n hasLensPressure() {\r\n return false;\r\n }\r\n\r\n hasTractorPressure() {\r\n return false;\r\n }\r\n\r\n hasWheelPressure() {\r\n return false;\r\n }\r\n\r\n hasBattery() {\r\n return false;\r\n }\r\n\r\n hasLifeLeft() {\r\n return false;\r\n }\r\n\r\n hasClutch() {\r\n return false;\r\n }\r\n\r\n needsClutch() {\r\n return false;\r\n }\r\n\r\n /**\r\n * for the button on the controller dashboard\r\n */\r\n canToggleLightDirection() {\r\n return false;\r\n }\r\n\r\n /**\r\n * for the button on the controller dashboard\r\n */\r\n canToggleScanDirection() {\r\n return false;\r\n }\r\n\r\n\r\n /**\r\n * gets the mode by which speed should be applied to the device.\r\n * possible values:\r\n * - single: only 1 speed control available\r\n * - dual: speed control available for tractor and wheel. can be controlled individually (and thus also combined)\r\n * - clutchToggled: speed control available for tractor and wheel but value of clutch determins which one is currently possible (clutch in-> tractor, clutch out-> wheel)\r\n * - none: no speed control allowed\r\n */\r\n speedMode() {\r\n return 'none';\r\n }\r\n\r\n /**\r\n * the min/max for all supported sensors\r\n */\r\n get sensorLimits() {\r\n return {};\r\n }\r\n}","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2021] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport { LidarPlayerBaseService } from '../../../../shared_components/document/instrumentation/sonarLidar/lidar_player_base_service';\r\n\r\n\r\n/**\r\n * UI-process version of the TrackService. It is able to load data from file and receive\r\n * live recorded data from the TrackServerService (responsible for recording, runs in\r\n * engine process).\r\n */\r\nexport class LidarPlayerService extends LidarPlayerBaseService {\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n \r\n}\r\n","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n/**\r\n * can load lidar data and play it, using the onData callback. Playback must be triggered by the tractor player.\r\n */\r\nexport class PlayerBaseService {\r\n \r\n constructor() {\r\n this.data = []; // all the data for the currently loaded project\r\n this.currentTime = 0; // updated by the document, when recording or pla\r\n this.currentIdx = 0;\r\n this.onData = null; // callback towards the generic LidarService\r\n }\r\n\r\n /**\r\n * called when the document is put in edit mode (upon create). Make certain\r\n * that all data is re-init.\r\n */\r\n reset() {\r\n this.data = [];\r\n this.currentTime = 0; \r\n this.currentIdx = 0;\r\n }\r\n\r\n setCurrentTimestamp(value) {\r\n let forced = false;\r\n if(value < this.currentTime) {\r\n this.currentIdx = 0; // going back in the dataset, so start search from beginning (easiest)\r\n if (value == 0) forced = true; // need to force playing the first item, cause there is no change in index nr, so otherwise no data would be played -> when playing ends, no going back to start automatically\r\n }\r\n this.currentTime = value;\r\n this.playCurrent(forced);\r\n }\r\n\r\n getLast() {\r\n return this.data[this.currentIdx];\r\n }\r\n\r\n /**\r\n * find position in list for current time stamp and call callback with new data.\r\n * @param {bool} forced when true, the event will always be triggered, when false, only when current pos changed.\r\n */\r\n playCurrent(forced = false) {\r\n try {\r\n if (this.data) {\r\n const prevIdx = this.currentIdx;\r\n while(this.currentIdx < this.data.length - 1) {\r\n let next = this.data[this.currentIdx+1];\r\n if (next.timestamp >= this.currentTime) break;\r\n this.currentIdx++;\r\n }\r\n if((prevIdx != this.currentIdx || forced) && this.currentIdx < this.data.length) {\r\n const curRec = this.data[this.currentIdx];\r\n if (curRec && this.onData) {\r\n this.playRec(curRec);\r\n }\r\n }\r\n }\r\n }\r\n catch(error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n}","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport ReactResizeDetector from 'react-resize-detector';\r\n\r\nconst styles = (theme) => ({\r\n leftCol: {\r\n marginRight: theme.spacing(1),\r\n flex: 1,\r\n flexDirection: 'column',\r\n display: 'flex'\r\n },\r\n rightCol: {\r\n marginLeft: theme.spacing(1),\r\n flex: 1,\r\n flexDirection: 'column',\r\n display: 'flex'\r\n },\r\n\r\n leftColSingle: {\r\n flex: 1,\r\n flexDirection: 'column',\r\n display: 'flex'\r\n },\r\n rightColSingle: {\r\n flex: 1,\r\n flexDirection: 'column',\r\n display: 'flex'\r\n },\r\n\r\n\r\n rootTwoCol: {\r\n flexDirection: 'row',\r\n height: '100%',\r\n width: '100%',\r\n flexGrow: 1,\r\n display: 'flex'\r\n },\r\n rootOneCol: {\r\n flexDirection: 'column',\r\n height: '100%',\r\n width: '100%',\r\n flexGrow: 1,\r\n display: 'flex'\r\n }\r\n});\r\n\r\n\r\nclass TwoColLayout extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n rootStyle : this.props.classes.rootOneCol,\r\n leftChildStyle: null,\r\n rightChildStyle: null\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n {this.props.left}\r\n
\r\n
\r\n {this.props.right}\r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * called when the root element gets resized. we use this to recalculate 1 or 2 col layout\r\n */\r\n onResize = (width) => {\r\n if (width > 320) {\r\n this.setState({rootStyle: this.props.classes.rootTwoCol, leftChildStyle: this.props.classes.leftCol, rightChildStyle: this.props.classes.rightCol});\r\n }\r\n else {\r\n this.setState({rootStyle: this.props.classes.rootOneCol, leftChildStyle: this.props.classes.leftColSingle, rightChildStyle: this.props.classes.rightColSingle});\r\n }\r\n }\r\n}\r\n\r\nTwoColLayout.propTypes = {\r\n left: PropTypes.any.isRequired,\r\n right: PropTypes.any.isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(TwoColLayout);","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\nimport CrosshairsGps from 'mdi-material-ui/CrosshairsGps';\r\n\r\n\r\nimport React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { withTranslation } from 'react-i18next';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport PropTypes from 'prop-types';\r\nimport { gpsService } from '../../../services/gps/gps_service';\r\nimport { CoordinatesToAddress } from '../../services/geo_service';\r\nimport { dialogService } from '../../../services/dialog_service';\r\nimport { errExtractor } from '../../services/error_extractor';\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n \r\n },\r\n row : {\r\n flexDirection: 'row', \r\n display:'flex', \r\n alignItems: 'center', \r\n justifyContent:'flex-end'\r\n }\r\n\r\n});\r\n\r\n\r\n/**\r\n * UI element for managing the currently active user: config, logout..\r\n */\r\nclass GpsAdorner extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n
\r\n {this.props.editor}\r\n {(!this.props.readOnly) && \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n
\r\n );\r\n }\r\n\r\n handleGetLocation = async () => {\r\n const { t } = this.props;\r\n try {\r\n const pos = await gpsService.currentPos();\r\n if (pos) {\r\n if (pos.lat === null || pos.lon === null) {\r\n throw new Error(t(\"invalid_gps_cooordinates\"));\r\n }\r\n else {\r\n const location = await CoordinatesToAddress(pos.lat, pos.lon);\r\n if (this.props.onLocation) {\r\n if (this.props.field == \"route\" && location.number != undefined) { // auto add number when route/street is needed\r\n this.props.onLocation(`${location[this.props.field]} ${location.number}`);\r\n }\r\n else {\r\n this.props.onLocation(location[this.props.field]);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n dialogService.error(t(\"Gps\"), t(\"invalid_gps_cooordinates\"));\r\n }\r\n }\r\n catch (error) {\r\n dialogService.error(t(\"Gps\"), errExtractor.get(error));\r\n }\r\n }\r\n}\r\n\r\nGpsAdorner.propTypes = {\r\n editor: PropTypes.object, // the textfield to adorn\r\n readOnly: PropTypes.bool, // when readonly, no buttons shown\r\n field: PropTypes.string.isRequired, // the field to return: city or street\r\n onLocation: PropTypes.func, // called when a location is found, param; the string value\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(GpsAdorner));\r\n","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport Observation from './observation/observation_component';\r\nimport { projectService } from '../../services/project_service';\r\nimport { configService } from '../../../services/config_service';\r\nimport { codeSelectorService } from '../../services/code_selector_service';\r\nimport { documentControlService } from '../document_control_service';\r\nimport { activeProjectService } from '../../../services/active_project_service';\r\nimport ConfirmationDialog from '../../dialogs/confirmation_dialog';\r\nimport { withTranslation } from 'react-i18next';\r\n\r\n\r\nimport EyePlus from 'mdi-material-ui/EyePlus';\r\nimport { dialogService } from '../../../services/dialog_service';\r\nimport { distanceService } from '../../services/distance_service';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: '100%',\r\n width: '100%'\r\n },\r\n});\r\n\r\n\r\nclass Observations extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n const expandedIdx = props.obsIndex ?? -1;\r\n this.state = {\r\n expandedIdx: expandedIdx, // the index of the currently expended item.\r\n showEmptyError: false, // to let the active observation component know if it should show it's 'empty' errors or not (when first editing, don't show)\r\n deleteRequestOpen: false, // when true, a dialog is open to ask the user if the observation needs to be deleted\r\n idxToDelete: -1 // used to pass along which idx needs to be deleted (after requestdlg is closed)\r\n }\r\n\r\n this.treeOpen = null; // note, put here, not as state, cause a change here should not trigger repaint, it is used as an extra flag while creating a new item. used to signal the component that it should open it's tree. This is only used when a new item has been added with the \"space\" key.\r\n this.focusedValueIdx = null; // similar as treeOpen. Used to pass a var to the active observation when it needs to select put focus on a specific value.\r\n this.errorOnNonFullObservation = configService.get('observations.errorOnNonFullObservation');\r\n this.onlyNewObservationDuringRec = configService.get('observations.onlyNewObservationDuringRec');\r\n }\r\n\r\n\r\n componentDidMount() {\r\n if (this.props.captureKeyboard == true) window.addEventListener('keydown', this.handleKeyboard, true);\r\n activeProjectService.events.addListener(\"recordingReady\", this.handleRecordingReady);\r\n activeProjectService.events.addListener(\"recordingStart\", this.handleRecordingStarted);\r\n activeProjectService.events.addListener(\"obsGenerated\", this.handleObsGenerated);\r\n activeProjectService.events.addListener(\"canContinueOnObs\", this.handleCanContinueOnObs);\r\n if (this.props.addNewObs) { // when in a dialog for new obs, automatically add a enw rec upon creation\r\n this._addItem(true);\r\n }\r\n }\r\n\r\n\r\n componentWillUnmount() {\r\n if (this.props.captureKeyboard == true) window.removeEventListener('keydown', this.handleKeyboard, true);\r\n activeProjectService.events.removeListener(\"recordingReady\", this.handleRecordingReady);\r\n activeProjectService.events.removeListener(\"recordingStart\", this.handleRecordingStarted);\r\n activeProjectService.events.removeListener(\"obsGenerated\", this.handleObsGenerated);\r\n activeProjectService.events.removeListener(\"canContinueOnObs\", this.handleCanContinueOnObs);\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.captureKeyboard != this.props.captureKeyboard){\r\n if (this.props.captureKeyboard == true) {\r\n window.addEventListener('keydown', this.handleKeyboard, true);\r\n }\r\n else {\r\n window.removeEventListener('keydown', this.handleKeyboard, true);\r\n }\r\n }\r\n if (prevProps.streng !== this.props.streng) { // when switching streng, make certain that the currently open obs collapses. if we don't do this, the ob remains open and shows the errors for the wrong streng (distance might be reported out-of-bounds if previous streng was shorter is new one)\r\n this.setState({expandedIdx: -1});\r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n if (!this.props.initLoaded) { // don't load observations as long as not yet loaded, this way, we ensure that the sonar & lidar buttons are properly loaded when needed\r\n return null;\r\n }\r\n if (!this.props.observations) {\r\n return (\r\n
\r\n {t(\"Geen data\")}\r\n
\r\n );\r\n }\r\n return (\r\n
\r\n {this.props.observations.map((obs, idx) => {\r\n let treeOpen = null; // if not selected, tee shouldn't be open anyways\r\n let focusedValueIdx = null;\r\n if (this.state.expandedIdx === idx) {\r\n focusedValueIdx = this.focusedValueIdx;\r\n treeOpen = this.treeOpen;\r\n }\r\n return(\r\n this.expandItem(idx, value)}\r\n onDelete={(value) => this.handleDeleteRequest(idx, value)}\r\n onPositionChanged={this.props.onPositionChanged}\r\n onDistanceChanged={this.handleDistanceChanged}\r\n onTerminated={this.props.onTerminated}\r\n treeOpen={treeOpen}\r\n focusedValueIdx={focusedValueIdx}\r\n onFocusedInit={() => this.focusedValueIdx = null}\r\n onTreeOpened={() => this.treeOpen = null}\r\n onGotoNext={this.handleGotoNext}\r\n onGotoPrev={this.handleGotoPrev}\r\n onMoveDown={this.handleMoveDown}\r\n onMoveUp={this.handleMoveUp}\r\n strengType={this.props.strengType}\r\n onStartMeasure={this.props.onStartMeasure}\r\n onStopMeasure={this.props.onStopMeasure}\r\n onStartMeasureAngle={this.props.onStartMeasureAngle}\r\n onStartMeasureDepth={this.props.onStartMeasureDepth}\r\n onStartMeasureAreaSize={this.props.onStartMeasureAreaSize}\r\n onStartMeasureFreeform={this.props.onStartMeasureFreeform}\r\n onContinuousClosed={this.handleContinuousClosed}\r\n onGetList={this.handleGetList}\r\n />\r\n )\r\n })}\r\n {(!this.props.readOnly) && \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n }\r\n \r\n
\r\n );\r\n }\r\n\r\n expandItem = (idx, value) => {\r\n if (this.checkObservationCanLooseFocus()) {\r\n if (value == true) {\r\n this.setState({expandedIdx: idx});\r\n }\r\n else {\r\n this.setState({expandedIdx: -1});\r\n }\r\n }\r\n }\r\n\r\n handleGetList = () => {\r\n return this.props.observations;\r\n }\r\n\r\n handleDeleteRequest = (idx, value) => {\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n this.setState({deleteRequestOpen: true, idxToDelete: idx}); // don't delete yet, user needs to confirm first\r\n }\r\n\r\n deleteItem(idx){\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n const removed = this.props.observations[idx];\r\n this.props.observations.splice(idx, 1);\r\n const newList = [...this.props.observations]; // make a copy of the list so we can set the state (trigger an update)\r\n this.setState({expandedIdx: -1});\r\n this.props.onChanged(newList);\r\n activeProjectService.deleteContinuous(removed, newList);\r\n }\r\n\r\n handleCloseDlg = (ack) => {\r\n if(ack) {\r\n this.deleteItem(this.state.idxToDelete);\r\n }\r\n this.setState({deleteRequestOpen: false, idxToDelete: -1});\r\n }\r\n\r\n /**\r\n * checks if the currently active observation can loose focus. \r\n * This is not the case when the user has selected that an observation needs to \r\n * returns false when not allowed.\r\n * Will also display an error box when not allowed\r\n */\r\n checkObservationCanLooseFocus() {\r\n if (!this.props.readOnly && this.errorOnNonFullObservation) {\r\n if (this.state.expandedIdx >= 0 && this.state.expandedIdx < this.props.observations.length) {\r\n const obs = this.props.observations[this.state.expandedIdx];\r\n const def = codeSelectorService.getLeaf(obs.values, this.props.strengType);\r\n if (!projectService.isObservationComplete(obs, def, this.props.strengType)) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Waarneming\"), t(\"De huidige waarneming is nog niet volledig gedefinieerd. Je kan pas verder gaan wanneer alle velden zijn ingevuld (of wanneer je de record verwijderd).\"));\r\n this.setState({showEmptyError: true});\r\n return false;\r\n }\r\n }\r\n }\r\n this.setState({showEmptyError: false});\r\n return true;\r\n }\r\n\r\n /**\r\n * checks if it's allowed to add a new item\r\n */\r\n checkAddAllowed() {\r\n if (this.onlyNewObservationDuringRec && documentControlService.controlState !== \"record\") {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n addItem = () => { \r\n this._addItem();\r\n }\r\n\r\n _addItem(showTree=null) {\r\n if (!this.props.readOnly) {\r\n const allowed = this.checkAddAllowed();\r\n if (allowed && this.checkObservationCanLooseFocus()) {\r\n const descriptiveLoc = (this.props.strengType == \"m\") ? 'A' : null;\r\n const record = projectService.createNewObservation(documentControlService.currentTime, distanceService.current, [], descriptiveLoc); \r\n this.addRecToList(record, showTree);\r\n activeProjectService.processNewContinuousRecord(record);\r\n }\r\n else if (!allowed) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Waarneming\"), t(\"not_recording_so_no_obs\"))\r\n }\r\n }\r\n }\r\n\r\n /**adds a newly created observation to the list and updates everything. Does not do anything for continuous observations */\r\n addRecToList(record, showTree=null, gotoRec=true) {\r\n this.props.observations.push(record); // also add to current list. When modifying values of continuous obs (close, create new one), 2 obs are added to the list, if we don't do this, we loose the 1st item cause the prop isn't updated in time\r\n const newList = [...this.props.observations];\r\n newList.sort((a, b) => a.longitude-b.longitude);\r\n this.treeOpen = showTree; // don't set through state cause a reset should of this value should never trigger a repaint. it needs to be reset so that it doesnt' interfere with other commands.\r\n if (gotoRec) {\r\n const idx = newList.indexOf(record);\r\n this.setState({expandedIdx: idx});\r\n }\r\n this.props.onChanged(newList);\r\n }\r\n\r\n /**\r\n * called when an observation's longitude (tractor-distance) has been edited by the user.\r\n * This should trigger a resort of the items.\r\n * @param {object} item the record that was modified\r\n */\r\n handleDistanceChanged = (item) => {\r\n const newList = [...this.props.observations];\r\n newList.sort((a, b) => a.longitude-b.longitude);\r\n this.props.onChanged(newList);\r\n }\r\n\r\n handleKeyboard = (e) => {\r\n if (this.state.expandedIdx == -1) { // when not -1, the editor is open, so don't try to capture the space key, it only causes problems (no spaces allowed in boxes, can't use it to press button)\r\n if (e.keyCode === 32) { // space = add item\r\n this._addItem(e.ctrlKey === false); // ctrl+space = add item and show treeselect\r\n e.stopPropagation(); // don't let it bubble up, cause that could cause an expansionpanel on strengcomponent to toggle (if the chevron still has focus), which we dont want\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * result of a tab action that needs to go to next record\r\n */\r\n handleGotoNext = () => {\r\n if (this.checkObservationCanLooseFocus()) {\r\n this.focusedValueIdx = 0; // request to go to start of editor\r\n if (this.state.expandedIdx < this.props.observations.length -1) {\r\n this.setState({expandedIdx: this.state.expandedIdx + 1}) ;\r\n }\r\n else {\r\n this.setState({expandedIdx: 0}) ;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * result of a ctrl+tab action that needs to go to prev record\r\n */\r\n handleGotoPrev = () => {\r\n if (this.checkObservationCanLooseFocus()) {\r\n this.focusedValueIdx = -2; // -2 is to let the component know it needs to go to it's last input element\r\n if (this.state.expandedIdx > 0) {\r\n this.setState({expandedIdx: this.state.expandedIdx - 1}) ;\r\n }\r\n else {\r\n this.setState({expandedIdx: this.props.observations.length - 1}) ;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * result of a keydown. Need to go to next record, with same value index focused\r\n */\r\n handleMoveDown = (valueIdx) => {\r\n if (this.checkObservationCanLooseFocus()) {\r\n this.focusedValueIdx = valueIdx;\r\n if (this.state.expandedIdx < this.props.observations.length -1) {\r\n this.setState({expandedIdx: this.state.expandedIdx + 1}) ;\r\n }\r\n else {\r\n this.setState({expandedIdx: 0}) ;\r\n }\r\n }\r\n }\r\n\r\n handleMoveUp = (valueIdx) => {\r\n if (this.checkObservationCanLooseFocus()) {\r\n this.focusedValueIdx = valueIdx;\r\n if (this.state.expandedIdx > 0) {\r\n this.setState({expandedIdx: this.state.expandedIdx - 1}) ;\r\n }\r\n else {\r\n this.setState({expandedIdx: this.props.observations.length - 1}) ;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * called when a recording is ready. This means that there are some new records at the end,\r\n * so move focus to the last record\r\n */\r\n handleRecordingReady = () => {\r\n //this.expandItem(this.props.observations.length - 1, true);\r\n this.forceUpdate(); // also force an update so that the newly added records are forcebly refreshed.\r\n }\r\n\r\n /**\r\n * when the system reports that an auto generated observation has been added, we need to refresh \r\n * cause this is not an observation that was created through this interface, so we don't know about it.\r\n * and need to let the user also know by expanding it.\r\n */\r\n handleObsGenerated = (idx) => {\r\n this.forceUpdate();\r\n this.setState({expandedIdx: idx})\r\n }\r\n\r\n /**\r\n * called by activeProjectService (via event) to verify for other services that it's ok to put \r\n * focus on another item. Usually for Add observation event obsGenerated\r\n * @param {object} result 1 field: canContinue\r\n */\r\n handleCanContinueOnObs = (result) => {\r\n if (result.canContinue === true) { // if it's already false, don't screw upteh result\r\n result.canContinue = this.checkObservationCanLooseFocus();\r\n }\r\n }\r\n\r\n /**\r\n * called when r3ecording started. need to refresh the list. some objects might have been modified\r\n */\r\n handleRecordingStarted = () => {\r\n this.forceUpdate();\r\n }\r\n\r\n /**\r\n * called when user wants to close a running continuous observation\r\n * requestedAction: possible values: newContinuous, any other value\r\n * obsToClose: observation to close\r\n * @param {boolean} gotoRec when false, the newly created closed rec will not be focused, but focus remain on prev rec.\r\n * this is used when added a closure for an obs when a duplicate code was entered and the user selected that he wants to change the value of the\r\n * active observation (which triggers the closure of the prev). In this case, focus needs to remain on the newly created obs with duplicate code.\r\n */\r\n handleContinuousClosed = (obsToClose, requestedAction, time=null, distance=null, gotoRec=true) => {\r\n if (requestedAction != null) {\r\n let code = obsToClose.values.slice(0, 3);\r\n code.push(\"1\");\r\n let record = projectService.createNewObservation(time ?? documentControlService.currentTime, distance ?? distanceService.current, code);\r\n record['continuousIdx'] = obsToClose.continuousIdx;\r\n this.addRecToList(record, null, gotoRec);\r\n activeProjectService.processNewContinuousRecord(record);\r\n activeProjectService.continuousChanged(record);\r\n if (requestedAction == \"newContinuous\") {\r\n const descriptiveLoc = (this.props.strengType == \"m\") ? 'A' : null;\r\n record = projectService.createNewObservation(documentControlService.currentTime, distanceService.current, code, descriptiveLoc);\r\n record.values = [...obsToClose.values];\r\n this.addRecToList(record);\r\n activeProjectService.processNewContinuousRecord(record);\r\n }\r\n }\r\n }\r\n}\r\n\r\nObservations.propTypes = {\r\n observations: PropTypes.array.isRequired,\r\n readOnly: PropTypes.bool, // for viewer\r\n showObsDetails: PropTypes.bool, // hide/show code labels in a list.\r\n onChanged: PropTypes.func.isRequired,\r\n captureKeyboard: PropTypes.bool, // when true, observations is allowed to capture keyboard events. If we don't do this, we can't use a space when editing fields, cause observations traps it.\r\n onPositionChanged: PropTypes.func, // when this observation is expanded, let the system go to the video point at which it was recorded.\r\n strengType: PropTypes.string, // dp = streng, m = put, determins which fields are visible\r\n onStartMeasure: PropTypes.func, // called when a measuring procedure should be started. Contains a callback that should be called when the operation is done.\r\n onStopMeasure: PropTypes.func, // called when measuring procedure should be stopped\r\n onStartMeasureAngle: PropTypes.func,\r\n onStartMeasureDepth: PropTypes.func,\r\n onStartMeasureAreaSize: PropTypes.func,\r\n onStartMeasureFreeform: PropTypes.func,\r\n onTerminated: PropTypes.func, // called when the B-D-C-?-? code is entered -> inspection was terminated. This should stop video recording\r\n initLoaded: PropTypes.bool, // an observation can only be rendered when the tractor engine is loaded (buttons for sonar and lidar)\r\n streng: PropTypes.object, // keep a ref to the streng itself, so that we can reset the selected idx when the streng changes.\r\n addNewObs: PropTypes.bool, // when true upon opening, a new record will be created and put into focus for editing\r\n obsIndex: PropTypes.number, // when reopening the dialog after a measure, we need to open the same observation, which is done through this field\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(Observations));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2021] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n//icons \r\nimport FormatAlignBottom from 'mdi-material-ui/FormatAlignBottom';\r\nimport FormatAlignTop from 'mdi-material-ui/FormatAlignTop';\r\n\r\nimport React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { withTranslation } from 'react-i18next';\r\nimport PropTypes from 'prop-types';\r\nimport Box from '@material-ui/core/Box';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport Typography from '@material-ui/core/Typography'; \r\nimport i18n from \"i18next\";\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n \r\n },\r\n heading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n fontWeight: \"600\"\r\n },\r\n\r\n});\r\n\r\n\r\n/**\r\n * UI element for managing the currently active user: config, logout..\r\n */\r\nclass ObservationsTitleBox extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n\r\n render() {\r\n const { t } = this.props;\r\n let detailsBtn = null;\r\n let detailsBtnTip = null;\r\n if (this.props.showObsDetails) {\r\n detailsBtn = ;\r\n detailsBtnTip = i18n.t(\"Hide the descriptions of the observations\");\r\n }\r\n else {\r\n detailsBtn = ;\r\n detailsBtnTip = i18n.t(\"Show the descriptions of the observations\");\r\n }\r\n return (\r\n \r\n {i18n.t(\"Waarnemingen\")}\r\n \r\n \r\n {detailsBtn}\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nObservationsTitleBox.propTypes = {\r\n onToggleObsDetails: PropTypes.func, // called when icon to toggle obs details is pressed\r\n showObsDetails: PropTypes.bool, // value of icon button\r\n}\r\n\r\nexport default withStyles(styles)(ObservationsTitleBox);","export const PI = 3.1415926535897932384626433832795028841971693993751058209749445; // more accurate value\r\n\r\n\r\nexport function toRadian(degrees) {\r\n return degrees * (PI / 180);\r\n}\r\n\r\n/**\r\n * calculates pitch in % (height/delta-distance*100)\r\n * @param {number} pitch pitch in degrees\r\n */\r\nexport function pitchInDegrees(pitch) {\r\n return (Math.sin(toRadian(pitch)) / Math.sin((PI/2) - toRadian(pitch))) * 100;\r\n}\r\n\r\nexport function toDegrees(radians) {\r\n return radians * 180 / PI;\r\n}\r\n\r\nexport function replaceEmptyWith0(value) {\r\n if (!value) return 0;\r\n return value;\r\n}\r\n\r\n//see: https://stackoverflow.com/questions/28986872/finding-distance-between-two-points-on-image-even-when-image-is-scaled\r\nexport function distance(x1, y1, x2,y2){\r\n var dx = x2-x1;\r\n var dy = y2-y1;\r\n return Math.sqrt(dx*dx+dy*dy);\r\n}\r\n\r\nexport function logWithBase(n, b) {\r\n return Math.log(n) / Math.log(b);\r\n}\r\n\r\n\r\n/**\r\n * calculates a lookup table that performs a mapping between a linear scale and a regressive decaying scale.\r\n * This is used to calculate the distance between laser and wall, using 2 laser dots. Since the distance between the laser dots\r\n * is different, depending on the distance to the wall, we can't use a simple linear mapping, but need to use a regressive scale\r\n * where the decay factor also changes using a linear scale.\r\n * Basically, a map is made like this:\r\n * 10cm -> 250 dots between 2 laser points, decay: 0.35\r\n * 20cm -> 160, decay: 0.35\r\n * 30cm -> 107, decay: 0.30\r\n * 40cm -> 77, decay: 0.25\r\n * ...\r\n * The input parameters (fields of the calibration) are the nr of dots at:\r\n * - 10cm (minimum), \r\n * - 20cm (1 unit above min)\r\n * - 100cm (max)\r\n * - 90cm (1 unit below max)\r\n * \r\n * also check out these sites:\r\n * - https://www.thoughtco.com/exponential-decay-definition-2312215\r\n * - https://stackoverflow.com/questions/19472747/convert-linear-scale-to-logarithmic\r\n * - https://stackoverflow.com/questions/54130877/map-a-linear-scale-to-a-logarithmic-one-with-both-scales-having-variable-min-max\r\n * @param {object} cal data collected during a calibration stage\r\n */\r\nexport function calculateExponentialDecay(cal) {\r\n const linearStepSize = 100; //expressed in mm\r\n\r\n // calculate the % change from min to 1-above and from 1-below-max to max (decay at start and at end)\r\n let changeStart = +cal.distance[0] - +cal.distance[1];\r\n let changeEnd = +cal.distance[2] - +cal.distance[3];\r\n let decayStart = changeStart / cal.distance[0];\r\n let decayEnd = changeEnd / +cal.distance[2];\r\n ////calculate the different decay steps using a linear decay\r\n //let nrSteps = (+cal.radius2 - +cal.radius1) / linearStepSize; // the nr of steps in mapping\r\n //let nrDecaySteps = nrSteps - 1; // nr of steps in the decay\r\n //let decayOfDecay = (decayEnd - decayStart) / nrDecaySteps;\r\n //build the result\r\n let result = [];\r\n let prevDistance = +cal.distance[0];\r\n result.push({radius: +cal.radius1, distance: prevDistance});\r\n let radius = +cal.radius1; \r\n for(let i=1; i < cal.distance.length; i++) {\r\n let distance = +cal.distance[i];\r\n let change = prevDistance - distance;\r\n let decay = change / prevDistance;\r\n result.push({radius: radius + (i*linearStepSize), distance: distance, decay: decay});\r\n prevDistance = distance;\r\n } \r\n return result;\r\n}\r\n\r\n/**\r\n * calculates the distance between the wall and the laserhead \r\n * note: for laser with 2 dots on the wall where the distance between the dots increases as the distance to the wall increases ( they go like this: \\/ )\r\n * @param {number} distance distance between 2 laser points\r\n * @param {list of objects} cal result of calculateExponentialDecay\r\n */\r\n export function calculateRadius(distance, cal) {\r\n const linearStepSize = 100;\r\n\r\n if (distance > cal[0].distance) {\r\n return `+${cal[0].distance}`;\r\n }\r\n else if (distance < cal[cal.length-1].distance) {\r\n return `-${cal[cal.length-1].distance}`;\r\n } \r\n else {\r\n let idx = cal.length-1;\r\n while(idx > 0 && cal[idx-1].distance < distance) {\r\n idx--;\r\n }\r\n let percent = distance / cal[idx-1].distance;\r\n let result2 = cal[idx].radius * percent; \r\n let pos = logWithBase(distance/cal[idx].distance, 1-cal[idx].decay);\r\n let result = cal[idx].radius + (pos * linearStepSize);\r\n console.log(\"logarithmic: \", result, \", linear: \", result2);\r\n return result;\r\n }\r\n}\r\n\r\n/**\r\n * calcualtes the circumference of the strand. Used to draw lidar-rollout\r\n * @param {object} streng the streng to get the circumeference of\r\n */\r\nexport function getCircumference(width, height, shape) {\r\n let result; // height: circumference of the strand\r\n\r\n let wid = +width;\r\n let len = +height;\r\n if (len > wid) {\r\n wid = +height;\r\n len = +width;\r\n }\r\n switch (shape) {\r\n case 'A': // round\r\n result = PI * len;\r\n break;\r\n case 'B': // square\r\n result = wid * len;\r\n break;\r\n case 'C': // egg shaped\r\n case 'F': // oval / eliptic\r\n // note: see source code of https://www.eclecticsite.be/calc/ellipse.htm for details to calculate \r\n result = PI * (3*((wid/2) + (len/2)) - Math.sqrt((3*wid/2 + len/2) * ( wid/2 + 3*len/2)));\r\n break;\r\n case 'D': // U shaped\r\n case 'E': // arc-shaped\r\n // to calculate: \r\n // - take square of full image,\r\n // - take half of cirle of short side\r\n // - take half of square of short side\r\n // - substract half-circle from half square, substract this result from full square\r\n let halfCircle = (PI * len) / 2;\r\n let halfSquare = (len * len) / 2;\r\n result = (wid * len) - (halfSquare - halfCircle);\r\n break;\r\n default: // too complicated, asume cirkle\r\n result = PI * height;\r\n break;\r\n }\r\n return result;\r\n}\r\n\r\n\r\nlet scrollbarWidth = null;\r\n\r\nexport function measureScrollbarWidth() {\r\n if (scrollbarWidth === null) {\r\n let scrollbox = document.createElement('div'); // Add temporary box to wrapper\r\n scrollbox.style.overflow = 'scroll';\r\n document.body.appendChild(scrollbox); // Append box to document\r\n scrollbarWidth = scrollbox.offsetWidth - scrollbox.clientWidth;\r\n document.body.removeChild(scrollbox);\r\n }\r\n return scrollbarWidth;\r\n}\r\n\r\nexport function stdDef(values) {\r\n const mean = values.reduce((s, n) => s + n) / values.length;\r\n const variance = values.reduce((s, n) => s + (n - mean) ** 2, 0) / (values.length - 1);\r\n return Math.sqrt(variance);\r\n}\r\n\r\nexport function calculateAngle(coord1, coord2, coord3, coord4) {\r\n const dx0 = coord2.x - coord1.x;\r\n const dy0 = coord2.y - coord1.y;\r\n const dx1 = coord4.x - coord3.x;\r\n const dy1 = coord4.y - coord3.y;\r\n const angle = Math.atan2(dx0 * dy1 - dx1 * dy0, dx0 * dx1 + dy0 * dy1);\r\n let res = toDegrees(angle);\r\n res = Math.abs(res);\r\n if (res > 90) {\r\n res = 180 - res;\r\n }\r\n return res;\r\n}","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { activeProjectService } from '../../../../services/active_project_service';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { isEmpty } from '../../../services/project_service';\r\nimport { errExtractor } from '../../../services/error_extractor';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\n\r\nconst styles = (theme) => ({\r\n textField: {\r\n marginLeft: '15px'\r\n },\r\n cmbField: {\r\n },\r\n readOnly: {\r\n color: \"rgba(0, 0, 0, 0.87)\"\r\n }\r\n});\r\n\r\nconst MAXYEAR = 2100;\r\nconst MINYEAR = 1000; // minimum 4 digits needed\r\n\r\n\r\nclass StrengInfoComboBox extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n const zField = props.field + \"Z\";\r\n const xField = props.field + \"X\";\r\n const yearField = props.field + \"Y\"\r\n const streng = props.streng;\r\n const valueYear = streng ? streng[yearField] : null;\r\n this.state = {\r\n value: streng ? streng[props.field] : null,\r\n valueZ: streng ? streng[zField] : null,\r\n valueX: streng ? streng[xField] : null,\r\n valueYear: valueYear,\r\n valueYearError: !this.isYearOk(valueYear)\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if ((prevProps.field !== this.props.field || prevProps.streng !== this.props.streng) && this.props.streng) {\r\n const zField = this.props.field + \"Z\";\r\n const xField = this.props.field + \"X\";\r\n const yearField = this.props.field + \"Y\"\r\n this.setState({value: this.props.streng[this.props.field],\r\n valueZ: this.props.streng[zField],\r\n valueX: this.props.streng[xField],\r\n valueYear: this.props.streng[yearField],\r\n });\r\n }\r\n if (prevProps.secondarySource !== this.props.secondarySource && this.props.secondarySource !== this.state.value && this.props.streng && this.props.streng === prevProps.streng) { // this.props.streng can be null when loading \r\n this.props.streng[this.props.field] = this.props.secondarySource;\r\n this.setState({value: this.props.secondarySource});\r\n activeProjectService.markDirty();\r\n //don't call onChange, cause we received it from parent, don't need to update him again.\r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n let value = this.state.value === null ? \"\" : this.state.value;\r\n let error = this.props.required && this.props.showMissingErrors && isEmpty(this.state.value);\r\n let cmb = \r\n {this.props.options.map((val, idx) => {\r\n const label = val.label ? t(val.label) : \"\";\r\n return(\r\n \r\n );\r\n })}\r\n \r\n if (value == 'Z') {\r\n error = this.props.required && this.props.showMissingErrors && isEmpty(this.state.valueZ);\r\n return (\r\n \r\n {cmb}\r\n \r\n \r\n );\r\n }\r\n else if (value === 'X') {\r\n error = this.props.required && this.props.showMissingErrors && isEmpty(this.state.valueX);\r\n return (\r\n \r\n {cmb}\r\n \r\n \r\n );\r\n }\r\n else if (value === \"year\") {\r\n error = this.props.required && this.props.showMissingErrors && isEmpty(this.state.valueYear);\r\n return(\r\n \r\n {cmb}\r\n \r\n \r\n );\r\n }\r\n else {\r\n return (cmb);\r\n }\r\n }\r\n\r\n handleValueChanged = (ev) => {\r\n try {\r\n const newValue = ev.target.value;\r\n this.props.streng[this.props.field] = newValue;\r\n this.setState({value: newValue});\r\n activeProjectService.markDirty();\r\n if (this.props.onChange) {\r\n this.props.onChange(newValue);\r\n }\r\n }\r\n catch(error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Document wijzigen\"), t(\"doc_change_error\", {error: errExtractor.get(error)}));\r\n }\r\n }\r\n\r\n handleZChanged = (ev) => {\r\n try {\r\n this.props.streng[ev.target.id] = ev.target.value;\r\n this.setState({valueZ: ev.target.value});\r\n activeProjectService.markDirty(ev.target.id);\r\n }\r\n catch(error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Document wijzigen\"), t(\"doc_change_error\", {error: errExtractor.get(error)}));\r\n }\r\n }\r\n\r\n handleXChanged = (ev) => {\r\n try {\r\n this.props.streng[ev.target.id] = ev.target.value;\r\n this.setState({valueX: ev.target.value});\r\n activeProjectService.markDirty(ev.target.id);\r\n }\r\n catch(error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Document wijzigen\"), t(\"doc_change_error\", {error: errExtractor.get(error)}));\r\n }\r\n }\r\n\r\n handleYearChanged = (ev) => {\r\n try {\r\n let value = +ev.target.value;\r\n this.props.streng[ev.target.id] = value;\r\n this.setState({valueYear: value, valueYearError: !this.isYearOk(value)});\r\n activeProjectService.markDirty(ev.target.id);\r\n }\r\n catch(error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Document wijzigen\"), t(\"doc_change_error\", {error: errExtractor.get(error)}));\r\n }\r\n }\r\n\r\n /**\r\n * checks is the value is within range.\r\n * @param {text or number} value the value to check\r\n */\r\n isYearOk(value) {\r\n if (value !== null && value !== undefined) {\r\n if (value > MAXYEAR){\r\n return false;\r\n }\r\n else if (value < MINYEAR) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n}\r\n\r\nStrengInfoComboBox.propTypes = {\r\n field: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n streng: PropTypes.object, // a reference to the streng for which we are currently showing data.\r\n required: PropTypes.bool,\r\n options: PropTypes.array.isRequired,\r\n secondarySource: PropTypes.string, // currently for inspectionDirection, so that there can be other UI elements that provide a value. When changed, this should become the new state\r\n onChange: PropTypes.func, // currently for inspectionDirection, so that other ui elements can be warned that the value has changed.\r\n showMissingErrors: PropTypes.bool, // when true, inputboxes that require a value but dont, should show an error\r\n readOnly: PropTypes.bool, // for viewer\r\n};\r\n\r\nStrengInfoComboBox.defaultProps = {\r\n required: false\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(StrengInfoComboBox));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { activeProjectService } from '../../../../services/active_project_service';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { isEmpty } from '../../../services/project_service';\r\nimport { errExtractor } from '../../../services/error_extractor';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\n\r\nconst styles = (theme) => ({\r\n textField: {\r\n width: '100%'\r\n }\r\n});\r\n\r\n\r\nclass StrengInfoTextField extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n value: props.streng ? props.streng[props.field] : null\r\n }\r\n\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if ((prevProps.field !== this.props.field || prevProps.streng !== this.props.streng) && this.props.streng) {\r\n this.setState({value: this.props.streng[this.props.field]});\r\n }\r\n }\r\n\r\n render() {\r\n let error = this.props.required && this.props.showMissingErrors && isEmpty(this.state.value);\r\n return (\r\n \r\n );\r\n }\r\n\r\n handleTextChanged = (ev) => {\r\n try {\r\n const value = ev.target.value;\r\n this.props.streng[ev.target.id] = value;\r\n this.setState({value: value});\r\n activeProjectService.markDirty(ev.target.id);\r\n if (this.props.onValueChanged) {\r\n this.props.onValueChanged(value);\r\n }\r\n }\r\n catch(error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Document wijzigen\"), t(\"doc_change_error\", {error: errExtractor.get(error)}));\r\n }\r\n }\r\n\r\n}\r\n\r\nStrengInfoTextField.propTypes = {\r\n field: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n streng: PropTypes.object, // a reference to the streng for which we are currently showing data.\r\n required: PropTypes.bool,\r\n showMissingErrors: PropTypes.bool, // when true, inputboxes that require a value but dont, should show an error\r\n readOnly: PropTypes.bool, // for viewer\r\n onValueChanged: PropTypes.func, // optional callback for doing something extra when the value changes\r\n};\r\n\r\nStrengInfoTextField.defaultProps = {\r\n required: false\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(StrengInfoTextField));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { activeProjectService } from '../../../../services/active_project_service';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport { isEmpty } from '../../../services/project_service';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { errExtractor } from '../../../services/error_extractor';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\n\r\n\r\nconst styles = (theme) => ({\r\n textField: {\r\n width: '100%'\r\n }\r\n});\r\n\r\n// important: this class needs to be exported from here and also using 'default', but with all the adorners declared.\r\n// this allows us to inherit from the class and use it as well.\r\nexport class StrengInfoAutoComplete extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n value: props.streng ? props.streng[props.field] : \"\",\r\n popupOpen: false,\r\n options: []\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({options: activeProjectService.getAllValuesForStrengField(this.props.field)});\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if ((prevProps.field !== this.props.field || prevProps.streng !== this.props.streng) && this.props.streng) {\r\n let value = this.props.streng[this.props.field];\r\n if (!value) {\r\n value = \"\";\r\n }\r\n this.setState({value: value, options: activeProjectService.getAllValuesForStrengField(this.props.field)});\r\n }\r\n }\r\n\r\n render() {\r\n let error = this.props.required && this.props.showMissingErrors && isEmpty(this.state.value);\r\n return (\r\n {this.setState({popupOpen: false})}}\r\n open={this.state.popupOpen}\r\n onKeyDown={this.keyPressed}\r\n renderInput={params => (\r\n \r\n )}\r\n />\r\n );\r\n }\r\n\r\n openPopup = (ev) => {\r\n if (this.props.readOnly) { // not supported when readonly to edit\r\n return;\r\n }\r\n this.setState({popupOpen: true});\r\n }\r\n\r\n closePopup = (ev) => {\r\n this.setState({popupOpen: false});\r\n }\r\n\r\n \r\n handleTextChanged = (ev, newValue) => {\r\n if (this.state.value !== newValue && ev !== null) { // need to do this cause the event appears to fire at load time.\r\n this.setValue(newValue);\r\n if (ev.nativeEvent instanceof MouseEvent) {\r\n this.closePopup();\r\n }\r\n else if (this.state.popupOpen === false) {\r\n this.openPopup();\r\n }\r\n }\r\n }\r\n\r\n keyPressed = (ev) => {\r\n if (ev.keyCode === 9 || ev.keyCode === 13 || ev.keyCode === 27) { // tab or enter\r\n this.closePopup();\r\n }\r\n else if (this.state.popupOpen === false && (ev.keyCode === 40 || ev.keyCode === 38)) {\r\n this.openPopup();\r\n }\r\n }\r\n\r\n setValue(value) {\r\n try {\r\n this.props.streng[this.props.field] = value;\r\n this.setState({value: value});\r\n activeProjectService.markDirty(); \r\n }\r\n catch(error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Document wijzigen\"), t(\"doc_change_error\", {error: errExtractor.get(error)}));\r\n }\r\n }\r\n\r\n\r\n}\r\n\r\nStrengInfoAutoComplete.propTypes = {\r\n field: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n streng: PropTypes.object, // a reference to the streng for which we are currently showing data.\r\n required: PropTypes.bool,\r\n showMissingErrors: PropTypes.bool, // when true, inputboxes that require a value but dont, should show an error\r\n readOnly: PropTypes.bool, // for viewer\r\n};\r\n\r\nStrengInfoAutoComplete.defaultProps = {\r\n required: false\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(StrengInfoAutoComplete));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\n//import PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { StrengInfoAutoComplete } from './streng_info_autocomplete_component';\r\nimport GpsAdorner from '../gps_addorner_component';\r\n\r\n\r\nconst styles = (theme) => ({\r\n textField: {\r\n width: '100%'\r\n }\r\n});\r\n\r\n\r\nclass StrengInfoGPSAutoComplete extends StrengInfoAutoComplete {\r\n constructor(props) {\r\n super(props);\r\n\r\n }\r\n\r\n \r\n\r\n render() {\r\n const autoComplete = super.render();\r\n return (\r\n \r\n );\r\n }\r\n\r\n \r\n handleLocationChanged = (value) => {\r\n this.setValue(value);\r\n }\r\n\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(StrengInfoGPSAutoComplete));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { activeProjectService } from '../../../../services/active_project_service';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { isEmpty } from '../../../services/project_service';\r\nimport InputAdornment from '@material-ui/core/InputAdornment';\r\nimport { errExtractor } from '../../../services/error_extractor';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\n\r\n\r\nconst styles = (theme) => ({\r\n textField: {\r\n width: '100%'\r\n }\r\n});\r\n\r\n\r\nexport class StrengInfoNumberField extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n let value = props.streng ? props.streng[props.field]: null;\r\n if (value && typeof value === \"number\" && props.digits != undefined ) {\r\n value = value.toFixed(props.digits);\r\n }\r\n if (value) {\r\n value = +value; // make certain that it is a number,just in case someone editied the file manually and did something wrong\r\n }\r\n this.state = {\r\n value: value\r\n }\r\n\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if ((prevProps.field !== this.props.field || prevProps.streng !== this.props.streng) && this.props.streng) {\r\n let value = this.props.streng[this.props.field];\r\n if (value && typeof value === \"number\" && this.props.digits != undefined ) {\r\n value = value.toFixed(this.props.digits);\r\n }\r\n this.setState({value: value});\r\n }\r\n }\r\n\r\n render() {\r\n let error = (this.props.required && this.props.showMissingErrors && isEmpty(this.state.value));\r\n if (!error && !isEmpty(this.state.value)) {\r\n error = !this.isValueOk(this.state.value);\r\n }\r\n let inputProps = {readOnly:this.props.readOnly};\r\n if (this.props.unit) {\r\n inputProps = {readOnly:this.props.readOnly, endAdornment: {this.props.unit}}\r\n }\r\n return (\r\n \r\n );\r\n }\r\n\r\n handleFocusLost = () => {\r\n if (typeof this.state.value === \"number\") { // when the value is a number, it means the user has edited the value.\r\n this.setState({value: this.state.value.toFixed(this.props.digits)}); // if the value has changed, make certain we go back to 2 point precision again after loose focus. can't do that while editing, cause that screws up cursor pos end the field becomes uneditable\r\n }\r\n } \r\n handleTextChanged = (ev) => {\r\n try {\r\n this.handleValueChanged(ev.target.value);\r\n }\r\n catch(error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Document wijzigen\"), t(\"doc_change_error\", {error: errExtractor.get(error)}));\r\n }\r\n }\r\n\r\n handleValueChanged(value) {\r\n if (value !== \"\") {\r\n value = +value;\r\n this.props.streng[this.props.field] = value.toFixed(this.props.digits);\r\n }\r\n else {\r\n value = \"\";\r\n this.props.streng[this.props.field] = \"\";\r\n }\r\n this.setState({value: value}); \r\n activeProjectService.markDirty(this.props.field);\r\n if (this.props.onValueChanged) {\r\n this.props.onValueChanged(value);\r\n }\r\n }\r\n\r\n /**\r\n * checks is the value is within range.\r\n * @param {text or number} value the value to check\r\n */\r\n isValueOk(value) {\r\n if (value !== null && value !== undefined) {\r\n if (this.props.max != undefined && value > this.props.max){\r\n return false;\r\n }\r\n else if (this.props.min !== undefined && value < this.props.min) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n}\r\n\r\nStrengInfoNumberField.propTypes = {\r\n field: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n streng: PropTypes.object, // a reference to the streng for which we are currently showing data.\r\n required: PropTypes.bool,\r\n min: PropTypes.number.isRequired,\r\n max: PropTypes.number.isRequired,\r\n digits: PropTypes.number.isRequired,\r\n step: PropTypes.number.isRequired,\r\n showMissingErrors: PropTypes.bool, // when true, inputboxes that require a value but dont, should show an error\r\n unit: PropTypes.string,\r\n onValueChanged: PropTypes.func, // optional callback for doing something extra when the value changes\r\n readOnly: PropTypes.bool, // for viewer\r\n};\r\n\r\nStrengInfoNumberField.defaultProps = {\r\n required: false,\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(StrengInfoNumberField));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n*/\r\n\r\n// icons\r\nimport Flare from 'mdi-material-ui/Flare';\r\n\r\nimport React from 'react';\r\n//import PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { StrengInfoNumberField } from './streng_info_numberfield';\r\nimport { engineService } from '../../../../components/video_engine/engine_service';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport { errExtractor } from '../../../services/error_extractor';\r\nimport { lidarService } from '../../instrumentation/sonarLidar/lidar_service';\r\n\r\n\r\nconst styles = (theme) => ({\r\n textField: {\r\n width: '100%'\r\n },\r\n row : {\r\n flexDirection: 'row', \r\n display:'flex', \r\n alignItems: 'center', \r\n justifyContent:'flex-end'\r\n }\r\n});\r\n\r\n\r\nclass StrengInfoNumberAutoLidar extends StrengInfoNumberField {\r\n constructor(props) {\r\n super(props);\r\n\r\n }\r\n\r\n render() {\r\n const numberField = super.render();\r\n const rightBtn = this.renderRightButton();\r\n\r\n if (rightBtn) {\r\n return (\r\n
\r\n {numberField}\r\n {rightBtn}\r\n
\r\n );\r\n }\r\n else {\r\n return numberField;\r\n }\r\n }\r\n\r\n renderRightButton() {\r\n const { t } = this.props;\r\n if (!this.props.readOnly && lidarService && lidarService.provider) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n return null;\r\n }\r\n \r\n handleUpdateFromLidar = () => {\r\n try {\r\n const dimensions = lidarService.getDimensions();\r\n if (dimensions) {\r\n const val = this.props.field === 'Width' ? dimensions.width : dimensions.height;\r\n this.handleValueChanged(val);\r\n }\r\n }\r\n catch(error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Document wijzigen\"), t(\"doc_change_error\", {error: errExtractor.get(error)}));\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(StrengInfoNumberAutoLidar));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { activeProjectService } from '../../../../services/active_project_service';\r\nimport {KeyboardTimePicker} from '@material-ui/pickers';\r\nimport momentUtils from \"@date-io/moment\";\r\nimport { isEmpty } from '../../../services/project_service';\r\nimport { errExtractor } from '../../../services/error_extractor';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\n\r\nconst moment = new momentUtils();\r\n\r\nconst styles = (theme) => ({\r\n textField: {\r\n width: '100%'\r\n }\r\n});\r\n\r\nconst TIMEFORMAT = \"HH:mm:ss\";\r\n\r\n\r\nclass StrengTimeField extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n value: props.streng ? moment.parse(props.streng[props.field], TIMEFORMAT) : null\r\n }\r\n\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if ((prevProps.field !== this.props.field || prevProps.streng !== this.props.streng) && this.props.streng) {\r\n this.setState({value: moment.parse(this.props.streng[this.props.field], TIMEFORMAT)});\r\n }\r\n }\r\n\r\n render() {\r\n let error = this.props.required && this.props.showMissingErrors && isEmpty(this.state.value);\r\n return (\r\n \r\n );\r\n }\r\n\r\n handleTextChanged = (ev) => {\r\n if (this.props.readOnly) {\r\n return;\r\n }\r\n try {\r\n this.props.streng[this.props.field] = ev.format(TIMEFORMAT);\r\n this.setState({value: ev});\r\n activeProjectService.markDirty(this.props.field);\r\n }\r\n catch(error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Document wijzigen\"), t(\"doc_change_error\", {error: errExtractor.get(error)}));\r\n }\r\n }\r\n\r\n}\r\n\r\nStrengTimeField.propTypes = {\r\n field: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n streng: PropTypes.object, // a reference to the streng for which we are currently showing data.\r\n required: PropTypes.bool,\r\n showMissingErrors: PropTypes.bool, // when true, inputboxes that require a value but dont, should show an error\r\n readOnly: PropTypes.bool, // for viewer\r\n};\r\n\r\nStrengTimeField.defaultProps = {\r\n required: false\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(StrengTimeField));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { activeProjectService } from '../../../../services/active_project_service';\r\nimport {KeyboardDatePicker} from '@material-ui/pickers';\r\nimport momentUtils from \"@date-io/moment\";\r\nimport { isEmpty } from '../../../services/project_service';\r\nimport { errExtractor } from '../../../services/error_extractor';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\n\r\nconst moment = new momentUtils();\r\n\r\nconst styles = (theme) => ({\r\n textField: {\r\n width: '100%'\r\n }\r\n});\r\n\r\nconst DATEFORMAT = \"YYYY-MM-DD\";\r\nconst DISPDATEFORMAT = \"DD/MM/YYYY\";\r\n\r\n\r\nclass StrengDateField extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n value: props.streng ? moment.parse(props.streng[props.field], DATEFORMAT) : null\r\n }\r\n\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if ((prevProps.field !== this.props.field || prevProps.streng !== this.props.streng) && this.props.streng) {\r\n this.setState({value: moment.parse(this.props.streng[this.props.field], DATEFORMAT)});\r\n }\r\n }\r\n\r\n render() {\r\n let error = this.props.required && this.props.showMissingErrors && isEmpty(this.state.value);\r\n return (\r\n \r\n );\r\n }\r\n\r\n handleTextChanged = (ev) => {\r\n if (this.props.readOnly) {\r\n return;\r\n }\r\n try {\r\n this.props.streng[this.props.field] = ev.format(DATEFORMAT);\r\n this.setState({value: ev});\r\n activeProjectService.markDirty(this.props.field);\r\n }\r\n catch(error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Document wijzigen\"), t(\"doc_change_error\", {error: errExtractor.get(error)}));\r\n }\r\n }\r\n\r\n}\r\n\r\nStrengDateField.propTypes = {\r\n field: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n streng: PropTypes.object, // a reference to the streng for which we are currently showing data.\r\n required: PropTypes.bool,\r\n showMissingErrors: PropTypes.bool, // when true, inputboxes that require a value but dont, should show an error\r\n readOnly: PropTypes.bool, // for viewer\r\n};\r\n\r\nStrengDateField.defaultProps = {\r\n required: false\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(StrengDateField));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport CrosshairsGps from 'mdi-material-ui/CrosshairsGps';\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { activeProjectService } from '../../../../services/active_project_service';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { isEmpty } from '../../../services/project_service';\r\nimport { errExtractor } from '../../../services/error_extractor';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport { gpsService } from '../../../../services/gps/gps_service';\r\n\r\nconst styles = (theme) => ({\r\n textField: {\r\n width: '100%'\r\n },\r\n row : {\r\n flexDirection: 'row', \r\n display:'flex', \r\n alignItems: 'center', \r\n justifyContent:'flex-end'\r\n }\r\n});\r\n\r\n/**\r\n * lambert conversion: https://github.com/vraida/Lambert-projection/blob/master/python_implementation/lib/lambert.py\r\n */\r\nclass StrengInfoCoordinatesField extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n value: props.streng ? props.streng[props.field] : null\r\n }\r\n\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if ((prevProps.field !== this.props.field || prevProps.streng !== this.props.streng) && this.props.streng) {\r\n this.setState({value: this.props.streng[this.props.field]});\r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n let error = this.props.required && this.props.showMissingErrors && isEmpty(this.state.value);\r\n return (\r\n
\r\n \r\n {(!this.props.readOnly) && \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n
\r\n );\r\n }\r\n\r\n handleGetCoordinates = async () => {\r\n const { t } = this.props;\r\n try {\r\n const pos = await gpsService.currentPos();\r\n if (pos) {\r\n this.storeValue(`${pos.lat}, ${pos.lon}`);\r\n }\r\n else {\r\n dialogService.error(t(\"Gps\"), t(\"invalid_gps_cooordinates\"));\r\n }\r\n }\r\n catch(error) {\r\n dialogService.error(t(\"Gps\"), errExtractor.get(error));\r\n }\r\n }\r\n\r\n handleTextChanged = (ev) => {\r\n this.storeValue(ev.target.value);\r\n }\r\n\r\n storeValue(value) {\r\n try {\r\n this.props.streng[this.props.field] = value;\r\n this.setState({value: value});\r\n activeProjectService.markDirty(this.props.field);\r\n }\r\n catch(error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Document wijzigen\"), t(\"doc_change_error\", {error: errExtractor.get(error)}));\r\n }\r\n }\r\n\r\n}\r\n\r\nStrengInfoCoordinatesField.propTypes = {\r\n field: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n streng: PropTypes.object, // a reference to the streng for which we are currently showing data.\r\n required: PropTypes.bool,\r\n showMissingErrors: PropTypes.bool, // when true, inputboxes that require a value but dont, should show an error\r\n readOnly: PropTypes.bool, // for viewer\r\n};\r\n\r\nStrengInfoCoordinatesField.defaultProps = {\r\n required: false\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(StrengInfoCoordinatesField));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport TwoColLayout from '../../../layouts/two_col_layout_component';\r\nimport StrengInfoComboBox from './streng_info_combobox';\r\nimport StrengInfoTextField from './streng_info_textfield';\r\nimport StrengInfoAutoComplete from './streng_info_autocomplete_component';\r\nimport StrengInfoGPSAutoComplete from './streng_info_gps_autocomplete_component';\r\nimport StrengInfoNumberAutoLidar from './streng_info_number_autoLidar_component';\r\nimport StrengInfoNumberField from './streng_info_numberfield';\r\nimport StrengTimeField from './streng_info_timepicker';\r\nimport StrengDateField from './streng_info_datepicker';\r\nimport StrengInfoCoordinatesField from './streng_info_coordinates_field';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { PIPE_INSPECTIONS } from '../../../../shared_components/services/project_service';\r\nimport { \r\n directionOptions\r\n,locationTypeOptions\r\n,propertyOwnershipOptions\r\n,axialRefPointOptions\r\n,storageVideoOptions\r\n,positionVideoImagesOptions\r\n,shapeOptions\r\n,shapeOptionsM\r\n,materialOptions\r\n,liningTypeOptions\r\n,liningMaterialOptions\r\n,sewerTypeOptions\r\n,sewerUsageOptions\r\n,sewerUsageOptionsM\r\n,cleaningOptions\r\n,connectionTypeOptions\r\n//,surfaceHardeningOptions\r\n,precipitationOptions\r\n,temperatureOptions\r\n,yearOfCommisioningOptions\r\n,verticalRefPointOptions\r\n,CircularRefPointOptions\r\n,inspectionStageOptions\r\n,stepTypeOptions\r\n,stepMaterialOptions\r\n,atmosphereOptions\r\n,inspectionMethodOptions\r\n,inspectionMethodOptions_S\r\n,inspectionMethodOptions_M\r\n,fluidControlOptions } from '../../../services/constants';\r\nimport { strandPropsService } from '../../../services/strand_props_service';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport { activeProjectService } from '../../../../services/active_project_service';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\nimport { configService } from '../../../../services/config_service';\r\n\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n height: '100%'\r\n },\r\n \r\n});\r\n\r\n\r\nclass StrengInfo extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = { \r\n \r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n let radioProps = null;\r\n if (this.props.readOnly) {\r\n radioProps = {'readOnly': 'readonly'};\r\n }\r\n const main = activeProjectService.data?.main;\r\n let stationaryDisabled = false;\r\n if (main) {\r\n stationaryDisabled = !(this.state.strengType === \"s\" || !['A', 'B'].includes(main.purpose)); // when purpose of inspection is A or B, stationary isnpections not allowed\r\n }\r\n const inspMethodOptions = this.props.strengType === \"s\" ? inspectionMethodOptions_S : inspectionMethodOptions;\r\n return (\r\n \r\n \r\n {t(\"Type\")}\r\n \r\n } label={t(\"Streng\")} />\r\n } label={t(\"Put\")} />\r\n } label={t(\"Stationair\")} disabled={stationaryDisabled} />\r\n \r\n \r\n \r\n {(PIPE_INSPECTIONS.includes(this.props.strengType)) &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n }\r\n {(this.props.strengType===\"m\") &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n }\r\n right={\r\n \r\n {(PIPE_INSPECTIONS.includes(this.props.strengType)) &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n }\r\n {(this.props.strengType===\"m\") &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n }\r\n \r\n\r\n }\r\n />\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n handleSerialChanged = (value) => {\r\n configService.set(\"general.lastEquipmentSerialNr\", value); // store value for use as default for next new project\r\n }\r\n\r\n handleWidthChanged = (value) => {\r\n strandPropsService.width = +value; // will auto prevent update if obs has changed this value cause of playback\r\n }\r\n\r\n handleHeightChanged = (value) => {\r\n strandPropsService.height = +value;\r\n }\r\n\r\n handleShapeChanged = (value) => {\r\n strandPropsService.shape = value;\r\n }\r\n\r\n handleSetType = (ev) => {\r\n const { t } = this.props;\r\n if (this.props.readOnly) { // not allowed to set in readonly mode\r\n return;\r\n }\r\n let value = ev.target.value;\r\n let typeStr = this.props.streng.type === \"dp\" ? t(\"Streng\") : t(\"Put\");\r\n let toStr = value === \"dp\" ? t(\"Streng\") : t(\"Put\");\r\n if (this.props.streng) {\r\n if (this.props.streng.observations.length > 0) {\r\n dialogService.askYesNo(t(\"Opgelet\"), \r\n t('Waarnemingen verwijderen?'), \r\n t(\"change_strengtype_qst\", {typeStr: typeStr, toStr: toStr}),\r\n (response) => {\r\n if (response.response === 0) {\r\n this.props.streng.type = value;\r\n this.props.streng.observations = [];\r\n if (value === \"s\") {\r\n this.props.streng.inspMethod = \"C\"; // only value allowed for this field when switching to stationary\r\n }\r\n else {\r\n this.props.streng.inspMethod = \"B\"; // this is the default in all other cases.\r\n }\r\n activeProjectService.markDirty();\r\n if (this.props.onTypeChanged) {\r\n this.props.onTypeChanged(value, []);\r\n }\r\n }\r\n }\r\n );\r\n }\r\n else {\r\n this.props.streng.type = value;\r\n if (this.props.onTypeChanged) {\r\n this.props.onTypeChanged(value);\r\n }\r\n activeProjectService.markDirty();\r\n }\r\n }\r\n }\r\n \r\n}\r\n\r\nStrengInfo.propTypes = {\r\n streng: PropTypes.object, // a reference to the streng for which we are currently showing data.\r\n readOnly: PropTypes.bool, // for viewer\r\n direction: PropTypes.string, // allowed values: \r\n onDirectionChanged: PropTypes.func,\r\n strengType: PropTypes.string, // dp = streng, m = put, determins which fields are visible\r\n showMissingErrors: PropTypes.bool, // when true, inputboxes that require a value but dont, should show an error\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(StrengInfo));","export let API_URL = process.env.REACT_APP_DEBUG ? \"http://localhost:8080\" : process.env.REACT_APP_IS_STAGING ? \"https://apistaging-dot-camera-inspector.appspot.com\" : \"https://api-dot-camera-inspector.appspot.com\";\r\n\r\n//export const API_URL = \"https://api-dot-camera-inspector.appspot.com\";\r\nexport let GOOGLE_API_KEY = \"AIzaSyDhVr0PFQ5yBzV6yb_GxYZae95aBO55R88\";\r\n\r\nexport function setServerConfig(api, google) {\r\n console.log(\"using api: \", api, \", google key: \", google);\r\n GOOGLE_API_KEY = google;\r\n API_URL = api;\r\n}\r\n\r\nexport const API_SERVICES = [\r\n {label: \"ITDV\", url: \"https://api-dot-camera-inspector.appspot.com\", googleKey: \"AIzaSyDhVr0PFQ5yBzV6yb_GxYZae95aBO55R88\"},\r\n {label: \"demo\", url: \"https://api-dot-cami-global.ew.r.appspot.com\", googleKey: \"AIzaSyDhVr0PFQ5yBzV6yb_GxYZae95aBO55R88\"}\r\n]","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport { withTranslation } from 'react-i18next';\r\n\r\n//icons\r\nimport ArrowUpCircleOutline from 'mdi-material-ui/ArrowUpCircleOutline';\r\nimport { Typography } from '@material-ui/core';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\nimport { toDegrees } from '../../../services/cal';\r\n\r\nconst DOT_DEGREES = 30; // 360 / 12 -> 12 dots, each dot occupies 30 degrees\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n position: 'relative'\r\n },\r\n rootExpanded: {\r\n position: 'relative',\r\n marginLeft:'16px'\r\n },\r\n errorRoot: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n borderBottom: 'thin solid red'\r\n },\r\n dotWrapper: {\r\n position: 'absolute',\r\n top: '0px',\r\n left: '0px',\r\n pointerEvents: 'none'\r\n },\r\n dot: {\r\n position: 'absolute',\r\n top: '0px',\r\n bottom: '0px',\r\n height: '6px',\r\n width: '6px',\r\n borderRadius: '6px',\r\n borderWidth: 'thin',\r\n borderStyle: 'solid',\r\n pointerEvents: 'auto',\r\n background: 'transparent',\r\n borderColor: 'transparent',\r\n backgroundClip: \"content-box\", // this makes the hit area larger so that hover reacts faster\r\n '&:hover': {\r\n background: '#d9d9d9',\r\n borderColor: '#d9d9d9',\r\n }\r\n },\r\n icon: {\r\n position: 'absolute',\r\n top: '3px',\r\n bottom: '3px',\r\n left: '3px',\r\n right: '3px'\r\n },\r\n requiredTxt: {\r\n position: 'absolute',\r\n top: '0px',\r\n left: '4px',\r\n height: '10px',\r\n lineHeight: 'initial',\r\n userSelect: 'none'\r\n }\r\n});\r\n\r\n\r\n\r\nclass DirectionSelector extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n }\r\n\r\n //this.rootRef = React.createRef();\r\n this.prevKey = null; // need 2 keypresses in sequence shortly after each other. this is to buffer the first one.\r\n this.keyPressTimeout = null; // timer for resetting the keypress, so we can stop it.\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.inner && this.props.inner.current) {\r\n this.props.inner.current.addEventListener(\"keydown\", this.onKeypress);\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.isExpanded !== this.props.isExpanded) {\r\n if (this.props.isExpanded) {\r\n this.props.inner.current.addEventListener(\"keydown\", this.onKeypress);\r\n }\r\n else {\r\n this.props.inner.current.removeEventListener(\"keydown\", this.onKeypress);\r\n }\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.props.inner && this.props.inner.current) {\r\n this.props.inner.current.removeEventListener(\"keydown\", this.onKeypress);\r\n }\r\n }\r\n\r\n render() {\r\n if (this.props.isExpanded) {\r\n return this.renderExpanded();\r\n }\r\n else {\r\n return this.renderCollapsed();\r\n }\r\n }\r\n\r\n renderExpanded() { \r\n const { t } = this.props;\r\n let dots = [];\r\n let dotStyle = null;\r\n for(let i = 0; i < 12; i++) {\r\n if (!!this.props.value && i === (this.props.value % 12)) { // need to do mod 12 cause 12 is top pos = 0\r\n dotStyle = {left:(this.props.size -6) /2, background: \"#3366ff\", borderColor: '#3366ff',};\r\n }\r\n else {\r\n dotStyle = {left:(this.props.size -6) /2};\r\n }\r\n dots.push(\r\n
\r\n
\r\n
\r\n );\r\n }\r\n let required = (this.props.required) ? * : null;\r\n //note: first div is given tabindex to make it focusable\r\n let body =
\r\n \r\n {dots}\r\n {required}\r\n
\r\n if (this.props.error) {\r\n body =
\r\n {body}\r\n
\r\n }\r\n if (!this.props.readOnly) {\r\n body = {body}\r\n }\r\n else {\r\n body = {body}\r\n }\r\n return (body);\r\n }\r\n\r\n /**\r\n * to calculate, use:\r\n * tan(angle) = opposite/adjacent\r\n * \r\n * where: opposite = y (relative to center)\r\n * adjacent = x (relative to center)\r\n * @param {object} ev event\r\n */\r\n handleClick = (ev) => {\r\n if (this.props.readOnly) { // no editing allowed in readonly mode\r\n return;\r\n }\r\n const center = this.props.size / 2;\r\n const pos = this.getRelMousePos(ev);\r\n let angle;\r\n if (pos.x > center && pos.y < center) { // Q1 (right-up)\r\n angle = 90 - toDegrees(Math.atan((pos.y - center) / (center - pos.x)));\r\n } else if (pos.x < center && pos.y < center) { // Q2 (left-up)\r\n angle = 270 + toDegrees(Math.atan((center - pos.y) / (center - pos.x)));\r\n } else if (pos.x < center && pos.y > center) { // Q3 (left-down)\r\n angle = 270 - toDegrees(Math.atan((center - pos.y) / (pos.x - center)));\r\n } else if (pos.x > center && pos.y > center) { // Q4 (right-down)\r\n angle = 90 + toDegrees(Math.atan((pos.y - center) / (pos.x - center)));\r\n }\r\n if (angle != undefined) {\r\n let value = Math.round(angle / DOT_DEGREES);\r\n if (value === 0) {\r\n value = 12;\r\n }\r\n this.props.onValueChanged(value, true);\r\n }\r\n else {\r\n if (pos.x === center) { // at 6 or 12 o clock\r\n if (pos.y >= center) { // 12\r\n this.props.onValueChanged(12, true);\r\n }\r\n else { // 6\r\n this.props.onValueChanged(6, true);\r\n }\r\n } else if (pos.y === center) { // at 9 or 3 o clock\r\n if (pos.x >= center) { // 3\r\n this.props.onValueChanged(3, true);\r\n } else { // 9\r\n this.props.onValueChanged(9, true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * calculate the mouse position relative to the canvas.\r\n * @param {object} ev mouse event data\r\n */\r\n getRelMousePos(ev) {\r\n let rect = this.props.inner.current.getBoundingClientRect();\r\n return { x: ev.clientX - rect.left, y: ev.clientY - rect.top };\r\n }\r\n\r\n renderCollapsed() {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n onKeypress =(event) => {\r\n if (this.props.readOnly) { // no editing allowed in readonly mode\r\n return;\r\n }\r\n let char = event.which || event.keyCode;\r\n if ((char >= 48 && char <= 57) || (char >= 96 && char <= 105) || char === 10 || char === 13) {\r\n if (this.prevKey == null) {\r\n if (this.keyPressTimeout) {\r\n clearTimeout(this.keyPressTimeout);\r\n }\r\n this.prevKey = event.key; //store the string part, easier to convert later on\r\n this.keyPressTimeout = setTimeout(() => {\r\n this.prevKey = null;\r\n this.keyPressTimeout = null;\r\n }, 2000); // after x seconds, first press is reset so it can be seen as a fresh start.\r\n }\r\n else {\r\n if (this.keyPressTimeout) {\r\n clearTimeout(this.keyPressTimeout);\r\n }\r\n let newValue;\r\n if ((char >= 48 && char <= 57) || (char >= 96 && char <= 105)) {\r\n newValue = +(this.prevKey + event.key); // make it an int, so we can verify the value\r\n }\r\n else {\r\n newValue = +(this.prevKey);\r\n }\r\n this.prevKey = null;\r\n if (newValue >= 1 && newValue <= 12) {\r\n this.props.onValueChanged(newValue, false);\r\n }\r\n else {\r\n dialogService.error(\"direction selection\", `value out of range: ${newValue}. Should be between 01 and 12`);\r\n }\r\n }\r\n }\r\n else if (char === 8 || char === 46) {\r\n this.prevKey = null;\r\n this.props.onValueChanged(null, true); // true is actually to indicate that it came from the mouse, we mimic this cause the actual result of it is that focus remains on the same object, which is what we want cause it got cleared.\r\n }\r\n }\r\n\r\n focus() {\r\n if (this.props.inner.current) {\r\n this.props.inner.current.focus();\r\n }\r\n }\r\n \r\n}\r\n\r\nDirectionSelector.propTypes = {\r\n isExpanded: PropTypes.bool,\r\n required: PropTypes.bool,\r\n size: PropTypes.number.isRequired,\r\n value: PropTypes.number,\r\n onValueChanged: PropTypes.func,\r\n onFocus: PropTypes.func,\r\n error: PropTypes.bool,\r\n readOnly: PropTypes.bool, // for viewer\r\n inner: PropTypes.any // a ref to the inner object. This is a replacement for {ref}\r\n};\r\n\r\n\r\n//function DirectionSelectorForwardRef(props, ref) {\r\n// return \r\n//}\r\n\r\n//export default React.forwardRef(withTranslation()(withStyles(styles)(DirectionSelectorForwardRef)));\r\nexport default withTranslation()(withStyles(styles)(DirectionSelector));","import { CHANGE_SHAPE_KEY } from './project_service';\r\n\r\nconst events = require('events');\r\n\r\n/**\r\n * keeps track of the current properties of the strand such as it's width.\r\n * Properties of a strand can change during the inspection, for instance the diameter of the strand.\r\n * Other parts of the system can be dependent of these values, for instance, the sonar needs to know\r\n * the diameter so that it can adjust it's scanning range. \r\n * \r\n * currently only for live-data, not for playback of recorded data\r\n */\r\n export class StrandPropsService {\r\n constructor() {\r\n this._width = 0;\r\n this._height = 0;\r\n this._shape = null;\r\n this.sizeIsLocked = false; // when set from running, will no longer trigger events or store value when root props are updated\r\n this.shapeIsLocked = false;\r\n this.lastPlayIdx = -1; // when playing data, updateFromObsList gets called often, this field keeps track of the last obs that was checked. is reset when the streng is changed or when the new current time is smaller than that of the last played obs\r\n this.events = new events.EventEmitter();\r\n }\r\n\r\n /**\r\n * called when a new/different strand has become active. allows us to init the object properly\r\n * and allow other to react to any possible changes. \r\n * @param {object} streng the strand that has become active\r\n */\r\n init(streng) {\r\n this.sizeIsLocked = false;\r\n this.shapeIsLocked = false;\r\n this.lastPlayIdx = -1;\r\n let changed = +streng.Width !== this._width || +streng.height !== this._height;\r\n if (changed) {\r\n this._width = +streng.Width;\r\n this._height = +streng.height;\r\n this.events.emit('size');\r\n }\r\n this._shape = streng.shape;\r\n }\r\n\r\n /**\r\n * called by documentControlService whenever the time has changed during play back or when in pause (but not recording)\r\n * note: it can be presumed that this function will be called consecutively with the same list for as long as init is not called.\r\n * so we can optimize and keep track of the last seen observation.\r\n * Also used for rendering the images in reports\r\n * @param {array} list list of observations\r\n * @param {number} time current time\r\n */\r\n updateFromObsList(streng, time) {\r\n if (streng) { // while resetting everything, this can happen\r\n const list = streng.observations;\r\n let newIdx = this.lastPlayIdx + 1;\r\n let obs = list[this.lastPlayIdx];\r\n if (obs && obs.time > time) { // we went back, so start from the beginning\r\n this.init(streng); // need to do a full init to make certain that the values are reset\r\n newIdx = 0;\r\n }\r\n obs = list[newIdx];\r\n while (newIdx < list.length && obs.time < time) {\r\n this.updateFromObs(obs);\r\n this.lastPlayIdx = newIdx;\r\n obs = list[++newIdx];\r\n }\r\n } \r\n }\r\n\r\n /**\r\n * \r\n * @param {object} obs the observation that cntains the data for the update\r\n * @param {bool} fromPlay when true, called because of a play action, when false, called because of an edit\r\n */ \r\n updateFromObs(obs, fromPlay=true) {\r\n const key = obs.values.join('-');\r\n if(key.startsWith(CHANGE_SHAPE_KEY)) {\r\n this._shape = obs.values[obs.values.length-1];\r\n this.setSizeFromObs(+obs.waarde1, +obs.waarde1, obs, fromPlay);\r\n }\r\n }\r\n\r\n get shape() {\r\n return this._shape;\r\n }\r\n set shape(value) {\r\n if (value === \"\") value = \"A\";\r\n if (value != this._shape && !this.shapeIsLocked) { \r\n this._shape = value;\r\n this.events.emit('size');\r\n }\r\n this.events.emit('sizeEdited');\r\n }\r\n\r\n set width(value) {\r\n if (value === \"\") value = 0;\r\n if (value != this._width && !this.sizeIsLocked) { \r\n this._width = +value;\r\n this.events.emit('size');\r\n }\r\n this.events.emit('sizeEdited');\r\n }\r\n get width() {\r\n return this._width;\r\n }\r\n\r\n set height(value) {\r\n if (value === \"\") value = 0;\r\n if (value != this._height && !this.sizeIsLocked) {\r\n this._height = +value;\r\n this.events.emit('size');\r\n }\r\n this.events.emit('sizeEdited');\r\n }\r\n get height() {\r\n return this._height;\r\n } \r\n\r\n get maxSize() {\r\n return this._width > this._height ? this._width : this._height;\r\n }\r\n\r\n /**\r\n * always stored, when called, locks the value\r\n */\r\n setSizeFromObs(width, height, obs, fromPlay=false) {\r\n this._width = width;\r\n this._height = height;\r\n this.sizeIsLocked = true;\r\n this.events.emit('size', obs);\r\n if (!fromPlay) { // when not from play, the change is becauseof an edit, so extra event for observation only interested in edits\r\n this.events.emit('sizeEdited');\r\n }\r\n }\r\n}\r\n\r\nexport const strandPropsService = new StrandPropsService();","import { LidarPlayerService } from '../../../../components/document/robot/sonarLidar/lidar_player_service';\r\nimport { getMinMaxFor } from '../../../services/lidar_data_service';\r\nimport { documentControlService } from '../../document_control_service';\r\n\r\n/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2022] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\nconst events = require('events');\r\nconst ROUND_TO_MM = 50; // nr of millimieters to round of to when calculating the new dimensions. this way we can have dimensions of 20x20 or 25x25 intead of 19x19\r\n\r\n\r\n/**\r\n * providers a generic interface to connect to for the ui elements. They connect to this service and\r\n * the service will provide data from the player or recorder, according to the settings. Data is also\r\n * buffered so that it wont play to fast (cause of too much data too fast or scrolling too fast).\r\n */\r\nclass LidarService {\r\n constructor() {\r\n this.data = []; // currenlty acitve line of sonar data\r\n this.angles = [];\r\n this.nextData = null;\r\n this.nextAngles = null;\r\n this.events = new events.EventEmitter(); // callback for visualizing the data.\r\n this.timer = null;\r\n this.provider = null; // when set, we can record data\r\n this.onWater = false; // for lidars that are used on a water service (need to do heigh*2)\r\n\r\n this.reverseProvider = null; // reference to a lidarPlayer service containing reverse data for the current regular provider. will be cleared when the provider is changed, needs to be set by the client for \r\n }\r\n\r\n /**\r\n * called when the robot recorder is initialized. Allows us to set the data provider.\r\n * @param {object} provider object that provides the data\r\n */\r\n init(provider) {\r\n if (this.provider !== provider) { // when first starting up, this can happen cause init is called when the backend tractor is started and the frontend robotClient is also started\r\n if (this.provider) {\r\n this.provider.onData = null; // remove any previous callbacks so we don't get duplicate data by accident\r\n }\r\n this.provider = provider;\r\n this.reverseProvider = null;\r\n this._normalizedData = null;\r\n if (provider) {\r\n this.provider.onData = this.handleData;\r\n if (this.provider.playCurrent) { // the recorder doesn't have a playCurrent\r\n this.provider.playCurrent(true); // when we init the data from the source, make certain we render the start picture correctly\r\n }\r\n this.onWater = this.provider.onWater;\r\n }\r\n else {\r\n this.onWater = false;\r\n }\r\n }\r\n }\r\n\r\n async loadReverseProvider(streng) {\r\n if(!this.reverseProvider) {\r\n const newService = new LidarPlayerService();\r\n await newService.load(streng, true);\r\n if (this.provider) {\r\n this.linkTimestamps(this.provider.data, newService.data);\r\n }\r\n this.reverseProvider = newService;\r\n }\r\n return this.reverseProvider;\r\n }\r\n\r\n /**\r\n * adds timestamps to the dest based on source.\r\n * @param {*} source provides timestamps\r\n * @param {lidarplayer} dest store timestamps\r\n */\r\n linkTimestamps(source, dest) {\r\n let srcIdx = 0;\r\n for(const rec of dest) {\r\n while(srcIdx < source.length && source[srcIdx].distance < rec.distance){\r\n srcIdx++;\r\n }\r\n if (srcIdx < source.length) {\r\n rec.timestamp = source[srcIdx].timestamp;\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n if (this.provider) {\r\n this.provider.onData = null;\r\n this.provider = null;\r\n }\r\n this.data = null;\r\n this._normalizedData = null;\r\n }\r\n\r\n handleData = (values, angles) => {\r\n if (!this.timer) { // use a timer to make certain we only update the ui in steps, not at every change.\r\n this.timer = setTimeout(() => {\r\n this.timer = null;\r\n if (this.nextData) { // if there are new values to send, do it now\r\n this.data = this.nextData;\r\n this.angles = this.nextAngles;\r\n this.events.emit(\"onLidarData\");\r\n this.nextData = null;\r\n this.nextAngles = null;\r\n }\r\n }, 100); // don't update the ui too often.\r\n this.data = values;\r\n this.angles = angles;\r\n this.events.emit(\"onLidarData\", values, angles);\r\n }\r\n else {\r\n this.nextData = values;\r\n this.nextAngles = angles;\r\n }\r\n }\r\n\r\n /**\r\n * tries to go to the specified location in the lidar data.\r\n * The exact lidar band is shown and the corresponding timestamp\r\n * is sent to the rest of the system.\r\n * @param {number} distance the distance to go to\r\n */\r\n tryGotoPos(distance) {\r\n this.events.emit(\"onGoto\", distance); // do first so that this is already udpated, if we do after jumptopos, timeupdate might be before the distanceupdate, which is bad\r\n if (documentControlService.controlState !== \"record\") {\r\n if (this.provider.isReversed) throw new Error(\"not yet supported\");\r\n const data = this.provider.data;\r\n for(let i=0; i< data.length; i++) {\r\n const rec = data[i];\r\n if (rec.distance >= distance) {\r\n this.events.emit('jumpToPos', rec.timestamp);\r\n //documentControlService.setCurrentTimestamp(rec.timestamp);\r\n setTimeout(() => {\r\n this.handleData(rec.values, rec.angles); // go to the exact location, do after setting the current timestamp cause that will also raise the event, but not necesarrily at the exact same location\r\n }, 250);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * get the height and width as reported by the lidar.\r\n * @returns {object} {width: 0.0, height: 0.0}\r\n */\r\n getDimensions() {\r\n let result = null;\r\n if (this.data && this.angles) {\r\n const {minX, maxX, minY, maxY} = getMinMaxFor(this.data, this.angles);\r\n const realWidth = (Math.abs(minX) + Math.abs(maxX)) * 1000; // convert from meters to mm\r\n const realHeight = (Math.abs(minY) + Math.abs(maxY)) * 1000;\r\n const roundedWidth = Math.round(realWidth / ROUND_TO_MM) * ROUND_TO_MM;\r\n let roundedHeight = Math.round(realHeight / ROUND_TO_MM) * ROUND_TO_MM;\r\n if (this.onWater) {\r\n roundedHeight *= 2;\r\n }\r\n result = {width: roundedWidth, height: roundedHeight};\r\n }\r\n return result;\r\n }\r\n\r\n}\r\n\r\nexport const lidarService = new LidarService();","\r\n/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n\r\n////////////////////////////////////////////////////////////////////\r\n//// ////\r\n//// Warning: all labels are used as indexes ////\r\n//// for translation. So don't change text directly ////\r\n//// in this file, but do it in the language files ////\r\n//// instead. ////\r\n//// ////\r\n////////////////////////////////////////////////////////////////////\r\n\r\n\r\nimport i18n from \"i18next\";\r\nimport { assetsService } from '../../services/assets_service';\r\nimport { configService } from \"../../services/config_service\";\r\nimport { dialogService } from \"../../services/dialog_service\";\r\nimport { errExtractor } from \"./error_extractor\";\r\n\r\nexport const inspectionMethodOptions = [\r\n { value: \"A\", label: \"Rechtstreekse inspectie van de afvoerleiding, man-inspectie\" }, \r\n { value: \"B\", label: \"Inspectie door een op afstand bediende tractor met camera\"}, \r\n { value: \"C\", label: \"Inspectie enkel vanuit de rioolput (vb. Stationaire inspectie (inzoomen))\"}\r\n];\r\n\r\nexport const inspectionMethodOptions_S = [\r\n { value: \"C\", label: \"Inspectie enkel vanuit de rioolput (vb. Stationaire inspectie (inzoomen))\"}\r\n];\r\n\r\nexport const inspectionMethodOptions_M = [\r\n { value: \"A\", label: \"Rechtstreekse inspectie van de afvoerleiding, man-inspectie\" }, \r\n { value: \"B\", label: \"Inspectie door een op afstand bediende tractor met camera\"}, \r\n { value: \"C\", label: \"Inspectie enkel vanuit de rioolput (vb. Stationaire inspectie (inzoomen))\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking CDE)\"}\r\n];\r\n\r\nexport const inspectionPurposeOptions = [\r\n { value: \"A\", label: \"Een eindcontrole van nieuwe aanleg\"}, \r\n { value: \"B\", label: \"Het einde van een garantieperiode\"}, \r\n { value: \"C\", label: \"Een routine inspectie van de toestand\"}, \r\n { value: \"D\", label: \"Het vermoeden van een structureel probleem\"}, \r\n { value: \"E\", label: \"Het vermoeden van een operationeel probleem\"}, \r\n { value: \"F\", label: \"Het vermoeden van een infiltratieprobleem\"}, \r\n { value: \"G\", label: \"De eindcontrole van renovatie of reparatie (renovatie, reparatie, reiniging)\"}, \r\n { value: \"H\", label: \"De eigendomsoverdracht\"}, \r\n { value: \"I\", label: \"Het plannen voor investering\"}, \r\n { value: \"J\", label: \"Een monsteronderzoek\"}, \r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking ADE)\"}\r\n];\r\n\r\nexport const inspectionPurposeOptions_S = [\r\n { value: \"C\", label: \"Een routine inspectie van de toestand\"}, \r\n { value: \"D\", label: \"Het vermoeden van een structureel probleem\"}, \r\n { value: \"E\", label: \"Het vermoeden van een operationeel probleem\"}, \r\n { value: \"F\", label: \"Het vermoeden van een infiltratieprobleem\"}, \r\n { value: \"G\", label: \"De eindcontrole van renovatie of reparatie (renovatie, reparatie, reiniging)\"}, \r\n { value: \"H\", label: \"De eigendomsoverdracht\"}, \r\n { value: \"I\", label: \"Het plannen voor investering\"}, \r\n { value: \"J\", label: \"Een monsteronderzoek\"}, \r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking ADE)\"}\r\n];\r\n\r\nvar inspectors = null;\r\n\r\n/**\r\n * load inspectors list\r\n * The file is loaded from the user's data folder. If the file\r\n * does not yet exist there, it is first copied from the appPath foldert\r\n * this is async\r\n */\r\nexport async function loadInspectorsList() {\r\n if (inspectors === null) {\r\n if (!configService.isViewer) { // viewers don't have access to any inspectors lists\r\n return new Promise((resolve, reject) => {\r\n assetsService.loadAsset('inspectors.json').then((data) => {\r\n inspectors = data;\r\n resolve(inspectors);\r\n }).catch((error) => {\r\n dialogService.error(window.title, i18n.t(\"inspector_list_load_failed\", {error: errExtractor.get(error)}));\r\n inspectors = [];\r\n resolve(inspectors);\r\n });\r\n });\r\n }\r\n else {\r\n inspectors = [];\r\n return Promise.resolve(inspectors);\r\n }\r\n }\r\n else {\r\n return Promise.resolve(inspectors);\r\n }\r\n}\r\n\r\n/**\r\n * returns the list of inspectors. \r\n * Should be loaded first with loadInspectorsList so that things can go in sync \r\n */\r\nexport function inspectorsList() {\r\n return inspectors ?? []; // when null, return empty list, this way, don't need to do anything for viewers/cloud\r\n}\r\n\r\nexport async function loadInspectorsListFromCloud() {\r\n const result = await assetsService.loadJSONFromCloud('inspectors.json');\r\n if (result) {\r\n inspectors = result;\r\n return result;\r\n }\r\n else {\r\n return null;\r\n }\r\n}\r\n\r\nexport async function saveInspectorsList(data) {\r\n await assetsService.saveAsset('inspectors.json', JSON.stringify(data));\r\n inspectors = data;\r\n}\r\n\r\nexport async function saveInspectorsListToCloud(data) {\r\n await assetsService.saveJSONToCloud('inspectors.json', data);\r\n}\r\n\r\n\r\nexport const directionOptions = [\r\n { value: \"A\", label: 'Stroomafwaarts'}, \r\n { value: \"B\", label: 'Stroomopwaarts'},\r\n { value: \"C\", label: \"Niet bekend\"}\r\n];\r\nexport const locationTypeOptions = [\r\n { value: \"A\", label: \"In een weg\"}, \r\n { value: \"B\", label: \"In een voetpad naast de weg\"}, \r\n { value: \"C\", label: \"In een berm naast de weg\"}, \r\n { value: \"D\", label: \"In een ander voetgangersgebied\"}, \r\n { value: \"E\", label: \"In een veld\"}, \r\n { value: \"F\", label: \"Op een eigendom met gebouwen\"}, \r\n { value: \"G\", label: \"In tuinen\"}, \r\n { value: \"H\", label: \"Onder een permanent gebouw\"}, \r\n { value: \"I\", label: \"Bosland\"}, \r\n { value: \"J\", label: \"Moeilijk toegankelijk (vb. autosnelweg of operationele spoorweg,....)\"}, \r\n { value: \"K\", label: \"Onder een waterweg (rivier, kanaal, …)\"}, \r\n { value: \"X\", label: \"Speciaal type gedefiniëerd door de opdrachtgevende instantie(vb. XA)\"}, \r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking ADE)\"}\r\n];\r\nexport const propertyOwnershipOptions = [\r\n { value: \"A\", label: 'Openbare eigendom'}, \r\n { value: \"C\", label: 'Privé-eigendom'},\r\n { value: \"C\", label: \"Niet bekend\"}\r\n];\r\nexport const axialRefPointOptions = [\r\n { value: \"A\", label: \"De binnenzijde van de wand van de beginput (cf. Nat. Bijlage)\"},\r\n { value: \"B\", label: \"De bovenkant van het eind van de leiding binnen het beginpunt (cf. Nat. Bijlage)\"},\r\n { value: \"C\", label: \"Het midden van de beginrioolput (≠ Midden v/h deksel)\"},\r\n { value: \"D\", label: \"Het midden van de inkomende en uitgaande buizen, gemeten in het stroomprofiel\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking ADE) (vb. Midden v/h deksel)\"},\r\n]\r\n\r\nexport const storageVideoOptions = [\r\n { value: \"A\", label: \"VHS - videocassette band\"}, \r\n { value: \"B\", label: \"Video CD\"}, \r\n { value: \"C\", label: \"Video DVD\"}, \r\n { value: \"D\", label: \"Data CD\"}, \r\n { value: \"E\", label: \"Data DVD\"}, \r\n { value: \"F\", label: \"Externe HD\"}, \r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking ADE) (vb. Externe harddisk)\"},\r\n];\r\nexport const storageImagesOptions = [\r\n { value: \"A\", label: \"Fotofilm (papierafdruk)\"}, \r\n { value: \"C\", label: \"Windows Meta File - WMF\"}, \r\n { value: \"D\", label: \"Grafic Image File - GIF\"}, \r\n { value: \"E\", label: \"JPEG\"}, \r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking ADE) (vb. Externe harddisk)\"}, \r\n\r\n];\r\nexport const positionVideoImagesOptions = [\r\n { value: \"A\", label: \"De opnametijd vanaf het begin van de band in HH:MM:SS\"}, \r\n { value: \"B\", label: \"Een apparaatafhankelijke numerieke teller\"}, \r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking ADE)\"}\r\n\r\n];\r\nexport const shapeOptions = [\r\n { value: \"A\", label: \"Rond\"}, \r\n { value: \"B\", label: \"Rechthoekig\"}, \r\n { value: \"C\", label: \"Eivormig\"}, \r\n { value: \"D\", label: \"U-vormig\"}, \r\n { value: \"E\", label: \"Boogvormig\"}, \r\n { value: \"F\", label: \"Ovaal\"}, \r\n { value: \"X\", label: \"Plaatselijke doorsnede- code, door beheerder voorafgegaan door een X (bijv. XA)\"}, \r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking ADE)\"}\r\n];\r\n\r\nexport const shapeOptionsM = [\r\n { value: \"A\", label: \"Rechthoekig\"},\r\n { value: \"B\", label: \"Rond\"},\r\n { value: \"C\", label: \"Driehoekig\"},\r\n { value: \"D\", label: \"Ovaal\"},\r\n { value: \"E\", label: \"Zeshoekig\"},\r\n { value: \"F\", label: \"Achthoekig\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking CDE)\"}, \r\n]\r\n\r\nexport const materialOptions = [\r\n { value: \"AA\", label: \"Asbest cement\"},\r\n { value: \"AB\", label: \"Bitumen\"},\r\n { value: \"AC\", label: \"Gespoten vezels\"},\r\n { value: \"AD\", label: \"Baksteen\"},\r\n { value: \"AE\", label: \"Gebakken klei (gres)\"},\r\n { value: \"AF\", label: \"Cementmortel\"},\r\n { value: \"AG\", label: \"Beton\"},\r\n { value: \"AH\", label: \"Gewapend beton\"},\r\n { value: \"AI\", label: \"Opgespoten beton\"},\r\n { value: \"AJ\", label: \"Betonnen segmenten\"},\r\n { value: \"AK \", label: \"Vezelcement\"},\r\n { value: \"AL\", label: \"Vezelversterkte kunststoffen\"},\r\n { value: \"AM\", label: \"Gietijzer\"},\r\n { value: \"AN\", label: \"Grijs gietijzer\"},\r\n { value: \"AO\", label: \"Smeedijzer\"},\r\n { value: \"AP\", label: \"Staal\"},\r\n { value: \"AQ\", label: \"Ongeïdentificeerd type ijzer of staal\"},\r\n { value: \"AR\", label: \"Metselwerk (Bepleisterd)\"},\r\n { value: \"AS\", label: \"Metselwerk (Onbepleisterd)\"},\r\n { value: \"AT\", label: \"Epoxy\"},\r\n { value: \"AU\", label: \"Polyester\"},\r\n { value: \"AV\", label: \"Polyetheen PE\"},\r\n { value: \"AW\", label: \"Polypropyleen PP\"},\r\n { value: \"AX\", label: \"PVC-U\"},\r\n { value: \"AY\", label: \"Ongeïdentificeerd type kunststof\"},\r\n { value: \"AZ\", label: \"Ongeïdentificeerd materiaal\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking ADE)\"}\r\n];\r\nexport const liningTypeOptions = [\r\n { value: \"\", label: \"\"},\r\n { value: \"A\", label: \"Binnenbekleding aangebracht tijdens fabricage\"},\r\n { value: \"B\", label: \"Opgespoten binnenbekleding (vb. mortel of spuitbeton)\"},\r\n { value: \"C\", label: \"Ter plaatse uitgeharde binnenbekleding (vb. TUB)\"},\r\n { value: \"D\", label: \"De binnenbekleding bestaat uit segmenten (vb. Schelpdelen GVP, keramische tegels)\"},\r\n { value: \"E\", label: \"Binnenbekleding door aparte buizen ('kort' of 'lang')\"},\r\n { value: \"F\", label: \"Binnenbekleding d.m.v. een doorlopende buis (vb. Aan elkaar gelaste buizen )\"},\r\n { value: \"G\", label: \"Strak aansluitende binnenbekleding (vb. Voorgedeformeerde leiding [geplooid of uitgerokken] )\"},\r\n { value: \"H\", label: \"Spiraalvormig gewikkelde binnenbekleding (Spiraalwikkelbuis)\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking ADE)\"},\r\n];\r\nexport const liningMaterialOptions = [\r\n { value: \"\", label: \"\"},\r\n { value: \"AA\", label: \"Asbest cement\"},\r\n { value: \"AB\", label: \"Bitumen\"},\r\n { value: \"AC\", label: \"Gespoten vezels\"},\r\n { value: \"AD\", label: \"Baksteen\"},\r\n { value: \"AE\", label: \"Gebakken klei (gres)\"},\r\n { value: \"AF\", label: \"Cementmortel\"},\r\n { value: \"AG\", label: \"Beton\"},\r\n { value: \"AH\", label: \"Gewapend beton\"},\r\n { value: \"AI\", label: \"Opgespoten beton\"},\r\n { value: \"AJ\", label: \"Betonnen segmenten\"},\r\n { value: \"AK \", label: \"Vezelcement\"},\r\n { value: \"AL\", label: \"Vezelversterkte kunststoffen\"},\r\n { value: \"AM\", label: \"Gietijzer\"},\r\n { value: \"AN\", label: \"Grijs gietijzer\"},\r\n { value: \"AO\", label: \"Smeedijzer\"},\r\n { value: \"AP\", label: \"Staal\"},\r\n { value: \"AQ\", label: \"Ongeïdentificeerd type ijzer of staal\"},\r\n { value: \"AR\", label: \"Metselwerk (Bepleisterd)\"},\r\n { value: \"AS\", label: \"Metselwerk (Onbepleisterd)\"},\r\n { value: \"AT\", label: \"Epoxy\"},\r\n { value: \"AU\", label: \"Polyester\"},\r\n { value: \"AV\", label: \"Polyetheen PE\"},\r\n { value: \"AW\", label: \"Polypropyleen PP\"},\r\n { value: \"AX\", label: \"PVC-U\"},\r\n { value: \"AY\", label: \"Ongeïdentificeerd type kunststof\"},\r\n { value: \"AZ\", label: \"Ongeïdentificeerd materiaal\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking ADE)\"}\r\n];\r\nexport const sewerTypeOptions = [\r\n { value: \"A\", label: \"Afvoerleiding of riool onder vrij verval\"},\r\n { value: \"B\", label: \"Persleiding\"},\r\n { value: \"C\", label: \"Vacuümleiding\"},\r\n\r\n];\r\nexport const sewerUsageOptions = [\r\n { value: \"A\", label: \"Riolering ontworpen om alleen afvalwater af te voeren\"},\r\n { value: \"B\", label: \"Riolering ontworpen om alleen hemelwater af te voeren\"},\r\n { value: \"C\", label: \"Gecombineerde riolering (Gemengd stelsel)\"},\r\n { value: \"D\", label: \"Industriële riolering\"},\r\n { value: \"E\", label: \"Een overkluisde waterloop\"},\r\n { value: \"F\", label: \"Drainage van ondergrond of landbouwperceel\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking ADE)\"},\r\n];\r\n\r\nexport const sewerUsageOptionsM = [\r\n { value: \"A\", label: \"Riolering ontworpen om alleen afvalwater af te voeren\"},\r\n { value: \"B\", label: \"Riolering ontworpen om alleen hemelwater af te voeren\"},\r\n { value: \"C\", label: \"Een gecombineerde riolering (Gemengd stelsel)\"},\r\n { value: \"D\", label: \"Riool voor behandeld afvalwater\"},\r\n { value: \"E\", label: \"Een overkluisde riolering\"},\r\n { value: \"F\", label: \"De riool of inspectieput bevat 2 systemen, één voor hemelwater en één voor afvalwater\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking CDE)\"},\r\n];\r\n\r\nexport const cleaningOptions = [\r\n { value: \"A\", label: 'Gereinigd'}, \r\n { value: \"B\", label: 'niet gereinigd'}\r\n];\r\nexport const connectionTypeOptions = [\r\n { value: \"A\", label: \"Rioolput\"},\r\n { value: \"B\", label: \"Inspectieput\"},\r\n { value: \"C\", label: \"Toegangspunt t.b.v. reiniging\"},\r\n { value: \"D\", label: \"Kijkgat\"},\r\n { value: \"E\", label: \"Uitlaat\"},\r\n { value: \"F\", label: \"Sifon ter hoogte van de inspectieput\"},\r\n { value: \"G\", label: \"Sifon ter hoogte van het kijkgat\"},\r\n { value: \"H\", label: \"Sifon zonder toegang\"},\r\n { value: \"X\", label: \"Speciaal type gedefiniëerd door de opdrachtgevende instantie(vb. XA)\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking CDE)\"}\r\n]\r\n\r\n//export const surfaceHardeningOptions = ['Steenslag'];\r\nexport const precipitationOptions = [\r\n { value: \"A\", label: \"Geen neerslag\"},\r\n { value: \"B\", label: \"Regen\"},\r\n { value: \"C\", label: \"Smeltende sneeuw of ijs\"}\r\n];\r\nexport const fluidControlOptions = [\r\n { value: \"A\", label: \"Geen maatregelen genomen\"},\r\n { value: \"B\", label: \"Stroomopwaarts geblokkeerd\"},\r\n { value: \"C\", label: \"Stroomopwaarts gedeeltelijk geblokkeerd\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking ADE)\"},\r\n];\r\nexport const temperatureOptions = [\r\n { value: \"A\", label: 'Boven het vriespunt'}, \r\n { value: \"B\", label: 'onder het vriespunt'}\r\n];\r\n\r\nexport const yearOfCommisioningOptions = [\r\n { value: \"year\", label: 'Specifiek jaar (vul verder in hieronder)'},\r\n { value: \"2020-2029\", label: '2020-2029'},\r\n { value: \"2010-2019\", label: '2010-2019'},\r\n { value: \"2000-2009\", label: '2000-2009'},\r\n { value: \"1990-1999\", label: '1990-1999'},\r\n { value: \"1980-1989\", label: '1980-1989'},\r\n { value: \"1970-1979\", label: '1970-1979'},\r\n { value: \"1960-1969\", label: '1960-1969'},\r\n { value: \"1950-1959\", label: '1950-1959'},\r\n { value: \"BEFR_1949\", label: 'voor 1949'},\r\n { value: \"*UNKNOWN*\", label: 'Onbekend'},\r\n];\r\n\r\nexport const verticalRefPointOptions = [\r\n { value: \"A\", label: \"De bodem van de laagst gelegen uitgaande buis\"}, \r\n { value: \"B\", label: \"Het deksel\"},\r\n { value: \"C\", label: \"Het nationale referentiepunt\"},\r\n { value: \"D\", label: \"Lokaal referentiepunt\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking CDE)\"}\r\n];\r\n\r\nexport const CircularRefPointOptions = [\r\n { value: \"A\", label: \"De laagst gelegen uitgaande buis = 12 uur (cf. Nat. bijlage)\"},\r\n { value: \"B\", label: \"De laagst gelegen uitgaande buis = 6 uur\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking CDE)\"}\r\n];\r\n\r\nexport const inspectionStageOptions = [\r\n { value: \"A\", label: \"Van opdrachtgevende instantie naar de inspecteur\"},\r\n { value: \"B\", label: \"Van inspecteur naar opdrachtgevende instantie\"},\r\n { value: \"C\", label: \"Interne opvolging bij de beherende instantie\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking CDE)\"},\r\n];\r\n\r\nexport const stepTypeOptions = [\r\n { value: \"A\", label: \"Klimijzers met enkele breedte - klimijzers breed genoeg voor één voet\"},\r\n { value: \"B\", label: \"Klimijzers met dubbele breedte - breed genoeg voor twee voeten\"},\r\n { value: \"C\", label: \"Ladder\"},\r\n { value: \"D\", label: \"Teenholtes (prefab holtes in de wand)\"},\r\n { value: \"E\", label: \"Geen voorziening\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking CDE)\"}\r\n];\r\n\r\nexport const stepMaterialOptions = [\r\n { value: \"\", label: \"\"},\r\n { value: \"A\", label: \"Ijzer\"},\r\n { value: \"B\", label: \"Gegalvaniseerd staal\"},\r\n { value: \"C\", label: \"Roestvrij staal\"},\r\n { value: \"D\", label: \"Met kunststof bekleed materiaal\"},\r\n { value: \"E\", label: \"Kunststof (Synthetisch materiaal)\"},\r\n { value: \"F\", label: \"Aluminium\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking CDE)\"},\r\n];\r\n\r\nexport const atmosphereOptions = [\r\n { value: \"\", label: \"\"},\r\n { value: \"A\", label: \"Zuurstoftekort\"},\r\n { value: \"B\", label: \"Zwavelwaterstof\"},\r\n { value: \"C\", label: \"Methaan\"},\r\n { value: \"D\", label: \"Ander ontvlambaar gas\"},\r\n { value: \"E\", label: \"Geen gevaarlijke atmosfeer\"},\r\n { value: \"Z\", label: \"Anders (+ Algemene opmerking CDE)\"}\r\n];\r\n\r\n\r\nexport const descriptiveLocOptions = [\r\n { value: \"A\", label: \"Deksel en raam\"},\r\n { value: \"B\", label: \"Stelconstructie\"},\r\n { value: \"C\", label: \"Schacht\"},\r\n { value: \"D\", label: \"Kegelstuk\"},\r\n { value: \"E\", label: \"Reductieplaat\"},\r\n { value: \"G\", label: \"Bordes\"},\r\n { value: \"G\", label: \"Kamer\"},\r\n { value: \"H\", label: \"Banket\"},\r\n { value: \"I\", label: \"Stroomprofiel\"},\r\n { value: \"J\", label: \"Bodem\"}\r\n]\r\n\r\n\r\n/**\r\n * returns the label for the specified value or ''.\r\n * @param {string} value the value to search for (ex 'A')\r\n * @param {array of objects} list list of value-label pairs\r\n */\r\nexport function getLabel(value, list) {\r\n if (list && value) {\r\n let found = list.find(x => x.value === value);\r\n if (found) return i18n.t(found.label);\r\n }\r\n return \"\";\r\n}","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nexport function sleep(ms) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n}\r\n\r\nexport function passTick() {\r\n return new Promise(resolve => setImmediate(resolve));\r\n}","import { configService } from \"../../services/config_service\";\r\nimport { API_URL } from \"./server_config_service\";\r\nimport i18n from \"i18next\";\r\nimport { getHeaders } from './fetch_services';\r\nimport { dialogService } from \"../../services/dialog_service\";\r\n\r\nclass UserService {\r\n constructor() {\r\n this.user = null;\r\n }\r\n\r\n Editor = \"inspector\";\r\n Viewer = \"viewer\";\r\n\r\n getCurrentUser() {\r\n if (!this.user) {\r\n this.user = configService.get('user');\r\n //FIX: temp solution for testing\r\n //this.user = {id: \"1\", firstName: 'tester', lastName: \"last\", email: \"test@tester.com\", role: \"inspector\", companyId: 1, avatar: \"\"};\r\n }\r\n return this.user;\r\n }\r\n\r\n /**\r\n * get the user's details from the cloud with the specified id.\r\n * can be used to get newest rec for current user.\r\n */\r\n async getUser(id) {\r\n return new Promise((resolve, reject) => {\r\n fetch(`${API_URL}/users/${id}`, {method: 'GET', mode: 'cors', headers: getHeaders()})\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n console.log(data);\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n }\r\n\r\n /**\r\n * gets all the users related to the same company as the current user.\r\n */\r\n async getUsers() {\r\n return new Promise((resolve, reject) => {\r\n const curUser = this.getCurrentUser();\r\n if (!curUser.companyId) {\r\n reject(\"not_linked_company\");\r\n return;\r\n }\r\n fetch(`${API_URL}/company/${curUser.companyId}/users`, {method: 'GET', mode: 'cors', headers: getHeaders()})\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n console.log(data);\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n }\r\n\r\n async tryAddUserToCompany(user) {\r\n const curUser = this.getCurrentUser();\r\n if (!curUser.companyId) {\r\n throw new Error(\"not_linked_company\");\r\n }\r\n const result = await fetch(`${API_URL}/company/${curUser.companyId}/users`, {method: 'POST', mode: 'cors', body: JSON.stringify(user), headers: getHeaders()})\r\n if (result.status === 200) {\r\n const data = await result.json();\r\n return data;\r\n }\r\n throw new Error(i18n.t(\"invalid response from server\"));\r\n }\r\n\r\n async getCompany() {\r\n const curUser = this.getCurrentUser();\r\n const companyId = curUser.companyId ? curUser.companyId : curUser.invitedTo;\r\n if (!companyId) {\r\n throw new Error(\"not_linked_company\");\r\n }\r\n const result = await fetch(`${API_URL}/company/${companyId}`, {method: 'GET', mode: 'cors', headers: getHeaders()})\r\n if (result.status === 200) {\r\n return await result.json();\r\n }\r\n else {\r\n const err = await result.json();\r\n throw new Error(err.message);\r\n }\r\n //throw new Error(i18n.t(\"invalid response from server\"));\r\n }\r\n\r\n async deleteUser(id) {\r\n \r\n const result = await fetch(`${API_URL}/users/${id}`, {method: 'DELETE', mode: 'cors', headers: getHeaders()})\r\n if (result.status === 200) {\r\n return await result.json();\r\n }\r\n else {\r\n const err = await result.json();\r\n throw new Error(err.message);\r\n }\r\n }\r\n\r\n /**\r\n * updates details of the current user's account.\r\n * @param {object} user the user data that needs to be changed\r\n * @param {string} id the id to save the data under\r\n */\r\n async saveUser(user, id) {\r\n return new Promise((resolve, reject) => {\r\n if (!id) { reject(\"no id\"); }\r\n fetch(`${API_URL}/users/${id}`, {method: 'PUT', mode: 'cors', body: JSON.stringify(user), headers: getHeaders()})\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n console.log(data);\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n }\r\n\r\n async changePwd(userId, newPwd) {\r\n return new Promise((resolve, reject) => {\r\n if (!userId) { reject(\"no id\"); }\r\n const data = {password: newPwd};\r\n fetch(`${API_URL}/users/${userId}/pwd`, {method: 'PUT', mode: 'cors', body: JSON.stringify(data), headers: getHeaders()})\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n console.log(data);\r\n reject(data ?? result.statusText ?? i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n }\r\n\r\n setCurrentUser(user) {\r\n this.user = user;\r\n configService.set('user', user);\r\n }\r\n\r\n clearCurrentUser() {\r\n configService.clear('user');\r\n this.user = null;\r\n }\r\n\r\n /**\r\n * checks if the user was invited to join a company, and if so resolves the question.\r\n * @param {object} user user object\r\n */\r\n async verifyUserInvitation(user) {\r\n if (user && user.invitedTo && user.id) {\r\n user = {...user}; // make a copy of user, \r\n const company = await this.getCompany();\r\n return new Promise((resolve, reject) => {\r\n dialogService.askYesNo(i18n.t(\"Invitation\"), i18n.t(\"Invitation\"), i18n.t(\"user_invited_company\", {company: company.name}), (result) => {\r\n if (result.response === 0) {\r\n user.companyId = user.invitedTo;\r\n //dont reset invitedTo, tis is done on server and is needed to let server know this update needs to be done\r\n }\r\n else {\r\n user.invitedTo = null; // reset when request rejected, so we dont try again.\r\n }\r\n this.saveUser(user, user.id).then(() => { // always update, if the user rejected the request, we remove the request itself\r\n delete user.invitedTo;\r\n resolve();\r\n }).catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport const userService = new UserService();","import { userService } from \"./user_service\";\r\n\r\n//this file contains some helper functions for fetch.\r\nexport function getHeaders(authorised = true) {\r\n if (authorised === true) {\r\n if (userService.user) {\r\n return {\r\n 'authorization': `Bearer ${userService.user.token}`,\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json'\r\n };\r\n }\r\n else {\r\n throw new Error(\"not logged in\");\r\n }\r\n }\r\n else {\r\n return new Headers({\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json'\r\n });\r\n }\r\n}\r\n\r\nexport function getCsvHeaders(authorised = true) {\r\n if (authorised === true) {\r\n if (userService.user) {\r\n return new Headers({\r\n 'Authorization': `${userService.user.token}`,\r\n Accept: 'application/json',\r\n 'Content-Type': 'text/csv'\r\n });\r\n }\r\n else {\r\n throw new Error(\"not logged in\");\r\n }\r\n }\r\n else {\r\n return new Headers({\r\n Accept: 'application/json',\r\n 'Content-Type': 'text/csv'\r\n });\r\n }\r\n}\r\n\r\nexport function getOctStrHeaders(authorised = true) {\r\n if (authorised === true) {\r\n if (userService.user) {\r\n return new Headers({\r\n 'Authorization': `${userService.user.token}`,\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/octet-stream'\r\n });\r\n }\r\n else {\r\n throw new Error(\"not logged in\");\r\n }\r\n }\r\n else {\r\n return new Headers({\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/octet-stream'\r\n });\r\n }\r\n}","import React from 'react';\r\nimport SvgIcon from '@material-ui/core/SvgIcon';\r\n\r\n\r\n\r\nexport function NoClutchIcon(props) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nexport function LeftSideIcon(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport function RightSideIcon(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport function TopSideIcon(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\n\r\nexport function DuoHorView(props) {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nexport function TripleHorView(props) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport function TopLargeDuoBottomHorView(props) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport function LayoutMore(props) {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\n\r\nexport function SonarAndLidarOverlay(props) {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nexport function LidarView(props) {\r\n return (\r\n \r\n \r\n\r\n \r\n );\r\n}\r\n\r\nexport function LidarRollout(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nexport function SonarView(props) {\r\n return (\r\n \r\n \r\n\r\n \r\n );\r\n}\r\n\r\nexport function Lidar(props) {\r\n return (\r\n \r\n \r\n\r\n \r\n );\r\n}\r\n\r\nexport const TopTractorIcon = ({ fill, size, transform }) => (\r\n \r\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 const FrontTractorIcon = ({ fill, size, transform }) => (\r\n \r\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 const SideTractrorIcon = ({ fill, size, transform }) => (\r\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 const FrontCamIcon = ({ fill, size, transform }) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\n\r\n\r\nexport const TopCamIcon = ({ fill, size, transform }) => (\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport const SideCamIcon = ({ fill, size, transform }) => (\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport function StartEndLabel(props) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n );\r\n}\r\n\r\nexport function StartEndLabelOutline(props) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n );\r\n}\r\n\r\n\r\nexport function SeriesWide(props) {\r\n return (\r\n \r\n \r\n\r\n \r\n );\r\n}\r\n\r\nexport function SeriesDouble(props) {\r\n return (\r\n \r\n \r\n\r\n \r\n\r\n \r\n );\r\n}\r\n\r\n\r\nexport const ArrowUpBoldPath = \"M15,20H9V12H4.16L12,4.16L19.84,12H15V20Z\";\r\nexport const ArrowDownBoldPath = \"M9,4H15V12H19.84L12,19.84L4.16,12H9V4Z\";\r\nexport const ArrowRightBoldPath = \"M4,15V9H12V4.16L19.84,12L12,19.84V15H4Z\";\r\nexport const ArrowLeftBoldPath = \"M20,9V15H12V19.84L4.16,12L12,4.16V9H20Z\";\r\nexport const StopPath = \"M18,18H6V6H18V18Z\";\r\nexport const MeasureArrow = \"m 3,18 h 16 v -2 l 3,3 -3,3 V 20 H 3 Z\";","import { API_URL } from '../shared_components/services/server_config_service';\r\nimport { getHeaders } from '../shared_components/services/fetch_services';\r\nimport i18n from \"i18next\";\r\n\r\nconst AVATAR_BUCKET = process.env.REACT_APP_DEBUG || process.env.REACT_APP_IS_STAGING ? 'dev_cami_avatars' : 'cami_avatars';\r\nexport const TEMP_ZIP_BUCKET = process.env.REACT_APP_DEBUG || process.env.REACT_APP_IS_STAGING ? 'dev_cami_temp_zip' : 'cami_temp_zip';\r\n\r\n//provides access to the google cloud.\r\nclass StorageService {\r\n \r\n /**\r\n * gets a signed url (temporarily valid) for the specified file.\r\n * bucket-file is returned by xxxCloudName()\r\n * @param {object} name name of the bucket & file: {bucket, name}\r\n */\r\n async getUrl(name) {\r\n return new Promise((resolve, reject) => {\r\n //for debug: remove until fetch\r\n /*resolve(\r\n \"https://storage.googleapis.com/cami_video/test_test11_1.mp4?x-goog-signature=1101a5e6a5a9df3cf9cc086552f10919d2776506b9b1e60abd42800257bd0ed4bcf91b43dd8fb3eda91b8b8f715396cf8b07437eed55b8d1821c207d896bb8219ff09e7e5ffc964e73ef0e9f2233d2e034e52fb2b8349d95629260f6c4658e7ab4ec98a221d540e52d4afa2cd2518448017daa3f66697a80c109c0189bbd68e7ade5a0a93b3ed87eb904fbd625f7690b3444bd9c6ab298a56fd1fbe7936e0325a7c4673bcf08bfea70d10ea9eb389b93b5f0deb8616e386896eac2803b299fed5ef90f88e89cf849389cb80c9929c04e0fd41bb73832fd9bf861fc689d1e710d1cd676b309f18d47537dc12b2442dd5904e59e8ef5c685c9a73c82d90c7ea993&x-goog-algorithm=GOOG4-RSA-SHA256&x-goog-credential=cam-i-recorder%40camera-inspector.iam.gserviceaccount.com%2F20200729%2Feurope-west1%2Fstorage%2Fgoog4_request&x-goog-date=20200729T143450Z&x-goog-expires=86400&x-goog-signedheaders=host\"\r\n );\r\n return;\r\n */\r\n\r\n fetch(`${API_URL}/storage/url/${name.bucket}/${name.name}`, {method: 'GET', mode: 'cors', headers: getHeaders()})\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.text().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n }).catch((error) => {\r\n reject(error);\r\n });\r\n }\r\n else {\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n })\r\n .catch((error) => reject(error))\r\n ;\r\n });\r\n }\r\n\r\n async tryGetUrl(name) {\r\n return new Promise((resolve, reject) => {\r\n fetch(`${API_URL}/storage/url/${name.bucket}/${name.name}`, {method: 'GET', mode: 'cors', headers: getHeaders()})\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.text().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n resolve(null);\r\n }\r\n }).catch((error) => {\r\n resolve(null);\r\n });\r\n }\r\n else {\r\n resolve(null);\r\n }\r\n })\r\n .catch((error) => resolve(null))\r\n ;\r\n });\r\n }\r\n\r\n\r\n /**\r\n * gets the csv data for the specified bucket/file.\r\n * bucket-file is returned by xxxCloudName()\r\n * @param {object} name name of the bucket & file: {bucket, name}\r\n */\r\n async getCsvData(name) {\r\n if (!name) {\r\n return Promise.resolve(\"\");\r\n }\r\n return new Promise((resolve, reject) => {\r\n fetch(`${API_URL}/storage/csv/${name.bucket}/${name.name}`, {method: 'GET', mode: 'cors', headers: getHeaders()})\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.text().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n }).catch((error) => {\r\n reject(error);\r\n });\r\n }\r\n else {\r\n reject(result.statusText ?? i18n.t(\"invalid response from server\"));\r\n }\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n }\r\n\r\n async readBinaryContent(bucket, name) {\r\n if (!bucket || !name) {\r\n return Promise.resolve(\"\");\r\n }\r\n const url = await this.getUrl({bucket, name});\r\n const header = new Headers({\r\n Origin: window.location.origin,\r\n });\r\n let result = await fetch(url, {method: 'GET', mode: 'cors', headers: header});\r\n if (result.ok) {\r\n let data = await result.arrayBuffer();\r\n if (result.status === 200) {\r\n return data;\r\n }\r\n }\r\n throw new Error(i18n.t(\"invalid response from server\"));\r\n }\r\n\r\n /**\r\n * get the url for the avatar image for the user with the specified name.\r\n * @param {string} name of the avatar (usually the id of the user)\r\n */\r\n async getAvatarUrl(name) {\r\n return this.getUrl({bucket: AVATAR_BUCKET, name: name});\r\n }\r\n\r\n getProjectZipFile(task, id) {\r\n let name = id;\r\n if (task.indexOf('images') > -1) {\r\n name = 'i_' + name;\r\n }\r\n if (task.indexOf('videos') > -1) {\r\n name = 'v_' + name;\r\n }\r\n if (task.indexOf('pdf') > -1) {\r\n name = 'p_' + name;\r\n }\r\n if (task.indexOf('xml') > -1) {\r\n name = 'x_' + name;\r\n }\r\n return name + '.zip';\r\n }\r\n}\r\n\r\nexport const storageService = new StorageService();\r\n","import { configService } from '../../../../services/config_service';\r\n\r\n/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\nconst events = require('events');\r\n\r\n\r\n/**\r\n * providers a generic interface to connect to for the ui elements. They connect to this service and\r\n * the service will provide data from the player or recorder, according to the settings. Data is also\r\n * buffered so that it wont play to fast (cause of too much data too fast or scrolling too fast).\r\n */\r\nclass SonarService {\r\n constructor() {\r\n this.data = []; // current active data set\r\n this.roll = 0; // roll value, specific to the sonar\r\n this.yaw = 0;\r\n this.range = 0; // range of the sonar as recorded in the data\r\n this.nextData = null; // next line to send as event\r\n this.events = new events.EventEmitter(); // callback for visualizing the data.\r\n this.timer = null;\r\n this.provider = null; // when set, we can record data\r\n\r\n this.channels = 0; // nr of channels (directions) supported by the sonar device.\r\n this.valuesPerChannel = 0; // nr of values in a single channel. needed to determine the distance for a single value. When 0, it is variable and determined by the channel itself\r\n this.AngleAdjust = 0; // some sonars aren't aligned properly with the device\r\n\r\n this._lowCutoff = null; // can't yet be init, comes from congiService, which does not yet exist\r\n this._highCutoff = null;\r\n this._grayMode = null;\r\n }\r\n \r\n /**\r\n * called when the robot recorder/player is initialized. Allows us to set the correct size.\r\n * @param {number} length nr of samples to describe a circle\r\n */\r\n init(provider) {\r\n if (this.provider !== provider) { // when first starting up, this can happen cause init is called when the backend tractor is started and the frontend robotClient is also started\r\n if (this.provider) {\r\n this.provider.onData = null; // remove any previous callbacks so we don't get duplicate data by accident\r\n this.channels = 0;\r\n this.valuesPerChannel = 0;\r\n this.AngleAdjust = 0;\r\n }\r\n this.provider = provider;\r\n if (provider) {\r\n this.provider.onData = this.handleData;\r\n this.channels = provider.channels;\r\n this.AngleAdjust = provider.AngleAdjust;\r\n this.valuesPerChannel = provider.valuesPerChannel;\r\n if (this.provider.playCurrent) { // the recorder doesn't have a playCurrent\r\n this.provider.playCurrent(true); // when we init the data from the source, make certain we render the start picture correctly\r\n }\r\n }\r\n this._lowCutoff = configService.get(\"sonar.lowCutoff\"); // can't do this on construction cause then there is no configservice yet\r\n this._highCutoff = configService.get(\"sonar.highCutoff\");\r\n this._grayMode = configService.get(\"sonar.grayMode\");\r\n }\r\n }\r\n\r\n clear() {\r\n if (this.provider) {\r\n this.provider.onData = null;\r\n this.provider = null;\r\n }\r\n this.data = null;\r\n this.currentIdx = 0;\r\n }\r\n\r\n handleData = (values) => {\r\n this.AngleAdjust = this.provider.AngleAdjust; // angleAdjust can depend on the values reported by the sonar\r\n if (!this.timer) { // use a timer to make certain we only update the ui in steps, not at every change.\r\n this.timer = setTimeout(() => {\r\n this.timer = null;\r\n if (this.nextData) { // if there are new values to send, do it now\r\n this.data = this.nextData.data;\r\n this.roll = this.nextData.roll;\r\n this.range = this.nextData.range;\r\n this.yaw = this.nextData.yaw;\r\n this.events.emit(\"onSonarData\");\r\n this.nextData = null;\r\n }\r\n }, 150); // don't update the ui too often.\r\n this.data = values.data;\r\n this.roll = values.roll;\r\n this.range = values.range;\r\n this.yaw = values.yaw;\r\n this.events.emit(\"onSonarData\");\r\n }\r\n else {\r\n this.nextData = values;\r\n }\r\n }\r\n\r\n\r\n /**value that should be used as the base line (0)*/\r\n get lowCutoff() {\r\n return this._lowCutoff;\r\n }\r\n set lowCutoff(value) {\r\n this._lowCutoff = value;\r\n configService.set(\"sonar.lowCutoff\", value);\r\n this.events.emit(\"onSonarConfig\");\r\n }\r\n\r\n /**value that should be used as the top line (255)*/\r\n get highCutoff() {\r\n return this._highCutoff;\r\n }\r\n set highCutoff(value) {\r\n this._highCutoff = value;\r\n configService.set(\"sonar.highCutoff\", value);\r\n this.events.emit(\"onSonarConfig\");\r\n }\r\n\r\n /**value that should be used as the top line (255)*/\r\n get grayMode() {\r\n return this._grayMode;\r\n }\r\n set grayMode(value) {\r\n this._grayMode = value;\r\n configService.set(\"sonar.grayMode\", value);\r\n this.events.emit(\"onSonarConfig\");\r\n }\r\n\r\n}\r\n\r\nexport const sonarService = new SonarService();","module.exports = __webpack_public_path__ + \"static/media/medium_logo.ca9b05f3.png\";","module.exports = __webpack_public_path__ + \"static/media/top.47e3c21b.svg\";","module.exports = __webpack_public_path__ + \"static/media/front.646b948c.svg\";","module.exports = __webpack_public_path__ + \"static/media/side.a79600aa.svg\";","module.exports = __webpack_public_path__ + \"static/media/front_cam.3e54234a.svg\";","module.exports = __webpack_public_path__ + \"static/media/top_cam.9d9cd632.svg\";","module.exports = __webpack_public_path__ + \"static/media/side_cam.401eb342.svg\";","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport i18n from \"i18next\";\r\nimport { errExtractor } from '../../../services/error_extractor';\r\nimport { dialogService } from \"../../../../services/dialog_service\";\r\nimport { activeProjectService } from \"../../../../services/active_project_service\";\r\nimport { storageService } from \"../../../../services/storage_service\";\r\nimport { unpackLidar, centerLidar, mergeLidarLists } from \"../../../services/lidar_data_service\";\r\nimport { PlayerBaseService } from \"./player_base_service\";\r\nimport { StrandPropsService } from \"../../../services/strand_props_service\";\r\n\r\nif (!Buffer) { // so we can use Buffer in the browser\r\n const Buffer = require('buffer/').Buffer;\r\n}\r\n\r\nconst LIDAR_VERSION = 3; // most recent version currently active\r\n\r\n/**\r\n * can load lidar data and play it, using the onData callback. Playback must be triggered by the tractor player.\r\n */\r\nexport class LidarPlayerBaseService extends PlayerBaseService {\r\n \r\n constructor() {\r\n super();\r\n this._config = null;\r\n this.isReversed = false;\r\n this.minMax = [0,0]; // the min and max values found in the lidar data. this is used to render the data (and define the min/max filters) in the rollout\r\n this.version = 3; // so we can catch the old (old) version 1 or 2 of the data file, probably only a couple of projects like this ever, but need to provide it.\r\n this.nrLinesToCombine = 1; // nr of raw lidar data lines that need to be combined into 1 line, for lidars that use multiple sensors \r\n this.onWater = false;\r\n }\r\n\r\n /**\r\n * config object\r\n */\r\n get config() {\r\n return this._config;\r\n }\r\n\r\n set config(value) {\r\n this._config = value;\r\n this.trySaveConfig();\r\n }\r\n\r\n /**\r\n * for inheritors, so recorder can save, but not in viewer or website\r\n */\r\n trySaveConfig() {\r\n\r\n }\r\n\r\n /**\r\n * loads the data from the cloud, when available.\r\n * @param {object} streng the streng to load the data for\r\n * @param {bool} reverse if reverse data is requested\r\n */\r\n internalLoad(streng, reverse=false, folder=null) {\r\n streng = streng ?? activeProjectService.activeStreng;\r\n const url = reverse ? streng.lidarRevDataUrl : streng.lidarDataUrl;\r\n return (url) ? storageService.readBinaryContent(url.bucket, url.name) : Promise.resolve(\"\");\r\n }\r\n\r\n \r\n\r\n /**\r\n * loads lidar data for the specified streng\r\n * returns the loaded data and also stores it in this.data.\r\n * This way, it can be used to rapidly load data async (for reporting) but also keep a cash of the last loaded data (for viewing)\r\n * @param {object} streng the streng to load the data for\r\n */\r\n load(streng=null, reverse=false, folder=null) {\r\n return new Promise(async (resolve, reject) => {\r\n this.data = []; // before doing anythin, set the data to empty cause we are loading a new set and something could go wrong or the new data could be empty\r\n try {\r\n streng = streng ?? activeProjectService.activeStreng;\r\n const data = await this.internalLoad(streng, reverse, folder);\r\n const strandProps = new StrandPropsService(); // we need this service to get the expected dimensions of the strand at a specific distance, this way we can find the center point better in case there is something extruding/pushed in on a side\r\n strandProps.init(streng);\r\n const parsed = this.parseData(data, streng, strandProps);\r\n this.data = parsed;\r\n resolve(parsed);\r\n }\r\n catch(error) {\r\n dialogService.error(i18n.t(\"Lidar\"), i18n.t(\"doc_load_error\", {error: errExtractor.get(error)}));\r\n resolve(null);\r\n }\r\n });\r\n }\r\n\r\n parseData(data, streng, strandProps) {\r\n let results = [];\r\n const buf = Buffer.from(data); // turn into buffer so it is easier to read\r\n let pos = this.readHeader(buf);\r\n const smallV = buf[pos++];\r\n if (smallV !== 1 && smallV !== 2 && smallV !== LIDAR_VERSION) throw new Error(i18n.t(\"Invalid lidar header, probably not a lidar file or corrupted\"));\r\n this.version = smallV;\r\n \r\n let isReversed = false;\r\n let expectDistance = false;\r\n if (smallV >= 2) {\r\n expectDistance = true;\r\n isReversed = buf[pos++] === 1;\r\n if (smallV >= LIDAR_VERSION) {\r\n this.nrLinesToCombine = buf[pos++];\r\n this.onWater = buf[pos++] === 1;\r\n }\r\n pos = this.readConfig(buf, pos);\r\n }\r\n this.isReversed = isReversed;\r\n let min = Number.MAX_SAFE_INTEGER;\r\n let max = -1;\r\n while(pos < buf.length) {\r\n const dataLine = this.readDataLine(buf, pos, expectDistance, streng, strandProps);\r\n results.push(dataLine.recToAdd);\r\n pos = dataLine.pos;\r\n const valuesList = dataLine.recToAdd.values;\r\n for (let i=0; i < valuesList.length; i++) {\r\n const val = valuesList[i];\r\n if(val !== null && val !== 0) { // can be 0 or null when there is a section missing (too close to device)\r\n min = (val < min) ? val : min;\r\n max = (val > max) ? val : max;\r\n }\r\n }\r\n }\r\n if (isReversed) { // if the data was stored in reverse, than put it back in the correct order first\r\n results.reverse();\r\n }\r\n if (results.length > 0 && results[0].distance !== 0) { // the first record is not at the 0 distance, which can be a problem for rendering (especially with reverse recording where this can happen with big numbers)\r\n const offset = results[0].distance;\r\n results.forEach((rec) => {\r\n rec.distance -= offset;\r\n });\r\n }\r\n this.minMax[0] = min;\r\n this.minMax[1] = max;\r\n return results;\r\n }\r\n\r\n readDataLine(buf, pos, expectDistance, streng, strandProps) {\r\n let distance = null;\r\n let timestamp;\r\n let finalValues = null;\r\n let finalAngles = null;\r\n\r\n timestamp = buf.readDoubleLE(pos); // first field is he id field, can be timestamp or distance (disatnce was added later)\r\n strandProps.updateFromObsList(streng, timestamp); // make certain that the strandprops service is correctly updated\r\n pos += 8; \r\n if (buf.length <= pos) throw new Error(\"Corrupt file: unexpected end-of-file reached\");\r\n if (expectDistance) {\r\n distance = buf.readDoubleLE(pos);\r\n pos += 8; \r\n if (buf.length <= pos) throw new Error(\"Corrupt file: unexpected end-of-file reached\");\r\n }\r\n const lengths = [];\r\n for (let i=0; i < this.nrLinesToCombine; i++) {\r\n lengths.push(buf.readUInt32LE(pos));\r\n pos += 4;\r\n if (buf.length <= pos) throw new Error(\"Corrupt file: unexpected end-of-file reached\");\r\n } \r\n const width = strandProps.width / 1000; // need to go from mm to m\r\n const height = strandProps.height / 1000;\r\n for(const length of lengths) {\r\n let data = buf.slice(pos, pos + length);\r\n let values = [];\r\n let angles = [];\r\n unpackLidar(data, values, angles);\r\n centerLidar(values, angles, width, height, this.onWater);\r\n if (!finalValues) { // this way, if only 1 line, we have the final values\r\n finalValues = values;\r\n finalAngles = angles;\r\n }\r\n else {\r\n const newVals = mergeLidarLists(finalValues, finalAngles, values, angles);\r\n finalValues = newVals.values;\r\n finalAngles = newVals.angles;\r\n }\r\n pos += length;\r\n }\r\n const recToAdd = {distance: distance, timestamp: timestamp, values: finalValues, angles: finalAngles};\r\n return {recToAdd, pos};\r\n }\r\n\r\n readHeader(buf) {\r\n let pos = 0;\r\n if (buf[pos++]!== 'l'.charCodeAt(0)) throw new Error(i18n.t(\"Invalid lidar header, probably not a lidar file or corrupted\"));\r\n if (buf[pos++] !== 'i'.charCodeAt(0)) throw new Error(i18n.t(\"Invalid lidar header, probably not a lidar file or corrupted\"));\r\n if (buf[pos++] !== 'd'.charCodeAt(0)) throw new Error(i18n.t(\"Invalid lidar header, probably not a lidar file or corrupted\"));\r\n if (buf[pos++] !== 'a'.charCodeAt(0)) throw new Error(i18n.t(\"Invalid lidar header, probably not a lidar file or corrupted\"));\r\n if (buf[pos++] !== 'r'.charCodeAt(0)) throw new Error(i18n.t(\"Invalid lidar header, probably not a lidar file or corrupted\"));\r\n if (buf[pos++] !== 1) throw new Error(i18n.t(\"Invalid lidar header, probably not a lidar file or corrupted\"));\r\n return pos;\r\n }\r\n\r\n /**\r\n * read the config section of the file\r\n * @param {array} buf raw data\r\n * @param {number} pos start pos within the buffer \r\n */\r\n readConfig(buf, pos) {\r\n let result = {\r\n grayMode: buf[pos++] !== 0,\r\n filterRange: [],\r\n colors: [],\r\n colorStops: []\r\n };\r\n for(let i=0; i<2; i++) {\r\n result.filterRange.push(buf.readDoubleLE(pos));\r\n pos += 8;\r\n }\r\n for(let i=0; i<5; i++) {\r\n const number = buf.readUInt32LE(pos);\r\n const color = Number(number).toString(16);\r\n result.colors.push('#' + color);\r\n pos += 4;\r\n }\r\n for(let i=0; i<5; i++) {\r\n const stop = buf.readDoubleLE(pos);\r\n result.colorStops.push(stop);\r\n pos += 8;\r\n }\r\n this._config = result;\r\n return pos;\r\n }\r\n\r\n /** base class doesn't know the data structure */\r\n playRec(rec) {\r\n this.onData(rec.values, rec.angles);\r\n }\r\n\r\n /**\r\n * converts the old file format 1 to format 2. That is:\r\n * - include distance info\r\n * @param {array} robotData the robot data (maps timestamp to distance)\r\n */\r\n convertData(robotData) {\r\n let robotIdx = 0;\r\n for(const rec of this.data) {\r\n while(robotIdx < robotData.length && robotData[robotIdx].timestamp < rec.timestamp) {\r\n robotIdx++;\r\n }\r\n if (robotIdx < robotData.length) {\r\n rec.distance = robotData[robotIdx].distance;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n}","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport i18n from \"i18next\";\r\nimport { errExtractor } from '../../../services/error_extractor';\r\nimport { dialogService } from \"../../../../services/dialog_service\";\r\nimport { activeProjectService } from \"../../../../services/active_project_service\";\r\nimport { storageService } from \"../../../../services/storage_service\";\r\nimport { PlayerBaseService } from \"./player_base_service\";\r\nimport { readDegree16BE, readTemp16LE } from \"../../../services/buffer_helpers\";\r\nimport { configService } from \"../../../../services/config_service\";\r\n\r\nif (configService.isCloud) { // so we can use Buffer in the browser\r\n const Buffer = require('buffer/').Buffer;\r\n}\r\n\r\n/**\r\n * can load sonar data and play it, using the onData callback. Playback must be triggered by the tractor player.\r\n */\r\nexport class SonarPlayerBaseService extends PlayerBaseService {\r\n \r\n constructor() {\r\n super();\r\n\r\n this.channels = 0; // nr of channels (directions) supported by the sonar device.\r\n this.valuesPerChannel = 0; // nr of values in a single channel. needed to determine the distance for a single value. When 0, it is variable and determined by the channel itself\r\n this.AngleAdjust = 0; // adjustment applied to the yaw (so these are the degrees that are added to the angle, the degrees that the sonar image is rotated)\r\n this.baseYaw = 0; // to turn absolute values into relative agains this base\r\n }\r\n\r\n /**\r\n * loads the data from the cloud, when available.\r\n * @param {object} streng the streng to load the data for\r\n * @param {bool} reverse if reverse data is requested\r\n */\r\n internalLoad(streng, folder = null) {\r\n streng = streng ?? activeProjectService.activeStreng;\r\n const url = streng.sonarDataUrl;\r\n return (url) ? storageService.readBinaryContent(url.bucket, url.name) : Promise.resolve(\"\");\r\n }\r\n\r\n \r\n\r\n /**\r\n * loads sonar data for the specified streng\r\n * returns the loaded data and also stores it in this.data.\r\n * This way, it can be used to rapidly load data async (for reporting) but also keep a cash of the last loaded data (for viewing)\r\n * @param {object} streng the streng to load the data for\r\n */\r\n load(streng=null, folder = null) {\r\n return new Promise((resolve, reject) => {\r\n this.data = []; // before doing anythin, set the data to empty cause we are loading a new set and something could go wrong or the new data could be empty\r\n try {\r\n this.internalLoad(streng, folder).then((data) => {\r\n const parsed = this.parseData(data);\r\n this.data = parsed;\r\n resolve(parsed);\r\n }).catch((error) => {\r\n dialogService.error(i18n.t(\"Laden\"), i18n.t(\"doc_load_error\", {error: errExtractor.get(error)}));\r\n resolve(null);\r\n });\r\n }\r\n catch(error) {\r\n dialogService.error(i18n.t(\"Laden\"), i18n.t(\"doc_load_error\", {error: errExtractor.get(error)}));\r\n resolve(null);\r\n }\r\n });\r\n }\r\n\r\n parseData(data) {\r\n let results = [];\r\n const buf = Buffer.from(data); // turn into buffer so it is easier to read\r\n\r\n let pos = 0;\r\n const errMsg = \"Invalid sonar header, probably not a sonar file or corrupted\";\r\n if (buf[pos++]!== 's'.charCodeAt(0)) throw new Error(i18n.t(errMsg));\r\n if (buf[pos++] !== 'o'.charCodeAt(0)) throw new Error(i18n.t(errMsg));\r\n if (buf[pos++] !== 'n'.charCodeAt(0)) throw new Error(i18n.t(errMsg));\r\n if (buf[pos++] !== 'a'.charCodeAt(0)) throw new Error(i18n.t(errMsg));\r\n if (buf[pos++] !== 'r'.charCodeAt(0)) throw new Error(i18n.t(errMsg));\r\n if (buf[pos++] !== 1) throw new Error(i18n.t(errMsg));\r\n if (buf[pos++] !== 1) throw new Error(i18n.t(errMsg));\r\n\r\n this.channels = buf.readUInt32LE(pos);\r\n this.valuesPerChannel = buf.readUInt32LE(pos+4);\r\n const format = buf.readUInt8(pos+8);\r\n pos+=9;\r\n \r\n if (format === 1) {\r\n this.baseYaw = buf.readInt16LE(pos);\r\n pos+= 2;\r\n this.AngleAdjust = buf.readInt16LE(pos);\r\n pos+= 2;\r\n while(pos < buf.length) {\r\n let timestamp = buf.readDoubleLE(pos);\r\n pos += 8;\r\n const roll = readDegree16BE(buf, pos);\r\n const pitch = readDegree16BE(buf, pos+2);\r\n const yaw = readDegree16BE(buf, pos+4);\r\n const temp = readTemp16LE(buf, pos+6);\r\n //console.log(\"roll: \", roll, \", pitch: \", pitch, \", yaw: \", yaw-this.baseYaw, \", temp: \", temp);\r\n pos += 8;\r\n const range = buf.readUInt16LE(pos);\r\n pos += 2;\r\n if (buf.length <= pos) throw new Error(\"Corrupt file: unexpected end-of-file reached\");\r\n let length = buf.readUInt32LE(pos);\r\n pos += 4;\r\n if (buf.length <= pos) throw new Error(\"Corrupt file: unexpected end-of-file reached\");\r\n let data = buf.slice(pos, pos + length);\r\n results.push({timestamp: timestamp, data: data, roll: roll, pitch: pitch, yaw: yaw-this.baseYaw, temp: temp, range: range});\r\n pos += length;\r\n }\r\n }\r\n else {\r\n throw new Error(\"Unsupported sonar data format\");\r\n }\r\n return results;\r\n }\r\n\r\n getLast() {\r\n const res = this.data[this.currentIdx];\r\n if (res) {\r\n return res;\r\n }\r\n return null;\r\n }\r\n\r\n playRec(rec) {\r\n this.onData(rec);\r\n }\r\n\r\n canSetPulse() {\r\n return false;\r\n }\r\n\r\n canSetGain() {\r\n return false;\r\n }\r\n \r\n canSetFrequency() {\r\n return false;\r\n }\r\n}","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport Box from '@material-ui/core/Box';\r\nimport Tab from '@material-ui/core/Tab';\r\nimport Streng from './streng_component';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport { activeProjectService } from '../../../../services/active_project_service';\r\nimport { projectService } from '../../../services/project_service';\r\nimport { cameraService } from '../../../../components/document/video/camera_service';\r\nimport { configService } from '../../../../services/config_service';\r\nimport ConfirmationDialog from '../../../dialogs/confirmation_dialog';\r\nimport { documentControlService } from '../../document_control_service';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { errExtractor } from '../../../services/error_extractor';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\n\r\n//icons\r\nimport Delete from 'mdi-material-ui/Delete';\r\n\r\nconst styles = (theme) => ({\r\n tabBar: {\r\n height: '100%',\r\n width: '100%'\r\n },\r\n tab: {\r\n minWidth: '32px'\r\n },\r\n textField: {\r\n width: '100%'\r\n },\r\n toolbar: {\r\n borderBottomStyle:\"solid\", \r\n borderBottomWidth:\"0.4px\", \r\n background: theme.palette.background.paper\r\n }\r\n});\r\n\r\n\r\nclass Strengs extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n const selectedIdx = activeProjectService.activeStrengIdx;\r\n this.state = {\r\n selectedTab: selectedIdx, // warning, this is initialized to -1 if list is empty (which can happen during debugging)\r\n tabs: this.props.strengs,\r\n deleteRequestOpen: false, // when true, a dialog is open to ask the user if the streng needs to be deleted\r\n forceStrengDetails: false, // used to pass on to the streng component that it is expected to show the strengdetails instead of the observations. Used when a new streng is added.\r\n }\r\n this.tabsActions = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n activeProjectService.events.addListener(\"strengChanged\", this.handleStrengChanged);\r\n }\r\n\r\n componentWillUnmount() {\r\n if (documentControlService.documentPos) {\r\n documentControlService.documentPos[\"strengIdx\"] = this.state.selectedTab;\r\n }\r\n activeProjectService.events.removeListener(\"strengChanged\", this.handleStrengChanged);\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.strengs != this.props.strengs) {\r\n this.setState({\r\n selectedTab: this.props.strengs.length - 1,\r\n tabs: this.props.strengs\r\n })\r\n activeProjectService.activeStrengIdx = this.props.strengs.length - 1; //always make certan that the correct value is set at the beginning. when this changes, not garagnteed that prevSTate.selectedtab is different.\r\n }\r\n if (prevProps.width != this.props.width && this.tabsActions) { // if we don't do this, the > arrow at the end of the tabs doesn't update correctly (hide/show)\r\n if (this.tabsActions.current) {\r\n this.tabsActions.current.updateIndicator();\r\n }\r\n }\r\n if(prevState.selectedTab != this.state.selectedTab || (prevState.deleteRequestOpen != this.state.deleteRequestOpen && prevState.deleteRequestOpen === true)) { // when we deleted an item, it could be that the index remains the same, but we do need to do a refresh cause the objects ahve changed. only drawback to this way: a refresh also happens when the delete box closes without deleting on object (cancel)\r\n setImmediate(() => {\r\n activeProjectService.activeStrengIdx = this.state.selectedTab;\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n let currentStreng = null;\r\n let selectedIdx = this.state.selectedTab;\r\n if (this.state.selectedTab > -1) {\r\n currentStreng = this.state.tabs[this.state.selectedTab];\r\n }\r\n else {\r\n selectedIdx = 0; // tabs.value doesn't like -1, so we set it to 0, -1 indicates no selection, but tabs needs something\r\n }\r\n return (\r\n \r\n \r\n \r\n {this.state.tabs.map((tab, idx) => {\r\n return ()\r\n })}\r\n {(!this.props.readOnly) && // note: can't put tab in a fragment, it appear the onChange handler wont fire then.\r\n \r\n \r\n \r\n }\r\n \r\n {(!this.props.readOnly) &&\r\n [ \r\n \r\n \r\n \r\n ]\r\n }\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n \r\n resetForced = () => {\r\n this.setState({forceStrengDetails: false});\r\n }\r\n\r\n\r\n /**\r\n * switch tabs. \r\n * note: the last tab is the '+' sign, if that is clicked, we create a new tabl.\r\n */\r\n handleTabChange = (event, newValue) => {\r\n const { t } = this.props;\r\n if (cameraService.isRecording) { // also don't allow switch while still processing\r\n dialogService.error(t(\"video\"), t(\"Kan niet van streng veranderen tijdens opname. Stop eerst de opname.\"));\r\n } else if (documentControlService.controlState === 'processing') {\r\n dialogService.error(t(\"video\"), t(\"Video is nog aan het verwerken.\"));\r\n } else {\r\n let streng;\r\n if (newValue == this.state.tabs.length) { // if it's the last index, user has requested to add a new item (+ sign)\r\n try {\r\n const onNewStrengCopyPrevData = configService.get('strengs.onNewStrengCopyPrevData');\r\n let template = onNewStrengCopyPrevData ? activeProjectService.activeStreng : null;;\r\n const id = Math.max(...this.props.strengs.map(x => x.id)) + 1; // always make certain we have a unique id. This is for fast referencing of the files.\r\n streng = projectService.createNewStreng(id, template);\r\n this.props.strengs.push(streng); //always add to the officiel list, so it can get saved.\r\n const newTabs = [...this.props.strengs]; //internally, work with a copy, so the ui can update.\r\n activeProjectService.markDirty();\r\n this.setState({ tabs: newTabs });\r\n }\r\n catch (error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Document wijzigen\"), t(\"doc_change_error\", {error: errExtractor.get(error)}));\r\n }\r\n }\r\n this.changeTab(newValue);\r\n }\r\n }\r\n\r\n changeTab(newValue) {\r\n this.setState({ selectedTab: newValue, forceStrengDetails: !!configService.get(\"strengs.onNewStrengShowGeneral\") });\r\n if (this.props.onDirectionChanged) { \r\n this.props.onDirectionChanged(this.props.strengs[newValue].inspectionDirection); // provide the new state to other ui elements\r\n }\r\n }\r\n\r\n /**\r\n * called by the activeProjectService when the currently selected active streng is changed.\r\n * This is triggered when the tab has changed or when the user selected to go to a streng through \r\n * some other way (example strengs summary dialog). So we need to check if we need to do an update\r\n * or not.\r\n * @param {number} idx index of new active streng\r\n */\r\n handleStrengChanged = (idx) => {\r\n if (this.state.selectedTab != idx) {\r\n this.changeTab(idx);\r\n }\r\n }\r\n\r\n handleDeleteStrengReq = () => {\r\n this.setState({deleteRequestOpen: true}); // don't delete yet, user needs to confirm first\r\n }\r\n\r\n handleDeleteDlgClose = async (ack) => {\r\n this.setState({deleteRequestOpen: false});\r\n if (ack) {\r\n await this.deleteStreng();\r\n }\r\n }\r\n\r\n /**\r\n * delete the currently selected tab page\r\n */\r\n deleteStreng = async () => {\r\n if (this.state.selectedTab >= 0) {\r\n let streng = this.props.strengs[this.state.selectedTab];\r\n this.props.strengs.splice(this.state.selectedTab, 1);\r\n if (this.props.strengs.length == 0) { // when there are no more strengs, create an empty one, otherwise the rest of the application becomes unstable.\r\n const toAdd = projectService.createNewStreng(1); \r\n this.props.strengs.push(toAdd);\r\n }\r\n activeProjectService.markDirty();\r\n const newTabs = [...this.props.strengs]; // make a copy of the list cause we need to refresh the state (ok, cause we don't have 1000s of ) tabs)\r\n let newPos = this.state.selectedTab;\r\n if (newPos == newTabs.length) {\r\n if (newPos > 0) {\r\n newPos--;\r\n }\r\n else {\r\n newPos = -1;\r\n }\r\n }\r\n documentControlService.events.emit(\"onDeleteStreng\"); // we need to let the video player unload the video, if we don't do this, we get a nasty error\r\n const rootPath = activeProjectService.path;\r\n this.setState({ tabs: newTabs, selectedTab: newPos });\r\n setTimeout(async () => { // don't do this immediatly, but let the video element have some time to reload. If we don't do this, we can get nasty errors while deleting the streng cause the video file is still opened\r\n await projectService.deleteDataForStreng(rootPath, streng);\r\n }, 0);\r\n \r\n }\r\n }\r\n}\r\n\r\nStrengs.propTypes = {\r\n onExpandChanged: PropTypes.func,\r\n strengs: PropTypes.array,\r\n direction: PropTypes.string, // allowed values: \r\n onDirectionChanged: PropTypes.func,\r\n readOnly: PropTypes.bool,\r\n captureKeyboard: PropTypes.bool, // when true, observations is allowed to capture keyboard events. If we don't do this, we can't use a space when editing fields, cause observations traps it.\r\n onPositionChanged: PropTypes.func, // when this observation is expanded, let the system go to the video point at which it was recorded.\r\n onStartMeasure: PropTypes.func, // called when a measuring procedure should be started. Contains a callback that should be called when the operation is done.\r\n onStopMeasure: PropTypes.func, // called when measuring procedure should be stopped\r\n onStartMeasureAngle: PropTypes.func,\r\n onStartMeasureDepth: PropTypes.func,\r\n onStartMeasureAreaSize: PropTypes.func,\r\n onStartMeasureFreeform: PropTypes.func,\r\n width: PropTypes.any, // this is passed on to strengs so that the selected tab can be brought into view again.\r\n onTerminated: PropTypes.func, // called when the B-D-C-?-? code is entered -> inspection was terminated. This should stop video recording\r\n initLoaded: PropTypes.bool, // an observation can only be rendered when the tractor engine is loaded (buttons for sonar and lidar)\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(Strengs));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n//icons\r\nimport ChevronDown from 'mdi-material-ui/ChevronDown';\r\n\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\r\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\r\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\r\nimport Typography from '@material-ui/core/Typography'; \r\nimport Observations from '../observations_component';\r\nimport StrengInfo from './streng_info_component'\r\nimport { activeProjectService } from '../../../../services/active_project_service';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { projectService } from '../../../services/project_service';\r\nimport { configService } from '../../../../services/config_service';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\nimport ObservationsTitleBox from '../observation/observations_title_box_component';\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: '100%',\r\n width: '100%'\r\n },\r\n GeneralInfo: {\r\n boxShadow: 'none',\r\n margin: 0,\r\n padding: 0\r\n },\r\n GeneralInfoDetails: {\r\n flexDirection: 'column',\r\n padding: 0,\r\n margin: 0\r\n },\r\n GeneralInfoSummary: {\r\n padding: 0,\r\n margin: 0\r\n },\r\n textField: {\r\n width: '100%'\r\n },\r\n heading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n fontWeight: \"600\"\r\n },\r\n});\r\n\r\n\r\nclass Streng extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n const expandedIdx = 0;\r\n const showObsDetails = configService.get(\"observations.showObsDetails\");\r\n this.state = {\r\n expandedIdx: expandedIdx, // determins the expanded item.\r\n observations: props.streng ? props.streng.observations : [],\r\n strengType: props.streng ? props.streng.type : 'dp',\r\n showMissingErrors: false,\r\n showObsDetails: !!showObsDetails, // in case of empty value, the !! turns it to true and back to false again.\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n activeProjectService.events.addListener(\"obsGenerated\", this.handleObsGenerated);\r\n }\r\n\r\n componentWillUnmount() {\r\n activeProjectService.events.removeListener(\"obsGenerated\", this.handleObsGenerated);\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.streng != this.props.streng) {\r\n this.setState({\r\n observations: this.props.streng ? this.props.streng.observations : [],\r\n strengType: this.props.streng ? this.props.streng.type : 'dp',\r\n })\r\n }\r\n if (prevProps.forceStrengDetails != this.props.forceStrengDetails && this.props.forceStrengDetails === true) {\r\n if (this.state.expandedIdx != 0) {\r\n this.setState({expandedIdx: 0}); // make certain that the correct part is visible\r\n }\r\n if (this.props.onStrengDetailsForced) {\r\n this.props.onStrengDetailsForced();\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n \r\n return (\r\n
\r\n \r\n }\r\n aria-controls=\"strengs\"\r\n id=\"strengs\"\r\n classes={{root: this.props.classes.GeneralInfoSummary}}\r\n >\r\n {t(\"Algemeen\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n }\r\n aria-controls=\"strengs\"\r\n id=\"strengs\"\r\n classes={{root: this.props.classes.GeneralInfoSummary}}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n\r\n handleObsGenerated = () => {\r\n if (this.state.expandedIdx !== 1) { // make certaint aht the input is visible\r\n this.setState({expandedIdx: 1}); \r\n }\r\n }\r\n\r\n handleToggleObsDetails = (ev) => {\r\n const newValue = !this.state.showObsDetails;\r\n this.setState({showObsDetails: newValue});\r\n configService.set(\"observations.showObsDetails\", newValue);\r\n ev.stopPropagation();\r\n }\r\n\r\n switchExpanded = (panelIdx) => (event, isExpanded) => {\r\n const { t } = this.props;\r\n if (this.state.expandedIdx == 0 && (panelIdx == 1 || isExpanded === false)) { // when go from main to strengs (or close main), check if allowed.\r\n const onlyAllowObsOnFulStreng = configService.get('observations.onlyAllowObsOnFulStreng') && this.props.readOnly === false; // viewer can always continue to the next section. All read-only is allowed to continue\r\n if (onlyAllowObsOnFulStreng && projectService.isStrengComplete(this.props.streng) === false) {\r\n this.setState({showMissingErrors: true});\r\n dialogService.error(t(\"Streng gegevens\"), t(\"Er ontbreekt nog data in de streng gegevens sectie. Je kan pas verder gaan als alles is ingevuld\"));\r\n return;\r\n }\r\n }\r\n this.setState({ expandedIdx: isExpanded ? panelIdx : -1, showMissingErrors: false });\r\n if (this.props.onExpandChanged) {\r\n this.props.onExpandChanged();\r\n }\r\n }\r\n\r\n handleObservationsChanged = (value) => {\r\n if (!this.props.streng) {\r\n dialogService.error(\"internal error\", `no streng loaded in props, reload file`);\r\n return;\r\n }\r\n this.props.streng.observations = value;\r\n if (this.state.expandedIdx == 1){ // make certain that the panel is expanded when adding a new streng.\r\n this.setState({observations: value});\r\n }\r\n else {\r\n this.setState({observations: value, expandedIdx: 1});\r\n }\r\n activeProjectService.markDirty();\r\n }\r\n\r\n handleTypeChanged = (value, obs) => {\r\n if (obs !== undefined) {\r\n this.setState({strengType: value, observations: obs});\r\n }\r\n else {\r\n this.setState({strengType: value});\r\n }\r\n }\r\n}\r\n\r\nStreng.propTypes = {\r\n onExpandChanged: PropTypes.func,\r\n streng: PropTypes.object, // a reference to the streng for which we are currently showing data.\r\n readOnly: PropTypes.bool, // for viewer\r\n direction: PropTypes.string, // allowed values: \r\n captureKeyboard: PropTypes.bool, // when true, observations is allowed to capture keyboard events. If we don't do this, we can't use a space when editing fields, cause observations traps it.\r\n onDirectionChanged: PropTypes.func,\r\n onPositionChanged: PropTypes.func, // when this observation is expanded, let the system go to the video point at which it was recorded.\r\n onStartMeasure: PropTypes.func, // called when a measuring procedure should be started. Contains a callback that should be called when the operation is done.\r\n onStopMeasure: PropTypes.func, // called when measuring procedure should be stopped\r\n onStartMeasureAngle: PropTypes.func,\r\n forceStrengDetails: PropTypes.bool, // when true, strengdetails should be shown. it wil alwasy trigger the onStrengDetailsForced so the caller can reset his request.\r\n onStrengDetailsForced: PropTypes.func,\r\n onStartMeasureDepth: PropTypes.func,\r\n onStartMeasureAreaSize: PropTypes.func,\r\n onStartMeasureFreeform: PropTypes.func, \r\n onTerminated: PropTypes.func, // called when the B-D-C-?-? code is entered -> inspection was terminated. This should stop video recording\r\n initLoaded: PropTypes.bool, // an observation can only be rendered when the tractor engine is loaded (buttons for sonar and lidar)\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(Streng));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n//icons\r\nimport Camera from 'mdi-material-ui/Camera';\r\nimport VectorLine from 'mdi-material-ui/VectorLine';\r\nimport TransitConnection from 'mdi-material-ui/TransitConnection';\r\nimport Delete from 'mdi-material-ui/Delete';\r\nimport CircleSlice8 from 'mdi-material-ui/CircleSlice8';\r\nimport AngleAcute from 'mdi-material-ui/AngleAcute';\r\nimport ArrowExpandDown from 'mdi-material-ui/ArrowExpandDown';\r\nimport SelectMultiple from 'mdi-material-ui/SelectMultiple';\r\nimport CircleOutline from 'mdi-material-ui/CircleOutline';\r\nimport CircleHalfFull from 'mdi-material-ui/CircleHalfFull';\r\nimport Radar from 'mdi-material-ui/Radar';\r\nimport { Lidar } from '../../../icons';\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport ToggleButton from '@material-ui/lab/ToggleButton';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\r\nimport Link from '@material-ui/core/Link';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport DirectionSelector from './direction_selector_component';\r\nimport LocationEditor from './location_editor_component';\r\nimport CodeSelector from '../code_selector/code_selector_component';\r\nimport { activeProjectService } from '../../../../services/active_project_service';\r\nimport { codeSelectorService } from '../../../services/code_selector_service';\r\nimport { CHANGE_SHAPE_KEY, isEmpty, projectService, TERMINATE_KEY, TERMINATE_KEY2 } from '../../../services/project_service';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Box from '@material-ui/core/Box';\r\nimport Button from '@material-ui/core/Button';\r\nimport { descriptiveLocOptions } from '../../../services/constants';\r\nimport { Card } from '@material-ui/core';\r\nimport CardActions from '@material-ui/core/CardActions';\r\nimport InputAdornment from '@material-ui/core/InputAdornment';\r\nimport ContinuousQuestionDialog from './continuous_question_dialog';\r\nimport { measurementService } from '../../measurement_service';\r\nimport { documentControlService } from '../../document_control_service';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { errExtractor } from '../../../services/error_extractor';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\nimport { ObservationFocusService } from './observation_focus_service';\r\nimport { strandPropsService } from '../../../services/strand_props_service';\r\nimport { ObsTranslations } from './observation_translations';\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: '100%',\r\n width: '100%',\r\n background: 'transparent',\r\n paddingLeft: theme.spacing(1),\r\n paddingRight: theme.spacing(1)\r\n },\r\n selected: {\r\n paddingTop: theme.spacing(1),\r\n paddingBottom: theme.spacing(1),\r\n marginBottom: theme.spacing(1)\r\n },\r\n textField: {\r\n marginLeft: theme.spacing(1),\r\n flex: 1\r\n },\r\n valuesRow: {\r\n paddingRight: theme.spacing(1),\r\n },\r\n remark: {\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n flex: 1\r\n },\r\n measureBtn: {\r\n marginLeft: theme.spacing(1),\r\n marginRight: -theme.spacing(1)/2\r\n },\r\n IconUnChecked: {\r\n color: theme.colors.canSelectIcon,\r\n marginRight: theme.spacing(0.5),\r\n '&:hover': {\r\n color: theme.colors.canSelectIconHover,\r\n }\r\n },\r\n cameraIconChecked: {\r\n color: theme.colors.checkedCameraIcon,\r\n marginRight: theme.spacing(0.5)\r\n },\r\n joinChecked: {\r\n color: theme.palette.secondary.main,\r\n marginRight: theme.spacing(0.5)\r\n },\r\n ROCameraIconChecked: {\r\n color: theme.colors.checkedCameraIcon,\r\n margin: '3px'\r\n },\r\n ROCameraIconUnChecked: {\r\n color: 'transparent',\r\n margin: '3px'\r\n },\r\n isContinuousIcon: {\r\n top: '3px',\r\n position: 'relative',\r\n color: \"darkgreen\",\r\n height: \"16px\"\r\n }\r\n ,\r\n isContinuousErrIcon: {\r\n top: '3px',\r\n position: 'relative',\r\n color: \"darkred\",\r\n height: \"16px\"\r\n },\r\n readOnly: {\r\n color: \"rgba(0, 0, 0, 0.87)\"\r\n },\r\n valueLabelBreadCrumbs: { // the breadcrumbs with the labels for each letter in the code, shown when collapsed\r\n fontStyle: \"italic\",\r\n fontSize: \"small\"\r\n },\r\n cardActionsRoot: {\r\n flexWrap: 'wrap',\r\n justifyContent: 'space-between',\r\n margin: -theme.spacing(1),\r\n },\r\n cardActionItem: {\r\n\r\n margin: theme.spacing(1),\r\n }\r\n});\r\n\r\nclass Observation extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n \r\n //important: set translations first so that we capture translated error messages at create time\r\n this.translations = new ObsTranslations(); // speed improvement: only do translations 1 time, much faster (language can not be changed 'on the fly' in this view)\r\n this.distanceValueChanged = false; // when the user changes the distance manually, this flag is set so that the distanceChanged event is only called when editor is closed or component unloaded. This way, the sort of the list is only done when editing is stopped, which helps user.\r\n this.isContinuous = false; // do before checking isContinuous, otherwise we might loose the correct value\r\n if (props.data) {\r\n let obsDefPath = codeSelectorService.translatePath(props.data.values);\r\n let obsDef = codeSelectorService.getLeafFromDictPath(obsDefPath); // get the definition for the observation, so we can set properties \r\n let valueLabels = props.isExpanded ? null : codeSelectorService.getLabelsFromDictPath(obsDefPath); // we only need to load labels when collapsed. When exanded, labels are handled by the codeSelector\r\n let valueComplete = obsDef != null;\r\n let contSettings = this.checkIsContinuous();\r\n this.state = {\r\n valueLabels: valueLabels, // labels for the values, when collapsed.\r\n joint: props.data.joint,\r\n values: props.data.values,\r\n location: props.data.longitude,\r\n waarde1: props.data.waarde1,\r\n waarde2: props.data.waarde2,\r\n direction1: props.data.direction1,\r\n direction2: props.data.direction2,\r\n remark: props.data.remark,\r\n includePicture: props.data.includePicture,\r\n includeSonar: !!props.data.includeSonar, // sonar value isn't always present, so take a trueth operator(!!)\r\n includeLidar: !!props.data.includeLidar, // lidar value isn't always present, so take a trueth operator(!!)\r\n valueComplete: valueComplete,\r\n focusedValueIdx: props.focusedValueIdx, // the idx of the codeselector value that should get focus. we need this so we can tab back from textfield to codeselector\r\n observationDef: obsDef, // an object that stores for each data field if it is required or not for the current values path\r\n allowSelectorFocus: true,\r\n descriptiveLoc: props.data.descriptiveLoc,\r\n measuring: null, // when 1 or 2, indicates that are are currently in a measuring request. 1 is for value 1..\r\n showContinuous: contSettings.showContinuous,\r\n continuousMsg: contSettings.errorMsg,\r\n continuousIdx: contSettings.idx,\r\n continuousComplete: contSettings.complete,\r\n continuousDlgOpen: false\r\n }\r\n }\r\n else {\r\n this.state = {\r\n joint: false,\r\n location: 0.0,\r\n values: [],\r\n waarde1: \"\",\r\n waarde2: \"\",\r\n direction1: 0,\r\n direction2: 0,\r\n remark: \"\",\r\n includePicture: false,\r\n includeSonar: false,\r\n includeLidar: false,\r\n valueComplete: false,\r\n descriptiveLoc: null,\r\n measuring: null,\r\n showContinuous: false,\r\n continuousIdx: null,\r\n continuousDlgOpen: false\r\n }\r\n }\r\n this.rootRef = React.createRef(); // the root div object, for scrolling into view when expanded.\r\n this.focsMgr = new ObservationFocusService(this);\r\n }\r\n\r\n\r\n componentDidMount() {\r\n this.hasSonar = documentControlService.robotDs.hasSonar(); // faster access\r\n this.hasLidar = documentControlService.robotDs.hasLidar();\r\n this.focsMgr.buildRefs(this.hasSonar, this.hasLidar);\r\n if (this.props.isExpanded && this.rootRef.current) {\r\n this.rootRef.current.scrollIntoView();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.distanceValueChanged === true && this.props.onDistanceChanged) {\r\n this.props.onDistanceChanged(this.props.data);\r\n }\r\n this.distanceValueChanged = false;\r\n activeProjectService.events.removeListener(\"continuousChanged\", this.handleContinuousObsChanged); // normally not registered, but just to make certain, always try.\r\n if (!documentControlService.documentPos) { // when set, we are in fullscreen, so don't try to unregister any measurement. It will be handled by the document\r\n this.stopAllMeasurements(); // when unloading, make certain that we are no longer measuring, there is no more recipient\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (this.props.strengType !== prevProps.strengType) {\r\n this.focsMgr.buildRefs(this.hasSonar, this.hasLidar);\r\n }\r\n let obsDefPath = codeSelectorService.translatePath(this.props.data.values);\r\n let valueComplete = codeSelectorService.dictPathIsLeaf(obsDefPath);\r\n if (this.props.data && this.props.data != prevProps.data) {\r\n const data = this.props.data;\r\n let obsDef = null;\r\n let contSettings = {showContinuous: false, errorMsg: \"\"};\r\n if (valueComplete) {\r\n obsDef = codeSelectorService.getLeafFromDictPath(obsDefPath); // get the definition for the observation, so we can set properties \r\n contSettings = this.checkIsContinuous();\r\n }\r\n let valueLabels = this.props.isExpanded ? null : codeSelectorService.getLabelsFromDictPath(obsDefPath); // we only need to load labels when collapsed. When exanded, labels are handled by the codeSelector\r\n this.setState({\r\n values: data.values, \r\n valueLabels: valueLabels,\r\n location: data.longitude,\r\n joint: data.joint,\r\n waarde1: data.waarde1,\r\n waarde2: data.waarde2,\r\n direction1: data.direction1,\r\n direction2: data.direction2,\r\n remark: data.remark,\r\n includePicture: data.includePicture,\r\n includeSonar: data.includeSonar, // sonar value isn't always present, so take a trueth operator(!!)\r\n includeLidar: data.includeLidar, // lidar value isn't always present, so take a trueth operator(!!)\r\n valueComplete: valueComplete,\r\n observationDef: obsDef,\r\n allowSelectorFocus: true,\r\n descriptiveLoc: data.descriptiveLoc,\r\n showContinuous: contSettings.showContinuous,\r\n continuousMsg: contSettings.errorMsg,\r\n continuousIdx: contSettings.idx,\r\n continuousComplete: contSettings.complete,\r\n continuousDlgOpen: false\r\n });\r\n }\r\n if (this.props.isExpanded) {\r\n if (this.props.focusedValueIdx != prevProps.focusedValueIdx) {\r\n if (this.props.focusedValueIdx === -2) {\r\n const hasMoreThanSelector = this.focsMgr.focusLast();\r\n this.setState({focusedValueIdx: -1, allowSelectorFocus: !hasMoreThanSelector});\r\n }\r\n else {\r\n this.setState({focusedValueIdx: this.props.focusedValueIdx});\r\n }\r\n }\r\n if (this.props.showEmptyError && !prevProps.showEmptyError) {\r\n this.focsMgr.focusFirstError();\r\n }\r\n else if (prevProps.isExpanded === false) { // when just showing the expanded view, put the focus on the right item\r\n if (valueComplete) {\r\n this.focsMgr.moveToFirstAfterCode();\r\n }\r\n else {\r\n this.setState({focusedValueIdx: -1, allowSelectorFocus: true});\r\n }\r\n }\r\n }\r\n else if (prevProps.isExpanded != this.props.isExpanded) {\r\n let valueLabels = codeSelectorService.getLabelsFromDictPath(obsDefPath);\r\n this.setState({valueLabels});\r\n this.props.onStopMeasure(); // when closing to read-only, make certain that we are no longer measuring, there is no more recipient\r\n if (this.distanceValueChanged === true && this.props.onDistanceChanged) { // when closed without clicking on 'ready, still need to call the event.\r\n this.props.onDistanceChanged(this.props.data);\r\n }\r\n this.distanceValueChanged = false; // important: needs to be reset, even if there is no callback assigned\r\n }\r\n }\r\n\r\n render() {\r\n if (this.props.isExpanded) {\r\n return this.renderExpanded();\r\n }\r\n else {\r\n return this.renderCollapsed();\r\n }\r\n }\r\n\r\n \r\n\r\n renderExpanded() { \r\n const { t } = this.props;\r\n return (\r\n \r\n\r\n\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n {this.renderContinuous()}\r\n {(!this.props.readOnly) && \r\n \r\n \r\n \r\n \r\n \r\n }\r\n
\r\n\r\n {this.buildLoc()}\r\n\r\n {this.buildContinousTerminationSelector()}\r\n\r\n {(this.state.valueComplete == true && this.needsExtraData()) && \r\n \r\n {this.renderRow1()}\r\n {this.renderRow2()}\r\n {this.renderRemark()}\r\n {(this.props.showEmptyError === true) &&\r\n \r\n {t(\"Aangeduide waardes ontbreken\")} \r\n \r\n\r\n }\r\n \r\n }\r\n {this.renderButtons()}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * called when user changed the distance of the tractor.\r\n * This should trigger a resort by the parent, but not yet cause that\r\n * would screw up the focus and easy working. It needs to be done\r\n * when the editor is closed or unloaded\r\n * @param {number} value new tractor distance\r\n */\r\n handleDistanceValueChanged = (value) => {\r\n this.setState({location: value});\r\n this.distanceValueChanged = true;\r\n }\r\n\r\n handleTimeValueChanged = (value) => {\r\n try {\r\n if (this.props.onPositionChanged) {\r\n this.props.onPositionChanged(this.props.data.time);\r\n }\r\n }\r\n catch(error) {\r\n dialogService.error(this.translations.obs, errExtractor.get(error));\r\n }\r\n }\r\n\r\n renderRow1() {\r\n let obsDef = this.state.observationDef;\r\n let items = [];\r\n if (obsDef) { // when creating a new one, this can be empty\r\n this.renderRow1Part(items, obsDef, this.state.waarde1, 0, \"waarde1\", this.focsMgr.tfRef1, this.focsMgr.tfRef1Idx);\r\n this.renderRow1Part(items, obsDef, this.state.waarde2, 1, \"waarde2\", this.focsMgr.tfRef2, this.focsMgr.tfRef2Idx);\r\n }\r\n return (\r\n
\r\n {items}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * \r\n * @param {list} result contains the result items that were rendered\r\n * @param {object} obsDef the definition for the observation\r\n * @param {number} idx 0 or 1, for the index of the value to build an input for.\r\n * @param {object} ref the input-ref object to assing to the component (so we can get to it from other parts of the code)\r\n */\r\n renderRow1Part(result, obsDef, value, idx, inputId, ref, refIdx) {\r\n if (codeSelectorService.getValueCount(obsDef, this.props.strengType) > idx) {\r\n let adorner = {end: null, label: this.translations.textValue}; // so we can pass in byref\r\n let validifierData = {};\r\n let wInputProps = this.buildInputAttribs(obsDef, idx, adorner, validifierData);\r\n let isRequired = projectService.isObsValueRequired(obsDef, idx, this.props.strengType);\r\n let inError = false;\r\n if (this.props.showEmptyError && isRequired) {\r\n inError = isEmpty(value);\r\n }\r\n if (!isEmpty(value)) {\r\n inError |= this.invalidValue(validifierData, value);\r\n }\r\n \r\n if (!this.props.readOnly) { // no editing allowed in readonly mode\r\n if (obsDef.measure && obsDef.measure instanceof Array && obsDef.measure.length > idx) { // there is a predefined measure action defined\r\n if (obsDef.measure[idx] == \"depth\") {\r\n result.push(\r\n \r\n );\r\n }\r\n else if (obsDef.measure[idx] == \"deformation\" || obsDef.measure[idx] == 'Deformatie') {\r\n result.push(\r\n \r\n );\r\n }\r\n else if (obsDef.measure[idx] == 'freeform') {\r\n result.push(\r\n \r\n );\r\n }\r\n }\r\n else if (obsDef.valueType && obsDef.valueType.length > idx) { // this needs to be added first\r\n if (obsDef.valueType[idx] == \"mm\" || obsDef.valueType[idx] == \"mm_dec\") {\r\n result.push(\r\n \r\n );\r\n }\r\n else if (obsDef.valueType[idx] == \"degree\") {\r\n result.push(\r\n \r\n );\r\n }\r\n }\r\n }\r\n result.push();\r\n }\r\n }\r\n\r\n renderRow2() {\r\n let dir1 = this.buildDirection(0, this.state.direction1, 'direction1', this.focsMgr.dRef1, this.focsMgr.dRef1Idx);\r\n let dir2 = this.buildDirection(1, this.state.direction2, 'direction2', this.focsMgr.dRef2, this.focsMgr.dRef2Idx);;\r\n \r\n return (\r\n
\r\n {dir1}\r\n {dir2}\r\n
\r\n );\r\n }\r\n\r\n buildDirection(idx, value, fieldName, ref, refIdx) {\r\n let obsDef = this.state.observationDef;\r\n const directionCount = codeSelectorService.getDirectionCount(obsDef, this.props.strengType);\r\n if (obsDef && directionCount > idx) {\r\n let required = projectService.isObsDirectionRequired(obsDef, idx);\r\n return \r\n }\r\n return null;\r\n }\r\n\r\n renderButtons() {\r\n return (\r\n \r\n {this.renderButtonJoint()}\r\n {this.renderButtonPicture()}\r\n {this.renderButtonSonar()}\r\n {this.renderButtonLidar()}\r\n
\r\n \r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n renderButtonJoint() {\r\n let jointStyle = this.state.joint ? this.props.classes.joinChecked : this.props.classes.IconUnChecked; \r\n return (\r\n \r\n \r\n \r\n \r\n }\r\n className={this.props.classes.cardActionItem}\r\n label={this.state.joint ? this.translations.onJoint : this.translations.onStrand}\r\n onFocus={this.blockSelectorFocus(this.focsMgr.jRefIdx)} \r\n ref={this.focsMgr.jRef}\r\n />\r\n \r\n );\r\n }\r\n\r\n renderButtonPicture() {\r\n let includePicStyle = this.state.includePicture ? this.props.classes.cameraIconChecked : this.props.classes.IconUnChecked;\r\n return(\r\n \r\n \r\n \r\n \r\n }\r\n className={this.props.classes.cardActionItem}\r\n label={this.state.includePicture ? this.translations.withPic : this.translations.noPic}\r\n onFocus={this.blockSelectorFocus(this.focsMgr.iRefIdx)} \r\n ref={this.focsMgr.iRef} \r\n />\r\n \r\n );\r\n }\r\n\r\n renderButtonSonar() {\r\n if (this.hasSonar) {\r\n let includePicStyle = this.state.includeSonar ? this.props.classes.cameraIconChecked : this.props.classes.IconUnChecked;\r\n return(\r\n \r\n \r\n \r\n \r\n }\r\n className={this.props.classes.cardActionItem}\r\n label={this.state.includeSonar ? this.translations.withSonar : this.translations.noSonar}\r\n onFocus={this.blockSelectorFocus(this.focsMgr.sonarRefIdx)} \r\n ref={this.focsMgr.sonarRef} \r\n />\r\n \r\n );\r\n }\r\n }\r\n\r\n renderButtonLidar() {\r\n if(this.hasLidar) {\r\n let includePicStyle = this.state.includeLidar ? this.props.classes.cameraIconChecked : this.props.classes.IconUnChecked;\r\n return(\r\n \r\n \r\n \r\n \r\n }\r\n className={this.props.classes.cardActionItem}\r\n label={this.state.includeLidar ? this.translations.withLidar : this.translations.noLidar}\r\n onFocus={this.blockSelectorFocus(this.focsMgr.lidarRefIdx)} \r\n ref={this.focsMgr.lidarRef} \r\n />\r\n \r\n );\r\n }\r\n }\r\n\r\n renderRemark() {\r\n if (this.state.observationDef) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n buildLoc() {\r\n if (this.props.strengType === \"m\") { // it's a pit, so ask the descriptive location.\r\n const { t } = this.props;\r\n return(\r\n \r\n \r\n {descriptiveLocOptions.map((val, idx) => {\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 * @param {bool} includeClosure when true, the closure for this item is kept in the list.\r\n */\r\n getRelatedStartObs(includeClosure) {\r\n let list = this.props.onGetList();\r\n const key = this.props.data.values.join(\"\").substr(0, 3);\r\n let result = list.filter((x) => x !== this.props.data && x.longitude <= this.props.data.longitude && x.values.join(\"\").startsWith(key) && x.values[x.values.length-1] !== \"1\");\r\n\r\n for (const item of list) {\r\n if (includeClosure && item === this.props.data) { // if we need to include the closure for the current data point, then skip this step when the item is the current data point.\r\n continue;\r\n }\r\n if (item.values[item.values.length-1] === \"1\") { // it's a terminator, check if it's a terminator for one of our results\r\n const idx = result.findIndex((x) => +x.continuousIdx === +item.continuousIdx);\r\n if (idx > -1) {\r\n result.splice(idx, 1);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * looks for any obs in the list (start or end) that has the same continuousIdx\r\n */\r\n checkLinkedObs() {\r\n const list = this.props.onGetList();\r\n const data = this.props.data; \r\n let result = list.find((el) => +el.continuousIdx === +data.continuousIdx && el !== data);\r\n if (result) {\r\n const thisKey = data.values.join(\"\").substr(0, 3);\r\n const otherKey = result.values.join(\"\").substr(0, 3);\r\n return {result: thisKey === otherKey, related: result};\r\n }\r\n return {result: null, related: null};\r\n }\r\n\r\n /**\r\n * render the UI element for continuous observation terminators to select the related observation.\r\n */\r\n buildContinousTerminationSelector () {\r\n if (this.props.data.values[this.props.data.values.length-1] == \"1\") {\r\n let list = this.getRelatedStartObs(true);\r\n if (list.length === 1 && !isEmpty(this.props.data.continuousIdx) && list[0].continuousIdx === this.props.data.continuousIdx) {\r\n return null;\r\n }\r\n return(\r\n \r\n \r\n \r\n {list.map((val, idx) => {\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 * builds the html attributes for input field idx, so that it only allows the proper input.\r\n * @param {object} obsDef the observation definition\r\n * @param {number} idx the index nr of the value for which we want to get an adorner\r\n * @param {object} adorner object with 2 fields: end + label, so we can pass an extra result back to the caller\r\n * @param {object} validifierData object used to return all the info required to validate the data\r\n */\r\n buildInputAttribs(obsDef, idx, adorner, validifierData) {\r\n let result = {type: 'text'};\r\n if (obsDef) {\r\n if (obsDef.valueLength && obsDef.valueLength.length > idx) {\r\n result['maxLength'] = obsDef.valueLength[idx];\r\n }\r\n if (obsDef.valueType && obsDef.valueType.length > idx) {\r\n let valueType = obsDef.valueType[idx];\r\n if (valueType) {\r\n this.buildValueTypeForInputAttribs(validifierData, valueType, adorner);\r\n }\r\n }\r\n if (obsDef.valueLabel && obsDef.valueLabel.length > idx) { // do after calling buildValueTypeForInputAttribs, so we override it when we have specific label\r\n adorner.label = this.props.t(obsDef.valueLabel[idx]);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n \r\n\r\n /**\r\n * \r\n * @param {object} result will contain the result value\r\n * @param {string} valueType the type of value to expect\r\n * @param {object} adorner optional result object that contains the \r\n */\r\n buildValueTypeForInputAttribs(result, valueType, adorner) {\r\n if (valueType === \"ppm\") {\r\n Object.assign(result, {type: 'number', min: 0, max: 1000000, step: 1, precision: 0 });\r\n adorner.end = PPM\r\n adorner.label = this.translations.measure;\r\n }\r\n else if(valueType === \"%\") {\r\n Object.assign(result, {type: 'number', min: 0, max: 100, step: 1, precision: 0});\r\n adorner.end = {valueType}\r\n adorner.label = this.translations.procent;\r\n }\r\n else if(valueType === \"mm\") {\r\n Object.assign(result, {type: 'number', min: 0, step: 1 , precision: 0});\r\n adorner.end = {valueType}\r\n adorner.label = this.translations.measure;\r\n }\r\n else if (valueType === \"degree\") {\r\n Object.assign(result, {type: 'number', min: 0.0, step: 1, max: 360, precision: 1});\r\n adorner.end = °\r\n adorner.label = this.translations.degrees;\r\n }\r\n else if(valueType === \"mm_dec\") {\r\n Object.assign(result, {type: 'number', min: 0.0, step: 0.1, precision: 1 });\r\n adorner.end = mm\r\n adorner.label = this.translations.measure;\r\n }\r\n else if (valueType === \"n\" || valueType === \"number\") {\r\n Object.assign(result, {type: 'number', precision: 0 });\r\n adorner.label = this.translations.number;\r\n }\r\n }\r\n\r\n /**\r\n * returns true if the current observation definition specifies that extra data is needed\r\n */\r\n needsExtraData() {\r\n return this.state.values[this.state.values.length-1] !== \"1\";\r\n }\r\n\r\n /** returns true if the UI should indicate that this is a running continuous observation. */\r\n checkIsContinuous(newObj=false) {\r\n let result = {showContinuous: false, idx: null, complete: false, errorMsg: \"\", clearContinuousIdx: false};\r\n let prevWasContinuous = this.isContinuous; // we need to check if we go from not continuous to continuous. If so, we need to register/unregister event listeners.\r\n this.isContinuous = codeSelectorService.isContinuous(this.props.data.values);\r\n if (this.isContinuous) { \r\n result.showContinuous = true;\r\n result.idx = this.props.data.continuousIdx;\r\n if (!prevWasContinuous || newObj) { // newObj is true when an observation.value was changed and has now becme continuous\r\n activeProjectService.events.addListener(\"continuousChanged\", this.handleContinuousObsChanged);\r\n }\r\n const key = this.props.data.values.join(\"\").substr(0, 3);\r\n const list = this.props.onGetList();\r\n if (this.props.data.values[this.props.data.values.length-1] === \"1\") { // this is a closure, so check if we can find the accomponying start.\r\n let related = list.filter((x) => x != this.props.data && x.longitude <= this.props.data.longitude && x.values.join(\"\").startsWith(key) && +x.continuousIdx == +this.props.data.continuousIdx);\r\n if (related && related.length > 1) {\r\n related = related.sort((x, y) => y.longitude - x.longitude); // sort reversed so we have the closest element at pos 0\r\n if (related[0].values[related[0].values.length -1] === \"1\") { // we have 2 terminators after each other, not good\r\n result.showContinuous = true;\r\n result.errorMsg = this.translations.multipleEnd;\r\n }\r\n }\r\n else if (related && related.length == 1) {\r\n result.complete = true;\r\n }\r\n else {\r\n result.showContinuous = true;\r\n result.errorMsg = this.translations.noStart;\r\n result.clearContinuousIdx = true; // let the caller know that it is best to clear the idx nr on the record cause there is no start anymore\r\n result.idx = null;\r\n }\r\n }\r\n else {\r\n let related = list.filter((x) => x != this.props.data && x.longitude >= this.props.data.longitude && x.values.join(\"\").startsWith(key) && x.continuousIdx == this.props.data.continuousIdx);\r\n if (related && related.length > 0) {\r\n related = related.sort((x, y) => x.longitude - y.longitude);\r\n if (related[0].values[related[0].values.length -1] !== \"1\") { // we have 2 terminators after each other, not good\r\n result.showContinuous = true;\r\n result.errorMsg = this.translations.multipleStartMsg;\r\n }\r\n else {\r\n result.complete = true;\r\n }\r\n }\r\n }\r\n }\r\n else if (prevWasContinuous) {\r\n activeProjectService.events.removeListener(\"continuousChanged\", this.handleContinuousObsChanged);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * callback that handles cases when other observations have been added/changed/removed that are\r\n * also continuous. It allows us to recalculate the state of the continuous measurement: closed, open, in error\r\n */\r\n handleContinuousObsChanged = (params) => {\r\n const key = this.props.data.values.join(\"\").substr(0, 3);\r\n let otherKey = (params.oldKey) ? params.oldKey.values : params.changed.values;\r\n otherKey = otherKey.join(\"\");\r\n if (otherKey.startsWith(key)) { // another observation of the same type was added/removed/changed\r\n const result = this.checkIsContinuous();\r\n if (result.clearContinuousIdx) {\r\n delete this.props.data.continuousIdx;\r\n }\r\n this.setState({showContinuous: result.showContinuous, continuousMsg: result.errorMsg, continuousComplete: result.complete, continuousIdx: result.idx});\r\n }\r\n }\r\n\r\n /**\r\n * returns true if the value does not meet the requirements.\r\n * @param {object} validifierData the infor required to validate the value\r\n * @param {number | string} value the value to check\r\n */\r\n invalidValue(validifierData, value) {\r\n if (validifierData.type && validifierData.type == \"number\") {\r\n if (isNaN(value)) return true;\r\n if (typeof value !== \"string\" ) value = value.toString(); // normally, we expect strings, but what if!\r\n let valueParts = value.split('.'); // we know it's a string cause of the input field (type text)\r\n value = +value;\r\n if (validifierData.min !== undefined && value < validifierData.min) return true;\r\n if (validifierData.max !== undefined && value > validifierData.max) return true;\r\n let fractionLength = 0;\r\n if (valueParts.length > 1) {\r\n fractionLength = valueParts[valueParts.length-1].length;\r\n }\r\n if (validifierData.precision !== undefined && fractionLength > validifierData.precision) return true;\r\n }\r\n return false;\r\n }\r\n\r\n renderCollapsed() {\r\n const { t } = this.props;\r\n let includePicStyle;\r\n if (this.state.includePicture) {\r\n includePicStyle = this.props.classes.ROCameraIconChecked;\r\n }\r\n else {\r\n includePicStyle = this.props.classes.ROCameraIconUnChecked;\r\n }\r\n return (\r\n
\r\n
\r\n \r\n {this.state.location.toFixed(2)}\r\n \r\n {this.state.values.map((value, idx) => {\r\n let tooltip = this.state.valueLabels ? this.state.valueLabels[idx] : \"\";\r\n if (tooltip) {\r\n tooltip = t(tooltip);\r\n }\r\n return(\r\n \r\n \r\n {value}\r\n \r\n \r\n );\r\n })}\r\n {(this.state.waarde1 || this.state.waarde2 || this.state.direction1 || this.state.direction2) &&\r\n
|
\r\n }\r\n {(this.state.waarde1) && \r\n {this.state.waarde1}\r\n }\r\n {(this.state.waarde2) &&\r\n {this.state.waarde2}\r\n }\r\n {(+this.state.direction1) &&\r\n \r\n }\r\n {(+this.state.direction2) &&\r\n \r\n }\r\n
\r\n
\r\n {this.renderContinuous()}\r\n
\r\n {(this.props.showObsDetails && this.state.valueLabels) && \r\n \r\n {this.state.valueLabels.map((el, idx) => { \r\n return (
{t(el)}
);\r\n })}\r\n
\r\n }\r\n \r\n
\r\n );\r\n }\r\n\r\n renderContinuous() {\r\n if (this.state.showContinuous) {\r\n let msg = \"\"; \r\n let className = this.props.classes.isContinuousIcon;\r\n if (this.state.continuousMsg) {\r\n msg = this.state.continuousMsg;\r\n className = this.props.classes.isContinuousErrIcon;\r\n }\r\n let image = null;\r\n if (this.state.continuousComplete) {\r\n image = ;\r\n // when cont obs is complete, no message needed\r\n msg = \"\";\r\n }\r\n else {\r\n image = ;\r\n if (!msg) {\r\n msg = this.translations.notClosed;\r\n }\r\n }\r\n \r\n /* this div is important: otherwise we can't put the image a little bit down */\r\n return (\r\n \r\n \r\n
{image}
\r\n
\r\n {this.state.continuousIdx} \r\n \r\n
\r\n );\r\n }\r\n else if(this.state.continuousIdx != null) {\r\n return (\r\n {this.state.continuousIdx}\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n showCloseContinuousDlg = (event) => {\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n this.setState({continuousDlgOpen: true});\r\n event.stopPropagation(); // need to prevent from propogating, otherwise we change the position in the video, which we don't want\r\n event.preventDefault();\r\n }\r\n\r\n closeContinuousDlg = (result) => {\r\n this.setState({continuousDlgOpen: false});\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n if (this.props.onContinuousClosed) {\r\n this.props.onContinuousClosed(this.props.data, result);\r\n }\r\n }\r\n\r\n\r\n \r\n expand = (event) => {\r\n if (!event.isPropagationStopped()) { // could be that the user clicked on the continuous-icon to close it in which case it was stopped\r\n this.props.onExpand(true);\r\n if (this.props.onPositionChanged) {\r\n this.props.onPositionChanged(this.props.data.time);\r\n }\r\n }\r\n }\r\n\r\n /*collaps = () => {\r\n this.props.onExpand(true);\r\n }\r\n*/\r\n deleteObservation = () => {\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n this.props.onDelete(this);\r\n }\r\n\r\n toggleIncludePic = (event) => {\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n this.props.data.includePicture = !this.state.includePicture;\r\n this.setState({includePicture: !this.state.includePicture});\r\n activeProjectService.markDirty();\r\n if (event.screenX === 0 && event.screenY === 0) { // its triggered by a keyboard event, so move focus to the next item\r\n this.focsMgr.moveRight();\r\n }\r\n }\r\n\r\n toggleIncludeSonar = (event) => {\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n const newValue = !this.state.includeSonar;\r\n this.props.data.includeSonar = newValue;\r\n this.setState({includeSonar: newValue});\r\n activeProjectService.markDirty();\r\n if (event.screenX === 0 && event.screenY === 0) { // its triggered by a keyboard event, so move focus to the next item\r\n this.focsMgr.moveRight();\r\n }\r\n }\r\n\r\n toggleIncludeLidar = (event) => {\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n const newValue = !this.state.includeLidar;\r\n this.props.data.includeLidar = newValue;\r\n this.setState({includeLidar: newValue});\r\n activeProjectService.markDirty();\r\n if (event.screenX === 0 && event.screenY === 0) { // its triggered by a keyboard event, so move focus to the next item\r\n this.focsMgr.moveRight();\r\n }\r\n }\r\n\r\n handleValueChanged = (newValue) => {\r\n this.props.data.values = newValue;\r\n this.setState({values: newValue});\r\n activeProjectService.markDirty();\r\n }\r\n\r\n handleFieldChanged = (ev) => {\r\n this.props.data[ev.target.id] = ev.target.value;\r\n let newState = {};\r\n newState[ev.target.id] = ev.target.value;\r\n this.setState(newState);\r\n activeProjectService.markDirty();\r\n }\r\n\r\n /**\r\n * called when the user has changed the value for the direction.\r\n * withMouse: when true, the user used the mouse, so keep focus on the item, when with keyboard, move to next item \r\n */\r\n handleDirectionChanged = (field) => (value, withMouse) => {\r\n this.props.data[field] = value;\r\n let newState = {};\r\n newState[field] = value;\r\n this.setState(newState);\r\n activeProjectService.markDirty();\r\n if (!withMouse) { // move cursor at next tick, otherwise we move focus before keyboard event is fully processed, which could cause the event to also go to the next html element (the remark input field)\r\n setImmediate(() => { this.focsMgr.moveRight(); });\r\n } \r\n else {\r\n this.focsMgr.updateFocus(); // could be that we get here cause of delete pressed. In that case, need to refocus again.\r\n } \r\n }\r\n\r\n handleCheckJoint = (event) => {\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n this.props.data.joint = !this.props.data.joint;\r\n this.setState({joint: this.props.data.joint})\r\n activeProjectService.markDirty();\r\n if (event.screenX === 0 && event.screenY === 0) { // its triggered by a keyboard event, so move focus to the next item\r\n this.focsMgr.moveRight();\r\n }\r\n }\r\n\r\n handleDescriptiveLocChanged = (ev) => {\r\n this.props.data.descriptiveLoc = ev.target.value;\r\n this.setState({descriptiveLoc: ev.target.value});\r\n activeProjectService.markDirty();\r\n }\r\n\r\n handleContinuousIdxChanged = (ev) => {\r\n this.props.data.continuousIdx = +ev.target.value;\r\n this.setState({continuousIdx: +ev.target.value});\r\n activeProjectService.markDirty();\r\n activeProjectService.continuousChanged(this.props.data);\r\n }\r\n\r\n handleValueComplete = (value) => {\r\n try {\r\n const prevComplete = this.state.valueComplete;\r\n const prevContinuous = this.state.showContinuous;\r\n const data = this.props.data;\r\n this.setState({valueComplete: value});\r\n if (value == true) { // value is complete\r\n this.isContinuous = codeSelectorService.isContinuous(data.values);\r\n if (this.isContinuous && data.continuousIdx == null) { // important: keep == null, to also catch 'undefined'\r\n if (data.values[data.values.length-1] === \"1\") { // this is a continuous obs that doesn't yet ahve an idx and it's a terminator. So if there is only 1 previous obs related to it, we can pre-fill the idx value.\r\n let related = this.getRelatedStartObs(false);\r\n if (related && related.length === 1) {\r\n data['continuousIdx'] = related[0].continuousIdx;\r\n activeProjectService.markDirty();\r\n }\r\n }\r\n activeProjectService.processNewContinuousRecord(data);\r\n activeProjectService.findDuplicateToClose(data).then((toClose) => { // if there is a same obs still open, ask user if it needs to be closed, and do so if needed\r\n if (toClose && this.props.onContinuousClosed) {\r\n // 'closeDuplicate is just a dummy value, it needs to be not null\r\n this.props.onContinuousClosed(toClose, \"closeDuplicate\", data.time, data.longitude, false); \r\n }\r\n }) \r\n }\r\n else if (data.continuousIdx != null) { // the previous iteration of this obs was a continuous one, so there might be a dangling otherside which we need to update (for the ui)\r\n const {result, related} = this.checkLinkedObs();\r\n if (!result) {\r\n activeProjectService.clearContinuousRecord(data, related); // state.values contains the previous index, this will help searching for any related to the previous continuous key\r\n }\r\n }\r\n \r\n let contSettings = this.checkIsContinuous(true); // when checking for continuous obs, we alo register events if they werent registered yet, checked on isContinuous, but this already gets set here, so it can't detect a change. This is why we need to force it when creating a new cont obj\r\n const obsDef = codeSelectorService.getLeaf(data.values, this.props.strengType) // get the definition for the observation, so we can set properties \r\n if (obsDef) {\r\n const valueCount = codeSelectorService.getValueCount(obsDef, this.props.strengType);\r\n const directionCount = codeSelectorService.getDirectionCount(obsDef, this.props.strengType);\r\n if (valueCount == 1) delete data.waarde2; // when a new observation def leaf is selected, always make certain that the correct amount of values & directions are stored in the data (makes it easier to render/saver)\r\n if (!valueCount) this.deleteValues();\r\n if (directionCount == 1) delete data.direction2;\r\n if (!directionCount) this.deleteDirections();\r\n if (!obsDef.remark) delete data.remark;\r\n activeProjectService.markDirty();\r\n }\r\n if (this.isContinuous) { // the value has changed and it is continuous, so make certain everybody is updated\r\n activeProjectService.continuousChanged(data);\r\n }\r\n this.setState({showContinuous: contSettings.showContinuous, continuousMsg: contSettings.errorMsg, continuousIdx: contSettings.idx, continuousComplete: contSettings.complete, observationDef: obsDef});\r\n setImmediate(() => {\r\n this.focsMgr.moveToFirstAfterCode(); // when value is selected, move to the next input that the user needs to provide\r\n });\r\n }\r\n else {\r\n if (prevComplete == true && prevContinuous) { // no longer continuous\r\n const prevIdx = this.state.continuousIdx; // so we can pass it along as param after removing from state\r\n const prevKey = [...this.state.values]; // make a copy of the code list, it is about to be changed, but we need to pass it into the continousChanged event\r\n this.setState({showContinuous: false, continuousMsg: \"\", continuousIdx: null});\r\n this.isContinuous = false;\r\n delete data.continuousIdx;\r\n activeProjectService.continuousChanged(data, prevKey, prevIdx);\r\n }\r\n this.deleteValues();\r\n this.deleteDirections();\r\n delete data.remark;\r\n this.setState({remark: undefined});\r\n activeProjectService.markDirty();\r\n }\r\n } \r\n catch(error) {\r\n dialogService.error(this.translations.docChanged, this.translations.changeErr(errExtractor.get(error)));\r\n }\r\n }\r\n\r\n deleteValues() {\r\n delete this.props.data.waarde1; \r\n delete this.props.data.waarde2;\r\n this.setState({waarde1: undefined, waarde2: undefined});\r\n }\r\n\r\n deleteDirections() {\r\n delete this.props.data.direction1;\r\n delete this.props.data.direction2;\r\n this.setState({direction1: undefined, direction2: undefined});\r\n }\r\n\r\n /**called when the user wants to perform an automatic measurement by clicking on the video \r\n * validifierData: so we can figure out how many digits after the comma\r\n * callback: the event to trigger. each type of measurement has it's own event.\r\n */\r\n handleStartMeasure = (valueIdx, validifierData, callback) => () => {\r\n this.stopAllMeasurements(); // if there is a current measurement going on, it needs to be stopped.\r\n if (this.state.measuring !== valueIdx) { // starting a new measure\r\n const measureData = {measuring: valueIdx, validifierData: validifierData};\r\n measurementService.measureData = measureData;\r\n measurementService.obs = this.props.data;\r\n this.setState(measureData);\r\n callback(this.handleMeasurementDone);\r\n }\r\n else { // turning an existing off, just set state cause the measurement has already been cnacled.\r\n this.setState({measuring: 0});\r\n }\r\n }\r\n\r\n\r\n /**\r\n * raises the event. Doesn't reset the measurement service, cause that service might need the data after\r\n * this object is destroyed (measure from fullscreen)\r\n */\r\n stopAllMeasurements() {\r\n if (this.state.measuring) { \r\n if (this.props.onStopMeasure) {\r\n this.props.onStopMeasure();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * called when the measurement is done and it wasn't performed from fullscreen.\r\n * lets the obs update the ui.\r\n */\r\n handleMeasurementDone = (value) => {\r\n if (value == null) { // null indicates canceled operation\r\n this.setState({measuring: 0});\r\n }\r\n else {\r\n let measuring = this.state.measuring !== null ? this.state.measuring : (measurementService.measureData ? measurementService.measureData.measuring : null); //when measure starts with fullscreen, but user then goes to normal view, than the obs has been reloaded and state.measuring is gone. But the service should now the info still, so use that\r\n if (measuring === 1) {\r\n this.setState({waarde1: value, measuring: 0});\r\n }\r\n else if (measuring === 2) {\r\n this.setState({waarde2: value, measuring: 0});\r\n }\r\n else {\r\n this.setState({measuring: 0});\r\n dialogService.error(this.translations.obs, this.translations.obsMeasureErrMsg);\r\n }\r\n }\r\n // don't call onStopMeasure, the measurement was succesful, so the root object will handle this situation. this is because sometimes this object is already destroyed (fullscreen mode)\r\n }\r\n\r\n handleReadyClicked = () => {\r\n if (this.distanceValueChanged === true && this.props.onDistanceChanged) {\r\n this.props.onDistanceChanged(this.props.data);\r\n }\r\n this.distanceValueChanged = false; // important: needs to be reset, even if there is no callback assigned\r\n if (this.props.onExpand) this.props.onExpand(false);\r\n const key = this.props.data.values.join('-');\r\n if (key.startsWith(TERMINATE_KEY) || key.startsWith(TERMINATE_KEY2)) { // the inspection has been terminated\r\n this.props.onTerminated();\r\n }\r\n if (key.startsWith(CHANGE_SHAPE_KEY) && this.props.readOnly === false) { // the shape is changed and we are in edit mode, on the current obs, so the current time is active, so we need to udpate the strand-props so that all other parts of the system can adjust\r\n strandPropsService.setSizeFromObs(+this.state.waarde1, +this.state.waarde2, this.props.data);\r\n }\r\n }\r\n\r\n /**called by the code selector when a tab action causes it to go out of focus. */\r\n handleCodeSelectorGotoNext = () => {\r\n this.setState({allowSelectorFocus: false });\r\n this.focsMgr.moveRight();\r\n }\r\n\r\n /**\r\n * closing of tree needs to async call updateFocus, if we don't the objects to focus to, arent' loaded yet\r\n */\r\n handleTreeClosed = () => {\r\n setImmediate(() => {this.focsMgr.updateFocus()});\r\n }\r\n\r\n \r\n\r\n blockSelectorFocus =(idx) => () => { \r\n this.focsMgr.currentlyFocused = idx;\r\n this.setState({allowSelectorFocus: false}); // so that we have the correct idx, even on a click\r\n }\r\n\r\n handleKeyboard = (e) => {\r\n if ((e.keyCode === 9 && e.ctrlKey === false && e.shiftKey === true) || // shft-tab\r\n (e.keyCode === 37 && e.ctrlKey === false && e.shiftKey === false && this.focsMgr.notInText(true)) ) { // arrow key \r\n this.focsMgr.moveLeft();\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n else if((e.keyCode === 9 && e.ctrlKey === false && e.shiftKey === false) || // tab\r\n (e.keyCode === 39 && e.ctrlKey === false && e.shiftKey === false && this.focsMgr.notInText(false)) || // arrow key\r\n (e.keyCode === 13 && this.focsMgr.currentlyFocusedIsInput()) // enter key\r\n ) { \r\n this.focsMgr.moveRight();\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n }\r\n\r\n handleCodeSelectorClicked =() => {\r\n this.focsMgr.currentlyFocused = 0;\r\n this.setState({allowSelectorFocus: true});\r\n }\r\n\r\n}\r\n\r\nObservation.defaultProps = {\r\n treeOpen: false\r\n}\r\n\r\nObservation.propTypes = {\r\n data: PropTypes.object,\r\n isExpanded: PropTypes.bool,\r\n showObsDetails: PropTypes.bool, // hide/show code labels in a list.\r\n onExpand: PropTypes.func.isRequired,\r\n onDelete: PropTypes.func.isRequired,\r\n onPositionChanged: PropTypes.func, // when this observation is expanded, let the system go to the video point at which it was recorded.\r\n treeOpen: PropTypes.bool, // when true, the search tree will be opened\r\n onTreeOpened: PropTypes.func, // used to reset that the tree must be opened (after it has been opened, the user must be able to close it again.)\r\n onMoveDown: PropTypes.func, // called after arrow up or down event, focus should move to observation above or below, at the same index as the parameter\r\n onMoveUp: PropTypes.func,\r\n onGotoNext: PropTypes.func, // called after tab goes out of scope, go to the next observation, start of values list\r\n onGotoPrev: PropTypes.func,\r\n focusedValueIdx: PropTypes.number,\r\n onFocusedInit: PropTypes.func, // called when a value is focused when loaded or updated in response to a focusedValueIdx\r\n showEmptyError: PropTypes.bool, // when true, shows an error on inputs that are empty and shoudl be filled\r\n strengType: PropTypes.string, // dp = streng, m = put, s=stationary determins which fields are visible\r\n onStartMeasure: PropTypes.func, // called when a measuring procedure should be started. Contains a callback that should be called when the operation is done.\r\n onStopMeasure: PropTypes.func, // called when measuring procedure should be stopped\r\n onStartMeasureAngle: PropTypes.func, // called when a measuring procedure should be started. Contains a callback that should be called when the operation is done.\r\n onStartMeasureDepth: PropTypes.func,\r\n onStartMeasureAreaSize: PropTypes.func,\r\n onStartMeasureFreeform: PropTypes.func, // see onStartMeasureAngle/onStartMeasure\r\n onGetList:PropTypes.func, // we use a function to get the list of observations instead of a prop cause the function remains the same, the list object changes often. It would cause too many unrequired ui updates for objects that don't need it.\r\n onContinuousClosed:PropTypes.func, // called when the user wants to close a continuous observation or reopen it with new values\r\n readOnly: PropTypes.bool, // for viewer\r\n onDistanceChanged: PropTypes.func, // called when the tractor-distance is changed \r\n onTerminated: PropTypes.func, // called when the B-D-C-?-? code is entered -> inspection was terminated. This should stop video recording\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(Observation));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n //icons\r\n import Link from 'mdi-material-ui/Link';\r\n import LinkOff from 'mdi-material-ui/LinkOff';\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { withTranslation } from 'react-i18next';\r\nimport InputBase from '@material-ui/core/InputBase';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport InputAdornment from '@material-ui/core/InputAdornment';\r\nimport Box from '@material-ui/core/Box';\r\nimport { activeProjectService } from '../../../../services/active_project_service';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport { documentControlService } from '../../document_control_service';\r\nimport Grow from '@material-ui/core/Grow';\r\nimport { hhmmss, hhmmssToSec } from '../../../services/time';\r\nimport { configService } from '../../../../services/config_service';\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n marginLeft: theme.spacing(2), \r\n marginRight: theme.spacing(1)\r\n },\r\n locationInput: {\r\n borderBottomWidth: '0px',\r\n borderBottomColor: 'gray',\r\n \"&:hover\": {\r\n borderBottomWidth: '1px',\r\n borderBottomStyle: 'solid' \r\n }\r\n },\r\n locationInputError: {\r\n borderBottomColor: 'red',\r\n borderBottomWidth: '1px',\r\n borderBottomStyle: 'solid' \r\n },\r\n focusedLocationInput: {\r\n borderBottomWidth: '1px',\r\n borderBottomStyle: 'solid'\r\n }, \r\n focusedLocationError: {\r\n borderBottomWidth: '1px',\r\n borderBottomColor: 'red',\r\n borderBottomStyle: 'solid'\r\n }\r\n});\r\n\r\n\r\n/**\r\n * UI element for managing the currently active user: config, logout..\r\n */\r\nclass LocationEditor extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n const distance = props.data ? props.data.longitude : 0;\r\n const time = props.data ? props.data.time : 0;\r\n this.state = {\r\n distance: distance.toFixed(2),\r\n time: hhmmss(time),\r\n errorDistance: this.getErrorStateDistance(distance),\r\n errorTime: this.getErrorStateTime(time),\r\n linked: configService.get(\"observations.distanceTimeEditLinked\"),\r\n hasFocus: false\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.updateErrors(); // need to update erros after mount cause othrewise the active-streng hasnt' updated yet and we get an incorrect error\r\n }\r\n \r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.data !== this.props.data) {\r\n this.updateErrors();\r\n }\r\n }\r\n\r\n updateErrors() {\r\n const distance = this.props.data ? this.props.data.longitude : 0;\r\n const time = this.props.data ? this.props.data.time : 0;\r\n this.setState({distance: distance.toFixed(2), \r\n time: hhmmss(time),\r\n errorDistance: this.getErrorStateDistance(distance),\r\n errorTime: this.getErrorStateTime(time),\r\n });\r\n }\r\n\r\n handleStrengChanged = (streng) => {\r\n this.updateErrors();\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n let tooltipDistance = (this.state.errorDistance) ? this.state.errorDistance : t(\"De afstand in meter waarop de waarneming werd gemaakt\");\r\n let tooltipTime = (this.state.errorTime) ? this.state.errorTime : t(\"The time in the video at which the observation occured\");\r\n\r\n let linkIcon;\r\n if (this.state.linked) {\r\n linkIcon = \r\n }\r\n else {\r\n linkIcon = \r\n }\r\n const defaultInputClass = this.state.hasFocus ? this.props.classes.focusedLocationInput : this.props.classes.locationInput;\r\n const inputTagClassesDistance = {\r\n root: this.state.errorDistance ? this.props.classes.locationInputError : defaultInputClass, \r\n focused: this.state.errorDistance ? this.props.classes.focusedLocationError : this.props.classes.focusedLocationInput\r\n };\r\n const inputTagClassesTime = {\r\n root: this.state.errorTime ? this.props.classes.locationInputError : defaultInputClass, \r\n focused: this.state.errorTime? this.props.classes.focusedLocationError : this.props.classes.focusedLocationInput\r\n };\r\n \r\n const inputPropsTime = this.buildInputProps(this.state.time, false);\r\n\r\n const inputPropsDistance = this.buildInputProps(this.state.distance, true);\r\n const endAdornerDistance = this.state.hasFocus ? m : null;\r\n\r\n return (\r\n this.setState({hasFocus: true})} \r\n onBlur={() => this.setState({hasFocus: false})}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {linkIcon}\r\n \r\n \r\n \r\n h:m:s}\r\n value={this.state.time} \r\n onChange={this.handleTimeChanged}\r\n onFocus={this.props.onFocus} \r\n classes={inputTagClassesTime}\r\n inputProps={inputPropsTime}\r\n readOnly={this.props.readOnly}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n toggleLinked = () => {\r\n const newValue = !this.state.linked;\r\n configService.set(\"observations.distanceTimeEditLinked\", newValue);\r\n this.setState({linked: newValue});\r\n }\r\n\r\n buildInputProps(value, asFirst) {\r\n const charLength = `${value}`.length; // 2 extra for the units\r\n const minWidth = (asFirst && this.state.hasFocus === false) ? '6ch' : '1ch';\r\n const inputProps = {\r\n style: {\r\n width: `${charLength}ch`, \r\n minWidth: minWidth, \r\n boxSizing: 'border-box',\r\n textAlign: 'right'\r\n }, \r\n 'aria-label': 'location',\r\n type: \"text\"\r\n }\r\n //if (!asFirst) {\r\n // inputProps['pattern'] = '^((?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d$)';\r\n // }\r\n return inputProps;\r\n }\r\n\r\n handleDistanceChanged = (ev) => {\r\n// const { t } = this.props;\r\n let value = ev.target.value;\r\n this.setState({distance: value, errorDistance: this.getErrorStateDistance(value)}); // must be done before modifying value (change to int), otherwise it becomes hard to enter values like '1.2' -> fails at '1.'\r\n if (!isNaN(value)) {\r\n value = +value; // turn into number\r\n this.props.data.longitude = value; // always store as number, cause we do some calculations on this.\r\n if (this.state.linked) {\r\n const time = documentControlService.distanceToTime(value);\r\n this.props.data.time = time;\r\n this.setState({time: hhmmss(time)});\r\n if (this.props.onTimeChanged) {\r\n this.props.onTimeChanged(time);\r\n }\r\n }\r\n if (this.props.onDistanceChanged) {\r\n this.props.onDistanceChanged(value);\r\n }\r\n activeProjectService.markDirty();\r\n }\r\n }\r\n\r\n handleTimeChanged = (ev) => {\r\n //const { t } = this.props;\r\n const stringValue = ev.target.value;\r\n let value = hhmmssToSec(stringValue);\r\n this.setState({time: stringValue, errorTime: this.getErrorStateTime(value, stringValue)}); // must be done before modifying value (change to int), otherwise it becomes hard to enter values like '1.2' -> fails at '1.'\r\n if (value !== null && !isNaN(value)) { // when null, could not be converted, so don't do anything with the value.\r\n this.props.data.time = value; // always store as number, cause we do some calculations on this.\r\n if (this.state.linked) {\r\n const distance = documentControlService.timeToDistance(value);\r\n this.props.data.longitude = distance;\r\n this.setState({distance: distance.toFixed(2)});\r\n if (this.props.onDistanceChanged) {\r\n this.props.onDistanceChanged(value);\r\n }\r\n }\r\n if (this.props.onTimeChanged) {\r\n this.props.onTimeChanged(value);\r\n }\r\n activeProjectService.markDirty();\r\n }\r\n }\r\n\r\n getErrorStateDistance(value) {\r\n const { t } = this.props;\r\n if (isNaN(value)) {\r\n return t(\"number expected\");\r\n }\r\n else {\r\n value = +value; // turn into number\r\n let max = 0; // normally there should always be a streng, if there isn't, don't allow location change\r\n const streng = activeProjectService.activeStreng;\r\n if (streng) {\r\n max = +streng.actualInspectionLength > 0 ? +streng.actualInspectionLength : +streng.expectedInspectionLength;\r\n }\r\n if (value < 0 || value > max ) {\r\n return t(\"out of range\", {min: 0, max: max});\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n getErrorStateTime(value, stringValue) {\r\n const { t } = this.props;\r\n if (stringValue !== undefined) { // no need to check string value if it wasn't entered (and thus not defined). could also be called for the init state, which is from the number\r\n if (/^((?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d$)/.test(stringValue) === false) {\r\n return t(\"time_expected\");\r\n }\r\n }\r\n let max = 0; // normally there should always be a streng, if there isn't, don't allow location change\r\n const streng = activeProjectService.activeStreng;\r\n if (streng) {\r\n max = streng.videoLength > 0 ? +streng.videoLength : documentControlService.currentTime; // while recording, the streng doesn't yet know the videolength, but various other locations already know the current timestamp, which is the current max, so use that.\r\n }\r\n if (value < 0 || value > max ) {\r\n return t(\"out of range\", {min: \"00:00:00\", max: hhmmss(max)});\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nLocationEditor.propTypes = {\r\n data: PropTypes.object,\r\n onDistanceChanged: PropTypes.func, // called when the duration part has changed, so the observation can update it's internal value (for read-only)\r\n onTimeChanged: PropTypes.func, // called when the time part has changed.\r\n onFocus: PropTypes.func,\r\n navDistance: PropTypes.any, // the ref object to attach to the distance-input, so the parent can do navigation\r\n navTime: PropTypes.any, // the ref object to attach to the time-input, so the parent can do navigation\r\n readOnly: PropTypes.bool, // for viewer\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(LocationEditor));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\r\nimport Link from '@material-ui/core/Link';\r\nimport { codeSelectorService } from '../../../services/code_selector_service';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport CodeSelectorTreeSearch from './code_selector_tree_dialog';\r\nimport CodeSelectorListPopup from './code_selector_list_popup';\r\nimport ReactDOM from 'react-dom';\r\nimport { withTranslation } from 'react-i18next';\r\n\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n height: '100%',\r\n width: '100%'\r\n },\r\n listItemText: {\r\n display: 'flex',\r\n flexDirection: 'row-reverse',\r\n justifyContent: 'flex-end'\r\n },\r\n listItemSecondaryText: {\r\n marginRight: theme.spacing(1)\r\n },\r\n breadcrumbs: {\r\n color: theme.palette.text.primary\r\n }\r\n});\r\n\r\n\r\n// This resolves to nothing and doesn't affect browser history\r\nconst dudUrl = 'javascript:;';\r\n\r\nclass CodeSelector extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n popupOpen: false,\r\n popupAnchorEl: null,\r\n currentList: null, // the selectionNode that will supply the data for the popup (from the selectionodes list).\r\n editIdx: -1, // the index nr of the value currently being edited (if any)\r\n needsNextValue: true,\r\n errorIdx: -1, // if we couldn't find a code in one of the dicts, the location of the first letter with a problem is stored here.\r\n treeRoot: null, // contains the root of the tree of selection nodes, so it can be passed on to the sub component when loaded.\r\n partial: null, // some values consist out of multiple letters, so during keyboard entry, it is needed to somtimes store values that have not yet been matched with something In the db.\r\n focusedIdx: -1 // the input element that currently should have focus. -1 is the questionmark.\r\n };\r\n this.QuestionInputRef = null; // ref to the ? object, so we can move focus we needed.\r\n this.linkRefs = {}; // ref to all the link obects, so we can manage focus as we want.\r\n\r\n this.selectionNodes = []; // stores the objects who's children are currently candidates for the link values. indexes match with values.\r\n this.lastValueChange = null; // when value is changed, event is raised, prop gets updated, but in this case, the intenral state is still ok, so no need to recalcualte stuff.\r\n this.callIsCompleteOnTreeClose = false;\r\n this.valueOnTreeClose = null;\r\n this.treeOpen = false; // the tree can deside by itself or we can command it, anyway, we need to know it's state\r\n }\r\n\r\n componentDidMount() {\r\n if (codeSelectorService.data == null) {\r\n codeSelectorService.load();\r\n }\r\n this.calculateSelectionNodes();\r\n this.setState({treeRoot: codeSelectorService.data});\r\n this.calculateFocusedIdx();\r\n this.putFocus();\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.values != this.props.values && this.props.values !== this.lastValueChange) {\r\n this.calculateSelectionNodes();\r\n this.setState({editIdx: this.props.values.length, partial: null}); // when the values have changed, make certain we update the edit pos. Need this for new elements that get inserted into the list, they will get re-used ui elements\r\n //this.calculateFocusedIdx();\r\n if (this.props.allowFocus) {\r\n setImmediate(() => {\r\n this.putFocus();\r\n });\r\n }\r\n }\r\n if (prevProps.focusedValueIdx != this.props.focusedValueIdx || prevProps.allowFocus != this.props.allowFocus) {\r\n this.calculateFocusedIdx();\r\n }\r\n if (this.state.popupOpen === false && (this.props.treeOpen === false || this.props.treeOpen === null) && this.props.allowFocus) this.putFocus(); // after an update, there was a rerender, so manage focus\r\n this.lastValueChange = null; // make certain that htis is always reset appropriatly\r\n }\r\n\r\n /**\r\n * called after mount or update to check if theh parent requested a specific\r\n * value to select and if so, if it is within range, otherwise the last one will be selected.\r\n */\r\n calculateFocusedIdx() {\r\n if (this.props.focusedValueIdx !== null) {\r\n let idx = this.props.focusedValueIdx < this.props.values.length ? this.props.focusedValueIdx : this.props.values.length - 1;\r\n this.setState({focusedIdx: idx});\r\n if (this.props.onFocusedInit) this.props.onFocusedInit();\r\n }\r\n }\r\n\r\n putFocus(){\r\n if (this.state.focusedIdx == -1) {\r\n if (this.QuestionInputRef) this.focusItem(this.QuestionInputRef);\r\n }\r\n else {\r\n let objRef = this.linkRefs[this.state.focusedIdx];\r\n if (objRef) this.focusItem(objRef);\r\n }\r\n }\r\n\r\n focusItem(item) {\r\n if (item !== null && item !== undefined) {\r\n ReactDOM.findDOMNode(item).focus();\r\n }\r\n }\r\n\r\n calculateSelectionNodes() {\r\n this.selectionNodes = [codeSelectorService.data]; //first item is always the root \r\n let currentLst = codeSelectorService.data.children;\r\n let idx = 0;\r\n for (let value of this.props.values) {\r\n if (value === null) { break; } // null can happen if something went wrong with removing codes\r\n value = value.toLowerCase(); // make certain we compare apples with apples\r\n const found = currentLst.find(x => x.value.toLowerCase() == value);\r\n if (found) {\r\n this.selectionNodes.push(found);\r\n currentLst = codeSelectorService.getChildren(found, this.props.strengType);\r\n if (currentLst == null) { break; }\r\n }\r\n else {\r\n this.setState({errorIdx: idx});\r\n break;\r\n }\r\n idx++;\r\n }\r\n let needsNextVal = currentLst != null;\r\n if (needsNextVal && this.state.partial == null) { // if there is a partial, focus it, otherwise go to new pos\r\n this.setState({ needsNextValue: needsNextVal, focusedIdx: -1 });\r\n }\r\n else {\r\n this.setState({ needsNextValue: needsNextVal, focusedIdx: this.props.values.length - 1 }); // when all items have been entered, move to end of the list. note: could be problem that it always goes to end of list, in that case, check if there is a change in state for needsNextVAlue\r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n let codeSelectorVal = \"\";\r\n if (this.state.editIdx >= 0) {\r\n codeSelectorVal = this.props.values[this.state.editIdx];\r\n }\r\n return (\r\n \r\n
\r\n \r\n {this.props.values.map((value, idx) => {\r\n return (\r\n \r\n
this.linkRefs[idx] = input} \r\n tabIndex=\"0\" \r\n onFocus={this.handleLinkFocused(idx)}>\r\n \r\n {value}\r\n \r\n
\r\n
\r\n );\r\n })}\r\n {(this.state.needsNextValue && this.state.errorIdx == -1) &&\r\n \r\n
this.QuestionInputRef = input} \r\n key={this.props.values.length} \r\n color=\"primary\" \r\n tabIndex=\"0\" \r\n style={{cursor:\"pointer\"}}\r\n onFocus={this.handleNewFocused}\r\n onClick={this.showSelectionList(this.props.values.length)}\r\n >\r\n ?\r\n
\r\n
\r\n }\r\n
\r\n {(!this.props.readOnly) && \r\n \r\n }\r\n
\r\n {(!this.props.readOnly) && \r\n \r\n }\r\n
\r\n );\r\n }\r\n\r\n getLinkColor = (idx) => {\r\n if (this.state.errorIdx > -1 && idx >= this.state.errorIdx) {\r\n return 'error';\r\n }\r\n return 'inherit';\r\n }\r\n\r\n getTooltipFor = (idx) => { \r\n const { t } = this.props;\r\n if (this.state.errorIdx > -1 && idx >= this.state.errorIdx) {\r\n return t(\"Kan geen text waarde vinden: onbekende waarde.\");\r\n }\r\n else if (this.selectionNodes.length > idx +1) { // when first loading, the selectionNodes list is not yet completely filled (only after componentDidMount)\r\n return t(this.selectionNodes[idx + 1].label);\r\n }\r\n return \"\";\r\n }\r\n\r\n showSelectionList = (idx) => (event) => {\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n if (this.props.onClick) this.props.onClick(); // so parent can set focus correctly\r\n if (this.state.errorIdx == -1 || idx <= this.state.errorIdx) {\r\n const children = codeSelectorService.getChildren(this.selectionNodes[idx], this.props.strengType);\r\n this.setState({ popupOpen: true, popupAnchorEl: event.currentTarget, currentList: children, editIdx: idx });\r\n }\r\n }\r\n\r\n handleLinkFocused = (idx) => (event) => {\r\n this.setState({editIdx: idx, partial: this.props.values[idx]}); // make certain that the correct idx is selected when a link get focus and that it's content is loaded as partial, so that any non-finished partials can still be finished.\r\n }\r\n\r\n handleNewFocused = (event) => {\r\n this.setState({editIdx: this.props.values.length, partial: null});\r\n //this.setState({editIdx: this.props.values.length});\r\n }\r\n\r\n handleClosePopup = () => {\r\n this.setState({ popupOpen: false, popupAnchorEl: null });\r\n }\r\n\r\n handleTreeClosed = () => {\r\n this.treeOpen = false;\r\n if (this.callIsCompleteOnTreeClose) {\r\n this.callIsCompleteOnTreeClose = false;\r\n if (this.props.onIsCompleteChanged) {\r\n this.props.onIsCompleteChanged(this.valueOnTreeClose);\r\n }\r\n this.valueOnTreeClose = null;\r\n }\r\n if (this.props.onTreeClosed) {\r\n this.props.onTreeClosed();\r\n }\r\n }\r\n\r\n handleTreeOpened = () => {\r\n this.treeOpen = true;\r\n this.callIsCompleteOnTreeClose = false;\r\n this.valueOnTreeClose = null;\r\n if (this.props.onTreeOpened) {\r\n this.props.onTreeOpened();\r\n }\r\n }\r\n\r\n handleValueChanged = (item) => {\r\n this.updateValues(item.value);\r\n let currentIdx = this.state.editIdx === -1 ? 0 : this.state.editIdx; // handle 'no data yet' case \r\n if (this.state.editIdx <= this.state.errorIdx) { // if we just tried to correct an error, reset\r\n this.setState({errorIdx: -1});\r\n }\r\n if (this.selectionNodes.length <= currentIdx + 1){ // value might have been added or changed.\r\n this.selectionNodes.push(item);\r\n }\r\n else {\r\n this.selectionNodes[currentIdx + 1] = item; \r\n }\r\n const needsNextValue = codeSelectorService.hasChildren(item, this.props.strengType);\r\n if ((this.state.needsNextValue != needsNextValue || !needsNextValue) && this.props.onIsCompleteChanged) { // need to trigger the event, but only when full input or switched to not-full (not triggered for every not-full event)\r\n if (this.treeOpen) {\r\n this.callIsCompleteOnTreeClose = true;\r\n this.valueOnTreeClose = !needsNextValue; // we keep the last value \r\n }\r\n else {\r\n this.props.onIsCompleteChanged(!needsNextValue);\r\n }\r\n }\r\n this.setState({ popupOpen: false, \r\n popupAnchorEl: null, \r\n needsNextValue: needsNextValue, \r\n editIdx: currentIdx + 1,\r\n errorIdx: -1,\r\n focusedIdx: -1 \r\n });\r\n if (needsNextValue && !this.treeOpen) setTimeout(() => this.focusItem(this.QuestionInputRef), 50);\r\n }\r\n\r\n updateValues(value) {\r\n let newValues;\r\n if (this.state.editIdx > 0) {\r\n newValues = this.props.values.slice(0, this.state.editIdx);\r\n newValues.push(value);\r\n }\r\n else {\r\n newValues = [value];\r\n }\r\n if (this.props.onValuesChanged){\r\n this.lastValueChange = newValues;\r\n this.props.onValuesChanged(newValues);\r\n }\r\n }\r\n\r\n /**\r\n * remark: only call when full list of values has been found (can't add any more children)\r\n */\r\n handleSetItemFromTree = (value, isLeaf) => {\r\n if (this.props.onValuesChanged){\r\n this.props.onValuesChanged(value);\r\n }\r\n if (this.state.needsNextValue !== !isLeaf) {\r\n this.callIsCompleteOnTreeClose = true;\r\n this.valueOnTreeClose = isLeaf;\r\n }\r\n this.setState({partial: null, \r\n needsNextValue: !isLeaf, \r\n editIdx: value.length,\r\n errorIdx: -1,\r\n focusedIdx: -1 \r\n });\r\n }\r\n\r\n /**\r\n * called from tree when using mouse. Level indicate the nr of letters that can remain\r\n * all after that point must be removed.\r\n */\r\n handleRemoveItemsFromTree = (level) => {\r\n let newValues = this.props.values.slice(0, level);\r\n if (this.props.onValuesChanged){\r\n this.props.onValuesChanged(newValues);\r\n }\r\n this.setState({\r\n needsNextValue: true, // we have just removed a value, so it's safe to say that we need a new next value, also put the focus on that\r\n editIdx: newValues.length,\r\n errorIdx: -1,\r\n focusedIdx: -1 \r\n })\r\n }\r\n\r\n handleKeyboard = (e) => {\r\n if (e.keyCode === 13) {\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n let idx = this.state.editIdx == -1 ? 0: this.state.editIdx;\r\n let currentList = codeSelectorService.getChildren(this.selectionNodes[idx], this.props.strengType);\r\n let anchor;\r\n if (this.QuestionInputRef) {\r\n anchor = this.QuestionInputRef.current ?? e.currentTarget;\r\n }\r\n else {\r\n anchor = e.currentTarget;\r\n }\r\n this.setState({ popupOpen: true, popupAnchorEl: anchor, currentList: currentList, editIdx: idx });\r\n }\r\n else if (e.keyCode === 8) { // backspace, remove 1 letter from partials or remove value when empty\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n this.removePartial();\r\n }\r\n else if (e.keyCode == 37 || (e.keyCode === 9 && e.ctrlKey === false && e.shiftKey === true)) { //arrow left || shft-tab\r\n this.moveLeft();\r\n e.preventDefault();\r\n e.stopPropagation(); // don't let it bubble up, \r\n }\r\n else if(e.keyCode == 39 || (e.keyCode === 9 && e.ctrlKey === false && e.shiftKey === false)) { // arrow right || tab\r\n this.moveRight();\r\n e.preventDefault();\r\n e.stopPropagation(); // don't let it bubble up, \r\n }\r\n else if (e.keyCode === 40) { // arrow down\r\n this.moveDown();\r\n }\r\n else if (e.keyCode === 38) { // arrow up\r\n this.moveUp();\r\n }\r\n else if (e.keyCode >= 65 && e.keyCode <= 90) { // letters\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n this.addPartial(e.key.toUpperCase()); // keydown doesn't store the key capitalize, instead has the shift key value.\r\n }\r\n else if ((e.keyCode >= 48 && e.keyCode <= 59) || (e.keyCode >= 96 && e.keyCode <= 105)) { //nr\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n this.addPartial(e.key);\r\n }\r\n else if (e.keyCode == 32) { // this is primarily For the BAL codes where the last char in the code is optional, which is represented by a space.\r\n if (this.props.readOnly) { // not allowed in readonly mode\r\n return;\r\n }\r\n this.addPartial(\" \");\r\n }\r\n }\r\n\r\n /**\r\n * adds the letter to the partial (or creates the partial if not yet existing). Then checks if the current partial\r\n * can be found in the currentList.\r\n * @param {string} value the letter to add to the partial\r\n */\r\n addPartial(value) {\r\n if (this.state.partial) {\r\n value = this.state.partial + value;\r\n }\r\n let idx = this.state.editIdx == -1 ? 0: this.state.editIdx;\r\n const list = this.selectionNodes[idx] ? codeSelectorService.getChildren(this.selectionNodes[idx], this.props.strengType) : null;\r\n if (list) {\r\n const found = list.find(x => x.value == value);\r\n if (found && codeSelectorService.matchesFilter(found, this.props.strengType)) {\r\n this.setState({partial: null});\r\n this.handleValueChanged(found);\r\n }\r\n else {\r\n this.updateValues(value); // store the partial in file already and show on screen\r\n this.setState({partial: value, errorIdx: idx});\r\n if (this.props.treeOpen == null || this.props.treeOpen == false) {\r\n setTimeout(() => this.setState({focusedIdx: idx}), 50);// so we can continue to type\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** removes the last partial\r\n * if it was already empty, remove the entire value\r\n */\r\n removePartial() {\r\n if (!this.state.partial || this.state.partial.length === 1) { // if it's just 1 letter, remove the entire value, don't update the partial\r\n let newValues = this.props.values.slice(0, this.props.values.length-1);\r\n if (this.props.onValuesChanged){\r\n this.props.onValuesChanged(newValues);\r\n }\r\n if (this.state.needsNextValue == false && this.props.onIsCompleteChanged) { // if we were at the end of the code-seq, we went from complete to not-complete, let the parent know this.\r\n this.props.onIsCompleteChanged(false);\r\n }\r\n this.setState({\r\n needsNextValue: true, // we have just removed a value, so it's safe to say that we need a new next value, also put the focus on that\r\n editIdx: newValues.length,\r\n errorIdx: -1,\r\n focusedIdx: -1,\r\n partial: null \r\n })\r\n if (this.props.treeOpen == null || this.props.treeOpen == false) {\r\n setTimeout(() => this.focusItem(this.QuestionInputRef), 50);// so we can continue to type\r\n }\r\n }\r\n else {\r\n let newPartial = this.state.partial.substr(0, this.state.partial.length - 1);\r\n this.setState({partial: newPartial, errorIdx: this.state.editIdx});\r\n this.updateValues(newPartial);\r\n\r\n if (this.props.treeOpen == null || this.props.treeOpen == false) {\r\n setTimeout(() => this.focusItem(this.linkRefs[this.state.editIdx]), 50);// so we can continue to type\r\n }\r\n }\r\n }\r\n\r\n /**moves the focus to the next letter.\r\n * if at end of values list, move to next\r\n * returns true if default event handling should be blocked (default).\r\n */\r\n moveRight = () => {\r\n if (this.state.focusedIdx === -1) {\r\n if (this.props.onGotoNext) this.props.onGotoNext();\r\n }\r\n else if (this.state.focusedIdx < this.props.values.length -1) {\r\n this.setState({focusedIdx: this.state.focusedIdx+1});\r\n }\r\n else if (this.state.needsNextValue) {\r\n this.setState({focusedIdx: -1});\r\n }\r\n else if (this.props.onGotoNext) {\r\n this.setState({focusedIdx: this.state.focusedIdx+1}); // move focus out of scope so we don't try to focus anything. If we don't do this, can't focus other items in the observation component\r\n this.props.onGotoNext();\r\n }\r\n }\r\n\r\n moveLeft = () => {\r\n if (this.state.focusedIdx === -1) {\r\n if (this.props.values.length > 0) {\r\n this.setState({focusedIdx: this.props.values.length-1}); \r\n }\r\n else {\r\n this.props.onGotoPrev(); \r\n }\r\n }\r\n else if (this.state.focusedIdx > 0) {\r\n this.setState({focusedIdx: this.state.focusedIdx-1});\r\n }\r\n else if (this.props.onGotoPrev) {\r\n this.props.onGotoPrev();\r\n }\r\n }\r\n\r\n moveUp = () => {\r\n if (this.props.onMoveUp) {\r\n this.props.onMoveUp(this.state.focusedIdx);\r\n }\r\n }\r\n\r\n moveDown = () => {\r\n if (this.props.onMoveDown) {\r\n this.props.onMoveDown(this.state.focusedIdx);\r\n }\r\n }\r\n}\r\n\r\nCodeSelector.defaultProps = {\r\n treeOpen: false,\r\n treeShowsOk: true\r\n}\r\n\r\nCodeSelector.propTypes = {\r\n values: PropTypes.array.isRequired,\r\n onValuesChanged: PropTypes.func.isRequired, \r\n onIsCompleteChanged: PropTypes.func.isRequired, \r\n onGotoNext: PropTypes.func, // called after tab goes out of scope, go to the next observation, start of values list. Should return true if default event handling needs to be blocked\r\n onGotoPrev: PropTypes.func, \r\n treeOpen: PropTypes.bool, // when true, the search tree will be opened\r\n onTreeClosed: PropTypes.func,\r\n onTreeOpened: PropTypes.func, // used to reset that the tree must be opened (after it has been opened, the user must be able to close it again.)\r\n onMoveDown: PropTypes.func, // called after arrow up or down event, focus should move to observation above or below, at the same index as the parameter\r\n onMoveUp: PropTypes.func,\r\n focusedValueIdx: PropTypes.number,\r\n allowFocus: PropTypes.bool,\r\n onFocusedInit: PropTypes.func, // called when a value is focused when loaded or updated in response to a focusedValueIdx \r\n onClick: PropTypes.func, // so parent can handle that focus was moved to here\r\n strengType: PropTypes.string, // dp = streng, m = put, determins which fields are visible\r\n readOnly: PropTypes.bool, // for viewer\r\n treeShowsOk: PropTypes.bool, // when true, the tree dlg shows 2 buttons instead of 1\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(CodeSelector));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport Button from '@material-ui/core/Button';\r\nimport { codeSelectorService } from '../../../services/code_selector_service'\r\nimport { withTranslation } from 'react-i18next';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Draggable from 'react-draggable';\r\n\r\n//icons\r\n\r\nimport Magnify from 'mdi-material-ui/Magnify';\r\nimport ChevronRight from 'mdi-material-ui/ChevronRight';\r\nimport ChevronDown from 'mdi-material-ui/ChevronDown';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n },\r\n iconButton: {\r\n marginLeft: theme.spacing(1)\r\n },\r\n treeItem: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n cursor: 'pointer'\r\n },\r\n selectedTreeItem: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n color: theme.palette.primary.main,\r\n fontWeight: 'bold'\r\n },\r\n TreeItemInPath: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n cursor: 'pointer',\r\n fontWeight: 'bold'\r\n }\r\n});\r\n\r\nfunction PaperComponent(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nclass CodeSelectorTreeDlg extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n dlgOpen: false,\r\n values: [...props.values], // make a copy of the list so we can modify it while searching for a new value.\r\n canPressOk: codeSelectorService.isLeaf(props.values, props.strengType) // only true when a full path is selected (last item in path has no children)\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener('keydown', this.handleKeyDown, true);\r\n if (this.props.isOpen === true) {\r\n this.setState({dlgOpen: true}); // do after create, otherwise we get stuck in a state update loop that react cant handle\r\n if (this.props.onTreeOpened) this.props.onTreeOpened();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('keydown', this.handleKeyDown);\r\n }\r\n\r\n handleKeyDown = (e) => {\r\n if (e.key ==\"F3\") {\r\n this.setState({ dlgOpen: true });\r\n }\r\n else if (this.state.dlgOpen === true) {\r\n if (e.keyCode === 13) { // enter\r\n e.preventDefault();\r\n e.stopPropagation(); // stop from going further, the dialog is open, so codeSelector no longer needs to handle it further, which would otherwise happen, so he would show the popupmenu\r\n if (this.state.canPressOk) this.handleOk();\r\n }\r\n else if(e.keyCode === 27) { // esc\r\n this.handleTreeClose();\r\n e.stopPropagation(); \r\n }\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.values != this.props.values) {\r\n this.setState({values: this.props.values, canPressOk: codeSelectorService.isLeaf(this.props.values, this.props.strengType)});\r\n }\r\n if (prevState.dlgOpen != this.state.dlgOpen && this.state.dlgOpen === true && this.props.onTreeOpened) {\r\n this.props.onTreeOpened();\r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n let tree = null;\r\n if(this.state.dlgOpen == true) {\r\n tree = this.renderTree(this.props.tree);\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"Zoek type waarneming\")}\r\n \r\n {tree}\r\n \r\n \r\n \r\n {(this.props.showOk) && \r\n \r\n }\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * \r\n * @param {object} parent the parent of the current list that needs to be\r\n * @param {int} level the idx into the values list that we are currently\r\n */\r\n renderTree(parent, level = 0, idx={value: 0}) { // using an object for the idx, so we can pass it along byref (let the same var increment over multiple calls)\r\n const { t } = this.props;\r\n if (!parent) { // parent can be null\r\n return null;\r\n }\r\n let itemStyle;\r\n if (level > 0) {\r\n itemStyle = {marginLeft: `${level * 15}px`}\r\n }\r\n else {\r\n itemStyle = {marginLeft: `0px`}\r\n }\r\n let result = parent.children.filter(child => {\r\n return codeSelectorService.matchesFilter(child, this.props.strengType);\r\n }).map((child) => {\r\n idx.value++;\r\n if (codeSelectorService.hasChildren(child, this.props.strengType)) {\r\n let isExpanded = false;\r\n if (this.state.values.length > level) {\r\n let val = this.state.values[level];\r\n isExpanded = (val !== null && val.toLowerCase() == child.value.toLowerCase()); // val could be null if something went wrong during deletes\r\n }\r\n if (isExpanded) {\r\n let children = this.renderTree(child, level + 1, idx);\r\n return(\r\n \r\n
\r\n \r\n {child.value}={t(child.label)}\r\n
\r\n {children}\r\n
\r\n );\r\n }\r\n else {\r\n return(\r\n
\r\n \r\n {child.value}={t(child.label)}\r\n
\r\n );\r\n }\r\n }\r\n else {\r\n let classname = this.props.classes.treeItem;\r\n if (this.state.values.length > level && this.state.values[level].toLowerCase() == child.value.toLowerCase()) {\r\n classname = this.props.classes.selectedTreeItem;\r\n }\r\n return(\r\n
\r\n \r\n {child.value}={t(child.label)}\r\n
\r\n )\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n removeItem = (level) => () => {\r\n let newValues = this.state.values.slice(0, level);\r\n this.setState({values: newValues, canPressOk: false});\r\n this.props.onRemoveItems(level);\r\n }\r\n\r\n\r\n selectItem = (child, level) => () => {\r\n let newValues = [...this.state.values.slice(0, level), child.value];\r\n this.setState({values: newValues, canPressOk: false});\r\n this.props.onSetItem(newValues, false);\r\n }\r\n\r\n selectLeaf = (child, level)=> () => {\r\n let newValues = [...this.state.values.slice(0, level), child.value];\r\n this.setState({values: newValues, canPressOk: true});\r\n this.props.onSetItem(newValues, true);\r\n }\r\n\r\n showTreeSearch = () => {\r\n this.setState({ dlgOpen: true });\r\n }\r\n\r\n handleTreeClose = () => {\r\n this.setState({ dlgOpen: false });\r\n }\r\n\r\n handleOk = () => {\r\n this.setState({ dlgOpen: false });\r\n //this.props.onValuesChanged(this.state.values);\r\n if (this.props.onClose) this.props.onClose();\r\n\r\n }\r\n}\r\n\r\nCodeSelectorTreeDlg.defaultProps = {\r\n showOk: true\r\n}\r\n\r\nCodeSelectorTreeDlg.propTypes = {\r\n values: PropTypes.array.isRequired,\r\n tree: PropTypes.object,\r\n onRemoveItems: PropTypes.func.isRequired,\r\n onSetItem: PropTypes.func.isRequired,\r\n onTreeOpened: PropTypes.func, // used to reset that the tree must be opened (after it has been opened, the user must be able to close it again.)\r\n strengType: PropTypes.string, // dp = streng, m = put, determins which fields are visible\r\n onClose: PropTypes.func,\r\n showOk: PropTypes.bool,\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(CodeSelectorTreeDlg));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Popover from '@material-ui/core/Popover';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { codeSelectorService } from '../../../services/code_selector_service';\r\n\r\n\r\n\r\n\r\nconst styles = (theme) => ({\r\n listItemText: {\r\n display: 'flex',\r\n flexDirection: 'row-reverse',\r\n justifyContent: 'flex-end'\r\n },\r\n listItemSecondaryText: {\r\n marginRight: theme.spacing(1)\r\n },\r\n selectedlistItem : {\r\n background: 'aliceblue'\r\n }\r\n});\r\n\r\n\r\nclass CodeSelectorListPopup extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n selected: props.selectedValue,\r\n list: props.popupOpen ? this.getData(props.currentList) : []\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if ((prevProps.currentList !== this.props.currentList || prevProps.popupOpen !== this.props.popupOpen) && this.props.popupOpen) {\r\n this.setState({list: this.getData(this.props.currentList)});\r\n }\r\n if (prevProps.selectedValue != this.props.selectedValue) {\r\n this.setState({selected: this.props.selectedValue});\r\n }\r\n }\r\n\r\n getData(list) {\r\n if (list) {\r\n return list.filter(child => {\r\n return codeSelectorService.matchesFilter(child, this.props.strengType);\r\n })\r\n }\r\n return [];\r\n }\r\n\r\n \r\n render() {\r\n const { t } = this.props;\r\n let listItems = null;\r\n if (this.props.currentList && this.props.popupOpen) {\r\n listItems = this.state.list.map((child, idx) => {\r\n let className = this.state.selectedIdx == idx ? this.props.classes.selectedlistItem : null;\r\n return (\r\n \r\n \r\n \r\n )\r\n });\r\n }\r\n return (\r\n \r\n \r\n {listItems}\r\n \r\n \r\n );\r\n }\r\n\r\n handleValueClicked = (item) => () => {\r\n this.props.onValueChanged(item);\r\n }\r\n\r\n handleValueSelected = (item) => () => {\r\n this.setState({selected: item});\r\n }\r\n\r\n handleKeyboard = (e) => {\r\n if (e.key == \"Enter\") {\r\n if (this.state.selected) {\r\n let idx = this.getIdx();\r\n if (idx > -1) {\r\n this.props.onValueChanged(this.state.list[idx]);\r\n }\r\n this.props.onClose();\r\n }\r\n }\r\n else if (e.keyCode === 27) { // esc\r\n this.props.onClose();\r\n }\r\n else if (e.keyCode === 40) { // arrow down\r\n this.moveDown();\r\n }\r\n else if (e.keyCode === 38) { // arrow up\r\n this.moveUp();\r\n }\r\n else if (e.keyCode >= 65 && e.keyCode <= 90) { // letters\r\n this.searchFirst(e.key.toUpperCase()); // keydown doesn't store the key capitalize, instead has the shift key value.\r\n }\r\n else if ((e.keyCode >= 48 && e.keyCode <= 59) || (e.keyCode >= 96 && e.keyCode <= 105)) { //nr\r\n this.searchFirst(e.key);\r\n }\r\n }\r\n\r\n getIdx() {\r\n return this.state.list.findIndex((child, idx) => { return child.value === this.state.selected});\r\n }\r\n\r\n moveUp() {\r\n let idx = this.getIdx();\r\n idx = idx > 0 ? idx-1 : this.state.list.length-1;\r\n this.setState({selected: this.state.list[idx].value});\r\n }\r\n\r\n moveDown() {\r\n let idx = this.getIdx();\r\n idx = (idx < this.state.list.length-1 || idx === -1) ? idx+1 : 0;\r\n this.setState({selected: this.state.list[idx].value});\r\n }\r\n\r\n searchFirst(letter) {\r\n let idx = this.state.list.findIndex((child, idx) => { return child.value.startsWith(letter)});\r\n if (idx > -1) {\r\n this.setState({selected: this.state.list[idx].value});\r\n }\r\n }\r\n}\r\n\r\nCodeSelectorListPopup.propTypes = {\r\n popupOpen: PropTypes.bool.isRequired,\r\n selectedValue: PropTypes.string,\r\n popupAnchorEl: PropTypes.object, \r\n currentList: PropTypes.array,\r\n onClose: PropTypes.func.isRequired, \r\n onValueChanged: PropTypes.func.isRequired, \r\n strengType: PropTypes.string // dp = streng, m = put, determins which fields are visible\r\n};\r\nexport default withTranslation()(withStyles(styles)(CodeSelectorListPopup));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport Button from '@material-ui/core/Button';\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n backgroundColor: theme.palette.background.paper,\r\n marginTop: theme.spacing(1),\r\n },\r\n text: {\r\n textAlign: 'center'\r\n }\r\n});\r\n\r\nclass ContinuousQuestionDialog extends React.Component {\r\n /*constructor(props) {\r\n super(props);\r\n }\r\n */\r\n\r\n render() {\r\n const { t } = this.props;\r\n if (!this.props.open) {\r\n return null;\r\n }\r\n return (\r\n \r\n {t(\"Lopende waarneming wijzigen\")}\r\n \r\n {t(\"Wilt U deze lopende waarneming afmelden of nieuwe waardes ingeven?\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n \r\n handleOk = (event) => {\r\n if (this.props.onClose) this.props.onClose(\"closeContinuous\");\r\n event.stopPropagation(); // need to prevent from propogating, otherwise we change the position in the video, which we don't want\r\n event.preventDefault();\r\n }\r\n\r\n handleNew = (event) => {\r\n if (this.props.onClose) this.props.onClose(\"newContinuous\");\r\n event.stopPropagation(); // need to prevent from propogating, otherwise we change the position in the video, which we don't want\r\n event.preventDefault();\r\n }\r\n\r\n handleCancel = (event) => {\r\n if (this.props.onClose) this.props.onClose(null);\r\n event.stopPropagation(); // need to prevent from propogating, otherwise we change the position in the video, which we don't want\r\n event.preventDefault();\r\n }\r\n}\r\n\r\nContinuousQuestionDialog.propTypes = {\r\n open: PropTypes.bool.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(ContinuousQuestionDialog));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react'; \r\nimport { codeSelectorService } from '../../../services/code_selector_service';\r\nimport { isEmpty } from '../../../services/project_service';\r\n\r\n/**\r\n * platform generic base class for robot recorders & players..\r\n */\r\nexport class ObservationFocusService {\r\n constructor(parent) {\r\n this.parent = parent;\r\n this.jRef = React.createRef(); // joint checkbox\r\n this.iRef = React.createRef(); // include-image-button \r\n this.tfRef1 = React.createRef(); // textfield (value) 1\r\n this.tfRef2 = React.createRef(); // textfield (value) 2\r\n this.dRef1 = React.createRef(); // direction 1\r\n this.dRef2 = React.createRef(); // direction2\r\n this.rRef = React.createRef(); // remarks\r\n this.readyBtnRef = React.createRef(); // ready button\r\n this.lRef = React.createRef(); // descriptiveLoc\r\n this.cRef = React.createRef(); // continuous idx\r\n this.locRef = React.createRef(); // location/longitude\r\n this.timeRef= React.createRef(); // time \r\n\r\n this.sonarRef = React.createRef(); // include sonar image\r\n this.lidarRef = React.createRef(); // include lidar image\r\n\r\n this.refs = []; // for easy nav\r\n this.tfRef1Idx = 1;\r\n this.tfRef2Idx = this.tfRef1Idx + 1;\r\n this.dRef1Idx = this.tfRef1Idx + 2;\r\n this.dRef2Idx = this.tfRef1Idx + 3;\r\n this.rRefIdx = this.tfRef1Idx + 4;\r\n this.cRefIdx = this.tfRef1Idx + 5;\r\n this.lRefIdx = this.tfRef1Idx + 6;\r\n this.jRefIdx = null;\r\n this.iRefIdx = null;\r\n this.readyBtnRefIdx = null;\r\n this.locRefIdx = null;\r\n this.timeRefIdx = null;\r\n this.sonarRefIdx = null;\r\n this.lidarRefIdx = null;\r\n this.currentlyFocused = 0; // 0 = code selector, 1 =w1, 2= d1, 3=w2, 4=d2, 5=remark. For handling focus ourselves.\r\n }\r\n\r\n\r\n buildRefs(hasSonar, hasLidar) {\r\n if (this.parent.props.strengType === \"m\") {\r\n this.refs = [this.tfRef1, this.tfRef2, this.dRef1, this.dRef2, this.rRef, this.cRef, this.lRef, this.jRef, this.iRef]; // can't do this apparently in the constructor\r\n }\r\n else {\r\n this.refs = [this.tfRef1, this.tfRef2, this.dRef1, this.dRef2, this.rRef, this.cRef, this.jRef, this.iRef]; // can't do this apparently in the constructor\r\n }\r\n this.jRefIdx = this.refs.length - 1; // at this stage, jRef is always next-to-last, but we work with index base 1\r\n this.iRefIdx = this.jRefIdx + 1;\r\n if (hasSonar) {\r\n this.sonarRefIdx = this.refs.length + 1;\r\n this.refs.push(this.sonarRef); \r\n }\r\n if (hasLidar) {\r\n this.lidarRefIdx = this.refs.length + 1;\r\n this.refs.push(this.lidarRef); \r\n }\r\n\r\n this.readyBtnRefIdx = this.refs.length + 1; // 1 based\r\n this.locRefIdx = this.readyBtnRefIdx + 1;\r\n this.timeRefIdx = this.readyBtnRefIdx + 2;\r\n this.refs.push(this.readyBtnRef, this.locRef, this.timeRef);\r\n }\r\n\r\n /**moves focus to the last available component.\r\n * returns true if this is not the selectorComponent\r\n */\r\n focusLast() {\r\n for (let i = this.refs.length - 1; i >= 0; i--) {\r\n if (this.refs[i].current) {\r\n this.currentlyFocused = i + 1;\r\n this.refs[i].current.focus();\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * moves focus to the first component that has an (empty) error.\r\n */\r\n focusFirstError() {\r\n const def = this.parent.state.observationDef;\r\n const obs = this.parent.props.data;\r\n const prevFocused = this.currentlyFocused;\r\n if (this.parent.state.valueComplete == false) this.currentlyFocused = 0;\r\n else if (def !== null && obs !== null) {\r\n const valueCount = codeSelectorService.getValueCount(def, this.parent.props.strengType);\r\n const directionCount = codeSelectorService.getDirectionCount(def, this.parent.props.strengType);\r\n if (valueCount > 0 && isEmpty(obs.waarde1)) this.currentlyFocused = this.tfRef1Idx;\r\n else if (directionCount > 0 && isEmpty(obs.direction1)) this.currentlyFocused = this.dRef1Idx;\r\n else if (valueCount > 1 && isEmpty(obs.waarde2)) this.currentlyFocused = this.tfRef2Idx;\r\n else if (directionCount > 1 && isEmpty(obs.direction2)) this.currentlyFocused = this.dRef2Idx;\r\n else if (def.remark == true && isEmpty(obs.remark)) this.currentlyFocused = this.rRefIdx;\r\n }\r\n if (prevFocused != this.currentlyFocused) {\r\n this.updateFocus();\r\n }\r\n }\r\n\r\n moveToFirstAfterCode() {\r\n const def = this.parent.state.observationDef;\r\n const obs = this.parent.props.data;\r\n if (this.parent.state.valueComplete == false) this.currentlyFocused = 0;\r\n else if (this.parent.state.values[this.parent.state.values.length - 1] === \"1\") {\r\n if (this.cRef.current) {\r\n this.currentlyFocused = this.cRefIdx;\r\n } else {\r\n this.currentlyFocused = this.readyBtnRefIdx;\r\n }\r\n }\r\n else if (def !== null && obs !== null) {\r\n const valueCount = codeSelectorService.getValueCount(def, this.parent.props.strengType);\r\n const directionCount = codeSelectorService.getDirectionCount(def, this.parent.props.strengType);\r\n if (valueCount > 0) this.currentlyFocused = this.tfRef1Idx;\r\n else if (directionCount > 0) this.currentlyFocused = this.dRef1Idx;\r\n else if (def.remark !== false) this.currentlyFocused = this.rRefIdx; // when false, there is no comment, when true, it is required, when not specified, it is optional, but still present\r\n else if (this.parent.props.strengType === \"m\") this.currentlyFocused = this.lRefIdx;\r\n else this.currentlyFocused = this.jRefIdx;\r\n }\r\n this.updateFocus();\r\n }\r\n\r\n /**\r\n * returns true if the currently focused element is an input element. This can be used for instance to generically handle an enter key\r\n * for all input elements.\r\n */\r\n currentlyFocusedIsInput() {\r\n if (this.currentlyFocused > 0 && this.currentlyFocused <= this.refs.length) {\r\n const current = this.refs[this.currentlyFocused - 1];\r\n return [this.tfRef1, this.tfRef2, this.rRef].indexOf(current) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n /**returns false when the currently focused element is an input field and the cursor is not at the start (when atSTart =true)\r\n * or at the end (when atStart==false).\r\n * \r\n */\r\n notInText(atStart) {\r\n if (this.currentlyFocused > 0 && this.currentlyFocused <= this.refs.length) {\r\n const current = this.refs[this.currentlyFocused - 1].current;\r\n if (current && (current.type == \"textarea\" || current.type == \"text\")) {\r\n if ((atStart && current.selectionStart !== 0) || (!atStart && current.selectionStart !== current.value.length)) return false;\r\n }\r\n\r\n }\r\n return true;\r\n }\r\n\r\n moveLeft() {\r\n this.currentlyFocused--;\r\n while (this.currentlyFocused > 0) {\r\n if (this.refs[this.currentlyFocused-1] && this.refs[this.currentlyFocused-1].current) { // the item is visible, so tab to it.\r\n this.refs[this.currentlyFocused-1].current.focus();\r\n return;\r\n }\r\n this.currentlyFocused--;\r\n }\r\n if (this.currentlyFocused === 0) { // should be the case when we get here.\r\n this.parent.setState({allowSelectorFocus: true, focusedValueIdx: this.parent.props.data.values.length-1}); // this allows the codeselector to capture focus. should move to end, if not, need to have a focusedValueIdx state\r\n }\r\n }\r\n\r\n moveRight() {\r\n this.currentlyFocused++;\r\n if (this.currentlyFocused < 0) return; // internal error actually\r\n while(this.currentlyFocused <= this.refs.length) {\r\n if (!this.refs[this.currentlyFocused-1]) { return } // savety feature, so that it doesn't crash to much if things go wrong.\r\n if (this.refs[this.currentlyFocused-1].current) {\r\n this.refs[this.currentlyFocused-1].current.focus();\r\n return;\r\n }\r\n this.currentlyFocused++;\r\n }\r\n // when we get here, it's the end of the list, so either go back to start or move to next item\r\n this.currentlyFocused = 0;\r\n this.parent.setState({allowSelectorFocus: true, focusedValueIdx: 0});\r\n }\r\n\r\n updateFocus = () => {\r\n if (this.currentlyFocused === 0) {\r\n this.parent.setState({allowSelectorFocus: true}); // this allows the codeselector to capture focus. should move to end, if not, need to have a focusedValueIdx state\r\n }\r\n else if (this.refs[this.currentlyFocused-1].current) {\r\n this.refs[this.currentlyFocused-1].current.focus();\r\n }\r\n }\r\n\r\n /**called when the codeselector wants to move left but it's already reached the start.\r\n * so either go back to previous rec or move to end of current\r\n */\r\n handleStartOfFocusListReached = () => {\r\n //this.props.onGotoPrev();\r\n this.currentlyFocused = this.refs.length + 1; // move back to end, do + 1 cause it does a substract first and the value is 1 based\r\n this.moveLeft();\r\n }\r\n}","import i18n from \"i18next\";\r\n\r\n\r\nexport class ObsTranslations {\r\n constructor() {\r\n this.remark = i18n.t(\"Opmerking\");\r\n this.removeObs = i18n.t(\"Verwijder deze observatie\");\r\n this.textValue = i18n.t(\"text waarde\");\r\n this.ready = i18n.t(\"Klaar\");\r\n this.jointTip = i18n.t(\"Bepaal of de waarneming op de buis of een voeg was\");\r\n this.onJoint = i18n.t(\"Aan de voeg\");\r\n this.onStrand = i18n.t(\"Aan de buis\");\r\n this.imageTip = i18n.t(\"Voeg foto toe / verwijder foto op huidige positie\");\r\n this.withPic = i18n.t(\"Met foto\");\r\n this.noPic = i18n.t(\"Zonder foto\");\r\n this.sonarTip = i18n.t(\"Voeg sonar toe / verwijder sonar van waarnemning\");\r\n this.withSonar = i18n.t(\"Met sonar\");\r\n this.noSonar = i18n.t(\"Zonder sonar\");\r\n this.locLabel = i18n.t(\"Beschrijvende locatie\");\r\n this.relatedStart = i18n.t(\"Gerelateerd begin waarneming\");\r\n this.measure = i18n.t(\"Meetwaarde\");\r\n this.procent = i18n.t(\"Procent\");\r\n this.degrees = i18n.t(\"Graden\");\r\n this.number = i18n.t(\"Getal\");\r\n this.multipleEnd = i18n.t(\"Meerdere Eindpunten\");\r\n this.noStart = i18n.t(\"Eindpunt zonder start\");\r\n this.multipleStartMsg = i18n.t(\"Meerdere startpunten met dezelfde index zijn niet toegestaan\");\r\n this.notClosed = i18n.t(\"Deze observatie is doorlopend en nog niet gesloten\");\r\n this.docChanged = i18n.t(\"Document wijzigen\");\r\n this.obs = i18n.t(\"Waarneming\");\r\n this.obsMeasureErrMsg = i18n.t(\"Er was een probleem tijdens het meten: ongeldige waarde.\\nDe operatie is stop gezet.\");\r\n\r\n this.withLidar = i18n.t(\"Met lidar\");\r\n this.noLidar = i18n.t(\"Zonder lidar\");\r\n }\r\n\r\n changeErr(err) {\r\n return i18n.t(\"doc_change_error\", {error: err})\r\n }\r\n}","import { API_URL } from './server_config_service';\r\nimport { getHeaders } from './fetch_services';\r\nimport i18n from \"i18next\";\r\n\r\nclass CloudDocsService {\r\n\r\n /**\r\n * possible filtering:\r\n * - filter: filter new docs, possible value 'new'\r\n * - locality: the city to search for\r\n * - locality & route: a specific street name\r\n * gets all the projects that the current user can see. No details, only summary info\r\n */\r\n async getDocs(filter=null) {\r\n return new Promise((resolve, reject) => {\r\n let url = new URL(`${API_URL}/project`);\r\n if (filter) {\r\n let param = {filter: filter};\r\n url.search = new URLSearchParams(param).toString();\r\n }\r\n\r\n fetch(url, {method: 'GET', mode: 'cors', headers: getHeaders()})\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error))\r\n ;\r\n });\r\n }\r\n\r\n /**\r\n * delete the project from the server\r\n * @param {string} id the id of the object that needs to be deleted.\r\n */\r\n async delete(id) {\r\n return new Promise((resolve, reject) => {\r\n fetch(`${API_URL}/project/${id}`, {method: 'DELETE', mode: 'cors', headers: getHeaders()})\r\n .then((result) => {\r\n if (result.ok === true && result.status === 200) {\r\n result.text().then((result) => {\r\n if (result === \"true\") {\r\n resolve();\r\n }\r\n else {\r\n reject(\"Operation failed\");\r\n }\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n }\r\n\r\n /**\r\n * get a list of recipients already used, grouped by opdrCodeOpdrGever\r\n */\r\n async getRecipients() {\r\n return new Promise((resolve, reject) => {\r\n\r\n /* resolve({\"aa\": [\"test1@test.com\", \"test2@test.com\", \"test3@test.com\", \"test4@test.com\", \"test5@test.com\", \"test6@test.com\"]});\r\n return; */\r\n\r\n fetch(`${API_URL}/recipients`, {method: 'GET', mode: 'cors', headers: getHeaders()})\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n }\r\n\r\n async addRecipients(reportId, list) {\r\n return new Promise((resolve, reject) => {\r\n\r\n /* resolve([\"test1@test.com\", \"test2@test.com\", \"test3@test.com\", \"test4@test.com\", \"test5@test.com\", \"test6@test.com\"]);\r\n return; */\r\n\r\n const options = {method: 'POST', mode: 'cors', body: JSON.stringify(list), headers: getHeaders()};\r\n fetch(`${API_URL}/project/${reportId}/viewers`, options)\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n }\r\n\r\n async removeRecipients(reportId, list) {\r\n return new Promise((resolve, reject) => {\r\n\r\n /* resolve([\"test1@test.com\", \"test2@test.com\", \"test3@test.com\", \"test4@test.com\", \"test5@test.com\", \"test6@test.com\"]);\r\n return; */\r\n\r\n const options = {method: 'DELETE', mode: 'cors', body: JSON.stringify(list), headers: getHeaders()};\r\n fetch(`${API_URL}/project/${reportId}/viewers`, options)\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n }\r\n\r\n /**\r\n * upload a new project and create it in the cloud.\r\n * returns the object as it was created in the cloud, so with extra fields filled in, like id.\r\n * @param {object} data json object containing all the info of the project.\r\n */\r\n async addProject(data) {\r\n return new Promise((resolve, reject) => {\r\n\r\n\r\n /* //Todo: remove this, is only for testing for as long as there is no api\r\n resolve(Object.assign({id: \"test\"}, data));\r\n return; */\r\n\r\n const options = {method: 'POST', mode: 'cors', body: JSON.stringify(data), headers: getHeaders()};\r\n fetch(`${API_URL}/project`, options)\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n }\r\n\r\n /**\r\n * update an existing project.\r\n * returns the object as it was created in the cloud, so with extra fields filled in, like id.\r\n * @param {object} data json object containing all the info of the project.\r\n */\r\n async updateProject(data) {\r\n return new Promise((resolve, reject) => {\r\n\r\n\r\n /* //Todo: remove this, is only for testing for as long as there is no api\r\n resolve(Object.assign({id: \"test\"}, data));\r\n return;\r\n */\r\n if ('accessFilters' in data) { // shouldnt be in here, gives problem in db, can happen cause for a short while there was a bug in the server that returned the field sometimes\r\n delete data.accessFilters;\r\n }\r\n const options = {method: 'PUT', mode: 'cors', body: JSON.stringify(data), headers: getHeaders()};\r\n fetch(`${API_URL}/project/${data.id}`, options)\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n }\r\n \r\n async publishProject(id) {\r\n return new Promise((resolve, reject) => {\r\n\r\n\r\n /* //Todo: remove this, is only for testing for as long as there is no api\r\n resolve(Object.assign({id: \"test\"}, data));\r\n return;\r\n */\r\n const options = {method: 'POST', mode: 'cors', body: \"\", headers: getHeaders()};\r\n fetch(`${API_URL}/project/${id}/publish`, options)\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n }\r\n\r\n /**\r\n * gets the project with specified id. \r\n */\r\n async getProject(id, markRead=true) {\r\n return new Promise((resolve, reject) => {\r\n /* //for debug: remove until fetch\r\n setImmediate(() => {\r\n resolve(\r\n {\"id\":\"test\",\"createdBy\":\"1\",\"creationDate\":\"2020-07-15\",\"version\":\"1.0.0\",\"main\":{\"norm\":\"NBN EN 13508-2:2003 + A1:2011\",\"managingInstance\":\"dfa\",\"location\":\"asdf\",\"codeInsp\":\"D002/DEMO\",\"purpose\":\"A\",\"opdrCodeOpdrGever\":\"\",\"opdrCodeBedrijf\":\"asdf\",\"assistant\":\"asdf\",\"equipmentSerialNr\":\"\",\"inspectorName\":\"Demo user 2\"},\"strengs\":[{\"type\":\"dp\",\"id\":1,\"observations\":[{\"values\":[\"B\",\"D\",\"B\"],\"time\":0,\"includePicture\":false,\"joint\":false,\"longitude\":0,\"descriptiveLoc\":null,\"remark\":\"Start\"},{\"values\":[\"B\",\"C\",\"D\",\"A\"],\"time\":0,\"includePicture\":false,\"joint\":false,\"longitude\":0,\"descriptiveLoc\":null,\"waarde1\":\"\",\"waarde2\":\"\"},{\"values\":[\"B\",\"D\",\"B\"],\"time\":4.431355999999999,\"includePicture\":false,\"joint\":false,\"longitude\":0,\"descriptiveLoc\":null,\"remark\":\"Einde\"},{\"values\":[\"B\",\"C\",\"E\",\"A\"],\"time\":4.431355999999999,\"includePicture\":false,\"joint\":false,\"longitude\":0,\"descriptiveLoc\":null,\"waarde1\":\"\",\"waarde2\":\"\"}],\"ref\":\"L-01\",\"startPointRef\":\"\",\"startPointCoord\":\"\",\"pointRef1\":\"\",\"coordPoint1\":\"\",\"pointRef2\":\"\",\"coordPoint2\":\"\",\"pointRef3\":\"\",\"coordPoint3\":\"\",\"distanceStartLateral\":\"0.00\",\"clockPosStartLateral\":\"\",\"startpointLateralInspection\":\"\",\"lateralStrengRef\":\"\",\"location\":\"\",\"inspectionDirection\":\"A\",\"locationType\":\"A\",\"district\":\"\",\"sewerName\":\"\",\"propertyOwnership\":\"A\",\"axialRefPoint\":\"B\",\"inspectionDate\":\"2020-07-15\",\"inspectionTime\":\"19:27:37\",\"recStartTime\":1595076084524,\"storageVideo\":\"F\",\"storageImages\":\"E\",\"positionVideoImages\":\"A\",\"imagePacketRef\":\"\",\"expectedInspectionLength\":\"200.00\",\"actualInspectionLength\":0,\"reverseTractorOffset\":0.49,\"shape\":\"A\",\"height\":\"400\",\"Width\":\"400\",\"material\":\"AE\",\"liningType\":\"\",\"liningMaterial\":\"\",\"lengthOfTubePart\":\"2500\",\"depthStartPointRel\":\"999.00\",\"depthEndPointRel\":\"999.00\",\"sewerType\":\"A\",\"sewerUsage\":\"A\",\"strategic\":\"\",\"cleaning\":\"A\",\"remarks\":\"\",\"yearOfCommisioning\":\"*UNKNOWN*\",\"connectionType\":\"A\",\"precipitation\":\"A\",\"temperature\":\"A\",\"fluidControl\":\"A\",\"coverLevel\":\"0.00\",\"verticalRefPoint\":\"A\",\"CircularRefPoint\":\"A\",\"inspectionStage\":\"B\",\"litShape\":\"B\",\"litMaterial\":\"AG\",\"litHeight\":\"0.00\",\"litWidth\":\"0.00\",\"stepType\":\"C\",\"stepMaterial\":\"A\",\"cams\": {\"cam1\": {\"videoWidth\":1920,\"videoHeight\":1080}},\"videoLength\":4.523,\"atmosphere\":\"\",\"videoUrl\":{\"bucket\":\"cami_video\",\"name\":\"test_test11_1.mp4\"},\"robotDataUrl\":{\"bucket\":\"cami_robot_csv\",\"name\":\"test_test11_1_robot.csv\"},\"robotRevDataUrl\":{\"bucket\":\"cami_robot_csv\",\"name\":\"test_test11_1_robot_rev.csv\"},\"trackDataUrl\":{\"bucket\":\"cami_track_csv\",\"name\":\"test_test11_1_track.csv\"},\"trackRevDataUrl\":{\"bucket\":\"cami_track_csv\",\"name\":\"test_test11_1_track_rev.csv\"}}],\"recipients\":[\"aa@b.com\"],\"name\":\"test11\",\"xml\":[{\"bucket\":\"cami_xml_reports\",\"name\":\"test_asdf__D002DEMO_20200715_dp.xml\"}],\"pdfReport\":{\"bucket\":\"cami_pdf_reports\",\"name\":\"undefined_test11.pdf\"},\"images\":[]}\r\n );\r\n });\r\n return; */\r\n let url = new URL(`${API_URL}/project/${id}`);\r\n if (markRead) {\r\n let param = {markRead: markRead};\r\n url.search = new URLSearchParams(param).toString();\r\n }\r\n fetch(url, {method: 'GET', mode: 'cors', headers: getHeaders()})\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error))\r\n ;\r\n });\r\n }\r\n\r\n /**\r\n * save only the stats of a project. This is a function to help in the data\r\n * upgrade\r\n * @param {object} project a project that has the fields id and statistics\r\n */\r\n async saveStats(project) {\r\n \r\n const result = await fetch(`${API_URL}/project/${project.id}/statistics`, {method: 'POST', mode: 'cors', body: JSON.stringify(project.statistics), headers: getHeaders()})\r\n if (result.status === 200) {\r\n const textRes = await result.text();\r\n return textRes;\r\n }\r\n throw new Error(i18n.t(\"invalid response from server\"));\r\n }\r\n}\r\n\r\nexport const cloudDocsService = new CloudDocsService();","import React from 'react';\r\nimport Typography from \"@material-ui/core/Typography\"\r\nimport Link from '@material-ui/core/Link';\r\n\r\nexport function Copyright(t) {\r\n return (\r\n \r\n {t('copyright') }{' '}\r\n \r\n elastetic.com\r\n {' '}\r\n {new Date().getFullYear()}\r\n \r\n );\r\n}","import { API_URL } from './server_config_service';\r\nimport { getHeaders } from './fetch_services';\r\nimport { userService } from './user_service';\r\nimport i18n from \"i18next\";\r\n\r\nclass AuthenticationService {\r\n\r\n\r\n constructor() {\r\n this.apiOk = false; // keeps track if we managed to reach an api, this is the first class that tries to reach the server. used to track if server is up.\r\n }\r\n\r\n \r\n\r\n pingApi(){\r\n return new Promise((resolve, reject) => {\r\n fetch(`${API_URL}/ping`)\r\n .then(() => resolve(true))\r\n .catch(() => reject())\r\n ;\r\n });\r\n }\r\n\r\n login(email, password){\r\n return new Promise( (resolve, reject) =>{\r\n let body = { email: email, password: password };\r\n let url = `${API_URL}/token`;\r\n fetch(url, {method: 'POST', mode: 'cors', body: JSON.stringify(body), headers: getHeaders(false)})\r\n .then((result) => { \r\n if (result.ok === true) {\r\n result.json().then((newUser) =>{\r\n this.apiOk = true;\r\n if (result.status === 200) {\r\n // login successful if there's a jwt token in the response\r\n if (newUser && newUser.token) {\r\n userService.setCurrentUser(newUser);\r\n resolve(newUser);\r\n }\r\n else{ reject(i18n.t(\"invalid response from server\")); }\r\n }\r\n else { reject(newUser); }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n\r\n async loginApp(licenseId, accessToken) {\r\n\r\n let body = { licenseId: licenseId, accessToken: accessToken };\r\n const result = await fetch(`${API_URL}/applogin`, {method: 'POST', mode: 'cors', body: JSON.stringify(body), headers: getHeaders(false)})\r\n if (result.status === 200) {\r\n const newUser = await result.json();\r\n if (newUser) {\r\n userService.setCurrentUser(newUser);\r\n this.apiOk = true;\r\n }\r\n return newUser;\r\n }\r\n throw new Error(i18n.t(\"invalid response from server\"));\r\n }\r\n\r\n registerApp(license, installationKey, force){\r\n return new Promise( (resolve, reject) =>{\r\n let body = { accessToken: license.token, installationKey: installationKey, licenseId: license.licenseId };\r\n let url = `${API_URL}/apptoken`;\r\n let method = force ? 'PUT' : 'POST';\r\n fetch(url, {method: method, mode: 'cors', body: JSON.stringify(body), headers: getHeaders(false)})\r\n .then((result) => { \r\n if (result.ok === true) {\r\n result.json().then((newUser) =>{\r\n this.apiOk = true;\r\n if (result.status === 200) {\r\n // login successful if there's a jwt token in the response\r\n if (newUser && newUser.token) {\r\n // installationKey is saved together with the user cause that's where we get it from the cloud.\r\n userService.setCurrentUser(newUser);\r\n resolve(newUser);\r\n }\r\n else{ reject(i18n.t(\"invalid response from server\")); }\r\n }\r\n else { reject(newUser); }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n signUp(email, password, firstname, lastname) {\r\n return new Promise( (resolve, reject) =>{\r\n let body = { firstName: firstname, lastName: lastname, password: password, email: email };\r\n let url = `${API_URL}/api/register`;\r\n fetch(url, {method: 'POST', mode: 'cors', body: JSON.stringify(body), headers: getHeaders(false)})\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((newUser) =>{\r\n this.apiOk = true;\r\n if (result.status === 200) {\r\n // login successful if there's a jwt token in the response\r\n if (newUser && newUser.token) {\r\n userService.setCurrentUser(newUser);\r\n resolve(newUser);\r\n }\r\n else{ reject(i18n.t(\"invalid response from server\")); }\r\n }\r\n else { reject(newUser); }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n requestPwdReset(email) {\r\n return new Promise( (resolve, reject) =>{\r\n let body = { email: email };\r\n let url = `${API_URL}/users/pwd`;\r\n fetch(url, {method: 'DELETE', mode: 'cors', body: JSON.stringify(body), headers: getHeaders(false)})\r\n .then((result) => { \r\n if (result.ok === true) {\r\n result.json().then((emailSent) =>{\r\n if (result.status === 200) {\r\n resolve(emailSent);\r\n }\r\n else { reject(false); }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n\r\n async logout() {\r\n // Expire session\r\n // const myUser = userService.getCurrentUser();\r\n //if (myUser) {\r\n // await fetch(`${API_URL}/api/Logout`);\r\n // }\r\n // remove user from local storage to log user out\r\n userService.clearCurrentUser();\r\n }\r\n\r\n async getGoogleCredentials() {\r\n return new Promise((resolve, reject) => {\r\n fetch(`${API_URL}/auth/google`, {method: 'GET', mode: 'cors', headers: getHeaders()})\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.json().then((data) =>{\r\n if (result.status === 200) {\r\n resolve(data);\r\n }\r\n else {\r\n //todo: add error message\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error));\r\n });\r\n }\r\n\r\n async getApiKey() {\r\n\r\n const result = await fetch(`${API_URL}/auth/apikey`, {method: 'GET', mode: 'cors', headers: getHeaders(true)})\r\n if (result.status === 200) {\r\n const result = await result.json();\r\n return result;\r\n }\r\n else {\r\n const result = await result.json();\r\n throw new Error(result);\r\n }\r\n }\r\n}\r\n\r\nexport const authService = new AuthenticationService();","import React, { PureComponent } from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { withTranslation } from 'react-i18next';\r\nimport Box from '@material-ui/core/Box';\r\nimport Container from '@material-ui/core/Container';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { Copyright } from '../start/copyright_component';\r\nimport { authService } from '../services/auth_service';\r\nimport Link from '@material-ui/core/Link';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { errExtractor } from '../services/error_extractor';\r\nimport Button from '@material-ui/core/Button';\r\nimport { dialogService } from '../../services/dialog_service';\r\nimport Backdrop from '@material-ui/core/Backdrop';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\n\r\n\r\n//icons\r\n// import LockOutlinedIcon from '@material-ui/icons/LockOutlined';\r\nimport { configService } from '../../services/config_service';\r\nimport { userService } from '../services/user_service';\r\nimport { API_URL, API_SERVICES, GOOGLE_API_KEY, setServerConfig } from '../services/server_config_service';\r\n\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n marginTop: theme.spacing(8),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n avatar: {\r\n margin: theme.spacing(1),\r\n height: '50px',\r\n },\r\n form: {\r\n width: '100%', // Fix IE 11 issue.\r\n marginTop: theme.spacing(1),\r\n },\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n },\r\n cred: {\r\n textAlign: \"center\",\r\n fontWeight: 300\r\n },\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: '#fff',\r\n },\r\n});\r\n\r\n\r\n\r\n\r\nclass Login extends PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n email: '',\r\n password: '',\r\n isLoading: false,\r\n service: API_URL\r\n }\r\n }\r\n\r\n\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n \r\n
\r\n \"logo\"\r\n \r\n {t('Sign in')}\r\n \r\n
\r\n this.setState({email: ev.target.value})}\r\n autoFocus\r\n />\r\n this.setState({password: ev.target.value})}\r\n />\r\n {(configService.isSite === false && configService.isViewer) &&\r\n \r\n {API_SERVICES.map((val, idx) => {\r\n return(\r\n \r\n );\r\n })}\r\n \r\n }\r\n \r\n {t('Sign in')}\r\n \r\n \r\n \r\n \r\n {t('Forgot password?')}\r\n \r\n \r\n \r\n {/* \r\n {t(\"Don't have an account? Sign Up\")}\r\n */}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n {Copyright(t)}\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n handleSubmit = async (ev) => {\r\n ev.preventDefault();\r\n try {\r\n this.setState({isLoading: true});\r\n const user = await authService.login(this.state.email, this.state.password);\r\n await userService.verifyUserInvitation(user);\r\n let dest = \"/home\";\r\n if (this.props.location && this.props.location.state && this.props.location.state.from) {\r\n dest = this.props.location.state.from.pathname;\r\n }\r\n this.setState({isLoading: false});\r\n this.props.history.push(dest);\r\n }\r\n catch(error) {\r\n this.setState({isLoading: false});\r\n const { t } = this.props; \r\n dialogService.error(t(\"Sign in\"), t('login_failed_with_error', {error: errExtractor.get(error)}));\r\n }\r\n }\r\n\r\n handleServiceChanged = (ev) => {\r\n try {\r\n const newValue = ev.target.value;\r\n const idx = API_SERVICES.findIndex((rec) => rec.url === newValue);\r\n this.setState({service: newValue});\r\n setServerConfig(newValue, API_SERVICES[idx].googleKey);\r\n configService.set(\"api.url\", newValue);\r\n configService.set(\"api.google\", GOOGLE_API_KEY);\r\n }\r\n catch(error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Sign in\"), t(\"doc_change_error\", {error: errExtractor.get(error)}));\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(Login));","import React, { PureComponent } from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { withTranslation } from 'react-i18next';\r\nimport Box from '@material-ui/core/Box';\r\nimport Container from '@material-ui/core/Container';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { Copyright } from '../start/copyright_component';\r\nimport { authService } from '../services/auth_service';\r\nimport Link from '@material-ui/core/Link';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { errExtractor } from '../services/error_extractor';\r\nimport Button from '@material-ui/core/Button';\r\nimport { dialogService } from '../../services/dialog_service';\r\n\r\n\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n marginTop: theme.spacing(8),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n avatar: {\r\n margin: theme.spacing(1),\r\n height: '50px',\r\n },\r\n form: {\r\n width: '100%', // Fix IE 11 issue.\r\n marginTop: theme.spacing(1),\r\n },\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n },\r\n});\r\n\r\nclass ResetPwd extends PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n email: '',\r\n }\r\n }\r\n\r\n\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n \r\n
\r\n \"logo\"\r\n \r\n {t('Reset password')}\r\n \r\n
\r\n this.setState({email: ev.target.value})}\r\n autoFocus\r\n />\r\n \r\n {t('Request reset')}\r\n \r\n \r\n \r\n \r\n {t('Sign in')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n {Copyright(t)}\r\n \r\n
\r\n );\r\n }\r\n\r\n handleSubmit = async (ev) => {\r\n const { t } = this.props;\r\n try {\r\n ev.preventDefault();\r\n if (!this.state.email) {\r\n dialogService.error(t(\"Reset password\"), t(\"Please provide a valid email address\"))\r\n }\r\n let result = await authService.requestPwdReset(this.state.email);\r\n if (result) {\r\n dialogService.info(t(\"Reset password\"), t(\"pwd_reset_success\"))\r\n }\r\n else {\r\n dialogService.error(t(\"Reset password\"), t(\"pwd_reset_failed\"))\r\n }\r\n }\r\n catch(error) {\r\n dialogService.error(t(\"Reset password\"), errExtractor.get(error));\r\n }\r\n }\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(ResetPwd));","import React, { PureComponent } from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { withTranslation } from 'react-i18next';\r\nimport Box from '@material-ui/core/Box';\r\nimport Container from '@material-ui/core/Container';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Avatar from '@material-ui/core/Avatar';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { Copyright } from '../start/copyright_component';\r\nimport { authService } from '../services/auth_service';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport Link from '@material-ui/core/Link';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport { errExtractor } from '../services/error_extractor';\r\nimport { dialogService } from '../../services/dialog_service';\r\n\r\n\r\n//icons\r\nimport LockOutlinedIcon from '@material-ui/icons/LockOutlined';\r\n\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n marginTop: theme.spacing(8),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n avatar: {\r\n margin: theme.spacing(1),\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n form: {\r\n width: '100%', // Fix IE 11 issue.\r\n marginTop: theme.spacing(1),\r\n },\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n },\r\n});\r\n\r\nclass Register extends PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n email: '',\r\n password: '',\r\n firstname: '',\r\n lastname: ''\r\n }\r\n }\r\n\r\n\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {t(\"Sign up\")}\r\n \r\n
\r\n \r\n \r\n this.setState({firstname: ev.target.value})}\r\n autoFocus\r\n />\r\n \r\n \r\n this.setState({lastname: ev.target.value})}\r\n />\r\n \r\n \r\n this.setState({email: ev.target.value})}\r\n />\r\n \r\n \r\n this.setState({password: ev.target.value})}\r\n />\r\n \r\n \r\n \r\n {t(\"Sign Up\")}\r\n \r\n \r\n \r\n \r\n {t(\"Already have an account? Sign in\")}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n {Copyright(t)}\r\n \r\n
\r\n );\r\n }\r\n\r\n handleSubmit = (ev) => {\r\n authService.signUp(this.state.email, this.state.password, this.state.firstname, this.state.lastname)\r\n .then(() => {\r\n this.props.history.push('/home');\r\n })\r\n .catch((error) =>{\r\n const { t } = this.props;\r\n dialogService.error(t(\"Sign up\"), t('register_failed_with_error', {error: errExtractor.get(error)}));\r\n });\r\n ev.preventDefault();\r\n }\r\n\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(Register));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Chip from '@material-ui/core/Chip';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { errExtractor } from '../services/error_extractor';\r\nimport { dialogService } from '../../services/dialog_service';\r\n\r\n//icons \r\nimport AlertCircleOutline from 'mdi-material-ui/AlertCircleOutline';\r\nimport { Tooltip } from '@material-ui/core';\r\nimport { assetsService } from '../../services/assets_service';\r\n\r\n\r\nconst styles = (theme) => ({\r\n textField: {\r\n width: '100%'\r\n }\r\n});\r\n\r\nlet allRecipients = null; // only load 1 time\r\n\r\n\r\nclass RecipientDetails extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n options: [],\r\n value: props.value ?? [], // list of email addresses. Stored in state so we can do a ui update from here locally instead of the entire list\r\n }\r\n this.allValues = {}; // a dictionary of opdrCodeOpdrGever-key and email-list of values.\r\n }\r\n \r\n componentDidMount() {\r\n if (allRecipients === null) { // not yet loaded\r\n assetsService.loadJSONFromCloud(\"recipients\").then((result) => {\r\n allRecipients = result;\r\n if (result) {\r\n let options = result[this.props.valuesKey]; // get list of possible values that user can select from\r\n if (!options) { options = []}; // need to set an empty list, can't assign undefined\r\n this.setState({options: options});\r\n }\r\n }).catch((error) => {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Cloud\"), errExtractor.get(error));\r\n });\r\n }\r\n else {\r\n let options = allRecipients[this.props.valuesKey]; // get list of possible values that user can select from\r\n if (!options) { options = []}; // need to set an empty list, can't assign undefined\r\n this.setState({options: options});\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.valuesKey !== this.props.valuesKey) {\r\n if (allRecipients) {\r\n let options = allRecipients[this.props.valuesKey];\r\n if (!options) { options = []}; // need to set an empty list, can't assign undefined\r\n this.setState({options: options});\r\n }\r\n }\r\n if (prevProps.value !== this.props.value) {\r\n this.setState({value: this.props.value});\r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n \r\n value.map((email, index) => {\r\n let icon;\r\n const regx = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n if (!(regx.test(email))) {\r\n icon =
\r\n }\r\n if (this.props.invalidValues && this.props.invalidValues.indexOf(email) > -1) {\r\n icon =
\r\n }\r\n return();\r\n })\r\n }\r\n renderInput={params => (\r\n \r\n )}\r\n />\r\n );\r\n }\r\n\r\n handleValueChanged = async (ev, value) => {\r\n try {\r\n if (this.props.onValueChanged) { // call first, so if something goes wrong, the ui isn't updated\r\n await this.props.onValueChanged(ev, value);\r\n }\r\n this.setState({value: value});\r\n \r\n let changed = false;\r\n const opts = this.state.options;\r\n value.forEach((el) => { // merge each element in the value list into the list of options, so it can be reused. no need to save to cloud, this is done over there.\r\n const idx = opts.indexOf(el);\r\n if (idx === -1) {\r\n opts.push(el); \r\n changed = true;\r\n }\r\n });\r\n if (changed) {\r\n if (!allRecipients) { // if null, init struct\r\n allRecipients = {};\r\n }\r\n allRecipients[this.props.valuesKey] = opts; // in case the list was loaded multiple times (quick open of emails, has happened)\r\n assetsService.saveJSONToCloud(\"recipients\", allRecipients);\r\n }\r\n }\r\n catch (error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Recipients\"), t(\"recipients_save_failed\", {error: errExtractor.get(error)}));\r\n } \r\n }\r\n\r\n}\r\n\r\nRecipientDetails.propTypes = {\r\n value: PropTypes.array.isRequired, // list of emails that can view the project\r\n invalidValues: PropTypes.array.isRequired, // list of emails that bounced\r\n onValueChanged: PropTypes.func.isRequired,\r\n valuesKey: PropTypes.string.isRequired, // the key to use for finding/adding possible values\r\n};\r\n\r\n\r\nexport default withTranslation()(withStyles(styles)(RecipientDetails));","// icons\r\nimport Edit from '@material-ui/icons/Edit';\r\nimport FilterList from '@material-ui/icons/FilterList';\r\nimport FirstPage from '@material-ui/icons/FirstPage';\r\nimport LastPage from '@material-ui/icons/LastPage';\r\nimport Remove from '@material-ui/icons/Remove';\r\nimport SaveAlt from '@material-ui/icons/SaveAlt';\r\nimport Search from '@material-ui/icons/Search';\r\nimport ViewColumn from '@material-ui/icons/ViewColumn';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport ArrowDownward from '@material-ui/icons/ArrowDownward';\r\nimport Check from '@material-ui/icons/Check';\r\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\r\nimport ChevronRight from '@material-ui/icons/ChevronRight';\r\nimport Clear from '@material-ui/icons/Clear';\r\nimport DeleteOutline from '@material-ui/icons/DeleteOutline';\r\n\r\nimport React from 'react';\r\nimport { forwardRef } from 'react';\r\n\r\nexport const tableIcons = {\r\n Add: forwardRef((props, ref) => ),\r\n Check: forwardRef((props, ref) => ),\r\n Clear: forwardRef((props, ref) => ),\r\n Delete: forwardRef((props, ref) => ),\r\n DetailPanel: forwardRef((props, ref) => ),\r\n Edit: forwardRef((props, ref) => ),\r\n Export: forwardRef((props, ref) => ),\r\n Filter: forwardRef((props, ref) => ),\r\n FirstPage: forwardRef((props, ref) => ),\r\n LastPage: forwardRef((props, ref) => ),\r\n NextPage: forwardRef((props, ref) => ),\r\n PreviousPage: forwardRef((props, ref) => ),\r\n ResetSearch: forwardRef((props, ref) => ),\r\n Search: forwardRef((props, ref) => ),\r\n SortArrow: forwardRef((props, ref) => ),\r\n ThirdStateCheck: forwardRef((props, ref) => ),\r\n ViewColumn: forwardRef((props, ref) => ),\r\n};","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n// icons\r\nimport DeleteOutline from '@material-ui/icons/DeleteOutline';\r\nimport Visibility from '@material-ui/icons/VisibilityOutlined';\r\nimport FilePdfOutline from 'mdi-material-ui/FilePdfBox';\r\n\r\n//imports\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Box from '@material-ui/core/Box';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { withTranslation } from 'react-i18next';\r\nimport MaterialTable from \"material-table\";\r\nimport { userService } from '../services/user_service';\r\nimport { withRouter } from 'react-router-dom';\r\nimport ConfirmationDialog from '../dialogs/confirmation_dialog';\r\nimport { dialogService } from '../../services/dialog_service';\r\nimport { errExtractor } from '../services/error_extractor';\r\nimport RecipientDetails from './recipient_details_component';\r\nimport EmailSendOutline from 'mdi-material-ui/EmailSendOutline';\r\nimport { configService } from '../../services/config_service';\r\nimport i18n from 'i18next';\r\nimport { tableIcons } from '../services/table_service';\r\n\r\n\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n backgroundColor: theme.palette.background.paper,\r\n marginTop: theme.spacing(1),\r\n },\r\n text: {\r\n textAlign: 'center',\r\n margin: '0px',\r\n wordBreak: 'break-word'\r\n },\r\n spinnerBox: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n position: \"absolute\",\r\n left: '0px',\r\n top: '0px',\r\n right: '0px',\r\n bottom: '0px',\r\n background: '#ffffffBF',\r\n zIndex: 10000\r\n }\r\n\r\n});\r\n\r\nclass DocsList extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.dataToDelete = null; // we need to store this while asking the user to continue\r\n this.state = {\r\n isAskToDeleteOpen: false,\r\n deleting: false, // so we can show a spinner (and blok ui) while deleting.\r\n deleteProgression: 0, // to show actual progression of the deletion process.\r\n }\r\n }\r\n\r\n \r\n getColumns() {\r\n if (!this.props.columns || this.props.columns.length === 0) {\r\n const { t } = this.props;\r\n const start = [\r\n { title: t(\"Date published\"), \r\n field: \"publishedAt\", \r\n type: \"date\", \r\n render: this.renderPublishedAt,\r\n defaultSort: 'desc' },\r\n { title: t(\"Name\"), field: \"name\", defaultSort: 'desc', width: 450,\r\n cellStyle: {wordBreak: 'break-word'} \r\n }\r\n ];\r\n const end = [\r\n { title: t(\"Locatie\"), field: \"location\", grouping: true },\r\n { title: t(\"Beherende instantie\"), field: \"managingInstance\", grouping: true },\r\n { title: t(\"Opdrachtref. inspecteur\"), field: \"opdrCodeBedrijf\", grouping: true },\r\n { title: t(\"Opdrachtref. opdrachtgever\"), field: \"opdrCodeOpdrGever\", grouping: true },\r\n ]\r\n if (configService.isViewer) {\r\n return [...start, \r\n { title: t(\"Creator\"), field: \"companyName\", grouping: true },\r\n ...end\r\n ];\r\n }\r\n else {\r\n return [...start, ...end];\r\n }\r\n }\r\n else {\r\n return this.props.columns;\r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n const isEditor = userService.getCurrentUser().role === userService.Editor;\r\n const columns = this.getColumns();\r\n const customActions = this.props.customActions; \r\n let actions = [\r\n {\r\n action: rowData => ({\r\n icon: () => ,\r\n tooltip: t('Open details'),\r\n onClick: this.props.onShowDetails\r\n }),\r\n position: \"row\"\r\n },\r\n {\r\n action: rowData => ({\r\n icon: () => ,\r\n tooltip: t('Show pdf report'),\r\n onClick: this.props.onShowPdf,\r\n disabled: this.props.onIsShowPdfDisabled(rowData)\r\n }),\r\n position: \"row\"\r\n },\r\n ...customActions\r\n ];\r\n let detailPanel = null;\r\n if (isEditor) {\r\n detailPanel = [{\r\n icon: () =>
,\r\n render: this.renderRecipients,\r\n }];\r\n actions.push({ // edit list of recipients is only allowed by editors\r\n action: this.buildRecipientsToggle,\r\n position: \"row\"\r\n });\r\n if (this.props.onDeleteDocument) {\r\n actions.push( {\r\n icon: () => ,\r\n tooltip: t('Delete report'),\r\n onClick: (event, data) => this.askDelete(data)\r\n });\r\n }\r\n }\r\n let infoBoxVisibility = 'hidden';\r\n if (this.state.deleting) {\r\n infoBoxVisibility = 'visible';\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"Deleting reports on server...\")}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n renderPublishedAt = row => {\r\n //let d = moment.parse(row[\"publishedAt\"])\r\n let d = new Date(row[\"publishedAt\"]);\r\n d = d.toLocaleDateString(i18n.language, {});\r\n return ({d});\r\n }\r\n\r\n buildRecipientsToggle = (rowData) => {\r\n const { t } = this.props;\r\n let sendToColor = 'secondary';\r\n let sendToTip = 'There are no report recipients defined yet';\r\n if (rowData.recipients && rowData.recipients.length > 0) {\r\n sendToColor = 'action';\r\n sendToTip = 'Send report to';\r\n }\r\n return ({\r\n icon: () => ,\r\n tooltip: t(sendToTip),\r\n onClick: (event, rowData) => this.toggleDetails(rowData),\r\n })\r\n }\r\n\r\n /**\r\n * ask the user if he wants to delete all the selected items.\r\n * @param {list} data list of selected report objects.\r\n */\r\n askDelete = (data) => {\r\n this.dataToDelete = data;\r\n this.setState({isAskToDeleteOpen: true });\r\n }\r\n\r\n handleDeleteDlgClose = async (result) => {\r\n this.setState({isAskToDeleteOpen: false });\r\n if (result) {\r\n this.setState({deleting: true, deleteProgression: 0});\r\n let nrDeleted = 0;\r\n for(const item of this.dataToDelete) {\r\n try {\r\n await this.props.onDeleteDocument(item);\r\n nrDeleted += 1;\r\n this.setState({deleteProgression: this.dataToDelete.length / 100 * nrDeleted}); // always needs to be expressed in %\r\n }\r\n catch(error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Delete\"), t(\"failed_to_delete_report\", {error: errExtractor.get(error), doc: item.id}));\r\n }\r\n }\r\n this.setState({deleting: false});\r\n }\r\n }\r\n\r\n toggleDetails = (rowData) => {\r\n if(rowData.tableData.showDetailPanel) {\r\n rowData.tableData.showDetailPanel = '';\r\n }\r\n else {\r\n rowData.tableData['showDetailPanel'] = this.renderRecipients;\r\n }\r\n this.forceUpdate();\r\n }\r\n\r\n /**\r\n * renders the list of recipients currently defined for the project. Allows add/remove\r\n * @param {object} rowData the data for a single file\r\n */\r\n renderRecipients = (rowData) => {\r\n return (\r\n \r\n this.handleRecipientsChanged(rowData, value)}\r\n />\r\n \r\n );\r\n }\r\n\r\n /**\r\n * either the list has shrunk by 1 or grown by 1, detect what happened and react\r\n * @param {object} rowData project data\r\n * @param {array} value new list of emails\r\n */\r\n async handleRecipientsChanged(rowData, value) {\r\n // if the list of recipients goes from empty to not empty or visa versa, we need to update the full ui so that the icon is updated\r\n const needsUpdateUI = ((!rowData.recipients || rowData.recipients.length === 0) && value.length > 0) || (rowData.recipients && rowData.recipients.length > 0 && value.length === 0);\r\n\r\n let difference;\r\n let direction;\r\n if (rowData.recipients && rowData.recipients.length > value.length) {\r\n difference = rowData.recipients.filter(x => !value.includes(x)); // get difference, return all elements that are in rowData.recpients, not in value (so that have been removed)\r\n direction = 'removed';\r\n }\r\n else if (rowData.recipients) {\r\n difference = value.filter(x => !rowData.recipients.includes(x));\r\n direction = 'added';\r\n }\r\n else {\r\n difference = value;\r\n direction = 'added';\r\n }\r\n rowData.recipients = value; // important: do before event, cause this is the way that they can get the full list and not just the dif\r\n if (this.props.onRecipientsChanged) {\r\n await this.props.onRecipientsChanged(rowData, difference, direction);\r\n } \r\n if (needsUpdateUI) {\r\n this.forceUpdate();\r\n }\r\n }\r\n}\r\n\r\nDocsList.defaultProps = {\r\n customActions: []\r\n}\r\n\r\nDocsList.propTypes = {\r\n noValuesText: PropTypes.string,\r\n reports: PropTypes.array,\r\n onDeleteDocument: PropTypes.func, // called async, for deleting a single document.\r\n onShowDetails: PropTypes.func,\r\n onShowPdf: PropTypes.func, // called when the action to show the pdf file for a project is triggered\r\n columns: PropTypes.array, // columns to be shown. Are set by default\r\n customActions: PropTypes.array, // extra actions that need to be added\r\n onRecipientsChanged: PropTypes.func, // let caller store the value.\r\n onIsShowPdfDisabled: PropTypes.func // called to check if a project has a pdf file to show (in cloud or on disk)\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(withRouter(DocsList)));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport Button from '@material-ui/core/Button';\r\nimport { withTranslation } from 'react-i18next';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport ListSubheader from '@material-ui/core/ListSubheader';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport { cloudDocsService } from '../services/cloud_documents_service';\r\nimport { dialogService } from '../../services/dialog_service';\r\nimport { errExtractor } from '../services/error_extractor';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n backgroundColor: theme.palette.background.paper,\r\n marginTop: theme.spacing(1),\r\n },\r\n checkBox: {\r\n padding: '0px'\r\n },\r\n header: {\r\n fontWeight: 'bold',\r\n lineHeight: '24px',\r\n textTransform: 'capitalize',\r\n marginTop: theme.spacing(1)\r\n },\r\n subHeader: {\r\n lineHeight: '24px'\r\n },\r\n list: {\r\n //display: \"flex\",\r\n //flexDirection: \"column\",\r\n //flexWrap: \"wrap\",\r\n //maxHeight: \"500px\",\r\n },\r\n listItem: {\r\n padding: '0px'\r\n }\r\n});\r\n\r\n/**\r\n * removes the part before the first '_' in the text. \r\n * This is to remove the projec number from google cloud files\r\n * @param {string} original the original name\r\n */\r\nfunction extractName(original) {\r\n const idx = original.indexOf('_');\r\n return original.slice(idx + 1, original.length);\r\n}\r\n\r\nclass DownloadDialog extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.checked = [];\r\n this.state = {\r\n project: null\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.downloadProject) {\r\n this.loadData();\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if(prevProps.downloadProject !== this.props.downloadProject) {\r\n if (this.props.downloadProject) {\r\n this.loadData();\r\n }\r\n else {\r\n this.setState({project: null});\r\n }\r\n }\r\n }\r\n\r\n loadData() {\r\n cloudDocsService.getProject(this.props.downloadProject, false).then((data) => {\r\n this.setState({project: data});\r\n }).catch((error) => {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Download\"), t(\"load_error\", {pathToFile: this.props.downloadProject, error: errExtractor.get(error)}));\r\n });\r\n }\r\n \r\n\r\n render() {\r\n const { t } = this.props;\r\n const prj = this.state.project;\r\n if (!prj) {\r\n return null;\r\n }\r\n return (\r\n \r\n {t(\"Files\")}\r\n \r\n \r\n {t(\"Select the files you would like to download\")}\r\n \r\n \r\n {t(\"project\")}\r\n \r\n {this.renderCheckBox(\"pdf\")}\r\n \r\n \r\n \r\n {this.renderCheckBox('xml')}\r\n \r\n \r\n {(prj.files && prj.files.attachments && prj.files.attachments.length > 0) &&\r\n \r\n {this.renderCheckBox('attachments')}\r\n \r\n \r\n }\r\n {(prj.strengs && prj.strengs.length > 0) &&\r\n \r\n {t(\"Strengs / putten\")}\r\n \r\n {this.renderCheckBox(\"images\")}\r\n \r\n \r\n \r\n {this.renderCheckBox(\"videos\")}\r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n renderCheckBox(el) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n handleSelect = (obj) => () => {\r\n const idx = this.checked.indexOf(obj);\r\n if (idx === -1) {\r\n this.checked.push(obj);\r\n }\r\n else {\r\n this.checked.splice(idx, 1);\r\n }\r\n this.forceUpdate();\r\n }\r\n\r\n handleIsChecked = (obj) => {\r\n return this.checked.indexOf(obj) > -1;\r\n }\r\n\r\n handleOk = (event) => {\r\n if (this.props.onClose) {\r\n let list = this.checked;\r\n if (list.indexOf('videos') == -1 && list.indexOf('images') == -1 && list.indexOf('attachments') == -1) { // if zip needs to be made, caller figures it out, otherwise we give the files to downlaod\r\n list = [];\r\n if (this.checked.indexOf('pdf') > -1 ) {\r\n list.push(this.state.project.files.pdfReport);\r\n }\r\n if (this.checked.indexOf('xml') > -1) {\r\n list = list.concat(this.state.project.files.xml);\r\n }\r\n }\r\n this.props.onClose(list);\r\n }\r\n event.stopPropagation(); // need to prevent from propogating, otherwise we change the position in the video, which we don't want\r\n event.preventDefault();\r\n }\r\n\r\n handleCancel = (event) => {\r\n if (this.props.onClose) this.props.onClose(null);\r\n event.stopPropagation(); // need to prevent from propogating, otherwise we change the position in the video, which we don't want\r\n event.preventDefault();\r\n }\r\n}\r\n\r\nDownloadDialog.propTypes = {\r\n open: PropTypes.bool.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n downloadProject: PropTypes.string\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(DownloadDialog));","import { API_URL } from \"./server_config_service\";\r\nimport { getHeaders } from './fetch_services';\r\nimport i18n from \"i18next\";\r\n\r\n\r\nclass MicroServices {\r\n /**\r\n * gets all the projects that the current user can see. No details, only summary info\r\n */\r\n async zipProject(projectId, data) {\r\n return new Promise((resolve, reject) => {\r\n fetch(`${API_URL}/project/${projectId}/zip`, {method: 'POST', mode: 'cors', body: JSON.stringify(data), headers: getHeaders()})\r\n .then((result) => {\r\n if (result.ok === true) {\r\n result.text().then((data) =>{\r\n console.log(data);\r\n if (result.status === 200) {\r\n resolve();\r\n }\r\n else {\r\n //todo: add error message\r\n reject(i18n.t(\"invalid response from server\"));\r\n }\r\n });\r\n }\r\n else { \r\n result.json().then((error) => {\r\n reject(error);\r\n }).catch(() => {\r\n reject(i18n.t(\"invalid response from server\"));\r\n });\r\n }\r\n })\r\n .catch((error) => reject(error))\r\n ;\r\n });\r\n }\r\n}\r\n\r\nexport const microServices = new MicroServices();","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n//img \r\n//import logoImg from '../../images/name_logo.png';\r\nimport Download from 'mdi-material-ui/Download';\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\n//import Divider from '@material-ui/core/Divider';\r\nimport Container from '@material-ui/core/Container';\r\nimport DocsList from './docs_list_component';\r\nimport DownloadDialog from './dowload_dialog';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { cloudDocsService } from '../services/cloud_documents_service';\r\nimport { isEmpty } from '../services/project_service';\r\nimport { storageService, TEMP_ZIP_BUCKET } from '../../services/storage_service';\r\nimport { dialogService } from '../../services/dialog_service';\r\nimport { errExtractor } from '../services/error_extractor';\r\nimport { userService } from '../services/user_service';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { microServices } from '../services/micro_services';\r\nimport { configService } from '../../services/config_service';\r\nimport Backdrop from '@material-ui/core/Backdrop';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n flex: 1,\r\n textAlign: 'center',\r\n backgroundColor: theme.palette.background.default,\r\n },\r\n docRoot: {\r\n flex: 1\r\n },\r\n logo: {\r\n height: '70px',\r\n pointerEvents: \"none\"\r\n },\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: '#fff',\r\n },\r\n\r\n});\r\n\r\n\r\nclass CloudDocsList extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n reports: [],\r\n downloadDlgOpen: false,\r\n downloadProject: null, // for letting the download dlg know for which project to select files from\r\n downloading: true, // so we can indicate when the data has not yet been retrieved from the server\r\n }\r\n }\r\n\r\n /**\r\n * load data here, constructor gets called multiple times, causing data to be loaded multiple times\r\n */\r\n componentDidMount() {\r\n cloudDocsService.getDocs().then((result) => {\r\n let docs = result.map((el) => { // at the moment, only show published items\r\n return {\r\n publishedAt: el.publishedAt,\r\n id: el.id,\r\n recipients: el.recipients,\r\n invalidRecipients: el.invalidRecipients,\r\n location: el.main.location,\r\n managingInstance: el.main.managingInstance,\r\n opdrCodeBedrijf: el.main.opdrCodeBedrijf,\r\n opdrCodeOpdrGever: el.main.opdrCodeOpdrGever,\r\n name: el.name,\r\n companyName: el.companyName,\r\n rawData: el, // so we can quickly save recipient & id changes without having to reload the data all the time. WARNING: could be mem issue\r\n }\r\n });\r\n this.setState({ reports: docs, downloading: false });\r\n }).catch((error) => {\r\n const { t } = this.props;\r\n this.setState({ downloading: false });\r\n dialogService.error(t(\"Reports\"), t(\"docs_load_failed\", { error: errExtractor.get(error) }));\r\n });\r\n }\r\n\r\n\r\n render() {\r\n const { t } = this.props;\r\n let content;\r\n if (!userService.getCurrentUser()) {\r\n content = Not logged in\r\n }\r\n else if (this.state.reports && this.state.reports.length > 0) {\r\n content = \r\n \r\n ,\r\n tooltip: t('Download files'),\r\n onClick: (event, data) => this.handleStartDownload(data),\r\n position: \"row\"\r\n }\r\n ]}\r\n />\r\n \r\n \r\n }\r\n else {\r\n content =\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n }\r\n return (\r\n \r\n {content}\r\n \r\n );\r\n }\r\n\r\n handleStartDownload = (project) => {\r\n this.setState({ downloadDlgOpen: true, downloadProject: project.id })\r\n }\r\n\r\n handleCloseDownloadDlg = async (result) => {\r\n const { t } = this.props;\r\n const project = this.state.downloadProject;\r\n try {\r\n this.setState({ downloadDlgOpen: false });\r\n if (result && this.props.onDownloadFiles) {\r\n if (result.indexOf('videos') > -1 || result.indexOf('images') > -1 || result.indexOf('attachments') > -1) { // need the zip\r\n const bucket = { bucket: TEMP_ZIP_BUCKET, name: storageService.getProjectZipFile(result, project) };\r\n let url = await storageService.tryGetUrl(bucket);\r\n if (url) {\r\n this.props.onDownloadFiles([url]);\r\n }\r\n else {\r\n const user = userService.getCurrentUser();\r\n if (!user) {\r\n throw new Error(\"No user logged in, can't generate zip request\");\r\n }\r\n if (!user.email) {\r\n throw new Error(t(\"no_zip_missing_email\"));\r\n }\r\n const request = { \"videos\": result.indexOf('videos') > -1, \r\n \"images\": result.indexOf('images') > -1, \r\n \"xml\": result.indexOf('xml') > -1, \r\n \"pdf\": result.indexOf('pdf') > -1, \r\n \"attachments\": result.indexOf('attachments') > -1, \r\n \"InclinationAsPercentage\": configService.get(\"robot.InclinationAsPercentage\") }\r\n await microServices.zipProject(project, request);\r\n dialogService.info(t(\"Download\"), t(\"project_zip_being_prepared\"));\r\n }\r\n }\r\n else {\r\n let urls = [];\r\n for (const bucket of result) {\r\n const url = await storageService.getUrl(bucket);\r\n urls.push(url);\r\n }\r\n this.props.onDownloadFiles(urls);\r\n }\r\n }\r\n }\r\n catch (error) {\r\n dialogService.error(t(\"Download\"), t(\"file_download_problem\", { error: errExtractor.get(error) }));\r\n }\r\n }\r\n\r\n handleShowDetails = (ev, doc) => {\r\n this.props.history.push(`/doc/${doc.id}`);\r\n }\r\n\r\n hanldeIsShowPdfDisabled = (rowData) => {\r\n if (rowData.rawData.files) { // when not yet published and viewed by company editor, this doc is in list, but will not yet have files.\r\n return isEmpty(rowData.rawData.files.pdfReport);\r\n }\r\n return true;\r\n }\r\n\r\n showPdf = (event, rowData) => {\r\n const files = rowData.rawData.files;\r\n if (files.pdfReport) {\r\n storageService.getUrl(files.pdfReport, \"application/pdf\").then((url) => {\r\n if (this.props.onOpenPdf) {\r\n this.props.onOpenPdf(url);\r\n }\r\n }).catch((error) => {\r\n const { t } = this.props;\r\n dialogService.error(\"pdf\", t(\"cant_find_file_on_server\", { error: errExtractor.get(error), doc: files.pdfReport.name }));\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * deletes the report. Error handling not needed here, is done by caller.\r\n * @param {object} report the report to delete\r\n */\r\n deleteReport = async (report) => {\r\n try {\r\n await cloudDocsService.delete(report.id);\r\n const idx = this.state.reports.indexOf(report); // remove it from the list, don't need to recreate the list. caller is doing await and will refresh automatically after all are done.\r\n if (idx >= 0) { // just a sanity check\r\n let newReports = [...this.state.reports];\r\n newReports.splice(idx, 1);\r\n this.setState({ reports: newReports });\r\n }\r\n }\r\n catch (error) {\r\n dialogService.error(\"Reports\", errExtractor.get(error));\r\n }\r\n }\r\n\r\n /**\r\n * don't do any error handling. Is done in caller so that ui doesn't get updated\r\n * incorrectly when there is an error\r\n * @param {object} report the data object created in buildReportObj\r\n * @param {array} list list of emails that changed\r\n * @param {string} operation possible values: 'added' or 'removed'\r\n */\r\n saveRecipients = async (report, list, operation) => {\r\n if (report.id) { // the report is already saved in the cloud, so update in cloud and file\r\n if (!navigator.onLine) {\r\n throw new Error(\"internet connection required to modify list of receivers for published projects\");\r\n }\r\n if (report.rawData.cloudState === \"published\") {\r\n if (operation === \"added\") {\r\n report.rawData = await cloudDocsService.addRecipients(report.id, list); // need to keep track of the list of failed recipients\r\n }\r\n else {\r\n await cloudDocsService.removeRecipients(report.id, list);\r\n }\r\n }\r\n else {\r\n report.rawData.recipients = report.recipients; // save the new list in the rawdata so we can save to file again and upload the correct data to cloud\r\n const updateRec = { id: report.id, recipients: report.recipients };\r\n await cloudDocsService.updateProject(updateRec);\r\n }\r\n }\r\n }\r\n}\r\n\r\nCloudDocsList.propTypes = {\r\n onOpenPdf: PropTypes.func, // (url: string) => {} called when the pdf needs to be opened, platform specific, \r\n onDownloadFiles: PropTypes.func // (list: bucket[]) => {} called when files need to be downloaded for the user. \r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(withRouter(CloudDocsList)));","\r\nimport logoImg from '../images/medium_logo.png';\r\n\r\nimport topImg from '../images/dashboard/top.svg';\r\nimport frontImg from '../images/dashboard/front.svg';\r\nimport sideImg from '../images/dashboard/side.svg';\r\nimport frontCamImg from '../images/dashboard/front_cam.svg';\r\nimport topCamImg from '../images/dashboard/top_cam.svg';\r\nimport sideCamImg from '../images/dashboard/side_cam.svg';\r\n\r\n/**\r\n * loads image and returns base 64 of image\r\n * is done cause image-to-base don't run on safari\r\n * @param {string} path filepath\r\n */\r\nexport function loadImage(path) {\r\n return Promise.reject(\"not supported\");\r\n}\r\n\r\nexport function getLogoImg() {\r\n return logoImg;\r\n}\r\n\r\n\r\n/**\r\n * get the \r\n * @param {string} name name of the image\r\n */\r\nexport function getDashboardImg(name) {\r\n switch (name) {\r\n case \"top.svg\": return topImg; break;\r\n case \"front.svg\": return frontImg; break;\r\n case \"side.svg\": return sideImg; break;\r\n case \"front_cam.svg\": return frontCamImg; break;\r\n case \"top_cam.svg\": return topCamImg; break;\r\n case \"side_cam.svg\": return sideCamImg; break;\r\n default:\r\n break;\r\n }\r\n throw new Error(\"cant find image: \" + name);\r\n}","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n// icons\r\nimport CameraOutline from 'mdi-material-ui/CameraOutline';\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport Button from '@material-ui/core/Button';\r\nimport { withTranslation } from 'react-i18next';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Box from '@material-ui/core/Box';\r\nimport Badge from '@material-ui/core/Badge';\r\nimport Avatar from '@material-ui/core/Avatar';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { userService } from '../services/user_service';\r\nimport { dialogService } from '../../services/dialog_service';\r\nimport { storageService } from '../../services/storage_service';\r\nimport { errExtractor } from '../services/error_extractor';\r\nimport { loadImage } from '../../services/image_service';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n backgroundColor: theme.palette.background.paper,\r\n marginTop: theme.spacing(1),\r\n },\r\n text: {\r\n textAlign: 'center'\r\n },\r\n subIcon: {\r\n background: theme.palette.background.paper,\r\n boxShadow: '0 1px 1px 0 rgba(65,69,73,0.3), 0 1px 3px 1px rgba(65,69,73,0.15);',\r\n padding: '2px',\r\n '&:hover': {\r\n background: theme.palette.background.paper,\r\n }\r\n },\r\n textBox: {\r\n marginLeft: theme.spacing(2)\r\n }\r\n});\r\n\r\nconst INPUT_LABEL_PROPS = { shrink: true, style:{width: '135%'} };\r\n\r\nclass AccountDetailsDialog extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n avatar: props.avatar,\r\n firstName: props.user.firstName,\r\n lastName: props.user.lastName,\r\n username: props.user.username,\r\n pwd: \"\",\r\n }\r\n\r\n this.changeObj = {}; // keeps track of all the changes that need to be posted to server\r\n this.avatarFile = null;\r\n }\r\n\r\n\r\n render() {\r\n const { t } = this.props; \r\n //const fullName = `${this.state.firstName ?? \"\"} ${this.state.lastName ?? \"\"}`; \r\n \r\n let badgeContent = null;\r\n if (this.props.allowUploadFoto) {\r\n badgeContent = \r\n \r\n \r\n }\r\n return (\r\n \r\n {t(\"Account details\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n \r\n handleOk = async () => {\r\n let result = {user: null, avatar: null};\r\n try {\r\n if (Object.keys(this.changeObj).length > 0) { // if there were any changes, post them to server\r\n result.user = await userService.saveUser(this.changeObj, this.props.user.id);\r\n result.user['token'] = this.props.user.token; // always need to preserve the token, this is no longer provided in the return.\r\n userService.setCurrentUser(result.user);\r\n }\r\n if (this.avatarFile) {\r\n await storageService.uploadAvatar(this.avatarFile, this.props.user.id);\r\n result.avatar = await storageService.getAvatarUrl(this.props.user.id);\r\n }\r\n if (this.state.pwd) { // need to change the pwd\r\n await userService.changePwd(this.props.user.id, this.state.pwd);\r\n }\r\n if (this.props.onClose) this.props.onClose(result);\r\n }\r\n catch(error) {\r\n const { t } = this.props; \r\n dialogService.error(t(\"Account details\"), errExtractor.get(error));\r\n }\r\n }\r\n\r\n handleCancel = () => {\r\n if (this.props.onClose) this.props.onClose();\r\n }\r\n\r\n handlePwdChanged = (ev) => {\r\n try {\r\n this.setState({pwd: ev.target.value});\r\n }\r\n catch (error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Account details\"), errExtractor.get(error));\r\n }\r\n }\r\n\r\n handleTextChanged = (ev) => {\r\n try {\r\n this.changeObj[ev.target.id] = ev.target.value;\r\n let newState = {};\r\n newState[ev.target.id] = ev.target.value;\r\n this.setState(newState);\r\n }\r\n catch (error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Account details\"), errExtractor.get(error));\r\n }\r\n }\r\n\r\n selectImg = () => {\r\n if (!this.props.user) {\r\n dialogService.error(\"account\", \"not logged in\");\r\n return;\r\n }\r\n const imgs = dialogService.openImage();\r\n if (imgs && imgs.length > 0) {\r\n loadImage(imgs[0]) \r\n .then( (response) => {\r\n this.avatarFile = imgs[0];\r\n this.setState({avatar: `data:image/png;base64, ${response}`});\r\n }).catch( (error) => {\r\n const { t } = this.props; \r\n dialogService.error(t(\"Account details\"), errExtractor.get(error));\r\n });\r\n }\r\n }\r\n}\r\n\r\nAccountDetailsDialog.propTypes = {\r\n open: PropTypes.bool.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n user: PropTypes.string.isRequired,\r\n avatar: PropTypes.string.isRequired,\r\n allowUploadFoto: PropTypes.bool.isRequired,\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(AccountDetailsDialog));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n*/\r\n\r\n//icons\r\nimport CameraOutline from 'mdi-material-ui/CameraOutline';\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport '../../App.css';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { withTranslation } from 'react-i18next';\r\nimport Avatar from '@material-ui/core/Avatar';\r\nimport Popover from '@material-ui/core/Popover';\r\nimport { IconButton, Typography } from '@material-ui/core';\r\nimport Box from '@material-ui/core/Box';\r\nimport { userService } from '../services/user_service';\r\nimport Button from '@material-ui/core/Button';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Link from '@material-ui/core/Link';\r\nimport ConfirmationDialog from '../dialogs/confirmation_dialog';\r\nimport AccountDetailsDialog from './account_details_dialog';\r\nimport { authService } from '../services/auth_service';\r\nimport { dialogService } from '../../services/dialog_service';\r\nimport Badge from '@material-ui/core/Badge';\r\nimport { errExtractor } from '../services/error_extractor';\r\nimport { storageService } from '../../services/storage_service';\r\nimport isElectron from 'is-electron';\r\nimport { withRouter } from 'react-router-dom';\r\n\r\nconst styles = (theme) => ({\r\n rootPopover: {\r\n },\r\n popoverBox: {\r\n margin: theme.spacing(2)\r\n },\r\n btn: {\r\n },\r\n accountBtn: {\r\n marginTop: theme.spacing(1)\r\n },\r\n subIcon: {\r\n background: theme.palette.background.paper,\r\n boxShadow: '0 1px 1px 0 rgba(65,69,73,0.3), 0 1px 3px 1px rgba(65,69,73,0.15);',\r\n padding: '2px',\r\n '&:hover': {\r\n background: theme.palette.background.paper,\r\n }\r\n },\r\n avatar: {\r\n backgroundColor: theme.palette.action.active,\r\n height: '24px',\r\n width: '24px'\r\n }\r\n\r\n});\r\n\r\n\r\n\r\n/**\r\n * UI element for managing the currently active user: config, logout..\r\n */\r\nclass Account extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.allowUploadFoto = isElectron(); // uploading from web page is not yet supported\r\n this.state = {\r\n user: null,\r\n avatar: \"\",\r\n dlgLogOutOpen: false,\r\n dlgAccountDtlsOpen: false,\r\n open: false,\r\n anchorEl: null\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n // so that it is only called 1 time (constructor can be called multiple times)\r\n const user = userService.getCurrentUser();\r\n this.setState({ user: user }); // make certain that it is always stored, even if avatar fails\r\n if (user) {\r\n storageService.getAvatarUrl(user.id).then((url) => {\r\n this.setState({ avatar: url });\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n const user = this.state.user;\r\n const fullName = user ? user.username : \"\";\r\n\r\n let badgeContent = null;\r\n if (this.allowUploadFoto) {\r\n badgeContent = \r\n \r\n \r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {fullName}\r\n {user?.email}\r\n \r\n \r\n \r\n {(this.props.canLogOut) &&\r\n \r\n \r\n {this.getlogInLogOutButton()}\r\n \r\n }\r\n \r\n \r\n \r\n Privacy Policy\r\n \r\n \r\n \r\n \r\n \r\n {(this.state.dlgAccountDtlsOpen) &&\r\n \r\n }\r\n \r\n );\r\n }\r\n\r\n getlogInLogOutButton() {\r\n const { t } = this.props;\r\n if (this.state.user) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n else {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n }\r\n\r\n toggleMenu = (event) => {\r\n const newVal = !this.state.open;\r\n this.setState({ open: newVal, anchorEl: newVal ? event.currentTarget : null });\r\n }\r\n\r\n handleClose = () => {\r\n this.setState({ open: false, anchorEl: null });\r\n }\r\n\r\n handleCloseAccountDetails = (result) => {\r\n this.setState({ dlgAccountDtlsOpen: false });\r\n if (result) {\r\n if (result.user) { this.setState({ user: result.user }) };\r\n if (result.avatar) { this.setState({ avatar: result.avatar }) };\r\n }\r\n }\r\n\r\n /**\r\n * ask the user if he is certain he wants to log out, if so, do it, otherwise block furhter handling\r\n */\r\n askLogOut = (event) => {\r\n this.setState({ dlgLogOutOpen: true });\r\n }\r\n\r\n handleLogOut = async (result) => {\r\n this.setState({ dlgLogOutOpen: false, open: false });\r\n if (result) {\r\n try {\r\n await authService.logout();\r\n this.props.history.replace('/login');\r\n }\r\n catch (error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Log out\"), errExtractor.get(error));\r\n }\r\n }\r\n }\r\n\r\n gotoAccountSettings = () => {\r\n this.setState({ dlgAccountDtlsOpen: true });\r\n }\r\n\r\n selectImg = async () => {\r\n if (!this.state.user) {\r\n dialogService.error(\"account\", \"not logged in\");\r\n return;\r\n }\r\n const imgs = dialogService.openImage();\r\n if (imgs && imgs.length > 0) {\r\n await storageService.uploadAvatar(imgs[0], this.state.user.id);\r\n const url = await storageService.getAvatarUrl(this.state.user.id);\r\n this.setState({ avatar: url });\r\n }\r\n }\r\n}\r\n\r\nAccount.defaultProps = {\r\n canLogOut: true\r\n}\r\n\r\nAccount.propTypes = {\r\n canLogOut: PropTypes.bool\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(withRouter(Account)));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport '../../App.css';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { withTranslation } from 'react-i18next';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport Typography from '@material-ui/core/Typography';\r\n//import IconButton from '@material-ui/core/IconButton';\r\nimport Account from '../auth/account_component';\r\nimport PropTypes from 'prop-types';\r\nimport { getLogoImg } from '../../services/image_service';\r\n\r\n// icons\r\n// import MoreIcon from '@material-ui/icons/MoreVert';\r\n\r\n// images\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n\r\n },\r\n title: {\r\n\r\n },\r\n logo: {\r\n height: '28px',\r\n marginRight: theme.spacing(2),\r\n pointerEvents: \"none\"\r\n },\r\n \r\n});\r\n\r\n\r\n/**\r\n * toolbar for managing documents (home page)\r\n */\r\nclass DocumentsBar extends React.Component {\r\n // constructor(props) {\r\n // super(props);\r\n // }\r\n\r\n\r\n render() {\r\n //const { t } = this.props;\r\n const body = this.renderBody();\r\n const logoImg = getLogoImg();\r\n return (\r\n \r\n \r\n {this.props.showLogo && \r\n \"logo\"\r\n }\r\n {body}\r\n
\r\n {this.props.toolbarBtns}\r\n \r\n {/* \r\n \r\n */}\r\n \r\n \r\n );\r\n }\r\n\r\n renderBody() {\r\n if (this.props.tabs && this.props.tabs.length > 0) {\r\n return (\r\n \r\n {this.props.tabs}\r\n \r\n );\r\n }\r\n else {\r\n return (\r\n \r\n Projects\r\n \r\n )\r\n }\r\n }\r\n}\r\nDocumentsBar.propTypes = {\r\n canLogOut: PropTypes.bool, // desktop app can't log out, cause license determins who is logged in.\r\n showLogo: PropTypes.bool,\r\n tabs: PropTypes.array, // list of Tab objects\r\n currentTab: PropTypes.any, // value of currently selected tab\r\n onTabChanged: PropTypes.func, // callback for when tab value has changed.\r\n toolbarBtns: PropTypes.any // list of buttons that need to be shown on toolbar on the right side\r\n};\r\n\r\nDocumentsBar.defaultProps = {\r\n showLogo: true,\r\n canLogOut: true\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(DocumentsBar));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2021] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Box from '@material-ui/core/Box';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { withTranslation } from 'react-i18next';\r\nimport ReactResizeDetector from 'react-resize-detector';\r\n\r\n\r\nconst styles = (theme) => ({\r\n\r\n});\r\n\r\n\r\n/**\r\n * similar to BaseMeasure, but instead of drawing lines, an svg is drawn that can be scaled. \r\n */\r\nclass Paywall extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n\r\n }\r\n render() {\r\n const boxStyle = {\r\n margin: 'auto',\r\n top: '0px',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n position: 'sticky',\r\n background: \"rgba(180, 180, 180, 0.96)\",\r\n overflow: \"hidden\",\r\n zIndex: 100,\r\n height: \"100%\",\r\n display: 'flex'\r\n }\r\n if (this.props.needsMargin === false) {\r\n delete boxStyle.margin;\r\n }\r\n if (this.props.marginTop) {\r\n boxStyle['marginTop'] = `${this.props.marginTop}px`;\r\n }\r\n return (\r\n \r\n \r\n \r\n {/* the next div needs margin-bottom=-10px to make certain that the list at the bottom is also covered (dashboard) */}\r\n
\r\n
Enkel beschikbaar voor pro accounts
\r\n
Activeer pro-account
\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n handleResize = (width, height) => {\r\n this.setState({ width: width, height: height });\r\n }\r\n\r\n}\r\n\r\nPaywall.propTypes = {\r\n width: PropTypes.number.isRequired,\r\n height: PropTypes.number.isRequired,\r\n marginTop: PropTypes.number,\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(Paywall));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n// icons\r\nimport PanoramaHorizontal from 'mdi-material-ui/PanoramaHorizontal';\r\nimport PanoramaVertical from 'mdi-material-ui/PanoramaVertical';\r\nimport Droplet from 'mdi-material-ui/Water';\r\nimport Camera from 'mdi-material-ui/Camera';\r\nimport AugmentedReality from 'mdi-material-ui/AugmentedReality';\r\nimport FormatAlignBottom from 'mdi-material-ui/FormatAlignBottom';\r\nimport FormatAlignTop from 'mdi-material-ui/FormatAlignTop';\r\n\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles, withTheme } from '@material-ui/core/styles';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport { withTranslation } from 'react-i18next';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport Box from '@material-ui/core/Box';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport Chip from '@material-ui/core/Chip';\r\nimport { codeSelectorService } from '../../../services/code_selector_service';\r\nimport { cameraService } from '../../../../components/document/video/camera_service';\r\nimport { dialogService } from '../../../../services/dialog_service';\r\nimport { Tooltip } from '@material-ui/core';\r\nimport { ERROR_KEYS, isEmpty, PIPE_INSPECTIONS } from '../../../services/project_service';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport Switch from '@material-ui/core/Switch';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport { configService } from '../../../../services/config_service';\r\nimport ToggleButton from '@material-ui/lab/ToggleButton';\r\nimport ReactResizeDetector from 'react-resize-detector';\r\n\r\n\r\nconst styles = (theme) => ({\r\n titleBar: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n textAlign: 'center'\r\n },\r\n titleToggle: {\r\n position: 'absolute', \r\n height: '64px', \r\n marginLeft: theme.spacing(2),\r\n },\r\n titleToggleSmall: {\r\n position: 'absolute', \r\n marginLeft: '0px',\r\n },\r\n rightSideHeaderToolbox: {\r\n alignSelf: \"center\",\r\n right: theme.spacing(1), \r\n marginTop: theme.spacing(1),\r\n display: 'flex',\r\n flexDirection: 'row',\r\n },\r\n list: {\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n text: {\r\n textAlign: 'center'\r\n },\r\n summaryTotalRow: {\r\n flexDirection: 'row',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n marginRight: theme.spacing(2),\r\n },\r\n summaryTotalCell: {\r\n marginRight: theme.spacing(1)\r\n },\r\n summaryTotalValueCell: {\r\n color: theme.palette.text.secondary,\r\n whiteSpace: \"nowrap\",\r\n },\r\n detailLength: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginRight: theme.spacing(2),\r\n alignItems: 'flex-end'\r\n },\r\n detailTitle: {\r\n flex: 1,\r\n marginRight: theme.spacing(1)\r\n }\r\n});\r\n\r\nconst LOCATION_WIDTH = '180px';\r\n\r\nclass StrengsSummary extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n \r\n this.scrollbox = React.createRef(); // we need to know when the scollbar is visible so that we can adjust the margin of the header\r\n this.scrollbarWidth = null; // so we only need to calculate this 1 time\r\n const showInventory = configService.get(\"general.showInventory\") ?? false;\r\n const showAR = configService.get(\"general.showAR\") ?? false;\r\n const showObsDetails = configService.get(\"observations.showObsDetails\") ?? false;\r\n this.state = {\r\n data: [], // the calculated data to display. This is calculated when opened.\r\n totalActualLength: 0,\r\n totalExpectedLength: 0,\r\n innerWidth: 0, // for responsive behaviour\r\n showInventory: showInventory,\r\n scrollbarVisible: false, // the project overview needs to align with the content, but this changes depending on the scrolbar visibility, so monitor\r\n showObsDetails: showObsDetails, // show detailed labels or keys for obs\r\n showAR: showAR, // toggle to select if user wants to go to AR or document clicking on a streng\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.strengs && this.props.main) {\r\n this.calculateData();\r\n }\r\n window.addEventListener('resize', this.updateDimensions);\r\n this.updateDimensions(); // alo make certain taht this is called when loaded as well\r\n const scrollbox = this.scrollbox.current;\r\n if (scrollbox) {\r\n const scrollbarVisible = scrollbox.scrollHeight > scrollbox.clientHeight;\r\n this.setState({scrollbarVisible: scrollbarVisible});\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.updateDimensions);\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.strengs != this.props.strengs) {\r\n this.calculateData();\r\n }\r\n if (prevProps.scrollbarVisible === this.props.scrollbarVisible) { // another property has changed\r\n const scrollbox = this.scrollbox.current;\r\n if (scrollbox) {\r\n const scrollbarVisible = scrollbox.scrollHeight > scrollbox.clientHeight;\r\n if (this.state.scrollbarVisible !== scrollbarVisible) {\r\n this.setState({scrollbarVisible: scrollbarVisible});\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * called when the window is resized. Used to trigger responsive behaviour. also see handleResize\r\n */\r\n updateDimensions = () => {\r\n const scrollbox = this.scrollbox.current;\r\n let width;\r\n if (scrollbox) {\r\n width = scrollbox.clientWidth;\r\n }\r\n else {\r\n width = window.innerWidth;\r\n }\r\n this.setState({ innerWidth: width });\r\n }\r\n\r\n /**\r\n * for handling the resize f the innter component\r\n * @param {*} width \r\n * @param {*} height \r\n */\r\n handleResize = (width, height) => {\r\n this.setState({innerWidth:width}); // 24: 3 spaces (top, center, bottom), / 4 cause radius also needs / 2\r\n }\r\n\r\n calculateData() {\r\n let result = [];\r\n let totalExpectedLength = 0;\r\n let totalActualLength = 0;\r\n if (this.props.strengs) {\r\n for (let strengIdx = 0; strengIdx < this.props.strengs.length; strengIdx++) {\r\n let streng = this.props.strengs[strengIdx];\r\n let details = this.getStrengDetails(streng);\r\n let color;\r\n if (details.length > 0) {\r\n color = details.length > 2 ? 'red' : 'orange';\r\n }\r\n result.push({ streng, details, color, idx: strengIdx });\r\n if (!isEmpty(streng.expectedInspectionLength)) {\r\n totalExpectedLength += +(streng.expectedInspectionLength);\r\n }\r\n if (!isEmpty(streng.actualInspectionLength)) {\r\n totalActualLength += +(streng.actualInspectionLength);\r\n }\r\n }\r\n }\r\n result.sort((a, b) => {\r\n if (a.streng.ref > b.streng.ref) { return 1 }\r\n if (a.streng.ref < b.streng.ref) { return -1 }\r\n return 0;\r\n });\r\n this.setState({ data: result, totalExpectedLength: totalExpectedLength.toFixed(2), totalActualLength: totalActualLength.toFixed(2) });\r\n }\r\n\r\n getStrengDetails(streng) {\r\n //const { t } = this.props;\r\n let errResults = [];\r\n let otherObs = []; // everything that is not an error\r\n let idx = 0;\r\n let errorCodeIdx = this.props.main.purpose == \"A\" ? 0 : 1; // if new streng, use idx 0, otherwise error idx 1\r\n if (streng.errors) { // the streng object has been pre-processed and already knows the list of errors, use this.\r\n for (const err of streng.errors) {\r\n if (err.obs.values.length == 0) { // found this in live data, possibly bad entry indata\r\n continue;\r\n }\r\n const item = this.getObsDetails(err);\r\n errResults.push(item);\r\n }\r\n for (const inv of streng.inventory) {\r\n if (inv.obs.values.length == 0) { // found this in live data, possibly bad entry indata\r\n continue;\r\n }\r\n const item = this.getObsDetails(inv);\r\n otherObs.push(item);\r\n }\r\n }\r\n else {\r\n for (const obs of streng.observations) {\r\n if (obs.values.length > 0 && obs.values[obs.values.length - 1] !== \"1\") { // if the last item in the key is 1, it's a terminator for continuous-observations, so skip that\r\n let key = obs.values.join(\"-\");\r\n let found = ERROR_KEYS.find((value) => key.startsWith(value)); // find the first item in the list that's the same as the start of the key\r\n const def = codeSelectorService.getLeaf(obs.values, streng.type);\r\n const {tooltip, label} = this.getObsTooltipAndLabel(obs, key);\r\n let imgIdx = -1;\r\n if (obs.includePicture) {\r\n imgIdx = idx;\r\n }\r\n if (found && def && def.errRating && def.errRating[errorCodeIdx]) { // found a problem observation -> there is an error rating for it.\r\n errResults.push({ key: key, tooltip: tooltip, image: imgIdx });\r\n }\r\n else {\r\n otherObs.push({ key: key, tooltip: tooltip, image: imgIdx, label: label });\r\n }\r\n }\r\n idx++;\r\n }\r\n }\r\n return {errors: errResults, other: otherObs};\r\n }\r\n\r\n getObsDetails(item) {\r\n let key = item.obs.values.join(\"-\");\r\n const {tooltip, label} = this.getObsTooltipAndLabel(item.obs, key);\r\n let imgIdx = -1;\r\n if (item.obs.includePicture) {\r\n imgIdx = { obsIdx: item.obsIdx, strengIdx: item.strengIdx };\r\n }\r\n return { key: key, tooltip: tooltip, image: imgIdx , label: label};\r\n }\r\n\r\n getObsTooltipAndLabel(obs, key) {\r\n const { t } = this.props;\r\n let tooltip = codeSelectorService.translatePath(obs.values);\r\n const tipParts = codeSelectorService.getLabelsFromDictPath(tooltip).map((el) => t(el));\r\n let remarkAtEnd = false;\r\n if (obs.values[obs.values.length-1] === 'Z' || (obs.values.length === 5 && obs.values[3] === 'Z') ) { // it's an observation that needs a remark section. this is also included in the tooltip, remove this.\r\n let popped = tipParts.pop(); // if we need to remove 2, need to add the last one again for the tooltip, after extracting the label\r\n if (obs.values.length === 5 && obs.values[3] === 'Z') { // the 'z' is not at the end, so need to pop 2 times\r\n tipParts.pop();\r\n tipParts.push(popped); // re-add the last one, it was not the 'z'\r\n }\r\n \r\n remarkAtEnd = true;\r\n }\r\n let label;\r\n if (obs.values.length === 5) {\r\n label = tipParts[tipParts.length - 2] + \" - \" + tipParts[tipParts.length - 1];\r\n }\r\n else {\r\n label = tipParts[tipParts.length - 1];\r\n }\r\n tooltip = tipParts.join(\" - \");\r\n if ((key == 'B-D-B' || remarkAtEnd) && obs.remark) { // it's a comment, add the comment text\r\n const toAdd = `: ${obs.remark}`;\r\n tooltip += toAdd;\r\n label += toAdd;\r\n }\r\n return {tooltip, label};\r\n }\r\n\r\n render() {\r\n const { t, classes } = this.props;\r\n let isReallySmall = this.state.innerWidth <= (this.props.theme.breakpoints.values.sm * 2 / 3); // if smaller than 2/3 of sm -> mobile that can't show title properly on 1 line\r\n let titleStyle = {flex:1, paddingLeft: \"96px\"};\r\n let dialogContentStyle;\r\n if (isReallySmall) {\r\n titleStyle['marginTop'] = '8px';\r\n titleStyle.paddingLeft= '56px';\r\n dialogContentStyle = {paddingLeft: '0px', paddingRight: '0px'};\r\n }\r\n let detailsBtn, detailsBtnTip;\r\n if (this.state.showObsDetails) {\r\n detailsBtn = ;\r\n detailsBtnTip = t(\"Hide the descriptions of the observations\");\r\n }\r\n else {\r\n detailsBtn = ;\r\n detailsBtnTip = t(\"Show the descriptions of the observations\");\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n }\r\n label={t(\"Inventory\")}\r\n />\r\n {t(\"Overview\")}\r\n
\r\n {(configService.isSite) && \r\n // ar can only be done with mobile at the moment, so desktop definitely not \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n {detailsBtn}\r\n \r\n \r\n
\r\n
\r\n {this.renderProjectOverview(isReallySmall)}\r\n \r\n \r\n {this.state.data.map(this.renderStrengDetail)}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n renderProjectOverview(isReallySmall) {\r\n const { t, classes } = this.props;\r\n const rootStyle = this.buildProjectOverviewStyle(isReallySmall);\r\n return (\r\n \r\n
\r\n
\r\n
{t(\"Totale leidinglengte\")}:
\r\n
{this.state.totalExpectedLength} m
\r\n
\r\n
\r\n
{t(\"Totale inspectielengte\")}:
\r\n
{this.state.totalActualLength} m
\r\n
\r\n
\r\n\r\n
\r\n
{t(\"Plaatsnaam\")}:
\r\n
{this.props.main?.location}
\r\n
\r\n
\r\n );\r\n }\r\n\r\n buildProjectOverviewStyle(isReallySmall) {\r\n const { theme } = this.props;\r\n const scrollbarWidth = this.state.scrollbarVisible ? 0 : this.getScrollbarWidth();\r\n const summaryTable = {\r\n marginLeft: theme.spacing(12),\r\n marginRight: theme.spacing(7) - scrollbarWidth,\r\n display: 'flex',\r\n flexDirection: 'row'\r\n };\r\n const summaryTableSmall = {\r\n marginLeft: theme.spacing(5),\r\n marginRight: theme.spacing(7) - scrollbarWidth,\r\n display: 'flex',\r\n flexDirection: 'row'\r\n };\r\n\r\n if (!isReallySmall) {\r\n const isLargeScreen = this.state.innerWidth > theme.breakpoints.values.sm;\r\n return isLargeScreen ? summaryTable : summaryTableSmall;\r\n }\r\n else {\r\n const summaryTableReallySmall = {\r\n paddingLeft: theme.spacing(1),\r\n paddingRight: theme.spacing(3) - scrollbarWidth,\r\n display: 'flex',\r\n flexDirection: 'row'\r\n };\r\n return summaryTableReallySmall;\r\n }\r\n }\r\n\r\n getScrollbarWidth() {\r\n if (!this.scrollbarWidth) {\r\n let div = document.createElement('div');\r\n div.style.overflowY = 'scroll';\r\n div.style.width = '50px';\r\n div.style.height = '50px';\r\n document.body.append(div);\r\n let scrollWidth = div.offsetWidth - div.clientWidth;\r\n div.remove();\r\n this.scrollbarWidth = scrollWidth;\r\n }\r\n return this.scrollbarWidth;\r\n }\r\n\r\n renderStrengDetail = (el, idx) => {\r\n //const { classes } = this.props;\r\n let isLargeScreen = this.state.innerWidth > this.props.theme.breakpoints.values.sm;\r\n const icon = this.buildIcon(el, isLargeScreen);\r\n let secondary = this.buildSecondary(el, idx);\r\n let primary = this.buildPrimary(el, icon, isLargeScreen);\r\n return (\r\n \r\n \r\n {(isLargeScreen) && {icon}}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n buildIcon(el, isLargeScreen) {\r\n //const { classes } = this.props;\r\n let icon = null;\r\n let iconStyle = el.color ? { color: el.color } : null;\r\n let dropletStyle = { left: '4px', top: '4px', height: '16px', position: 'absolute' }\r\n if (!isLargeScreen) {\r\n dropletStyle.height = '8px';\r\n if (iconStyle) {\r\n iconStyle['height'] = '16px';\r\n iconStyle['marginLeft'] = '-4px';\r\n }\r\n else {\r\n iconStyle = { 'height': '16px', marginLeft: '-4px' };\r\n }\r\n }\r\n icon = (PIPE_INSPECTIONS.includes(el.streng.type)) ? : \r\n if (el.streng.sewerUsage === 'B') {\r\n icon =
{icon}
\r\n }\r\n if (el.streng.type === 's') {\r\n let vLine = { top: '4px', height: (isLargeScreen) ? '10px' : '8px', position: 'absolute', borderRight: '2px solid gray',\r\n width: (isLargeScreen) ? '22px' : '14px' };\r\n icon =
{icon}
\r\n }\r\n return icon;\r\n }\r\n\r\n buildPrimary(el, icon, isLargeScreen) {\r\n let result = el.streng.ref;\r\n if (!isLargeScreen) {\r\n result =
{icon}{el.streng.ref}
\r\n }\r\n return result;\r\n }\r\n\r\n buildSecondary(el, idx) {\r\n const { classes } = this.props;\r\n let details = this.state.showInventory ? el.details.other : el.details.errors;\r\n let secondary;\r\n if (el.streng.pointRef3) {\r\n secondary = `${el.streng.pointRef1} - ${el.streng.pointRef2} - ${el.streng.pointRef3}`;\r\n }\r\n else {\r\n secondary = `${el.streng.pointRef1} - ${el.streng.pointRef2}`;\r\n }\r\n secondary = \r\n
\r\n
{secondary}
\r\n
\r\n
{el.streng.expectedInspectionLength} m
\r\n
{el.streng.actualInspectionLength} m
\r\n
\r\n
\r\n {el.streng.location}\r\n
\r\n
\r\n {(details && details.length > 0) &&\r\n \r\n {details.map((detail, idx2) => {\r\n const icon = detail.image !== -1 ? : null;\r\n const label = this.state.showObsDetails ? detail.label : detail.key;\r\n return (\r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n }\r\n
\r\n return secondary;\r\n }\r\n\r\n handleClickChip = (strengIdx, detail) => (ev) => {\r\n if (this.props.onClickObs) {\r\n const realIdx = this.state.data[strengIdx].idx; // we do a sort on the data, so need to map to the original index\r\n this.props.onClickObs(realIdx, detail);\r\n //e.preventDefault();\r\n ev.stopPropagation();\r\n }\r\n }\r\n\r\n handleGoto = (idx) => () => {\r\n if (cameraService.isRecording) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"video\"), t(\"Kan niet van streng veranderen tijdens opname. Stop eerst de opname.\"));\r\n }\r\n else if (this.state.showAR && this.props.onShowAR) {\r\n this.props.onShowAR(this.state.data[idx], this.state.showInventory);\r\n } else if (this.props.onClickStreng) {\r\n const realIdx = this.state.data[idx].idx; // we do a sort on the data, so need to map to the original index\r\n this.props.onClickStreng(realIdx);\r\n }\r\n }\r\n\r\n handleToggleShowInventory = () => {\r\n const newValue = !this.state.showInventory;\r\n this.setState({showInventory: newValue});\r\n configService.set(\"general.showInventory\", newValue);\r\n }\r\n\r\n handleToggleObsDetails = (ev) => {\r\n const newValue = !this.state.showObsDetails;\r\n this.setState({showObsDetails: newValue});\r\n configService.set(\"observations.showObsDetails\", newValue);\r\n ev.stopPropagation();\r\n }\r\n\r\n handleShowAR = () => {\r\n const newValue = !this.state.showAR;\r\n this.setState({showAR: newValue});\r\n configService.set(\"general.showAR\", newValue);\r\n }\r\n}\r\n\r\nStrengsSummary.propTypes = {\r\n strengs: PropTypes.array.isRequired, // streng data to show\r\n main: PropTypes.object.isRequired, // main data of the project\r\n onClickObs: PropTypes.func.isRequired,\r\n onClickStreng: PropTypes.func,\r\n onShowAR: PropTypes.func,\r\n};\r\n\r\nexport default withTheme(withTranslation()(withStyles(styles)(StrengsSummary)));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n// icons\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles, withTheme } from '@material-ui/core/styles';\r\n\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport Button from '@material-ui/core/Button';\r\nimport { withTranslation } from 'react-i18next';\r\nimport StrengsSummary from './strengs_summary_component';\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n },\r\n \r\n \r\n \r\n});\r\n\r\n\r\nclass StrengsSummaryDialog extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n }\r\n }\r\n\r\n\r\n render() {\r\n const { t } = this.props;\r\n if (!this.props.open) {\r\n return null;\r\n }\r\n const fullScreen = window.innerWidth <= this.props.theme.breakpoints.values.sm;\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 handleClose = () => {\r\n if (this.props.onClose) this.props.onClose(-1);\r\n }\r\n\r\n}\r\n\r\nStrengsSummaryDialog.propTypes = {\r\n strengs: PropTypes.array, // streng data to show\r\n main: PropTypes.object, // main data of the project\r\n open: PropTypes.bool.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n onClickObs: PropTypes.func,\r\n onShowAR: PropTypes.func,\r\n};\r\n\r\nexport default withTheme(withTranslation()(withStyles(styles)(StrengsSummaryDialog)));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles, withTheme } from '@material-ui/core/styles';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport Button from '@material-ui/core/Button';\r\nimport { withTranslation } from 'react-i18next';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst styles = (theme) => ({\r\n docRoot: {\r\n flex: 1,\r\n height: '30px'\r\n },\r\n dialogPaper: {height: 'calc(100% - 64px);'}\r\n});\r\n\r\nclass ObservationImageDialog extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n \r\n\r\n render() {\r\n const { t, classes } = this.props;\r\n if (!this.props.open) {\r\n return null;\r\n }\r\n const fullScreen = window.innerWidth <= this.props.theme.breakpoints.values.sm;\r\n const paperStyle = fullScreen ? null : classes.dialogPaper;\r\n const ImgContHeight = fullScreen ? \"calc(100% - 48px)\" : \"calc(100% - 24px)\";\r\n return (\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n {this.props.label}\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n handleClose = (event) => {\r\n if (this.props.onClose) this.props.onClose(null);\r\n event.stopPropagation(); // need to prevent from propogating, otherwise we change the position in the video, which we don't want\r\n event.preventDefault();\r\n }\r\n}\r\n\r\nObservationImageDialog.propTypes = {\r\n open: PropTypes.bool.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n image: PropTypes.string,\r\n label: PropTypes.string,\r\n};\r\n\r\nexport default withTheme(withTranslation()(withStyles(styles)(ObservationImageDialog)));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n//img \r\nimport MapSearch from 'mdi-material-ui/MapSearch';\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles, withTheme } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { cloudDocsService } from '../../services/cloud_documents_service';\r\nimport { isEmpty, projectService } from '../../services/project_service';\r\nimport { storageService } from '../../../services/storage_service';\r\nimport { dialogService } from '../../../services/dialog_service';\r\nimport { errExtractor } from '../../services/error_extractor';\r\nimport Paywall from '../../overlays/paywall_component';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport ListSubheader from '@material-ui/core/ListSubheader';\r\nimport Backdrop from '@material-ui/core/Backdrop';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport StrengsSummary from '../../document/inspection/strengs/strengs_summary_component';\r\nimport StrengsSummaryDialog from '../../document/inspection/strengs/strengs_summary_dialog';\r\nimport ObservationImageDialog from '../../document/inspection/observation/observation_image_dialog';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n backgroundColor: theme.palette.background.paper,\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n height: '100%'\r\n },\r\n list: {\r\n overflow: 'auto',\r\n flex: 1,\r\n minWidth: '300px'\r\n },\r\n listHeader: { \r\n backgroundColor: theme.palette.background.paper,\r\n display: 'flex', \r\n flexDirection: \"row\",\r\n justifyContent: \"center\",\r\n color: theme.palette.text.primary\r\n },\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: '#fff',\r\n },\r\n selectAll: {\r\n marginRight: theme.spacing(2)\r\n },\r\n searchBtn: {\r\n position: 'absolute', \r\n right: theme.spacing(1), \r\n top: theme.spacing(1)\r\n }\r\n});\r\n\r\n\r\nclass NewProjects extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n projects: [],\r\n loaded: false,\r\n selectedIdx: -1, // currently selected project\r\n selectedProject: null, // the full object of the selected project (not the same as the object found in 'projects')\r\n strengDetailsTip: null, // when set, a popup should open some details of the obs, like the image\r\n strengDetailsUrl: null, // when set, show popup with image\r\n summaryDlgOpen: false, // when set, show dialog for details.\r\n innerWidth: window.innerWidth, // for responsive behaviour\r\n }\r\n }\r\n\r\n /**\r\n * load data here, constructor gets called multiple times, causing data to be loaded multiple times\r\n */\r\n async componentDidMount() {\r\n const { t } = this.props;\r\n try {\r\n window.addEventListener('resize', this.updateDimensions);\r\n const result = await cloudDocsService.getDocs(\"new\");\r\n let docs = []; // all the projects transformed, so they can be displayed\r\n let needsCal = false; // if some projects dont have (full) statistics yet, calculate them\r\n for (const el of result) {\r\n const doc = {\r\n isRead: false,\r\n name: el.name ? el.name.split('_').join(' ') : '',\r\n rawData: el, // so we can quickly save recipient & id changes without having to reload the data all the time. WARNING: could be mem issue\r\n date: el.publishedAt ? new Date(el.publishedAt) : t('Not yet published')\r\n };\r\n docs.push(doc);\r\n if (!el.statistics) { // temp solution while stats are not yet calculated upon upload\r\n needsCal = true;\r\n }\r\n }\r\n docs = docs.sort((a, b) => b.date - a.date)\r\n this.setState({ projects: docs, loaded: true });\r\n if (needsCal) {\r\n await this.calculateStats();\r\n }\r\n }\r\n catch(error) {\r\n this.setState({ loaded: true });\r\n dialogService.error(t(\"Dashboard\"), t(\"docs_load_failed\", { error: errExtractor.get(error) }));\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.updateDimensions);\r\n }\r\n\r\n /**\r\n * calculates the statistics for the items that dont have them yet and store the 100 first items as well (so others dont have to recalculate)\r\n */\r\n async calculateStats() {\r\n const items = [...this.state.projects];\r\n let count = 0;\r\n for(let i=0; i < items.length; i++) {\r\n try { // try to keep things running, but errors arent fatal here\r\n const el = items[i].rawData;\r\n if (!el.statistics){\r\n const project = await cloudDocsService.getProject(el.id, false);\r\n project.statistics = projectService.calculateStats(project);\r\n items[i].rawData = project;\r\n count++;\r\n if (count < 100) {\r\n await cloudDocsService.saveStats(project);\r\n }\r\n }\r\n }\r\n catch(error) {\r\n console.log(error);\r\n }\r\n }\r\n this.setState({projects: items});\r\n //this.forceUpdate();\r\n }\r\n\r\n /**\r\n * called when the window is resized. Used to trigger responsive behaviour.\r\n */\r\n updateDimensions = () => {\r\n const width = window.innerWidth;\r\n this.setState({innerWidth: width});\r\n }\r\n\r\n\r\n render() {\r\n const { t, classes } = this.props;\r\n let selected = this.state.selectedProject;\r\n let rightSide = null;\r\n const wideScreen = this.state.innerWidth > this.props.theme.breakpoints.values.sm;\r\n if (wideScreen) {\r\n rightSide = this.buildRightSide(selected);\r\n }\r\n const leftSide = this.buildleftPart(wideScreen);\r\n return (\r\n \r\n {leftSide}\r\n {rightSide}\r\n {(selected && this.state.summaryDlgOpen) &&\r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * builds the right view\r\n * @param {object} selected the selected project \r\n */\r\n buildRightSide(selected) {\r\n const { t, classes } = this.props;\r\n if (selected) {\r\n return( \r\n \r\n \r\n );\r\n }\r\n else {\r\n return( \r\n {t(\"No project selected\")}\r\n \r\n );\r\n }\r\n }\r\n\r\n buildleftPart(wideScreen) {\r\n const { t, classes } = this.props;\r\n let paywall = null;\r\n let listStyle = null;\r\n //paywall = \r\n //listStyle = {paddingBottom: '0px'}; // when paywall visible, bottom of list should be removed, otherwise there remains some room to clic\r\n let result =\r\n \r\n {/* */}\r\n {t(\"New projects\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n }>\r\n {this.state.projects.map((prj, idx) => { return this.renderProject(prj, idx)} )}\r\n {paywall}\r\n \r\n ;\r\n\r\n if (this.state.projects.length === 0) {\r\n const rightCss = wideScreen ? '50%': '0px'; // when small screen, left side not visible\r\n result =\r\n
\r\n {result}\r\n \r\n {t(\"No new projects available\")}\r\n \r\n {paywall}\r\n
\r\n }\r\n return result;\r\n }\r\n\r\n renderProject(prj, idx) {\r\n const { t, classes } = this.props;\r\n let streets = '';\r\n if (prj.rawData.statistics && prj.rawData.statistics.locations) {\r\n streets = ' - ' + prj.rawData.statistics.locations.join(', ');\r\n }\r\n let prjDate = '';\r\n if (prj.date) {\r\n if (prj.date instanceof Date) {\r\n prjDate = prj.date.toLocaleDateString();\r\n }\r\n else if (prj.date instanceof String) {\r\n prjDate = prj.date;\r\n }\r\n }\r\n let prjColor = null;\r\n if (prj.rawData.statistics) {\r\n if (prj.rawData.statistics.maxErr > 2) {\r\n prjColor = {color: 'red'};\r\n }\r\n else if (prj.rawData.statistics.maxErr > 0) {\r\n prjColor = {color: 'orange'};\r\n }\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n
{prj.name}
\r\n {prjDate}\r\n
}\r\n secondary={\r\n \r\n {prj.rawData.main.location}\r\n\r\n \r\n {streets}\r\n \r\n }\r\n />\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n selectProject = (prj, idx) => async () => {\r\n const { t } = this.props;\r\n try {\r\n this.setState({ loaded: false });\r\n let project;\r\n if (!prj.rawData.strengs) { // no need to relod the full project if it is already loaded. this can be if there were no stats known for the project.\r\n project = await cloudDocsService.getProject(prj.rawData.id);\r\n }\r\n else {\r\n project = prj.rawData;\r\n }\r\n let summaryDlgOpen = this.state.innerWidth <= this.props.theme.breakpoints.values.sm;\r\n this.setState({selectedProject: project, selectedIdx: idx, loaded: true, summaryDlgOpen: summaryDlgOpen});\r\n setTimeout(() => {\r\n prj.isRead = true;\r\n this.forceUpdate();\r\n }, 1000);\r\n }\r\n catch(error) {\r\n this.setState({ loaded: true });\r\n dialogService.error(t('Dashboard'), t(\"select_project_problem\", { error: errExtractor.get(error) }));\r\n }\r\n }\r\n\r\n handleCloseStrengSummary = (goToStreng) => {\r\n this.setState({summaryDlgOpen: false});\r\n this.handleOpenPrj(goToStreng);\r\n }\r\n\r\n handleOpenPrj = (streng) => {\r\n const prj = this.state.selectedProject;\r\n if (prj && streng > -1 && streng < prj.strengs.length) {\r\n //this.props.history.push({pathName: `/doc/${prj.id}`, search: '', state: {streng: streng}});\r\n this.props.history.push( `/doc/${prj.id}`, {streng: streng});\r\n }\r\n }\r\n\r\n /**\r\n * looks up the image for the specified obs index (detail.image) for the specified streng in the selected project\r\n * and shows the details.\r\n * @param {number} strengIdx index of the streng to show details of\r\n * @param {object} detail details to show. contains fields key, tooltip, image. \r\n */\r\n handleShowObsDetails = async (strengIdx, detail) => {\r\n const prj = this.state.selectedProject;\r\n const streng = prj.strengs[strengIdx];\r\n let img = null;\r\n if (detail.image > -1 && prj.files && prj.files.images) {\r\n const searchStr = `_${streng.id}_${detail.image}.jpg`\r\n img = prj.files.images.find((value) => value.name.endsWith(searchStr));\r\n if (img) {\r\n img = await storageService.tryGetUrl(img);\r\n }\r\n }\r\n this.setState({strengDetailsTip: detail.tooltip, strengDetailsUrl: img});\r\n }\r\n\r\n handleCloseObsDetails = () => {\r\n this.setState({strengDetailsTip: null, strengDetailsUrl: null});\r\n }\r\n\r\n hanldeIsShowPdfDisabled = (rowData) => {\r\n if (rowData.rawData.files) { // when not yet published and viewed by company editor, this doc is in list, but will not yet have files.\r\n return isEmpty(rowData.rawData.files.pdfReport);\r\n }\r\n return true;\r\n }\r\n\r\n showPdf = (event, rowData) => {\r\n const files = rowData.rawData.files;\r\n if (files.pdfReport) {\r\n storageService.getUrl(files.pdfReport, \"application/pdf\").then((url) => {\r\n if (this.props.onOpenPdf) {\r\n this.props.onOpenPdf(url);\r\n }\r\n }).catch((error) => {\r\n const { t } = this.props;\r\n dialogService.error(\"pdf\", t(\"cant_find_file_on_server\", { error: errExtractor.get(error), doc: files.pdfReport.name }));\r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n}\r\n\r\nNewProjects.propTypes = {\r\n onOpenPdf: PropTypes.func, // (url: string) => {} called when the pdf needs to be opened, platform specific, \r\n onSearch: PropTypes.func, // called when the user wants to perform a search, need to switch view\r\n};\r\n\r\nexport default withTheme(withTranslation()(withStyles(styles)(withRouter(NewProjects))));","/* global google */ // need this for google\r\nimport Autocomplete from 'react-google-autocomplete';\r\nimport { getSelectedLanguage } from '../../../services/translation_service';\r\nimport { Loader } from '@googlemaps/js-api-loader';\r\n\r\nexport class GoogleAutoComplete extends Autocomplete {\r\n constructor() {\r\n super();\r\n this.handleLoadScript = this._handleLoadScript;\r\n this.language = getSelectedLanguage();\r\n }\r\n\r\n _handleLoadScript = () => {\r\n\r\n try {\r\n if (Loader.instance && Loader.instance.language !== this.language) { // was already loaded but reloading for new language.\r\n document.querySelectorAll('script[src^=\"https://maps.googleapis.com\"]').forEach(script => {\r\n script.remove();\r\n });\r\n if (google) delete google.maps;\r\n Loader.instance = null;\r\n }\r\n if (!Loader.instance) {\r\n const loader = new Loader({\r\n apiKey: this.props.apiKey,\r\n libraries: [\"places\", \"visualization\", \"geometry\"], // note: need visualization for heatmaps. since this lib can only be loaded 1 time, need to load all we can possibly need\r\n language: this.language\r\n });\r\n return loader.load();\r\n }\r\n else {\r\n return Promise.resolve();\r\n }\r\n }\r\n catch (error) {\r\n console.log(error);\r\n }\r\n\r\n\r\n }\r\n}","import { getSelectedLanguage } from \"../../services/translation_service\";\r\nimport { codeSelectorService } from \"./code_selector_service\";\r\nimport { geoTranslate } from \"./geo_service\";\r\nimport { ERROR_KEYS } from \"./project_service\";\r\n\r\nexport class Analyzer {\r\n\r\n\r\n /**\r\n * creates a new list of prj-streng objects, so that they can be sorted based on inspection date.\r\n * this allows the buildmap routine to correctly merge everything in chronological order.\r\n * @param {list} data list of project objects\r\n */\r\n sortForMap(data) {\r\n let result = [];\r\n data.forEach((prj) => {\r\n prj.strengs.forEach((streng, strengIdx) => {\r\n result.push({prj, streng, strengIdx});\r\n });\r\n });\r\n result.sort((a, b) => {\r\n if (!a.streng.inspectionDate || !a.streng.inspectionTime || !b.streng.inspectionDate || !b.streng.inspectionTime) { // missing data, so put at end front of list so that they get processed first and overwritten probably\r\n return 1;\r\n }\r\n const aDateParts = a.streng.inspectionDate.split(\"-\");\r\n const aTimeParts = a.streng.inspectionTime.split(\":\");\r\n const aDate = new Date(aDateParts[0], aDateParts[1] - 1, aDateParts[2], aTimeParts[0], aTimeParts[1], aTimeParts[2]);\r\n\r\n const bDateParts = b.streng.inspectionDate.split(\"-\");\r\n const bTimeParts = b.streng.inspectionTime.split(\":\");\r\n const bDate = new Date(bDateParts[0], bDateParts[1] - 1, bDateParts[2], bTimeParts[0], bTimeParts[1], bTimeParts[2]);\r\n\r\n if (aDate > bDate) return 1; // it's newer, so put at end of list, older stuff first\r\n if (bDate < aDate) return -1;\r\n if (a.prj.id > b.prj.id) return 1; // when same timestamp, use project order, \r\n if (a.prj.id < b.prj.id) return -1;\r\n return 0;\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * builds a map based on the project data. This map creates records per street-town combo \r\n * and records the latest state\r\n * @param {list} data list of project objects\r\n */\r\n buildMap(data) {\r\n let result = {};\r\n const sortedData = this.sortForMap(data); // sort on inspection date first so that we add things in chronological order\r\n const locCoordinates = {}; // a map between location names and their coordinates, so we can quickly assign this to the new records\r\n sortedData.forEach((sortedEl) => {\r\n const {prj, streng, strengIdx} = sortedEl;\r\n for (let i=0; i < prj.statistics.locations.length; i++) {\r\n locCoordinates[prj.statistics.locations[i]] = prj.statistics.coordinates[i]\r\n }\r\n let errorCodeIdx = prj.main.purpose == \"A\"? 0: 1; // if new streng, use idx 0, otherwise error idx 1\r\n const key = `${prj.main.location}-${streng.location}`;\r\n let record;\r\n if (!(key in result)) {\r\n record = {strengs: {}, location: prj.main.location, route: streng.location, projects: [prj]};\r\n result[key] = record;\r\n }\r\n else {\r\n record = result[key];\r\n if (record.projects.indexOf(prj) === -1) {\r\n record.projects.push(prj);\r\n }\r\n }\r\n const {strKey, isReverse} = this.buildStrengKey(streng.pointRef1, streng.pointRef2);\r\n let subRec = {\r\n history:[], \r\n date: streng.inspectionDate, \r\n errors: [], \r\n inventory: [], \r\n isReverse: isReverse, \r\n prj: prj, \r\n expectedInspectionLength: streng.expectedInspectionLength, \r\n actualInspectionLength: streng.actualInspectionLength, \r\n type: streng.type,\r\n sewerUsage: streng.sewerUsage,\r\n ref: streng.ref,\r\n id: streng.id,\r\n pointRef1: streng.pointRef1,\r\n pointRef2: streng.pointRef2,\r\n pointRef3: streng.pointRef3,\r\n location: streng.location,\r\n purpose: prj.main.purpose, // we store new-construction/old-construction at the level of the streng cause we want to see retests on the same steng\r\n coordinates: locCoordinates[streng.location], // so we can quickly show on maps\r\n };\r\n if (strKey in record.strengs) {\r\n const oldSub = record.strengs[strKey];\r\n if (oldSub.prj === subRec.prj && ((!isReverse && subRec.isReverse === true) || (isReverse && subRec.isReverse === false)) ) { // need to merge the data. Important check on === true/false -> when deleted it has been merged\r\n subRec.history = oldSub.history;\r\n subRec.errors = oldSub.errors;\r\n subRec.inventory = oldSub.inventory;\r\n delete subRec.isReverse;\r\n //possibly have to copy over the date.\r\n }\r\n else {\r\n subRec.history = [oldSub, ...oldSub.history]; \r\n delete oldSub.history;\r\n }\r\n }\r\n record.strengs[strKey] = subRec;\r\n streng.observations.forEach((obs, obsIdx) => {\r\n if (obs.values[obs.values.length-1] !== \"1\") { // if the last item in the key is 1, it's a terminator for continuous-observations, so skip that\r\n let obsKey = obs.values.join(\"-\");\r\n let found = ERROR_KEYS.find((value) => obsKey.startsWith(value)); // find the first item in the list that's the same as the start of the key\r\n const def = codeSelectorService.getLeaf(obs.values, streng.type);\r\n if (found && def && def.errRating && def.errRating[errorCodeIdx]) { // found a problem observation\r\n subRec.errors.push({obs: obs, obsIdx: obsIdx, strengIdx: strengIdx});\r\n }\r\n else {\r\n subRec.inventory.push({obs: obs, obsIdx: obsIdx, strengIdx: strengIdx});\r\n }\r\n }\r\n });\r\n });\r\n for (const key in result) {\r\n const rec = result[key];\r\n rec['maxErr'] = Math.max(...Object.values(rec.strengs).map(el => el.errors.length));\r\n }\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * extracts the number out of the strings and builds a key (string) where\r\n * the string with smallest number is placed first.\r\n * ex, ref1 = ab12c, ref2 = cd8d, out = cd8d-ab12c\r\n * \r\n * @param {string} ref1 string 1\r\n * @param {strign} ref2 string 2\r\n */\r\n buildStrengKey(ref1, ref2) {\r\n let nr1;\r\n let nr2;\r\n let matches = ref1.match(/(\\d+)/);\r\n if (matches) {\r\n nr1 = +matches[0];\r\n }\r\n matches = ref2.match(/(\\d+)/);\r\n if (matches) {\r\n nr2 = +matches[0];\r\n }\r\n if (nr1 < nr2) {\r\n return {strKey: `${ref1}-${ref2}`, isReverse: false};\r\n }\r\n else {\r\n return {strKey: `${ref2}-${ref1}`, isReverse: true};\r\n }\r\n }\r\n\r\n /**\r\n * \r\n * @param {object} location the original search definition as provided by the user, in his language.\r\n */\r\n async _getLocationToSearcFor(location, language=null) {\r\n let region;\r\n let route = null;\r\n let generic = null;\r\n if (language !== null && language !== getSelectedLanguage()) {\r\n location = await geoTranslate(location, language);\r\n }\r\n if (location) {\r\n if (location.city) {\r\n region = location.city;\r\n if (location.route) {\r\n route = location.route;\r\n }\r\n }\r\n else if (location.province) {\r\n region = location.province;\r\n }\r\n else if (location.state) {\r\n region = location.state;\r\n }\r\n else if (location.country) {\r\n region = location.country;\r\n }\r\n else if (location.generic) {\r\n generic = location.generic;\r\n }\r\n else {\r\n throw new Error (\"invalid search criteria\");\r\n }\r\n }\r\n else {\r\n throw new Error (\"invalid search criteria\");\r\n }\r\n return {region, route, generic};\r\n } \r\n\r\n /**\r\n * filters out all the documents that match the criteria and makes certain that \r\n * statistics are filled in for all the docs.\r\n * @param {list} docs all the docs\r\n * @param {object} location specifies locality or region and possibly route\r\n */\r\n async filter(docs, location) {\r\n let search = {};\r\n let curLan = getSelectedLanguage();\r\n search[curLan] = await this._getLocationToSearcFor(location);\r\n\r\n let result = [];\r\n\r\n for(let docIdx=0; docIdx < docs.length; docIdx++) { // important: use regular loop instead of callback. with callback we block at the await for all items before resolving the first getGeo call, which is bad\r\n //docs.forEach(async (doc) => { -> very very bad, dont do this\r\n const doc = docs[docIdx];\r\n let localSearch = search[curLan];\r\n if (!doc.statistics) { // this shouldn't happen, only for none published docs, taht don't need to show up\r\n continue;\r\n }\r\n if (doc.statistics.language) {\r\n if (!(doc.statistics.language in search)) {\r\n search[doc.statistics.language] = await this._getLocationToSearcFor(location, doc.statistics.language);\r\n }\r\n localSearch = search[doc.statistics.language];\r\n }\r\n let {region, route, generic} = localSearch;\r\n\r\n if (route) {\r\n if (doc.statistics.locations) { // should be pre-calculated\r\n if (doc.main.location.toLowerCase() === region.toLowerCase() && doc.statistics.locations.includes(route)) {\r\n result.push(doc);\r\n }\r\n }\r\n }\r\n else if (region) {\r\n if (doc.statistics.regions && doc.statistics.regions.includes(region)) { // regions is provided by google, region as well, so capitailztaion is the same\r\n result.push(doc);\r\n }\r\n }\r\n else if (generic) {\r\n if ((doc.statistics.regions && doc.statistics.regions.includes(generic)) || doc.statistics.locations.includes(generic)) {\r\n result.push(doc);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n}","\r\n/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { withTranslation } from 'react-i18next';\r\nimport GoogleMapReact from 'google-map-react';\r\nimport { GOOGLE_API_KEY } from '../services/server_config_service';\r\nimport { getCurrentLocation } from '../services/geo_service';\r\nimport { getSelectedLanguage } from '../../services/translation_service';\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n\r\n },\r\n\r\n\r\n});\r\n\r\n\r\n/**\r\n * UI element for displaying google maps.\r\n * \r\n * !!!IMPORTANT!!! \r\n * this component should be placed in a parent (div) that defines height (and width)\r\n */\r\nclass GoogleMap extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n center: null,\r\n zoom: 11,\r\n heatmapData: {position: []}, // data for the google map\r\n dataPoints: [] // data for the components on top of the google map\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n if (this.props.data) {\r\n this.calculateData();\r\n }\r\n const pos = await getCurrentLocation();\r\n if (pos) {\r\n if (pos.lat && pos.lon) {\r\n this.setState({center: {lat: pos.lat, lng: pos.lon}});\r\n }\r\n else if (pos.latitude && pos.longitude) {\r\n this.setState({center: {lat: pos.latitude, lng: pos.longitude}});\r\n }\r\n else {\r\n this.setState({center: {lat: 50.9941964, lng: 4.6209077}}); // if we dont have a center, the map wont show, so force one if need be\r\n }\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.data != this.props.data) {\r\n this.calculateData();\r\n }\r\n }\r\n\r\n calculateData() {\r\n const heatmap = [];\r\n const dataPoints = [];\r\n for(const prj of this.props.data) {\r\n for (const key in prj.strengs) {\r\n const streng = prj.strengs[key];\r\n const coord = streng.coordinates;\r\n const weight = streng.errors.length;\r\n if (coord && weight) {\r\n heatmap.push({lat: coord.lat, lng: coord.lng, weight: weight});\r\n dataPoints.push({prj, key});\r\n }\r\n }\r\n }\r\n const options ={ \r\n radius: 40, \r\n //opacity: 0.6,\r\n //dissipating: false\r\n }\r\n this.setState({heatmapData: {positions: heatmap, options}, dataPoints});\r\n }\r\n\r\n\r\n render() {\r\n const { t } = this.props;\r\n if (this.state.center) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nGoogleMap.propTypes = {\r\n data: PropTypes.array, // data to show\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(GoogleMap));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n// icons\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles, withTheme } from '@material-ui/core/styles';\r\n\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport Button from '@material-ui/core/Button';\r\nimport { withTranslation } from 'react-i18next';\r\nimport GoogleMap from './google_map_component';\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n },\r\n \r\n \r\n \r\n});\r\n\r\n\r\nclass MapDialog extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n }\r\n }\r\n\r\n\r\n render() {\r\n const { t } = this.props;\r\n if (!this.props.open) {\r\n return null;\r\n }\r\n return (\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n \r\n handleClose = () => {\r\n if (this.props.onClose) this.props.onClose(-1);\r\n }\r\n\r\n}\r\n\r\nMapDialog.propTypes = {\r\n data: PropTypes.array, // data to show\r\n open: PropTypes.bool.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default withTheme(withTranslation()(withStyles(styles)(MapDialog)));","/**\r\n * build the filename for a video belonging to a specific streng.\r\n * @param {object} data root data object (should contain a 'main' field)\r\n * @param {object} streng streng object\r\n * @param {bool} storageFormat when true, the filename starts with VS_, otherwise with V_\r\n */\r\nexport function buildReportVideoFilename(data, streng, includeExt = false, storageFormat = false, channel = null) {\r\n const abh = data.main.codeInsp.split(\"/\");\r\n const afb = data.creationDate.split(\"-\").join(\"\"); // this removes all '-'\r\n const ext = includeExt ? \".mp4\" : \"\";\r\n const start = storageFormat ? \"VS\" : \"V\";\r\n const abj = data.main.opdrCodeOpdrGever;\r\n const strengIdx = streng.id.toString().padStart(3, \"0\");\r\n const isMultiDef = Object.entries(streng.cams).length > 1; // when multiple cameras, need to render name of files a little different.\r\n channel = (isMultiDef && channel) ? `_${channel}` : \"\"; // only use _ if not null\r\n const result = `${start}_${abj}_${abh[0]}_${afb}_${strengIdx}${channel}`;\r\n return replaceInValidChars(result) + ext;\r\n}\r\n\r\nexport const INVALID_PATH_CHARS = ['/', '\\\\', '?', '%', '*', ':', '|', '\"', '<', '>', '.', ',', ';', '='];\r\n\r\nexport function replaceInValidChars(input) {\r\n for (const char of INVALID_PATH_CHARS) {\r\n input = input.replaceAll(char, '_');\r\n }\r\n return input;\r\n}\r\n\r\n/**\r\n * generate the filename for the fotos\r\n * @param {object} data the root data object, should contain a 'main'\r\n * @param {number/object} streng the index / id (1 based) of the streng or the streng itself when object is specified.\r\n * @param {object} obs the observation\r\n * @param {bool} includeExt when true, the extension will be included.\r\n */\r\nexport function buildReportFotoFilename(data, streng, obs, includeExt = true) {\r\n let abh = data.main.codeInsp.split(\"/\");\r\n let afb = data.creationDate.split(\"-\").join(\"\");\r\n let ext = includeExt ? \".jpg\" : \"\";\r\n\r\n let result;\r\n if (obs) {\r\n let recTime = streng.recStartTime + (obs.time);\r\n let recTimeStr = new Date(recTime).toISOString().substr(11, 11).split(\":\").join(\"\").replace(\".\", \"\"); //replace all ':' , replace 1 '.'\r\n let obsIdx = streng.observations.indexOf(obs);\r\n result = `P_${data.main.opdrCodeOpdrGever}_${abh[0]}_${afb}_${recTimeStr}_${streng.id}_${obsIdx}`;\r\n }\r\n else {\r\n result = `PS_${data.main.opdrCodeOpdrGever}_${abh}_${afb}_${streng}`; // streng here is expected to be a number (1 based streng idx)\r\n }\r\n return replaceInValidChars(result) + ext;\r\n}\r\n\r\n/**\r\n * generate the filename for the sonar images\r\n * @param {object} data the root data object, should contain a 'main'\r\n * @param {number/object} streng the index / id (1 based) of the streng or the streng itself when object is specified.\r\n * @param {object} obs the observation\r\n * @param {bool} includeExt when true, the extension will be included.\r\n */\r\n export function buildReportSonarFilename(data, streng, obs, includeExt = true) {\r\n return internalBuildReportImageFilename('sonar', data, streng, obs, includeExt);\r\n}\r\n\r\n/**\r\n * generate the filename for the lidar images\r\n * @param {object} data the root data object, should contain a 'main'\r\n * @param {number/object} streng the index / id (1 based) of the streng or the streng itself when object is specified.\r\n * @param {object} obs the observation\r\n * @param {bool} includeExt when true, the extension will be included.\r\n */\r\n export function buildReportLidarFilename(data, streng, obs, includeExt = true) {\r\n return internalBuildReportImageFilename('lidar', data, streng, obs, includeExt);\r\n}\r\n\r\n/**\r\n * generate a filename for the images that are generated from data\r\n * @param {string} front text to put in front of the filename (sonar/lidar)\r\n * @param {object} data the root data object, should contain a 'main'\r\n * @param {number/object} streng the index / id (1 based) of the streng or the streng itself when object is specified.\r\n * @param {object} obs the observation\r\n * @param {bool} includeExt when true, the extension will be included.\r\n */\r\n function internalBuildReportImageFilename(front, data, streng, obs, includeExt = true) {\r\n let abh = data.main.codeInsp.split(\"/\");\r\n let afb = data.creationDate.split(\"-\").join(\"\");\r\n let ext = includeExt ? \".jpg\" : \"\";\r\n\r\n let result;\r\n let recTime = streng.recStartTime + (obs.time);\r\n let recTimeStr = new Date(recTime).toISOString().substr(11, 11).split(\":\").join(\"\").replace(\".\", \"\"); //replace all ':' , replace 1 '.'\r\n let obsIdx = streng.observations.indexOf(obs);\r\n result = `${front}_${data.main.opdrCodeOpdrGever}_${abh[0]}_${afb}_${recTimeStr}_${streng.id}_${obsIdx}`;\r\n return replaceInValidChars(result) + ext;\r\n}\r\n\r\n/**\r\n * generate the filename for the fotos\r\n * this was the original version, still available so we can build it to find the old files\r\n * @param {object} data the root data object, should contain a 'main'\r\n * @param {number/object} streng the index / id (1 based) of the streng or the streng itself when object is specified.\r\n * @param {object} obs the observation\r\n * @param {bool} includeExt when true, the extension will be included.\r\n */\r\nexport function oldBuildReportFotoFilename(data, streng, obs, includeExt = true) {\r\n let abh = data.main.codeInsp.split(\"/\");\r\n let afb = data.creationDate.split(\"-\").join(\"\");\r\n let ext = includeExt ? \".jpg\" : \"\";\r\n\r\n let result;\r\n if (obs) {\r\n let recTime = streng.recStartTime + (obs.time);\r\n let recTimeStr = new Date(recTime).toISOString().substr(11, 11).split(\":\").join(\"\").replace(\".\", \"\"); //replace all ':' , replace 1 '.'\r\n result = `P_${data.main.opdrCodeOpdrGever}_${abh[0]}_${afb}_${recTimeStr}`;\r\n }\r\n else {\r\n result = `PS_${data.main.opdrCodeOpdrGever}_${abh}_${afb}_${streng}`; // streng here is expected to be a number (1 based streng idx)\r\n }\r\n return replaceInValidChars(result) + ext;\r\n}","\r\n/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n\r\n/* global google */ // need this for google\r\n\r\n// icons\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { withRouter } from 'react-router-dom';\r\nimport Stepper from '@material-ui/core/Stepper';\r\nimport Step from '@material-ui/core/Step';\r\nimport StepLabel from '@material-ui/core/StepLabel';\r\nimport StepContent from '@material-ui/core/StepContent';\r\nimport Button from '@material-ui/core/Button';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { sleep } from '../../shared_components/services/sleep';\r\nimport { dialogService } from '../../services/dialog_service';\r\nimport { errExtractor } from '../../shared_components/services/error_extractor';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { calcCrow } from '../../shared_components/services/geo_service';\r\nimport {AbsoluteOrientationSensor} from 'motion-sensors-polyfill'\r\n\r\n\r\nconst SAMPLE_DURATION = 10;\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n\r\n },\r\n actionsContainer: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n button: {\r\n marginTop: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n },\r\n});\r\n\r\n\r\n/**\r\n * UI element for ar.\r\n */\r\nclass AugmentedReality extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n activeStep: 0,\r\n collecting: null, // can also be 0, 1 -> indicates start or direction step for which the system is currently collecting\r\n collectionCountDown: SAMPLE_DURATION, // when collecting, this counter goes down so the user know how long the collection takes\r\n useCompass: true, // so we can switch between copmass and 2 gps points\r\n }\r\n this.coordinates = [[], []]; // a list of 2 coordinate lists: for start and stop\r\n this.data = null; // berekende data die naar iframe moet\r\n this.heading = null; // for calculating the points using the heading and distance\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n \r\n \r\n {t(\"Intro\")}\r\n {this.renderStepIntro()}\r\n \r\n \r\n {t(\"Starting point\")}\r\n {this.renderStepStart()}\r\n \r\n {/* \r\n {t(\"Direction\")}\r\n {this.renderStepDir()}\r\n */}\r\n\r\n \r\n {t(\"Klaar\")}\r\n {this.renderStepReady()}\r\n \r\n \r\n );\r\n }\r\n\r\n renderStepIntro() {\r\n const { t, classes } = this.props;\r\n return (\r\n \r\n {t(\"ar_step_intro\")}\r\n
\r\n {this.renderStepButtons()}\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderStepStart() {\r\n const { t, classes } = this.props;\r\n return (\r\n \r\n {t(\"ar_step_m_start\")}\r\n
\r\n {this.renderMeasureButton(0)}\r\n {this.renderStepButtons()}\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderStepDir() {\r\n const { t, classes } = this.props;\r\n return (\r\n \r\n {t(\"ar_step_m_dir\")}\r\n
\r\n {this.renderMeasureButton(1)}\r\n {this.renderStepButtons()}\r\n
\r\n
\r\n );\r\n }\r\n\r\n\r\n renderMeasureButton(idx) {\r\n const { t, classes } = this.props;\r\n return (\r\n \r\n {(this.state.collecting !== null) &&\r\n
\r\n \r\n
\r\n {this.state.collectionCountDown}\r\n
\r\n
\r\n }\r\n {t(\"Measure\")}\r\n \r\n );\r\n }\r\n\r\n renderStepReady() {\r\n const { t, classes } = this.props;\r\n return (\r\n \r\n {t(\"ar_step_ready\")}\r\n
\r\n {this.renderStepButtons()}\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderStepButtons() {\r\n const { t, classes } = this.props;\r\n let nextDisabled = (this.state.activeStep === 3 && (this.coordinates[0].length === 0 || this.coordinates[1].length === 0));\r\n if (!nextDisabled) {\r\n nextDisabled = this.state.collecting !== null; // when collecting data, don't go to next step\r\n }\r\n return (\r\n
\r\n \r\n {t(\"Back\")}\r\n \r\n \r\n {this.state.activeStep === 3 ? t('Show') : t('Next')}\r\n \r\n
\r\n );\r\n }\r\n\r\n async requestMeasurePermissions() {\r\n if (navigator.permissions) {\r\n // https://w3c.github.io/orientation-sensor/#model\r\n const perms = [navigator.permissions.query({ name: \"accelerometer\" }),\r\n navigator.permissions.query({ name: \"magnetometer\" }),\r\n navigator.permissions.query({ name: \"gyroscope\" })\r\n ];\r\n const results = await Promise.all(perms);\r\n if (!results.every(result => result.state === \"granted\")) {\r\n throw new Error(\"Permission to use sensor was denied.\");\r\n }\r\n } else {\r\n console.log(\"No Permissions API, still try to start app.\");\r\n }\r\n }\r\n\r\n /**\r\n * starts collecting gsp measurements for the specified step\r\n * @param {number} idx 0 or 1 for the step (start, direction)\r\n */\r\n measure = (idx) => async () => {\r\n this.setState({ collecting: 0 });\r\n try {\r\n await this.requestMeasurePermissions();\r\n await Promise.all([this.measureCurrentLocation(0), this.measureHeading()]);\r\n //await this.measureCurrentLocation(idx);\r\n }\r\n catch (error) {\r\n const { t } = this.props;\r\n if (this.coordinates[0].length === 0 || error != \"timeout\") {\r\n dialogService.error(t(\"Gps\"), errExtractor.get(error));\r\n }\r\n }\r\n this.setState({ collecting: null });\r\n }\r\n\r\n async measureCurrentLocation(idx) {\r\n let startTime = 0; // only get start Time after we got the first coordinate, cause otherwise we don't know how long the first measurement took and how long the user waited before aproving the gps\r\n let newTime = 0;\r\n while (this.coordinates[idx].length < 100 && (newTime - startTime) < SAMPLE_DURATION * 1000) { // measure for 20 seconds, but do\r\n if (startTime === 0) {\r\n startTime = Date.now();\r\n newTime = Date.now();\r\n }\r\n let gps = await this.getGPS();\r\n this.coordinates[idx].push(gps);\r\n let nextTime = Date.now();\r\n await sleep(SAMPLE_DURATION * 10); // give at least 0.3 seconds before measuring again, othrewise we can get timeouts easily\r\n const newCountDown = Math.trunc(SAMPLE_DURATION - ((newTime - startTime) / 1000)); // let the user know how much time is left.\r\n if (newCountDown != this.state.collectionCountDown) {\r\n this.setState({ collectionCountDown: newCountDown });\r\n }\r\n newTime = nextTime;\r\n }\r\n }\r\n\r\n async measureHeading() {\r\n let result = [];\r\n\r\n const options = { frequency: 60, referenceFrame: 'device' };\r\n const sensor = new AbsoluteOrientationSensor(options);\r\n sensor.addEventListener('reading', e => {\r\n var q = e.target.quaternion;\r\n let alpha = Math.atan2(2*q[0]*q[1] + 2*q[2]*q[3], 1 - 2*q[1]*q[1] - 2*q[2]*q[2])*(180/Math.PI);\r\n if(alpha < 0) alpha = 360+ alpha;\r\n result.push(alpha);\r\n });\r\n sensor.start();\r\n await sleep(SAMPLE_DURATION * 1000); // let it sample some\r\n sensor.stop();\r\n let sum = result.reduce((sum, a) => { return (sum + a) }, 0);\r\n this.heading = 360 - (sum / result.length); // need to flip it, otherwise it goes in the wrong direction\r\n console.log('found compass', this.heading);\r\n }\r\n\r\n async getGPS() {\r\n return new Promise((resolve, reject) => {\r\n if (navigator.geolocation) {\r\n const options = { enableHighAccuracy: true, maximumAge: 0, timeout: SAMPLE_DURATION * 1000 };\r\n navigator.geolocation.getCurrentPosition(\r\n (pos) => {\r\n resolve(pos.coords);\r\n }, (err) => {\r\n reject(err);\r\n }, options);\r\n }\r\n else {\r\n reject(\"no gps device available\");\r\n }\r\n });\r\n }\r\n\r\n handleNext = () => {\r\n const stepCount = this.state.useCompass ? 2 : 3;\r\n if (this.state.activeStep < stepCount) {\r\n this.setState({ activeStep: this.state.activeStep + 1 });\r\n }\r\n else {\r\n this.calculateData();\r\n //this.testCalc();\r\n this.props.history.push('/ar', {places: this.data});\r\n }\r\n }\r\n\r\n handleBack = () => {\r\n if (this.state.activeStep > 0) {\r\n this.setState({ activeStep: this.state.activeStep - 1 });\r\n }\r\n }\r\n\r\n calculateData() {\r\n try {\r\n let result = this.calculateAvgCoordinates();\r\n if (result.length === 2) {\r\n this.calculateAddStrengData(result);\r\n }\r\n else if (result.length == 1 && this.heading) {\r\n this.addStrengData(result);\r\n }\r\n this.data = result;\r\n }\r\n catch (error) {\r\n dialogService.error(\"Augmented reality\", errExtractor.get(error));\r\n }\r\n }\r\n\r\n calculateAvgCoordinates() {\r\n let result = [];\r\n for (let elements of this.coordinates) {\r\n elements.splice(0, elements.length / 2); // remove firs half of coordinates, those are the lease accurate usually\r\n if (elements.length) {\r\n let sum = elements.reduce((sum, a) => {\r\n return ({ lat: sum.lat + a.latitude, lng: sum.lng + a.longitude });\r\n }, { lat: 0, lng: 0 });\r\n let avg = { lat: sum.lat / elements.length, lng: sum.lng / elements.length };\r\n result.push(\r\n {\r\n name: 'start',\r\n color: 'blue',\r\n location: avg,\r\n }\r\n )\r\n }\r\n else if (!this.heading) {\r\n throw new Error(\"no gps data\");\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n testCalc() {\r\n /*\r\n let testPoint = new google.maps.LatLng(51.002385100000026, 4.632476999999997);\r\n let resultPoint = google.maps.geometry.spherical.computeOffset(testPoint, 50, 44.78339601860219);\r\n let res = {lat: resultPoint.lat(), lng: resultPoint.lng()};\r\n console.log(res);\r\n\r\n\r\n resultPoint = google.maps.geometry.spherical.computeOffset(testPoint, 50, 221.50839316640798);\r\n res = {lat: resultPoint.lat(), lng: resultPoint.lng()};\r\n console.log(res);\r\n */\r\n }\r\n\r\n /**\r\n * uses the direction and distance to calcualte the other points. this is done with google api, it has this calculation\r\n */\r\n addStrengData(result) {\r\n let color = this.props.showInventory ? 'green' : 'red';\r\n const list = this.props.showInventory ? this.props.data.streng.inventory : this.props.data.streng.errors;\r\n const startPoint = new google.maps.LatLng(result[0].location.lat, result[0].location.lng);\r\n let lastDistance = 0;\r\n const totalInsplength = this.props.data.streng.actualInspectionLength;\r\n for (const rec of list) {\r\n const obs = rec.obs;\r\n if (obs.longitude != lastDistance) { // only show 1 item at the same pos\r\n const loc = google.maps.geometry.spherical.computeOffset(startPoint, obs.longitude, this.heading);\r\n if (list[list.length-1] === rec && obs.longitude >= totalInsplength) { // last one\r\n color = 'yellow';\r\n }\r\n result.push(\r\n {\r\n name: obs.values.join('-'),\r\n color: color,\r\n location: { lat: loc.lat(), lng: loc.lng() },\r\n }\r\n );\r\n }\r\n lastDistance = obs.longitude;\r\n }\r\n if (color !== 'yellow') { // didn't add the last item in the list.\r\n const loc = google.maps.geometry.spherical.computeOffset(startPoint, totalInsplength, this.heading);\r\n result.push({name: 'end', color: 'yellow', location: { lat: loc.lat(), lng: loc.lng() } });\r\n }\r\n }\r\n\r\n /**\r\n * uses distance between 2 points to get direction and extrapolate other points along the same line\r\n */\r\n calculateAddStrengData(result) {\r\n const distance = calcCrow(result[0].location.lat, result[0].location.lng, result[1].location.lat, result[1].location.lng);\r\n if (distance === 0) {\r\n throw new Error(\"not enough distance between the 2 points\");\r\n }\r\n const startPoint = new google.maps.LatLng(result[0].location.lat, result[0].location.lng);\r\n const endPoint = new google.maps.LatLng(result[1].location.lat, result[1].location.lng);\r\n this.heading = google.maps.geometry.spherical.computeHeading(startPoint, endPoint);\r\n this.addStrengData(result);\r\n }\r\n}\r\n\r\nAugmentedReality.propTypes = {\r\n data: PropTypes.array, // data to show\r\n showInventory: PropTypes.bool, // deterimens what is shown\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(withRouter(AugmentedReality)));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n// icons\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles, withTheme } from '@material-ui/core/styles';\r\n\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport Button from '@material-ui/core/Button';\r\nimport { withTranslation } from 'react-i18next';\r\nimport AugmentedReality from './ar_component';\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n },\r\n \r\n \r\n \r\n});\r\n\r\n\r\nclass ARDialog extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n }\r\n }\r\n\r\n\r\n render() {\r\n const { t } = this.props;\r\n if (!this.props.open) {\r\n return null;\r\n }\r\n return (\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n \r\n handleClose = () => {\r\n if (this.props.onClose) this.props.onClose(-1);\r\n }\r\n\r\n}\r\n\r\nARDialog.propTypes = {\r\n data: PropTypes.array, // data to show\r\n open: PropTypes.bool.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n showInventory: PropTypes.bool, // deterimens what is shown\r\n};\r\n\r\nexport default withTheme(withTranslation()(withStyles(styles)(ARDialog)));","import { DownloadBaseService } from \"../../services/download_base_service\";\r\n\r\nexport function downloadUrl(url, filename) {\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = filename;\r\n a.target = '_blank';\r\n const clickHandler = () => {\r\n setTimeout(() => {\r\n URL.revokeObjectURL(url);\r\n a.removeEventListener('click', clickHandler); //this is the 'a' object\r\n }, 150);\r\n };\r\n a.addEventListener('click', clickHandler, false);\r\n a.click();\r\n}\r\n\r\nexport function downloadResource(url, filename) {\r\n // If no filename is set, use filename from URL\r\n if (!filename) filename = url.match(/\\/([^/#?]+)[^/]*$/)[1];\r\n\r\n fetch(url, {\r\n headers: new Headers({\r\n Origin: window.location.origin,\r\n }),\r\n mode: 'cors',\r\n })\r\n .then(response => response.blob())\r\n .then(blob => {\r\n const url = window.URL.createObjectURL(blob);\r\n downloadUrl(url, filename);\r\n })\r\n .catch(e => console.error(e));\r\n}\r\n\r\n\r\n\r\nclass DownloadService extends DownloadBaseService {\r\n\r\n /**\r\n * web version to save the svg image to a file\r\n * @param {string} value the value to download to a file\r\n * @param {string} filename proposed name of the file\r\n */\r\n downloadSvgAsUrl(value, filename) {\r\n // If no filename is set, use filename from URL\r\n if (!filename) filename = url.match(/\\/([^/#?]+)[^/]*$/)[1];\r\n \r\n const blob = new Blob([value], { type: \"image/svg+xml\" });\r\n const url = window.URL.createObjectURL(blob);\r\n downloadUrl(url, filename);\r\n }\r\n}\r\n\r\nexport const downloadService = new DownloadService();","\r\nexport class DownloadBaseService {\r\n}","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n//img \r\nimport PlaylistStar from 'mdi-material-ui/PlaylistStar';\r\nimport Earth from 'mdi-material-ui/Earth';\r\nimport CrosshairsGps from 'mdi-material-ui/CrosshairsGps';\r\nimport FileDownload from 'mdi-material-ui/FileDownload';\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles, withTheme } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { cloudDocsService } from '../../services/cloud_documents_service';\r\nimport { dialogService } from '../../../services/dialog_service';\r\nimport { errExtractor } from '../../services/error_extractor';\r\nimport Paywall from '../../overlays/paywall_component';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport { storageService } from '../../../services/storage_service';\r\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport ListSubheader from '@material-ui/core/ListSubheader';\r\nimport Backdrop from '@material-ui/core/Backdrop';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport { GoogleAutoComplete } from './google_auto_complete';\r\nimport { GOOGLE_API_KEY } from '../../services/server_config_service';\r\nimport { extractDataFromGoogleGeoLocation, getCurrentGeoLocation } from '../../services/geo_service';\r\nimport { Analyzer } from '../../services/analysis';\r\nimport StrengsSummary from '../../document/inspection/strengs/strengs_summary_component';\r\nimport StrengsSummaryDialog from '../../document/inspection/strengs/strengs_summary_dialog';\r\nimport ObservationImageDialog from '../../document/inspection/observation/observation_image_dialog';\r\nimport MapDialog from '../../maps/map_dialog';\r\nimport { oldBuildReportFotoFilename } from '../../services/filenames_service';\r\nimport ARDialog from '../../../components/ar/ar_dialog';\r\nimport { configService } from '../../../services/config_service';\r\nimport { downloadUrl } from '../../../shared_components/services/download_service';\r\nimport { projectsToCsv } from '../../services/convertor_service';\r\n\r\nconst styles = (theme) => ({\r\n paper: {\r\n backgroundColor: theme.palette.background.paper,\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n height: '100%'\r\n },\r\n list: {\r\n overflow: 'auto',\r\n flex: 1,\r\n minWidth: '300px'\r\n },\r\n listHeader: {\r\n backgroundColor: theme.palette.background.paper,\r\n display: 'flex',\r\n flexDirection: \"row\",\r\n justifyContent: \"flex-start\",\r\n alignItems: \"center\",\r\n color: theme.palette.text.primary,\r\n height: '65px' // to let the header show at the same height as the 'newProjects' part of the dashboard\r\n },\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: '#fff',\r\n },\r\n selectAll: {\r\n marginRight: theme.spacing(2)\r\n },\r\n autoComplete: {\r\n borderWidth: '0px',\r\n fontSize: \"18px\",\r\n paddingTop: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n width: '100%',\r\n textAlign: 'center'\r\n }\r\n});\r\n\r\n\r\nclass Search extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n projects: [],\r\n loaded: true,\r\n selectedIdx: -1, // currently selected project\r\n selectedProject: null, // the full object of the selected project (not the same as the object found in 'projects')\r\n innerWidth: window.innerWidth, // for responsive behaviour\r\n searchValue: null, // the current search value\r\n detailsDlgOpen: false, // show details\r\n showMap: false, // show the google map\r\n strengs: [], // the strengs in a list instead of dict for the currently selected project\r\n strengDetailsTip: null, // when set, a popup should open some details of the obs, like the image\r\n strengDetailsUrl: null, // when set, show popup with image\r\n ARData: null, // the data for showing in an AR screen\r\n ARShowInventory: false, // determins which part of the data-set the ar will show: errors or inventory\r\n }\r\n this.data = null; // all the data that the current user can see, so we can switch faster (not optimal, but doable for now when smaller data sets are still happening)\r\n this.searchAfterDataLoaded = null; // if we need to do a search after the data has been loaded, this field contains the parameter for 'searchData\r\n }\r\n\r\n /**\r\n * load data here, constructor gets called multiple times, causing data to be loaded multiple times\r\n */\r\n async componentDidMount() {\r\n try {\r\n window.addEventListener('resize', this.updateDimensions);\r\n this.data = await cloudDocsService.getDocs(\"heatmap\");\r\n if (this.searchAfterDataLoaded) {\r\n this.performSearch(this.searchAfterDataLoaded);\r\n this.searchAfterDataLoaded = null;\r\n }\r\n }\r\n catch (error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Search\"), t(\"docs_load_failed\", { error: errExtractor.get(error) }));\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.updateDimensions);\r\n }\r\n\r\n /**\r\n * called when the window is resized. Used to trigger responsive behaviour.\r\n */\r\n updateDimensions = () => {\r\n const width = window.innerWidth;\r\n this.setState({ innerWidth: width });\r\n }\r\n\r\n\r\n render() {\r\n const { t, classes } = this.props;\r\n let selected = this.state.selectedProject;\r\n let rightSide = null;\r\n const wideScreen = this.state.innerWidth > this.props.theme.breakpoints.values.sm;\r\n if (wideScreen) {\r\n rightSide = this.buildRightSide(selected);\r\n }\r\n const leftSide = this.buildleftPart(wideScreen);\r\n const strengs = this.state.strengs;\r\n return (\r\n \r\n {leftSide}\r\n {rightSide}\r\n {(selected && this.state.detailsDlgOpen) &&\r\n \r\n }\r\n \r\n this.setState({ showMap: false })} />\r\n {(configService.isSite) &&\r\n this.setState({ ARData: null })} />\r\n }\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * builds the right view\r\n * @param {object} selected the selected project \r\n */\r\n buildRightSide(selected) {\r\n const { t, classes } = this.props;\r\n const strengs = this.state.strengs;\r\n if (selected) {\r\n return (\r\n \r\n \r\n );\r\n }\r\n else {\r\n return (\r\n {t(\"No project selected\")}\r\n \r\n );\r\n }\r\n }\r\n\r\n buildleftPart(wideScreen) {\r\n const { t, classes } = this.props;\r\n let paywall = null;\r\n let listStyle = null;\r\n //paywall = \r\n //listStyle = {paddingBottom: '0px'}; // when paywall visible, bottom of list should be removed, otherwise there remains some room to clic\r\n let result =\r\n \r\n\r\n {(!configService.isMobile) &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n this.setState({ showMap: true })}>\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n }>\r\n {this.state.projects.map((prj, idx) => { return this.renderProject(prj, idx) })}\r\n {paywall}\r\n \r\n ;\r\n\r\n if (this.state.projects.length === 0) {\r\n const rightCss = wideScreen ? '50%' : '0px'; // when small screen, left side not visible\r\n result =\r\n
\r\n {result}\r\n \r\n {t(\"Search\")}\r\n \r\n {paywall}\r\n
\r\n }\r\n return result;\r\n }\r\n\r\n handleShowAR = (data, showInventory) => {\r\n this.setState({ ARData: data, ARShowInventory: showInventory, detailsDlgOpen: false });\r\n }\r\n\r\n handlePlaceValueChanged = () => {\r\n if (this.state.searchValue) { // when the user enters a new value, need to amke certain to remove the previous 'pre-filled' value from 'current location'\r\n this.setState({ searchValue: null });\r\n }\r\n }\r\n\r\n handleGetCurrentLocation = async () => {\r\n try {\r\n let location = await getCurrentGeoLocation();\r\n this.setState({ searchValue: location.address });\r\n await this.performSearch(location);\r\n }\r\n catch (error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Search\"), t(\"failed_to_get_pos\", { error: errExtractor.get(error) }));\r\n }\r\n }\r\n\r\n handleDownloadData = () => {\r\n const data = projectsToCsv(this.state.projects);\r\n let blob = new Blob([data], { type: 'text/csv' });\r\n const url = window.URL.createObjectURL(blob);\r\n downloadUrl(url, 'download.csv');\r\n }\r\n\r\n handlePlaceSelected = async (place) => {\r\n const { t } = this.props;\r\n try {\r\n if (place instanceof String) {\r\n throw new Error(t(\"valid_google_search_result_required\"));\r\n }\r\n const location = extractDataFromGoogleGeoLocation(place);\r\n await this.performSearch(location);\r\n this.setState({ searchValue: location.address });\r\n }\r\n catch (error) {\r\n dialogService.error(t(\"Search\"), t(\"failed_to_get_pos\", { error: errExtractor.get(error) }));\r\n }\r\n }\r\n\r\n async performSearch(location) {\r\n if (!this.data) { // the data is not yet loaded\r\n this.searchAfterDataLoaded = location;\r\n this.setState({ loaded: false });\r\n }\r\n else {\r\n this.setState({ loaded: false });\r\n try {\r\n let analyser = new Analyzer();\r\n setTimeout(async () => { // let the ui show the load screen.\r\n let docs = await analyser.filter(this.data, location);\r\n docs = analyser.buildMap(docs);\r\n docs = Object.values(docs);\r\n docs.sort((a, b) => {\r\n if (a.location < b.location) {\r\n return -1;\r\n }\r\n if (a.location > b.location) {\r\n return 1;\r\n }\r\n if (a.route < b.route) {\r\n return -1;\r\n }\r\n if (a.route > b.route) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n this.setState({ projects: docs });\r\n }, 0);\r\n }\r\n finally {\r\n this.setState({ loaded: true });\r\n }\r\n }\r\n }\r\n\r\n\r\n renderProject(data, idx) {\r\n const { t, classes } = this.props;\r\n let dates = [... new Set(Object.values(data.strengs).map((el) => el.date))];\r\n //for (const prj of data.projects) {\r\n // let date = prj.publishedAt ? new Date(prj.publishedAt).toLocaleDateString() : prj.uploadedAt ? new Date(prj.uploadedAt).toLocaleDateString() : \"unknown date\";\r\n // if (dates.indexOf(date) === -1) { // only add unique dates\r\n // dates.push(date);\r\n // }\r\n // }\r\n let dataColor = null;\r\n if (data.maxErr > 2) {\r\n dataColor = { color: 'red' };\r\n }\r\n else if (data.maxErr > 0) {\r\n dataColor = { color: 'orange' };\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n
{data.location}
\r\n {data.route}\r\n
}\r\n secondary={\r\n \r\n {dates.join(\", \")}\r\n \r\n }\r\n />\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n selectProject = (data, idx) => () => {\r\n let detailsDlgOpen = this.state.innerWidth <= this.props.theme.breakpoints.values.sm;\r\n const strengs = data?.strengs ? Object.values(data.strengs) : [];\r\n this.setState({ selectedIdx: idx, selectedProject: data, detailsDlgOpen: detailsDlgOpen, strengs });\r\n }\r\n\r\n handleCloseStrengSummary = (goToStreng) => {\r\n this.setState({ detailsDlgOpen: false });\r\n this.handleOpenPrj(goToStreng);\r\n }\r\n\r\n handleOpenPrj = (strengIdx) => {\r\n if (strengIdx > -1) {\r\n const streng = this.state.strengs[strengIdx];\r\n const prj = streng.prj;\r\n const realIdx = prj.strengs.findIndex((el) => el.id === streng.id); // we need to find the actual index of the streng in the original project, not in the composed project that is used as data source (can contain multiple projects)\r\n if (realIdx > -1) {\r\n this.props.history.push(`/doc/${prj.id}`, { streng: realIdx });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * looks up the image for the specified obs index (detail.image) for the specified streng in the selected project\r\n * and shows the details.\r\n * @param {number} strengIdx index of the streng to show details of\r\n * @param {object} detail details to show. contains fields key, tooltip, image. \r\n */\r\n handleShowObsDetails = async (strengIdx, detail) => {\r\n try {\r\n if (detail.image.obsIdx > -1) {\r\n let streng = this.state.strengs[strengIdx];\r\n const prj = streng.prj;\r\n let img = null;\r\n if (prj.files && prj.files.images) {\r\n const searchStr = `_${streng.id}_${detail.image.obsIdx}.jpg`\r\n img = prj.files.images.find((value) => value.name.endsWith(searchStr));\r\n if (!img) { // the very first images werent stored with _strengId_obsIdx at the end, to find them, we will need to build the name of the image\r\n streng = prj.strengs[detail.image.strengIdx]; // map to the real streng and not the calculated version from before\r\n if (streng.observations.length > detail.image.obsIdx) {\r\n const obs = streng.observations[detail.image.obsIdx];\r\n const oldName = oldBuildReportFotoFilename(prj, streng, obs);\r\n img = prj.files.images.find((value) => value.name.endsWith(oldName));\r\n }\r\n }\r\n if (img) {\r\n img = await storageService.tryGetUrl(img);\r\n }\r\n }\r\n this.setState({ strengDetailsTip: detail.tooltip, strengDetailsUrl: img });\r\n }\r\n }\r\n catch (error) {\r\n const { t } = this.props;\r\n dialogService.error(t(\"Search\"), errExtractor.get(error));\r\n }\r\n }\r\n\r\n handleCloseObsDetails = () => {\r\n this.setState({ strengDetailsTip: null, strengDetailsUrl: null });\r\n }\r\n\r\n}\r\n\r\nSearch.propTypes = {\r\n onOpenPdf: PropTypes.func, // (url: string) => {} called when the pdf needs to be opened, platform specific, \r\n onNewProjects: PropTypes.func, // called when the user wants to perform a search, need to switch view\r\n};\r\n\r\nexport default withTheme(withTranslation()(withStyles(styles)(withRouter(Search))));","/**\r\n * converts the all the project data to a list of csv data (flattens it out)\r\n * @param {list} data the values of the result of analyser.buildMap\r\n */\r\nexport function projectsToCsv(data) {\r\n let result = [[\r\n 'purpose',\r\n 'location',\r\n 'street',\r\n 'startPointRef',\r\n 'startPointCoord',\r\n 'pointRef1',\r\n 'coordPoint1',\r\n 'pointRef2',\r\n 'coordPoint2',\r\n 'pointRef3',\r\n 'coordPoint3',\r\n 'inspectionDirection',\r\n 'locationType',\r\n 'inspectionDate',\r\n 'inspectionTime',\r\n 'actualInspectionLength',\r\n 'sewerUsage',\r\n 'type',\r\n 'code',\r\n 'location',\r\n 'continuous',\r\n 'Characterization1',\r\n 'Characterization2',\r\n 'measurement1',\r\n 'measurement2',\r\n 'direction1',\r\n 'direction2',\r\n 'joint',\r\n 'remark'\r\n ].join('|')];\r\n let prjDict = {}; // need to keep track of all the projects, so we don't render the same project 2 times\r\n for(const item of data) {\r\n for (const project of item.projects) {\r\n if (project.id in prjDict) continue;\r\n prjDict[project.id] = project;\r\n let prjRec = [\r\n project.main.purpose,\r\n project.main.location,\r\n ];\r\n for (const streng of project.strengs) {\r\n let strengRec = [\r\n streng.location,\r\n streng.startPointRef,\r\n streng.startPointCoord,\r\n streng.pointRef1,\r\n streng.coordPoint1,\r\n streng.pointRef2,\r\n streng.coordPoint2,\r\n streng.pointRef3,\r\n streng.coordPoint3,\r\n streng.inspectionDirection,\r\n streng.locationType,\r\n streng.inspectionDate,\r\n streng.inspectionTime,\r\n streng.actualInspectionLength,\r\n streng.sewerUsage,\r\n streng.type,\r\n ];\r\n for (const obs of streng.observations) {\r\n \r\n let rec = [...prjRec, ...strengRec, \r\n obs.values.slice(0, 3).join(''),\r\n obs.longitude,\r\n !!obs.continuousIdx,\r\n obs.values.length > 3 ? obs.values[3] : \"\",\r\n obs.values.length > 4 ? obs.values[4] : \"\",\r\n obs.waarde1 ?? \"\",\r\n obs.waarde2 ?? \"\" ,\r\n obs.direction1 ?? \"\",\r\n obs.direction2 ?? \"\",\r\n obs.joint,\r\n obs.remark ?? \"\",\r\n ];\r\n result.push(rec.join('|'));\r\n }\r\n }\r\n }\r\n }\r\n return result.join('\\r\\n');\r\n}\r\n\r\n\r\n\r\n/**\r\n * adjusts the value according to the specified calibration, if any.\r\n * when no calibration, the original value is returned. \r\n * When value is between min & max, it becomes 0, otherwise, we use center to adjust value.\r\n * @param {number} value the value to adjust according to the calibration settings\r\n * @param {object} calibration optional, should contain: min, max, center values of the calibration.\r\n * @param {number} center when the center is no 0, use this.\r\n * @returns the value adjusted to the calibration\r\n */\r\nexport function adjustForCalibration(value, calibration, center=0) {\r\n if (calibration) {\r\n if (value < calibration.min || value > calibration.max) {\r\n return value - (center - calibration.center);\r\n }\r\n return center;\r\n }\r\n else {\r\n return value;\r\n }\r\n}","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n//img \r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles, withTheme } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport Container from '@material-ui/core/Container';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { withTranslation } from 'react-i18next';\r\nimport NewProjects from './new_projects_component';\r\nimport SearchProjects from './search_component';\r\nimport { configService } from '../../../services/config_service';\r\n\r\nconst styles = (theme) => ({\r\n docRoot: {\r\n flex: 1,\r\n height: '30px'\r\n },\r\n docRootSmall: {\r\n flex: 1,\r\n height: '30px',\r\n paddingLeft: \"0px\",\r\n paddingRight: '0px'\r\n },\r\n});\r\n\r\n\r\nclass Dashboard extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n let selectedTab = configService.get(\"general.activeDashboard\") ?? 'new';\r\n this.state = {\r\n selectedView: selectedTab\r\n }\r\n }\r\n\r\n render() {\r\n const { classes } = this.props;\r\n let rootStyle = classes.docRootSmall;\r\n const wideScreen = this.state.innerWidth > this.props.theme.breakpoints.values.sm;\r\n if (wideScreen) {\r\n rootStyle = classes.docRoot;\r\n }\r\n return (\r\n \r\n \r\n {(this.state.selectedView === \"new\") &&\r\n \r\n }\r\n {(this.state.selectedView === \"search\") &&\r\n \r\n }\r\n \r\n \r\n );\r\n }\r\n\r\n switchView = (newView) => () => {\r\n configService.set(\"general.activeDashboard\", newView);\r\n this.setState({selectedView: newView});\r\n }\r\n}\r\n\r\nDashboard.propTypes = {\r\n onOpenPdf: PropTypes.func, // (url: string) => {} called when the pdf needs to be opened, platform specific, \r\n};\r\n\r\nexport default withTheme(withTranslation()(withStyles(styles)(withRouter(Dashboard))));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n// icons\r\nimport Settings from 'mdi-material-ui/Cog';\r\n \r\nimport React from 'react';\r\nimport '../../App.css';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Box from '@material-ui/core/Box';\r\nimport CloudDocsList from '../../shared_components/documents/cloud_docs_list_component';\r\nimport DocumentsBar from '../../shared_components/documents/documents_bar_component';\r\nimport { Copyright } from '../../shared_components/start/copyright_component';\r\nimport Dashboard from '../../shared_components/documents/dashboard/dashboard_component';\r\nimport { withTranslation } from 'react-i18next';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Tab from '@material-ui/core/Tab';\r\nimport { configService } from '../../services/config_service';\r\nimport { downloadResource } from '../../shared_components/services/download_service';\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n minHeight: '100vh',\r\n textAlign: 'center',\r\n backgroundColor: theme.palette.background.default,\r\n },\r\n docRoot: {\r\n flex: 1\r\n },\r\n logo: {\r\n height: '70px',\r\n pointerEvents: \"none\"\r\n }\r\n\r\n});\r\n\r\n\r\nclass Home extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n let selectedTab = configService.get(\"general.homeTab\") ?? 'index';\r\n this.state = {\r\n selectedTab: selectedTab\r\n }\r\n }\r\n\r\n /**\r\n * load data here, constructor gets called multiple times, causing data to be loaded multiple times\r\n */\r\n componentDidMount() {\r\n }\r\n\r\n\r\n render() {\r\n const { t } = this.props;\r\n let tabs = [\r\n ,\r\n \r\n ];\r\n return (\r\n \r\n \r\n this.props.history.push('/settings')}>\r\n \r\n \r\n \r\n ]}/>\r\n {(this.state.selectedTab === \"index\") &&\r\n window.open(url, \"_blank\")}\r\n onDownloadFiles={this.handleDownloadFiles}/>\r\n }\r\n {this.state.selectedTab === \"dashboard\" && \r\n \r\n }\r\n \r\n {Copyright(t)}\r\n \r\n \r\n );\r\n }\r\n\r\n handleDownloadFiles = (urls) => {\r\n for(const url of urls) {\r\n if(url.includes(\".zip\")) {\r\n window.open(url);\r\n }\r\n else {\r\n downloadResource(url);\r\n }\r\n }\r\n }\r\n\r\n handleTabChange = (ev, value) => {\r\n configService.set(\"general.homeTab\", value);\r\n this.setState({selectedTab: value});\r\n }\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(Home));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Fade from '@material-ui/core/Fade';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n backgroundColor: theme.palette.background.default,\r\n },\r\n menuText: {\r\n flexGrow: 1,\r\n textAlign: 'left'\r\n },\r\n menuTextSmall: {\r\n flex: 1,\r\n textAlign: 'left',\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden'\r\n },\r\n collapsableToolbar: {\r\n color: 'white',\r\n position: \"absolute\",\r\n left: \"0px\",\r\n right: \"0px\",\r\n top: \"0px\",\r\n backgroundColor: theme.palette.action.focus,\r\n },\r\n defaultToolbar: {\r\n color: theme.palette.action.active\r\n }\r\n});\r\n\r\n\r\nclass MainLayout extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n appbarHeight: 48\r\n }\r\n\r\n this.appbar = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n this.updateHeight(); \r\n }\r\n\r\n updateHeight() {\r\n const height = this.appbar.current && !this.props.toolbarIsCollapsed ? this.appbar.current.offsetHeight : 48;\r\n if (this.state.appbarHeight !== height) {\r\n this.setState({ appbarHeight: height });\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevProps.allowCollaps !== this.props.allowCollaps) {\r\n this.updateHeight();\r\n }\r\n }\r\n\r\n render() {\r\n const { allowCollaps, toolbarIsCollapsed, classes } = this.props;\r\n const color = allowCollaps ? 'transparent' : 'default';\r\n const toolbarStyle = allowCollaps ? classes.collapsableToolbar : classes.defaultToolbar;\r\n let toolbar = \r\n \r\n {this.props.leftBtns}\r\n {(allowCollaps) && // in tablet mode, there are buttons on top of the toolbar halfway in, so only show the title at the left part\r\n
\r\n \r\n {this.props.title}\r\n \r\n
\r\n
\r\n
\r\n }\r\n {(!allowCollaps) &&\r\n \r\n {this.props.title}\r\n \r\n }\r\n \r\n {this.props.rightBtns}\r\n \r\n \r\n if (allowCollaps) {\r\n toolbar = {toolbar}\r\n }\r\n let bodyStyle;\r\n if (allowCollaps) {\r\n bodyStyle = {height: '100%', backgroundColor: 'black'} ;\r\n }\r\n else {\r\n bodyStyle = {height: `calc(100% - ${this.state.appbarHeight}px)` }; \r\n }\r\n\r\n return (\r\n \r\n {toolbar}\r\n
\r\n {this.props.children}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nMainLayout.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n leftBtns: PropTypes.any,\r\n rightBtns: PropTypes.any,\r\n allowCollaps: PropTypes.bool, // when true, appbar can be hidden\r\n toolbarIsCollapsed: PropTypes.bool, // when true, appbar is hidden\r\n onClickBody: PropTypes.func, // called when clicked on body\r\n};\r\n\r\nMainLayout.defaultProps = {\r\n allowCollaps: false,\r\n toolbarIsCollapsed: false,\r\n}\r\n\r\nexport default withStyles(styles)(MainLayout);","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n// icons\r\nimport DeleteOutline from '@material-ui/icons/DeleteOutline';\r\nimport ShieldAccount from 'mdi-material-ui/ShieldAccount';\r\nimport AccountPlus from 'mdi-material-ui/AccountPlus';\r\nimport AccountStarOutline from 'mdi-material-ui/AccountStarOutline';\r\n\r\nimport React from 'react';\r\nimport '../../App.css';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport ConfirmationDialog from '../dialogs/confirmation_dialog';\r\nimport MaterialTable, { MTableToolbar } from \"material-table\";\r\nimport { withRouter } from 'react-router-dom';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { userService } from '../services/user_service';\r\nimport { tableIcons } from '../services/table_service';\r\nimport { dialogService } from '../../services/dialog_service';\r\nimport { errExtractor } from '../services/error_extractor';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n backgroundColor: theme.palette.background.default,\r\n padding: theme.spacing(3),\r\n },\r\n title: {\r\n fontSize: theme.typography.pxToRem(17),\r\n fontWeight: \"700\"\r\n },\r\n\r\n regBtn: {\r\n marginTop: theme.spacing(1)\r\n }\r\n});\r\n\r\n\r\nclass CompanySettings extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n users: [],\r\n company: null,\r\n isAskToDeleteOpen: false,\r\n allowProFeatures: false,\r\n nrLicensesUsed: 0,\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n let users = await userService.getUsers(); // get all users for this company.\r\n users = users.filter((usr) => usr.email); // only show users with an email (so no inpsector licenses)\r\n let company = null;\r\n try {\r\n company = await userService.getCompany();\r\n }\r\n catch (error) {\r\n console.log(`non fatal error: ${errExtractor.get(error)}`);\r\n }\r\n let nrLicensesUsed = (!company) ? 0 : users.reduce((prev, current) => {\r\n if (current.proAccount) {\r\n return prev + 1;\r\n }\r\n return prev;\r\n }, 0);\r\n if (company && nrLicensesUsed > company.nrProLicenses) {\r\n const { t } = this.props;\r\n let tooMany = nrLicensesUsed - company.nrProLicenses;\r\n dialogService.error(t(\"Users\"), t(\"too_many_pro_users\", {removed: tooMany}));\r\n nrLicensesUsed = company.nrProLicenses;\r\n for (const user of users) {\r\n if (user.proAccount) {\r\n user.proAccount = false;\r\n await this._saveUser(user, user.id);\r\n tooMany--\r\n if (tooMany === 0) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this.setState({ users: users, company: company, allowProFeatures: company.nrProLicenses > 0, nrLicensesUsed: nrLicensesUsed });\r\n }\r\n\r\n\r\n render() {\r\n const { t } = this.props;\r\n if (!this.props.isCurrentTab) {\r\n return null;\r\n }\r\n const company = this.state.company;\r\n const companyName = company ? company.name : 'unknown';\r\n let actions = [\r\n {\r\n icon: () => ,\r\n tooltip: t('Remove user'),\r\n onClick: (event, data) => this.askDelete(data)\r\n }\r\n ];\r\n const badgeEdit = this.state.allowProFeatures ? 'onUpdate' : 'never';\r\n let columns = [\r\n {\r\n title: '', render: this.renderAdminBadge, width: 40,\r\n editable: badgeEdit, type: 'boolean', field: 'proAccount',\r\n editComponent: props => (\r\n \r\n = company?.nrProLicenses && props.value === false}\r\n onChange={e => props.onChange(e.target.checked)}\r\n />\r\n \r\n )\r\n },\r\n { title: t('Email address'), field: 'email', editable: 'onAdd' },\r\n { title: t('First name'), field: 'firstName', editable: 'onUpdate' },\r\n { title: t('Last name'), field: 'lastName', editable: 'onUpdate' },\r\n ]\r\n if (this.state.allowProFeatures) {\r\n columns.push(\r\n {\r\n title: t('Region'), field: 'region',\r\n editable: (_, rowData) => rowData && rowData.proAccount === true\r\n }\r\n );\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n buildToolbar = (props) => {\r\n const { t } = this.props;\r\n if (this.state.allowProFeatures) {\r\n const company = this.state.company;\r\n\r\n return (\r\n
\r\n \r\n
\r\n {t(\"nr_pro_viewer_licenses_left_of_total\", { total: company.nrProLicenses, available: company.nrProLicenses - this.state.nrLicensesUsed})}\r\n
\r\n
\r\n );\r\n }\r\n else {\r\n return ();\r\n }\r\n }\r\n\r\n renderAdminBadge = (rowData) => {\r\n const { t } = this.props;\r\n if (!rowData) {\r\n return null;\r\n }\r\n if (rowData.companyRole === \"companyAdmin\") {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n else if (rowData.invitedTo) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n else if (rowData.proAccount === true) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n }\r\n\r\n /**\r\n * ask the user if he wants to delete all the selected items.\r\n * @param {list} data list of selected report objects.\r\n */\r\n askDelete = (data) => {\r\n this.dataToDelete = data;\r\n this.setState({ isAskToDeleteOpen: true });\r\n }\r\n\r\n addUser = async (newUser) => {\r\n const { t } = this.props;\r\n try {\r\n const curUser = userService.getCurrentUser();\r\n if (!curUser) { throw new Error(\"missing user\") }\r\n let users = [...this.state.users];\r\n if (users.find((el) => el.email === newUser.email)) {\r\n throw new Error(t(\"user_already_part_of_comp\"))\r\n }\r\n let data = { ...newUser };\r\n delete data.status; // not needed for update\r\n const result = await userService.tryAddUserToCompany(data);\r\n data['invitedTo'] = this.state.company?.id; // so we indicate that the user is invited\r\n if (result.result === \"existing\") {\r\n dialogService.error(t(\"New user\"), t(\"user_already_member_of_other\"));\r\n }\r\n else {\r\n users.push(result.value);\r\n this.setState({ users: users });\r\n if (result.result === \"invited\") {\r\n dialogService.info(t(\"New user\"), t(\"user_invited\"));\r\n }\r\n else {\r\n dialogService.info(t(\"New user\"), t(\"user_created\"));\r\n }\r\n }\r\n }\r\n catch (error) {\r\n dialogService.error(t(\"New user\"), t(\"error_creating_user\", { error: errExtractor.get(error) }));\r\n }\r\n }\r\n\r\n updateUser = async (newData, oldData) => {\r\n const { t } = this.props;\r\n try {\r\n let data = { ...newData };\r\n await this._saveUser(data);\r\n const idx = this.state.users.indexOf(oldData);\r\n const users = [...this.state.users];\r\n users[idx] = newData;\r\n let nrLicensesUsed = this.state.nrLicensesUsed;\r\n if (newData.proAccount !== oldData.proAccount) {\r\n if (newData.proAccount) {\r\n nrLicensesUsed++;\r\n }\r\n else {\r\n nrLicensesUsed--;\r\n }\r\n }\r\n this.setState({ users: users, nrLicensesUsed: nrLicensesUsed });\r\n }\r\n catch (error) {\r\n dialogService.info(t(\"New user\"), t(\"error_updating_user\", errExtractor.get(error)));\r\n }\r\n }\r\n\r\n async _saveUser(data) {\r\n if (!data.proAccount && data.region) { // only pro accounts can have a region\r\n data.region = \"\";\r\n }\r\n delete data.status; // not needed for update\r\n delete data.password; // dont want to update this here, can be null, can't have that\r\n await userService.saveUser(data, data.id);\r\n }\r\n\r\n handleDeleteDlgClose = async (result) => {\r\n const { t } = this.props;\r\n this.setState({ isAskToDeleteOpen: false });\r\n if (result && this.dataToDelete) {\r\n let users = [...this.state.users]; // copy so we can update the ui\r\n for (const user of this.dataToDelete) {\r\n if (user.companyRole === 'companyAdmin' || user.role === 'admin') {\r\n dialogService.error(t(\"Delete user\"), t(\"cant_delete_admin\"));\r\n }\r\n else if (user.role === 'inspector') {\r\n dialogService.error(t(\"Delete user\"), t(\"cant_delete_inspector\"));\r\n }\r\n else {\r\n try {\r\n await userService.deleteUser(user.id);\r\n const idx = users.indexOf(user);\r\n if (idx > -1) {\r\n users.splice(idx, 1);\r\n }\r\n }\r\n catch (error) {\r\n dialogService.error(t(\"Delete user\"), errExtractor.get(error));\r\n }\r\n }\r\n }\r\n this.setState({ users: users });\r\n }\r\n this.dataToDelete = null;\r\n }\r\n}\r\n\r\nCompanySettings.propTypes = {\r\n isCurrentTab: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(withRouter(CompanySettings)));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport '../../App.css';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { configService } from '../../services/config_service';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { LanguageOptions } from '../../services/translation_service';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Select from '@material-ui/core/Select';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n backgroundColor: theme.palette.background.default,\r\n },\r\n formControl: {\r\n margin: theme.spacing(3),\r\n },\r\n title: {\r\n fontSize: theme.typography.pxToRem(17),\r\n fontWeight: \"700\"\r\n },\r\n subTitle: {\r\n fontSize: theme.typography.pxToRem(15),\r\n fontWeight: \"500\",\r\n marginTop: '15px'\r\n },\r\n\r\n});\r\n\r\n\r\nclass GeneralSettings extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.readOnly = process.env.REACT_APP_IS_VIEWER === 'true';\r\n\r\n const InclinationAsPercentage = configService.get('robot.InclinationAsPercentage');\r\n const lang = configService.get('general.language');\r\n this.state = {\r\n InclinationAsPercentage: InclinationAsPercentage,\r\n lang: lang\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevState != this.state) {\r\n if (prevState.lang != this.state.lang) {\r\n configService.set(\"general.language\", this.state.lang);\r\n }\r\n \r\n if (prevState.InclinationAsPercentage != this.state.InclinationAsPercentage) {\r\n configService.set('robot.InclinationAsPercentage', this.state.InclinationAsPercentage);\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n \r\n );\r\n }\r\n\r\n\r\n setLanguage = (ev) => {\r\n\r\n let value = ev.target.value;\r\n this.props.i18n.changeLanguage(value);\r\n this.setState({lang: ev.target.value}); // system default is stored as the value as well.\r\n }\r\n}\r\n\r\nGeneralSettings.propTypes = {\r\n isCurrentTab: PropTypes.bool.isRequired\r\n};\r\n\r\nexport default withTranslation()(withStyles(styles)(GeneralSettings));","/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\nimport React from 'react';\r\nimport '../../App.css';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Box from '@material-ui/core/Box';\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport Tab from '@material-ui/core/Tab';\r\nimport MainLayout from '../../shared_components/layouts/main_layout_component';\r\nimport CompanySettings from '../../shared_components/settings/company_component';\r\nimport GeneralSettings from './general_component';\r\nimport { withTranslation } from 'react-i18next';\r\n\r\n//icons:\r\nimport ArrowLeft from 'mdi-material-ui/ArrowLeft';\r\nimport { userService } from '../../shared_components/services/user_service';\r\n\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n backgroundColor: theme.palette.background.default,\r\n display: 'flex',\r\n flexDirection: 'column'\r\n },\r\n tabs: {\r\n borderRight: `1px solid ${theme.palette.divider}`\r\n },\r\n\r\n tab: {\r\n flex: 1\r\n }\r\n});\r\n\r\n\r\n\r\nclass Settings extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n const user = userService.getCurrentUser();\r\n this.isCompanyAdmin = user && user.companyRole === \"companyAdmin\";\r\n this.state = {\r\n currentTab: \"general\"\r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n \r\n \r\n \r\n }>\r\n \r\n this.setState({currentTab: newVal})}\r\n variant=\"scrollable\"\r\n className={this.props.classes.tabs}>\r\n \r\n {(this.isCompanyAdmin) && }\r\n \r\n \r\n \r\n {(this.isCompanyAdmin) &&\r\n \r\n }\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n goBack = () => {\r\n this.props.history.goBack();\r\n }\r\n}\r\n\r\nexport default withTranslation()(withStyles(styles)(Settings));","\r\n/* \r\n * ELASTETIC CONFIDENTIAL\r\n * ______________________\r\n * \r\n * [2019] - [2020] Elastetic GCV\r\n * All Rights Reserved.\r\n * \r\n * NOTICE: All information contained herein is, and remains\r\n * the property of Elastetic GCV and its suppliers,\r\n * if any. The intellectual and technical concepts contained\r\n * herein are proprietary to Elastetic GCV\r\n * and its suppliers and may be covered by Belgian, EU and Foreign Patents,\r\n * patents in process, and are protected by trade secret or copyright law.\r\n * Dissemination of this information or reproduction of this material\r\n * is strictly forbidden unless prior written permission is obtained\r\n * from Elastetic GCV.\r\n */\r\n\r\n\r\n// icons\r\nimport Refresh from 'mdi-material-ui/Refresh';\r\n\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { withTranslation } from 'react-i18next';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\n\r\n\r\nconst styles = (theme) => ({\r\n});\r\n\r\n\r\n/**\r\n * UI element for ar.\r\n */\r\nclass ARPage extends React.PureComponent {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n arRefresh: 0, // counter used to refresh the iframe. binds to key, which forces a ui update (works better than forcupdate)\r\n }\r\n this.iFrame = React.createRef(); // so we can send messages to it\r\n }\r\n\r\n\r\n render() {\r\n return (\r\n
\r\n