{"version":3,"sources":["View/resources/icons/delete.svg","View/resources/icons/layers.svg","View/resources/icons/eye.svg","View/resources/icons/eye_hide.svg","View/resources/icons/map_info.svg","View/resources/icons/polygon.svg","View/resources/icons/move_down.svg","View/resources/icons/move_up.svg","View/resources/icons/map_measure.svg","View/resources/icons/map_export.svg","View/resources/icons/map_select.svg","View/resources/icons/map_layers.svg","View/resources/icons/add_map_layers.svg","View/resources/icons/excell.svg","View/resources/icons/csv.svg","View/resources/icons/gml.svg","View/resources/icons/jpg.svg","View/resources/icons/edit-map.svg","View/resources/icons/metadata_list2.svg","View/resources/icons/metadata_list2_disabled.svg","View/resources/icons/metadata_list.svg","View/resources/icons/legend.svg","View/resources/icons/zoom_to.svg","View/resources/icons/delete_disabled.svg","View/resources/icons/toggle.png","View/resources/icons/untoggle.png","View/resources/LayerList.svg","View/resources/SearchIcon.svg","View/resources/Identify.svg","View/resources/Upload.svg","View/resources/MeasureLength.svg","View/resources/tempimagery.jpg","View/resources/TerrainLabels.jpg","View/resources/oceans.jpeg","View/resources/download.svg","View/resources/pool.svg","View/resources/information.svg","View/resources/map-travel.svg","View/redux/createRootReducer.ts","View/modules/sideDrawer/actionTypes.ts","View/modules/sideDrawer/actions.ts","View/modules/sideDrawer/reducer.ts","View/modules/layerListActions/actionTypes.ts","View/modules/layerListActions/actions.ts","View/modules/layerListActions/reducer.ts","View/modules/measurements/actionTypes.ts","View/modules/measurements/actions.ts","View/modules/measurements/reducer.ts","View/modules/selections/actionTypes.ts","View/modules/selections/actions.ts","View/modules/selections/reducer.ts","View/modules/applayers/actionTypes.ts","View/modules/applayers/actions.ts","View/modules/applayers/reducer.ts","View/modules/mapActions/actionTypes.ts","View/modules/mapActions/actions.ts","View/modules/mapActions/reducer.ts","View/redux/store.ts","View/redux/hooks.ts","configLoader.ts","AppDomain/LayerManager/ImageDomainLayer.ts","AppDomain/LayerManager/VectorDomainLayer.ts","AppDomain/LayerManager/TileDomainLayer.ts","AppDomain/MapManager/MapManager.ts","Domain/LayerManager/LayersManager.ts","AppDomain/LayerManager/LayersDomainManager.ts","Domain/MapManager/MapManager.ts","View/modules/applayers/operations.ts","View/components/Map/Webmap.tsx","AppDomain/Measure/MeasureEvents.ts","View/modules/mapActions/operations.ts","AppDomain/Selection/Selection.ts","AppDomain/Draw/Draw.ts","AppDomain/Measure/Measure.ts","AppDomain/Pubsub/PubSub.ts","Domain/SelectionManager/SelectionManager.ts","View/components/Map/ExternalServices.tsx","View/modules/measurements/operations.ts","View/modules/selections/operations.ts","View/common/xmlManager.ts","View/components/Loading.tsx","View/components/Map/MapLayersList.tsx","View/components/Map/MapInfoCloseButton.tsx","View/components/Map/MapInfoSettings.tsx","View/components/Widgets/StyledTreeItem.tsx","View/components/Widgets/AppToolTip.tsx","View/components/Widgets/RowButtonIcon.tsx","View/components/Widgets/DynamicMaps.tsx","View/components/Map/MapButtons.tsx","View/components/Widgets/AppDialog.tsx","View/components/Widgets/LayerTreeView.tsx","View/components/Widgets/AppSearchResult.tsx","View/components/Widgets/Layerlist.tsx","View/components/Widgets/AppSearch.tsx","View/components/SideDrawer/SideDrawer.tsx","View/components/SideDrawer/SideBar.tsx","View/modules/layerListActions/operations.ts","View/components/Widgets/FeatureAttributesInfoStatic.tsx","View/components/Map/MapInfo.tsx","View/components/Widgets/Coordinates.tsx","View/components/Map/PointMarker.tsx","View/components/Main/Main.tsx","routes.ts","View/components/NotFound/index.tsx","View/components/Tabs/TabContent.tsx","View/components/Tabs/TabButtonGroup.tsx","View/modules/sideDrawer/operations.ts","Domain/PopupManager/PopupManager.ts","AppDomain/PopupDomainManager/PopupDomainManager.ts","View/components/Header.tsx","View/components/Root.tsx","App.tsx","View/locales/en/index.ts","View/locales/en/common.ts","View/locales/en/article.ts","View/locales/en/signin.ts","i18n.ts","index.tsx"],"names":["module","exports","__webpack_require__","p","history","actionTypes","actions","sideDrawerContent","type","payload","initialState","reducer","state","arguments","length","undefined","action","Object","objectSpread","layerListObject","configuredLayers","distance","area","measuredDistance","measuredArea","selections","appLayers","allAppLayers","isForUpdate","externalLayer","dynamicMaps","externalLayers","layersInfoSetttings","concat","toConsumableArray","scaleNumber","createBrowserHistory","store","createStore","combineReducers","router","connectRouter","sideDrawerReducer","layerListReducer","measureDistanceReducer","selectionsReducer","updateAppLayersReducer","mapActions","changeScaleNumberReducer","composeWithDevTools","applyMiddleware","thunkMiddleware","routerMiddleware","_useDispatch","_useSelector","appConfig","ImageDomainLayer","opt_options","_this","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","call","layerId","title","legendSymbol","removable","show","legendInfo","showLegend","isTemporary","index","get","prototype","LayerImage","VectorDomainLayer","layerOptions","VectorLayer","TileDomainLayer","TileLayer","MapManagerDomain","divAnchor","config","mapProjection","map","mapView","layers","setMapProjection","osmSource","getOsmAsTileLayer","createMapView","createLayers","operationalLayers","createMap","basemapLoader","getLayers","extend","Map","target","view","controls","Zoom","MousePosition","coordinateFormat","createStringXY","className","document","getElementById","View","center","zoom","maxZoom","maxZoomLevel","layerInfoSettings","layerInfos","forEach","layerSettings","inx","l","createLayer","setZIndex","push","layer","sourceSettings","format","GeoJSON","layerSource","ImageWMS","source","vectorSource","VectorSource","url","extent","resolution","projection","params","LAYERS","getCode","join","strategy","bboxStrategy","customMapPrjParams","Proj4","defs","mapProjectionObject","Projection","code","units","addProjection","register","baseMapType","resultBasemap","createTileLayer","setAt","XYZ","OSM","getArray","removeLayer","newIndex","getLayerByTitle","name","getOperationalLayers","filter","feature","duration","features","readFeatures","getView","animate","OlExtent","getGeometry","getExtent","fromCs","toCs","skipTransform","coordinates","transformExtent","fit","transform","LayersManager","addLayer","setMapLayerOrderIndex","instance","LayersDomainManager","mapLayers","direction","currentIndex","getZIndex","moveDirectionIndex","layerIndex","getIndexOfLayerByTitle","layerToReorder","splice","reorderLayers","layerIndexMax","mapLayer","remove","findIndex","_this2","_ref","layerUrl","esrijsonFormat","encodeURIComponent","axios","f","then","r","data","featureProjection","addFeatures","catch","console","error","_this3","ImageArcGISRest","EsriJSON","loader","arcgisRestLoader","tileStrategy","createXYZ","tileSize","id","MapManager","getInstance","getMapLayers","addLayers","mapManager","layersManager","MeasureEvents","updateAppLayers","dispatch","updateAllAppLayers","updateLayerOrder","addExternalLayer","updateDynamicMaps","changeScaleNumber","events","connect","props","useEffect","_mapManager","INCHES_PER_UNIT","m","dd","on","getProjection","getUnits","res","getResolution","scale","Math","ceil","mapEvent","mapClick","unSubscribe","_mapManager2","selectedMapIndex","appLayer","selected","appLayersToShow","dynamicLayers","mapsToUpdate","copiedLayers","indexOf","handleDynamicLayers","_mapManager3","addLayerToMap","some","getSource","getUrl","mapUrl","appLayerIndexes","visible","getParams","layerIndexes","split","isLayerNotIn","appLayerInx","layerInx","addAppMap","removeMapLayer","mapToUpdate","_mapManager4","_mapManager5","appL","_mapManager6","_appLayers","metadataExtent","metadata","find","extentContent","specific","content","_mapManager7","xmin","Number","ymin","xmax","ymax","goTo","_mapManager8","_mapManager9","ids","layerSources","mapName","createdWmsLayer","_mapManager10","_mapManager11","dynamicMap","dynamicMapLayer","layerInMap","layerName","setVisible","splittedUrl","indexStr","isNaN","_mapManager12","slice","createLayerForWebMap","setVisibleIndex","layerOrderNum","_mapManager13","_mapManager14","visibleLayersInAppLayer","_l$layerMetadata","layerMetadata","orderNum","eventType","keys","eventTarget","eventListener","listener","removeEventListener","changeLayerInfos","mapClickHandler","evt","_mapManager15","changeLoadingStatus","urls","mapQueries","xCoord","coordinate","yCoord","tolerance","xMin","yMin","xMax","yMax","visibleLayers","getVisible","visibleSources","visibleLayer","visibleSource","i","queryUrl","returnGeometry","spatialRel","geometry","spatialReference","wkid","geometryType","inSR","outFields","outSR","layerInfoResults","Promise","all","results","layerInfoResultsUnFiltered","handleMapClickResults","attributesWithAliases","attrAliases","setLayerInfos","err","_mapManager16","onMapClick","mapClickResults","resolve","reject","attributes","featureLayer","getLayerTitle","reduce","acc","curr","fieldInfos","mapLayerFieldInfosVisible","showFieldInfo","resultAttributes","hasOwnProperty","fieldName","toLowerCase","attributeValue","accuracy","attributeValueNumber","toFixed","fieldAlias","mapTitle","identifiedLayers","layerTitle","setTimeout","resultMapTitle","window","translated","resultLayerTitle","_loop","serviceUrl","targetLayer","v","_ret","appLayerUrl","visibileLayersIds","_layersManager","JSON","stringify","visibleLayerId","mapLayerId","imageLoadFunction","image","src","xhr","XMLHttpRequest","responseType","addEventListener","response","img","getImage","URL","createObjectURL","revokeObjectURL","open","setRequestHeader","send","react","style","width","height","boxSizing","SelectionEventTypes","DomainDraw","drawObject","lines","polygons","drawLayer","vectorLayer","Style","fill","Fill","color","stroke","Stroke","CircleStyle","radius","createDrawObject","drawType","GeometryType","POINT","LINE_STRING","POLYGON","drawOptions","removeDrawObject","draw","Draw","lineDash","addInteraction","removeInteraction","clear","AppMeasure","single","measuredFeatures","measureEvents","_measuredLength","helpTooltipElement","helpTooltip","measureTooltipElement","measureTooltip","createElement","startMeasure","getOverlays","createHelpTooltip","createMeasureTooltip","_this$draw$drawObject","_this$draw$drawObject2","ev","pointerMoveHandler","getViewport","classList","add","drawLine","drawPolygon","onMeasureStart","onDrawEnd","MEASUREMENT_CHANGE","setOffset","unByKey","tooltipCoord","geom","output","Polygon","formatArea","getInteriorPoint","getCoordinates","LineString","formatLength","getLastCoordinate","innerHTML","setPosition","parentNode","removeChild","Overlay","element","offset","positioning","OverlayPositioning","CENTER_LEFT","addOverlay","polygon","getArea","round","line","getLength","dragging","helpMsg","BOTTOM_CENTER","handler","PubSub","event","callback","SelectionManager","Selection","_selections","pubSub","startSelection","visibleLayersUrls","getVisibleLayersUrls","getFeaturesByQueries","featureResults","_features","featureResult","selectFeature","targetIndex","layerInfo","fields","log","featureInfo","_feature","_this4","drawPoint","mapSelection","stopDraw","publish","sources","queryUrls","coords","_this5","queries","layerInfoQueries","resInfosData","lInfoRes","_this6","resultFeatures","featureRequests","layerSoyrce","layerParams","srs","getFeatureRequest","SERVICE","VERSION","REQUEST","TYPENAME","OUTPUTFORMAT","SRSNAME","BBOX","toString","resFeature","reqData","status","callBack","subscribe","selectionFeatures","changeMeasuredDistance","selectionUpdate","getXmlValue","xml","tagName","resValue","tag","getElementsByTagName","childNode","childNodes","nodeValue","replace","handleLayerMetadata","restUrl","wmsUrl","resultMetaDataObj","fieldDescription","xmlDoc","DOMParser","parseFromString","purpose","abstract","datacred","begdate","pubdate","begdateYear","substr","begdateMonth","begdateDay","begdateStr","begdateLabel","pubdateYear","pubdateMonth","pubdateDay","pubdateStr","pubdateLabel","useconst","cntemail","email","city","address","postal","cntvoice","cntfax","tel","fax","adr","orgName","handleLayerFieldInfos","fieldInfosRes","propNames","resValues","tags","xmlProps","j","subTag","getMultipelXmlValues","fieldProps","fieldInfo","theme","createMuiTheme","palette","primary","main","Loading","ThemeProvider","position","left","right","top","bottom","backgroundColor","zIndex","onClick","CircularProgress","externalMapList","typography","fontSize","_useState","useState","_useState2","slicedToArray","mapsInList","setMapsInList","_useState3","_useState4","expanded","setExpanded","_useState5","_useState6","loading","setLoading","counter","_mapsInList","sort","a","b","endCount","mapElement","layerMetadataUrl","layerXml","updateMapsInLayerList","overflow","components_Loading","float","TreeView","defaultCollapseIcon","ExpandMore_default","defaultExpandIcon","ChevronRight_default","onNodeToggle","nodeIds","multiSelect","mapObject","key","TreeItem","nodeId","label","FormControlLabel","control","Checkbox","onChange","e","uiMapList","uiMap","addMap","marginLeft","checked","onLabelClick","onIconClick","_expanded","containerIndex","openIconClicked","margin","layerObject","addLayerToList","Divider","secondary","useStyles","makeStyles","createStyles","root","display","flexWrap","spacing","withoutLabel","marginTop","textField","baseMap","startBaseMapValue","baseMapValue","setBaseMapValue","inputValue","setInputValue","showError","setShowError","baseMapUrl","baseMapConfiguredUrl","basemaps","configBaseMap","setBaseMap","Typography","fontStyle","FormControl","component","RadioGroup","value","row","aria-label","defaultValue","Radio","variant","InputLabel","htmlFor","OutlinedInput","val","endAdornment","InputAdornment","IconButton","resultData","xmlServiceTitle","textContent","xmlLayers","wmsLayers","xmlTitle","xmlName","loadWms","onMouseDown","edge","outline","AddCircleOutlineRounded_default","labelWidth","MapInfoCloseButton","styled","button","_templateObject","mapsInSettingsIllegal","mapsInSettings","setMapsInSettings","updateChangesOnClose","_mapsInSettings","updateMapFieldInfosVisibility","mapInSettings","mapLayerInSettings","updateLayerFieldInfoVisibility","useTreeItemStyles","text","&:hover > $content","&:focus > $content, &$selected > $content","&:focus > $content $label, &:hover > $content $label, &$selected > $content $label","&$selected","borderTopRightRadius","borderBottomRightRadius","paddingRight","fontWeight","fontWeightMedium","$expanded > &","fontWeightRegular","group","& $content","paddingLeft","labelRoot","alignItems","padding","labelicon","marginRight","labelText","flexGrow","StyledTreeItem","classes","bgColor","treeViewKey","headItem","other","layerVisibility","objectWithoutProperties","assign","borderTop","wordBreak","rowicons","rowIcon","--tree-view-color","--tree-view-bg-color","AppToolTip","withStyles","tooltip","Tooltip","RowButtonIcon","clickHandler","Widgets_AppToolTip","arrow","backgroundImage","backgroundRepeat","backgroundPosition","createdMapIllegal","appMaps","setAppMaps","dynamicMapsExpanded","setDynamicMapsExpanded","_useState7","_useState8","_useState9","_useState10","createdMap","setCreatedMap","_useState11","_useState12","inputTitle","setInputTitle","dynamicAppLayers","updatedMapLayers","showInList","addCreatedMap","dynamicMapsInApp","mapOrderNum","dynamicAppMapLayers","dynamicLayer","cretedAppMap","metadataUrl","Widgets_StyledTreeItem","Widgets_RowButtonIcon","LayerListIcon","Date","getTime","Delete","_appMaps","appMap","removeCreatedMap","LayerVisibilityIcon2","LayerVisibilityHideIcon2","_createdMap","changeLayerVisibility","isFound","_mapLayers","handleLayerClick","disabled","ButtonTypes","appMeasure","selectionManager","MapButton","div","MapButtons_templateObject","MapButtonSelected","_templateObject2","ExportItem","span","_templateObject3","changeMeasuredArea","sideWindowStyle","minWidth","boxShadow","borderColor","borderWidth","borderStyle","opacity","borderRadius","infoButtonOn","setInfoButtonOn","measure","setMeasure","showExports","setShowExports","showMeasurementOptions","setShowMeasurementOptions","showSelectionOptions","setShowSelectionOptions","showLayersToAdd","setShowLayersToAdd","_useState13","_useState14","showExternalLayersToAdd","setShowExternalLayersToAdd","_useState15","_useState16","infoSettings","setInfoSettings","_useState17","_useState18","setDynamicMaps","handlePanels","mapEventType","_infoButtonOn","_measure","_showExports","_showMeasurementOptions","_showSelectionOptions","_showLayersToAdd","_showExternalLayersToAdd","_infoSettings","_dynamicMaps","MEASURE","EXPORT","SELECT","MAPS","EXTERNAL","INFO","INFOSETTINGS","DYNAMIC","changeMapEvent","measureClick","measureLine","measureArea","measuredLength","selectFeatures","selection","changeLoading","selectByLine","selectByPolygon","handleExports","exportToExcel","sheetObjects","sel","featureFields","columns","filteredField","alias","sheetObject","flexDirection","placement","MapInfo","alt","borderTopLeftRadius","borderBottomLeftRadius","MapMeasure","TimelineRounded_default","verticalAlign","PolygonIcon","DeleteForeverRounded_default","textAlign","Map_MapInfoCloseButton","MapExport","ExcelIcon","CsvIcon","GmllIcon","JpgIcon","Badge","overlap","badgeContent","MapSelect","removeAll","MapLayers","Map_MapLayersList","AddMapLayers","Map_ExternalServices","CreateMaps","Widgets_DynamicMaps","SettingsRounded_default","Map_MapInfoSettings","PersonRounded_default","DialogTitle","closeButton","grey","children","onClose","disableTypography","DialogContent","fontFamily","MuiDialogContent","DialogActions","MuiDialogActions","AppDialog","setData","Dialog","fullWidth","maxWidth","maxHeight","handleClose","aria-labelledby","AppDialog_DialogTitle","AppDialog_DialogContent","dividers","d","marginBottom","c","splittedBegin","beginLabelIndex","substring","trim","endLabelIndex","href","el","AppDialog_DialogActions","Button","autoFocus","RowMenuButtonIcon","anchorEl","setAnchorEl","setOpen","currentTarget","Popover","anchorOrigin","vertical","horizontal","transformOrigin","transitionDuration","externalExpanded","LayerTreeView","mL","showMetaData","ArrowDropDown_default","ArrowRight_default","defaultEndIcon","MoveUpIcon","preventDefault","moveMap","MoveDownIcon","MetaListIconBlackDisabled","MetaListIconBlack","mapMetadata","removeMap","DeleteDisabled","borderBottom","collapseIcon","layerLegendId","openLegend","expandIcon","stopPropagation","changeLayerVisbility","changeLayerOrder","LayerTreeView_RowMenuButtonIcon","LegendIcon","MetaListIcon","ZoomToIcon","legend","x","imageData","Widgets_AppDialog","AppSearchResultContent","AppSearchResult_templateObject","AppSearchResult","onResultSelect","periodSplittedValue","searchValue","dangerouslySetInnerHTML","__html","RegExp","match","splittedByValue","finalQuote","boldResOneSentence","searchMapLayers","setValue","setOptions","searchResults","setSearchResults","onValueInput","_searchResults","searchValueInMetadata","mapDataResult","layerDataResult","paddingTop","TextField","InputProps","size","Paper","cursor","result","Widgets_AppSearchResult","mapsLayerList","setMapsLayerList","externalLayersInLayerList","finalResult","dynamicMapsInLayerList","layerListLayers","currentMapLayerList","mergeLayerList","resultListMaps","reverse","loadedMap","listData","legendResult","info","legends","layerDefinitionQueries","mLayer","_loadedMap$layers$fin","mapLayerResult","existingL","mapListObject","layerQuery","existingLayer","existinL","existingListLayer","loadedL","layerDefinitions","layerDefinition","currnetMapLayerList","currentAppLayers","mapLayerList","mapAppLayers","layerListMapLayers","listMapLyer","listLayer","react_default","Fragment","Widgets_AppSearch","textTransform","Widgets_LayerTreeView","visibility","mapType","mapInList","layersInfo","_mapsLayerList","_mapsLayerListindex","_layers","dynamicLayerIndex","listElementAbove","listElementAboveOrderNum","layerIndexOrderNum","listElementBelow","listElementBelowOrderNum","currentLayerSource","layerSoruces","getCurrentLayerSource","_dynamicLayers","lInfo","visibleLInfo","updateParams","seq","currentMapIndex","movedIndex","currentMapInList","nextMapInList","currentAppLayerIndex","movedAppLayerIndex","tempAppLayer","tempAppLayerOrderNum","tempMovedLayerOrderNum","SideDrawer","contentType","Widgets_Layerlist","appBar","transition","transitions","create","easing","sharp","leavingScreen","appBarShift","easeOut","enteringScreen","menuButton","hide","drawer","flexShrink","drawerPaper","background","drawerHeader","mixins","toolbar","justifyContent","contentShift","SideBar","_React$useState","useTheme","React","_React$useState2","handleDrawerOpen","Drawer","anchor","paper","components_SideDrawer_SideDrawer","border","Toggle","Untoggle","invokeLayerListUpdate","FeatureAttributesInfoStatic","margins","marginBlockStart","marginInlineStart","marginInlineEnd","attributeData","setAttributeData","attrData","infos","LayerListImage","identifiedLayer","Widgets_FeatureAttributesInfoStatic","Coordinates","setCoordinates","mousePositionEl","getElementsByClassName","MutationObserver","mutationsList","observer","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","Symbol","iterator","next","done","mutation","splitted","eastingStr","northingStr","eastingNum","northingNum","easting","northing","transformedCoords","return","observe","childList","subtree","overlay","configUrl","Marker","PointMarker_templateObject","active","keyframes","PointMarker_templateObject2","Beacon","PointMarker_templateObject3","PointMarker","routes","path","exact","setMapEvent","setLayersInfo","identifyCoordinates","setIdentifyCoordinates","getQueryVariable","layersIds","lang","loadMapUrl","loadLayers","defaultMap","htmlElement","autoPan","autoPanAnimation","layerCounter","startAppUrl","where","startAppLayerInfo","startAppLayerInfoData","datasets","metadataObjects","dataset","serviceName","arcgisServerUrl","metadatFileName","metadataFilesDirectoryUrl","arcgisWmsServerUrl","mapLayersIndexes","metadataQueries","metadataObj","q","metadatObjResults","metadatObjResult","metadataObject","rest","wms","eastbc","westbc","northbc","southbc","handleDatasetMetadata","lrd","finishLoading","baseMapIndex","startAppDataObj","startAppMap","layerIdsArray","lId","splittedFirstServiceName","splittedSecondServiceName","splittedServiceName","mapLayerServiceName","mapLayerServiceIndex","flex","Map_MapButtons","loadingState","Map_MapInfo","Webmap","loadingStatus","finalLayerInfos","_newLayerInfos","added","SideDrawer_SideBar","Map_PointMarker","borderRight","Widgets_Coordinates","getFullYear","TabButton","customWIdth","bckgroundColor","contentStyle","textOverflow","TabButtonGroup","alignContent","invokeSideDrawerContentChange","PopupManager","popupLayerSettings","vectorLayerCollection","getMap","select","setBehavior","createTooltip","message","featureAttributes","getProperties","getLayer","configuredInfo","getLayerConfiguration","createMessage","showFeaturesInfo","layerConfiguration","hoverLayer","createFeatureLayer","setOpacity","configuredPopupLayer","field","destruct","layersToRemove","layerToRemove","popupInfo","popupOverlay","_select","olCondition","createCondition","Select","condition","click","pointerMove","mapBrowserEvent","altKeyOnly","tooltipMessage","_this$popupOverlay","_this$popupOverlay2","setElement","Header","tabStyle","popupManager","featureHover","setState","basemapType","basemapUrl","widgets","hoverFeatures","featureLayers","destroy","clearAll","opLayer","titles","actionName","loadAll","tabs","ribbon","react_tabs_esm","tab","sections","tabSection","TabButtonGroup_TabButtonGroup","sectionName","sectionComponents","sectionComponent","TabContent_TabButton","componentIcon","componentName","getAction","componentAction","listStyleType","SearchIcon","searchInvoker","LayerList","layerListInvoker","Identify","identifyInvoker","Information","MapTravel","identifyPlanInvoker","Download","downloadBySelection","DownloadInfrObj","downloadBySelectionInfrObj","Upload","uploadFile","MeasureLength","measureInvoker","basemap","basemapKey","basemapImg","Imagery","Terrain","Oceans","baseMapChanger","Root","onLogoClick","onHomeClick","onSigninClick","components_Header","App","es","esm","Root_Root","renderRoutes","en","translation","common","appName","bannerMessage","home","signin","article","empty","emailPlaceHolder","passwordPlaceHolder","signInLabel","lngDetector","LanguageDetector","order","lookupCookie","lookupLocalStorage","caches","rootEl","i18next","use","initReactI18next","init","fallbackLng","resources","interpolation","escapeValue","parseMissingKeyHandler","debug","process","fetch","json","configFile","ReactDOM","App_App"],"mappings":"6EAAAA,EAAAC,QAAiBC,EAAAC,EAAuB,wDCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,wDCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,qDCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,0DCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,0DCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,yDCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,2DCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,yDCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,6DCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,4DCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,4DCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,4DCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,gECAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,wDCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,qDCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,qDCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,qDCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,0DCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,gECAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,yECAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,+DCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,wDCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,yDCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,+DCAxCH,EAAAC,QAAA,wkBCAAD,EAAAC,QAAA,8mBCAAD,EAAAC,QAAiBC,EAAAC,EAAuB,2DCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,4DCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,0DCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,wDCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,6DCAxCH,EAAAC,QAAA,2hZCAAD,EAAAC,QAAiBC,EAAAC,EAAuB,6DCAxCH,EAAAC,QAAA,urVCAAD,EAAAC,QAAiBC,EAAAC,EAAuB,0DCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,sDCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,6DCAxCH,EAAAC,QAAiBC,EAAAC,EAAuB,kRC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","file":"static/js/main.5957fe9b.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/delete.813dd49b.svg\";","module.exports = __webpack_public_path__ + \"static/media/layers.aa93a3c7.svg\";","module.exports = __webpack_public_path__ + \"static/media/eye.78f52744.svg\";","module.exports = __webpack_public_path__ + \"static/media/eye_hide.9291abc7.svg\";","module.exports = __webpack_public_path__ + \"static/media/map_info.99ee3ee2.svg\";","module.exports = __webpack_public_path__ + \"static/media/polygon.42ae0d36.svg\";","module.exports = __webpack_public_path__ + \"static/media/move_down.9cff3622.svg\";","module.exports = __webpack_public_path__ + \"static/media/move_up.79aeeaf5.svg\";","module.exports = __webpack_public_path__ + \"static/media/map_measure.b32a5d80.svg\";","module.exports = __webpack_public_path__ + \"static/media/map_export.eb332e0e.svg\";","module.exports = __webpack_public_path__ + \"static/media/map_select.f1a990f5.svg\";","module.exports = __webpack_public_path__ + \"static/media/map_layers.d7c7ba26.svg\";","module.exports = __webpack_public_path__ + \"static/media/add_map_layers.f7fe024f.svg\";","module.exports = __webpack_public_path__ + \"static/media/excell.7abfa7f9.svg\";","module.exports = __webpack_public_path__ + \"static/media/csv.273daf2f.svg\";","module.exports = __webpack_public_path__ + \"static/media/gml.4c688cc1.svg\";","module.exports = __webpack_public_path__ + \"static/media/jpg.f06a0e55.svg\";","module.exports = __webpack_public_path__ + \"static/media/edit-map.d2d05033.svg\";","module.exports = __webpack_public_path__ + \"static/media/metadata_list2.ac6c06f7.svg\";","module.exports = __webpack_public_path__ + \"static/media/metadata_list2_disabled.cadc6c58.svg\";","module.exports = __webpack_public_path__ + \"static/media/metadata_list.75a77e6b.svg\";","module.exports = __webpack_public_path__ + \"static/media/legend.b7141da7.svg\";","module.exports = __webpack_public_path__ + \"static/media/zoom_to.51d39d6f.svg\";","module.exports = __webpack_public_path__ + \"static/media/delete_disabled.3f870878.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAwCAYAAAD+djETAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABBUlEQVRYR+3XvwqCQBzA8ctqD/+gk4I4+i7uOvgubT1AY4ODufQ2joKIYIiY1FxpXlybdZ38JIL7woF3wwfPW7xZ13VHBNOlH4d+rCHRV9sp0LNAHiBbTYEijsLHUfg4Ct/v0KIo5o7jyGRKjYqWZSl4nifGcbwkS9Q+olVVCa7rSnmeL8jSV71F67p+glmWMYG4QRSD/ZalNE2ZQdwg6vu+mCTJKBBHPagxDaJBEDSWZd3IlLlBVJblNgzDk2mao+C321cU5QkbhsEMf/ymqqq2URQ1uq4zwdSD0jTt3r9xY9v2lSxRm+Jfiv6mY+IofByFj6Pw/Q06yTVyD4niq/kOIbR5ANDzUvqByVGsAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAwCAYAAAD+djETAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABHklEQVRYR+3WMWqEQBSA4UnWrROMiJWIYOlVrNKIhX3OEHKA3CGFhZ5IUomg4KJolqSOxLy3TiPEyTr7Qpr54eGMMB/r2ng1TdOeMfYEcw9zA3NxiD7C9WHe0oToK1xv5y1N1zCkIIYoeQqlT6H0KZS+/0WDIDCaptnxrbCz0TzP91EU6W3b/gpvevy6rrUwDPWu64TnNv+nVVVp8Ivv+r5fPbsZxcqyPMHDMPx4XgrFiqLQ4jjW+XaRNCpKGvU8b0yS5Mi3i6RQ13XHNE3fDMP44rcWbUYdxxmzLFsFsU2obdsn0DTNVRA7G/V9/xMe+WhZlhDE8FvqwNdkSb99UQqlT6H0KZS+P0Pf5yVdiKbzki5En2FeYD7wxuUx9g3rj09ZYOt55QAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/LayerList.04dc6cdf.svg\";","module.exports = __webpack_public_path__ + \"static/media/SearchIcon.8911338b.svg\";","module.exports = __webpack_public_path__ + \"static/media/Identify.4e540d4e.svg\";","module.exports = __webpack_public_path__ + \"static/media/Upload.df4101d3.svg\";","module.exports = __webpack_public_path__ + \"static/media/MeasureLength.c1d3fdaf.svg\";","module.exports = \"data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCACFAMgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDhplFxIi2p/fPhht6sMZwfbFVmsLY3EttJcp9qiDNMhBG3ABJHvk4/Ct3RNR0uyuLjT7UYvYkCvK45kZeNo+hwKzLfT49Olvda1RSzsS7DGMEnqB9cflWexnbW5Xt766g0pxIG8uI7fLAzzk8fpn6Vc0q1utZt0lsYoxcFhGkUnyjdnkZ78ZNVbfVvt+oxqiNbWkzqmzaCSx/ix7iu20WKytLuO2TMoUefa/Nz5hARse/yj86NRp6jbrwXarpqwrGV1g7ZEnXPLA9Af7v+FT6bqV5Lpd4vmt9utXMciyjaox2z+HWmNqUV7cW0BvXe5gvHQlTtkABJKsPw7Vg6rFdXerSojTJFcSEsCPkY4BwwHU8Z/Gj1KO1vJLV9DNpdRBUulC+WSM5znOO7ZrkdT0ibSmiQQSRJImU8zqQPX0PtW1pCPFb/AGe9gCy2bDa0g42HlW/LP4it69uLPXNFuoklE0kUbBGTkqeORS8gseU7Y9MvSiEtPPF5keThVIOBSC/eDS/Mt5MySs0bwrz5bDHPt1plpbWVrrhur64MmxmVSwJAPbA9aoNqEM2oXA02Jrcud3lEcZHVh6GrsSyey0EXEQNxEXaPq7NkCn6tJFf28GnmR0lgbKkD5eewpdE8yG+M13dshZtpZzgPx0x0rRluIIoherYyzqJTHAgGPOI6n2WkNaom1HVXtPDkUt9Dm5+7GOm4dAcVqR6eL3wvFNZxbrqUKWiYdc9cA1xet6+s11tuow0gPzIg4j/2ea6nwnfXd3qFzO8zfY0QeXGSDt9KGtAW+pFpmg3UWsG4vl2iJcKvZfpWTrl4t94gkjRyrRAKjdQQK6TxPqD2mhXDo22eX5VI6++K8/iF1fWO6GMrKW27g3YdTTS0E+yO30TTbW4t1mmlMbt9w9V9810Gn2UUsdxc3rB7SDKRDOQx7sP5V5/b63qP2Q2dtbkNFEUMhG35v71T6Rrt5Bokmn3Yl8sB26ZA9MfjUcpakktDevbOy1OP7Lcs8VuDu3gbgp7ZrHj8GQGFmtpyZlyyujcgD1HpWNo2p6jYK/n7mtcYZMZP4e9dZBrFpf2rvYrNKiDa6qpRlz6nrjtTba2DR6mZaNqZkit3CytGPlaQEAYGdx9RUtxd69bsQ7RSRt/GUI2nHt+dbGi2SWEcpud9wspzuL5KL2C+1EF5Y3M18skvzRgGA5wcZxtI9SaSYJW1Kt1diz05rl15hA3Df8sh7cep61Jobw3zw39wTCHJyWPGKV9NjvtKnLyRpbwkNIxYAEnPH+fWsRtM1jTF+1WV0xtnAY28g4Kn0/CnZBrc0vEuqSWcy2lqouppyQpYcY9TiisOLXZbnXrWExRqTcqN8Y5IB60UWFo9SOwltrB7nUZGeWRpAS4xhiSTkH64zWtNpk2o3ckz6h9ptZAGRGXlCcE8dODkfSsB3inspbVSph5ZJiPl9Og7jPX0q74b1WWG5kgvJIxEuNjn5ckcfyAqrErsWTptzFqcMFyqxWTSiNZd2GVtpK/T5sCqKEp4x0qw3zGCCZEYhv4mI3YI6DPH511V7aPcaUyPMhEmG3KSOAdwIPrwDXM6XfLB4ktreP8Acq1ym+dvnPzEfMPzo6BbU7zVbO00m51AwJCkhEV1FHL8pZgfm2t3+6OP8auaRfwfarZ51S2uL5dyRoNwbAznPuD+OK3PE9hYR6lorpdRXBCurJKoKklRhx6HPGPQ1xEtosmoTNZM0b2Mx8uZP3g2luFwemA2KjqUW9XtrxdSk1eM3K2YPl3MLdABxvA9sVqy38S3ttEYwIwm6NYgckdzx9KfFqV5ptvLdXLwyXsi7PIb7rgHkkduM1R0LW0laSBwkflAKoRcbkHBwT1oAxfHNlDJcJdQoAZ0VQVHysQOuOx5rgrh4LGdJWIWcY+ROqn39q9vjtrbxLo0thJbSWiBsxsRhgwPDA968f8AEui3Gka8ySxhp93zb04x2b0NXB9CWrksdjLqliszOXIJbg7cY9K6Zry3/ewwIY7O3GFDfeZjyTn3NOtbfTdK0W4njCXc8kabUywU88n2GKylvUu4mFvpUlqkvyviQsM56HipuVa2xxGqwzvfyzyKAZCXwOmK9E8H6WbDSI2cMJbhQ7Z7L2FUYNHaa+hEkZ8scudufl9P0rr4GRY8hVUEbV4xgelNyurCRx/ix55b5RAh8uJcbXGVJ9RTPD3nR3QaSzVrcDbIF6biMjn+taHjm4hstMt0QlpJiwZlIJVaj0i+l0fQ41hEshZN6gqCCfxFJ7CS942rbTory4ZmBtrUKfPkUgpuB+XOaxVnibxRLo1jtuF2/e4Gec1maTdXsz3rXlqyof3pdGOM9TkZxVTQIZr/AF671URSC3UE4GVY54wCKElqW7M7ee20y31GWJRNMIxjrtAbuKwrq6OnXdy+lK0b3DKicjLYGSPTrWra6gkMDoIQuxi3zxtIx9yc81yDahdQ30FzaeZ5JkMjI6AAc5GAamISsbFvresgiGXS44iqltyEkH2x2rKgjvdmpaxefPMELDcep7cflWhrOvNe6UsltbbZeVwqFWVjxwe4qSaxvLzRfNeCSOORgZAAfQf1FXsSyLw4sWqeDl0t5WV3vN7tnjHXk/hXR6tLcafZBfMXyJGAZ93BHQY9PT8a57SEXRnlH2eSSGUqQ6cFcDuPxqxqzy3tpNsidgQIx8pA65z7dOtQ9XoO+hgyWF/JqKSpGkYVg6Oq4298fSiuq/tIyaL9kWALKYBGC0XTjHBH0op3YuXzORjjhj8lbm5SMAeXljxg5HP4VoQadaz3UARopDNhRL94ZJxmqN5p8ly8AljJJO3BbrnoB/PPtVmHR4GtrZIp5QsLfMM9TnOOO3+PtV3W4ka99fm3RNElmdxbEfOAPL4LZC/99fpWekdn5Vyw/eTRqGGcbeGyc/l+tJJLbsJrXZK3lgOrIoAxg85788fgaz5NNjjvYAt0yLcnYH9WJAwR6dvw96RN2pHqWo6ayeHLeZ5xdRQyrO0IBGIujL6nGT6VZjsIbG7uwoRLJ1WeMxHcu0x/MPzU8Vztve3/AIY1V9GWRNTFwBGkvJ25B4K/QfzzVixjjSyv9Ns829+WzOrDnr09wV9PWpLTuitYtF4gN0Joj55wY7bdgFQcHPTPHr7Vc8TQXyw6fbW1huEPzrIifcY44GOOowc9auaTqMC+fZWtmlt5A/dvkEzsOvvzx1q/Lqsd5a7YQbhpPlMUfqOoP59eO1CKKmm6hqlzYadNbWyzXMoy6u2wKRwfyOaPGGmprtpK7Ax3tqOQp52g8jjseajS/kstTisJ/LhkkTdbpC2ckcsp44NTWQvbq+luJJVjRBtVQmTJn1PagR5jAl5plwhRg6RMdsb8hlJ5H0NdHPpunapYLKfMtY5AHZN2R79K7DxFpelarYSec62c1tEVRkYIuSMgEf4Vx3hzT2hTNxL5kSAHJHUjp+tNsI7m80Lwwxx4AV8FV7ovYVVvZ3itmdAAF+UbqvbvlLtzk8D0+lZetXrwWhjgRWZl53gEhu1C0BnF6hMzzoiEvtGDkcBa6DS9ZT7IftkCvGrpFGoyOpxjOfTmuZtIdQzKrCQo42sQO3pn0ratNFlmljgN2wgtz9okjXG7OR0qpNWsRHc9NSx062s5EWCOOAr847Y96pXC2Wj6NcX8KItuU3KgBUVynjS+v4rBbOyuJZPPI3gbeFxnqP5VmX02pTaPZ2VxdSCHaA4HOKjl7lXRcPiiOe4k3W0YEp2qu5uBjNZGparp9w+2KLYqRBVVD1bHP4CueuNOuhe7IZmcA4yCRge9SJpVxG+EkYEHG4HAI9K0tFEOWh1On61aiNlKozWqAQIxPzHGDkZ5rdsPGukSRG2lDhggDAjq3cLgk155Hpk8EZkdi5fl8HJ/CoGtfLkkZJDbFcMvY5+tK0WVz2PU49W0Rr66gypESApukKFzgkgc1U8Na/b6zqU9rcwoi/M0JMrfKB2688d680MF3NJJMbp3bJJlZiS3bOajht75U/d7wFYkEHBzjmjkiHMe6aeNLvIt1tLG4JbguexweKK8St5dQsQ06uygcEB+cen6UUvZruPmOz8R32LLTl064gkmbZOAVO44AKkj/Gsnw1qjQ6jcW10jbZmMyMqFhGe4AAJ7DH0rOg8+DVfs8gMmJgA3GVJGCPTHStbXdJjsR9nto5ZDgFpN2OTg/wBW/KiySsCbuS6zJpjTMxvTbz7xHOgjZW29RgEDnk9PUVBqiac0VpPavKhWJTD5oIIC/wAXH0JFbB8LG5eWadI55pcygqTuVs9BgkAdPep9Z02aH7HaxWvmShXEoCf6pOWj7YPy9u3ejRbCfc3LN9K1nwmF0aIR3QVZllIIk8xSc/MeT3GORzTbby47G31XNzJL5hhvmYfOW6ZI7YYDHsxrO+Gd7Z+HvFM8VzGJIrqPCE9YnGScDtnjp/Suq1mxsZvGMlxdRNHY6mAjKspCxy8AsQOpORz2pNDRlSWAg1F2trOS5vLsvsCkAQH1OfY9am8OaUuh2l2Z0WJzMS0wlyCMdCM9uasJHJZ6jJp73S3Utv8AvEuFZQWXjAYA/KeSPwBqLVtdt5LW5sobcTXpOz7JKwBbJ+8fYUhlG4tbbVdai1aK8Q2lsASwbHzkbT+NLf3166rc2E0ENrG237RMCQR1yB+ftVuTSV/s0Wdt5aPK5kOTtGercfiOlZuuXrW9tPGInvIJYAN2QIsggc+hBBovqGxiXto02rMGulvFBBSRMDae/A710EUOyNbdABnrisbQLZ/LNy0CIQ2SqtgAnvVzWdUbSbEXCRb5ZXEa9sD1o3YLuZHiDWbyLU1s7LCRRj52/Dj6VlRNeRqJ40kuBM4XDuTubH6U6AXeqX80lyixhlz0Pbitfw7bSvdpp8FvJ5VtKJWcjG4HjPvVSJR12j2bWfh874THK8fmOh4OcZxXLXmrT395G2xLZREwJAzkd812F7fSWKTSvCDbjneWwAPxrzrV/EM+psnk6d5aMjRsIuNwY8UJX1CV76GhpN9Y6qyj7WYCGIOYiVHp82abqWradatMIGS6MR27Dz9TgdvxrCivbPR43DQqQybQRIcq49R9ayNPFy9w9xJHvWUEtk4NVYG9DVs7qNroeVi4UqWwoxs5/wA4FTyl0unR0WOMqAgHJyar6dp1zHdNPD+7RiF+U5H0rduxLb2sMqwJI5Zjt7cdvas2SrWMS515La0IeycuPlyxG1j61WTX7GaBDP8Au5M/MuCwxXeeF/h7pvjHSJ5r2/khvEkYC3jZcRj+HdntzUY+AV355gPiCx80LuKbWyB64qko2K0OXtdY0aSf7PHK6KQAsjIcZHtT5RI11GsQCRHPbn/61bGqfDo+GobeB76C7a6DmGSBSCGH196zxaTo0G+4iUO20lsYf1xUtLoDjfYzksbiOCaS1KyLGxBjfLFj60VqXtjYeVPPaTvH5JYSkbgwx1+ooosw5Snc6jFFaC6uLiKe5Zi3yjAZw2M49N35ir6+IpL7TLMiMLO6sZpI8qT2AH03ZrmZprVHlSUMqBwwZlz8p6Dp6YHvjtW4Z7aLSo47MKt0gRI8nI2gKSzDtk5FaNaCewTy6oFDWjSxIV6LcsrMPXIHcduvFWbOXXomEj3hkjwI3SSdmyp4PUZ6e9ZWnapqtuDA0X2kqCEEi7TjH978utWDqWuBt0lvDsOd2GA+mOeuakalGxt3GiXUVlJNbrFGzoJkaJNu0kD0P+fStbw3t8ReHp7G+uTI8Tsj4Ygo3Zs9SO/+NedI+ryXBuEC71YFdxHUCtbStRv9JvU1OKAJ5g2XKCPduHZh9Mnv+dFmHNc63K2yRW5CR6xYv5YgiUgXCHGTgckEHOfUVo2EcDRPqIUNdPGzu65BBAyV9uRz9KfNa3d/Yxa1pr7LmOMEQqN3nqOSBzxxj34AxWPAJprv+2raO4trZZ9s6SbSd5IViUz0zgHPrnnmkUaml39rfQ/a9Qhna4STyfLGBHHuAy6/h+PauZ1aKZrgWL6hHMY5STHD8q8njODk1Nq8dvYatLbzOWs5V82NEY/K/XacHP4+lZ/hqzmk1iV5mTy4/nESDAj9OP1+lKwjqbeFYbWKBCM45I7ev+fauK1zV49Ym+zDeltExCKTlGOcE8CuzvHmWwuHtxmXbtjWuAtdBup4JIoSyzSScZ7n9f0qo2tcJHajwK19oun3EN+YUjhy+35t7HvnP4VV8TKdN0fRDbxJn7MSzeWMsQcZJxXSaMdQsNEis59Cefy12hwYwce/INcINZ1q2lnspdRkeOX51ijIIVD29sdxS3J6GVB4h1O8gnW8vGFnsI254z2B7n8aqCMSSEQRyt5SZDKw2nPrmn+REZJD5CvGMkPnADD26fhT7CKSSxMt22bctnbkDGPTFVdAtStZ21q8SmWKQq4AGTxu9vSrunWUtvaSO0KLIZMAZ+6tKl7YeaIo/MEMfJY8kHtj0Fa+k2EslorbWzIWkUkgFl9ealsaV2QRNPJY+UIihYlvvY2gc5/GmXUl2+nRRPGU3SY3bh/kZNXDJBEqsD93IAbvWja2Uc+myzmFfJIZ95IGCPahsqx0fwo+zxXesMFaRhGhIVNx4IHFdbq2ryaV4ge6k8vy5SYjG0BztC5B3E9zxjFee+AvFmiaL9pa4BuJbshYhF047HJz6V2mr3b6re26lDbxggZXLkfMOg4qfUlI434pa9vsvDlzYbIpoi4ZQBtUkfy61w6+JY18p3WJ5baQsem1gecLzn/9VexvpPhvUoJdK1S5MjXGwg7Nrx9yDnJHTOc1lR/DHwRJGksT3L5l8sKswLdcZx6VaceozyqPUp7/AFG5i010aGSPewkGM4BHf60V1mu6Loem6/daBa2/MKsGkKjdg7MZPfgsPxoougsYet6ZZ2XiOSzlUxoRuyGJ28fL6/MQc846+lUrUC0uGVypQsQu/gN0+XHtiuz8Z2FsJ47jcPtEsZeUegXaBggcd+vJrz64S7kuQ7SvKscmwxt2HH4Z5+tCdyOtjodNvrPUbmK1mtpxK0uA8TbUA/unv/IVuXngnTJS7W9tKGL8lZM84zjBPvWVoel315dxtDbyMsUYfY6lcsSMAn3HXJ7HFdhpkiTRSXN1IrzbmhEYOI0dWxjaeM9Rn3qdti4xVjmj4GtN0ii3mUSHIGR8g5469Pr6VV1Lw3e6ZALjRhJCIsFoV+bce7Ek9McY/Ot3xHeahYwxXltceVbxSKJI4gW3BhyW9AD/ADrn9Q168iu5LObWpWRht2JEpG0ryd/HA79T7VSuOyR2lr9q8OwWeoO80+nzWyiaHgmI4AJC9dvsOmKm1zSJDKzaM1qy30WJ4Z3IUnGVcY/i/wDrc1wM66qUF891cyFFPkNI5zImMnGWB289vWp9LPiPToV+xMkaT5k8qXHmN3yB2yMetFiVfqXrDUPLfzdVfdNHHtMbIxaQr3U+vrn8K2dMntLzRTfQWrQyyvsIPoM9Pb/GuS1/xtqUsA0yaGJxIwJwMMy4wOBx3/SulsmC29tDDIFiRAfJIyyscE5bOPXjFJrqNFLxdf8A9n6C6pI6SP8AKhQ4Of8A9VcHo99drp98DcqkaLv3ycnPop65PtXQ+NZZL66S1jJ8qPJOFyN319qwIdFuI4GEkWfmITI69ieeP5VaSsJs908Nagmr+Hbe4tA0m6NQ5UZ2HuDXK6vq1jFcXkVq1tEkVvtxEnmGUufmVTjj9Oa4rw5qN14cEqJ5YkmXKB1LYx364zWNOLjTNTR9QLqpYlo1k5APY46dehpcok10L+kv52unTooJAswxFG6gFT19eK1rtjo9vsaSNkPAIQEqSenGT+lQrqtn4Y8QG8Ma3coQKoEhXaCOCODnrUOo6mLzxEMSAWskKkYIZQep6dKloehTluHiiuppBvBKqdsQHH+Nbeh64t0yxmGUSW8TJ84AGD0zjFZWtRSSxCOFsknJYDO49hnFWdG00wQk3Rf7XL952bdkdqNGgiy69nATn58nkcf5xW7Y3MFro8lvzhFYliQBz2PNVLaNIY2Xb8xG3d6/rWJel45I/PuWVGfld/BH0pWKVomdb3U8+swCOOGIRsA3yAhjn1xkfnXr+pRTXcaQW+BLIwVCW2gfOO5rI+GvhjSNTk1O6vLC2u2R1VdxxtJ54x0PFdL4nsDbX6x2yyKoAcfPngnPHHGPfNDEmaOp27XWuwGN3kRoo03jPz/eJI6A/Wsyz8O6lBJCkc/lxeeWVCDjrgHg7c9M8GqreMl8NaVFvPm38sqx2wlXeu0cEbuOmT2qnpvxU1LUkZpbSwEkcu3IywHoc569eKEnYLnPeJTND8T9ZuoLYTMgSNQXCANgHOc+xorB17xBf674jlnLJBGJQ7CIFR6Esfw9fSiqFc6bVI59WvFDyWnzphFWZT8uc8nP68dK57TPD0B8RmwvZo2UjdujljIXuOc89eldCvjTQ23SpMocABTt2swwODxntjn0+lJB4i0CKeW6S5YFwd+18E/h9alJoejLOrPNp2nyxWhaG4kj8obXLHd3OTntx9a4PTNVuNBkl0660+DUN8hk2yhTsJHUDt3zWn4i8X6fPcwwwEywr8zSdwfp371iX96tjJc21vaEXIVVV+oXnOQO/HFXGLW4nI1r3xlYXNq+myaHDaq+Q7ROuEbpkAAA9K52bT2v71IYFcSAbSCSSQD97k+mMVkosrSqGBZ3YD3PPT9a9Dt7rSbf7RODEbwBvJgwzNjGFyMdTxmm1y7C3OrhsLTTraxhu7h5L2KFvJNvbHCBFLBS2ep6Y6Z7CuL166tfssTeXdWczykZ8vaCCCOuSB16Va1fxLqNtf2v2dFdY1BmhIAZmxzgkZAHHp+VLY6lD4kvI/7UuIIoYl3RyyyKm5u4IPSpsUck+l7I2Zi0spP7t2PG0Dr79q6vwhZy29mJbhmUMQRhgQcDr6//AKq53XNSuJ9Zllsw4AyqnqNucDjGOgFdP4WuNQmiY3MLCAAeTJtwG9cVT2FEzdRunE11OTEVjLFXxkn0/nVSymupPOnldpSEAUsxwoz0GelbmuafaQBoY7ZEScEyyZPXPGOetY+n31vBcvpm2Rgo8wFunTP51GlhW1NOJrSW4hHm2UcoRRiZigLHptJ5z09qwfEelTwahHHcxTbpGDAP8u4Z5J9B71PqhhaUIkSuflw7naFB9Ock/QVfMTareSmJHjdflQ+Zvz7DIP5UX5dRtWehx96bufVVka3CszjYoHBA6Dn2rcYvdQRObYxgNyPu96v6vZS6ZaRzsvn3bnauE+59R0Bqpa3N7IiC4jxtwOfX6Yqm7q4rdwu7xtOgd0AL4wCfX8aYb9Y9O+2vO3ngcYbBB+hpdStJ7lAibSCwJyMYqW7tIYBbwNAXjTBZSQFf1PrSVrAvIvwa55wiDRM0jYyEkBHT6dfaqOrLDFPDNKszmIklXXpz0zmmXX2NCiJOYVUjIXA25qXUHtoy0v2jZFGduW+YE46DrzQ0B6Z8MrJ7bw/f3y2stzBcTI8Sxv8AM7DqcZ4xmvQJrRBdm9GmzSO8G1wGXBGOhXPJ+hrxa08Zap4e8PiO2nhjtlBKuUO75/oarr4t1+Sze6TxDd7FjBf5/ucZNRbqBtfFpfslr4fuWtZYkikd3iycpk9Bnp9K89sNcTTrllEBitCc5CAvu+vT1/KtnUDd61pcV1e6lcXal/Mja4YsuOhwWPFcXqIEWoiIM0kETBcq3BPfH+e1arzGdAt9aazdyW0EKxJJ8qknDvyM8fnRVTTdJ/4mUUsG4rjKRjPU9OQf60VEtwOnXSbMybmVccYXOe3Qnv8AWrC2VuYwsaCOMscKvHJ6/h7dKlsLm21GwW5329ncyZY2k8oUkDHK5x8pJwAfQ4JxWSfE9pFCPOhuV5wrAKQevfdUWlewrIxbrS0FxJJ5RSGNwpYKNvXAHBz+n9KmWzjhUSXMkbEDb5hbe56c8enp7Voqi6lo+bVFjNwDhCQGbsTgdu3Aqrqhfw81tbXKtKzRgt5pA5PBI9R/+r3rTVoma00J9AsYJL6K6t51k8tiN/lkFGxwMY56itS48M2k0slwDILl4yAzNtAOOuO/uD1qs3+k+G/tNgzW0xIywx83bPPocjPH8NS2NnrN7YW8rytIqNtmfPOOnQAZ4OeSPxNSn3HBWVijbWcIuBpcyWkyozI1y8iIo4BwcnGRg+/61W1B4JTC0BtBC7cuE3swzg8dRjrjmoJ7DTpr5bJ7R7e88wqYiWO7jhlPv/StXTfC7XkBgtkkeVCT5XA2YGMkkjnnt7ZqtEOxNceGYNolyJGVdwAUhh3BwcVQXVby0toYrMNHwVlR1B2Nkk9+uD7dO9b0Meq2FpJYfYZJbiE4aUzBoxg8dSDn3PHvXM6le3Q1JjNE1sTkGPIZs4yMEZH60o3bKkrWaOyeKXU7C2FzmNzgyqD8vHY//WrD1jQ006cX8zRpGG+WRX6emB1H5Uzwveape38wuZPMto48KduAD9PXFaPiyWS40qKyZB5bHc0ucbSO36+tO2ona1zmZVgbGpXMqTWqvs2pjcWHIxnt7gV0PhrWLf7HJc3ts0QBLCYg4K+gOTz9BWZZeG7fVdJgELECKQowLkhznkjrj6ACue1u0WHUJ4I2KLb/ACqWJy+PTHH86qyfugnZna+LZpI7aKa1Edx564VTkZz1OM+mK49dTkjjSG5fzJOrjaAEPQDjrWpNqpvtHs5Lry/PKNHxgg46ZA+61c5K0v32hYSMeUZThgO+e4pKNtGDd3qbU+upa2ymDDndtwV4/OprC9bUbU3VxErNHkIT2HsO1YEum3Eyjc8ax43KT8v6Vc0X7ZHZy7bWZ7ZH2+Ygxye2T39qVkloStiK10691jViYUG0EuGcfLgdK173Sr37VFap5ckkf71wqMCGx0+8Qa7LRLH7LYKHUiSQlzuOevatCaeLTbWW+uAFhiXOSPvHsKbk2Wl3PP8AU7uU6ckElkzknuQct09zUUcEtjoM0clsxEuCyqccZre1We71EpIt3pyRbFZF8yN2wRzxu/TGa4/WdQuZ7h7XLFVOM5ABHHGPqKSdxW1H30ran9ns7FClnAdvLDluvT8+lWLLT3uZ0iaz81t/yknJ59sVd0TRnNyjwL8rDn5Rke3rXWvqGl+HAsb3NsL5vvMTnyweuQMnP+fqNsaLtlpVtZMsjxDzicLGOeeuT1+uB9aK5+bxTe6tI9r4a0+ee5+619KSqxg5yAudoH+8T+dFKxRLN4cis9OlukaH7RbBiZFg2l/lJ9ePTiuc12zt9lwVj2tErFmB++Ru/IcdKKKrqZMbL4cig0trkSgyQoZCwTBYDHy9cd+pB6VAIBqP2S6nO6STBAIyo9sHqOOlFFN7jZ0PiR5dGgstOsZWiji4JH8YwOCOnXmt3wZIb+0kMowsihyo6AjP/wBb8qKKzkH2w1izgm01AA6zTODvD4CkDg4GM9e5rNM8trEbtZZN7xPIcMRyh9R6jAP0oopGjNTwzqj6xozXE0SJLGSjMv8AHz19utc54njja7NqUwUl3iRThunTiiihbhLYt+GSsUXyrzuwTnrwP8ag8fTtFYR2y5xJIDnPpnt3oorTqQti34YVI/DiSRghnj8wlsHnHsBXC32o3NzcTxuykOx3HaBn8sUUU1uEjXNlFDNo9hgnzIVmEvQqzc9OhxU00LxS7BLkkkFioyQe1FFTPclla+img8tUuXVNoG0DFb/hKdZLO+Xyh/o8ioCTndkdT70UUkOJl6r41u0kX7JCsLRSkEs24Pj1GBRFqt1r8CTXj5LKdwHQ4oooY2WJLMW0IlWR/N5AccEY+lY99IYrWWf77qMjec8+tFFERoxH1i/lXyGuZQj9VVyF/IcV6P4P8C6TqFglzd+bNIxOVZsJx7DBP4k0UVo9gRs6xqw0Gb+zLC0hiEYyrqoAX6LjAooorIZ//9k=\"","module.exports = __webpack_public_path__ + \"static/media/TerrainLabels.7f9449c8.jpg\";","module.exports = \"data:image/jpeg;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/download.78c6357f.svg\";","module.exports = __webpack_public_path__ + \"static/media/pool.298f49b0.svg\";","module.exports = __webpack_public_path__ + \"static/media/information.149c37aa.svg\";","module.exports = __webpack_public_path__ + \"static/media/map-travel.6f3457d9.svg\";","import { connectRouter, RouterState } from \"connected-react-router\";\r\nimport { History } from \"history\";\r\nimport { combineReducers } from \"redux\";\r\nimport { articlesReducer, ArticlesState } from \"~/View/modules/articles\";\r\nimport { userReducer, UserState } from \"~/View/modules/user\";\r\nimport { SideDrawerState, sideDrawerReducer } from \"../modules/sideDrawer\";\r\nimport { LayerListState, layerListReducer } from \"../modules/layerListActions\";\r\nimport { MeasureDistanceState, measureDistanceReducer } from \"../modules/measurements\";\r\nimport { SelectionsState, selectionsReducer } from \"../modules/selections\";\r\nimport { UpdateAppLayersState, updateAppLayersReducer } from \"../modules/applayers\";\r\nimport { ChangeScaleNumberState, changeScaleNumberReducer } from \"../modules/mapActions\";\r\n\r\n\r\n\r\n\r\nexport type ReduxState = {\r\n // article: ArticlesState;\r\n // user: UserState;\r\n router: RouterState;\r\n sideDrawerContent: SideDrawerState;\r\n layerListObject: LayerListState;\r\n measuredDistance: MeasureDistanceState;\r\n selections: SelectionsState;\r\n appLayers: UpdateAppLayersState;\r\n mapActions: ChangeScaleNumberState;\r\n};\r\n\r\nexport const createRootReducer = (history: History) =>\r\n combineReducers({\r\n // article: articlesReducer,\r\n // user: userReducer,\r\n router: connectRouter(history),\r\n sideDrawerContent: sideDrawerReducer,\r\n layerListObject: layerListReducer,\r\n measuredDistance: measureDistanceReducer,\r\n selections: selectionsReducer,\r\n appLayers: updateAppLayersReducer,\r\n mapActions: changeScaleNumberReducer\r\n });\r\n","export const actionTypes = {\r\n CHANGE_CONTENT: \"[sideDrawer] CHANGE_CONTENT\"\r\n } as const;\r\n ","import { actionTypes } from \"./actionTypes\";\r\nimport { CreatorsToActions } from \"~/View/redux\";\r\n\r\nconst changeSideDrawerContent = (sideDrawerContent: string) => ({\r\n type: actionTypes.CHANGE_CONTENT,\r\n payload: sideDrawerContent\r\n});\r\n\r\nexport const actions = {\r\n changeSideDrawerContent\r\n};\r\n\r\nexport type Actions = CreatorsToActions;\r\n","import { Reducer } from \"redux\";\r\nimport { Actions } from \"./actions\";\r\nimport { actionTypes } from \"./actionTypes\";\r\n\r\nexport type State = {\r\n sideDrawerContent: string;\r\n};\r\n\r\nconst initialState: State = {\r\n sideDrawerContent: 'layerlist'\r\n};\r\n\r\nexport const reducer: Reducer = (\r\n state = initialState,\r\n action: Actions\r\n) => {\r\n switch (action.type) {\r\n case actionTypes.CHANGE_CONTENT:\r\n return { ...state, sideDrawerContent: action.payload };\r\n default: {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n // const _: never = action;\r\n return state;\r\n }\r\n }\r\n};\r\n","export const actionTypes = {\r\n UPDATE_LIST: \"[layerList] UPDATE_LIST\",\r\n UPDATE_CONFIGURED_LAYERS: \"[layerList] UPDATE_CONFIGURED_LAYERS\"\r\n} as const;\r\n","import { actionTypes } from \"./actionTypes\";\r\nimport { CreatorsToActions } from \"~/View/redux\";\r\nimport { ILayerListObject, IConfiguredLayersList } from '../../interfaces/ILayerListObject';\r\n\r\nconst updateLayerList = (layerListObject: Array) => ({\r\n type: actionTypes.UPDATE_LIST,\r\n payload: layerListObject\r\n});\r\n\r\nconst updateConfiguredLayers = (configuredLayers: IConfiguredLayersList) => ({\r\n type: actionTypes.UPDATE_CONFIGURED_LAYERS,\r\n payload: configuredLayers\r\n});\r\n\r\nexport const actions = {\r\n updateLayerList,\r\n updateConfiguredLayers\r\n};\r\n\r\nexport type Actions = CreatorsToActions;\r\n","import { Reducer } from \"redux\";\r\nimport { ILayerListObject, IConfiguredLayersList } from \"~/View/interfaces/ILayerListObject\";\r\nimport { Actions } from \"./actions\";\r\nimport { actionTypes } from \"./actionTypes\";\r\n\r\nexport type State = {\r\n layerListObject: ILayerListObject;\r\n configuredLayers: IConfiguredLayersList;\r\n};\r\n\r\nconst initialState: State = {\r\n layerListObject: {} as ILayerListObject,\r\n configuredLayers: {} as IConfiguredLayersList\r\n};\r\n\r\nexport const reducer: Reducer = (\r\n state = initialState,\r\n action: Actions\r\n) => {\r\n switch (action.type) {\r\n case actionTypes.UPDATE_LIST:\r\n return { ...state, layerListObject: action.payload };\r\n\r\n case actionTypes.UPDATE_CONFIGURED_LAYERS:\r\n return { ...state, configuredLayers: action.payload };\r\n default: {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n // const _: never = action;\r\n return state;\r\n }\r\n }\r\n};\r\n","export const actionTypes = {\r\n CHANGE_DISTANCE: \"[measure] CHANGE_DISTANCE\",\r\n CHANGE_AREA: \"[measure] CHANGE_AREA\"\r\n};\r\n","import { actionTypes } from \"./actionTypes\";\r\nimport { CreatorsToActions } from \"~/View/redux\";\r\n\r\nconst changeMeasuredDistance = (distance: number) => ({\r\n type: actionTypes.CHANGE_DISTANCE,\r\n payload: distance\r\n});\r\n\r\nconst changeMeasuredArea = (area: number) => ({\r\n type: actionTypes.CHANGE_AREA,\r\n payload: area\r\n});\r\n\r\nexport const actions = {\r\n changeMeasuredDistance,\r\n changeMeasuredArea\r\n};\r\n\r\nexport type Actions = CreatorsToActions;\r\n","import { Reducer } from \"redux\";\r\nimport { Actions } from \"./actions\";\r\nimport { actionTypes } from \"./actionTypes\";\r\n\r\nexport type State = {\r\n measuredDistance: number;\r\n measuredArea: number;\r\n};\r\n\r\nconst initialState: State = {\r\n measuredDistance: 0,\r\n measuredArea: 0\r\n};\r\n\r\nexport const reducer: Reducer = (\r\n state = initialState,\r\n action: Actions\r\n) => {\r\n switch (action.type) {\r\n case actionTypes.CHANGE_DISTANCE:\r\n return { ...state, measuredDistance: action.payload };\r\n case actionTypes.CHANGE_AREA:\r\n return { ...state, measuredArea: action.payload };\r\n default: {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n // const _: never = action;\r\n return state;\r\n }\r\n }\r\n};\r\n","export const actionTypes = {\r\n CHANGE_SELECTION: \"[selections] CHANGE_SELECTION\",\r\n};\r\n","import { actionTypes } from \"./actionTypes\";\r\nimport { CreatorsToActions } from \"~/View/redux\";\r\n\r\nconst selectionUpdate = (selections: Array) => ({\r\n type: actionTypes.CHANGE_SELECTION,\r\n payload: selections\r\n});\r\n\r\n\r\nexport const actions = {\r\n selectionUpdate\r\n};\r\n\r\nexport type Actions = CreatorsToActions;\r\n","import { Reducer } from \"redux\";\r\nimport { Actions } from \"./actions\";\r\nimport { actionTypes } from \"./actionTypes\";\r\n\r\nexport type State = {\r\n selections: Array;\r\n};\r\n\r\nconst initialState: State = {\r\n selections: [],\r\n};\r\n\r\nexport const reducer: Reducer = (\r\n state = initialState,\r\n action: Actions\r\n) => {\r\n switch (action.type) {\r\n case actionTypes.CHANGE_SELECTION:\r\n return { ...state, selections: action.payload };\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\n","export const actionTypes = {\r\n UPDATE_APP_LAYERS: \"[appLayers] UPDATE_APP_LAYERS\",\r\n UPDATE_ALL_APP_LAYERS: \"[appLayers] UPDATE_ALL_APP_LAYERS\",\r\n UPDATE_LAYER_ORDER: \"[appLayers] UPDATE_LAYER_ORDER\",\r\n ADD_EXTERNAL_LAYER: \"[appLayers] ADD_EXTERNAL_LAYER\",\r\n UPDATE_LAYERS_INFO_SETTINGS: \"[appLayers] UPDATE_LAYERS_INFO_SETTINGS\",\r\n UPDATE_DYNAMIC_MAP: \"[appLayers] UPDATE_DYNAMIC_MAP\"\r\n};\r\n","import { actionTypes } from \"./actionTypes\";\r\nimport { CreatorsToActions } from \"~/View/redux\";\r\nimport { AppLayer, LayersInfoSettings } from './reducer';\r\n\r\nconst updateAppLayers = (appLayers: Array) => ({\r\n type: actionTypes.UPDATE_APP_LAYERS,\r\n payload: appLayers\r\n});\r\n\r\nconst updateAllAppLayers = (allAppLayers: Array) => ({\r\n type: actionTypes.UPDATE_ALL_APP_LAYERS,\r\n payload: allAppLayers\r\n});\r\n\r\nconst updateLayerOrder = (isForUpdate: boolean) => ({\r\n type: actionTypes.UPDATE_LAYER_ORDER,\r\n payload: isForUpdate\r\n});\r\n\r\nconst addExternalLayer = (externalLayer: AppLayer) => ({\r\n type: actionTypes.ADD_EXTERNAL_LAYER,\r\n payload: externalLayer\r\n});\r\n\r\nconst updateLayersInfoSetttings = (layersInfoSetttings: LayersInfoSettings) => ({\r\n type: actionTypes.UPDATE_LAYERS_INFO_SETTINGS,\r\n payload: layersInfoSetttings\r\n});\r\n\r\nconst updateDynamicMaps = (dynamicMaps: Array) => ({\r\n type: actionTypes.UPDATE_DYNAMIC_MAP,\r\n payload: dynamicMaps\r\n});\r\n\r\nexport const actions = {\r\n updateAppLayers,\r\n updateAllAppLayers,\r\n updateLayerOrder,\r\n addExternalLayer,\r\n updateLayersInfoSetttings,\r\n updateDynamicMaps\r\n};\r\n\r\nexport type Actions = CreatorsToActions;\r\n","import { Reducer } from \"redux\";\r\nimport { Actions } from \"./actions\";\r\nimport { actionTypes } from \"./actionTypes\";\r\n\r\nexport interface Metadata {\r\n title: string;\r\n content: string[];\r\n}\r\n\r\nexport interface FieldInfo {\r\n fieldName: string;\r\n fieldAlias: string;\r\n accuracy: string;\r\n units: string;\r\n}\r\n\r\nexport interface MapLayer {\r\n layerName: string;\r\n layerUrl: string;\r\n layerIndex: string;\r\n layerMetadata?: Metadata[];\r\n layerMetadataUrl?: string;\r\n fieldInfos?: FieldInfo[];\r\n visible: boolean;\r\n show: boolean;\r\n showFieldInfo: boolean;\r\n layerOrderNum: number;\r\n}\r\n\r\nexport interface AppLayer {\r\n mapName: string;\r\n mapUrl: string;\r\n wmsUrl?: string;\r\n metadata?: Metadata[];\r\n metadataUrl: string;\r\n mapLayers: MapLayer[];\r\n show: boolean;\r\n orderNum: number;\r\n selected?: boolean;\r\n type: \"trusted\" | \"external\" | \"dynamic\"\r\n}\r\n\r\nexport interface LayersInfoSettings {\r\n [key: string]: Array;\r\n}\r\n\r\nexport type State = {\r\n appLayers: Array;\r\n allAppLayers: Array;\r\n externalLayers: Array;\r\n dynamicMaps: Array;\r\n isForUpdate: boolean;\r\n layersInfoSetttings: LayersInfoSettings\r\n};\r\n\r\nconst initialState: State = {\r\n appLayers: [],\r\n allAppLayers: [],\r\n externalLayers: [],\r\n dynamicMaps: [],\r\n isForUpdate: false,\r\n layersInfoSetttings: {}\r\n};\r\n\r\nexport const reducer: Reducer = (\r\n state = initialState,\r\n action: Actions\r\n) => {\r\n switch (action.type) {\r\n case actionTypes.UPDATE_APP_LAYERS:\r\n return { ...state, appLayers: action.payload };\r\n case actionTypes.UPDATE_ALL_APP_LAYERS:\r\n return { ...state, allAppLayers: action.payload };\r\n case actionTypes.ADD_EXTERNAL_LAYER:\r\n return { ...state, externalLayers: [...state.externalLayers, action.payload] };\r\n case actionTypes.UPDATE_LAYER_ORDER:\r\n return { ...state, isForUpdate: action.payload };\r\n case actionTypes.UPDATE_LAYERS_INFO_SETTINGS:\r\n return { ...state, layersInfoSetttings: action.payload };\r\n case actionTypes.UPDATE_DYNAMIC_MAP:\r\n return { ...state, dynamicMaps: action.payload };\r\n default: {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n // const _: never = action;\r\n return state;\r\n }\r\n }\r\n};\r\n","export const actionTypes = {\r\n CHANGE_SCALE_NUMBER: \"[map] CHANGE_SCALE_NUMBER\",\r\n};\r\n","import { actionTypes } from \"./actionTypes\";\r\nimport { CreatorsToActions } from \"~/View/redux\";\r\n\r\nconst changeScaleNumber = (scaleNumber: number) => ({\r\n type: actionTypes.CHANGE_SCALE_NUMBER,\r\n payload: scaleNumber\r\n});\r\n\r\nexport const actions = {\r\n changeScaleNumber,\r\n};\r\n\r\nexport type Actions = CreatorsToActions;\r\n","import { Reducer } from \"redux\";\r\nimport { Actions } from \"./actions\";\r\nimport { actionTypes } from \"./actionTypes\";\r\n\r\nexport type State = {\r\n scaleNumber: number;\r\n};\r\n\r\nconst initialState: State = {\r\n scaleNumber: 0,\r\n};\r\n\r\nexport const reducer: Reducer = (\r\n state = initialState,\r\n action: Actions\r\n) => {\r\n switch (action.type) {\r\n case actionTypes.CHANGE_SCALE_NUMBER:\r\n return { ...state, scaleNumber: action.payload };\r\n default: {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n // const _: never = action;\r\n return state;\r\n }\r\n }\r\n};\r\n","import { createStore, applyMiddleware } from \"redux\";\r\nimport thunkMiddleware from \"redux-thunk\";\r\nimport { composeWithDevTools } from \"redux-devtools-extension\";\r\nimport { routerMiddleware } from \"connected-react-router\";\r\nimport { createBrowserHistory } from \"history\";\r\nimport { createRootReducer } from \"./createRootReducer\";\r\nimport { ReduxState, ReduxAction } from \"./types\";\r\n\r\nexport const history = createBrowserHistory();\r\n\r\nexport const store = createStore(\r\n createRootReducer(history),\r\n composeWithDevTools(\r\n applyMiddleware(thunkMiddleware, routerMiddleware(history))\r\n )\r\n);\r\n","import {\r\n // @ts-ignore\r\n useDispatch as _useDispatch,\r\n // @ts-ignore\r\n useSelector as _useSelector\r\n} from \"react-redux\";\r\nimport { Dispatch, ReduxState } from \"./types\";\r\n\r\ntype UseDispatch = () => Dispatch;\r\nexport const useDispatch: UseDispatch = _useDispatch;\r\n\r\ntype UseSelector = (\r\n selector: (state: ReduxState) => TSelected,\r\n deps?: ReadonlyArray\r\n) => TSelected;\r\nexport const useSelector: UseSelector = _useSelector;\r\n","\r\n\r\nlet appConfig: any = {};\r\n\r\n// export default appConfig;\r\n\r\nfunction getAppConfig(configUrl: string) {\r\n return new Promise ((resolve) => {\r\n fetch(configUrl).then(r => {\r\n r.json().then(json => {\r\n for (const key in json) {\r\n if (json.hasOwnProperty(key)) {\r\n appConfig[key] = json[key];\r\n \r\n }\r\n }\r\n resolve(appConfig);\r\n })\r\n });\r\n })\r\n\r\n}\r\n\r\nexport { appConfig, getAppConfig }\r\n","import LayerImage from 'ol/layer/Image';\r\nimport { Options } from 'ol/layer/Image';\r\nimport ILayer from './ILayer';\r\n\r\ninterface ILegendINfo {\r\n legendSymbol?: string;\r\n showLegend?: boolean;\r\n isTemporary?: boolean;\r\n}\r\n\r\ninterface DomainLayerOptions extends Options {\r\n title?: string;\r\n legendInfo?: ILegendINfo;\r\n layerId?: string;\r\n}\r\n\r\nexport default class ImageDomainLayer extends LayerImage implements ILayer {\r\n public layerId: string;\r\n public title: string;\r\n public legendSymbol: string;\r\n public removable: boolean;\r\n public show: boolean;\r\n\r\n // private _title: string;\r\n // private _legendSymbol: string;\r\n // private _showLegend: boolean;\r\n // private _isLegendTemporary: boolean;\r\n\r\n constructor(opt_options?: DomainLayerOptions) {\r\n super(opt_options);\r\n this.layerId = opt_options?.layerId || \"\";\r\n this.title = (opt_options && opt_options.title) || \"\";\r\n this.legendSymbol = (opt_options && opt_options.legendInfo && opt_options.legendInfo.legendSymbol) || \"\";\r\n // this._showLegend = (opt_options && opt_options.legendInfo) ? opt_options.legendInfo.showLegend as boolean : false;\r\n this.show = (opt_options && opt_options.legendInfo) ? opt_options.legendInfo.showLegend as boolean : false;\r\n this.removable = (opt_options && opt_options.legendInfo) ? opt_options.legendInfo.isTemporary as boolean : false;\r\n }\r\n\r\n setVisibleIndex(index: number) {\r\n super.setZIndex(index);\r\n }\r\n\r\n getVisibleIndex() {\r\n return super.getZIndex();\r\n }\r\n // get title(): string {\r\n // return this._title;\r\n // }\r\n\r\n // get legendSymbol(): string {\r\n // return this._legendSymbol;\r\n // }\r\n\r\n // get showLegend(): boolean {\r\n // return this._showLegend;\r\n // }\r\n\r\n // get isLegendTemporary(): boolean {\r\n // return this._isLegendTemporary;\r\n // }\r\n}","import VectorLayer from \"ol/layer/Vector\";\r\nimport { Options } from \"ol/layer/Vector\";\r\nimport ILayer from \"./ILayer\";\r\n\r\n\r\ninterface ILegendINfo {\r\n legendSymbol?: string;\r\n showLegend?: boolean;\r\n isTemporary?: boolean;\r\n}\r\nexport interface VectorDomainLayerOptions extends Options {\r\n layerId: string;\r\n title?: string;\r\n legendInfo?: ILegendINfo;\r\n}\r\n\r\n\r\nexport default class VectorDomainLayer extends VectorLayer implements ILayer {\r\n public layerId: string;\r\n public title: string;\r\n public legendSymbol: string;\r\n public removable: boolean;\r\n public show: boolean;\r\n // private _title: string;\r\n // private _legendSymbol: string;\r\n // private _showLegend: boolean;\r\n // private _isLegendTemporary: boolean;\r\n\r\n constructor(layerOptions?: VectorDomainLayerOptions) {\r\n super(layerOptions);\r\n this.layerId = layerOptions?.layerId || \"\";\r\n this.title = (layerOptions && layerOptions.title) || \"\";\r\n this.legendSymbol = (layerOptions && layerOptions.legendInfo && layerOptions.legendInfo.legendSymbol) || \"\";\r\n // this._showLegend = (layerOptions && layerOptions.legendInfo) ? layerOptions.legendInfo.showLegend as boolean : false;\r\n this.show = (layerOptions && layerOptions.legendInfo) ? layerOptions.legendInfo.showLegend as boolean : false;\r\n this.removable = (layerOptions && layerOptions.legendInfo) ? layerOptions.legendInfo.isTemporary as boolean : false;\r\n }\r\n\r\n\r\n setVisibleIndex(index: number) {\r\n super.setZIndex(index);\r\n }\r\n\r\n getVisibleIndex() {\r\n return super.getZIndex();\r\n }\r\n // get title(): string {\r\n // return this._title;\r\n // }\r\n\r\n // set vectorLayerId(id: string) {\r\n // this.layerId = id;\r\n // }\r\n\r\n // get vectorLayerId() {\r\n // return this.layerId || '';\r\n // }\r\n\r\n // get legendSymbol(): string {\r\n // return this._legendSymbol;\r\n // }\r\n\r\n // get showLegend(): boolean {\r\n // return this._showLegend;\r\n // }\r\n\r\n // get isLegendTemporary(): boolean {\r\n // return this._isLegendTemporary;\r\n // }\r\n}","import TileLayer from 'ol/layer/Tile.js';\r\nimport { Options } from 'ol/layer/Tile';\r\n\r\n\r\ninterface TileDomainLayerOptions extends Options {\r\n title?: string;\r\n layerId?: string;\r\n}\r\n\r\n\r\nclass TileDomainLayer extends TileLayer {\r\n public layerId: string;\r\n public title: string;\r\n\r\n constructor(opt_options?: TileDomainLayerOptions) {\r\n super(opt_options);\r\n this.layerId = opt_options?.layerId || \"\";\r\n this.title = opt_options?.title || \"\";\r\n }\r\n\r\n}\r\n\r\nexport default TileDomainLayer;\r\n","import 'ol/ol.css';\r\nimport Map from \"ol/Map\";\r\nimport View from \"ol/View\";\r\nimport { Zoom, MousePosition, ScaleLine } from \"ol/control\";\r\nimport GeoJSON from \"ol/format/GeoJSON\";\r\nimport ImageWMS from 'ol/source/ImageWMS';\r\nimport LayerImage from 'ol/layer/Image';\r\nimport Projection from 'ol/proj/Projection';\r\nimport { addProjection } from 'ol/proj';\r\nimport { register } from 'ol/proj/proj4';\r\nimport Proj4 from 'proj4';\r\nimport TileLayer from 'ol/layer/Tile.js';\r\nimport OSM from 'ol/source/OSM.js';\r\nimport XYZ from 'ol/source/XYZ';\r\nimport { get as getProjection } from 'ol/proj';\r\nimport BaseLayer from 'ol/layer/Base';\r\n\r\nimport ImageDomainLayer from '../LayerManager/ImageDomainLayer';\r\nimport VectorDomainLayer from '../LayerManager/VectorDomainLayer';\r\nimport TileDomainLayer from '../LayerManager/TileDomainLayer';\r\n\r\nimport VectorSource from 'ol/source/Vector';\r\nimport axios from 'axios';\r\nimport { Extent } from 'ol/extent';\r\nimport { bbox as bboxStrategy } from 'ol/loadingstrategy';\r\nimport VectorLayer from 'ol/layer/Vector';\r\nimport Style from 'ol/style/Style';\r\nimport Stroke from 'ol/style/Stroke';\r\nimport { createStringXY } from 'ol/coordinate';\r\nimport { Geometry } from 'ol/geom';\r\nimport * as OlExtent from 'ol/extent';\r\nimport { transformExtent, transform } from 'ol/proj';\r\n\r\n\r\n\r\nexport default class MapManagerDomain {\r\n private divAnchor: string;\r\n private mapProjection: any;\r\n private config: any;\r\n\r\n public map: Map;\r\n public mapView: View;\r\n public layers: Array;\r\n\r\n constructor(divAnchor: string, config: any, mapProjection: any) {\r\n this.divAnchor = divAnchor;\r\n this.mapProjection = mapProjection;\r\n this.config = config;\r\n\r\n this.setMapProjection(mapProjection);\r\n\r\n let osmSource = this.getOsmAsTileLayer();\r\n\r\n this.mapView = this.createMapView();\r\n this.layers = this.createLayers(config.operationalLayers);\r\n\r\n this.map = this.createMap();\r\n\r\n const basemap = this.basemapLoader()\r\n this.map.getLayers().extend([osmSource]);\r\n\r\n // this.map.getLayers().extend([osmSource].concat(this.layers));\r\n // this.map.getLayers().extend([this.createLayer(this.config.defaultProjectBaseLayer)].concat(this.layers));\r\n\r\n // this.map.getLayers().extend(this.layers);\r\n\r\n // layers.forEach((layer: any) => {\r\n // this.addLayer(layer);\r\n // });\r\n // this.map.getLayers().on(\"propertychange\", function(e) {\r\n // console.log(e);\r\n // });\r\n }\r\n\r\n private createMap(layers?: Array): Map {\r\n let mapResult: Map;\r\n\r\n mapResult = new Map({\r\n target: this.divAnchor,\r\n layers: layers ? layers : [],\r\n view: this.mapView,\r\n controls: [\r\n new Zoom(),\r\n new MousePosition(\r\n {\r\n coordinateFormat: createStringXY(3),\r\n // projection: 'EPSG:32635',\r\n className: 'custom-mouse-position',\r\n target: document.getElementById('mouse-coords') as HTMLElement\r\n }\r\n ),\r\n // new ScaleLine({\r\n // units: 'metric',\r\n // bar: true,\r\n // steps: 4,\r\n // text: false,\r\n // minWidth: 140,\r\n // target: document.getElementById('footer-scale-bar') as HTMLElement\r\n // })\r\n ]\r\n });\r\n return mapResult;\r\n }\r\n\r\n private createMapView(): View {\r\n let mapView: View;\r\n // var testCr = getProjection(\"EPSG:32720\");\r\n mapView = new View({\r\n // projection: new Projection({\r\n // code: 'EPSG:32720',\r\n // units: 'm'\r\n // }),\r\n // center: fromLonLat([-121.1, 47.5]),\r\n // zoom: 7\r\n // projection: this.mapProjection.mapProjection,\r\n // projection: testCr,//getProjection(\"EPSG:32720\"),\r\n // projection: new Projection({\r\n // code: 'EPSG:3857', // this.mapProjection.mapProjection, //\r\n // units: 'm'\r\n // }),\r\n // center: this.config.center,\r\n // zoom: this.config.zoom\r\n // center: fromLonLat([23.316394, 42.695775]),\r\n // zoom: 12\r\n center: [3092259.979, 5279964.166],\r\n zoom: 9,\r\n maxZoom: this.config.maxZoomLevel\r\n });\r\n\r\n return mapView;\r\n }\r\n\r\n private createLayers(layerInfoSettings: Array) {\r\n // let layerInfos: any = [];\r\n\r\n // layerInfoSettings.forEach(layerSettings => {\r\n // // @ts-ignore\r\n // // to be removed\r\n // let id = getQueryVariable(\"id\");\r\n // if (id) {\r\n // let layerIdToShow = \"alocation_\" + id;\r\n // if (layerIdToShow === layerSettings.id) {\r\n // layerSettings.show = true;\r\n // }\r\n // }\r\n // if (layerSettings.show) {\r\n // layerInfos.push(this.createLayer(layerSettings)); \r\n // }\r\n // });\r\n\r\n\r\n // return layerInfos;\r\n let layerInfos: any = [];\r\n\r\n layerInfoSettings.forEach((layerSettings, inx) => {\r\n let l = this.createLayer(layerSettings);\r\n if (l.setZIndex) l.setZIndex(inx);\r\n layerInfos.push(l);\r\n })\r\n\r\n\r\n return layerInfos;\r\n }\r\n\r\n public addLayer(layer: any) {\r\n this.map.getLayers().extend([layer]);\r\n }\r\n\r\n public createLayer(layerSettings: any) {\r\n let title = layerSettings.title;\r\n let sourceSettings = layerSettings.sourceSettings;\r\n let legendInfo = layerSettings.legendInfo;\r\n\r\n // add format \r\n sourceSettings.format = new GeoJSON();\r\n let layerSource = new ImageWMS(sourceSettings);\r\n let layerObject = new ImageDomainLayer({ //new LayerImage({\r\n title: title,\r\n // name: title,\r\n source: layerSource,\r\n legendInfo: legendInfo\r\n });\r\n return layerObject;\r\n }\r\n\r\n public createFeatureLayer(layerSettings: any, layerId: string): VectorDomainLayer {\r\n let vectorSource = new VectorSource({\r\n format: new GeoJSON(),\r\n // loader: (extent: Extent, resolution: number, projection: Projection) => {\r\n // const url = layerSettings.url + \"&\" + \"SERVICE=WFS&VERSION=1.0.0&REQUEST=getfeature&TYPENAME=\" + layerSettings.params.LAYERS\r\n // \"&\" + \"OUTPUTFORMAT=geojson&SRSNAME=\" + projection.getCode() + \"&\" + \"bbox=\" + extent.join(',');\r\n // axios.get(url).then(response => {\r\n\r\n // }).catch(e => {\r\n // console.error(e);\r\n // })\r\n // },\r\n url: (extent: Extent, resolution: number, projection: Projection) => {\r\n return layerSettings.url + \"&\" + \"SERVICE=WFS&VERSION=1.0.0&REQUEST=getfeature&TYPENAME=\" + layerSettings.params.LAYERS +\r\n \"&\" + \"OUTPUTFORMAT=geojson&SRSNAME=\" + projection.getCode() + \"&\" + \"bbox=\" + extent.join(',');\r\n },\r\n strategy: bboxStrategy\r\n });\r\n\r\n let vectorLayer = new VectorDomainLayer({ //VectorLayer\r\n source: vectorSource,\r\n layerId: layerId\r\n // style: new Style({\r\n // stroke: new Stroke({\r\n // color: 'rgba(0, 0, 255, 1.0)',\r\n // width: 2\r\n // })\r\n // })\r\n });\r\n\r\n return vectorLayer;\r\n }\r\n\r\n public setMapProjection(mapProjection: any) {\r\n if (mapProjection.customMapPrjParams) {\r\n Proj4.defs(mapProjection.mapProjection, '+proj=utm +zone=35 +datum=WGS84 +units=m +no_defs')\r\n }\r\n\r\n let mapProjectionObject = new Projection({\r\n code: mapProjection.mapProjection,\r\n units: 'm'\r\n });\r\n addProjection(mapProjectionObject);\r\n register(Proj4);\r\n }\r\n\r\n public setBaseMap(baseMapType: string): void {\r\n let resultBasemap;\r\n switch (baseMapType) {\r\n case \"imagery\":\r\n resultBasemap = this.createTileLayer(baseMapType);\r\n break;\r\n case \"osm\":\r\n resultBasemap = this.getOsmAsTileLayer();\r\n break;\r\n case \"topo\":\r\n resultBasemap = this.createTileLayer(baseMapType);\r\n break;\r\n default:\r\n resultBasemap = this.createTileLayer(baseMapType);\r\n }\r\n\r\n this.map.getLayers().setAt(0, resultBasemap);\r\n }\r\n\r\n private createTileLayer(url: string): TileLayer {\r\n return new TileDomainLayer({\r\n layerId: 'TileBaseMap',\r\n source: new XYZ({\r\n url: url\r\n })\r\n });\r\n }\r\n\r\n private getOsmAsTileLayer() {\r\n return new TileDomainLayer({\r\n layerId: \"TileBaseMap\",\r\n source: new OSM()\r\n })\r\n }\r\n\r\n public basemapLoader() {\r\n let testBasemap = \"https://services.arcgisonline.com/arcgis/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}\";\r\n // let baseMapSource = new ImageWMS({\r\n // url: testBasemap\r\n // });\r\n // let esriWorldIMagery = new TileLayer({\r\n // source: baseMapSource\r\n // })\r\n let basemapTileLayer = new TileDomainLayer({\r\n layerId: 'TileBaseMap',\r\n source: new XYZ({\r\n url: testBasemap,\r\n // projection: \"EPSG:32720\"\r\n })\r\n })\r\n return basemapTileLayer;\r\n }\r\n\r\n public getOperationalLayers() {\r\n return this.map.getLayers().getArray() as ImageDomainLayer[];\r\n }\r\n\r\n public removeLayer(layer: BaseLayer) {\r\n this.map.removeLayer(layer);\r\n }\r\n\r\n public setLayerIndex(newIndex: number, title: string) {\r\n let targetLayer = this.getLayerByTitle(title);\r\n targetLayer.setZIndex(newIndex);\r\n }\r\n\r\n public getLayerByTitle(name: string) {\r\n let layers = this.getOperationalLayers();\r\n let layer = layers.filter(l => name === l.title)[0];\r\n return layer;\r\n }\r\n\r\n public zoomTo(feature: any, zoom: number = 18, duration: number = 500) {\r\n const features = new GeoJSON().readFeatures(feature);\r\n const mapView = this.map.getView();\r\n mapView.animate({\r\n center: OlExtent.getCenter(features[0].getGeometry().getExtent()),\r\n zoom: zoom,\r\n duration: duration\r\n });\r\n }\r\n\r\n public goTo(extent: Array, fromCs?: string, toCs?: string, skipTransform?: boolean) {\r\n const mapView = this.map.getView();\r\n const coordinates = transformExtent(extent, fromCs || this.mapProjection.mapProjection, toCs || 'EPSG:3857');\r\n if (skipTransform) {\r\n mapView.fit(extent);\r\n } else {\r\n mapView.fit(coordinates);\r\n }\r\n }\r\n\r\n public transform(extent: Array, fromCs: string, toCs: string) {\r\n return transform(extent, fromCs, toCs);\r\n }\r\n}\r\n","import { IMap } from \"../MapManager/IMap\";\r\nimport VectorDomainLayer from \"~/AppDomain/LayerManager/VectorDomainLayer\";\r\nimport ImageDomainLayer from \"~/AppDomain/LayerManager/ImageDomainLayer\";\r\nimport LayersDomainManager from \"~/AppDomain/LayerManager/LayersDomainManager\";\r\n\r\n\r\nexport default class LayersManager extends LayersDomainManager {\r\n // private mapLayers: Array;\r\n // private map: IMap;\r\n private static instance: LayersManager | null = null;\r\n\r\n private constructor(layerSettings: any, map: IMap) {\r\n super(layerSettings, map);\r\n }\r\n\r\n public static getInstance(layerSettings: any, map: any) {\r\n if (!LayersManager.instance) {\r\n LayersManager.instance = new LayersManager(layerSettings, map);\r\n }\r\n return LayersManager.instance;\r\n }\r\n\r\n public addLayerAt(layer: VectorDomainLayer | ImageDomainLayer, index: number) {\r\n this.addLayer(layer);\r\n this.setMapLayerOrderIndex(layer.title, index);\r\n }\r\n\r\n // public getMapLayers() {\r\n // return this.mapLayers;\r\n // }\r\n\r\n // public setLayerMapOrderIndex(layer: any, index: number) {\r\n\r\n // }\r\n\r\n // public getLayerMapOrderIndex(layer: any) {\r\n\r\n // }\r\n\r\n // public addLayer(layer: any) {\r\n\r\n // }\r\n\r\n // public removeLayer(layer: any) {\r\n\r\n // }\r\n\r\n // public createLayers(layerInfoSettings: Array) {\r\n\r\n // }\r\n\r\n // public createLayer(layerSettings: any) {\r\n\r\n // }\r\n\r\n\r\n\r\n}","import VectorDomainLayer from \"~/AppDomain/LayerManager/VectorDomainLayer\";\r\nimport ImageDomainLayer from \"~/AppDomain/LayerManager/ImageDomainLayer\";\r\nimport Map from \"ol/Map\";\r\nimport ImageWMS from \"ol/source/ImageWMS\";\r\nimport GeoJSON from \"ol/format/GeoJSON\";\r\nimport ImageArcGISRest from \"ol/source/ImageArcGISRest\";\r\nimport VectorSource from \"ol/source/Vector\";\r\nimport axios from \"axios\";\r\nimport { tile as tileStrategy } from 'ol/loadingstrategy';\r\nimport { createXYZ } from 'ol/tilegrid';\r\nimport { Extent } from \"ol/extent\";\r\nimport Projection from \"ol/proj/Projection\";\r\nimport EsriJSON from 'ol/format/EsriJSON';\r\nimport VectorLayer from \"ol/layer/Vector\";\r\n\r\ninterface ILayerLoader {\r\n extent: Extent;\r\n resolution: number;\r\n projection: Projection;\r\n layerUrl: string;\r\n esrijsonFormat: EsriJSON;\r\n vectorSource: VectorSource;\r\n}\r\n\r\nexport default class LayersDomainManager {\r\n private mapLayers: Array;\r\n private map: Map;\r\n\r\n constructor(layerSettings: any, map: Map) {\r\n this.map = map;\r\n this.mapLayers = this.createLayers(layerSettings);\r\n }\r\n\r\n\r\n public getMapLayers() {\r\n return this.mapLayers;\r\n }\r\n\r\n public moveMapLayerByOrderIndex(title: string, direction: string) {\r\n const targetLayer = this.getLayerByTitle(title);\r\n const currentIndex = targetLayer.getZIndex();\r\n // const moveDirectionIndex = direction === 'up' ? currentIndex - 1 : currentIndex + 1\r\n const moveDirectionIndex = direction === 'up' ? currentIndex + 1 : currentIndex - 1;\r\n let newIndex = this.mapLayers.length - 1 - moveDirectionIndex;\r\n\r\n // targetLayer.setZIndex(moveDirectionIndex);\r\n\r\n const layerIndex = this.getIndexOfLayerByTitle(title);\r\n\r\n const layerToReorder = this.mapLayers.splice(layerIndex, 1)[0];\r\n\r\n this.mapLayers.splice(newIndex, 0, layerToReorder);\r\n\r\n this.reorderLayers();\r\n\r\n }\r\n\r\n public setMapLayerOrderIndex(title: string, index: number) {\r\n const layerIndex = this.getIndexOfLayerByTitle(title);\r\n const layerToReorder = this.mapLayers.splice(layerIndex, 1)[0];\r\n\r\n this.mapLayers.splice(index, 0, layerToReorder);\r\n\r\n this.reorderLayers();\r\n\r\n }\r\n\r\n public reorderLayers() {\r\n let layerIndexMax = this.mapLayers.length - 1;\r\n this.mapLayers.forEach((mapLayer, inx) => {\r\n let index = layerIndexMax - inx;\r\n mapLayer.setZIndex(index)\r\n });\r\n }\r\n\r\n public getLayerMapOrderIndex(layer: any) {\r\n\r\n }\r\n\r\n public addLayer(layer: any) {\r\n this.map.getLayers().extend([layer]);\r\n this.mapLayers.push(layer);\r\n }\r\n\r\n public removeLayer(layer: any) {\r\n this.map.getLayers().remove(layer);\r\n let layerIndex = this.mapLayers.findIndex(l => layer.title === l.title);\r\n this.mapLayers.splice(layerIndex, 1);\r\n }\r\n\r\n public removeLayerByTitle(title: string) {\r\n // const layer = this.mapLayers.filter(mapLayer => mapLayer.title === title)[0];\r\n const layers = this.map.getLayers().getArray();\r\n const layer = layers.filter((l: any) => l.title === title)[0];\r\n if (layer) {\r\n this.map.removeLayer(layer);\r\n }\r\n }\r\n\r\n public removeAll() {\r\n let layers = this.map.getLayers();\r\n layers.forEach(layer => {\r\n this.map.removeLayer(layer);\r\n })\r\n }\r\n\r\n public getIndexOfLayerByTitle(title: string) {\r\n let layerIndex = this.mapLayers.findIndex(l => title === l.title);\r\n return layerIndex;\r\n }\r\n\r\n\r\n public getLayerByTitle(title: string) {\r\n let layer = this.mapLayers.filter(l => title === l.title)[0];\r\n return layer;\r\n }\r\n\r\n public createLayers(layerInfoSettings: Array) {\r\n let layerInfos: any = [];\r\n\r\n let layerIndexMax = layerInfoSettings.length - 1;\r\n // let layerIndex = layerIndexMax;\r\n\r\n layerInfoSettings.forEach((layerSettings, inx) => {\r\n let l = this.createLayer(layerSettings);\r\n if (l && l.setZIndex) {\r\n const layerIndex = layerIndexMax - inx;\r\n l.setZIndex(layerIndex);\r\n };\r\n layerInfos.push(l);\r\n })\r\n\r\n return layerInfos;\r\n }\r\n\r\n private arcgisRestLoader({ extent, resolution, projection, layerUrl, esrijsonFormat, vectorSource }: ILayerLoader): any {\r\n const url = layerUrl + '/query/?f=json&' +\r\n 'returnGeometry=true&spatialRel=esriSpatialRelIntersects&geometry=' +\r\n encodeURIComponent('{\"xmin\":' + extent[0] + ',\"ymin\":' +\r\n extent[1] + ',\"xmax\":' + extent[2] + ',\"ymax\":' + extent[3] +\r\n ',\"spatialReference\":{\"wkid\":3857}}') +\r\n '&geometryType=esriGeometryEnvelope&inSR=3857&outFields=*' +\r\n '&outSR=3857';\r\n axios.get(url, { params: { 'f': 'json' } }).then(r => {\r\n\r\n var features = esrijsonFormat.readFeatures(r.data, {\r\n featureProjection: projection,\r\n // dataProjection: projection\r\n });\r\n\r\n if (features.length > 0) {\r\n vectorSource.addFeatures(features);\r\n }\r\n }).catch(console.error);\r\n }\r\n\r\n public createLayer(layerSettings: any) {\r\n const title = layerSettings.title;\r\n const sourceSettings = layerSettings.sourceSettings;\r\n const legendInfo = layerSettings.legendInfo;\r\n\r\n if (layerSettings.type === 'WMS') {\r\n sourceSettings.format = new GeoJSON();\r\n const layerSource = new ImageWMS(sourceSettings);\r\n const layerObject = new ImageDomainLayer({ //new LayerImage({\r\n title: title,\r\n source: layerSource,\r\n legendInfo: legendInfo\r\n });\r\n return layerObject;\r\n\r\n } else if (layerSettings.type === 'ArcGISImageRestService') {\r\n const layerSource = new ImageArcGISRest({ ...sourceSettings, projection: 'EPSG:32635' });\r\n const layerObject = new ImageDomainLayer({\r\n source: layerSource,\r\n title: title\r\n });\r\n return layerObject;\r\n\r\n } else if (layerSettings.type === 'ArcGISMapRestService') {\r\n const layerUrl = layerSettings.url;\r\n const esrijsonFormat = new EsriJSON();\r\n const vectorSource: VectorSource = new VectorSource({\r\n loader: (extent: Extent, resolution: number, projection: Projection) => this.arcgisRestLoader({ extent, resolution, projection, layerUrl, esrijsonFormat, vectorSource }),\r\n strategy: tileStrategy(createXYZ({\r\n tileSize: 512\r\n }))\r\n });\r\n\r\n const layerObject = new VectorDomainLayer({\r\n source: vectorSource,\r\n layerId: layerSettings.id,\r\n title: title\r\n // style: function (feature) {\r\n // var classify = feature.get('activeprod');\r\n // return styleCache[classify];\r\n // }\r\n // show: true\r\n });\r\n\r\n return layerObject;\r\n }\r\n }\r\n}\r\n","import MapManagerDomain from '../../AppDomain/MapManager/MapManager';\r\nimport LayersManager from '../LayerManager/LayersManager';\r\n\r\ninterface Props { }\r\n\r\n// to do change to namespace\r\n\r\n// singleton class\r\nexport default class MapManager extends MapManagerDomain {\r\n private static instance: MapManager | null = null;\r\n\r\n // private htmlDivElementId: string;\r\n // private mapManagerConfig: any;\r\n // private mapManagerMapProjection: any;\r\n\r\n public operationalLayers: Array = [];\r\n // public map: any = null;\r\n\r\n private constructor(divAnchor: string, config: any, mapProjection: any) {\r\n super(divAnchor, config, mapProjection);\r\n const layerManager = LayersManager.getInstance(config.operationalLayers, this.map);\r\n const layers = layerManager.getMapLayers();\r\n this.addLayers(layers);\r\n }\r\n\r\n static getInstance(divAnchor?: string, config?: any, mapProjection?: any) {\r\n if (!MapManager.instance) {\r\n if (divAnchor && config && mapProjection) {\r\n MapManager.instance = new MapManager(divAnchor, config, mapProjection);\r\n }\r\n }\r\n return MapManager.instance;\r\n }\r\n\r\n public createMapLayer(layerSettings: any) {\r\n return super.createLayer(layerSettings);\r\n }\r\n\r\n public addMapLayer(layer: any) {\r\n super.addLayer(layer);\r\n }\r\n\r\n public setLayerIndex(newIndex: number, title: string) {\r\n super.setLayerIndex(newIndex, title);\r\n }\r\n\r\n public addLayers(layers: Array) {\r\n this.map.getLayers().extend(layers);\r\n }\r\n\r\n public zoomTo(feature: any) {\r\n super.zoomTo(feature);\r\n }\r\n\r\n public goTo(extent: Array, fromCs?: string, toCs?: string, skipTransform?: boolean) {\r\n super.goTo(extent, fromCs, toCs, skipTransform);\r\n }\r\n\r\n // public getOperationalLayers() {\r\n // super.getOperationalLayers();\r\n // }\r\n}\r\n","import { ThunkAction } from \"~/View/redux\";\r\nimport { actions } from \"./actions\";\r\nimport { AppLayer } from './reducer';\r\n// type SideDrawerProps = { email: string; password: string };\r\n\r\n// type Login = (_: LoginProps) => ThunkAction>;\r\n\r\nexport type UpdateAppLayers = (appLayers: Array) => ThunkAction;\r\nexport type UpdateLayerOrder = (isForUpdate: boolean) => ThunkAction;\r\nexport type AddExternalLayer = (externalLayers: AppLayer) => ThunkAction;\r\nexport type UpdateDynamicMaps = (dynamicMaps: Array) => ThunkAction;\r\n\r\n\r\n\r\nexport const updateAppLayers: UpdateAppLayers = (appLayers: Array) => dispatch => {\r\n dispatch(actions.updateAppLayers(appLayers));\r\n};\r\n\r\nexport const updateAllAppLayers: UpdateAppLayers = (appLayers: Array) => dispatch => {\r\n dispatch(actions.updateAllAppLayers(appLayers));\r\n};\r\n\r\nexport const updateLayerOrder: UpdateLayerOrder = (isForUpdate: boolean) => dispatch => {\r\n dispatch(actions.updateLayerOrder(isForUpdate));\r\n};\r\n\r\nexport const addExternalLayer: AddExternalLayer = (externalLayer: AppLayer) => dispatch => {\r\n dispatch(actions.addExternalLayer(externalLayer));\r\n};\r\n\r\nexport const updateDynamicMaps: UpdateDynamicMaps = (dynamicMaps: Array) => dispatch => {\r\n dispatch(actions.updateDynamicMaps(dynamicMaps));\r\n};\r\n\r\n\r\nexport const operations = {\r\n updateAppLayers,\r\n updateAllAppLayers,\r\n updateLayerOrder,\r\n addExternalLayer,\r\n updateDynamicMaps\r\n};\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { appConfig } from '../../../configLoader';\r\nimport MapManager from '~/Domain/MapManager/MapManager';\r\nimport LayersManager from '~/Domain/LayerManager/LayersManager';\r\nimport axios from 'axios';\r\nimport { ILayerInfos } from '../Main/Main';\r\nimport { ILayerListObject } from '~/View/interfaces/ILayerListObject';\r\nimport VectorSource from 'ol/source/Vector';\r\nimport ImageSource from 'ol/source/Image';\r\nimport { AppLayer, MapLayer } from '~/View/modules/applayers/reducer';\r\nimport { updateLayerOrder, updateAppLayers } from '~/View/modules/applayers/operations';\r\nimport { changeScaleNumber } from '~/View/modules/mapActions/operations';\r\n\r\nlet mapManager: MapManager | null;\r\nlet layersManager: LayersManager | null;\r\n\r\nlet events = {};\r\n\r\ninterface OwnProps {\r\n layerListObject: Array;\r\n appLayers: Array;\r\n isForUpdate: boolean;\r\n}\r\n\r\ninterface DispatchProps {\r\n updateLayerOrder: (isForUpdate: boolean) => void;\r\n changeScaleNumber: (scaleNumber: number) => void;\r\n updateAppLayers: (appLayers: Array) => void;\r\n}\r\n\r\ninterface Props extends OwnProps, DispatchProps {\r\n mapEvent: string;\r\n changeLoadingStatus: (loadingStatus: boolean) => void;\r\n changeLayerInfos: (layerInfos: Array, coordinates?: Array) => void;\r\n dynamicMaps: Array;\r\n}\r\n\r\nconst WebMap = (props: Props) => {\r\n useEffect(() => {\r\n mapManager = MapManager.getInstance(\"map\", appConfig, appConfig.mapProjection);\r\n layersManager = LayersManager.getInstance(appConfig.layerSettings, mapManager?.map);\r\n\r\n if (mapManager && mapManager.mapView) {\r\n const INCHES_PER_UNIT = {\r\n 'm': 39.37,\r\n 'dd': 4374754\r\n };\r\n const DOTS_PER_INCH = 72;\r\n mapManager.map.on('moveend', () => {\r\n const mapView = (mapManager as MapManager).mapView;\r\n const units = mapView.getProjection().getUnits();\r\n const res = mapView.getResolution();\r\n const scale = INCHES_PER_UNIT[units] * DOTS_PER_INCH * res;\r\n const scaleNumber = Math.ceil(scale);\r\n props.changeScaleNumber(scaleNumber);\r\n });\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (props.mapEvent) {\r\n switch (props.mapEvent) {\r\n case 'identify':\r\n mapClick();\r\n break;\r\n case 'stopIdentify':\r\n unSubscribe('identify');\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n }, [props.mapEvent]);\r\n\r\n useEffect(() => {\r\n const selectedMapIndex = props.appLayers.findIndex(appLayer => appLayer.selected);\r\n let appLayersToShow = props.appLayers.filter(appLayer => appLayer.show);\r\n const appLayers = [...appLayersToShow.filter(appLayer => appLayer.type === 'trusted')];\r\n const dynamicLayers = [...appLayersToShow.filter(appLayer => appLayer.type === 'dynamic')]\r\n let mapsToUpdate: Array<{ addAppMap: AppLayer, removeMapLayer: any }> = [];\r\n const map = mapManager?.map;\r\n let layers = map?.getLayers().getArray();\r\n const copiedLayers = layers ? [...layers.filter((l: any) => l.title && l.title.indexOf('DynamicMap') === -1)] : [];\r\n\r\n handleDynamicLayers(dynamicLayers);\r\n\r\n if (props.isForUpdate) {\r\n copiedLayers.forEach((l: any) => {\r\n if (l.layerId !== 'TileBaseMap') {\r\n mapManager?.removeLayer(l);\r\n }\r\n });\r\n props.updateLayerOrder(false);\r\n\r\n appLayers.forEach(appLayer => {\r\n addLayerToMap(appLayer);\r\n });\r\n }\r\n else if (appLayers && appLayers.length > 0) {\r\n appLayers.forEach(appLayer => {\r\n // const visibileLayersIds: Array = [];\r\n const mapLayers = appLayer.mapLayers.filter(mapLayer => mapLayer.show);\r\n // mapLayers.forEach(layerData => {\r\n // visibileLayersIds.push(layerData.layerIndex);\r\n // });\r\n const layerInMap = layers?.some(l => {\r\n let source = (l as any).getSource();\r\n let url = source && source.getUrl && source.getUrl();\r\n if (appLayer.mapUrl === url) {\r\n const appLayerIndexes = mapLayers.filter(l => l.visible).map(l => l.layerIndex);\r\n const params = source.getParams && source.getParams();\r\n if (params && params.layers) {\r\n const splittedParams = params.layers.split(':')\r\n const layerIndexes: Array = splittedParams[1].split(',');\r\n let isLayerNotIn = appLayerIndexes.some(appLayerInx => !(layerIndexes.some(layerInx => appLayerInx === layerInx)));\r\n if (appLayerIndexes.length !== layerIndexes.length) {\r\n mapsToUpdate.push({ addAppMap: appLayer, removeMapLayer: l });\r\n }\r\n else if (isLayerNotIn) {\r\n mapsToUpdate.push({ addAppMap: appLayer, removeMapLayer: l });\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n })\r\n if (!layerInMap) {\r\n addLayerToMap(appLayer);\r\n }\r\n });\r\n\r\n if (mapsToUpdate.length) {\r\n mapsToUpdate.forEach(mapToUpdate => {\r\n mapManager?.removeLayer(mapToUpdate.removeMapLayer);\r\n addLayerToMap(mapToUpdate.addAppMap);\r\n });\r\n }\r\n\r\n copiedLayers.forEach((l: any) => {\r\n if (l.layerId !== 'TileBaseMap') {\r\n let source = (l as any).getSource();\r\n let url = source && source.getUrl && source.getUrl();\r\n const layerInMap = appLayers.some(appL => appL.mapUrl === url);\r\n if (!layerInMap) {\r\n mapManager?.removeLayer(l);\r\n }\r\n }\r\n });\r\n } else {\r\n copiedLayers.forEach((l: any) => {\r\n if (l.layerId !== 'TileBaseMap') {\r\n mapManager?.removeLayer(l);\r\n }\r\n });\r\n }\r\n\r\n if (selectedMapIndex !== -1) {\r\n // const mapUrl = props.appLayers[0].mapUrl;\r\n\r\n // if (mapUrl) {\r\n // axios.get(`${mapUrl}/?f=json`).then(mapResult => {\r\n // const mapData = mapResult.data;\r\n // const extent = mapData.extent || mapData.fullExtent;\r\n // if (extent) {\r\n // mapManager?.goTo([extent.xmin, extent.ymin, extent.xmax, extent.ymax], 'EPSG:32635', 'EPSG:3857');\r\n // }\r\n // }).catch(err => {\r\n // console.error('Unable to retrieve extent.')\r\n // })\r\n // }\r\n let _appLayers = [...props.appLayers];\r\n let _appLayer = _appLayers[selectedMapIndex];\r\n const metadata = _appLayer.metadata || [];\r\n const metadataExtent = metadata.find(m => m['specific'] && m['specific'].type === 'HIDDEN');\r\n if (metadataExtent) {\r\n let extentContent = (metadataExtent as any as { specific: { content: any } }).specific.content;\r\n // as {specific: { type: string, content: { title: string, url: string }[] }}\r\n if (extentContent) {\r\n const xmin = Number(extentContent.xmin);\r\n const ymin = Number(extentContent.ymin);\r\n const xmax = Number(extentContent.xmax);\r\n const ymax = Number(extentContent.ymax);\r\n\r\n // console.log([xmin, ymin, xmax, ymax])\r\n mapManager?.goTo([xmin, ymin, xmax, ymax], 'EPSG:4326', 'EPSG:3857');\r\n }\r\n _appLayers[selectedMapIndex] = { ..._appLayers[selectedMapIndex], selected: false };\r\n props.updateAppLayers(_appLayers);\r\n }\r\n }\r\n }, [props.appLayers]);\r\n\r\n useEffect(() => {\r\n const layers = props.externalLayers;\r\n layers.forEach(externalLayer => {\r\n const layers = externalLayer.mapLayers;\r\n let ids: Array = [];\r\n layers.forEach(l => {\r\n if (l.layerIndex && l.layerIndex !== 'TEST MAP' && l.layerIndex !== 'plansheets') {\r\n ids.push(l.layerIndex)\r\n }\r\n });\r\n let layerSources = {\r\n title: externalLayer.mapName,\r\n sourceSettings: {\r\n \"url\": externalLayer.mapUrl,\r\n \"params\": {\r\n \"LAYERS\": ids.join(\",\")\r\n },\r\n }\r\n };\r\n let createdWmsLayer = mapManager?.createLayer(layerSources);\r\n mapManager?.addLayer(createdWmsLayer)\r\n })\r\n\r\n }, [props.externalLayers])\r\n\r\n // useEffect(() => {\r\n // const dynamicMaps = [...props.dynamicMaps];\r\n // const map = mapManager?.map;\r\n // let layers = map?.getLayers().getArray();\r\n\r\n // dynamicMaps.forEach(dynamicMap => {\r\n // const dynamicMapLayers = dynamicMap.mapLayers;\r\n // dynamicMapLayers.forEach(dynamicMapLayer => {\r\n // let layerInMap = layers?.find((l: any) => l.title === `${dynamicMap.mapUrl}_${dynamicMapLayer.layerName}`);\r\n // if (!layerInMap) {\r\n // if (dynamicMapLayer.visible) {\r\n // const url = dynamicMapLayer.layerUrl;\r\n // const splittedUrl = url.split('/');\r\n // const indexStr = splittedUrl[splittedUrl.length - 1];\r\n // const index = Number(indexStr);\r\n // if (!isNaN(index)) {\r\n // const mapUrl = splittedUrl.slice(0, splittedUrl.length - 1).join('/');\r\n // let layer = createLayerForWebMap(mapUrl, `${dynamicMap.mapUrl}_${dynamicMapLayer.layerName}`, [indexStr]);\r\n // mapManager?.addLayers([layer]);\r\n // }\r\n // }\r\n // } else {\r\n // if (dynamicMapLayer.visible !== layerInMap.getVisible()) {\r\n // if (!dynamicMapLayer.visible) {\r\n // mapManager?.removeLayer(layerInMap);\r\n // }\r\n // }\r\n // }\r\n\r\n // })\r\n // })\r\n\r\n // }, [props.dynamicMaps]);\r\n\r\n const handleDynamicLayers = (dynamicMaps: Array) => {\r\n const map = mapManager?.map;\r\n let layers = map?.getLayers().getArray();\r\n const copiedLayers = layers ? [...layers.filter((l: any) => l.title && l.title.indexOf('DynamicMap') !== -1)] : [];\r\n\r\n if (props.isForUpdate) {\r\n copiedLayers.forEach((l: any) => {\r\n if (l.layerId !== 'TileBaseMap') {\r\n mapManager?.removeLayer(l);\r\n }\r\n });\r\n }\r\n\r\n if (dynamicMaps.length) {\r\n dynamicMaps.forEach(dynamicMap => {\r\n const dynamicMapLayers = dynamicMap.mapLayers;\r\n dynamicMapLayers.forEach(dynamicMapLayer => {\r\n let layerInMap = layers?.find((l: any) => l.title === `${dynamicMap.mapUrl}_${dynamicMapLayer.layerName}`);\r\n if (!layerInMap) {\r\n if (dynamicMapLayer.visible) {\r\n const url = dynamicMapLayer.layerUrl;\r\n const splittedUrl = url.split('/');\r\n const indexStr = splittedUrl[splittedUrl.length - 1];\r\n const index = Number(indexStr);\r\n if (!isNaN(index)) {\r\n const mapUrl = splittedUrl.slice(0, splittedUrl.length - 1).join('/');\r\n let layer = createLayerForWebMap(mapUrl, `${dynamicMap.mapUrl}_${dynamicMapLayer.layerName}`, [indexStr]);\r\n layer?.setVisibleIndex(dynamicMapLayer.layerOrderNum);\r\n mapManager?.addLayers([layer]);\r\n }\r\n }\r\n } else {\r\n layerInMap.setVisible(dynamicMapLayer.visible)\r\n\r\n // if (dynamicMapLayer.visible !== layerInMap.getVisible()) {\r\n // if (!dynamicMapLayer.visible) {\r\n // mapManager?.removeLayer(layerInMap);\r\n // }\r\n // }\r\n }\r\n })\r\n })\r\n } else if (copiedLayers.length) {\r\n copiedLayers.forEach((l: any) => {\r\n if (l.layerId !== 'TileBaseMap') {\r\n mapManager?.removeLayer(l);\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n const addLayerToMap = (appLayer: AppLayer) => {\r\n const visibleLayersInAppLayer = appLayer.mapLayers.filter(l => l.show && l.visible && l.layerMetadata?.length).map(l => l.layerIndex);\r\n let layer = createLayerForWebMap(appLayer.mapUrl, appLayer.mapName, visibleLayersInAppLayer);\r\n layer?.setVisibleIndex(appLayer.orderNum);\r\n mapManager?.addLayers([layer]);\r\n }\r\n\r\n const unSubscribe = (eventType: string) => {\r\n switch (eventType) {\r\n case 'identify':\r\n if (Object.keys(events).length) {\r\n const eventTarget = events['identify'].target;\r\n const eventListener = events['identify'].listener;\r\n eventTarget.removeEventListener('singleclick', eventListener);\r\n delete events['identify'];\r\n props.changeLayerInfos([]);\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n const mapClickHandler = (evt: any) => {\r\n props.changeLoadingStatus(true);\r\n const appLayers = props.appLayers.filter(l => l.show);\r\n let urls: Array = [];\r\n\r\n let mapQueries: Array> = [];\r\n\r\n const xCoord = evt.coordinate[0];\r\n const yCoord = evt.coordinate[1];\r\n\r\n const map = mapManager?.map;\r\n const view = map?.getView();\r\n const res = view?.getResolution();\r\n const constAsResNum = 100;\r\n const tolerance = res ? res * 7 : constAsResNum;\r\n\r\n const xMin = xCoord - tolerance;\r\n const yMin = yCoord - tolerance;\r\n const xMax = xCoord + tolerance;\r\n const yMax = yCoord + tolerance;\r\n\r\n let layers = map?.getLayers().getArray();\r\n let visibleLayers = layers?.filter(l => l.getVisible());\r\n\r\n // let layerSources = visibleLayers?.map((visibleLayer: any) => visibleLayer.getSource && visibleLayer.getSource());\r\n let visibleSources: Array = [];\r\n visibleLayers?.forEach((visibleLayer: any) => {\r\n let source = visibleLayer.getSource && visibleLayer.getSource();\r\n if (visibleLayer.title && visibleLayer.title.indexOf('DynamicMap') !== -1) {\r\n visibleSources?.push(source);\r\n } else {\r\n let visibleLayerSource = appLayers.find(l => ((source && source.getUrl) && (source.getUrl() === l.mapUrl)));\r\n if (visibleLayerSource) {\r\n visibleSources?.push(source);\r\n }\r\n }\r\n // appLayers.forEach(l => {\r\n // if (source.getUrl && source.getUrl() === l.mapUrl) {\r\n // visibleSources?.push(source);\r\n // }\r\n // })\r\n })\r\n visibleSources.forEach((visibleSource: any) => {\r\n const params = visibleSource.getParams();\r\n if (params) {\r\n let splittedParams = params.layers.split(':');\r\n let stringIndexes = splittedParams[1];\r\n let visibleIndexes: Array = stringIndexes.split(',');\r\n visibleIndexes.forEach(i => urls.push(`${visibleSource.getUrl()}/${i}`));\r\n }\r\n })\r\n\r\n urls.forEach(url => {\r\n const queryUrl = `${url}/query`;\r\n\r\n mapQueries.push(axios.get(queryUrl, {\r\n params: {\r\n f: 'json',\r\n returnGeometry: false,\r\n spatialRel: 'esriSpatialRelIntersects',\r\n geometry: { \"xmin\": xMin, \"ymin\": yMin, \"xmax\": xMax, \"ymax\": yMax, \"spatialReference\": { \"wkid\": 102100 } },\r\n geometryType: 'esriGeometryEnvelope',\r\n inSR: 102100,\r\n outFields: \"*\",\r\n outSR: 102100\r\n }\r\n }));\r\n })\r\n const layerInfoResults: Array = [];\r\n Promise.all(mapQueries).then(results => {\r\n let layerInfoResultsUnFiltered: Array> = [];\r\n\r\n results.forEach((res, i) => {\r\n layerInfoResultsUnFiltered.push(handleMapClickResults(res.data, urls[i]));\r\n });\r\n Promise.all(layerInfoResultsUnFiltered).then(attributesWithAliases => {\r\n attributesWithAliases.forEach(attrAliases => {\r\n if (attrAliases) {\r\n layerInfoResults.push(attrAliases);\r\n }\r\n });\r\n setLayerInfos(layerInfoResults, [xCoord, yCoord]);\r\n }).catch(err => {\r\n console.error(err);\r\n })\r\n //@ts-ignore\r\n // const layerInfoResults: Array = layerInfoResultsUnFiltered.filter(l => l);\r\n\r\n }).catch(err => {\r\n console.error(err);\r\n props.changeLoadingStatus(false);\r\n });\r\n\r\n }\r\n\r\n const setLayerInfos = (layerInfoResults: Array, coordinates: Array) => {\r\n props.changeLayerInfos(layerInfoResults, coordinates);\r\n props.changeLoadingStatus(false);\r\n }\r\n\r\n const mapClick = () => {\r\n const map = mapManager?.map;\r\n const onMapClick = map?.on('singleclick', mapClickHandler)\r\n events['identify'] = onMapClick;\r\n }\r\n // map.un(\"singleclick\", mapClick)\r\n\r\n const getMetadataByUrl = (url: string) => {\r\n return props.appLayers.filter(l => l.show).reduce>((acc, curr) => {\r\n const mapLayer = curr.mapLayers.filter(l => l.layerUrl === url);\r\n if (mapLayer[0]) {\r\n acc.push(mapLayer[0]);\r\n }\r\n return acc;\r\n }, []);\r\n }\r\n\r\n const handleMapClickResults = (mapClickResults: any, layerUrl: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const feature = mapClickResults.features && mapClickResults.features[0];\r\n const attributes = feature && feature.attributes || {};\r\n if (feature) {\r\n const featureLayer = getLayerTitle(layerUrl);\r\n const mapLayer = getMetadataByUrl(layerUrl);\r\n const fieldInfos = (mapLayer[0] && mapLayer[0].fieldInfos) || [];\r\n const mapLayerFieldInfosVisible = mapLayer[0] ? mapLayer[0].showFieldInfo : false;\r\n let resultAttributes = {};\r\n // const layerObject = props.layerListObject.layers.filter(l => `${props.layerListObject.url}/${l.id}` === layerUrl)[0];\r\n // const targetLayerUrl = `${props.layerListObject.url}/${layerObject.id}`;\r\n // let lInfos: ILayerInfos = {\r\n // title: featureLayerTitle,\r\n // attributes: feature.attributes\r\n // }\r\n for (let i = 0; i < fieldInfos.length; i++) {\r\n if ((attributes.hasOwnProperty(fieldInfos[i].fieldName) || attributes.hasOwnProperty(fieldInfos[i].fieldName.toLowerCase())) && mapLayerFieldInfosVisible) {\r\n let attributeValue = attributes[fieldInfos[i].fieldName] || attributes[fieldInfos[i].fieldName.toLowerCase()];\r\n if (fieldInfos[i].accuracy) {\r\n let accuracy = Number(fieldInfos[i].accuracy)\r\n let attributeValueNumber = Number(attributeValue);\r\n if (!isNaN(accuracy) && !isNaN(attributeValueNumber)) {\r\n attributeValue = attributeValueNumber.toFixed(accuracy);\r\n }\r\n }\r\n let units = fieldInfos[i].units && fieldInfos[i].units !== 'text' ? ` ${fieldInfos[i].units}` : '';\r\n resultAttributes[fieldInfos[i].fieldAlias] = attributeValue + units;\r\n }\r\n }\r\n if (Object.keys(resultAttributes).length) {\r\n resolve({\r\n mapTitle: featureLayer.mapTitle,\r\n identifiedLayers: [{\r\n title: featureLayer.layerTitle,\r\n attributes: resultAttributes\r\n }]\r\n });\r\n } else if (mapLayerFieldInfosVisible) {\r\n resolve({\r\n mapTitle: featureLayer.mapTitle,\r\n identifiedLayers: [{\r\n title: featureLayer.layerTitle,\r\n attributes: resultAttributes\r\n }]\r\n });\r\n } else {\r\n resolve(null);\r\n }\r\n\r\n } else {\r\n setTimeout(() => {\r\n resolve(null);\r\n }, 1)\r\n }\r\n })\r\n }\r\n\r\n const getLayerTitle = (layerUrl: string): { mapTitle: string, layerTitle: string } => {\r\n let resultMapTitle = window.translated ? 'Unknown map' : 'Неизвестна карта';\r\n let resultLayerTitle = window.translated ? 'Unknown layer' : 'Неизвестен слой';\r\n const appLayers = props.appLayers.filter(l => l.show);\r\n for (let i = 0; i < appLayers.length; i++) {\r\n const serviceUrl = appLayers[i].mapUrl;\r\n const layers = appLayers[i].mapLayers;\r\n const targetLayer = layers.find(l => `${serviceUrl}/${l.layerIndex}` === layerUrl || `${l.layerUrl}` === layerUrl);\r\n if (targetLayer) {\r\n return { mapTitle: appLayers[i].mapName, layerTitle: targetLayer.layerName }\r\n }\r\n }\r\n\r\n return { mapTitle: resultMapTitle, layerTitle: resultLayerTitle };\r\n }\r\n\r\n const createLayerForWebMap = (appLayerUrl: string, title: string, visibileLayersIds: Array) => {\r\n const layerSettings = {\r\n type: 'ArcGISImageRestService',\r\n sourceSettings: {\r\n url: appLayerUrl,\r\n id: appLayerUrl,\r\n params: {\r\n layers: `show:${visibileLayersIds.join(',')}`,\r\n dynamicLayers: JSON.stringify(visibileLayersIds.map(visibleLayerId => (\r\n {\r\n id: visibleLayerId,\r\n source: {\r\n type: \"mapLayer\",\r\n mapLayerId: visibleLayerId\r\n }\r\n }\r\n )))\r\n },\r\n imageLoadFunction: (image: any, src: any) => {\r\n var xhr = new XMLHttpRequest();\r\n xhr.responseType = \"blob\";\r\n xhr.addEventListener(\"loadend\", function (evt) {\r\n var data = this.response;\r\n if (data) {\r\n var img = image.getImage();\r\n var url = URL.createObjectURL(data);\r\n img.addEventListener(\"loadend\", function () {\r\n URL.revokeObjectURL(url);\r\n });\r\n img.src = url;\r\n }\r\n });\r\n var split = src.split(\"?\");\r\n xhr.open(\"POST\", split[0]);\r\n xhr.setRequestHeader(\r\n \"Content-type\",\r\n \"application/x-www-form-urlencoded\"\r\n );\r\n xhr.send(split[1]);\r\n }\r\n },\r\n title: title\r\n // show: true\r\n }\r\n return layersManager?.createLayer(layerSettings);\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nconst mapStateToProps = (state: any) => ({\r\n layerListObject: state.layerListObject.layerListObject,\r\n appLayers: state.appLayers.appLayers,\r\n externalLayers: state.appLayers.externalLayers,\r\n dynamicMaps: state.appLayers.dynamicMaps,\r\n isForUpdate: state.appLayers.isForUpdate,\r\n});\r\n\r\nexport default connect(mapStateToProps, { updateLayerOrder, changeScaleNumber, updateAppLayers })(WebMap);\r\n","export enum MeasureEvents {\r\n MEASUREMENT_CHANGE = \"change\"\r\n}\r\n","import { ThunkAction } from \"~/View/redux\";\r\nimport { actions } from \"./actions\";\r\n\r\n// type SideDrawerProps = { email: string; password: string };\r\n\r\n// type Login = (_: LoginProps) => ThunkAction>;\r\n\r\nexport type ChangeScaleNumber = (scaleNumber: number) => ThunkAction;\r\n\r\nexport const changeScaleNumber: ChangeScaleNumber = (scaleNumber: number) => dispatch => {\r\n dispatch(actions.changeScaleNumber(scaleNumber));\r\n};\r\n\r\nexport const operations = {\r\n changeScaleNumber\r\n};\r\n","import ISelection, { ISelectedFeature } from \"./ISelection\";\r\nimport { IMap } from \"~/Domain/MapManager/IMap\";\r\nimport Draw from '../Draw/Draw';\r\nimport ImageDomainLayer from \"../LayerManager/ImageDomainLayer\";\r\nimport Feature from \"ol/Feature\";\r\nimport { DrawEvent } from \"ol/interaction/Draw\";\r\nimport { Extent } from \"ol/extent\";\r\nimport VectorLayer from \"ol/layer/Vector\";\r\nimport VectorSource from \"ol/source/Vector\";\r\nimport { Style, Stroke, Fill } from \"ol/style\";\r\nimport GeoJSON from 'ol/format/GeoJSON';\r\nimport axios, { AxiosResponse } from \"axios\";\r\nimport PubSub from '../Pubsub/PubSub';\r\nimport ImageArcGISRest from \"ol/source/ImageArcGISRest\";\r\nimport EsriJSON from 'ol/format/EsriJSON';\r\nimport VectorDomainLayer from \"../LayerManager/VectorDomainLayer\";\r\n\r\n\r\ninterface IResFeature {\r\n features: Array;\r\n layerName: string;\r\n}\r\n\r\nenum SelectionEventTypes {\r\n UPDATE_SELECTION = 'selectionChanged'\r\n}\r\n\r\n\r\nexport default class Selection implements ISelection {\r\n private _selections: Array;\r\n pubSub: PubSub;\r\n map: IMap;\r\n draw: Draw;\r\n vectorSource: VectorSource;\r\n featureLayer: VectorLayer;\r\n\r\n constructor(map: IMap) {\r\n this.map = map;\r\n this.draw = new Draw(map);\r\n this.pubSub = new PubSub();\r\n this._selections = [];\r\n\r\n this.vectorSource = new VectorSource();\r\n this.featureLayer = new VectorLayer({\r\n source: this.vectorSource,\r\n style: new Style({\r\n stroke: new Stroke({\r\n color: '#006400',\r\n width: 1\r\n }),\r\n fill: new Fill({\r\n color: 'rgba(0,100,0, 0.1)'\r\n })\r\n })\r\n });\r\n this.map.addLayer(this.featureLayer);\r\n this.featureLayer.setZIndex(100);\r\n // this.selections = ['test1', 'test2']\r\n }\r\n\r\n getSelection() {\r\n\r\n }\r\n\r\n selectByLine() {\r\n this.startSelection(\"line\");\r\n }\r\n\r\n selectByPoint() {\r\n this.startSelection(\"point\");\r\n }\r\n\r\n selectByPolygon() {\r\n this.startSelection(\"area\");\r\n }\r\n\r\n stopDraw() {\r\n setTimeout(() => {\r\n this.draw.removeDrawObject();\r\n }, 100);\r\n }\r\n\r\n mapSelection(feature: Feature) {\r\n let geom = feature.getGeometry && feature.getGeometry();\r\n let extent = geom.getExtent && geom.getExtent();\r\n if (extent) {\r\n // const visibleLayers = this.getVisibleLayers();\r\n // this.getFeatures(visibleLayers, extent).then(featureResults => {\r\n // featureResults.forEach(feature => {\r\n // this.selectFeature(feature);\r\n // });\r\n // }).catch((err: Error) => {\r\n // console.error(err);\r\n // });\r\n\r\n const visibleLayersUrls = this.getVisibleLayersUrls();\r\n this.getFeaturesByQueries(visibleLayersUrls, extent).then(featureResults => {\r\n // console.log(featureResults)\r\n let _features: Array = [];\r\n featureResults.forEach(featureResult => {\r\n this.selectFeature(featureResult.data as IResFeature);\r\n if (_features.length) {\r\n let targetIndex = _features.findIndex(f => f.layerName === featureResult.layerInfo.name);\r\n if (targetIndex !== -1) {\r\n _features[targetIndex] = _features[targetIndex].features.concat(featureResult.data.features);\r\n } else {\r\n _features.push({\r\n layerName: featureResult.layerInfo.name,\r\n features: featureResult.data.features,\r\n fields: featureResult.layerInfo.fields\r\n });\r\n }\r\n } else {\r\n _features.push({\r\n layerName: featureResult.layerInfo.name,\r\n features: featureResult.data.features,\r\n fields: featureResult.layerInfo.fields\r\n });\r\n }\r\n // _features = _features.concat(featureResult.data.features);\r\n });\r\n console.log(_features)\r\n this.selections = _features;\r\n }).catch((err: Error) => {\r\n console.error(err);\r\n });\r\n }\r\n }\r\n\r\n selectFeature(featureInfo: IResFeature) {\r\n const features = featureInfo.features;\r\n features.forEach(feature => {\r\n // const _feature = new GeoJSON().readFeatures(feature);\r\n const _feature = new EsriJSON().readFeatures(feature);\r\n\r\n this.vectorSource.addFeatures(_feature);\r\n });\r\n }\r\n\r\n startSelection(type: string) {\r\n if (type === 'point') {\r\n this.draw.drawPoint();\r\n }\r\n else if (type === 'line') {\r\n this.draw.drawLine();\r\n } else if (type === 'area') {\r\n this.draw.drawPolygon();\r\n }\r\n this.draw.drawObject?.on('drawend', (evt: DrawEvent) => {\r\n this.mapSelection(evt.feature);\r\n this.stopDraw();\r\n this.pubSub.publish('drawEnd', evt.feature);\r\n });\r\n }\r\n\r\n getVisibleLayers() {\r\n const layers = this.map.getLayers().getArray();\r\n let visibleLayers = layers.filter(layer => layer.getVisible());\r\n return visibleLayers as Array;\r\n }\r\n\r\n getVisibleLayersUrls() {\r\n const layers = this.map.getLayers().getArray();\r\n let visibleLayers = layers.filter(layer => layer.getVisible());\r\n let sources = (visibleLayers as Array).map(visibleLayer => visibleLayer.getSource && visibleLayer.getSource());\r\n let urls: Array = [];\r\n (sources as any as Array).forEach(layerSource => {\r\n let params = layerSource.getParams && layerSource.getParams();\r\n if (params && params.layers) {\r\n const splittedParams = params.layers.split(':');\r\n const layerIndexes: Array = splittedParams[1].split(',');\r\n layerIndexes.forEach(i => {\r\n urls.push(`${layerSource.getUrl()}/${i}`);\r\n })\r\n }\r\n })\r\n return urls;\r\n }\r\n\r\n getFeaturesByQueries(queryUrls: Array, coords: Extent): Promise> {\r\n return new Promise((resolve, reject) => {\r\n let queries: Array> = [];\r\n let layerInfoQueries: Array> = [];\r\n // const resultFeatures: Array = [];\r\n // const featureRequests: Promise[] = [];\r\n queryUrls.forEach(url => {\r\n layerInfoQueries.push(axios.get(url, { params: { f: 'json' } }));\r\n const queryUrl = `${url}/query`;\r\n queries.push(axios.get(queryUrl, {\r\n params: {\r\n f: 'json',\r\n returnGeometry: true,\r\n spatialRel: 'esriSpatialRelIntersects',\r\n geometry: { \"xmin\": coords[0], \"ymin\": coords[1], \"xmax\": coords[2], \"ymax\": coords[3], \"spatialReference\": { \"wkid\": 102100 } },\r\n geometryType: 'esriGeometryEnvelope',\r\n inSR: 102100,\r\n outFields: \"*\",\r\n outSR: 102100\r\n }\r\n }))\r\n });\r\n Promise.all(layerInfoQueries).then(resInfosData => {\r\n const layerInfos = resInfosData.map(lInfoRes => lInfoRes.data);\r\n Promise.all(queries).then(res => {\r\n resolve(res.map((r, i) => ({ layerInfo: layerInfos[i], data: r.data })));\r\n }).catch(err => {\r\n console.error(err);\r\n reject(err);\r\n })\r\n }).catch(err => {\r\n console.error(err);\r\n reject(err);\r\n })\r\n\r\n // layers.forEach(layer => {\r\n // const layerSoyrce: any = layer.getSource();\r\n // if (layerSoyrce.getParams) {\r\n // const layerParams = layerSoyrce.getParams();\r\n // const url = layerSoyrce.getUrl();\r\n // const layerName = layerParams.LAYERS;\r\n // const srs = this.map.getView().getProjection().getCode();\r\n // let getFeatureRequest = axios.get(url, {\r\n // params: {\r\n // SERVICE: 'WFS',\r\n // VERSION: '1.0.0',\r\n // REQUEST: 'getFeature',\r\n // TYPENAME: layerName,\r\n // OUTPUTFORMAT: 'geojson',\r\n // SRSNAME: srs,\r\n // BBOX: coords.toString()\r\n // }\r\n // });\r\n // featureRequests.push(getFeatureRequest);\r\n // }\r\n // });\r\n this.pubSub.publish('loadingChanged', true);\r\n // Promise.all(featureRequests).then(results => {\r\n // results.forEach(resFeature => {\r\n // const reqData = resFeature.data;\r\n // if (resFeature.status === 200 && reqData.features && reqData.features.length) {\r\n // resultFeatures.push({\r\n // features: reqData.features,\r\n // layerName: reqData.name\r\n // });\r\n // }\r\n // });\r\n // this.pubSub.publish('loadingChanged', false);\r\n // resolve(resultFeatures);\r\n // }).catch(err => {\r\n // console.error(err);\r\n // reject(err);\r\n // });\r\n })\r\n }\r\n\r\n getFeatures(layers: Array, coords: Extent): Promise> {\r\n return new Promise((resolve, reject) => {\r\n const resultFeatures: Array = [];\r\n const featureRequests: Promise[] = [];\r\n layers.forEach(layer => {\r\n const layerSoyrce: any = layer.getSource();\r\n if (layerSoyrce.getParams) {\r\n const layerParams = layerSoyrce.getParams();\r\n const url = layerSoyrce.getUrl();\r\n const layerName = layerParams.LAYERS;\r\n const srs = this.map.getView().getProjection().getCode();\r\n let getFeatureRequest = axios.get(url, {\r\n params: {\r\n SERVICE: 'WFS',\r\n VERSION: '1.0.0',\r\n REQUEST: 'getFeature',\r\n TYPENAME: layerName,\r\n OUTPUTFORMAT: 'geojson',\r\n SRSNAME: srs,\r\n BBOX: coords.toString()\r\n }\r\n });\r\n featureRequests.push(getFeatureRequest);\r\n }\r\n });\r\n this.pubSub.publish('loadingChanged', true);\r\n Promise.all(featureRequests).then(results => {\r\n results.forEach(resFeature => {\r\n const reqData = resFeature.data;\r\n if (resFeature.status === 200 && reqData.features && reqData.features.length) {\r\n resultFeatures.push({\r\n features: reqData.features,\r\n layerName: reqData.name\r\n });\r\n }\r\n });\r\n this.pubSub.publish('loadingChanged', false);\r\n resolve(resultFeatures);\r\n }).catch(err => {\r\n console.error(err);\r\n reject(err);\r\n });\r\n });\r\n }\r\n\r\n remove(feature: ISelectedFeature) {\r\n\r\n }\r\n\r\n removeAll() {\r\n this.vectorSource.clear(true);\r\n this.selections = [];\r\n }\r\n\r\n on(event: string, callBack: (arg?: any) => void) {\r\n this.pubSub.subscribe(event, callBack);\r\n }\r\n\r\n set selections(selectionFeatures: Array) {\r\n console.log('changed')\r\n this._selections = selectionFeatures;\r\n this.pubSub.publish('selectionChanged', selectionFeatures);\r\n }\r\n}\r\n","import IDraw from \"./IDraw\";\r\nimport { IFeature } from \"./IFeature\";\r\nimport Draw from \"ol/interaction/Draw\";\r\nimport { Style, Fill, Stroke } from \"ol/style\";\r\nimport CircleStyle from \"ol/style/Circle\";\r\nimport GeometryType from \"ol/geom/GeometryType\";\r\nimport VectorSource from \"ol/source/Vector\";\r\nimport { IMap } from \"~/Domain/MapManager/IMap\";\r\nimport VectorLayer from \"ol/layer/Vector\";\r\n\r\n\r\ninterface DrawOptions {\r\n drawType: string;\r\n}\r\n\r\nexport default class DomainDraw implements IDraw {\r\n drawObject: Draw | null = null;\r\n lines: IFeature[];\r\n polygons: IFeature[];\r\n drawLayer: VectorSource;\r\n map: IMap;\r\n\r\n constructor(map: IMap) {\r\n this.lines = [];\r\n this.polygons = [];\r\n this.drawLayer = new VectorSource(); // options.drawLayer;\r\n this.map = map;\r\n let vectorLayer = new VectorLayer({\r\n source: this.drawLayer,\r\n style: new Style({\r\n fill: new Fill({\r\n color: 'rgba(255, 255, 255, 0.2)'\r\n }),\r\n stroke: new Stroke({\r\n color: '#ffcc33',\r\n width: 2\r\n }),\r\n image: new CircleStyle({\r\n radius: 7,\r\n fill: new Fill({\r\n color: '#ffcc33'\r\n })\r\n })\r\n })\r\n });\r\n this.map.getLayers().extend([vectorLayer]);\r\n // this.drawObject = this.createDrawObject({ drawType: GeometryType.LINE_STRING });\r\n }\r\n\r\n drawPoint() {\r\n this.drawObject = this.createDrawObject({ drawType: GeometryType.POINT });\r\n }\r\n\r\n drawLine() {\r\n this.drawObject = this.createDrawObject({ drawType: GeometryType.LINE_STRING });\r\n }\r\n\r\n drawPolygon() {\r\n this.drawObject = this.createDrawObject({ drawType: GeometryType.POLYGON });\r\n }\r\n\r\n getDrawnFeatures() {\r\n return [...this.lines, ...this.polygons];\r\n }\r\n\r\n public createDrawObject(drawOptions: DrawOptions) {\r\n this.removeDrawObject();\r\n const draw = new Draw({\r\n source: this.drawLayer,\r\n type: drawOptions.drawType as GeometryType,\r\n style: new Style({\r\n fill: new Fill({\r\n color: 'rgba(255, 255, 255, 0.2)'\r\n }),\r\n stroke: new Stroke({\r\n color: 'rgba(0, 0, 0, 0.5)',\r\n lineDash: [10, 10],\r\n width: 2\r\n }),\r\n image: new CircleStyle({\r\n radius: 5,\r\n stroke: new Stroke({\r\n color: 'rgba(0, 0, 0, 0.7)'\r\n }),\r\n fill: new Fill({\r\n color: 'rgba(255, 255, 255, 0.2)'\r\n })\r\n })\r\n })\r\n });\r\n\r\n this.map.addInteraction(draw);\r\n\r\n return draw;\r\n }\r\n\r\n public removeDrawObject() {\r\n if (this.drawObject) {\r\n this.map.removeInteraction(this.drawObject);\r\n setTimeout(() => {\r\n this.drawLayer.clear(true);\r\n }, 1);\r\n }\r\n }\r\n}\r\n","import { IMeasure } from \"./IMeasure\";\r\nimport { MeasureEvents } from './MeasureEvents';\r\nimport Draw from '../Draw/Draw';\r\nimport { DrawEvent } from \"ol/interaction/Draw\";\r\nimport { Coordinate } from \"ol/coordinate\";\r\nimport { Polygon, Geometry, LineString } from \"ol/geom\";\r\nimport { getArea, getLength } from 'ol/sphere';\r\nimport Overlay from \"ol/Overlay\";\r\nimport OverlayPositioning from \"ol/OverlayPositioning\";\r\nimport { unByKey } from \"ol/Observable\";\r\nimport { IMap } from \"~/Domain/MapManager/IMap\";\r\n\r\nimport \"../ToolManager/AppDomainDrawTool.css\";\r\nimport MapBrowserEvent from \"ol/MapBrowserEvent\";\r\n\r\nexport default class AppMeasure implements IMeasure {\r\n public measuredFeatures: Array = [];\r\n public draw: Draw;\r\n public map: IMap;\r\n\r\n public events: typeof MeasureEvents = MeasureEvents;\r\n\r\n private single: boolean = false;\r\n private measureEvents: Partial<{ [key in keyof typeof MeasureEvents]: Function }> = {};\r\n\r\n private _measuredLength: number = 0;\r\n private measuredArea: number = 0;\r\n\r\n\r\n listener: any;\r\n helpTooltipElement: HTMLElement;\r\n helpTooltip: Overlay | null;\r\n measureTooltipElement: HTMLElement | null;\r\n measureTooltip: Overlay | null;\r\n\r\n constructor(map: IMap, single?: boolean) {\r\n this.draw = new Draw(map);\r\n this.map = map;\r\n\r\n this.single = single ? single : false;\r\n\r\n this.listener = null;\r\n this.helpTooltip = null;\r\n this.helpTooltipElement = document.createElement('div');\r\n this.measureTooltipElement = null;\r\n this.measureTooltip = null;\r\n\r\n }\r\n\r\n public measureArea() {\r\n this.startMeasure('area');\r\n }\r\n\r\n public measureLine() {\r\n this.startMeasure('line');\r\n }\r\n\r\n public measureVolume() {\r\n\r\n }\r\n\r\n public measureAltitude() {\r\n\r\n }\r\n\r\n public clear() {\r\n this.map.getOverlays().clear();\r\n this.draw.drawLayer.clear();\r\n this.createHelpTooltip();\r\n this.createMeasureTooltip();\r\n }\r\n\r\n public stopDraw() {\r\n this.draw.drawObject && this.map.removeInteraction(this.draw.drawObject);\r\n this.map.getOverlays().clear();\r\n this.draw.drawLayer.clear();\r\n }\r\n\r\n public startMeasure(type: string) {\r\n this.map.on('pointermove', (ev) => this.pointerMoveHandler(ev, type));\r\n this.map.getViewport().addEventListener('mouseout', () => this.helpTooltipElement.classList.add('hidden'));\r\n\r\n this.createMeasureTooltip();\r\n this.createHelpTooltip();\r\n\r\n if (type === 'line') {\r\n this.draw.drawLine();\r\n } else if (type === 'area') {\r\n this.draw.drawPolygon();\r\n }\r\n\r\n this.draw.drawObject?.on('drawstart', (evt: DrawEvent) => {\r\n this.listener = this.onMeasureStart(evt);\r\n });\r\n this.draw.drawObject?.on('drawend', () => {\r\n this.listener = this.onDrawEnd();\r\n });\r\n }\r\n\r\n\r\n public onDrawEnd() {\r\n if (this.measureEvents[this.events.MEASUREMENT_CHANGE]) {\r\n this.measureEvents[this.events.MEASUREMENT_CHANGE](this._measuredLength);\r\n }\r\n if (this.measureTooltipElement) {\r\n this.measureTooltipElement.className = 'tooltip tooltip-static';\r\n }\r\n if (this.measureTooltip) {\r\n this.measureTooltip.setOffset([0, -7]);\r\n }\r\n\r\n // unset tooltip so that a new one can be created\r\n this.measureTooltipElement = null;\r\n this.createMeasureTooltip();\r\n if (this.listener) {\r\n unByKey(this.listener);\r\n }\r\n }\r\n\r\n public onMeasureStart(evt: DrawEvent) {\r\n if (this.single) {\r\n this.clear();\r\n // this.draw.drawLayer.clear();\r\n }\r\n return evt.feature.getGeometry().on('change', (evt: Event) => {\r\n let tooltipCoord: Coordinate = [];\r\n\r\n let geom = evt.target;\r\n let output: number = 0;\r\n if (geom instanceof Polygon) {\r\n output = this.formatArea(geom);\r\n tooltipCoord = geom.getInteriorPoint().getCoordinates();\r\n this._measuredLength = output;\r\n } else if (geom instanceof LineString) {\r\n output = this.formatLength(geom);\r\n tooltipCoord = geom.getLastCoordinate();\r\n this._measuredLength = output;\r\n }\r\n if (this.measureTooltipElement) {\r\n this.measureTooltipElement.innerHTML = `${output}`;\r\n }\r\n if (this.measureTooltip) {\r\n this.measureTooltip.setPosition(tooltipCoord);\r\n }\r\n });\r\n }\r\n\r\n private createHelpTooltip() {\r\n if (this.helpTooltipElement && this.helpTooltipElement.parentNode) {\r\n this.helpTooltipElement.parentNode.removeChild(this.helpTooltipElement);\r\n }\r\n\r\n this.helpTooltipElement = document.createElement('div');\r\n this.helpTooltipElement.className = 'tooltip hidden';\r\n this.helpTooltip = new Overlay({\r\n element: this.helpTooltipElement,\r\n offset: [15, 0],\r\n positioning: OverlayPositioning.CENTER_LEFT\r\n });\r\n this.map.addOverlay(this.helpTooltip);\r\n }\r\n\r\n private formatArea(polygon: Geometry): number {\r\n let area = getArea(polygon);\r\n let output: number;\r\n if (area > 10000) {\r\n output = (Math.round(area / 1000000 * 100) / 100) //+ ' ' + 'km2';\r\n } else {\r\n output = (Math.round(area * 100) / 100) //+ ' ' + 'm2';\r\n }\r\n return output;\r\n }\r\n\r\n private formatLength(line: Geometry): number {\r\n let length = getLength(line);\r\n let output: number;\r\n if (length > 100) {\r\n output = (Math.round(length / 1000 * 100) / 100) //+ ' ' + 'km';\r\n } else {\r\n output = (Math.round(length * 100) / 100) //+ ' ' + 'm';\r\n }\r\n return output;\r\n }\r\n\r\n private pointerMoveHandler(evt: MapBrowserEvent, type: string) {\r\n if (evt.dragging) {\r\n return;\r\n }\r\n\r\n let helpMsg: string = window.translated ? 'Click on the map' : 'Изберете точка от картата';\r\n if (type === 'area') { //geom instanceof Polygon\r\n helpMsg = window.translated ? 'Click on the map to continue drawing' : 'Изберете точка от картата, за да продължите с полигона';\r\n } else if (type === 'line') { //geom instanceof LineString\r\n helpMsg = window.translated ? 'Click on the map to continue drawing' : 'Изберете точка от картата, за да продължите с линията';\r\n } else {\r\n helpMsg = '';\r\n }\r\n\r\n this.helpTooltipElement.innerHTML = helpMsg;\r\n\r\n if (this.helpTooltip) {\r\n this.helpTooltip.setPosition(evt.coordinate);\r\n }\r\n\r\n this.helpTooltipElement.classList.remove('hidden');\r\n };\r\n\r\n private createMeasureTooltip() {\r\n if (this.measureTooltipElement && this.measureTooltipElement.parentNode) {\r\n this.measureTooltipElement.parentNode.removeChild(this.measureTooltipElement);\r\n }\r\n this.measureTooltipElement = document.createElement('div');\r\n this.measureTooltipElement.className = 'tooltip tooltip-measure';\r\n this.measureTooltip = new Overlay({\r\n element: this.measureTooltipElement,\r\n offset: [0, -15],\r\n positioning: OverlayPositioning.BOTTOM_CENTER\r\n });\r\n this.map.addOverlay(this.measureTooltip);\r\n }\r\n\r\n public on(type: MeasureEvents, handler: Function) {\r\n this.measureEvents[type] = handler;\r\n }\r\n\r\n // set measuredLength(value: number) {\r\n // console.log('the value is going to change')\r\n // this.measureEvents[this.events.MEASUREMENT_CHANGE](value);\r\n // this._measuredLength = value;\r\n // }\r\n}\r\n","export default class PubSub {\r\n events: Object;\r\n\r\n constructor() {\r\n this.events = {};\r\n }\r\n\r\n subscribe(event: string, callback: Function) {\r\n if (!this.events.hasOwnProperty(event)) {\r\n this.events[event] = [];\r\n }\r\n\r\n return this.events[event].push(callback);\r\n }\r\n\r\n publish(event: string, data: Object) {\r\n if (!this.events.hasOwnProperty(event)) {\r\n return [];\r\n }\r\n\r\n return this.events[event].map((callback: Function) => callback(data));\r\n }\r\n\r\n}\r\n","import { AppMap } from \"~/AppDomain/MapManager/Interfaces\";\r\nimport Selection from \"~/AppDomain/Selection/Selection\";\r\n\r\n\r\nexport default class SelectionManager extends Selection {\r\n private static instance: Selection | null = null;\r\n\r\n\r\n constructor(map: AppMap) {\r\n super(map);\r\n }\r\n\r\n static getInstance(map: AppMap) {\r\n if (!SelectionManager.instance) {\r\n SelectionManager.instance = new SelectionManager(map);\r\n }\r\n return SelectionManager.instance;\r\n }\r\n\r\n}\r\n","import * as React from 'react';\r\nimport { useState, useEffect, useRef, ChangeEvent, Fragment } from 'react';\r\nimport { createMuiTheme, FormControl, FormControlLabel, Radio, RadioGroup, ThemeProvider, Typography, TextField, InputBase, IconButton, InputLabel, OutlinedInput, InputAdornment, Divider } from '@material-ui/core';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport MapManager from '~/Domain/MapManager/MapManager';\r\nimport { appConfig } from '~/configLoader';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport AddCircleOutlineRoundedIcon from '@material-ui/icons/AddCircleOutlineRounded';\r\nimport axios from 'axios';\r\nimport { connect } from 'react-redux';\r\nimport { addExternalLayer } from '~/View/modules/applayers/operations';\r\n\r\n\r\n\r\n\r\nconst theme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: '#0fc5bd',\r\n },\r\n secondary: {\r\n main: '#3884d0',\r\n }\r\n },\r\n});\r\n\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n margin: {\r\n margin: theme.spacing(1),\r\n },\r\n withoutLabel: {\r\n marginTop: theme.spacing(3),\r\n },\r\n textField: {\r\n width: '25ch',\r\n },\r\n }),\r\n);\r\n\r\nlet baseMap: string = '';\r\nlet startBaseMapValue = 'osm';\r\nlet mapManager: MapManager | null;\r\n\r\n\r\ninterface DispatchProps {\r\n\r\n}\r\n\r\ninterface Props extends DispatchProps {\r\n\r\n}\r\n\r\nconst ExternalServices = (props: Props) => {\r\n const classes = useStyles();\r\n const [baseMapValue, setBaseMapValue] = useState(startBaseMapValue);\r\n const [inputValue, setInputValue] = useState('');\r\n const [showError, setShowError] = useState(false);\r\n\r\n useEffect(() => {\r\n baseMap = baseMapValue;\r\n\r\n return () => {\r\n // if (baseMap !== startBaseMapValue) {\r\n // startBaseMapValue = baseMap;\r\n // mapManager = MapManager.getInstance();\r\n // let baseMapUrl = '';\r\n // if (baseMap === 'topo') {\r\n // let baseMapConfiguredUrl = appConfig.basemaps.find((configBaseMap: any) => configBaseMap.name === 'topo');\r\n // baseMapUrl = baseMapConfiguredUrl ? baseMapConfiguredUrl.url : '';\r\n // } else if (baseMap === 'imagery') {\r\n // let baseMapConfiguredUrl = appConfig.basemaps.find((configBaseMap: any) => configBaseMap.name === 'imagery');\r\n // baseMapUrl = baseMapConfiguredUrl ? baseMapConfiguredUrl.url : '';\r\n // }\r\n // mapManager?.setBaseMap(baseMapUrl);\r\n // }\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n\r\n if (baseMap !== baseMapValue) {\r\n baseMap = baseMapValue;\r\n startBaseMapValue = baseMap;\r\n\r\n mapManager = MapManager.getInstance();\r\n let baseMapUrl = '';\r\n if (baseMap === 'osm') {\r\n baseMapUrl = 'osm';\r\n }\r\n else if (baseMap === 'topo') {\r\n let baseMapConfiguredUrl = appConfig.basemaps.find((configBaseMap: any) => configBaseMap.name === 'topo');\r\n baseMapUrl = baseMapConfiguredUrl ? baseMapConfiguredUrl.url : '';\r\n } else if (baseMap === 'imagery') {\r\n let baseMapConfiguredUrl = appConfig.basemaps.find((configBaseMap: any) => configBaseMap.name === 'imagery');\r\n baseMapUrl = baseMapConfiguredUrl ? baseMapConfiguredUrl.url : '';\r\n }\r\n mapManager?.setBaseMap(baseMapUrl);\r\n }\r\n\r\n\r\n }, [baseMapValue]);\r\n\r\n useEffect(() => {\r\n if (typeof (inputValue) === 'string' && !inputValue.length) {\r\n setShowError(false);\r\n }\r\n }, [inputValue]);\r\n\r\n\r\n const handleBaseMapValueChange = (event: React.ChangeEvent) => {\r\n setBaseMapValue((event.target as HTMLInputElement).value);\r\n };\r\n\r\n const loadWms = () => {\r\n const url = inputValue;\r\n if (url && url.length) {\r\n const wmsUrl = `${url}?SERVICE=WMS&REQUEST=GetCapabilities`; // ?\r\n axios.get(wmsUrl).then(r => { // , { headers: { 'Access-Control-Allow-Origin': '*' }, }\r\n const resultData = r.data;\r\n if (resultData) {\r\n try {\r\n let res: { url: string, mapName: string, layers: Array<{ title: string, layerId: string }> } = { url: '', mapName: '', layers: [] };\r\n let mapName = '';\r\n let parser = new DOMParser();\r\n let xmlDoc = parser.parseFromString(resultData, \"text/xml\");\r\n const xmlName = xmlDoc.getElementsByTagName(\"Service\");\r\n const xmlServiceTitle = xmlName[0].getElementsByTagName(\"Title\");\r\n mapName = (xmlServiceTitle ? xmlServiceTitle[0].textContent : '') as string;\r\n const xmlLayers = xmlDoc.getElementsByTagName(\"Layer\");\r\n let wmsLayers: Array<{ title: string, layerId: string }> = [];\r\n for (let i = 0; i < xmlLayers.length; i++) {\r\n if (xmlLayers[i]) {\r\n const xmlTitle = xmlLayers[i].getElementsByTagName(\"Title\");\r\n const xmlName = xmlLayers[i].getElementsByTagName(\"Name\");\r\n if (xmlTitle && xmlName) {\r\n const title = xmlTitle[0].textContent;\r\n const name = xmlName[0].textContent;\r\n wmsLayers.push({ layerName: title as string, layerIndex: name as string });\r\n }\r\n }\r\n }\r\n res.mapName = mapName;\r\n res.mapLayers = wmsLayers;\r\n res.mapUrl = url;\r\n props.addExternalLayer(res);\r\n\r\n } catch (err) {\r\n setShowError(true);\r\n console.error(err);\r\n }\r\n }\r\n }).catch(err => {\r\n setShowError(true);\r\n console.error(err);\r\n })\r\n }\r\n };\r\n\r\n return (\r\n
\r\n \r\n {window.translated ? \"Basemaps\" : \"Базови карти\"}\r\n \r\n \r\n \r\n \r\n }\r\n label=\"Open Street Map\"\r\n />\r\n }\r\n label={window.translated ? \"Topographic\" : \"Топографска карта\"}\r\n />\r\n }\r\n label={window.translated ? \"Satellite image\" : \"Сателитна карта\"}\r\n />\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n {window.translated ? \"Add WMS\" : \"Добавяне на WMS\"}\r\n \r\n \r\n \r\n WMS URL\r\n { setInputValue(val.target.value) }}\r\n endAdornment={\r\n \r\n { loadWms() }}\r\n onMouseDown={() => { }}\r\n edge=\"end\"\r\n style={{ outline: 'none' }}\r\n >\r\n \r\n \r\n \r\n }\r\n labelWidth={70}\r\n />\r\n \r\n \r\n {\r\n showError ?\r\n \r\n {window.translated ? \"There was an error!\" : \"Възникна грешка при опит за зареждане на въведния адрес!\"}\r\n \r\n :\r\n null\r\n }\r\n
\r\n );\r\n}\r\n\r\n// const mapStateToProps = (state: any) => ({\r\n\r\n// })\r\n\r\nexport default connect(null, { addExternalLayer })(ExternalServices);\r\n","import { ThunkAction } from \"~/View/redux\";\r\nimport { actions } from \"./actions\";\r\n\r\n// type SideDrawerProps = { email: string; password: string };\r\n\r\n// type Login = (_: LoginProps) => ThunkAction>;\r\n\r\nexport type MeasureDistance = (measuredDistance: number) => ThunkAction;\r\n\r\nexport const changeMeasuredDistance: MeasureDistance = (measuredDistance: number) => dispatch => {\r\n dispatch(actions.changeMeasuredDistance(measuredDistance));\r\n};\r\n\r\nexport const changeMeasuredArea: MeasureDistance = (measuredDistance: number) => dispatch => {\r\n dispatch(actions.changeMeasuredArea(measuredDistance));\r\n};\r\n\r\nexport const operations = {\r\n changeMeasuredDistance\r\n};\r\n","import { ThunkAction } from \"~/View/redux\";\r\nimport { actions } from \"./actions\";\r\n\r\n\r\nexport type Selections = (selections: Array) => ThunkAction;\r\n\r\nexport const selectionUpdate: Selections = (selections: Array) => dispatch => {\r\n dispatch(actions.selectionUpdate(selections));\r\n};\r\n\r\nexport const operations = {\r\n selectionUpdate\r\n};\r\n","import { FieldInfo } from \"../modules/applayers/reducer\";\r\n\r\ninterface MetadataObject {\r\n title: string;\r\n metadata: Array;\r\n}\r\n\r\nexport const handleDatasetMetadata = (metadata: string, restUrl?: string, wmsUrl?: string): { title: string, metadata: Array } => {\r\n let resultMetaDataObj: MetadataObject = { title: '', metadata: [] } as MetadataObject;\r\n\r\n try {\r\n let parser = new DOMParser();\r\n let xmlDoc = parser.parseFromString(metadata, \"text/xml\");\r\n let title = getXmlValue(xmlDoc, 'title');\r\n resultMetaDataObj.title = title;\r\n\r\n let purpose = getXmlValue(xmlDoc, 'purpose');\r\n // resultMetaDataObj.metadata.push({\r\n // title: 'Съдържание',\r\n // content: [purpose]\r\n // });\r\n\r\n let abstract = getXmlValue(xmlDoc, 'abstract');\r\n // resultMetaDataObj.metadata.push({\r\n // title: 'Описание',\r\n // content: [abstract]\r\n // });\r\n\r\n resultMetaDataObj.metadata.push({\r\n title: window.translated ? 'Content' : 'Съдържание',\r\n content: [purpose, abstract]\r\n });\r\n\r\n let source = getXmlValue(xmlDoc, 'datacred');\r\n resultMetaDataObj.metadata.push({\r\n title: window.translated ? 'Source' : 'Източник',\r\n content: [source]\r\n });\r\n\r\n let rest = restUrl ? `REST: ${restUrl}` : '';\r\n let wms = wmsUrl ? `WMS: ${wmsUrl}` : '';\r\n if (rest || wms) {\r\n resultMetaDataObj.metadata.push({\r\n title: window.translated ? 'URL' : 'URL на услугата',\r\n specific: {\r\n type: 'URL',\r\n content: [\r\n {\r\n title: 'REST',\r\n url: restUrl\r\n },\r\n {\r\n title: 'WMS',\r\n url: wmsUrl\r\n }\r\n ]\r\n }\r\n });\r\n }\r\n\r\n // let origin = getXmlValue(xmlDoc, 'origin');\r\n // let pubdate = getXmlValue(xmlDoc, 'pubdate');\r\n // let year = pubdate.substr(0, 4);\r\n // let month = pubdate.substr(4, 2);\r\n // let day = pubdate.substr(6, 2);\r\n // let date = `${day}/${month}/${year}`;\r\n // resultMetaDataObj.metadata.push({\r\n // title: 'Публикуване',\r\n // content: [date, origin]\r\n // });\r\n\r\n let useconst = getXmlValue(xmlDoc, 'useconst');\r\n resultMetaDataObj.metadata.push({\r\n title: window.translated ? 'Limitations' : 'Ограничения',\r\n content: [useconst]\r\n });\r\n\r\n let cntemail = getXmlValue(xmlDoc, 'cntemail');\r\n let email = `E-mail: ${cntemail}`\r\n\r\n let cntorg = getXmlValue(xmlDoc, 'cntorg');\r\n\r\n // let cntpos = getXmlValue(xmlDoc, 'cntpos');\r\n // let cntper = getXmlValue(xmlDoc, 'cntper');\r\n // let cnt = `${cntpos}: ${cntper}`\r\n\r\n let city = getXmlValue(xmlDoc, 'city');\r\n let address = getXmlValue(xmlDoc, 'address');\r\n let postal = getXmlValue(xmlDoc, 'postal');\r\n let cntvoice = getXmlValue(xmlDoc, 'cntvoice');\r\n let cntfax = getXmlValue(xmlDoc, 'cntfax');\r\n let tel = '';\r\n let fax = '';\r\n\r\n if (cntvoice) {\r\n tel = window.translated ? `Tel.: ${cntvoice}` : `Тел: ${cntvoice}`;\r\n }\r\n\r\n if (cntfax) {\r\n fax = window.translated ? `Fax: ${cntfax}` : `Факс: ${cntfax}`;\r\n }\r\n\r\n let adr = '';\r\n if (city && postal && cntvoice) {\r\n adr = window.translated ? `address: ${city}, ${postal}` : `адрес: ${city}, ${postal}`;\r\n } else {\r\n adr = address;\r\n }\r\n\r\n // let cntinfo = getXmlValue(xmlDoc, 'cntinfo');\r\n const orgName = window.translated ? 'NCRD' : 'НЦТР ЕАД';\r\n resultMetaDataObj.metadata.push({\r\n title: window.translated ? 'Contact' : 'Контакт',\r\n content: [orgName, adr, tel, fax, email]\r\n });\r\n\r\n\r\n let eastbc = getXmlValue(xmlDoc, 'eastbc');\r\n let westbc = getXmlValue(xmlDoc, 'westbc');\r\n let northbc = getXmlValue(xmlDoc, 'northbc');\r\n let southbc = getXmlValue(xmlDoc, 'southbc');\r\n\r\n resultMetaDataObj.metadata.push({\r\n title: window.translated ? 'Extent' : 'Обхват',\r\n specific: {\r\n type: 'HIDDEN',\r\n content: {\r\n xmin: westbc,\r\n ymin: southbc,\r\n xmax: eastbc,\r\n ymax: northbc\r\n\r\n }\r\n }\r\n });\r\n\r\n // let logic = getXmlValue(xmlDoc, 'logic');\r\n // resultMetaDataObj.metadata.push({\r\n // title: 'Точност',\r\n // content: [logic]\r\n // });\r\n\r\n // let mapprojn = getXmlValue(xmlDoc, 'mapprojn');\r\n\r\n // let eastbc = getXmlValue(xmlDoc, 'eastbc');\r\n // let westbc = getXmlValue(xmlDoc, 'westbc');\r\n // let northbc = getXmlValue(xmlDoc, 'northbc');\r\n // let southbc = getXmlValue(xmlDoc, 'southbc');\r\n\r\n // let east = `Изток: ${westbc}`;\r\n // let west = `Запад: ${eastbc}`;\r\n // let north = `Север: ${northbc}`;\r\n // let south = `Юг: ${southbc}`;\r\n\r\n // resultMetaDataObj.metadata.push({\r\n // title: 'Координатна система и обхват',\r\n // content: [mapprojn, west, east, north, south]\r\n // });\r\n\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n\r\n return resultMetaDataObj;\r\n}\r\n\r\nexport const getXmlValue = (xml: XMLDocument, tagName: string) => {\r\n let resValue = ''\r\n let tag = xml.getElementsByTagName(tagName)[0];\r\n if (tag) {\r\n let childNode = tag.childNodes[0];\r\n // resValue = childNode.nodeValue ? childNode.nodeValue.replace(/\\u21b5/g, '') : '';\r\n resValue = childNode.nodeValue ? childNode.nodeValue.replace(/\\n/g, '') : '';\r\n }\r\n return resValue;\r\n}\r\n\r\nexport const getMultipelXmlValues = (xml: XMLDocument, tagName: string, propNames: Array) => {\r\n let resValues: Array = [];\r\n let tags = xml.getElementsByTagName(tagName);\r\n if (tags && tags.length) {\r\n for (var i = 0; i < tags.length; i++) {\r\n let xmlProps = {};\r\n for (var j = 0; j < propNames.length; j++) {\r\n var subTag = tags[i].getElementsByTagName(propNames[j])[0];\r\n if (subTag) {\r\n let childNodes = subTag.childNodes[0];\r\n if (childNodes && childNodes.nodeValue) {\r\n xmlProps[propNames[j]] = childNodes.nodeValue.replace(/\\n/g, '');\r\n }\r\n }\r\n }\r\n resValues.push(xmlProps);\r\n }\r\n }\r\n return resValues;\r\n}\r\n\r\nexport const handleLayerMetadata = (layerMetadata: string, restUrl?: string, wmsUrl?: string) => {\r\n let resultMetaDataObj: { title: string, metadata: Array, fieldDescription: Array } = { title: '', metadata: [], fieldDescription: [] };\r\n\r\n try {\r\n let parser = new DOMParser();\r\n let xmlDoc = parser.parseFromString(layerMetadata, \"text/xml\");\r\n let title = getXmlValue(xmlDoc, 'title');\r\n let purpose = getXmlValue(xmlDoc, 'purpose');\r\n resultMetaDataObj.title = title;// || purpose;\r\n\r\n // resultMetaDataObj.metadata.push({\r\n // title: 'Съдържание',\r\n // content: [purpose]\r\n // });\r\n\r\n // let abstract = getXmlValue(xmlDoc, 'abstract');\r\n // resultMetaDataObj.metadata.push({\r\n // title: 'Описание',\r\n // content: [abstract]\r\n // });\r\n\r\n let abstract = getXmlValue(xmlDoc, 'abstract');\r\n resultMetaDataObj.metadata.push({\r\n title: window.translated ? 'Content' : 'Съдържание',\r\n content: [purpose, abstract]\r\n });\r\n\r\n let datacred = getXmlValue(xmlDoc, 'datacred');\r\n resultMetaDataObj.metadata.push({\r\n title: window.translated ? 'Source' : 'Източник',\r\n content: [datacred]\r\n });\r\n\r\n let begdate = getXmlValue(xmlDoc, 'begdate');\r\n let pubdate = getXmlValue(xmlDoc, 'pubdate');\r\n\r\n let begdateYear = begdate.substr(0, 4);\r\n let begdateMonth = begdate.substr(4, 2);\r\n let begdateDay = begdate.substr(6, 2);\r\n let begdateStr = `${begdateDay}-${begdateMonth}-${begdateYear}`;\r\n let begdateLabel = window.translated ? `Up to date: ${begdateStr}` : `Актуални към: ${begdateStr}`;\r\n\r\n let pubdateYear = pubdate.substr(0, 4);\r\n let pubdateMonth = pubdate.substr(4, 2);\r\n let pubdateDay = pubdate.substr(6, 2);\r\n let pubdateStr = `${pubdateDay}-${pubdateMonth}-${pubdateYear}`;\r\n let pubdateLabel = window.translated ? `Published: ${pubdateStr}` : `Публикувани на: ${pubdateStr}`;\r\n\r\n resultMetaDataObj.metadata.push({\r\n title: window.translated ? 'Data relevance' : 'Актуалност на данните',\r\n content: [begdateLabel, pubdateLabel]\r\n });\r\n\r\n let rest = restUrl ? `REST: ${restUrl}` : '';\r\n // let wms = wmsUrl ? `WMS: ${wmsUrl}` : '';\r\n if (rest) {\r\n resultMetaDataObj.metadata.push({\r\n title: window.translated ? 'URL' : 'URL на услугата',\r\n specific: {\r\n type: 'URL',\r\n content: [\r\n {\r\n title: 'REST',\r\n url: restUrl\r\n }\r\n ]\r\n }\r\n });\r\n }\r\n\r\n let useconst = getXmlValue(xmlDoc, 'useconst');\r\n resultMetaDataObj.metadata.push({\r\n title: window.translated ? 'Limitations' : 'Ограничения',\r\n content: [useconst]\r\n });\r\n\r\n let cntemail = getXmlValue(xmlDoc, 'cntemail');\r\n let email = `E-mail: ${cntemail}`\r\n\r\n let city = getXmlValue(xmlDoc, 'city');\r\n let address = getXmlValue(xmlDoc, 'address');\r\n let postal = getXmlValue(xmlDoc, 'postal');\r\n let cntvoice = getXmlValue(xmlDoc, 'cntvoice');\r\n let cntfax = getXmlValue(xmlDoc, 'cntfax');\r\n let tel = '';\r\n let fax = '';\r\n\r\n if (cntvoice) {\r\n tel = window.translated ? `Tel.: ${cntvoice}` : `Тел: ${cntvoice}`;\r\n }\r\n\r\n if (cntfax) {\r\n fax = window.translated ? `Fax: ${cntfax}` : `Факс: ${cntfax}`;\r\n }\r\n\r\n let adr = '';\r\n if (city && postal && cntvoice) {\r\n adr = window.translated ? `address: ${city}, ${postal}` : `адрес: ${city}, ${postal}`;\r\n } else {\r\n adr = address;\r\n }\r\n\r\n // let cntinfo = getXmlValue(xmlDoc, 'cntinfo');\r\n const orgName = window.translated ? 'NCRD' : 'НЦТР ЕАД';\r\n resultMetaDataObj.metadata.push({\r\n title: window.translated ? 'Contact' : 'Контакт',\r\n content: [orgName, adr, tel, fax, email]\r\n });\r\n\r\n // let themekey = getXmlValue(xmlDoc, 'themekey');\r\n // resultMetaDataObj.metadata.push({\r\n // title: 'Ключови думи',\r\n // content: [themekey]\r\n // });\r\n\r\n\r\n\r\n // let mapprojn = getXmlValue(xmlDoc, 'mapprojn');\r\n // resultMetaDataObj.metadata.push({\r\n // title: 'Проекционна координатна система',\r\n // content: [mapprojn]\r\n // });\r\n\r\n // let eastbc = getXmlValue(xmlDoc, 'eastbc');\r\n // let westbc = getXmlValue(xmlDoc, 'westbc');\r\n // let northbc = getXmlValue(xmlDoc, 'northbc');\r\n // let southbc = getXmlValue(xmlDoc, 'southbc');\r\n // let east = `Изток: ${westbc}`;\r\n // let west = `Запад: ${eastbc}`;\r\n // let north = `Север: ${northbc}`;\r\n // let south = `Юг: ${southbc}`;\r\n // resultMetaDataObj.metadata.push({\r\n // title: 'Географски координати на обхвата',\r\n // content: [east, west, north, south]\r\n // });\r\n\r\n // let ptvctcnt = getXmlValue(xmlDoc, 'ptvctcnt');\r\n // resultMetaDataObj.metadata.push({\r\n // title: 'Брой обекти',\r\n // content: [ptvctcnt]\r\n // });\r\n\r\n // resultMetaDataObj.metadata.push({\r\n // title: 'Дата на създаване',\r\n // content: []\r\n // });\r\n\r\n // resultMetaDataObj.metadata.push({\r\n // title: 'Дата на публикуване',\r\n // content: []\r\n // });\r\n\r\n // let attrdefProps = getMultipelXmlValues(xmlDoc, 'attr', ['attrdef', 'attrdefs']);\r\n // // resultMetaDataObj.fieldDescription = createFieldInfos(attrdefProps);\r\n // let attrsInfo = attrdefProps.filter(attrProp => attrProp['attrdefs'] && attrProp['attrdefs'].toLowerCase().indexOf('esri') === -1);\r\n // // console.log(attrsInfo)\r\n // resultMetaDataObj.metadata.push({\r\n // title: 'Информация за',\r\n // content: [attrsInfo.reduce>((acc, curr) => { acc.push(curr['attrdef']); return acc; }, []).join(',')]\r\n // });\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n\r\n return resultMetaDataObj;\r\n}\r\n\r\nexport const handleLayerFieldInfos = (layerMetadata: string) => {\r\n let fieldInfosRes: Array = [];\r\n try {\r\n\r\n let parser = new DOMParser();\r\n let xmlDoc = parser.parseFromString(layerMetadata, \"text/xml\");\r\n let attrdefProps = getMultipelXmlValues(xmlDoc, 'attr', ['attrlabl', 'attrdef', 'attrdefs', 'attrva', 'attrvae']);\r\n fieldInfosRes = attrdefProps.filter(f => f['attrdef'] && (f['attrdefs'] || '').toLowerCase() !== 'esri').map(fieldProps => {\r\n let fieldInfo = {\r\n fieldName: fieldProps['attrlabl'],\r\n fieldAlias: fieldProps['attrdef'],\r\n accuracy: fieldProps['attrvae'] || null,\r\n units: fieldProps['attrva'] || null,\r\n show: true\r\n };\r\n if (fieldInfo.fieldAlias === '!@') {\r\n fieldInfo.fieldAlias = '';\r\n }\r\n return fieldInfo;\r\n });\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n return fieldInfosRes;\r\n\r\n}\r\n","import * as React from 'react';\r\nimport { createMuiTheme, ThemeProvider } from \"@material-ui/core\";\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\n\r\ninterface Props {\r\n show: boolean;\r\n}\r\n\r\nconst theme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: '#0fc5bd',\r\n }\r\n },\r\n});\r\n\r\nconst Loading = (props: Props) => {\r\n\r\n return (\r\n <>\r\n {\r\n props.show\r\n ?\r\n \r\n\r\n
{ }} >\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n :\r\n null\r\n }\r\n \r\n )\r\n}\r\n\r\n\r\nexport default Loading;","import * as React from 'react';\r\nimport { useState, useEffect, useRef, ChangeEvent, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport TreeView from \"@material-ui/lab/TreeView\";\r\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\r\nimport ChevronRightIcon from \"@material-ui/icons/ChevronRight\";\r\nimport TreeItem from \"@material-ui/lab/TreeItem\";\r\nimport { FormControlLabel, Checkbox, Divider, Typography, createMuiTheme, ThemeProvider } from \"@material-ui/core\";\r\nimport Button from '@material-ui/core/Button';\r\nimport CachedRoundedIcon from '@material-ui/icons/CachedRounded';\r\nimport { ILayerListObject, IConfiguredLayersList } from '~/View/interfaces/ILayerListObject';\r\nimport { AppLayer, MapLayer, Metadata } from '~/View/modules/applayers/reducer';\r\nimport axios from 'axios';\r\nimport { handleDatasetMetadata, handleLayerMetadata, handleLayerFieldInfos } from '~/View/common/xmlManager';\r\nimport Loading from '../Loading';\r\nimport { updateAppLayers } from '~/View/modules/applayers/operations';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControl from '@material-ui/core/FormControl';\r\n// import MapManager from '~/Domain/MapManager/MapManager';\r\nimport { appConfig } from '~/configLoader';\r\n\r\n\r\nconst theme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: '#0fc5bd',\r\n }\r\n },\r\n typography: {\r\n fontSize: 12\r\n }\r\n});\r\n\r\n\r\n\r\ninterface IConfiguredMapServices {\r\n MapServiceUrl: string;\r\n MapServiceName: string;\r\n MapServiceId: string;\r\n layers: Array;\r\n checkedLayers?: Array;\r\n}\r\n\r\ninterface IConfiguredServiceLayer {\r\n layerName: string;\r\n layerUrl: string;\r\n layerId: string;\r\n Id: number;\r\n}\r\n\r\n// interface AppLayerList extends AppLayer {\r\n// mapName: string;\r\n// mapUrl: string;\r\n// metadata?: Metadata[];\r\n// metadataUrl: string;\r\n// mapLayers: MapLayerList[];\r\n// checked: boolean;\r\n// }\r\n\r\n// interface MapLayerList extends MapLayer {\r\n// checked: boolean;\r\n// }\r\n\r\ninterface DispatchProps {\r\n updateAppLayers: (appLayers: Array) => void;\r\n}\r\n\r\ninterface OwnProps {\r\n appLayers: Array;\r\n allAppLayers: Array;\r\n}\r\n\r\ninterface Props extends OwnProps, DispatchProps { }\r\n\r\nlet externalMapList: Array | null = null;\r\n\r\n// let baseMap: string = '';\r\n// let startBaseMapValue = 'topo';\r\n// let mapManager: MapManager | null;\r\n\r\nconst MapLayersList = (props: Props) => {\r\n const [mapsInList, setMapsInList] = useState | null>(null);\r\n const [expanded, setExpanded] = useState>([]);\r\n const [loading, setLoading] = useState(true);\r\n // const [baseMapValue, setBaseMapValue] = useState(startBaseMapValue);\r\n\r\n // const handleBaseMapValueChange = (event: React.ChangeEvent) => {\r\n // setBaseMapValue((event.target as HTMLInputElement).value);\r\n // };\r\n\r\n\r\n const handleToggle = (event: ChangeEvent<{}>, nodeIds: Array) => {\r\n setExpanded(nodeIds);\r\n };\r\n\r\n const openIconClicked = (nodeId: string) => {\r\n let _expanded = [...expanded];\r\n const containerIndex = _expanded.indexOf(nodeId);\r\n if (containerIndex === -1) {\r\n _expanded.push(nodeId);\r\n } else {\r\n _expanded.splice(containerIndex, 1);\r\n }\r\n setExpanded(_expanded);\r\n }\r\n\r\n useEffect(() => {\r\n let counter = 0;\r\n const _mapsInList = [...props.appLayers].sort((a, b) => a.orderNum - b.orderNum);\r\n let endCount = 0;\r\n for (var i = 0; i < _mapsInList.length; i++) {\r\n endCount += _mapsInList[i].mapLayers.filter(l => !l.layerName).length;\r\n }\r\n // _mapsInList.reduce((acc, curr) => (acc + curr.mapLayers.filter(l => !l.layerName).length), 0);\r\n if (_mapsInList.length) {\r\n _mapsInList.forEach(mapElement => {\r\n // const loadedLayerIndex = props.appLayers.findIndex(appLayer => appLayer.mapName === mapElement.mapName);\r\n // mapElement.show = loadedLayerIndex !== -1;\r\n\r\n const mapLayers = mapElement.mapLayers;\r\n for (let i = 0; i < mapLayers.length; i++) {\r\n // const appLayer = props.appLayers[loadedLayerIndex];\r\n // mapLayers[i].show = appLayer ? appLayer.mapLayers.some(mapLayer => mapLayer.layerName === mapLayers[i].layerName) : false;\r\n if (!mapLayers[i].layerName) {\r\n try {\r\n axios.get(mapLayers[i].layerMetadataUrl as string)\r\n .then(r => {\r\n counter++;\r\n const layerXml = r.data;\r\n const layerMetadata = handleLayerMetadata(layerXml);\r\n mapLayers[i].layerName = layerMetadata.title;\r\n mapLayers[i].layerMetadata = layerMetadata.metadata;\r\n mapLayers[i].fieldInfos = handleLayerFieldInfos(layerXml);\r\n if (counter === endCount) {\r\n setMapsInList(_mapsInList);\r\n setLoading(false);\r\n }\r\n })\r\n .catch(err => {\r\n counter++;\r\n console.error(err);\r\n if (counter === endCount) {\r\n setMapsInList(_mapsInList);\r\n setLoading(false);\r\n }\r\n })\r\n } catch (error) {\r\n console.error(error);\r\n continue;\r\n }\r\n }\r\n }\r\n });\r\n if (counter === endCount) {\r\n setMapsInList(props.appLayers);\r\n setLoading(false);\r\n }\r\n }\r\n\r\n return () => {\r\n updateMapsInLayerList();\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n externalMapList = mapsInList ? [...mapsInList] : mapsInList;\r\n }, [mapsInList]);\r\n\r\n // useEffect(() => {\r\n // baseMap = baseMapValue;\r\n // }, [baseMapValue])\r\n\r\n\r\n const addMap = (e: any, mapObject: AppLayer) => {\r\n // e.preventDefault();\r\n // е.stopPropagation()\r\n let uiMapList = mapsInList ? [...mapsInList] : [];\r\n uiMapList.some(uiMap => {\r\n if (uiMap.mapUrl === mapObject.mapUrl) {\r\n uiMap.show = !uiMap.show;\r\n uiMap.mapLayers.forEach(l => l.show = uiMap.show);\r\n return true;\r\n }\r\n return false;\r\n });\r\n setMapsInList(uiMapList);\r\n }\r\n\r\n const addLayerToList = (e: any, layerObject: MapLayer, mapObject: AppLayer) => {\r\n let uiMapList = mapsInList ? [...mapsInList] : [];\r\n uiMapList.some(uiMap => {\r\n if (mapObject.mapUrl === uiMap.mapUrl) {\r\n let layers = uiMap.mapLayers;\r\n for (let i = 0; i < layers.length; i++) {\r\n if (layers[i].layerUrl === layerObject.layerUrl) {\r\n layers[i].show = !layers[i].show;\r\n break;\r\n }\r\n }\r\n uiMap.show = layers.some(l => l.show);\r\n return true;\r\n }\r\n return false;\r\n });\r\n setMapsInList(uiMapList);\r\n }\r\n\r\n const updateMapsInLayerList = () => {\r\n // if (baseMap !== startBaseMapValue) {\r\n // startBaseMapValue = baseMap;\r\n // mapManager = MapManager.getInstance();\r\n // let baseMapUrl = '';\r\n // if (baseMap === 'topo') {\r\n // let baseMapConfiguredUrl = appConfig.basemaps.find((configBaseMap: any) => configBaseMap.name === 'topo');\r\n // baseMapUrl = baseMapConfiguredUrl ? baseMapConfiguredUrl.url : '';\r\n // } else if (baseMap === 'imagery') {\r\n // let baseMapConfiguredUrl = appConfig.basemaps.find((configBaseMap: any) => configBaseMap.name === 'imagery');\r\n // baseMapUrl = baseMapConfiguredUrl ? baseMapConfiguredUrl.url : '';\r\n // }\r\n // mapManager?.setBaseMap(baseMapUrl);\r\n // }\r\n // const _appLayers = [...props.appLayers];\r\n if (externalMapList) {\r\n let _mapsInList = [...externalMapList];\r\n props.updateAppLayers(_mapsInList);\r\n }\r\n\r\n // let newMapList = _mapsInList\r\n // .filter(mapElement => mapElement.checked)\r\n // .map(({ checked, ...rest }) => rest)\r\n // .map(({ mapLayers, ...rest }) => (\r\n // {\r\n // mapLayers: mapLayers\r\n // .filter(({ checked }) => checked)\r\n // .map(({ checked, ...restLayer }) => restLayer),\r\n // ...rest\r\n // }\r\n // ));\r\n // props.updateAppLayers(newMapList);\r\n\r\n // console.log('layers to update')\r\n // console.log(_mapsInList)\r\n // props.updateAppLayers(_mapsInList);\r\n\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n {/* }\r\n onClick={() => updateMapsInLayerList()}\r\n >\r\n {\"Обнови карта\"}\r\n */}\r\n {window.translated ? \"The map will be updated after closing the panel!\" : \"Картата ще се обнови след затваряне на панела!\"}\r\n
\r\n <>\r\n {/* */}\r\n }\r\n defaultExpandIcon={}\r\n expanded={expanded}\r\n onNodeToggle={handleToggle}\r\n multiSelect\r\n >\r\n {\r\n mapsInList && mapsInList.map((mapObject, i) => {\r\n return (\r\n \r\n \r\n { addMap(e, mapObject) }}\r\n style={{ color: '#0fc5bd', marginLeft: 10 }}\r\n checked={mapObject.show}\r\n />\r\n }\r\n label={mapObject.mapName}\r\n key={`${mapObject.mapName || i}_${i}_${i}`}\r\n />\r\n
\r\n // mapObject.MapServiceName\r\n }\r\n onLabelClick={(e: any) => { }}\r\n onIconClick={() => { openIconClicked(`${mapObject.mapName || i}_${i}`) }}\r\n style={{ color: 'black', margin: 5 }}\r\n >\r\n {\r\n mapObject.mapLayers.map((layerObject, j) => (\r\n \r\n { addLayerToList(e, layerObject, mapObject) }}\r\n style={{ color: '#0fc5bd' }}\r\n checked={layerObject.show}\r\n />\r\n }\r\n label={layerObject.layerName}\r\n key={`${layerObject.layerName || j}_${i}_${j}`}\r\n />\r\n \r\n }\r\n onLabelClick={() => { }}\r\n onIconClick={() => { }}\r\n />\r\n ))\r\n }\r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n {/* */}\r\n {/*
\r\n \r\n {\"Базови карти\"}\r\n \r\n \r\n \r\n \r\n }\r\n label=\"Топографска карта\"\r\n />\r\n }\r\n label=\"Сателитна карта\"\r\n />\r\n \r\n \r\n \r\n
*/}\r\n \r\n \r\n );\r\n}\r\n\r\nconst mapStateToProps = (state: any) => ({\r\n appLayers: state.appLayers.appLayers,\r\n allAppLayers: state.appLayers.allAppLayers\r\n});\r\n\r\nexport default connect(mapStateToProps, { updateAppLayers })(MapLayersList);\r\n","import * as React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nconst MapInfoCloseButton = styled.button`\r\n background-color: white;\r\n color: black;\r\n border: 2px solid #008CBA;\r\n /* padding: 6px 8px; */\r\n text-align: center;\r\n text-decoration: none;\r\n display: inline-block;\r\n font-size: 16px;\r\n /* margin: 4px 2px; */\r\n transition-duration: 0.4s;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background-color: #008CBA;\r\n color: white;\r\n }\r\n`;\r\n\r\nexport default MapInfoCloseButton;\r\n","import * as React from 'react';\r\nimport { useState, useEffect, useRef, ChangeEvent, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport TreeView from \"@material-ui/lab/TreeView\";\r\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\r\nimport ChevronRightIcon from \"@material-ui/icons/ChevronRight\";\r\nimport TreeItem from \"@material-ui/lab/TreeItem\";\r\nimport { FormControlLabel, Checkbox, Divider, Typography, createMuiTheme, ThemeProvider } from \"@material-ui/core\";\r\nimport Button from '@material-ui/core/Button';\r\nimport CachedRoundedIcon from '@material-ui/icons/CachedRounded';\r\nimport { ILayerListObject, IConfiguredLayersList } from '~/View/interfaces/ILayerListObject';\r\nimport { AppLayer, MapLayer, Metadata } from '~/View/modules/applayers/reducer';\r\nimport axios from 'axios';\r\nimport { handleDatasetMetadata, handleLayerMetadata, handleLayerFieldInfos } from '~/View/common/xmlManager';\r\nimport Loading from '../Loading';\r\nimport { updateAppLayers } from '~/View/modules/applayers/operations';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport MapManager from '~/Domain/MapManager/MapManager';\r\nimport { appConfig } from '~/configLoader';\r\n\r\n\r\nconst theme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: '#0fc5bd',\r\n }\r\n },\r\n typography: {\r\n fontSize: 12\r\n }\r\n});\r\n\r\ninterface IConfiguredServiceLayer {\r\n layerName: string;\r\n layerUrl: string;\r\n layerId: string;\r\n Id: number;\r\n}\r\n\r\n\r\ninterface DispatchProps {\r\n updateAppLayers: (appLayers: Array) => void;\r\n}\r\n\r\ninterface OwnProps {\r\n appLayers: Array;\r\n allAppLayers: Array;\r\n}\r\n\r\ninterface Props extends OwnProps, DispatchProps { }\r\n\r\nlet mapsInSettingsIllegal: Array = [];\r\n\r\nconst MapInfoSettings = (props: Props) => {\r\n const [mapsInSettings, setMapsInSettings] = useState>([...props.appLayers]);\r\n const [expanded, setExpanded] = useState>([]);\r\n const [loading, setLoading] = useState(true);\r\n\r\n\r\n useEffect(() => {\r\n // const _appLayers = [...props.appLayers];\r\n // setMapsInSettings(_appLayers);\r\n setLoading(false);\r\n\r\n return () => {\r\n updateChangesOnClose();\r\n }\r\n\r\n }, []);\r\n\r\n useEffect(() => {\r\n mapsInSettingsIllegal = [...mapsInSettings];\r\n }, [mapsInSettings]);\r\n\r\n const handleToggle = (event: ChangeEvent<{}>, nodeIds: Array) => {\r\n setExpanded(nodeIds);\r\n };\r\n\r\n const openIconClicked = (nodeId: string) => {\r\n let _expanded = [...expanded];\r\n const containerIndex = _expanded.indexOf(nodeId);\r\n if (containerIndex === -1) {\r\n _expanded.push(nodeId);\r\n } else {\r\n _expanded.splice(containerIndex, 1);\r\n }\r\n setExpanded(_expanded);\r\n }\r\n\r\n // const updateFieldInfoVisibility = (fieldName: string, show: boolean) => {\r\n // const _mapsInSettings = [...mapsInSettings];\r\n // _mapsInSettings.forEach(mapInSettings => {\r\n // const mapLayersInSettings = mapInSettings.mapLayers;\r\n // mapLayersInSettings.forEach(mapLayerInSettings => {\r\n // const fieldInfosInSettings = mapLayerInSettings.fieldInfos;\r\n // fieldInfosInSettings?.forEach(fieldInfoInSettings => {\r\n // if (fieldInfoInSettings.fieldName === fieldName) {\r\n // fieldInfoInSettings.show = show;\r\n // }\r\n // })\r\n // })\r\n // })\r\n // setMapsInSettings(_mapsInSettings);\r\n // }\r\n\r\n const updateLayerFieldInfoVisibility = (layerUrl: string, show: boolean) => {\r\n const _mapsInSettings = [...mapsInSettings];\r\n _mapsInSettings.forEach(mapInSettings => {\r\n const mapLayersInSettings = mapInSettings.mapLayers;\r\n mapLayersInSettings.forEach(mapLayerInSettings => {\r\n if (mapLayerInSettings.layerUrl === layerUrl) {\r\n mapLayerInSettings.showFieldInfo = show;\r\n }\r\n })\r\n })\r\n setMapsInSettings(_mapsInSettings);\r\n // to do leave only maps and layers\r\n }\r\n\r\n const updateMapFieldInfosVisibility = (mapUrl: string, show: boolean) => {\r\n const _mapsInSettings = [...mapsInSettings];\r\n for (let i = 0; i < _mapsInSettings.length; i++) {\r\n if (_mapsInSettings[i].mapUrl === mapUrl) {\r\n _mapsInSettings[i].mapLayers.forEach(mapLayer => mapLayer.showFieldInfo = show);\r\n break;\r\n }\r\n }\r\n setMapsInSettings(_mapsInSettings);\r\n }\r\n\r\n const updateChangesOnClose = () => {\r\n if (mapsInSettingsIllegal && mapsInSettingsIllegal.length) {\r\n props.updateAppLayers(mapsInSettingsIllegal);\r\n }\r\n }\r\n\r\n\r\n return (\r\n
\r\n \r\n <>\r\n \r\n }\r\n defaultExpandIcon={}\r\n expanded={expanded}\r\n onNodeToggle={handleToggle}\r\n multiSelect\r\n >\r\n {\r\n mapsInSettings.map((mapObject, i) => {\r\n return (\r\n \r\n \r\n { updateMapFieldInfosVisibility(mapObject.mapUrl, !mapObject.mapLayers.some(m => m.showFieldInfo)) }}\r\n style={{ color: '#0fc5bd', marginLeft: 10 }}\r\n checked={mapObject.mapLayers.some(m => m.showFieldInfo)}\r\n />\r\n }\r\n label={mapObject.mapName}\r\n key={`${mapObject.mapName || i}_${i}_${i}`}\r\n />\r\n
\r\n // mapObject.mapName\r\n }\r\n onLabelClick={(e: any) => { }}\r\n onIconClick={() => { openIconClicked(`${mapObject.mapName || i}_${i}`) }}\r\n style={{ color: 'black', margin: 5 }}\r\n >\r\n {\r\n mapObject.mapLayers.map((layerObject, j) => (\r\n \r\n { updateLayerFieldInfoVisibility(layerObject.layerUrl, !layerObject.showFieldInfo) }}\r\n style={{ color: '#0fc5bd' }}\r\n checked={layerObject.showFieldInfo}\r\n />\r\n }\r\n label={layerObject.layerName}\r\n key={`${layerObject.layerName || j}_${i}_${j}`}\r\n />\r\n \r\n }\r\n onLabelClick={() => { }}\r\n onIconClick={() => { }}\r\n >\r\n\r\n {/* {\r\n layerObject.fieldInfos ? layerObject.fieldInfos.map(fieldInfo => (\r\n \r\n { updateFieldInfoVisibility(fieldInfo.fieldName, !fieldInfo.show) }}\r\n style={{ color: '#0fc5bd' }}\r\n checked={fieldInfo.show}\r\n />\r\n }\r\n label={fieldInfo.fieldAlias}\r\n key={`${layerObject.layerName || j}_${i}_${j}_info`}\r\n />\r\n \r\n }\r\n onLabelClick={() => { }}\r\n onIconClick={() => { }}\r\n />\r\n ))\r\n :\r\n null\r\n } */}\r\n\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst mapStateToProps = (state: any) => ({\r\n appLayers: state.appLayers.appLayers,\r\n allAppLayers: state.appLayers.allAppLayers\r\n});\r\n\r\nexport default connect(mapStateToProps, { updateAppLayers })(MapInfoSettings);\r\n","import * as React from 'react';\r\nimport { Fragment } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport TreeItem, { TreeItemProps } from '@material-ui/lab/TreeItem';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n\r\nconst useTreeItemStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n color: theme.palette.text.secondary,\r\n '&:hover > $content': {\r\n // backgroundColor: theme.palette.action.hover,\r\n },\r\n '&:focus > $content, &$selected > $content': {\r\n // backgroundColor: `var(--tree-view-bg-color, ${theme.palette.grey[400]})`,\r\n color: 'var(--tree-view-color)',\r\n },\r\n '&:focus > $content $label, &:hover > $content $label, &$selected > $content $label': {\r\n backgroundColor: 'transparent',\r\n },\r\n '&$selected': {\r\n backgroundColor: 'transparent',\r\n }\r\n },\r\n content: {\r\n color: theme.palette.text.secondary,\r\n borderTopRightRadius: theme.spacing(2),\r\n borderBottomRightRadius: theme.spacing(2),\r\n paddingRight: theme.spacing(1),\r\n fontWeight: theme.typography.fontWeightMedium,\r\n '$expanded > &': {\r\n fontWeight: theme.typography.fontWeightRegular,\r\n },\r\n },\r\n group: {\r\n marginLeft: 0,\r\n '& $content': {\r\n paddingLeft: theme.spacing(2),\r\n },\r\n },\r\n expanded: {},\r\n selected: {},\r\n label: {\r\n fontWeight: 'inherit',\r\n color: 'inherit',\r\n },\r\n labelRoot: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: theme.spacing(0.5, 0),\r\n },\r\n labelicon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n labelText: {\r\n fontWeight: 'inherit',\r\n flexGrow: 1,\r\n },\r\n }),\r\n);\r\n\r\ntype StyledTreeItemProps = TreeItemProps & {\r\n bgColor?: string;\r\n color?: string;\r\n labelicon: JSX.Element;\r\n rowicons: Array;\r\n labelText: string;\r\n layerVisibility?: boolean;\r\n treeViewKey?: string | number;\r\n headItem?: boolean\r\n};\r\n\r\nconst StyledTreeItem = (props: StyledTreeItemProps) => {\r\n const classes = useTreeItemStyles();\r\n const { labelText, color, bgColor, style, treeViewKey, headItem, layerVisibility, ...other } = props;\r\n\r\n return (\r\n \r\n \r\n
\r\n {props.rowicons.map((rowIcon, i) => {rowIcon})}\r\n
\r\n \r\n }\r\n style={{\r\n '--tree-view-color': color,\r\n '--tree-view-bg-color': bgColor,\r\n ...style\r\n }}\r\n classes={{\r\n root: classes.root,\r\n content: classes.content,\r\n expanded: classes.expanded,\r\n selected: classes.selected,\r\n group: classes.group,\r\n label: classes.label,\r\n }}\r\n {...other}\r\n key={treeViewKey}\r\n />\r\n );\r\n}\r\n\r\nexport default StyledTreeItem;\r\n","import * as React from 'react';\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\nconst AppToolTip = withStyles({\r\n tooltip: {\r\n fontSize: 12\r\n }\r\n})(Tooltip);\r\n\r\nexport default AppToolTip;\r\n","import * as React from 'react';\r\nimport AppToolTip from './AppToolTip';\r\n\r\nconst RowButtonIcon = (props: { image: string; title: string; clickHandler: (ev: any) => void; }) => {\r\n const { image, clickHandler } = props;\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default RowButtonIcon;","import * as React from 'react';\r\nimport { useState, useEffect, useRef, ChangeEvent, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport TreeView from \"@material-ui/lab/TreeView\";\r\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\r\nimport ChevronRightIcon from \"@material-ui/icons/ChevronRight\";\r\nimport TreeItem from \"@material-ui/lab/TreeItem\";\r\nimport { FormControlLabel, Checkbox, Divider, createMuiTheme, ThemeProvider, IconButton, InputLabel, OutlinedInput, InputAdornment } from \"@material-ui/core\";\r\nimport AddCircleOutlineRoundedIcon from '@material-ui/icons/AddCircleOutlineRounded';\r\nimport Button from '@material-ui/core/Button';\r\nimport CachedRoundedIcon from '@material-ui/icons/CachedRounded';\r\nimport { ILayerListObject, IConfiguredLayersList } from '~/View/interfaces/ILayerListObject';\r\nimport { AppLayer, MapLayer, Metadata } from '~/View/modules/applayers/reducer';\r\nimport axios from 'axios';\r\nimport { handleDatasetMetadata, handleLayerMetadata, handleLayerFieldInfos } from '~/View/common/xmlManager';\r\nimport { updateAppLayers, updateDynamicMaps } from '~/View/modules/applayers/operations';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport MapManager from '~/Domain/MapManager/MapManager';\r\nimport Loading from '../Loading';\r\nimport StyledTreeItem from './StyledTreeItem';\r\nimport RowButtonIcon from './RowButtonIcon';\r\nimport LayerListIcon from '~/View/resources/icons/layers.svg';\r\nimport LayerVisibilityIcon2 from '~/View/resources/icons/eye.svg';\r\nimport LayerVisibilityHideIcon2 from '~/View/resources/icons/eye_hide.svg';\r\nimport Delete from '~/View/resources/icons/delete.svg';\r\n\r\nconst theme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: '#0fc5bd',\r\n }\r\n },\r\n typography: {\r\n fontSize: 12\r\n }\r\n});\r\n\r\ninterface DispatchProps {\r\n updateAppLayers: (appLayers: Array) => void;\r\n updateDynamicMaps: (dynamicMaps: Array) => void;\r\n}\r\n\r\ninterface CreatedMap {\r\n title: string;\r\n layers: Array;\r\n}\r\n\r\ninterface OwnProps {\r\n appLayers: Array;\r\n allAppLayers: Array;\r\n}\r\n\r\ninterface DynamicLayer extends MapLayer {\r\n showInList: boolean;\r\n}\r\n\r\ninterface DynamicMaps extends AppLayer {\r\n mapLayers: Array;\r\n}\r\n\r\ninterface Props extends OwnProps, DispatchProps { }\r\n\r\nlet createdMapIllegal: CreatedMap | null = null;\r\n\r\nconst DynamicMaps = (props: Props) => {\r\n\r\n const [appMaps, setAppMaps] = useState>([]);\r\n const [expanded, setExpanded] = useState>([]);\r\n const [dynamicMapsExpanded, setDynamicMapsExpanded] = useState>([]);\r\n const [loading, setLoading] = useState(true);\r\n const [createdMap, setCreatedMap] = useState({ title: \"\", layers: [] });\r\n const [inputTitle, setInputTitle] = useState('');\r\n\r\n\r\n useEffect(() => {\r\n createdMapIllegal = null;\r\n let dynamicAppLayers: Array = [];\r\n const appLayers = [...props.appLayers.filter(appLayer => appLayer.type === 'trusted')];\r\n appLayers.forEach(appLayer => {\r\n let updatedMapLayers: Array = [];\r\n const mapLayers = appLayer.mapLayers;\r\n mapLayers.forEach(mapLayer => {\r\n updatedMapLayers.push({ ...mapLayer, showInList: false });\r\n });\r\n dynamicAppLayers.push({\r\n ...appLayer,\r\n mapLayers: updatedMapLayers\r\n });\r\n });\r\n setAppMaps(dynamicAppLayers);\r\n\r\n setLoading(false);\r\n\r\n return () => {\r\n addCreatedMap();\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n setDynamicMapsExpanded([createdMap.title]);\r\n createdMapIllegal = createdMap;\r\n }, [createdMap]);\r\n\r\n const addCreatedMap = () => {\r\n if (createdMapIllegal && createdMapIllegal.title && createdMapIllegal.layers.length) {\r\n const dynamicMapsInApp = props.appLayers.filter(appLayer => appLayer.mapUrl.indexOf('DynamicMap') !== -1);\r\n const title = createdMapIllegal.title;\r\n const mapOrderNum = 100 * props.appLayers.length;\r\n let dynamicAppMapLayers: Array = createdMapIllegal.layers;\r\n dynamicAppMapLayers.forEach((dynamicLayer, i) => dynamicLayer.layerOrderNum = mapOrderNum - i - 1);\r\n\r\n const cretedAppMap: AppLayer = {\r\n mapName: title,\r\n mapUrl: `DynamicMap_${dynamicMapsInApp.length + 1}`,\r\n metadataUrl: '',\r\n mapLayers: dynamicAppMapLayers,\r\n show: true,\r\n orderNum: mapOrderNum,\r\n type: \"dynamic\"\r\n }\r\n const _appLayers = [...props.appLayers];\r\n _appLayers.push(cretedAppMap);\r\n props.updateAppLayers(_appLayers);\r\n // props.updateDynamicMaps([cretedAppMap]);\r\n\r\n }\r\n }\r\n\r\n const handleToggleOnDynamicLayers = (event: ChangeEvent<{}>, nodeIds: Array) => {\r\n console.log(nodeIds)\r\n setDynamicMapsExpanded(nodeIds);\r\n }\r\n\r\n const handleToggle = (event: ChangeEvent<{}>, nodeIds: Array) => {\r\n setExpanded(nodeIds);\r\n };\r\n\r\n const handleLayerClick = (layer: MapLayer) => {\r\n if (createdMap.title) {\r\n const layers = [...createdMap.layers];\r\n const layerIndex = layers.findIndex(l => l.layerUrl === layer.layerUrl);\r\n if (layerIndex !== -1) {\r\n layers.splice(layerIndex, 1);\r\n } else {\r\n layers.push(layer);\r\n }\r\n\r\n const _appMaps = [...appMaps];\r\n for (let i = 0; i < _appMaps.length; i++) {\r\n let isFound = false;\r\n let _mapLayers = _appMaps[i].mapLayers;\r\n for (let j = 0; j < _mapLayers.length; j++) {\r\n if (_mapLayers[j].layerUrl === layer.layerUrl) {\r\n _mapLayers[j].showInList = !_mapLayers[j].showInList;\r\n isFound = true;\r\n break;\r\n }\r\n }\r\n if (isFound) {\r\n break;\r\n }\r\n }\r\n layers.forEach(l => l.show = true);\r\n setCreatedMap({ ...createdMap, layers: layers });\r\n setAppMaps(_appMaps);\r\n }\r\n }\r\n\r\n const changeLayerVisibility = (layer: MapLayer) => {\r\n const _createdMap = { ...createdMap };\r\n for (let i = 0; i < _createdMap.layers.length; i++) {\r\n if (layer.layerUrl === _createdMap.layers[i].layerUrl) {\r\n _createdMap.layers[i].visible = !_createdMap.layers[i].visible;\r\n break;\r\n }\r\n }\r\n setCreatedMap(_createdMap);\r\n }\r\n\r\n const removeLayer = (layer: MapLayer) => {\r\n const _createdMap = { ...createdMap };\r\n for (let i = 0; i < _createdMap.layers.length; i++) {\r\n if (layer.layerUrl === _createdMap.layers[i].layerUrl) {\r\n _createdMap.layers.splice(i, 1);\r\n break;\r\n }\r\n }\r\n setCreatedMap(_createdMap);\r\n }\r\n\r\n const removeCreatedMap = () => {\r\n const _appMaps = [...appMaps];\r\n _appMaps.forEach(appMap => {\r\n appMap.mapLayers.forEach(mapLayer => mapLayer.showInList = false);\r\n });\r\n setInputTitle('');\r\n setAppMaps(_appMaps);\r\n setCreatedMap({ title: '', layers: [] });\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n
\r\n {\r\n createdMap.title ?\r\n \r\n { }}\r\n onIconClick={() => { }}\r\n style={{ color: 'black', margin: 5 }}\r\n labelicon={\r\n { }} />\r\n }\r\n rowicons={[\r\n { removeCreatedMap() }} />\r\n ]}\r\n >\r\n {\r\n createdMap.layers.map((layerObject, j) => (\r\n { }}\r\n onIconClick={() => { }}\r\n labelicon={\r\n { changeLayerVisibility(layerObject) }} />\r\n }\r\n rowicons={[\r\n { removeLayer(layerObject) }} />\r\n ]}\r\n >\r\n \r\n ))\r\n }\r\n \r\n \r\n :\r\n \r\n {window.translated ? \"Title\" : \"Заглавие\"}\r\n { setInputTitle(val.target.value) }}\r\n endAdornment={\r\n \r\n { setCreatedMap({ title: inputTitle, layers: [] }) }}\r\n onMouseDown={() => { }}\r\n edge=\"end\"\r\n style={{ outline: 'none' }}\r\n >\r\n \r\n \r\n \r\n }\r\n labelWidth={70}\r\n />\r\n \r\n }\r\n \r\n
\r\n {\r\n createdMap.title ?\r\n\r\n
\r\n \r\n }\r\n defaultExpandIcon={}\r\n expanded={expanded}\r\n onNodeToggle={handleToggle}\r\n multiSelect\r\n >\r\n {\r\n appMaps.map((mapObject, i) => {\r\n return (\r\n \r\n { }}\r\n onIconClick={() => { }}\r\n style={{ color: 'black', margin: 5 }}\r\n >\r\n {\r\n mapObject.mapLayers.map((layerObject, j) => (\r\n \r\n { handleLayerClick(layerObject) }}\r\n style={{ color: '#0fc5bd' }}\r\n checked={layerObject.showInList}\r\n disabled={!createdMap.title}\r\n />\r\n }\r\n label={layerObject.layerName}\r\n key={`${layerObject.layerName || j}_${i}_${j}`}\r\n />\r\n
\r\n }\r\n onLabelClick={() => { }}\r\n onIconClick={() => { }}\r\n >\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
\r\n :\r\n null\r\n }\r\n
\r\n\r\n \r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = (state: any) => ({\r\n appLayers: state.appLayers.appLayers,\r\n allAppLayers: state.appLayers.allAppLayers\r\n});\r\n\r\nexport default connect(mapStateToProps, { updateAppLayers, updateDynamicMaps })(DynamicMaps);\r\n","import * as React from 'react';\r\nimport { useState, CSSProperties } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport styled from 'styled-components';\r\nimport MapManager from '~/Domain/MapManager/MapManager';\r\nimport AppMeasure from '~/AppDomain/Measure/Measure';\r\nimport SelectionManager from '~/Domain/SelectionManager/SelectionManager';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\nimport { changeMeasuredDistance, changeMeasuredArea } from '~/View/modules/measurements/operations';\r\nimport { selectionUpdate } from '~/View/modules/selections/operations'\r\n\r\nimport MapLayersList from './MapLayersList';\r\nimport { Divider } from '@material-ui/core';\r\nimport DeleteForeverRoundedIcon from '@material-ui/icons/DeleteForeverRounded';\r\nimport TimelineRoundedIcon from '@material-ui/icons/TimelineRounded';\r\nimport PersonRoundedIcon from '@material-ui/icons/PersonRounded';\r\nimport SettingsRoundedIcon from '@material-ui/icons/SettingsRounded';\r\n\r\nimport Badge from '@material-ui/core/Badge';\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport axios from 'axios';\r\n\r\nimport MapInfo from '~/View/resources/icons/map_info.svg';\r\nimport MapMeasure from '~/View/resources/icons/map_measure.svg';\r\nimport MapExport from '~/View/resources/icons/map_export.svg';\r\nimport MapSelect from '~/View/resources/icons/map_select.svg';\r\nimport MapLayers from '~/View/resources/icons/map_layers.svg';\r\nimport AddMapLayers from '~/View/resources/icons/add_map_layers.svg';\r\nimport PolygonIcon from '~/View/resources/icons/polygon.svg';\r\nimport ExcelIcon from '~/View/resources/icons/excell.svg';\r\nimport CsvIcon from '~/View/resources/icons/csv.svg';\r\nimport GmllIcon from '~/View/resources/icons/gml.svg';\r\nimport JpgIcon from '~/View/resources/icons/jpg.svg';\r\nimport CreateMaps from '~/View/resources/icons/edit-map.svg';\r\nimport ExternalServices from './ExternalServices';\r\nimport MapInfoCloseButton from './MapInfoCloseButton';\r\nimport MapInfoSettings from './MapInfoSettings';\r\nimport DynamicMaps from '../Widgets/DynamicMaps';\r\nimport { createMuiTheme, ThemeProvider } from \"@material-ui/core\";\r\n\r\n\r\nconst theme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: '#0fc5bd',\r\n }\r\n },\r\n typography: {\r\n fontSize: 12\r\n }\r\n});\r\n\r\nconst MapButton = styled.div`\r\n text-align: center;\r\n margin: 3px;\r\n float: left;\r\n display: block;\r\n color: #ffffff;\r\n background: ${props => props.color || '#0fc5bd'};\r\n padding: 0.5rem;\r\n text-decoration: none;\r\n font-size: .75rem;\r\n /* text-transform: uppercase; */\r\n /* line-height: 2.5rem; */\r\n font-weight: 700;\r\n /* border-radius: 10px; */\r\n width: 3rem;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n /* background-color: #555; */\r\n background-color: #12ede2;\r\n color: #ffffff;\r\n }\r\n`;\r\n\r\nconst MapButtonSelected = styled.div`\r\n text-align: center;\r\n margin: 5px;\r\n background-color: ${props => props.color};\r\n \r\n float: left;\r\n display: block;\r\n color: #ffffff;\r\n padding: 0.5rem;\r\n text-decoration: none;\r\n font-size: .75rem;\r\n text-transform: uppercase;\r\n /* line-height: 2.5rem; */\r\n font-weight: 700;\r\n /* border-radius: 10px; */\r\n width: 3rem;\r\n cursor: pointer;\r\n`;\r\n\r\nconst ExportItem = styled.span`\r\n float: none;\r\n color: #3884d0;\r\n padding: .7rem 1rem;\r\n text-decoration: none;\r\n display: block;\r\n text-align: left;\r\n background: #ffffff;\r\n text-transform: none;\r\n font-weight: normal;\r\n line-height: normal;\r\n cursor: pointer;\r\n &:hover {\r\n background-color: transparent;\r\n color: #212121;\r\n }\r\n`;\r\n\r\nenum ButtonTypes {\r\n INFO = \"info\",\r\n INFOSETTINGS = \"infosettings\",\r\n MEASURE = \"measure\",\r\n EXPORT = \"export\",\r\n SELECT = \"select\",\r\n MAPS = \"maps\",\r\n EXTERNAL = \"external\",\r\n DYNAMIC = \"dynamic\"\r\n}\r\n\r\ninterface IDispachers {\r\n changeMeasuredArea: (measurement: number) => void;\r\n changeMeasuredDistance: (measurement: number) => void;\r\n selectionUpdate: (selections: Array) => void;\r\n}\r\n\r\ninterface OwnProps {\r\n selections: Array;\r\n}\r\n\r\ninterface Props extends IDispachers, OwnProps {\r\n changeMapEvent: (eventType: string) => void;\r\n changeLoading: (loadingState: boolean) => void;\r\n}\r\n\r\nvar appMeasure: AppMeasure | undefined;\r\nvar selectionManager: SelectionManager | undefined;\r\n\r\nconst MapButtons = (props: Props) => {\r\n\r\n const sideWindowStyle: CSSProperties = {\r\n position: 'absolute',\r\n backgroundColor: '#f9f9f9',\r\n minWidth: 350,\r\n // maxHeight: '32vh',\r\n width: 430, //'25vw',\r\n boxShadow: '0px 8px 16px 0px rgba(0,0,0,0.2)',\r\n zIndex: 1,\r\n padding: '1rem',\r\n right: '3.8rem',\r\n top: 0,\r\n height: '89vh', //'32vh',\r\n // top: '3.6rem',\r\n // borderTopLeftRadius: 10,\r\n // borderBottomLeftRadius: 10,\r\n // borderBottomRightRadius: 10,\r\n borderColor: '#12ede2',\r\n borderWidth: 1,\r\n borderStyle: 'solid',\r\n opacity: 0.95\r\n }\r\n\r\n const AppToolTip = withStyles({\r\n tooltip: {\r\n borderColor: '#12ede2',\r\n borderWidth: 1,\r\n borderStyle: 'solid',\r\n color: '#000000',\r\n backgroundColor: \"#F8F6F6\",\r\n fontSize: 14,\r\n borderRadius: 0\r\n }\r\n })(Tooltip);\r\n\r\n const [infoButtonOn, setInfoButtonOn] = useState(false);\r\n const [measure, setMeasure] = useState(false);\r\n const [showExports, setShowExports] = useState(false);\r\n const [showMeasurementOptions, setShowMeasurementOptions] = useState(false);\r\n const [showSelectionOptions, setShowSelectionOptions] = useState(false);\r\n const [showLayersToAdd, setShowLayersToAdd] = useState(false);\r\n const [showExternalLayersToAdd, setShowExternalLayersToAdd] = useState(false);\r\n const [infoSettings, setInfoSettings] = useState(false);\r\n const [dynamicMaps, setDynamicMaps] = useState(false);\r\n\r\n\r\n const handlePanels = (type: string, mapEventType?: string) => {\r\n let _infoButtonOn = false;\r\n let _measure = false;\r\n let _showExports = false;\r\n let _showMeasurementOptions = false;\r\n let _showSelectionOptions = false;\r\n let _showLayersToAdd = false;\r\n let _showExternalLayersToAdd = false;\r\n let _infoSettings = false;\r\n let _dynamicMaps = false;\r\n\r\n\r\n switch (type) {\r\n case ButtonTypes.MEASURE:\r\n _measure = !measure;\r\n _showMeasurementOptions = !showMeasurementOptions;\r\n break;\r\n\r\n case ButtonTypes.EXPORT:\r\n _showExports = !showExports;\r\n break;\r\n\r\n case ButtonTypes.SELECT:\r\n _showSelectionOptions = !showSelectionOptions;\r\n break;\r\n\r\n case ButtonTypes.MAPS:\r\n _showLayersToAdd = !showLayersToAdd;\r\n break;\r\n\r\n case ButtonTypes.EXTERNAL:\r\n _showExternalLayersToAdd = !showExternalLayersToAdd;\r\n break;\r\n\r\n case ButtonTypes.INFO:\r\n _infoButtonOn = !infoButtonOn;\r\n // setInfoButtonOn(mapEventType === 'identify' ? true : false);\r\n // props.changeMapEvent(mapEventType as string);\r\n break;\r\n\r\n case ButtonTypes.INFOSETTINGS:\r\n _infoSettings = !infoSettings;\r\n break;\r\n\r\n case ButtonTypes.DYNAMIC:\r\n _dynamicMaps = !dynamicMaps;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n setMeasure(_measure);\r\n setShowExports(_showExports);\r\n setShowMeasurementOptions(_showMeasurementOptions);\r\n setShowSelectionOptions(_showSelectionOptions);\r\n setShowLayersToAdd(_showLayersToAdd);\r\n setShowExternalLayersToAdd(_showExternalLayersToAdd);\r\n setInfoButtonOn(_infoButtonOn);\r\n setInfoSettings(_infoSettings);\r\n setDynamicMaps(_dynamicMaps);\r\n\r\n if (mapEventType) {\r\n props.changeMapEvent(mapEventType);\r\n }\r\n\r\n\r\n // setInfoButtonOn(mapEventType === 'identify' ? true : false);\r\n // props.changeMapEvent(mapEventType || 'stopIdentify');\r\n\r\n }\r\n\r\n\r\n const changeMapEventType = (mapEventType: string) => {\r\n setInfoButtonOn(mapEventType === 'identify' ? true : false);\r\n props.changeMapEvent(mapEventType);\r\n }\r\n\r\n const measureClick = (type?: string) => {\r\n // if (!measure) {\r\n let mapManager = MapManager.getInstance();\r\n const map = mapManager?.map;\r\n if (map) {\r\n if (!appMeasure) {\r\n appMeasure = new AppMeasure(map, true);\r\n }\r\n if (type === 'line') {\r\n appMeasure.measureLine();\r\n } else if (type === 'polygon') {\r\n appMeasure.measureArea();\r\n } else {\r\n appMeasure.stopDraw();\r\n props.changeMeasuredArea(0);\r\n props.changeMeasuredDistance(0);\r\n }\r\n appMeasure.on(appMeasure.events.MEASUREMENT_CHANGE, (measuredLength: number) => {\r\n if (type === 'line') {\r\n props.changeMeasuredArea(0);\r\n props.changeMeasuredDistance(measuredLength);\r\n } else if (type === 'polygon') {\r\n props.changeMeasuredDistance(0);\r\n props.changeMeasuredArea(measuredLength);\r\n }\r\n })\r\n }\r\n // } else {\r\n // if (appMeasure) {\r\n // appMeasure.stopDraw();\r\n // props.changeMeasuredArea(0);\r\n // props.changeMeasuredDistance(0);\r\n // }\r\n // }\r\n handlePanels(ButtonTypes.MEASURE);\r\n setMeasure(!measure);\r\n }\r\n\r\n const selectFeatures = (type: string) => {\r\n let mapManager = MapManager.getInstance();\r\n const map = mapManager?.map;\r\n if (map) {\r\n if (!selectionManager) {\r\n selectionManager = SelectionManager.getInstance(map);\r\n\r\n selectionManager.on('selectionChanged', (selection) => {\r\n // console.log('selection changed')\r\n // console.log(selection)\r\n props.changeLoading(false);\r\n props.selectionUpdate(selection);\r\n });\r\n\r\n selectionManager.on('drawEnd', () => {\r\n props.changeLoading(true);\r\n })\r\n }\r\n\r\n if (type === 'line') {\r\n selectionManager.selectByLine();\r\n } else if (type === 'polygon') {\r\n selectionManager.selectByPolygon();\r\n }\r\n }\r\n handlePanels(ButtonTypes.SELECT);\r\n }\r\n\r\n const handleExports = (type: string) => {\r\n switch (type) {\r\n case \"excel\":\r\n exportToExcel();\r\n break;\r\n default:\r\n\r\n break;\r\n\r\n }\r\n handlePanels(ButtonTypes.EXPORT);\r\n }\r\n\r\n const exportToExcel = () => {\r\n const selections = props.selections;\r\n const sheetObjects = [];\r\n try {\r\n if (selections && selections.length) {\r\n selections.forEach(sel => {\r\n const features = sel.features.map((f: { attributes: any }) => f.attributes);\r\n let fields = sel.fields;\r\n // console.log(features[0])\r\n let featureFields = Object.keys(features[0]);\r\n let columns = fields.filter((f: any) => featureFields.indexOf(f.name) !== -1).map((filteredField: any) => filteredField.alias)\r\n\r\n let sheetObject = {\r\n name: sel.layerName,\r\n features,\r\n columns\r\n };\r\n sheetObjects.push(sheetObject);\r\n });\r\n }\r\n // let my_form = document.createElement('FORM');\r\n // my_form.name = 'myForm';\r\n // my_form.method = 'POST';\r\n // my_form.action = 'http://127.0.0.1:8000';\r\n\r\n // let my_tb = document.createElement('INPUT');\r\n // my_tb.type = 'TEXT';\r\n // my_tb.name = 'content';\r\n // my_tb.value = JSON.stringify(sheetObjects);\r\n // my_form.appendChild(my_tb);\r\n // document.body.appendChild(my_form);\r\n // my_form.submit();\r\n // document.body.removeChild(my_form);\r\n\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n\r\n\r\n }\r\n\r\n const clearSelection = () => {\r\n if (selectionManager) {\r\n selectionManager.removeAll();\r\n }\r\n handlePanels(ButtonTypes.SELECT);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n\r\n {\r\n infoButtonOn ?\r\n \r\n \r\n handlePanels(ButtonTypes.INFO, 'stopIdentify')}>\r\n \"\" {/*width: 20, verticalAlign: 'text-top', marginRight: '.2rem' */}\r\n \r\n \r\n \r\n :\r\n \r\n \r\n handlePanels(ButtonTypes.INFO, 'identify')}>\r\n \"\" {/*width: 20, verticalAlign: 'text-top', marginRight: '.2rem' */}\r\n \r\n \r\n \r\n }\r\n {\r\n \r\n \r\n {\r\n handlePanels(ButtonTypes.MEASURE, 'stopIdentify')}\r\n color={showMeasurementOptions ? '#12ede2' : '#0fc5bd'}\r\n >\r\n \"\"\r\n \r\n\r\n }\r\n\r\n {\r\n showMeasurementOptions\r\n ?\r\n
\r\n
\r\n measureClick('line')}>\r\n {/* \"\" */}\r\n
\r\n \r\n
\r\n
\r\n {window.translated ? \"Line\" : \"Линия\"}\r\n
\r\n
\r\n \r\n measureClick('polygon')}>\r\n \"\"\r\n
\r\n {window.translated ? \"Polygon\" : \"Полигон\"}\r\n
\r\n
\r\n \r\n measureClick('')}>\r\n
\r\n \r\n
\r\n
\r\n {window.translated ? \"Clear\" : \"Изчисти\"}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n { handlePanels(ButtonTypes.MEASURE) }}>\r\n {window.translated ? \"Close\" : \"Затвори\"}\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n :\r\n null\r\n }\r\n
\r\n\r\n
\r\n\r\n }\r\n \r\n \r\n\r\n handlePanels(ButtonTypes.EXPORT, 'stopIdentify')}\r\n color={showExports ? '#12ede2' : '#0fc5bd'}\r\n >\r\n \"\"\r\n\r\n \r\n {\r\n showExports\r\n ?\r\n
\r\n
\r\n handleExports(\"excel\")}>\r\n \"\"\r\n {\"Excel\"}\r\n \r\n \r\n handleExports(\"\")}>\r\n \"\"\r\n {\"CSV\"}\r\n \r\n \r\n handleExports(\"\")}>\r\n \"\"\r\n {\"GML\"}\r\n \r\n \r\n handleExports(\"\")}>\r\n \"\"\r\n {window.translated ? \"Map (JPEG)\" : \"Карта (JPEG)\"}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n { handlePanels(ButtonTypes.EXPORT) }}>\r\n {window.translated ? \"Close\" : \"Затвори\"}\r\n \r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n :\r\n null\r\n }\r\n
\r\n
\r\n { return acc.concat(curr.features) }, []).length : 0}>\r\n \r\n \r\n\r\n handlePanels(ButtonTypes.SELECT, 'stopIdentify')}\r\n color={showSelectionOptions ? '#12ede2' : '#0fc5bd'}\r\n >\r\n \"\"\r\n\r\n \r\n {\r\n showSelectionOptions\r\n ?\r\n
\r\n
\r\n selectFeatures('line')}>\r\n
\r\n \r\n
\r\n
\r\n {window.translated ? \"Line\" : \"Линия\"}\r\n
\r\n
\r\n \r\n selectFeatures('polygon')}>\r\n \"\"\r\n
\r\n {window.translated ? \"Polygon\" : \"Полигон\"}\r\n
\r\n
\r\n \r\n clearSelection()}>\r\n
\r\n \r\n
\r\n
\r\n {window.translated ? \"Clear\" : \"Изчисти\"}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n { handlePanels(ButtonTypes.SELECT) }}>\r\n {window.translated ? \"Close\" : \"Затвори\"}\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n :\r\n null\r\n }\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n handlePanels(ButtonTypes.MAPS, 'stopIdentify')}\r\n color={showLayersToAdd ? '#12ede2' : '#0fc5bd'}\r\n >\r\n \"\"\r\n\r\n \r\n {\r\n showLayersToAdd\r\n ?\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n { handlePanels(ButtonTypes.MAPS) }}>\r\n {window.translated ? \"Close\" : \"Затвори\"}\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n :\r\n null\r\n }\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n handlePanels(ButtonTypes.EXTERNAL, 'stopIdentify')}\r\n color={showExternalLayersToAdd ? '#12ede2' : '#0fc5bd'}\r\n >\r\n \"\"\r\n\r\n \r\n {\r\n showExternalLayersToAdd\r\n ?\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n { handlePanels(ButtonTypes.EXTERNAL) }}>\r\n {window.translated ? \"Close\" : \"Затвори\"}\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n :\r\n null\r\n }\r\n
\r\n
\r\n\r\n \r\n \r\n handlePanels(ButtonTypes.DYNAMIC)}\r\n color={dynamicMaps ? '#12ede2' : '#0fc5bd'}\r\n >\r\n \"\"\r\n \r\n {\r\n dynamicMaps\r\n ?\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n { handlePanels(ButtonTypes.DYNAMIC) }}>\r\n {window.translated ? \"Close\" : \"Затвори\"}\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n :\r\n null\r\n }\r\n
\r\n
\r\n\r\n \r\n \r\n handlePanels(ButtonTypes.INFOSETTINGS)}\r\n color={infoSettings ? '#12ede2' : '#0fc5bd'}\r\n >\r\n \r\n \r\n {\r\n infoSettings\r\n ?\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n { handlePanels(ButtonTypes.INFOSETTINGS) }}>\r\n {window.translated ? \"Close\" : \"Затвори\"}\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n :\r\n null\r\n }\r\n
\r\n
\r\n\r\n \r\n \r\n { }}\r\n >\r\n \r\n \r\n \r\n \r\n\r\n
\r\n\r\n
\r\n
\r\n );\r\n}\r\n\r\nconst mapStateToProps = (state: any) => ({\r\n selections: state.selections.selections\r\n})\r\n\r\nexport default connect(mapStateToProps, { changeMeasuredDistance, changeMeasuredArea, selectionUpdate })(MapButtons);\r\n","import * as React from 'react';\r\nimport { useState, useEffect, Fragment } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport MuiDialogTitle from '@material-ui/core/DialogTitle';\r\nimport MuiDialogContent from '@material-ui/core/DialogContent';\r\nimport MuiDialogActions from '@material-ui/core/DialogActions';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { withStyles, WithStyles } from \"@material-ui/core/styles\";\r\nimport { Divider } from '@material-ui/core';\r\n\r\n\r\nconst styles = (theme: Theme) => {\r\n return createStyles({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(2)\r\n },\r\n closeButton: {\r\n position: 'absolute',\r\n right: theme.spacing(1),\r\n top: theme.spacing(1),\r\n color: theme.palette.grey[500],\r\n },\r\n });\r\n}\r\n\r\nexport interface DialogTitleProps extends WithStyles {\r\n id: string;\r\n children: React.ReactNode;\r\n onClose: () => void;\r\n}\r\n\r\nconst DialogTitle = withStyles(styles)((props: DialogTitleProps) => {\r\n const { children, classes, onClose, ...other } = props;\r\n return (\r\n \r\n {children}\r\n {/* {onClose ? (\r\n \r\n \r\n \r\n ) : null} */}\r\n \r\n );\r\n});\r\n\r\nconst DialogContent = withStyles((theme: Theme) => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n fontFamily: 'Helvetica Neue,Helvetica,Arial,sans-serif;',\r\n fontSize: 12\r\n },\r\n}))(MuiDialogContent);\r\n\r\nconst DialogActions = withStyles((theme: Theme) => ({\r\n root: {\r\n margin: 0,\r\n padding: theme.spacing(1),\r\n },\r\n}))(MuiDialogActions);\r\n\r\ninterface Props {\r\n open: boolean;\r\n handleClose: () => void;\r\n data: any;\r\n}\r\n\r\n\r\nconst AppDialog = (props: Props) => {\r\n\r\n const [data, setData] = useState(props.data);\r\n\r\n useEffect(() => {\r\n if (props.data && props.data.content) {\r\n setData(props.data)\r\n // console.log(xmlToJson(xmlDoc))\r\n }\r\n }, [props.data]);\r\n\r\n const handleHipperLinks = (value: string) => {\r\n let handledHtml = [];\r\n const splittedByBeginLabel = value.split('beginlink');\r\n handledHtml = splittedByBeginLabel.map((splittedBegin, i) => {\r\n if (splittedBegin.indexOf('endlink') !== -1) {\r\n const beginLabelIndex = splittedBegin.indexOf('beginlabel');\r\n let url = splittedBegin.substring(0, beginLabelIndex);\r\n if (url) {\r\n url = url.trim();\r\n }\r\n const endLabelIndex = splittedBegin.indexOf('endlabel');\r\n let label = splittedBegin.substring(beginLabelIndex + 10, endLabelIndex);\r\n if (label) {\r\n label = label.trim();\r\n }\r\n return {label} \r\n }\r\n return
{splittedBegin}
;\r\n })\r\n return handledHtml\r\n }\r\n\r\n return (\r\n \r\n \r\n {props.data.title}\r\n \r\n \r\n {/* \r\n Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis\r\n in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.\r\n */}\r\n {/* \r\n {`${ props.data.content } `}\r\n */}\r\n {\r\n data && data.content ?\r\n data.content.map((d: { title: string, content?: string[], specific?: { type: string, content: { title: string, url: string }[] } }, i: number) => {\r\n var resultElement = (\r\n \r\n {i !== 0 ? : null}\r\n
\r\n
\r\n {d.title}\r\n
\r\n {\r\n d.content\r\n ?\r\n
\r\n {d.content.map((c, j) =>
{handleHipperLinks(c)}
)}\r\n
\r\n :\r\n d.specific\r\n ?\r\n
\r\n {\r\n d.specific.type === 'URL'\r\n ?\r\n
\r\n {\r\n d.specific.content.map((el, j) => (\r\n <>\r\n {`${el.title}: ${el.url} `}\r\n
\r\n \r\n ))\r\n }\r\n
\r\n\r\n :\r\n null\r\n\r\n }\r\n
\r\n :\r\n null\r\n\r\n }\r\n
\r\n
\r\n );\r\n return resultElement;\r\n })\r\n :\r\n null\r\n }\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default AppDialog;\r\n","import * as React from 'react';\r\nimport { useState, useEffect, Fragment, ChangeEvent } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport TreeView from '@material-ui/lab/TreeView';\r\nimport TreeItem, { TreeItemProps } from '@material-ui/lab/TreeItem';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\r\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\r\nimport SvgIcon from '@material-ui/core/SvgIcon';\r\n\r\nimport MetaListIconBlack from '~/View/resources/icons/metadata_list2.svg';\r\nimport MetaListIconBlackDisabled from '~/View/resources/icons/metadata_list2_disabled.svg';\r\n\r\nimport MetaListIcon from '~/View/resources/icons/metadata_list.svg';\r\nimport MoveDownIcon from '~/View/resources/icons/move_down.svg';\r\nimport MoveUpIcon from '~/View/resources/icons/move_up.svg';\r\nimport LegendIcon from '~/View/resources/icons/legend.svg';\r\nimport ZoomToIcon from '~/View/resources/icons/zoom_to.svg';\r\n\r\nimport LayerListIcon from '~/View/resources/icons/layers.svg';\r\n\r\nimport LayerVisibilityIcon2 from '~/View/resources/icons/eye.svg';\r\nimport LayerVisibilityHideIcon2 from '~/View/resources/icons/eye_hide.svg';\r\n\r\nimport HighlightOffRoundedIcon from '@material-ui/icons/HighlightOffRounded';\r\n\r\nimport Delete from '~/View/resources/icons/delete.svg';\r\nimport DeleteDisabled from '~/View/resources/icons/delete_disabled.svg';\r\n\r\nimport OptionsList from '~/View/resources/icons/menu.svg'\r\n\r\nimport { ILayerList, IMapsLayerList, IExtent } from './Layerlist';\r\n\r\nimport FilterNoneRoundedIcon from '@material-ui/icons/FilterNoneRounded';\r\nimport AppDialog from './AppDialog';\r\nimport { Metadata } from '~/View/modules/applayers/reducer';\r\nimport { Popover } from '@material-ui/core';\r\nimport StyledTreeItem from './StyledTreeItem';\r\nimport AppToolTip from './AppToolTip';\r\nimport RowButtonIcon from './RowButtonIcon';\r\n\r\n\r\n\r\nconst RowMenuButtonIcon = (props: { image: string; title: string; clickHandler: (ev: any) => void; content: Array }) => {\r\n const { image, clickHandler } = props;\r\n\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const [open, setOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n setOpen(!!anchorEl)\r\n }, [anchorEl]);\r\n\r\n const handleClick = (event: React.MouseEvent) => {\r\n setAnchorEl((event as any).currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n return (\r\n //
\r\n
\r\n {\r\n <>\r\n \r\n
\r\n
\r\n {open\r\n ?\r\n handleClose()}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right',\r\n }}\r\n transformOrigin={{\r\n vertical: 'top',\r\n horizontal: 'left',\r\n }}\r\n transitionDuration={300}\r\n >\r\n
\r\n {props.content}\r\n
\r\n \r\n : null}\r\n \r\n }\r\n
\r\n );\r\n}\r\n\r\n\r\ndeclare module 'csstype' {\r\n interface Properties {\r\n '--tree-view-color'?: string;\r\n '--tree-view-bg-color'?: string;\r\n }\r\n}\r\n\r\n\r\nconst useStyles = makeStyles(\r\n createStyles({\r\n root: {\r\n height: 264,\r\n flexGrow: 1,\r\n },\r\n }),\r\n);\r\n\r\ninterface Props {\r\n // mapName: string;\r\n // layers: Array;\r\n mapLayers: Array\r\n changeLayerVisbility: (layerIndex: string, visibility: boolean, mapName: string, mapType: string) => void;\r\n changeLayerOrder: (layerIndex: string, visibility: boolean, mapName: string, direction: string, mapType: string) => void;\r\n goTo: (extent?: IExtent) => void;\r\n moveMap: (mapName: string, direction: string, mapType: string) => void;\r\n removeLayer: (layerUrl: string) => void;\r\n removeMap: (mapUrl: string) => void;\r\n}\r\n\r\nlet externalExpanded: Array = [];\r\n\r\nconst LayerTreeView = (props: Props) => {\r\n const classes = useStyles();\r\n\r\n const [expanded, setExpanded] = useState>(externalExpanded.length ? externalExpanded : props.mapLayers.map(mL => `${mL.mapName}_main`));\r\n const [open, setOpen] = useState(false);\r\n const [data, setData] = useState<{ content: any, title: string }>({ content: null, title: '' });\r\n const [removeOnId, setRemoveOnId] = useState('');\r\n\r\n useEffect(() => {\r\n if (!externalExpanded.length) {\r\n setExpanded(props.mapLayers.map(mL => `${mL.mapName}_main`));\r\n }\r\n }, [props.mapLayers]);\r\n\r\n useEffect(() => {\r\n externalExpanded = expanded;\r\n // console.log(expanded)\r\n }, [expanded]);\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const handleToggle = (event: ChangeEvent<{}>, nodeIds: Array) => {\r\n // if (nodeIds.length > 0 && nodeIds[0].indexOf('_main') !== -1) {\r\n if (expanded.length - 1 === nodeIds.length) {\r\n setExpanded(nodeIds);\r\n } else {\r\n let isLegendLayer = nodeIds[0].indexOf('_legendLayer') !== -1;\r\n if (!isLegendLayer) {\r\n setExpanded(nodeIds);\r\n }\r\n }\r\n // }\r\n }\r\n\r\n const openLegend = (layerLegendId: string) => {\r\n let nodeIds = [layerLegendId, ...expanded];\r\n setExpanded(nodeIds)\r\n }\r\n\r\n const showMetaData = (layerMetadata: Array, title: string) => {\r\n setData({ title: title, content: layerMetadata });\r\n setOpen(true);\r\n }\r\n\r\n const removeLayer = (layerUrl: string) => {\r\n props.removeLayer(layerUrl);\r\n }\r\n\r\n return (\r\n <>\r\n {\r\n props.mapLayers.length ?\r\n <>\r\n { console.log(mL.mapName); return mL.mapName })}\r\n expanded={expanded}\r\n defaultCollapseIcon={}\r\n defaultExpandIcon={}\r\n defaultEndIcon={
}\r\n onNodeToggle={handleToggle}\r\n >\r\n {\r\n props.mapLayers.map((mapLayer, j) => (\r\n }\r\n // expandIcon={}\r\n key={`layerTreeView_${j}`}\r\n color={'#000000'}\r\n nodeId={`${mapLayer.mapName}_main`}\r\n labelText={mapLayer.mapName}\r\n labelicon={\r\n { }} />\r\n }\r\n rowicons={mapLayer.type === 'trusted' || mapLayer.type === 'dynamic' ?\r\n [\r\n { ev.preventDefault(); props.moveMap(mapLayer.url, 'up', mapLayer.type) }} />,\r\n { ev.preventDefault(); props.moveMap(mapLayer.url, 'down', mapLayer.type) }} />,\r\n { if (mapLayer.type === 'dynamic') { return; } ev.preventDefault(); showMetaData(mapLayer.mapMetadata || [], mapLayer.mapName) }} />,\r\n expanded.indexOf(`${mapLayer.mapName}_main`) === -1 ?\r\n { ev.preventDefault(); props.removeMap(mapLayer.url) }} />\r\n :\r\n { ev.preventDefault(); }} />\r\n ]\r\n\r\n :\r\n [\r\n { console.log('') }} />,\r\n ]\r\n }\r\n style={{\r\n borderTop: '1px solid rgb(218, 218, 218)',\r\n borderBottom: '1px solid rgb(218, 218, 218)'\r\n }}\r\n headItem={true}\r\n >\r\n {\r\n mapLayer.layers.map((layer, i) => (\r\n // layer.show ?\r\n \r\n }\r\n // expandIcon={`${mapLayer.mapName}_${layer.layerName}` === removeOnId ? removeLayer(layer.layerUrl)} /> :
}\r\n // onLabelClick={() => { `${mapLayer.mapName}_${layer.layerName}` === removeOnId ? setRemoveOnId('') : setRemoveOnId(`${mapLayer.mapName}_${layer.layerName}`) }}\r\n onLabelClick={() => openLegend(`${mapLayer.mapName}_${layer.layerIndex}_legendLayer`)}\r\n expandIcon={
}\r\n nodeId={`${mapLayer.mapName}_${layer.layerIndex}_legendLayer`}\r\n labelText={layer.layerName}\r\n labelicon={\r\n mapLayer.type === 'trusted' || mapLayer.type === 'dynamic' ?\r\n { ev.stopPropagation(); ev.preventDefault(); props.changeLayerVisbility(`${layer.layerIndex}`, !layer.visible, mapLayer.url, mapLayer.type) }} />\r\n :\r\n <>\r\n }\r\n color={'#000000'}\r\n bgColor=\"#e8f0fe\"\r\n layerVisibility={true}\r\n rowicons={mapLayer.type === 'trusted' || mapLayer.type === 'dynamic' ?\r\n [\r\n // { ev.stopPropagation(); props.goTo(layer.extent) }} />,\r\n // { ev.stopPropagation(); openLegend(`${mapLayer.mapName}_${layer.layerIndex}_legendLayer`) }} />,\r\n { ev.stopPropagation(); props.changeLayerOrder(`${layer.layerIndex}`, !layer.visible, mapLayer.url, 'up', mapLayer.type) }} />,\r\n { ev.stopPropagation(); props.changeLayerOrder(`${layer.layerIndex}`, !layer.visible, mapLayer.url, 'down', mapLayer.type) }} />,\r\n // { ev.stopPropagation(); showMetaData(layer.layerMetadata || [], layer.layerName) }} />,\r\n // `${mapLayer.mapName}_${layer.layerName}` === removeOnId ?\r\n // { ev.preventDefault(); removeLayer(layer.layerUrl) }} />\r\n // :\r\n { ev.stopPropagation(); ev.preventDefault(); }} content={[\r\n { showMetaData(layer.layerMetadata || [], layer.layerName) }} />,\r\n { props.goTo(layer.extent) }} />,\r\n { removeLayer(layer.layerUrl) }} />\r\n ]} />\r\n\r\n ]\r\n :\r\n [\r\n // { props.goTo(layer.extent) }} />,\r\n ]\r\n }\r\n >\r\n {\r\n layer.legendInfo && layer.legendInfo.legend ? layer.legendInfo.legend.map((legend, x) => (\r\n \r\n \r\n \"\"\r\n
\r\n }\r\n color={'#000000'}\r\n bgColor=\"#e8f0fe\"\r\n layerVisibility={true}\r\n rowicons={[]}\r\n />\r\n \r\n ))\r\n :\r\n \r\n }\r\n \r\n \r\n // :\r\n // null\r\n ))\r\n }\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n :\r\n null\r\n }\r\n \r\n );\r\n}\r\n\r\nexport default LayerTreeView;\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { Metadata } from '~/View/modules/applayers/reducer';\r\nimport styled from 'styled-components';\r\n\r\n\r\nconst AppSearchResultContent = styled.div`\r\n width: 100%; \r\n height: 100%;\r\n padding: 10px;\r\n cursor: pointer;\r\n &:hover {\r\n background-color: #c0d8f0;\r\n /* background-color: #12ede2; */\r\n /* color: white; */\r\n }\r\n`;\r\n\r\ninterface Props {\r\n mapName: string;\r\n layerName: string;\r\n metadata: Metadata[];\r\n searchValue: string;\r\n layerUrl: string;\r\n onResultSelect: (layerUrl: string) => void;\r\n}\r\n\r\n// const mockData = {\r\n// layerName: \"Острови\",\r\n// mapName: \"Основна карта\",\r\n// metadata: [\r\n// {\r\n// title: \"Съдържание\",\r\n// content: [\"Съдържа 5 острова с наименованията им . Слоят е отделен от територията на останалите администратвини единици. Островите са част от територията на Република България и съгласно чл. 6 от Закона за устройство на Черноморското крайбрежие са държавна публична собственост, която не може да бъде обявена за частна.\"]\r\n// }, { \"title\": \"Ключови думи\", \"content\": [\"острови\"] }, {\r\n// \"title\": \"Източник на информация\", \"content\": [\"Границите на островите са определени от ортофото изображение, източник Google Maps. Данните са обработени в НЦТР ЕАД. \"]\r\n// }\r\n// ]\r\n// }\r\n\r\nconst AppSearchResult = (props: Props) => {\r\n\r\n // useEffect(() => {\r\n // console.log('AppSearchResult')\r\n // }, []);\r\n\r\n const boldRes = (value: string) => {\r\n if (value) {\r\n let res = [];\r\n let splittedValue = value.split(props.searchValue);\r\n for (let i = 0; i < splittedValue.length; i++) {\r\n if (i === splittedValue.length - 1) {\r\n res.push(
{splittedValue[i]}
);\r\n } else {\r\n res.push(<>{splittedValue[i]}{props.searchValue});\r\n }\r\n }\r\n return res;\r\n } else {\r\n return [<>];\r\n }\r\n }\r\n\r\n const boldResOneSentence = (value: string) => {\r\n if (value) {\r\n let res = [];\r\n let periodSplittedValue = value.split(\".\");\r\n for (let i = 0; i < periodSplittedValue.length; i++) {\r\n if (periodSplittedValue[i].toLowerCase().indexOf(props.searchValue.toLowerCase()) === 0) {\r\n // let finalQuote = periodSplittedValue[i].substr(0, props.searchValue.length);\r\n res.push(
`${match}`)}` }}>
)\r\n break;\r\n } else {\r\n let splittedByValue = periodSplittedValue[i].split(new RegExp(props.searchValue, \"gi\"));\r\n for (let j = 0; j < splittedByValue.length && splittedByValue.length !== 1; j++) {\r\n if (j % 2 === 0) {\r\n // if (splittedByValue[j].indexOf(props.searchValue) !== -1) {\r\n // results.replace(new RegExp(term, \"gi\"), (match) => `${match}`);\r\n let inx = periodSplittedValue[i].indexOf(splittedByValue[j]);\r\n let finalQuote = periodSplittedValue[i].substr(inx, inx + splittedByValue[j].length + props.searchValue.length);\r\n res.push(
`${match}...`)}` }}>
)\r\n break;\r\n // .replace(new RegExp(props.searchValue, \"gi\"), (match) => ({match}))})\r\n // res.push(<>{splittedByValue[j]}{props.searchValue}{\"...\"})\r\n // }\r\n }\r\n }\r\n }\r\n }\r\n // let splittedValue = value.split(props.searchValue);\r\n // for (let i = 0; i < splittedValue.length; i++) {\r\n // if (i === splittedValue.length - 1) {\r\n // res.push(
{splittedValue[i]}
);\r\n // } else {\r\n // res.push(<>{splittedValue[i]}{props.searchValue});\r\n // }\r\n // }\r\n return res;\r\n } else {\r\n return [<>];\r\n }\r\n }\r\n\r\n const onResultSelect = (layerUrl: string) => {\r\n props.onResultSelect(layerUrl);\r\n }\r\n\r\n return (\r\n onResultSelect(props.layerUrl)}>\r\n
\r\n {/*
{\"Метаданни:\"}
*/}\r\n {\r\n props.metadata.map(m => (\r\n <>\r\n
{m.title}:
\r\n {m.content.map(c => boldResOneSentence(c))}\r\n {/* {m.content.map(c => c)} */}\r\n \r\n ))\r\n }\r\n
\r\n {\r\n props.layerName ?\r\n
\r\n
\r\n {\"Слой:\"}\r\n
\r\n
\r\n {props.layerName}\r\n
\r\n
\r\n :\r\n null\r\n }\r\n
\r\n
\r\n {window.translated ? \"Map:\" : \"Карта:\"}\r\n
\r\n
\r\n {props.mapName}\r\n
\r\n
\r\n\r\n
\r\n )\r\n}\r\n\r\nexport default AppSearchResult;","import React, { useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport MapManager from '~/Domain/MapManager/MapManager';\r\nimport ImageDomainLayer from '~/AppDomain/LayerManager/ImageDomainLayer';\r\nimport DottedMenu from '~/View/resources/DottedMenu.svg';\r\n\r\nimport './LayerList.css';\r\nimport LayersManager from '~/Domain/LayerManager/LayersManager';\r\nimport { appConfig } from '~/configLoader';\r\nimport VectorDomainLayer from '~/AppDomain/LayerManager/VectorDomainLayer';\r\n\r\nimport axios from 'axios';\r\n\r\nimport LayerTreeView from './LayerTreeView';\r\nimport Loading from '../Loading';\r\nimport { ILayerListObject } from '~/View/interfaces/ILayerListObject';\r\nimport { ILayerObject } from '~/View/interfaces/ILayerObject';\r\nimport VectorSource from 'ol/source/Vector';\r\nimport ImageSource from 'ol/source/Image';\r\nimport { ImageArcGISRest } from 'ol/source';\r\nimport { AppLayer, MapLayer, Metadata } from '~/View/modules/applayers/reducer';\r\nimport { updateAppLayers, updateLayerOrder, updateDynamicMaps } from '~/View/modules/applayers/operations';\r\nimport AppSearch from './AppSearch';\r\n\r\n\r\ntype OwnProps = {\r\n // layerListObject: Array;\r\n appLayers: Array;\r\n dynamicMaps: Array;\r\n};\r\n\r\ntype DispatchProps = {\r\n updateLayerOrder: (isForUpdate: boolean) => void;\r\n updateAppLayers: (appLayers: Array) => void;\r\n updateDynamicMaps: (appLayers: Array) => void;\r\n}\r\n\r\ntype Props = OwnProps & DispatchProps;\r\n\r\ntype MirrorLayer = {\r\n title: string;\r\n visible: boolean;\r\n legendSymbol: string;\r\n // showLegend: boolean;\r\n // isLegendTemporary: boolean;\r\n}\r\n\r\ninterface ILegendInfo {\r\n layerId: number;\r\n layerName: string;\r\n layerType: string;\r\n minScale: number;\r\n maxScale: number;\r\n legend: Array;\r\n}\r\n\r\ninterface Legend {\r\n label: string;\r\n url: string;\r\n imageData: string;\r\n contentType: string;\r\n height: number;\r\n width: number;\r\n values: Array;\r\n}\r\n\r\nexport type IMapsLayerList = {\r\n mapName: string;\r\n layers: Array;\r\n mapMetadata?: Array;\r\n url: string;\r\n type: \"trusted\" | \"external\" | \"dynamic\"\r\n}\r\n\r\nexport interface ILayerList extends MapLayer {\r\n // showInList: boolean;\r\n legendInfo?: ILegendInfo;\r\n extent?: IExtent\r\n}\r\n\r\nexport interface IExtent {\r\n xmax: number,\r\n xmin: number,\r\n ymax: number,\r\n ymin: number\r\n}\r\n\r\n\r\nlet operationalLayers: Array = [];\r\nlet layersManager: LayersManager;\r\nlet mapManager: MapManager | null;\r\nlet layerListData: Array = [];\r\n\r\n\r\nconst Layerlist: React.FC = (props: Props) => {\r\n let [layerList, setLayerList] = useState>([]);\r\n let [selectedDropdown, setSelectedDropdown] = useState(null);\r\n\r\n const [loading, setLoading] = useState(false);\r\n const [mapsLayerList, setMapsLayerList] = useState>([]);\r\n\r\n // const [layers, setLayers] = useState>([]);\r\n // const [mapName, setMapName] = useState(\"\");\r\n\r\n useEffect(() => {\r\n let externalLayersInLayerList: Array = [];\r\n let externalLayers = props.externalLayers;\r\n // // mapManager = MapManager.getInstance();\r\n // // layersManager = LayersManager.getInstance(appConfig.layerSettings, mapManager?.map);\r\n // // let layers: Array = loadMapLayers();\r\n // // setLayerList(layers);\r\n // // console.log(props.layerListObject)\r\n externalLayers.forEach(mapLayer => {\r\n const layer: IMapsLayerList = {\r\n mapName: mapLayer.mapName,\r\n layers: mapLayer.mapLayers.map(l => ({ layerName: l.layerName, layerUrl: '', layerIndex: l.layerIndex, visible: true, show: true, legendInfo: {} })),\r\n mapMetadata: [],\r\n url: mapLayer.mapUrl,\r\n type: \"external\"\r\n };\r\n externalLayersInLayerList.push(layer);\r\n });\r\n if (externalLayersInLayerList.length) {\r\n let finalResult = [...mapsLayerList, ...externalLayersInLayerList];\r\n setMapsLayerList([]);\r\n setMapsLayerList(finalResult);\r\n }\r\n\r\n }, [props.externalLayers]);\r\n\r\n useEffect(() => {\r\n let dynamicMapsInLayerList: Array = [];\r\n let dynamicMapsLayers = props.dynamicMaps;\r\n\r\n\r\n dynamicMapsLayers.forEach(dynamicMap => {\r\n let isIn = mapsLayerList.some(mapLayer => mapLayer.url === dynamicMap.mapUrl);\r\n if (!isIn) {\r\n const layer: IMapsLayerList = {\r\n mapName: dynamicMap.mapName,\r\n layers: dynamicMap.mapLayers, //.map(l => ({ layerName: l.layerName, layerUrl: '', layerIndex: l.layerIndex, visible: true, show: true, legendInfo: {} })),\r\n mapMetadata: [],\r\n url: dynamicMap.mapUrl,\r\n type: \"dynamic\"\r\n };\r\n dynamicMapsInLayerList.push(layer);\r\n }\r\n });\r\n\r\n if (dynamicMapsInLayerList.length) {\r\n let finalResult = [...mapsLayerList, ...dynamicMapsInLayerList];\r\n setMapsLayerList([]);\r\n setMapsLayerList(finalResult);\r\n }\r\n\r\n }, [props.dynamicMaps])\r\n\r\n useEffect(() => {\r\n if (props.appLayers && props.appLayers.length > 0) {\r\n const layerListLayers = props.appLayers.filter(l => l.show);\r\n if (layerListLayers.length) {\r\n mapManager = MapManager.getInstance();\r\n\r\n let currentMapLayerList = mergeLayerList(mapsLayerList, layerListLayers);\r\n let counter = 0;\r\n let resultListMaps: Array = [];\r\n // setMapsLayerList([]);\r\n layerListLayers.reverse().forEach((appLayer, i) => {\r\n let mapQuery: Promise;\r\n let mapLayers = appLayer.mapLayers.filter(m => m.show);\r\n let loadedMap = currentMapLayerList.filter(m => m).find(listData => listData.url === appLayer.mapUrl);\r\n if (loadedMap) {\r\n mapQuery = new Promise((resolve) => {\r\n setTimeout(() => {\r\n let legendResult = { data: { ...loadedMap, layers: loadedMap?.layers.map(l => l.legendInfo).filter(info => info) } };\r\n // console.log('legendResult')\r\n // console.log(legendResult)\r\n resolve(legendResult);\r\n }, 1);\r\n });\r\n } else {\r\n if (appLayer.type === 'trusted') {\r\n mapQuery = axios.get(`${appLayer.mapUrl}/legend?f=pjson`);\r\n } else {\r\n mapQuery = new Promise((resolve) => {\r\n setTimeout(() => {\r\n resolve({ data: { layers: [] } });\r\n }, 1);\r\n });\r\n }\r\n }\r\n mapQuery.then(legends => {\r\n let layerDefinitionQueries: Array> = [];\r\n let layers: Array = [];\r\n // mapLayers.map(l => ({ ...l, }))\r\n // console.log(mapLayers)\r\n // to do not legend indexes do not match with applayer indexes\r\n mapLayers.forEach(mLayer => {\r\n // exclude layers without metadata\r\n if (mLayer.layerMetadata && mLayer.layerMetadata.length) {\r\n // console.log('legend')\r\n // legends.data.layers.find((legend: any) => { console.log(legend.layerId); console.log(mLayer.layerIndex); return `${legend.layerId}` === mLayer.layerIndex })\r\n let mapLayerResult = {\r\n ...mLayer,\r\n show: (loadedMap ? loadedMap.layers.find(existingL => (existingL.layerIndex === mLayer.layerIndex))?.show : true) as boolean,\r\n legendInfo: legends.data.layers.find((legend: any) => (`${legend.layerId}` === mLayer.layerIndex))\r\n };\r\n // console.log(mLayer.layerIndex)\r\n // console.log(legends.data.layers)\r\n layers.push(mapLayerResult);\r\n }\r\n })\r\n const mapListObject: IMapsLayerList = {\r\n mapName: appLayer.mapName,\r\n layers: layers,\r\n mapMetadata: appLayer.metadata,\r\n url: appLayer.mapUrl,\r\n type: appLayer.type\r\n };\r\n if (mapListObject.layers.length) {\r\n resultListMaps[i] = mapListObject;\r\n }\r\n // to do create query for existing or not existing layers\r\n // let layerDefinitionsUrls = mapLayers.map(l => l.layerUrl);\r\n mapLayers.forEach(l => {\r\n let layerQuery: Promise;\r\n\r\n if (legends.data.layers) {\r\n const existingLayer = legends.data.layers.find((existinL: any) => `${existinL.layerId}` === l.layerIndex);\r\n const existingListLayer = existingLayer && loadedMap ? loadedMap?.layers.find(loadedL => loadedL.layerIndex === `${existingLayer.layerId}`) : {};\r\n if (existingLayer && existingListLayer && (existingListLayer as ILayerList).extent) {\r\n const res = { data: (existingListLayer as ILayerList) }\r\n layerQuery = new Promise((resolve) => {\r\n setTimeout(() => {\r\n resolve(res);\r\n }, 1);\r\n })\r\n } else {\r\n layerQuery = axios.get(`${l.layerUrl}?f=json`);\r\n }\r\n } else {\r\n layerQuery = axios.get(`${l.layerUrl}?f=json`);\r\n }\r\n layerDefinitionQueries.push(layerQuery);\r\n })\r\n Promise.all(layerDefinitionQueries).then(layerDefinitions => {\r\n counter++;\r\n layerDefinitions.forEach((layerDefinition, j) => {\r\n if (mapListObject.layers[j]) {\r\n mapListObject.layers[j].extent = layerDefinition.data.extent;\r\n }\r\n });\r\n if (layerListLayers.length === counter) {\r\n setMapsLayerList([]);\r\n setMapsLayerList(resultListMaps);\r\n }\r\n }).catch(err => {\r\n console.error(err);\r\n })\r\n }).catch(err => {\r\n console.error(err);\r\n })\r\n // }\r\n });\r\n } else {\r\n setMapsLayerList([]);\r\n }\r\n }\r\n }, [props.appLayers]);\r\n\r\n\r\n useEffect(() => {\r\n // keep externally\r\n layerListData = mapsLayerList;\r\n }, [mapsLayerList]);\r\n\r\n\r\n const mergeLayerList = (currnetMapLayerList: IMapsLayerList[], currentAppLayers: AppLayer[]) => {\r\n let result: Array = [];\r\n\r\n currentAppLayers.forEach((appLayer, i) => {\r\n currnetMapLayerList.forEach(mapLayerList => {\r\n if (appLayer.mapUrl === mapLayerList.url) {\r\n result[i] = {\r\n mapName: appLayer.mapName,\r\n layers: [],\r\n mapMetadata: appLayer.metadata,\r\n url: appLayer.mapUrl,\r\n type: \"trusted\"\r\n }\r\n const mapAppLayers = appLayer.mapLayers;\r\n const layerListMapLayers = mapLayerList.layers;\r\n mapAppLayers.forEach(mapLayer => {\r\n let listMapLyer = layerListMapLayers.find(listLayer => `${listLayer.layerIndex}` === mapLayer.layerIndex);\r\n listMapLyer && result[i].layers.push(listMapLyer);\r\n })\r\n }\r\n })\r\n })\r\n\r\n return result;\r\n }\r\n\r\n\r\n let layerListVisibleChanged = (ev: React.ChangeEvent, layer: MirrorLayer, layerIndex: number) => {\r\n // operationalLayers[layerIndex].setVisible(ev.target.checked);\r\n let layers_ = layersManager.getMapLayers();\r\n // console.log(layers_[layerIndex])\r\n // console.log(layers_[layerIndex].setVisible)\r\n layers_[layerIndex].setVisible(ev.target.checked);\r\n\r\n let layers: Array = loadMapLayers();\r\n let changedLayerList = [...layers];\r\n changedLayerList[layerIndex] = { ...changedLayerList[layerIndex], ...layer };\r\n setLayerList(changedLayerList);\r\n }\r\n\r\n let removeLayerFromList = (layer: MirrorLayer) => {\r\n let title = layer.title;\r\n\r\n let layerObject = operationalLayers.filter(l => {\r\n return title === l.title;\r\n })[0];\r\n let mapManager: MapManager | null = MapManager.getInstance();\r\n mapManager && mapManager.removeLayer(layerObject);\r\n\r\n const layerListCopy = [...layerList];\r\n for (let i = layerListCopy.length - 1; i >= 0; i--) {\r\n if (title === layerListCopy[i].title) {\r\n layerListCopy.splice(i, 1);\r\n break;\r\n }\r\n }\r\n setLayerList(layerListCopy);\r\n }\r\n\r\n let loadMapLayers = () => {\r\n // let mapManager: MapManager | null = MapManager.getInstance();\r\n // operationalLayers = mapManager ? mapManager.getOperationalLayers() : [];\r\n let opLayers = layersManager.getMapLayers();\r\n return opLayers.map((opLayer: ImageDomainLayer | VectorDomainLayer) => {\r\n return {\r\n title: opLayer.title,\r\n visible: opLayer.getVisible(),\r\n legendSymbol: opLayer.legendSymbol,\r\n // showLegend: opLayer.showLegend,\r\n // isLegendTemporary: opLayer.isLegendTemporary,\r\n }\r\n });\r\n }\r\n\r\n const moveLayer = (i: number, direction: string, title: string) => {\r\n let ls = layerList.slice(0);\r\n let moveDirectionIndex = direction === 'up' ? i - 1 : i + 1\r\n ls = arrayArange(ls, i, moveDirectionIndex);\r\n\r\n setLayerList(ls);\r\n setSelectedDropdown(null);\r\n\r\n\r\n\r\n layersManager.moveMapLayerByOrderIndex(title, direction);\r\n\r\n // let mapManager: MapManager | null = MapManager.getInstance();\r\n\r\n // mapManager?.setLayerIndex(moveDirectionIndex, title);\r\n }\r\n\r\n const arrayArange = (layersArray: Array, oldIndex: number, newIndex: number) => {\r\n if (newIndex >= layersArray.length) {\r\n throw \"Incorrect input\";\r\n }\r\n\r\n layersArray.splice(newIndex, 0, layersArray.splice(oldIndex, 1)[0]);\r\n\r\n return layersArray;\r\n }\r\n\r\n const showDropDown = (index: number) => {\r\n selectedDropdown !== index ? setSelectedDropdown(index) : setSelectedDropdown(null);\r\n }\r\n\r\n const getCurrentLayerSource = (mapUrl: string) => {\r\n const mapLayers = mapManager?.map.getLayers().getArray();\r\n const layerSoruces = (mapLayers as Array).map(mapLayer => mapLayer.getSource && mapLayer.getSource());\r\n let currentLayerSource: VectorSource | ImageSource | null = null;\r\n const appLayers = props.appLayers.filter(l => l.show);\r\n for (let j = 0; j < layerSoruces.length; j++) {\r\n for (let x = 0; x < appLayers.length; x++) {\r\n if ((layerSoruces[j] as any).getUrl && (layerSoruces[j] as any).getUrl() === appLayers[x].mapUrl && mapUrl === appLayers[x].mapUrl) {\r\n currentLayerSource = layerSoruces[j];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return currentLayerSource;\r\n }\r\n\r\n const changeLayerVisbility = (layerIndex: string, visibility: boolean, url: string, mapType: string) => {\r\n // if (mapType === 'dynamic') {\r\n // const dynamicMaps = [...props.dynamicMaps];\r\n // for (let j = 0; j < dynamicMaps.length; j++) {\r\n // if (dynamicMaps[j].mapUrl === url) {\r\n // const mapLayers = dynamicMaps[j].mapLayers ? [...dynamicMaps[j].mapLayers] : [];\r\n // for (let i = 0; i < mapLayers.length; i++) {\r\n // if (`${mapLayers[i].layerIndex}` === layerIndex) {\r\n // mapLayers[i].visible = visibility;\r\n // break;\r\n // }\r\n // }\r\n // break;\r\n // }\r\n // }\r\n // props.updateDynamicMaps(dynamicMaps);\r\n\r\n // let mapInList = mapsLayerList.find(m => m.url === url);\r\n // const layersInfo = mapInList ? [...mapInList.layers] : [];\r\n // for (let i = 0; i < layersInfo.length; i++) {\r\n // if (`${layersInfo[i].layerIndex}` === layerIndex) {\r\n // layersInfo[i].visible = visibility;\r\n // break;\r\n // }\r\n // }\r\n // let _mapsLayerList = [...mapsLayerList];\r\n // for (let i = 0; i < _mapsLayerList.length; i++) {\r\n // if (_mapsLayerList[i].url === url) {\r\n // _mapsLayerList[i].layers = layersInfo;\r\n // break;\r\n // }\r\n // }\r\n // setMapsLayerList(_mapsLayerList);\r\n\r\n // } else {\r\n const appLayers = [...props.appLayers];\r\n for (let j = 0; j < appLayers.length; j++) {\r\n if (appLayers[j].mapUrl === url) {\r\n const mapLayers = appLayers[j] ? [...appLayers[j].mapLayers] : [];\r\n for (let i = 0; i < mapLayers.length; i++) {\r\n if (`${mapLayers[i].layerIndex}` === layerIndex) {\r\n mapLayers[i].visible = visibility;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n props.updateAppLayers(appLayers);\r\n\r\n let mapInList = mapsLayerList.find(m => m.url === url);\r\n const layersInfo = mapInList ? [...mapInList.layers] : [];\r\n for (let i = 0; i < layersInfo.length; i++) {\r\n if (`${layersInfo[i].layerIndex}` === layerIndex) {\r\n layersInfo[i].visible = visibility;\r\n break;\r\n }\r\n }\r\n let _mapsLayerList = [...mapsLayerList];\r\n for (let i = 0; i < _mapsLayerList.length; i++) {\r\n if (_mapsLayerList[i].url === url) {\r\n _mapsLayerList[i].layers = layersInfo;\r\n break;\r\n }\r\n }\r\n setMapsLayerList(_mapsLayerList);\r\n // }\r\n\r\n\r\n // let currentLayerSource: any = getCurrentLayerSource(mapName);\r\n // if (currentLayerSource) {\r\n // const layerParams = (currentLayerSource as ImageArcGISRest).getParams();\r\n // const splittedParams: Array = layerParams.layers.split(\":\");\r\n // // const dynamicLayers: Array = JSON.parse(layerParams.dynamicLayers);\r\n // // console.log(layerParams)\r\n // // const dynamicLayerIndex = dynamicLayers.findIndex(d => layerIndex === `${d.id}`);\r\n\r\n // const layerIdsString = splittedParams.slice(1)[0];\r\n // const layerIdsArray = layerIdsString.split(\",\");\r\n // let mapInList = mapsLayerList.find(m => m.mapName === mapName)\r\n // const layersInfo = mapInList ? [...mapInList.layers] : [];\r\n // for (let i = 0; i < layersInfo.length; i++) {\r\n // if (`${layersInfo[i].layerIndex}` === layerIndex) {\r\n // layersInfo[i].show = visibility;\r\n // break;\r\n // }\r\n // }\r\n // let _dynamicLayers = layersInfo.filter(lInfo => lInfo.show).map(visibleLInfo => ({ \"id\": Number(visibleLInfo.layerIndex), \"source\": { \"type\": \"mapLayer\", \"mapLayerId\": Number(visibleLInfo.layerIndex) } }));\r\n\r\n // if (visibility) {\r\n // // if (dynamicLayerIndex === -1) {\r\n // // dynamicLayers.splice(Number(layerIndex), 0, { \"id\": Number(layerIndex), \"source\": { \"type\": \"mapLayer\", \"mapLayerId\": Number(layerIndex) } });\r\n // // }\r\n\r\n // // dynamicLayers[dynamicLayerIndex].show = true;\r\n // layerIdsArray.push(layerIndex);\r\n // const params = { ...layerParams, layers: `show:${layerIdsArray.join(',')}`, dynamicLayers: JSON.stringify(_dynamicLayers) };\r\n // currentLayerSource.updateParams(params);\r\n // } else {\r\n // // dynamicLayers.splice(dynamicLayerIndex, 1);\r\n // // dynamicLayers[dynamicLayerIndex].show = false;\r\n\r\n // const updatedLayerArray = layerIdsArray.filter(layerId => layerId !== layerIndex);\r\n // const showLayers = updatedLayerArray.length ? updatedLayerArray.join(',') : '-1'\r\n // const params = { ...layerParams, layers: `show:${showLayers}`, dynamicLayers: JSON.stringify(_dynamicLayers) };\r\n // currentLayerSource.updateParams(params);\r\n // }\r\n // let _mapsLayerList = [...mapsLayerList];\r\n // for (let i = 0; i < _mapsLayerList.length; i++) {\r\n // if (_mapsLayerList[i].mapName === mapName) {\r\n // _mapsLayerList[i].layers = layersInfo;\r\n // break;\r\n // }\r\n // }\r\n // currentLayerSource.updateParams({ seq: (new Date()).getTime() });\r\n\r\n // // setLayers(layersInfo);\r\n // setMapsLayerList(_mapsLayerList);\r\n\r\n // }\r\n }\r\n\r\n const changeLayerOrder = (layerIndex: string, visibility: boolean, mapUrl: string, direction: string, mapType: string) => {\r\n const _appLayers = [...props.appLayers];\r\n const _mapsLayerList = [...mapsLayerList];\r\n let _mapsLayerListindex = _mapsLayerList.findIndex(mapLayer => mapLayer.url === mapUrl);\r\n let _layers = _mapsLayerList[_mapsLayerListindex] ? _mapsLayerList[_mapsLayerListindex].layers : [];\r\n const dynamicLayerIndex = _layers.findIndex(el => `${el.layerIndex}` === layerIndex);\r\n _mapsLayerList[_mapsLayerListindex] = { ..._mapsLayerList[_mapsLayerListindex], layers: _layers }\r\n setMapsLayerList(_mapsLayerList);\r\n if (direction === 'up') {\r\n if (dynamicLayerIndex !== 0) {\r\n let listElementAbove = _layers[dynamicLayerIndex - 1];\r\n const listElementAboveOrderNum = listElementAbove.layerOrderNum;\r\n const layerIndexOrderNum = _layers[dynamicLayerIndex].layerOrderNum;\r\n\r\n _layers[dynamicLayerIndex - 1] = _layers[dynamicLayerIndex];\r\n _layers[dynamicLayerIndex - 1].layerOrderNum = listElementAboveOrderNum;\r\n _layers[dynamicLayerIndex] = listElementAbove;\r\n _layers[dynamicLayerIndex].layerOrderNum = layerIndexOrderNum;\r\n }\r\n } else {\r\n if (dynamicLayerIndex !== _layers.length - 1) {\r\n let listElementBelow = _layers[dynamicLayerIndex + 1];\r\n const listElementBelowOrderNum = listElementBelow.layerOrderNum;\r\n const layerIndexOrderNum = _layers[dynamicLayerIndex].layerOrderNum;\r\n\r\n _layers[dynamicLayerIndex + 1] = _layers[dynamicLayerIndex];\r\n _layers[dynamicLayerIndex + 1].layerOrderNum = listElementBelowOrderNum;\r\n _layers[dynamicLayerIndex] = listElementBelow;\r\n _layers[dynamicLayerIndex].layerOrderNum = layerIndexOrderNum;\r\n }\r\n }\r\n\r\n if (mapType === 'trusted') {\r\n let currentLayerSource: ImageArcGISRest = getCurrentLayerSource(mapUrl) as ImageArcGISRest;\r\n const layerParams = currentLayerSource.getParams();\r\n let _dynamicLayers = _layers.filter(lInfo => lInfo.show).map(visibleLInfo => ({ \"id\": Number(visibleLInfo.layerIndex), \"source\": { \"type\": \"mapLayer\", \"mapLayerId\": Number(visibleLInfo.layerIndex) } }));\r\n const params = { ...layerParams, dynamicLayers: JSON.stringify(_dynamicLayers) };\r\n currentLayerSource.updateParams(params);\r\n currentLayerSource.updateParams({ seq: (new Date()).getTime() });\r\n\r\n\r\n\r\n } else if (mapType === 'dynamic') {\r\n const map = mapManager?.map;\r\n let layers = map?.getLayers().getArray();\r\n const copiedLayers = layers ? [...layers.filter((l: any) => l.title && l.title.indexOf('DynamicMap') !== -1)] : [];\r\n copiedLayers.forEach((l: any) => {\r\n for (let j = 0; j < _layers.length; j++) {\r\n if (l.title && l.title.indexOf(_layers[j].layerName) !== -1) {\r\n l?.setVisibleIndex(_layers[j].layerOrderNum);\r\n break;\r\n }\r\n\r\n }\r\n })\r\n }\r\n\r\n for (let i = 0; i < _appLayers.length; i++) {\r\n if (_appLayers[i].mapUrl === mapUrl) {\r\n _appLayers[i].mapLayers = _layers;\r\n break;\r\n }\r\n }\r\n props.updateAppLayers(_appLayers)\r\n }\r\n\r\n const goTo = (extent?: IExtent) => {\r\n if (extent) {\r\n mapManager?.goTo([extent.xmin, extent.ymin, extent.xmax, extent.ymax], 'EPSG:32635', 'EPSG:3857');\r\n }\r\n }\r\n\r\n const moveMap = (mapUrl: string, direction: string, mapType: string) => {\r\n const appLayersToShow = props.appLayers;\r\n const _appLayers = [...appLayersToShow];\r\n const currentMapIndex = mapsLayerList.findIndex(l => l.url === mapUrl);\r\n const movedIndex = direction === 'up' ? currentMapIndex - 1 : currentMapIndex + 1;\r\n if (currentMapIndex !== -1) {\r\n if ((direction === 'up' && currentMapIndex !== 0) || (direction === 'down' && currentMapIndex !== _appLayers.length - 1)) {\r\n props.updateLayerOrder(true);\r\n let currentMapInList = [...mapsLayerList][currentMapIndex];\r\n let nextMapInList = [...mapsLayerList][movedIndex];\r\n if (currentMapInList && nextMapInList) {\r\n const currentAppLayerIndex = _appLayers.findIndex(a => a.mapUrl === currentMapInList.url);\r\n const movedAppLayerIndex = _appLayers.findIndex(a => a.mapUrl === nextMapInList.url);\r\n let tempAppLayer = _appLayers[movedAppLayerIndex];\r\n const tempAppLayerOrderNum = tempAppLayer.orderNum;\r\n const tempMovedLayerOrderNum = _appLayers[currentAppLayerIndex].orderNum;\r\n // const movedOrderIndex = direction === 'up' ? tempAppLayerOrderNum - 100 : currentMapIndex + 100;\r\n // tempAppLayer.mapLayers.forEach((mapLayer, i) => mapLayer.layerOrderNum = movedOrderIndex + i);\r\n _appLayers[currentAppLayerIndex].orderNum = tempAppLayerOrderNum;\r\n _appLayers[currentAppLayerIndex].mapLayers.forEach((mapLayer, i) => mapLayer.layerOrderNum = tempAppLayerOrderNum + i + 1);\r\n\r\n _appLayers[movedAppLayerIndex] = _appLayers[currentAppLayerIndex];\r\n tempAppLayer.orderNum = tempMovedLayerOrderNum;\r\n tempAppLayer.mapLayers.forEach((mapLayer, i) => mapLayer.layerOrderNum = mapLayer.layerOrderNum = tempMovedLayerOrderNum + i + 1);\r\n _appLayers[currentAppLayerIndex] = tempAppLayer;\r\n props.updateAppLayers(_appLayers);\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n const removeLayer = (layerUrl: string) => {\r\n const appLayers = [...props.appLayers];\r\n appLayers.forEach(appLayer => {\r\n const mapLayers = appLayer.mapLayers;\r\n mapLayers.forEach(mapLayer => {\r\n if (mapLayer.layerUrl === layerUrl) {\r\n mapLayer.show = false;\r\n return;\r\n }\r\n })\r\n })\r\n props.updateAppLayers(appLayers);\r\n }\r\n\r\n const removeMap = (mapUrl: string) => {\r\n const appLayers = [...props.appLayers];\r\n appLayers.forEach(appLayer => {\r\n if (appLayer.mapUrl === mapUrl) {\r\n appLayer.show = false;\r\n appLayer.mapLayers.forEach(l => l.show = false);\r\n }\r\n })\r\n props.updateAppLayers(appLayers);\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n
\r\n {/* {\"ЗАРЕДЕНИ КАРТИ И СЛОЕВЕ\"} */}\r\n
\r\n\r\n {/*layers={layers} mapName={mapName} */}\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: any) => ({\r\n appLayers: state.appLayers.appLayers,\r\n externalLayers: state.appLayers.externalLayers,\r\n dynamicMaps: state.appLayers.dynamicMaps\r\n})\r\n\r\nexport default connect(mapStateToProps, { updateAppLayers, updateLayerOrder, updateDynamicMaps })(Layerlist);\r\n","import * as React from 'react';\r\nimport { useState, useEffect, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Box, ClickAwayListener, createMuiTheme, Divider, Fade, Paper, Popover, ThemeProvider } from \"@material-ui/core\";\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { AppLayer, MapLayer, Metadata } from '~/View/modules/applayers/reducer';\r\nimport { updateAppLayers } from '~/View/modules/applayers/operations';\r\nimport axios from 'axios';\r\nimport AppSearchResult from './AppSearchResult';\r\n\r\n\r\nconst theme = createMuiTheme({\r\n palette: {\r\n secondary: {\r\n main: '#3884d0',\r\n }\r\n },\r\n});\r\n\r\n\r\n// const options = ['Option 1', 'Option 2'];\r\n\r\nlet appLayers: Array = [];\r\nlet searchMapLayers: Array<{ mapName: string, layers: Array }> = [];\r\n\r\ninterface SearchOption {\r\n mapName?: string;\r\n value: string;\r\n}\r\n\r\ninterface ISearchResult {\r\n layerUrl: string;\r\n mapName: string;\r\n layerName: string;\r\n metadata: Metadata[];\r\n}\r\n\r\ninterface DispatchProps {\r\n updateAppLayers: (appLayers: Array) => void;\r\n}\r\n\r\ninterface OwnProps {\r\n appLayers: Array;\r\n}\r\n\r\ninterface Props extends OwnProps, DispatchProps { }\r\n\r\n\r\nconst AppSearch = (props: Props) => {\r\n const [value, setValue] = useState('');\r\n const [inputValue, setInputValue] = useState({ mapName: '', value: '' });\r\n\r\n const [options, setOptions] = useState>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [open, setOpen] = useState(false);\r\n\r\n const [searchResults, setSearchResults] = useState>([]);\r\n\r\n useEffect(() => {\r\n appLayers = props.appLayers //.filter(appLayer => appLayer.show);\r\n appLayers.forEach(l => {\r\n searchMapLayers.push({ mapName: l.mapName, layers: l.mapLayers.filter(mapLayer => mapLayer.show) });\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n appLayers = props.appLayers //.filter(appLayer => appLayer.show);\r\n appLayers.forEach(l => {\r\n searchMapLayers.push({ mapName: l.mapName, layers: l.mapLayers.filter(mapLayer => mapLayer.show) });\r\n });\r\n }, [props.appLayers]);\r\n\r\n useEffect(() => {\r\n if (!open) {\r\n setOptions([]);\r\n }\r\n }, [open]);\r\n\r\n const onResultSelect = (layerUrl: string) => {\r\n const appLayers = [...props.appLayers];\r\n\r\n appLayers.some(appLayer => {\r\n if (layerUrl.indexOf(appLayer.mapUrl) !== -1) {\r\n let layers = appLayer.mapLayers;\r\n for (let i = 0; i < layers.length; i++) {\r\n if (layers[i].layerUrl === layerUrl) {\r\n layers[i].show = true;\r\n layers[i].visible = true;\r\n break;\r\n }\r\n }\r\n appLayer.show = true;\r\n if (!layers.some(l => l.show)) {\r\n layers.forEach(l => l.show = true);\r\n }\r\n // appLayer.show = layers.some(l => l.show);\r\n return true;\r\n }\r\n return false;\r\n });\r\n props.updateAppLayers(appLayers);\r\n onClose();\r\n }\r\n\r\n const onValueInput = (value: string) => {\r\n if (value) {\r\n setValue(value);\r\n if (value && value.length > 2) {\r\n setOpen(true);\r\n let _searchResults = searchValueInMetadata(value);\r\n // console.log(_searchResults)\r\n setSearchResults(_searchResults);\r\n } else if (open) {\r\n onClose(value);\r\n }\r\n } else {\r\n onClose();\r\n }\r\n }\r\n\r\n const onClose = (value?: string) => {\r\n setOpen(false);\r\n setValue(value || '');\r\n }\r\n\r\n const onSearch = (inputValue: string) => {\r\n setInputValue({ mapName: '', value: inputValue });\r\n\r\n // if (inputValue && inputValue.length > 3) {\r\n\r\n // searchMapLayers.forEach(searchLayer => {\r\n // let mapName = searchLayer.mapName;\r\n // let promises: Array> = [];\r\n\r\n // searchLayer.layers.forEach(l => {\r\n // const fieldInfos = l.fieldInfos;\r\n\r\n // if (fieldInfos && fieldInfos.length) {\r\n // let where = '';\r\n // fieldInfos.forEach(infos => {\r\n // const currentWhere = `${infos.fieldName} LIKE '%${inputValue}%'`;\r\n // if (where) {\r\n // where += ' OR ';\r\n // }\r\n // where += currentWhere;\r\n // });\r\n // let promise = axios.get(`${l.layerUrl}/query`, {\r\n // params: {\r\n // 'where': where,\r\n // 'f': 'json',\r\n // 'returnGeometry': true,\r\n // 'outFields': fieldInfos.map(infos => infos.fieldName).join(',')\r\n // }\r\n // })\r\n // promises.push(promise);\r\n // }\r\n // });\r\n\r\n // Promise.all(promises).then(results => {\r\n // const res = results.map(r => r.data);\r\n // console.log('mapName')\r\n // console.log(mapName)\r\n // console.log(res)\r\n // setLoading(false);\r\n // setOpen(true);\r\n // let resLayers = res.filter(r => r.features && r.features.length);\r\n // if (resLayers[0] && resLayers[0].features && !resLayers[0].features.length) {\r\n // setOptions([]);\r\n // } else {\r\n // const opts = resLayers[0] && resLayers[0].features ? resLayers[0].features.map(f => ({ mapName: mapName, value: `${f.attributes['name']}` })) : [];\r\n // setOptions(opts);\r\n // }\r\n\r\n // }).catch(err => {\r\n // console.error(err);\r\n // })\r\n // })\r\n\r\n // }\r\n }\r\n\r\n const searchValueInMetadata = (searchValue: string) => {\r\n let _searchResults: Array = [];\r\n const appLayers = props.appLayers;\r\n appLayers.forEach(appLayer => {\r\n const mapMetadata = appLayer.metadata || [];\r\n let mapDataResult: Array = [];\r\n\r\n for (let i = 0; i < mapMetadata.length; i++) {\r\n const mapContent = mapMetadata[i].content || [];\r\n const contentStr = mapContent.join(\" | \");\r\n if (contentStr.toLowerCase().indexOf(searchValue.toLowerCase()) !== -1) {\r\n mapDataResult.push(mapMetadata[i]);\r\n break;\r\n } else if (appLayer.mapName.toLowerCase().indexOf(searchValue.toLowerCase()) !== -1) {\r\n mapDataResult.push(mapMetadata[i]);\r\n break;\r\n }\r\n }\r\n\r\n // mapMetadata?.forEach(d => {\r\n // const mapContent = d.content;\r\n // const contentStr = mapContent.join(\" | \");\r\n // if (contentStr.toLowerCase().indexOf(searchValue.toLowerCase()) !== -1) {\r\n // mapDataResult.push(d);\r\n // } else if (appLayer.mapName.toLowerCase().indexOf(searchValue.toLowerCase()) !== -1) {\r\n // mapDataResult.push(d);\r\n // }\r\n // })\r\n\r\n if (mapDataResult.length) {\r\n _searchResults.push({\r\n layerUrl: appLayer.mapUrl,\r\n mapName: appLayer.mapName,\r\n layerName: '',\r\n metadata: mapDataResult\r\n });\r\n }\r\n\r\n const mapLayers = appLayer.mapLayers;\r\n mapLayers.forEach(mapLayer => {\r\n let layerDataResult: Array = [];\r\n const layerUrl = mapLayer.layerUrl;\r\n const layerName = mapLayer.layerName;\r\n let metadata = mapLayer.layerMetadata || [];\r\n\r\n for (let i = 0; i < metadata.length; i++) {\r\n const content = metadata[i].content || [];\r\n const contentStr = content.join(\" | \");\r\n if (contentStr.toLowerCase().indexOf(searchValue.toLowerCase()) !== -1) {\r\n layerDataResult.push(metadata[i]);\r\n break;\r\n }\r\n\r\n }\r\n\r\n // metadata?.forEach(layerMetadata => {\r\n // const content = layerMetadata.content;\r\n // const contentStr = content.join(\" | \");\r\n // if (contentStr.toLowerCase().indexOf(searchValue.toLowerCase()) !== -1) {\r\n // layerDataResult.push(layerMetadata);\r\n // }\r\n // });\r\n if (layerDataResult.length) {\r\n _searchResults.push({\r\n layerUrl: layerUrl,\r\n mapName: appLayer.mapName,\r\n layerName: layerName,\r\n metadata: layerDataResult\r\n });\r\n } else if (layerName.toLowerCase().indexOf(searchValue.toLowerCase()) !== -1) {\r\n _searchResults.push({\r\n layerUrl: layerUrl,\r\n mapName: appLayer.mapName,\r\n layerName: layerName,\r\n metadata: []\r\n });\r\n }\r\n })\r\n })\r\n return _searchResults;\r\n }\r\n\r\n return (\r\n
\r\n \r\n\r\n {/* {\r\n onValueInput(newValue);\r\n }}\r\n inputValue={inputValue.value}\r\n onInputChange={(event, newInputValue) => {\r\n onSearch(newInputValue);\r\n }}\r\n open={open}\r\n\r\n options={options}\r\n groupBy={(option) => option.mapName || ''}\r\n getOptionLabel={(option) => option.value}\r\n\r\n id=\"controllable-search\"\r\n noOptionsText={\"Не са открити обекти\"}\r\n style={{ width: '95%' }}\r\n renderInput={(params) =>\r\n \r\n {loading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ),\r\n }}\r\n />}\r\n /> */}\r\n {\r\n onValueInput(event.target.value);\r\n }}\r\n // inputValue={inputValue.value}\r\n // onInputChange={(event, newInputValue) => {\r\n // onSearch(newInputValue);\r\n // }}\r\n label={window.translated ? \"Search\" : \"Търсене\"}\r\n variant=\"outlined\"\r\n color={\"secondary\"}\r\n InputProps={{\r\n // ...params.InputProps,\r\n endAdornment: (\r\n \r\n {loading ? : null}\r\n {/* {params.InputProps.endAdornment} */}\r\n \r\n ),\r\n }}\r\n />\r\n {\r\n open\r\n ?\r\n\r\n {/*width: 500, height: 500, */}\r\n \r\n {/* {arrow ? (\r\n \r\n ) : null} */}\r\n
\r\n
\r\n {window.translated ? \"Search results\" : \"Резултати от търсене\"}\r\n
\r\n
onValueInput('')} style={{ padding: 5, color: '#3884d0', fontSize: 14, width: '5%', display: 'inline-block', textAlign: 'center', cursor: 'pointer' }}>\r\n {\"X\"}\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n {\r\n searchResults.map((result, i) => (\r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n :\r\n null\r\n }\r\n
\r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state: any) => ({\r\n appLayers: state.appLayers.appLayers\r\n});\r\n\r\nexport default connect(mapStateToProps, { updateAppLayers })(AppSearch);\r\n","import React, { useEffect } from 'react';\r\nimport Layerlist from '../Widgets/Layerlist';\r\nimport { Search } from '../Widgets/Search';\r\nimport { Identify } from '../Widgets/Identify';\r\n// import { Measure } from '../Widgets/Measure';\r\nimport { Measure } from '../Widgets/Measure_v2';\r\nimport External from '../Widgets/External';\r\nimport IdentifyPlan from '../Widgets/IdentifyPlan';\r\n// import FeatureSelection from '../Widgets/FeatureSelection';\r\nimport FeatureSelection from '../Widgets/FeatureSelection_v2';\r\nimport UploadFile from '../Widgets/UploadFile';\r\n\r\nimport FeatureSelectionInfrObj from '../Widgets/FeatureSelectionInfrObj';\r\n\r\n\r\nimport './SideDrawer.css';\r\n\r\ninterface Props {\r\n contentType: string;\r\n}\r\n\r\nconst SideDrawer: React.FC = ({ contentType }) => {\r\n\r\n let sideDrawerContent =
;\r\n {\r\n switch (contentType) {\r\n case \"layerlist\":\r\n sideDrawerContent = \r\n break;\r\n // case \"search\":\r\n // sideDrawerContent = \r\n // break;\r\n // case \"identify\":\r\n // sideDrawerContent = \r\n // break;\r\n // case \"measure\":\r\n // sideDrawerContent = \r\n // break;\r\n\r\n // case \"external\":\r\n // sideDrawerContent = \r\n // break;\r\n\r\n // case \"identifyPlan\":\r\n // sideDrawerContent = \r\n // break;\r\n\r\n // case \"featureSelection\":\r\n // sideDrawerContent = \r\n // break;\r\n\r\n // case \"featureSelection_infr\":\r\n // sideDrawerContent = \r\n // break;\r\n\r\n // case \"upload\":\r\n // sideDrawerContent = \r\n // break;\r\n\r\n default:\r\n sideDrawerContent\r\n }\r\n }\r\n\r\n return (\r\n
\r\n {sideDrawerContent}\r\n
\r\n );\r\n};\r\n\r\nexport default SideDrawer;\r\n","import * as React from 'react';\r\nimport clsx from 'clsx';\r\nimport { makeStyles, useTheme, Theme, createStyles } from '@material-ui/core/styles';\r\nimport Drawer from '@material-ui/core/Drawer';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport List from '@material-ui/core/List';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport MenuIcon from '@material-ui/icons/Menu';\r\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\r\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport InboxIcon from '@material-ui/icons/MoveToInbox';\r\nimport MailIcon from '@material-ui/icons/Mail';\r\nimport SideDrawer from './SideDrawer';\r\nimport Toggle from '~/View/resources/icons/toggle.png'\r\nimport Untoggle from '~/View/resources/icons/untoggle.png'\r\n\r\nconst drawerWidth = 452;\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex',\r\n },\r\n appBar: {\r\n transition: theme.transitions.create(['margin', 'width'], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n },\r\n appBarShift: {\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n marginLeft: drawerWidth,\r\n transition: theme.transitions.create(['margin', 'width'], {\r\n easing: theme.transitions.easing.easeOut,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(2),\r\n },\r\n hide: {\r\n display: 'none',\r\n },\r\n drawer: {\r\n width: drawerWidth,\r\n flexShrink: 0,\r\n },\r\n drawerPaper: {\r\n width: drawerWidth, //'24vw', //'23.7%', //\r\n // height: '86.3vh',\r\n height: '92.1%',\r\n background: 'transparent',\r\n borderColor: 'transparent',\r\n overflow: 'hidden'\r\n },\r\n drawerHeader: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: theme.spacing(0, 1),\r\n // necessary for content to be below app bar\r\n ...theme.mixins.toolbar,\r\n justifyContent: 'flex-end',\r\n },\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(3),\r\n transition: theme.transitions.create('margin', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n marginLeft: -drawerWidth,\r\n },\r\n contentShift: {\r\n transition: theme.transitions.create('margin', {\r\n easing: theme.transitions.easing.easeOut,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n marginLeft: 0,\r\n },\r\n }),\r\n);\r\n\r\nconst SideBar = () => {\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n const [open, setOpen] = React.useState(true);\r\n\r\n const handleDrawerOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n const handleDrawerClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n
\r\n \r\n
{/*'95.1%' */}\r\n \r\n
\r\n \r\n {open\r\n ?\r\n null\r\n :\r\n
\r\n );\r\n};\r\n\r\nexport default SideBar;\r\n","import { ILayerListObject, IConfiguredLayersList } from \"~/View/interfaces/ILayerListObject\";\r\nimport { ThunkAction } from \"~/View/redux\";\r\nimport { actions } from \"./actions\";\r\n\r\n\r\nexport type LayerListType = (layerListObject: Array) => ThunkAction;\r\nexport type ConfiguredLayersType = (configuredLayers: IConfiguredLayersList) => ThunkAction;\r\n\r\n\r\nexport const invokeLayerListUpdate: LayerListType = (layerListObject: Array) => dispatch => {\r\n dispatch(actions.updateLayerList(layerListObject));\r\n};\r\n\r\nexport const updateConfiguredLayers: ConfiguredLayersType = (configuredLayers: IConfiguredLayersList) => dispatch => {\r\n dispatch(actions.updateConfiguredLayers(configuredLayers));\r\n};\r\n\r\nexport const operations = {\r\n invokeLayerListUpdate,\r\n updateConfiguredLayers\r\n};\r\n","import { Divider } from '@material-ui/core';\r\nimport * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\n\r\n\r\ninterface Props {\r\n mapTitle: string;\r\n layerTitle: string;\r\n attributes: { [key: string]: string | number }\r\n}\r\n\r\nconst FeatureAttributesInfoStatic = (props: Props) => {\r\n const margins: React.CSSProperties = {\r\n marginBlockStart: '1em',\r\n // marginBlockEnd: '1em',\r\n marginInlineStart: 0,\r\n marginInlineEnd: 0,\r\n paddingLeft: '1.2rem'\r\n }\r\n const [attributeData, setAttributeData] = useState>>([]);\r\n\r\n useEffect(() => {\r\n const keys = Object.keys(props.attributes);\r\n const results: Array> = [];\r\n keys.forEach(key => {\r\n results.push([key, props.attributes[key]]);\r\n })\r\n setAttributeData(results);\r\n }, [props.attributes]);\r\n\r\n return (\r\n
\r\n {\r\n attributeData.length ?\r\n <>\r\n
\r\n {`${props.layerTitle}`}\r\n
\r\n {/* */}\r\n
\r\n \r\n {\r\n attributeData.map((attrData, i) => (\r\n
\r\n
{/*display: 'flex', */}\r\n
\r\n {`${attrData[0] ? attrData[0] + ':' : ''}`}\r\n
\r\n
\r\n {attrData[1]}\r\n
\r\n
\r\n
\r\n ))\r\n }\r\n \r\n
\r\n \r\n :\r\n <>\r\n {/*
\r\n {`${props.mapTitle}`}\r\n
*/}\r\n \r\n
\r\n {`${props.layerTitle}`}\r\n
\r\n \r\n {/*
\r\n */}\r\n \r\n }\r\n
\r\n );\r\n}\r\n\r\nexport default FeatureAttributesInfoStatic;\r\n","import * as React from 'react';\r\nimport { useState, useEffect } from 'react';\r\nimport { Typography, Divider } from '@material-ui/core';\r\nimport FeatureAttributesInfo from './FeatureAttributesInfo';\r\nimport FeatureAttributesInfoStatic from '../Widgets/FeatureAttributesInfoStatic';\r\nimport LayerListImage from '~/View/resources/icons/layers.svg';\r\n\r\nimport { ILayerInfos } from '../Main/Main';\r\nimport MapInfoCloseButton from './MapInfoCloseButton';\r\n\r\n// import styled from 'styled-components';\r\n// import './MapInfo.css';\r\n\r\n// const MapInfoCloseButton = styled.button`\r\n// background-color: white;\r\n// color: black;\r\n// border: 2px solid #008CBA;\r\n// /* padding: 6px 8px; */\r\n// text-align: center;\r\n// text-decoration: none;\r\n// display: inline-block;\r\n// font-size: 16px;\r\n// /* margin: 4px 2px; */\r\n// transition-duration: 0.4s;\r\n// cursor: pointer;\r\n\r\n// &:hover {\r\n// background-color: #008CBA;\r\n// color: white;\r\n// }\r\n// `;\r\n\r\n\r\ninterface Props {\r\n show: boolean;\r\n infos: Array;\r\n coordinates: Array;\r\n onClose: () => void;\r\n}\r\n\r\nconst MapInfo = (props: Props) => {\r\n\r\n // useEffect(() => {\r\n // return () => {\r\n // // if (overlay) {\r\n // // console.log('overlay to be removed')\r\n // // overlay.setPosition(undefined);\r\n // // }\r\n // }\r\n // }, []);\r\n\r\n return (\r\n <>\r\n {\r\n props.show\r\n ?\r\n
\r\n {/* \r\n {\"Информация за обект\"}\r\n */}\r\n {/* */}\r\n
\r\n
\r\n {\r\n props.infos.map((info, i) => (\r\n <>\r\n
\r\n
\r\n
\r\n
{info.mapTitle}
\r\n
\r\n
\r\n {\r\n info.identifiedLayers.map(identifiedLayer => (\r\n // \r\n \r\n ))\r\n }\r\n \r\n ))\r\n // props.infos.map((info, i) => (\r\n // \r\n // ))\r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n props.onClose()}>\r\n {window.translated ? \"Close\" : \"Затвори\"}\r\n \r\n\r\n
\r\n
\r\n
\r\n //
\r\n // \r\n //
\r\n //
\r\n //
\r\n //
\r\n // <>\r\n // {\r\n // props.infos.map((info, i) => (\r\n // \r\n // ))\r\n // }\r\n\r\n // \r\n //
\r\n :\r\n null\r\n\r\n }\r\n \r\n );\r\n}\r\n\r\nexport default MapInfo;\r\n","import * as React from 'react';\r\nimport { useEffect, useState } from 'react';\r\nimport MapManager from '~/Domain/MapManager/MapManager';\r\n\r\nconst Coordinates = () => {\r\n const [coordinates, setCoordinates] = useState>([]);\r\n\r\n useEffect(() => {\r\n const customMousePositions = document.getElementsByClassName('custom-mouse-position');\r\n const mousePositionEl = customMousePositions[0];\r\n const mapManager = MapManager.getInstance();\r\n if (mousePositionEl) {\r\n const config = { attributes: true, childList: true, subtree: true };\r\n const observer = new MutationObserver((mutationsList, observer) => {\r\n for (const mutation of mutationsList) {\r\n if (mutation.target.textContent && mutation.target.textContent.length > 1) {\r\n const splitted = mutation.target.textContent.split(',');\r\n const eastingStr = splitted[0];\r\n const northingStr = splitted[1];\r\n let eastingNum = 0;\r\n let northingNum = 0;\r\n let easting = '';\r\n let northing = '';\r\n if (eastingStr && northingStr && (!isNaN(eastingStr as any) && !isNaN(northingStr as any))) {\r\n eastingNum = Number(eastingStr);\r\n northingNum = Number(northingStr);\r\n const transformedCoords = mapManager?.transform([eastingNum, northingNum], 'EPSG:3857', 'EPSG:32635') || [];\r\n easting = transformedCoords[0] ? transformedCoords[0].toFixed(2) : eastingNum.toFixed(2);\r\n northing = transformedCoords[1] ? transformedCoords[1].toFixed(2) : northingNum.toFixed(2);\r\n }\r\n setCoordinates([easting, northing]);\r\n }\r\n }\r\n });\r\n\r\n observer.observe(mousePositionEl, config);\r\n\r\n // mousePositionEl.addEventListener('DOMSubtreeModified', (event: any) => {\r\n // const innerText = event.target.innerText;\r\n // if (innerText.length > 1) {\r\n // const splitted = innerText.split(',');\r\n // const eastingStr = splitted[0];\r\n // const northingStr = splitted[1];\r\n // let easting = '';\r\n // let northing = '';\r\n // if (eastingStr && northingStr && (!isNaN(eastingStr) && !isNaN(northingStr))) {\r\n // easting = Number(eastingStr).toFixed(2);\r\n // northing = Number(northingStr).toFixed(2);\r\n // }\r\n // setCoordinates([easting, northing]);\r\n // }\r\n // });\r\n }\r\n }, []);\r\n\r\n return (\r\n
\r\n {\r\n coordinates && coordinates.length ?\r\n `E ${coordinates[0]}, N ${coordinates[1]} WGS'84 UTM N35`\r\n : null\r\n }\r\n
\r\n );\r\n}\r\n\r\nexport default Coordinates;","import * as React from 'react';\r\nimport styled, { keyframes } from 'styled-components';\r\n\r\n\r\nconst Marker = styled.div`\r\n transform: perspective(2rem) rotateX(20deg) rotateZ(-45deg);\r\n transform-origin: 50% 50%;\r\n border-radius: 50% 50% 50% 0;\r\n padding: 0 3px 3px 0;\r\n width: 2rem;\r\n height: 2rem;\r\n background: #3884d0;\r\n position: absolute;\r\n /* left: 60%; */\r\n /* top: 50%; */\r\n margin: -2.2em 0 0 -1.3em;\r\n -webkit-box-shadow: -1px 1px 4px rgba(0, 0, 0, .5);\r\n -moz-box-shadow: -1px 1px 4px rgba(0, 0, 0, .5);\r\n box-shadow: -1px 1px 4px rgba(0, 0, 0, .5);\r\n z-index: 999;\r\n\r\n &:after {\r\n content: '';\r\n width: 0.8rem;\r\n height: 0.8rem;\r\n margin: 0.7rem 0 0 .5rem;\r\n background: #ffffff;\r\n position: absolute;\r\n border-radius: 50%;\r\n -moz-box-shadow: 0 0 10px rgba(0, 0, 0, .5);\r\n -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, .5);\r\n box-shadow: 0 0 10px rgba(0, 0, 0, .5);\r\n -moz-box-shadow: inset -2px 2px 4px hsla(0, 0, 0, .5);\r\n -webkit-box-shadow: inset -2px 2px 4px hsla(0, 0, 0, .5);\r\n box-shadow: inset -2px 2px 4px hsla(0, 0, 0, .5);\r\n }\r\n`;\r\n\r\nconst active = keyframes`\r\n 0% {\r\n transform: scale(.1);\r\n transform: box-shadow(0px 0px 0px 1px #3884d0);\r\n opacity: 1;\r\n }\r\n 100% {\r\n transform: scale(2.5);\r\n opacity: 0;\r\n }\r\n`\r\n\r\nconst Beacon = styled.span`\r\n position: relative;\r\n /* top: 50%; */\r\n /* left: 60%; */\r\n height: 3em;\r\n width: 3em;\r\n border-radius: 50%;\r\n -webkit-transform: translateX(-50%);\r\n -o-transform: translateX(-50%);\r\n -moz-transform: translateX(-50%);\r\n -ms-transform: translateX(-50%);\r\n transform: translateX(-50%);\r\n z-index: 999;\r\n\r\n\r\n &:before {\r\n position: absolute;\r\n left: -1.0rem;\r\n top: 0.3rem;\r\n content: \"\";\r\n height: 2rem;\r\n width: 2rem;\r\n background-color: transparent;\r\n border-radius: 50%;\r\n box-shadow: 0 0 0 3px #3884d0;\r\n -webkit-animation: ${active} 2s infinite linear;\r\n -moz-animation: ${active} 2s infinite linear;\r\n animation: ${active} 2s infinite linear;\r\n }\r\n &:after {\r\n position: absolute;\r\n left: -1.0rem;\r\n top: 0.3rem;\r\n content: \"\";\r\n height: 2rem;\r\n width: 2rem;\r\n background-color: transparent;\r\n border-radius: 50%;\r\n box-shadow: 0 0 0 3px #3884d0;\r\n -webkit-animation: ${active} 2s infinite linear;\r\n -moz-animation: ${active} 2s infinite linear;\r\n animation: ${active} 2s infinite linear;\r\n -moz-animation-delay: 1s;\r\n -webkit-animation-delay: 1s;\r\n animation-delay: 1s;\r\n }\r\n`;\r\n\r\n\r\nconst PointMarker = () => {\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default PointMarker;\r\n","import React, { useState, createRef, useRef, RefObject, useEffect } from 'react';\r\nimport WebMap from '../Map/Webmap';\r\nimport SideDrawer from '../SideDrawer/SideDrawer';\r\nimport { connect } from \"react-redux\";\r\nimport MapButtons from '../Map/MapButtons';\r\nimport SideBar from '../SideDrawer/SideBar'\r\nimport { appConfig } from '~/configLoader';\r\nimport Loading from '../Loading';\r\nimport axios from 'axios';\r\nimport { invokeLayerListUpdate } from '~/View/modules/layerListActions/operations';\r\nimport MapInfo from '../Map/MapInfo';\r\nimport { ILayerListObject, IConfiguredLayersList } from '~/View/interfaces/ILayerListObject';\r\nimport { AppLayer, FieldInfo, MapLayer, Metadata } from '~/View/modules/applayers/reducer';\r\nimport { updateAppLayers, updateAllAppLayers } from '~/View/modules/applayers/operations';\r\nimport { handleDatasetMetadata, handleLayerMetadata, handleLayerFieldInfos } from '~/View/common/xmlManager';\r\nimport MapManager from '~/Domain/MapManager/MapManager';\r\nimport Overlay from 'ol/Overlay';\r\nimport '../Map/MapInfo.css';\r\nimport FeatureAttributesInfo from '../Map/FeatureAttributesInfo';\r\nimport CloseRoundedIcon from '@material-ui/icons/CloseRounded';\r\nimport Coordinates from '../Widgets/Coordinates';\r\nimport PointMarker from '../Map/PointMarker';\r\n\r\n\r\ndeclare global {\r\n interface Window { translated: boolean }\r\n}\r\n\r\n\r\nlet mapManager: MapManager | null;\r\nlet overlay: Overlay | null;\r\n\r\nexport interface ILayerInfos {\r\n mapTitle: string;\r\n identifiedLayers: Array<{ title: string; attributes: { [key: string]: string | number } }>;\r\n}\r\n\r\ninterface DispatchProps {\r\n invokeLayerListUpdate: (layerListObject: Array) => void;\r\n updateAppLayers: (appLayers: Array) => void;\r\n updateAllAppLayers: (appLayers: Array) => void;\r\n\r\n}\r\n\r\ninterface OwnProps {\r\n sideDrawerContent: string;\r\n measuredDistance: number;\r\n measuredArea: number;\r\n selections: Array;\r\n scaleNumber: number;\r\n}\r\n\r\ninterface Props extends OwnProps, DispatchProps { };\r\n\r\nconst Main = (props: Props) => {\r\n const [loading, setLoading] = useState(true);\r\n\r\n // const [coordinates, setCoordinates] = useState('');\r\n const [mapEvent, setMapEvent] = useState('');\r\n const [layersInfo, setLayersInfo] = useState>([]);\r\n const [identifyCoordinates, setIdentifyCoordinates] = useState>([]);\r\n\r\n\r\n useEffect(() => {\r\n // const customMousePositions = document.getElementsByClassName('custom-mouse-position');\r\n // const mousePositionEl = customMousePositions[0];\r\n // if (mousePositionEl) {\r\n // mousePositionEl.addEventListener('DOMSubtreeModified', (event: any) => {\r\n // const innerText = event.target.innerText;\r\n // if (innerText.length > 1) {\r\n // setCoordinates(innerText);\r\n // }\r\n // });\r\n // }\r\n let id = (window as any).getQueryVariable(\"mapId\");\r\n let layersIds = (window as any).getQueryVariable(\"lid\") || '';\r\n\r\n const lang = (window as any).getQueryVariable(\"language\") || '';\r\n window.translated = lang === 'en';\r\n\r\n if (id) {\r\n appConfig.loadMapUrl = id;\r\n loadLayers(id, layersIds);\r\n } else {\r\n loadLayers(appConfig.defaultMap, layersIds);\r\n // setLoading(false);\r\n // console.log('load default layers')\r\n }\r\n\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!!layersInfo.length) {\r\n if (!overlay) {\r\n mapManager = MapManager.getInstance();\r\n const map = mapManager?.map;\r\n const htmlElement = document.getElementById('layer-identified-features') as HTMLElement;\r\n htmlElement.style.display = '';\r\n overlay = new Overlay({\r\n element: htmlElement,\r\n autoPan: true,\r\n autoPanAnimation: {\r\n duration: 250,\r\n },\r\n });\r\n // htmlElement.innerHTML = '

You clicked here:

';\r\n overlay.setPosition(identifyCoordinates);\r\n map?.addOverlay(overlay);\r\n } else {\r\n overlay.setPosition(identifyCoordinates);\r\n }\r\n } else {\r\n if (overlay) {\r\n overlay.setPosition(undefined as any);\r\n }\r\n }\r\n }, [layersInfo]);\r\n\r\n useEffect(() => {\r\n if (overlay && identifyCoordinates && identifyCoordinates.length) {\r\n overlay.setPosition(identifyCoordinates)\r\n }\r\n }, [identifyCoordinates]);\r\n\r\n const loadLayers = (layerUrl: string, layersIds: string) => {\r\n let layerCounter = 0;\r\n axios.get(`${appConfig.startAppUrl}/query`, {\r\n params: {\r\n 'where': '1=1',\r\n 'f': 'json',\r\n 'returnGeometry': false,\r\n 'outFields': '*'\r\n }\r\n }).then(startAppLayerInfo => {\r\n let startAppLayerInfoData = startAppLayerInfo.data;\r\n let datasets = startAppLayerInfoData.features.filter((f: { attributes: any }) => f.attributes['metdataobject'] === 'dataset');\r\n let metadataObjects: Array = [];\r\n datasets.forEach((dataset: { attributes: any }, i: number) => {\r\n const serviceName = dataset.attributes['servicename'];\r\n const serviceUrl = `${appConfig.arcgisServerUrl}/${serviceName}/MapServer`;\r\n const metadatFileName = window.translated ? dataset.attributes['metadatafile_en'] : dataset.attributes['metadatafile'];\r\n const metadataUrl = metadatFileName ? `${appConfig.metadataFilesDirectoryUrl}/${metadatFileName}` : '';\r\n const wmsUrl = `${appConfig.arcgisWmsServerUrl}/${serviceName}/MapServer/WMSServer?request=GetCapabilities&service=WMS`;\r\n\r\n const mapLayersIndexes = startAppLayerInfoData.features.filter((f: { attributes: any }) => f.attributes['metdataobject'] === 'featureclass' && f.attributes['servicename'].indexOf(serviceName) !== -1);\r\n const mapLayers: Array = getMapLayers(mapLayersIndexes, dataset, (100 * i));\r\n layerCounter += mapLayers.length;\r\n\r\n metadataObjects.push({\r\n mapName: '',\r\n mapUrl: serviceUrl,\r\n wmsUrl: wmsUrl,\r\n metadataUrl: metadataUrl,\r\n mapLayers: mapLayers,\r\n metadata: [],\r\n show: false,\r\n orderNum: (100 * i),\r\n selected: layerUrl === serviceUrl,\r\n type: \"trusted\"\r\n });\r\n });\r\n\r\n let metadataQueries: Array> = [];\r\n metadataObjects.forEach(metadataObj => {\r\n let q = null;\r\n if (metadataObj.metadataUrl) {\r\n q = axios.get(metadataObj.metadataUrl);\r\n } else {\r\n q = new Promise((resolve) => {\r\n setTimeout(() => {\r\n resolve('');\r\n }, 1)\r\n })\r\n }\r\n metadataQueries.push(q);\r\n })\r\n\r\n Promise.all(metadataQueries).then(metadatObjResults => {\r\n let counter = 0;\r\n metadatObjResults.forEach((metadatObjResult, i) => {\r\n let metadata = metadatObjResult ? metadatObjResult.data : '';\r\n const metadataObject = metadata ? handleDatasetMetadata(metadata, metadataObjects[i].mapUrl, metadataObjects[i].wmsUrl) : '';\r\n metadataObjects[i].mapName = metadataObject ? metadataObject.title : '';\r\n metadataObjects[i].metadata = metadataObject ? metadataObject.metadata : [];\r\n let layerMetadataQueries = [];\r\n metadataObjects[i].mapLayers.forEach(mapLayer => {\r\n axios.get(mapLayer.layerMetadataUrl as string).then(lrd => {\r\n counter++;\r\n const layerXml = lrd.data;\r\n const layerMetadata = handleLayerMetadata(layerXml, mapLayer.layerUrl);\r\n mapLayer.layerName = layerMetadata.title;\r\n mapLayer.layerMetadata = layerMetadata.metadata;\r\n mapLayer.fieldInfos = handleLayerFieldInfos(layerXml);\r\n\r\n if (layerCounter === counter) {\r\n finishLoading(metadataObjects, layerUrl, layersIds);\r\n setLoading(false);\r\n }\r\n }).catch(err => {\r\n counter++;\r\n if (layerCounter === counter) {\r\n finishLoading(metadataObjects, layerUrl, layersIds);\r\n setLoading(false);\r\n }\r\n })\r\n // layerMetadataQueries.push(axios.get(mapLayer.layerMetadataUrl))\r\n })\r\n // Promise.all(layerMetadataQueries).then(layeMetadatResults => {\r\n // console.log(layeMetadatResults)\r\n // }).catch(err => {\r\n // console.log(err)\r\n // })\r\n });\r\n\r\n\r\n // props.updateAllAppLayers(metadataObjects);\r\n // props.updateAppLayers(metadataObjects);\r\n // setLoading(false);\r\n }).catch(err => {\r\n console.error(err);\r\n setLoading(false);\r\n });\r\n }).catch(err => {\r\n console.error(err);\r\n setLoading(false);\r\n });\r\n }\r\n\r\n const finishLoading = (metadataObjects: Array, layerUrl: string, layersIds: string) => {\r\n let baseMapIndex = -1;\r\n if (layerUrl !== appConfig.defaultMap) {\r\n baseMapIndex = metadataObjects.findIndex(metadataObj => metadataObj.mapUrl === appConfig.defaultMap);\r\n }\r\n let index = metadataObjects.findIndex(metadataObj => metadataObj.mapUrl === layerUrl);\r\n let startAppDataObj = metadataObjects[index];\r\n if (startAppDataObj) {\r\n let startAppMap = { ...startAppDataObj, show: true };\r\n if (layersIds) {\r\n const layerIdsArray = layersIds.split(',');\r\n startAppMap.mapLayers = startAppMap.mapLayers.filter(mapLayer => layerIdsArray.some(lId => lId === mapLayer.layerIndex));\r\n }\r\n startAppMap.mapLayers.forEach(l => l.show = true);\r\n if (baseMapIndex !== -1) {\r\n metadataObjects[baseMapIndex] = { ...metadataObjects[baseMapIndex], show: true };\r\n metadataObjects[baseMapIndex].mapLayers.forEach(l => l.show = true);\r\n }\r\n // loadMap(startAppMap).then(r => {\r\n metadataObjects[index] = startAppMap;\r\n props.updateAppLayers(metadataObjects);\r\n // });\r\n } else {\r\n let startAppMap = { ...metadataObjects[0], show: true };\r\n startAppMap.mapLayers.forEach(l => l.show = true);\r\n metadataObjects[0] = startAppMap;\r\n // loadMap(startAppMap).then(r => {\r\n props.updateAppLayers(metadataObjects);\r\n // });\r\n }\r\n }\r\n\r\n const getMapLayers = (mapLayersIndexes: Array<{ attributes: any }>, dataset: { attributes: any }, mapOrderNum: number) => {\r\n const orderedMapLayersIndexes = mapLayersIndexes.sort((a, b) => {\r\n let splittedFirstServiceName = a.attributes['servicename'].split('/');\r\n let splittedSecondServiceName = b.attributes['servicename'].split('/');\r\n return Number(splittedFirstServiceName[1]) - Number(splittedSecondServiceName[1]);\r\n })\r\n\r\n return orderedMapLayersIndexes.map((mapLayer: { attributes: any }, i) => {\r\n let splittedServiceName = mapLayer.attributes['servicename'].split('/');\r\n let mapLayerServiceName = splittedServiceName[0];\r\n let mapLayerServiceIndex = splittedServiceName[1];\r\n\r\n return {\r\n layerName: \"\",\r\n layerUrl: `${appConfig.arcgisServerUrl}/${mapLayerServiceName}/MapServer/${mapLayerServiceIndex}`,\r\n layerIndex: mapLayerServiceIndex,\r\n visible: true,\r\n show: false,\r\n showFieldInfo: true,\r\n layerOrderNum: mapOrderNum - i - 1,\r\n \"layerMetadata\": [],\r\n \"layerMetadataUrl\": window.translated ? (mapLayer.attributes['metadatafile_en'] ?\r\n `${appConfig.metadataFilesDirectoryUrl}/${mapLayer.attributes['metadatafile_en']}` :\r\n '') : (mapLayer.attributes['metadatafile'] ?\r\n `${appConfig.metadataFilesDirectoryUrl}/${mapLayer.attributes['metadatafile']}` :\r\n ''),\r\n \"fieldInfos\": [\r\n {\r\n \"fieldName\": \"\",\r\n \"fieldAlias\": \"\",\r\n \"accuracy\": \"\",\r\n \"units\": \"\"\r\n }\r\n ]\r\n }\r\n });\r\n }\r\n\r\n const loadMap = (appMapInfo: AppLayer) => {\r\n return new Promise((resolve, reject) => {\r\n const mapLayers = appMapInfo.mapLayers;\r\n let counter = 0;\r\n appMapInfo.mapLayers.forEach(mapLayer => {\r\n if (mapLayer.layerMetadataUrl) {\r\n axios.get(mapLayer.layerMetadataUrl).then(r => {\r\n counter++;\r\n const layerXml = r.data;\r\n const layerMetadata = handleLayerMetadata(layerXml);\r\n mapLayer.layerName = layerMetadata.title;\r\n mapLayer.layerMetadata = layerMetadata.metadata;\r\n mapLayer.fieldInfos = handleLayerFieldInfos(layerXml);\r\n if (counter === mapLayers.length) {\r\n // props.updateAppLayers([appMapInfo]);\r\n resolve(true);\r\n }\r\n }).catch(err => {\r\n counter++;\r\n console.error(err);\r\n if (counter === mapLayers.length) {\r\n // props.updateAppLayers([appMapInfo]);\r\n resolve(true);\r\n }\r\n })\r\n }\r\n });\r\n })\r\n }\r\n\r\n\r\n // const updateMapLayers = (mapLayers: Array, mapInfoResultData: any, mapUrl: string): Array => {\r\n // let resultMapLayers: Array = [];\r\n // let layerObject = mapInfoResultData.layers;\r\n // layerObject.forEach((l: any) => {\r\n\r\n // const mapLayerUrl = `${mapUrl}/${l.id}`;\r\n // let mapLayerObject: MapLayer = {\r\n // layerName: l.name,\r\n // layerUrl: mapLayerUrl\r\n // };\r\n // const alreadyInMapLayer = mapLayers.find(mapLayer => mapLayer.layerUrl === mapLayerUrl);\r\n // if (alreadyInMapLayer && alreadyInMapLayer.layerMetadataUrl) {\r\n // mapLayerObject.layerMetadataUrl = alreadyInMapLayer.layerMetadataUrl;\r\n // }\r\n\r\n // resultMapLayers.push(mapLayerObject);\r\n // });\r\n\r\n // return resultMapLayers;\r\n // }\r\n\r\n const createLayerDetailsData = (layers: Array, describedLayers: Array, layerIds: string = '') => {\r\n const _layerIds = layerIds.split(',');\r\n return layers.map(l => {\r\n const layerDescription = describedLayers.filter(describedLayer => describedLayer.Id === l.id)[0];\r\n const layerName = layerDescription && layerDescription.layerName;\r\n if (layerName) {\r\n return {\r\n ...l,\r\n defaultVisibility: _layerIds[0] ? (_layerIds.some(lDef => lDef === `${l.id}`) ? true : false) : true,\r\n name: layerName\r\n }\r\n }\r\n return null;\r\n }).filter(_l => _l);\r\n }\r\n\r\n // const constructLayers = (mapService: any, mapServiceUrl: string) => {\r\n // const layers = mapService.layers;\r\n // const resultLayers = layers.map((layer: any, i: number) => {\r\n // return {\r\n // title: layer.name,\r\n // id: `${layer.name}_${i}`,\r\n // type: 'ArcGISMapRestService',\r\n // url: `${mapServiceUrl}/${layer.id}`,\r\n // visibility: layer.defaultVisibility\r\n // };\r\n // });\r\n // return resultLayers\r\n // }\r\n\r\n const changeMapEvent = (mapEvent: string) => {\r\n setMapEvent(mapEvent);\r\n if (mapEvent === 'stopIdentify') {\r\n setLayersInfo([]);\r\n }\r\n }\r\n\r\n const changeLoadingStatus = (loadingStatus: boolean) => {\r\n setLoading(loadingStatus);\r\n }\r\n\r\n const changeLayerInfos = (layerInfos: Array, coordinates?: Array) => {\r\n if (coordinates) {\r\n let finalLayerInfos: Array = [];\r\n let _newLayerInfos = [...layerInfos];\r\n for (let i = 0; i < _newLayerInfos.length; i++) {\r\n let added = false;\r\n for (let j = 0; j < finalLayerInfos.length; j++) {\r\n if (_newLayerInfos[i].mapTitle === finalLayerInfos[j].mapTitle) {\r\n finalLayerInfos[j].identifiedLayers = finalLayerInfos[j].identifiedLayers.concat(_newLayerInfos[i].identifiedLayers);\r\n added = true;\r\n }\r\n }\r\n if (!added) {\r\n finalLayerInfos.push(_newLayerInfos[i]);\r\n }\r\n }\r\n // let x = identifyCoordinates[0];\r\n // if (x === coordinates[0]) {\r\n // let _layerInfos = [...layersInfo];\r\n // for (let i = 0; i < layerInfos.length; i++) {\r\n // for (let j = 0; j < _layerInfos.length; j++) {\r\n // if (layerInfos[i].mapTitle === _layerInfos[j].mapTitle) {\r\n // _layerInfos[j].identifiedLayers = _layerInfos[j].identifiedLayers.concat((layerInfos[i].identifiedLayers));\r\n // }\r\n // }\r\n // }\r\n // setIdentifyCoordinates(coordinates as Array);\r\n // // setLayersInfo(_layerInfos);\r\n // } else {\r\n setIdentifyCoordinates(coordinates as Array);\r\n setLayersInfo(finalLayerInfos);\r\n // }\r\n }\r\n }\r\n\r\n const changeLoading = (loadingState: boolean) => {\r\n setLoading(loadingState);\r\n }\r\n\r\n const closePopup = (ev: any) => {\r\n ev.stopPropagation()\r\n // setMapEvent('stopIdentify');\r\n setLayersInfo([]);\r\n }\r\n\r\n const onMapInfoClose = () => {\r\n setLayersInfo([]);\r\n // setMapEvent('stopIdentify');\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
{/* className=\"ol-popup\" */}\r\n {/* \r\n
*/}\r\n\r\n {/*
closePopup(ev)} style={{ position: \"absolute\", right: 10, top: 0, cursor: \"pointer\" }}>X
\r\n\r\n
\r\n {\r\n layersInfo.map((info, i) => (\r\n <>\r\n
{info.mapTitle}
\r\n {\r\n info.identifiedLayers.map(identifiedLayer => (\r\n \r\n ))\r\n }\r\n \r\n ))\r\n }\r\n
*/}\r\n \r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {\r\n props.scaleNumber\r\n ?\r\n `M 1:${props.scaleNumber}`\r\n :\r\n null\r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {/*
\r\n
\r\n \r\n {\"Текущи координати\"}\r\n \r\n
{coordinates}
\r\n
\r\n
\r\n
\r\n \r\n {\"Резултати от измерване\"}\r\n \r\n \r\n {props.measuredDistance || props.measuredArea ?\r\n `Общо разстояние: \r\n ${props.measuredDistance ?\r\n props.measuredDistance :\r\n props.measuredArea ?\r\n props.measuredArea : ''} ${props.measuredDistance ? 'км' : 'кв. км'} (${props.measuredDistance ?\r\n (props.measuredDistance / 1.609344).toFixed(2) :\r\n (props.measuredArea * 0.386102159).toFixed(2)} мили)`\r\n : `Общо разстояние: ...`}\r\n \r\n
\r\n
\r\n \r\n {\"Брой селектирани обекти\"}\r\n \r\n \r\n {props.selections ? props.selections.reduce((acc, curr) => { return acc.concat(curr.features) }, []).length : ''}\r\n \r\n
\r\n
\r\n \r\n {\"Мащаб\"}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
*/}\r\n
\r\n
{`© ${new Date().getFullYear()}, ${window.translated ? 'National Centre for Regional Development (NCRD)' : 'Национален център за териториално развитие ЕАД'}`}
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: any) => ({\r\n sideDrawerContent: state.sideDrawerContent.sideDrawerContent,\r\n measuredDistance: state.measuredDistance.measuredDistance,\r\n measuredArea: state.measuredDistance.measuredArea,\r\n selections: state.selections.selections,\r\n scaleNumber: state.mapActions.scaleNumber\r\n})\r\n\r\nexport default connect(mapStateToProps, { invokeLayerListUpdate, updateAppLayers, updateAllAppLayers })(Main);\r\n","import { NotFound } from \"~/View/components/NotFound\";\r\nimport { HomeContainer as Home } from \"~/View/components/Home\";\r\n\r\nimport { RouteConfig } from \"react-router-config\";\r\n// import MapContainer from '~/View/views/pages/Map';\r\nimport Main from '~/View/components/Main/Main';\r\n\r\nexport const routes: RouteConfig[] = [\r\n {\r\n path: \"*\", //\"/\",\r\n exact: true,\r\n component: Main //MapContainer //Home\r\n },\r\n // {\r\n // path: \"/signin\",\r\n // exact: true,\r\n // component: Signin\r\n // },\r\n // {\r\n // path: \"/signup\",\r\n // exact: true,\r\n // component: Signup\r\n // },\r\n {\r\n path: \"*\",\r\n component: NotFound\r\n }\r\n];\r\n","import * as React from \"react\";\r\n\r\nexport const NotFound: React.FC = () =>

404 Not Found.

;\r\n","import * as React from \"react\";\r\nimport \"react-tabs/style/react-tabs.css\";\r\n\r\nexport type ViewProps = {\r\n image: string;\r\n size: string;\r\n label: string;\r\n customWIdth?: number;\r\n bckgroundColor?: string;\r\n};\r\n\r\nexport type HandlerProps = {\r\n clickHandler?: React.MouseEventHandler;\r\n};\r\n\r\ntype Props = ViewProps & HandlerProps;\r\n\r\nexport const TabButton: React.FC = ({\r\n image,\r\n size,\r\n label,\r\n customWIdth,\r\n clickHandler,\r\n bckgroundColor\r\n}) => {\r\n let labelStyle: React.CSSProperties = {\r\n textAlign: 'center',\r\n width: 'inherit',\r\n // maxWidth: 80,\r\n margin: 0,\r\n maxHeight: 40,\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n fontSize: 14\r\n };\r\n let contentStyle: React.CSSProperties = {\r\n display: 'inline-block',\r\n cursor: 'pointer',\r\n minWidth: 54,\r\n // maxWidth: 80,\r\n overflow: 'hidden',\r\n height: '100%',\r\n verticalAlign: 'top'\r\n };\r\n if (size === 'S') {\r\n contentStyle['height'] = 50;\r\n contentStyle['width'] = customWIdth || 45;\r\n } else if (size === 'M') {\r\n contentStyle['height'] = 70;\r\n contentStyle['width'] = customWIdth || 55;\r\n } else if (size === 'L') {\r\n contentStyle['height'] = 90;\r\n contentStyle['width'] = customWIdth || 65;\r\n }\r\n return (\r\n
\r\n
\r\n
{label}
\r\n
\r\n );\r\n};\r\n","import * as React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport \"react-tabs/style/react-tabs.css\";\r\n\r\nexport type ViewProps = {\r\n title: string;\r\n};\r\n\r\nexport type HandlerProps = {};\r\n\r\ntype Props = ViewProps & HandlerProps;\r\n\r\nexport const TabButtonGroup: React.FC = ({\r\n title,\r\n children\r\n}) => {\r\n\r\n return (\r\n //
\r\n
\r\n
{/* 10px 10px 0px 20px */}\r\n {children}\r\n
\r\n {/*
{title}
borderTop: '1px solid lightgrey' */}\r\n
{title}
\r\n
\r\n );\r\n};\r\n","import { ThunkAction } from \"~/View/redux\";\r\nimport { actions } from \"./actions\";\r\n\r\n// type SideDrawerProps = { email: string; password: string };\r\n\r\n// type Login = (_: LoginProps) => ThunkAction>;\r\n\r\nexport type SideDrawerType = (contentType: string) => ThunkAction;\r\n\r\nexport const invokeSideDrawerContentChange: SideDrawerType = (contentType: string) => dispatch => {\r\n dispatch(actions.changeSideDrawerContent(contentType));\r\n};\r\n\r\ntype CreateProps = {\r\n username: string;\r\n email: string;\r\n password: string;\r\n};\r\n\r\nexport const operations = {\r\n invokeSideDrawerContentChange\r\n};\r\n","import PopupDomainManager from '../../AppDomain/PopupDomainManager/PopupDomainManager';\r\nimport MapManager from '../MapManager/MapManager';\r\nimport { IMap } from '../MapManager/IMap';\r\nimport VectorDomainLayer from '~/AppDomain/LayerManager/VectorDomainLayer';\r\n\r\n\r\nexport default class PopupManager extends PopupDomainManager {\r\n mapManager: MapManager | null;\r\n popupLayerSettings: Array;\r\n vectorLayerCollection: Array;\r\n\r\n constructor(layerSettings: Array, event: string) {\r\n super(event);\r\n\r\n let map: IMap | null = null;\r\n this.popupLayerSettings = layerSettings;\r\n this.mapManager = MapManager.getInstance();\r\n this.vectorLayerCollection = [];\r\n\r\n map = this.getMap();\r\n if (map) {\r\n this.createLayers();\r\n map.addInteraction(this.select);\r\n this.setBehavior();\r\n this.createTooltip(\"Моля, посочете обект\", map);\r\n }\r\n }\r\n\r\n private setBehavior() {\r\n this.select.on('select', (e) => {\r\n if (e.selected.length) {\r\n let message = '';\r\n let featureAttributes = e.selected[0].getProperties();\r\n let vectorLayer = this.select.getLayer(e.selected[0]) as VectorDomainLayer;\r\n if (vectorLayer) {\r\n let vectorLayerConfiguration = this.getLayerConfiguration(vectorLayer.layerId);\r\n let configuredInfo = vectorLayerConfiguration.info;\r\n message = this.createMessage(configuredInfo, featureAttributes);\r\n this.showFeaturesInfo(message);\r\n }\r\n } else {\r\n this.showFeaturesInfo(\"\");\r\n }\r\n })\r\n }\r\n\r\n private createLayers() {\r\n this.popupLayerSettings.forEach(layerConfiguration => {\r\n if (this.mapManager) {\r\n let hoverLayer = this.mapManager.createFeatureLayer(layerConfiguration.sourceSettings, layerConfiguration.id);\r\n hoverLayer?.setOpacity(0);\r\n this.vectorLayerCollection.push(hoverLayer);\r\n this.mapManager.map.addLayer(hoverLayer);\r\n }\r\n });\r\n }\r\n\r\n private getLayerConfiguration(layerId: string) {\r\n return this.popupLayerSettings.filter(configuredPopupLayer => configuredPopupLayer.id === layerId)[0];\r\n }\r\n\r\n private createMessage(configuredInfo: any, featureAttributes: any): string {\r\n let message = '';\r\n let title = configuredInfo.title;\r\n let fields = configuredInfo.fields;\r\n message += title;\r\n message += '\\n';\r\n fields.forEach((field: any) => {\r\n let fieldValue = featureAttributes[field.name];\r\n if (fieldValue) {\r\n message += field.alias + ': ' + featureAttributes[field.name] + '\\n';\r\n }\r\n });\r\n\r\n return message;\r\n }\r\n\r\n private getMap(): IMap | null {\r\n if (this.mapManager) {\r\n return this.mapManager.map;\r\n }\r\n return null;\r\n }\r\n\r\n public destroy() {\r\n this.destruct();\r\n let map = this.getMap();\r\n if (map) {\r\n map.removeInteraction(this.select);\r\n let layersToRemove: Array = [];\r\n this.vectorLayerCollection.forEach(layer => {\r\n map?.getLayers().forEach(mapLayer => {\r\n if ((mapLayer as VectorDomainLayer).layerId === layer.layerId) {\r\n layersToRemove.push(mapLayer as VectorDomainLayer);\r\n }\r\n });\r\n });\r\n layersToRemove.forEach(layerToRemove => map?.removeLayer(layerToRemove));\r\n }\r\n }\r\n}\r\n","import Select from 'ol/interaction/Select';\r\nimport { click, pointerMove, altKeyOnly } from 'ol/events/condition';\r\nimport MapBrowserEvent from 'ol/MapBrowserEvent';\r\nimport Overlay from 'ol/Overlay';\r\nimport Map from 'ol/Map';\r\nimport './PopupDomainManager.css';\r\n\r\nexport default class PopupManager {\r\n private popupInfo: HTMLElement;\r\n private popupOverlay: Overlay | undefined;\r\n \r\n private _select: Select;\r\n\r\n constructor(event: string) {\r\n const olCondition = this.createCondition(event);\r\n this._select = new Select({\r\n condition: olCondition\r\n });\r\n this.popupInfo = document.createElement('div');\r\n this.popupInfo.className = 'popupTooltip';\r\n }\r\n\r\n private createCondition(event: string) {\r\n if (event === \"click\") {\r\n return click;\r\n } else if (event === \"maphover\") {\r\n return pointerMove;\r\n } else if (event === \"altKey\") {\r\n return (mapBrowserEvent: MapBrowserEvent) => {\r\n return click(mapBrowserEvent) && altKeyOnly(mapBrowserEvent);\r\n }\r\n }\r\n return click;\r\n }\r\n\r\n protected createTooltip(tooltipMessage: string, map: Map) {\r\n this.popupInfo.innerHTML = tooltipMessage;\r\n this.popupOverlay = new Overlay({\r\n element: this.popupInfo,\r\n offset: [9, 9]\r\n });\r\n\r\n map.addOverlay(this.popupOverlay);\r\n map.on('pointermove', (evt) => {\r\n this.popupOverlay?.setPosition(evt.coordinate);\r\n });\r\n }\r\n\r\n protected showFeaturesInfo(tooltipMessage: string) {\r\n if (tooltipMessage) {\r\n this.popupInfo.innerHTML = tooltipMessage;\r\n this.popupInfo.style.display = '';\r\n } else {\r\n this.popupInfo.style.display = 'none';\r\n }\r\n }\r\n \r\n get select(): Select {\r\n return this._select;\r\n }\r\n\r\n protected destruct() {\r\n // document.removeChild(this.popupInfo);\r\n // this.popupInfo = null;\r\n this.popupOverlay?.setElement(document.createElement('div'));\r\n }\r\n\r\n}\r\n","import * as React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Tab, Tabs, TabList, TabPanel } from 'react-tabs';\r\nimport \"react-tabs/style/react-tabs.css\";\r\n\r\nimport { TabButton } from './Tabs/TabContent';\r\nimport { TabButtonGroup } from './Tabs/TabButtonGroup';\r\n\r\nimport ZoomInSvg from '~/View/resources/ZoomIn.svg';\r\nimport LayerList from '~/View/resources/LayerList.svg'\r\nimport SearchIcon from '~/View/resources/SearchIcon.svg'\r\nimport UserProfileIcon from '~/View/resources/Profile.svg';\r\nimport Identify from '~/View/resources/Identify.svg';\r\nimport AllProjects from '~/View/resources/AllProjects.svg';\r\nimport ClearAllIcon from '~/View/resources/ClearAll.svg';\r\nimport Upload from '~/View/resources/Upload.svg';\r\n\r\nimport MeasureLength from '~/View/resources/MeasureLength.svg';\r\nimport MeasureArea from '~/View/resources/MeasureArea.svg';\r\nimport MeasureHeight from '~/View/resources/MeasureHeight.svg';\r\nimport MeasureVolume from '~/View/resources/MeasureVolume.svg';\r\nimport Share from '~/View/resources/Share.svg';\r\nimport AreaG from '~/View/resources/area-g.svg';\r\nimport SelectByPoint from '~/View/resources/SelectByPoint.svg';\r\nimport SelectByLine from '~/View/resources/SelectByLIne.svg';\r\nimport SelectByRect from '~/View/resources/SelectByRect.svg';\r\nimport Imagery from '~/View/resources/tempimagery.jpg';\r\nimport Terrain from '~/View/resources/TerrainLabels.jpg';\r\nimport Oceans from '~/View/resources/oceans.jpeg';\r\nimport Antactica from '~/View/resources/antarctica.png';\r\n\r\n\r\nimport ZoomOutSvg from '~/View/resources/ZoomOut.svg';\r\nimport Navigation from '~/View/resources/Navigation.svg';\r\nimport PreviousExtent from '~/View/resources/LeftArrow.svg';\r\nimport NextExtent from '~/View/resources/RightArrow.svg';\r\nimport Home from '~/View/resources/Home.svg';\r\n\r\nimport Download from '~/View/resources/download.svg';\r\nimport DownloadInfrObj from '~/View/resources/pool.svg';\r\n\r\nimport Information from '~/View/resources/information.svg';\r\nimport MapTravel from '~/View/resources/map-travel.svg';\r\n\r\n\r\nimport { connect } from \"react-redux\";\r\nimport { operations, invokeSideDrawerContentChange, SideDrawerType } from '~/View/modules/sideDrawer/operations';\r\n\r\n// import './UserProfile.css';\r\nimport MapManager from \"~/Domain/MapManager/MapManager\";\r\nimport { appConfig } from '~/configLoader';\r\nimport PopupManager from \"~/Domain/PopupManager/PopupManager\";\r\n\r\n\r\nexport type ViewProps = {\r\n sideDrawerContent: string\r\n};\r\n\r\nexport type HandlerProps = {\r\n onLogoClick: () => void;\r\n onHomeClick: () => void;\r\n onSigninClick: () => void;\r\n};\r\n\r\ntype HeaderDispatchProps = {\r\n invokeSideDrawerContentChange: Function\r\n}\r\n\r\ntype Props = ViewProps & HandlerProps & HeaderDispatchProps;\r\n\r\ntype State = {\r\n show: boolean;\r\n featureHover: boolean;\r\n}\r\n\r\nclass Header extends React.Component {\r\n tabStyle: React.CSSProperties = {\r\n borderRadius: 0,\r\n fontSize: 14,\r\n paddingLeft: 8,\r\n paddingRight: 8,\r\n textTransform: \"uppercase\"\r\n };\r\n\r\n private popupManager: PopupManager | null;\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n show: false,\r\n featureHover: false\r\n }\r\n this.popupManager = null;\r\n }\r\n\r\n searchInvoker() {\r\n this.props.invokeSideDrawerContentChange('search');\r\n }\r\n\r\n layerListInvoker() {\r\n this.props.invokeSideDrawerContentChange('layerlist');\r\n }\r\n\r\n identifyInvoker() {\r\n this.props.invokeSideDrawerContentChange('identify');\r\n }\r\n\r\n identifyPlanInvoker() {\r\n this.props.invokeSideDrawerContentChange('identifyPlan');\r\n }\r\n\r\n measureInvoker() {\r\n this.props.invokeSideDrawerContentChange('measure');\r\n }\r\n\r\n callExternal() {\r\n this.props.invokeSideDrawerContentChange('external');\r\n }\r\n\r\n downloadBySelection() {\r\n this.props.invokeSideDrawerContentChange('featureSelection');\r\n }\r\n\r\n downloadBySelectionInfrObj() {\r\n this.props.invokeSideDrawerContentChange('featureSelection_infr');\r\n }\r\n\r\n uploadFile() {\r\n this.props.invokeSideDrawerContentChange('upload');\r\n }\r\n\r\n showUserInfo(show: boolean) {\r\n this.setState({ show: show });\r\n }\r\n\r\n baseMapChanger(basemapType: Object) {\r\n\r\n let basemapUrl = \"\";\r\n\r\n if (basemapType === \"imagery\") { basemapUrl = \"https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}\"; }\r\n else if (basemapType === \"topo\") { basemapUrl = \"https://services.arcgisonline.com/arcgis/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}\"; }\r\n else if (basemapType === \"osm\") { basemapUrl = \"osm\"; }\r\n\r\n let mapManager: MapManager | null = MapManager.getInstance();\r\n if (mapManager) {\r\n mapManager.setBaseMap(basemapUrl);\r\n }\r\n }\r\n\r\n hoverFeatures() {\r\n if (!this.state.featureHover) {\r\n this.popupManager = new PopupManager(appConfig.widgets.hoverFeatures.featureLayers, 'maphover');\r\n }\r\n if (this.state.featureHover && this.popupManager) {\r\n this.popupManager.destroy();\r\n this.popupManager = null;\r\n }\r\n this.setState({ featureHover: !this.state.featureHover });\r\n }\r\n\r\n loadAll() {\r\n this.clearAll();\r\n setTimeout(() => {\r\n let mapManager: MapManager | null = MapManager.getInstance();\r\n let opLayers = appConfig.operationalLayers;\r\n opLayers.forEach((opLayer: any) => {\r\n if (mapManager) { //&& !opLayer.show\r\n opLayer.show = true;\r\n let layer = mapManager.createLayer(opLayer);\r\n mapManager.addLayer(layer);\r\n }\r\n })\r\n this.props.invokeSideDrawerContentChange('');\r\n setTimeout(() => {\r\n this.props.invokeSideDrawerContentChange('layerlist');\r\n }, 20);\r\n }, 10);\r\n }\r\n\r\n clearAll() {\r\n let mapManager: MapManager | null = MapManager.getInstance();\r\n let operationalLayers = mapManager ? mapManager.getOperationalLayers() : [];\r\n let titles: any = []\r\n operationalLayers.forEach(l => { titles.push(l.title) });\r\n for (let i = titles.length - 1; i >= 0; i--) {\r\n if (titles[i] !== \"Сателитна снимка\" && titles[i] !== undefined) {\r\n let layerObject = operationalLayers.filter(l => {\r\n return titles[i] === l.title;\r\n })[0];\r\n mapManager && mapManager.removeLayer(layerObject);\r\n titles.splice(i, 1);\r\n }\r\n }\r\n\r\n // operationalLayers.forEach(l => {\r\n // if (l.title !== \"Сателитна снимка\") {\r\n // console.log(l.title)\r\n // mapManager && mapManager.removeLayer(l);\r\n // }\r\n // })\r\n let opLayers = appConfig.operationalLayers;\r\n opLayers.forEach((opLayer: any) => {\r\n if (opLayer.show) {\r\n opLayer.show = false;\r\n }\r\n })\r\n this.props.invokeSideDrawerContentChange('');\r\n setTimeout(() => {\r\n this.props.invokeSideDrawerContentChange('layerlist');\r\n }, 20);\r\n }\r\n\r\n // createDrawTool() {\r\n // let mapManager: MapManager | null = MapManager.getInstance();\r\n // if (mapManager) {\r\n // let map = mapManager.map;\r\n // let drawTool = new DrawTools(map, \"line\");\r\n // drawTool.activateDrawTool();\r\n // }\r\n // }\r\n\r\n getAction(actionName: string) {\r\n if (actionName === 'listLayers') {\r\n this.loadAll();\r\n }\r\n }\r\n\r\n loadRibbon() {\r\n let ribbonConfig = appConfig.ribbon;\r\n let tabs: Array<{ name: string; sections: Array; }> = ribbonConfig.tabs;\r\n\r\n return (\r\n \r\n {tabs.map(tab => {\r\n return (\r\n
\r\n \r\n {tab.name}\r\n \r\n
\r\n \r\n
\r\n {tab.sections.map(tabSection => (\r\n \r\n {(tabSection.sectionComponents as Array).map(sectionComponent => (\r\n this.getAction(sectionComponent.componentAction)} />\r\n ))}\r\n \r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n )\r\n })}\r\n\r\n
\r\n )\r\n\r\n\r\n }\r\n // render() {\r\n // return (\r\n //
\r\n // {this.loadRibbon()}\r\n //
\r\n // );\r\n // }\r\n render() {\r\n if (!appConfig.ribbon) {\r\n return null;\r\n }\r\n else {\r\n return (\r\n
\r\n \r\n
{\"Всички публикувани данни и услуги в сайта са учебни! Да не се използват за други цели!!!\"}
\r\n \r\n Карта\r\n
\r\n {\r\n this.state.show ?\r\n
\r\n
    \r\n
  • Потребител
  • \r\n
  • Настройки
  • \r\n
  • Смяна на парола
  • \r\n
\r\n
\r\n : null\r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n this.searchInvoker()} />\r\n \r\n \r\n this.layerListInvoker()} />\r\n \r\n \r\n this.identifyInvoker()} />\r\n this.hoverFeatures()} />\r\n this.identifyPlanInvoker()} />\r\n \r\n \r\n this.downloadBySelection()} />\r\n this.downloadBySelectionInfrObj()} />\r\n\r\n \r\n \r\n this.uploadFile()} />\r\n \r\n \r\n this.measureInvoker()} />\r\n \r\n \r\n {\r\n Object.keys(appConfig.basemap).map(basemapKey => {\r\n if (basemapKey && basemapKey !== 'customBaseMaps' && basemapKey !== 'default') { // remove customBaseMaps\r\n let basemapImg = \"\";\r\n let label = \"\";\r\n if (basemapKey === \"imagery\") { label = \"Сателитна снимка\"; basemapImg = Imagery; }\r\n else if (basemapKey === \"topo\") { label = \"Топографска карта\"; basemapImg = Terrain; }\r\n else if (basemapKey === \"osm\") { label = \"Open Street Map\"; basemapImg = Oceans; }\r\n // else if (basemapKey === \"default\") { label = \"Карта по подразбиране\"; basemapImg = Imagery; }\r\n return (\r\n this.baseMapChanger(basemapKey)} />\r\n );\r\n }\r\n return null;\r\n })\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n};\r\n\r\nconst mapStateToProps = (state: any) => ({\r\n sideDrawerContent: state.sideDrawerContent.sideDrawerContent\r\n});\r\n\r\nexport default connect(mapStateToProps, { invokeSideDrawerContentChange })(Header);\r\n","import React from \"react\";\r\nimport Header, { HandlerProps as HeaderHandlerProps } from \"./Header\";\r\n\r\ntype Props = HeaderHandlerProps;\r\n\r\nexport const Root: React.FC = ({\r\n children,\r\n onLogoClick,\r\n onHomeClick,\r\n onSigninClick\r\n}) => (\r\n <>\r\n \r\n {children}\r\n \r\n );\r\n","import * as React from \"react\";\r\nimport { Provider } from \"react-redux\";\r\nimport { ConnectedRouter } from \"connected-react-router\";\r\nimport { renderRoutes } from \"react-router-config\";\r\nimport { store, history } from \"~/View/redux\";\r\nimport { routes } from \"~/routes\";\r\nimport { Root } from \"~/View/components/Root\";\r\n\r\nexport const App: React.FC = () => (\r\n \r\n \r\n {renderRoutes(routes)}\r\n \r\n \r\n);\r\n","import { common } from \"./common\";\r\nimport { article } from \"./article\";\r\nimport { signin } from \"./signin\";\r\n\r\nexport const en = {\r\n translation: {\r\n common,\r\n article,\r\n signin\r\n }\r\n};\r\n","export const common = {\r\n appName: \"webgis\",\r\n bannerMessage: \"A place to share your knowledge.\",\r\n loading: \"Loading...\",\r\n home: \"Home\",\r\n signin: \"Signin\"\r\n};\r\n","export const article = {\r\n empty: \"No articles are here... yet.\"\r\n};\r\n","export const signin = {\r\n message: \"Need an account?\",\r\n emailPlaceHolder: \"Email\",\r\n passwordPlaceHolder: \"Password\",\r\n signInLabel: \"Sign In\"\r\n};\r\n","import i18next from \"i18next\";\r\nimport LanguageDetector from \"i18next-browser-languagedetector\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport { en } from \"~/View/locales\";\r\n\r\nconst lngDetector = new LanguageDetector(null, {\r\n order: [\"localStorage\", \"cookie\"],\r\n lookupCookie: \"i18next\",\r\n lookupLocalStorage: \"i18next\",\r\n caches: [\"localStorage\", \"cookie\"]\r\n});\r\n\r\nexport default i18next\r\n .use(lngDetector)\r\n .use(initReactI18next)\r\n .init({\r\n fallbackLng: \"en\",\r\n resources: {\r\n en\r\n },\r\n interpolation: {\r\n escapeValue: false\r\n },\r\n parseMissingKeyHandler: (key: string) => key,\r\n debug: process.env.NODE_ENV === \"development\"\r\n });\r\n","import * as React from \"react\";\r\nimport * as ReactDOM from \"react-dom\";\r\nimport { App } from \"~/App\";\r\nimport \"~/i18n\";\r\nimport \"~/View/css/main.css\";\r\nimport { getAppConfig } from './configLoader';\r\n\r\nconst rootEl = document.getElementById(\"root\");\r\n\r\ngetAppConfig('static/config_map.json').then(configFile => {\r\n ReactDOM.render(, rootEl);\r\n});\r\n"],"sourceRoot":""}