{"version":3,"sources":["config/index.js","config/authConfig.js","Routes/index.js","components/Container/index.js","assets/images/landing_map.jpg","assets/images/landing_forest.jpg","assets/images/documents.jpg","components/LandingPage/index.js","utils/localStorage.js","utils/auth.js","hooks/useAuth.js","components/StoraEnsoComponents/Button/index.js","components/UploadingPage/Wizard/NavigationButtons/index.js","components/UploadingPage/Wizard/common.js","components/UploadingPage/Wizard/UploadType/index.js","components/Forms/message.js","components/UploadingPage/configValues.js","components/Forms/input.js","config/theme.js","components/Forms/select.js","components/Forms/textarea.js","components/Forms/common.js","components/UploadingPage/UploadingMultimedia/index.js","utils/axios.js","components/Forms/checkbox.js","components/Forms/datepicker.js","components/StoraEnsoComponents/Spinner/index.js","components/Loading/index.js","components/UploadingPage/UploadingDrone/index.js","services/uploadingService.js","components/UploadingPage/Wizard/UploadInformation/index.js","assets/icons/upload-solid.svg","components/NotificationToast/index.js","components/UploadingPage/FileUpload/index.js","components/StoraEnsoComponents/assets/fonts/material-icons.eot","components/StoraEnsoComponents/assets/fonts/material-icons.ttf","components/StoraEnsoComponents/assets/fonts/material-icons.woff","components/StoraEnsoComponents/assets/fonts/material-icons.svg","components/StoraEnsoComponents/Icon/index.js","assets/icons/photo-video.svg","components/UploadingPage/UploadPreview/index.js","assets/images/bg-missing-preview.jpg","assets/images/bg-missing-preview-mill.jpg","components/UploadingPage/Wizard/MediaUpload/index.js","components/Section/basicSection.js","components/Stepper/stepperItem.js","components/Stepper/index.js","components/UploadingPage/validation.js","components/UploadingPage/uploadingUtils.js","components/UploadingPage/uploadingContext.js","components/UploadingPage/UploadProgress/index.js","components/UploadingPage/index.js","services/userService.js","components/AuthEventHandler/index.js","components/StoraEnsoComponents/Notification/index.js","components/StoraEnsoComponents/Tag/index.js","components/DataTable/RecordsInfo/index.js","components/DataTable/Pagination/index.js","assets/icons/sort-solid.svg","assets/icons/sort-down-solid.svg","assets/icons/sort-up-solid.svg","components/DataTable/index.js","components/DataTable/utils.js","components/UserLog/columns.js","components/UserLog/GridFilter/index.js","assets/icons/file-csv.svg","components/DataTable/TableExportFunctions/exportTableToCSV.js","assets/icons/file-pdf.svg","components/StoraEnsoComponents/assets/images/logo.png","components/DataTable/TableExportFunctions/exportTableToPDF.js","components/DataTable/TableActions/index.js","components/DataTable/TableExportFunctions/profileTableExportFunctions.js","components/UserLog/index.js","components/UserProfilePage/index.js","services/projectService.js","components/MediaMap/Map/index.js","assets/icons/circle-exclamation-solid.svg","services/mapService.js","components/MediaThumbnail/thumbnail.js","components/MediaThumbnail/missingPreview.js","components/MediaThumbnail/index.js","components/Modal/index.js","assets/icons/fas-triangle-exclamation.svg","components/MediaMap/MediaModal/index.js","components/MediaMap/MediaGrid/index.js","components/Sidebar/index.js","components/MediaMap/DataFilter/index.js","assets/icons/angle-up.svg","components/MediaMap/index.js","components/Section/index.js","assets/icons/trash-can-solid.svg","components/ForestDetail/CompartmentDetailGrid/columns.js","components/ForestDetail/CompartmentDetailGrid/index.js","components/ForestDetail/CompartmentList/index.js","components/Map/mapStatic/DEM.js","components/Contexts/DroneDetailContext.js","assets/icons/fal-ruler.svg","assets/icons/fal-ruler-combined.svg","assets/icons/fal-ellipsis-stroke.svg","assets/icons/fal-object-group.svg","assets/icons/fal-hand-pointer.svg","assets/icons/fas-circle.svg","assets/icons/fas-triangle.svg","assets/icons/fal-tree.svg","components/Map/MapActionMenu/index.js","components/Map/millMapMenu.js","components/Map/forestMapMenu.js","components/Map/utils.js","components/Map/measureMapMenu.js","components/Map/mapStatic/deepLearning.js","components/Map/index.js","components/NotificationUnsavedChanges/index.js","components/ForestDetail/index.js","components/MillDetail/SurfaceChart.js","components/MillDetail/ProfileChart.js","components/Forms/autocomplete.js","assets/icons/fal-chart-area.svg","assets/icons/fal-robot.svg","assets/icons/fal-circle-exclamation.svg","utils/feature.js","components/MillDetail/changedCoefficientDetector.js","components/MillDetail/changedFeatureDetector.js","utils/index.js","components/MillDetail/featureForm.js","assets/icons/angle-down.svg","components/DataTable/RowExpandButton/index.js","assets/icons/file-excel.svg","components/MillDetail/FeatureGrid/columns.js","components/DataTable/TableExportFunctions/exportTableToXLSX.js","components/DataTable/TableExportFunctions/millTableExportFunctions.js","components/MillDetail/FeatureGrid/rowDetailView.js","assets/icons/calculator-simple.svg","components/MillDetail/FeatureGrid/dataFilter.js","components/MillDetail/FeatureGrid/index.js","components/ConfirmationModal/index.js","components/MillDetail/index.js","components/SinglePhotoDetail/index.js","components/PanoramaDetail/index.js","components/VideoDetail/index.js","components/ProjectDetailPage/DetailMap/index.js","services/multimediaService.js","components/ProjectDetailPage/BasicMultimediaInformation/tagMenu.js","components/ProjectDetailPage/BasicMultimediaInformation/index.js","logo.svg","components/ProjectDetailPage/UploadRefresh/index.js","components/ProjectDetailPage/ProcessingCheck/index.js","components/ProjectDetailPage/ProcessingCheckMultimedia/index.js","components/ProjectDetailPage/BasicDroneInformation/index.js","components/ProjectDetailPage/index.js","components/StoraEnsoComponents/assets/images/se-logo.svg","components/StoraEnsoComponents/Logo/index.js","components/Layout/pageWrapper.js","components/LoginPage/index.js","components/NotFoundPage/index.js","components/PrivateRoute/index.js","assets/icons/fa-bars.svg","assets/icons/fa-xmark.svg","assets/icons/fa-circle-user.svg","components/Header/menu.js","assets/icons/fa-arrow-right-from-bracket.svg","components/Header/index.js","components/Layout/index.js","components/Forms/formValidation.js","components/AdminPage/addUserForm.js","components/AdminPage/addLocationForm.js","components/AdminPage/addUserLocationForm.js","components/AdminPage/publishProject.js","components/AdminPage/calculatePredictions.js","components/AdminPage/exportPilotsLocations.js","components/AdminPage/projectRestart.js","components/AdminPage/index.js","services/adminServices.js","assets/images/img-forest.jpg","assets/images/img-truck.jpg","assets/images/forest.jpg","assets/images/img-trees.jpg","assets/documentation/oldVersion/droneAppNews.pdf","assets/documentation/oldVersion/droneMillInventory.pdf","assets/documentation/oldVersion/workingWithDroneForestApp.pdf","assets/documentation/oldVersion/multispectralBestPractices.pdf","assets/documentation/oldVersion/droneAppRecommendation.pdf","assets/documentation/newVersion/droneMillInventory.pdf","assets/documentation/newVersion/droneForestInventory.pdf","assets/documentation/newVersion/droneMultimedia.pdf","components/Help/index.js","App.js","index.js"],"names":["MULTIMEDIA_TYPES","DRONE_TYPES","FEATURE_KEY_ID","msalConfig","auth","clientId","process","authority","redirectUri","postLogoutRedirectUri","cache","cacheLocation","storeAuthStateInCookie","system","loggerOptions","loggerCallback","level","message","containsPii","LogLevel","Error","console","error","Info","info","Verbose","debug","Warning","warn","loginRequest","scopes","HOME","LOGIN","DRONE_MAP","UPLOADING","USER_PROFILE","ADMIN","HELP","Container","styled","div","isFullWidth","ContainerWrapper","Grid","Item","Link","theme","colors","bg_gray","heading_dark","brand_green","brand_blue","LandingPage","className","to","src","mapImg","alt","forestImg","helpImg","KEYS","set","key","data","localStorage","setItem","getSession","str","JSON","parse","e","toJSON","getItem","clearSession","removeItem","useAuth","IconWrapper","white","StyledButton","button","props","kind","isFlat","primary","information","link_hover","link","secondary","attention","brand_yellow","positive","negative","kindStyles","size","sm","md","lg","buttonSizes","Button","children","icon","onClick","rest","defaultProps","Wrapper","NavigationButtons","currentStep","isNextDisabled","nextBtnLabel","onBackClick","onNextClick","disabled","TitleWrapper","FormWrapper","FormSection","Content","bg_gray_light","SectionLabel","span","MULTIMEDIA_TYPE_VALUES","id","label","ALL_TYPE_VALUES","showOnlyMultimedia","isSelected","brand_tint_yellow","UploadType","hasValidationErrors","locations","change","useForm","selectedType","useField","subscription","value","input","uploadTypeOptions","length","map","small","Message","isError","componentClass","classNames","DRONE_VALUES","drone","touched","invalid","negative_bg","brand_tint_green","brand_tint_blue","bg_gray_dark","bg_white","heading_light","text_light","text_dark","information_bg","attention_bg","positive_bg","input_border","Select","options","placeholder","customComponents","inputId","styles","control","provided","state","position","overflow","padding","backgroundColor","isDisabled","themeObj","cursor","outline","border","display","justifyContent","borderRadius","valueContainer","lineHeight","alignItems","flexWrap","margin","menu","left","top","width","zIndex","userSelect","option","color","singleValue","indicatorSeparator","dropdownIndicator","components","TextAreaComponent","textarea","TextArea","InputWrapper","ButtonsWrapper","UploadingMultimedia","uploadType","name","meta","type","rows","getOptionLabel","getOptionValue","onChange","axiosInstance","axios","create","baseURL","interceptors","request","use","a","config","allActiveAccounts","msalInstance","getAllAccounts","account","acquireTokenSilent","catch","err","InteractionRequiredAuthError","acquireTokenRedirect","loginRedirect","tokenResponse","token","accessToken","stringify","headers","Promise","reject","Input","CheckBox","inputProps","htmlFor","DatePicker","placeholderText","selected","date","toISOString","customInput","autocomplete","animation","keyframes","Spinner","Loading","FullWidthSection","InfoWrapper","UploadingDrone","useState","setLocations","loading","setLoading","useEffect","get","then","response","filter","includes","target","checked","getTypeStr","UploadInformation","_path","_extends","Object","assign","i","arguments","source","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgUploadSolid","_ref","svgRef","title","titleId","xmlns","viewBox","ref","d","ForwardRef","NotificationToast","toastId","onClose","toast","autoClose","propTypes","string","isRequired","oneOf","func","undefined","UploadIcon","UploadSvg","ActiveOverlay","DropzoneBorder","isDragActive","Separator","FileUpload","maxFileSize","acceptedFileTypes","actionResult","setActionResult","useDropzone","accept","maxSize","noClick","onDrop","acceptedFiles","f","file","nanoid","uploadStatus","status","loaded","open","getRootProps","getInputProps","MaterialIconsEot","MaterialIconsTtf","MaterialIconsWoff","MaterialIconsSvg","Icon","SvgPhotoVideo","ImageIcon","ImageSvg","MissingPreviewWrapper","Value","ProgressBar","total","running","failed","finished","progressBarColor","ProgressValue","ThumbnailWrapper","ImageWrapper","CloseIcon","UploadPreview","items","removeDisabled","onRemove","getProgressLabel","Math","round","forEach","item","URL","revokeObjectURL","preview","idx","role","filesize","MediaUpload","submit","files","createObjectURL","bgForestSrc","bgMillSrc","slice","SectionWrapper","BasicSection","Divider","Bullet","Label","isActive","StepperItem","stepNumber","isLastStep","Stepper","isComplete","STEP_1","nullable","required","STEP_2","projectName","projectDescription","when","schema","projectDate","flightName","flightPurpose","location","object","shape","realEstate","STEP_3","array","min","VALIDATION_SCHEMAS","getUploadTypeId","createMultimediaSubprojectRequest","projectId","formData","note","droneType","description","re_code","post","UploadingContext","createContext","UploadingProvider","submitted","setSubmitted","submitting","setSubmitting","submittingAction","setSubmittingAction","uploadFiles","setUploadFiles","setError","success","setSuccess","Provider","uploadingData","useUploadingMedia","useContext","SpinnerWrapper","ResultWrapper","Result","result","UploadProgress","reset","WIZARD_STEPS","component","DefaultStepper","UploadingPage","droneImageInitCount","startUploadingDrone","formFiles","resolve","results","index","rSucess","rError","first","uploadProgressFunc","onUploadProgress","uploadImage","event","tempArr","findIndex","el","allSettled","r","failedItems","res","reason","uploadSinglePhoto","subprojectId","uploadFile","subProjId","processUploadedImage","uploadPanoramaOrVideo","uploadDone","path","uploadMultimedia","processingImage","multimediaUploaded","processDroneUpload","projName","projDateTime","projDesc","locationId","epsg","srid","purpose","incident","flightIncident","detection","calculateDetection","chipConveyor","removeStackingChip","continuousConveyor","removeContinuousChip","imgCount","projId","startUploadingDronePool","formFilePool","imageCount","processMultimediaUpload","comment","startUploadingMultimedia","onSubmit","validate","values","formSchema","abortEarly","context","errors","inner","reduce","formError","innerError","setIn","initialValues","render","Component","Fragment","UploadingPageWithContext","getProfile","getSrids","getUsers","getLocations","AuthEventHandler","instance","useMsal","isAuthenticated","useIsAuthenticated","loadUserData","userData","callbackId","addEventCallback","eventType","EventType","LOGIN_SUCCESS","LOGOUT_SUCCESS","HANDLE_REDIRECT_END","removeEventCallback","Notification","Tag","RecordsInfo","pageIndex","pageSize","totalRows","endIdx","setEndIdx","endNumber","Pagination","pageCount","onPageChange","activeClassName","breakLabel","nextLabel","pageRangeDisplayed","previousLabel","disabledClassName","disabledLinkClassName","renderOnZeroPageCount","SvgSortSolid","SvgSortDownSolid","SvgSortUpSolid","sortIconStyle","css","SortIcon","SortSvg","SortDownIcon","SortDownSvg","SortUpIcon","SortUpSvg","tableStyle","removeWrapperMargin","minWidth","PaginationWrapper","Table","table","Th","th","customAlignment","customHeaderWidth","customHeaderMinWidth","Td","td","$cssMixin","Tr","tr","rowSelectionEnabled","isExpanded","ExpandedRow","ExpandedContent","TableHeader","thead","TableBody","tbody","isDense","showLastRowBorder","TableFooter","tfoot","TableFooterInfo","DEFAULT_TABLE_STYLE","transparentHeader","defaultPropsGetter","DataTable","gridId","columns","currentPageIndex","manualMode","onTableStateChange","onRowSelect","selectedRowIndex","disableSorting","initialSortBy","detailView","getCellProps","showFooter","showRecordsInfo","useTable","initialState","sortBy","disableMultiSort","manualSortBy","disableSortBy","manualPagination","useControlledState","newTableState","React","useMemo","useSortBy","useExpanded","usePagination","useRowSelect","getTableProps","getTableBodyProps","headerGroups","footerGroups","page","prepareRow","canPreviousPage","canNextPage","gotoPage","toggleAllRowsSelected","toggleRowSelected","CustomDetailView","customTableStyle","parseInt","headerGroup","getHeaderGroupProps","column","isSorted","customHeaderAlignment","getHeaderProps","getSortByToggleProps","canSort","isSortedDesc","row","getRowProps","rowId","original","handleRowSelection","cells","cell","colSpan","group","getFooterGroupProps","footerHidden","Footer","getFooterProps","sortByDateTimeFunc","rowA","rowB","desc","sortAlphanumericFunc","localeCompare","getColumns","Header","accessor","sortType","Cell","DateTime","fromISO","toLocaleString","dateStyle","timeStyle","hour12","DefaultInput","GridFilter","onSearchChange","searchValue","setSearchValue","setDebouncedSearch","useDebouncedCallback","trim","ev","val","SvgFileCsv","FileIcon","FileCsvSvg","ExportTableToCSV","tableData","log","filename","SvgFilePdf","FilePdfSvg","ExportTableToPDF","missionName","missionDate","doc","jsPDF","header2Text","header3Text","Date","currentMonthName","getMonth","fileName","replace","getUTCFullYear","email","content","startY","head","body","didDrawPage","internal","pageWidth","pageHeight","height","setFontSize","setTextColor","text","addImage","logo","imageSize","marginTop","getNumberOfPages","autoTable","save","ActionGroup","TableActions","ProfileTableExportFunctions","c","startPosition","endPosition","flightStart","flightEnd","h","TopPanel","UserLog","loadingError","setLoadingError","logData","setLogData","filtered","setFiltered","gridSearch","setGridSearch","gridData","regex","RegExp","normalize","match","Row","ProfileInfoWrapper","NameGrid","Name","TagWrapper","ErrorWrapper","ActionsWrapper","UserProfilePage","setUserData","firstname","surname","admin","getAreaOfInterest","getMapConfig","configName","deleteProject","delete","getProjectProcessingStatus","restartProject","getCoefficient","DefaultLoading","Map","crs","mapData","zoomedItemId","onSelectedMedia","isLoading","isGenerated","setGenerated","mapConfig","setMapConfig","GIS","Layer","getFeatureExtentByID","attribute","minx","miny","maxx","maxy","zoomToExtent","extent","property","properties","Projection","extendExtent","init","projection","Style","style","layer","Control","Interaction","view","setCallback","X","Y","radius","getScale","getFeaturesIDsInRadius","iDs","media","feature","setFeatureStyleByID","clear","removeFeatures","addFeatures","features","getLayerExtent","code","getProjectMultimedia","responseType","SvgCircleExclamationSolid","Img","img","ErrorIcon","ErrorSvg","ErrorMessage","Thumbnail","setData","showError","setShowError","getProjectThumbnail","bgSrcMill","bgSrc","MissingPreview","MediaThumbnail","modalStyle","overlay","flexDirection","bottom","ModalWrapper","ModalHeader","Title","ModalBody","ModalFooter","medium_bg","medium_text","FooterContent","CustomFooterContentWrapper","ButtonWrapper","Modal","modalId","isOpen","submitBtnLabel","cancelBtnLabel","cancelDisabled","submitDisabled","customFooterContent","onlyCloseBtn","customStyle","maxWidth","maxHeight","shouldCloseOnOverlayClick","shouldCloseOnEsc","onRequestClose","isClosable","ItemContent","MediaModal","setOpen","navigate","useNavigate","getIconStr","raised","SvgFasTriangleExclamation","WarningIcon","WarningSvg","DefaultButton","MediaGrid","onItemSelect","onItemZoom","processingError","hasGeometry","positionStyles","right","direction","Sidebar","visible","isVisible","setVisible","animating","setAnimating","setTimeout","SidebarWrapper","Checkbox","DefaultCheckbox","Filters","DataFilter","onTypeChange","single","panorama","video","mill","forest","typeValues","setTypeValues","setDebouncedType","handleTypeChange","prev","SvgAngleUp","OpenIcon","ArrowUpSvg","OpenPanelBtn","MapWrapper","GridWrapper","PanelWrapper","MediaMap","overviewData","setOverviewData","setZoomedItemId","gridTypeFilter","setGridTypeFilter","selectedItems","setSelectedItems","geometry","activeTypes","pickBy","tempData","processedActiveTypes","handleSelection","selectedId","LinkBtn","p","collapsed","Section","isCollapsible","defaultCollapsedState","setCollapsed","totalData","per_ha","healthy","healthy_pct","infested","infested_pct","dead","dead_pct","avg_height","avg_crown_diam","avg_bhd","avg_volume","SvgTrashCanSolid","DeleteIcon","TrashCanSvg","Actions","CompartmentDetailGrid","onDelete","onCalculate","setGridData","setTotalData","ItemWrapper","CompartmentList","switcher","tiled","layers","serverType","version","format","url","opacity","ENV","max","transition","DroneDetailContext","DroneDetailProvider","featuresData","setFeaturesData","selectedFeature","setSelectedFeature","deletedFeature","setDeletedFeature","selectedTool","setSelectedTool","unsavedChanges","setUnsavedChanges","contextData","useDroneDetailContext","SvgFalRuler","SvgFalRulerCombined","SvgFalEllipsisStroke","SvgFalObjectGroup","SvgFalHandPointer","SvgFasCircle","SvgFasTriangle","SvgFalTree","iconStyle","submenuIconStyle","MeasureDistanceIcon","MeasureDistanceSvg","MeasureAreaIcon","MeasureAreaSvg","MillAreaIcon","ObjectGroupSvg","ForestAreaIcon","ProfileGroundIcon","EllipsisStrokeSvg","SelectIcon","HandPointerSvg","SpruceIcon","TriangleSvg","PineIcon","BirchIcon","OtherIcon","DeadTreeIcon","CircleSvg","InfestedTreeIcon","HealthyTreeIcon","OtherHealthIcon","DeleteTreeIcon","DeleteSvg","TreeMenuIcon","TreeSvg","MenuItem","active","SubMenuItem","MenuWrapper","MillMapMenu","prevSelection","setPrevSelection","addFeature","featureId","area_m2","area_type","coefficient_def","coeficient","height_ground","id_project","isBox","log_length","profile_type","volume_coef_m3","volume_m3","setFeatureAttributeByID","window","addEventListener","Edit","commit","latestId","drawFeatures","getFeatureByID","incrementId","handleAddPolygon","handleAddLine","polygons","getFeatureIDsAtCoordinate","isEmpty","find","profileIds","strategy","tolerance","ForestMapMenu","selectedTreeAction","setTreeAction","handleAddTree","handleAddPoint","pointIds","getDefaultLinesCollection","MeasureMapMenu","projectData","lineData","areaData","pointData","geoserverKey","setGeoserverKey","areaOfInterest","setAreaOfInterest","profiles","setProfiles","areas","setAreas","getDefaultPointsCollection","points","setPoints","all","btoa","user","password","removeFeatureByID","addLayersToMap","DEMConfigCopy","structuredClone","DEMConfig","push","g","composition","detected","device","DeepLearning","DeepLearningHealth","addForestLabelLayers","customLayers","demBandData","bendsStatistic","b","band","demEnvData","getLayer","getSource","updateParams","l","redBandData","bands","greenBandData","blueBandData","envData","VIEWPARAMS","location_type","NotificationUnsavedChanges","onSave","ForestDetail","setAreaData","setPointData","scrollToElement","offset","duration","addTree","newFeature","tree","addCompartment","compartmentCalculation","compartment","compartments","DroneDetailWithContext","SurfaceChart","updateChart","layout","setLayout","ylabel","ylabelValue","pixel_size","distance","xlabel","xlabelValue","chartLayaut","font","family","xref","x","scene","xaxis","autorange","ticktext","tickvals","yaxis","autosize","z","reverse","ProfileChart","chart","setChart","labels","ground","profile","step","x_max","toFixed","y","fill","fillcolor","line","autotick","ticks","useResizeHandler","AutocompleteItem","highlighted","AutocompleteMenu","AutoComplete","onSelect","getItemValue","renderItem","renderInput","wrapperStyle","renderMenu","SvgFalChartArea","SvgFalRobot","SvgFalCircleExclamation","ProfileLineIcon","ChartAreaSvg","AreaIcon","ProfileAiIcon","RobotSvg","CircleExclamationSvg","getFeatureTypeIcon","featureType","profileType","ChangedCoefficientDetector","formState","useFormState","sum","ChangedFeatureDetector","restart","getFloatValue","tmpVal","String","isNaN","parseFloat","CheckBoxWrapper","OptionWrapper","BtnWrapper","CustomSingleValue","SingleValue","CustomSelectOption","Option","FeatureForm","onFormSubmit","onApplyChanges","configData","setConfigData","featureIdValues","setFeatureIdValues","previousProfiles","setPreviousProfiles","formFeature","setFormFeature","setDebouncedPrevProfiles","findPreviousFeature","selectedFeatureMap","logLength","woodType","definition","getPreviousFeatures","pristine","handleSubmit","hasSubmitErrors","form","clearable","handleApplyChanges","SvgAngleDown","IconStyle","DownIcon","ArrowDownSvg","UpIcon","RowExpandButton","getToggleRowExpandedProps","stopPropagation","toggleRowExpanded","TypeIconWrapper","onItemDelete","SvgFileExcel","ExportTableToXLSX","ExcelIcon","FileExcelSvg","worksheet","utils","json_to_sheet","workbook","book_new","book_append_sheet","writeFile","MillTableExportFunctions","heightGround","volume","volumeCoef","concat","cd","GridValues","ValueItem","RowDetailView","SvgCalculatorSimple","ai","area","CalculateIcon","CalculatorSvg","FeatureGrid","onCalculateAllFeatures","selectedRowIdx","setSelectedRowIdx","feature_type","t","col","ConfirmationModal","okBtnLabel","DefaultSidebarWrapper","FeatureFormWrapper","OpenSidebarBtn","ChartWrapper","MillDetail","sidebarVisible","setSidebarVisible","profileChartData","setProfileChartData","areaChartData","setAreaChartData","setLineData","setConfig","isModalOpen","setModalOpen","applyChanges","updatedFeature","calculateFeature","handleCalculateFeatures","calculatedFeatures","SinglePhotoDetail","imgData","setImgData","PanoramaDetail","sceneId","imageSource","autoLoad","VideoDetail","videoData","setVideoData","getVideoUrl","hash","controls","MenuDetailWraper","DetailMapWithContext","DetailMap","TAG_OPTIONS","TagMenu","tagId","tag","setTag","isDeleteAction","updateStatus","changMultimediaTag","menuPortal","base","MissingMapData","BasicMultimediaInformation","created","captured","coordinates","join","LoadingWrapper","UploadRefresh","uploadedImages","setUploadedImages","reuploaded","setReuploaded","getUploadedImages","uploadingFiles","reuploadPicture","originallyUploaded","newImages","dropFiles","EXIF","getData","pretty","u","getTag","image","logoSrc","ProcesssingCheck","processingStatus","setProcessingStatus","ProcessingCheckMultimedia","DeleteButton","BasicDroneInformation","location_name","pilot","datetime","img_count","ProjectDetailPage","setProjectData","projectStatus","setProjectStatus","useParams","getProjectDetail","projectStatusSetting","status_name","type_desc","LogoImg","Logo","PageWrapper","h1","LoginPage","inProgress","InteractionStatus","None","NotFoundPage","PrivateRoute","onlyAdmin","isAdminUser","SvgFaBars","SvgFaXmark","MobileMenuWrapper","MenuToggleWrapper","MenuIcon","BarsSvg","XMarkSvg","MenuItems","onLinkClick","SvgFaCircleUser","SvgFaArrowRightFromBracket","UserIcon","UserSvg","LogoutIcon","LogoutSvg","ProfileLink","HeaderWrapper","header","LogoWrapper","MainNav","nav","ActionLink","RightNav","ProfileActions","isMobileOpen","setMobileOpen","accounts","closeMobileMenu","logoutRedirect","Layout","validateFormValues","validationSchema","country","AddUserForm","handleFormSubmit","LOCATION_TYPE_VALUES","AddLocationForm","sridValues","setSridValues","s","AddUserLocationForm","locationValues","userValues","CAMERA_TYPE_VALUES","projectID","cameraType","PublishProject","CalculatePrediction","ExportPilotsLocations","users","headerNames","o","k","add","Set","headerNamesLocations","ProjectRestart","AdminPage","setUserValues","setLocationValues","toString","userLocation","areaId","workspace","HR","hr","Help","href","millInventory","rel","millImg","forestInventory","droneMultimedia","multispectralImg","droneAppNews","whatsNew","droneMillInventory","workingWithDroneForestApp","multispectralBestPractices","droneAppRecommendation","landingImg","AppWrapper","App","element","PublicClientApplication","library","fal","fas","dom","watch","setAppElement","ReactDOM","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.fa9c7b34.chunk.js","sourcesContent":["export const API_URL = process.env.REACT_APP_API_URL || '';\r\n\r\n// MSAL configuration\r\nexport const MSAL_CLIENT_ID = process.env.REACT_APP_MSAL_CLIENT_ID || '';\r\nexport const MSAL_AUTHORITY = process.env.REACT_APP_MSAL_AUTHORITY || '';\r\nexport const MSAL_REDIRECT_URI = process.env.REACT_APP_MSAL_REDIRECT_URI || 'http://localhost:3000/';\r\n\r\nexport const PROJECT_TYPES = [\r\n 'single',\r\n 'panorama',\r\n 'video',\r\n 'mill',\r\n 'forest',\r\n];\r\n\r\nexport const MULTIMEDIA_TYPES = [\r\n 'single',\r\n 'panorama',\r\n 'video',\r\n]\r\nexport const DRONE_TYPES = [\r\n 'mill',\r\n 'forest'\r\n]\r\n\r\n// map feature attributes\r\nexport const FEATURE_KEY_ID = 'id';\r\nexport const FEATURE_KEY_NAME = 'name';","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { LogLevel } from \"@azure/msal-browser\";\r\nimport { MSAL_CLIENT_ID, MSAL_AUTHORITY, MSAL_REDIRECT_URI } from \".\";\r\n\r\n/**\r\n * Configuration object to be passed to MSAL instance on creation.\r\n * For a full list of MSAL.js configuration parameters, visit:\r\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md\r\n */\r\nexport const msalConfig = {\r\n auth: {\r\n clientId: MSAL_CLIENT_ID,\r\n authority: MSAL_AUTHORITY,\r\n redirectUri: MSAL_REDIRECT_URI,\r\n postLogoutRedirectUri: '/',\r\n },\r\n cache: {\r\n cacheLocation: \"localStorage\", // This configures where your cache will be stored\r\n storeAuthStateInCookie: false, // Set this to \"true\" if you are having issues on IE11 or Edge\r\n },\r\n system: {\r\n loggerOptions: {\r\n loggerCallback: (level, message, containsPii) => {\r\n if (containsPii) {\r\n return;\r\n }\r\n switch (level) {\r\n case LogLevel.Error:\r\n console.error(message);\r\n return;\r\n case LogLevel.Info:\r\n console.info(message);\r\n return;\r\n case LogLevel.Verbose:\r\n console.debug(message);\r\n return;\r\n case LogLevel.Warning:\r\n console.warn(message);\r\n return;\r\n // no default\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Scopes you add here will be prompted for user consent during sign-in.\r\n * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request.\r\n * For more information about OIDC scopes, visit:\r\n * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes\r\n */\r\nexport const loginRequest = {\r\n scopes: [\r\n \"api://1985cb79-5bc7-4563-adb1-e1b9dbb809b1/drone\",\r\n \"User.Read\"\r\n ]\r\n};\r\n","export const HOME = '/';\r\nexport const LOGIN = '/login';\r\nexport const ERROR = '/error';\r\n;\r\nexport const DRONE_MAP = '/map';\r\nexport const UPLOADING = '/uploading';\r\nexport const USER_PROFILE = '/user-profile';\r\nexport const PROJECT_DETAIL = '/project/detail/:id';\r\nexport const ADMIN = '/admin';\r\nexport const HELP = '/help';","import styled from 'styled-components';\r\n\r\n// export const FullWidthContainer = styled.div`\r\n// width: 100%;\r\n// margin: 0 auto;\r\n// padding-right: 15px;\r\n// padding-left: 15px;\r\n// position: relative;\r\n// `;\r\n\r\nexport const Container = styled.div`\r\n width: 100%;\r\n margin: 0 auto;\r\n padding-right: 15px;\r\n padding-left: 15px;\r\n position: relative;\r\n\r\n max-width: ${({isFullWidth}) => isFullWidth ? 'none' : '1200px'};\r\n /* @media (min-width: 576px) {\r\n width: 540px;\r\n }\r\n\r\n @media (min-width: 768px) {\r\n width: 620px;\r\n }\r\n\r\n @media (min-width: 992px) {\r\n width: 890px;\r\n }\r\n\r\n @media (min-width: 1200px) { */\r\n /* width: 1070x; */\r\n /* width: 1200px;\r\n } */\r\n\r\n /* @media (min-width: 1400px) {\r\n width: 1200px; */\r\n /* width: 1290px; */\r\n /* } */\r\n\r\n /* @media (min-width: 1600px) {\r\n width: 1520px;\r\n } */\r\n`;\r\n\r\nexport const ContainerWrapper = styled.div`\r\n padding: 30px 0;\r\n\r\n @media (min-width: 992px) {\r\n padding: 50px 0;\r\n }\r\n`;","export default __webpack_public_path__ + \"static/media/landing_map.634df0dc.jpg\";","export default __webpack_public_path__ + \"static/media/landing_forest.49c0b5a0.jpg\";","export default __webpack_public_path__ + \"static/media/documents.8cd35804.jpg\";","import { Link } from 'react-router-dom';\r\nimport styled from 'styled-components';\r\nimport { DRONE_MAP, UPLOADING, HELP} from '../../Routes';\r\nimport { Container } from '../Container';\r\nimport mapImg from '../../assets/images/landing_map.jpg';\r\nimport forestImg from '../../assets/images/landing_forest.jpg';\r\nimport helpImg from '../../assets/images/documents.jpg';\r\nimport './Landing.css';\r\n\r\nconst Grid = styled.div`\r\n display: grid;\r\n grid-template-columns: 1fr;\r\n padding: 80px 0 40px 0;\r\n column-gap: 1rem;\r\n row-gap: 1rem;\r\n\r\n @media screen and (min-width: 768px) {\r\n grid-template-columns: 1fr 1fr;\r\n padding: 40px 0;\r\n }\r\n\r\n @media screen and (min-width: 992px) {\r\n grid-template-columns: 1fr 1fr 1fr;\r\n }\r\n`;\r\n\r\nconst Item = styled(Link)`\r\n display: block;\r\n\r\n img {\r\n width: 100%;\r\n height: 220px;\r\n object-fit: cover;\r\n display: block;\r\n }\r\n\r\n span {\r\n display: block;\r\n background-color: ${({theme}) => theme.colors.bg_gray};\r\n color: ${({theme}) => theme.colors.heading_dark};\r\n padding: 1.5rem;\r\n font-size: 1.25rem;\r\n font-weight: bold;\r\n border-top: 5px solid ${({theme}) => theme.colors.brand_green};\r\n transition: all .5s ease;\r\n }\r\n\r\n &:hover {\r\n span {\r\n border-top: 5px solid ${({theme}) => theme.colors.brand_blue};\r\n }\r\n }\r\n`;\r\n\r\nfunction LandingPage() {\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Drone Platform

\r\n

by Stora Enso

\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \"Map\"\r\n Map\r\n \r\n\r\n \r\n \"Upload\"\r\n Uploading\r\n \r\n\r\n \r\n \"Help\"\r\n Help\r\n \r\n\r\n \r\n \r\n\r\n
\r\n )\r\n};\r\n\r\nexport default LandingPage;","export const KEYS = {\r\n AUTH: 'auth',\r\n };\r\n\r\nexport const set = (key, data) => localStorage.setItem(key, data);\r\n\r\nexport const get = key => localStorage.getItem(key);\r\n\r\nexport const remove = key => localStorage.removeItem(key);\r\n\r\n","import {\r\n KEYS, get, set, remove\r\n} from './localStorage';\r\n\r\nconst toJSON = (str) => {\r\n try {\r\n return JSON.parse(str);\r\n } catch (e) {\r\n // ignore\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const getSession = () => toJSON(get(KEYS.AUTH));\r\n\r\n\r\nexport const storeToken = token => {\r\n set(\r\n KEYS.AUTH,\r\n JSON.stringify({\r\n ...getSession(),\r\n token,\r\n }),\r\n );\r\n}\r\n\r\nexport const storeSession = userData => {\r\n set(\r\n KEYS.AUTH,\r\n JSON.stringify({\r\n ...getSession(),\r\n ...userData,\r\n }),\r\n );\r\n};\r\n\r\nexport const clearSession = () => {\r\n remove(KEYS.AUTH);\r\n}","import { getSession } from '../utils/auth';\r\n\r\nfunction useAuth() {\r\n return {\r\n ...getSession(),\r\n };\r\n}\r\nexport default useAuth;","import { node, string, func, bool, oneOf } from 'prop-types';\r\nimport styled from 'styled-components';\r\n\r\nconst IconWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n width: 18px;\r\n height: 18px;\r\n margin-right: 8px;\r\n\r\n svg {\r\n height: auto;\r\n fill: ${({theme}) => theme.colors.white};\r\n }\r\n`;\r\n\r\nconst kindStyles = ({ theme, kind, isFlat }) =>\r\n ({\r\n primary: `\r\n color: ${isFlat ? theme.colors.information : theme.colors.white};\r\n background-color: ${theme.colors.brand_blue};\r\n\r\n &:hover:not(:disabled) {\r\n color: ${isFlat ? theme.colors.link_hover : theme.colors.white};\r\n background-color: ${isFlat ? 'transparent' : theme.colors.link};\r\n }\r\n\r\n &:active,\r\n &:hover:active,\r\n &:focus:active {\r\n background-color: #0d6ca7;\r\n }\r\n\r\n &:focus {\r\n box-shadow: 0 0 0 0.2em rgba(17, 139, 214, 0.25);\r\n }\r\n `,\r\n secondary: `\r\n color: #696969;\r\n background-color: transparent;\r\n border: 1px solid #696969;\r\n\r\n svg {\r\n fill: #696969;\r\n }\r\n\r\n &:hover:not(:disabled) {\r\n color: ${isFlat ? '#9599a3' : theme.colors.white};\r\n background-color: ${isFlat ? 'transparent' : '#9599a3'};\r\n\r\n svg {\r\n fill: ${theme.colors.white};\r\n }\r\n }\r\n\r\n &:active,\r\n &:hover:active,\r\n &:focus:active {\r\n background-color: #515151;\r\n color: ${isFlat ? '#515151' : theme.colors.white};\r\n border: 1px solid transparent;\r\n\r\n svg {\r\n fill: ${theme.colors.white};\r\n }\r\n }\r\n\r\n &:focus {\r\n box-shadow: 0 0 0 0.2em rgba(32, 32, 32, 0.25);\r\n }\r\n `,\r\n attention: `\r\n color: ${isFlat ? theme.colors.attention : theme.colors.heading_dark};\r\n background-color: ${theme.colors.brand_yellow};\r\n\r\n svg {\r\n fill: ${theme.colors.heading_dark};\r\n }\r\n\r\n &:hover:not(:disabled) {\r\n color: ${isFlat ? '#fed648' : theme.colors.heading_dark};\r\n background-color: ${isFlat ? 'transparent' : '#fed648'};\r\n }\r\n\r\n &:active,\r\n &:hover:active,\r\n &:focus:active {\r\n background-color: #d2a502;\r\n }\r\n\r\n &:focus {\r\n box-shadow: 0 0 0 0.2em rgba(253, 200, 10, 0.25);\r\n }\r\n `,\r\n positive: `\r\n color: ${isFlat ? theme.colors.positive : theme.colors.white};\r\n background-color: ${theme.colors.positive};\r\n\r\n &:hover:not(:disabled) {\r\n color: ${isFlat ? '#8dc753' : theme.colors.white};\r\n background-color: ${isFlat ? 'transparent' : '#8dc753'};\r\n }\r\n\r\n &:active,\r\n &:hover:active,\r\n &:focus:active {\r\n background-color: #4d8713;\r\n }\r\n\r\n &:focus {\r\n box-shadow: 0 0 0 0.2em rgba(103, 180, 25, 0.25);\r\n }\r\n `,\r\n negative: `\r\n color: ${isFlat ? theme.colors.negative : theme.colors.white};\r\n background-color: ${theme.colors.negative};\r\n\r\n &:hover:not(:disabled) {\r\n color: ${isFlat ? '#e34b4b' : theme.colors.white};\r\n background-color: ${isFlat ? 'transparent' : '#e34b4b'};\r\n }\r\n\r\n &:active,\r\n &:hover:active,\r\n &:focus:active {\r\n background-color: #a01021;\r\n }\r\n\r\n &:focus {\r\n box-shadow: 0 0 0 0.2em rgba(207, 20, 43, 0.25);\r\n }\r\n `,\r\n }[kind]);\r\n\r\nconst buttonSizes = ({ size }) =>\r\n ({\r\n sm: `\r\n font-size: 0.8rem;\r\n `,\r\n md: `\r\n ${IconWrapper} {\r\n width: 20px;\r\n height: 20px;\r\n margin-right: 12px;\r\n }\r\n `,\r\n lg: `\r\n font-size: 1.25rem;\r\n\r\n ${IconWrapper} {\r\n width: 22px;\r\n height: 22px;\r\n margin-right: 12px;\r\n }\r\n `,\r\n}[size]);\r\n\r\n\r\nconst StyledButton = styled.button`\r\n display: inline-flex;\r\n font-weight: 700;\r\n align-items: center;\r\n justify-content: center;\r\n border: 1px solid transparent;\r\n cursor: pointer;\r\n padding: 0 1em;\r\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, padding 0.15s ease-in-out, box-shadow 0.15s ease-in-out, transform 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\r\n\r\n span {\r\n padding: 0.75em 0;\r\n }\r\n\r\n &:disabled {\r\n opacity: 0.25;\r\n }\r\n\r\n ${(props) => kindStyles(props)};\r\n ${(props) => buttonSizes(props)};\r\n\r\n ${({ isFlat }) =>\r\n isFlat &&\r\n `\r\n background: none;\r\n border: 1px solid transparent;\r\n\r\n &:hover {\r\n background-color: transparent;\r\n }\r\n `};\r\n`;\r\n\r\nfunction Button({className, isFlat, children, icon, onClick, ...rest}) {\r\n\r\n return (\r\n \r\n {\r\n icon && !isFlat && (\r\n \r\n {icon}\r\n \r\n )\r\n }\r\n {children}\r\n \r\n );\r\n}\r\n\r\nButton.propTypes = {\r\n children: node.isRequired,\r\n kind: oneOf(['primary', 'secondary', 'attention', 'positive', 'negative']),\r\n size: oneOf(['sm', 'md', 'lg']),\r\n isFlat: bool,\r\n onClick: func.isRequired,\r\n icon: node,\r\n className: string,\r\n}\r\n\r\nButton.defaultProps = {\r\n kind: 'primary',\r\n size: 'md',\r\n isFlat: false,\r\n icon: null,\r\n className: '',\r\n}\r\n\r\nexport default styled(Button)``;","import { number, string, func, bool, } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport Button from '../../../StoraEnsoComponents/Button';\r\n\r\nconst Wrapper = styled.div`\r\n position: sticky;\r\n bottom: 0;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n padding-top: 48px;\r\n padding-bottom: 16px;\r\n background: linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,1) 65%, rgba(255,255,255,0) 100%);\r\n z-index: 20;\r\n\r\n ${Button} {\r\n margin: 4px;\r\n width: 80%;\r\n }\r\n\r\n @media screen and (min-width: 576px) {\r\n flex-direction: row;\r\n\r\n ${Button} {\r\n margin: 0 8px;\r\n width: 200px;\r\n }\r\n }\r\n`;\r\n\r\nfunction NavigationButtons({\r\n currentStep,\r\n isNextDisabled,\r\n nextBtnLabel,\r\n onBackClick,\r\n onNextClick,\r\n}) {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nNavigationButtons.propTypes = {\r\n currentStep: number.isRequired,\r\n isNextDisabled: bool.isRequired,\r\n nextBtnLabel: string,\r\n onBackClick: func,\r\n onNextClick: func.isRequired,\r\n};\r\n\r\nNavigationButtons.defaultProps = {\r\n nextBtnLabel: 'Next',\r\n onBackClick: () => {},\r\n}\r\n\r\nexport default NavigationButtons;","import styled from 'styled-components';\r\n\r\nexport const TitleWrapper = styled.div`\r\n text-align: center;\r\n margin-bottom: 32px;\r\n\r\n p:first-child {\r\n font-size: 1.75rem;\r\n font-weight: 500;\r\n margin-bottom: 0;\r\n\r\n span {\r\n text-transform: uppercase;\r\n }\r\n }\r\n\r\n p:last-child {\r\n font-size: 1.25rem;\r\n }\r\n\r\n @media screen and (min-width: 768px) {\r\n margin-bottom: 48px;\r\n\r\n p:first-child {\r\n font-size: 1.875rem;\r\n }\r\n\r\n p:last-child {\r\n font-size: 1.375rem;\r\n }\r\n }\r\n`;\r\n\r\nexport const FormWrapper = styled.div`\r\n display: grid;\r\n grid-template-columns: 1fr;\r\n column-gap: 24px;\r\n row-gap: 24px;\r\n max-width: 900px;\r\n margin-left: auto;\r\n margin-right: auto;\r\n\r\n @media screen and (min-width: 768px) {\r\n grid-template-columns: 1fr 1fr;\r\n }\r\n`;\r\n\r\nexport const FormSection = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n`;\r\n\r\nexport const Content = styled.div`\r\n background-color: ${({theme}) => theme.colors.bg_gray_light};\r\n padding: 16px;\r\n height: 100%;\r\n`;\r\n\r\nexport const SectionLabel = styled.span`\r\n display: block;\r\n font-size: 16px;\r\n font-weight: bold;\r\n margin: 0 16px;\r\n`;","import { number, bool, } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport { useForm, useField } from 'react-final-form';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport useAuth from '../../../../hooks/useAuth';\r\nimport NavigationButtons from '../NavigationButtons';\r\nimport { TitleWrapper } from '../common';\r\n\r\nconst MULTIMEDIA_TYPE_VALUES = [\r\n {\r\n id: 'single',\r\n label: 'Single photo',\r\n icon: 'images'\r\n },\r\n {\r\n id: 'panorama',\r\n label: 'Panorama',\r\n icon: 'street-view'\r\n },\r\n {\r\n id: 'video',\r\n label: 'Video',\r\n icon: 'video'\r\n },\r\n];\r\n\r\nconst ALL_TYPE_VALUES = [\r\n ...MULTIMEDIA_TYPE_VALUES,\r\n {\r\n id: 'forest',\r\n label: 'Forest inventory',\r\n icon: 'trees'\r\n },\r\n {\r\n id: 'mill',\r\n label: 'Mill inventory',\r\n icon: 'industry'\r\n }\r\n];\r\n\r\nconst Wrapper = styled.div`\r\n min-height: 350px;\r\n`;\r\n\r\nconst Grid = styled.div`\r\n display: grid;\r\n grid-template-columns: 1fr;\r\n column-gap: 8px;\r\n row-gap: 8px;\r\n /* max-width: 1100px; */\r\n margin-left: auto;\r\n margin-right: auto;\r\n\r\n @media screen and (min-width: 576px) {\r\n grid-template-columns: repeat(2, 1fr);\r\n }\r\n\r\n @media screen and (min-width: 768px) {\r\n grid-template-columns: repeat(3, 1fr);\r\n /* column-gap: 16px; */\r\n }\r\n\r\n @media screen and (min-width: 992px) {\r\n grid-template-columns: ${({showOnlyMultimedia}) => showOnlyMultimedia ? 'repeat(3, 1fr)' : 'repeat(5, 1fr)'};\r\n column-gap: 16px;\r\n }\r\n`;\r\n\r\nconst IconWrapper = styled.div`\r\n font-size: 32px;\r\n margin-right: 16px;\r\n\r\n @media screen and (min-width: 768px) {\r\n font-size: 44px;\r\n margin-right: 0;\r\n margin-bottom: 16px;\r\n }\r\n`;\r\n\r\nconst Item = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n background-color: ${({theme, isSelected}) => isSelected ? theme.colors.brand_tint_yellow : theme.colors.bg_gray_light};\r\n padding: 8px;\r\n cursor: pointer;\r\n transition: background-color 500ms ease;\r\n\r\n &:hover {\r\n background-color: ${({theme}) => theme.colors.brand_tint_yellow};\r\n }\r\n\r\n span {\r\n text-transform: uppercase;\r\n text-align: center;\r\n }\r\n\r\n @media screen and (min-width: 768px) {\r\n flex-direction: column;\r\n padding: 16px;\r\n }\r\n`;\r\n\r\n// TODO\r\n// - mobile view\r\n// - fix video icon\r\nfunction UploadType({\r\n currentStep,\r\n hasValidationErrors,\r\n}) {\r\n const { locations } = useAuth();\r\n const { change } = useForm();\r\n const {\r\n input: { value: selectedType },\r\n } = useField(`uploadType`, {\r\n subscription: { value: true },\r\n });\r\n\r\n const uploadTypeOptions = (!locations || locations.length === 0) ? MULTIMEDIA_TYPE_VALUES : ALL_TYPE_VALUES;\r\n return (\r\n \r\n \r\n

Welcome to drone media upload

\r\n

\r\n First of all please select appropriate upload type.\r\n

\r\n
\r\n\r\n \r\n {\r\n uploadTypeOptions.map(({id, label, icon}) => (\r\n {\r\n change('uploadType', id);\r\n change('currentStep', currentStep + 1);\r\n }}>\r\n \r\n \r\n \r\n {label}\r\n \r\n ))\r\n }\r\n \r\n change('currentStep', currentStep + 1)} />\r\n
\r\n );\r\n}\r\n\r\nUploadType.propTypes = {\r\n currentStep: number.isRequired,\r\n hasValidationErrors: bool.isRequired,\r\n}\r\n\r\nexport default UploadType;","import { bool, node, string } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport classNames from 'classnames';\r\n\r\nconst Wrapper = styled.small`\r\n color: #696969;\r\n font-size: 0.75rem;\r\n\r\n &.se-form-help--invalid {\r\n color: #cf142b;\r\n }\r\n`;\r\n\r\nfunction Message({ children, isError, className }) {\r\n const componentClass = classNames(\r\n className,\r\n 'se-form-help', {\r\n 'se-form-help--invalid': isError,\r\n });\r\n\r\n return (\r\n {children}\r\n );\r\n}\r\n\r\nMessage.propTypes = {\r\n children: node.isRequired,\r\n isError: bool,\r\n className: string,\r\n};\r\n\r\nMessage.defaultProps = {\r\n isError: false,\r\n className: '',\r\n};\r\n\r\nexport default styled(Message)``;","export const DRONE_VALUES = [\r\n { id: 1, drone: \"Phantom Pro 4 Multispectral\" },\r\n { id: 2, drone: \"Phantom Pro 4 ver.2\" },\r\n { id: 3, drone: \"Phantom Pro 4\" },\r\n { id: 4, drone: \"Phantom 4\" },\r\n { id: 5, drone: \"Mavic Pro 2\" },\r\n { id: 6, drone: \"Parrot Anafi AI\" }\r\n];\r\n\r\nexport const FILE_TYPE_VALUES = [\r\n { uploadType: \"single\", fileType: \"image/*\" },\r\n { uploadType: \"panorama\", fileType: \"image/*\" },\r\n { uploadType: \"video\", fileType: \"video/mp4\" }\r\n];","import styled from 'styled-components';\r\n\r\nexport default styled.input`\r\n border: 1px solid #9599a3;\r\n color: #515151;\r\n font-size: 1rem;\r\n padding: 0.75em;\r\n width: 100%;\r\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, padding 0.15s ease-in-out, box-shadow 0.15s ease-in-out, transform 0.15s ease-in-out;\r\n\r\n &::placeholder {\r\n color: #d6d9df;\r\n }\r\n\r\n &:hover {\r\n border-color: #c3e2f5;\r\n }\r\n\r\n &:focus {\r\n border-color: #118bd6;\r\n box-shadow: 0 0 0 0.2em rgba(17, 139, 214, 0.25);\r\n outline: none;\r\n }\r\n\r\n ${({ theme, touched, invalid }) =>\r\n touched &&\r\n invalid &&\r\n `\r\n border-color: ${theme.colors.negative};\r\n\r\n &:hover {\r\n border-color: ${theme.colors.negative_bg};\r\n }\r\n\r\n &:focus {\r\n border-color: ${theme.colors.negative_bg};\r\n box-shadow: 0 0 0 0.2em rgb(207 20 43 / 25%);\r\n }\r\n `}\r\n;`","export default {\r\n colors: {\r\n // brand colors\r\n brand_yellow: '#FDC80A',\r\n brand_green: '#67B419',\r\n brand_blue: '#118BD6',\r\n\r\n // brand tints\r\n brand_tint_yellow: '#FEE384',\r\n brand_tint_green: '#B3D98C',\r\n brand_tint_blue: '#88C5EA',\r\n\r\n // background colors\r\n bg_gray_dark: '#D6D9DF',\r\n bg_gray: '#EDEFF5',\r\n bg_gray_light: '#F8F8F9',\r\n bg_white: '#FFFFFF',\r\n\r\n // text colors\r\n heading_light: '#FFFFFF',\r\n heading_dark: '#202020',\r\n text_light: '#FFFFFF',\r\n text_dark: '#515151',\r\n link: '#4DA8E1',\r\n link_hover: '#88C5EA',\r\n\r\n // semantic colors\r\n information: '#118BD6',\r\n information_bg: '#C3E2F5',\r\n negative: '#CF142B',\r\n negative_bg: '#F3C4CA',\r\n attention: '#FDC80A',\r\n attention_bg: '#FEE384',\r\n positive: '#67B419',\r\n positive_bg: '#D9ECC5',\r\n\r\n // forms\r\n input_border: '#9599a3',\r\n\r\n // common\r\n white: '#ffffff',\r\n }\r\n }","import { string, arrayOf, shape, bool, number, oneOfType } from 'prop-types';\r\nimport ReactSelect from 'react-select';\r\nimport themeObj from '../../config/theme';\r\n\r\nfunction Select ({id, options, placeholder, disabled, touched, invalid, customComponents, ...rest}) {\r\n\r\n return (\r\n {\r\n return ({\r\n ...provided,\r\n position: 'relative',\r\n overflow: 'hidden',\r\n padding: '0.25rem',\r\n backgroundColor: state.isDisabled ? themeObj.colors.bg_gray : themeObj.colors.bg_white,\r\n cursor: 'default',\r\n outline: 'none',\r\n border: `1px solid ${state.isDisabled ? themeObj.colors.bg_gray_dark : (touched && invalid ? themeObj.colors.negative : themeObj.colors.input_border)}`,\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n borderRadius: 0,\r\n \"&:hover\": {\r\n border: `1px solid ${touched && invalid ? themeObj.colors.negative_bg : themeObj.colors.information_bg} `,\r\n }\r\n })},\r\n valueContainer: (provided) => ({\r\n ...provided,\r\n padding: 0,\r\n lineHeight: 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexWrap: 'wrap',\r\n }),\r\n input: (provided) => ({\r\n ...provided,\r\n margin: '0 0.25rem',\r\n }),\r\n menu: (provided) => ({\r\n ...provided,\r\n position: 'absolute',\r\n left: '0',\r\n top: '3em',\r\n width: '100%',\r\n backgroundColor: themeObj.colors.bg_white,\r\n border: `1px solid ${themeObj.colors.brand_blue}`,\r\n zIndex: 25,\r\n userSelect: 'none',\r\n borderRadius: 0,\r\n }),\r\n option: (provided, state) => ({\r\n ...provided,\r\n lineHeight: 1,\r\n padding: '0.75rem',\r\n backgroundColor: state.isSelected ? 'rgba(195, 226, 245, 0.3)' : 'inherit',\r\n color: themeObj.colors.text_dark,\r\n \"&:hover\": {\r\n backgroundColor: 'rgba(195, 226, 245, 0.3)',\r\n },\r\n }),\r\n singleValue: (provided, state) => ({\r\n ...provided,\r\n color: state.isDisabled ? themeObj.colors.bg_gray_dark : themeObj.colors.text_dark,\r\n }),\r\n indicatorSeparator: (provided) => ({\r\n ...provided,\r\n display: 'none',\r\n }),\r\n dropdownIndicator: (provided) => ({\r\n ...provided,\r\n padding: '7px',\r\n color: themeObj.colors.text_dark,\r\n \"&:hover\": {\r\n color: themeObj.colors.text_dark,\r\n }\r\n }),\r\n }}\r\n options={options}\r\n components={customComponents}\r\n placeholder={placeholder}\r\n isDisabled={disabled}\r\n {...rest}\r\n />\r\n );\r\n}\r\n\r\nSelect.propTypes = {\r\n id: string.isRequired,\r\n options: arrayOf(\r\n shape({\r\n value: oneOfType([string, number]),\r\n label: oneOfType([string, number]),\r\n })\r\n ).isRequired,\r\n placeholder: string,\r\n disabled: bool,\r\n touched: bool.isRequired,\r\n invalid: bool.isRequired,\r\n customComponents: shape({}),\r\n};\r\n\r\nSelect.defaultProps = {\r\n placeholder: 'Select...',\r\n disabled: false,\r\n customComponents: {},\r\n};\r\n\r\nexport default Select;","import styled from 'styled-components';\r\n\r\nconst TextAreaComponent = styled.textarea`\r\n ${({ theme, touched, invalid }) =>\r\n touched &&\r\n invalid &&\r\n `\r\n border-color: ${theme.colors.negative};\r\n\r\n &:hover {\r\n border-color: ${theme.colors.negative_bg};\r\n }\r\n\r\n &:focus {\r\n border-color: ${theme.colors.negative_bg};\r\n box-shadow: 0 0 0 0.2em rgb(207 20 43 / 25%);\r\n }\r\n `}\r\n`;\r\n\r\nfunction TextArea ({...props}) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default TextArea;","import styled from 'styled-components';\r\nimport Button from '../StoraEnsoComponents/Button';\r\n\r\nexport const InputWrapper = styled.div`\r\n margin-bottom: 14px;\r\n\r\n label,\r\n input {\r\n display: block;\r\n }\r\n\r\n label {\r\n margin-bottom: 0.5rem;\r\n }\r\n`;\r\n\r\nexport const FormSection = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n`;\r\n\r\nexport const Content = styled.div`\r\n background-color: ${({theme}) => theme.colors.bg_gray_light};\r\n padding: 16px;\r\n height: 100%;\r\n`;\r\n\r\nexport const SectionLabel = styled.span`\r\n display: block;\r\n font-size: 16px;\r\n font-weight: bold;\r\n margin: 0 16px;\r\n`;\r\n\r\nexport const ButtonsWrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-end;\r\n\r\n ${Button} {\r\n margin-left: 8px;\r\n }\r\n`;\r\n\r\nexport const SelectWrapper = styled.div`\r\n margin-bottom: 14px;\r\n\r\nlabel,\r\ninput {\r\n display: block;\r\n text-align: left;\r\n width: auto;\r\n}\r\n\r\nlabel {\r\n margin-bottom: 0.5rem;\r\n}\r\n`;\r\n","import { Field } from 'react-final-form';\r\nimport Message from '../../Forms/message';\r\nimport { FormWrapper, FormSection, SectionLabel, Content } from '../Wizard/common';\r\nimport { DRONE_VALUES } from '../configValues';\r\nimport Input from '../../Forms/input';\r\nimport Select from '../../Forms/select';\r\nimport TextArea from '../../Forms/textarea';\r\nimport { InputWrapper } from '../../Forms/common';\r\n\r\nfunction UploadingMultimedia({ uploadType }) {\r\n\r\n return (\r\n \r\n \r\n Project Information\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n\r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n Flight Information\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n\r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n options['drone']}\r\n getOptionValue={(options) => options['id']}\r\n {...input}\r\n {...meta}\r\n onChange={value => {\r\n input.onChange(value);\r\n }}\r\n />\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n\r\n {\r\n uploadType === 'video' && (\r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n )}\r\n\r\n \r\n \r\n \r\n )\r\n};\r\n\r\nexport default UploadingMultimedia;","import axios from 'axios';\r\nimport { InteractionRequiredAuthError } from \"@azure/msal-browser\";\r\nimport { msalInstance } from '../index';\r\nimport { API_URL } from '../config';\r\nimport { loginRequest } from '../config/authConfig';\r\nimport { storeToken } from './auth';\r\n\r\nconst axiosInstance = axios.create({\r\n baseURL: API_URL,\r\n});\r\n\r\naxiosInstance.interceptors.request.use(async function (config) {\r\n\r\n const allActiveAccounts = msalInstance.getAllAccounts();\r\n\r\n const request = {\r\n ...loginRequest,\r\n account: allActiveAccounts.length === 0 ? null : allActiveAccounts[0],\r\n }\r\n\r\n const tokenResponse = await msalInstance.acquireTokenSilent(request).catch(err => {\r\n if (err instanceof InteractionRequiredAuthError) {\r\n // fallback to interaction when silent call fails\r\n return msalInstance.acquireTokenRedirect(request);\r\n } else {\r\n msalInstance.loginRedirect(loginRequest).catch(e => {\r\n console.error('Login ERROR: ', e);\r\n });\r\n }\r\n\r\n });\r\n storeToken(tokenResponse.accessToken);\r\n config.headers['Authorization'] = `Bearer ${tokenResponse.accessToken}`;\r\n\r\n return config;\r\n}, function (error) {\r\n return Promise.reject(error);\r\n});\r\n\r\nexport default axiosInstance;","import { string } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport classNames from 'classnames';\r\n\r\nconst Wrapper = styled.div`\r\n display: block;\r\n`;\r\n\r\nconst Input = styled.input``;\r\n\r\nfunction CheckBox({ className, id, label, ...inputProps}) {\r\n const componentClass = classNames(\r\n className,\r\n 'se-checkbox',\r\n 'se-checkbox--md'\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nCheckBox.propTypes = {\r\n className: string,\r\n label: string.isRequired,\r\n};\r\n\r\nCheckBox.defaultProps = {\r\n className: '',\r\n}\r\n\r\nexport default styled(CheckBox)``;","import { bool, string } from 'prop-types';\r\nimport ReactDatePicker from 'react-datepicker';\r\nimport Input from './input';\r\nimport 'react-datepicker/dist/react-datepicker.css';\r\n\r\nfunction DatePicker({ placeholder, disabled, ...rest}) {\r\n return (\r\n
\r\n rest.onChange(date.toISOString)}\r\n customInput={\r\n \r\n }\r\n {...rest} />\r\n
\r\n );\r\n}\r\n\r\nDatePicker.propTypes = {\r\n placeholder: string,\r\n disabled: bool,\r\n}\r\n\r\nDatePicker.defaultProps = {\r\n placeholder: 'Select date',\r\n disabled: false,\r\n}\r\n\r\nexport default DatePicker;","import styled, { keyframes } from 'styled-components';\r\n\r\nconst animation = keyframes`\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n`;\r\n\r\nconst Spinner = styled.div`\r\n position: relative;\r\n border-bottom: 0.1em solid;\r\n border-left: 0.1em solid transparent;\r\n border-radius: 50%;\r\n border-right: 0.1em solid transparent;\r\n border-top: 0.1em solid transparent;\r\n height: 1em;\r\n text-indent: -9999em;\r\n -ms-transform: translateZ(0);\r\n -webkit-animation: ${animation} 1.1s infinite linear;\r\n transform: translateZ(0);\r\n width: 1em;\r\n overflow: hidden;\r\n font-size: 1rem;\r\n\r\n &:before {\r\n content: \"\";\r\n position: absolute;\r\n transform: translateX(-0.5em);\r\n top: -0.1em;\r\n border-radius: 50%;\r\n height: 1em;\r\n width: 1em;\r\n border: 0.1em solid ${({ theme }) => theme.colors.text_dark};\r\n opacity: 0.25;\r\n }\r\n`;\r\n\r\nexport default Spinner;","import { string } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport Spinner from '../StoraEnsoComponents/Spinner';\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-start;\r\n align-items: center;\r\n padding: 1rem 0;\r\n margin-bottom: 1rem;\r\n\r\n p {\r\n margin-left: 1rem;\r\n margin-bottom: 0;\r\n }\r\n`;\r\n\r\nfunction Loading ({className, message}) {\r\n return (\r\n \r\n \r\n

{message}

\r\n
\r\n );\r\n}\r\n\r\nLoading.propTypes = {\r\n message: string,\r\n className: string,\r\n}\r\n\r\nLoading.defaultProps = {\r\n message: 'Loading...',\r\n className: '',\r\n}\r\n\r\nexport default styled(Loading)``;","import React from 'react';\r\nimport { useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Field, useField, useForm } from 'react-final-form';\r\nimport Select from '../../Forms/select';\r\nimport Message from '../../Forms/message';\r\nimport { getLocations } from '../../../services/uploadingService';\r\nimport { FormWrapper, FormSection, SectionLabel, Content } from '../Wizard/common';\r\nimport Input from '../../Forms/input';\r\nimport TextArea from '../../Forms/textarea';\r\nimport CheckBox from '../../Forms/checkbox';\r\nimport DatePicker from '../../Forms/datepicker';\r\nimport { InputWrapper } from '../../Forms/common';\r\nimport Loading from '../../Loading';\r\n\r\nconst FullWidthSection = styled(FormSection)`\r\n\r\n ${CheckBox}:not(:last-child) {\r\n margin-bottom: 16px;\r\n }\r\n\r\n @media screen and (min-width: 768px) {\r\n grid-column: span 2;\r\n }\r\n`;\r\n\r\nconst InfoWrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n padding: 2rem 1rem;\r\n`;\r\n\r\nfunction UploadingDrone() {\r\n const [locations, setLocations] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n\r\n const { change } = useForm();\r\n\r\n const {\r\n input: { value: selectedType },\r\n } = useField(`uploadType`, {\r\n subscription: { value: true },\r\n });\r\n\r\n // TODO\r\n // - load data in parent component??\r\n // - handle loading/error state\r\n useEffect(() => {\r\n getLocations()\r\n .then(data => {\r\n if(data){\r\n if(selectedType ===\"forest\"){\r\n setLocations(data.filter(({type}) => [\"forestRGB\",\"forestMulti\"].includes(type)))\r\n return;\r\n }\r\n setLocations(data.filter(({type}) => type === selectedType))}\r\n }\r\n )\r\n .then(() => setLoading(false));\r\n\r\n }, []);\r\n\r\n if(loading) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n return (\r\n\r\n \r\n \r\n Project Information\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n Flight Information\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n options['name']}\r\n getOptionValue={(options) => options['id']}\r\n placeholder=\"Select location\"\r\n {...input}\r\n {...meta}\r\n onChange={value => {\r\n input.onChange(value);\r\n }}\r\n />\r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n\r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n Settings\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n )}\r\n \r\n { (selectedType !== \"forest\") && (\r\n <>\r\n \r\n {({ input, meta }) => (\r\n {\r\n const checked = e.target.checked;\r\n if(checked) {\r\n change('removeContinuousChip', false);\r\n }\r\n input.onChange(e)\r\n }}\r\n label=\"Remove stacking chip conveyor\"\r\n />\r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n {\r\n const checked = e.target.checked;\r\n if(checked) {\r\n change('removeStackingChip', false);\r\n }\r\n input.onChange(e)\r\n }}\r\n label=\"Remove continuous chip conveyor\"\r\n />\r\n )}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default UploadingDrone;","import axios from '../utils/axios';\r\n\r\nexport const getLocations = () => {\r\n return axios.get('users/locations').then(response => response.data);\r\n}\r\n\r\nexport const getSrids = () => {\r\n return axios.get('uploads/srids').then(response => response.data);\r\n}\r\nexport const createProject = (data) => {\r\n return axios.post('projects/create', data).then(response => response.data);\r\n}\r\nexport const createMultimediaProject = data => {\r\n return axios.post('projects/create/multimedia', data).then(response => response.data);\r\n}\r\nexport const createMultimediaSubProject = data => {\r\n return axios.post('/projects/create/multimediasubproject', data).then(response => response.data);\r\n}\r\nexport const uploadImage = (file, id, first, uploadProgressFunc) => {\r\n return axios.post(\r\n `uploads/uploadPicture/${file.name}/${id}/${first}/${file.size}`, file,\r\n {\r\n headers: {'content-type': 'image/jpeg', 'Accept': 'application/json'},\r\n onUploadProgress: uploadProgressFunc,\r\n });\r\n}\r\nexport const uploadMultimedia = (file, type, id, subProjId, uploadProgressFunc) => {\r\n return axios.post(\r\n `/uploads/${type}/${file.path}/${id}/${file.size}/${subProjId}`, file,\r\n {\r\n headers: {'content-type': 'application/octet-stream', 'Accept': 'application/json'},\r\n onUploadProgress: uploadProgressFunc,\r\n });\r\n}\r\nexport const uploaded = (id,imageCount) => {\r\n return axios.get(`uploads/uploadDone/${id}/${imageCount}`).then(response => response.data);\r\n}\r\nexport const multimediaUploaded = subProjId => {\r\n return axios.get(`/uploads/done/${subProjId}`).then(response => response.data);\r\n}\r\nexport const getUploadedImages = (id) => {\r\n return axios.get(`uploads/uploadedImages/${id}`).then(response => response.data);\r\n}\r\nexport const reuploadPicture = (file, id, uploadProgressFunc) => {\r\n return axios.post(\r\n `uploads/reuploadPicture/${file.name}/${id}/${file.size}`,file,\r\n {\r\n headers: {'content-type': 'image/jpeg', 'Accept': 'application/json'},\r\n onUploadProgress: uploadProgressFunc,\r\n });\r\n}\r\nexport const reuploadDone = (data) => {\r\n return axios.post(`uploads/reuploadDone`,data).then(response => response.data);\r\n}\r\nexport const processingImage = subProjId => {\r\n return axios.get(`multimediaapi/singleimgengine/v1/processsingleimg?subprojectid=${subProjId}`).then(response => response.data);\r\n}\r\n","import { number, bool, } from 'prop-types';\r\nimport { useForm, useField } from 'react-final-form';\r\nimport UploadingMultimedia from '../../UploadingMultimedia';\r\nimport UploadingDrone from '../../UploadingDrone';\r\nimport NavigationButtons from '../NavigationButtons';\r\nimport { TitleWrapper } from '../common';\r\nimport { MULTIMEDIA_TYPES, DRONE_TYPES } from '../../../../config';\r\n\r\nconst getTypeStr = type => {\r\n switch(type) {\r\n case 'single':\r\n return 'Single photo';\r\n case 'panorama':\r\n return 'Panorama';\r\n case 'video':\r\n return 'Video';\r\n case 'forest':\r\n return 'Forest inventory';\r\n case 'mill':\r\n return 'Mill inventory';\r\n default:\r\n return '-';\r\n }\r\n}\r\n\r\nfunction UploadInformation({\r\n currentStep,\r\n hasValidationErrors\r\n}) {\r\n const { change } = useForm();\r\n const {\r\n input: { value: selectedType },\r\n } = useField(`uploadType`, {\r\n subscription: { value: true },\r\n });\r\n\r\n return (\r\n <>\r\n \r\n

Selected media type - {getTypeStr(selectedType)}

\r\n

\r\n Please provide basic information about the media to be uploaded.\r\n

\r\n
\r\n {\r\n MULTIMEDIA_TYPES.includes(selectedType) &&\r\n \r\n }\r\n {\r\n DRONE_TYPES.includes(selectedType) &&\r\n \r\n }\r\n change('currentStep', currentStep - 1)}\r\n onNextClick={() => change('currentStep', currentStep + 1)} />\r\n \r\n );\r\n}\r\n\r\nUploadInformation.propTypes = {\r\n currentStep: number.isRequired,\r\n hasValidationErrors: bool.isRequired,\r\n}\r\n\r\nexport default UploadInformation;","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgUploadSolid(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 448 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M384 352v64c0 17.67-14.33 32-32 32H96c-17.67 0-32-14.33-32-32v-64c0-17.67-14.33-32-32-32s-32 14.33-32 32v64c0 53.02 42.98 96 96 96h256c53.02 0 96-42.98 96-96v-64c0-17.67-14.33-32-32-32S384 334.3 384 352zM201.4 9.375l-128 128c-12.51 12.51-12.49 32.76 0 45.25c12.5 12.5 32.75 12.5 45.25 0L192 109.3V320c0 17.69 14.31 32 32 32s32-14.31 32-32V109.3l73.38 73.38c12.5 12.5 32.75 12.5 45.25 0s12.5-32.75 0-45.25l-128-128C234.1-3.125 213.9-3.125 201.4 9.375z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgUploadSolid);\nexport default __webpack_public_path__ + \"static/media/upload-solid.6b046dec.svg\";\nexport { ForwardRef as ReactComponent };","import { useEffect } from 'react';\r\nimport { string, oneOf, func } from 'prop-types';\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\n\r\nfunction NotificationToast({toastId, message, kind, onClose}) {\r\n\r\n useEffect(() => {\r\n if(message) {\r\n toast(message, {\r\n toastId,\r\n type: kind,\r\n autoClose: kind !== 'error',\r\n onClose: onClose,\r\n });\r\n }\r\n }, [message, kind]);\r\n\r\n return null;\r\n}\r\n\r\nNotificationToast.propTypes = {\r\n toastId: string.isRequired,\r\n message: string,\r\n kind: oneOf(['success', 'error']),\r\n onClose: func,\r\n}\r\n\r\nNotificationToast.defaultProps = {\r\n message: undefined,\r\n kind: 'success',\r\n onClose: undefined,\r\n}\r\n\r\nexport default NotificationToast;","import { number, string, arrayOf } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport { useDropzone } from 'react-dropzone';\r\nimport { nanoid } from 'nanoid';\r\nimport Button from '../../StoraEnsoComponents/Button';\r\nimport { ReactComponent as UploadSvg } from '../../../assets/icons/upload-solid.svg';\r\nimport NotificationToast from '../../NotificationToast';\r\nimport { useState } from 'react';\r\n\r\nconst UploadIcon = styled(UploadSvg)`\r\n width: 28px;\r\n height: auto;\r\n fill: ${({ theme }) => theme.colors.text_dark};\r\n margin-bottom: 1rem;\r\n`;\r\n\r\nconst ActiveOverlay = styled.div`\r\n background-color: ${({ theme }) => theme.colors.bg_gray_light};\r\n display: flex;\r\n padding: 1rem;\r\n align-items: center;\r\n justify-content: center;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n z-index: 100;\r\n`;\r\n\r\nconst DropzoneBorder = styled.div`\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n text-align: center;\r\n padding: 24px;\r\n border-width: 3px;\r\n border-style: ${({ isDragActive }) => (isDragActive ? 'solid' : 'dashed')};\r\n border-color: red;\r\n border-color: ${({ theme }) => theme.colors.bg_gray_dark};\r\n`;\r\n\r\nconst Separator = styled.span`\r\n font-weight: bold;\r\n margin-bottom: 1rem;\r\n`;\r\n\r\n// TODO\r\n// - handle file duplicity\r\nfunction FileUpload({ maxFileSize, acceptedFileTypes, onChange }) {\r\n\r\n const [actionResult,setActionResult] = useState(null)\r\n const onDrop = (acceptedFiles) => {\r\n if(acceptedFiles.length===0){\r\n acceptedFiles=[]\r\n setActionResult({\r\n kind: 'error',\r\n message: 'You selected unsupported file type. \\n' +\r\n 'Only JPG and mp4 file are supported. \\n' +\r\n 'Max file size is 2 Gb. \\n'\r\n\r\n });\r\n }\r\n const videoCheck = acceptedFiles.filter(f=>f.type==='video/mp4')\r\n if (videoCheck.length>1){\r\n acceptedFiles=[]\r\n setActionResult({\r\n kind: 'error',\r\n message: 'Only one video file is enabled \\n'\r\n\r\n });\r\n }\r\n onChange(acceptedFiles.map(file => ({\r\n id: nanoid(),\r\n file,\r\n uploadStatus: {\r\n status: 'idle',\r\n loaded: 0,\r\n }\r\n })));\r\n }\r\n\r\n const {isDragActive, open, getRootProps, getInputProps} = useDropzone({\r\n accept: acceptedFileTypes,\r\n maxSize: maxFileSize,\r\n noClick: true,\r\n onDrop: onDrop,\r\n });\r\n\r\n return (\r\n <>\r\n setActionResult(null)}\r\n />\r\n\r\n \r\n {isDragActive && (\r\n \r\n Drop files here.\r\n \r\n )}\r\n \r\n \r\n

Drag and drop files here

\r\n OR\r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nFileUpload.propTypes = {\r\n maxFileSize: number,\r\n acceptedFileTypes: arrayOf(string),\r\n};\r\n\r\nFileUpload.defaultProps = {\r\n maxFileSize: 2000000000,\r\n acceptedFileTypes: [\r\n 'image/*','video/mp4'\r\n ],\r\n};\r\n\r\nexport default FileUpload;","export default __webpack_public_path__ + \"static/media/material-icons.ed0605a6.eot\";","export default __webpack_public_path__ + \"static/media/material-icons.83fa6d5c.ttf\";","export default __webpack_public_path__ + \"static/media/material-icons.c34f1719.woff\";","export default __webpack_public_path__ + \"static/media/material-icons.4cae095e.svg\";","import styled from 'styled-components';\r\nimport { string, node, func } from 'prop-types';\r\nimport MaterialIconsEot from '../assets/fonts/material-icons.eot';\r\nimport MaterialIconsTtf from '../assets/fonts/material-icons.ttf';\r\nimport MaterialIconsWoff from '../assets/fonts/material-icons.woff';\r\nimport MaterialIconsSvg from '../assets/fonts/material-icons.svg';\r\n\r\nconst IconWrapper = styled.i`\r\n @font-face {\r\n font-family: \"material-icons\";\r\n src: url(${MaterialIconsEot});\r\n src: url(${MaterialIconsEot}) format(\"embedded-opentype\"), url(${MaterialIconsTtf}) format(\"truetype\"), url(${MaterialIconsWoff}) format(\"woff\"), url(${MaterialIconsSvg}) format(\"svg\");\r\n font-weight: normal;\r\n font-style: normal;\r\n }\r\n\r\n font-family: \"material-icons\";\r\n speak: none;\r\n font-style: normal;\r\n font-weight: normal;\r\n font-variant: normal;\r\n text-transform: none;\r\n line-height: 1;\r\n display: inline-block;\r\n white-space: nowrap;\r\n word-wrap: normal;\r\n direction: ltr;\r\n /* Enable Ligatures ================ */\r\n letter-spacing: 0;\r\n -webkit-font-feature-settings: \"liga\";\r\n -moz-font-feature-settings: \"liga=1\";\r\n -moz-font-feature-settings: \"liga\";\r\n -ms-font-feature-settings: \"liga\" 1;\r\n font-feature-settings: \"liga\";\r\n -webkit-font-variant-ligatures: discretionary-ligatures;\r\n font-variant-ligatures: discretionary-ligatures;\r\n /* Better Font Rendering =========== */\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n\r\n font-size: 1em;\r\n font-weight: bold;\r\n transform: scale(1.25);\r\n`;\r\n\r\nfunction Icon({children, className, onClick}) {\r\n return (\r\n {children}\r\n )\r\n}\r\n\r\nIcon.propTypes = {\r\n children: node.isRequired,\r\n className: string,\r\n onClick: func,\r\n}\r\n\r\nIcon.defaultProps = {\r\n className: '',\r\n onClick: undefined,\r\n}\r\n\r\nexport default styled(Icon)``;","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgPhotoVideo(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 640 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M608 0H160a32 32 0 0 0-32 32v96h160V64h192v320h128a32 32 0 0 0 32-32V32a32 32 0 0 0-32-32zM232 103a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm352 208a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm-168 57H32a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM96 224a32 32 0 1 1-32 32 32 32 0 0 1 32-32zm288 224H64v-32l64-64 32 32 128-128 96 96z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPhotoVideo);\nexport default __webpack_public_path__ + \"static/media/photo-video.4048ef28.svg\";\nexport { ForwardRef as ReactComponent };","import { useEffect } from 'react';\r\nimport { arrayOf, shape, bool, func } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport filesize from 'filesize';\r\nimport Icon from '../../StoraEnsoComponents/Icon';\r\nimport { ReactComponent as ImageSvg } from '../../../assets/icons/photo-video.svg';\r\n\r\nconst progressBarColor = ({ theme, status }) =>\r\n ({\r\n running: `\r\n background-color: ${theme.colors.attention};\r\n `,\r\n failed: `\r\n background-color: ${theme.colors.negative};\r\n `,\r\n finished: `\r\n background-color: ${theme.colors.positive};\r\n `,\r\n}[status]);\r\n\r\nconst ImageIcon = styled(ImageSvg)`\r\n width: 30px;\r\n height: 30px;\r\n fill: ${({theme}) => theme.colors.bg_gray_light};\r\n margin-bottom: 8px;\r\n`;\r\n\r\nconst MissingPreviewWrapper = styled.div`\r\n position: relative;\r\n\r\n div {\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n display: flex;\r\n width: 100%;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n color: ${({theme}) => theme.colors.bg_gray_light};\r\n\r\n span {\r\n display: none;\r\n }\r\n\r\n @media screen and (min-width: 1200px) {\r\n span {\r\n display: block;\r\n }\r\n }\r\n }\r\n`;\r\n\r\nconst Grid = styled.div`\r\n display: grid;\r\n grid-template-columns: repeat(2, 1fr);\r\n column-gap: 8px;\r\n row-gap: 8px;\r\n\r\n @media screen and (min-width: 576px) {\r\n grid-template-columns: repeat(3, 1fr);\r\n }\r\n @media screen and (min-width: 768px) {\r\n grid-template-columns: repeat(5, 1fr);\r\n }\r\n`;\r\n\r\nconst Value = styled.span`\r\n display: block;\r\n font-size: 0.875rem;\r\n text-align: center;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n`;\r\n\r\nconst ProgressBar = styled.div`\r\n width: ${({ total }) => `${total}%`};\r\n ${(props) => progressBarColor(props)};\r\n height: 5px;\r\n transition: width 800ms ease;\r\n`;\r\n\r\nconst ProgressValue = styled.span`\r\n display: block;\r\n text-align: right;\r\n font-size: 12px;\r\n\r\n span.failed {\r\n color: ${({theme}) => theme.colors.negative};\r\n }\r\n`;\r\n\r\nconst ThumbnailWrapper = styled.div`\r\n background-color: ${({theme}) => theme.colors.bg_gray_light};\r\n padding: 8px;\r\n\r\n`;\r\n\r\nconst ImageWrapper = styled.div`\r\n position: relative;\r\n margin-bottom: 8px;\r\n\r\n img {\r\n width: 100%;\r\n height: auto;\r\n display: block;\r\n }\r\n`;\r\n\r\nconst CloseIcon = styled(Icon)`\r\n position: absolute;\r\n top: 8px;\r\n right: 8px;\r\n color: ${({theme}) => theme.colors.white};\r\n cursor: pointer;\r\n`;\r\n\r\nfunction UploadPreview({ items, removeDisabled, onRemove }) {\r\n\r\n const getProgressLabel = ({status, loaded, size}) => {\r\n\r\n switch(status) {\r\n case 'running':\r\n return `${Math.round((100 * loaded) / size)}%`;\r\n case 'failed':\r\n return Failed!;\r\n case 'finished':\r\n return 'Uploaded';\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n return () => items.forEach(item => URL.revokeObjectURL(item.preview));\r\n }, []);\r\n\r\n return (\r\n \r\n {\r\n items.map((item, idx) => (\r\n \r\n \r\n {\r\n !removeDisabled && (\r\n onRemove(idx)}>close\r\n )}\r\n {\r\n ['image/jpeg', 'image/png'].includes(item.file.type) ? (\r\n \"Image\"\r\n ) : (\r\n \r\n \"Image\"\r\n
\r\n \r\n No preview available\r\n
\r\n
\r\n )\r\n }\r\n
\r\n {item.file.name}\r\n { filesize(item.file.size, {round: 0}) }\r\n {\r\n item.uploadStatus && item.uploadStatus.status !== 'idle' && (\r\n <>\r\n \r\n {getProgressLabel({status: item.uploadStatus.status, loaded: item.uploadStatus.loaded, size: item.file.size})}\r\n \r\n )\r\n }\r\n
\r\n ))\r\n }\r\n
\r\n );\r\n}\r\n\r\nUploadPreview.propTypes = {\r\n items: arrayOf(shape({})).isRequired,\r\n removeDisabled: bool,\r\n onRemove: func,\r\n}\r\n\r\nUploadPreview.defaultProps = {\r\n removeDisabled: false,\r\n onRemove: undefined,\r\n}\r\n\r\nexport default UploadPreview;","export default __webpack_public_path__ + \"static/media/bg-missing-preview.c54add4f.jpg\";","export default __webpack_public_path__ + \"static/media/bg-missing-preview-mill.e7fd6c4b.jpg\";","import { number, bool } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport { useForm, useField } from 'react-final-form';\r\nimport FileUpload from '../../FileUpload';\r\nimport UploadPreview from '../../UploadPreview';\r\nimport NavigationButtons from '../NavigationButtons';\r\nimport { TitleWrapper } from '../common';\r\nimport bgForestSrc from '../../../../assets/images/bg-missing-preview.jpg';\r\nimport bgMillSrc from '../../../../assets/images/bg-missing-preview-mill.jpg';\r\nimport { MULTIMEDIA_TYPES } from '../../../../config';\r\n\r\nconst Wrapper = styled.div`\r\n max-width: 1000px;\r\n margin: 0 auto;\r\n`;\r\n\r\nconst Separator = styled.div`\r\n margin-bottom: 16px;\r\n`;\r\n\r\nfunction MediaUpload({\r\n currentStep,\r\n hasValidationErrors\r\n}) {\r\n\r\n const { change, submit } = useForm();\r\n\r\n const {\r\n input: { value: uploadType },\r\n } = useField(`uploadType`, {\r\n subscription: { value: true },\r\n });\r\n\r\n const {\r\n input: { value: files },\r\n } = useField(`files`, {\r\n subscription: { value: true },\r\n });\r\n\r\n const getImagePreview = file => {\r\n if(MULTIMEDIA_TYPES.includes(uploadType)) {\r\n return ['image/jpeg', 'image/png'].includes(file.type) ? URL.createObjectURL(file) : bgForestSrc;\r\n }\r\n\r\n return uploadType === 'mill' ? bgMillSrc : bgForestSrc;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n

Media files upload

\r\n

\r\n Please select project media files to be uploaded.\r\n

\r\n
\r\n \r\n \r\n change('files', [\r\n ...files,\r\n ...data.map(item => ({\r\n ...item,\r\n preview: getImagePreview(item.file),\r\n }))\r\n ]\r\n )} />\r\n\r\n \r\n\r\n {\r\n files.length > 0 && (\r\n {\r\n change('files', [\r\n ...files.slice(0, idx),\r\n ...files.slice(idx + 1),\r\n ]);\r\n }} />\r\n )}\r\n\r\n \r\n\r\n {\r\n change('files', []);\r\n change('currentStep', currentStep - 1);\r\n }}\r\n onNextClick={submit} />\r\n \r\n );\r\n}\r\n\r\n\r\nMediaUpload.propTypes = {\r\n currentStep: number.isRequired,\r\n hasValidationErrors: bool.isRequired,\r\n}\r\n\r\nexport default MediaUpload;","import { node } from 'prop-types';\r\nimport styled from 'styled-components';\r\n\r\nconst SectionWrapper = styled.div`\r\n background-color: ${({theme}) => theme.colors.white};\r\n box-shadow: rgb(214 217 223) 0px 0px 4px;\r\n margin-bottom: 1.5rem;\r\n padding: 1.5rem 2rem;\r\n position: relative;\r\n`;\r\n\r\nfunction BasicSection({ children }) {\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nBasicSection.propTypes = {\r\n children: node.isRequired,\r\n};\r\n\r\nBasicSection.defaultProps = {\r\n}\r\n\r\nexport default BasicSection;","import { number, string, bool, } from 'prop-types';\r\nimport styled from 'styled-components';\r\n\r\nconst Divider = styled.div`\r\n flex: 1 1 auto;\r\n padding: 0 16px;\r\n display: none;\r\n\r\n span {\r\n display: block;\r\n border: 1px solid ${({ theme }) => theme.colors.bg_gray};\r\n }\r\n\r\n @media screen and (min-width: 768px) {\r\n display: block;\r\n }\r\n`;\r\n\r\nconst Bullet = styled.span`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n background-color: ${({theme}) => theme.colors.bg_gray_dark};\r\n color: ${({theme}) => theme.colors.white};\r\n border-radius: 50px;\r\n width: 32px;\r\n height: 32px;\r\n font-weight: bold;\r\n margin-right: 16px;\r\n`;\r\n\r\nconst Label = styled.span`\r\n color: ${({theme}) => theme.colors.bg_gray_dark};\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-start;\r\n align-items: center;\r\n\r\n &:not(:last-child) {\r\n margin-bottom: 16px;\r\n }\r\n\r\n ${({theme, isActive}) => isActive &&\r\n `\r\n ${Bullet} {\r\n background-color: ${theme.colors.brand_blue};\r\n }\r\n\r\n ${Label} {\r\n color: ${theme.colors.text_dark};\r\n font-weight: bold;\r\n }\r\n `};\r\n\r\n @media screen and (min-width: 768px) {\r\n &:not(:last-child) {\r\n margin-bottom: 0;\r\n }\r\n }\r\n`;\r\n\r\nfunction StepperItem({\r\n className,\r\n stepNumber,\r\n isActive,\r\n isLastStep,\r\n label,\r\n}) {\r\n return (\r\n <>\r\n \r\n \r\n {stepNumber}\r\n \r\n \r\n \r\n {\r\n !isLastStep && (\r\n \r\n \r\n \r\n )\r\n }\r\n \r\n );\r\n}\r\n\r\nStepperItem.propTypes = {\r\n className: string,\r\n stepNumber: number.isRequired,\r\n isActive: bool.isRequired,\r\n isLastStep: bool.isRequired,\r\n label: string.isRequired,\r\n};\r\n\r\nStepperItem.defaultProps = {\r\n className: '',\r\n}\r\n\r\nexport default styled(StepperItem)``;","import { arrayOf, shape, number, string, bool } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport StepperItem from './stepperItem';\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n margin-bottom: 32px;\r\n\r\n @media screen and (min-width: 768px) {\r\n flex-direction: row;\r\n align-items: center;\r\n }\r\n`;\r\n\r\nfunction Stepper({ className, currentStep, isComplete, items }) {\r\n return (\r\n \r\n {items.map(({ stepNumber, label }) => (\r\n \r\n ))}\r\n \r\n );\r\n}\r\n\r\nStepper.propTypes = {\r\n className: string,\r\n currentStep: number.isRequired,\r\n isComplete: bool,\r\n items: arrayOf(shape({\r\n className: string,\r\n stepNumber: number.isRequired,\r\n label: string.isRequired,\r\n })).isRequired,\r\n};\r\n\r\nStepper.defaultProps = {\r\n className: '',\r\n isComplete: false,\r\n}\r\n\r\nexport default Stepper;","import { setIn } from 'final-form';\r\nimport { object, string, array} from 'yup';\r\nimport { DRONE_TYPES, MULTIMEDIA_TYPES } from '../../config'\r\n\r\nconst STEP_1 = {\r\n uploadType: string()\r\n .nullable(true)\r\n .required(),\r\n};\r\n\r\n// TODO\r\n// - project date proper validation\r\n// - validate input length\r\n// - files validation\r\nconst STEP_2 = {\r\n projectName: string()\r\n .nullable(true)\r\n .required('Project name is required'),\r\n projectDescription: string()\r\n .nullable(true)\r\n .when('uploadType',(uploadType, schema) =>\r\n DRONE_TYPES.includes(uploadType) ? schema.required('Project description is required') : schema\r\n ),\r\n projectDate: string()\r\n .nullable(true)\r\n .when('uploadType',(uploadType, schema) =>\r\n DRONE_TYPES.includes(uploadType) ? schema.required('Project date is required') : schema\r\n ),\r\n drone: string()\r\n .nullable(true)\r\n .when('uploadType',(uploadType, schema) =>\r\n DRONE_TYPES.includes(uploadType) ? schema.required('Drone is required') : schema\r\n ),\r\n flightName: string()\r\n .nullable(true)\r\n .when('uploadType',(uploadType, schema) =>\r\n MULTIMEDIA_TYPES.includes(uploadType) ? schema.required('Flight name is required') : schema\r\n ),\r\n flightPurpose: string()\r\n .nullable(true)\r\n .when('uploadType',(uploadType, schema) =>\r\n DRONE_TYPES.includes(uploadType) ? schema.required('Flight purpose is required') : schema\r\n ),\r\n location: object().shape({})\r\n .nullable(true)\r\n .when('uploadType',(uploadType, schema) =>\r\n DRONE_TYPES.includes(uploadType) ? schema.required('Location is required') : schema\r\n ),\r\n realEstate: string()\r\n .nullable(true)\r\n .when('uploadType',(uploadType, schema) =>\r\n uploadType === 'video' ? schema.required('Real estate is required') : schema\r\n ),\r\n}\r\n\r\nconst STEP_3 = {\r\n files: array()\r\n .required()\r\n .min(1, 'min 1'),\r\n};\r\n\r\nconst SCHEMA_1 = object({\r\n ...STEP_1,\r\n});\r\n\r\nconst SCHEMA_2 = object({\r\n ...STEP_2,\r\n});\r\n\r\nconst SCHEMA_3 = object({\r\n ...STEP_3,\r\n});\r\n\r\nexport const VALIDATION_SCHEMAS = [\r\n null,\r\n SCHEMA_1,\r\n SCHEMA_2,\r\n SCHEMA_3,\r\n];\r\n\r\nexport const validateFormValues = () => async (\r\n values,\r\n) => {\r\n let formSchema = VALIDATION_SCHEMAS[values.currentStep];\r\n\r\n return formSchema\r\n .validate(values, {\r\n abortEarly: false,\r\n context: {},\r\n })\r\n .then(() =>\r\n // everything ok, return an empty response\r\n Promise.resolve(),\r\n )\r\n .catch((err) => {\r\n // build an object that resembles the form state, with\r\n // error messages as values\r\n const errors = err.inner.reduce(\r\n (formError, innerError) =>\r\n setIn(formError, innerError.path, innerError.message),\r\n {},\r\n );\r\n\r\n // return a resolved promise with the error object\r\n return Promise.resolve(errors);\r\n });\r\n};\r\n","import { createMultimediaSubProject } from '../../services/uploadingService';\r\n\r\nconst getUploadTypeId = uploadType => {\r\n switch (uploadType) {\r\n case 'single':\r\n return 1;\r\n case 'panorama':\r\n return 2;\r\n case 'video':\r\n return 3;\r\n default:\r\n return -1;\r\n }\r\n}\r\n\r\nexport const createMultimediaSubprojectRequest = ({projectId, formData }) => {\r\n const { uploadType, flightName, note, droneType, realEstate } = formData;\r\n\r\n return createMultimediaSubProject({\r\n projectId: projectId,\r\n name: flightName,\r\n description: note,\r\n type: getUploadTypeId(uploadType),\r\n drone: droneType.drone,\r\n re_code: realEstate\r\n });\r\n}","import React, { createContext, useContext, useState, useCallback } from 'react';\r\nimport findIndex from 'lodash.findindex';\r\nimport { MULTIMEDIA_TYPES } from '../../config';\r\nimport { uploadMultimedia, processingImage, multimediaUploaded, createMultimediaProject } from '../../services/uploadingService';\r\nimport { createMultimediaSubprojectRequest } from './uploadingUtils';\r\n\r\nconst UploadingContext = createContext();\r\n\r\nexport function UploadingProvider({children}) {\r\n const [submitted, setSubmitted] = useState(false);\r\n const [submitting, setSubmitting] = useState(false);\r\n const [submittingAction, setSubmittingAction] = useState(null);\r\n const [uploadFiles, setUploadFiles] = useState([]);\r\n const [error, setError] = useState(null);\r\n const [success, setSuccess] = useState(null);\r\n\r\n const { Provider } = UploadingContext;\r\n\r\n const uploadingData = {\r\n submitted,\r\n setSubmitted,\r\n submitting,\r\n setSubmitting,\r\n submittingAction,\r\n setSubmittingAction,\r\n files: uploadFiles,\r\n setUploadFiles,\r\n success,\r\n setSuccess,\r\n error,\r\n setError,\r\n }\r\n\r\n return {children};\r\n}\r\n\r\nexport const useUploadingMedia = () => useContext(UploadingContext);","import styled from 'styled-components';\r\nimport { useForm } from 'react-final-form';\r\nimport UploadPreview from '../UploadPreview';\r\nimport Spinner from '../../StoraEnsoComponents/Spinner';\r\nimport { useUploadingMedia } from '../uploadingContext';\r\nimport Button from '../../StoraEnsoComponents/Button';\r\n\r\nconst Wrapper = styled.div`\r\n max-width: 1000px;\r\n margin: 0 auto;\r\n`;\r\n\r\nconst SpinnerWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n margin-bottom: 2rem;\r\n\r\n span {\r\n display: block;\r\n margin: 16px auto;\r\n font-size: 1.375rem;\r\n }\r\n`;\r\n\r\nconst ResultWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n margin-bottom: 2rem;\r\n`;\r\n\r\nconst Result = styled.div`\r\n padding: 16px 32px;\r\n margin: 0 auto;\r\n text-align: center;\r\n background-color: ${({theme, result}) => result === 'positive' ? theme.colors.positive_bg : theme.colors.negative_bg};\r\n margin-bottom: 2rem;\r\n\r\n @media screen and (min-width: 768px) {\r\n min-width: 600px;\r\n }\r\n`;\r\n\r\nfunction UploadProgress() {\r\n const {\r\n submitting,\r\n setSubmitted,\r\n submittingAction,\r\n setSubmittingAction,\r\n setUploadFiles,\r\n files,\r\n success,\r\n setError,\r\n setSuccess,\r\n } = useUploadingMedia();\r\n\r\n const { reset } = useForm();\r\n\r\n const handleResetWizard = () => {\r\n reset();\r\n setSubmitted(false);\r\n setSubmittingAction(null);\r\n setUploadFiles([]);\r\n setError(null);\r\n setSuccess(null);\r\n }\r\n\r\n return (\r\n \r\n {submitting && (\r\n \r\n \r\n {submittingAction}\r\n \r\n )}\r\n\r\n {\r\n success && (\r\n \r\n \r\n {success}\r\n \r\n \r\n \r\n )\r\n }\r\n \r\n \r\n );\r\n}\r\n\r\nexport default UploadProgress;","import React from 'react';\r\nimport styled from 'styled-components';\r\nimport findIndex from 'lodash.findindex';\r\nimport { Form } from 'react-final-form';\r\nimport UploadType from './Wizard/UploadType';\r\nimport UploadInformation from './Wizard/UploadInformation';\r\nimport MediaUpload from './Wizard/MediaUpload';\r\nimport { ContainerWrapper, Container } from '../Container';\r\nimport BasicSection from '../Section/basicSection';\r\nimport DefaultStepper from '../Stepper';\r\nimport { validateFormValues } from './validation';\r\nimport { MULTIMEDIA_TYPES } from '../../config';\r\nimport { DRONE_VALUES } from './configValues';\r\nimport {\r\n createProject,\r\n createMultimediaProject,\r\n uploadMultimedia,\r\n uploadImage,\r\n multimediaUploaded,\r\n processingImage,\r\n uploaded,\r\n} from '../../services/uploadingService';\r\nimport UploadProgress from './UploadProgress';\r\nimport { UploadingProvider, useUploadingMedia} from './uploadingContext';\r\nimport { createMultimediaSubprojectRequest } from './uploadingUtils';\r\n\r\nconst WIZARD_STEPS = [\r\n {\r\n stepNumber: 1,\r\n label: 'Upload type',\r\n component: UploadType,\r\n },\r\n {\r\n stepNumber: 2,\r\n label: 'Basic information',\r\n component: UploadInformation\r\n },\r\n {\r\n stepNumber: 3,\r\n label: 'Media upload',\r\n component: MediaUpload,\r\n }\r\n];\r\n\r\nconst Stepper = styled(DefaultStepper)`\r\n max-width: 800px;\r\n margin: 16px auto 32px;\r\n\r\n @media screen and (min-width: 768px) {\r\n margin-bottom: 60px;\r\n }\r\n`;\r\n\r\n// TODO\r\n// - fix mobile view\r\n// - reset form\r\nfunction UploadingPage() {\r\n let droneImageInitCount=0;\r\n const {\r\n submitted,\r\n setSubmitted,\r\n setSubmitting,\r\n setSubmittingAction,\r\n setSuccess,\r\n setUploadFiles} = useUploadingMedia();\r\n\r\n const startUploadingMultimedia = ({projectId, formData, formFiles}) => {\r\n const { uploadType } = formData;\r\n\r\n switch (uploadType) {\r\n case 'single':\r\n uploadSinglePhoto({projectId, formData, formFiles});\r\n break;\r\n\r\n case 'panorama':\r\n case 'video':\r\n createMultimediaSubprojectRequest({projectId, formData})\r\n .then(({subprojectId}) => {\r\n uploadPanoramaOrVideo({projectId, subProjId: subprojectId, uploadType, formFiles});\r\n })\r\n\r\n break;\r\n\r\n default:\r\n console.error('Unrecognized uploading type.')\r\n }\r\n }\r\n\r\n // TODO\r\n // - test error state\r\n const startUploadingDrone = ({projectId, formFiles}) => {\r\n return new Promise((resolve) => {\r\n const files = formFiles.filter(file => ['idle', 'failed'].includes(file.uploadStatus.status));\r\n let results = files.map((file, index) => {\r\n return new Promise((rSucess, rError) => {\r\n uploadImage(file.file, projectId, (index === 0), (event) => {\r\n setUploadFiles(data => {\r\n let tempArr = [...data];\r\n const idx = findIndex(data, el => el.id === file.id);\r\n tempArr[idx] = {...data[idx], uploadStatus: { status: 'running', loaded: event.loaded }};\r\n return tempArr;\r\n });\r\n })\r\n .then(() => {\r\n setUploadFiles(data => {\r\n let tempArr = [...data];\r\n const idx = findIndex(data, el => el.id === file.id);\r\n tempArr[idx] = {...data[idx], uploadStatus: {...data[idx].uploadStatus, loaded: 100, status: 'finished'}}\r\n return tempArr;\r\n });\r\n rSucess(file);\r\n })\r\n .catch(err => {\r\n setUploadFiles(data => {\r\n let tempArr = [...data];\r\n const idx = findIndex(data, el => el.id === file.id);\r\n tempArr[idx] = {...data[idx], uploadStatus: {...data[idx].uploadStatus, status: 'failed'}}\r\n return tempArr;\r\n });\r\n rError(file);\r\n })\r\n });\r\n })\r\n\r\n Promise.allSettled(results)\r\n .then((r) => {\r\n const failedItems = r.filter(res => res.status === 'rejected');\r\n if (failedItems.length > 0) {\r\n resolve(startUploadingDrone({ projectId, formFiles: failedItems.map(f=>f.reason) }));\r\n }\r\n else {\r\n setSubmitting(false);\r\n return resolve(projectId);\r\n }\r\n\r\n });\r\n });\r\n }\r\n\r\n const uploadSinglePhoto = ({projectId, formData, formFiles}) => {\r\n return new Promise((resolve) => {\r\n const files = formFiles.filter(file => ['idle', 'failed'].includes(file.uploadStatus.status));\r\n\r\n let results = files.map(file => {\r\n return new Promise((rSucess, rError) => {\r\n createMultimediaSubprojectRequest({\r\n projectId,\r\n formData\r\n })\r\n .then(({subprojectId}) => {\r\n uploadFile({file, projectId, subProjId: subprojectId, type: 'singleImage'})\r\n .then(() => {\r\n processUploadedImage(subprojectId);\r\n rSucess(file)\r\n }).catch(() => {\r\n rError(file);\r\n });\r\n })\r\n });\r\n });\r\n\r\n Promise.allSettled(results)\r\n .then((r) => {\r\n const failedItems = r.filter(res => res.status === 'rejected');\r\n\r\n if (failedItems.length > 0) {\r\n uploadSinglePhoto({ projectId, formData, formFiles: failedItems.map(f=>f.reason)});\r\n }\r\n else {\r\n setSubmitting(false);\r\n setSuccess('All files were successfully uploaded.')\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n const uploadPanoramaOrVideo = ({projectId, subProjId, uploadType, formFiles}) => {\r\n return new Promise((resolve) => {\r\n const files = formFiles.filter(file => ['idle', 'failed'].includes(file.uploadStatus.status));\r\n const type = uploadType === 'panorama' ? 'panoramaImage' : uploadType\r\n\r\n let results = files.map(file => {\r\n return uploadFile({file, projectId, subProjId, type});\r\n })\r\n\r\n Promise.allSettled(results)\r\n .then((r) => {\r\n const failedItems = r.filter(res => res.status === 'rejected');\r\n\r\n if (failedItems.length > 0) {\r\n uploadPanoramaOrVideo({ projectId, subProjId, uploadType, formFiles: failedItems.map(f=>f.reason)});\r\n }\r\n else {\r\n resolve(subProjId);\r\n uploadDone(subProjId)\r\n }\r\n });\r\n });\r\n }\r\n\r\n const uploadFile = ({file, projectId, subProjId, type}) => {\r\n return new Promise((rSucess, rError) => {\r\n uploadMultimedia(file.file, type, projectId, subProjId, (event) => {\r\n setUploadFiles(data => {\r\n let tempArr = [...data];\r\n const idx = findIndex(data, el => el.id === file.id);\r\n tempArr[idx] = {...data[idx], uploadStatus: { status: 'running', loaded: event.loaded }};\r\n return tempArr;\r\n });\r\n })\r\n .then(() => {\r\n setUploadFiles(data => {\r\n let tempArr = [...data];\r\n const idx = findIndex(data, el => el.id === file.id);\r\n tempArr[idx] = {...data[idx], uploadStatus: {...data[idx].uploadStatus, status: 'finished'}}\r\n return tempArr;\r\n });\r\n rSucess(file);\r\n })\r\n .catch(err => {\r\n setUploadFiles(data => {\r\n let tempArr = [...data];\r\n const idx = findIndex(data, el => el.id === file.id);\r\n tempArr[idx] = {...data[idx], uploadStatus: {...data[idx].uploadStatus, status: 'failed'}}\r\n return tempArr;\r\n });\r\n rError(file);\r\n })\r\n });\r\n }\r\n\r\n // TODO\r\n // - handle failed image processing\r\n const processUploadedImage = subProjId => {\r\n processingImage(subProjId)\r\n .then(data => { })\r\n .catch(err => console.error('Image processing failed!'))\r\n }\r\n\r\n const uploadDone = subProjId => {\r\n\r\n setSubmittingAction('Checking uploaded files...');\r\n\r\n // TODO - handle error/loading state\r\n multimediaUploaded(subProjId)\r\n .then(data => {\r\n setSubmitting(false);\r\n setSuccess('All files were successfully uploaded.');\r\n });\r\n }\r\n\r\n const processDroneUpload = ({formData, formFiles}) => {\r\n createProject({\r\n projName: formData.projectName,\r\n projDateTime: formData.projectDate,\r\n projDesc: formData.projectDescription,\r\n locationId: formData.location.id,\r\n epsg: formData.location.srid,\r\n drone: formData.drone,\r\n purpose: formData.flightPurpose,\r\n incident: formData.flightIncident,\r\n detection: formData.calculateDetection,\r\n chipConveyor: formData.removeStackingChip,\r\n continuousConveyor: formData.removeContinuousChip,\r\n imgCount: formFiles.length,\r\n })\r\n .then(({projId: projectId}) => {\r\n setSubmittingAction('Uploading files...');\r\n droneImageInitCount=formFiles.length;\r\n startUploadingDronePool({projectId, formFiles});\r\n })\r\n }\r\n\r\n const startUploadingDronePool = ({projectId, formFiles})=>{\r\n const poolSize=10;\r\n let formFilePool=formFiles.slice(0,poolSize);\r\n startUploadingDrone({projectId, formFiles:formFilePool}).then(()=>{\r\n const f = formFiles.slice(poolSize,formFiles.length);\r\n if(f.length>0){\r\n startUploadingDronePool({projectId,formFiles:f})\r\n return\r\n }\r\n setSubmittingAction('Checking uploaded files...');\r\n\r\n uploaded(projectId, droneImageInitCount)\r\n .then(() => {\r\n setSuccess('All files were successfully uploaded.');\r\n });\r\n }\r\n )\r\n }\r\n const processMultimediaUpload = ({formData, formFiles}) => {\r\n\r\n createMultimediaProject({\r\n projName: formData.projectName,\r\n projDesc: formData.comment\r\n })\r\n .then(({projId: projectId}) => {\r\n setSubmittingAction('Uploading files...');\r\n startUploadingMultimedia({projectId, formData, formFiles});\r\n })\r\n\r\n }\r\n\r\n const handleFormSubmit = formData => {\r\n const { uploadType, files: formFiles } = formData;\r\n\r\n setSubmitted(true);\r\n setSubmitting(true);\r\n setUploadFiles(formFiles);\r\n\r\n setSubmittingAction('Creating project...');\r\n\r\n if(MULTIMEDIA_TYPES.includes(uploadType)) {\r\n processMultimediaUpload({formData, formFiles});\r\n } else {\r\n processDroneUpload({formData, formFiles});\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 submitted ? (\r\n \r\n ) : (\r\n WIZARD_STEPS.map(({ stepNumber, component: Component }) => (\r\n \r\n {stepNumber === currentStep && (\r\n \r\n )}\r\n \r\n ))\r\n )\r\n }\r\n\r\n {/* \r\n {({ values, errors }) => (\r\n
\r\n                      {JSON.stringify(values, null, 2)}\r\n                      {JSON.stringify(errors, null, 2)}\r\n                    
\r\n )}\r\n
*/}\r\n \r\n )}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default function UploadingPageWithContext() {\r\n return (\r\n \r\n \r\n \r\n );\r\n};","import axios from '../utils/axios';\r\n\r\nexport const getProfile = () => {\r\n return axios.get('users/userProfile').then(response => response.data);\r\n}\r\n\r\nexport const getUserLog = () => {\r\n return axios.get('users/userLog').then(response => response.data);\r\n}\r\n\r\nexport const addUser = (user) => {\r\n return axios.post('services/addUser', user).then(response => response.data);\r\n}\r\nexport const addLocation = (location) => {\r\n return axios.post('services/addLocation', location).then(response => response.data);\r\n}\r\nexport const getSrids = () => {\r\n return axios.get('uploads/srids').then(response => response.data);\r\n}\r\nexport const getUsers = () => {\r\n return axios.get('uploads/pilots').then(response => response.data);\r\n}\r\nexport const getLocations = () => {\r\n return axios.get('uploads/locations').then(response => response.data);\r\n}\r\nexport const addUserLocation = (userLocation) => {\r\n return axios.post('services/addUserLocation',userLocation).then(response => response.data);\r\n}","import { useEffect } from 'react';\r\nimport { useMsal, useIsAuthenticated } from \"@azure/msal-react\";\r\nimport { EventType } from \"@azure/msal-browser\";\r\n// import { useNavigate } from 'react-router-dom';\r\nimport { getProfile } from '../../services/userService';\r\nimport { storeSession, clearSession } from '../../utils/auth';\r\nimport useAuth from '../../hooks/useAuth';\r\n// import { ERROR } from '../../routes';\r\n\r\nfunction AuthEventHandler() {\r\n const { instance } = useMsal();\r\n const isAuthenticated = useIsAuthenticated();\r\n const { id } = useAuth();\r\n// const navigate = useNavigate();\r\n\r\n const loadUserData = () => {\r\n getProfile()\r\n .then(data => storeSession(data))\r\n .catch(e => {\r\n console.error('User profile data ERROR: ', e);\r\n // navigate(ERROR, {state: {errorMessage: 'An error has occurred while loading user data!'}});\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n const callbackId = instance.addEventCallback((message) => {\r\n if (message.eventType === EventType.LOGIN_SUCCESS) {\r\n loadUserData();\r\n }\r\n\r\n if (message.eventType === EventType.LOGOUT_SUCCESS) {\r\n clearSession();\r\n }\r\n\r\n // TODO - called twice\r\n if (message.eventType === EventType.HANDLE_REDIRECT_END) {\r\n if(!id && isAuthenticated) {\r\n loadUserData();\r\n }\r\n }\r\n });\r\n\r\n return () => {\r\n if (callbackId) {\r\n instance.removeEventCallback(callbackId);\r\n }\r\n }\r\n\r\n }, [id, isAuthenticated, instance, loadUserData]);\r\n\r\n return null;\r\n}\r\n\r\nexport default AuthEventHandler;","import styled from 'styled-components';\r\nimport { func, node, oneOf } from 'prop-types';\r\nimport Icon from '../Icon';\r\n\r\nconst kindStyles = ({ theme, kind }) =>\r\n ({\r\n primary: `\r\n background-color: ${theme.colors.information_bg};\r\n `,\r\n negative: `\r\n background-color: ${theme.colors.negative_bg};\r\n `,\r\n }[kind]);\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: baseline;\r\n position: relative;\r\n padding: 0.5em 1em;\r\n\r\n ${(props) => kindStyles(props)};\r\n`;\r\n\r\nconst IconWrapper = styled.div`\r\n margin-left: 1em;\r\n cursor: pointer;\r\n\r\n ${Icon} {\r\n font-size: 0.75em;\r\n }\r\n`;\r\n\r\nconst Content = styled.div`\r\n flex-grow: 1;\r\n`;\r\n\r\nfunction Notification({children, kind, onClose}) {\r\n return (\r\n \r\n {children}\r\n \r\n close\r\n \r\n \r\n );\r\n}\r\n\r\nNotification.propTypes = {\r\n children: node.isRequired,\r\n kind: oneOf(['primary', 'negative']),\r\n onClose: func.isRequired,\r\n}\r\n\r\nNotification.defaultProps = {\r\n kind: 'primary'\r\n}\r\n\r\nexport default Notification;","import styled from 'styled-components';\r\n\r\nconst Wrapper = styled.div`\r\n line-height: 1.618;\r\n color: ${({ theme }) => theme.colors.white};\r\n display: inline-flex;\r\n align-items: center;\r\n background-color: ${({ theme }) => theme.colors.brand_tint_blue};\r\n font-size: 0.75rem;\r\n border-radius: 0.25em;\r\n padding: 0 0.75em;\r\n user-select: none;\r\n`;\r\n\r\nfunction Tag({children}) {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nexport default Tag;","import { useEffect, useState } from 'react';\r\nimport { number } from 'prop-types';\r\nimport styled from 'styled-components';\r\n\r\nconst Wrapper = styled.div`\r\n font-size: 1rem;\r\n`;\r\n\r\nfunction RecordsInfo({ pageIndex, pageSize, totalRows}) {\r\n const [endIdx, setEndIdx] = useState(0);\r\n\r\n useEffect(() => {\r\n const endNumber = (pageIndex+1)*pageSize;\r\n setEndIdx(endNumber > totalRows ? totalRows : endNumber);\r\n }, [pageIndex, pageSize, totalRows]);\r\n\r\n if(totalRows === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n Showing {pageIndex*pageSize+1} to {endIdx} of {totalRows} entries\r\n \r\n );\r\n}\r\n\r\nRecordsInfo.propTypes = {\r\n pageIndex: number.isRequired,\r\n pageSize: number.isRequired,\r\n totalRows: number.isRequired,\r\n}\r\n\r\nexport default RecordsInfo;","import React from 'react';\r\nimport { bool, number, func } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport ReactPaginate from 'react-paginate';\r\nimport Icon from '../../StoraEnsoComponents/Icon';\r\n\r\nconst Wrapper = styled.div`\r\n .paginationWrapper {\r\n display: inline-flex;\r\n align-items: center;\r\n\r\n li {\r\n padding: 0.5rem;\r\n\r\n &.active {\r\n background-color: #c3e2f5;\r\n }\r\n }\r\n\r\n li a {\r\n color: #202020;\r\n display: flex;\r\n align-items: center;\r\n font-weight: bold;\r\n text-decoration: none;\r\n cursor: pointer;\r\n\r\n &:hover:not(.disabled) {\r\n color: #696969;\r\n }\r\n\r\n &.disabled {\r\n cursor: auto;\r\n }\r\n }\r\n }\r\n`;\r\n\r\nfunction Pagination({\r\n loading,\r\n pageCount,\r\n onPageChange,\r\n}) {\r\n return (\r\n \r\n chevron_right}\r\n onPageChange={({selected}) => !loading && onPageChange(selected)}\r\n pageRangeDisplayed={5}\r\n pageCount={pageCount}\r\n previousLabel={chevron_left}\r\n disabledClassName=\"disabled\"\r\n disabledLinkClassName=\"disabled\"\r\n renderOnZeroPageCount={null}\r\n />\r\n \r\n );\r\n}\r\n\r\nPagination.propTypes = {\r\n loading: bool.isRequired,\r\n pageCount: number.isRequired,\r\n onPageChange: func.isRequired,\r\n};\r\nexport default Pagination;\r\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgSortSolid(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 320 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.66 224h264.7c24.6 0 36.89-29.78 19.54-47.12l-132.3-136.8c-5.406-5.406-12.47-8.107-19.53-8.107c-7.055 0-14.09 2.701-19.45 8.107L8.119 176.9C-9.229 194.2 3.055 224 27.66 224zM292.3 288H27.66c-24.6 0-36.89 29.77-19.54 47.12l132.5 136.8C145.9 477.3 152.1 480 160 480c7.053 0 14.12-2.703 19.53-8.109l132.3-136.8C329.2 317.8 316.9 288 292.3 288z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSortSolid);\nexport default __webpack_public_path__ + \"static/media/sort-solid.f439571b.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgSortDownSolid(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 320 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M311.9 335.1l-132.4 136.8C174.1 477.3 167.1 480 160 480c-7.055 0-14.12-2.702-19.47-8.109l-132.4-136.8C-9.229 317.8 3.055 288 27.66 288h264.7C316.9 288 329.2 317.8 311.9 335.1z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSortDownSolid);\nexport default __webpack_public_path__ + \"static/media/sort-down-solid.cf8a79fd.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgSortUpSolid(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 320 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.66 224h264.7c24.6 0 36.89-29.78 19.54-47.12l-132.3-136.8c-5.406-5.406-12.47-8.107-19.53-8.107c-7.055 0-14.09 2.701-19.45 8.107L8.119 176.9C-9.229 194.2 3.055 224 27.66 224z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSortUpSolid);\nexport default __webpack_public_path__ + \"static/media/sort-up-solid.15d153ae.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useEffect, useState } from 'react';\r\nimport { useTable, useSortBy, usePagination, useExpanded, useRowSelect } from 'react-table';\r\nimport { arrayOf, shape, bool, number, string, func } from 'prop-types';\r\nimport styled, { css } from 'styled-components';\r\nimport classNames from 'classnames';\r\nimport Loading from '../Loading';\r\nimport RecordsInfo from './RecordsInfo';\r\nimport Pagination from './Pagination';\r\nimport { ReactComponent as SortSvg } from '../../assets/icons/sort-solid.svg';\r\nimport { ReactComponent as SortDownSvg } from '../../assets/icons/sort-down-solid.svg';\r\nimport { ReactComponent as SortUpSvg } from '../../assets/icons/sort-up-solid.svg';\r\n\r\nconst sortIconStyle = css`\r\n width: 9px;\r\n height: auto;\r\n fill: ${({theme}) => theme.colors.information};\r\n`;\r\n\r\nconst SortIcon = styled(SortSvg)`\r\n height: 14px;\r\n width: auto;\r\n`;\r\n\r\nconst SortDownIcon = styled(SortDownSvg)`\r\n ${sortIconStyle};\r\n`;\r\n\r\nconst SortUpIcon = styled(SortUpSvg)`\r\n ${sortIconStyle};\r\n`;\r\n\r\nconst IconWrapper = styled.div`\r\n padding-top: 2px;\r\n padding-left: 5px;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n overflow: auto;\r\n text-align: left;\r\n ${({ tableStyle }) =>\r\n !tableStyle.removeWrapperMargin &&\r\n `\r\n margin-bottom: 2rem;\r\n `};\r\n\r\n ${Loading} {\r\n justify-content: center;\r\n }\r\n\r\n ${({ minWidth }) => minWidth &&\r\n `\r\n min-width: ${minWidth};\r\n `};\r\n`;\r\n\r\nconst InfoWrapper = styled.div`\r\n text-align: center;\r\n padding: 3.375rem 1rem 1rem 1rem;\r\n margin-top: 1rem;\r\n\r\n`;\r\n\r\nconst PaginationWrapper = styled.div`\r\n margin-top: 1rem;\r\n`;\r\n\r\nconst Table = styled.table`\r\n width: 100%;\r\n overflow: auto;\r\n`;\r\n\r\nconst Th = styled.th`\r\n font-size: 16px;\r\n font-weight: 700;\r\n ${({ customAlignment }) =>\r\n customAlignment &&\r\n `\r\n text-align: ${customAlignment};\r\n `};\r\n\r\n ${({ customHeaderWidth }) =>\r\n customHeaderWidth &&\r\n `\r\n width: ${customHeaderWidth}px;\r\n `};\r\n\r\n ${({ customHeaderMinWidth }) =>\r\n customHeaderMinWidth &&\r\n `\r\n min-width: ${customHeaderMinWidth}px;\r\n `};\r\n`;\r\n\r\nconst Td = styled.td`\r\n ${({ customAlignment }) =>\r\n customAlignment &&\r\n `\r\n text-align: ${customAlignment};\r\n `};\r\n\r\n ${({ $cssMixin = '' }) => $cssMixin};\r\n`;\r\n\r\nconst Tr = styled.tr`\r\n cursor: ${({rowSelectionEnabled}) => rowSelectionEnabled ? 'pointer': 'auto'};\r\n\r\n ${({ selected, theme }) =>\r\n selected &&\r\n `\r\n background-color: ${theme.colors.information_bg} !important;\r\n `};\r\n\r\n && {\r\n ${({ isExpanded }) =>\r\n isExpanded &&\r\n `\r\n border: 0;\r\n `};\r\n }\r\n &:hover {\r\n background-color: ${({rowSelectionEnabled, theme}) => rowSelectionEnabled ? theme.colors.information_bg: 'inherit'} !important;\r\n }\r\n`;\r\n\r\nconst ExpandedRow = styled.tr`\r\n && {\r\n border-width: 2px;\r\n }\r\n`;\r\n\r\nconst ExpandedContent = styled.td`\r\n padding: 0;\r\n`;\r\n\r\nconst TableHeader = styled.thead`\r\n\r\n tr ${Th} {\r\n font-size: 14px;\r\n line-height: 1.5;\r\n padding: 0.75rem 1rem;\r\n white-space: normal;\r\n\r\n .se-table-head-content {\r\n align-items: flex-start;\r\n }\r\n\r\n &.se-multicolumn-head {\r\n padding-bottom: 0;\r\n vertical-align: bottom;\r\n line-height: 1;\r\n\r\n .se-table-head-content {\r\n border-bottom: 1px solid ${({theme}) => theme.colors.bg_gray};\r\n justify-content: center;\r\n padding-bottom: 0.25rem;\r\n }\r\n }\r\n }\r\n\r\n tr ${Th}:first-child {\r\n padding-left: 0.5rem;\r\n }\r\n\r\n tr ${Th}:last-child {\r\n padding-right: 0.5rem;\r\n }\r\n`;\r\n\r\nconst TableBody = styled.tbody`\r\n font-size: 12px;\r\n\r\n tr ${Td} {\r\n padding: ${({tableStyle}) => tableStyle.isDense ? '0.5rem 1rem' : '0.95rem 1rem 0.75rem'};\r\n vertical-align: top;\r\n }\r\n\r\n tr ${Td}:first-child {\r\n padding-left: 0.5rem;\r\n }\r\n\r\n tr ${Td}:last-child {\r\n padding-right: 0.5rem;\r\n }\r\n\r\n ${({ tableStyle }) =>\r\n !tableStyle.showLastRowBorder &&\r\n `\r\n tr:last-child td {\r\n border-bottom: none;\r\n }\r\n `};\r\n\r\n a,\r\n span[role='button'] {\r\n }\r\n\r\n /* a:hover, */\r\n span[role='button']:hover {\r\n text-decoration: underline;\r\n }\r\n\r\n span[role='button']:hover {\r\n cursor: pointer;\r\n }\r\n`;\r\n\r\nconst TableFooter = styled.tfoot`\r\n font-size: 12px;\r\n font-weight: bold;\r\n\r\n tr ${Td} {\r\n padding: ${({tableStyle}) => tableStyle.isDense ? '0.5rem 1rem' : '0.95rem 1rem 0.75rem'};\r\n vertical-align: top;\r\n\r\n &.se-footer-hidden {\r\n display: none;\r\n }\r\n }\r\n\r\n tr ${Td}:first-child {\r\n padding-left: 0.5rem;\r\n }\r\n\r\n tr ${Td}:last-child {\r\n padding-right: 0.5rem;\r\n }\r\n`;\r\n\r\nconst TableFooterInfo = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n padding: 0 1rem;\r\n align-items: flex-end;\r\n align-items: center;\r\n`;\r\n\r\n/**\r\n * We are using custom props (except react-table built-in props):\r\n * Header: customHeaderAlignment, customHeaderWidth\r\n * Cell: customAlignment\r\n * detailView: custom component which is used to display detail view of the row (row props are passed down to the component)\r\n *\r\n * Custom table style prop:\r\n *\r\n * tableStyle: {\r\n * transparentHeader: bool,\r\n * removeWrapperMargin: bool,\r\n * showLastRowBorder: bool,\r\n * isDense: bool,\r\n * }\r\n *\r\n */\r\n\r\nconst DEFAULT_TABLE_STYLE = {\r\n transparentHeader: false,\r\n removeWrapperMargin: false,\r\n showLastRowBorder: true,\r\n isDense: false,\r\n};\r\n\r\nconst defaultPropsGetter = () => ({});\r\n\r\n// TODO\r\n// - export actions\r\n// - remove !important\r\n// - remove SEEDS classes\r\n// - fix responsive behavior\r\nfunction DataTable({\r\n gridId,\r\n columns,\r\n data,\r\n currentPageIndex,\r\n pageSize,\r\n manualMode,\r\n onTableStateChange,\r\n onPageChange,\r\n onRowSelect,\r\n selectedRowIndex,\r\n disableSorting,\r\n initialSortBy,\r\n loading,\r\n error,\r\n detailView,\r\n tableStyle,\r\n getCellProps = defaultPropsGetter,\r\n showFooter,\r\n showRecordsInfo,\r\n minWidth,\r\n}) {\r\n\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n footerGroups,\r\n page,\r\n prepareRow,\r\n canPreviousPage,\r\n canNextPage,\r\n gotoPage,\r\n toggleAllRowsSelected,\r\n toggleRowSelected,\r\n state: { sortBy, pageIndex },\r\n rows,\r\n pageCount,\r\n } = useTable(\r\n {\r\n columns,\r\n data,\r\n initialState: {\r\n pageSize,\r\n sortBy: initialSortBy ? [initialSortBy] : [],\r\n },\r\n disableMultiSort: true,\r\n manualSortBy: manualMode,\r\n disableSortBy: disableSorting,\r\n manualPagination: manualMode,\r\n useControlledState: (state) => {\r\n const newTableState = manualMode\r\n ? { ...state, pageIndex: currentPageIndex }\r\n : { ...state };\r\n return React.useMemo(\r\n () => ({\r\n ...newTableState,\r\n }),\r\n // TODO: fix this, and fix the next error that occurs\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [state, currentPageIndex],\r\n );\r\n },\r\n },\r\n useSortBy,\r\n useExpanded,\r\n usePagination,\r\n useRowSelect,\r\n );\r\n\r\n const CustomDetailView = detailView;\r\n const [customTableStyle] = useState({\r\n ...DEFAULT_TABLE_STYLE,\r\n ...tableStyle,\r\n });\r\n\r\n const handleRowSelection = row => {\r\n toggleAllRowsSelected(false);\r\n row.toggleRowSelected(true)\r\n onRowSelect({rowId: row.id, data: row.original});\r\n }\r\n\r\n useEffect(() => {\r\n if(parseInt(selectedRowIndex, 10) > -1) {\r\n toggleAllRowsSelected(false);\r\n toggleRowSelected(selectedRowIndex, true);\r\n }\r\n }, [selectedRowIndex]);\r\n\r\n // dispatch table state in in \"manual\" table mode\r\n useEffect(() => {\r\n if (manualMode) {\r\n onTableStateChange({ sortBy });\r\n }\r\n }, [onTableStateChange, manualMode, sortBy]);\r\n\r\n return (\r\n \r\n \r\n \r\n {headerGroups.map((headerGroup) => (\r\n // eslint-disable-next-line\r\n \r\n {headerGroup.headers.map((column) => (\r\n // eslint-disable-next-line\r\n 0,\r\n })}\r\n {...{\r\n customAlignment: column.customHeaderAlignment,\r\n customHeaderWidth: column.customHeaderWidth,\r\n customHeaderMinWidth: column.customHeaderMinWidth,\r\n ...column.getHeaderProps(column.getSortByToggleProps()),\r\n }}\r\n >\r\n
\r\n {column.render('Header')}\r\n {column.canSort && !column.isSorted && }\r\n {column.isSorted &&\r\n (column.isSortedDesc ? : )}\r\n
\r\n \r\n ))}\r\n
\r\n ))}\r\n \r\n\r\n {!error && !loading && data.length > 0 && (\r\n <>\r\n \r\n {page.map((row) => {\r\n prepareRow(row);\r\n return (\r\n \r\n {/* eslint-disable-next-line */}\r\n !!onRowSelect && handleRowSelection(row)}>\r\n {row.cells.map((cell) => (\r\n // eslint-disable-next-line\r\n \r\n {cell.render('Cell')}\r\n \r\n ))}\r\n \r\n {row.isExpanded && detailView && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n })}\r\n \r\n {\r\n showFooter && (\r\n \r\n {footerGroups.map(group => (\r\n \r\n {group.headers.map(column => (\r\n \r\n {column.render('Footer')}\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n )\r\n }\r\n \r\n )}\r\n
\r\n {!error && !loading && data.length === 0 && (\r\n No data to display.\r\n )}\r\n {loading && (\r\n \r\n \r\n \r\n )}\r\n {error && !loading && (\r\n \r\n {/* */}\r\n {typeof error === 'string' ? error : 'Error: Data could not be loaded.'}\r\n \r\n )}\r\n\r\n {!loading && !error && (\r\n \r\n {\r\n showRecordsInfo ? (\r\n \r\n ) :
\r\n }\r\n\r\n {(canPreviousPage || canNextPage) && (\r\n \r\n gotoPage(page)}\r\n />\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nDataTable.propTypes = {\r\n gridId: string,\r\n columns: arrayOf(shape({})).isRequired,\r\n data: arrayOf(shape({})).isRequired,\r\n getCellProps: func,\r\n onTableStateChange: func,\r\n onPageChange: func,\r\n onRowSelect: func,\r\n manualMode: bool,\r\n loading: bool,\r\n currentPageIndex: number,\r\n pageSize: number,\r\n disableSorting: bool,\r\n initialSortBy: shape({\r\n id: string.isRequired,\r\n desc: bool.isRequired,\r\n }),\r\n error: string,\r\n detailView: func,\r\n tableStyle: shape({\r\n transparentHeader: bool,\r\n removeWrapperMargin: bool,\r\n showLastRowBorder: bool,\r\n isDense: bool,\r\n }),\r\n selectedRowIndex: number,\r\n showFooter: bool,\r\n showRecordsInfo: bool,\r\n minWidth: string,\r\n};\r\n\r\nDataTable.defaultProps = {\r\n gridId: undefined,\r\n manualMode: false,\r\n loading: false,\r\n getCellProps: undefined,\r\n onTableStateChange: undefined,\r\n onPageChange: undefined,\r\n onRowSelect: undefined,\r\n currentPageIndex: 0,\r\n pageSize: 10,\r\n disableSorting: false,\r\n initialSortBy: undefined,\r\n detailView: undefined,\r\n error: undefined,\r\n tableStyle: {\r\n transparentHeader: false,\r\n removeWrapperMargin: false,\r\n showLastRowBorder: true,\r\n isDense: false,\r\n },\r\n selectedRowIndex: null,\r\n showFooter: false,\r\n showRecordsInfo: true,\r\n minWidth: undefined,\r\n};\r\n\r\nexport default DataTable;\r\n","// custom sort function - datetime\r\nexport const sortByDateTimeFunc = ((rowA, rowB, id, desc) => {\r\n if (rowA.values[id] > rowB.values[id]) return 1;\r\n if (rowB.values[id] > rowA.values[id]) return -1;\r\n return 0;\r\n});\r\n\r\nexport const sortAlphanumericFunc = ((rowA, rowB, id, desc) => {\r\n return (rowA.values[id]).localeCompare(rowB.values[id]);\r\n});","import { DateTime } from 'luxon';\r\nimport { sortByDateTimeFunc } from '../DataTable/utils';\r\n\r\nconst getColumns = () => [\r\n {\r\n id: 'drone',\r\n Header: 'Drone',\r\n accessor: 'drone',\r\n },\r\n {\r\n id: 'purpose',\r\n Header: 'Purpose',\r\n accessor: 'purpose',\r\n },\r\n {\r\n id: 'startPosition',\r\n Header: 'Start position',\r\n disableSortBy: true,\r\n accessor: 'start_position',\r\n },\r\n {\r\n id: 'endPosition',\r\n Header: 'Landing position',\r\n accessor: 'end_position',\r\n disableSortBy: true,\r\n },\r\n {\r\n id: 'flightStart',\r\n Header: 'Start time',\r\n accessor: 'flight_start',\r\n sortType: sortByDateTimeFunc,\r\n Cell: ({ value }) => DateTime.fromISO(value).toLocaleString({dateStyle: 'short', timeStyle: 'medium', hour12: false})\r\n },\r\n {\r\n id: 'flightEnd',\r\n Header: 'Landing time',\r\n accessor: 'flight_end',\r\n sortType: sortByDateTimeFunc,\r\n Cell: ({ value }) => DateTime.fromISO(value).toLocaleString({dateStyle: 'short', timeStyle: 'medium', hour12: false})\r\n },\r\n {\r\n id: 'incident',\r\n Header: 'Incident',\r\n accessor: 'incident',\r\n },\r\n];\r\n\r\nexport default getColumns;","import { useState } from 'react';\r\nimport { func } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport { useDebouncedCallback } from 'use-debounce';\r\nimport DefaultInput from '../../Forms/input';\r\n\r\nconst Input = styled(DefaultInput)`\r\n width: 250px;\r\n\r\n @media screen and (min-width: 768px) {\r\n margin-right: 32px;\r\n }\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-start;\r\n align-items: center;\r\n`;\r\n\r\nfunction GridFilter ({ onSearchChange }) {\r\n const [searchValue, setSearchValue] = useState('');\r\n\r\n const setDebouncedSearch = useDebouncedCallback(() => {\r\n onSearchChange(searchValue.trim());\r\n }, 500);\r\n\r\n\r\n const handleSearchChange = (val) => {\r\n setSearchValue(val);\r\n setDebouncedSearch();\r\n };\r\n\r\n\r\n return (\r\n \r\n handleSearchChange(ev.target.value)} />\r\n \r\n );\r\n}\r\n\r\nGridFilter.propTypes = {\r\n onSearchChange: func.isRequired,\r\n}\r\n\r\nexport default GridFilter;","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFileCsv(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 384 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M336 448V416H384V448C384 483.3 355.3 512 320 512H64C28.65 512 0 483.3 0 448V416H48V448C48 456.8 55.16 464 64 464H320C328.8 464 336 456.8 336 448zM256 160C238.3 160 224 145.7 224 128V48H64C55.16 48 48 55.16 48 64V192H0V64C0 28.65 28.65 0 64 0H229.5C246.5 0 262.7 6.743 274.7 18.75L365.3 109.3C377.3 121.3 384 137.5 384 154.5V192H336V160H256zM96 224C118.1 224 136 241.9 136 264V272C136 280.8 128.8 288 120 288C111.2 288 104 280.8 104 272V264C104 259.6 100.4 256 96 256H80C75.58 256 72 259.6 72 264V344C72 348.4 75.58 352 80 352H96C100.4 352 104 348.4 104 344V336C104 327.2 111.2 320 120 320C128.8 320 136 327.2 136 336V344C136 366.1 118.1 384 96 384H80C57.91 384 40 366.1 40 344V264C40 241.9 57.91 224 80 224H96zM152 270.4C152 244.8 172.8 224 198.4 224H216C224.8 224 232 231.2 232 240C232 248.8 224.8 256 216 256H198.4C190.4 256 184 262.4 184 270.4C184 275.5 186.8 280.3 191.2 282.9L216.6 297.4C231.1 305.6 240 320.1 240 337.6C240 363.2 219.2 384 193.6 384H168C159.2 384 152 376.8 152 368C152 359.2 159.2 352 168 352H193.6C201.6 352 208 345.6 208 337.6C208 332.5 205.2 327.7 200.8 325.1L175.4 310.6C160.9 302.4 152 287 152 270.4zM280 271.6C280 294.6 285.5 317.2 296 337.5C306.5 317.2 312 294.6 312 271.6V240C312 231.2 319.2 224 328 224C336.8 224 344 231.2 344 240V271.6C344 306.3 333.7 340.3 314.4 369.2L309.3 376.9C306.3 381.3 301.4 384 296 384C290.6 384 285.7 381.3 282.7 376.9L277.6 369.2C258.3 340.3 248 306.3 248 271.6V240C248 231.2 255.2 224 264 224C272.8 224 280 231.2 280 240V271.6z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFileCsv);\nexport default __webpack_public_path__ + \"static/media/file-csv.766169ad.svg\";\nexport { ForwardRef as ReactComponent };","import styled from 'styled-components';\r\nimport { CSVLink } from 'react-csv';\r\nimport Button from '../../StoraEnsoComponents/Button';\r\nimport { ReactComponent as FileCsvSvg } from '../../../assets/icons/file-csv.svg';\r\n\r\nconst FileIcon = styled(FileCsvSvg)``;\r\n\r\nfunction ExportTableToCSV({tableData, headers}) {\r\nconsole.log(headers)\r\nconsole.log(tableData)\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ExportTableToCSV","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFilePdf(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 384 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M320 464C328.8 464 336 456.8 336 448V416H384V448C384 483.3 355.3 512 320 512H64C28.65 512 0 483.3 0 448V416H48V448C48 456.8 55.16 464 64 464H320zM256 160C238.3 160 224 145.7 224 128V48H64C55.16 48 48 55.16 48 64V192H0V64C0 28.65 28.65 0 64 0H229.5C246.5 0 262.7 6.743 274.7 18.75L365.3 109.3C377.3 121.3 384 137.5 384 154.5V192H336V160H256zM88 224C118.9 224 144 249.1 144 280C144 310.9 118.9 336 88 336H80V368C80 376.8 72.84 384 64 384C55.16 384 48 376.8 48 368V240C48 231.2 55.16 224 64 224H88zM112 280C112 266.7 101.3 256 88 256H80V304H88C101.3 304 112 293.3 112 280zM160 240C160 231.2 167.2 224 176 224H200C226.5 224 248 245.5 248 272V336C248 362.5 226.5 384 200 384H176C167.2 384 160 376.8 160 368V240zM192 352H200C208.8 352 216 344.8 216 336V272C216 263.2 208.8 256 200 256H192V352zM336 224C344.8 224 352 231.2 352 240C352 248.8 344.8 256 336 256H304V288H336C344.8 288 352 295.2 352 304C352 312.8 344.8 320 336 320H304V368C304 376.8 296.8 384 288 384C279.2 384 272 376.8 272 368V240C272 231.2 279.2 224 288 224H336z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFilePdf);\nexport default __webpack_public_path__ + \"static/media/file-pdf.37c0d61f.svg\";\nexport { ForwardRef as ReactComponent };","export default __webpack_public_path__ + \"static/media/logo.6fd6ee9c.png\";","import styled from 'styled-components';\r\nimport Button from '../../StoraEnsoComponents/Button';\r\nimport jsPDF from 'jspdf';\r\nimport 'jspdf-autotable';\r\nimport { ReactComponent as FilePdfSvg } from '../../../assets/icons/file-pdf.svg';\r\nimport logo from '../../StoraEnsoComponents/assets/images/logo.png'\r\nimport { useEffect } from 'react';\r\n\r\nconst FileIcon = styled(FilePdfSvg)``;\r\n\r\nfunction ExportTableToPDF({tableData, headers, missionName, missionDate, title, type}) {\r\n\r\n useEffect(()=>{\r\n console.log(\"HEADERS\",headers);\r\n },[headers])\r\n const exportPDF = () => {\r\n\r\n //general configuration\r\n const unit = \"pt\";\r\n const size = \"A4\"; // Use A1, A2, A3 or A4\r\n const orientation = \"landscape\"; // portrait or landscape\r\n const marginLeft = 40;\r\n const marginTop = 30;\r\n const imageSize = 60;\r\n const doc = new jsPDF(orientation, unit, size);\r\n let header2Text = \"\";\r\n let header3Text = \"\";\r\n\r\n // Date to title\r\n const monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\r\n const d = new Date();\r\n const currentMonthName = monthNames[d.getMonth()];\r\n\r\n //Shorten filename title\r\n let shortTitle = title.replace(/\\s/g, '');\r\n let fileName = shortTitle + \"_\" + currentMonthName + d.getUTCFullYear() + \".pdf\";\r\n\r\n //check input values && modify text\r\n if(typeof(missionName) === 'undefined' && missionName == null){\r\n return console.log(\"Error in the addition\");\r\n }\r\n\r\n header2Text = missionName;\r\n header3Text = missionDate;\r\n\r\n if(type === 'UsrLog'){\r\n header2Text = missionName.email;\r\n header3Text = d.toLocaleString(\"en-GB\") + \"\";\r\n }\r\n\r\n //Export content\r\n let content = {\r\n startY: 100,\r\n head: [headers],\r\n body: tableData,\r\n margin: {top: 100}, //top maintain the header margin on multiple pages\r\n didDrawPage: function (data) {\r\n\r\n // Page Sizes\r\n let pageSize = doc.internal.pageSize;\r\n let pageWidth = pageSize.width;\r\n let pageHeight = pageSize.height;\r\n\r\n // Header\r\n doc.setFontSize(20);\r\n doc.setTextColor(40);\r\n doc.text(title, marginLeft, marginTop);\r\n doc.addImage(logo, 'JPEG', pageWidth - 90, 20, imageSize - 10, imageSize);\r\n doc.setFontSize(15);\r\n doc.text(header2Text, marginLeft, marginTop + 20);\r\n doc.setFontSize(10);\r\n doc.text(header3Text, marginLeft, marginTop + 40);\r\n\r\n // Footer\r\n let str = \"Page \" + doc.internal.getNumberOfPages();\r\n doc.text(str, marginLeft, pageHeight - 20);\r\n }\r\n };\r\n doc.autoTable(content);\r\n doc.save(fileName);\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\nexport default ExportTableToPDF;","import styled from 'styled-components';\r\n\r\nexport const ActionGroup = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n padding: 4px 0;\r\n\r\n @media screen and (min-width: 768px) {\r\n flex-direction: row;\r\n\r\n & > * {\r\n margin-left: 8px;\r\n }\r\n\r\n }\r\n`;\r\n\r\nexport const TableActions = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-end;\r\n align-items: flex-start;\r\n margin-bottom: 16px;\r\n\r\n ${ActionGroup}:not(:first-child) {\r\n border-left: 2px solid ${({theme}) => theme.colors.bg_gray_dark};\r\n margin-left: 8px;\r\n }\r\n`;","import ExportTableToCSV from \"./exportTableToCSV\";\r\nimport ExportTableToPDF from \"./exportTableToPDF\";\r\nimport { ActionGroup } from '../TableActions';\r\n\r\nfunction ProfileTableExportFunctions({ tableData, headers, userData }) {\r\n\r\n return (\r\n \r\n ({ label: c.Header, key: c.id }))} >\r\n Object.values({\r\n id: row.drone,\r\n purpose: row.purpose,\r\n startPosition: row.startPosition,\r\n endPosition: row.endPosition,\r\n flightStart: row.flightStart,\r\n flightEnd: row.flightEnd,\r\n incident: row.incident\r\n }))} headers={headers.map(h => (h.Header))} missionName={userData} missionDate={\"Dnes\"} title={\"Drone User Log\"} type={\"UsrLog\"} >\r\n \r\n )\r\n}\r\nexport default ProfileTableExportFunctions","import { useMemo, useState, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\nimport normalize from 'normalize-strings';\r\nimport { getUserLog } from '../../services/userService';\r\nimport DataTable from '../DataTable';\r\nimport getColumns from './columns';\r\nimport GridFilter from './GridFilter';\r\nimport ProfileTableExportFunctions from '../DataTable/TableExportFunctions/profileTableExportFunctions';\r\n\r\nconst TopPanel = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n background-color: ${({theme}) => theme.colors.bg_gray};\r\n align-items: center;\r\n padding: 8px;\r\n margin-bottom: 8px;\r\n\r\n @media screen and (min-width: 768px) {\r\n flex-direction: row;\r\n }\r\n`;\r\n\r\nfunction UserLog({userData}) {\r\n const [loading, setLoading] = useState(false);\r\n const [loadingError, setLoadingError] = useState(null);\r\n const [logData, setLogData] = useState([]);\r\n const columns = useMemo(getColumns, []);\r\n const [filtered, setFiltered] = useState(null);\r\n const [gridSearch, setGridSearch] = useState('');\r\n\r\n const gridData = useMemo(() => {\r\n if (logData) {\r\n const data = filtered || logData;\r\n return data;\r\n } else {\r\n return [];\r\n }\r\n }, [logData, filtered]);\r\n\r\n useEffect(() => {\r\n\r\n if(!loading && (gridSearch.trim().length > 0 )) {\r\n const regex = new RegExp(normalize(gridSearch), 'gi');\r\n let tempData = logData;\r\n\r\n setFiltered(tempData.filter(item => ((normalize(item.drone || '')).match(regex) || (normalize(item.incident || '')).match(regex) || (normalize(item.purpose || '')).match(regex))));\r\n } else {\r\n setFiltered(null);\r\n }\r\n\r\n }, [loading, gridSearch]);\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n setLoadingError(null);\r\n\r\n getUserLog()\r\n .then(data => setLogData(data))\r\n .catch(err => {\r\n setLoadingError('An error has occurred while loading user log data!');\r\n })\r\n .then(() => setLoading(false));\r\n }, []);\r\n\r\n return (\r\n
\r\n
User Log
\r\n \r\n setGridSearch(value)}\r\n />\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default UserLog;","import { useEffect, useState } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { ADMIN } from '../../Routes';\r\nimport styled from 'styled-components';\r\nimport Notification from '../StoraEnsoComponents/Notification';\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport Tag from '../StoraEnsoComponents/Tag';\r\nimport Loading from '../Loading';\r\nimport UserLog from '../UserLog';\r\nimport { getProfile } from '../../services/userService';\r\nimport Button from '../StoraEnsoComponents/Button';\r\nimport { ContainerWrapper, Container } from '../Container';\r\n\r\nconst Wrapper = styled.div`\r\n background-color: #fff;\r\n text-align: left;\r\n\r\n h5 {\r\n margin-bottom: 16px;\r\n }\r\n`;\r\n\r\nconst Row = styled.div`\r\n margin-bottom: 16px;\r\n\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n`;\r\n\r\nconst ProfileInfoWrapper = styled.div`\r\n display: grid;\r\n grid-template-columns: 1fr;\r\n background-color: #f8f8f9;\r\n padding: 32px 16px;\r\n /* max-width: 75%; */\r\n column-gap: 16px;\r\n margin-bottom: 50px;\r\n\r\n @media screen and (min-width: 768px) {\r\n grid-template-columns: 150px 1fr;\r\n }\r\n`;\r\n\r\nconst IconWrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n color: #9a9aa4;\r\n margin-bottom: 1rem;\r\n`;\r\n\r\nconst NameGrid = styled(Row)`\r\n display: grid;\r\n grid-template-columns: 1fr 1fr;\r\n column-gap: 16px;\r\n\r\n @media screen and (min-width: 992px) {\r\n grid-template-columns: minmax(150px, max-content) minmax(150px, max-content) 1fr;\r\n }\r\n`;\r\n\r\nconst Label = styled.span`\r\n display: block;\r\n font-weight: bold;\r\n margin-bottom: 0.25rem;\r\n`;\r\n\r\nconst Value = styled.span`\r\n display: block;\r\n margin-bottom: 0.25rem;\r\n`;\r\n\r\nconst Name = styled(Value)`\r\n &::first-letter {\r\n text-transform: uppercase;\r\n }\r\n`;\r\n\r\nconst TagWrapper = styled.div`\r\n\r\n div {\r\n font-size: 14px;\r\n margin-right: 0.5rem;\r\n margin-bottom: 0.5rem;\r\n }\r\n`;\r\n\r\nconst ErrorWrapper = styled.div`\r\n margin-bottom: 1rem;\r\n max-width: 75%;\r\n`;\r\n\r\nconst ActionsWrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-end;\r\n font-size: 14px;\r\n grid-column: span 2;\r\n margin-top: 8px;\r\n\r\n a {\r\n margin: 0 auto;\r\n }\r\n\r\n @media screen and (min-width: 768px) {\r\n grid-column: span 1;\r\n margin-top: 0;\r\n\r\n a {\r\n margin: 0;\r\n }\r\n }\r\n`;\r\n\r\n\r\n// TODO\r\n// - mobile view\r\nfunction UserProfilePage() {\r\n const [loading, setLoading] = useState(false);\r\n const [loadingError, setLoadingError] = useState(null);\r\n const [userData, setUserData] = useState(null);\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n\r\n getProfile()\r\n .then(data => setUserData(data))\r\n .catch(err => {\r\n setLoadingError(err);\r\n })\r\n .then(() => setLoading(false));\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n
User Profile
\r\n {\r\n loading && (\r\n \r\n )\r\n }\r\n\r\n {\r\n loadingError && (\r\n \r\n setLoadingError(false)}>An error has occurred while loading user profile data!\r\n \r\n )}\r\n\r\n {\r\n userData && (\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n {userData.firstname}\r\n
\r\n
\r\n \r\n {userData.surname}\r\n
\r\n {\r\n userData?.admin && (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n
\r\n \r\n \r\n {userData.email}\r\n \r\n \r\n \r\n \r\n {\r\n userData.locations?.length > 0 ?\r\n userData.locations?.map(el => (\r\n {el.name}\r\n ))\r\n : '-'\r\n }\r\n \r\n \r\n
\r\n
\r\n )\r\n }\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default UserProfilePage;","import axios from '../utils/axios';\r\n\r\nexport const getMultimediaProjects = () => {\r\n return axios.get(`projects/multimediaProjects`).then(response => response.data);\r\n}\r\nexport const getProject = id => {\r\n return axios.get(`projects/${id}/detail`).then(response => response.data);\r\n}\r\nexport const getAreaOfInterest = (id, epsg) => {\r\n return axios.get(`projects/getAreaOfInterest/${id}/${epsg}`).then(response => response.data);\r\n}\r\nexport const getMapConfig = (configName) => {\r\n return axios.get(`services/mapConfig/${configName}`).then(response => response.data);\r\n}\r\n\r\nexport const getGeoserverKey = () => {\r\n return axios.get(`services/geoserverKey`).then(response => response.data);\r\n}\r\nexport const deleteProject = (id) => {\r\n return axios.delete(`projects/${id}`).then(response => response.data);\r\n}\r\nexport const getProjectProcessingStatus = (id) => {\r\n return axios.get(`/services/healthMonitoringCheck/${id}`).then(response => response.data);\r\n}\r\nexport const restartProject = (id) => {\r\n return axios.get(`/projects/recalculateProject/${id}`).then(response => response.data);\r\n}\r\n\r\n/////forest specific/////\r\nexport const getForestFeatures = id => {\r\n return axios.get(`projects/${id}/forestFeatures`).then(response => response.data);\r\n}\r\nexport const saveForestFeatures = (features,id) => {\r\n return axios.post(`projects/${id}/forestFeatures/save`, features).then(response => response.data);\r\n}\r\nexport const calculateCompartment = (compartments) => {\r\n return axios.post(`geoprocessing/HealthCount`, compartments).then(response => response.data);\r\n}\r\n\r\n/////mill specific/////\r\nexport const getFeatures = id => {\r\n return axios.get(`projects/${id}/features`).then(response => response.data);\r\n}\r\nexport const saveFeatures = (id,features) => {\r\n return axios.post(`projects/${id}/features/save`, features).then(response => response.data);\r\n}\r\nexport const getTerrainProfile = (profile) => {\r\n return axios.post(`geoprocessing/TerrainProfile`, profile).then(response => response.data);\r\n}\r\nexport const getPolygonVolume = (area) => {\r\n return axios.post(`geoprocessing/PolygonVolume`, area).then(response => response.data);\r\n}\r\nexport const getCoefficient = id => {\r\n return axios.get(`projects/newCoefficient/${id}`).then(response => response.data);\r\n}\r\n\r\nexport const getPreviousFeatures = (id,name) => {\r\n return axios.get(`projects/${id}/previousProfiles/${name}`).then(response => response.data);\r\n}\r\n\r\nexport const calculateFeatures = (features) => {\r\n return axios.post(`geoprocessing/CalculateVolumes`, features).then(response => response.data);\r\n}","import React, {useState, useEffect} from 'react';\r\nimport styled from 'styled-components';\r\nimport { func, string, shape, arrayOf } from 'prop-types';\r\nimport DefaultLoading from '../../Loading';\r\nimport { FEATURE_KEY_ID } from '../../../config';\r\nimport './Map.css'\r\nimport { getMapConfig } from '../../../services/projectService';\r\n\r\nconst Loading = styled(DefaultLoading)`\r\n margin: 60px auto;\r\n justify-content: center;\r\n`;\r\n\r\n// TODO\r\n// - handle geoserverkey error\r\nfunction Map({crs, mapData, zoomedItemId, onSelectedMedia}) {\r\n const [isLoading, setLoading] = useState(true);\r\n const [isGenerated, setGenerated] = useState(false);\r\n const [mapConfig, setMapConfig] = useState(null)\r\n\r\n useEffect(() => {\r\n getMapConfig(\"mediaMap\")\r\n .then(data => {\r\n setMapConfig(data.config);\r\n console.log(\"config\");\r\n setLoading(false);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (zoomedItemId) {\r\n GIS.Layer.getFeatureExtentByID('subproject', zoomedItemId, {attribute: FEATURE_KEY_ID},\r\n (minx, miny, maxx, maxy) => GIS.Map.zoomToExtent([minx, miny, maxx, maxy],15)\r\n );\r\n }\r\n }, [zoomedItemId])\r\n\r\n useEffect(() => {\r\n if (isGenerated && mapData) {\r\n let extent = []\r\n mapData.map(property => {\r\n try {\r\n GIS.Layer.getFeatureExtentByID('subproject', property.properties.id, {attribute: FEATURE_KEY_ID},\r\n (minx, miny, maxx, maxy) => {extent = GIS.Projection.extendExtent([minx, miny, maxx, maxy], extent)}\r\n );\r\n } catch (Error) {}\r\n })\r\n if (extent.length > 0) {\r\n GIS.Map.zoomToExtent(extent);\r\n }\r\n }\r\n }, [isGenerated, mapData])\r\n\r\n // TODO fix data refresh\r\n useEffect(() => {\r\n if (!isGenerated && !isLoading) {\r\n /* global GIS */\r\n console.log(\"init\")\r\n GIS.Projection.init(mapConfig.projection);\r\n GIS.Style.init(mapConfig.style);\r\n GIS.Layer.init(mapConfig.layer, mapConfig.group);\r\n GIS.Control.init(mapConfig.control);\r\n GIS.Interaction.init(mapConfig.map);\r\n GIS.Map.init(mapConfig.map, mapConfig.view);\r\n\r\n GIS.Interaction.setCallback('Identify', {}, (X, Y) => {\r\n const scale = GIS.Map.getScale();\r\n // 250 adjusted based on icon size\r\n const radius = scale / 250;\r\n GIS.Layer.getFeaturesIDsInRadius('subproject', [X,Y], radius,{attribute: FEATURE_KEY_ID}, iDs => {\r\n const media = mapData.map(el => el.properties).filter(feature => iDs.includes(feature[FEATURE_KEY_ID]))\r\n\r\n if(media.length > 0) {\r\n onSelectedMedia(media);\r\n\r\n iDs.map(id => {\r\n GIS.Layer.setFeatureStyleByID('subproject', 'multimedia_select', id, {attribute: FEATURE_KEY_ID})\r\n });\r\n }\r\n })\r\n })\r\n setGenerated(true);\r\n }\r\n\r\n return function cleanup() {\r\n if (isGenerated) {\r\n GIS.Layer.clear();\r\n GIS.Interaction.clear();\r\n GIS.Control.clear();\r\n setGenerated(false);\r\n }\r\n };\r\n }, [isGenerated, isLoading]);\r\n\r\n useEffect(() => {\r\n if(isGenerated) {\r\n GIS.Layer.removeFeatures('subproject');\r\n GIS.Layer.addFeatures('subproject', {\r\n type: \"FeatureCollection\",\r\n name: \"Multimedia content\",\r\n features: mapData,\r\n crs,\r\n });\r\n\r\n try {\r\n const extent = GIS.Layer.getLayerExtent('subproject');\r\n GIS.Map.zoomToExtent(extent);\r\n } catch (e) {\r\n console.log(\"We don't have any media related to you.\")\r\n }\r\n }\r\n }, [isGenerated, crs, mapData]);\r\n\r\n return (\r\n <>\r\n { isLoading && (\r\n \r\n )}\r\n
\r\n \r\n )\r\n}\r\n\r\nMap.propTypes = {\r\n crs: shape({}),\r\n mapData: arrayOf(shape({})).isRequired,\r\n zoomedItemId: string,\r\n onSelectedMedia: func.isRequired,\r\n};\r\n\r\nMap.defaultProps = {\r\n crs: {\r\n type: \"EPSG\",\r\n properties: {\r\n code: 4326\r\n }\r\n },\r\n zoomedItemId: null,\r\n};\r\n\r\nexport default Map;","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgCircleExclamationSolid(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM232 152C232 138.8 242.8 128 256 128s24 10.75 24 24v128c0 13.25-10.75 24-24 24S232 293.3 232 280V152zM256 400c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 385.9 273.4 400 256 400z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCircleExclamationSolid);\nexport default __webpack_public_path__ + \"static/media/circle-exclamation-solid.6b6ccecb.svg\";\nexport { ForwardRef as ReactComponent };","import axios from '../utils/axios';\r\n\r\nexport const getProjectsOverview = () => {\r\n return axios.get('projects/overview').then(response => response.data);\r\n}\r\n\r\nexport const getProjectDetail = id => {\r\n return axios.get(`projects/${id}/detail`).then(response => response.data);\r\n}\r\n\r\nexport const getProjectThumbnail = id => {\r\n return axios.get(`projects/detail/multimedia/${id}/thumbnail`, { responseType: 'blob' }).then(response => response.data);\r\n}\r\n\r\nexport const getProjectMultimedia = id => {\r\n return axios.get(`projects/detail/multimedia/${id}/result`, { responseType: 'blob' }).then(response => response.data);\r\n}\r\nexport const getVideoUrl = id => {\r\n return axios.get(`projects/detail/video/${id}/url`).then(response => response.data);\r\n}\r\n\r\nexport const getGeoServerKey = () => {\r\n return axios.get('services/geoserverKey').then(response => response.data);\r\n}","import { useEffect, useState } from 'react';\r\nimport { string } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport Spinner from '../StoraEnsoComponents/Spinner';\r\nimport { getProjectThumbnail } from '../../services/mapService';\r\nimport { ReactComponent as ErrorSvg } from '../../assets/icons/circle-exclamation-solid.svg'\r\n\r\nconst Img = styled.img`\r\n display: block;\r\n flex: 0 0 auto;\r\n padding: 0;\r\n position: relative;\r\n max-width: 100%;\r\n`;\r\n\r\nconst ErrorIcon = styled(ErrorSvg)`\r\n width: 30px;\r\n height: auto;\r\n fill: #cf142b;\r\n margin-bottom: 16px;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n height: 150px;\r\n background-color: #f9f9f9;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n color: #646f76;\r\n\r\n .se-spinner {\r\n margin-bottom: 16px;\r\n }\r\n`;\r\n\r\nconst ErrorMessage = styled.span`\r\n color: #cf142b;\r\n`;\r\n\r\nfunction Thumbnail({ id }) {\r\n const [data, setData] = useState(null);\r\n const [isLoading, setLoading] = useState(true);\r\n const [showError, setShowError] = useState(false);\r\n\r\n useEffect(() => {\r\n getProjectThumbnail(id)\r\n .then(data => {\r\n setData(data);\r\n })\r\n .catch(() => {\r\n setShowError(true);\r\n console.error('Cannot download project thumbnail.')\r\n })\r\n .then(() => setLoading(false));\r\n }, [id]);\r\n\r\n if (isLoading) {\r\n return (\r\n \r\n \r\n Loading preview...\r\n \r\n );\r\n }\r\n\r\n if (showError) {\r\n return (\r\n \r\n \r\n An error has occurred!\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nThumbnail.propTypes = {\r\n id: string.isRequired,\r\n};\r\n\r\nexport default Thumbnail;\r\n","import { oneOf } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport bgSrc from '../../assets/images/bg-missing-preview.jpg';\r\nimport bgSrcMill from '../../assets/images/bg-missing-preview-mill.jpg';\r\nimport { ReactComponent as ImageSvg } from '../../assets/icons/photo-video.svg';\r\nimport { PROJECT_TYPES } from '../../config';\r\n\r\nconst ImageIcon = styled(ImageSvg)`\r\n width: 30px;\r\n height: 30px;\r\n fill: ${({theme}) => theme.colors.bg_gray_light};\r\n margin-bottom: 16px;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n height: 150px;\r\n background-color: #f9f9f9;\r\n background-image: url(${({type}) => type === 'mill' ? bgSrcMill : bgSrc});\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n background-position: center;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n color: ${({theme}) => theme.colors.bg_gray_light};\r\n`;\r\n\r\nfunction MissingPreview({ type }) {\r\n return (\r\n \r\n \r\n No preview available\r\n \r\n );\r\n}\r\n\r\nMissingPreview.propTypes = {\r\n type: oneOf([...PROJECT_TYPES, 'forestRGB', 'forestMulti']).isRequired,\r\n}\r\n\r\nexport default MissingPreview;","import { oneOf, string, } from 'prop-types';\r\nimport Thumbnail from './thumbnail';\r\nimport MissingPreview from './missingPreview';\r\nimport { PROJECT_TYPES } from '../../config';\r\n\r\nfunction MediaThumbnail({ id, type }) {\r\n\r\n if (['single', 'panorama', 'video'].includes(type)) {\r\n return (\r\n \r\n )\r\n }\r\n return \r\n}\r\n\r\nMediaThumbnail.propTypes = {\r\n id: string.isRequired,\r\n type: oneOf([...PROJECT_TYPES, 'forestRGB', 'forestMulti']).isRequired,\r\n};\r\n\r\nexport default MediaThumbnail;","import {\r\n string,\r\n bool,\r\n node,\r\n func,\r\n oneOf,\r\n elementType,\r\n oneOfType,\r\n} from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport ReactModal from 'react-modal';\r\nimport Button from '../StoraEnsoComponents/Button';\r\nimport Icon from '../StoraEnsoComponents/Icon';\r\nimport themeObj from '../../config/theme';\r\n\r\nconst modalStyle = {\r\n overlay: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n backgroundColor: 'rgba(0, 0, 0, 0.45)',\r\n zIndex: 9999,\r\n },\r\n content: {\r\n padding: '0',\r\n top: 'auto',\r\n bottom: 'auto',\r\n margin: 'auto',\r\n backgroundColor: themeObj.colors.white,\r\n border: '0 none',\r\n borderRadius: '0',\r\n display: 'grid',\r\n },\r\n};\r\n\r\nconst modalSize = ({ size }) =>\r\n ({\r\n sm: {\r\n width: 'calc(100% - 80px)',\r\n maxWidth: '500px',\r\n maxHeight: '80vh',\r\n },\r\n md: {\r\n width: 'calc(100% - 80px)',\r\n maxWidth: '700px',\r\n maxHeight: '80vh',\r\n },\r\n lg: {\r\n width: 'calc(100% - 80px)',\r\n maxWidth: '1600px',\r\n maxHeight: '80vh',\r\n },\r\n }[size]);\r\n\r\nconst IconWrapper = styled.div`\r\n ${Icon} {\r\n /* color: ${({theme}) => theme.colors.white}; */\r\n font-size: 12px;\r\n cursor: pointer;\r\n }\r\n`;\r\n\r\nconst ModalWrapper = styled.div`\r\n display: grid;\r\n grid-template-rows: auto 1fr auto;\r\n height: 100%;\r\n`;\r\n\r\nconst ModalHeader = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 0.5em 1em;\r\n background-color: ${({theme}) => theme.colors.bg_gray_light};\r\n`;\r\n\r\nconst Title = styled.div`\r\n /* color: ${({ theme }) => theme.colors.white}; */\r\n font-weight: bold;\r\n line-height: 1.25;\r\n`;\r\n\r\nconst ModalBody = styled.div`\r\n padding: 1em;\r\n max-height: calc(80vh - 92px); /* max Modal height - height of header and footer */\r\n overflow: auto;\r\n`;\r\n\r\nconst ModalFooter = styled.div`\r\n padding: 0.25rem;\r\n /* border-top: 1px solid ${({ theme }) => theme.colors.medium_bg}; */\r\n color: ${({ theme }) => theme.colors.medium_text};\r\n background-color: ${({theme}) => theme.colors.bg_gray_light};\r\n`;\r\n\r\nconst FooterContent = styled.div`\r\n display: grid;\r\n grid-template-columns: 1fr auto;\r\n`;\r\n\r\nconst CustomFooterContentWrapper = styled.div``;\r\n\r\nconst ButtonWrapper = styled.div`\r\n align-content: flex-end;\r\n\r\n ${Button} {\r\n margin-left: 0.5rem;\r\n }\r\n`;\r\n\r\nconst Content = styled.div`\r\n`;\r\n\r\nfunction Modal ({\r\n modalId,\r\n size,\r\n isOpen,\r\n title,\r\n children,\r\n // isClosable,\r\n onClose,\r\n onSubmit,\r\n submitBtnLabel,\r\n cancelBtnLabel,\r\n cancelDisabled,\r\n submitDisabled,\r\n customFooterContent,\r\n onlyCloseBtn,\r\n showFooter,\r\n}) {\r\n\r\n const customStyle = {\r\n ...modalStyle,\r\n content: {\r\n ...modalStyle.content,\r\n ...modalSize({ size }),\r\n },\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {title}\r\n \r\n close\r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n\r\n {\r\n showFooter && (\r\n \r\n \r\n \r\n {customFooterContent}\r\n \r\n \r\n \r\n {\r\n !onlyCloseBtn && (\r\n \r\n )\r\n }\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n \r\n \r\n );\r\n};\r\n\r\nModal.propTypes = {\r\n modalId: string,\r\n size: oneOf(['sm', 'md', 'lg']),\r\n isOpen: bool.isRequired,\r\n title: oneOfType([elementType, node]).isRequired,\r\n children: node.isRequired,\r\n isClosable: bool,\r\n onClose: func,\r\n onSubmit: func,\r\n submitBtnLabel: string,\r\n cancelBtnLabel: string,\r\n cancelDisabled: bool,\r\n submitDisabled: bool,\r\n customFooterContent: node,\r\n onlyCloseBtn: bool,\r\n showFooter: bool,\r\n};\r\n\r\nModal.defaultProps = {\r\n modalId: '',\r\n size: 'md',\r\n isClosable: true,\r\n submitBtnLabel: 'Ok',\r\n cancelBtnLabel: 'Cancel',\r\n cancelDisabled: false,\r\n submitDisabled: false,\r\n customFooterContent: undefined,\r\n onlyCloseBtn: false,\r\n showFooter: true,\r\n onSubmit: () => {},\r\n onClose: () => {},\r\n};\r\n\r\nexport default Modal;\r\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFasTriangleExclamation(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFasTriangleExclamation);\nexport default __webpack_public_path__ + \"static/media/fas-triangle-exclamation.39fddbbd.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useEffect, useState } from 'react';\r\nimport { arrayOf, shape, } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport MediaThumbnail from '../../MediaThumbnail';\r\nimport Modal from '../../Modal';\r\n\r\nconst Grid = styled.div`\r\n display: grid;\r\n grid-template-columns: 1fr;\r\n grid-gap: 1.5rem;\r\n\r\n\r\n @media screen and (min-width: 576px) {\r\n grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));\r\n grid-auto-rows: 1fr;\r\n }\r\n\r\n @media screen and (min-width: 1400px) {\r\n grid-template-columns: repeat(6, 1fr);\r\n }\r\n`;\r\n\r\nconst TitleWrapper = styled.div`\r\n display: grid;\r\n grid-template-columns: 14px 1fr;\r\n column-gap: 8px;\r\n margin-bottom: 16px;\r\n\r\n svg {\r\n margin-top: 3px;\r\n }\r\n\r\n span {\r\n line-height: 1.4;\r\n }\r\n`;\r\n\r\nconst Item = styled.div`\r\n background-color: ${({theme}) => theme.colors.white};\r\n box-shadow: 0 0 2px 0 rgb(0 0 0 / 25%);\r\n transition: all 0.5s ease;\r\n\r\n &:hover {\r\n cursor: pointer;\r\n background-color: ${({theme}) => theme.colors.bg_gray_light};\r\n box-shadow: 0 0 20px rgb(34 36 38 / 15%);\r\n\r\n ${TitleWrapper} {\r\n color: ${({theme}) => theme.colors.information};\r\n }\r\n }\r\n\r\n img {\r\n object-fit: cover;\r\n height: 150px;\r\n }\r\n`;\r\n\r\nconst ItemContent = styled.div`\r\n padding: 1em;\r\n font-weight: bold;\r\n white-space: pre-wrap;\r\n\r\n overflow-wrap: break-word;\r\n\r\n word-wrap: break-word;\r\n\r\n word-break: break-word;\r\n\r\n hyphens: auto;\r\n`;\r\n\r\n// TODO\r\n// - fix icons, tags, types\r\nconst MediaModal = ({items}) => {\r\n const [isOpen, setOpen] = useState(false);\r\n const navigate = useNavigate();\r\n\r\n const getIconStr = type => {\r\n switch(type) {\r\n case 'panorama':\r\n return 'street-view';\r\n case 'video':\r\n return 'video';\r\n case 'forest':\r\n return 'tree';\r\n case 'forestMulti':\r\n return 'tree';\r\n case 'forestRGB':\r\n return 'tree';\r\n case 'mill':\r\n return 'industry';\r\n default:\r\n return 'images';\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (items.length > 0) {\r\n setOpen(true);\r\n }\r\n }, [items]);\r\n\r\n return (\r\n setOpen(false)}\r\n onlyCloseBtn\r\n >\r\n \r\n {items.map(({id, type, name}) => (\r\n navigate(`/project/detail/${id}`)} raised>\r\n \r\n \r\n \r\n \r\n {name || '-'}\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n )\r\n};\r\n\r\nMediaModal.propTypes = {\r\n items: arrayOf(shape({})).isRequired,\r\n}\r\n\r\nexport default MediaModal;\r\n\r\n","import { useMemo } from 'react';\r\nimport { bool, func } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport { Link } from \"react-router-dom\";\r\nimport { DateTime } from 'luxon';\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport DefaultButton from '../../StoraEnsoComponents/Button';\r\nimport DataTable from '../../DataTable';\r\nimport { sortAlphanumericFunc, sortByDateTimeFunc } from '../../DataTable/utils';\r\nimport { ReactComponent as WarningSvg } from '../../../assets/icons/fas-triangle-exclamation.svg';\r\n\r\n\r\nexport const WarningIcon = styled(WarningSvg)`\r\n width: 16px;\r\n height: auto;\r\n fill: ${({theme}) => theme.colors.attention};\r\n`;\r\n\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`;\r\n\r\nconst IconWrapper = styled.div`\r\n margin-right: 8px;\r\n color: #67b419;\r\n`;\r\n\r\nconst Button = styled(DefaultButton)`\r\n padding: 0 12px;\r\n\r\n span {\r\n padding: 4px 0;\r\n }\r\n`;\r\n\r\nconst getTypeStr = type => {\r\n switch(type) {\r\n case 'single':\r\n return 'Photo';\r\n case 'panorama':\r\n return 'Panorama';\r\n case 'video':\r\n return 'Video';\r\n case 'forest':\r\n case 'forestMulti':\r\n case 'forestRGB':\r\n return 'Forest';\r\n case 'mill':\r\n return 'Mill';\r\n default:\r\n return '-';\r\n }\r\n}\r\n\r\nconst getIconStr = type => {\r\n switch(type) {\r\n case 'panorama':\r\n return 'street-view';\r\n case 'video':\r\n return 'video';\r\n case 'forest':\r\n case 'forestMulti':\r\n case 'forestRGB':\r\n return 'tree';\r\n case 'mill':\r\n return 'industry';\r\n default:\r\n return 'images';\r\n }\r\n}\r\n\r\nconst getColumns = ({onItemSelect, onItemZoom}) => [\r\n {\r\n id: 'name',\r\n Header: 'Name',\r\n accessor: 'name',\r\n sortType: sortAlphanumericFunc,\r\n Cell: ({\r\n value,\r\n row: { original: { id, } }\r\n }) => (\r\n {value || '-'}\r\n )\r\n },\r\n {\r\n id: 'type',\r\n Header: 'Type',\r\n accessor: 'type',\r\n customHeaderWidth: 150,\r\n Cell: ({ value }) => (\r\n \r\n \r\n \r\n \r\n {getTypeStr(value)}\r\n \r\n ),\r\n },\r\n {\r\n id: 'statusDescription',\r\n Header: 'Status',\r\n accessor: 'statusDescription',\r\n customHeaderWidth: 100,\r\n Cell: ({\r\n value,\r\n row: { original: { processingError} }\r\n }) => {\r\n return (\r\n <>\r\n {processingError ? : <>{value || '-'}}\r\n \r\n )}\r\n },\r\n {\r\n id: 'location',\r\n Header: 'Location',\r\n accessor: 'location',\r\n Cell: ({ value }) => (
{value || '-'}
),\r\n },\r\n {\r\n id: 'created',\r\n Header: 'Created',\r\n accessor: 'created',\r\n sortType: sortByDateTimeFunc,\r\n customHeaderWidth: 150,\r\n Cell: ({ value }) => !value ? '' : DateTime.fromISO(value).toLocaleString({dateStyle: 'short', hour12: false}),\r\n },\r\n {\r\n Header: () => null,\r\n accessor: 'none',\r\n disableSortBy: true,\r\n customAlignment: 'right',\r\n Cell: ({\r\n row: { original: { id, hasGeometry } }\r\n }) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n )}\r\n },\r\n];\r\n\r\nfunction MediaGrid({ data, loading, onItemSelect, onItemZoom }) {\r\n const columns = useMemo(() => getColumns({onItemSelect, onItemZoom}), [onItemSelect, onItemZoom]);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nMediaGrid.propTypes = {\r\n loading: bool.isRequired,\r\n onItemSelect: func.isRequired,\r\n onItemZoom: func.isRequired,\r\n}\r\n\r\nexport default MediaGrid;","import {useEffect, useState} from 'react';\r\nimport { oneOf, node, bool, } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport classNames from 'classnames';\r\n\r\nconst positionStyles = ({ direction }) =>\r\n ({\r\n right: `\r\n height: 100%;\r\n width: 100%;\r\n max-width: 270px;\r\n top: 0;\r\n right: 0;\r\n transform: translate3d(100%,0,0);\r\n `,\r\n bottom: `\r\n width: 100%;\r\n bottom: 0;\r\n transform: translate3d(0,100%,0);\r\n `,\r\n}[direction]);\r\n\r\nconst Wrapper = styled.div`\r\n background-color: ${({theme}) => theme.colors.white};\r\n width: auto;\r\n height: auto;\r\n position: absolute;\r\n z-index: 102;\r\n visibility: hidden;\r\n transition: none;\r\n overflow: auto;\r\n\r\n ${(props) => positionStyles(props)};\r\n\r\n &.visible {\r\n visibility: visible;\r\n transition: transform .5s ease;\r\n transform: translate3d(0,0,0);\r\n box-shadow: 0 0 20px rgb(34 36 38 / 15%);\r\n }\r\n\r\n &.animating {\r\n ${(props) => positionStyles(props)};\r\n visibility: visible;\r\n }\r\n`;\r\n\r\nexport function Sidebar({\r\n children,\r\n visible,\r\n direction,\r\n}) {\r\n const [isVisible, setVisible] = useState(false);\r\n const [animating, setAnimating] = useState(false);\r\n\r\n const componentClass = classNames({\r\n 'visible': isVisible,\r\n 'animating': animating,\r\n });\r\n\r\n // handle close animation\r\n useEffect(async () => {\r\n if(!visible && isVisible) {\r\n setAnimating(true);\r\n\r\n await new Promise(r => setTimeout(r, 500))\r\n setAnimating(false);\r\n setVisible(visible);\r\n\r\n } else {\r\n setVisible(visible);\r\n }\r\n }, [visible]);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nSidebar.propTypes = {\r\n children: node.isRequired,\r\n visible: bool.isRequired,\r\n direction: oneOf(['right', 'bottom']),\r\n};\r\n\r\nSidebar.defaultProps = {\r\n direction: 'right',\r\n}\r\n\r\nexport const SidebarWrapper = styled.div`\r\n position: relative;\r\n overflow: hidden;\r\n`;","import { useState, useEffect } from 'react';\r\nimport { func } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport { useDebouncedCallback } from 'use-debounce';\r\nimport DefaultCheckbox from '../../Forms/checkbox';\r\nimport DefaultInput from '../../Forms/input';\r\n\r\nconst Label = styled.label`\r\n font-size: 1rem;\r\n margin-right: 8px;\r\n`;\r\n\r\nconst Input = styled(DefaultInput)`\r\n width: 250px;\r\n margin-right: 32px;\r\n padding: 0.5rem;\r\n margin-left: 8px;\r\n`;\r\n\r\nconst Checkbox = styled(DefaultCheckbox)`\r\n width: auto;\r\n margin-bottom: 0;\r\n margin-right: 16px;\r\n font-size: 1rem;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n position: fixed;\r\n top: 80px; /* based on header height */\r\n max-width: 1920px;\r\n width: 100%;\r\n z-index: 999;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-start;\r\n align-items: center;\r\n background-color: ${({theme}) => theme.colors.bg_gray_light};\r\n padding: 0.5rem;\r\n box-shadow: 0 0 20px rgb(34 36 38 / 15%);\r\n`;\r\n\r\nconst Filters = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`;\r\n\r\nfunction DataFilter ({ onSearchChange, onTypeChange }) {\r\n const [searchValue, setSearchValue] = useState('');\r\n const [typeValues, setTypeValues] = useState({\r\n single: true,\r\n panorama: true,\r\n video: true,\r\n mill: true,\r\n forest: true,\r\n })\r\n\r\n const setDebouncedSearch = useDebouncedCallback(() => {\r\n onSearchChange(searchValue.trim());\r\n }, 500);\r\n\r\n const setDebouncedType = useDebouncedCallback(() => {\r\n onTypeChange(typeValues);\r\n }, 500);\r\n\r\n const handleSearchChange = (val) => {\r\n setSearchValue(val);\r\n setDebouncedSearch();\r\n };\r\n\r\n const handleTypeChange = (id, checked) => {\r\n setTypeValues(prev => ({\r\n ...prev, [id]: checked\r\n }));\r\n\r\n setDebouncedType();\r\n }\r\n\r\n useEffect(() => {\r\n onTypeChange(typeValues);\r\n }, []);\r\n\r\n return (\r\n \r\n handleSearchChange(ev.target.value)} />\r\n\r\n \r\n \r\n handleTypeChange('single', e.target.checked)} />\r\n handleTypeChange('panorama', e.target.checked)} />\r\n handleTypeChange('video', e.target.checked)} />\r\n handleTypeChange('mill', e.target.checked)} />\r\n handleTypeChange('forest', e.target.checked)} />\r\n \r\n \r\n );\r\n}\r\n\r\nDataFilter.propTypes = {\r\n onSearchChange: func.isRequired,\r\n onTypeChange: func.isRequired,\r\n}\r\n\r\nexport default DataFilter;","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgAngleUp(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 384 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.5 294.5l152-143.1C180.1 146.2 186.1 144 192 144s11.88 2.188 16.5 6.562l152 143.1c9.625 9.125 10.03 24.31 .9375 33.93c-9.125 9.688-24.38 10.03-33.94 .9375l-135.5-128.4l-135.5 128.4c-9.562 9.094-24.75 8.75-33.94-.9375C13.47 318.9 13.87 303.7 23.5 294.5z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgAngleUp);\nexport default __webpack_public_path__ + \"static/media/angle-up.0b995f0a.svg\";\nexport { ForwardRef as ReactComponent };","import { useEffect, useState, useMemo } from 'react';\r\nimport styled from 'styled-components';\r\nimport normalize from 'normalize-strings';\r\nimport keys from 'lodash/keys';\r\nimport pickBy from 'lodash/pickBy'\r\nimport { useNavigate } from 'react-router-dom';\r\nimport Button from '../StoraEnsoComponents/Button';\r\nimport Icon from '../StoraEnsoComponents/Icon';\r\nimport Map from './Map';\r\nimport MediaModal from './MediaModal';\r\nimport { getProjectsOverview } from '../../services/mapService';\r\nimport MediaGrid from './MediaGrid';\r\n// import SearchProjectInput from './SearchProjectInput';\r\nimport DefaultLoading from '../Loading';\r\nimport { SidebarWrapper, Sidebar } from '../Sidebar';\r\nimport DataFilter from './DataFilter';\r\nimport { ReactComponent as ArrowUpSvg } from '../../assets/icons/angle-up.svg';\r\n\r\nconst OpenIcon = styled(ArrowUpSvg)``;\r\n\r\nconst OpenPanelBtn = styled(Button)`\r\n position: absolute;\r\n left: 50%;\r\n bottom: 0;\r\n transform: translateX(-50%);\r\n`;\r\n\r\nconst CloseIcon = styled(Icon)`\r\n cursor: pointer;\r\n align-self: flex-end;\r\n`;\r\n\r\nconst Loading = styled(DefaultLoading)`\r\n margin: 60px auto;\r\n justify-content: center;\r\n`;\r\n\r\nconst MapWrapper = styled.div`\r\n height: calc(100vh - 80px);\r\n overflow-y: hidden;\r\n /* font-size: 1rem; */\r\n position: relative;\r\n\r\n .ol-overlaycontainer-stopevent {\r\n position: absolute;\r\n width: 100% !important;\r\n height: 100% !important;\r\n margin: 0;\r\n }\r\n\r\n .ol-scale-line {\r\n position: absolute;\r\n right: 8px;\r\n bottom: 8px;\r\n\r\n .ol-scale-line-inner {\r\n position: absolute !important;\r\n bottom: 0 !important;\r\n right: 0 !important;\r\n }\r\n }\r\n\r\n .ol-mouse-position {\r\n position: absolute !important;\r\n top: 58px !important;\r\n right: 8px !important;\r\n }\r\n\r\n .cfm-geolocation {\r\n position: absolute !important;\r\n right: 8px !important;\r\n top: calc(50% + 14px) !important;\r\n transform: translateY(-50%) !important;\r\n }\r\n\r\n .ol-zoom {\r\n position: absolute !important;\r\n right: 8px !important;\r\n top: calc(50% + 1.5rem + 2.5rem) !important;\r\n transform: translateY(-50%) !important;\r\n }\r\n`;\r\n\r\nconst GridWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n margin: 16px;\r\n`;\r\n\r\nconst PanelWrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-end;\r\n align-items: flex-start;\r\n`;\r\n\r\n// TODO\r\n// - handle loading error/progress\r\n// - show map loading icon\r\n// - remove !important from styles\r\nfunction MediaMap() {\r\n const [visible, setVisible] = useState(true);\r\n const [overviewData, setOverviewData] = useState(null);\r\n const [isLoading, setLoading] = useState(true);\r\n const [zoomedItemId, setZoomedItemId] = useState(null);\r\n const [filtered, setFiltered] = useState(null);\r\n const [gridSearch, setGridSearch] = useState('');\r\n const [gridTypeFilter, setGridTypeFilter] = useState(null);\r\n const [selectedItems, setSelectedItems] = useState([]);\r\n const navigate = useNavigate();\r\n\r\n const gridData = useMemo(() => {\r\n if (overviewData) {\r\n const data = filtered || overviewData;\r\n return data.map(item => ({\r\n ...item.properties,\r\n hasGeometry: !!item.geometry,\r\n }));\r\n } else {\r\n return [];\r\n }\r\n }, [overviewData, filtered]);\r\n\r\n const mapData = useMemo(() => {\r\n if (overviewData) {\r\n const data = filtered || overviewData;\r\n return data.filter(el => el.geometry);\r\n } else {\r\n return null;\r\n }\r\n }, [overviewData, filtered]);\r\n\r\n useEffect(() => {\r\n const activeTypes = keys(pickBy(gridTypeFilter, value => value === true));\r\n\r\n if(!isLoading && (gridSearch.trim().length > 0 || (gridTypeFilter && activeTypes.length !== 5))) {\r\n const regex = new RegExp(normalize(gridSearch), 'gi');\r\n let tempData = overviewData;\r\n\r\n if(activeTypes.length === 0) {\r\n setFiltered(null);\r\n }\r\n\r\n if(activeTypes.length !== 5) {\r\n // handle new forest types (forest, forestMulti, forestRGB)\r\n const processedActiveTypes = activeTypes.includes('forest') ? [...activeTypes, 'forestMulti', 'forestRGB'] : activeTypes;\r\n tempData = overviewData.filter(item => processedActiveTypes.includes(item.properties.type));\r\n }\r\n\r\n setFiltered(tempData.filter(item => ((normalize(item.properties?.name || '')).match(regex) || (normalize(item.properties?.location || '')).match(regex))));\r\n } else {\r\n setFiltered(null);\r\n }\r\n }, [isLoading, gridSearch, gridTypeFilter]);\r\n\r\n const handleSelection = data => {\r\n data.length > 1 ? setSelectedItems(data) : navigate(`/project/detail/${data[0].id}`);\r\n }\r\n\r\n useEffect(() => {\r\n getProjectsOverview()\r\n .then(data => {\r\n setOverviewData(data);\r\n })\r\n .catch(() => {\r\n console.error('Cannot download media data.')\r\n })\r\n .then(() => setLoading(false))\r\n }, []);\r\n\r\n if(isLoading) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n setVisible(false)}>close\r\n
\r\n
\r\n handleSelection([{id: selectedId}])}\r\n onItemZoom={selectedId => setZoomedItemId(selectedId)}\r\n />\r\n
\r\n \r\n \r\n setGridSearch(value)}\r\n onTypeChange={value => setGridTypeFilter(value)}\r\n />\r\n \r\n {/* setFiltered(data)} onSelect={selectedId => handleSelection([{id: selectedId}])} /> */}\r\n \r\n } onClick={() => setVisible(true)}>Find your project\r\n \r\n
\r\n );\r\n}\r\nexport default MediaMap;","import { useState } from 'react';\r\nimport { string, node, bool } from 'prop-types';\r\nimport styled from 'styled-components';\r\n\r\nconst Wrapper = styled.div`\r\n position: relative;\r\n /* z-index: 0; */\r\n`;\r\n\r\nconst TitleWrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n align-items: flex-end;\r\n`;\r\n\r\nconst LinkBtn = styled.span`\r\n font-size: 1rem;\r\n cursor: pointer;\r\n color: ${({theme}) => theme.colors.link};\r\n\r\n &:hover {\r\n color: $${({theme}) => theme.colors.link_hover}\r\n }\r\n`;\r\n\r\nconst Title = styled.p`\r\n margin: 0px;\r\n font-size: 16px;\r\n border-left: 0px;\r\n padding-left: 0px;\r\n font-weight: bold;\r\n`;\r\n\r\nconst SectionWrapper = styled.div`\r\n background-color: ${({theme}) => theme.colors.white};\r\n box-shadow: rgb(214 217 223) 0px 0px 4px;\r\n margin-bottom: 1.5rem;\r\n /* border-radius: 5px; */\r\n padding: 1.5rem 2rem;\r\n height: ${({collapsed}) => collapsed ? '90px' : 'auto'};\r\n position: relative;\r\n overflow: ${({collapsed}) => collapsed ? 'hidden' : 'visible'};\r\n overflow-x: auto;\r\n\r\n ${({collapsed}) => collapsed &&\r\n `\r\n &::after {\r\n content: '';\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n height: 70%;\r\n width: 100%;\r\n background: linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,1) 50%, rgba(255,255,255,0) 100%);\r\n z-index: 0;\r\n }`\r\n }\r\n`;\r\n\r\nfunction Section({title, isCollapsible, defaultCollapsedState, children}) {\r\n const [collapsed, setCollapsed] = useState(isCollapsible && defaultCollapsedState);\r\n\r\n return (\r\n \r\n \r\n {title}\r\n {\r\n isCollapsible && (\r\n setCollapsed(prev => !prev)}>{collapsed ? 'show more': 'show less'}\r\n )\r\n }\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n}\r\n\r\nSection.propTypes = {\r\n title: string.isRequired,\r\n children: node.isRequired,\r\n isCollapsible: bool,\r\n defaultCollapsedState: bool,\r\n\r\n};\r\n\r\nSection.defaultProps = {\r\n isCollapsible: true,\r\n defaultCollapsedState: true,\r\n}\r\n\r\nexport default Section;","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgTrashCanSolid(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 448 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M135.2 17.69C140.6 6.848 151.7 0 163.8 0H284.2C296.3 0 307.4 6.848 312.8 17.69L320 32H416C433.7 32 448 46.33 448 64C448 81.67 433.7 96 416 96H32C14.33 96 0 81.67 0 64C0 46.33 14.33 32 32 32H128L135.2 17.69zM31.1 128H416V448C416 483.3 387.3 512 352 512H95.1C60.65 512 31.1 483.3 31.1 448V128zM111.1 208V432C111.1 440.8 119.2 448 127.1 448C136.8 448 143.1 440.8 143.1 432V208C143.1 199.2 136.8 192 127.1 192C119.2 192 111.1 199.2 111.1 208zM207.1 208V432C207.1 440.8 215.2 448 223.1 448C232.8 448 240 440.8 240 432V208C240 199.2 232.8 192 223.1 192C215.2 192 207.1 199.2 207.1 208zM304 208V432C304 440.8 311.2 448 320 448C328.8 448 336 440.8 336 432V208C336 199.2 328.8 192 320 192C311.2 192 304 199.2 304 208z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgTrashCanSolid);\nexport default __webpack_public_path__ + \"static/media/trash-can-solid.80ad713a.svg\";\nexport { ForwardRef as ReactComponent };","const getColumns = ({totalData}) => [\r\n {\r\n id: 'type',\r\n Header: 'Tree species',\r\n accessor: 'type',\r\n customHeaderWidth: 100,\r\n Footer: 'Total'\r\n },\r\n {\r\n Header: 'Count',\r\n Footer: () => null,\r\n footerHidden: true,\r\n customHeaderWidth: 160,\r\n columns: [\r\n {\r\n Header: 'Total',\r\n accessor: 'total',\r\n Footer: () => {totalData?.total},\r\n customAlignment: 'right',\r\n },\r\n {\r\n Header: '1 ha',\r\n accessor: 'per_ha',\r\n Footer: () => {totalData?.per_ha},\r\n customAlignment: 'right'\r\n }\r\n ]\r\n },\r\n {\r\n Header: 'Healthy',\r\n Footer: () => null,\r\n footerHidden: true,\r\n customHeaderWidth: 160,\r\n columns: [\r\n {\r\n Header: 'Count',\r\n accessor: 'healthy',\r\n Footer: () => {totalData?.healthy},\r\n customAlignment: 'right'\r\n },\r\n {\r\n Header: '%',\r\n accessor: 'healthy_pct',\r\n Footer: () => {totalData?.healthy_pct},\r\n customAlignment: 'right'\r\n }\r\n ]\r\n },\r\n {\r\n Header: 'Infested',\r\n Footer: () => null,\r\n footerHidden: true,\r\n customHeaderWidth: 160,\r\n columns: [\r\n {\r\n Header: 'Count',\r\n accessor: 'infested',\r\n Footer: () => {totalData?.infested},\r\n customAlignment: 'right'\r\n },\r\n {\r\n Header: '%',\r\n accessor: 'infested_pct',\r\n Footer: () => {totalData?.infested_pct},\r\n customAlignment: 'right'\r\n }\r\n ]\r\n },\r\n {\r\n Header: 'Dead',\r\n Footer: () => null,\r\n footerHidden: true,\r\n customHeaderWidth: 160,\r\n columns: [\r\n {\r\n Header: 'Count',\r\n accessor: 'dead',\r\n Footer: () => {totalData?.dead},\r\n customAlignment: 'right'\r\n },\r\n {\r\n Header: '%',\r\n accessor: 'dead_pct',\r\n Footer: () => {totalData?.dead_pct},\r\n customAlignment: 'right'\r\n }\r\n ]\r\n },\r\n {\r\n id: 'avgHeight',\r\n Header: 'Avg. height',\r\n accessor: 'avg_height',\r\n Footer: () => {totalData.avg_height},\r\n customAlignment: 'right'\r\n },\r\n {\r\n id: 'avgCrownDiam',\r\n Header: 'Avg. crown diameter',\r\n accessor: 'avg_crown_diam',\r\n Footer: () => {totalData.avg_crown_diam},\r\n customAlignment: 'right'\r\n },\r\n {\r\n id: 'avgBhd',\r\n Header: 'Avg. BHD',\r\n accessor: 'avg_bhd',\r\n Footer: () => {totalData.avg_bhd},\r\n customAlignment: 'right'\r\n },\r\n {\r\n id: 'avgVolume',\r\n Header: 'Avg. volume',\r\n accessor: 'avg_volume',\r\n Footer: () => {totalData.avg_volume},\r\n customAlignment: 'right'\r\n },\r\n];\r\n\r\nexport default getColumns;","import { useMemo, useState, useEffect } from 'react';\r\nimport { func, shape } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport DataTable from '../../DataTable';\r\nimport Button from '../../StoraEnsoComponents/Button';\r\nimport getColumns from './columns';\r\nimport { ReactComponent as TrashCanSvg } from '../../../assets/icons/trash-can-solid.svg';\r\n\r\nconst DeleteIcon = styled(TrashCanSvg)`\r\n width: 12px;\r\n height: auto;\r\n fill: ${({theme}) => theme.colors.white};\r\n`;\r\n\r\nconst Label = styled.span`\r\n font-weight: bold;\r\n`;\r\n\r\nconst TopPanel = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n align-items: center;\r\n background-color: ${({theme}) => theme.colors.bg_gray};\r\n padding: 8px;\r\n`;\r\n\r\nconst Actions = styled.div`\r\n`;\r\n\r\n// TODO\r\n// - add export button\r\n// - add delete button\r\nfunction CompartmentDetailGrid({data, onDelete, onCalculate}) {\r\n const [gridData, setGridData] = useState([]);\r\n const [totalData, setTotalData] = useState(null);\r\n\r\n const columns = useMemo(() => getColumns({totalData}), [totalData]);\r\n\r\n useEffect(() => {\r\n setGridData(data.data.slice(0,4));\r\n setTotalData(data.data[4]);\r\n }, [data]);\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\nCompartmentDetailGrid.propTypes = {\r\n data: shape({}),\r\n onDelete: func.isRequired,\r\n}\r\n\r\nexport default CompartmentDetailGrid;","import styled from 'styled-components';\r\nimport Section from '../../Section';\r\nimport CompartmentDetailGrid from '../CompartmentDetailGrid';\r\n\r\nconst ItemWrapper = styled.div`\r\n\r\n &:not(:last-child) {\r\n border-bottom: 1px solid ${({theme}) => theme.colors.bg_gray};\r\n padding-bottom: 24px;\r\n margin-bottom: 24px;\r\n }\r\n`;\r\n\r\nfunction CompartmentList({data, onDelete}) {\r\n\r\n if(data?.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {\r\n data?.map((item, idx) => (\r\n\r\n \r\n onDelete({item, idx})} />\r\n \r\n ))\r\n }\r\n
\r\n );\r\n}\r\n\r\nexport default CompartmentList;","export default {\r\n name: \"DEM\",\r\n type: \"wmsTiled\",\r\n switcher:{\r\n \"title\":\"DEM\",\r\n \"icon\":\"/assets/images/DEM.jpg\"\r\n },\r\n tiled: true,\r\n layers: [],\r\n serverType: \"geoserver\",\r\n version: \"1.1.0\",\r\n format: \"image/png\",\r\n url: \"/geoserver/wms\",\r\n styles: \"\",\r\n visible: false,\r\n opacity: 1,\r\n ENV: {min:0,max:0},\r\n epsg: 5514,\r\n transition: 1\r\n}","import React, { createContext, useContext, useState } from 'react';\r\n\r\nconst DroneDetailContext = createContext();\r\n\r\nexport function DroneDetailProvider({children}) {\r\n const [featuresData, setFeaturesData] = useState(null);\r\n const [selectedFeature, setSelectedFeature] = useState(null);\r\n const [deletedFeature, setDeletedFeature] = useState(null);\r\n const [selectedTool, setSelectedTool] = useState(null);\r\n const [unsavedChanges, setUnsavedChanges] = useState(false);\r\n const { Provider } = DroneDetailContext;\r\n\r\n const contextData = {\r\n featuresData,\r\n setFeaturesData,\r\n selectedFeature,\r\n setSelectedFeature,\r\n deletedFeature,\r\n setDeletedFeature,\r\n selectedTool,\r\n setSelectedTool,\r\n unsavedChanges,\r\n setUnsavedChanges\r\n }\r\n\r\n return {children};\r\n}\r\nexport const useDroneDetailContext = () => useContext(DroneDetailContext);","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFalRuler(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29.25 413.3C4.26 388.3 4.26 347.7 29.25 322.7L322.7 29.25C347.7 4.261 388.3 4.261 413.3 29.25L482.7 98.75C507.7 123.7 507.7 164.3 482.7 189.3L189.3 482.7C164.3 507.7 123.7 507.7 98.74 482.7L29.25 413.3zM51.88 390.6L121.4 460.1C133.9 472.6 154.1 472.6 166.6 460.1L460.1 166.6C472.6 154.1 472.6 133.9 460.1 121.4L390.6 51.88C378.1 39.39 357.9 39.39 345.4 51.88L305.9 91.31L347.3 132.7C353.6 138.9 353.6 149.1 347.3 155.3C341.1 161.6 330.9 161.6 324.7 155.3L283.3 113.9L241.9 155.3L283.3 196.7C289.6 202.9 289.6 213.1 283.3 219.3C277.1 225.6 266.9 225.6 260.7 219.3L219.3 177.9L177.9 219.3L219.3 260.7C225.6 266.9 225.6 277.1 219.3 283.3C213.1 289.6 202.9 289.6 196.7 283.3L155.3 241.9L113.9 283.3L155.3 324.7C161.6 330.9 161.6 341.1 155.3 347.3C149.1 353.6 138.9 353.6 132.7 347.3L91.31 305.9L51.88 345.4C39.38 357.9 39.38 378.1 51.88 390.6V390.6z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFalRuler);\nexport default __webpack_public_path__ + \"static/media/fal-ruler.45550f86.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFalRulerCombined(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M448 288C483.3 288 512 316.7 512 352V448C512 483.3 483.3 512 448 512H64C30.86 512 3.608 486.8 .3306 454.5C.112 452.4 0 450.2 0 448V64C0 28.65 28.65 0 64 0H160C195.3 0 224 28.65 224 64V288H448zM192 192V128H128C119.2 128 112 120.8 112 112C112 103.2 119.2 96 128 96H192V64C192 46.33 177.7 32 160 32H64C46.33 32 32 46.33 32 64V448C32 449.1 32.06 450.2 32.17 451.3C33.8 467.4 47.45 480 64 480H448C465.7 480 480 465.7 480 448V352C480 334.3 465.7 320 448 320H416V384C416 392.8 408.8 400 400 400C391.2 400 384 392.8 384 384V320H320V384C320 392.8 312.8 400 304 400C295.2 400 288 392.8 288 384V320H224V384C224 392.8 216.8 400 208 400C199.2 400 192 392.8 192 384V320H128C119.2 320 112 312.8 112 304C112 295.2 119.2 288 128 288H192V224H128C119.2 224 112 216.8 112 208C112 199.2 119.2 192 128 192H192z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFalRulerCombined);\nexport default __webpack_public_path__ + \"static/media/fal-ruler-combined.9fc1fabc.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFalEllipsisStroke(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M480 256C480 291.3 451.3 320 416 320C380.7 320 352 291.3 352 256C352 220.7 380.7 192 416 192C451.3 192 480 220.7 480 256zM416 224C398.3 224 384 238.3 384 256C384 273.7 398.3 288 416 288C433.7 288 448 273.7 448 256C448 238.3 433.7 224 416 224zM320 256C320 291.3 291.3 320 256 320C220.7 320 192 291.3 192 256C192 220.7 220.7 192 256 192C291.3 192 320 220.7 320 256zM256 224C238.3 224 224 238.3 224 256C224 273.7 238.3 288 256 288C273.7 288 288 273.7 288 256C288 238.3 273.7 224 256 224zM32 256C32 220.7 60.65 192 96 192C131.3 192 160 220.7 160 256C160 291.3 131.3 320 96 320C60.65 320 32 291.3 32 256zM96 288C113.7 288 128 273.7 128 256C128 238.3 113.7 224 96 224C78.33 224 64 238.3 64 256C64 273.7 78.33 288 96 288z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFalEllipsisStroke);\nexport default __webpack_public_path__ + \"static/media/fal-ellipsis-stroke.b6700866.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFalObjectGroup(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 576 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M272 128C298.5 128 320 149.5 320 176V240C320 266.5 298.5 288 272 288H176C149.5 288 128 266.5 128 240V176C128 149.5 149.5 128 176 128H272zM160 240C160 248.8 167.2 256 176 256H272C280.8 256 288 248.8 288 240V176C288 167.2 280.8 160 272 160H176C167.2 160 160 167.2 160 176V240zM352 240C352 231.2 359.2 224 368 224H400C426.5 224 448 245.5 448 272V336C448 362.5 426.5 384 400 384H304C277.5 384 256 362.5 256 336C256 327.2 263.2 320 272 320C280.8 320 288 327.2 288 336C288 344.8 295.2 352 304 352H400C408.8 352 416 344.8 416 336V272C416 263.2 408.8 256 400 256H368C359.2 256 352 248.8 352 240zM64 125.3C45.36 118.7 32 100.9 32 80C32 53.49 53.49 32 80 32C100.9 32 118.7 45.36 125.3 64H450.7C457.3 45.36 475.1 32 496 32C522.5 32 544 53.49 544 80C544 100.9 530.6 118.7 512 125.3V386.7C530.6 393.3 544 411.1 544 432C544 458.5 522.5 480 496 480C475.1 480 457.3 466.6 450.7 448H125.3C118.7 466.6 100.9 480 80 480C53.49 480 32 458.5 32 432C32 411.1 45.36 393.3 64 386.7V125.3zM96 125.3V386.7C109.6 391.6 120.4 402.4 125.3 416H450.7C455.6 402.4 466.4 391.6 480 386.7V125.3C466.4 120.4 455.6 109.6 450.7 96H125.3C120.4 109.6 109.6 120.4 96 125.3zM480 432C480 440.8 487.2 448 496 448C504.8 448 512 440.8 512 432C512 423.2 504.8 416 496 416C487.2 416 480 423.2 480 432zM96 432C96 423.2 88.84 416 80 416C71.16 416 64 423.2 64 432C64 440.8 71.16 448 80 448C88.84 448 96 440.8 96 432zM480 80C480 88.84 487.2 96 496 96C504.8 96 512 88.84 512 80C512 71.16 504.8 64 496 64C487.2 64 480 71.16 480 80zM96 80C96 71.16 88.84 64 80 64C71.16 64 64 71.16 64 80C64 88.84 71.16 96 80 96C88.84 96 96 88.84 96 80z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFalObjectGroup);\nexport default __webpack_public_path__ + \"static/media/fal-object-group.a5e5d160.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFalHandPointer(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 448 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M387.4 210h-7.469c-10.75-18.33-30.41-30-51.97-30h-14.84c-5.781 0-11.5 .8594-17.03 2.547C284.9 171.4 269.8 165 253.7 165h-14.88c-4.625 0-9.219 .5469-13.69 1.609V61C225.2 27.36 197.1 0 164.6 0C131.1 0 103.1 27.36 103.1 61v211.6L102.4 270.5C95.35 261 80.31 247.5 56.75 247.5c-41.59 0-56.75 37.41-56.75 57.33c0 11.94 3.69 23.97 11.33 34.23l84.66 114C123.4 489.1 167.1 512 212.8 512h118.9c5.5 0 11.06-.9219 15.09-2.344c27.47-5.062 51.81-18.5 70.19-38.69C437 449.6 448 421.3 448 391.2V271C448 237.4 420.8 210 387.4 210zM416 391.2c0 21.89-7.939 42.44-22.53 58.03c-13.78 15.12-31.91 25.14-54.41 29.41C336.2 479.6 333.9 480 331.7 480H212.8c-35.66 0-69.72-17.22-91.16-46.03L37.02 319.1C33.62 315.4 31.98 310.1 31.98 304.8c0-8.385 6.573-25.28 24.85-25.28c10.27 0 16.79 5.934 19.84 10.06l30.47 41.02c3.078 4.139 7.897 6.469 12.85 6.469c11.1 0 15.1-10.83 15.1-16.02V61C135.1 45.02 148.8 32 164.6 32c15.78 0 28.6 13.02 28.6 29v131.7c0 6.908 5.418 15.98 16 15.98c11.97 0 12.7-11.65 29.69-11.65h14.88c24.02 0 21.02 21 37.61 21c8.19 0 10.4-6.004 21.83-6.004h14.84c12 0 22.78 7.844 26.81 19.5c2.325 6.68 10.37 10.5 17.57 10.5L387.4 242C403.2 242 416 255 416 271V391.2zM224.7 304c-8.844 0-16 7.156-16 16v96c0 8.844 7.156 16 16 16s16-7.156 16-16v-96C240.7 311.2 233.5 304 224.7 304zM287.1 304c-8.844 0-16 7.156-16 16l.002 96c0 8.844 7.156 16 16 16s15.1-7.156 15.1-16v-96C303.1 311.2 296.8 304 287.1 304zM352 304c-8.844 0-16 7.156-16 16v96c0 8.844 7.156 16 16 16s16-7.156 16-16v-96C368 311.2 360.8 304 352 304z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFalHandPointer);\nexport default __webpack_public_path__ + \"static/media/fal-hand-pointer.925b0a15.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFasCircle(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFasCircle);\nexport default __webpack_public_path__ + \"static/media/fas-circle.59954269.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFasTriangle(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M506.5 419.8C513.8 432.1 513.8 447.4 506.7 459.9C499.6 472.3 486.3 480 472 480H40C25.66 480 12.41 472.3 5.287 459.9C-1.839 447.4-1.756 432.1 5.503 419.8L221.5 51.75C228.7 39.52 241.8 32 256 32C270.2 32 283.3 39.52 290.5 51.75L506.5 419.8z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFasTriangle);\nexport default __webpack_public_path__ + \"static/media/fas-triangle.444075ca.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFalTree(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 448 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M439.6 391.6l-68.98-79.59h15.2c25.59 0 39.5-29.17 23.19-48.48l-60.86-71.51h10.77c21.28 0 32.9-22.5 19.28-37.31l-134.9-146.5C238.3 2.796 231.2 0 224 0S209.7 2.799 204.7 8.236L69.93 154.7C56.34 169.5 67.93 192 89.21 192h10.73L39.03 263.5C22.72 282.9 36.62 312 62.22 312h15.2l-68.98 79.59c-18.1 21.91-3.811 56.4 24.69 56.4L208 447.1V496c0 8.844 7.269 16 16.11 16S240 504.8 240 496v-48l174.8 .0133C443.4 448 458.5 413.4 439.6 391.6zM414.8 415.1L240 416v-57.38l43.31-43.31c6.25-6.25 6.25-16.38 0-22.62s-16.38-6.25-22.62 0L240 313.4V176c0-8.844-7.157-16.01-16-16.01S208 167.2 208 176v80.01L188.8 230.4C183.5 223.3 173.5 221.9 166.4 227.2C159.3 232.5 157.9 242.5 163.2 249.6L208 309.3v106.7l-175.1 .0039c-.1934-.127-.7109-.8008-.8379-1.717c-.0957-.6934 .0469-1.115 .5938-1.748l114.9-132.6l-80.48-.002l102.2-120H108.5l115.5-125.6l115.6 125.6h-60.7l102.1 120H300.6l114.9 132.6c.457 .5273 .6562 .918 .5469 1.701C415.8 415.2 415.3 415.9 414.8 415.1z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFalTree);\nexport default __webpack_public_path__ + \"static/media/fal-tree.7d5ce1a3.svg\";\nexport { ForwardRef as ReactComponent };","import styled, { css } from 'styled-components';\r\nimport { ReactComponent as MeasureDistanceSvg } from '../../../assets/icons/fal-ruler.svg';\r\nimport { ReactComponent as MeasureAreaSvg } from '../../../assets/icons/fal-ruler-combined.svg';\r\nimport { ReactComponent as EllipsisStrokeSvg } from '../../../assets/icons/fal-ellipsis-stroke.svg';\r\nimport { ReactComponent as ObjectGroupSvg } from '../../../assets/icons/fal-object-group.svg';\r\nimport { ReactComponent as HandPointerSvg } from '../../../assets/icons/fal-hand-pointer.svg';\r\nimport { ReactComponent as CircleSvg } from '../../../assets/icons/fas-circle.svg';\r\nimport { ReactComponent as TriangleSvg } from '../../../assets/icons/fas-triangle.svg';\r\nimport { ReactComponent as DeleteSvg } from '../../../assets/icons/trash-can-solid.svg';\r\nimport { ReactComponent as TreeSvg } from '../../../assets/icons/fal-tree.svg';\r\n\r\nconst iconStyle = css`\r\n width: 21px;\r\n height: auto;\r\n`;\r\n\r\nconst submenuIconStyle = css`\r\n width: 16px;\r\n height: auto;\r\n margin-right: 0.75rem;\r\n`;\r\n\r\nexport const MeasureDistanceIcon = styled(MeasureDistanceSvg)`\r\n ${iconStyle};\r\n`;\r\n\r\nexport const MeasureAreaIcon = styled(MeasureAreaSvg)`\r\n ${iconStyle};\r\n`;\r\n\r\nexport const MillAreaIcon = styled(ObjectGroupSvg)`\r\n ${iconStyle};\r\n`;\r\n\r\nexport const ForestAreaIcon = styled(ObjectGroupSvg)`\r\n ${iconStyle};\r\n`;\r\n\r\nexport const ProfileGroundIcon = styled(EllipsisStrokeSvg)`\r\n ${iconStyle};\r\n`;\r\n\r\nexport const SelectIcon = styled(HandPointerSvg)`\r\n ${iconStyle};\r\n`;\r\n\r\nexport const SpruceIcon = styled(TriangleSvg)`\r\n ${submenuIconStyle};\r\n fill: ${({theme})=>theme.colors.brand_green} !important;\r\n`;\r\n\r\nexport const PineIcon = styled(TriangleSvg)`\r\n ${submenuIconStyle};\r\n fill: ${({theme})=>theme.colors.brand_yellow} !important;\r\n`;\r\n\r\nexport const BirchIcon = styled(TriangleSvg)`\r\n ${submenuIconStyle};\r\n fill: ${({theme})=>theme.colors.brand_blue} !important;\r\n`;\r\n\r\nexport const OtherIcon = styled(TriangleSvg)`\r\n ${submenuIconStyle};\r\n`;\r\n\r\nexport const DeadTreeIcon = styled(CircleSvg)`\r\n ${submenuIconStyle};\r\n fill: ${({theme})=>theme.colors.negative} !important;\r\n`;\r\n\r\nexport const InfestedTreeIcon = styled(CircleSvg)`\r\n ${submenuIconStyle};\r\n fill: ${({theme})=>theme.colors.brand_yellow} !important;\r\n`;\r\n\r\nexport const HealthyTreeIcon = styled(CircleSvg)`\r\n ${submenuIconStyle};\r\n fill: ${({theme})=>theme.colors.positive} !important;\r\n`;\r\nexport const OtherHealthIcon = styled(CircleSvg)`\r\n ${submenuIconStyle};\r\n`;\r\n\r\nexport const DeleteTreeIcon = styled(DeleteSvg)`\r\n ${submenuIconStyle};\r\n fill: ${({theme})=>theme.colors.negative} !important;\r\n`;\r\n\r\nexport const TreeMenuIcon = styled(TreeSvg)`\r\n ${iconStyle};\r\n`;\r\n\r\nexport const MenuItem = styled.div`\r\n position: relative;\r\n background-color: ${({theme, active}) => active ? theme.colors.information_bg : theme.colors.white};\r\n width: 3rem;\r\n height: 3rem;\r\n border: 1px solid rgba(17,139,214,.25);\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n margin-bottom: 0.25rem;\r\n\r\n svg {\r\n fill: ${({theme, active }) => active ? theme.colors.brand_blue : theme.colors.text_dark};\r\n }\r\n\r\n &:before {\r\n position: absolute;\r\n transition: all ease 0.25s;\r\n bottom: 0;\r\n left: 0;\r\n display: block;\r\n height: 100%;\r\n width: 0;\r\n content: \"\";\r\n background-color: ${({theme}) => theme.colors.brand_blue};\r\n opacity: 0.5;\r\n }\r\n\r\n &:hover {\r\n cursor: pointer;\r\n\r\n &:before {\r\n width: 5px;\r\n }\r\n\r\n svg {\r\n fill: ${({theme}) => theme.colors.brand_blue};\r\n }\r\n }\r\n`;\r\n\r\nexport const SubMenuItem = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-start;\r\n align-items: center;\r\n margin-bottom: 0.5rem;\r\n padding: 0.125rem 0.5rem;\r\n background-color: ${({theme, active}) => active ? theme.colors.information_bg : theme.colors.white};\r\n border: 1px solid ${({theme, active}) => active ? theme.colors.brand_blue : 'transparent'};\r\n\r\n &:hover {\r\n cursor: pointer;\r\n background-color: ${({theme}) => theme.colors.information_bg};\r\n color: ${({theme}) => theme.colors.brand_blue};\r\n border: 1px solid rgba(17,139,214,.25);\r\n }\r\n\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n span {\r\n font-size: 0.875rem;\r\n }\r\n`;\r\n\r\nexport const MenuWrapper = styled.div`\r\n position: absolute;\r\n top: 53px;\r\n display: flex;\r\n flex-direction: column;\r\n z-index: 1;\r\n left: 8px;\r\n\r\n ${MenuItem} {\r\n width: 3rem;\r\n }\r\n`;","import { isEmpty } from 'lodash';\r\nimport { useEffect, useState } from 'react';\r\nimport ReactTooltip from 'react-tooltip';\r\nimport { useDroneDetailContext } from '../Contexts/DroneDetailContext';\r\nimport { MenuItem, MillAreaIcon, ProfileGroundIcon, SelectIcon } from './MapActionMenu';\r\n\r\nconst MillMapMenu = ({ GIS, projectId, epsg }) => {\r\n const [prevSelection, setPrevSelection] = useState(null);\r\n const { featuresData, setFeaturesData, selectedFeature, setSelectedFeature, setUnsavedChanges, selectedTool, setSelectedTool, deletedFeature } = useDroneDetailContext();\r\n\r\n\r\n const addFeature = ({ featureId, geometry }) => {\r\n const feature = {\r\n properties: {\r\n area_m2: 0,\r\n area_type: 0,\r\n coefficient_def: {},\r\n coeficient: 0,\r\n date: \"2020-11-20\",\r\n description: \"\",\r\n height_ground: 0,\r\n id: featureId,\r\n id_project: projectId,\r\n isBox: false,\r\n log_length: 0,\r\n name: \"\",\r\n profile_type: 2,\r\n type: null,\r\n volume_coef_m3: 0,\r\n volume_m3: 0,\r\n epsg: epsg\r\n },\r\n type: \"Feature\",\r\n geometry: JSON.parse(geometry),\r\n }\r\n setFeaturesData( prev => [\r\n ...prev, feature\r\n ]);\r\n setSelectedFeature(feature)\r\n }\r\n\r\n const handleAddPolygon = () => {\r\n setSelectedTool(\"polygon\")\r\n let latestId =0\r\n if(featuresData.length!==0){\r\n latestId= Math.max(...featuresData.map(f => f.properties.id));\r\n }\r\n GIS.Edit.drawFeatures('polygon', 'Polygon', false, (id) => {\r\n latestId++;\r\n\r\n GIS.Layer.setFeatureAttributeByID(\"polygon\",\"id\", latestId, id);\r\n GIS.Layer.setFeatureStyleByID('polygon', 'areaPile', latestId)\r\n GIS.Layer.setFeatureAttributeByID('polygon','label', `${latestId}`, latestId)\r\n GIS.Layer.getFeatureByID('polygon', latestId, { attribute: 'id', epsg: `EPSG:${epsg}`, format: 'geojson' }, geometry => {\r\n setUnsavedChanges(true);\r\n addFeature({\r\n featureId: latestId,\r\n geometry\r\n });\r\n });\r\n }, { incrementId: true, style: 'editing' })\r\n }\r\n\r\n const handleAddLine = () => {\r\n setSelectedTool(\"line\")\r\n let latestId =0\r\n if(featuresData.length!==0){\r\n latestId= Math.max(...featuresData.map(f => f.properties.id));\r\n }\r\n GIS.Edit.drawFeatures('profile', 'LineString', false, (id) => {\r\n latestId++;\r\n GIS.Layer.setFeatureAttributeByID(\"profile\",\"id\", latestId, id);\r\n GIS.Layer.setFeatureStyleByID('profile', 'profileGround', latestId);\r\n GIS.Layer.setFeatureAttributeByID('profile','label', `${latestId}`, latestId);\r\n GIS.Layer.getFeatureByID('profile', latestId, { attribute: 'id', epsg: `EPSG:${epsg}`, format: 'geojson' }, geometry => {\r\n setUnsavedChanges(true);\r\n\r\n addFeature({\r\n featureId: latestId,\r\n geometry,\r\n });\r\n });\r\n }, { incrementId: true, style: 'editing' })\r\n }\r\n\r\n useEffect(() => {\r\n\r\n if(prevSelection?.properties.id !== deletedFeature?.properties.id){\r\n console.log(prevSelection);\r\n console.log(deletedFeature);\r\n if(prevSelection?.geometry.type === \"Polygon\"){\r\n GIS.Layer.setFeatureStyleByID('polygon', 'areaPile', prevSelection.properties.id);\r\n GIS.Layer.setFeatureAttributeByID('polygon','label', `${prevSelection.properties.id} - ${prevSelection?.properties?.name}`, prevSelection.properties.id);\r\n }\r\n if(prevSelection?.geometry.type === \"LineString\" && prevSelection.properties.profile_type===0){\r\n GIS.Layer.setFeatureStyleByID('profile', 'profileGround', prevSelection.properties.id);\r\n GIS.Layer.setFeatureAttributeByID('profile','label', `${prevSelection.properties.id} - ${prevSelection?.properties?.name}`, prevSelection.properties.id);\r\n }\r\n if(prevSelection?.geometry.type === \"LineString\" && prevSelection.properties.profile_type===2){\r\n GIS.Layer.setFeatureStyleByID('profile', 'profileGround', prevSelection.properties.id);\r\n GIS.Layer.setFeatureAttributeByID('profile','label', `${prevSelection.properties.id} - ${prevSelection?.properties?.name}`, prevSelection.properties.id);\r\n }\r\n if(prevSelection?.geometry.type === \"LineString\" && prevSelection.properties.profile_type===3){\r\n GIS.Layer.setFeatureStyleByID('profile', 'profileAI', prevSelection.properties.id);\r\n GIS.Layer.setFeatureAttributeByID('profile','label', `${prevSelection.properties.id} - ${prevSelection?.properties?.name}`, prevSelection.properties.id);\r\n }\r\n }\r\n \r\n if(selectedFeature?.geometry.type === \"Polygon\"){\r\n GIS.Layer.setFeatureStyleByID('polygon', 'selected', selectedFeature?.properties.id);\r\n }\r\n if(selectedFeature?.geometry.type === \"LineString\"){\r\n GIS.Layer.setFeatureStyleByID('profile', 'selected', selectedFeature?.properties.id);;\r\n }\r\n setPrevSelection(selectedFeature);\r\n },[selectedFeature]);\r\n\r\n const handleSelect = () => {\r\n setSelectedTool('selection')\r\n GIS.Interaction.setCallback('Identify', {}, (X, Y) => {\r\n\r\n const polygons = GIS.Layer.getFeatureIDsAtCoordinate('polygon', [X, Y])\r\n if (!isEmpty(polygons)) {\r\n console.log(polygons[0]);\r\n\r\n return setSelectedFeature(featuresData.find(f=>f.properties.id === polygons[0]));\r\n }\r\n const profileIds = GIS.Layer.getFeatureIDsAtCoordinate('profile', [X, Y], { attribute: 'id', strategy: 'closest', tolerance: 1 });\r\n if (!isEmpty(profileIds)) {\r\n console.log(profileIds[0])\r\n return setSelectedFeature(featuresData.find(f=>f.properties.id === profileIds[0]));\r\n }\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n window.addEventListener(\"keydown\", (key) => {\r\n if(key.key === 'Escape' && ['polygon', 'line', 'selection'].includes(selectedTool)) {\r\n setSelectedTool(null);\r\n }\r\n });\r\n }, [selectedTool]);\r\n\r\n return (\r\n <>\r\n \r\n {GIS.Edit.commit();handleAddPolygon()}}>\r\n \r\n \r\n {GIS.Edit.commit();handleAddLine()}}>\r\n \r\n \r\n {GIS.Edit.commit();handleSelect()}}>\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default MillMapMenu;","import { useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { useDroneDetailContext } from '../Contexts/DroneDetailContext';\r\nimport { MenuItem, SubMenuItem, ForestAreaIcon, DeadTreeIcon, InfestedTreeIcon, HealthyTreeIcon, OtherIcon, OtherHealthIcon, BirchIcon, PineIcon, SpruceIcon, DeleteTreeIcon, TreeMenuIcon } from './MapActionMenu';\r\nimport ReactTooltip from 'react-tooltip';\r\nimport { isEmpty } from 'lodash';\r\n\r\nconst Label = styled.span`\r\n display: block;\r\n font-weight: bold;\r\n font-size: 0.875rem;\r\n min-width: 150px;\r\n margin-bottom: 0.5rem;\r\n`;\r\n\r\nconst Separator = styled.div`\r\n height: 1px;\r\n margin: 0.5rem 0;\r\n background-color: ${({theme}) => theme.colors.bg_gray};\r\n`;\r\n\r\nconst ActionsWrapper = styled.div`\r\n padding: 0.5rem 0.75rem;\r\n background-color: ${({theme}) => theme.colors.white};\r\n box-shadow: 0 0 20px rgb(34 36 38 / 15%);\r\n`;\r\n\r\nconst ForestMapMenu = ({GIS, addFeature, epsg}) =>{\r\n const {selectedTool, setSelectedTool, setUnsavedChanges, featuresData, setDeletedFeature} = useDroneDetailContext();\r\n const [selectedTreeAction, setTreeAction] = useState(null);\r\n\r\n const handleAddPolygon = () =>{\r\n setSelectedTool(\"polygon\");\r\n GIS.Edit.drawFeatures('polygon', 'Polygon', false, (id) => {\r\n GIS.Layer.setFeatureStyleByID('polygon', 'areaPile', id)\r\n GIS.Layer.getFeatureByID('polygon', id, { attribute: 'id', epsg: `EPSG:${epsg}`, format: 'geojson' }, geometry => {\r\n setUnsavedChanges(true);\r\n GIS.Layer.setFeatureAttributeByID('polygon','label', `${id}`, id)\r\n addFeature({\r\n featureId: id,\r\n geometry\r\n });\r\n });\r\n }, {incrementId: true, style:'editing'})\r\n }\r\n const handleAddTree = (type) =>{\r\n //Todo open point type selection menu\r\n handleAddPoint(type);\r\n }\r\n const handleAddPoint = (type) =>{\r\n setTreeAction(type);\r\n GIS.Edit.drawFeatures('tree', 'Point', false, (id) => {\r\n GIS.Layer.setFeatureAttributeByID('tree','label',type, id)\r\n GIS.Layer.getFeatureByID('tree', id, { attribute: 'id', epsg: `EPSG:${epsg}`, format: 'geojson' }, geometry => {\r\n setUnsavedChanges(true);\r\n addFeature({\r\n featureId: id,\r\n id:id,\r\n geometry,\r\n label: type\r\n });\r\n });\r\n }, {incrementId: true, style:type})\r\n }\r\n const handleDeletePoint = () => {\r\n setTreeAction('delete');\r\n GIS.Interaction.setCallback('Identify', {}, (X, Y) => {\r\n const pointIds = GIS.Layer.getFeatureIDsAtCoordinate('tree', [X, Y], { attribute: 'id', strategy: 'closest', tolerance: 1 });\r\n if(!isEmpty(pointIds)){\r\n console.log(pointIds[0])\r\n const item = featuresData.find(f=>f.properties.id === pointIds[0]);\r\n console.log(item)\r\n setUnsavedChanges(true);\r\n setDeletedFeature(item);\r\n }\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n window.addEventListener('keydown', (key) => {\r\n if(key.key === 'Escape' && ['polygon'].includes(selectedTool)) {\r\n setSelectedTool(null);\r\n }\r\n\r\n if(key.key === 'Escape' && ['treeType'].includes(selectedTool)) {\r\n GIS.Edit.commit();\r\n setSelectedTool(null);\r\n setTreeAction(null);\r\n }\r\n });\r\n }, [selectedTool]);\r\n\r\n return (\r\n <>\r\n \r\n {GIS.Edit.commit();handleAddPolygon()}}>\r\n \r\n \r\n {\r\n GIS.Edit.commit();\r\n setSelectedTool(selectedTool === 'treeType' ? null : 'treeType');\r\n setTreeAction(null);\r\n }}>\r\n \r\n \r\n\r\n {\r\n selectedTool === 'treeType' && (\r\n \r\n
\r\n \r\n {GIS.Edit.commit();handleAddTree(\"spruce\");}}>\r\n \r\n Spruce\r\n \r\n {GIS.Edit.commit();handleAddTree(\"pine\");}}>\r\n \r\n Pine\r\n \r\n {GIS.Edit.commit();handleAddTree(\"birch\");}}>\r\n \r\n Birch\r\n \r\n {GIS.Edit.commit();handleAddTree(\"other\");}}>\r\n \r\n Other\r\n \r\n
\r\n\r\n \r\n\r\n
\r\n \r\n {GIS.Edit.commit();handleAddTree(\"healthy\");}}>\r\n \r\n Healthy\r\n \r\n {GIS.Edit.commit();handleAddTree(\"infested\");}}>\r\n \r\n Infested\r\n \r\n {GIS.Edit.commit();handleAddTree(\"dead\");}}>\r\n \r\n Dead\r\n \r\n {GIS.Edit.commit();handleAddTree(\"other_health\");}}>\r\n \r\n Other\r\n \r\n
\r\n\r\n \r\n\r\n
\r\n {GIS.Edit.commit();handleDeletePoint();}}>\r\n \r\n Delete\r\n \r\n
\r\n\r\n
\r\n )\r\n }\r\n \r\n );\r\n}\r\n\r\nexport default ForestMapMenu;","export const getDefaultLinesCollection = epsg => ({\r\n type: 'FeatureCollection',\r\n name: 'lines',\r\n crs: {\r\n type: 'name',\r\n properties: {\r\n code: epsg,\r\n name: 'urn:ogc:def:crs:EPSG::'+epsg\r\n }\r\n },\r\n features: []\r\n});\r\n\r\nexport const getDefaultPolygonsCollection = epsg => ({\r\n type: 'FeatureCollection',\r\n name: 'polygons',\r\n crs: {\r\n type: 'name',\r\n properties: {\r\n code: epsg,\r\n name: 'urn:ogc:def:crs:EPSG::'+epsg\r\n }\r\n },\r\n features: []\r\n});\r\nexport const getDefaultPointsCollection = epsg => ({\r\n type: 'FeatureCollection',\r\n name: 'points',\r\n crs: {\r\n type: 'name',\r\n properties: {\r\n code: epsg,\r\n name: 'urn:ogc:def:crs:EPSG::'+epsg\r\n }\r\n },\r\n features: []\r\n});","import { useEffect } from 'react';\r\nimport ReactTooltip from 'react-tooltip';\r\nimport { useDroneDetailContext } from '../Contexts/DroneDetailContext';\r\nimport { MenuItem, MeasureDistanceIcon, MeasureAreaIcon } from './MapActionMenu';\r\n\r\nconst MeasureMapMenu = ({GIS}) => {\r\n const { selectedTool, setSelectedTool } = useDroneDetailContext();\r\n\r\n const measureArea = () =>{\r\n setSelectedTool('area');\r\n GIS.Layer.removeFeatures('measure_area');\r\n GIS.Layer.removeFeatures('measure_line');\r\n GIS.Edit.drawFeatures('measure_area', 'Polygon', false, id => {setTimeout(() => {\r\n GIS.Edit.commit()\r\n setSelectedTool(null);}, 200)\r\n }, {style: 'measure_area'});\r\n }\r\n\r\n const measureDistance = () =>{\r\n setSelectedTool('distance');\r\n GIS.Layer.removeFeatures('measure_line');\r\n GIS.Layer.removeFeatures('measure_area');\r\n GIS.Edit.drawFeatures('measure_line', 'LineString', false, id => {setTimeout(() => {\r\n // GIS.Layer.getFeatureByID('measure_line', id, { attribute: 'id', format: 'geojson' }, geometry => {\r\n // console.log(geometry);\r\n // });\r\n GIS.Edit.commit()\r\n setSelectedTool(null);}, 200)\r\n }, {style: 'measure_line'});\r\n }\r\n\r\n useEffect(() => {\r\n window.addEventListener('keydown', (key) => {\r\n if(key.key === 'Escape' && ['area', 'distance'].includes(selectedTool)) {\r\n setSelectedTool(null);\r\n }\r\n });\r\n }, [selectedTool]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default MeasureMapMenu;","export default {\r\n name: \"deep_learning\",\r\n type: \"wmsTiled\",\r\n switcher:{},\r\n tiled: true,\r\n layers: [],\r\n serverType: \"geoserver\",\r\n styles: \"\",\r\n version:\"1.1.0\",\r\n format: \"image/png\",\r\n url: \"/geoserver/wms\",\r\n visible: false,\r\n opacity: 1,\r\n epsg: 5514,\r\n}\r\n","import React, {useState, useEffect} from 'react';\r\nimport styled from 'styled-components';\r\nimport { getGeoServerKey } from '../../services/mapService';\r\nimport DefaultLoading from '../Loading';\r\nimport {default as DEMConfig} from './mapStatic/DEM'\r\nimport { getAreaOfInterest, getMapConfig } from '../../services/projectService';\r\nimport MillMapMenu from './millMapMenu';\r\nimport ForestMapMenu from './forestMapMenu';\r\nimport { getDefaultLinesCollection, getDefaultPolygonsCollection } from './utils';\r\nimport MeasureMapMenu from './measureMapMenu';\r\nimport { useDroneDetailContext } from '../Contexts/DroneDetailContext';\r\nimport { MenuWrapper } from './MapActionMenu';\r\nimport { getDefaultPointsCollection } from './utils';\r\nimport DeepLearning from './mapStatic/deepLearning';\r\n\r\nconst Wrapper = styled.div`\r\n`;\r\n\r\nconst MapWrapper = styled.div`\r\n height: calc(100vh - 80px);\r\n min-height: 700px;\r\n position: relative;\r\n margin-bottom: 1.5rem;\r\n\r\n .ol-overlaycontainer-stopevent {\r\n position: absolute;\r\n width: 100% !important;\r\n height: 100% !important;\r\n margin: 0;\r\n }\r\n\r\n .ol-scale-line {\r\n position: absolute;\r\n right: 8px;\r\n bottom: 8px;\r\n\r\n .ol-scale-line-inner {\r\n position: absolute !important;\r\n bottom: 0 !important;\r\n right: 0 !important;\r\n }\r\n }\r\n\r\n .ol-mouse-position {\r\n position: absolute !important;\r\n top: 8px !important;\r\n right: 8px !important;\r\n }\r\n\r\n .cfm-geolocation {\r\n position: absolute !important;\r\n left: 8px !important;\r\n bottom: 68px !important;\r\n top: auto !important;\r\n /* transform: translateY(-50%) !important; */\r\n /* top: calc(50% + 14px) !important; */\r\n }\r\n\r\n .ol-zoom {\r\n position: absolute !important;\r\n left: 8px !important;\r\n bottom: 8px !important;\r\n top: auto !important;\r\n /* top: calc(50% + 1.5rem + 2.5rem) !important; */\r\n /* transform: translateY(-50%) !important; */\r\n }\r\n`;\r\n\r\nconst Loading = styled(DefaultLoading)`\r\n margin: 60px auto;\r\n justify-content: center;\r\n`;\r\n\r\n// TODO\r\n// - handle geoserverkey error\r\nfunction Map({ projectData, lineData, areaData, pointData, addFeature }) {\r\n const [isLoading, setLoading] = useState(true);\r\n const [isGenerated, setGenerated] = useState(false);\r\n const [geoserverKey, setGeoserverKey] = useState({});\r\n const [areaOfInterest, setAreaOfInterest] = useState(getDefaultLinesCollection(projectData.epsg));\r\n const [profiles, setProfiles] = useState(getDefaultLinesCollection(projectData.epsg));\r\n const [areas, setAreas] = useState(getDefaultPolygonsCollection(projectData.epsg));\r\n const [points, setPoints] = useState(getDefaultPointsCollection(projectData.epsg));\r\n const [error, setError] = useState(false);\r\n const [mapConfig, setMapConfig] = useState({})\r\n const { featuresData, setFeaturesData, setSelectedFeature, deletedFeature } = useDroneDetailContext();\r\n\r\n useEffect(() => {\r\n Promise.all([\r\n getAreaOfInterest(projectData.id, projectData.epsg)\r\n .then(data => {\r\n setAreaOfInterest(prev => ({\r\n ...prev,\r\n features: [\r\n {\r\n type: 'Feature',\r\n properties: {\r\n name: null\r\n },\r\n geometry: data\r\n }\r\n ]\r\n }))\r\n }),\r\n getGeoServerKey()\r\n .then(data => {\r\n const key = btoa(`${data.user}:${data.password}`);\r\n setGeoserverKey(key);\r\n })\r\n .catch(() => {\r\n console.error('Cannot download geoserver key.')\r\n }),\r\n getMapConfig(\"map\")\r\n .then(data =>{\r\n setMapConfig(data.config);\r\n })\r\n ])\r\n .catch(() => setError())\r\n .then(() => {\r\n setLoading(false);\r\n })\r\n }, []);\r\n\r\n useEffect(() => {\r\n console.log('source data - LINE', lineData);\r\n setProfiles(prev => ({\r\n ...prev,\r\n features: lineData,\r\n }));\r\n },[lineData]);\r\n\r\n\r\n useEffect(() => {\r\n console.log('source data - POINT', pointData);\r\n setPoints(prev => ({\r\n ...prev,\r\n features: pointData,\r\n }));\r\n },[pointData]);\r\n\r\n\r\n\r\n useEffect(()=> {\r\n if(isGenerated) {\r\n GIS.Layer.addFeatures('profile', profiles);\r\n profiles.features.forEach(f=>{\r\n if(f.properties.profile_type===0){\r\n GIS.Layer.setFeatureStyleByID('profile', 'profile', f.properties.id);\r\n }\r\n if(f.properties.profile_type===2){\r\n GIS.Layer.setFeatureStyleByID('profile', 'profileGround', f.properties.id);\r\n }\r\n if(f.properties.profile_type===3){\r\n GIS.Layer.setFeatureStyleByID('profile', 'profileAI', f.properties.id);\r\n }\r\n GIS.Layer.setFeatureAttributeByID('profile','label', `${f.properties.id} - ${f.properties.name}`, f.properties.id);\r\n })\r\n }\r\n },[isGenerated, profiles]);\r\n\r\n useEffect(()=> {\r\n if(isGenerated) {\r\n GIS.Layer.addFeatures('tree', points);\r\n }\r\n },[isGenerated, points]);\r\n\r\n useEffect(() => {\r\n console.log('source data - AREA', areaData);\r\n setAreas(prev => ({\r\n ...prev,\r\n features: areaData,\r\n }));\r\n },[areaData]);\r\n\r\n useEffect(()=> {\r\n if(isGenerated) {\r\n GIS.Layer.addFeatures('polygon', areas);\r\n areas.features.forEach(f=>{\r\n GIS.Layer.setFeatureStyleByID('polygon', 'areaPile', f.properties.id);\r\n GIS.Layer.setFeatureAttributeByID('polygon','label', `${f.properties.id}`, f.properties.id)\r\n GIS.Layer.setFeatureAttributeByID('polygon','label', `${f.properties.id} - ${f.properties.name}`, f.properties.id);\r\n })\r\n }\r\n },[isGenerated, areas]);\r\n\r\n useEffect(()=>{\r\n if(deletedFeature){\r\n setSelectedFeature(null)\r\n if(deletedFeature.geometry.type ===\"Polygon\"){\r\n GIS.Layer.removeFeatureByID('polygon', deletedFeature.properties.id, {attribute: 'id'});\r\n setFeaturesData(featuresData.filter(f=>f.properties.id !== deletedFeature.properties.id))\r\n return;\r\n }\r\n if(deletedFeature.geometry.type ===\"Point\"){\r\n GIS.Layer.removeFeatureByID('tree', deletedFeature.properties.id, {attribute: 'id'});\r\n setFeaturesData(featuresData.filter(f=>f.properties.id !== deletedFeature.properties.id))\r\n return;\r\n }\r\n GIS.Layer.removeFeatureByID('profile', deletedFeature.properties.id, {attribute: 'id'});\r\n setFeaturesData(featuresData.filter(f=>f.properties.id !== deletedFeature.properties.id))\r\n console.log(\"deleted\", deletedFeature)\r\n }\r\n },[deletedFeature])\r\n\r\n useEffect(() => {\r\n window.addEventListener(\"keydown\", (key)=>{\r\n if(key.key==='Escape'){\r\n return GIS.Edit.commit();\r\n }\r\n });\r\n })\r\n\r\n const addForestLabelLayers = ()=>{\r\n\r\n DeepLearning['authentication'] = geoserverKey;\r\n DeepLearning['name'] = `species`;\r\n DeepLearning.layers.push(`forest:deep_learning_${projectData.epsg}`);\r\n DeepLearning['epsg'] = projectData.epsg;\r\n DeepLearning['styles'] = \"forest:species\"\r\n DeepLearning['switcher']={\r\n title:\"SPECIES\",\r\n icon:\"/assets/images/orthophoto.jpg\"\r\n };\r\n console.log(DeepLearning)\r\n mapConfig.layer.push(DeepLearning);\r\n mapConfig.group.map(g => {\r\n if (g.name === 'rasters') {\r\n g.layers.push(`species`)\r\n }\r\n })\r\n const DeepLearningHealth = structuredClone(DeepLearning);\r\n DeepLearningHealth['name'] = `health`;\r\n DeepLearningHealth['styles'] = \"forest:health\"\r\n DeepLearningHealth['switcher'] ={\r\n title:\"HEALTH\",\r\n icon:\"/assets/images/orthophoto.jpg\"\r\n };\r\n mapConfig.layer.push(DeepLearningHealth);\r\n mapConfig.group.map(g => {\r\n if (g.name === 'rasters') {\r\n g.layers.push(`health`)\r\n }\r\n })\r\n }\r\n\r\n const addLayersToMap =()=>{\r\n let layers=[]\r\n const DEMConfigCopy = structuredClone(DEMConfig);\r\n DEMConfigCopy['authentication'] = geoserverKey;\r\n DEMConfigCopy['name'] = `DEM`;\r\n DEMConfigCopy.layers.push(`dem_${projectData.id}`);\r\n DEMConfigCopy['epsg'] = projectData.epsg;\r\n mapConfig.layer.push(DEMConfigCopy);\r\n mapConfig.group.map(g => {\r\n if (g.name === 'rasters') {\r\n g.layers.push(`DEM`)\r\n }\r\n })\r\n\r\n console.log(projectData)\r\n projectData.composition.composition.forEach(c=>{\r\n console.log(c)\r\n layers.push(c);\r\n c['authentication'] = geoserverKey;\r\n c.layers.push(`ortho_${projectData.id}`);\r\n c['epsg'] = projectData.epsg;\r\n\r\n mapConfig.layer.push(c);\r\n mapConfig.group.map(g => {\r\n if (g.name === 'rasters') {\r\n g.layers.push(c.name)\r\n }\r\n })\r\n })\r\n if(projectData.detected && projectData.device !==\"RGB\"){\r\n addForestLabelLayers();\r\n }\r\n return layers;\r\n }\r\n\r\n useEffect(() => {\r\n if (!isGenerated && !isLoading) {\r\n /* global GIS */\r\n GIS.Projection.init(mapConfig.projection);\r\n GIS.Style.init(mapConfig.style);\r\n const customLayers = addLayersToMap();\r\n GIS.Layer.init(mapConfig.layer, mapConfig.group);\r\n\r\n const demBandData = projectData.bendsStatistic.find(b=>b.band===\"dem\")\r\n const demEnvData =`min_dem:${demBandData.min};max_dem:${demBandData.max};`\r\n GIS.Layer.getLayer(`DEM`)\r\n .getSource()\r\n .updateParams({ ENV: demEnvData});\r\n\r\n customLayers.forEach(l=>{\r\n const redBandData = projectData.bendsStatistic.find(b=>b.band===l.bands[0].name)\r\n const greenBandData = projectData.bendsStatistic.find(b=>b.band===l.bands[1].name)\r\n const blueBandData = projectData.bendsStatistic.find(b=>b.band===l.bands[2].name)\r\n\r\n const envData = `min_red:${redBandData.min};max_red:${redBandData.max};min_green:${greenBandData.min};max_green:${greenBandData.max};min_blue:${blueBandData.min};max_blue:${blueBandData.max};red_index:${l.bands[0].index};green_index:${l.bands[1].index};blue_index:${l.bands[2].index};`\r\n GIS.Layer.getLayer(l.name)\r\n .getSource()\r\n .updateParams({ ENV: envData});\r\n })\r\n if(mapConfig.layer.find(l=>l.name === 'health' || l.name === 'species')){\r\n GIS.Layer.updateParams('health', {VIEWPARAMS: `id:${projectData.id}`})\r\n GIS.Layer.updateParams('species', {VIEWPARAMS: `id:${projectData.id}`})\r\n }\r\n GIS.Control.init(mapConfig.control);\r\n GIS.Interaction.init(mapConfig.map);\r\n GIS.Map.init(mapConfig.map, mapConfig.view);\r\n\r\n //Fix bad location\r\n GIS.Layer.addFeatures('AOI', areaOfInterest);\r\n try {\r\n const extent = GIS.Layer.getLayerExtent(`AOI`);\r\n GIS.Map.zoomToExtent(extent);\r\n } catch (e) {\r\n console.log(\"Ups. Cannot find the project location.\")\r\n }\r\n\r\n setGenerated(true);\r\n }\r\n\r\n return function cleanup() {\r\n if (isGenerated) {\r\n GIS.Layer.clear();\r\n GIS.Interaction.clear();\r\n GIS.Control.clear();\r\n setGenerated(false);\r\n }\r\n };\r\n }, [isGenerated, isLoading]);\r\n\r\n return (\r\n \r\n { isLoading && (\r\n \r\n )}\r\n\r\n \r\n
\r\n \r\n \r\n {(isGenerated && projectData.location_type === 'mill') &&\r\n }\r\n {(isGenerated && [\"forest\", \"forestRGB\", \"forestMulti\"].includes(projectData.location_type)) &&\r\n }\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Map;","import { bool, func } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport Button from '../StoraEnsoComponents/Button';\r\n\r\nconst Wrapper = styled.div`\r\n position: fixed;\r\n top: 80px; /* based on header height */\r\n left: 0;\r\n width: 100%;\r\n z-index: 999;\r\n display: flex;\r\n background-color: ${({theme}) => theme.colors.attention_bg};\r\n flex-direction: row;\r\n justify-content: center;\r\n align-items: center;\r\n padding: 0.5rem;\r\n box-shadow: 0 0 20px rgb(34 36 38 / 15%);\r\n\r\n p {\r\n margin-bottom: 0;\r\n }\r\n\r\n ${Button} {\r\n margin-left: 2rem;\r\n }\r\n`;\r\n\r\nfunction NotificationUnsavedChanges({isOpen, onSave}) {\r\n\r\n return (\r\n isOpen ? (\r\n \r\n

You have unsaved changes in this project.

\r\n \r\n
\r\n ) : null\r\n );\r\n}\r\n\r\nNotificationUnsavedChanges.propTypes = {\r\n isOpen: bool.isRequired,\r\n onSave: func.isRequired,\r\n}\r\n\r\nexport default NotificationUnsavedChanges;","import { useEffect, useState } from 'react';\r\nimport { calculateCompartment, saveForestFeatures, getForestFeatures } from '../../services/projectService';\r\nimport scrollToElement from 'scroll-to-element';\r\nimport Loading from '../Loading';\r\nimport NotificationToast from '../NotificationToast';\r\nimport CompartmentList from './CompartmentList';\r\nimport Map from '../Map';\r\nimport { DroneDetailProvider, useDroneDetailContext} from '../Contexts/DroneDetailContext';\r\nimport NotificationUnsavedChanges from '../NotificationUnsavedChanges';\r\n\r\nfunction ForestDetail({ projectData}) {\r\n\r\n const [loading, setLoading] = useState(true);\r\n const [areaData, setAreaData] = useState([]);\r\n const [pointData, setPointData] = useState([]);\r\n const [actionResult, setActionResult] = useState(null);\r\n const {setUnsavedChanges, unsavedChanges, featuresData,setFeaturesData , setDeletedFeature} = useDroneDetailContext();\r\n\r\n useEffect(() => {\r\n getForestFeatures(projectData.id)\r\n .then(data => {\r\n console.log(data);\r\n setFeaturesData(data);\r\n setPointData(data.filter(item => item.geometry.type === \"Point\"));\r\n setAreaData(data.filter(item => item.geometry.type === \"Polygon\"));\r\n setLoading(false);\r\n scrollToElement('#map', {\r\n offset: -100,\r\n duration: 500,\r\n });\r\n })\r\n .catch(error => console.error('ERR: ', error));\r\n }, []);\r\n\r\n\r\n const addFeature = (newFeature) =>{\r\n if (JSON.parse(newFeature.geometry).type ===\"Point\"){\r\n addTree(newFeature)\r\n return\r\n }\r\n addCompartment(newFeature)\r\n }\r\n\r\n const addTree = (newFeature) => {\r\n const tree = {\r\n properties: {\r\n epsg: projectData.epsg,\r\n label:newFeature.label,\r\n id:newFeature.id\r\n },\r\n type: \"Feature\",\r\n geometry: JSON.parse(newFeature.geometry)\r\n }\r\n setFeaturesData(prev => [...prev, tree])\r\n setUnsavedChanges(true);\r\n }\r\n\r\n const addCompartment = (newFeature) => {\r\n console.log(newFeature);\r\n compartmentCalculation({\r\n properties: {\r\n id: newFeature.featureId,\r\n id_project: projectData.id,\r\n epsg: projectData.epsg\r\n },\r\n type: \"Feature\",\r\n geometry: JSON.parse(newFeature.geometry)\r\n })\r\n }\r\n\r\n const compartmentCalculation = (compartment) => {\r\n calculateCompartment(compartment)\r\n .then(data => {\r\n compartment.properties = {\r\n data: data,\r\n id: compartment.properties.id\r\n }\r\n setFeaturesData(prev => [...prev, compartment])\r\n }\r\n )\r\n }\r\n\r\n const removeCompartment = ({ item, idx }) => {\r\n console.log(item)\r\n setUnsavedChanges(true);\r\n setDeletedFeature(item);\r\n }\r\n const handleSaveForestFeatures = () => {\r\n console.log(featuresData)\r\n saveForestFeatures(featuresData, projectData.id)\r\n .then(() => {\r\n setUnsavedChanges(false);\r\n setActionResult({\r\n kind: 'success',\r\n message: 'Data has been successfully saved.'\r\n });\r\n })\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'An error has occurred while saving data'\r\n });\r\n });\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n setActionResult(null)}\r\n />\r\n {loading ? () : (\r\n <>\r\n \r\n f.geometry.type===\"Polygon\")} onDelete={removeCompartment} />\r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nexport default function DroneDetailWithContext({projectData}) {\r\n return (\r\n \r\n \r\n \r\n );\r\n};","import { useEffect, useState } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { getAreaOfInterest} from '../../services/projectService';\r\nimport Plot from 'react-plotly.js';\r\n\r\nconst SurfaceChart = ({data:{data,feature}}) =>{\r\n //const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState(true);\r\n\r\n useEffect(() => {\r\n updateChart();\r\n }, [])\r\n const [layout, setLayout] = useState(null)\r\n const updateChart = ()=> {\r\n const ylabel = [0];\r\n const ylabelValue = [];\r\n let pixel_size = data.pixel_size;\r\n data.array.forEach(d=>{\r\n const distance = data.array.indexOf(d) * pixel_size;\r\n if ((distance - ylabel.length) >=0 && distance >=1) {\r\n ylabel.push(Math.round(distance));\r\n ylabelValue.push(data.array.indexOf(d))\r\n }\r\n });\r\n\r\n const xlabel = [0];\r\n const xlabelValue = [];\r\n pixel_size = data.pixel_size;\r\n\r\n for (let i = 0;i<=(data.array[0].length-1); i=i+2){\r\n const distance = i * pixel_size;\r\n if ((distance - xlabel.length) >=0 && distance >=1\r\n ) {\r\n xlabel.push(Math.round(distance));\r\n xlabelValue.push(i)\r\n }\r\n }\r\n const chartLayaut = {\r\n title: {\r\n text:`ID: ${feature.properties.id} / NAME: ${feature.properties.name}`,\r\n font: {\r\n family: 'HelveticaNeue, monospace',\r\n size: 24\r\n },\r\n xref: 'paper',\r\n x: 0.05\r\n },\r\n scene: {\r\n xaxis: {\r\n autorange: true,\r\n ticktext: xlabel,\r\n tickvals: xlabelValue\r\n },\r\n yaxis: {\r\n autorange: true,\r\n ticktext: ylabel,\r\n tickvals: ylabelValue\r\n }\r\n },\r\n autosize: true,\r\n width: 1200,\r\n height: 700,\r\n }\r\n setLayout(chartLayaut);\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\nexport default SurfaceChart;","import { useEffect, useState } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { getAreaOfInterest} from '../../services/projectService';\r\nimport Plot from 'react-plotly.js';\r\n\r\nconst ProfileChart = ({data:{data, feature}}) =>{\r\n //const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState(true);\r\n const [chart, setChart] = useState(null);\r\n\r\n useEffect(() => {\r\n console.log(data, feature);\r\n updateChart();\r\n }, [])\r\n\r\n const updateChart = ()=> {\r\n console.log(feature)\r\n const labels = [];\r\n const ground = [];\r\n const profile = [];\r\n const step = data.x_max / data.values.length;\r\n for (let i = 0; i < data.values.length; i+=5) {\r\n labels.push((step*i).toFixed(1));\r\n profile.push(data.values[i]);\r\n if (data.values[i]>feature.properties.height_ground) {\r\n ground.push(feature.properties.height_ground);\r\n }\r\n else {\r\n ground.push(data.values[i])\r\n }\r\n }\r\n setChart([{\r\n x: labels,\r\n y: ground,\r\n fill: 'tonexty',\r\n type: 'scatter',\r\n fillcolor: '#9a9aa4',\r\n line: {\r\n color: '#9a9aa4'\r\n },\r\n name: \"Ground\",\r\n },{\r\n x: labels,\r\n y: profile,\r\n fill: 'tonexty',\r\n type: 'scatter',\r\n fillcolor: '#89CFF0',\r\n line: {\r\n color: '#89CFF0'\r\n },\r\n name: \"Profile\",\r\n }]\r\n )\r\n\r\n }\r\n\r\n\r\n return (\r\n \r\n );\r\n\r\n\r\n\r\n}\r\n\r\nexport default ProfileChart;","import { string, func, arrayOf, shape } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport ReactAutocomplete from 'react-autocomplete';\r\nimport Input from './input';\r\n\r\nconst AutocompleteItem = styled.div`\r\n line-height: 1;\r\n padding: 0.75rem;\r\n background-color: ${({highlighted}) => highlighted ? 'rgba(195, 226, 245, 0.3)' : 'inherit'};\r\n color: ${({theme}) => theme.colors.text_dark};\r\n\r\n &:hover {\r\n background-color: rgba(195, 226, 245, 0.3);\r\n }\r\n`;\r\n\r\nconst AutocompleteMenu = styled.div`\r\n position: absolute;\r\n left: 0;\r\n top: 3em;\r\n width: 100%;\r\n background-color: ${({theme}) => theme.colors.bg_white};\r\n border: 1px solid ${({theme}) => theme.colors.brand_blue};\r\n z-index: 25;\r\n user-select: none;\r\n border-radius: 0;\r\n padding: 0.25rem 0;\r\n`;\r\n\r\nfunction AutoComplete ({id, items, input, meta, onChange, onSelect }) {\r\n return (\r\n item.label}\r\n renderItem={(item, highlighted) =>\r\n \r\n {item.label}\r\n \r\n }\r\n renderInput={props => }\r\n wrapperStyle={{\r\n position: 'relative',\r\n width: '100%',\r\n }}\r\n renderMenu={(items, value) => {\r\n return items.length > 0 ? :
;\r\n }}\r\n {...input}\r\n onChange={e => onChange(e.target.value)}\r\n onSelect={(value, item) => onSelect(item)}\r\n />\r\n );\r\n}\r\n\r\nAutoComplete.propTypes = {\r\n id: string.isRequired,\r\n items: arrayOf(shape({})).isRequired,\r\n input: shape({}).isRequired,\r\n meta: shape({}).isRequired,\r\n onChange: func.isRequired,\r\n onSelect: func.isRequired,\r\n}\r\n\r\nexport default AutoComplete;","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFalChartArea(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M32 400C32 426.5 53.49 448 80 448H496C504.8 448 512 455.2 512 464C512 472.8 504.8 480 496 480H80C35.82 480 0 444.2 0 400V48C0 39.16 7.164 32 16 32C24.84 32 32 39.16 32 48V400zM320 192L359.6 152.4C372.7 139.3 394.4 140.1 406.5 154.2L468.4 226.5C475.9 235.2 480 246.3 480 257.8V352C480 369.7 465.7 384 448 384H128C110.3 384 96 369.7 96 352V243.9C96 231.2 101.1 218.9 110.1 209.9L201.4 118.6C213.9 106.1 234.1 106.1 246.6 118.6L320 192zM224 141.3L132.7 232.6C129.7 235.6 128 239.6 128 243.9V352H448V257.8C448 253.9 446.6 250.2 444.1 247.3L382.2 175.1L342.6 214.6C336.6 220.6 328.5 223.1 320 223.1C311.5 223.1 303.4 220.6 297.4 214.6L224 141.3z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFalChartArea);\nexport default __webpack_public_path__ + \"static/media/fal-chart-area.43d2785f.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFalRobot(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 640 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M448 96h-112V16C336 7.156 328.8 0 320 0S304 7.156 304 16V96H192C138.1 96 96 138.1 96 192v224c0 53.02 42.98 96 96 96h256c53.02 0 96-42.98 96-96V192C544 138.1 501 96 448 96zM512 384h-16c-8.844 0-16 7.156-16 16s7.156 16 16 16H512c0 35.29-28.71 64-64 64H192c-35.29 0-64-28.71-64-64h16C152.8 416 160 408.8 160 400S152.8 384 144 384H128V192c0-35.29 28.71-64 64-64h256c35.29 0 64 28.71 64 64V384zM36.72 228.6C39.72 225.6 43.66 224 47.84 224C56.66 224 63.97 216.9 64 208C64.03 199.2 56.88 192 48.03 192C35.31 192 23.19 196.9 14.16 205.9C5.031 215 0 227.1 0 240v127.1C0 394.5 21.47 416 47.88 416c8.844 0 16.06-7.156 16.06-16s-7.156-16-16-16C39.19 384 32 376.8 32 367.1V240C32 235.7 33.69 231.6 36.72 228.6zM592.1 192c-8.844 0-16 7.156-16 16S583.3 224 592.1 224C600.9 224 608 231.2 608 240v127.1c0 4.328-1.688 8.375-4.719 11.41C600.3 382.4 596.3 384 592.1 384C583.3 384 576 391.1 576 399.1C575.1 408.8 583.1 415.1 591.9 416c12.72 0 24.88-4.938 33.91-13.94C634.1 392.1 640 380.9 640 367.1V240C640 213.5 618.5 192 592.1 192zM240 384h-32C199.2 384 192 391.2 192 400S199.2 416 208 416h32C248.8 416 256 408.8 256 400S248.8 384 240 384zM336 384h-32C295.2 384 288 391.2 288 400S295.2 416 304 416h32c8.844 0 16-7.156 16-16S344.8 384 336 384zM432 384h-32c-8.844 0-16 7.156-16 16s7.156 16 16 16h32c8.844 0 16-7.156 16-16S440.8 384 432 384zM224 192C188.7 192 160 220.7 160 256s28.72 64 64 64s64-28.7 64-64S259.3 192 224 192zM224 288C206.3 288 192 273.6 192 256s14.34-32 32-32s32 14.36 32 32S241.7 288 224 288zM416 192c-35.28 0-64 28.7-64 64s28.72 64 64 64s64-28.7 64-64S451.3 192 416 192zM416 288c-17.66 0-32-14.36-32-32s14.34-32 32-32s32 14.36 32 32S433.7 288 416 288z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFalRobot);\nexport default __webpack_public_path__ + \"static/media/fal-robot.44fd2a5c.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFalCircleExclamation(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 480c-123.5 0-224-100.5-224-224s100.5-224 224-224s224 100.5 224 224S379.5 480 256 480zM256 304c8.844 0 16-7.156 16-16V128c0-8.844-7.156-16-16-16S240 119.2 240 128v160C240 296.8 247.2 304 256 304zM256 344c-13.25 0-24 10.75-24 24s10.75 24 24 24s24-10.75 24-24S269.3 344 256 344z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFalCircleExclamation);\nexport default __webpack_public_path__ + \"static/media/fal-circle-exclamation.23079960.svg\";\nexport { ForwardRef as ReactComponent };","import styled, { css } from 'styled-components';\r\nimport { ReactComponent as EllipsisStrokeSvg } from '../assets/icons/fal-ellipsis-stroke.svg';\r\nimport { ReactComponent as ChartAreaSvg } from '../assets/icons/fal-chart-area.svg';\r\nimport { ReactComponent as ObjectGroupSvg } from '../assets/icons/fal-object-group.svg';\r\nimport { ReactComponent as RobotSvg } from '../assets/icons/fal-robot.svg';\r\nimport { ReactComponent as CircleExclamationSvg } from '../assets/icons/fal-circle-exclamation.svg';\r\n\r\nconst iconStyle = css`\r\n width: 18px;\r\n height: auto;\r\n fill: ${({theme}) => theme.colors.text_dark};\r\n`;\r\n\r\nconst ProfileGroundIcon = styled(EllipsisStrokeSvg)`\r\n ${iconStyle};\r\n`;\r\n\r\nconst ProfileLineIcon = styled(ChartAreaSvg)`\r\n ${iconStyle};\r\n`;\r\n\r\nconst AreaIcon = styled(ObjectGroupSvg)`\r\n ${iconStyle};\r\n`;\r\n\r\nconst ProfileAiIcon = styled(RobotSvg)`\r\n ${iconStyle};\r\n`;\r\n\r\nconst ErrorIcon = styled(CircleExclamationSvg)`\r\n ${iconStyle};\r\n fill: ${({theme}) => theme.colors.negative};\r\n`;\r\n\r\nexport const getFeatureTypeIcon = ({featureType, profileType}) => {\r\n\r\n if(featureType === 'Polygon') {\r\n return ;\r\n }\r\n\r\n if(featureType === 'LineString') {\r\n\r\n if(profileType === 0) {\r\n return ;\r\n }\r\n\r\n if(profileType === 2) {\r\n return ;\r\n }\r\n\r\n if(profileType === 3) {\r\n return ;\r\n }\r\n }\r\n\r\n return ;\r\n}","import { useEffect } from 'react';\r\nimport { useForm, useFormState } from 'react-final-form';\r\n\r\nfunction ChangedCoefficientDetector() {\r\n const { change } = useForm();\r\n const formState = useFormState();\r\n\r\n useEffect(() => {\r\n let sum=0;\r\n for (const property in formState.values.coefficient_def) {\r\n console.log(`${formState.values.coefficient_def[property].value}`);\r\n sum+=formState.values.coefficient_def[property].value;\r\n }\r\n change('coeficient', sum/100);\r\n }, [formState.values.coefficient_def]);\r\n\r\n return null;\r\n}\r\n\r\nexport default ChangedCoefficientDetector;","import { useEffect } from 'react';\r\nimport { useForm } from 'react-final-form';\r\nimport { useDroneDetailContext } from '../Contexts/DroneDetailContext';\r\n\r\nfunction ChangedFeatureDetector() {\r\n const { restart } = useForm();\r\n const { selectedFeature } = useDroneDetailContext();\r\n\r\n useEffect(() => {\r\n if(selectedFeature) {\r\n restart(selectedFeature.properties);\r\n }\r\n }, [selectedFeature]);\r\n\r\n return null;\r\n}\r\n\r\nexport default ChangedFeatureDetector;","export const getFloatValue = value => {\r\n const tmpVal = String(value).replace(/,/g, '.');\r\n return isNaN(tmpVal) ? 0 : parseFloat(tmpVal);\r\n}","import { useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Form, Field, FormSpy } from 'react-final-form';\r\nimport { components } from 'react-select';\r\nimport { useDebouncedCallback } from 'use-debounce';\r\nimport Input from '../Forms/input';\r\nimport Select from '../Forms/select';\r\nimport Message from '../Forms/message';\r\nimport TextArea from '../Forms/textarea';\r\nimport CheckBox from '../Forms/checkbox';\r\nimport AutoComplete from '../Forms/autocomplete';\r\nimport { InputWrapper } from '../Forms/common';\r\nimport Button from '../StoraEnsoComponents/Button';\r\nimport { useDroneDetailContext } from '../Contexts/DroneDetailContext';\r\nimport { getFeatureTypeIcon } from '../../utils/feature';\r\nimport { getPreviousFeatures } from '../../services/projectService';\r\nimport ChangedCoefficientDetector from './changedCoefficientDetector';\r\nimport ChangedFeatureDetector from './changedFeatureDetector';\r\nimport { getFloatValue } from '../../utils';\r\n\r\nconst CheckBoxWrapper = styled.div`\r\n margin-bottom: 14px;\r\n`;\r\n\r\nconst OptionWrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-start;\r\n align-items: center;\r\n\r\n span {\r\n margin-left: 16px;\r\n }\r\n`\r\n\r\nconst Grid = styled.div`\r\n display: grid;\r\n grid-template-columns: 1fr;\r\n column-gap: 8px;\r\n margin-bottom: 32px;\r\n`;\r\n\r\nconst BtnWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n\r\n ${Button} {\r\n margin-bottom: 8px;\r\n width: 100%;\r\n /* max-width: 200px; */\r\n }\r\n`;\r\n\r\nconst CustomSingleValue = props => {\r\n const { data: { label, featureType, profileType } } = props;\r\n\r\n return (\r\n \r\n \r\n {getFeatureTypeIcon({ featureType, profileType })}\r\n ID: {label}\r\n \r\n \r\n )\r\n}\r\n\r\nconst CustomSelectOption = props => {\r\n const { data: { label, featureType, profileType } } = props;\r\n\r\n return (\r\n \r\n \r\n {getFeatureTypeIcon({ featureType, profileType })}\r\n ID: {label}\r\n \r\n \r\n )\r\n}\r\n\r\nfunction FeatureForm({ config, projectId, onFormSubmit, onApplyChanges, }) {\r\n const [configData, setConfigData] = useState(null)\r\n const [featureIdValues, setFeatureIdValues] = useState([]);\r\n const [previousProfiles, setPreviousProfiles] = useState([]);\r\n const { featuresData: features, selectedFeature, setSelectedFeature, setDeletedFeature, setUnsavedChanges } = useDroneDetailContext();\r\n const [formFeature, setFormFeature] = useState(null)\r\n\r\n const setDebouncedPrevProfiles = useDebouncedCallback((value) => {\r\n findPreviousFeature(value);\r\n }, 500);\r\n console.log(config);\r\n useEffect(() => {\r\n if (selectedFeature && config) {\r\n\r\n const selectedFeatureMap = {\r\n ...selectedFeature,\r\n properties: {\r\n ...selectedFeature.properties,\r\n featureId: {\r\n label: selectedFeature.properties.id,\r\n value: selectedFeature.properties.id,\r\n featureType: selectedFeature.geometry.type,\r\n profileType: selectedFeature.properties.profile_type,\r\n },\r\n logLength:selectedFeature.properties.log_length,\r\n height:selectedFeature.properties.height_ground,\r\n woodType: { label: selectedFeature.properties.type || config.definition[0].label, value: selectedFeature.properties.type || config.definition[0].label }\r\n }\r\n }\r\n\r\n setFormFeature(selectedFeatureMap);\r\n setConfigData(config?.definition.find(f => f.label === selectedFeatureMap.properties.woodType.label));\r\n }\r\n }, [selectedFeature, config]);\r\n\r\n useEffect(() => {\r\n setFeatureIdValues(\r\n features ? features.map(({ properties: { id, profile_type }, geometry: { type } }) => ({\r\n label: id,\r\n value: id,\r\n featureType: type,\r\n profileType: profile_type,\r\n })) : []\r\n );\r\n }, [features]);\r\n\r\n const findPreviousFeature = (name) => {\r\n if (name.trim().length >= 2) {\r\n console.log(name)\r\n getPreviousFeatures(projectId, name.trim())\r\n .then(data => {\r\n setPreviousProfiles(data.map(d => ({\r\n id: `${d.name}, ${d.coeficient}`,\r\n label: `${d.name}, ${d.coeficient}`,\r\n data: d\r\n })))\r\n })\r\n }\r\n }\r\n\r\n const submitForm = (values) => {\r\n onFormSubmit({\r\n ...formFeature,\r\n properties: {\r\n ...formFeature.properties,\r\n type: values.woodType?.label,\r\n coefficient_def: values.coefficient_def,\r\n name: values.name || '',\r\n description: values.description || '',\r\n log_length: getFloatValue(values.logLength),\r\n coeficient: getFloatValue(values.coeficient),\r\n height_ground: getFloatValue(values.height),\r\n }\r\n });\r\n }\r\n\r\n const handleApplyChanges = (values) => {\r\n console.log(formFeature);\r\n onApplyChanges({\r\n ...formFeature,\r\n properties: {\r\n ...formFeature.properties,\r\n name: values.name || '',\r\n description: values.description || '',\r\n type: values.woodType?.label,\r\n coefficient_def: values.coefficient_def,\r\n log_length: getFloatValue(values.logLength),\r\n coeficient: getFloatValue(values.coeficient),\r\n height_ground: getFloatValue(values.height),\r\n }\r\n });\r\n }\r\n\r\n return (\r\n (\r\n
\r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n\r\n {\r\n console.log(value);\r\n console.log(features)\r\n input.onChange(value);\r\n setSelectedFeature(features.find(el => el.properties.id === value.value));\r\n }}\r\n />\r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n {formFeature?.geometry.type === 'Polygon' &&\r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n )}\r\n \r\n }\r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n {\r\n setDebouncedPrevProfiles(value);\r\n input.onChange(value);\r\n }}\r\n onSelect={item => {\r\n change('description', item.data.description);\r\n change('logLength', item.data.log_length);\r\n change('coeficient', item.data.coeficient);\r\n change('height', item.data.height_ground);\r\n input.onChange(item.data.name)\r\n }}\r\n />\r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n\r\n options['label']}\r\n getOptionValue={(options) => options['label']}\r\n {...input}\r\n onChange={value => {\r\n change('coefficient_def', {});\r\n input.onChange({ \"value\": value.label, \"label\": value.label });\r\n setConfigData(config?.definition.find(f => f.label === value.label))\r\n }}\r\n />\r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n {\r\n configData?.values.map(c => (\r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n options['label']}\r\n getOptionValue={(options) => options['value']}\r\n\r\n {...input}\r\n onChange={value => {\r\n input.onChange(value)\r\n console.log(values.coefficient_def)\r\n }}\r\n />\r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n ))\r\n }\r\n {formFeature?.geometry.type !== 'Polygon' &&\r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n }\r\n\r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n \r\n {\r\n setUnsavedChanges(true);\r\n setDeletedFeature(selectedFeature)\r\n }}>\r\n Delete\r\n \r\n \r\n {\r\n setUnsavedChanges(true);\r\n handleApplyChanges(values)\r\n }}>\r\n Apply\r\n \r\n \r\n {/* \r\n {({ values, errors }) => (\r\n
\r\n                  {JSON.stringify(values, null, 2)}\r\n                  {JSON.stringify(errors, null, 2)}\r\n                
\r\n )}\r\n
*/}\r\n
\r\n )}\r\n />\r\n );\r\n}\r\nexport default FeatureForm;","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgAngleDown(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 384 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M360.5 217.5l-152 143.1C203.9 365.8 197.9 368 192 368s-11.88-2.188-16.5-6.562L23.5 217.5C13.87 208.3 13.47 193.1 22.56 183.5C31.69 173.8 46.94 173.5 56.5 182.6L192 310.9l135.5-128.4c9.562-9.094 24.75-8.75 33.94 .9375C370.5 193.1 370.1 208.3 360.5 217.5z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgAngleDown);\nexport default __webpack_public_path__ + \"static/media/angle-down.65868d7a.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\r\nimport { shape } from 'prop-types';\r\nimport styled, { css } from 'styled-components';\r\nimport { ReactComponent as ArrowUpSvg } from '../../../assets/icons/angle-up.svg';\r\nimport { ReactComponent as ArrowDownSvg } from '../../../assets/icons/angle-down.svg';\r\n\r\nconst IconStyle = css`\r\n width: 12px;\r\n height: auto;\r\n cursor: pointer;\r\n`;\r\n\r\nconst DownIcon = styled(ArrowDownSvg)`\r\n ${IconStyle};\r\n`;\r\n\r\nconst UpIcon = styled(ArrowUpSvg)`\r\n ${IconStyle};\r\n`;\r\n\r\nfunction RowExpandButton ({ row }) {\r\n\r\n return (\r\n // eslint-disable-next-line\r\n {e.stopPropagation(); row.toggleRowExpanded()}}>\r\n {row.isExpanded ? : }\r\n \r\n );\r\n}\r\n\r\nRowExpandButton.propTypes = {\r\n row: shape({}).isRequired,\r\n};\r\n\r\nexport default RowExpandButton;\r\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFileExcel(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 384 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M365.3 125.3l-106.5-106.5C246.7 6.742 230.5 0 213.5 0H64C28.65 0 0 28.65 0 64l.0065 384c0 35.35 28.65 64 64 64H320c35.35 0 64-28.65 64-64V170.5C384 153.5 377.3 137.3 365.3 125.3zM224 34.08c4.477 1.566 8.666 3.846 12.12 7.299l106.5 106.5C346.1 151.3 348.4 155.5 349.9 160H240C231.2 160 224 152.8 224 144V34.08zM352 448c0 17.64-14.36 32-32 32H64c-17.64 0-32-14.36-32-32V64c0-17.64 14.36-32 32-32h128v112C192 170.5 213.5 192 240 192H352V448zM192 308.1L149.1 246.8c-5.062-7.25-15.06-9-22.28-3.938c-7.25 5.062-9 15.05-3.938 22.28L172.5 336L122.9 406.8c-5.062 7.234-3.312 17.22 3.938 22.28C129.6 431.1 132.8 432 135.1 432c5.047 0 10.02-2.375 13.12-6.828L192 363.9l42.89 61.27C237.1 429.6 242.1 432 248 432c3.172 0 6.375-.9375 9.156-2.891c7.25-5.062 9-15.05 3.938-22.28L211.5 336l49.58-70.83c5.062-7.234 3.312-17.22-3.938-22.28s-17.22-3.312-22.28 3.938L192 308.1z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFileExcel);\nexport default __webpack_public_path__ + \"static/media/file-excel.4420df6a.svg\";\nexport { ForwardRef as ReactComponent };","import styled from 'styled-components';\r\nimport DefaultButton from '../../StoraEnsoComponents/Button';\r\nimport { getFeatureTypeIcon } from '../../../utils/feature';\r\nimport RowExpandButton from '../../DataTable/RowExpandButton';\r\nimport ReactTooltip from 'react-tooltip';\r\n\r\nconst Button = styled(DefaultButton)`\r\n padding: 0 12px;\r\n\r\n span {\r\n padding: 4px 0;\r\n }\r\n`;\r\n\r\nconst TypeIconWrapper = styled.div`\r\n height: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n`;\r\n\r\nconst getColumns = ({onItemDelete}) => [\r\n {\r\n id: 'expander',\r\n Header: '',\r\n customHeaderWidth: 40,\r\n customAlignment: 'center',\r\n Cell: ({ row }) => ,\r\n },\r\n {\r\n id: 'id',\r\n Header: 'Id',\r\n accessor: 'id',\r\n customHeaderWidth: 60,\r\n },\r\n {\r\n id: 'featureType',\r\n Header: 'Type',\r\n accessor: 'feature_type',\r\n customHeaderWidth: 80,\r\n Cell: ({ value, row: { original: { profile_type }}}) =>\r\n <>\r\n \r\n {getFeatureTypeIcon({featureType: value, profileType: profile_type})}\r\n \r\n },\r\n {\r\n id: 'name',\r\n Header: 'Name',\r\n accessor: 'name',\r\n Cell: ({ value }) => value || '-',\r\n },\r\n {\r\n id: 'logLength',\r\n Header: 'Log length',\r\n accessor: 'log_length',\r\n customAlignment: 'right',\r\n Cell: ({ value }) => {value} m,\r\n },\r\n {\r\n id: 'coeficient',\r\n Header: 'Coeficient',\r\n accessor: 'coeficient',\r\n customAlignment: 'right',\r\n },\r\n {\r\n id: 'woodType',\r\n Header: 'Wood type',\r\n accessor: 'type',\r\n Cell: ({ value }) => value || '-',\r\n },\r\n {\r\n id: 'heightGround',\r\n Header: 'Height ground',\r\n accessor: 'height_ground',\r\n customAlignment: 'right',\r\n Cell: ({ value }) => {value} m,\r\n },\r\n {\r\n id: 'volume',\r\n Header: 'Volume',\r\n accessor: 'volume_m3',\r\n customAlignment: 'right',\r\n Cell: ({ value }) => {value} m3,\r\n },\r\n {\r\n id: 'volumeCoefM3',\r\n Header: 'Volume coef',\r\n accessor: 'volume_coef_m3',\r\n customAlignment: 'right',\r\n Cell: ({ value }) => {value} m3,\r\n },\r\n {\r\n Header: '',\r\n accessor: 'none',\r\n disableSortBy: true,\r\n customAlignment: 'right',\r\n Cell: ({\r\n row: { original: { id } }\r\n }) => {\r\n e.stopPropagation();\r\n onItemDelete(id);\r\n }}\r\n size=\"sm\">Delete,\r\n },\r\n];\r\n\r\nexport default getColumns;","import { read, utils, writeFile } from 'xlsx';\r\nimport Button from '../../StoraEnsoComponents/Button';\r\nimport styled from 'styled-components';\r\nimport { ReactComponent as FileExcelSvg } from '../../../assets/icons/file-excel.svg';\r\nimport { useEffect } from 'react';\r\n\r\n\r\nfunction ExportTableToXLSX({tableData, headers, projectName}) {\r\n const ExcelIcon = styled(FileExcelSvg)``;\r\n\r\n const exportXLSX = () => {\r\n const worksheet = utils.json_to_sheet(tableData);\r\n const workbook = utils.book_new();\r\n utils.book_append_sheet(workbook, worksheet, projectName);\r\n writeFile(workbook, `${projectName}.xlsx`);\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\nexport default ExportTableToXLSX;","import ExportTableToCSV from \"./exportTableToCSV\";\r\nimport ExportTableToPDF from \"./exportTableToPDF\";\r\nimport ExportTableToXLSX from \"./exportTableToXLSX\";\r\nimport { ActionGroup } from '../TableActions';\r\n\r\nfunction MillTableExportFunctions({ tableData, headers, projectData }) {\r\n return (\r\n \r\n ({\r\n id: row.id,\r\n name: row.name,\r\n log: row.log_length,\r\n coeficient: row.coeficient,\r\n woodType: row.type,\r\n heightGround: row.height_ground,\r\n volume: row.volume_m3,\r\n volumeCoef: row.volume_coef_m3,\r\n description:row.description\r\n }))}\r\n\r\n headers={(headers.filter(f => f.Header !== \"Type\")).map(c => ({ label: c.Header, key: c.id }))?.push({label:\"description\", id:\"description\"})} />\r\n Object.values({\r\n id: row.id,\r\n name: row.name,\r\n log: row.log_length,\r\n coeficient: row.coeficient,\r\n woodType: row.type,\r\n heightGround: row.height_ground,\r\n volume: row.volume_m3,\r\n volumeCoef: row.volume_coef_m3,\r\n description:row.description\r\n }))} headers={headers.filter(f => f.Header !== \"Type\").map(h => (h.Header)).concat(\"Description\")} missionName={projectData.name} missionDate={projectData.cd} title={\"Mill mission export\"} type={\"MillLog\"} />\r\n ({\r\n id: row.id,\r\n name: row.name,\r\n log: row.log_length,\r\n coeficient: row.coeficient,\r\n woodType: row.type,\r\n heightGround: row.height_ground,\r\n volume: row.volume_m3,\r\n volumeCoef: row.volume_coef_m3,\r\n description:row.description\r\n }))}\r\n\r\n headers={(headers.filter(f => f.Header !== \"Type\")).map(c => ({ label: c.Header, key: c.id }))?.push({label:\"description\", id:\"description\"})} projectName={projectData.name} />\r\n \r\n )\r\n}\r\nexport default MillTableExportFunctions","import styled from 'styled-components';\r\nimport { DateTime } from 'luxon';\r\nimport ReactTooltip from 'react-tooltip';\r\n\r\nconst Wrapper = styled.div`\r\n`;\r\n\r\nconst Title = styled.p`\r\n font-size: 16px;\r\n font-weight: bold;\r\n padding-left: 0;\r\n margin: 0;\r\n margin-bottom: 16px;\r\n`;\r\n\r\nconst GridValues = styled.div`\r\n display: grid;\r\n grid-template-columns: 150px 150px 1fr;\r\n row-gap: 16px;\r\n column-gap: 16px;\r\n`;\r\n\r\nconst ValueItem = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n\r\n span:first-child {\r\n font-weight: bold;\r\n }\r\n`;\r\n\r\nfunction RowDetailView({date, description, area_m2}) {\r\n\r\n return (\r\n \r\n Additional information\r\n \r\n \r\n Date\r\n {!date ? '-' : DateTime.fromISO(date).toLocaleString({dateStyle: 'short'})}\r\n \r\n \r\n Area\r\n {area_m2} m2\r\n \r\n \r\n Description\r\n {description || '-'}\r\n \r\n \r\n\r\n \r\n );\r\n}\r\n\r\nexport default RowDetailView;","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgCalculatorSimple(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M168.1 343c-9.375-9.375-24.56-9.375-33.94 0L112 366.1l-23.03-23.03c-9.375-9.375-24.56-9.375-33.94 0s-9.375 24.56 0 33.94L78.06 400l-23.03 23.03c-9.375 9.375-9.375 24.56 0 33.94C59.72 461.7 65.84 464 72 464s12.28-2.344 16.97-7.031L112 433.9l23.03 23.03C139.7 461.7 145.8 464 152 464s12.28-2.344 16.97-7.031c9.375-9.375 9.375-24.56 0-33.94L145.9 400l23.03-23.03C178.3 367.6 178.3 352.4 168.1 343zM64 134.9h96c13.25 0 24-10.75 24-24s-10.75-24-24-24H64c-13.25 0-24 10.75-24 24S50.75 134.9 64 134.9zM344 136.1h32v32c0 13.25 10.75 23.92 24 23.92s24-10.67 24-23.92v-32h32c13.25 0 24-10.83 24-24.08s-10.75-23.92-24-23.92h-32v-32c0-13.25-10.75-24.08-24-24.08s-24 10.83-24 24.08v32h-32c-13.25 0-24 10.67-24 23.92S330.8 136.1 344 136.1zM488 232h-208v-208C280 10.75 269.3 0 256 0S232 10.75 232 24v208h-208C10.75 232 0 242.8 0 256s10.75 24 24 24h208v208C232 501.3 242.8 512 256 512s24-10.75 24-24v-208h208C501.3 280 512 269.3 512 256S501.3 232 488 232zM448 416h-96.06C338.7 416 328 426.8 328 440S338.8 464 352 464h96c13.25 0 24-10.75 24-24S461.3 416 448 416zM448 336h-96c-13.25 0-24 10.75-24 24S338.7 384 351.1 384h96.06C461.3 384 472 373.3 472 360S461.3 336 448 336z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCalculatorSimple);\nexport default __webpack_public_path__ + \"static/media/calculator-simple.125c0edb.svg\";\nexport { ForwardRef as ReactComponent };","import { useState, useEffect } from 'react';\r\nimport { func } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport { useDebouncedCallback } from 'use-debounce';\r\nimport DefaultCheckbox from '../../Forms/checkbox';\r\nimport DefaultInput from '../../Forms/input';\r\n\r\nconst Label = styled.label`\r\n font-size: 1rem;\r\n margin-right: 8px;\r\n`;\r\n\r\nconst Input = styled(DefaultInput)`\r\n width: 250px;\r\n margin-right: 32px;\r\n padding: 0.5rem;\r\n`;\r\n\r\nconst Checkbox = styled(DefaultCheckbox)`\r\n width: auto;\r\n margin-bottom: 0;\r\n margin-right: 16px;\r\n font-size: 1rem;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-start;\r\n align-items: center;\r\n`;\r\n\r\nconst Filters = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`;\r\n\r\nfunction DataFilter({ onSearchChange, onTypeChange }) {\r\n const [searchValue, setSearchValue] = useState('');\r\n const [typeValues, setTypeValues] = useState({\r\n ai: true,\r\n profile: true,\r\n area: true,\r\n });\r\n\r\n const setDebouncedSearch = useDebouncedCallback(() => {\r\n onSearchChange(searchValue.trim());\r\n }, 500);\r\n\r\n const setDebouncedType = useDebouncedCallback(() => {\r\n onTypeChange(typeValues);\r\n }, 500);\r\n\r\n const handleSearchChange = (val) => {\r\n setSearchValue(val);\r\n setDebouncedSearch();\r\n };\r\n\r\n const handleTypeChange = (id, checked) => {\r\n setTypeValues(prev => ({\r\n ...prev, [id]: checked\r\n }));\r\n\r\n setDebouncedType();\r\n }\r\n\r\n useEffect(() => {\r\n onTypeChange(typeValues);\r\n }, []);\r\n\r\n return (\r\n \r\n handleSearchChange(ev.target.value)} />\r\n\r\n \r\n \r\n handleTypeChange('ai', e.target.checked)} />\r\n handleTypeChange('profile', e.target.checked)} />\r\n handleTypeChange('area', e.target.checked)} />\r\n \r\n \r\n );\r\n}\r\n\r\n\r\nDataFilter.propTypes = {\r\n onSearchChange: func.isRequired,\r\n onTypeChange: func.isRequired,\r\n}\r\n\r\nexport default DataFilter;","import { useMemo, useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { bool, func, } from 'prop-types';\r\nimport normalize from 'normalize-strings';\r\nimport keys from 'lodash/keys';\r\nimport pickBy from 'lodash/pickBy'\r\nimport findIndex from 'lodash.findindex';\r\nimport Button from '../../StoraEnsoComponents/Button';\r\nimport DataTable from '../../DataTable';\r\nimport getColumns from './columns';\r\nimport TableExportFunctions from '../../DataTable/TableExportFunctions/millTableExportFunctions';\r\nimport RowDetailView from './rowDetailView';\r\nimport { useDroneDetailContext } from '../../Contexts/DroneDetailContext';\r\nimport { TableActions, ActionGroup } from '../../DataTable/TableActions';\r\nimport { ReactComponent as CalculatorSvg } from '../../../assets/icons/calculator-simple.svg';\r\nimport ReactTooltip from 'react-tooltip';\r\nimport DataFilter from './dataFilter';\r\n\r\nconst Wrapper = styled.div`\r\n overflow-x: auto;\r\n`;\r\n\r\nconst CalculateIcon = styled(CalculatorSvg)``;\r\nconst TableFooter = styled.div`\r\n`;\r\n\r\nconst TopPanel = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n align-items: center;\r\n`;\r\n\r\nfunction FeatureGrid({ loading, onCalculateAllFeatures , projectData}) {\r\n const [selectedRowIdx, setSelectedRowIdx] = useState(null);\r\n const [filtered, setFiltered] = useState(null);\r\n const [gridSearch, setGridSearch] = useState('');\r\n const [gridTypeFilter, setGridTypeFilter] = useState(null);\r\n\r\n const { featuresData, selectedFeature, setSelectedFeature, setDeletedFeature } = useDroneDetailContext();\r\n\r\n const onItemDelete = selectedId => setDeletedFeature(featuresData.find(f => f.properties.id === selectedId));\r\n\r\n const columns = useMemo(() => getColumns({onItemDelete}), [onItemDelete]);\r\n\r\n const handleRowSelect = ({data: {id}}) => {\r\n setSelectedFeature(featuresData.find(el => el.properties.id === id));\r\n };\r\n\r\n const gridData = useMemo(() => {\r\n if (featuresData) {\r\n const data = filtered || featuresData;\r\n return data.map(d => ({...d.properties, feature_type: d.geometry.type}));\r\n } else {\r\n return [];\r\n }\r\n }, [featuresData, filtered]);\r\n\r\n useEffect(() => {\r\n const idx = findIndex(gridData, el => el.id === selectedFeature?.properties.id);\r\n\r\n if(idx > -1) {\r\n setSelectedRowIdx(idx);\r\n }\r\n\r\n }, [selectedFeature]);\r\n\r\n useEffect(() => {\r\n const activeTypes = keys(pickBy(gridTypeFilter, value => value === true));\r\n\r\n if(!loading && (gridSearch.trim().length > 0 || (gridTypeFilter && activeTypes.length !== 3))) {\r\n const regex = new RegExp(normalize(gridSearch), 'gi');\r\n let tempData = featuresData;\r\n\r\n if(activeTypes.length === 0) {\r\n setFiltered(null);\r\n }\r\n\r\n if(activeTypes.length !== 3) {\r\n tempData = featuresData.filter(item => {\r\n\r\n // area type check\r\n if(activeTypes.includes('area') && item.geometry.type === 'Polygon') {\r\n return true;\r\n }\r\n\r\n // profile type check\r\n if(activeTypes.includes('profile') && item.geometry.type === 'LineString' && [0, 2].includes(item.properties.profile_type)) {\r\n return true;\r\n }\r\n\r\n // AI type check\r\n if(activeTypes.includes('ai') && item.geometry.type === 'LineString' && item.properties.profile_type === 3) {\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n setFiltered(tempData.filter(item => ((normalize(String(item.properties.id) || '')).match(regex) || (normalize(item.properties.name || '')).match(regex))));\r\n\r\n } else {\r\n setFiltered(null);\r\n }\r\n }, [loading, gridSearch, gridTypeFilter]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n setGridSearch(value)}\r\n onTypeChange={value => setGridTypeFilter(value)}\r\n />\r\n \r\n \r\n \r\n \r\n t.properties) : []} headers={ columns.filter(col => col.Header)} projectData={projectData}/>\r\n \r\n \r\n \r\n \r\n \r\n
Total volume: {((featuresData ? featuresData.map( t=>t.properties.volume_m3) : []).reduce((a, b) => parseFloat(a) + parseFloat(b), 0)).toFixed(2)} m3
\r\n
Total volume with coefficients: {((featuresData ? featuresData.map( t=>t.properties.volume_coef_m3) : []).reduce((a, b) => parseFloat(a) + parseFloat(b), 0)).toFixed(2)} m3
\r\n
\r\n \r\n );\r\n}\r\n\r\nFeatureGrid.propTypes = {\r\n loading: bool.isRequired,\r\n onCalculateAllFeatures: func.isRequired,\r\n}\r\n\r\nexport default FeatureGrid;","import { bool, node, string, func, oneOf } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport ReactModal from 'react-modal';\r\nimport Icon from '../StoraEnsoComponents/Icon';\r\nimport Button from '../StoraEnsoComponents/Button';\r\nimport themeObj from '../../config/theme';\r\n\r\nconst modalStyle = {\r\n overlay: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n backgroundColor: 'rgba(0, 0, 0, 0.45)',\r\n zIndex: 150,\r\n },\r\n content: {\r\n padding: '0',\r\n top: 'auto',\r\n bottom: 'auto',\r\n margin: 'auto',\r\n backgroundColor: themeObj.colors.white,\r\n border: '0 none',\r\n borderRadius: '0',\r\n display: 'grid',\r\n width: 'calc(100% - 80px)',\r\n maxWidth: '500px',\r\n },\r\n};\r\n\r\nconst IconWrapper = styled.div`\r\n ${Icon} {\r\n color: ${({theme}) => theme.colors.white};\r\n font-size: 12px;\r\n cursor: pointer;\r\n }\r\n`;\r\n\r\nconst ModalWrapper = styled.div`\r\n display: grid;\r\n grid-template-rows: auto 1fr auto;\r\n height: 100%;\r\n`;\r\n\r\nconst ModalHeader = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 0.5em 1em;\r\n background-color: ${({kind, theme}) => kind === 'success' ? theme.colors.positive : theme.colors.negative};\r\n`;\r\n\r\nconst Title = styled.div`\r\n color: ${({ theme }) => theme.colors.white};\r\n font-weight: bold;\r\n line-height: 1.25;\r\n`;\r\n\r\nconst ModalBody = styled.div`\r\n padding: 1em;\r\n max-height: calc(80vh - 150px); /* max Modal height - height of header and footer */\r\n overflow: auto;\r\n`;\r\n\r\nconst ModalFooter = styled.div`\r\n background-color: ${({theme}) => theme.colors.bg_gray_light};\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 0.25em;\r\n`;\r\n\r\nconst Content = styled.div``;\r\n\r\nfunction ConfirmationModal({\r\n modalId,\r\n isOpen,\r\n onClose,\r\n onSubmit,\r\n title,\r\n children,\r\n okBtnLabel,\r\n cancelBtnLabel,\r\n kind,\r\n}) {\r\n return (\r\n \r\n \r\n \r\n {title}\r\n \r\n close\r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nConfirmationModal.propTypes = {\r\n modalId: string,\r\n isOpen: bool.isRequired,\r\n onSubmit: func.isRequired,\r\n onClose: func.isRequired,\r\n title: string.isRequired,\r\n children: node.isRequired,\r\n okBtnLabel: string,\r\n cancelBtnLabel: string,\r\n kind: oneOf(['success', 'error']),\r\n};\r\n\r\nConfirmationModal.defaultProps = {\r\n modalId: '',\r\n okBtnLabel: 'Ok',\r\n cancelBtnLabel: 'Cancel',\r\n kind: 'success',\r\n}\r\n\r\nexport default ConfirmationModal;","import { useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport scrollToElement from 'scroll-to-element';\r\nimport { getFeatures, getCoefficient, getTerrainProfile, getPolygonVolume,saveFeatures, deleteProject, calculateFeatures } from '../../services/projectService';\r\nimport SurfaceChart from './SurfaceChart'\r\nimport ProfileChart from './ProfileChart'\r\nimport FeatureForm from './featureForm';\r\nimport FeatureGrid from './FeatureGrid';\r\nimport Icon from '../StoraEnsoComponents/Icon';\r\nimport Button from '../StoraEnsoComponents/Button';\r\nimport { DRONE_MAP } from '../../Routes';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport NotificationToast from '../NotificationToast';\r\nimport ConfirmationModal from '../ConfirmationModal';\r\nimport Map from '../Map';\r\nimport { DroneDetailProvider, useDroneDetailContext } from '../Contexts/DroneDetailContext';\r\nimport { SidebarWrapper as DefaultSidebarWrapper, Sidebar } from '../Sidebar';\r\nimport { ReactComponent as ArrowUpSvg } from '../../assets/icons/angle-up.svg';\r\nimport NotificationUnsavedChanges from '../NotificationUnsavedChanges';\r\n\r\nconst OpenIcon = styled(ArrowUpSvg)``;\r\n\r\nconst SidebarWrapper = styled(DefaultSidebarWrapper)`\r\n margin-bottom: 32px;\r\n`;\r\n\r\nconst FeatureFormWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n padding: 8px 8px 32px 8px;\r\n`;\r\n\r\nconst OpenSidebarBtn = styled(Button)`\r\n position: absolute;\r\n right: 0;\r\n top: 50%;\r\n transform: translate(0, -109px) rotate(-90deg);\r\n transform-origin: bottom right;\r\n`;\r\nconst ChartWrapper = styled.div`\r\n position: relative;\r\n justify-content: center;\r\n display: flex;\r\n border-style: groove;`\r\n\r\nconst CloseIcon = styled(Icon)`\r\n position: absolute;\r\n top: 1rem;\r\n right: 1rem;\r\n cursor: pointer;\r\n`;\r\n\r\nfunction MillDetail({ projectData}) {\r\n const [sidebarVisible, setSidebarVisible] = useState(true);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState(true);\r\n const [profileChartData, setProfileChartData] = useState(null);\r\n const [areaChartData, setAreaChartData] = useState();\r\n const [lineData, setLineData] = useState([]);\r\n const [areaData, setAreaData] = useState([]);\r\n const [config, setConfig] = useState();\r\n const [actionResult, setActionResult] = useState(null);\r\n const [isModalOpen, setModalOpen] = useState(false);\r\n const navigate = useNavigate();\r\n const {featuresData, setFeaturesData, selectedFeature, setSelectedFeature, setUnsavedChanges, unsavedChanges} = useDroneDetailContext();\r\n\r\n useEffect(() => {\r\n console.log(projectData)\r\n Promise.all([\r\n getFeatures(projectData.id)\r\n .then(data => {\r\n setFeaturesData(data);\r\n setLineData(data.filter(item => item.geometry.type === \"LineString\"));\r\n setAreaData(data.filter(item => item.geometry.type === \"Polygon\"));\r\n\r\n if(data.length > 0) {\r\n setSelectedFeature(data[0]);\r\n }\r\n\r\n }),\r\n getCoefficient(projectData.id)\r\n .then(data => setConfig(data)),\r\n\r\n ])\r\n .catch(() => setError())\r\n .then(() => {\r\n setLoading(false);\r\n scrollToElement('#map', {\r\n offset: -100,\r\n duration: 500,\r\n });\r\n })\r\n }, []);\r\n\r\n // clear chart data on selectedFeature change\r\n useEffect(() => {\r\n if(selectedFeature) {\r\n setAreaChartData(null);\r\n setProfileChartData(null);\r\n }\r\n }, [selectedFeature]);\r\n\r\n const applyChanges = updatedFeature => {\r\n console.log(\"updated\",updatedFeature)\r\n setFeaturesData(prev => prev.map(item => item.properties.id !== updatedFeature.properties.id ? item : updatedFeature));\r\n setSelectedFeature(updatedFeature);\r\n }\r\n\r\n const calculateFeature = (feature) =>{\r\n\r\n setUnsavedChanges(true);\r\n if(feature.geometry.type ==='Polygon'){\r\n getPolygonVolume(feature).then( data => {\r\n console.log(data);\r\n feature.properties.area_m2 = data.area?.toFixed(2);\r\n feature.properties.volume_m3 = data.volume?.toFixed(2);\r\n feature.properties.volume_coef_m3 = (feature.properties.volume_m3*feature.properties.coeficient).toFixed(2);\r\n applyChanges(feature);\r\n setProfileChartData(null)\r\n setAreaChartData({data:data,feature:feature});\r\n })\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'An error has occurred while calculating feature!'\r\n });\r\n });\r\n\r\n return;\r\n }\r\n\r\n getTerrainProfile(feature).then( data => {\r\n feature.properties.area_m2 = data.area.toFixed(2);\r\n feature.properties.volume_m3 = (data.area*feature.properties.log_length).toFixed(2);\r\n feature.properties.volume_coef_m3 = (feature.properties.volume_m3*feature.properties.coeficient).toFixed(2);\r\n applyChanges(feature);\r\n setAreaChartData(null)\r\n setProfileChartData({data:data,feature:feature});\r\n })\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'An error has occurred while calculating feature!'\r\n });\r\n });\r\n }\r\n\r\n const updateStatus = () => {\r\n deleteProject(projectData.id)\r\n .then(() => {\r\n navigate(DRONE_MAP)\r\n })\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'An error has occurred while deleting project!'\r\n });\r\n });\r\n }\r\n const saveProjectFeatures = ()=>{\r\n saveFeatures(projectData.id,featuresData)\r\n .then(() => {\r\n setUnsavedChanges(false);\r\n setActionResult({\r\n kind: 'success',\r\n message: 'Features has been successfully saved.'\r\n });\r\n })\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'An error has occurred while saving features'\r\n });\r\n });\r\n }\r\n\r\n const handleCalculateFeatures = () =>{\r\n console.log(featuresData);\r\n let calculatedFeatures=[]\r\n setLoading(true)\r\n calculateFeatures(featuresData).then(data=>{\r\n data.forEach(d=>{\r\n let feature = featuresData.find(feature=>feature.properties.id===d.id)\r\n if(feature.geometry.type ==='LineString'){\r\n feature.properties.area_m2 = d.area.toFixed(2);\r\n feature.properties.volume_m3 = (d.area*feature.properties.log_length).toFixed(2);\r\n feature.properties.volume_coef_m3 = (feature.properties.volume_m3*feature.properties.coeficient).toFixed(2);\r\n }\r\n if(feature.geometry.type ==='Polygon'){\r\n feature.properties.volume_m3 = d.volume.toFixed(2);\r\n feature.properties.volume_coef_m3 = (feature.properties.volume_m3*feature.properties.coeficient).toFixed(2);\r\n }\r\n calculatedFeatures.push(feature);\r\n })\r\n console.log(calculatedFeatures);\r\n setFeaturesData(calculatedFeatures);\r\n setLoading(false)\r\n })\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'An error has occurred while calculating all features!'\r\n });\r\n });\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n setActionResult(null)}\r\n />\r\n setModalOpen(false)}\r\n onSubmit={() => {\r\n updateStatus();\r\n setModalOpen(false);\r\n }}\r\n >\r\n Do you really want to DELETE this project? This action can not be reversed.\r\n \r\n\r\n \r\n \r\n\r\n } onClick={() => setSidebarVisible(true)}>Show\r\n \r\n \r\n setSidebarVisible(false)}>close\r\n calculateFeature(values)}\r\n onApplyChanges={applyChanges}\r\n projectId={projectData.id}\r\n />\r\n \r\n \r\n \r\n {\r\n (areaChartData || profileChartData) && (\r\n \r\n {areaChartData && }\r\n {profileChartData && }\r\n {setAreaChartData(null); setProfileChartData(null)}}>close\r\n \r\n )}\r\n {handleCalculateFeatures()}}\r\n projectData={projectData} />\r\n \r\n );\r\n\r\n\r\n}\r\n\r\nexport default function DroneDetailWithContext({projectData}) {\r\n return (\r\n \r\n \r\n \r\n );\r\n};","import { useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { shape } from 'prop-types';\r\nimport { getProjectMultimedia } from '../../services/mapService';\r\nimport Section from '../Section';\r\nimport DefaultLoading from '../Loading';\r\nimport Notification from '../StoraEnsoComponents/Notification';\r\n\r\nconst Loading = styled(DefaultLoading)`\r\n margin: 60px auto;\r\n justify-content: center;\r\n`;\r\n\r\nconst ErrorWrapper = styled.div`\r\n margin: 60px auto;\r\n max-width: 75%;\r\n`;\r\n\r\nfunction SinglePhotoDetail ({ projectData: { id } }) {\r\n const [isLoading, setLoading] = useState(true);\r\n const [error, setError] = useState(null);\r\n const [imgData, setImgData] = useState(null);\r\n\r\n useEffect(() => {\r\n getProjectMultimedia(id)\r\n .then(data => setImgData(data))\r\n .catch(err => setError(err))\r\n .then(() => setLoading(false));\r\n }, [id])\r\n\r\n return (\r\n
\r\n {\r\n isLoading && (\r\n \r\n )\r\n }\r\n\r\n {\r\n error && (\r\n \r\n setError(false)}>An error has occurred while loading image data!\r\n \r\n )\r\n }\r\n {\r\n imgData && (\r\n \"Photo\"\r\n )\r\n }\r\n
\r\n );\r\n}\r\n\r\nSinglePhotoDetail.propTypes = {\r\n projectData: shape({}).isRequired,\r\n}\r\n\r\nexport default SinglePhotoDetail;","import { useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { shape } from 'prop-types';\r\nimport ReactPannellum from \"react-pannellum\";\r\nimport { getProjectMultimedia } from '../../services/mapService';\r\nimport Section from '../Section';\r\nimport DefaultLoading from '../Loading';\r\nimport Notification from '../StoraEnsoComponents/Notification';\r\n\r\nconst Loading = styled(DefaultLoading)`\r\n margin: 60px auto;\r\n justify-content: center;\r\n`;\r\n\r\nconst ErrorWrapper = styled.div`\r\n margin: 60px auto;\r\n max-width: 75%;\r\n`;\r\n\r\n\r\nfunction PanoramaDetail({ projectData: { id } }) {\r\n const [isLoading, setLoading] = useState(true);\r\n const [error, setError] = useState(null);\r\n const [imgData, setImgData] = useState(null);\r\n\r\n useEffect(() => {\r\n getProjectMultimedia(id)\r\n .then(data => setImgData(data))\r\n .catch(err => setError(err))\r\n .then(() => setLoading(false));\r\n }, [id])\r\n\r\n return (\r\n \r\n {\r\n isLoading && (\r\n \r\n )\r\n }\r\n\r\n {\r\n error && (\r\n \r\n setError(false)}>An error has occurred while loading panorama data!\r\n \r\n )\r\n }\r\n {\r\n imgData && (\r\n \r\n )\r\n }\r\n \r\n );\r\n}\r\n\r\nPanoramaDetail.propTypes = {\r\n projectData: shape({}).isRequired,\r\n}\r\n\r\nexport default PanoramaDetail;","import { useEffect, useState } from 'react';\r\nimport { shape } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport ReactPlayer from 'react-player'\r\nimport { getVideoUrl } from '../../services/mapService';\r\nimport DefaultLoading from '../Loading';\r\nimport Notification from '../StoraEnsoComponents/Notification';\r\nimport Section from '../Section';\r\n\r\nconst Loading = styled(DefaultLoading)`\r\n margin: 60px auto;\r\n justify-content: center;\r\n`;\r\n\r\nconst ErrorWrapper = styled.div`\r\n margin: 60px auto;\r\n max-width: 75%;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n width: 100%;\r\n max-width: 800px;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: flex-start;\r\n`;\r\n\r\nfunction VideoDetail({ projectData: { id } }) {\r\n const [isLoading, setLoading] = useState(true);\r\n const [error, setError] = useState(null);\r\n const [videoData, setVideoData] = useState(null);\r\n\r\n useEffect(() => {\r\n getVideoUrl(id)\r\n .then(data => {\r\n setVideoData(`${process.env.REACT_APP_API_URL}projects/detail/video/${data.id}/stream/${data.hash}`)\r\n console.log(\"URL\")})\r\n .catch(err => setError(err))\r\n .then(() => setLoading(false));\r\n }, [id])\r\n\r\n return (\r\n
\r\n {\r\n isLoading && (\r\n \r\n )\r\n }\r\n {\r\n error && (\r\n \r\n setError(false)}>An error has occurred while loading video data!\r\n \r\n )\r\n }\r\n {\r\n videoData && (\r\n \r\n \r\n \r\n )\r\n }\r\n
\r\n );\r\n}\r\n\r\nVideoDetail.propTypes = {\r\n projectData: shape({}).isRequired,\r\n}\r\n\r\nexport default VideoDetail;","import { useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { shape, arrayOf } from 'prop-types';\r\nimport { getMapConfig } from '../../../services/projectService';\r\nimport MeasureMapMenu from '../../Map/measureMapMenu';\r\nimport { DroneDetailProvider } from '../../Contexts/DroneDetailContext';\r\n\r\nconst MapWrapper = styled.div`\r\n height: 100%;\r\n width: 100%;\r\n position: relative;\r\n\r\n .ol-overlaycontainer-stopevent {\r\n position: absolute;\r\n width: 100% !important;\r\n height: 100% !important;\r\n margin: 0;\r\n }\r\n\r\n .ol-scale-line {\r\n position: absolute;\r\n right: 8px;\r\n bottom: 8px;\r\n\r\n .ol-scale-line-inner {\r\n position: absolute !important;\r\n bottom: 0 !important;\r\n right: 0 !important;\r\n }\r\n }\r\n\r\n .ol-mouse-position {\r\n position: absolute !important;\r\n top: 8px !important;\r\n right: 8px !important;\r\n }\r\n\r\n .cfm-geolocation {\r\n position: absolute !important;\r\n right: 8px !important;\r\n top: calc(50% + 14px) !important;\r\n transform: translateY(-50%) !important;\r\n }\r\n\r\n .ol-zoom {\r\n position: absolute !important;\r\n right: 8px !important;\r\n top: calc(50% + 1.5rem + 2.5rem) !important;\r\n transform: translateY(-50%) !important;\r\n }\r\n`;\r\n\r\nexport const MenuDetailWraper = styled.div`\r\n position: absolute;\r\n top: 8px;\r\n display: flex;\r\n flex-direction: column;\r\n z-index: 1;\r\n width: 3rem;\r\n left: 8px;\r\n`;\r\n\r\n// TODO\r\n// - export config to separate file\r\n// - use one map component\r\n// - fix missing type icon\r\nfunction DetailMapWithContext({ crs, mapData }) {\r\n const [loading, setLoading] = useState(true);\r\n const [mapConfig, setMapConfig] = useState(null);\r\n\r\n useEffect(() => {\r\n getMapConfig(\"detailMap\")\r\n .then(data => {\r\n setMapConfig(data);\r\n setLoading(false);\r\n });\r\n\r\n return function cleanup() {\r\n GIS.Layer.clear();\r\n GIS.Interaction.clear();\r\n GIS.Control.clear();\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if(!loading && mapConfig) {\r\n /* global GIS */\r\n GIS.Projection.init(mapConfig.config.projection);\r\n GIS.Style.init(mapConfig.config.style);\r\n GIS.Layer.init(mapConfig.config.layer, mapConfig.config.group);\r\n GIS.Control.init(mapConfig.config.control);\r\n GIS.Interaction.init(mapConfig.config.map);\r\n GIS.Map.init(mapConfig.config.map, mapConfig.config.view);\r\n\r\n GIS.Layer.removeFeatures('subproject');\r\n GIS.Layer.addFeatures('subproject', {\r\n type: \"FeatureCollection\",\r\n name: \"Multimedia content\",\r\n features: mapData,\r\n crs,\r\n });\r\n\r\n try {\r\n const extent = GIS.Layer.getLayerExtent('subproject');\r\n GIS.Map.zoomToExtent(extent, 13);\r\n } catch (e) {\r\n console.log(\"We don't have any media related to you.\")\r\n }\r\n }\r\n }, [loading, mapConfig]);\r\n\r\n if(loading || !mapConfig) {\r\n return null;\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\nDetailMapWithContext.propTypes = {\r\n crs: shape({}),\r\n mapData: arrayOf(shape({})).isRequired,\r\n};\r\n\r\nDetailMapWithContext.defaultProps = {\r\n crs: {\r\n type: \"EPSG\",\r\n properties: {\r\n code: 4326\r\n }\r\n },\r\n};\r\n\r\n\r\nexport default function DetailMap({ crs, mapData }) {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n","import axios from '../utils/axios';\r\n\r\nexport const getUserMediaContent = () => {\r\n return axios.get('multimediaapi/adminengine/v1/getusermediacontent').then(response => response.data);\r\n}\r\n\r\n// TODO change api request type to PUT\r\nexport const changMultimediaTag = (tag, id) => {\r\n return axios.get(`projects/multimedia/${id}/tag/${tag}`).then(response => response.data);\r\n}","import { useState, useEffect } from 'react';\r\nimport { string, number } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport Select from 'react-select';\r\nimport Button from '../../StoraEnsoComponents/Button';\r\nimport ConfirmationModal from '../../ConfirmationModal';\r\nimport NotificationToast from '../../NotificationToast';\r\nimport { changMultimediaTag} from '../../../services/multimediaService';\r\nimport { DRONE_MAP } from '../../../Routes';\r\n\r\nconst TAG_OPTIONS = [\r\n {label: 'unvalidated', value: 1},\r\n {label: 'internal', value: 2},\r\n {label: 'public', value: 3},\r\n {label: 'deleted', value: 4}\r\n];\r\n\r\nconst Wrapper = styled.div`\r\n display: grid;\r\n grid-template-columns: 1fr;\r\n row-gap: 8px;\r\n\r\n @media screen and (min-width: 576px) {\r\n column-gap: 25px;\r\n grid-template-columns: 1fr auto;\r\n align-items: flex-end;\r\n }\r\n`;\r\n\r\n// TODO:\r\n// - reload item after update action ??\r\n// - implement custom styles for Select component\r\nfunction TagMenu({id, tagId}) {\r\n const [tag, setTag]= useState(null);\r\n const [isModalOpen, setModalOpen] = useState(false);\r\n const [actionResult, setActionResult] = useState(null);\r\n\r\n\r\n const navigate = useNavigate();\r\n\r\n const isDeleteAction = () => tag.value === 4;\r\n\r\n const handleStatusUpdate = () => {\r\n if(isDeleteAction()){\r\n setModalOpen(true);\r\n } else {\r\n updateStatus();\r\n }\r\n }\r\n\r\n const updateStatus = () => {\r\n changMultimediaTag(tag.value, id)\r\n .then(() => {\r\n setActionResult({\r\n kind: 'success',\r\n message: 'The project status has been successfully updated.'\r\n });\r\n\r\n if(isDeleteAction()) {\r\n navigate(DRONE_MAP)\r\n }\r\n })\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'An error has occurred while changing project status!'\r\n });\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n setTag(TAG_OPTIONS.find(t => t.value === tagId));\r\n }, [tagId]);\r\n\r\n return (\r\n <>\r\n setActionResult(null)}\r\n />\r\n setModalOpen(false)}\r\n onSubmit={() => {\r\n updateStatus();\r\n setModalOpen(false);\r\n }}\r\n >\r\n Do you really want to DELETE this project? This action can not be reversed.\r\n \r\n \r\n
\r\n \r\n ({ ...base, zIndex: 9999 }) }}\r\n options={TAG_OPTIONS}\r\n value={tag}\r\n onChange={value => {\r\n setTag(value)\r\n console.log(value);\r\n\r\n }}\r\n />\r\n
\r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nTagMenu.propTypes = {\r\n id: string.isRequired,\r\n tagId: number.isRequired,\r\n}\r\n\r\nexport default TagMenu;","import { shape, oneOf } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport { DateTime } from 'luxon';\r\nimport DetailMap from '../DetailMap';\r\nimport { PROJECT_TYPES, MULTIMEDIA_TYPES } from '../../../config';\r\nimport { ReactComponent as ErrorSvg } from '../../../assets/icons/circle-exclamation-solid.svg'\r\nimport TagMenu from './tagMenu';\r\n\r\nconst ErrorIcon = styled(ErrorSvg)`\r\n width: 30px;\r\n height: auto;\r\n fill: ${({theme}) => theme.colors.bg_gray_dark};\r\n margin-bottom: 16px;\r\n`;\r\n\r\nconst Grid = styled.div`\r\n display: grid;\r\n grid-template-columns: 1fr;\r\n row-gap: 2rem;\r\n column-gap: 2rem;\r\n position: relative;\r\n\r\n @media screen and (min-width: 768px) {\r\n grid-template-columns: 1fr 1fr;\r\n }\r\n`;\r\n\r\nconst InfoWrapper = styled(Grid)`\r\n grid-template-columns: 1fr;\r\n column-gap: 1rem;\r\n`;\r\n\r\nconst MapWrapper = styled.div`\r\n position: relative;\r\n z-index: 0;\r\n min-height: 300px;\r\n`;\r\n\r\nconst Table = styled.table`\r\n border-collapse: collapse;\r\n\r\n tr td {\r\n padding: 0.25rem 1rem;\r\n vertical-align: top;\r\n border-bottom: 1px solid ${({ theme }) => theme.colors.bg_gray};\r\n }\r\n\r\n tr td:first-child {\r\n font-weight: bold;\r\n padding-right: 1.5rem;\r\n }\r\n\r\n ul {\r\n list-style-type: square;\r\n }\r\n`;\r\n\r\nconst MissingMapData = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n height: 100%;\r\n background-color: ${({theme}) => theme.colors.bg_gray_light};\r\n`;\r\n\r\nconst ActionsWrapper = styled.div`\r\n background-color: ${({theme}) => theme.colors.bg_gray_light};\r\n padding: 1rem;\r\n margin: 1rem 0;\r\n`;\r\n\r\nconst getTypeStr = type => {\r\n switch(type) {\r\n case 'single':\r\n return 'Photo';\r\n case 'panorama':\r\n return 'Panorama';\r\n case 'video':\r\n return 'Video';\r\n default:\r\n return '-';\r\n }\r\n}\r\n\r\nfunction BasicMultimediaInformation({data, type}) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Name{data.name}
ID{data.id}
Description{data.description}
Type{getTypeStr(type)}
Created{!data.created ? '-' : DateTime.fromISO(data.created).toLocaleString({dateStyle: 'long', timeStyle: 'medium', hour12: false})}
Captured{!data.captured ? '-' : DateTime.fromISO(data.captured).toLocaleString({dateStyle: 'long', timeStyle: 'medium', hour12: false})}
Drone{data.drone}
Location{!data.geometry ? '-' : data.geometry.coordinates.join(', ')}
\r\n {\r\n data.status === 5 && (\r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n {\r\n data.geometry ? (\r\n \r\n ) : (\r\n \r\n \r\n Missing map data\r\n \r\n )\r\n }\r\n \r\n
\r\n );\r\n\r\n}\r\n\r\nBasicMultimediaInformation.propTypes = {\r\n data: shape({}).isRequired,\r\n type: oneOf(PROJECT_TYPES).isRequired,\r\n}\r\n\r\nexport default BasicMultimediaInformation;","export default __webpack_public_path__ + \"static/media/logo.6ce24c58.svg\";","import { useState, useEffect } from 'react';\r\nimport { string, number } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport Select from 'react-select';\r\nimport Button from '../../StoraEnsoComponents/Button';\r\nimport ConfirmationModal from '../../ConfirmationModal';\r\nimport NotificationToast from '../../NotificationToast';\r\nimport { getUploadedImages, reuploadPicture, reuploadDone } from '../../../services/uploadingService';\r\nimport logoSrc from '../../../logo.svg';\r\nimport UploadPreview from '../../UploadingPage/UploadPreview';\r\nimport FileUpload from '../../UploadingPage/FileUpload';\r\nimport { useField, useForm } from 'react-final-form';\r\nimport findIndex from 'lodash.findindex';\r\nimport EXIF from \"exif-js\";\r\nimport Loading from '../../Loading';\r\n\r\n\r\nconst LoadingWrapper = styled.div`\r\n margin: 60px auto;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n`\r\n\r\nconst Wrapper = styled.div`\r\nmax-width: 1000px;\r\nmargin: 0 auto;\r\n`;\r\nconst Separator = styled.div`\r\n margin-bottom: 16px;\r\n`;\r\n\r\nconst ButtonWrapper = styled.div`\r\n position: sticky;\r\n bottom: 0;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n padding-top: 48px;\r\n padding-bottom: 16px;\r\n background: linear-gradient(0deg, rgba(248,248,249,1) 0%, rgba(248,248,249,1) 65%, rgba(248,248,249,0) 100%);\r\n z-index: 20;\r\n\r\n ${Button} {\r\n margin: 4px;\r\n width: 15%;\r\n }\r\n `\r\n\r\nconst ResultWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n margin-bottom: 2rem;\r\n`;\r\n\r\nconst Result = styled.div`\r\n padding: 16px 32px;\r\n margin: 0 auto;\r\n text-align: center;\r\n background-color: ${({theme, result}) => result === 'positive' ? theme.colors.positive_bg : theme.colors.negative_bg};\r\n margin-bottom: 2rem;\r\n\r\n @media screen and (min-width: 768px) {\r\n min-width: 600px;\r\n }\r\n`;\r\n\r\n\r\nfunction UploadRefresh({id}) {\r\n\r\nconst [files, setFiles] = useState([]);\r\nconst [uploadedImages, setUploadedImages]= useState(null);\r\nconst [uploadFiles, setUploadFiles] = useState([]);\r\nconst [reuploaded, setReuploaded] = useState(false);\r\nconst [loading, setLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n getUploadedImages(id).then(data=>{\r\n setUploadedImages(data)\r\n console.log(loading)\r\n setLoading(false)\r\n }\r\n );\r\n //todo progably spinner\r\n}, []);\r\n\r\nconst filterFiles = (dropFiles) => {\r\n\r\n return new Promise((resolve) => {\r\n let filtered = dropFiles.map(f => {\r\n return new Promise((rSucess, rError) => {\r\n EXIF.getData(f.file, function () {\r\n var exifData = EXIF.pretty(this);\r\n if (exifData) {\r\n let image = uploadedImages.find(u => u.date === EXIF.getTag(this, \"DateTimeOriginal\"));\r\n if (image === undefined) {\r\n return rSucess(f);\r\n }\r\n rError()\r\n\r\n }\r\n })\r\n })\r\n });\r\n Promise.allSettled(filtered)\r\n .then((d) => {\r\n console.log(d)\r\n const data = d.filter(image=>image.status===\"fulfilled\").map(i=>i.value)\r\n console.log(data);\r\n setUploadFiles([\r\n ...files,\r\n ...data.map(item => ({\r\n ...item,\r\n preview: item.file.type === 'video/mp4'? logoSrc : URL.createObjectURL(item.file)\r\n }))\r\n ])\r\n })\r\n })\r\n\r\n}\r\n\r\nconst startUploadingDrone = (uploadingFiles) => {\r\n return new Promise((resolve) => {\r\n const _files = uploadingFiles.filter(file => ['idle', 'failed'].includes(file.uploadStatus.status));\r\n\r\n let results = _files.map((file, index) => {\r\n return new Promise((rSucess, rError) => {\r\n reuploadPicture(file.file, id, (event) => {\r\n setUploadFiles(data => {\r\n let tempArr = [...data];\r\n const idx = findIndex(data, el => el.id === file.id);\r\n tempArr[idx] = {...data[idx], uploadStatus: { status: 'running', loaded: event.loaded }};\r\n return tempArr;\r\n });\r\n })\r\n .then(() => {\r\n setUploadFiles(data => {\r\n let tempArr = [...data];\r\n const idx = findIndex(data, el => el.id === file.id);\r\n tempArr[idx] = {...data[idx], uploadStatus: {...data[idx].uploadStatus, loaded: 100, status: 'finished'}}\r\n return tempArr;\r\n });\r\n rSucess(file);\r\n })\r\n .catch(err => {\r\n setUploadFiles(data => {\r\n let tempArr = [...data];\r\n const idx = findIndex(data, el => el.id === file.id);\r\n tempArr[idx] = {...data[idx], uploadStatus: {...data[idx].uploadStatus, status: 'failed'}}\r\n return tempArr;\r\n });\r\n rError(file);\r\n })\r\n });\r\n })\r\n\r\n Promise.allSettled(results)\r\n .then((r) => {\r\n const failedItems = r.filter(res => res.status === 'rejected');\r\n\r\n if (failedItems.length > 0) {\r\n startUploadingDrone({uploadingFiles: failedItems});\r\n }\r\n else {\r\n reuploadDone({id:id,\r\n originallyUploaded:uploadedImages.length,\r\n newImages:uploadFiles.length})\r\n .then(() => {\r\n console.log('uploaded');\r\n setReuploaded(true);\r\n });\r\n }\r\n\r\n });\r\n\r\n })\r\n}\r\n\r\n return (\r\n <>\r\n { loading && (\r\n \r\n

Upload Refresh

\r\n \r\n
\r\n )}\r\n {!loading &&(\r\n <>\r\n {!reuploaded &&\r\n \r\n \r\n filterFiles(data)\r\n } />\r\n \r\n\r\n {\r\n uploadFiles.length > 0 && (\r\n {\r\n setUploadFiles([\r\n ...files.slice(0, idx),\r\n ...files.slice(idx + 1),\r\n ]);\r\n }} />\r\n )}\r\n\r\n \r\n }\r\n {\r\n (uploadFiles.length > 0) && !reuploaded && (\r\n \r\n \r\n )\r\n }\r\n { reuploaded && (\r\n \r\n \r\n Project successfully uploaded\r\n \r\n \r\n )\r\n }\r\n )}\r\n \r\n );\r\n}\r\n\r\nUploadRefresh.propTypes = {\r\n id: string.isRequired,\r\n}\r\n\r\n\r\nexport default UploadRefresh\r\n\r\n","import { useState, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\nimport { getProjectProcessingStatus, restartProject } from '../../../services/projectService';\r\nimport NotificationToast from '../../NotificationToast';\r\nimport Button from '../../StoraEnsoComponents/Button';\r\n\r\nconst Title = styled.p`\r\n text-align: center;\r\n margin-bottom: 16px;\r\n font-size: 1.75rem;\r\n font-weight: 500;\r\n text-transform: uppercase;\r\n`;\r\n\r\nconst Grid = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n padding: 1rem;\r\n background-color: ${({theme, isError}) => isError ? theme.colors.negative_bg : theme.colors.attention_bg };\r\n border: 1px solid ${({theme, isError}) => isError ? theme.colors.negative : theme.colors.attention };\r\n color: ${({theme}) => theme.colors.heading_dark};\r\n\r\n ${Button} {\r\n width: 100%;\r\n margin-top: 16px;\r\n }\r\n`;\r\n\r\nfunction ProcesssingCheck({ id }) {\r\n const [processingStatus, setProcessingStatus] = useState(null);\r\n const [actionResult, setActionResult] = useState(null);\r\n\r\n useEffect(() => {\r\n getProjectProcessingStatus(id)\r\n .then(data=>{\r\n setProcessingStatus(data);\r\n });\r\n }, []);\r\n\r\n const handleRestartProject = ()=>{\r\n restartProject(id)\r\n .then(() => {\r\n getProjectProcessingStatus(id)\r\n .then(data=>{\r\n setProcessingStatus(data);\r\n });\r\n setActionResult({\r\n kind: 'success',\r\n message: 'Project has been successfully restarted.'\r\n });\r\n })\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'An error has occurred while restarting project. Try it once again or create a ticket'\r\n });\r\n });\r\n }\r\n\r\n if(!processingStatus) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n setActionResult(null)}\r\n />\r\n
\r\n Processing Check\r\n
Project name: {processingStatus.projectName}
\r\n
Project ID: {processingStatus.projectId}
\r\n
Status: {processingStatus.status}
\r\n {\r\n processingStatus.error &&\r\n \r\n }\r\n
\r\n\r\n\r\n
\r\n );\r\n}\r\n\r\nexport default ProcesssingCheck;","import styled from 'styled-components';\r\n\r\nconst Title = styled.p`\r\n text-align: center;\r\n font-size: 1.75rem;\r\n margin-bottom: 0;\r\n font-weight: 500;\r\n text-transform: uppercase;\r\n`;\r\n\r\nconst Grid = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n padding: 1rem;\r\n background-color: ${({ theme, isError }) => isError ? theme.colors.negative_bg : theme.colors.attention_bg};\r\n border: 1px solid ${({ theme, isError }) => isError ? theme.colors.negative : theme.colors.attention};\r\n color: ${({ theme }) => theme.colors.heading_dark};\r\n`;\r\n\r\nfunction ProcessingCheckMultimedia() {\r\n\r\n return (\r\n \r\n
\r\n Processing uploaded multimedia...\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ProcessingCheckMultimedia;","import { shape, oneOf } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport { DateTime } from 'luxon';\r\nimport { ReactComponent as ErrorSvg } from '../../../assets/icons/circle-exclamation-solid.svg'\r\nimport Button from '../../StoraEnsoComponents/Button';\r\nimport ConfirmationModal from '../../ConfirmationModal';\r\nimport NotificationToast from '../../NotificationToast';\r\nimport { useState } from 'react';\r\nimport { deleteProject } from '../../../services/projectService';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { DRONE_MAP } from '../../../Routes';\r\n\r\nconst ErrorIcon = styled(ErrorSvg)`\r\n width: 30px;\r\n height: auto;\r\n fill: ${({theme}) => theme.colors.bg_gray_dark};\r\n margin-bottom: 16px;\r\n`;\r\n\r\nconst Grid = styled.div`\r\n display: grid;\r\n grid-template-columns: 1fr;\r\n row-gap: 2rem;\r\n column-gap: 2rem;\r\n position: relative;\r\n\r\n @media screen and (min-width: 768px) {\r\n grid-template-columns: 1fr 1fr;\r\n }\r\n\r\n`;\r\n\r\nconst DeleteButton = styled(Button)`\r\n margin: auto;\r\n display: flex;\r\n margin-top: 5pt;`;\r\n\r\nconst InfoWrapper = styled(Grid)`\r\n grid-template-columns: 1fr;\r\n column-gap: 1rem;\r\n`;\r\n\r\nconst MapWrapper = styled.div`\r\n`;\r\n\r\nconst Table = styled.table`\r\n border-collapse: collapse;\r\n\r\n tr td {\r\n padding: 0.25rem 1rem;\r\n vertical-align: top;\r\n border-bottom: 1px solid ${({ theme }) => theme.colors.bg_gray};\r\n }\r\n\r\n tr td:first-child {\r\n font-weight: bold;\r\n padding-right: 1.5rem;\r\n }\r\n\r\n ul {\r\n list-style-type: square;\r\n }\r\n`;\r\n\r\nconst MissingMapData = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n height: 100%;\r\n background-color: ${({theme}) => theme.colors.bg_gray_light};\r\n`;\r\n\r\nconst ActionsWrapper = styled.div`\r\n background-color: ${({theme}) => theme.colors.bg_gray_light};\r\n padding: 1rem;\r\n margin: 1rem 0;\r\n`;\r\n\r\n\r\nfunction BasicDroneInformation({data}) {\r\n const navigate = useNavigate();\r\n const [isModalOpen, setModalOpen] = useState(false);\r\n const [actionResult, setActionResult] = useState(null);\r\n\r\n const handleDeleteProject = () => {\r\n deleteProject(data.id).then(navigate(DRONE_MAP))\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'An error has occurred while changing project status!'\r\n });\r\n });\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Name{data.name}
ID{data.id}
Description{data.description}
Location - EPSG{data.location_name} - {data.epsg}
Pilot{data.pilot}
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Mission Type{data.location_type}
Created{!data.cd ? '-' : DateTime.fromISO(data.cd).toLocaleString({dateStyle: 'long'})}
Captured{!data.datetime ? '-' : DateTime.fromISO(data.datetime).toLocaleString({dateStyle: 'long'})}
Drone Camera{data.device}
Uploaded images{data.img_count}
\r\n
\r\n setActionResult(null)}\r\n />\r\n setModalOpen(false)}\r\n onSubmit={() => {\r\n handleDeleteProject();\r\n setModalOpen(false);\r\n }}\r\n >\r\n Do you really want to DELETE this project? This action can not be reversed.\r\n \r\n
\r\n {setModalOpen(true)}}>Delete Project\r\n \r\n );\r\n\r\n}\r\n\r\nBasicDroneInformation.propTypes = {\r\n data: shape({}).isRequired\r\n}\r\n\r\nexport default BasicDroneInformation;","import { useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { useParams } from 'react-router-dom';\r\nimport { getProjectDetail } from '../../services/mapService';\r\nimport ForestDetail from '../ForestDetail';\r\nimport MillDetail from '../MillDetail';\r\nimport SinglePhotoDetail from '../SinglePhotoDetail';\r\nimport PanoramaDetail from '../PanoramaDetail';\r\nimport VideoDetail from '../VideoDetail';\r\nimport DefaultLoading from '../Loading';\r\nimport Notification from '../StoraEnsoComponents/Notification';\r\nimport { ContainerWrapper, Container } from '../Container';\r\nimport Section from '../Section';\r\nimport BasicMultimediaInformation from './BasicMultimediaInformation';\r\nimport UploadRefresh from './UploadRefresh';\r\nimport ProcesssingCheck from './ProcessingCheck';\r\nimport ProcessingCheckMultimedia from './ProcessingCheckMultimedia';\r\nimport { MULTIMEDIA_TYPES } from '../../config';\r\nimport BasicDroneInformation from './BasicDroneInformation';\r\n\r\nconst Loading = styled(DefaultLoading)`\r\n margin: 60px auto;\r\n justify-content: center;\r\n`;\r\n\r\nconst ErrorWrapper = styled.div`\r\n margin: 1rem auto;\r\n max-width: 75%;\r\n`;\r\n\r\nfunction ProjectDetailPage() {\r\n const [isLoading, setLoading] = useState(true);\r\n const [loadingError, setLoadingError] = useState(null);\r\n const [ projectData, setProjectData] = useState(null);\r\n const [ projectStatus, setProjectStatus] = useState(null);\r\n const { id } = useParams();\r\n\r\n useEffect(() => {\r\n getProjectDetail(id)\r\n .then(data => {\r\n setProjectData(data);\r\n projectStatusSetting(data.status_name);\r\n\r\n })\r\n .catch(err => {\r\n setLoadingError(err);\r\n console.error('Cannot download project detail data.')\r\n })\r\n .then(() => setLoading(false));\r\n\r\n }, [id]);\r\n\r\n const projectStatusSetting = (status)=>{\r\n if (status === 'uploading') {\r\n setProjectStatus('uploading')\r\n return\r\n }\r\n if (status ==='orthoWms' || status ==='projDataDeleted') {\r\n setProjectStatus('processed');\r\n return\r\n }\r\n setProjectStatus('processing');\r\n return\r\n\r\n\r\n }\r\n const type = projectData?.type_desc || projectData?.location_type;\r\n\r\n return (\r\n <>\r\n {\r\n isLoading && (\r\n \r\n )}\r\n\r\n {\r\n loadingError && (\r\n \r\n setLoadingError(false)}>An error has occurred while loading project data!\r\n \r\n )}\r\n\r\n {\r\n projectData && (\r\n \r\n \r\n
\r\n {MULTIMEDIA_TYPES.includes(type) ?\r\n () :\r\n ( )\r\n }\r\n
\r\n\r\n {\r\n MULTIMEDIA_TYPES.includes(type) && (\r\n <>\r\n {\r\n projectData.status !== 5 ? (\r\n \r\n ) : (\r\n <>\r\n {\r\n type === 'single' && (\r\n \r\n )\r\n }\r\n\r\n {\r\n type === 'panorama' && (\r\n \r\n )\r\n }\r\n\r\n {\r\n type === 'video' && (\r\n \r\n )\r\n }\r\n \r\n )\r\n }\r\n \r\n )\r\n\r\n }\r\n\r\n {\r\n (type === 'forest' || type === 'forestRGB' || type === 'forestMulti' ) && (\r\n <>\r\n { projectStatus ==='uploading' && }\r\n { projectStatus ==='processing' && }\r\n { projectStatus ==='processed'&& }\r\n \r\n )\r\n }\r\n {\r\n type === 'mill' && (\r\n <>\r\n { projectStatus ==='uploading' && }\r\n { projectStatus ==='processing' && }\r\n { projectStatus ==='processed'&& }\r\n \r\n )\r\n }\r\n
\r\n
\r\n )}\r\n \r\n );\r\n}\r\n\r\nexport default ProjectDetailPage;","export default __webpack_public_path__ + \"static/media/se-logo.76c9de35.svg\";","import { string } from 'prop-types';\r\nimport styled from 'styled-components';\r\nimport logoSrc from '../assets/images/se-logo.svg';\r\n\r\nconst LogoImg = styled.img`\r\n width: 4.5rem;\r\n height: auto;\r\n`;\r\n\r\nfunction Logo({ className }) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nLogo.propTypes = {\r\n className: string,\r\n};\r\n\r\nLogo.defaultProps = {\r\n className: '',\r\n}\r\n\r\nexport default styled(Logo)``;","import styled from 'styled-components';\r\n\r\nconst PageWrapper = styled.div`\r\n width: 100%;\r\n max-width: 1920px;\r\n margin: 0 auto;\r\n`;\r\n\r\nexport default PageWrapper;","import { useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport Logo from '../StoraEnsoComponents/Logo';\r\nimport Notification from '../StoraEnsoComponents/Notification';\r\nimport { useIsAuthenticated, useMsal } from \"@azure/msal-react\";\r\nimport { InteractionStatus } from \"@azure/msal-browser\";\r\nimport { Navigate } from 'react-router-dom';\r\nimport { loginRequest } from '../../config/authConfig';\r\nimport { HOME } from \"../../Routes\";\r\nimport PageWrapper from '../Layout/pageWrapper';\r\nimport { Container } from '../Container';\r\n\r\nconst Content = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n text-align: center;\r\n padding: 1rem 0;\r\n height: 100vh;\r\n`;\r\n\r\nconst Title = styled.h1`\r\n margin: 1rem 0;\r\n`;\r\n\r\nconst Link = styled.span`\r\n color: ${({theme}) => theme.colors.link};\r\n cursor: pointer;\r\n\r\n &:hover {\r\n color: ${({theme}) => theme.colors.link_hover};\r\n }\r\n`;\r\n\r\nconst ErrorWrapper = styled.div`\r\n margin-bottom: 1rem;\r\n`;\r\n\r\nfunction LoginPage () {\r\n const [error, setError] = useState(null);\r\n const isAuthenticated = useIsAuthenticated();\r\n const { inProgress, instance } = useMsal();\r\n\r\n const handleLogin = () => {\r\n instance.loginRedirect(loginRequest).catch(e => {\r\n setError(e);\r\n console.error('Login ERROR: ', e);\r\n });\r\n }\r\n\r\n if(inProgress !== InteractionStatus.None) {\r\n return null;\r\n }\r\n\r\n if(isAuthenticated) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Drones\r\n\r\n {\r\n error && (\r\n \r\n setError(null)}>\r\n An error has occurred!\r\n \r\n \r\n )\r\n }\r\n\r\n

You are not logged in, please sign-in to use the application.

\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default LoginPage;","import styled from 'styled-components';\r\nimport { Link } from 'react-router-dom';\r\nimport Button from '../StoraEnsoComponents/Button';\r\nimport { HOME } from \"../../Routes\";\r\nimport PageWrapper from '../Layout/pageWrapper';\r\nimport { Container } from '../Container';\r\n\r\nconst Content = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n text-align: center;\r\n padding: 1rem 0;\r\n height: 100vh;\r\n\r\n p {\r\n margin-bottom: 3rem;\r\n }\r\n`;\r\n\r\nconst Title = styled.h1`\r\n font-size: 2.5rem;\r\n font-weight: 600;\r\n`;\r\n\r\nfunction NotFoundPage () {\r\n return (\r\n \r\n \r\n \r\n 404\r\n

Sorry - the page you are looking for can't be found!

\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default NotFoundPage;","import { node, bool } from 'prop-types';\r\nimport { useIsAuthenticated, useMsal } from \"@azure/msal-react\";\r\nimport { InteractionStatus } from \"@azure/msal-browser\";\r\nimport { Navigate } from 'react-router-dom';\r\nimport useAuth from '../../hooks/useAuth';\r\nimport { LOGIN, HOME } from \"../../Routes\";\r\n\r\n// TODO\r\n// - display message for unauthorized access\r\n// - display auth progress\r\nfunction PrivateRoute ({ children, onlyAdmin }) {\r\n const isAuthenticated = useIsAuthenticated();\r\n const { inProgress } = useMsal();\r\n const { admin: isAdminUser } = useAuth();\r\n\r\n if( inProgress !== InteractionStatus.None ) {\r\n return null;\r\n }\r\n\r\n if(isAuthenticated) {\r\n if(onlyAdmin) {\r\n return isAdminUser ? children : \r\n }\r\n return children;\r\n }\r\n\r\n return ;\r\n}\r\n\r\nPrivateRoute.propTypes = {\r\n children: node.isRequired,\r\n onlyAdmin: bool,\r\n};\r\n\r\nPrivateRoute.defaultProps = {\r\n onlyAdmin: false,\r\n}\r\n\r\nexport default PrivateRoute;","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFaBars(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 448 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 88C0 74.75 10.75 64 24 64H424C437.3 64 448 74.75 448 88C448 101.3 437.3 112 424 112H24C10.75 112 0 101.3 0 88zM0 248C0 234.7 10.75 224 24 224H424C437.3 224 448 234.7 448 248C448 261.3 437.3 272 424 272H24C10.75 272 0 261.3 0 248zM424 432H24C10.75 432 0 421.3 0 408C0 394.7 10.75 384 24 384H424C437.3 384 448 394.7 448 408C448 421.3 437.3 432 424 432z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFaBars);\nexport default __webpack_public_path__ + \"static/media/fa-bars.bb14087b.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFaXmark(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 320 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M312.1 375c9.369 9.369 9.369 24.57 0 33.94s-24.57 9.369-33.94 0L160 289.9l-119 119c-9.369 9.369-24.57 9.369-33.94 0s-9.369-24.57 0-33.94L126.1 256L7.027 136.1c-9.369-9.369-9.369-24.57 0-33.94s24.57-9.369 33.94 0L160 222.1l119-119c9.369-9.369 24.57-9.369 33.94 0s9.369 24.57 0 33.94L193.9 256L312.1 375z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFaXmark);\nexport default __webpack_public_path__ + \"static/media/fa-xmark.3148cf84.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFaCircleUser(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M256 112c-48.6 0-88 39.4-88 88C168 248.6 207.4 288 256 288s88-39.4 88-88C344 151.4 304.6 112 256 112zM256 240c-22.06 0-40-17.95-40-40C216 177.9 233.9 160 256 160s40 17.94 40 40C296 222.1 278.1 240 256 240zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-46.73 0-89.76-15.68-124.5-41.79C148.8 389 182.4 368 220.2 368h71.69c37.75 0 71.31 21.01 88.68 54.21C345.8 448.3 302.7 464 256 464zM416.2 388.5C389.2 346.3 343.2 320 291.8 320H220.2c-51.36 0-97.35 26.25-124.4 68.48C65.96 352.5 48 306.3 48 256c0-114.7 93.31-208 208-208s208 93.31 208 208C464 306.3 446 352.5 416.2 388.5z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFaCircleUser);\nexport default __webpack_public_path__ + \"static/media/fa-circle-user.9b1e3cba.svg\";\nexport { ForwardRef as ReactComponent };","import styled from 'styled-components';\r\nimport { NavLink } from \"react-router-dom\";\r\nimport { ReactComponent as BarsSvg } from '../../assets/icons/fa-bars.svg';\r\nimport { ReactComponent as XMarkSvg } from '../../assets/icons/fa-xmark.svg';\r\nimport { HOME, UPLOADING, HELP, DRONE_MAP } from \"../../Routes\";\r\n\r\nexport const MenuWrapper = styled.div`\r\n display: none;\r\n\r\n & > ul {\r\n margin-top: 3px;\r\n align-items: center;\r\n padding: 0;\r\n user-select: none;\r\n display: inline-flex;\r\n\r\n li {\r\n font-weight: 700;\r\n list-style: none;\r\n padding: 0 20px;\r\n cursor: pointer;\r\n\r\n a {\r\n border-bottom: 3px solid ${({theme}) => theme.colors.brand_tint_yellow};\r\n padding-bottom: 3px;\r\n text-decoration: none;\r\n color: ${({theme}) => theme.colors.heading_dark};\r\n opacity: .75;\r\n }\r\n\r\n a:hover {\r\n color: ${({theme}) => theme.colors.heading_dark};\r\n opacity: .6;\r\n }\r\n\r\n a.active {\r\n color: ${({theme}) => theme.colors.heading_dark};\r\n border-bottom: 3px solid ${({theme}) => theme.colors.brand_yellow};\r\n padding-bottom: 3px;\r\n text-decoration: none;\r\n opacity: 1;\r\n }\r\n\r\n a.active:hover {\r\n color: ${({theme}) => theme.colors.heading_dark};\r\n opacity: 1;\r\n }\r\n }\r\n }\r\n\r\n @media screen and (min-width: 768px) {\r\n display: block;\r\n }\r\n`;\r\n\r\nexport const MobileMenuWrapper = styled.div`\r\n position: fixed;\r\n display: flex;\r\n top: 80px;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n z-index: 900;\r\n background-color: ${({theme}) => theme.colors.brand_yellow};\r\n\r\n div {\r\n display: flex;\r\n width: 100%;\r\n background-color: ${({theme}) => theme.colors.white};\r\n margin-left: auto;\r\n margin-right: auto;\r\n max-width: 1170px;\r\n }\r\n\r\n ul {\r\n display: flex;\r\n flex-direction: column;\r\n padding: 20px;\r\n background-color: ${({theme}) => theme.colors.brand_yellow};\r\n flex: 0 0 100%;\r\n height: 100%;\r\n align-items: flex-start;\r\n overflow-x: hidden;\r\n overflow-y: auto;\r\n z-index: 1;\r\n\r\n li {\r\n margin: 3px 0;\r\n }\r\n\r\n li a {\r\n font-size: 20px;\r\n font-weight: 700;\r\n color: ${({theme}) => theme.colors.heading_dark};\r\n text-decoration: none;\r\n text-align: left;\r\n padding: 2px 40px 7px 2px;\r\n cursor: pointer;\r\n\r\n &.active {\r\n color: ${({theme}) => theme.colors.white};\r\n }\r\n\r\n &:hover {\r\n color: ${({theme}) => theme.colors.white};\r\n }\r\n }\r\n }\r\n\r\n @media screen and (min-width: 768px) {\r\n display: none;\r\n }\r\n`;\r\n\r\nexport const MenuToggleWrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n\r\n @media screen and (min-width: 768px) {\r\n display: none;\r\n }\r\n`;\r\n\r\nexport const MenuIcon = styled(BarsSvg)`\r\n width: 20px;\r\n height: auto;\r\n fill: ${({theme}) => theme.colors.text_dark};\r\n cursor: pointer;\r\n\r\n &:hover {\r\n fill: ${({theme}) => theme.colors.link_hover};\r\n }\r\n`;\r\n\r\nexport const CloseIcon = styled(XMarkSvg)`\r\n width: 18px;\r\n height: auto;\r\n fill: ${({theme}) => theme.colors.text_dark};\r\n cursor: pointer;\r\n\r\n &:hover {\r\n fill: ${({theme}) => theme.colors.link_hover};\r\n }\r\n`;\r\n\r\nexport function MenuItems ({onLinkClick}) {\r\n return (\r\n
    \r\n
  • \r\n Home\r\n
  • \r\n
  • \r\n Map\r\n
  • \r\n
  • \r\n Uploading\r\n
  • \r\n
  • \r\n Help\r\n
  • \r\n
\r\n );\r\n}","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFaArrowRightFromBracket(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M192 456C192 469.3 181.3 480 168 480H96c-53.02 0-96-42.98-96-96V128c0-53.02 42.98-96 96-96h72C181.3 32 192 42.74 192 56C192 69.25 181.3 80 168 80H96C69.6 80 48 101.6 48 128v256c0 26.4 21.6 48 48 48h72C181.3 432 192 442.7 192 456zM505.5 239.6l-127.1-136c-9.094-9.688-24.28-10.12-33.91-1.031c-9.656 9.062-10.12 24.25-1.031 33.91L432.4 232H183.1C170.7 232 160 242.8 160 256s10.75 24 23.1 24h248.4l-89.92 95.56c-9.094 9.656-8.625 24.84 1.031 33.91C348.2 413.8 354.1 416 359.1 416c6.375 0 12.75-2.531 17.47-7.562l127.1-136C514.2 263.2 514.2 248.8 505.5 239.6z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFaArrowRightFromBracket);\nexport default __webpack_public_path__ + \"static/media/fa-arrow-right-from-bracket.7d2773d1.svg\";\nexport { ForwardRef as ReactComponent };","import { useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Link } from \"react-router-dom\";\r\nimport { useIsAuthenticated, useMsal } from \"@azure/msal-react\";\r\nimport Logo from '../StoraEnsoComponents/Logo';\r\nimport {\r\n MenuWrapper,\r\n MobileMenuWrapper,\r\n MenuToggleWrapper,\r\n MenuItems,\r\n MenuIcon,\r\n CloseIcon\r\n} from './menu';\r\nimport { HOME, USER_PROFILE } from \"../../Routes\";\r\nimport { ReactComponent as UserSvg } from '../../assets/icons/fa-circle-user.svg';\r\nimport { ReactComponent as LogoutSvg } from '../../assets/icons/fa-arrow-right-from-bracket.svg';\r\n\r\nconst UserIcon = styled(UserSvg)`\r\n width: 18px;\r\n height: auto;\r\n cursor: pointer;\r\n\r\n fill: ${({theme}) => theme.colors.text_dark};\r\n`;\r\n\r\nconst LogoutIcon = styled(LogoutSvg)`\r\n width: 18px;\r\n height: auto;\r\n fill: ${({theme}) => theme.colors.text_dark};\r\n cursor: pointer;\r\n\r\n &:hover {\r\n fill: ${({theme}) => theme.colors.link_hover};\r\n }\r\n`;\r\n\r\nconst ProfileLink = styled(Link)`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-start;\r\n align-items: center;\r\n\r\n &:hover {\r\n color: ${({theme}) => theme.colors.link_hover};\r\n\r\n ${UserIcon} {\r\n fill: ${({theme}) => theme.colors.link_hover};\r\n }\r\n }\r\n\r\n span {\r\n display: none;\r\n }\r\n\r\n @media screen and (min-width: 576px) {\r\n ${UserIcon} {\r\n margin-right: 8px;\r\n }\r\n\r\n span {\r\n display: block;\r\n }\r\n }\r\n`;\r\n\r\nconst HeaderWrapper = styled.header`\r\n position: relative;\r\n height: 80px;\r\n flex: 0 1 auto;\r\n z-index: 1001;\r\n width: 100%;\r\n padding-bottom: 80px;\r\n`;\r\n\r\nconst Container = styled.div`\r\n position: fixed;\r\n height: 80px;\r\n border-bottom: 2px solid ${({theme}) => theme.colors.bg_gray_dark};\r\n z-index: 1000;\r\n max-width: 1920px;\r\n width: 100%;\r\n background-color: ${({theme}) => theme.colors.white};\r\n padding: 0 15px;\r\n`;\r\n\r\nconst Content = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-left: auto;\r\n margin-right: auto;\r\n height: 100%;\r\n width: 100%;\r\n max-width: 1170px;\r\n position: relative;\r\n`;\r\n\r\nconst LogoWrapper = styled.div`\r\n height: 100%;\r\n width: 80px;\r\n display: block;\r\n\r\n ${Logo} {\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n max-height: 70px;\r\n object-fit: contain;\r\n object-position: left;\r\n }\r\n`;\r\n\r\nconst MainNav = styled.nav`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-start;\r\n align-items: center;\r\n`;\r\n\r\nconst Divider = styled.span`\r\n margin: 0 16px;\r\n`;\r\n\r\nconst ActionLink = styled.span`\r\n cursor: pointer;\r\n`;\r\n\r\nconst RightNav = styled.nav`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-top: 6px;\r\n /* padding-right: 20px; */\r\n`;\r\n\r\nconst ProfileActions = styled.div`\r\n display: inline-flex;\r\n flex-direction: row;\r\n justify-content: flex-end;\r\n\r\n a,\r\n ${ActionLink} {\r\n color: ${({theme}) => theme.colors.heading_dark};\r\n text-decoration: none;\r\n }\r\n\r\n a:hover,\r\n ${ActionLink}:hover {\r\n color: ${({theme}) => theme.colors.link};\r\n text-decoration: none;\r\n }\r\n`;\r\n\r\nfunction Header() {\r\n const [isMobileOpen, setMobileOpen] = useState(false);\r\n const { instance, accounts } = useMsal();\r\n const isAuthenticated = useIsAuthenticated();\r\n\r\n const handleLogout = () => {\r\n instance.logoutRedirect();\r\n }\r\n\r\n const closeMobileMenu = () => setMobileOpen(false);\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {\r\n isMobileOpen ?\r\n setMobileOpen(false)} />\r\n :\r\n setMobileOpen(true)} />\r\n }\r\n |\r\n \r\n {\r\n isAuthenticated && (\r\n <>\r\n \r\n \r\n \r\n {accounts[0].name}\r\n \r\n |\r\n \r\n \r\n \r\n )\r\n }\r\n \r\n\r\n { isMobileOpen && (\r\n \r\n
\r\n \r\n
\r\n
\r\n )}\r\n\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Header;","\r\nimport { Outlet } from 'react-router';\r\nimport Header from '../Header';\r\nimport PageWrapper from './pageWrapper';\r\n\r\nfunction Layout () {\r\n return (\r\n \r\n
\r\n \r\n \r\n );\r\n}\r\n\r\nexport default Layout;","import { setIn } from 'final-form';\r\n\r\nexport const validateFormValues = ({ schema, context = {} }) => async (\r\n values,\r\n) => {\r\n let formSchema = schema;\r\n if (typeof schema === 'function') {\r\n formSchema = schema();\r\n }\r\n\r\n return formSchema\r\n .validate(values, {\r\n abortEarly: false,\r\n context,\r\n })\r\n .then(() =>\r\n // everything ok, return an empty response\r\n Promise.resolve(),\r\n )\r\n .catch((err) => {\r\n // build an object that resembles the form state, with\r\n // error messages as values\r\n const errors = err.inner.reduce(\r\n (formError, innerError) =>\r\n setIn(formError, innerError.path, innerError.message),\r\n {},\r\n );\r\n\r\n // return a resolved promise with the error object\r\n return Promise.resolve(errors);\r\n });\r\n};\r\n\r\nexport default {\r\n validateFormValues,\r\n};\r\n","import { func } from 'prop-types';\r\nimport { object, string } from 'yup';\r\nimport { Form, Field } from 'react-final-form';\r\nimport Input from '../Forms/input';\r\nimport Message from '../Forms/message';\r\nimport { InputWrapper, FormSection, SectionLabel, Content, ButtonsWrapper } from '../Forms/common';\r\nimport { validateFormValues } from '../Forms/formValidation';\r\nimport Button from '../StoraEnsoComponents/Button';\r\n\r\nconst validationSchema = object({\r\n firstname: string()\r\n .nullable(true)\r\n .trim()\r\n .required('Firstname is required'),\r\n surname: string()\r\n .nullable(true)\r\n .trim()\r\n .required('Surname is required'),\r\n country: string()\r\n .nullable(true)\r\n .trim()\r\n .required('Country is required'),\r\n email: string()\r\n .nullable(true)\r\n .trim()\r\n .required('Email address is required')\r\n .email('Email address must be a valid email')\r\n});\r\n\r\nfunction AddUserForm({ handleFormSubmit }) {\r\n return (\r\n (\r\n \r\n Add new user\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n\r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n />\r\n );\r\n}\r\n\r\nAddUserForm.propTypes = {\r\n handleFormSubmit: func.isRequired,\r\n}\r\n\r\nexport default AddUserForm;","import { func } from 'prop-types';\r\nimport { useState, useEffect } from 'react';\r\nimport { object, string } from 'yup';\r\nimport { Form, Field } from 'react-final-form';\r\nimport Input from '../Forms/input';\r\nimport Message from '../Forms/message';\r\nimport Select from '../Forms/select';\r\nimport { InputWrapper, FormSection, SectionLabel, Content, ButtonsWrapper } from '../Forms/common';\r\nimport { validateFormValues } from '../Forms/formValidation';\r\nimport Button from '../StoraEnsoComponents/Button';\r\nimport { getSrids } from '../../services/userService';\r\n\r\nconst LOCATION_TYPE_VALUES = [\r\n {\r\n value: 'mill',\r\n label: 'Mill',\r\n },\r\n {\r\n value: 'forestMulti',\r\n label: 'Multispectral Forest',\r\n },\r\n {\r\n value: 'forestRGB',\r\n label: 'RGB Forest',\r\n }\r\n];\r\n\r\nconst validationSchema = object({\r\n name: string()\r\n .nullable(true)\r\n .trim()\r\n .required('Name is required'),\r\n description: string()\r\n .nullable(true)\r\n .trim()\r\n .required('Description is required'),\r\n type: object().shape({})\r\n .nullable(true)\r\n .required('Type is required'),\r\n country: string()\r\n .nullable(true)\r\n .trim()\r\n .required('Country is required'),\r\n srid: object().shape({})\r\n .nullable(true)\r\n .required('Srid is required')\r\n});\r\n\r\n// TODO\r\n// - handle loading/error\r\nfunction AddLocationForm({\r\n handleFormSubmit,\r\n}) {\r\n const [sridValues, setSridValues] = useState([]);\r\n\r\n useEffect(() => {\r\n getSrids()\r\n .then(data => {\r\n setSridValues(data.map(s => ({ label: `${s.epsg} - ${s.country} `, value: s.epsg })));\r\n });\r\n }, [])\r\n\r\n return (\r\n (\r\n \r\n Add new location\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n\r\n {\r\n input.onChange(value);\r\n }}\r\n />\r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n\r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n\r\n {\r\n input.onChange(value);\r\n }}\r\n />\r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n />\r\n );\r\n}\r\n\r\nAddLocationForm.propTypes = {\r\n handleFormSubmit: func.isRequired,\r\n}\r\n\r\nexport default AddLocationForm;","import { func, shape, arrayOf } from 'prop-types';\r\nimport { object } from 'yup';\r\nimport { Form, Field } from 'react-final-form';\r\nimport Message from '../Forms/message';\r\nimport Select from '../Forms/select';\r\nimport { InputWrapper, FormSection, SectionLabel, Content, ButtonsWrapper } from '../Forms/common';\r\nimport { validateFormValues } from '../Forms/formValidation';\r\nimport Button from '../StoraEnsoComponents/Button';\r\n\r\nconst validationSchema = object({\r\n location: object()\r\n .nullable(true)\r\n .required('Location is required'),\r\n user: object()\r\n .nullable(true)\r\n .required('User is required')\r\n});\r\n\r\nfunction AddUserLocationForm({\r\n locationValues,\r\n userValues,\r\n handleFormSubmit,\r\n}) {\r\n return (\r\n (\r\n \r\n Add user to location\r\n \r\n\r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n\r\n {\r\n input.onChange(value);\r\n }}\r\n />\r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n\r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n\r\n {\r\n input.onChange(value);\r\n }}\r\n />\r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n />\r\n );\r\n}\r\n\r\nAddUserLocationForm.propTypes = {\r\n locationValues: arrayOf(shape({})).isRequired,\r\n userValues: arrayOf(shape({})).isRequired,\r\n handleFormSubmit: func.isRequired,\r\n}\r\n\r\nexport default AddUserLocationForm;","import { func } from 'prop-types';\r\nimport { useState, useEffect } from 'react';\r\nimport { object, string } from 'yup';\r\nimport { Form, Field } from 'react-final-form';\r\nimport Input from '../Forms/input';\r\nimport Message from '../Forms/message';\r\nimport Select from '../Forms/select';\r\nimport { InputWrapper, FormSection, SectionLabel, Content, ButtonsWrapper } from '../Forms/common';\r\nimport { validateFormValues } from '../Forms/formValidation';\r\nimport Button from '../StoraEnsoComponents/Button';\r\nimport { getSrids } from '../../services/userService';\r\n\r\nconst LOCATION_TYPE_VALUES = [\r\n {\r\n value: 'mill',\r\n label: 'Mill',\r\n },\r\n {\r\n value: 'forest',\r\n label: 'Forest',\r\n }\r\n];\r\n\r\nconst CAMERA_TYPE_VALUES = [\r\n {\r\n value: 'RGB',\r\n label: 'RGB',\r\n },\r\n {\r\n value: 'RedEdge',\r\n label: 'RedEdge',\r\n }\r\n];\r\n\r\nconst validationSchema = object({\r\n projectID: string()\r\n .nullable(true)\r\n .trim()\r\n .required('Project ID is required'),\r\n type: object().shape({})\r\n .nullable(true)\r\n .required('Workspace is required'),\r\n cameraType: object().shape({})\r\n .nullable(true)\r\n .required('Camera type is required'),\r\n srid: object().shape({})\r\n .nullable(true)\r\n .required('Srid is required')\r\n});\r\n\r\n// TODO\r\n// - handle loading/error\r\nfunction PublishProject({ handleFormSubmit }) {\r\n const [sridValues, setSridValues] = useState([]);\r\n\r\n useEffect(() => {\r\n getSrids()\r\n .then(data => {\r\n setSridValues(data.map(s => ({ label: `${s.epsg} - ${s.country} `, value: s.epsg })));\r\n });\r\n }, [])\r\n\r\n return (\r\n (\r\n \r\n Publish project\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n\r\n {\r\n input.onChange(value);\r\n }}\r\n />\r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n\r\n {\r\n input.onChange(value);\r\n }}\r\n />\r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n\r\n {\r\n input.onChange(value);\r\n }}\r\n />\r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n />\r\n );\r\n}\r\n\r\nPublishProject.propTypes = {\r\n handleFormSubmit: func.isRequired,\r\n}\r\n\r\nexport default PublishProject;","import { func } from 'prop-types';\r\nimport { object, string } from 'yup';\r\nimport { Form, Field } from 'react-final-form';\r\nimport Input from '../Forms/input';\r\nimport Message from '../Forms/message';\r\nimport { InputWrapper, FormSection, SectionLabel, Content, ButtonsWrapper } from '../Forms/common';\r\nimport { validateFormValues } from '../Forms/formValidation';\r\nimport Button from '../StoraEnsoComponents/Button';\r\n\r\n\r\nconst validationSchema = object({\r\n projectID: string()\r\n .nullable(true)\r\n .trim()\r\n .required('Project ID is required')\r\n});\r\n\r\n// TODO\r\n// - handle loading/error\r\nfunction CalculatePrediction({\r\n handleFormSubmit,\r\n}) {\r\n\r\n return (\r\n (\r\n \r\n Calculate prediction\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n />\r\n );\r\n}\r\n\r\nCalculatePrediction.propTypes = {\r\n handleFormSubmit: func.isRequired,\r\n}\r\n\r\nexport default CalculatePrediction;","import ExportTableToCSV from \"../DataTable/TableExportFunctions/exportTableToCSV\";\r\nimport { ButtonsWrapper, Content, FormSection, InputWrapper, SectionLabel } from '../Forms/common';\r\n\r\nfunction ExportPilotsLocations({ users, locationValues }) {\r\n\r\n //headers names keys pros to array\r\n const headerNames = [...users.reduce((s, o) => (Object.keys(o).forEach(k => s.add(k)), s), new Set)];\r\n const headerNamesLocations = [...locationValues.reduce((s, o) => (Object.keys(o).forEach(k => s.add(k)), s), new Set)];\r\n\r\n return (\r\n \r\n Exporting functions\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\nexport default ExportPilotsLocations;","import { func } from 'prop-types';\r\nimport { object, string } from 'yup';\r\nimport { Form, Field } from 'react-final-form';\r\nimport Input from '../Forms/input';\r\nimport Message from '../Forms/message';\r\nimport { InputWrapper, FormSection, SectionLabel, Content, ButtonsWrapper } from '../Forms/common';\r\nimport { validateFormValues } from '../Forms/formValidation';\r\nimport Button from '../StoraEnsoComponents/Button';\r\n\r\n\r\nconst validationSchema = object({\r\n projectID: string()\r\n .nullable(true)\r\n .trim()\r\n .required('Project ID is required')\r\n});\r\n\r\n// TODO\r\n// - handle loading/error\r\nfunction ProjectRestart({\r\n handleFormSubmit,\r\n}) {\r\n\r\n return (\r\n (\r\n \r\n Restart project\r\n \r\n \r\n {({ input, meta }) => (\r\n \r\n \r\n \r\n {\r\n meta.touched && meta.error && (\r\n {meta.error}\r\n )\r\n }\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n />\r\n );\r\n}\r\n\r\nProjectRestart.propTypes = {\r\n handleFormSubmit: func.isRequired,\r\n}\r\n\r\nexport default ProjectRestart;","import { useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport NotificationToast from '../NotificationToast';\r\nimport { ContainerWrapper, Container } from '../Container';\r\nimport Section from '../Section';\r\nimport AddUserForm from './addUserForm';\r\nimport AddLocationForm from './addLocationForm';\r\nimport AddUserLocationForm from './addUserLocationForm';\r\nimport PublishProject from './publishProject';\r\nimport { addUser, addLocation, getUsers, getLocations, addUserLocation } from '../../services/userService';\r\nimport { publishOngeoserver, calculatePrediction } from '../../services/adminServices';\r\nimport { restartProject } from '../../services/projectService';\r\nimport CalculatePrediction from './calculatePredictions';\r\nimport ExportPilotsLocations from './exportPilotsLocations';\r\nimport ProjectRestart from './projectRestart';\r\n\r\nconst Grid = styled.div`\r\n display: grid;\r\n grid-template-columns: 1fr;\r\n column-gap: 24px;\r\n row-gap: 48px;\r\n\r\n @media screen and (min-width: 768px) {\r\n grid-template-columns: 1fr 1fr;\r\n }\r\n\r\n @media screen and (min-width: 1200px) {\r\n grid-template-columns: 1fr 1fr 1fr;\r\n }\r\n\r\n`;\r\n\r\n// TODO\r\n// - mobile view\r\n// - handle loading/error\r\nfunction AdminPage() {\r\n const [actionResult, setActionResult] = useState(null);\r\n const [userValues, setUserValues] = useState([]);\r\n const [locationValues, setLocationValues] = useState([]);\r\n\r\n useEffect(() => {\r\n getUsers().then(data => {\r\n setUserValues(data.map(u => ({ label: `${u.email}`, value: u.id })));\r\n });\r\n getLocations().then(data => {\r\n setLocationValues(data.map(l => ({ label: `${l.name}`, value: l.id })));\r\n });\r\n }, [])\r\n\r\n const submitAddUserForm = (values, form) => {\r\n\r\n addUser({\r\n firstname: values.firstname,\r\n surname: values.surname,\r\n country: values.country,\r\n email: values.email,\r\n })\r\n .then(() => {\r\n form.restart();\r\n setActionResult({\r\n kind: 'success',\r\n message: 'User has been successfully created.'\r\n });\r\n getUsers().then(data => {\r\n setUserValues(data.map(u => ({ label: `${u.email}`, value: u.id })));\r\n })\r\n })\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'An error has occurred while creating new user. Try it once again or create a ticket.'\r\n });\r\n });\r\n }\r\n\r\n const submitAddLocationForm = (values, form) => {\r\n\r\n addLocation({\r\n name: values.name,\r\n description: values.description,\r\n type: values.type.value,\r\n country: values.country,\r\n srid: values.srid.value.toString()\r\n })\r\n .then(() => {\r\n form.restart();\r\n setActionResult({\r\n kind: 'success',\r\n message: 'Location has been successfully created.'\r\n });\r\n getLocations().then(data => {\r\n setLocationValues(data.map(l => ({ label: `${l.name}`, value: l.id })));\r\n })\r\n })\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'An error has occurred while creating new location. Try it once again or create a ticket.'\r\n });\r\n });\r\n }\r\n\r\n const submitAddUserLocationForm = (values, form) => {\r\n addUserLocation({\r\n location: values.location.value,\r\n pilot: values.user.value\r\n })\r\n .then(() => {\r\n form.restart();\r\n setActionResult({\r\n kind: 'success',\r\n message: 'Location has been successfully assigned.'\r\n });\r\n }\r\n )\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'An error has occurred while assigning location. Try it once again or create a ticket.'\r\n });\r\n });\r\n }\r\n\r\n // TODO\r\n // Test Method\r\n const submitPublishProjectForm = (values, form) => {\r\n\r\n publishOngeoserver({\r\n areaId: values.projectID,\r\n workspace: values.type.value,\r\n epsg: values.srid.value.toString(),\r\n cameraType: values.cameraType.value\r\n }).then(() => {\r\n form.restart();\r\n setActionResult({\r\n kind: 'success',\r\n message: 'Project has been published.'\r\n });\r\n })\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'Error during project publish.'\r\n });\r\n });\r\n }\r\n\r\n // TODO\r\n // Test Method\r\n const submitCalculatePrediction = (values, form) => {\r\n console.log(values)\r\n calculatePrediction(\r\n values.projectID\r\n ).then(() => {\r\n form.restart();\r\n setActionResult({\r\n kind: 'success',\r\n message: 'Prediction calcualtion started.'\r\n });\r\n })\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'Error during starting prediction calculation.'\r\n });\r\n });\r\n }\r\n\r\n const submitProjectRestart = (values, form) => {\r\n restartProject(values.projectID)\r\n .then(() => {\r\n form.restart();\r\n setActionResult({\r\n kind: 'success',\r\n message: 'Project has been restarted.'\r\n });\r\n })\r\n .catch(() => {\r\n setActionResult({\r\n kind: 'error',\r\n message: 'Error during project restart.'\r\n });\r\n });\r\n }\r\n\r\n return (\r\n \r\n \r\n setActionResult(null)}\r\n />\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default AdminPage;","import axios from '../utils/axios';\r\n\r\nexport const calculatePrediction = (id) => {\r\n return axios.get(`projects/calculatePrediction/${id}`).then(response => response.data);\r\n}\r\nexport const publishOngeoserver = (data) => {\r\n // {\r\n // areaId: id,\r\n // workspace: \"forest\",\r\n // epsg: 5514,\r\n // cameraType: \"RGB\"\r\n // }\r\n return axios.post(`geoprocessing/PublishOnGeoserver`,data).then(response => response.data);\r\n }","export default __webpack_public_path__ + \"static/media/img-forest.d96cd2b2.jpg\";","export default __webpack_public_path__ + \"static/media/img-truck.4f1a83eb.jpg\";","export default __webpack_public_path__ + \"static/media/forest.82b2abf2.jpg\";","export default __webpack_public_path__ + \"static/media/img-trees.a2cb48bd.jpg\";","export default __webpack_public_path__ + \"static/media/droneAppNews.ae1434f6.pdf\";","export default __webpack_public_path__ + \"static/media/droneMillInventory.6e5beeb3.pdf\";","export default __webpack_public_path__ + \"static/media/workingWithDroneForestApp.740a894e.pdf\";","export default __webpack_public_path__ + \"static/media/multispectralBestPractices.b9cdedc1.pdf\";","export default __webpack_public_path__ + \"static/media/droneAppRecommendation.f062208d.pdf\";","export default __webpack_public_path__ + \"static/media/droneMillInventory.fc2d5640.pdf\";","export default __webpack_public_path__ + \"static/media/droneForestInventory.e1fa6b70.pdf\";","export default __webpack_public_path__ + \"static/media/droneMultimedia.05f1c834.pdf\";","import styled from 'styled-components';\r\nimport { ContainerWrapper, Container } from '../Container';\r\nimport { API_URL } from '../../config';\r\nimport forestImg from '../../assets/images/img-forest.jpg';\r\nimport millImg from '../../assets/images/img-truck.jpg';\r\nimport multimediaImg from '../../assets/images/img-truck.jpg';\r\nimport multispectralImg from '../../assets/images/forest.jpg';\r\nimport whatsNew from '../../assets/images/img-trees.jpg';\r\nimport landingImg from '../../assets/images/landing_map.jpg'\r\nimport droneAppNews from '../../assets/documentation/oldVersion/droneAppNews.pdf';\r\nimport droneMillInventory from '../../assets/documentation/oldVersion/droneMillInventory.pdf';\r\nimport workingWithDroneForestApp from '../../assets/documentation/oldVersion/workingWithDroneForestApp.pdf';\r\nimport multispectralBestPractices from '../../assets/documentation/oldVersion/multispectralBestPractices.pdf';\r\nimport droneAppRecommendation from '../../assets/documentation/oldVersion/droneAppRecommendation.pdf';\r\n\r\nimport millInventory from '../../assets/documentation/newVersion/droneMillInventory.pdf';\r\nimport forestInventory from '../../assets/documentation/newVersion/droneForestInventory.pdf';\r\nimport droneMultimedia from '../../assets/documentation/newVersion/droneMultimedia.pdf';\r\nimport theme from '../../config/theme';\r\n\r\nconst Grid = styled.div`\r\n display: grid;\r\n grid-template-columns: 1fr;\r\n column-gap: 1rem;\r\n row-gap: 1rem;\r\n\r\n @media screen and (min-width: 768px) {\r\n grid-template-columns: 1fr 1fr;\r\n }\r\n\r\n @media screen and (min-width: 992px) {\r\n grid-template-columns: 1fr 1fr 1fr;\r\n }\r\n`;\r\nconst HR = styled.hr`\r\nbackground: ${theme.colors.text_dark};\r\nborder: ${theme.colors.text_dark};\r\nheight: 2pt;\r\n`\r\n\r\nconst Item = styled.a`\r\n display: block;\r\n\r\n img {\r\n width: 100%;\r\n height: 220px;\r\n object-fit: cover;\r\n display: block;\r\n }\r\n\r\n span {\r\n display: block;\r\n background-color: ${({theme}) => theme.colors.bg_gray};\r\n color: ${({theme}) => theme.colors.heading_dark};\r\n padding: 1.5rem;\r\n font-size: 1.25rem;\r\n font-weight: bold;\r\n border-top: 5px solid ${({theme}) => theme.colors.brand_green};\r\n transition: all .5s ease;\r\n }\r\n\r\n &:hover {\r\n span {\r\n border-top: 5px solid ${({theme}) => theme.colors.brand_blue};\r\n }\r\n }\r\n`;\r\n\r\nfunction Help() {\r\n\r\n return (\r\n \r\n\r\n \r\n

New Version Documentation

\r\n \r\n \r\n \"What's\r\n Mill Inventory\r\n \r\n \r\n \"Mill\r\n Forest Inventory\r\n \r\n \r\n \"Multimedia\"\r\n Multimedia\r\n \r\n\r\n \r\n\r\n
\r\n

Old Version Documentation

\r\n \r\n \r\n \"What's\r\n What's New\r\n \r\n \r\n \"Mill\r\n Mill Inventory\r\n \r\n\r\n \r\n \"Forest\r\n Forest Inventory\r\n \r\n\r\n \r\n \"Multispectral\r\n Multispectral Camera\r\n \r\n\r\n \r\n \"Tips\r\n Tips and Tricks\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Help;","import {\r\n BrowserRouter,\r\n Routes,\r\n Route,\r\n} from \"react-router-dom\";\r\nimport styled from 'styled-components';\r\nimport { ToastContainer } from 'react-toastify';\r\nimport LandingPage from './components/LandingPage';\r\nimport UploadingPage from \"./components/UploadingPage\";\r\nimport AuthEventHandler from \"./components/AuthEventHandler/index.js\";\r\nimport UserProfilePage from './components/UserProfilePage';\r\nimport MediaMap from \"./components/MediaMap\";\r\nimport ProjectDetailPage from \"./components/ProjectDetailPage\";\r\nimport LoginPage from './components/LoginPage';\r\nimport NotFoundPage from \"./components/NotFoundPage\";\r\nimport PrivateRoute from \"./components/PrivateRoute\";\r\nimport Layout from \"./components/Layout\";\r\nimport { HOME, UPLOADING, USER_PROFILE, PROJECT_DETAIL, LOGIN, DRONE_MAP, ADMIN, HELP } from \"./Routes\";\r\nimport AdminPage from \"./components/AdminPage\";\r\nimport Help from \"./components/Help\";\r\nimport './components/StoraEnsoComponents/assets/css/styles.css';\r\n\r\nconst AppWrapper = styled.div`\r\n background-color: ${({theme}) => theme.colors.bg_gray_light};\r\n`;\r\n\r\nconst App = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n } />\r\n } />\r\n \r\n \r\n \r\n \r\n \r\n }>\r\n } />\r\n } />\r\n } />\r\n } />\r\n } />\r\n \r\n \r\n \r\n }\r\n />\r\n } />\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { PublicClientApplication } from \"@azure/msal-browser\";\r\nimport { MsalProvider } from \"@azure/msal-react\";\r\nimport { ThemeProvider } from 'styled-components';\r\nimport Modal from 'react-modal';\r\nimport { library, dom } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fal } from \"@fortawesome/pro-light-svg-icons\";\r\nimport { fas } from \"@fortawesome/pro-solid-svg-icons\";\r\nimport { msalConfig } from './config/authConfig';\r\nimport App from './App';\r\nimport theme from './config/theme';\r\nimport './index.css';\r\nimport './map.css';\r\n\r\nexport const msalInstance = new PublicClientApplication(msalConfig);\r\n\r\nlibrary.add(fal, fas);\r\ndom.watch();\r\n\r\nModal.setAppElement('#root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n"],"sourceRoot":""}