{"version":3,"sources":["styles/images/Topo-Abs-BG.svg","styles/images/Logos/reylogo.png","redux/reducers/auth.js","utils/session.js","redux/sagas/_auth.js","redux/reducers/config.js","utils/request.js","redux/sagas/_config.js","redux/sagas/index.js","redux/reducers/map.js","redux/reducers/graphics.js","components/LoadScreen.js","components/functional/identify/mapIdentifyWithNoResult.js","components/functional/identify/Attachments.js","components/services/CRUDoperations.service.js","components/services/gis_service.js","components/services/notifications.js","utils/map.js","components/functional/identify/RenderAttributes.js","components/functional/LayerSettingsCheckbox.js","components/functional/identify/LayerFieldSettings.js","components/reports/EditModal.js","components/reports/AddNewFlowTest.js","components/reports/HydrantFlowTests.js","components/reports/WorkHistory.js","components/reports/AddNewValveExercise.js","components/reports/EditValveExercise.js","components/reports/ValveExercise.js","components/navigation/FooterParcelsNotification.js","components/functional/drawings/BufferSelectParcels.js","components/functional/identify/mapIdentifyWithResults.js","components/functional/identify/IdentifySkeleton.js","components/functional/identify/LayerAttributes.js","components/functional/identify/mapIdentifyLoader.js","components/functional/Print.js","components/functional/Legend.js","components/functional/Bookmarks.js","components/functional/SearchResultsDisplay.js","components/functional/AssetSearch.js","redux/context/GlobalState.js","components/functional/drawings/DrawingItem.js","components/functional/drawings/NoDrawings.js","components/functional/drawings/UserDrawings.js","components/functional/Drawings.js","components/functional/MapCompare.js","components/functional/Settings.js","components/functional/basemaps/Basemaps.jsx","components/navigation/LeftNav.js","components/togglers/UtilityToggler.js","components/sketch/Sketching.js","components/drawingTool/DrawingTool.jsx","components/navigation/RightNav.js","components/esri/map/Map.js","components/UserAccountBtn.js","components/UserAccount.js","components/GoogleStreetview.js","components/GStreetViewWrapper.js","components/togglers/CityUtilityCustomToggler.js","components/Main.js","components/account/Login.js","components/App.js","styles/global.js","index.js","redux/store.js"],"names":["module","exports","types","AUTH_START","AUTH_COMPLETE","AUTH_SUCCESS","AUTH_FAIL","AUTH_CHECK","LOGOUT","initialState","user","portal","token","loggedIn","state","action","type","payload","startAuth","options","signIn","portalUrl","clientId","popup","UserSession","beginOAuth2","redirectUri","window","location","origin","completeSignIn","a","async","sessionId","session","completeOAuth2","saveSession","getUser","getPortal","authentication","signOut","Cookies","deleteSession","restoreSession","authInfos","serializedSession","deserialize","expires","tokenExpires","serialize","sameSite","completeAuth","checkAuth","authLogout","watchStartAPI","call","put","console","error","reload","takeLatest","SET_CONFIG","CONFIG_FETCH","loaded","status","response","Promise","resolve","reject","Error","statusText","handleResponse","handleAs","text","json","getRequestBody","data","isFormData","this","objectToFormData","obj","body","URLSearchParams","prop","hasOwnProperty","append","has","toString","objectToUrlSearchParams","makeRequest","params","url","headers","Headers","getHeaders","method","hideCredentials","credentials","fetch","then","bind","getAppConfig","resp","fetchConfig","watchFetchConfig","config","configTypes","rootSaga","all","Object","values","authSagas","configSagas","map","fork","mapLoaded","graphicSlice","createSlice","name","value","reducers","setgraphics","actions","Container","styled","div","background","Wrapper","Title","Label","h1","Logo","img","FadingContainer","initial","opacity","zIndex","animate","transitionEnd","display","transition","delay","duration","ease","LoadScreen","props","isLoading","src","logo","MapIdentifyWithNoResult","useState","isSavedLayer","setSavedLayer","useEffect","Identify","localStorage","getItem","JSON","parse","Layers","length","className","style","position","title","top","right","width","height","cursor","fontSize","fontWeight","onClick","document","getElementById","classList","add","aria-hidden","color","Attachments","proxyUrl","imgURL","attachmentsBaseUrl","ObjectID","slides","attachments","index","key","href","id","target","alt","autoplay","autoplayInterval","_gis_backend_baseurl","Axios","create","baseURL","CrudOperations","Create","Entity","EntityObj","post","Get","get","GetByID","EntityObjID","GetByFID","NotifyFailureExercise","Delete","Update","DRAWINGS_KEY","Intl","NumberFormat","currency","defaults","SelectedParcelsArray","__appOtions","mapView","_gis_service","_userapi","_flow_rate_updater","updateHydrantFlowRate","fid","serviceURL","loadModules","FeatureLayer","__rate","_flowTests","_latestFlowObj","sort","b","Date","testdatetime","getTime","flow","fLayer","query","createQuery","where","outFields","queryFeatures","res","features","feature","keys","attributes","forEach","edits","updateFeatures","applyEdits","FLOW","err","updateSystemValve","request","interceptors","push","urls","after","supportedQueryFormats","featureDefaultValues","opendirection","turnstoclose","programyear","_exercises","_latestExerciseObj","excercisingdatetime","toUpperCase","changeActiveStatus","featureObj","urlUtils","esriConfig","addProxyRule","urlPrefix","SecuredServicesUrlPrefix","layerUrl","facilityid","managedFlayerConfig","HydrantOperableField","ValveOperableField","getUserSavedFields","layerName","_hiddenFields","layer_savedFields","l","layer","fields","_user_auth","signin","email","pw","protocol","host","signinObj","password","removeItem","accessLevel","uid","setItem","stringify","log","signin2","signin3","_token","access_token","getUserClaims","Email","AccessLevel","common","signout","GetAuthUser","isAuthorized","saveToken","userTokenObj","GIS_Base_Functions","GetWorkOrderHistory","GetInternetSpeed","internetConnectionSpeed","connection","navigator","mozConnection","webkitConnection","effectiveType","downlink","bandwidth","__addDefaultBaseLayer","isVisible","baseLayers","_mapViewAvailable","layers","items","filter","_rootLayer","visible","sublayers","_recursiveFunc","ly","__getBasemap","__Basemap","Basemap","TileLayer","copyright","GetStreetBasemap","userGraphicService","updateGraphicsStorage","graphicsLayer","graphics","Graphic","undefined","rawGraphics","graphic","_gr","geometry","symbol","toJSON","deleteGraphic","RenderAttributes","savedFieldsArray","_text_style","__getUrl","__IsFieldHidden","fieldName","indexOf","_urlPermit","appOptions","permitPlanBaseUrl","fieldValue","showNullOrEmptyFields","_mapref1","charAt","_urlScale","mapRefBaseUrl","_urlCountyLink","trim","_renderRow","LayerSettingsCheckbox","checked","onChange","__stylePanelHeader","backgroundColor","padding","textAlign","borderBottom","_identifyFooterToolbar","bottom","left","borderTop","__styleClosePanelBtn","__styleCloseBtnText","transform","_text_info","margin","_table_style","__USERHIDDENFIELDS","LayerFieldSettings","getSavedFieldsCheckboxes","_checkboxes","attr","label","setState","checkboxes","_previous","ReactDOM","render","view","_save","__layer_fields_to_hide","Keys","checkedItems","entries","_newArray","__save_success_message","swal","closeOnClickOutside","buttons","cancel","confirm","dangerMode","_cancel","closeWidgetIdentifyWindow","removeAll","Map","handleChange","e","item","isChecked","prevState","set","setTimeout","__saved__fields","querySelectorAll","element","innerText","click","Button","Component","EditModal","changeHandler","__on_update_save","isSubmitting","__newFlowTest","hydrantflowtestid","flowtest","inspector","date","parseFloat","staticpressure","sp","residualpressure","rp","comment","comments","result","facilitykey","hydrantFlayer","new_flow_rate","updateUI","fserviceError","datePickerFocused","onDateChange","onFocusChange","handleSelectChange","focused","horizontal","Form","selected","d","htmlFor","selectedValue","val","fullWidth","Menu","disabled","close","AddNewFlowTest","__convertToBoolean","condition","FACILITYID","operhard","operable","paint","marker","oil","drain","flushingYear","ownedBy","modalContainer","createElement","HydrantFlowTests","_getFlowTests","IsLoading","results","IsShowingNoResult","IsShowingResult","downloadFile","reportName","replacer","header","csv","row","join","unshift","csvArray","blob","Blob","saveAs","__close_report","mapview","ui","remove","__record_new_flow_test","alert","_downloadCurrentFlowtests","_downloadAllFlowtests","handleEdit","_save_flowtest_update","closeEditForm","appendChild","handleDelete","delete_resp","_updateFlowRate","contains","unmountComponentAtNode","_goToCreateNewFlowTest","formatDate","toLocaleDateString","FacilityID","STATUS","WORKORDERURL","SpatialReference","GeometryService","ProjectParameters","geomSer","geometryService","geometries","outSpatialReference","wkid","wkt","project","lat","latitude","lng","longitude","columns","Header","accessor","sortMethod","a1","b1","Cell","size","original","handle","green","icon","defaultPageSize","WorkHistory","_navigateTo","open","work","List","csrid","woid","workType","__renderWorkHistory","AddNewValveExercise","showSavedMessage","message","_exercise","valveFlayer","_result","resultValues","watervalveexercisingid","noti","notificationError","EditValveExercise","_updated_exercise","exercise","featureUpdatedValues","success","ValveExercise","_getExercises","_save_exercise_update","_updateValveAttributesUI","OPERABLE_STATUS","__renderComponent","__panelWrapper","FooterParcelsNotification","downloadDataToExcel","ParcelsReport","DownloadFile","parcels","CloseReport","CloseParcelsTable","p","callback","marginLeft","visibility","SetSelectedParcels","parcelsArray","SelectParcelsByGeometry","flayer","spatialRelationship","returnGeometry","HighlightSelectedParcels","GenerateBuffer","bufferDistance","isSelectParcel","geometryEngine","bufferGraphicsLayer","findLayerById","parcelBuffer","buffer","outline","__intersect__parcels__features","parcelsNotificationGLayer","PARCELID","__gr","ShowSelectedParcels","DownloadSelectedParcels","__panel","BufferSelectParcels","CreateBuffer","bufferAndSelectParcels","leftAdornment","rightAdornment","_layerFields","__styleLayerSettingsBtn","_searchDistanceWrapper","maprgin","paddingTop","paddingRight","MapIdentifyWithResults","_setLocationCoordinates","_checkUtilityLayer","__utilityLayer","allSublayers","findIndex","isUtility","_setReportIssue_Link","rate","f","selectedFeature","k","__goToFieldSettings","__goToWorkHistory","populateField","renderNext","next","selectedIndex","selectedFeatureIndex","renderAttachments","renderAttributes","_highlightSelectedFeature","renderPrevious","previous","zoomTo","goTo","zoom","renderFlowTest","reportDiv","setAttribute","renderValveExercising","hydrantLayerName","oldHStatus","ACTIVEINACTIVESTATUS","valveLayerName","oldVStatus","updateFeatureResults","featureCount","_IdentifyObj","IsNullOrEmptyFields","highlightGr","_highlightSymbol","geometryType","_symbol","toLowerCase","cap","OBJECTID","sourceLayer","replace","marginTop","colSpan","red","small","IdentifySkeleton","requestOptions","responseType","MapIdentifyLoader","_isMounted","isIdentifying","selectedLayers","isHideNullOrEmptyFields","identifyLayers","userSavedLayers","__selected__layers__array","_identifySettings","__settings","savedLayer","applicationLayers","configLayer","___identifyLayers","IdentifyParameters","_identifyParams","identifiedLayers","IDs","_traverseLayerItems","idParams","tolerance","mapIdentifyTolerance","layerIds","mapExtent","extent","returnFieldName","spatialReference","layerOption","identifyParams","esriRequest","hasAttachments","featureLayerUrl","featureHasAttachmentEnabled","isAttachmentEnabled","_url","__queryAttachments","___attachments","attachmentInfos","IdentifyTask","arrayUtils","__getIdentifyParams","IdentifyTaskList","execute","allResults","AllResultsWithSourceLayers","r","res1","layerId","promises","__getAttachments","resultFeatures","__features","reverse","__IDENTIFYSETTINGS","_SendEmailToCity","_emailTo","Emails","BasicEmailsReceiver","link","_mapView","Print","printServiceURL","printService","print","includeDefaultTemplates","printServiceUrl","container","templateOptions","legendEnabled","on","isTrufy","printServiceDisclaimer","connect","Legend","__loadEsriLayerListToc","that","LayerList","btnText","listItemCreatedFunction","event","children","childrenArr","child","split","ul","_layerIndex","_childLayers","legend","i","li","imgc","contentType","imageData","panel","content","actionsSections","watch","__recursive__func","parent","_parent","__CheckOrUnchekTopToggler","evt","initTOC","layerInfos","slider","__synchronizeUtilityToggler","layerGroupNameID","visibilityArray","v","layerNameDomId","__toggleTopTogglerVisibility","loadFEMAData","__fema","MapImageLayer","FEMA_GIS_MAPSERVIVE","overflow","BOOKMARK_KEY","USERBOOKMARKS","Bookmarks","bookmarks","existingBookmarks","editingEnabled","when","saveUserBookMarks","rawBookmarks","active","thumbnail","SearchResultsDisplay","resultObj","foundFieldName","leftNode","AssetSearch","__getSearchIds","clearSearch","inputValue","errorMessage","searchResults","onUserAction","selectedItemVal","searchChanged","showNoResultsFound","showResults","showError","utilitySearch","mapServiceUrl","parentLayerId","addEventListener","_doSearch","FindTask","FindParameters","find","searchFields","searchText","placeholder","onRequestClear","resultScrollWrapper","_searchLoader","__styleError","createContext","DrawingItem","SelectParcels","drawingObj","userGLayer","activeSectionIndexes","onAccordionChange","includes","g","idx","gLayer","bar","flex","Card","defaultChecked","__toggleGraphicVisibility","marginBottom","extraSmall","__zoomToGraphic","__deleteGraphic","selection-mode","item-subtitle","NoDrawings","__scrollablePanel","__footerPanel","UserDrawings","hideShowAllGraphics","isShowingAllUserGraphics","__toggle_cards_visibility","_inputs","getElementsByName","deleteAllGraphics","userGraphics","deleteSingleGraphic","dispatch","setUserGraphics","gr","Drawings","MapCompare","leadingServiceUrl","trailingServiceUrl","leadingLayer","trailingLayer","layerSwipe","__destroySwipe","destroy","__compareImageries","Swipe","__ll","__tt","__swipe","leadingLayers","trailingLayers","setLeadingLayer","setTrailingLayer","basemap","listImageries","caption","USER_THEME_KEY","_scrollableWrapper","_scrollableContentWrapper","Settings","handleBackgroundChangeComplete","querySelector","hex","headerBackground","handleTextColorChangeComplete","_headerTitle","_headerToggler","borderColor","headerTextColor","handleLinksColorChangeComplete","_header","headerLinksColor","_saveMyPreferences","_selectedLayers","IdentifySettings","ActivateMapOnLoad","activateMapOnLoad","_resetToDefault","isAllLayersChecked","identifyBtn","_saveTheme","themeObj","headerBackgroundColor","headerTitleTextColor","headerNavLinksColor","activeTabIndex","__isAuthorized","onTabChange","onMapLoadChange","onShowOrEmptyFieldsLoadChange","onAllLayersChecked","getAppLayersCheckboxes","userTheme","_theme","__AuthorizedUser","Panel","onChangeComplete","labelPosition","Basemaps","addDefaultBaseLayers","isImagery","setBasemap","streetBasemapService","streetBasemap","activeBasemap","isStreet","LeftNav","CloseWidgetWrapper","_","activeAction","selectedComponent","_mapCompareWidget","__getHeaderTitle","componentTitle","collapsed","infoModalOpen","openModal","closeModal","onToggleCollapse","actionSelected","__isAuth","domID","__is_left__widget_panel_collapsed","OpenWidgetWrapper","Feature","Features","renderSelectedFeature","dark","_renderAssetSearchFeatures","onRequestClose","appElement","overlayStyle","UtilityToggler","Telecom","Electric","Water","Storm","Sewer","Lights","Contours","__toggleUtility","__toggleContours","version","css","DrawingTool","__dispatchEvent","__savePersistentGraphics","initActionButtons","sketchVM","pointBtn","polylineBtn","polygonBtn","circleBtn","rectangleBtn","clearBtn","selectBtn","onclick","SketchViewModel","Expand","expanded","expandIconClass","expandTooltip","setDefaultCreateOptions","setDefaultUpdateOptions","setDefaultPointSymbol","setDefaultPolylineSymbol","setDefaultPolygonSymbol","defaultCreateOptions","modeSelect","mode","setDefaultOption","selectedOption","defaultUpdateOptions","rotationSwitch","scaleSwitch","multipleSelectionSwitch","aspectRatioSwitch","switched","enableRotation","enableScaling","multipleSelectionEnabled","preserveAspectRatio","pointSymbol","pointStyleSelect","pointSymbolOutlineBtn","pointSizeInput","pointXOffsetInput","pointYOffsetInput","pointAngleInput","pointColorInput","slsWidthInput","slsColorInput","xoffset","yoffset","angle","parseInt","lineSymbol","polylineSymbol","lineStyleSelect","lineWidthInput","lineColorInput","polygonSymbol","polygonStyleSelect","polygonSymbolOutlineBtn","polygonColorInput","slsStyleSelect","selectElement","option","heading","scale","slot","layout","dir","min","max","format","RightNav","DeleteAllGraphicsButUsers","activeModule","iconClass","btnIdentify","__closeModule","__destroyExisitingModule","__createSearchModule","__createMeasurementsModule","__createLocationModule","__closeCustomModule","__createUtilityTogglerModule","__createDrawModule","distanceButton","areaButton","activeTool","clear","Measurement","clearButton","toolbarDiv","_distanceMeasurement","_areaMeasurement","_clearMeasurements","measurementWidget","linearUnit","areaUnit","component","ccWidget","CoordinateConversion","Search","Locator","sources","locator","CityAddressGeocoder","singleLineFieldName","maxResults","maxSuggestions","suggestionsEnabled","minSuggestCharacters","utilityFeatureServiceBaseUrl","searchableLayers","Hydrant","displayField","exactMatch","WaterMain","SewerMain","StormMain","searchWidget","includeDefaultSources","sketchingDiv","utilityTogglerDiv","boxShadow","React","memo","appConfig","MapView","GraphicsLayer","Home","Compass","ScaleBar","watchUtils","userGraphicsLayer","listMode","publicNotificationGLayer","bufferGLayer","_streetViewGLayer","thumbnailUrl","highlightOptions","haloOpacity","fillOpacity","autoOpenEnabled","mapConfig","whenTrue","layerObj","contour","serviceUrl","homeBtn","scaleBar","compassWidget","move","_credits","_panel_window","mapPoint","onMapLoaded","existingGraphics","_userSavedGraphics","fromJSON","UserAccountBtn","__signout","drawerDirection","userName","showDrawerClicked","hideDrawer","substring","SideNav","UserAccount","_history","useHistory","loggedInActionsComponent","signedOutActionsComponent","outputComponent","GoogleStreetview","streetView","initialize","node","prevProps","googleMaps","clearInstanceListeners","canvas","StreetViewPanorama","streetViewPanoramaOptions","addListener","onPanoChanged","getPano","onPositionChanged","getPosition","onPovChanged","getPov","onVisibleChanged","getVisible","onZoomChanged","getZoom","isEqual","pov","otherOptions","prevZoom","prevPov","prevPos","prevOtherOptions","setZoom","setPov","setPosition","setOptions","ref","defaultProps","apiKey","pitch","asyncLoading","globalPath","jsonp","_contentWrapper","_btnClose","alignItems","justifyContent","GStreetView","componentDidMount","__closePanel","onclose","_location","googleAPIKey","CityUtilityCustomToggler","__updateBasemapOpacity","basemapOpacity","__toggleLatestImagery","setAppBasemap","latestImagery","defaultStreetBasemapServiceURL","basemapType","latestBasemap","updateSliderValue","utilityLayer","_recursiveFuncUncheck","__renderTogglerUI","controlledPosition","x","y","MapWrapper","TopNavBrand","Nav","TopNav","NavList","TopNavList","Main","deltaPosition","isMapLoading","auth","useSelector","_graphics_array","isMapLoaded","useDispatch","onGStreetViewClosed","process","signInRequest","__toggleFeaturesIdentifyAction","onDrag","onStop","isMobile","test","userAgent","_screenLocation","changedTouches","clientX","clientY","offsetX","offsetY","_locationPoint","toMap","_streetViewPanoramaOptions","redirectUrl","_streetViewDiv","streetViewWidget","GStreetViewWrapper","Login","_signIn","login","remember_me","isAuthorise","history","isIncorectSignin","App","pathname","signInRequested","isLoaded","path","to","basename","GlobalStyle","createGlobalStyle","homepage","store","composeEnhancer","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","rootReducer","combineReducers","sagaMiddleware","createSagaMiddleware","createStore","applyMiddleware","run","initStore"],"mappings":"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","file":"static/js/main.52b17b5d.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/Topo-Abs-BG.052b93cf.svg\";","module.exports = \"data:image/png;base64,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\"","// Copyright 2019 Esri\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n// http://www.apache.org/licenses/LICENSE-2.0\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.​\r\n\r\n// ACTION TYPES //\r\nexport const types = {\r\n AUTH_START: \"AUTH_START\",\r\n AUTH_COMPLETE: \"AUTH_COMPLETE\",\r\n AUTH_SUCCESS: \"AUTH_SUCCESS\",\r\n AUTH_FAIL: \"AUTH_FAIL\",\r\n AUTH_CHECK: \"AUTH_CHECK\",\r\n LOGOUT: \"LOGOUT\"\r\n};\r\n\r\n// REDUCERS //\r\nexport const initialState = {\r\n user: null,\r\n portal: null,\r\n token: null,\r\n loggedIn: false\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.AUTH_SUCCESS:\r\n const { user, portal, token } = action.payload;\r\n\r\n return {\r\n user,\r\n portal,\r\n token,\r\n loggedIn: true\r\n };\r\n\r\n case types.AUTH_FAIL:\r\n return {\r\n user: null,\r\n portal: null,\r\n token: null,\r\n loggedIn: false\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\n// ACTIONS //\r\nexport const checkAuth = options => ({\r\n type: types.AUTH_CHECK,\r\n payload: options\r\n});\r\n\r\nexport const startAuth = options => ({\r\n type: types.AUTH_START,\r\n payload: options\r\n});\r\n\r\nexport const completeAuth = options => ({\r\n type: types.AUTH_COMPLETE,\r\n payload: options\r\n});\r\n\r\nexport const logout = sessionId => ({\r\n type: types.LOGOUT,\r\n payload: {\r\n sessionId: sessionId\r\n }\r\n});\r\n","import { UserSession } from \"@esri/arcgis-rest-auth\";\r\nimport { getPortal } from \"@esri/arcgis-rest-portal\";\r\nimport * as Cookies from \"js-cookie\";\r\n\r\n/**\r\n * sign in using OAuth\r\n */\r\nexport function signIn(options) {\r\n const {\r\n portalUrl = \"https://www.arcgis.com/\",\r\n clientId,\r\n popup = false\r\n } = options;\r\n\r\n // only need to call the begin method, the rest is handled either in this method\r\n // or in the completeSignIn update\r\n UserSession.beginOAuth2({\r\n clientId,\r\n portalUrl,\r\n popup,\r\n redirectUri: `${window.location.origin}/auth`\r\n }); // TODO can use .then to complete auth here and save an update cycle?\r\n}\r\n\r\n/**\r\n * sign in using OAuth pop up\r\n */\r\nexport async function completeSignIn(options) {\r\n const {\r\n portalUrl = \"https://www.arcgis.com/\",\r\n clientId,\r\n sessionId = `${portalUrl}_session`\r\n } = options;\r\n\r\n const session = UserSession.completeOAuth2({ clientId, portalUrl });\r\n\r\n const token = session.token;\r\n\r\n saveSession(session, sessionId);\r\n\r\n const user = await session.getUser();\r\n\r\n const portal = await getPortal(null, {\r\n portal: session.portal,\r\n authentication: session\r\n });\r\n\r\n return { user, portal, token };\r\n}\r\n\r\n/**\r\n * make sure the user is not logged in the next time they load the app\r\n */\r\nexport function signOut(sessionId) {\r\n deleteSession(sessionId);\r\n}\r\n\r\n/**\r\n * restore a previously saved session\r\n */\r\nexport async function restoreSession(sessionId) {\r\n let authInfos = null;\r\n\r\n const serializedSession = Cookies.get(sessionId);\r\n const session =\r\n serializedSession && UserSession.deserialize(serializedSession);\r\n\r\n if (session) {\r\n const user = await session.getUser();\r\n\r\n const portal = await getPortal(null, {\r\n portal: session.portal,\r\n authentication: session\r\n });\r\n\r\n const token = session.token;\r\n\r\n authInfos = {\r\n user,\r\n portal,\r\n token\r\n };\r\n }\r\n\r\n return authInfos;\r\n}\r\n\r\n// save session & user for next time the user loads the app\r\nfunction saveSession(session, sessionId) {\r\n // get expiration from session\r\n const expires = session.tokenExpires;\r\n\r\n Cookies.set(sessionId, session.serialize(), {\r\n expires,\r\n sameSite: \"strict\"\r\n });\r\n}\r\n\r\n// delete a previously saved session\r\nfunction deleteSession(sessionId) {\r\n Cookies.remove(sessionId);\r\n}\r\n","// Copyright 2019 Esri\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n// http://www.apache.org/licenses/LICENSE-2.0\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.​\r\n\r\nimport { call, put, takeLatest } from \"redux-saga/effects\";\r\nimport { types } from \"../reducers/auth\";\r\nimport {\r\n signIn,\r\n completeSignIn,\r\n signOut,\r\n restoreSession\r\n} from \"../../utils/session\";\r\n\r\n// WORKER //\r\nfunction* startAuth(action) {\r\n try {\r\n // first try to restore the session from a saved cookie if it exists\r\n let authInfos = yield call(restoreSession, action.payload.sessionId);\r\n\r\n // if there isn't a session cookie then we can start a new session\r\n if (!authInfos) {\r\n authInfos = yield call(signIn, action.payload);\r\n }\r\n\r\n // check for a response and finish by sending the authentication info to the Redux store\r\n if (authInfos) {\r\n yield put({\r\n type: types.AUTH_SUCCESS,\r\n payload: authInfos\r\n });\r\n } else {\r\n // error catching if we need it\r\n yield put({ type: types.AUTH_FAIL });\r\n }\r\n } catch (e) {\r\n yield put({ type: types.AUTH_FAIL });\r\n console.error(\"SAGA ERROR: auth/startAuth, \", e);\r\n }\r\n}\r\n\r\nfunction* completeAuth(action) {\r\n try {\r\n const authInfos = yield call(completeSignIn, action.payload);\r\n\r\n // check for a response and finish by sending the authentication info to the Redux store\r\n if (authInfos) {\r\n yield put({\r\n type: types.AUTH_SUCCESS,\r\n payload: authInfos\r\n });\r\n } else {\r\n // error catching if we need it\r\n yield put({ type: types.AUTH_FAIL });\r\n }\r\n } catch (e) {\r\n yield put({ type: types.AUTH_FAIL });\r\n console.error(\"SAGA ERROR: auth/startAuth, \", e);\r\n }\r\n}\r\n\r\nfunction* checkAuth(action) {\r\n try {\r\n let authInfos = yield call(restoreSession, action.payload.sessionId);\r\n\r\n // check for a response and finish by sending the authentication info to the Redux store\r\n if (authInfos) {\r\n yield put({\r\n type: types.AUTH_SUCCESS,\r\n payload: authInfos\r\n });\r\n } else {\r\n // putting a fail call here just means that we didn't need to login\r\n yield put({ type: types.AUTH_FAIL });\r\n }\r\n } catch (e) {\r\n yield put({ type: types.AUTH_FAIL });\r\n console.error(\"SAGA ERROR: auth/checkAuth, \", e);\r\n }\r\n}\r\n\r\nfunction* authLogout(action) {\r\n try {\r\n yield call(signOut, action.payload.sessionId);\r\n\r\n window.location.reload();\r\n } catch (e) {\r\n console.error(\"SAGA ERROR: auth/logout, \", e);\r\n }\r\n}\r\n\r\n// WATCHER //\r\nexport function* watchStartAPI() {\r\n yield takeLatest(types.AUTH_CHECK, checkAuth);\r\n yield takeLatest(types.AUTH_START, startAuth);\r\n yield takeLatest(types.AUTH_COMPLETE, completeAuth);\r\n yield takeLatest(types.LOGOUT, authLogout);\r\n}\r\n","// Copyright 2019 Esri\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n// http://www.apache.org/licenses/LICENSE-2.0\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.​\r\n\r\n// ACTION TYPES //\r\nexport const types = {\r\n SET_CONFIG: \"SET_CONFIG\",\r\n CONFIG_FETCH: \"CONFIG_FETCH\"\r\n};\r\n\r\n// REDUCERS //\r\nexport const initialState = {\r\n loaded: false\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.SET_CONFIG:\r\n return {\r\n ...state,\r\n ...action.payload,\r\n loaded: true\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\n// ACTIONS //\r\nexport const fetchConfig = () => ({ type: types.CONFIG_FETCH });\r\n","// Copyright 2019 Esri\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n// http://www.apache.org/licenses/LICENSE-2.0\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.​\r\n\r\nfunction status(response) {\r\n if (response.status >= 200 && response.status < 300) {\r\n return Promise.resolve(response);\r\n } else {\r\n return Promise.reject(new Error(response.statusText));\r\n }\r\n}\r\n\r\nfunction handleResponse(handleAs, response) {\r\n switch (handleAs) {\r\n case \"text\":\r\n return response.text();\r\n default:\r\n return response.json();\r\n }\r\n}\r\n\r\nfunction objectToUrlSearchParams(obj) {\r\n const body = new URLSearchParams();\r\n for (var prop in obj) {\r\n if (obj.hasOwnProperty(prop)) {\r\n body.append(prop, obj[prop]);\r\n }\r\n }\r\n\r\n // add f=json if not included\r\n if (!body.has(\"f\")) {\r\n body.append(\"f\", \"json\");\r\n }\r\n\r\n return body.toString();\r\n}\r\n\r\nfunction getHeaders(isFormData) {\r\n const headers = {};\r\n\r\n if (!isFormData) {\r\n headers[\"content-type\"] = \"application/x-www-form-urlencoded\";\r\n }\r\n\r\n return new Headers(headers);\r\n}\r\n\r\nfunction getRequestBody(data, isFormData) {\r\n // if formdata, make formdata\r\n if (isFormData) {\r\n return this.objectToFormData(data);\r\n }\r\n\r\n // Not formdata, make url param\r\n return objectToUrlSearchParams(data);\r\n}\r\n\r\n/**\r\n * Make a request using fetch()\r\n * @param { Object } params Object containing key/value parameters to pass to fetch()\r\n * @return { Promise} Promise returned by fetch()\r\n */\r\nexport function makeRequest(params) {\r\n return new Promise((resolve, reject) => {\r\n let url = params.url;\r\n const data = params.data || {};\r\n const headers = getHeaders(params.isFormData);\r\n const options = {\r\n method: params.method || \"get\",\r\n headers\r\n };\r\n\r\n if (!params.hideCredentials) {\r\n options.credentials = \"include\";\r\n }\r\n\r\n let body = getRequestBody(data, params.isFormData);\r\n\r\n if (options.method === \"get\") {\r\n url = `${url}?${body}`;\r\n } else {\r\n options.body = body;\r\n }\r\n\r\n fetch(url, options)\r\n .then(status)\r\n .then(handleResponse.bind(null, params.handleAs))\r\n .then(function(data) {\r\n // Handle successful requests that are actually errors...\r\n if (data.error) {\r\n reject(data.error);\r\n return;\r\n }\r\n resolve(data);\r\n })\r\n .catch(function(error) {\r\n reject(error);\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Make a request for the App Config [public/config] with makeRequest()\r\n * @return { Promise} Promise returned by makeRequest()\r\n */\r\nexport function getAppConfig() {\r\n return new Promise((resolve, reject) => {\r\n makeRequest({\r\n url: `/config.json`,\r\n method: \"get\"\r\n }).then(resp => resolve(resp));\r\n });\r\n}\r\n","// Copyright 2019 Esri\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n// http://www.apache.org/licenses/LICENSE-2.0\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.​\r\n\r\nimport { call, put, takeLatest } from \"redux-saga/effects\";\r\nimport { types as configTypes } from \"../reducers/config\";\r\nimport { getAppConfig } from \"../../utils/request\";\r\n\r\n// WORKER //\r\nfunction* fetchConfig(action) {\r\n try {\r\n // fetch config\r\n const config = yield call(getAppConfig);\r\n\r\n // load config into Redux store\r\n yield put({\r\n type: configTypes.SET_CONFIG,\r\n payload: config\r\n });\r\n } catch (e) {\r\n console.error(\"SAGA ERROR: config/fetchConfig, \", e);\r\n }\r\n}\r\n\r\n// WATCHER //\r\nexport function* watchFetchConfig() {\r\n yield takeLatest(configTypes.CONFIG_FETCH, fetchConfig);\r\n}\r\n","// Copyright 2019 Esri\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n// http://www.apache.org/licenses/LICENSE-2.0\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.​\r\n\r\n/**\r\n * Combine your Sagas into one output\r\n */\r\n\r\nimport { all, fork } from 'redux-saga/effects';\r\n\r\nimport * as authSagas from './_auth';\r\nimport * as configSagas from './_config';\r\n\r\nexport default function* rootSaga() {\r\n yield all([\r\n ...Object.values(authSagas),\r\n ...Object.values(configSagas),\r\n // more sagas from different files\r\n ].map(fork));\r\n}\r\n","// Copyright 2019 Esri\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n// http://www.apache.org/licenses/LICENSE-2.0\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.​\r\n\r\n// ACTION TYPES //\r\nexport const types = {\r\n MAP_LOADED: \"MAP_LOADED\"\r\n};\r\n\r\n// REDUCERS //\r\nexport const initialState = {\r\n loaded: false\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.MAP_LOADED:\r\n return {\r\n ...state,\r\n loaded: true\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\n// ACTIONS //\r\nexport const mapLoaded = () => ({ type: types.MAP_LOADED, payload: {} });\r\n","import { createSlice } from '@reduxjs/toolkit';\r\n\r\nconst initialStateValue = [];\r\n\r\nexport const graphicSlice = createSlice({\r\n name:\"graphics\",\r\n initialState: {value: initialStateValue},\r\n reducers: {\r\n setgraphics: (state, action) => {\r\n state.value = action.payload;\r\n }\r\n }\r\n});\r\n\r\nexport const { setgraphics } = graphicSlice.actions;\r\n\r\nexport default graphicSlice.reducer;","// React\r\nimport React from 'react';\r\n\r\n// Components\r\nimport Loader from 'calcite-react/Loader';\r\nimport background from '../styles/images/Topo-Abs-BG.svg';\r\nimport logo from '../styles/images/Logos/reylogo.png';\r\n\r\n// Styled & Motion Components\r\nimport styled from 'styled-components';\r\nimport { motion } from 'framer-motion';\r\n\r\nconst Container = styled.div`\r\n position: absolute;\r\n height: 100%;\r\n width: 100%;\r\n background: rgba(255, 255, 255, 0.1) url(${background}) no-repeat center/cover;\r\n background-blend-mode: screen;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%);\r\n`;\r\n\r\nconst Title = styled.div`\r\n position: absolute;\r\n right: 0;\r\n bottom: 0;\r\n z-index: 20;\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n width: 100%;\r\n padding: 2em;\r\n text-align: right;\r\n color: white;\r\n`;\r\n\r\nconst Label = styled.h1`\r\n font-size: 3em;\r\n text-shadow: -2px 2px 8px rgba(0, 0, 0, 0.25);\r\n`;\r\n\r\nconst Logo = styled.img`\r\n width: 5em;\r\n height: 100%;\r\n margin-right: 1em;\r\n`;\r\n\r\nconst FadingContainer = () => (\r\n \r\n \r\n \r\n);\r\n\r\nconst LoadScreen = (props) => {\r\n if (!props.isLoading) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n <Logo src={logo}></Logo>\r\n <Label>GIS v4</Label>\r\n \r\n \r\n );\r\n }\r\n\r\n return ;\r\n};\r\n\r\nexport default LoadScreen;\r\n","import React, { Fragment, useEffect, useState } from 'react';\r\nconst __IDENTIFYSETTINGS = '__identifySettings';\r\n\r\nconst MapIdentifyWithNoResult = () => {\r\n const [isSavedLayer, setSavedLayer] = useState(false);\r\n useEffect(() => {\r\n var Identify = localStorage.getItem(__IDENTIFYSETTINGS);\r\n if(Identify) {\r\n var _IdentifyObj = JSON.parse(Identify);\r\n if(_IdentifyObj.Layers.length > 0) {\r\n setSavedLayer(true);\r\n }\r\n }\r\n });\r\n\r\n const btnClose = {\r\n position: 'absolute',\r\n top: '5px',\r\n right: '5px',\r\n width: '40px',\r\n height: '30px',\r\n cursor: 'pointer',\r\n fontSize: '1.8rem',\r\n fontWeight: '400'\r\n }\r\n const _close_window = () => {\r\n document.getElementById('right-bar-wrapper').classList.add('hidden');\r\n }\r\n return (\r\n \r\n
\r\n
_close_window()}>x
\r\n \r\n

No Result found

\r\n

\r\n There were no result found. Try to identify a feature again\r\n

\r\n

\r\n You seem to have some layer configuation set to be identified. \r\n Please verify your identify settings\r\n

\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default MapIdentifyWithNoResult;\r\n","import React, { Fragment } from 'react';\r\nimport Carousel from 'nuka-carousel';\r\nimport './attachments-carousel.css';\r\n\r\nconst Attachments = (props) => {\r\n const __request__proxy__url = `${props.proxyUrl}?`;\r\n const imgURL =\r\n// __request__proxy__url + // attachment proxy\r\n props.attachmentsBaseUrl +\r\n '/' +\r\n props.ObjectID +\r\n '/attachments/';\r\n\r\n const slides = props.attachments.map((img, index) => (\r\n \r\n handleImageClick()} */\r\n /* style={{\r\n height: heightMode === \"current\" ? 100 * (index + 1) : 400\r\n }} */\r\n width=\"100%\"\r\n />\r\n \r\n ));\r\n\r\n return (\r\n \r\n \r\n {slides}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Attachments;\r\n","/**\r\n * Performs CRUD operations from GIS backend service\r\n *\r\n */\r\n\r\nimport Axios from 'axios';\r\n\r\n// SRC API http request config\r\nexport const _gis_backend_baseurl = Axios.create({\r\n baseURL: 'https://gis.reynoldsburg.gov/api', //'https://gis.mansfieldcity.com/gisapi/api', // `${window.location.protocol}//${window.location.host}/gisapi/api`, //\r\n});\r\n\r\nexport const CrudOperations = {\r\n Create: (Entity, EntityObj) => {\r\n return _gis_backend_baseurl.post(`/${Entity}`, EntityObj);\r\n },\r\n Get: (Entity) => {\r\n return _gis_backend_baseurl.get(`/${Entity}`);\r\n },\r\n GetByID: (Entity, EntityObjID) => {\r\n return _gis_backend_baseurl.get(`/${Entity}/${EntityObjID}`);\r\n },\r\n GetByFID: (Entity, EntityObjID) => {\r\n return _gis_backend_baseurl.get(`/${Entity}/GetByFID/${EntityObjID}`);\r\n },\r\n NotifyFailureExercise: (Entity, EntityObjID) => {\r\n return _gis_backend_baseurl.get(\r\n `/${Entity}/NotifyFailureExercise/${EntityObjID}`\r\n );\r\n },\r\n Delete: (Entity, EntityObjID) => {\r\n return _gis_backend_baseurl.delete(`/${Entity}/${EntityObjID}`);\r\n },\r\n Update: (Entity, EntityObj) => {\r\n return _gis_backend_baseurl.put(`/${Entity}`, EntityObj);\r\n },\r\n};\r\n\r\nexport const CurrencyFormater = new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency: 'USD',\r\n});\r\n\r\nexport const GlobalFormatter = {\r\n FormatUSD: (price) => {\r\n return CurrencyFormater.format(price);\r\n },\r\n};\r\n","import Axios from 'axios';\r\nimport { loadModules } from 'esri-loader';\r\nimport { _mapViewAvailable } from '../../utils/map';\r\nimport { CrudOperations } from './CRUDoperations.service';\r\n\r\nconst __USERHIDDENFIELDS = '__gis__Fields__Manager';\r\nconst _AUTH_STORE_TOKEN = '_AUTH_STORE_TOKEN';\r\nconst DRAWINGS_KEY = 'arcgis-local-drawings';\r\n\r\nvar __USER__NAME = '',\r\n ACCESS__LEVEL = 0;\r\n\r\n Axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';\r\n\r\nexport const _gis_service = Axios.create({\r\n baseURL: 'https://gis.reynoldsburg.gov/gisapi/api', //'https://localhost:44368/api', // 'https://gis.mansfieldcity.com/gisapi/api', // `${window.location.protocol}//${window.location.host}/gisapi/api`,\r\n});\r\n\r\nexport const _userapi = {\r\n apitoken:\"https://rms.reynoldsburg.gov/appapi/token\",\r\n apiUser:\"https://rms.reynoldsburg.gov/appapi/api/user/\" \r\n }; \r\n\r\nexport const _flow_rate_updater = {\r\n updateHydrantFlowRate: (fid, serviceURL) => {\r\n const __promise = new Promise((resolve, reject) => {\r\n loadModules(['esri/layers/FeatureLayer']).then(async ([FeatureLayer]) => {\r\n let __rate = 0;\r\n // get the latest date\r\n CrudOperations.GetByFID('HydrantFlowTest', fid).then((_flowTests) => {\r\n if (_flowTests.data) {\r\n if (_flowTests.data.length > 0) {\r\n // get the flow from the latested date\r\n const _latestFlowObj = _flowTests.data.sort((a, b) => {\r\n return (\r\n new Date(b.testdatetime).getTime() -\r\n new Date(a.testdatetime).getTime()\r\n );\r\n })[0];\r\n\r\n __rate = _latestFlowObj.flow;\r\n\r\n let fLayer = new FeatureLayer(serviceURL);\r\n var query = fLayer.createQuery();\r\n query.where = `FACILITYID = '${fid}'`;\r\n query.outFields = ['OBJECTID', 'FLOW'];\r\n fLayer.queryFeatures(query).then((res) => {\r\n if (res.features.length > 0) {\r\n const feature = res.features[0];\r\n Object.keys(feature.attributes).forEach((name) => {\r\n switch (name) {\r\n case 'FLOW':\r\n feature.attributes[name] = __rate;\r\n break;\r\n }\r\n });\r\n const edits = {\r\n updateFeatures: [feature],\r\n };\r\n fLayer\r\n .applyEdits(edits)\r\n .then(() => resolve(feature.attributes.FLOW))\r\n .catch((err) => reject(err));\r\n }\r\n });\r\n }\r\n }\r\n });\r\n });\r\n });\r\n return __promise;\r\n },\r\n updateSystemValve: (fid, serviceURL) => {\r\n const __promise = new Promise((resolve, reject) => {\r\n loadModules(['esri/layers/FeatureLayer', 'esri/config']).then(\r\n ([FeatureLayer, esriConfig]) => {\r\n esriConfig.request.interceptors.push({\r\n urls: /FeatureServer\\/\\d+$/,\r\n after: function (response) {\r\n response.data.supportedQueryFormats = 'JSON';\r\n },\r\n });\r\n\r\n let featureDefaultValues = {\r\n opendirection: 'Unknown',\r\n turnstoclose: 'Unknown',\r\n programyear: 'Unassigned',\r\n location: 'N/A',\r\n };\r\n // get the latest date\r\n CrudOperations.GetByFID('WaterValveExercising', fid).then(\r\n (_exercises) => {\r\n if (_exercises.data) {\r\n if (_exercises.data.length > 0) {\r\n // get the flow from the latested date\r\n const _latestExerciseObj = _exercises.data.sort((a, b) => {\r\n return (\r\n new Date(b.excercisingdatetime).getTime() -\r\n new Date(a.excercisingdatetime).getTime()\r\n );\r\n })[0];\r\n featureDefaultValues = {\r\n opendirection: _latestExerciseObj.opendirection,\r\n turnstoclose: _latestExerciseObj.turnstoclose,\r\n programyear: _latestExerciseObj.programyear,\r\n location: _latestExerciseObj.location,\r\n };\r\n\r\n let fLayer = new FeatureLayer(serviceURL);\r\n var query = fLayer.createQuery();\r\n query.where = `FACILITYID = '${fid}'`;\r\n query.outFields = [\r\n 'OBJECTID',\r\n 'TURNSTOCLOSE',\r\n 'OPEN_DIR',\r\n 'VALVE_EX_PROG',\r\n 'LOCATION',\r\n ];\r\n fLayer.queryFeatures(query).then((res) => {\r\n if (res.features.length > 0) {\r\n const feature = res.features[0];\r\n Object.keys(feature.attributes).forEach((name) => {\r\n switch (name.toUpperCase()) {\r\n case 'TURNSTOCLOSE':\r\n feature.attributes[name] =\r\n featureDefaultValues.turnstoclose;\r\n break;\r\n case 'OPEN_DIR':\r\n feature.attributes[name] =\r\n featureDefaultValues.opendirection;\r\n break;\r\n case 'VALVE_EX_PROG':\r\n feature.attributes[name] =\r\n featureDefaultValues.programyear;\r\n break;\r\n case 'LOCATION':\r\n feature.attributes[name] =\r\n featureDefaultValues.location;\r\n break;\r\n }\r\n });\r\n const edits = {\r\n updateFeatures: [feature],\r\n };\r\n fLayer\r\n .applyEdits(edits)\r\n .then(() => resolve(featureDefaultValues))\r\n .catch((err) => reject(err));\r\n }\r\n });\r\n }\r\n }\r\n }\r\n );\r\n }\r\n );\r\n });\r\n return __promise;\r\n },\r\n changeActiveStatus: (featureObj, config) => {\r\n return loadModules([\r\n 'esri/layers/FeatureLayer',\r\n 'esri/core/urlUtils',\r\n 'esri/config',\r\n ]).then(([FeatureLayer, urlUtils, esriConfig]) => {\r\n // set the proxy\r\n urlUtils.addProxyRule({\r\n proxyUrl: config.proxyUrl,\r\n urlPrefix: config.SecuredServicesUrlPrefix,\r\n });\r\n\r\n esriConfig.request.interceptors.push({\r\n urls: /FeatureServer\\/\\d+$/,\r\n after: function (response) {\r\n response.data.supportedQueryFormats = 'JSON';\r\n },\r\n });\r\n\r\n const { layerUrl, facilityid, status } = featureObj;\r\n\r\n const { HydrantOperableField, ValveOperableField } =\r\n config.managedFlayerConfig;\r\n\r\n let fLayer = new FeatureLayer(layerUrl);\r\n var query = fLayer.createQuery();\r\n query.where = `FACILITYID = '${facilityid}'`;\r\n query.outFields = ['*'];\r\n return fLayer.queryFeatures(query).then((res) => {\r\n if (res.features.length > 0) {\r\n const feature = res.features[0];\r\n Object.keys(feature.attributes).forEach((name) => {\r\n switch (name.toUpperCase()) {\r\n case HydrantOperableField:\r\n feature.attributes[name] = status;\r\n break;\r\n case ValveOperableField:\r\n feature.attributes[name] = status;\r\n break;\r\n /* case 'COMMENT':\r\n feature.attributes[name] = 'Service restored';\r\n break; */\r\n }\r\n });\r\n const edits = {\r\n updateFeatures: [feature],\r\n };\r\n return fLayer.applyEdits(edits);\r\n } else {\r\n return null;\r\n }\r\n });\r\n });\r\n },\r\n};\r\n\r\nexport const getUserSavedFields = (layerName) => {\r\n const _hiddenFields = localStorage.getItem(__USERHIDDENFIELDS);\r\n var layer_savedFields = [];\r\n if (_hiddenFields) {\r\n const __userFieldsArrayObj = JSON.parse(_hiddenFields);\r\n // return fields array for matching layername\r\n __userFieldsArrayObj.map((l) => {\r\n if (l.layer.toUpperCase() === layerName.toUpperCase()) {\r\n layer_savedFields = l.fields;\r\n }\r\n });\r\n }\r\n return layer_savedFields;\r\n};\r\n\r\nexport const _user_auth = {\r\n\r\n\r\n signin: (email, pw) => {\r\n const _api_url = `${window.location.protocol}//${window.location.host}/api`;\r\n const __promise = new Promise((resolve, reject) => {\r\n // implement real auth\r\n const signinObj = {\r\n email: email,\r\n password: pw,\r\n };\r\n _gis_service\r\n .post('Users/ClassicAuth', signinObj)\r\n .then((res) => {\r\n if (res.data === '') {\r\n resolve(false);\r\n } else {\r\n const _userToken = localStorage.getItem(_AUTH_STORE_TOKEN);\r\n if (_userToken) {\r\n localStorage.removeItem(_AUTH_STORE_TOKEN);\r\n }\r\n const { accessLevel, uid, email } = res.data;\r\n __USER__NAME = email;\r\n ACCESS__LEVEL = accessLevel;\r\n localStorage.setItem(\r\n _AUTH_STORE_TOKEN,\r\n JSON.stringify({ token: uid, accessLevel, email })\r\n );\r\n resolve(true);\r\n }\r\n })\r\n .catch((err) => console.log('Error fetching user auth :: ', err));\r\n });\r\n return __promise;\r\n },\r\n\r\n signin2: (email, pw) => {\r\n const __promise = new Promise((resolve, reject) => {\r\n // implement real auth\r\n const data = 'username=' + email + '&password=' + pw + '&grant_type=password';\r\n _gis_service\r\n .post(_userapi.apitoken, data)\r\n .then((res) => {\r\n if (res.data === '') {\r\n resolve(false);\r\n } else {\r\n const _userToken = localStorage.getItem(_AUTH_STORE_TOKEN);\r\n if (_userToken) {\r\n localStorage.removeItem(_AUTH_STORE_TOKEN);\r\n }\r\n// const { accessLevel, uid, email } = res.data;\r\n __USER__NAME = email;\r\n const accessLevel = 4;\r\n ACCESS__LEVEL = 4;\r\n const uid = 1;\r\n localStorage.setItem(\r\n _AUTH_STORE_TOKEN,\r\n JSON.stringify({ token: uid, accessLevel, email })\r\n );\r\n resolve(true);\r\n }\r\n })\r\n .catch((err) => {\r\n console.log('Error fetching user auth :: ', err);\r\n resolve(false);\r\n });\r\n });\r\n return __promise;\r\n },\r\n\r\n signin3: (email, pw) => {\r\n const that = this;\r\n const __promise = new Promise((resolve, reject) => {\r\n // implement real auth\r\n const data = 'username=' + email + '&password=' + pw + '&grant_type=password';\r\n _gis_service\r\n .post(_userapi.apitoken, data, {headers:{'Content-Type':'application/x-www-urlencoded'}})\r\n .then((token: any) => {\r\n if (token.status === 200) {\r\n const _token = token.data.access_token;\r\n localStorage.setItem('user_token', _token);\r\n _user_auth.getUserClaims().then(res => {\r\n const _userToken = localStorage.getItem(_AUTH_STORE_TOKEN);\r\n if (_userToken) {\r\n localStorage.removeItem(_AUTH_STORE_TOKEN);\r\n } // const { accessLevel, uid, email } = res.data;\r\n __USER__NAME = res.data.Email;\r\n ACCESS__LEVEL = res.data.AccessLevel\r\n const accessLevel = res.data.AccessLevel;\r\n const email = res.data.Email;\r\n const uid = 1;\r\n localStorage.setItem(_AUTH_STORE_TOKEN, JSON.stringify({\r\n token: uid,\r\n accessLevel,\r\n email\r\n }));\r\n resolve(true);\r\n });\r\n } else {\r\n resolve(null);\r\n }\r\n }, (err) => {\r\n resolve(false);\r\n })\r\n .catch((err) => {\r\n console.log('Error getting user auth :: ', err);\r\n resolve(false);\r\n });\r\n });\r\n\r\n return __promise;\r\n },\r\n\r\n getUserClaims() {\r\n _gis_service.defaults.headers.common['Authorization'] = 'Bearer ' + localStorage.getItem('user_token');\r\n return _gis_service.get(_userapi.apiUser+\"getUserClaims\");\r\n },\r\n \r\n signout: () => {\r\n const _userToken = localStorage.getItem(_AUTH_STORE_TOKEN);\r\n if (_userToken) {\r\n localStorage.removeItem(_AUTH_STORE_TOKEN);\r\n }\r\n },\r\n\r\n/* getUserToken(email, pw) { /* Here for reference - not used in the code \r\n const that = this;\r\n const _promise = new Promise((resolve, reject) => {\r\n const data = 'username=' + email + '&password=' + pw + '&grant_type=password';\r\n const headers = new Headers();\r\n headers.append('Content-Type', 'application/x-www-urlencoded');\r\n const options = new RequestOptions({headers: headers});\r\n that._http.post(that.apitoken, data, options)\r\n .subscribe((token: any) => {\r\n // console.log('The API Token: ', token);\r\n if (token.status === 200) {\r\n const _token = JSON.parse(token['_body']).access_token;\r\n localStorage.setItem('user_token', _token);\r\n that.getUserClaims().subscribe(res => {\r\n const userClaim = JSON.parse(res['_body']);\r\n const _user = {\r\n IsUser: true,\r\n FirstName: userClaim.UFName,\r\n LastName: userClaim.ULName,\r\n Email: userClaim.Email,\r\n AccessLevel: userClaim.AccessLevel\r\n };\r\n const _al = userClaim.AccessLevel;\r\n that.emit({user: _user});\r\n that.emitAL(_al);\r\n resolve(_user);\r\n });\r\n } else {\r\n resolve(null);\r\n }\r\n }, (err) => {\r\n resolve(err);\r\n });\r\n }); */\r\n \r\n GetAuthUser: () => {\r\n return {\r\n email: 'GIS-support@reynoldsburg.gov',\r\n accessLevel: 2,\r\n };\r\n/* return {\r\n email: __USER__NAME,\r\n accessLevel: ACCESS__LEVEL,\r\n }; */\r\n },\r\n\r\n isAuthorized: () => {\r\n __USER__NAME = 'GIS-support@reynoldsburg.gov';\r\n ACCESS__LEVEL = 2;\r\n return true;\r\n/* let __isAuth = false;\r\n const _userToken = localStorage.getItem(_AUTH_STORE_TOKEN);\r\n if (_userToken) {\r\n const _authObj = JSON.parse(_userToken);\r\n __USER__NAME = _authObj.email;\r\n ACCESS__LEVEL = _authObj.accessLevel;\r\n __isAuth = true;\r\n } else {\r\n __isAuth = false;\r\n }\r\n return __isAuth; DMM 10/11/2022 */\r\n },\r\n\r\n saveToken: (userTokenObj) => {\r\n const _auth_token = localStorage.getItem(_AUTH_STORE_TOKEN);\r\n if (_auth_token) {\r\n localStorage.removeItem(_AUTH_STORE_TOKEN);\r\n }\r\n localStorage.setItem(_AUTH_STORE_TOKEN, JSON.stringify(userTokenObj));\r\n },\r\n};\r\n\r\nexport const GIS_Base_Functions = {\r\n GetWorkOrderHistory: (fid) => {\r\n return _gis_service.get(`WorkOrders/${fid}`);\r\n },\r\n GetInternetSpeed: () => {\r\n var internetConnectionSpeed = 0;\r\n\r\n //console.log('The Navigator :: ', navigator);\r\n var connection =\r\n navigator.connection ||\r\n navigator.mozConnection ||\r\n navigator.webkitConnection;\r\n\r\n // Check for browser support\r\n if (!!connection) {\r\n // Get the connection type\r\n var type = connection.type || connection.effectiveType;\r\n //console.log('Internet connection Type :: ', type);\r\n // Get the connection speed in megabits per second (Mbps)\r\n var speed = connection.downlink || connection.bandwidth;\r\n internetConnectionSpeed = speed;\r\n //console.log(\r\n // 'Internet connection Speed in Mbps :: ',\r\n // internetConnectionSpeed\r\n //);\r\n }\r\n\r\n return internetConnectionSpeed;\r\n },\r\n __addDefaultBaseLayer: (isVisible) => {\r\n var internetConnectionSpeed = GIS_Base_Functions.GetInternetSpeed();\r\n if (internetConnectionSpeed >= 5) {\r\n const mapview = _mapViewAvailable();\r\n const baseLayers = mapview.map.layers.items.filter((l) => {\r\n return l.id === '1703a318545-base'; // HARDCODED\r\n });\r\n\r\n if (baseLayers !== null) {\r\n const _rootLayer = baseLayers[0];\r\n if (!_rootLayer.visible) {\r\n _rootLayer.visible = isVisible; // layer root\r\n }\r\n _rootLayer.sublayers.items.map((l) => {\r\n switch (l.title.toUpperCase()) { // TURN ON LISTED BASE LAYERS AUTOMATICALLY WHEN IMAGERY IS SELECTED HARDCODED\r\n case 'STREETS':\r\n //case 'ADDRESSES':\r\n case 'PARCELS':\r\n l.visible = isVisible; // layer root\r\n const _recursiveFunc = (layers) => {\r\n layers.map((ly) => {\r\n if (ly.sublayers) {\r\n _recursiveFunc(ly.sublayers.items);\r\n } else {\r\n ly.visible = isVisible;\r\n }\r\n });\r\n };\r\n if (l.sublayers) {\r\n _recursiveFunc(l.sublayers.items);\r\n }\r\n break;\r\n }\r\n });\r\n }\r\n }\r\n },\r\n\r\n __getBasemap: (__Basemap) => {\r\n return loadModules(['esri/Basemap', 'esri/layers/TileLayer']).then(\r\n ([Basemap, TileLayer]) => {\r\n const _streetBasemapLayer = new TileLayer({\r\n url: __Basemap, // 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer', //appOptions.streetBasemapService, //'https://tiles.arcgis.com/tiles/MEvzxYGCHO108ZxL/arcgis/rest/services/BASEMAP/VectorTileServer'\r\n copyright: 'City of Reynoldsburg, Ohio',\r\n });\r\n\r\n const streetBasemap = new Basemap({\r\n baseLayers: [_streetBasemapLayer],\r\n title: 'streets basemap',\r\n id: 'appbasemap',\r\n });\r\n return streetBasemap;\r\n }\r\n );\r\n },\r\n\r\n GetStreetBasemap: () => {\r\n return GIS_Base_Functions.__getBasemap();\r\n },\r\n};\r\n\r\nexport const userGraphicService = {\r\n updateGraphicsStorage: (graphicsLayer) => {\r\n console.log(graphicsLayer.graphics.items.length);\r\n if (graphicsLayer.graphics.items.length > 0) {\r\n loadModules(['esri/Graphic']).then(([Graphic]) => {\r\n // store items\r\n if (localStorage.getItem(DRAWINGS_KEY) !== undefined) {\r\n localStorage.removeItem(DRAWINGS_KEY);\r\n }\r\n const rawGraphics = [];\r\n graphicsLayer.graphics.items.map((graphic) => {\r\n const _gr = new Graphic({\r\n geometry: graphic.geometry,\r\n symbol: graphic.symbol,\r\n attributes: graphic.attributes,\r\n });\r\n rawGraphics.push(_gr.toJSON());\r\n });\r\n localStorage.setItem(DRAWINGS_KEY, JSON.stringify(rawGraphics));\r\n });\r\n } else {\r\n if (localStorage.getItem(DRAWINGS_KEY)) {\r\n localStorage.removeItem(DRAWINGS_KEY);\r\n }\r\n }\r\n },\r\n deleteGraphic: (graphic, graphicsLayer) => {\r\n //graphicsLayer.remove(graphic);\r\n console.log(graphicsLayer);\r\n },\r\n};\r\n","import React from 'react';\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { loadModules } from 'esri-loader';\r\nimport { _mapViewAvailable } from '../../utils/map';\r\nimport ReactDOM from 'react-dom';\r\nimport { saveAs } from 'file-saver/dist/FileSaver';\r\nimport FooterParcelsNotification from '../navigation/FooterParcelsNotification';\r\nimport { setgraphics } from '../../redux/reducers/graphics';\r\n\r\nvar SelectedParcelsArray;\r\nvar ParcelsMapServer;\r\n\r\nexport const ParcelsReport = {\r\n SetSelectedParcels: (parcelsArray) => {\r\n SelectedParcelsArray = parcelsArray;\r\n },\r\n SelectParcelsByGeometry: (geometry) => {\r\n //console.log(geometry);\r\n loadModules(['esri/layers/FeatureLayer', 'esri/Graphic']).then(\r\n ([FeatureLayer, Graphic]) => {\r\n const flayer = new FeatureLayer({\r\n // URL to the service\r\n url:\r\n 'https://gis.reynoldsburg.gov/arcgis/rest/services/WebGIS/Base/MapServer/9',\r\n });\r\n const query = flayer.createQuery();\r\n query.geometry = geometry;\r\n query.spatialRelationship = 'intersects';\r\n query.returnGeometry = true;\r\n query.outFields = ['*'];\r\n\r\n flayer\r\n .queryFeatures(query)\r\n .then(ParcelsReport.HighlightSelectedParcels)\r\n .catch((err) => console.log(`Error :: `, err));\r\n }\r\n );\r\n },\r\n GenerateBuffer: (geometry, bufferDistance, isSelectParcel = true) => {\r\n loadModules(['esri/geometry/geometryEngine', 'esri/Graphic']).then(\r\n ([geometryEngine, Graphic]) => {\r\n const mapview = _mapViewAvailable();\r\n const bufferGraphicsLayer = mapview.map.findLayerById(\r\n 'bufferGraphicsLayer'\r\n );\r\n\r\n bufferGraphicsLayer.removeAll();\r\n\r\n var bufferPolySym = {\r\n type: 'simple-fill', // autocasts as new SimpleFillSymbol()\r\n color: [140, 140, 222, 0.5],\r\n outline: {\r\n color: [0, 0, 0, 0.5],\r\n width: 2,\r\n },\r\n };\r\n const parcelBuffer = geometryEngine.buffer(\r\n geometry,\r\n bufferDistance,\r\n 'feet'\r\n );\r\n bufferGraphicsLayer.add(\r\n new Graphic({\r\n geometry: parcelBuffer,\r\n symbol: bufferPolySym,\r\n })\r\n );\r\n\r\n if (isSelectParcel) {\r\n ParcelsReport.SelectParcelsByGeometry(parcelBuffer);\r\n }\r\n }\r\n );\r\n },\r\n HighlightSelectedParcels: (results) => {\r\n loadModules(['esri/Graphic']).then(([Graphic]) => {\r\n const __intersect__parcels__features = [];\r\n const mapview = _mapViewAvailable();\r\n const parcelsNotificationGLayer = mapview.map.findLayerById(\r\n 'publicNotification'\r\n );\r\n\r\n parcelsNotificationGLayer.removeAll();\r\n\r\n if (results.features.length > 0) {\r\n results.features.map((feature) => {\r\n switch (feature.attributes.PARCELID) {\r\n case '':\r\n break;\r\n\r\n default:\r\n // add to map\r\n const fill_symbol = {\r\n type: 'simple-fill',\r\n outline: { width: 2, color: [197, 0, 255, 1] },\r\n color: [223, 115, 255, 0.25],\r\n };\r\n\r\n const __gr = new Graphic({\r\n geometry: feature.geometry,\r\n symbol: fill_symbol,\r\n });\r\n parcelsNotificationGLayer.add(__gr);\r\n __intersect__parcels__features.push(feature);\r\n break;\r\n }\r\n });\r\n\r\n SelectedParcelsArray = __intersect__parcels__features;\r\n\r\n ParcelsReport.ShowSelectedParcels();\r\n setTimeout(() => {\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('parcel-notification')\r\n );\r\n }, 100);\r\n }\r\n });\r\n },\r\n DownloadSelectedParcels: () => {},\r\n ShowSelectedParcels: () => {\r\n const __panel = document.getElementById('parcel-notification');\r\n if (__panel.classList.contains('hidden')) {\r\n __panel.classList.remove('hidden');\r\n }\r\n },\r\n CloseParcelsTable: () => {\r\n const __panel = document.getElementById('parcel-notification');\r\n if (__panel.classList.contains('hidden')) {\r\n } else {\r\n __panel.classList.add('hidden');\r\n }\r\n },\r\n DownloadFile: (data, reportName = 'GIS_parcels_alerts_report') => {\r\n // console.log(data);\r\n const replacer = (key, value) => (value === null ? 'Not available' : value);\r\n const header = Object.keys(data[0]);\r\n const csv = data.map((row) =>\r\n header\r\n .map((fieldName) => JSON.stringify(row[fieldName], replacer))\r\n .join(',')\r\n );\r\n csv.unshift(header.join(','));\r\n const csvArray = csv.join('\\r\\n');\r\n\r\n const blob = new Blob([csvArray], { type: 'text/csv' });\r\n saveAs(blob, `${reportName}.csv`);\r\n },\r\n};\r\n\r\n/* export const __reduxStore = {\r\n setGraphics: (view) => {\r\n const dispatch = useDispatch();\r\n const graphicsLayer = view.map.findLayerById(\"userGraphics\");\r\n console.log(graphicsLayer);\r\n dispatch(setgraphics(graphicsLayer.graphics.items));\r\n }\r\n} */\r\n","//import React, { Component } from 'react';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { loadModules } from 'esri-loader';\r\nimport MapIdentifyLoader from '../components/functional/identify/mapIdentifyLoader';\r\nimport {\r\n GIS_Base_Functions,\r\n _user_auth,\r\n} from '../components/services/gis_service';\r\n\r\n//import { ProgressBar } from 'reprogressbars';\r\n\r\nconst __IDENTIFYSETTINGS = '__identifySettings';\r\n\r\nlet __appOtions;\r\nconst _SendEmailToCity = () => {\r\n const _emailTo = __appOtions.Emails.BasicEmailsReceiver;\r\n let link = document.createElement('a');\r\n link.href = `mailto:${_emailTo}?subject=City of Reynoldsburg Web GIS general info`;\r\n link.style.display = 'none';\r\n //document.body.appendChild(link);\r\n link.click();\r\n //document.body.removeChild(link);\r\n};\r\n\r\nlet mapView;\r\nexport function loadMap(element, appOptions) {\r\n __appOtions = appOptions;\r\n\r\n return loadModules(\r\n [\r\n 'esri/request',\r\n 'esri/Map',\r\n 'esri/views/MapView',\r\n 'esri/layers/MapImageLayer',\r\n 'esri/layers/GraphicsLayer',\r\n 'esri/Basemap',\r\n\r\n // Map bottom right widgets\r\n 'esri/widgets/Home',\r\n 'esri/widgets/Track',\r\n 'esri/widgets/Compass',\r\n\r\n // Map bottom left widget\r\n 'esri/widgets/ScaleBar',\r\n 'esri/core/urlUtils',\r\n 'esri/core/watchUtils',\r\n 'esri/layers/VectorTileLayer',\r\n 'esri/layers/TileLayer',\r\n ],\r\n {\r\n css: true,\r\n }\r\n ).then(\r\n ([\r\n esriRequest,\r\n Map,\r\n MapView,\r\n MapImageLayer,\r\n GraphicsLayer,\r\n Basemap,\r\n Home,\r\n Track,\r\n Compass,\r\n ScaleBar,\r\n urlUtils,\r\n watchUtils,\r\n VectorTileLayer,\r\n TileLayer,\r\n ]) => {\r\n if (!element) {\r\n // component or app was likely destroyed\r\n return;\r\n }\r\n\r\n // set the proxy\r\n urlUtils.addProxyRule({\r\n proxyUrl: appOptions.proxyUrl,\r\n urlPrefix: appOptions.SecuredServicesUrlPrefix,\r\n });\r\n\r\n const __isAuthorized = _user_auth.isAuthorized();\r\n const __AuthorizedUser = _user_auth.GetAuthUser();\r\n // check auth\r\n //console.log(__isAuthorise);\r\n\r\n //console.log(layers);\r\n const userGraphicsLayer = new GraphicsLayer({\r\n id: 'userGraphics',\r\n title: 'My Drawings',\r\n listMode: 'hide',\r\n });\r\n const publicNotificationGLayer = new GraphicsLayer({\r\n id: 'publicNotification',\r\n title: 'Public Notification',\r\n listMode: 'hide',\r\n });\r\n const bufferGLayer = new GraphicsLayer({\r\n id: 'bufferGraphicsLayer',\r\n title: 'Buffer Layer',\r\n listMode: 'hide',\r\n });\r\n const _streetViewGLayer = new GraphicsLayer({\r\n id: 'streetViewLocationGlayer',\r\n title: 'Street View',\r\n listMode: 'hide',\r\n });\r\n\r\n const _streetBasemapLayer = new TileLayer({\r\n url: appOptions.streetBasemapService, //'https://tiles.arcgis.com/tiles/MEvzxYGCHO108ZxL/arcgis/rest/services/BASEMAP/VectorTileServer'\r\n copyright: 'City of Reynoldsburg, Ohio',\r\n });\r\n\r\n// const vectorTileLayer = new VectorTileLayer({\r\n// portalItem: {\r\n// id: '0eb412a5e7c2413197e33a28de550ca6', //'b3f51cec16ca40f78ed633688f5b790c', // City streets basemap\r\n// },\r\n// //opacity: 0.75,\r\n// });\r\n// const imageTileLayer = new TileLayer({\r\n// portalItem: {\r\n// id: '1b243539f4514b6ba35e7d995890db1d', // World Hillshade\r\n// },\r\n// });\r\n\r\n const basemap = new Basemap({\r\n baseLayers: [_streetBasemapLayer], //[vectorTileLayer],\r\n thumbnailUrl: '',\r\n title: 'City Street Basemap',\r\n id: 'cityMap',\r\n });\r\n\r\n // create the Map\r\n const map = new Map({\r\n basemap,\r\n layers: [\r\n bufferGLayer,\r\n userGraphicsLayer,\r\n publicNotificationGLayer,\r\n _streetViewGLayer,\r\n ],\r\n });\r\n // show the map at the element\r\n let view = new MapView({\r\n map,\r\n highlightOptions: {\r\n color: [255, 255, 0, 1],\r\n haloOpacity: 0.9,\r\n fillOpacity: 0.2,\r\n },\r\n popup: {\r\n autoOpenEnabled: false,\r\n },\r\n background: { color: '#f0f0e9' },\r\n container: element,\r\n ...appOptions.mapConfig,\r\n });\r\n\r\n // set view extent\r\n\r\n watchUtils.whenTrue(view, 'stationary', () => {\r\n if (view.extent) {\r\n /* view.extent.xmin = 1958356.95;\r\n view.extent.xmax = 1968570.16;\r\n view.extent.ymin = 393749.65;\r\n view.extent.ymax = 400707.66; */\r\n /* const info = `
the view extent changed: \r\n
xmin: ${view.extent.xmin.toFixed(2)}\r\n xmax: ${view.extent.xmax.toFixed(2)}\r\n
ymin: ${view.extent.ymin.toFixed(2)}\r\n ymax: ${view.extent.ymax.toFixed(2)}`;\r\n console.log(info); */\r\n }\r\n });\r\n\r\n // add layers\r\n // check connection speed\r\n // Some browsers use prefixes so let's cope with them first\r\n\r\n// var internetConnectionSpeed = GIS_Base_Functions.GetInternetSpeed();\r\n\r\n const layers = appOptions.applicationLayers;\r\n if (layers.length > 0) {\r\n layers.map((layerObj) => {\r\n switch (layerObj.id) {\r\n case '1703a318545-contours': //HARDCODED\r\n const contour = new TileLayer({\r\n url: layerObj.serviceUrl,\r\n id: layerObj.id,\r\n title: layerObj.title,\r\n visible: false,\r\n });\r\n map.add(contour);\r\n break;\r\n\r\n default:\r\n const layer = new MapImageLayer({\r\n url: layerObj.serviceUrl,\r\n id: layerObj.id,\r\n title: layerObj.title,\r\n visible: false,\r\n });\r\n\r\n if (layer.id === '1703a0495d2-util') { //HARDCODED\r\n if (__isAuthorized && __AuthorizedUser.accessLevel > 1) {\r\n map.add(layer);\r\n }\r\n } else {\r\n map.add(layer);\r\n }\r\n break;\r\n }\r\n });\r\n }\r\n\r\n const homeBtn = new Home({\r\n view: view,\r\n });\r\n const scaleBar = new ScaleBar({\r\n view: view,\r\n });\r\n /* const track = new Track({\r\n view: view,\r\n }); */\r\n\r\n const compassWidget = new Compass({\r\n view: view,\r\n iconClass: 'esri-icon-compass',\r\n });\r\n\r\n view.ui.add(scaleBar, {\r\n position: 'bottom-left',\r\n });\r\n view.ui.add([homeBtn, 'mapIdentifyBtn', compassWidget], 'top-left');\r\n\r\n view.ui.move(['zoom'], 'bottom-right');\r\n // view.ui.add(['mapImageriesBtn', 'googleStreetViewBtn'], 'bottom-right');\r\n view.ui.add(['googleStreetViewBtn'], 'bottom-right');\r\n\r\n view.when(() => {\r\n const _identifySettings = localStorage.getItem(__IDENTIFYSETTINGS);\r\n if (_identifySettings) {\r\n const __settings = JSON.parse(_identifySettings);\r\n console.log(__settings.ActivateMapOnLoad);\r\n if (__settings.ActivateMapOnLoad) {\r\n document.getElementById('mapIdentifyBtn').click();\r\n }\r\n } else { // added by DMM 2/1/2023 to default to ON for \"Identify\"\r\n document.getElementById('mapIdentifyBtn').click();\r\n }\r\n \r\n setTimeout(() => {\r\n const _credits = document.querySelector(\r\n '.esri-attribution__sources.esri-interactive'\r\n ); //esri-attribution__sources esri-interactive\r\n if (_credits) {\r\n //console.log(_credits);\r\n _credits.addEventListener('click', _SendEmailToCity);\r\n }\r\n }, 20);\r\n });\r\n\r\n /* watchUtils.whenFalse(view, 'updating', () => {\r\n //console.log('view is done updating...');\r\n ReactDOM.unmountComponentAtNode(\r\n document.getElementById('map-loading-progressbar')\r\n );\r\n });\r\n watchUtils.whenTrue(view, 'updating', () => {\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('map-loading-progressbar')\r\n );\r\n }); */\r\n\r\n //view.popup.autoOpenEnabled = false;\r\n //view.map.layers.forEach( layer => layer.popupEnabled = false );\r\n view.on('click', (evt) => {\r\n const btnIdentify = document.getElementById('mapIdentifyBtn');\r\n if (btnIdentify.classList.contains('map-identify-active')) {\r\n const _panel_window = document.getElementById('right-bar-wrapper');\r\n if (_panel_window.classList.contains('hidden')) {\r\n _panel_window.classList.remove('hidden');\r\n }\r\n // render the info window\r\n view.graphics.removeAll();\r\n document.getElementById('map-view-container').style.cursor = 'wait';\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('right-bar-wrapper')\r\n );\r\n }\r\n\r\n /* view.popup.fetchFeatures(evt.screenPoint)\r\n .then((res) => {\r\n res.allGraphicsPromise\r\n .then((f) => {\r\n console.log(f);\r\n })\r\n console.log(res);\r\n view.popup.visible = false;\r\n console.log(view.popup);\r\n console.log(`Feature count: ${view.popup.featureCount}`);\r\n console.log(view.popup.features);\r\n\r\n\r\n // show info window\r\n \r\n\r\n }) */\r\n });\r\n\r\n mapView = view;\r\n\r\n return view.when(() => {\r\n // return a reference to the view\r\n return view;\r\n });\r\n }\r\n );\r\n}\r\n\r\nexport function _mapView() {\r\n return new Promise((resolve) => {\r\n return resolve(mapView);\r\n });\r\n}\r\nexport function _mapViewAvailable() {\r\n return mapView;\r\n}\r\n","import React, { Fragment } from 'react';\r\nimport { getUserSavedFields } from '../../services/gis_service';\r\n\r\nimport './attributes-renderer.css';\r\n\r\nexport const RenderAttributes = (props) => {\r\n const savedFieldsArray = getUserSavedFields(props.layerName);\r\n const _text_style = {\r\n fontSize: '.8rem',\r\n };\r\n\r\n const __formatText = (text) => {\r\n return text;\r\n };\r\n\r\n const __getUrl = (url, value) => {\r\n if (\r\n value === '' ||\r\n value === 'Null' ||\r\n value === 'null' ||\r\n value === '' ||\r\n value === null\r\n ) {\r\n return value;\r\n } else {\r\n return (\r\n \r\n {value}\r\n \r\n );\r\n }\r\n };\r\n// const __getMultipleUrl = (urls) => {\r\n// return (\r\n// \r\n// );\r\n// };\r\n\r\n const __IsFieldHidden = (fieldName) => {\r\n return savedFieldsArray.indexOf(fieldName) > -1 ? true : false;\r\n };\r\n\r\n const _renderRow = () => {\r\n switch (props.fieldName.toUpperCase()) {\r\n case 'HTTPS_PHOTOS': //FOR HSTS to ingore this bad field of information - replaced by GD_PHOTO_PATH\r\n case 'SHAPE.STLENGTH()':\r\n case 'SHAPE':\r\n case 'OBJECTID':\r\n case 'OBJECT ID':\r\n case 'LAYERNAME':\r\n case 'SOURCELAYER':\r\n case 'ATTACHMENTS':\r\n case 'ESRIGNSS_RECEIVER':\r\n case 'ESRIGNSS_H_RMS':\r\n case 'ESRIGNSS_V_RMS':\r\n case 'ESRIGNSS_LATITUDE':\r\n case 'ESRIGNSS_LONGITUDE':\r\n case 'ESRIGNSS_ALTITUDE':\r\n case 'ESRIGNSS_PDOP':\r\n case 'ESRIGNSS_HDOP':\r\n case 'ESRIGNSS_VDOP':\r\n case 'ESRIGNSS_FIXTYPE':\r\n case 'ESRIGNSS_CORRECTIONAGE':\r\n case 'ESRIGNSS_STATIONID':\r\n case 'ESRIGNSS_NUMSATS':\r\n case 'ESRIGNSS_FIXDATETIME':\r\n case 'ESRIGNSS_AVG_H_RMS':\r\n case 'ESRIGNSS_AVG_V_RMS':\r\n case 'ESRIGNSS_AVG_POSITIONS':\r\n case 'ESRIGNSS_H_STDDEV':\r\n case 'GLOBALID':\r\n case 'CREATED_USER':\r\n case 'CREATED_DATE':\r\n case 'LAST_EDITED_USER':\r\n case 'LAST_EDITED_DATE':\r\n case 'ESRIGNSS_POSITIONSOURCETYPE':\r\n case 'ESRIGNSS_DIRECTION':\r\n case 'ESRIGNSS_SPEED':\r\n case 'ESRISNSR_AZIMUTH':\r\n break;\r\n/* case 'PARCELID':\r\n case 'PID':\r\n case 'PARID':\r\n const RG = new RegExp('-', 'g');\r\n const pid = props.fieldValue.replace(RG, '');\r\n const _urlParcels = `${props.appOptions.countyParcelInfoUrl}${pid}`;\r\n if (__IsFieldHidden(props.fieldName)) {\r\n } else {\r\n if (props.showNullOrEmptyFields) {\r\n return (\r\n \r\n {props.fieldName}: \r\n \r\n {__getUrl(_urlParcels, props.fieldValue)}\r\n \r\n \r\n );\r\n } else {\r\n if (\r\n props.fieldValue.trim() === 'Null' ||\r\n props.fieldValue.trim() === 'null' ||\r\n props.fieldValue.trim() === '' ||\r\n props.fieldValue.trim() === ''\r\n ) {\r\n } else {\r\n return (\r\n \r\n {props.fieldName}: \r\n \r\n {__getUrl(_urlParcels, props.fieldValue)}\r\n \r\n \r\n );\r\n }\r\n }\r\n }\r\n break; \r\n case 'CONSTRUCTION PLAN':\r\n const _urlConstructionPlan = `${props.appOptions.constructionPlanBaseUrl}/${props.fieldValue}`;\r\n if (__IsFieldHidden(props.fieldName)) {\r\n } else {\r\n if (props.showNullOrEmptyFields) {\r\n return (\r\n \r\n {props.fieldName}: \r\n \r\n {__getUrl(_urlConstructionPlan, props.fieldValue)}\r\n \r\n \r\n );\r\n } else {\r\n if (\r\n props.fieldValue.trim() === 'Null' ||\r\n props.fieldValue.trim() === 'null' ||\r\n props.fieldValue.trim() === '' ||\r\n props.fieldValue.trim() === ''\r\n ) {\r\n } else {\r\n return (\r\n \r\n {props.fieldName}: \r\n \r\n {__getUrl(_urlConstructionPlan, props.fieldValue)}\r\n \r\n \r\n );\r\n }\r\n }\r\n }\r\n break;\r\n case 'PLAT_DRAWING':\r\n const __platDrawingIDs = props.fieldValue;\r\n var _urlPlatDrawings = __getUrl(\r\n `${props.appOptions.easementDocumentBaseUrl}/${props.fieldValue}`,\r\n props.fieldValue\r\n );\r\n if (__platDrawingIDs.indexOf(',') > -1) {\r\n const _urlPlatDrwaingObjs = [];\r\n var Ids = __platDrawingIDs.split(',');\r\n for (let index = 0; index < Ids.length; index++) {\r\n const id = Ids[index];\r\n _urlPlatDrwaingObjs.push({\r\n url: `${props.appOptions.easementDocumentBaseUrl}/${id.trim()}`,\r\n value: id,\r\n });\r\n }\r\n _urlPlatDrawings = __getMultipleUrl(_urlPlatDrwaingObjs);\r\n }\r\n if (__IsFieldHidden(props.fieldName)) {\r\n } else {\r\n if (props.showNullOrEmptyFields) {\r\n return (\r\n \r\n {props.fieldName}: \r\n {_urlPlatDrawings}\r\n \r\n );\r\n } else {\r\n if (\r\n props.fieldValue.trim() === 'Null' ||\r\n props.fieldValue.trim() === 'null' ||\r\n props.fieldValue.trim() === '' ||\r\n props.fieldValue.trim() === ''\r\n ) {\r\n } else {\r\n return (\r\n \r\n {props.fieldName}: \r\n {_urlPlatDrawings}\r\n \r\n );\r\n }\r\n }\r\n }\r\n break;\r\n case 'EASEMENT DOCUMENT':\r\n case 'SUPPORTING DOCUMENT':\r\n const __easementIDs = props.fieldValue;\r\n var _urlEasement = __getUrl(\r\n `${props.appOptions.easementDocumentBaseUrl}/${props.fieldValue}`,\r\n props.fieldValue\r\n ); //{props.fieldValue};\r\n if (__easementIDs?.indexOf(',') > -1) {\r\n const _urlEasementObjs = [];\r\n var Ids = __easementIDs.split(',');\r\n for (let index = 0; index < Ids.length; index++) {\r\n const id = Ids[index];\r\n _urlEasementObjs.push({\r\n url: `${props.appOptions.easementDocumentBaseUrl}/${id.trim()}`,\r\n value: id,\r\n });\r\n }\r\n\r\n _urlEasement = __getMultipleUrl(_urlEasementObjs);\r\n }\r\n if (__IsFieldHidden(props.fieldName)) {\r\n } else {\r\n if (props.showNullOrEmptyFields) {\r\n return (\r\n \r\n {props.fieldName}: \r\n {_urlEasement}\r\n \r\n );\r\n //return {props.fieldName}: { __getUrl(_urlEasement, props.fieldValue)}\r\n } else {\r\n if (\r\n props.fieldValue === 'Null' ||\r\n props.fieldValue === 'null' ||\r\n props.fieldValue === '' ||\r\n props.fieldValue === ''\r\n ) {\r\n } else {\r\n return (\r\n \r\n {props.fieldName}: \r\n {_urlEasement}\r\n \r\n );\r\n //return {props.fieldName}: { __getUrl(_urlEasement, props.fieldValue)}\r\n }\r\n }\r\n }\r\n\r\n break;*/\r\n case 'PERMITPLAN': \r\n const _urlPermit = `${props.appOptions.permitPlanBaseUrl}/${props.fieldValue}.PDF`;\r\n if (__IsFieldHidden(props.fieldName)) {\r\n } else {\r\n if (props.showNullOrEmptyFields) {\r\n return (\r\n \r\n {props.fieldName}: \r\n \r\n {__getUrl(_urlPermit, props.fieldValue)}\r\n \r\n \r\n );\r\n } else {\r\n if (\r\n props.fieldValue === 'Null' ||\r\n props.fieldValue === 'null' ||\r\n props.fieldValue === '' ||\r\n props.fieldValue === ''\r\n ) {\r\n } else {\r\n return (\r\n \r\n {props.fieldName}: \r\n \r\n {__getUrl(_urlPermit, props.fieldValue)}\r\n \r\n \r\n );\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case 'LASTINSPECTION':\r\n case 'MAPREF':\r\n const _mapref1 = props.fieldValue.toUpperCase();\r\n \r\n if (_mapref1.charAt(_mapref1.length-4) == \"_\") {\r\n var _urlScale = `${props.appOptions.mapRefBaseUrl}/${props.fieldValue}`\r\n } else {\r\n var _urlScale = `${props.appOptions.mapRefBaseUrl}/${props.fieldValue}_001`\r\n };\r\n\r\n if (__IsFieldHidden(props.fieldName)) {\r\n } else {\r\n if (props.showNullOrEmptyFields) {\r\n return (\r\n \r\n {props.fieldName}: \r\n \r\n {__getUrl(_urlScale, props.fieldValue)}\r\n \r\n \r\n );\r\n } else {\r\n if (\r\n props.fieldValue === 'Null' ||\r\n props.fieldValue === 'null' ||\r\n props.fieldValue === '' ||\r\n props.fieldValue === ''\r\n ) {\r\n } else {\r\n return (\r\n \r\n {props.fieldName}: \r\n \r\n {__getUrl(_urlScale, props.fieldValue)}\r\n \r\n \r\n );\r\n }\r\n }\r\n }\r\n break;\r\n case 'GD_PHOTO_PATH':\r\n case 'COUNTYLINK':\r\n const _urlCountyLink = `${props.fieldValue}`;\r\n if (__IsFieldHidden(props.fieldName)) {\r\n } else {\r\n if (props.showNullOrEmptyFields) {\r\n return (\r\n \r\n {props.fieldName}: \r\n \r\n {__getUrl(_urlCountyLink, 'Link')}\r\n \r\n \r\n );\r\n } else {\r\n if (\r\n props.fieldValue.trim() === 'Null' ||\r\n props.fieldValue.trim() === 'null' ||\r\n props.fieldValue.trim() === '' ||\r\n props.fieldValue.trim() === ''\r\n ) {\r\n } else {\r\n return (\r\n \r\n {props.fieldName}: \r\n \r\n {__getUrl(_urlCountyLink, 'Link')}\r\n \r\n \r\n );\r\n }\r\n }\r\n }\r\n break;\r\n default:\r\n if (__IsFieldHidden(props.fieldName)) {\r\n } else {\r\n if (props.showNullOrEmptyFields) {\r\n return (\r\n \r\n {props.fieldName}: \r\n {__formatText(props.fieldValue)}\r\n \r\n );\r\n } else {\r\n if (\r\n props.fieldValue === 'Null' ||\r\n props.fieldValue === 'null' ||\r\n props.fieldValue === '' ||\r\n props.fieldValue === ''\r\n ) {\r\n } else {\r\n return (\r\n \r\n {props.fieldName}: \r\n \r\n {__formatText(props.fieldValue)}\r\n \r\n \r\n );\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n };\r\n return {_renderRow()};\r\n};\r\n","\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst LayerSettingsCheckbox = ({ type = 'checkbox', name, checked = false, onChange }) => (\r\n \r\n);\r\n\r\nLayerSettingsCheckbox.propTypes = {\r\n type: PropTypes.string,\r\n name: PropTypes.string.isRequired,\r\n checked: PropTypes.bool,\r\n onChange: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default LayerSettingsCheckbox;\r\n","import React, { Component, Fragment } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport Checkbox from 'calcite-react/Checkbox';\r\nimport ArrowBoldLeftIcon from 'calcite-ui-icons-react/ArrowBoldLeftIcon';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\n\r\nimport MapIdentifyWithResults from './mapIdentifyWithResults';\r\nimport swal from 'sweetalert';\r\nimport LayerSettingsCheckbox from '../LayerSettingsCheckbox';\r\nimport { getUserSavedFields } from '../../services/gis_service';\r\n\r\nconst __stylePanelHeader = {\r\n position: 'relative',\r\n height: '45px',\r\n backgroundColor: '#f5f5f5',\r\n padding: '15px',\r\n textAlign: 'left',\r\n fontSize: '1.2rem',\r\n fontWeight: 'bold',\r\n borderBottom: '1px solid #ddd',\r\n};\r\nconst _identifyFooterToolbar = {\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n backgroundColor: '#f5f5f5',\r\n padding: '10px',\r\n textAlign: 'left',\r\n borderTop: '1px solid #ddd',\r\n};\r\nconst __styleClosePanelBtn = {\r\n position: 'absolute',\r\n width: '25px',\r\n top: '0',\r\n right: '0',\r\n height: '45px',\r\n fontWeight: '100',\r\n textAlign: 'center',\r\n cursor: 'pointer',\r\n};\r\nconst __styleCloseBtnText = {\r\n position: 'relative',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n};\r\n\r\nconst _text_style = {\r\n fontSize: '.8rem',\r\n};\r\n\r\nconst _text_info = {\r\n fontSize: '0.7rem',\r\n fontWeight: '300',\r\n margin: '0',\r\n};\r\n\r\nconst _table_style = {\r\n textAlign: 'left',\r\n fontWeight: '400',\r\n};\r\n\r\nconst __USERHIDDENFIELDS = '__gis__Fields__Manager';\r\n\r\nexport default class LayerFieldSettings extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n checkboxes: [],\r\n checkedItems: new Map(),\r\n savedFieldsArray: [],\r\n location: this.props.location,\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n handleChange(e) {\r\n const item = e.target.name;\r\n const isChecked = e.target.checked;\r\n this.setState((prevState) => ({\r\n checkedItems: prevState.checkedItems.set(item, isChecked),\r\n }));\r\n }\r\n componentDidMount() {\r\n this.getSavedFieldsCheckboxes();\r\n setTimeout(() => {\r\n // check saved field\r\n const __saved__fields = getUserSavedFields(this.props.layerName);\r\n if (__saved__fields.length > 0) {\r\n let _checkboxes = document.querySelectorAll(\r\n '.layer-fields-input-label'\r\n );\r\n __saved__fields.map((fieldName) => {\r\n for (let index = 0; index < _checkboxes.length; index++) {\r\n const element = _checkboxes[index];\r\n if (element.innerText === fieldName) {\r\n element.click();\r\n }\r\n }\r\n });\r\n }\r\n }, 30);\r\n }\r\n\r\n getSavedFieldsCheckboxes = () => {\r\n let _checkboxes = [];\r\n Object.keys(this.props.attr).map((key) => {\r\n switch (key.toUpperCase()) {\r\n case 'SHAPE':\r\n case 'OBJECTID':\r\n case 'OBJECT ID':\r\n case 'LAYERNAME':\r\n case 'ATTACHMENTS':\r\n case 'SOURCELAYER':\r\n case 'ESRIGNSS_RECEIVER':\r\n case 'ESRIGNSS_H_RMS':\r\n case 'ESRIGNSS_V_RMS':\r\n case 'ESRIGNSS_LATITUDE':\r\n case 'ESRIGNSS_LONGITUDE':\r\n case 'ESRIGNSS_ALTITUDE':\r\n case 'ESRIGNSS_PDOP':\r\n case 'ESRIGNSS_HDOP':\r\n case 'ESRIGNSS_VDOP':\r\n case 'ESRIGNSS_FIXTYPE':\r\n case 'ESRIGNSS_CORRECTIONAGE':\r\n case 'ESRIGNSS_STATIONID':\r\n case 'ESRIGNSS_NUMSATS':\r\n case 'ESRIGNSS_FIXDATETIME':\r\n case 'ESRIGNSS_AVG_H_RMS':\r\n case 'ESRIGNSS_AVG_V_RMS':\r\n case 'ESRIGNSS_AVG_POSITIONS':\r\n case 'ESRIGNSS_H_STDDEV':\r\n case 'GLOBALID':\r\n case 'CREATED_USER':\r\n case 'CREATED_DATE':\r\n case 'LAST_EDITED_USER':\r\n case 'LAST_EDITED_DATE':\r\n case 'ESRIGNSS_POSITIONSOURCETYPE':\r\n case 'ESRIGNSS_DIRECTION':\r\n case 'ESRIGNSS_SPEED':\r\n case 'ESRISNSR_AZIMUTH':\r\n case 'ESRIGNSS_STATIONID':\r\n case 'ESRIGNSS_NUMSATS':\r\n break;\r\n\r\n default:\r\n _checkboxes.push({\r\n name: key,\r\n key: key,\r\n label: key,\r\n });\r\n break;\r\n }\r\n });\r\n this.setState({ checkboxes: _checkboxes });\r\n };\r\n\r\n _previous = () => {\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('right-bar-wrapper')\r\n );\r\n };\r\n _save = () => {\r\n var __layer_fields_to_hide = [];\r\n let Keys = [...this.state.checkedItems.entries()]\r\n .filter(({ 1: v }) => v === true)\r\n .map(([k]) => k);\r\n\r\n const _hiddenFields = localStorage.getItem(__USERHIDDENFIELDS);\r\n if (_hiddenFields) {\r\n var existingArrayObj = JSON.parse(_hiddenFields);\r\n var _newArray = [];\r\n _newArray = existingArrayObj.filter(\r\n (l) => l.layer !== this.props.layerName\r\n ); // remove the existing layer to be replaced with new one\r\n\r\n if (Keys.length > 0) {\r\n __layer_fields_to_hide.push({\r\n layer: this.props.layerName,\r\n fields: Keys,\r\n });\r\n _newArray.push({ layer: this.props.layerName, fields: Keys });\r\n\r\n localStorage.removeItem(__USERHIDDENFIELDS);\r\n localStorage.setItem(__USERHIDDENFIELDS, JSON.stringify(_newArray));\r\n } else {\r\n if (_newArray.length === 0) {\r\n // no fields at all ===> remove item from localstorage\r\n localStorage.removeItem(__USERHIDDENFIELDS);\r\n }\r\n }\r\n this.__save_success_message();\r\n } else {\r\n if (Keys.length > 0) {\r\n __layer_fields_to_hide.push({\r\n layer: this.props.layerName,\r\n fields: Keys,\r\n });\r\n localStorage.setItem(\r\n __USERHIDDENFIELDS,\r\n JSON.stringify(__layer_fields_to_hide)\r\n );\r\n this.__save_success_message();\r\n } else {\r\n swal('Please choose fields you wish to hide from the identify window');\r\n }\r\n }\r\n };\r\n\r\n __save_success_message = () => {\r\n swal({\r\n text: 'Your preferences have been saved.',\r\n closeOnClickOutside: false,\r\n buttons: { cancel: false, confirm: 'OK' },\r\n dangerMode: true,\r\n }).then((action) => {\r\n if (action) {\r\n // dispose the form\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('right-bar-wrapper')\r\n );\r\n }\r\n });\r\n };\r\n _cancel = () => {\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('right-bar-wrapper')\r\n );\r\n };\r\n closeWidgetIdentifyWindow = () => {\r\n this.props.view.graphics.removeAll();\r\n document.getElementById('right-bar-wrapper').classList.add('hidden');\r\n /* const btnIdentify = document.getElementById('mapIdentifyBtn');\r\n if(btnIdentify.classList.contains('map-identify-active')){\r\n btnIdentify.classList.remove('map-identify-active');\r\n document.getElementById(\"map-view-container\").style.cursor = \"default\";\r\n } */\r\n };\r\n render() {\r\n return (\r\n \r\n
\r\n
\r\n {this.props.layerName}\r\n

\r\n Select fields you wish to hide from identify window.\r\n

\r\n \r\n
\r\n X\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n {this.state.checkboxes.map((item) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n \r\n \r\n {item.name}\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component, Fragment } from 'react';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport { _flow_rate_updater, _gis_service } from '../services/gis_service';\r\n\r\nimport TextField from 'calcite-react/TextField';\r\nimport Select from 'calcite-react/Select';\r\nimport Menu, { MenuTitle, MenuItem } from 'calcite-react/Menu';\r\nimport Form, {\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n Fieldset,\r\n Legend,\r\n} from 'calcite-react/Form';\r\n\r\nimport './add-form.css';\r\nimport './edit-modal.css';\r\n\r\nimport swal from 'sweetalert';\r\nimport DatePicker from 'react-datepicker';\r\nimport 'react-datepicker/dist/react-datepicker.css';\r\nimport { CrudOperations } from '../services/CRUDoperations.service';\r\n\r\nconst Entity = 'HydrantFlowTest';\r\n\r\nclass EditModal extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n date: this.props.flowtest.testdatetime\r\n ? new Date(this.props.flowtest.testdatetime)\r\n : '',\r\n datePickerFocused: false,\r\n isSubmitting: false,\r\n inspector: this.props.flowtest.inspector\r\n ? this.props.flowtest.inspector\r\n : 'Choose',\r\n flow: this.props.flowtest.flow,\r\n sp: this.props.flowtest.staticpressure,\r\n rp: this.props.flowtest.residualpressure,\r\n comments: this.props.flowtest.comment ? this.props.flowtest.comment : '',\r\n };\r\n this.onDateChange = this.onDateChange.bind(this);\r\n this.onFocusChange = this.onFocusChange.bind(this);\r\n this.handleSelectChange = this.handleSelectChange.bind(this);\r\n }\r\n\r\n handleSelectChange(item, value) {\r\n this.setState({\r\n [item]: value,\r\n });\r\n }\r\n\r\n changeHandler = (e) => {\r\n this.setState({\r\n [e.target.name]: e.target.value,\r\n });\r\n };\r\n\r\n onDateChange(date) {\r\n this.setState({\r\n date,\r\n });\r\n }\r\n\r\n onFocusChange({ focused }) {\r\n this.setState({\r\n datePickerFocused: focused,\r\n });\r\n }\r\n\r\n __on_update_save = () => {\r\n this.setState({\r\n isSubmitting: true,\r\n });\r\n const __newFlowTest = {\r\n hydrantflowtestid: this.props.flowtest.hydrantflowtestid,\r\n inspector: this.state.inspector,\r\n testdatetime: new Date(this.state.date),\r\n flow: parseFloat(this.state.flow),\r\n staticpressure: parseFloat(this.state.sp),\r\n residualpressure: parseFloat(this.state.rp),\r\n comment: this.state.comments,\r\n };\r\n\r\n CrudOperations.Update(Entity, __newFlowTest)\r\n .then((result) => {\r\n // update the flow test\r\n _flow_rate_updater\r\n .updateHydrantFlowRate(\r\n this.props.flowtest.facilitykey,\r\n this.props.hydrantFlayer\r\n )\r\n .then((new_flow_rate) => {\r\n this.setState({\r\n isSubmitting: false,\r\n });\r\n this.props.updateUI(new_flow_rate);\r\n })\r\n .catch((fserviceError) => {\r\n console.log(\r\n 'Error updating the hydrant feature service :: ',\r\n fserviceError\r\n );\r\n swal('Feature service error. Please try again');\r\n });\r\n })\r\n .catch((err) => {\r\n console.log('Error updating flow test CRUD :: ', err);\r\n swal('There was an error updating flow test.');\r\n });\r\n };\r\n\r\n render() {\r\n const { date, inspector, flow, sp, rp, comments } = this.state;\r\n return (\r\n \r\n
\r\n
\r\n
\r\n Update flow test info - {this.props.flowtest.facilitykey}\r\n
\r\n
\r\n
\r\n
\r\n \r\n Date\r\n this.setState({ date: d })}\r\n /* showTimeSelect */\r\n />\r\n {/* */}\r\n {/* */}\r\n \r\n \r\n Flow (GPM)\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n SP\r\n \r\n \r\n \r\n RP\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n Inspector\r\n \r\n \r\n this.handleSelectChange('inspector', val)\r\n }\r\n fullWidth\r\n >\r\n Choose...\r\n ENG\r\n MFD\r\n WTR\r\n \r\n \r\n \r\n \r\n Comment\r\n \r\n \r\n \r\n provide a comment if necessary\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {this.state.isSubmitting ? 'Submitting.......' : 'Save'}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default EditModal;\r\n","import React, { Component, Fragment } from 'react';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport TextField from 'calcite-react/TextField';\r\nimport Select from 'calcite-react/Select';\r\nimport Menu, { MenuTitle, MenuItem } from 'calcite-react/Menu';\r\nimport Form, {\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n Fieldset,\r\n Legend,\r\n} from 'calcite-react/Form';\r\n\r\nimport swal from 'sweetalert';\r\nimport './add-form.css';\r\nimport { _flow_rate_updater, _gis_service } from '../services/gis_service';\r\nimport DatePicker from 'react-datepicker';\r\nimport 'react-datepicker/dist/react-datepicker.css';\r\nimport { CrudOperations } from '../services/CRUDoperations.service';\r\n\r\nconst Entity = 'HydrantFlowTest';\r\n\r\nconst __stylePanelHeader = {\r\n position: 'relative',\r\n height: '45px',\r\n backgroundColor: '#f5f5f5',\r\n padding: '15px',\r\n textAlign: 'left',\r\n fontSize: '1.2rem',\r\n fontWeight: 'bold',\r\n borderBottom: '1px solid #ddd',\r\n};\r\nconst _identifyFooterToolbar = {\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n backgroundColor: '#f5f5f5',\r\n padding: '10px',\r\n textAlign: 'left',\r\n borderTop: '1px solid #ddd',\r\n};\r\nconst __styleClosePanelBtn = {\r\n position: 'absolute',\r\n width: '25px',\r\n top: '0',\r\n right: '0',\r\n height: '45px',\r\n fontWeight: '100',\r\n textAlign: 'center',\r\n cursor: 'pointer',\r\n};\r\nconst __styleCloseBtnText = {\r\n position: 'relative',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n};\r\n\r\nconst _text_style = {\r\n fontSize: '.8rem',\r\n};\r\n\r\nconst _text_info = {\r\n fontSize: '0.7rem',\r\n fontWeight: '300',\r\n margin: '0',\r\n};\r\n\r\nclass AddNewFlowTest extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n date: new Date(),\r\n datePickerFocused: false,\r\n isSubmitting: false,\r\n inspector: 'ENG',\r\n flow: 0,\r\n sp: 0,\r\n rp: 0,\r\n comments: '',\r\n condition: 'Choose',\r\n operable: 'true',\r\n paint: 'false',\r\n marker: 'false',\r\n oil: 'false',\r\n drain: 'false',\r\n flushingYear: '1',\r\n ownedBy: 'City of Reynoldsburg',\r\n };\r\n\r\n this.handleSelectChange = this.handleSelectChange.bind(this);\r\n }\r\n\r\n handleSelectChange(item, value) {\r\n this.setState({\r\n [item]: value,\r\n });\r\n }\r\n\r\n changeHandler = (e) => {\r\n this.setState({\r\n [e.target.name]: e.target.value,\r\n });\r\n };\r\n\r\n closeWidgetIdentifyWindow = () => {\r\n swal({\r\n text: `You are about to cancel recording a new flow test. is this correct?`,\r\n closeOnClickOutside: false,\r\n buttons: { cancel: 'NO', confirm: 'YES' },\r\n dangerMode: true,\r\n }).then((action) => {\r\n if (action) {\r\n document.getElementById('right-bar-wrapper').classList.add('hidden');\r\n /* const btnIdentify = document.getElementById('mapIdentifyBtn');\r\n if(btnIdentify.classList.contains('map-identify-active')){\r\n btnIdentify.classList.remove('map-identify-active');\r\n document.getElementById(\"map-view-container\").style.cursor = \"default\";\r\n } */\r\n }\r\n });\r\n };\r\n\r\n __convertToBoolean = (val) => {\r\n return val === 'true' ? true : false;\r\n };\r\n\r\n _save = async () => {\r\n if (\r\n this.state.flow === 0 &&\r\n this.state.sp === 0 &&\r\n this.state.rp === 0 &&\r\n this.state.condition === 'Choose'\r\n ) {\r\n swal(\r\n 'Please provide the flow rate, the static pressure, the residual pressure and the hydrant condition'\r\n );\r\n } else {\r\n this.setState({\r\n isSubmitting: true,\r\n });\r\n const __newFlowTest = {\r\n facilitykey: this.props.FACILITYID,\r\n inspector: this.state.inspector,\r\n testdatetime: new Date(this.state.date),\r\n flow: parseFloat(this.state.flow),\r\n staticpressure: parseFloat(this.state.sp),\r\n residualpressure: parseFloat(this.state.rp),\r\n condition: this.state.condition,\r\n operhard: false,\r\n operable: this.__convertToBoolean(this.state.operable),\r\n paint: this.__convertToBoolean(this.state.paint),\r\n marker: this.__convertToBoolean(this.state.marker),\r\n oil: this.__convertToBoolean(this.state.oil),\r\n drain: this.__convertToBoolean(this.state.drain),\r\n comment: this.state.comments,\r\n flushingYear: this.state.flushingYear,\r\n ownedBy: this.state.ownedBy,\r\n };\r\n\r\n CrudOperations.Create(Entity, __newFlowTest)\r\n .then((res) => {\r\n // update the flow test\r\n const { hydrantFlayer } = this.props.config.managedFlayerConfig;\r\n _flow_rate_updater\r\n .updateHydrantFlowRate(this.props.FACILITYID, hydrantFlayer)\r\n .then((new_flow_rate) => {\r\n this.setState({\r\n isSubmitting: false,\r\n });\r\n document\r\n .getElementById('right-bar-wrapper')\r\n .classList.add('hidden');\r\n swal(\r\n 'Flow test saved successfully. You may pan the map around to reflect the new symbol. Thank you'\r\n );\r\n })\r\n .catch((error) =>\r\n console.log(\r\n 'Error updating flow rate on hydrant feature service :: ',\r\n error\r\n )\r\n );\r\n })\r\n .catch((err) => {\r\n console.log('Error adding new flow test :: ', err);\r\n swal('There was an error adding this flow test ');\r\n });\r\n }\r\n };\r\n\r\n render() {\r\n const {\r\n date,\r\n inspector,\r\n flow,\r\n sp,\r\n rp,\r\n comments,\r\n condition,\r\n operable,\r\n paint,\r\n marker,\r\n oil,\r\n drain,\r\n flushingYear,\r\n ownedBy,\r\n } = this.state;\r\n return (\r\n \r\n
\r\n
\r\n \r\n Hydrant: {this.props.FACILITYID}\r\n \r\n

Creating a new flow test.

\r\n \r\n
\r\n X\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n Date\r\n this.setState({ date: d })}\r\n /* showTimeSelect */\r\n />\r\n \r\n \r\n \r\n Inspector\r\n \r\n \r\n this.handleSelectChange('inspector', val)\r\n }\r\n fullWidth\r\n >\r\n ENG\r\n MFD\r\n WTR\r\n \r\n \r\n
\r\n
\r\n \r\n Flow (GPM)*\r\n \r\n \r\n \r\n Static pressure (PSI)*\r\n \r\n \r\n
\r\n
\r\n \r\n Residual pressure (PSI)*\r\n \r\n \r\n \r\n Condition*\r\n \r\n this.handleSelectChange('condition', val)\r\n }\r\n fullWidth\r\n >\r\n Choose...\r\n NEW\r\n GOOD\r\n FAIR\r\n POOR\r\n FAILED\r\n \r\n \r\n
\r\n
\r\n \r\n Operable\r\n this.handleSelectChange('operable', val)}\r\n fullWidth\r\n >\r\n FALSE\r\n TRUE\r\n \r\n \r\n \r\n Flushing Year\r\n \r\n this.handleSelectChange('flushingYear', val)\r\n }\r\n fullWidth\r\n >\r\n 1\r\n 2\r\n 3\r\n 4\r\n 5\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Owned By\r\n \r\n this.handleSelectChange('ownedBy', val)}\r\n fullWidth\r\n >\r\n \r\n City of Reynoldsburg\r\n \r\n Other\r\n \r\n \r\n
\r\n {/*
\r\n \r\n Paint requested\r\n this.handleSelectChange('paint', val)}\r\n fullWidth\r\n >\r\n FALSE\r\n TRUE\r\n \r\n \r\n \r\n Marker requested\r\n this.handleSelectChange('marker', val)}\r\n fullWidth\r\n >\r\n FALSE\r\n TRUE\r\n \r\n \r\n
\r\n
\r\n \r\n Lubrication requested\r\n this.handleSelectChange('oil', val)}\r\n fullWidth\r\n >\r\n FALSE\r\n TRUE\r\n \r\n \r\n \r\n Drain\r\n this.handleSelectChange('drain', val)}\r\n fullWidth\r\n >\r\n FALSE\r\n TRUE\r\n \r\n \r\n
*/}\r\n\r\n
\r\n \r\n \r\n COMMENT\r\n \r\n \r\n \r\n provide a comment if necessary\r\n \r\n \r\n
\r\n\r\n \r\n fields with * are required\r\n

\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default AddNewFlowTest;\r\n","import React, { Component, Fragment } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { loadModules } from 'esri-loader';\r\nimport { saveAs } from 'file-saver/dist/FileSaver';\r\nimport Draggable from 'react-draggable';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport DownloadToIcon from 'calcite-ui-icons-react/DownloadToIcon';\r\nimport PlusSquareIcon from 'calcite-ui-icons-react/PlusSquareIcon';\r\nimport PencilIcon from 'calcite-ui-icons-react/PencilIcon';\r\nimport TrashIcon from 'calcite-ui-icons-react/TrashIcon';\r\nimport DeepLearningProjectIcon from 'calcite-ui-icons-react/DeepLearningProjectIcon';\r\nimport AutomationIcon from 'calcite-ui-icons-react/AutomationIcon';\r\nimport Loader from 'calcite-react/Loader';\r\nimport swal from 'sweetalert';\r\n\r\nimport ReactTable from 'react-table';\r\nimport 'react-table/react-table.css';\r\n\r\n//import { _mapViewAvailable } from '../../utils/map';\r\n\r\nimport '../../styles/draggable-report.css';\r\nimport EditModal from './EditModal';\r\nimport AddNewFlowTest from './AddNewFlowTest';\r\n//import { _flow_rate_updater, _gis_service } from '../services/gis_service';\r\nimport { _flow_rate_updater } from '../services/gis_service';\r\nimport { CrudOperations } from '../services/CRUDoperations.service';\r\n\r\nconst Entity = 'HydrantFlowTest';\r\n\r\nconst modalContainer = document.createElement('DIV');\r\n\r\nclass HydrantFlowTests extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n FACILITYID: this.props.feature.attributes.FacilityID,\r\n STATUS: this.props.feature.attributes['Active/Inactive Status'],\r\n WORKORDERURL: '#',\r\n layerName: this.props.feature.attributes.layerName,\r\n IsLoading: true,\r\n IsShowingNoResult: false,\r\n IsShowingResult: false,\r\n results: [],\r\n isSubmitting: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n loadModules([\r\n 'esri/geometry/SpatialReference',\r\n 'esri/tasks/GeometryService',\r\n 'esri/rest/support/ProjectParameters', //tasks to rest DMM 9/22/2022\r\n ]).then(([SpatialReference, GeometryService, ProjectParameters]) => {\r\n var geomSer = new GeometryService(this.props.config.geometryService);\r\n var params = new ProjectParameters({\r\n geometries: [this.props.feature.geometry],\r\n outSpatialReference: new SpatialReference({\r\n wkid: 102100,\r\n wkt: 'toJSON()',\r\n }),\r\n });\r\n\r\n geomSer.project(params).then((res) => {\r\n const location = { lat: res[0].latitude, lng: res[0].longitude };\r\n\r\n CrudOperations.GetByFID(Entity, this.state.FACILITYID)\r\n .then((res) => {\r\n // console.log(res);\r\n this.setState({\r\n IsLoading: false,\r\n results: res.data,\r\n IsShowingNoResult: res.data.length > 0 ? false : true,\r\n IsShowingResult: res.data.length > 0 ? true : false,\r\n WORKORDERURL: `https://src.mansfieldcity.com/pg/mgmt/quick.asp?fc=${this.state.layerName}&fID=${this.state.FACILITYID}&lat=${location.lat}&lng=${location.lng}&map1=1`,\r\n });\r\n })\r\n .catch((err) => console.log('Error fetching flow tests :: ', err));\r\n });\r\n });\r\n }\r\n\r\n _getFlowTests = () => {\r\n CrudOperations.GetByFID(Entity, this.state.FACILITYID)\r\n .then((res) => {\r\n this.setState({\r\n IsLoading: false,\r\n results: res.data,\r\n IsShowingNoResult: res.data.length > 0 ? false : true,\r\n IsShowingResult: res.data.length > 0 ? true : false,\r\n });\r\n })\r\n .catch((err) => console.log('Error fetching flow tests :: ', err));\r\n };\r\n\r\n downloadFile = (data, reportName = 'GIS_flowtest_report') => {\r\n // console.log(data);\r\n const replacer = (key, value) => (value === null ? 'Not available' : value);\r\n const header = Object.keys(data[0]);\r\n const csv = data.map((row) =>\r\n header\r\n .map((fieldName) => JSON.stringify(row[fieldName], replacer))\r\n .join(',')\r\n );\r\n csv.unshift(header.join(','));\r\n const csvArray = csv.join('\\r\\n');\r\n\r\n const blob = new Blob([csvArray], { type: 'text/csv' });\r\n saveAs(blob, `${reportName}.csv`);\r\n };\r\n __close_report = () => {\r\n this.props.mapview.ui.remove('center-draggable-wrapper');\r\n };\r\n __record_new_flow_test = () => {\r\n alert('adding new flow test form...');\r\n };\r\n\r\n _downloadCurrentFlowtests = () => {\r\n this.downloadFile(\r\n this.state.results,\r\n `FID_${this.state.FACILITYID}_flowtests`\r\n );\r\n };\r\n _downloadAllFlowtests = () => {\r\n this.setState({\r\n isSubmitting: true,\r\n });\r\n CrudOperations.Get(Entity)\r\n .then((_flowTests) => {\r\n this.downloadFile(_flowTests.data, `All_flowtests`);\r\n this.setState({\r\n isSubmitting: false,\r\n });\r\n })\r\n .catch((err) => {\r\n console.log('Error fetching all flow tests from server :: ', err);\r\n swal('Error fetching all flow tests from server. Please try again');\r\n });\r\n };\r\n\r\n handleEdit = (row) => {\r\n const { hydrantFlayer } = this.props.config.managedFlayerConfig;\r\n ReactDOM.render(\r\n ,\r\n document.body.appendChild(modalContainer)\r\n );\r\n };\r\n handleDelete = (row) => {\r\n swal({\r\n text: `You are about to delete this record. is this correct?`,\r\n closeOnClickOutside: false,\r\n buttons: { cancel: 'NO', confirm: 'YES' },\r\n dangerMode: true,\r\n }).then(async (action) => {\r\n if (action) {\r\n // delete record and reload data\r\n CrudOperations.Delete(Entity, row.hydrantflowtestid)\r\n .then((delete_resp) => {\r\n // update the flow test\r\n const { hydrantFlayer } = this.props.config.managedFlayerConfig;\r\n _flow_rate_updater\r\n .updateHydrantFlowRate(this.state.FACILITYID, hydrantFlayer)\r\n .then((new_flow_rate) => {\r\n this.props._updateFlowRate(new_flow_rate);\r\n this._getFlowTests();\r\n swal('Record deleted successfully!');\r\n });\r\n })\r\n .catch((error) => console.log('Error deleting flow test :: ', error));\r\n }\r\n });\r\n };\r\n\r\n _save_flowtest_update = (flow) => {\r\n if (\r\n !document.getElementById('right-bar-wrapper').classList.contains('hidden')\r\n ) {\r\n this.props._updateFlowRate(flow);\r\n }\r\n this.closeEditForm();\r\n this._getFlowTests();\r\n swal('edits saved successfully!');\r\n };\r\n\r\n closeEditForm = () => {\r\n ReactDOM.unmountComponentAtNode(modalContainer);\r\n };\r\n\r\n _goToCreateNewFlowTest = () => {\r\n this.__close_report();\r\n if (\r\n document.getElementById('right-bar-wrapper').classList.contains('hidden')\r\n ) {\r\n document.getElementById('right-bar-wrapper').classList.remove('hidden');\r\n }\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('right-bar-wrapper')\r\n );\r\n };\r\n\r\n formatDate = (d) => {\r\n return new Date(d).toLocaleDateString();\r\n };\r\n\r\n render() {\r\n const columns = [\r\n {\r\n Header: 'ID',\r\n accessor: 'hydrantflowtestid',\r\n },\r\n {\r\n id: 'testdatetime',\r\n Header: 'DATE',\r\n accessor: (row) => {\r\n return this.formatDate(row.testdatetime);\r\n },\r\n //Cell: (row) => {return this.formatDate(row.testdatetime)},\r\n sortMethod: (a, b) => {\r\n var a1 = new Date(a).getTime();\r\n var b1 = new Date(b).getTime();\r\n if (a1 < b1) return 1;\r\n else if (a1 > b1) return -1;\r\n else return 0;\r\n },\r\n },\r\n {\r\n Header: 'FLOW',\r\n accessor: 'flow',\r\n },\r\n {\r\n Header: 'SP',\r\n accessor: 'staticpressure',\r\n },\r\n {\r\n Header: 'RP',\r\n accessor: 'residualpressure',\r\n },\r\n {\r\n Header: 'COMMENTS',\r\n accessor: 'comment',\r\n },\r\n {\r\n Header: 'INSPECTOR',\r\n accessor: 'inspector',\r\n },\r\n {\r\n Header: '',\r\n Cell: (row) => (\r\n
\r\n this.handleEdit(row.original)}\r\n />\r\n |\r\n this.handleDelete(row.original)}\r\n />\r\n
\r\n ),\r\n },\r\n ];\r\n return (\r\n \r\n \r\n
\r\n
\r\n

\r\n \r\n \r\n {' '}\r\n Flow test for hydrant: {this.state.FACILITYID}\r\n

\r\n \r\n X\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n }\r\n >\r\n Add Flow test\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n

\r\n No data found\r\n

\r\n

\r\n This hydrant has no flow test data at this time.\r\n

\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n }\r\n >\r\n Add Flow test\r\n \r\n }\r\n >\r\n {this.state.isSubmitting\r\n ? 'Downloading.......'\r\n : 'Download all flow tests'}\r\n \r\n\r\n }\r\n >\r\n Download current list\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n console.log('clicked')}\r\n icon={}\r\n >\r\n Create Work Order\r\n \r\n
\r\n Hydrant Status: {this.state.STATUS}\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default HydrantFlowTests;\r\n","import React, { Component, Fragment } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport Loader from 'calcite-react/Loader';\r\n\r\nimport swal from 'sweetalert';\r\nimport MapIdentifyWithResults from '../functional/identify/mapIdentifyWithResults';\r\nimport { GIS_Base_Functions } from '../services/gis_service';\r\n\r\nimport List, {\r\n ListItem,\r\n ListHeader,\r\n ListItemTitle,\r\n ListItemSubtitle,\r\n} from 'calcite-react/List';\r\n\r\nconst __stylePanelHeader = {\r\n position: 'relative',\r\n height: '45px',\r\n backgroundColor: '#f5f5f5',\r\n padding: '15px',\r\n textAlign: 'left',\r\n fontSize: '1.2rem',\r\n fontWeight: 'bold',\r\n borderBottom: '1px solid #ddd',\r\n};\r\nconst _identifyFooterToolbar = {\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n backgroundColor: '#f5f5f5',\r\n padding: '10px',\r\n textAlign: 'left',\r\n borderTop: '1px solid #ddd',\r\n};\r\nconst __styleClosePanelBtn = {\r\n position: 'absolute',\r\n width: '25px',\r\n top: '0',\r\n right: '0',\r\n height: '45px',\r\n fontWeight: '100',\r\n textAlign: 'center',\r\n cursor: 'pointer',\r\n};\r\nconst __styleCloseBtnText = {\r\n position: 'relative',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n};\r\n\r\nconst _text_style = {\r\n fontSize: '.8rem',\r\n};\r\n\r\nconst _text_info = {\r\n fontSize: '0.7rem',\r\n fontWeight: '300',\r\n margin: '0',\r\n};\r\n\r\nclass WorkHistory extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n FACILITYID: this.props.attr.FACILITYID || this.props.attr.FacilityID,\r\n IsLoading: true,\r\n IsShowingNoResult: false,\r\n IsShowingResult: false,\r\n results: [],\r\n };\r\n }\r\n componentDidMount() {\r\n GIS_Base_Functions.GetWorkOrderHistory(this.state.FACILITYID)\r\n .then((res) => {\r\n this.setState({\r\n IsLoading: false,\r\n results: res.data,\r\n });\r\n })\r\n .catch((err) => console.log('Error fetching work history :: ', err));\r\n }\r\n _previous = () => {\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('right-bar-wrapper')\r\n );\r\n };\r\n\r\n closeWidgetIdentifyWindow = () => {\r\n document.getElementById('right-bar-wrapper').classList.add('hidden');\r\n };\r\n\r\n _navigateTo = (url) => {\r\n window.open(url, '_blank');\r\n };\r\n\r\n __renderWorkHistory() {\r\n if (this.state.IsLoading) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n } else {\r\n switch (this.state.results.length) {\r\n case 0:\r\n return (\r\n
\r\n
\r\n \r\n

\r\n No work history found\r\n

\r\n

\r\n There is currently no record of work done on this feature at\r\n this time.\r\n

\r\n
\r\n
\r\n );\r\n break;\r\n\r\n default:\r\n return (\r\n \r\n
\r\n \r\n {this.state.results.map((work, index) => (\r\n \r\n this._navigateTo(\r\n `https://src.mansfieldcity.com/pg/mgmt/WorkOrder.asp?R=${work.csrid}&W=${work.woid}`\r\n )\r\n }\r\n >\r\n {work.workType}\r\n Status: {work.status}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n );\r\n break;\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n
\r\n \r\n {this.props.layerName}: {this.state.FACILITYID}\r\n \r\n {/*

Viewing work history.

*/}\r\n \r\n
\r\n X\r\n
\r\n
\r\n
\r\n \r\n {this.__renderWorkHistory()}\r\n \r\n
\r\n \r\n {/* */}\r\n \r\n \r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default WorkHistory;\r\n","import React, { Component, Fragment } from 'react';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport swal from 'sweetalert';\r\nimport './add-form.css';\r\nimport { _flow_rate_updater, _gis_service } from '../services/gis_service';\r\nimport DatePicker from 'react-datepicker';\r\nimport 'react-datepicker/dist/react-datepicker.css';\r\nimport TextField from 'calcite-react/TextField';\r\nimport Select from 'calcite-react/Select';\r\nimport Menu, { MenuTitle, MenuItem } from 'calcite-react/Menu';\r\nimport Form, {\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n Fieldset,\r\n Legend,\r\n} from 'calcite-react/Form';\r\nimport { CrudOperations } from '../services/CRUDoperations.service';\r\n\r\nconst __stylePanelHeader = {\r\n position: 'relative',\r\n height: '45px',\r\n backgroundColor: '#f5f5f5',\r\n padding: '15px',\r\n textAlign: 'left',\r\n fontSize: '1.2rem',\r\n fontWeight: 'bold',\r\n borderBottom: '1px solid #ddd',\r\n};\r\nconst _identifyFooterToolbar = {\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n backgroundColor: '#f5f5f5',\r\n padding: '10px',\r\n textAlign: 'left',\r\n borderTop: '1px solid #ddd',\r\n};\r\nconst __styleClosePanelBtn = {\r\n position: 'absolute',\r\n width: '25px',\r\n top: '0',\r\n right: '0',\r\n height: '45px',\r\n fontWeight: '100',\r\n textAlign: 'center',\r\n cursor: 'pointer',\r\n};\r\nconst __styleCloseBtnText = {\r\n position: 'relative',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n};\r\n\r\nconst _text_style = {\r\n fontSize: '.8rem',\r\n};\r\n\r\nconst _text_info = {\r\n fontSize: '0.7rem',\r\n fontWeight: '300',\r\n margin: '0',\r\n};\r\n\r\nconst Entity = 'WaterValveExercising';\r\n\r\nclass AddNewValveExercise extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n date: new Date(),\r\n isSubmitting: false,\r\n opendirection: 'Unknown',\r\n turnstoclose: 'Unknown',\r\n operable: 'Yes',\r\n programyear: 'Unassigned',\r\n comment: '',\r\n inspector: 'ENG',\r\n result: 'Choose',\r\n location: '',\r\n };\r\n\r\n this.handleSelectChange = this.handleSelectChange.bind(this);\r\n }\r\n\r\n handleSelectChange(item, value) {\r\n this.setState({\r\n [item]: value,\r\n });\r\n }\r\n changeHandler = (e) => {\r\n this.setState({\r\n [e.target.name]: e.target.value,\r\n });\r\n };\r\n\r\n closeWidgetIdentifyWindow = () => {\r\n swal({\r\n text: `You are about to cancel recording a new valve exercise. is this correct?`,\r\n closeOnClickOutside: false,\r\n buttons: { cancel: 'NO', confirm: 'YES' },\r\n dangerMode: true,\r\n }).then((action) => {\r\n if (action) {\r\n document.getElementById('right-bar-wrapper').classList.add('hidden');\r\n }\r\n });\r\n };\r\n\r\n __convertToBoolean = (val) => {\r\n return val === 'Yes' ? true : false;\r\n };\r\n\r\n showSavedMessage = (message) => {\r\n this.setState({\r\n isSubmitting: false,\r\n });\r\n document.getElementById('right-bar-wrapper').classList.add('hidden');\r\n swal(message);\r\n };\r\n _save = async () => {\r\n if (\r\n this.state.opendirection === 'Unknown' ||\r\n this.state.turnstoclose === 'Unknown' ||\r\n this.state.programyear === 'Unassigned' ||\r\n this.state.result === 'Choose'\r\n ) {\r\n swal('Please provide the required fileds');\r\n } else {\r\n this.setState({\r\n isSubmitting: true,\r\n });\r\n\r\n const _exercise = {\r\n facilityid: this.props.FACILITYID,\r\n opendirection: this.state.opendirection,\r\n turnstoclose: this.state.turnstoclose,\r\n programyear: this.state.programyear,\r\n location: this.state.location,\r\n operable: this.__convertToBoolean(this.state.operable),\r\n excercisingdatetime: new Date(this.state.date),\r\n inspector: this.state.inspector,\r\n result: this.state.result,\r\n comment: this.state.comment,\r\n };\r\n\r\n const { valveFlayer } = this.props.config.managedFlayerConfig;\r\n\r\n CrudOperations.Create(Entity, _exercise)\r\n .then((_result) => {\r\n _flow_rate_updater\r\n .updateSystemValve(this.props.FACILITYID, valveFlayer)\r\n .then((resultValues) => {\r\n if (this.state.result === 'Failed') {\r\n // notify the Office of faillure\r\n const { watervalveexercisingid } = _result.data;\r\n // notify the Office of faillure\r\n CrudOperations.NotifyFailureExercise(\r\n Entity,\r\n watervalveexercisingid\r\n )\r\n .then((noti) => {\r\n this.showSavedMessage(\r\n 'Exercise record saved successfully. A failure notification has been sent to the office. Thank you'\r\n );\r\n })\r\n .catch((notificationError) => {\r\n console.log(notificationError);\r\n swal(\r\n 'There was an error sending failure email notification'\r\n );\r\n });\r\n } else {\r\n this.showSavedMessage(\r\n 'Exercise record saved successfully. Thank you'\r\n );\r\n }\r\n });\r\n })\r\n .catch((err) => {\r\n console.log('Error adding new exercise :: ', err);\r\n swal(\r\n 'There was an error adding this exercise record. Please try again'\r\n );\r\n });\r\n }\r\n };\r\n render() {\r\n const {\r\n date,\r\n opendirection,\r\n turnstoclose,\r\n operable,\r\n programyear,\r\n comment,\r\n inspector,\r\n result,\r\n location,\r\n } = this.state;\r\n return (\r\n \r\n
\r\n
\r\n \r\n Valve Exercise: {this.props.FACILITYID}\r\n \r\n

Creating a new valve exercise.

\r\n \r\n
\r\n X\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n Date\r\n this.setState({ date: d })}\r\n /* showTimeSelect */\r\n />\r\n \r\n \r\n \r\n Inspector\r\n \r\n \r\n this.handleSelectChange('inspector', val)\r\n }\r\n fullWidth\r\n >\r\n Choose...\r\n ENG\r\n MFD\r\n WTR\r\n \r\n \r\n
\r\n
\r\n \r\n Open Direction*\r\n \r\n this.handleSelectChange('opendirection', val)\r\n }\r\n fullWidth\r\n >\r\n Unknown\r\n Left\r\n Right\r\n \r\n \r\n \r\n \r\n Turns to close*\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n Operable\r\n this.handleSelectChange('operable', val)}\r\n fullWidth\r\n >\r\n Yes\r\n No\r\n \r\n \r\n \r\n \r\n Program Year*\r\n \r\n \r\n this.handleSelectChange('programyear', val)\r\n }\r\n fullWidth\r\n >\r\n Unassigned\r\n 1\r\n 2\r\n 3\r\n 4\r\n 5\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n Result*\r\n this.handleSelectChange('result', val)}\r\n fullWidth\r\n >\r\n Choose...\r\n Failed\r\n Passed\r\n \r\n \r\n\r\n \r\n \r\n Comment\r\n \r\n \r\n {/* provide a comment if necessary */}\r\n \r\n\r\n \r\n \r\n Location\r\n \r\n \r\n \r\n Specify a location if necessary\r\n \r\n \r\n
\r\n\r\n \r\n fields with * are required\r\n

\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default AddNewValveExercise;\r\n","import React, { Component, Fragment } from 'react';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport { _flow_rate_updater, _gis_service } from '../services/gis_service';\r\n\r\nimport TextField from 'calcite-react/TextField';\r\nimport Select from 'calcite-react/Select';\r\nimport Menu, { MenuTitle, MenuItem } from 'calcite-react/Menu';\r\nimport Form, {\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n Fieldset,\r\n Legend,\r\n} from 'calcite-react/Form';\r\n\r\nimport './add-form.css';\r\nimport './edit-modal.css';\r\n\r\nimport swal from 'sweetalert';\r\nimport DatePicker from 'react-datepicker';\r\nimport 'react-datepicker/dist/react-datepicker.css';\r\nimport { CrudOperations } from '../services/CRUDoperations.service';\r\n\r\nconst Entity = 'WaterValveExercising';\r\n\r\nclass EditValveExercise extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n date: this.props.exercise.excercisingdatetime\r\n ? new Date(this.props.exercise.excercisingdatetime)\r\n : '',\r\n isSubmitting: false,\r\n inspector: this.props.exercise.inspector\r\n ? this.props.exercise.inspector\r\n : 'Choose',\r\n turnstoclose: this.props.exercise.turnstoclose\r\n ? this.props.exercise.turnstoclose\r\n : 'Unknown',\r\n programyear: this.props.exercise.programyear\r\n ? this.props.exercise.programyear\r\n : 'Unassigned',\r\n location: this.props.exercise.location\r\n ? this.props.exercise.location\r\n : 'N/A',\r\n result: this.props.exercise.result,\r\n comment: this.props.exercise.comment ? this.props.exercise.comment : '',\r\n };\r\n this.handleSelectChange = this.handleSelectChange.bind(this);\r\n }\r\n\r\n handleSelectChange(item, value) {\r\n this.setState({\r\n [item]: value,\r\n });\r\n }\r\n\r\n changeHandler = (e) => {\r\n this.setState({\r\n [e.target.name]: e.target.value,\r\n });\r\n };\r\n\r\n __on_update_save = () => {\r\n this.setState({\r\n isSubmitting: true,\r\n });\r\n const _updated_exercise = {\r\n watervalveexercisingid: this.props.exercise.watervalveexercisingid,\r\n //\"facilityid\": \"string\",\r\n //\"opendirection\": \"string\",\r\n turnstoclose: this.state.turnstoclose,\r\n programyear: this.state.programyear,\r\n location: this.state.location,\r\n //\"operable\": true,\r\n excercisingdatetime: new Date(this.state.date),\r\n inspector: this.state.inspector,\r\n result: this.state.result,\r\n comment: this.state.comment,\r\n };\r\n\r\n CrudOperations.Update(Entity, _updated_exercise)\r\n .then((_result) => {\r\n _flow_rate_updater\r\n .updateSystemValve(this.props.facilityid, this.props.valveFlayer)\r\n .then((featureUpdatedValues) => {\r\n if (this.state.result === 'Failed') {\r\n // notify the Office of faillure\r\n const { watervalveexercisingid } = _result.data;\r\n CrudOperations.NotifyFailureExercise(\r\n Entity,\r\n watervalveexercisingid\r\n )\r\n .then((success) => {\r\n this.setState({\r\n isSubmitting: false,\r\n });\r\n this.props.updateUI(featureUpdatedValues);\r\n })\r\n .catch((err) => {\r\n console.log('Error notifying back office :: ', err);\r\n swal(\r\n 'There was an error Notifying failure test to the office. Please try later'\r\n );\r\n });\r\n } else {\r\n this.setState({\r\n isSubmitting: false,\r\n });\r\n this.props.updateUI(featureUpdatedValues);\r\n }\r\n });\r\n })\r\n .catch((err) => {\r\n console.log('Error updating exercise :: ', err);\r\n swal('There was an error updating this exercise ');\r\n });\r\n };\r\n\r\n render() {\r\n const {\r\n date,\r\n inspector,\r\n programyear,\r\n turnstoclose,\r\n location,\r\n comment,\r\n result,\r\n } = this.state;\r\n return (\r\n \r\n
\r\n
\r\n
\r\n Update exercise info - {this.props.facilityid}\r\n
\r\n
\r\n
\r\n
\r\n \r\n Date\r\n this.setState({ date: d })}\r\n /* showTimeSelect */\r\n />\r\n \r\n \r\n \r\n Inspector\r\n \r\n \r\n this.handleSelectChange('inspector', val)\r\n }\r\n fullWidth\r\n >\r\n Choose...\r\n ENG\r\n MFD\r\n WTR\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n Program Year\r\n \r\n this.handleSelectChange('programyear', val)\r\n }\r\n fullWidth\r\n >\r\n Unassigned\r\n 1\r\n 2\r\n 3\r\n 4\r\n 5\r\n \r\n \r\n \r\n Turns to Close\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n Result\r\n this.handleSelectChange('result', val)}\r\n fullWidth\r\n >\r\n Choose...\r\n Failed\r\n Passed\r\n \r\n \r\n\r\n \r\n \r\n Comment\r\n \r\n \r\n \r\n provide a comment if necessary\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {this.state.isSubmitting ? 'Submitting.......' : 'Save'}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default EditValveExercise;\r\n","import React, { Component, Fragment } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { loadModules } from 'esri-loader';\r\nimport { saveAs } from 'file-saver/dist/FileSaver';\r\nimport Draggable from 'react-draggable';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport DownloadToIcon from 'calcite-ui-icons-react/DownloadToIcon';\r\nimport PlusSquareIcon from 'calcite-ui-icons-react/PlusSquareIcon';\r\nimport PencilIcon from 'calcite-ui-icons-react/PencilIcon';\r\nimport TrashIcon from 'calcite-ui-icons-react/TrashIcon';\r\nimport DeepLearningProjectIcon from 'calcite-ui-icons-react/DeepLearningProjectIcon';\r\nimport AutomationIcon from 'calcite-ui-icons-react/AutomationIcon';\r\nimport Loader from 'calcite-react/Loader';\r\nimport swal from 'sweetalert';\r\n\r\nimport ReactTable from 'react-table';\r\nimport 'react-table/react-table.css';\r\n\r\n//import { _mapViewAvailable } from '../../utils/map';\r\n\r\nimport '../../styles/draggable-report.css';\r\n//import EditModal from './EditModal';\r\n\r\n//import { _flow_rate_updater, _gis_service } from '../services/gis_service';\r\nimport { _flow_rate_updater } from '../services/gis_service';\r\nimport AddNewValveExercise from './AddNewValveExercise';\r\nimport EditValveExercise from './EditValveExercise';\r\nimport { CrudOperations } from '../services/CRUDoperations.service';\r\n\r\nconst modalContainer = document.createElement('DIV');\r\n\r\nconst Entity = 'WaterValveExercising';\r\n\r\nclass ValveExercise extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n FACILITYID: this.props.feature.attributes.FacilityID,\r\n STATUS:\r\n this.props.feature.attributes.OPERABLE_STATUS ||\r\n this.props.feature.attributes['Operable Status'],\r\n WORKORDERURL: '#',\r\n layerName: this.props.feature.attributes.layerName,\r\n IsLoading: true,\r\n results: [],\r\n isSubmitting: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({\r\n IsLoading: true,\r\n });\r\n loadModules([\r\n 'esri/geometry/SpatialReference',\r\n 'esri/tasks/GeometryService',\r\n 'esri/rest/support/ProjectParameters', //tasks to rest DMM 9/22/2022\r\n ]).then(([SpatialReference, GeometryService, ProjectParameters]) => {\r\n var geomSer = new GeometryService(this.props.config.geometryService);\r\n var params = new ProjectParameters({\r\n geometries: [this.props.feature.geometry],\r\n outSpatialReference: new SpatialReference({\r\n wkid: 102100,\r\n wkt: 'toJSON()',\r\n }),\r\n });\r\n geomSer.project(params).then((res) => {\r\n const location = { lat: res[0].latitude, lng: res[0].longitude };\r\n\r\n CrudOperations.GetByFID(Entity, this.state.FACILITYID).then(\r\n (_exercises) => {\r\n this.setState({\r\n IsLoading: false,\r\n results: _exercises.data ? _exercises.data : [],\r\n WORKORDERURL: `https://src.mansfieldcity.com/pg/mgmt/quick.asp?fc=${this.state.layerName}&fID=${this.state.FACILITYID}&lat=${location.lat}&lng=${location.lng}&map1=1`,\r\n });\r\n }\r\n );\r\n });\r\n });\r\n }\r\n\r\n _getExercises = () => {\r\n CrudOperations.GetByFID(Entity, this.state.FACILITYID)\r\n .then((_exercises) => {\r\n this.setState({\r\n IsLoading: false,\r\n results: _exercises.data ? _exercises.data : [],\r\n });\r\n })\r\n .catch((err) => console.log('Error fetching valve exercises'));\r\n };\r\n\r\n downloadFile = (data, reportName = 'GIS_flowtest_report') => {\r\n // console.log(data);\r\n const replacer = (key, value) => (value === null ? 'Not available' : value);\r\n const header = Object.keys(data[0]);\r\n const csv = data.map((row) =>\r\n header\r\n .map((fieldName) => JSON.stringify(row[fieldName], replacer))\r\n .join(',')\r\n );\r\n csv.unshift(header.join(','));\r\n const csvArray = csv.join('\\r\\n');\r\n\r\n const blob = new Blob([csvArray], { type: 'text/csv' });\r\n saveAs(blob, `${reportName}.csv`);\r\n };\r\n __close_report = () => {\r\n this.props.mapview.ui.remove('center-draggable-wrapper');\r\n };\r\n __record_new_flow_test = () => {\r\n alert('adding new flow test form...');\r\n };\r\n\r\n _downloadCurrentFlowtests = () => {\r\n this.downloadFile(\r\n this.state.results,\r\n `FID_${this.state.FACILITYID}_exercises`\r\n );\r\n };\r\n _downloadAllFlowtests = async () => {\r\n this.setState({\r\n isSubmitting: true,\r\n });\r\n CrudOperations.Get(Entity)\r\n .then((_flowTests) => {\r\n this.downloadFile(_flowTests.data, `All_exercises`);\r\n this.setState({\r\n isSubmitting: false,\r\n });\r\n })\r\n .catch((err) =>\r\n console.log('Error requesting data from server :: ', err)\r\n );\r\n };\r\n\r\n handleEdit = (row) => {\r\n const { valveFlayer } = this.props.config.managedFlayerConfig;\r\n ReactDOM.render(\r\n ,\r\n document.body.appendChild(modalContainer)\r\n );\r\n };\r\n handleDelete = (row) => {\r\n swal({\r\n text: `You are about to delete this record. is this correct?`,\r\n closeOnClickOutside: false,\r\n buttons: { cancel: 'NO', confirm: 'YES' },\r\n dangerMode: true,\r\n }).then(async (action) => {\r\n if (action) {\r\n // delete record and reload data\r\n const { valveFlayer } = this.props.config.managedFlayerConfig;\r\n\r\n CrudOperations.Delete(Entity, row.watervalveexercisingid)\r\n .then((res) => {\r\n _flow_rate_updater\r\n .updateSystemValve(this.state.FACILITYID, valveFlayer)\r\n .then((featureUpdatedValues) => {\r\n if (\r\n !document\r\n .getElementById('right-bar-wrapper')\r\n .classList.contains('hidden')\r\n ) {\r\n this.props._updateValveAttributesUI(featureUpdatedValues);\r\n }\r\n this._getExercises();\r\n swal('Record deleted successfully!');\r\n });\r\n })\r\n .catch((err) =>\r\n console.log('Error deleting data from Server :: ', err)\r\n );\r\n }\r\n });\r\n };\r\n\r\n _save_exercise_update = (featureUpdatedValues) => {\r\n if (\r\n !document.getElementById('right-bar-wrapper').classList.contains('hidden')\r\n ) {\r\n this.props._updateValveAttributesUI(featureUpdatedValues);\r\n }\r\n this.closeEditForm();\r\n this._getExercises();\r\n swal('edits saved successfully!');\r\n };\r\n\r\n closeEditForm = () => {\r\n ReactDOM.unmountComponentAtNode(modalContainer);\r\n };\r\n\r\n _goToCreateNewFlowTest = () => {\r\n this.__close_report();\r\n if (\r\n document.getElementById('right-bar-wrapper').classList.contains('hidden')\r\n ) {\r\n document.getElementById('right-bar-wrapper').classList.remove('hidden');\r\n }\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('right-bar-wrapper')\r\n );\r\n };\r\n\r\n formatDate = (d) => {\r\n return new Date(d).toLocaleDateString();\r\n };\r\n\r\n __renderComponent() {\r\n if (this.state.IsLoading) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n } else {\r\n switch (this.state.results.length) {\r\n case 0:\r\n return (\r\n \r\n
\r\n
\r\n \r\n }\r\n >\r\n Record valve exercise\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n

\r\n No data found\r\n

\r\n

\r\n This system valve has no exercising record at this time.\r\n

\r\n
\r\n
\r\n
\r\n
\r\n );\r\n break;\r\n\r\n default:\r\n const columns = [\r\n {\r\n Header: 'ID',\r\n accessor: 'watervalveexercisingid',\r\n },\r\n {\r\n id: 'excercisingdatetime',\r\n Header: 'DATE',\r\n accessor: (row) => {\r\n return this.formatDate(row.excercisingdatetime);\r\n },\r\n //Cell: (row) => {return this.formatDate(row.testdatetime)},\r\n sortMethod: (a, b) => {\r\n var a1 = new Date(a).getTime();\r\n var b1 = new Date(b).getTime();\r\n if (a1 < b1) return 1;\r\n else if (a1 > b1) return -1;\r\n else return 0;\r\n },\r\n },\r\n {\r\n Header: 'INSPECTOR',\r\n accessor: 'inspector',\r\n },\r\n {\r\n Header: 'TURNS',\r\n accessor: 'turnstoclose',\r\n },\r\n {\r\n Header: 'PYEAR',\r\n accessor: 'programyear',\r\n },\r\n {\r\n Header: 'RESULT',\r\n accessor: 'result',\r\n },\r\n {\r\n Header: 'COMMENT',\r\n accessor: 'comment',\r\n },\r\n {\r\n Header: '',\r\n Cell: (row) => (\r\n
\r\n this.handleEdit(row.original)}\r\n />\r\n |\r\n this.handleDelete(row.original)}\r\n />\r\n
\r\n ),\r\n },\r\n ];\r\n return (\r\n \r\n
\r\n
\r\n \r\n }\r\n >\r\n Record valve exercise\r\n \r\n }\r\n >\r\n {this.state.isSubmitting\r\n ? 'Downloading.......'\r\n : 'Download all exercices'}\r\n \r\n\r\n }\r\n >\r\n Download current list\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n break;\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n
\r\n
\r\n

\r\n \r\n \r\n {' '}\r\n Exercise for valve: {this.state.FACILITYID}\r\n

\r\n \r\n X\r\n
\r\n
\r\n
\r\n {/**Render component */}\r\n {this.__renderComponent()}\r\n
\r\n
\r\n
\r\n }\r\n >\r\n Create Work Order\r\n \r\n
\r\n System Valve Status: {this.state.STATUS}\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ValveExercise;\r\n","import React, { Component, Fragment } from 'react';\r\nimport ReactTable from 'react-table';\r\nimport 'react-table/react-table.css';\r\nimport { ParcelsReport } from '../services/notifications';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport DownloadToIcon from 'calcite-ui-icons-react/DownloadToIcon';\r\n\r\nconst __panelWrapper = {\r\n height: '355px',\r\n backgroundColor: '#fff',\r\n};\r\n\r\nclass FooterParcelsNotification extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n parcels: [],\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n //console.log(this.props);\r\n const { SelectedParcelsArray } = this.props;\r\n if (SelectedParcelsArray.length > 0) {\r\n let parcels = [];\r\n SelectedParcelsArray.map((p) => {\r\n parcels.push(p.attributes);\r\n });\r\n\r\n this.setState({ parcels });\r\n //console.log(this.state.parcels);\r\n }\r\n }\r\n componentWillUnmount() {\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n downloadDataToExcel = () => {\r\n ParcelsReport.DownloadFile(this.state.parcels, 'GIS_parcels_alerts_report');\r\n };\r\n CloseReport = () => {\r\n ParcelsReport.CloseParcelsTable();\r\n };\r\n\r\n render() {\r\n const { SelectedParcelsArray } = this.props;\r\n const columns = [\r\n {\r\n Header: 'PARCELID',\r\n accessor: 'PID',\r\n },\r\n {\r\n Header: 'ADDRESS',\r\n accessor: 'Address',\r\n },\r\n {\r\n Header: 'OWNER1',\r\n accessor: 'Owner1',\r\n },\r\n {\r\n Header: 'OWNER2',\r\n accessor: 'Owner2',\r\n },\r\n ];\r\n return (\r\n \r\n
\r\n
\r\n \r\n

\r\n Selected Parcels: {SelectedParcelsArray.length}\r\n 0\r\n ? 'visible'\r\n : 'hidden',\r\n }}\r\n >\r\n }\r\n >\r\n Download\r\n \r\n \r\n

\r\n \r\n X\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default FooterParcelsNotification;\r\n","import React, { Component, Fragment } from 'react';\r\n\r\nimport Form, {\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n Fieldset,\r\n Legend,\r\n} from 'calcite-react/Form';\r\nimport TextField from 'calcite-react/TextField';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport Checkbox from 'calcite-react/Checkbox';\r\nimport { ParcelsReport } from '../../services/notifications';\r\n\r\nclass BufferSelectParcels extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n graphic: this.props.graphic,\r\n bufferDistance: 100,\r\n bufferAndSelectParcels: true,\r\n };\r\n }\r\n componentDidMount() {}\r\n componentWillUnmount() {\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n CreateBuffer = () => {\r\n ParcelsReport.GenerateBuffer(\r\n this.state.graphic.geometry,\r\n this.state.bufferDistance,\r\n this.state.bufferAndSelectParcels\r\n );\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n \r\n this.setState({ bufferDistance: e.target.value })}\r\n leftAdornment={\r\n \r\n this.setState({\r\n bufferAndSelectParcels: !this.state.bufferAndSelectParcels,\r\n })\r\n }\r\n />\r\n }\r\n rightAdornment={}\r\n />\r\n Buffer distance in feet\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default BufferSelectParcels;\r\n","import React, { Component, Fragment } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { loadModules } from 'esri-loader';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\n\r\nimport SearchIcon from 'calcite-ui-icons-react/SearchIcon';\r\nimport LayerHideIcon from 'calcite-ui-icons-react/LayerHideIcon';\r\nimport MeasureIcon from 'calcite-ui-icons-react/MeasureIcon';\r\nimport PointIcon from 'calcite-ui-icons-react/PointIcon';\r\nimport PencilIcon from 'calcite-ui-icons-react/PencilIcon';\r\nimport AddInNewIcon from 'calcite-ui-icons-react/AddInNewIcon';\r\nimport HideEmptyIcon from 'calcite-ui-icons-react/HideEmptyIcon';\r\nimport MagnifyingGlassPlusIcon from 'calcite-ui-icons-react/MagnifyingGlassPlusIcon';\r\nimport RecentIcon from 'calcite-ui-icons-react/RecentIcon';\r\nimport ChevronLeftIcon from 'calcite-ui-icons-react/ChevronLeftIcon';\r\nimport ChevronRightIcon from 'calcite-ui-icons-react/ChevronRightIcon';\r\n\r\nimport Attachments from './Attachments';\r\nimport { RenderAttributes } from './RenderAttributes';\r\n\r\nimport swal from 'sweetalert';\r\nimport { mapIdentifyWithNoResult } from './mapIdentifyWithNoResult';\r\nimport LayerFieldSettings from './LayerFieldSettings';\r\nimport HydrantFlowTests from '../../reports/HydrantFlowTests';\r\nimport WorkHistory from '../../reports/WorkHistory';\r\nimport ValveExercise from '../../reports/ValveExercise';\r\nimport { _flow_rate_updater } from '../../services/gis_service';\r\nimport BufferSelectParcels from '../drawings/BufferSelectParcels';\r\n\r\nconst __IDENTIFYSETTINGS = '__identifySettings';\r\nvar _layerFields = [];\r\n\r\nconst __stylePanelHeader = {\r\n position: 'relative',\r\n height: '45px',\r\n backgroundColor: '#f5f5f5',\r\n padding: '15px',\r\n textAlign: 'left',\r\n fontSize: '1.2rem',\r\n fontWeight: 'bold',\r\n borderBottom: '1px solid #ddd',\r\n};\r\nconst __styleClosePanelBtn = {\r\n position: 'absolute',\r\n width: '45px',\r\n top: '0',\r\n right: '0',\r\n height: '45px',\r\n fontWeight: '100',\r\n textAlign: 'center',\r\n cursor: 'pointer',\r\n};\r\nconst __styleCloseBtnText = {\r\n position: 'relative',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n};\r\n\r\nconst __styleLayerSettingsBtn = {\r\n position: 'absolute',\r\n width: '45px',\r\n top: '0',\r\n right: '50px',\r\n height: '45px',\r\n fontWeight: '100',\r\n textAlign: 'center',\r\n cursor: 'pointer',\r\n};\r\nconst _identifyFooterToolbar = {\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n backgroundColor: '#f5f5f5',\r\n padding: '10px',\r\n textAlign: 'left',\r\n borderTop: '1px solid #ddd',\r\n};\r\n\r\nconst _searchDistanceWrapper = {\r\n padding: '0 10px',\r\n maprgin: '0',\r\n backgroundColor: '#d4d4d4',\r\n textAlign: 'left',\r\n paddingTop: '5px',\r\n paddingRight: '25px',\r\n};\r\n\r\nclass MapIdentifyWithResults extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n layerName: this.props.view.popup.selectedFeature.attributes.layerName,\r\n featureCount: this.props.view.popup.featureCount,\r\n feature: this.props.view.popup.selectedFeature,\r\n selectedIndex: this.props.view.popup.selectedFeatureIndex,\r\n WORKORDERURL: '#',\r\n showNullOrEmptyFields: false,\r\n isUtility: false,\r\n location: this.props.location,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._setLocationCoordinates();\r\n this._highlightSelectedFeature();\r\n var Identify = localStorage.getItem(__IDENTIFYSETTINGS);\r\n if (Identify) {\r\n var _IdentifyObj = JSON.parse(Identify);\r\n this.setState({\r\n showNullOrEmptyFields: _IdentifyObj.IsNullOrEmptyFields,\r\n });\r\n }\r\n }\r\n componentWillUnmount() {\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n componentDidUpdate() {\r\n this.renderAttachments();\r\n this.renderAttributes();\r\n this._setReportIssue_Link();\r\n }\r\n\r\n _setLocationCoordinates = () => {\r\n if (this.state.location) {\r\n loadModules([\r\n 'esri/geometry/SpatialReference',\r\n 'esri/tasks/GeometryService',\r\n 'esri/rest/support/ProjectParameters', //tasks to rest DMM 9/22/2022\r\n ]).then(([SpatialReference, GeometryService, ProjectParameters]) => {\r\n var geomSer = new GeometryService(\r\n this.props.appOptions.geometryService\r\n );\r\n var params = new ProjectParameters({\r\n geometries: [this.state.location],\r\n outSpatialReference: new SpatialReference({\r\n wkid: 102100,\r\n wkt: 'toJSON()',\r\n }),\r\n });\r\n\r\n geomSer.project(params).then((res) => {\r\n const location = this.state.location; //{ lat: res[0].latitude, lng: res[0].longitude };\r\n location.latitude = res[0].latitude;\r\n location.longitude = res[0].longitude;\r\n this.setState({\r\n location: location,\r\n });\r\n });\r\n });\r\n }\r\n };\r\n _checkUtilityLayer = () => {\r\n const __utilityLayer =\r\n this.props.view.map.findLayerById('1703a0495d2-util');\r\n if (__utilityLayer) {\r\n const index = __utilityLayer.allSublayers.items.findIndex(\r\n (l) => l.title.toUpperCase() === this.state.layerName.toUpperCase()\r\n );\r\n setTimeout(() => {\r\n //console.log(index);\r\n this.setState({ isUtility: index > -1 ? true : false });\r\n }, 30);\r\n }\r\n };\r\n\r\n _setReportIssue_Link = () => {\r\n setTimeout(() => {\r\n if (this.state.isUtility) {\r\n const FACILITYID =\r\n this.state.feature.attributes.FACILITYID ||\r\n this.state.feature.attributes.FacilityID;\r\n if (this.state.location) {\r\n this.setState({\r\n WORKORDERURL: `https://src.mansfieldcity.com/pg/mgmt/quick.asp?fc=${this.state.layerName}&fID=${FACILITYID}&lat=${this.state.location.latitude}&lng=${this.state.location.longitude}&map1=1`,\r\n });\r\n }\r\n }\r\n }, 20);\r\n };\r\n\r\n _updateFlowRate = (rate) => {\r\n //console.log(rate);\r\n let f = this.props.view.popup.selectedFeature;\r\n if (f) {\r\n Object.keys(f.attributes).map((k) => {\r\n switch (k.toUpperCase()) {\r\n case 'FLOW RATE (GPM)':\r\n f.attributes[k] = `${rate}`;\r\n break;\r\n }\r\n });\r\n\r\n this.setState({\r\n feature: f,\r\n });\r\n }\r\n };\r\n\r\n _updateValveAttributesUI = (featureUpdatedValues) => {\r\n let f = this.props.view.popup.selectedFeature;\r\n if (f) {\r\n Object.keys(f.attributes).map((k) => {\r\n switch (k.toUpperCase()) {\r\n case 'TURNS TO CLOSE':\r\n f.attributes[k] = `${featureUpdatedValues.turnstoclose}`;\r\n break;\r\n case 'OPEN DIRECTION':\r\n f.attributes[k] = `${featureUpdatedValues.opendirection}`;\r\n break;\r\n case 'PROGRAM YEAR':\r\n f.attributes[k] = `${featureUpdatedValues.programyear}`;\r\n break;\r\n case 'LOCATION':\r\n f.attributes[k] = `${featureUpdatedValues.location}`;\r\n break;\r\n }\r\n });\r\n\r\n this.setState({\r\n feature: f,\r\n });\r\n }\r\n };\r\n\r\n _highlightSelectedFeature() {\r\n this._checkUtilityLayer();\r\n this.props.view.graphics.removeAll();\r\n loadModules(['esri/Graphic']).then(([Graphic]) => {\r\n const highlightGr = new Graphic({\r\n geometry: this.state.feature.geometry,\r\n symbol: this._highlightSymbol(this.state.feature.geometry.type),\r\n });\r\n this.props.view.graphics.add(highlightGr);\r\n });\r\n }\r\n\r\n _highlightSymbol(geometryType) {\r\n let _symbol;\r\n switch (geometryType.toLowerCase()) {\r\n case 'point':\r\n _symbol = {\r\n type: 'simple-marker',\r\n style: 'square',\r\n outline: { width: 2, color: [0, 197, 255, 1] },\r\n size: 20,\r\n color: [0, 169, 230, 0],\r\n };\r\n break;\r\n case 'polyline':\r\n _symbol = {\r\n type: 'simple-line',\r\n style: 'long-dash-dot',\r\n cap: 'round',\r\n join: 'bevel',\r\n width: 6.25,\r\n color: [0, 197, 255, 0.69],\r\n };\r\n break;\r\n default:\r\n // polygon as default\r\n _symbol = {\r\n type: 'simple-fill',\r\n outline: { width: 2, color: [0, 169, 230, 0.65] },\r\n color: [0, 169, 230, 0.25],\r\n };\r\n break;\r\n }\r\n return _symbol;\r\n }\r\n\r\n __goToFieldSettings = () => {\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('right-bar-wrapper')\r\n );\r\n };\r\n\r\n __goToWorkHistory = () => {\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('right-bar-wrapper')\r\n );\r\n };\r\n\r\n populateField = (fieldName) => {\r\n _layerFields.push(fieldName);\r\n };\r\n renderNext = () => {\r\n this.props.view.popup.next();\r\n this.setState({\r\n layerName: this.props.view.popup.selectedFeature.attributes.layerName,\r\n feature: this.props.view.popup.selectedFeature,\r\n selectedIndex: this.props.view.popup.selectedFeatureIndex,\r\n });\r\n this.renderAttachments();\r\n this.renderAttributes();\r\n this._highlightSelectedFeature();\r\n };\r\n renderPrevious = () => {\r\n this.props.view.popup.previous();\r\n this.setState({\r\n layerName: this.props.view.popup.selectedFeature.attributes.layerName,\r\n feature: this.props.view.popup.selectedFeature,\r\n selectedIndex: this.props.view.popup.selectedFeatureIndex,\r\n });\r\n this.renderAttachments();\r\n this.renderAttributes();\r\n this._highlightSelectedFeature();\r\n };\r\n\r\n zoomTo = () => {\r\n switch (this.state.feature.geometry.type) {\r\n case 'point':\r\n this.props.view.goTo({\r\n target: this.state.feature.geometry,\r\n zoom: 20,\r\n });\r\n break;\r\n default:\r\n this.props.view.goTo({\r\n target: this.state.feature.geometry,\r\n });\r\n break;\r\n }\r\n };\r\n closeWidgetIdentifyWindow = () => {\r\n this.props.view.graphics.removeAll();\r\n document.getElementById('right-bar-wrapper').classList.add('hidden');\r\n /* const btnIdentify = document.getElementById('mapIdentifyBtn');\r\n if (btnIdentify.classList.contains('map-identify-active')) {\r\n btnIdentify.classList.remove('map-identify-active');\r\n document.getElementById('map-view-container').style.cursor = 'default';\r\n } */\r\n };\r\n\r\n renderFlowTest = () => {\r\n const flowTestWrapper = document.getElementById('center-draggable-wrapper');\r\n if (flowTestWrapper) {\r\n //flowTestWrapper.remove();\r\n this.props.view.ui.remove('center-draggable-wrapper');\r\n }\r\n\r\n const reportDiv = document.createElement('div');\r\n reportDiv.setAttribute('id', 'center-draggable-wrapper');\r\n //reportDiv.setAttribute(\"iconClass\", \"utility-toggler-div\");\r\n //view.ui.empty(\"top-right\");\r\n this.props.view.ui.add(reportDiv, {\r\n position: 'top-right',\r\n index: 0,\r\n });\r\n setTimeout(() => {\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('center-draggable-wrapper')\r\n );\r\n }, 50);\r\n };\r\n renderValveExercising = () => {\r\n const flowTestWrapper = document.getElementById('center-draggable-wrapper');\r\n if (flowTestWrapper) {\r\n this.props.view.ui.remove('center-draggable-wrapper');\r\n }\r\n\r\n const reportDiv = document.createElement('div');\r\n reportDiv.setAttribute('id', 'center-draggable-wrapper');\r\n this.props.view.ui.add(reportDiv, {\r\n position: 'top-right',\r\n index: 0,\r\n });\r\n setTimeout(() => {\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('center-draggable-wrapper')\r\n );\r\n }, 50);\r\n };\r\n\r\n renderAttributes() {\r\n const attr = this.state.feature.attributes;\r\n return Object.keys(attr).map((key) => {\r\n return (\r\n \r\n );\r\n });\r\n }\r\n\r\n changeActiveStatus = () => {\r\n swal({\r\n text: `You are about to change the status of this ${this.state.layerName}. is this correct?`,\r\n closeOnClickOutside: false,\r\n buttons: { cancel: 'NO', confirm: 'YES' },\r\n dangerMode: true,\r\n }).then((action) => {\r\n if (action) {\r\n let feature = this.state.feature;\r\n const { attributes } = feature;\r\n var obj = {},\r\n status;\r\n\r\n switch (this.state.layerName.toUpperCase()) {\r\n case this.props.appOptions.managedFlayerConfig.hydrantLayerName.toUpperCase():\r\n const oldHStatus =\r\n attributes.ACTIVEINACTIVESTATUS ||\r\n attributes['Active/Inactive Status'];\r\n status = oldHStatus === 'Active' ? 'Inactive' : 'Active';\r\n obj = {\r\n layerName: 'hydrant',\r\n facilityid: attributes.FACILITYID || attributes.FacilityID,\r\n status: status,\r\n layerUrl: this.props.appOptions.managedFlayerConfig.hydrantFlayer,\r\n };\r\n break;\r\n case this.props.appOptions.managedFlayerConfig.valveLayerName.toUpperCase():\r\n const oldVStatus =\r\n attributes.OPERABLE_STATUS || attributes['Operable Status'];\r\n status = oldVStatus === 'Yes' ? 'No' : 'Yes';\r\n obj = {\r\n layerName: 'system valve',\r\n facilityid: attributes.FACILITYID || attributes.FacilityID,\r\n status: status,\r\n layerUrl: this.props.appOptions.managedFlayerConfig.valveFlayer,\r\n };\r\n break;\r\n }\r\n _flow_rate_updater\r\n .changeActiveStatus(obj, this.props.appOptions)\r\n .then((res) => {\r\n if (res) {\r\n if (res.updateFeatureResults.length > 0) {\r\n Object.keys(feature.attributes).forEach((name) => {\r\n switch (name.toUpperCase()) {\r\n case 'ACTIVE/INACTIVE STATUS':\r\n feature.attributes[name] = status;\r\n break;\r\n case 'OPERABLE STATUS':\r\n feature.attributes[name] = status;\r\n break;\r\n }\r\n });\r\n this.setState({ feature: feature });\r\n swal('Status changed successfully');\r\n } else {\r\n swal(\r\n 'Enable to update status at this time. Please try again later'\r\n );\r\n }\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n renderAttachments() {\r\n const ObjectID =\r\n this.state.feature.attributes.OBJECTID ||\r\n this.state.feature.attributes['ObjectID'] ||\r\n this.state.feature.attributes['Object ID'];\r\n const attachments = this.state.feature.attributes.attachments;\r\n var sourceLayer = this.state.feature.attributes.sourceLayer;\r\n const attachmentsBaseUrl = sourceLayer.replace(\r\n 'MapServer',\r\n 'FeatureServer'\r\n );\r\n\r\n switch (attachments.length) {\r\n case 0:\r\n break;\r\n case 1:\r\n const __request__proxy__url = `${this.props.appOptions.proxyUrl}?`;\r\n return (\r\n \r\n \r\n \r\n );\r\n break;\r\n default:\r\n return (\r\n \r\n );\r\n break;\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n
\r\n {this.state.layerName}\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n X\r\n
\r\n
\r\n
\r\n \r\n {this.props.view.popup.selectedFeatureIndex + 1}/\r\n {this.state.featureCount}\r\n \r\n
\r\n 1 && this.state.selectedIndex > 0\r\n ? 'visible'\r\n : 'hidden',\r\n }}\r\n >\r\n \r\n \r\n 1 &&\r\n this.state.selectedIndex < this.state.featureCount - 1\r\n ? 'visible'\r\n : 'hidden',\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {this.renderAttachments()}\r\n {/*
\r\n
\r\n {\r\n this.renderAttachments()\r\n }\r\n
*/}\r\n
\r\n \r\n \r\n \r\n {/* \r\n \r\n */}\r\n {/* \r\n \r\n */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n\r\n {this.renderAttributes()}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n Apply a search distance\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n\r\n{/* \r\n Create Work Order\r\n \r\n \r\n \r\n */}\r\n \r\n {/* */}\r\n \r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default MapIdentifyWithResults;\r\n","import React, { Fragment } from 'react';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\n\r\nimport SearchIcon from 'calcite-ui-icons-react/SearchIcon';\r\nimport LayerHideIcon from 'calcite-ui-icons-react/LayerHideIcon';\r\nimport MeasureIcon from 'calcite-ui-icons-react/MeasureIcon';\r\nimport PointIcon from 'calcite-ui-icons-react/PointIcon';\r\nimport PencilIcon from 'calcite-ui-icons-react/PencilIcon';\r\nimport AddInNewIcon from 'calcite-ui-icons-react/AddInNewIcon';\r\nimport HideEmptyIcon from 'calcite-ui-icons-react/HideEmptyIcon';\r\nimport MagnifyingGlassPlusIcon from 'calcite-ui-icons-react/MagnifyingGlassPlusIcon';\r\nimport RecentIcon from 'calcite-ui-icons-react/RecentIcon';\r\n\r\nimport Attachments from './Attachments';\r\nimport LayerAttributes from './LayerAttributes';\r\n\r\nconst IdentifySkeleton = () => {\r\n const __stylePanelHeader = {\r\n position: 'relative',\r\n backgroundColor: '#f5f5f5',\r\n padding: '15px',\r\n textAlign: 'left',\r\n fontSize: '1.2rem',\r\n fontWeight: 'bold',\r\n borderBottom: \"1px solid #ddd\"\r\n }\r\n const __styleClosePanelBtn = {\r\n position: 'absolute',\r\n width: '25px',\r\n top: '0',\r\n right: '0',\r\n height: '100%',\r\n fontWeight: '100',\r\n textAlign: 'center',\r\n cursor: 'pointer'\r\n }\r\n const __styleCloseBtnText = {\r\n position: 'relative',\r\n top: '50%',\r\n transform: 'translateY(-50%)'\r\n }\r\n \r\n const __styleLayerSettingsBtn = {\r\n position: 'absolute',\r\n width: '25px',\r\n top: '0',\r\n right: '30px',\r\n height: '100%',\r\n fontWeight: '100',\r\n textAlign: 'center',\r\n cursor: 'pointer',\r\n }\r\n const _identifyFooterToolbar = {\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n backgroundColor: '#f5f5f5',\r\n padding:'10px',\r\n textAlign: 'left',\r\n borderTop: '1px solid #ddd'\r\n }\r\n return (\r\n \r\n
\r\n
\r\n Fetching data...\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
X
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default IdentifySkeleton;\r\n","import React, { Component, Fragment } from 'react';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport { RenderAttributes } from './RenderAttributes';\r\n\r\nvar _layerFields = [];\r\nclass LayerAttributes extends Component {\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n layerName: this.props.layerName,\r\n attr: this.props.attr,\r\n layerFields: []\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n _layerFields = [];\r\n // check layer settings\r\n }\r\n\r\n \r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default LayerAttributes;\r\n","import React, { Component, Fragment } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { loadModules } from 'esri-loader';\r\nimport MapIdentifyWithNoResult from './mapIdentifyWithNoResult';\r\nimport MapIdentifyWithResults from './mapIdentifyWithResults';\r\nimport IdentifySkeleton from './IdentifySkeleton';\r\n\r\nconst IDENTIFY_SETTINGS = '__gisIdentify__Settings';\r\nconst __IDENTIFYSETTINGS = '__identifySettings';\r\n\r\nvar isIdentifying = true;\r\n\r\nconst requestOptions = {\r\n query: {\r\n f: 'json',\r\n },\r\n responseType: 'json',\r\n};\r\n\r\nclass MapIdentifyLoader extends Component {\r\n _isMounted = false;\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n results: [],\r\n isIdentifying: true,\r\n selectedLayers: [],\r\n isHideNullOrEmptyFields: true,\r\n identifyLayers: [],\r\n userSavedLayers: [],\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._isMounted = true;\r\n const __selected__layers__array = [];\r\n const _identifySettings = localStorage.getItem(__IDENTIFYSETTINGS);\r\n if (_identifySettings) {\r\n const __settings = JSON.parse(_identifySettings);\r\n if (__settings.Layers.length > 0) {\r\n __settings.Layers.map((savedLayer) => {\r\n this.props.appOptions.applicationLayers.map((configLayer) => {\r\n if (configLayer.title === savedLayer) {\r\n __selected__layers__array.push(\r\n this.props.view.map.findLayerById(configLayer.id)\r\n );\r\n }\r\n });\r\n });\r\n\r\n if (this._isMounted) {\r\n this.setState({\r\n userSavedLayers: __selected__layers__array,\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.___identifyLayers();\r\n }\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n __getIdentifyParams() {\r\n const _promise = new Promise((resolve, reject) => {\r\n loadModules([\r\n 'esri/tasks/IdentifyTask',\r\n 'esri/rest/support/IdentifyParameters', //tasks to rest DMM 09/22/2022\r\n 'dojo/_base/array',\r\n 'dojo/promise/all',\r\n ]).then(([IdentifyTask, IdentifyParameters, arrayUtils, all]) => {\r\n // perform identify\r\n const _identifyParams = [];\r\n const identifiedLayers = [];\r\n\r\n const mapLayers =\r\n this.state.userSavedLayers.length > 0\r\n ? this.state.userSavedLayers\r\n : this.props.view.map.layers.items;\r\n mapLayers.map((layer) => {\r\n switch (layer.id) {\r\n case 'userGraphics':\r\n case 'publicNotification':\r\n case 'streetViewLocationGlayer':\r\n case '1703a318545-contours': //HARDCODED\r\n case 'bufferGraphicsLayer':\r\n break;\r\n default:\r\n let IDs = [];\r\n if (layer.url && layer.visible) {\r\n //console.log(layer);\r\n //const _layerURL = layer.url.indexOf('FeatureServer') > -1 ? layer.url.replace('FeatureServer', 'MapServer') : layer.url;\r\n //identifiedLayers.push({url: _layerURL, name: layer.title, id: layer.id});\r\n identifiedLayers.push({\r\n url: layer.url,\r\n name: layer.title,\r\n id: layer.id,\r\n });\r\n const _traverseLayerItems = (items) => {\r\n if (items.length > 0) {\r\n items.map((l) => {\r\n if (l.sublayers) {\r\n // layer has sublayers\r\n _traverseLayerItems(l.sublayers.items);\r\n } else {\r\n // reached the end\r\n if (l.visible) {\r\n switch (l.title.toUpperCase()) {\r\n case 'FLOW ARROW': // remove Flow Arrow from being identified\r\n break;\r\n default:\r\n IDs.push(l.id);\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n _traverseLayerItems(layer.sublayers.items);\r\n\r\n const idParams = new IdentifyParameters();\r\n idParams.tolerance = this.props.appOptions.mapIdentifyTolerance; // 3;\r\n idParams.layerIds = IDs;\r\n idParams.width = this.props.view.width;\r\n idParams.height = this.props.view.height;\r\n idParams.geometry = this.props.location;\r\n idParams.mapExtent = this.props.view.extent;\r\n idParams.returnGeometry = true;\r\n idParams.returnFieldName = false;\r\n idParams.spatialReference = this.props.view.spatialReference;\r\n idParams.layerOption = 'visible'; // Possible Values:\"top\"|\"visible\"|\"all\"\r\n _identifyParams.push(idParams);\r\n }\r\n break;\r\n }\r\n });\r\n const params = {\r\n identifyLayers: identifiedLayers,\r\n identifyParams: _identifyParams,\r\n };\r\n resolve(params);\r\n });\r\n });\r\n return _promise;\r\n }\r\n\r\n featureHasAttachmentEnabled(sourceLayer) {\r\n return loadModules(['esri/request']).then(([esriRequest]) => {\r\n return esriRequest(`${sourceLayer}?f=pjson`).then((res) => {\r\n return res.data.hasAttachments;\r\n });\r\n });\r\n }\r\n\r\n __queryAttachments(featureLayerUrl, ObjectID) {\r\n return loadModules(['esri/request']).then(([esriRequest]) => {\r\n const _queryAttachmentsURL = `${featureLayerUrl}/${ObjectID}/attachments`; //attachments\r\n return esriRequest(_queryAttachmentsURL, requestOptions);\r\n });\r\n }\r\n\r\n __getAttachments(featureLayerUrl, ObjectID) {\r\n const _promise = new Promise((resolve, reject) => {\r\n this.featureHasAttachmentEnabled(featureLayerUrl)\r\n .then((isAttachmentEnabled) => {\r\n // console.log(\"Has attachments :: \",isAttachmentEnabled);\r\n if (isAttachmentEnabled) {\r\n const _url = featureLayerUrl.replace('MapServer', 'FeatureServer');\r\n this.__queryAttachments(_url, ObjectID)\r\n .then((res) => {\r\n // console.log(res);\r\n let ___attachments = [];\r\n// if (res.data.attachmentGroups.length > 0) {\r\n if (res.data.attachmentInfos.length > 0) {\r\n ___attachments =\r\n res.data.attachmentInfos;\r\n }\r\n// }\r\n resolve(___attachments);\r\n })\r\n .catch((err) => {\r\n console.log(':: Error fetching attachments... :: ');\r\n reject(err);\r\n });\r\n } else {\r\n const _attachments = [];\r\n resolve(_attachments);\r\n }\r\n })\r\n .catch((error) => {\r\n console.log(':: Error checking attachments... :: ');\r\n reject(error);\r\n });\r\n });\r\n\r\n return _promise;\r\n }\r\n\r\n ___identifyLayers() {\r\n loadModules([\r\n 'esri/tasks/IdentifyTask',\r\n 'esri/rest/support/IdentifyParameters', //tasks to rest DMM 09/22/2022\r\n 'dojo/_base/array',\r\n 'dojo/promise/all',\r\n ]).then(([IdentifyTask, IdentifyParameters, arrayUtils, all]) => {\r\n // perform identify\r\n this.__getIdentifyParams()\r\n .then((params) => {\r\n const IdentifyTaskList = arrayUtils.map(\r\n params.identifyLayers,\r\n (layer, index) => {\r\n const task = new IdentifyTask(layer.url);\r\n return task.execute(params.identifyParams[index]);\r\n }\r\n );\r\n all(IdentifyTaskList).then((res) => {\r\n const allResults = [];\r\n let AllResultsWithSourceLayers = [];\r\n\r\n for (let index = 0; index < res.length; index++) {\r\n const _results = res[index].results;\r\n if (_results.length > 0) {\r\n allResults.push({\r\n layer: params.identifyLayers[index],\r\n results: res[index].results,\r\n });\r\n }\r\n }\r\n\r\n for (let r = 0; r < allResults.length; r++) {\r\n const res1 = allResults[r];\r\n if (res1.results.length > 0) {\r\n res1.results.map((f) => {\r\n f.feature.attributes.sourceLayer = `${res1.layer.url}/${f.layerId}`;\r\n AllResultsWithSourceLayers.push(f);\r\n });\r\n }\r\n }\r\n //console.log(__features);\r\n if (AllResultsWithSourceLayers.length > 0) {\r\n // set result to view popup\r\n const resultFeatures = () => {\r\n const promises = AllResultsWithSourceLayers.map(\r\n async (result) => {\r\n const feature = result.feature;\r\n feature.attributes.layerName = result.layerName;\r\n // query attachment here\r\n let ObjectID =\r\n feature.attributes.OBJECTID ||\r\n feature.attributes['ObjectID'] ||\r\n feature.attributes['Object ID'];\r\n feature.attributes.attachments =\r\n await this.__getAttachments(\r\n feature.attributes.sourceLayer,\r\n ObjectID\r\n );\r\n\r\n return feature;\r\n }\r\n );\r\n return Promise.all(promises);\r\n };\r\n\r\n resultFeatures().then((__features) => {\r\n // reverse results to order as point, line, polygon\r\n __features = __features.reverse();\r\n if (this._isMounted) {\r\n this.props.view.popup.features = __features;\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('right-bar-wrapper')\r\n );\r\n }\r\n });\r\n } else {\r\n // no result found\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('right-bar-wrapper')\r\n );\r\n }\r\n document.getElementById('map-view-container').style.cursor = 'help';\r\n });\r\n })\r\n .catch((err) => console.log(err));\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default MapIdentifyLoader;\r\n","import React, { Component, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { loadModules } from \"esri-loader\";\r\nimport { _mapView } from '../../utils/map';\r\n\r\nimport Switch from 'calcite-react/Switch';\r\nimport Panel, {\r\n PanelTitle,\r\n PanelText\r\n } from 'calcite-react/Panel';\r\n\r\nclass Print extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n printServiceURL: this.props.config.printService,\r\n print: null\r\n }\r\n }\r\n componentDidMount() {\r\n _mapView().then((view) => {\r\n loadModules(['esri/widgets/Print']).then(([Print]) => {\r\n const print = new Print({\r\n view: view,\r\n includeDefaultTemplates: false,\r\n printServiceUrl: this.state.printServiceURL,\r\n container: 'printWidget',\r\n templateOptions: {\r\n legendEnabled:false\r\n },\r\n });\r\n this.setState({print: print});\r\n\r\n print.on('submit', () => { // disable the export on click\r\n /* const _exportBtn = document.querySelector('.esri-print__export-button');\r\n if(_exportBtn){\r\n _exportBtn.disabled = true;\r\n _exportBtn.setAttribute('disabled', true);\r\n }\r\n console.log('submitting...'); */\r\n })\r\n print.on('complete', () => { // disable the export on click\r\n //console.log('print completed!');\r\n })\r\n })\r\n })\r\n }\r\n\r\n componentDidUpdate() {\r\n if(this.state.print !== null) {\r\n this.state.print.printServiceUrl = this.state.printServiceURL;\r\n }\r\n }\r\n\r\n __setPrintServiceURL (isTrufy) {\r\n if(isTrufy) {\r\n this.setState({printServiceURL: this.props.config.printServiceDisclaimer});\r\n } else{\r\n this.setState({printServiceURL: this.props.config.printService})\r\n } \r\n } \r\n\r\n render() {\r\n return (\r\n \r\n
\r\n
\r\n{/*
\r\n \r\n \r\n this.__setPrintServiceURL(e.target.checked) }> Include disclaimer\r\n \r\n \r\n
*/}\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n config: state.config\r\n };\r\n };\r\nexport default connect(mapStateToProps)(Print);\r\n\r\n","import React, { Component, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { _mapView, _mapViewAvailable } from '../../utils/map';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport { loadModules } from 'esri-loader';\r\nimport Loader from 'calcite-react/Loader';\r\nimport swal from 'sweetalert';\r\n\r\nclass Legend extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n btnText: 'View Flooding Data (FEMA)',\r\n isLoading: true,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n //this.initTOC();\r\n _mapView().then((view) => {\r\n this.__loadEsriLayerListToc(view);\r\n });\r\n }\r\n\r\n __loadEsriLayerListToc = (view) => {\r\n const that = this;\r\n loadModules(['esri/widgets/LayerList', 'esri/request']).then(\r\n ([LayerList, esriRequest]) => {\r\n const __fema = view.map.findLayerById('fema_flooding');\r\n if (__fema) {\r\n this.setState({ btnText: 'Remove Flooding Data (FEMA)' });\r\n }\r\n\r\n var layerList = new LayerList({\r\n view: view,\r\n listItemCreatedFunction: function (event) {\r\n const item = event.item;\r\n\r\n if (item.children.items.length !== 0) {\r\n let childrenArr = item.children.items;\r\n for (let index = 0; index < childrenArr.length; index++) {\r\n const child = childrenArr[index];\r\n const _url = child.layer.url.split('MapServer');\r\n // make a request to the server to retrieve the layer image url\r\n esriRequest(_url[0] + 'MapServer/legend', {\r\n query: {\r\n f: 'json',\r\n },\r\n responseType: 'json',\r\n }).then((response) => {\r\n event.item.layer.opacity = 1;\r\n if (item.title != 'Legend') {\r\n //let theArray = [];\r\n //console.log(child.layer.url);\r\n let ul = document.createElement('ul');\r\n ul.classList.add('custom-legend-list-images');\r\n // build unique url for the legend symbol\r\n\r\n const _layerIndex = response.data.layers.findIndex(\r\n (l) => l.layerName == child.layer.title\r\n );\r\n const _childLayers = response.data.layers[_layerIndex];\r\n if (_childLayers) {\r\n if (_childLayers.legend) {\r\n for (let i = 0; i < _childLayers.legend.length; i++) {\r\n const element = _childLayers.legend[i];\r\n //console.log(element.label);\r\n let li = document.createElement('li');\r\n let imgc = document.createElement('img');\r\n imgc.src = `data:${element.contentType};base64, ${element.imageData}`;\r\n //li.append(element.label);\r\n li.append(imgc);\r\n li.append(element.label);\r\n ul.append(li);\r\n }\r\n // assign image to the sublayers in layerlist\r\n child.panel = {\r\n content: ul,\r\n open: false,\r\n };\r\n }\r\n }\r\n\r\n item.actionsSections = [\r\n [\r\n {\r\n title: 'Increase opacity',\r\n className: 'esri-icon-up',\r\n id: 'increase-opacity',\r\n },\r\n {\r\n title: 'Decrease opacity',\r\n className: 'esri-icon-down',\r\n id: 'decrease-opacity',\r\n },\r\n ],\r\n ];\r\n }\r\n });\r\n }\r\n }\r\n\r\n item.watch('visible', (e) => {\r\n const __recursive__func = (layer) => {\r\n if (layer.parent) {\r\n // immediate parent\r\n const _parent = layer.parent;\r\n if (!_parent.visible) _parent.visible = e;\r\n __recursive__func(layer.parent);\r\n } else {\r\n // root node\r\n if (!layer.visible) layer.visible = e;\r\n }\r\n };\r\n __recursive__func(item);\r\n\r\n // sync with topbar toggler\r\n switch (item.title) {\r\n case 'Water': //HARDCODED\r\n case 'Storm': //HARDCODED\r\n case 'Sanitary': //HARDCODED\r\n case 'Lights': //HARDCODED\r\n that.__CheckOrUnchekTopToggler(item.title.toLowerCase(), e);\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n /* if (item.layer.type != 'group') {\r\n // don't show legend twice\r\n item.panel = {\r\n content: 'legend',\r\n open: false,\r\n };\r\n } */\r\n },\r\n container: 'lagendWrapper',\r\n });\r\n\r\n layerList.on('trigger-action', (evt) => {\r\n //console.log(evt);\r\n switch (evt.action.id) {\r\n case 'increase-opacity':\r\n if (evt.item.layer.opacity < 1) {\r\n evt.item.layer.opacity += 0.25;\r\n }\r\n break;\r\n case 'decrease-opacity':\r\n if (evt.item.layer.opacity > 0) {\r\n evt.item.layer.opacity -= 0.25;\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n });\r\n }\r\n );\r\n };\r\n\r\n initTOC = () => {\r\n const layerInfos = [];\r\n const __layers = _mapViewAvailable().map.layers.items;\r\n __layers.map((l) => {\r\n switch (l.type) {\r\n case 'graphics':\r\n break;\r\n\r\n default:\r\n layerInfos.push({\r\n layer: l,\r\n title: l.title,\r\n slider: true,\r\n });\r\n break;\r\n }\r\n });\r\n\r\n console.log(layerInfos);\r\n\r\n /* require(['agsjs/dijit/TOC'], () => {\r\n var tocLegend = new agsjs.dijit.TOC(\r\n {\r\n map: _mapViewAvailable().map,\r\n layerInfos,\r\n mapView: _mapViewAvailable(),\r\n },\r\n 'lagendWrapper'\r\n );\r\n\r\n tocLegend.startup();\r\n }); */\r\n };\r\n\r\n __synchronizeUtilityToggler = (layerGroupNameID, items) => {\r\n let visibilityArray = [];\r\n\r\n items.map((v) => {\r\n visibilityArray.push(v.visible);\r\n });\r\n\r\n visibilityArray.indexOf(false) > -1\r\n ? this.__CheckOrUnchekTopToggler(layerGroupNameID, false)\r\n : this.__CheckOrUnchekTopToggler(layerGroupNameID, true);\r\n };\r\n\r\n __CheckOrUnchekTopToggler = (layerNameDomId, isChecked) => {\r\n const domEl = document.getElementById(layerNameDomId);\r\n domEl.checked = isChecked;\r\n };\r\n\r\n __toggleTopTogglerVisibility = (items, isChecked) => {\r\n items.map((v) => {\r\n v.visible = isChecked;\r\n });\r\n };\r\n\r\n loadFEMAData = (e) => {\r\n const __fema = _mapViewAvailable().map.findLayerById('fema_flooding');\r\n if (__fema) {\r\n //swal('FEMA data have been already added. Please check in the legend');\r\n _mapViewAvailable().map.remove(__fema);\r\n this.setState({ btnText: 'View Flooding Data (FEMA)' });\r\n } else {\r\n // console.log(config);\r\n loadModules(['esri/layers/MapImageLayer']).then(([MapImageLayer]) => {\r\n const layer = new MapImageLayer({\r\n url: this.props.config.FEMA_GIS_MAPSERVIVE,\r\n id: 'fema_flooding',\r\n title: 'Flooding Data (FEMA)',\r\n visible: false,\r\n opacity: 0.5,\r\n sublayers: [\r\n { id: 3, title: 'FIRM Panels' },\r\n { id: 14, title: 'Cross-Sections' },\r\n { id: 27, title: 'Flood Hazard Boundaries' },\r\n { id: 28, title: 'Flood Hazard Zones' },\r\n ],\r\n });\r\n _mapViewAvailable().map.add(layer, 1);\r\n this.setState({ btnText: 'Remove Flooding Data (FEMA)' });\r\n });\r\n }\r\n };\r\n\r\n render() {\r\n const _marginBottom = {\r\n position: 'absolute',\r\n top: '55px',\r\n bottom: '55px',\r\n width: '100%',\r\n overflow: 'auto',\r\n };\r\n const _btnFloodingOnDemand = {\r\n position: 'absolute',\r\n bottom: '10px',\r\n left: '10px',\r\n right: '10px',\r\n };\r\n return (\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n config: state.config,\r\n };\r\n};\r\nexport default connect(mapStateToProps)(Legend);\r\n","import React, { Fragment, useState } from 'react';\r\nimport { loadModules } from 'esri-loader';\r\nimport { _mapView } from '../../utils/map';\r\n\r\nconst BOOKMARK_KEY = 'arcgis-local-bookmarks';\r\nlet USERBOOKMARKS = [];\r\n\r\nconst Bookmarks = (props) => {\r\n const [state, setState] = useState({\r\n bookmarks: [],\r\n });\r\n const _scrollableWrapper = {\r\n position: 'absolute',\r\n top: '55px',\r\n bottom: '0',\r\n width: '100%',\r\n overflow: 'auto',\r\n };\r\n _mapView().then((view) => {\r\n loadModules(['esri/widgets/Bookmarks']).then(([Bookmarks]) => {\r\n const existingBookmarks = localStorage.getItem(BOOKMARK_KEY);\r\n if (existingBookmarks) {\r\n USERBOOKMARKS = JSON.parse(existingBookmarks);\r\n }\r\n let bookmarks = new Bookmarks({\r\n view: view,\r\n editingEnabled: true,\r\n container: 'bookmarks',\r\n });\r\n if (USERBOOKMARKS.length > 0) {\r\n bookmarks.bookmarks = USERBOOKMARKS;\r\n }\r\n\r\n view.when((v) => {\r\n // watching for new added and deletes\r\n if (bookmarks.bookmarks !== undefined) {\r\n bookmarks.bookmarks.on('change', (evt) => {\r\n saveUserBookMarks(bookmarks);\r\n });\r\n }\r\n });\r\n\r\n bookmarks.on('bookmark-edit', (e) => {\r\n saveUserBookMarks(bookmarks);\r\n });\r\n });\r\n });\r\n\r\n const saveUserBookMarks = (bookmarks) => {\r\n const _user_bookmarks = localStorage.getItem(BOOKMARK_KEY);\r\n if (_user_bookmarks) {\r\n localStorage.removeItem(BOOKMARK_KEY);\r\n }\r\n if (bookmarks.bookmarks.length > 0) {\r\n const rawBookmarks = bookmarks.bookmarks.map(\r\n ({ active, extent, name, thumbnail }) => ({\r\n active,\r\n extent,\r\n name,\r\n thumbnail,\r\n })\r\n );\r\n localStorage.setItem(BOOKMARK_KEY, JSON.stringify(rawBookmarks));\r\n }\r\n };\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Bookmarks;\r\n","import React, { Fragment } from 'react';\r\nimport { loadModules } from 'esri-loader';\r\nimport List, {\r\n ListItem,\r\n ListHeader,\r\n ListItemTitle,\r\n ListItemSubtitle,\r\n} from 'calcite-react/List';\r\n\r\nimport { _mapViewAvailable } from '../../utils/map';\r\n\r\nexport const SearchResultsDisplay = (props) => {\r\n const { foundFieldName, layerId, layerName, value } = props.resultObj;\r\n const __zoomToFeature = () => {\r\n _mapViewAvailable().graphics.removeAll();\r\n _highlightSelectedFeature();\r\n _mapViewAvailable().goTo({\r\n target: props.resultObj.feature.geometry,\r\n zoom: 20, // Zoom to found asset from search\r\n });\r\n };\r\n const _highlightSelectedFeature = () => {\r\n loadModules(['esri/Graphic']).then(([Graphic]) => {\r\n const highlightGr = new Graphic({\r\n geometry: props.resultObj.feature.geometry,\r\n symbol: _highlightSymbol(),\r\n attributes: props.resultObj.feature.attributes,\r\n });\r\n _mapViewAvailable().graphics.add(highlightGr);\r\n });\r\n };\r\n const _highlightSymbol = () => {\r\n let _symbol;\r\n switch (props.resultObj.feature.geometry.type.toLowerCase()) {\r\n case 'point':\r\n _symbol = {\r\n type: 'simple-marker',\r\n style: 'square',\r\n outline: { width: 2, color: [0, 197, 255, 1] },\r\n size: 20,\r\n color: [0, 169, 230, 0],\r\n };\r\n break;\r\n case 'polyline':\r\n _symbol = {\r\n type: 'simple-line',\r\n style: 'long-dash-dot',\r\n cap: 'round',\r\n join: 'bevel',\r\n width: 6.25,\r\n color: [0, 197, 255, 0.69],\r\n };\r\n break;\r\n default:\r\n // polygon as default\r\n _symbol = {\r\n type: 'simple-fill',\r\n outline: { width: 2, color: [0, 169, 230, 0.65] },\r\n color: [0, 169, 230, 0.25],\r\n };\r\n break;\r\n }\r\n return _symbol;\r\n };\r\n\r\n return (\r\n \r\n __zoomToFeature()}>\r\n {value}\r\n \r\n {layerName} found field name: {foundFieldName}\r\n \r\n \r\n \r\n );\r\n};\r\n","\r\nimport React, { Component, Fragment } from 'react';\r\nimport Search from 'calcite-react/Search';\r\nimport { loadModules } from \"esri-loader\";\r\nimport { _mapViewAvailable } from '../../utils/map';\r\nimport { connect } from 'react-redux';\r\nimport ExclamationMarkTriangleIcon from 'calcite-ui-icons-react/ExclamationMarkTriangleIcon';\r\n\r\nimport { SearchResultsDisplay } from './SearchResultsDisplay';\r\n//import List, { ListItem, ListHeader, ListItemTitle, ListItemSubtitle} from 'calcite-react/List';\r\nimport List from 'calcite-react/List';\r\nimport Loader from 'calcite-react/Loader';\r\n\r\nvar layerIds = [];\r\n\r\nclass AssetSearch extends Component {\r\n constructor(){\r\n super()\r\n this.state = {\r\n inputValue: '',\r\n errorMessage: '',\r\n searchResults: [],\r\n mapview: _mapViewAvailable()\r\n }\r\n this.searchChanged = this.searchChanged.bind(this)\r\n this.clearSearch = this.clearSearch.bind(this)\r\n this.onUserAction = this.onUserAction.bind(this)\r\n }\r\n\r\n componentDidMount() {\r\n // get layerSearchIds\r\n loadModules(['esri/request']).then(([esriRequest]) => {\r\n const options = {\r\n query: {\r\n f: \"json\"\r\n },\r\n responseType: \"json\"\r\n };\r\n esriRequest(this.props.config.utilitySearch.mapServiceUrl, options)\r\n .then((res) => {\r\n const __layers = res.data.layers;\r\n __layers.map((l) => {\r\n if(l.parentLayerId > -1) {\r\n switch (l.name.toLowerCase()) {\r\n case 'flow arrow':\r\n break;\r\n default:\r\n layerIds.push(l.id)\r\n break;\r\n }\r\n } \r\n })\r\n const _inputSearch = document.getElementById('utility-search');\r\n _inputSearch.addEventListener('keyup', (evt) => {\r\n if(evt.key.toLowerCase() === 'enter') {\r\n // perform search\r\n this._doSearch();\r\n }\r\n })\r\n })\r\n .catch((err) => {\r\n document.getElementById('search-result-display').classList.add('hidden');\r\n document.getElementById('search-error-display').classList.remove('hidden');\r\n this.setState({errorMessage: err.message});\r\n })\r\n \r\n })\r\n }\r\n\r\n __getSearchIds = () => {\r\n\r\n }\r\n\r\n clearSearch = () => {\r\n this.setState({\r\n inputValue: '',\r\n errorMessage: '',\r\n searchResults: []\r\n })\r\n if(!document.getElementById('search-result-display').classList.contains('hidden')) \r\n document.getElementById('search-result-display').classList.add('hidden');\r\n \r\n if(!document.getElementById('search-error-display').classList.contains('hidden'))\r\n document.getElementById('search-error-display').classList.add('hidden');\r\n\r\n if(!document.getElementById('search-noresult-display').classList.contains('hidden'))\r\n document.getElementById('search-noresult-display').classList.add('hidden');\r\n }\r\n\r\n onUserAction = (inputValue, selectedItemVal) => {\r\n this.setState({\r\n inputValue: inputValue\r\n })\r\n }\r\n\r\n searchChanged = () => {\r\n // console.log('testing...');\r\n }\r\n\r\n _doSearch() {\r\n if(this.state.inputValue !== '') {\r\n document.getElementById('search-loader').classList.remove('hidden');\r\n loadModules([\r\n 'esri/tasks/FindTask',\r\n 'esri/tasks/support/FindParameters'\r\n ]).then(([FindTask, FindParameters]) => {\r\n\r\n const find = new FindTask({\r\n url: this.props.config.utilitySearch.mapServiceUrl\r\n });\r\n // Set parameters to only query the Counties layer by name\r\n const params = new FindParameters({\r\n layerIds: layerIds,\r\n searchFields: this.props.config.utilitySearch.searchFields,\r\n searchText: this.state.inputValue,\r\n returnGeometry: true,\r\n outSpatialReference: _mapViewAvailable().spatialReference,\r\n });\r\n\r\n find.execute(params).then(this.showResults).catch(this.showError);\r\n document.getElementById('search-loader').classList.add('hidden');\r\n });\r\n }\r\n }\r\n\r\n showNoResultsFound = () => {\r\n document.getElementById('search-result-display').classList.add('hidden');\r\n document.getElementById('search-error-display').classList.add('hidden');\r\n document.getElementById('search-noresult-display').classList.remove('hidden');\r\n }\r\n\r\n showResults = (res) => {\r\n if(res.results.length > 0){\r\n document.getElementById('search-error-display').classList.add('hidden');\r\n document.getElementById('search-noresult-display').classList.add('hidden');\r\n document.getElementById('search-result-display').classList.remove('hidden');\r\n this.setState({searchResults: res.results});\r\n } else {\r\n this.showNoResultsFound();\r\n }\r\n }\r\n showError = (err) => {\r\n document.getElementById('search-result-display').classList.add('hidden');\r\n document.getElementById('search-error-display').classList.remove('hidden');\r\n this.setState({errorMessage: err.message});\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n {\r\n this.state.searchResults.map((f, index) => \r\n ())\r\n }\r\n \r\n
\r\n
\r\n \r\n
\r\n There was an error fetching the search service ::\r\n
\r\n {this.state.errorMessage}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n No result found matching your search\r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n};\r\nconst __styleError = {\r\n margin: \"10px\",\r\n textAlign: \"left\"\r\n}\r\nconst resultScrollWrapper = {\r\n position: \"absolute\",\r\n top: \"120px\",\r\n bottom: \"0\",\r\n width: \"100%\",\r\n overflow: \"auto\"\r\n}\r\n\r\nconst _searchLoader = {\r\n margin:\"15px 25px\"\r\n}\r\nconst mapStateToProps = (state) => {\r\n return {\r\n config: state.config\r\n };\r\n };\r\n\r\nexport default connect(mapStateToProps)(AssetSearch);\r\n\r\n","\r\nimport React, { createContext, useReducer } from 'react';\r\nimport AppReducer from './AppReducer';\r\n\r\n// Initial state\r\nconst initialState = {\r\n graphics: []\r\n}\r\n\r\n// Create context\r\nexport const GlobalContext = createContext(initialState);\r\n\r\n// Provider component\r\nexport const GlobalProvider = ({ children }) => {\r\n const [state, dispatch] = useReducer(AppReducer, initialState);\r\n\r\n // Actions\r\n function deleteGraphic(id) {\r\n dispatch({\r\n type: 'DELETE_GRAPHIC',\r\n payload: id\r\n });\r\n }\r\n\r\n function addGraphic(graphic) {\r\n dispatch({\r\n type: 'ADD_GRAPHIC',\r\n payload: graphic\r\n });\r\n }\r\n function updateGraphic(graphic) {\r\n dispatch({\r\n type: 'UPDATE_GRAPHIC',\r\n payload: graphic\r\n });\r\n }\r\n\r\n return (\r\n {children}\r\n );\r\n}","import React, { Component, Fragment } from 'react';\r\nimport { loadModules } from 'esri-loader';\r\nimport { GlobalContext } from '../../../redux/context/GlobalState';\r\nimport { getAppConfig } from '../../../utils/request';\r\n\r\nimport Form, {\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n Fieldset,\r\n Legend,\r\n} from 'calcite-react/Form';\r\nimport Accordion, {\r\n AccordionSection,\r\n AccordionTitle,\r\n AccordionContent,\r\n} from 'calcite-react/Accordion';\r\nimport TextField from 'calcite-react/TextField';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport Checkbox from 'calcite-react/Checkbox';\r\nimport Card, { CardTitle, CardContent, CardImage } from 'calcite-react/Card';\r\nimport LayerZoomToIcon from 'calcite-ui-icons-react/LayerZoomToIcon';\r\nimport TrashIcon from 'calcite-ui-icons-react/TrashIcon';\r\nimport PencilIcon from 'calcite-ui-icons-react/PencilIcon';\r\nimport TableIcon from 'calcite-ui-icons-react/TableIcon';\r\nimport { ParcelsReport } from '../../services/notifications';\r\nimport BufferSelectParcels from './BufferSelectParcels';\r\n\r\nconst DRAWINGS_KEY = 'arcgis-local-drawings';\r\n\r\nclass DrawingItem extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isVisible: true,\r\n graphic: this.props.drawingObj,\r\n userGLayer: this.props.graphicsLayer,\r\n activeSectionIndexes: [-1],\r\n bufferDistance: 100,\r\n bufferAndSelectParcels: true,\r\n };\r\n this.onAccordionChange = this.onAccordionChange.bind(this);\r\n }\r\n\r\n onAccordionChange(evt, index) {\r\n this.state.activeSectionIndexes.includes(index)\r\n ? this.setState({\r\n activeSectionIndexes: this.state.activeSectionIndexes.filter(\r\n (item) => index !== item\r\n ),\r\n })\r\n : this.setState({\r\n activeSectionIndexes: [...this.state.activeSectionIndexes, index],\r\n });\r\n }\r\n\r\n componentDidMount() {}\r\n\r\n __toggleGraphicVisibility(e) {\r\n this.setState({ isVisible: e.target.checked });\r\n\r\n setTimeout(() => {\r\n console.log(this.state.graphic);\r\n //this.props.drawingObj.visible = this.state.isVisible;\r\n const userGLayer = this.props.mapview.map.findLayerById('userGraphics');\r\n if (userGLayer) {\r\n userGLayer.graphics.items.map((g, idx) => {\r\n console.log(g.uid);\r\n if (g.uid === this.state.graphic.uid) {\r\n g.visible = this.state.isVisible;\r\n }\r\n });\r\n }\r\n }, 30);\r\n }\r\n __zoomToGraphic() {\r\n switch (this.state.graphic.geometry.type) {\r\n case 'point':\r\n this.props.mapview.goTo({\r\n target: this.state.graphic.geometry,\r\n zoom: 22,\r\n });\r\n break;\r\n default:\r\n this.props.mapview.goTo({\r\n target: this.state.graphic.geometry,\r\n });\r\n break;\r\n }\r\n }\r\n\r\n __deleteGraphic() {\r\n const gLayer = this.props.mapview.map.findLayerById('userGraphics');\r\n try {\r\n if (gLayer) {\r\n gLayer.graphics.items.map((g, idx) => {\r\n //console.log(g.uid);\r\n if (g.uid === this.state.graphic.uid) {\r\n gLayer.remove(g);\r\n }\r\n });\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n //this.props.deleteSingleGraphic(this.state.graphic);\r\n\r\n }\r\n\r\n _saveUserDrawingsItems() {\r\n const userDrawings = this.state.userGLayer.graphics.items;\r\n if (userDrawings.length > 0) {\r\n loadModules(['esri/Graphic']).then(([Graphic]) => {\r\n if (localStorage.getItem(DRAWINGS_KEY) !== undefined) {\r\n localStorage.removeItem(DRAWINGS_KEY);\r\n }\r\n const rawGraphics = [];\r\n this.state.userGLayer.graphics.items.map((graphic) => {\r\n const _gr = new Graphic({\r\n geometry: graphic.geometry,\r\n symbol: graphic.symbol,\r\n attributes: graphic.attributes,\r\n });\r\n rawGraphics.push(_gr.toJSON());\r\n });\r\n localStorage.setItem(DRAWINGS_KEY, JSON.stringify(rawGraphics));\r\n });\r\n } else {\r\n if (localStorage.getItem(DRAWINGS_KEY)) {\r\n localStorage.removeItem(DRAWINGS_KEY);\r\n }\r\n }\r\n }\r\n\r\n SelectParcels = (geometry = this.state.graphic.geometry) => {\r\n ParcelsReport.SelectParcelsByGeometry(geometry);\r\n };\r\n\r\n /* CreateBuffer = (geometry) => {\r\n const { geometry } = this.state.graphic;\r\n ParcelsReport.GenerateBuffer(\r\n geometry,\r\n this.state.bufferDistance,\r\n this.state.bufferAndSelectParcels\r\n );\r\n }; */\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n
{this.props.index +1}
\r\n
\r\n\r\n this.__toggleGraphicVisibility(e)}\r\n >\r\n {' '}\r\n Visibility{' '}\r\n \r\n
\r\n \r\n this.__zoomToGraphic()}\r\n title=\"Zoom to\"\r\n >\r\n \r\n \r\n this.__deleteGraphic()}\r\n title=\"delete graphic\"\r\n >\r\n \r\n \r\n this.SelectParcels()}\r\n title=\"Select Parcels Intersecting shape\"\r\n >\r\n \r\n \r\n \r\n
\r\n\r\n {/* Parcels Buffering */}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default DrawingItem;\r\n","import React, { Fragment } from 'react'\r\n\r\nexport const NoDrawings = () => {\r\n return (\r\n \r\n
\r\n \r\n

No Drawings

\r\n

\r\n Add drawings to the map and they will appear here.\r\n

\r\n
\r\n
\r\n )\r\n}\r\n","import React, { Component, Fragment } from 'react';\r\nimport DrawingItem from './DrawingItem';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport TrashIcon from 'calcite-ui-icons-react/TrashIcon';\r\nimport ViewHideIcon from 'calcite-ui-icons-react/ViewHideIcon';\r\nimport ViewVisibleIcon from 'calcite-ui-icons-react/ViewVisibleIcon';\r\nimport { connect } from 'react-redux';\r\nimport { setgraphics } from '../../../redux/reducers/graphics';\r\nimport { NoDrawings } from './NoDrawings';\r\n\r\n//const __goBackBtn = {\r\n// textAlign: 'left',\r\n// margin: '10px',\r\n//};\r\n\r\nconst __scrollablePanel = {\r\n position: 'absolute',\r\n top: '55px',\r\n bottom: '55px',\r\n width: '100%',\r\n overflow: 'auto',\r\n};\r\nconst __footerPanel = {\r\n position: 'absolute',\r\n bottom: '10px',\r\n width: '100%',\r\n};\r\n\r\nclass UserDrawings extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n graphicsLayer: this.props.graphicsLayer,\r\n isShowingAllUserGraphics: true,\r\n };\r\n }\r\n componentDidMount() {\r\n console.log(this.props);\r\n }\r\n componentWillUnmount() {\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n hideShowAllGraphics = () => {\r\n this.setState({\r\n isShowingAllUserGraphics: !this.state.isShowingAllUserGraphics,\r\n });\r\n setTimeout(() => {\r\n this.state.graphicsLayer.graphics.items.map(\r\n (graphic) => (graphic.visible = this.state.isShowingAllUserGraphics)\r\n );\r\n this.__toggle_cards_visibility();\r\n }, 50);\r\n };\r\n\r\n __toggle_cards_visibility = () => {\r\n let _inputs = document.getElementsByName('graphics-visibility-controller');\r\n\r\n for (let index = 0; index < _inputs.length; index++) {\r\n const chkbox = _inputs[index];\r\n\r\n chkbox.checked = this.state.isShowingAllUserGraphics;\r\n }\r\n };\r\n\r\n deleteAllGraphics = () => {\r\n this.props.deleteAllGraphics();\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n
\r\n {this.props.userGraphics.length > 0 && (\r\n <>\r\n {this.props.userGraphics.map((f, index) => (\r\n \r\n ))}\r\n \r\n )}\r\n\r\n {this.props.userGraphics.length === 0 && }\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n Hide All\r\n \r\n \r\n Show All\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n userGraphics: state.graphics.value,\r\n});\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n setUserGraphics: (gr) => dispatch(setgraphics(gr)),\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(UserDrawings);\r\n","import React, { Component, Fragment } from 'react';\r\nimport Loader from 'calcite-react/Loader';\r\nimport { loadModules } from 'esri-loader';\r\nimport UserDrawings from '../functional/drawings/UserDrawings';\r\nimport { NoDrawings } from '../functional/drawings/NoDrawings';\r\n\r\nimport { connect } from 'react-redux';\r\nimport { _mapViewAvailable } from '../../utils/map';\r\nimport { userGraphicService } from '../services/gis_service';\r\nimport { setgraphics } from '../../redux/reducers/graphics';\r\nimport DrawingItem from './drawings/DrawingItem';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport TrashIcon from 'calcite-ui-icons-react/TrashIcon';\r\nimport ViewHideIcon from 'calcite-ui-icons-react/ViewHideIcon';\r\nimport ViewVisibleIcon from 'calcite-ui-icons-react/ViewVisibleIcon';\r\n\r\nconst DRAWINGS_KEY = 'arcgis-local-drawings';\r\nconst _drawingsWrapper = {\r\n position: 'relative',\r\n};\r\n\r\nconst __scrollablePanel = {\r\n position: 'absolute',\r\n top: '55px',\r\n bottom: '55px',\r\n width: '100%',\r\n overflow: 'auto',\r\n};\r\nconst __footerPanel = {\r\n position: 'absolute',\r\n bottom: '10px',\r\n width: '100%',\r\n};\r\n\r\nclass Drawings extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n graphicsLayer: null,\r\n isShowingAllUserGraphics: true,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const userGLayer = _mapViewAvailable().map.findLayerById('userGraphics');\r\n //const { userGraphics } = this.props;\r\n console.log(this.props);\r\n setTimeout(() => {\r\n this.setState({ graphicsLayer: userGLayer });\r\n }, 20);\r\n }\r\n\r\n deleteAllGraphics = () => {\r\n const userGLayer = _mapViewAvailable().map.findLayerById('userGraphics');\r\n if (userGLayer) {\r\n userGLayer.removeAll();\r\n // clear from local storage\r\n userGraphicService.updateGraphicsStorage(userGLayer);\r\n this.props.setUserGraphics([]);\r\n }\r\n };\r\n\r\n deleteSingleGraphic = (graphic) => {\r\n const userGLayer = _mapViewAvailable().map.findLayerById('userGraphics');\r\n if (userGLayer) {\r\n userGLayer.remove(graphic);\r\n userGraphicService.updateGraphicsStorage(userGLayer);\r\n setTimeout(() => {\r\n this.props.setUserGraphics(userGLayer.graphics.items);\r\n }, 20);\r\n }\r\n };\r\n\r\n hideShowAllGraphics = () => {\r\n this.setState({\r\n isShowingAllUserGraphics: !this.state.isShowingAllUserGraphics,\r\n });\r\n setTimeout(() => {\r\n const userGLayer = _mapViewAvailable().map.findLayerById('userGraphics');\r\n userGLayer.graphics.items.map(\r\n (graphic) => (graphic.visible = this.state.isShowingAllUserGraphics)\r\n );\r\n this.__toggle_cards_visibility();\r\n }, 50);\r\n };\r\n\r\n __toggle_cards_visibility = () => {\r\n let _inputs = document.getElementsByName('graphics-visibility-controller');\r\n\r\n for (let index = 0; index < _inputs.length; index++) {\r\n const chkbox = _inputs[index];\r\n\r\n chkbox.checked = this.state.isShowingAllUserGraphics;\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n
\r\n {this.props.userGraphics.length > 0 && (\r\n <>\r\n {this.props.userGraphics.map((f, idx) => (\r\n \r\n ))}\r\n \r\n )}\r\n {this.props.userGraphics.length === 0 && }\r\n
\r\n
\r\n\r\n {this.props.userGraphics.length > 0 && (\r\n
\r\n \r\n \r\n \r\n Hide All\r\n \r\n \r\n Show All\r\n \r\n \r\n
\r\n )}\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n config: state.config,\r\n userGraphics: state.graphics.value,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n setUserGraphics: (gr) => dispatch(setgraphics(gr)),\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Drawings);\r\n","\r\nimport React, { Component, Fragment } from 'react'\r\nimport { _mapView } from '../../utils/map';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport Select from 'calcite-react/Select';\r\nimport Menu, { MenuTitle, MenuItem } from 'calcite-react/Menu';\r\nimport { loadModules } from \"esri-loader\";\r\nimport { _mapViewAvailable } from '../../utils/map';\r\n\r\nimport { connect } from 'react-redux';\r\n\r\nclass MapCompare extends Component {\r\n\r\n state = {\r\n leadingServiceUrl: '',\r\n trailingServiceUrl: '',\r\n leadingLayer: null,\r\n trailingLayer: null,\r\n layerSwipe: null\r\n }\r\n\r\n componentDidMount() {\r\n const view = _mapViewAvailable();\r\n this.setState({leadingServiceUrl: view.map.basemap.baseLayers.items[0].url});\r\n }\r\n componentWillUnmount () {\r\n this.setState = (state, callback) => {\r\n return;\r\n }\r\n this.__destroySwipe();\r\n }\r\n __destroySwipe = () => {\r\n if(this.state.layerSwipe){\r\n _mapViewAvailable().map.remove(this.state.leadingLayer);\r\n _mapViewAvailable().map.remove(this.state.trailingLayer);\r\n this.state.layerSwipe.destroy();\r\n this.setState({layerSwipe: null});\r\n this.setState({leadingLayer: null});\r\n this.setState({trailingLayer: null});\r\n }\r\n }\r\n\r\n __compareImageries = () => {\r\n this.__destroySwipe();\r\n\r\n loadModules([\r\n 'esri/widgets/Swipe',\r\n 'esri/layers/TileLayer'\r\n ]).then(([Swipe, TileLayer]) => {\r\n \r\n const __ll = new TileLayer({\r\n url: this.state.leadingServiceUrl\r\n });\r\n\r\n this.setState({leadingLayer: __ll});\r\n\r\n const __tt = new TileLayer({\r\n url: this.state.trailingServiceUrl\r\n });\r\n\r\n this.setState({trailingLayer: __tt});\r\n\r\n _mapViewAvailable().map.add(this.state.leadingLayer, 1);\r\n _mapViewAvailable().map.add(this.state.trailingLayer, 1);\r\n\r\n const __swipe = new Swipe({\r\n leadingLayers: [this.state.leadingLayer],\r\n trailingLayers: [this.state.trailingLayer],\r\n position: 45,\r\n view: _mapViewAvailable()\r\n });\r\n\r\n this.setState({layerSwipe: __swipe});\r\n\r\n _mapViewAvailable().ui.add(this.state.layerSwipe);\r\n });\r\n \r\n }\r\n\r\n setLeadingLayer = (layer) => {\r\n this.setState({leadingServiceUrl: layer});\r\n }\r\n setTrailingLayer = (layer) => {\r\n this.setState({trailingServiceUrl: layer});\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n

Compare historic imageries

\r\n\r\n
\r\n \r\n \r\n
\r\n \r\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) => {\r\n return {\r\n config: state.config\r\n };\r\n };\r\nexport default connect(mapStateToProps)(MapCompare);\r\n\r\n","import React, { Component, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport Panel, { PanelTitle, PanelText } from 'calcite-react/Panel';\r\n\r\nimport Form, {\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n Fieldset,\r\n Legend,\r\n} from 'calcite-react/Form';\r\nimport TextField from 'calcite-react/TextField';\r\nimport Tabs, {\r\n TabNav,\r\n TabTitle,\r\n TabContents,\r\n TabSection,\r\n} from 'calcite-react/Tabs';\r\nimport { SketchPicker, CompactPicker } from 'react-color';\r\n\r\nimport Switch from 'calcite-react/Switch';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport Checkbox from 'calcite-react/Checkbox';\r\nimport Radio from 'calcite-react/Radio';\r\n\r\nimport { ToastContainer, toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport swal from 'sweetalert';\r\nimport LayerSettingsCheckbox from './LayerSettingsCheckbox';\r\nimport { _user_auth } from '../services/gis_service';\r\n\r\nconst USER_THEME_KEY = 'user-local-theme';\r\nconst __IDENTIFYSETTINGS = '__identifySettings';\r\nlet savedLayersArray = [];\r\n\r\nconst _scrollableWrapper = {\r\n position: 'absolute',\r\n top: '55px',\r\n bottom: '0',\r\n width: '100%',\r\n overflow: 'auto',\r\n};\r\nconst _scrollableContentWrapper = {\r\n margin: '0',\r\n padding: '0',\r\n};\r\n\r\nclass Settings extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n headerBackground: '#efe9e0',\r\n headerTextColor: '#ffffff',\r\n headerLinksColor: '#808080',\r\n activeTabIndex: 0,\r\n activateMapOnLoad: true,\r\n showNullOrEmptyFields: false,\r\n isAllLayersChecked: true,\r\n checkboxes: [],\r\n checkedItems: new Map(),\r\n __isAuthorized: false,\r\n };\r\n this.onTabChange = this.onTabChange.bind(this);\r\n this.onMapLoadChange = this.onMapLoadChange.bind(this);\r\n this.onShowOrEmptyFieldsLoadChange =\r\n this.onShowOrEmptyFieldsLoadChange.bind(this);\r\n this.onAllLayersChecked = this.onAllLayersChecked.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n handleChange(e) {\r\n const item = e.target.name;\r\n const isChecked = e.target.checked;\r\n this.setState((prevState) => ({\r\n checkedItems: prevState.checkedItems.set(item, isChecked),\r\n }));\r\n\r\n setTimeout(() => {\r\n let Keys = [...this.state.checkedItems.entries()]\r\n .filter(({ 1: v }) => v === true)\r\n .map(([k]) => k);\r\n\r\n if (Keys.length > 0) {\r\n if (Keys.length === this.props.config.applicationLayers.length) {\r\n this.setState({\r\n isAllLayersChecked: true,\r\n checkedItems: new Map(),\r\n });\r\n } else {\r\n this.setState({ isAllLayersChecked: false });\r\n }\r\n } else {\r\n this.setState({ isAllLayersChecked: true });\r\n }\r\n }, 20);\r\n }\r\n\r\n componentDidMount() {\r\n this.getAppLayersCheckboxes();\r\n\r\n savedLayersArray = [];\r\n const userTheme = localStorage.getItem(USER_THEME_KEY);\r\n if (userTheme) {\r\n const _theme = JSON.parse(userTheme);\r\n this.setState({\r\n headerBackground: _theme.headerBackgroundColor,\r\n headerTextColor: _theme.headerTitleTextColor,\r\n headerLinksColor: _theme.headerNavLinksColor,\r\n });\r\n }\r\n const _identifySettings = localStorage.getItem(__IDENTIFYSETTINGS);\r\n if (_identifySettings) {\r\n const __settings = JSON.parse(_identifySettings);\r\n if (__settings.Layers.length > 0) {\r\n setTimeout(() => {\r\n let _inputs = document.querySelectorAll('.layer-input-label');\r\n __settings.Layers.map((l) => {\r\n for (let index = 0; index < _inputs.length; index++) {\r\n const element = _inputs[index];\r\n if (element.innerText === l) {\r\n element.click();\r\n }\r\n }\r\n });\r\n }, 30);\r\n }\r\n this.setState({\r\n activateMapOnLoad: __settings.ActivateMapOnLoad,\r\n showNullOrEmptyFields: __settings.IsNullOrEmptyFields,\r\n });\r\n }\r\n }\r\n\r\n getAppLayersCheckboxes() {\r\n let _checkboxes = [];\r\n this.props.config.applicationLayers.map((l, index) => {\r\n switch (l.id) {\r\n case '1703a318545-contours': //HARDCODED\r\n break;\r\n case '1703a0495d2-util': //HARDCODED DMM 10/11/2022\r\n const __isAuthorized = _user_auth.isAuthorized();\r\n const __AuthorizedUser = _user_auth.GetAuthUser();\r\n if (__isAuthorized && __AuthorizedUser.accessLevel > 1) {\r\n _checkboxes.push({\r\n name: l.title,\r\n key: l.id,\r\n label: l.title,\r\n });\r\n }\r\n break; \r\n default:\r\n _checkboxes.push({\r\n name: l.title,\r\n key: l.id,\r\n label: l.title,\r\n });\r\n break;\r\n }\r\n });\r\n\r\n this.setState({ checkboxes: _checkboxes });\r\n }\r\n\r\n onAllLayersChecked(evt) {\r\n this.setState({ isAllLayersChecked: evt.target.checked });\r\n if (evt.target.checked) {\r\n this.setState({ checkedItems: new Map() });\r\n } else {\r\n let Keys = [...this.state.checkedItems.entries()]\r\n .filter(({ 1: v }) => v === true)\r\n .map(([k]) => k);\r\n\r\n if (Keys.length < 1) {\r\n swal('You must have at least one option selected');\r\n this.setState({ isAllLayersChecked: true });\r\n }\r\n }\r\n }\r\n\r\n onTabChange(index) {\r\n this.setState({ activeTabIndex: index });\r\n }\r\n onMapLoadChange(evt) {\r\n this.setState({ activateMapOnLoad: evt.target.checked });\r\n }\r\n onShowOrEmptyFieldsLoadChange(evt) {\r\n this.setState({ showNullOrEmptyFields: evt.target.checked });\r\n }\r\n handleBackgroundChangeComplete = (color) => {\r\n const _header = document.querySelector('.app-header');\r\n _header.style.backgroundColor = color.hex;\r\n this.setState({ headerBackground: color.hex });\r\n };\r\n handleTextColorChangeComplete = (color) => {\r\n const _headerTitle = document.querySelector('a.app-title');\r\n const _headerToggler = document.querySelector('.utility-toggler-wrapper');\r\n\r\n if (_headerTitle || _headerToggler) {\r\n _headerTitle.style.color = color.hex;\r\n if (_headerToggler) {\r\n _headerToggler.style.color = color.hex;\r\n _headerToggler.style.borderColor = color.hex;\r\n }\r\n this.setState({ headerTextColor: color.hex });\r\n }\r\n };\r\n handleLinksColorChangeComplete = (color) => {\r\n const _header = document.querySelector('a.app-links');\r\n if (_header) {\r\n _header.style.color = color.hex;\r\n this.setState({ headerLinksColor: color.hex });\r\n }\r\n };\r\n _saveMyPreferences = () => {\r\n let _selectedLayers = [];\r\n\r\n let Keys = [...this.state.checkedItems.entries()]\r\n .filter(({ 1: v }) => v === true)\r\n .map(([k]) => k);\r\n\r\n if (Keys.length > 0) {\r\n _selectedLayers = Keys;\r\n }\r\n\r\n const IdentifySettings = {\r\n Layers: _selectedLayers,\r\n IsNullOrEmptyFields: this.state.showNullOrEmptyFields,\r\n ActivateMapOnLoad: this.state.activateMapOnLoad,\r\n };\r\n //console.log(IdentifySettings);\r\n const keyExist = localStorage.getItem(__IDENTIFYSETTINGS);\r\n if (keyExist) {\r\n localStorage.removeItem(__IDENTIFYSETTINGS);\r\n }\r\n localStorage.setItem(__IDENTIFYSETTINGS, JSON.stringify(IdentifySettings));\r\n swal('Settings saved successfully!');\r\n };\r\n\r\n _resetToDefault = () => {\r\n const keyExist = localStorage.getItem(__IDENTIFYSETTINGS);\r\n if (keyExist) {\r\n localStorage.removeItem(__IDENTIFYSETTINGS);\r\n }\r\n\r\n this.setState({\r\n showNullOrEmptyFields: false,\r\n activateMapOnLoad: true,\r\n isAllLayersChecked: true,\r\n checkedItems: new Map(),\r\n });\r\n\r\n const identifyBtn = document.getElementById('mapIdentifyBtn');\r\n if (identifyBtn.classList.contains('map-identify-active')) {\r\n identifyBtn.click();\r\n }\r\n swal('Identify settings were reset successfully!');\r\n };\r\n\r\n _saveTheme = () => {\r\n const themeObj = {\r\n headerBackgroundColor: this.state.headerBackground,\r\n headerTitleTextColor: this.state.headerTextColor,\r\n headerNavLinksColor: this.state.headerLinksColor,\r\n };\r\n const keyExist = localStorage.getItem(USER_THEME_KEY);\r\n if (keyExist) {\r\n localStorage.removeItem(USER_THEME_KEY);\r\n }\r\n localStorage.setItem(USER_THEME_KEY, JSON.stringify(themeObj));\r\n swal('Theme saved successfully!');\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n Theme\r\n
\r\n \r\n \r\n Header Background\r\n Header Text\r\n {/* Links */}\r\n \r\n \r\n \r\n Background color:\r\n \r\n \r\n \r\n Header text color:\r\n \r\n \r\n {/* \r\n \r\n Links color:\r\n \r\n \r\n */}\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n Identify\r\n \r\n \r\n Activate on map load.\r\n \r\n \r\n \r\n \r\n Show null or empty fields.\r\n \r\n \r\n\r\n Layers to identify\r\n
\r\n \r\n \r\n {this.state.checkboxes.map((item) => (\r\n \r\n ))}\r\n \r\n
\r\n \r\n \r\n \r\n Reset to Default\r\n \r\n \r\n
\r\n\r\n {/*
\r\n \r\n Identify Display\r\n
\r\n \r\n
\r\n Specify the display type:\r\n Field names\r\n Aliases\r\n
\r\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) => {\r\n return {\r\n config: state.config,\r\n };\r\n};\r\nexport default connect(mapStateToProps)(Settings);\r\n","\r\nimport React, { Component, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { loadModules } from 'esri-loader';\r\n\r\nimport List, {\r\n ListItem,\r\n ListHeader,\r\n ListItemTitle,\r\n ListItemSubtitle\r\n } from 'calcite-react/List';\r\nimport { _mapViewAvailable } from '../../../utils/map';\r\nimport { GIS_Base_Functions } from '../../services/gis_service';\r\n\r\nconst __scrollablePanel = {\r\n position: 'absolute',\r\n top: '55px',\r\n bottom: '25px',\r\n width: '100%',\r\n overflow: 'auto',\r\n };\r\n\r\nclass Basemaps extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n activeBasemap: 'Street basemap'\r\n }\r\n }\r\n\r\n componentDidMount () {\r\n //console.log(this.props);\r\n }\r\n\r\n componentWillUnmount () {\r\n this.setState = (state, callback) => {\r\n return;\r\n }\r\n }\r\n\r\n addDefaultBaseLayers = (isImagery) => {\r\n GIS_Base_Functions.__addDefaultBaseLayer(!isImagery);\r\n };\r\n\r\n setBasemap = (url, caption) => {\r\n loadModules(['esri/Basemap', 'esri/layers/TileLayer']).then(\r\n ([Basemap, TileLayer]) => {\r\n\r\n switch (caption) {\r\n case 'Street basemap':\r\n const mapview = _mapViewAvailable();\r\n GIS_Base_Functions.__getBasemap(this.props.config.streetBasemapService).then((streetBasemap) => {\r\n _mapViewAvailable().map.basemap = streetBasemap;\r\n });\r\n break;\r\n \r\n default:\r\n const streetBasemap = new Basemap({\r\n baseLayers: [\r\n new TileLayer({\r\n url,\r\n copyright: 'City of Reynoldsburg, Ohio',\r\n }),\r\n ],\r\n title: caption,\r\n id: 'appbasemap',\r\n });\r\n _mapViewAvailable().map.basemap = streetBasemap;\r\n break;\r\n }\r\n\r\n \r\n this.setState({activeBasemap: caption});\r\n setTimeout(() => {\r\n const isStreet = this.state.activeBasemap === 'Street basemap' ? true : false;\r\n this.addDefaultBaseLayers(isStreet);\r\n }, 50);\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n const { listImageries } = this.props.config;\r\n return (\r\n \r\n
\r\n
\r\n {\r\n listImageries.length === 0 && (\r\n
\r\n \r\n

No Imageries

\r\n

\r\n Add aerial imageries in the config json to be used as basemaps\r\n

\r\n
\r\n )\r\n }\r\n {\r\n listImageries.length > 0 && ( //This is where aerials are listed\r\n <>\r\n \r\n {\r\n listImageries.map((a, i) => (\r\n this.setBasemap(a.url, a.caption)}\r\n />}>\r\n {a.caption}\r\n \r\n ))\r\n }\r\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) => {\r\n return {\r\n config: state.config\r\n };\r\n };\r\nexport default connect(mapStateToProps)(Basemaps);\r\n","import React, { Component, Fragment } from 'react';\r\n\r\nimport ActionBar, {\r\n Action,\r\n ActionGroup,\r\n BottomActionGroup,\r\n} from 'calcite-react/ActionBar';\r\n\r\nimport Modal from 'calcite-react/Modal';\r\n//import Modal from 'calcite-react';\r\n//import Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport Button from 'calcite-react/Button';\r\n\r\nimport LegendIcon from 'calcite-ui-icons-react/LegendIcon';\r\n//import LayersIcon from 'calcite-ui-icons-react/LayersIcon';\r\n\r\nimport BookmarkIcon from 'calcite-ui-icons-react/BookmarkIcon';\r\nimport BasemapIcon from 'calcite-ui-icons-react/BasemapIcon';\r\n//import CursorMarqueeIcon from 'calcite-ui-icons-react/CursorMarqueeIcon';\r\nimport PrintIcon from 'calcite-ui-icons-react/PrintIcon';\r\nimport CompareIcon from 'calcite-ui-icons-react/CompareIcon';\r\nimport MagnifyingGlassIcon from 'calcite-ui-icons-react/MagnifyingGlassIcon';\r\nimport BellIcon from 'calcite-ui-icons-react/BellIcon';\r\nimport GearIcon from 'calcite-ui-icons-react/GearIcon';\r\n\r\nimport InformationIcon from 'calcite-ui-icons-react/InformationIcon';\r\n\r\nimport * as Features from '../functional/FeauturesLoader';\r\nimport { _user_auth } from '../services/gis_service';\r\n\r\nexport class LeftNav extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n collapsed: true,\r\n activeAction: '',\r\n selectedComponent: '',\r\n componentTitle: '',\r\n infoModalOpen: false,\r\n isAuthorized: false,\r\n accessLevel: 0,\r\n };\r\n\r\n this.openModal = this.openModal.bind(this);\r\n this.closeModal = this.closeModal.bind(this);\r\n\r\n this.onToggleCollapse = this.onToggleCollapse.bind(this);\r\n this.actionSelected = this.actionSelected.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const __isAuth = _user_auth.isAuthorized(); \r\n const { accessLevel } = _user_auth.GetAuthUser(); \r\n this.setState({ isAuthorized: __isAuth, accessLevel });\r\n }\r\n\r\n _(domID) {\r\n return document.getElementById(domID);\r\n }\r\n onToggleCollapse() {\r\n this.setState({ collapsed: !this.state.collapsed });\r\n }\r\n\r\n __is_left__widget_panel_collapsed() {\r\n return this._('left-bar-wrapper').classList.contains('hidden');\r\n }\r\n\r\n OpenWidgetWrapper() {\r\n this._('left-bar-wrapper').classList.remove('hidden');\r\n }\r\n CloseWidgetWrapper = () => {\r\n this._('left-bar-wrapper').classList.add('hidden');\r\n this.setState({ activeAction: '' });\r\n this.setState({ selectedComponent: '' });\r\n\r\n const _mapCompareWidget = this._('btn-clear-map-compare');\r\n if (_mapCompareWidget) {\r\n _mapCompareWidget.click();\r\n }\r\n };\r\n\r\n actionSelected(activeAction) {\r\n if (this.__is_left__widget_panel_collapsed()) {\r\n this.OpenWidgetWrapper();\r\n }\r\n if (this.state.selectedComponent === activeAction) {\r\n } else {\r\n this.setState({\r\n selectedComponent: activeAction,\r\n componentTitle: activeAction,\r\n activeAction,\r\n });\r\n }\r\n }\r\n\r\n renderSelectedFeature(selectedFeature) {\r\n if (!selectedFeature) return '';\r\n\r\n const Feature = Features[selectedFeature];\r\n\r\n return ;\r\n }\r\n\r\n __renderComponent(selectedComponent) {\r\n return this.renderSelectedFeature(selectedComponent);\r\n }\r\n\r\n __getHeaderTitle = () => {\r\n // replace camel case component name with space\r\n return this.state.componentTitle\r\n .replace(/([A-Z]+)/g, ' $1')\r\n .replace(/([A-Z][a-z])/g, ' $1');\r\n };\r\n\r\n openModal() {\r\n this.setState({\r\n infoModalOpen: true,\r\n });\r\n }\r\n\r\n closeModal() {\r\n this.setState({\r\n infoModalOpen: false,\r\n });\r\n }\r\n\r\n _renderAssetSearchFeatures() {\r\n if (this.state.isAuthorized && this.state.accessLevel > 1) {\r\n return (\r\n }\r\n onClick={() => this.actionSelected('AssetSearch')}\r\n active={this.state.activeAction === 'AssetSearch'}\r\n >\r\n Asset Search\r\n \r\n );\r\n }\r\n }\r\n\r\n _renderAlertFeature() {\r\n if (this.state.isAuthorized && this.state.accessLevel > 1) {\r\n return (\r\n }\r\n onClick={() => this.actionSelected('Alerts')}\r\n active={this.state.activeAction === 'Alerts'}\r\n >\r\n Alerts\r\n \r\n );\r\n }\r\n }\r\n\r\n render() {\r\n const docsModalZIndex = { zIndex: 1001 };\r\n const __stylePanelHeader = {\r\n position: 'relative',\r\n backgroundColor: '#e0e0e0',\r\n padding: '15px',\r\n textAlign: 'left',\r\n fontSize: '1.2rem',\r\n fontWeight: 'bold',\r\n borderBottom: '1px solid #f3f3f3',\r\n };\r\n const __styleClosePanelBtn = {\r\n position: 'absolute',\r\n width: '50px',\r\n top: '0',\r\n right: '0',\r\n height: '100%',\r\n fontWeight: '100',\r\n textAlign: 'center',\r\n cursor: 'pointer',\r\n };\r\n const __styleCloseBtnText = {\r\n position: 'relative',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n };\r\n// const _sectionNavScroll = {\r\n// position: 'absolute',\r\n// top: '0',\r\n// bottom: '0',\r\n// width: '100%',\r\n// overflow: 'auto',\r\n// };\r\n\r\n// const _sectionNavContent = {\r\n// position: 'relative',\r\n// };\r\n return (\r\n \r\n \r\n\r\n \r\n\r\n
\r\n \r\n OK\r\n ,\r\n ]}\r\n >\r\n

\r\n The user agrees to the following terms and conditions associated\r\n with the use of any data from this website. The data contained on\r\n this website are for the most part acquired from the County GIS\r\n auditor site and are made available as a public service and for\r\n reference purposes only.\r\n

\r\n

\r\n The data are provided on an “AS IS” basis without any warranty,\r\n whether implied or expressed. While our office utilizes its best\r\n efforts to provide accurate data and mapping information, accuracy\r\n and completeness are not guaranteed. The information and data are\r\n not intended to serve as a substitute for the services provided by\r\n the county auditor.\r\n

\r\n

\r\n The user affirms that the use of this data will be strictly\r\n limited to governmental purposes. The user affirms that the data\r\n for the City or County will not be released or provided to any\r\n other entity without the prior written approval of the City.\r\n

\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default LeftNav;\r\n","import React, { Component, Fragment } from 'react';\r\n\r\n\r\nclass UtilityToggler extends Component {\r\n\r\n constructor(props){\r\n super();\r\n this.state = { //hardcoded\r\n Telecom: 'Telecome',\r\n Electric: 'Electric',\r\n Water: 'Water',\r\n Storm: 'Storm',\r\n Sewer: 'Sanitary',\r\n Lights: 'Lights',\r\n Contours: 'Contours'\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n //console.log(this.props);\r\n }\r\n\r\n __toggleContours(e) {\r\n const mapLayers = this.props.mapview.map.layers.items.filter((l) => {\r\n return l.id === '1703a318545-contours'; //HARDCODED\r\n });\r\n const contourLayer = mapLayers[0];\r\n contourLayer.visible = e.target.checked;\r\n }\r\n\r\n __toggleUtility(e, layerName) {\r\n const utilityLayers = this.props.mapview.map.layers.items.filter((l) => {\r\n return l.id === '1703a0495d2-util'; //HARDCODED\r\n });\r\n\r\n const _rootLayer = utilityLayers[0];\r\n // _rootLayer.visible = e.target.checked;\r\n if(!_rootLayer.visible) {\r\n _rootLayer.visible = e.target.checked; // layer root\r\n }\r\n \r\n _rootLayer.sublayers.items.map((l) => {\r\n if(l.title.toUpperCase() === layerName.toUpperCase()) {\r\n // console.log(l);\r\n l.visible = e.target.checked; // layer root\r\n const _recursiveFunc = (layers) => {\r\n layers.map((ly) => {\r\n if(ly.sublayers) {\r\n _recursiveFunc(ly.sublayers.items);\r\n }\r\n else {\r\n ly.visible = e.target.checked;\r\n }\r\n })\r\n };\r\n _recursiveFunc(l.sublayers.items);\r\n }\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
    \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default UtilityToggler;\r\n","import React, { Component, Fragment } from 'react';\r\nimport { loadModules } from 'esri-loader';\r\nimport Form, {\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n Fieldset,\r\n Legend,\r\n} from 'calcite-react/Form';\r\nimport Panel, { PanelTitle, PanelText } from 'calcite-react/Panel';\r\nimport TextField from 'calcite-react/TextField';\r\nimport Tabs, {\r\n TabNav,\r\n TabTitle,\r\n TabContents,\r\n TabSection,\r\n} from 'calcite-react/Tabs';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport { SketchPicker, CompactPicker, AlphaPicker } from 'react-color';\r\n\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nimport './sketching.css';\r\n\r\nconst DRAWINGS_KEY = 'arcgis-local-drawings';\r\n\r\nclass Sketching extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n graphic: null,\r\n drawingShape: '',\r\n isEditGraphic: false,\r\n isRectangleGraphic: false,\r\n isCircleGraphic: false,\r\n isPointGraphic: false,\r\n pointColor: '#a00b0bff',\r\n size: 20,\r\n width: 2,\r\n text: 'Sample Text',\r\n TextSymbol: {\r\n type: 'text',\r\n text: 'Sample Text',\r\n font: { size: 20 },\r\n color: { r: 159, g: 5, b: 0, a: 1 },\r\n },\r\n SimpleMarkerSymbol: {\r\n type: 'simple-marker',\r\n style: 'cross',\r\n outline: { width: 2, color: [160, 11, 11, 1] }, // #cbed92ff\r\n size: 20,\r\n },\r\n SimpleLineSymbol: {\r\n type: 'simple-line',\r\n width: 2,\r\n color: [253, 7, 7, 1],\r\n }, //#fd0707ff\r\n SimpleFillSymbol: {\r\n type: 'simple-fill',\r\n outline: { width: 2, color: [176, 13, 13, 1] },\r\n color: [233, 101, 101, 0.25],\r\n },\r\n opacity: 1,\r\n pointMarker: {\r\n type: 'simple-marker',\r\n style: 'cross',\r\n outline: { width: 2, color: [160, 11, 11, 1] },\r\n size: 20,\r\n },\r\n graphicName: 'My Graphic',\r\n graphicDescription: 'my graphic description',\r\n\r\n userGLayer: null,\r\n sketchViewModel: null,\r\n selectedColor: '#A00B0B',\r\n selectedPolygonColor: { r: 159, g: 5, b: 0, a: 1 },\r\n selectedTextColor: { r: 159, g: 5, b: 0, a: 1 },\r\n activeTabIndex: 0,\r\n };\r\n this.onTabChange = this.onTabChange.bind(this);\r\n }\r\n onTabChange(index) {\r\n this.setState({ activeTabIndex: index });\r\n }\r\n\r\n componentDidMount() {\r\n loadModules([\r\n 'esri/widgets/Sketch/SketchViewModel',\r\n 'esri/layers/GraphicsLayer',\r\n ]).then(([SketchViewModel, GraphicsLayer]) => {\r\n const userGLayer = this.props.mapview.map.findLayerById('userGraphics');\r\n\r\n this.props.mapview.when(() => {\r\n const sketchViewModel = new SketchViewModel({\r\n layer: userGLayer,\r\n view: this.props.mapview,\r\n pointSymbol: this.state.SimpleMarkerSymbol,\r\n polylineSymbol: this.state.SimpleLineSymbol,\r\n polygonSymbol: this.state.SimpleFillSymbol,\r\n creationMode: 'single',\r\n snappingOptions: {\r\n // autocasts as SnappingOptions()\r\n enabled: true, // snapping will be on by default\r\n // feature snapping will be enabled on the GraphicsLayer\r\n featureSources: [{ layer: userGLayer }],\r\n },\r\n });\r\n\r\n sketchViewModel.on('create', (e) => {\r\n switch (e.state.toLowerCase()) {\r\n case 'active':\r\n switch (e.tool.toLowerCase()) {\r\n case 'point':\r\n e.graphic.symbol = this.state.SimpleMarkerSymbol;\r\n break;\r\n case 'polyline':\r\n e.graphic.symbol = this.state.SimpleLineSymbol;\r\n break;\r\n case 'polygon':\r\n case 'rectangle':\r\n case 'circle':\r\n e.graphic.symbol = this.state.SimpleFillSymbol;\r\n break;\r\n }\r\n\r\n break;\r\n case 'complete':\r\n //console.log(e);\r\n this.updateSketching(e.graphic);\r\n this.setActiveButton();\r\n this._saveUserDrawingsItems();\r\n this.setState({ drawingShape: '' });\r\n break;\r\n\r\n case 'cancel':\r\n break;\r\n }\r\n });\r\n\r\n sketchViewModel.on('update', (evt) => {\r\n //console.log(evt.graphics[0]);\r\n switch (evt.state.toLowerCase()) {\r\n case 'start':\r\n // check if updating text\r\n this.setState({\r\n drawingShape: evt.graphics[0].attributes.isTextGraphic\r\n ? 'text'\r\n : evt.graphics[0].geometry.type,\r\n graphicName: evt.graphics[0].attributes.name,\r\n graphicDescription: evt.graphics[0].attributes.description,\r\n isEditGraphic: true,\r\n isGraphicUpdate: true,\r\n //isPointGraphic: true,\r\n isGraphicInfo: true,\r\n });\r\n break;\r\n\r\n case 'active':\r\n switch (evt.graphics[0].geometry.type) {\r\n case 'point':\r\n if (evt.graphics[0].attributes.isTextGraphic) {\r\n var symbol = {\r\n type: 'text',\r\n text: this.state.TextSymbol.text,\r\n color: this.state.TextSymbol.color,\r\n xoffset: 3,\r\n yoffset: 3,\r\n font: {\r\n size: this.state.TextSymbol.font.size,\r\n //family: this._textSymbol.font.family,\r\n //weight: this._textSymbol.font.weight\r\n },\r\n };\r\n var sketchViewModel = this.state.sketchViewModel;\r\n sketchViewModel.pointSymbol = symbol;\r\n this.setState({\r\n sketchViewModel,\r\n TextSymbol: {\r\n type: 'text',\r\n text: symbol.text,\r\n font: { size: symbol.font.size },\r\n color: this.state.selectedTextColor,\r\n },\r\n });\r\n } else {\r\n var SimpleMarkerSymbol = this.state.SimpleMarkerSymbol;\r\n SimpleMarkerSymbol = evt.graphics[0].symbol;\r\n this.setState({ SimpleMarkerSymbol });\r\n }\r\n\r\n break;\r\n case 'polyline':\r\n var SimpleLineSymbol = this.state.SimpleLineSymbol;\r\n SimpleLineSymbol = evt.graphics[0].symbol;\r\n this.setState({ SimpleLineSymbol });\r\n break;\r\n case 'polygon':\r\n case 'rectangle':\r\n case 'circle':\r\n var SimpleFillSymbol = this.state.SimpleFillSymbol;\r\n SimpleFillSymbol = evt.graphics[0].symbol;\r\n this.setState({ SimpleFillSymbol });\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n\r\n case 'complete':\r\n // console.log(evt);\r\n //attributes uppdate\r\n evt.graphics[0].attributes.name = this.state.graphicName;\r\n evt.graphics[0].attributes.description =\r\n this.state.graphicDescription;\r\n\r\n console.log(evt.graphics[0]);\r\n // symbol update\r\n switch (evt.graphics[0].geometry.type) {\r\n case 'point':\r\n if (evt.graphics[0].attributes.isTextGraphic) {\r\n var symbol = {\r\n type: 'text',\r\n text: this.state.TextSymbol.text,\r\n color: this.state.TextSymbol.color,\r\n xoffset: 3,\r\n yoffset: 3,\r\n font: {\r\n size: this.state.TextSymbol.font.size,\r\n //family: this._textSymbol.font.family,\r\n //weight: this._textSymbol.font.weight\r\n },\r\n };\r\n evt.graphics[0].symbol = symbol;\r\n } else {\r\n evt.graphics[0].symbol = this.state.SimpleMarkerSymbol;\r\n }\r\n\r\n break;\r\n case 'polyline':\r\n evt.graphics[0].symbol = this.state.SimpleLineSymbol;\r\n break;\r\n case 'polygon':\r\n case 'rectangle':\r\n case 'circle':\r\n evt.graphics[0].symbol = this.state.SimpleFillSymbol;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n this._saveUserDrawingsItems();\r\n this.setState({\r\n drawingShape: '',\r\n isEditGraphic: false,\r\n isGraphicUpdate: false,\r\n isPointGraphic: false,\r\n isGraphicInfo: false,\r\n });\r\n break;\r\n }\r\n });\r\n\r\n sketchViewModel.on('delete', (e) => {\r\n this._saveUserDrawingsItems();\r\n });\r\n\r\n this.setState({ sketchViewModel, userGLayer });\r\n this.__initDrawButtonsClick();\r\n });\r\n });\r\n }\r\n\r\n /* shouldComponentUpdate(nextProps, nextState) {\r\n for (let i in nextState) {\r\n if (nextState[i] !== this.state[i]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n } */\r\n\r\n updateSketching(graphic) {\r\n const __attributes = {\r\n id: uuidv4(),\r\n name: this.state.graphicName,\r\n description: this.state.graphicDescription,\r\n isTextGraphic: this.state.drawingShape === 'text' ? true : false,\r\n };\r\n graphic.attributes = __attributes;\r\n this.setState({\r\n graphic: graphic,\r\n isEditGraphic: false,\r\n isGraphicUpdate: false,\r\n userGLayer: this.props.mapview.map.findLayerById('userGraphics'),\r\n });\r\n }\r\n handleColorChangeComplete = (shapeType, color) => {\r\n var symbol,\r\n _sketch = this.state.sketchViewModel;\r\n switch (shapeType) {\r\n case 'point':\r\n symbol = this.state.SimpleMarkerSymbol;\r\n symbol.outline.color = [\r\n color.rgb.r,\r\n color.rgb.g,\r\n color.rgb.b,\r\n color.rgb.a,\r\n ];\r\n _sketch.pointSymbol = symbol;\r\n this.setState({\r\n SimpleMarkerSymbol: symbol,\r\n });\r\n break;\r\n\r\n case 'polyline':\r\n symbol = this.state.SimpleLineSymbol;\r\n symbol.color = [color.rgb.r, color.rgb.g, color.rgb.b, color.rgb.a];\r\n _sketch.polylineSymbol = symbol;\r\n this.setState({\r\n SimpleLineSymbol: symbol,\r\n });\r\n break;\r\n }\r\n\r\n this.setState({\r\n selectedColor: color.hex,\r\n sketchViewModel: _sketch,\r\n });\r\n };\r\n\r\n handlePolygonColorChange = (shape, value) => {\r\n var symbol = this.state.SimpleFillSymbol;\r\n var _sketch = this.state.sketchViewModel;\r\n\r\n switch (shape) {\r\n case 'outline-width':\r\n symbol.outline.width = value;\r\n break;\r\n\r\n case 'outline-color':\r\n symbol.outline.color = [\r\n value.rgb.r,\r\n value.rgb.g,\r\n value.rgb.b,\r\n value.rgb.a,\r\n ];\r\n break;\r\n case 'fill-color':\r\n symbol.color = [value.rgb.r, value.rgb.g, value.rgb.b, value.rgb.a];\r\n break;\r\n case 'fill-opacity':\r\n symbol.color = [value.rgb.r, value.rgb.g, value.rgb.b, value.rgb.a];\r\n break;\r\n }\r\n\r\n _sketch.polygonSymbol = symbol;\r\n this.setState({\r\n selectedPolygonColor: value.rgb,\r\n sketchViewModel: _sketch,\r\n });\r\n };\r\n\r\n handleTextChange = (shape, value) => {\r\n var symbol = {\r\n type: 'text',\r\n text: this.state.TextSymbol.text,\r\n color: this.state.TextSymbol.color,\r\n xoffset: 3,\r\n yoffset: 3,\r\n font: {\r\n size: this.state.TextSymbol.font.size,\r\n //family: this._textSymbol.font.family,\r\n //weight: this._textSymbol.font.weight\r\n },\r\n };\r\n var _sketch = this.state.sketchViewModel;\r\n\r\n switch (shape) {\r\n case 'text-value':\r\n symbol.text = value;\r\n break;\r\n\r\n case 'text-size':\r\n symbol.font.size = value;\r\n break;\r\n case 'text-color':\r\n symbol.color = [value.rgb.r, value.rgb.g, value.rgb.b, value.rgb.a];\r\n break;\r\n }\r\n\r\n _sketch.pointSymbol = symbol;\r\n this.setState({\r\n selectedTextColor: value.rgb,\r\n sketchViewModel: _sketch,\r\n TextSymbol: {\r\n type: 'text',\r\n text: symbol.text,\r\n font: { size: symbol.font.size },\r\n color: this.state.selectedTextColor,\r\n },\r\n });\r\n };\r\n\r\n handleSizeOrWidthChange = (shapeType, value) => {\r\n var symbol;\r\n var _sketch = this.state.sketchViewModel;\r\n switch (shapeType) {\r\n case 'point':\r\n symbol = this.state.SimpleMarkerSymbol;\r\n symbol.size = value;\r\n _sketch.pointSymbol = symbol;\r\n break;\r\n\r\n case 'polyline':\r\n symbol = this.state.SimpleLineSymbol;\r\n symbol.width = value;\r\n _sketch.polylineSymbol = symbol;\r\n break;\r\n }\r\n\r\n this.setState({\r\n sketchViewModel: _sketch,\r\n });\r\n };\r\n\r\n handleOpacityChange = (e) => {\r\n console.log(e);\r\n };\r\n\r\n __initDrawButtonsClick() {\r\n const drawButtons = document.getElementsByClassName('esri-sketch__button');\r\n for (let index = 0; index < drawButtons.length; index++) {\r\n const BtnElement = drawButtons[index];\r\n BtnElement.addEventListener('click', (e) => {\r\n this.__setUpClickHandler(e);\r\n });\r\n }\r\n }\r\n\r\n __cancelDrawingAction = () => {\r\n this.state.sketchViewModel.cancel();\r\n document.getElementById('btnDraw').click();\r\n };\r\n\r\n __setUpClickHandler(btnElement) {\r\n this.setState({\r\n drawingShape: '',\r\n });\r\n switch (btnElement.target.title.toLowerCase()) {\r\n case 'draw a point':\r\n if (this.state.sketchViewModel) {\r\n var symbol = this.state.SimpleMarkerSymbol;\r\n var _sketch = this.state.sketchViewModel;\r\n _sketch.pointSymbol = symbol;\r\n this.setState({\r\n sketchViewModel: _sketch,\r\n drawingShape: 'point',\r\n });\r\n } else {\r\n this.setState({\r\n drawingShape: 'point',\r\n });\r\n }\r\n this.state.sketchViewModel.create('point');\r\n this.setActiveButton(btnElement.target);\r\n break;\r\n case 'draw a polyline':\r\n if (this.state.sketchViewModel) {\r\n var _sketch = this.state.sketchViewModel;\r\n var symbol = this.state.SimpleLineSymbol;\r\n\r\n _sketch.polylineSymbol = symbol;\r\n\r\n this.setState({\r\n sketchViewModel: _sketch,\r\n drawingShape: 'polyline',\r\n });\r\n } else {\r\n this.setState({\r\n drawingShape: 'polyline',\r\n });\r\n }\r\n this.state.sketchViewModel.create('polyline');\r\n this.setActiveButton(btnElement.target);\r\n break;\r\n case 'draw a polygon':\r\n this.setState({\r\n drawingShape: 'polygon',\r\n });\r\n this.state.sketchViewModel.create('polygon');\r\n this.setActiveButton(btnElement.target);\r\n break;\r\n case 'draw a rectangle':\r\n // show rectangle input\r\n this.setState({\r\n drawingShape: 'rectangle',\r\n });\r\n this.state.sketchViewModel.create('rectangle');\r\n this.setActiveButton(btnElement.target);\r\n break;\r\n case 'draw a circle':\r\n // show circle input\r\n this.setState({\r\n drawingShape: 'circle',\r\n });\r\n this.state.sketchViewModel.create('circle');\r\n this.setActiveButton(btnElement.target);\r\n break;\r\n case 'add text':\r\n if (this.state.sketchViewModel) {\r\n var symbol = {\r\n type: 'text',\r\n text: this.state.TextSymbol.text,\r\n color: this.state.TextSymbol.color,\r\n xoffset: 3,\r\n yoffset: 3,\r\n font: {\r\n size: this.state.TextSymbol.font.size,\r\n },\r\n };\r\n var _sketch = this.state.sketchViewModel;\r\n _sketch.pointSymbol = symbol;\r\n this.setState({\r\n sketchViewModel: _sketch,\r\n drawingShape: 'text',\r\n });\r\n } else {\r\n this.setState({\r\n drawingShape: 'text',\r\n });\r\n }\r\n\r\n this.state.sketchViewModel.create('point');\r\n this.setActiveButton(btnElement.target);\r\n break;\r\n case 'draw an arrow':\r\n this.setActiveButton(btnElement.target);\r\n break;\r\n case 'undo':\r\n this.setState({\r\n drawingShape: '',\r\n });\r\n this.setActiveButton();\r\n this.state.sketchViewModel.undo();\r\n break;\r\n case 'redo':\r\n this.setState({\r\n drawingShape: '',\r\n });\r\n this.setActiveButton();\r\n this.state.sketchViewModel.redo();\r\n break;\r\n case 'draw settings':\r\n console.log('Alright...');\r\n // this.state.sketchViewModel.redo();\r\n break;\r\n }\r\n }\r\n\r\n setActiveButton(selectedButton) {\r\n // focus the view to activate keyboard shortcuts for sketching\r\n this.props.mapview.focus();\r\n const elements = document.getElementsByClassName(\r\n 'esri-sketch__button-active'\r\n );\r\n for (let i = 0; i < elements.length; i++) {\r\n elements[i].classList.remove('esri-sketch__button-active');\r\n }\r\n if (selectedButton) {\r\n selectedButton.classList.add('esri-sketch__button-active');\r\n }\r\n }\r\n\r\n _saveUserDrawingsItems() {\r\n const userGLayer = this.props.mapview.map.findLayerById('userGraphics');\r\n const userDrawings = userGLayer.graphics.items;\r\n\r\n if (userDrawings.length > 0) {\r\n loadModules(['esri/Graphic']).then(([Graphic]) => {\r\n if (localStorage.getItem(DRAWINGS_KEY) !== undefined) {\r\n localStorage.removeItem(DRAWINGS_KEY);\r\n }\r\n const rawGraphics = [];\r\n userGLayer.graphics.items.map((graphic) => {\r\n const _gr = new Graphic({\r\n geometry: graphic.geometry,\r\n symbol: graphic.symbol,\r\n attributes: graphic.attributes,\r\n });\r\n rawGraphics.push(_gr.toJSON());\r\n });\r\n localStorage.setItem(DRAWINGS_KEY, JSON.stringify(rawGraphics));\r\n });\r\n } else {\r\n if (localStorage.getItem(DRAWINGS_KEY)) {\r\n localStorage.removeItem(DRAWINGS_KEY);\r\n }\r\n }\r\n\r\n this.props.setUserGraphics(userDrawings);\r\n }\r\n\r\n __deleteGraphic() {\r\n // console.log(this.state.userGLayer);\r\n this.state.sketchViewModel.delete();\r\n this.state.sketchViewModel.complete();\r\n }\r\n\r\n _saveGraphicUpdate() {\r\n this.state.sketchViewModel.complete();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n {/*
\r\n \r\n
*/}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n 1 Feature\r\n \r\n
\r\n
\r\n
\r\n this.__deleteGraphic()}\r\n >\r\n
\r\n
\r\n\r\n \r\n {/* Sketching a rectangle with input width and height> */}\r\n {/* Width:\r\n \r\n \r\n provide width in ft\r\n \r\n\r\n Height:\r\n \r\n \r\n provide height in ft\r\n */}\r\n \r\n \r\n {/* Sketching a circle with input radius > */}\r\n {/* Radius:\r\n \r\n \r\n provide radius in ft\r\n */}\r\n \r\n \r\n \r\n Name\r\n \r\n this.setState({ graphicName: e.target.value })\r\n }\r\n />\r\n \r\n\r\n \r\n Description\r\n \r\n this.setState({ graphicDescription: e.target.value })\r\n }\r\n />\r\n \r\n \r\n\r\n \r\n
\r\n \r\n \r\n Point Color\r\n Point Size\r\n \r\n \r\n \r\n Color:\r\n \r\n this.handleColorChangeComplete('point', e)\r\n }\r\n />\r\n \r\n \r\n Size:\r\n \r\n this.handleSizeOrWidthChange('point', e.target.value)\r\n }\r\n />\r\n \r\n \r\n \r\n
\r\n \r\n\r\n \r\n
\r\n Display Text:\r\n \r\n this.handleTextChange('text-value', e.target.value)\r\n }\r\n />\r\n Font Size:\r\n \r\n this.handleTextChange('text-size', e.target.value)\r\n }\r\n />\r\n\r\n Font Color:\r\n \r\n this.handleTextChange('text-color', e)\r\n }\r\n />\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n Line Color\r\n Line Width\r\n \r\n \r\n \r\n Color:\r\n \r\n this.handleColorChangeComplete('polyline', e)\r\n }\r\n />\r\n \r\n \r\n Width:\r\n \r\n this.handleSizeOrWidthChange(\r\n 'polyline',\r\n e.target.value\r\n )\r\n }\r\n />\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n Outline\r\n Fill\r\n \r\n \r\n \r\n Outline Width:\r\n \r\n this.handlePolygonColorChange(\r\n 'outline-width',\r\n e.target.value\r\n )\r\n }\r\n />\r\n Outline Color:\r\n \r\n this.handlePolygonColorChange('outline-color', e)\r\n }\r\n />\r\n \r\n \r\n Fill Color:\r\n \r\n this.handlePolygonColorChange('fill-color', e)\r\n }\r\n />\r\n Opacity:\r\n \r\n this.handlePolygonColorChange('fill-opacity', e)\r\n }\r\n />\r\n \r\n \r\n \r\n
\r\n \r\n\r\n \r\n \r\n \r\n this._saveGraphicUpdate()}\r\n style={{\r\n display: this.state.isGraphicUpdate ? 'block' : 'none',\r\n }}\r\n >\r\n Save graphic updates\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Sketching;\r\n","import { loadModules } from \"esri-loader\";\r\nimport React, { useEffect } from \"react\";\r\n\r\nconst DRAWINGS_KEY = \"arcgis-local-drawings\";\r\n\r\nconst options = { version: \"4.22\", css: false };\r\n\r\nconst DrawingTool = ({ view, setUserGraphics }) => {\r\n const __dispatchEvent = (evt) => {\r\n //console.log(evt);\r\n if (evt.state === \"complete\") {\r\n const graphicsLayer = view.map.findLayerById(\"userGraphics\");\r\n const { graphics } = graphicsLayer;\r\n __savePersistentGraphics(graphics.items);\r\n }\r\n };\r\n\r\n const __savePersistentGraphics = (graphics) => {\r\n if (localStorage.getItem(DRAWINGS_KEY) !== undefined) {\r\n localStorage.removeItem(DRAWINGS_KEY);\r\n }\r\n if (graphics.length > 0) {\r\n localStorage.setItem(DRAWINGS_KEY, JSON.stringify(graphics));\r\n }\r\n };\r\n\r\n const initSketchViewModel = () => {\r\n loadModules(\r\n [\"esri/widgets/Sketch/SketchViewModel\", \"esri/widgets/Expand\"],\r\n options\r\n ).then(([SketchViewModel, Expand]) => {\r\n const stylerExpand = new Expand({\r\n view: view,\r\n content: document.getElementById(\"propPanel\"),\r\n expanded: true,\r\n expandIconClass: \"esri-icon-edit\",\r\n expandTooltip: \"Open Styler\",\r\n });\r\n\r\n const graphicsLayer = view.map.findLayerById(\"userGraphics\");\r\n //setGraphicsLayer(graphicsLayer);\r\n\r\n const sketchVM = new SketchViewModel({\r\n view: view,\r\n layer: graphicsLayer,\r\n container: \"propPanel\",\r\n });\r\n\r\n // dispatch events\r\n sketchVM.on(\"create\", __dispatchEvent);\r\n sketchVM.on(\"delete\", __dispatchEvent);\r\n sketchVM.on(\"update\", __dispatchEvent);\r\n\r\n view.when(() => {\r\n // Configure the UI to use the default property values from our SketchViewModel\r\n setDefaultCreateOptions(sketchVM);\r\n setDefaultUpdateOptions(sketchVM);\r\n setDefaultPointSymbol(sketchVM);\r\n setDefaultPolylineSymbol(sketchVM);\r\n setDefaultPolygonSymbol(sketchVM);\r\n });\r\n\r\n //view.ui.add(stylerExpand, \"top-right\");\r\n initActionButtons(sketchVM);\r\n });\r\n };\r\n\r\n const initActionButtons = (sketchVM) => {\r\n // Connecting the calcite actions with their corresponding SketchViewModel tools\r\n const pointBtn = document.getElementById(\"pointBtn\");\r\n const polylineBtn = document.getElementById(\"polylineBtn\");\r\n const polygonBtn = document.getElementById(\"polygonBtn\");\r\n const circleBtn = document.getElementById(\"circleBtn\");\r\n const rectangleBtn = document.getElementById(\"rectangleBtn\");\r\n const clearBtn = document.getElementById(\"clearBtn\");\r\n const selectBtn = document.getElementById(\"selectBtn\");\r\n\r\n pointBtn.onclick = () => {\r\n sketchVM.create(\"point\");\r\n };\r\n polylineBtn.onclick = () => {\r\n sketchVM.create(\"polyline\");\r\n };\r\n polygonBtn.onclick = () => {\r\n sketchVM.create(\"polygon\");\r\n };\r\n circleBtn.onclick = () => {\r\n sketchVM.create(\"circle\");\r\n };\r\n rectangleBtn.onclick = () => {\r\n sketchVM.create(\"rectangle\");\r\n };\r\n clearBtn.onclick = () => {\r\n sketchVM.layer.removeAll();\r\n };\r\n selectBtn.onclick = () => {\r\n sketchVM.cancel();\r\n };\r\n };\r\n\r\n useEffect(() => {\r\n initSketchViewModel();\r\n }, []);\r\n\r\n // Calcite UI logic\r\n // Auto-populate UI with default SketchViewModel properties set.\r\n // If no default values are set, UI will be set accordingly.\r\n const setDefaultCreateOptions = (sketchVM) => {\r\n const options = sketchVM.defaultCreateOptions;\r\n const modeSelect = document.getElementById(\"mode-select\");\r\n\r\n // set default mode in the select element if defined\r\n if (options?.mode) {\r\n setDefaultOption(modeSelect, options.mode);\r\n }\r\n\r\n // handles mode select changes\r\n modeSelect.addEventListener(\"calciteSelectChange\", () => {\r\n sketchVM.defaultCreateOptions[\"mode\"] = modeSelect.selectedOption.value;\r\n });\r\n };\r\n\r\n const setDefaultUpdateOptions = (sketchVM) => {\r\n const options = sketchVM.defaultUpdateOptions;\r\n const rotationSwitch = document.getElementById(\"rotationSwitch\");\r\n const scaleSwitch = document.getElementById(\"scaleSwitch\");\r\n const multipleSelectionSwitch = document.getElementById(\r\n \"multipleSelectionSwitch\"\r\n );\r\n const aspectRatioSwitch = document.getElementById(\"aspectRatioSwitch\");\r\n\r\n // set the UI elements to the default property values\r\n rotationSwitch.switched = options.enableRotation;\r\n scaleSwitch.switched = options.enableScaling;\r\n multipleSelectionSwitch.switched = options.multipleSelectionEnabled;\r\n aspectRatioSwitch.switched = options.preserveAspectRatio;\r\n\r\n // event listeners for UI interactions\r\n rotationSwitch.addEventListener(\"calciteSwitchChange\", (evt) => {\r\n sketchVM.defaultUpdateOptions.enableRotation = evt.target.switched;\r\n });\r\n scaleSwitch.addEventListener(\"calciteSwitchChange\", (evt) => {\r\n sketchVM.defaultUpdateOptions.enableScaling = evt.target.switched;\r\n });\r\n multipleSelectionSwitch.addEventListener(\"calciteSwitchChange\", (evt) => {\r\n sketchVM.defaultUpdateOptions.multipleSelectionEnabled =\r\n evt.target.switched;\r\n });\r\n aspectRatioSwitch.addEventListener(\"calciteSwitchChange\", (evt) => {\r\n sketchVM.defaultUpdateOptions.preserveAspectRatio = evt.target.switched;\r\n });\r\n };\r\n\r\n const setDefaultPointSymbol = (sketchVM) => {\r\n const pointSymbol = sketchVM.pointSymbol;\r\n const pointStyleSelect = document.getElementById(\"point-style-select\");\r\n const pointSymbolOutlineBtn = document.getElementById(\"point-outline-btn\");\r\n const pointSizeInput = document.getElementById(\"point-size-input\");\r\n const pointXOffsetInput = document.getElementById(\"point-xoffset-input\");\r\n const pointYOffsetInput = document.getElementById(\"point-yoffset-input\");\r\n const pointAngleInput = document.getElementById(\"point-angle-input\");\r\n const pointColorInput = document.getElementById(\"point-color-input\");\r\n const slsWidthInput = document.getElementById(\"point-sls-width-input\");\r\n const slsColorInput = document.getElementById(\"point-sls-color-input\");\r\n\r\n pointSizeInput.value = pointSymbol.size;\r\n pointXOffsetInput.value = pointSymbol.xoffset;\r\n pointYOffsetInput.value = pointSymbol.yoffset;\r\n pointAngleInput.value = pointSymbol.angle;\r\n slsWidthInput.value = pointSymbol.outline.width;\r\n\r\n // set default style in the select element\r\n setDefaultOption(pointStyleSelect, pointSymbol.style);\r\n\r\n pointSizeInput.addEventListener(\"calciteInputInput\", (evt) => {\r\n pointSymbol.size = parseInt(evt.target.value);\r\n });\r\n pointXOffsetInput.addEventListener(\"calciteInputInput\", (evt) => {\r\n pointSymbol.xoffset = parseInt(evt.target.value);\r\n });\r\n pointYOffsetInput.addEventListener(\"calciteInputInput\", (evt) => {\r\n pointSymbol.yoffset = parseInt(evt.target.value);\r\n });\r\n pointAngleInput.addEventListener(\"calciteInputInput\", (evt) => {\r\n pointSymbol.angle = parseInt(evt.target.value);\r\n });\r\n pointStyleSelect.addEventListener(\"calciteSelectChange\", () => {\r\n pointSymbol.style = pointStyleSelect.selectedOption.value;\r\n });\r\n pointColorInput.addEventListener(\"calciteInputInput\", (evt) => {\r\n pointSymbol.color = evt.target.value;\r\n });\r\n pointSymbolOutlineBtn.onclick = () => {\r\n openModal(\"point-outline-modal\");\r\n };\r\n // point outline modal event listeners\r\n slsWidthInput.addEventListener(\"calciteInputInput\", (evt) => {\r\n pointSymbol.outline.width = parseInt(evt.target.value);\r\n });\r\n slsColorInput.addEventListener(\"calciteInputInput\", (evt) => {\r\n pointSymbol.outline.color = evt.target.value;\r\n });\r\n };\r\n\r\n const setDefaultPolylineSymbol = (sketchVM) => {\r\n const lineSymbol = sketchVM.polylineSymbol;\r\n const lineStyleSelect = document.getElementById(\"line-style-select\");\r\n const lineWidthInput = document.getElementById(\"line-width-input\");\r\n const lineColorInput = document.getElementById(\"line-color-input\");\r\n\r\n lineWidthInput.value = lineSymbol.width;\r\n\r\n // set default style in the select element\r\n setDefaultOption(lineStyleSelect, lineSymbol.style);\r\n\r\n lineStyleSelect.addEventListener(\"calciteSelectChange\", () => {\r\n lineSymbol.style = lineStyleSelect.selectedOption.value;\r\n });\r\n lineWidthInput.addEventListener(\"calciteInputInput\", (evt) => {\r\n lineSymbol.width = parseInt(evt.target.value);\r\n });\r\n lineColorInput.addEventListener(\"calciteInputInput\", (evt) => {\r\n lineSymbol.color = evt.target.value;\r\n });\r\n };\r\n\r\n const hexToRgba = (hex, opacity) => {\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n if (result) {\r\n var r = parseInt(result[1], 16);\r\n var g = parseInt(result[2], 16);\r\n var b = parseInt(result[3], 16);\r\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\r\n }\r\n return null;\r\n };\r\n\r\n const setDefaultPolygonSymbol = (sketchVM) => {\r\n const polygonSymbol = sketchVM.polygonSymbol;\r\n const polygonStyleSelect = document.getElementById(\"polygon-style-select\");\r\n const polygonSymbolOutlineBtn = document.getElementById(\r\n \"polygon-outline-btn\"\r\n );\r\n const polygonColorInput = document.getElementById(\"polygon-color-input\");\r\n const slsStyleSelect = document.getElementById(\"polygon-sls-style-select\");\r\n const slsWidthInput = document.getElementById(\"polygon-sls-width-input\");\r\n const slsColorInput = document.getElementById(\"polygon-sls-color-input\");\r\n //const slsOpacityInput = document.getElementById(\"polygon-opacity-input\");\r\n slsWidthInput.value = polygonSymbol.outline.width;\r\n // set default style in the select element\r\n setDefaultOption(polygonStyleSelect, polygonSymbol.style);\r\n setDefaultOption(slsStyleSelect, polygonSymbol.outline.style);\r\n\r\n polygonStyleSelect.addEventListener(\"calciteSelectChange\", () => {\r\n polygonSymbol.style = polygonStyleSelect.selectedOption.value;\r\n });\r\n polygonColorInput.addEventListener(\"calciteInputInput\", (evt) => {\r\n //console.log(evt.target.value);\r\n polygonSymbol.color = evt.target.value; // \"rgba(30, 43, 204, 0.17)\"; //\r\n });\r\n polygonSymbolOutlineBtn.onclick = () => {\r\n openModal(\"polygon-outline-modal\");\r\n };\r\n // polygon outline modal event listeners\r\n slsStyleSelect.addEventListener(\"calciteSelectChange\", () => {\r\n polygonSymbol.outline.style = slsStyleSelect.selectedOption.value;\r\n });\r\n slsWidthInput.addEventListener(\"calciteInputInput\", (evt) => {\r\n polygonSymbol.outline.width = parseInt(evt.target.value);\r\n });\r\n slsColorInput.addEventListener(\"calciteInputInput\", (evt) => {\r\n polygonSymbol.outline.color = evt.target.value;\r\n });\r\n /* slsOpacityInput.addEventListener(\"calciteSliderChange\", (evt) => {\r\n console.log(evt.target.value);\r\n }); */\r\n };\r\n\r\n // function to auto-populate calcite select components\r\n const setDefaultOption = (selectElement, value) => {\r\n for (let i = 0; i < selectElement.children.length; i++) {\r\n let option = selectElement.children[i];\r\n if (option.value === value) {\r\n option.selected = true;\r\n }\r\n }\r\n };\r\n\r\n // displays the appropriate modals\r\n const openModal = (id) => {\r\n document.getElementById(id).active = true;\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* defaultCreateOptions */}\r\n \r\n \r\n mode\r\n \r\n \r\n choose mode\r\n \r\n click\r\n freehand\r\n hybrid\r\n \r\n \r\n \r\n\r\n {/* defaulteUpdateOptions */}\r\n \r\n \r\n enableRotation\r\n \r\n True\r\n \r\n False\r\n \r\n \r\n \r\n enableScaling\r\n \r\n True\r\n \r\n False\r\n \r\n \r\n \r\n preserveAspectRatio\r\n \r\n True\r\n \r\n False\r\n \r\n \r\n \r\n multipleSelectionEnabled\r\n \r\n True\r\n \r\n False\r\n \r\n \r\n \r\n\r\n {/* pointSymbol */}\r\n \r\n
\r\n \r\n style\r\n \r\n \r\n circle\r\n \r\n cross\r\n diamond\r\n square\r\n x\r\n \r\n \r\n \r\n color\r\n \r\n \r\n \r\n outline\r\n \r\n Set Outline\r\n \r\n \r\n \r\n size\r\n \r\n \r\n \r\n xoffset\r\n \r\n \r\n \r\n yoffset\r\n \r\n \r\n \r\n angle\r\n \r\n \r\n
\r\n
\r\n\r\n {/* polygonSymbol */}\r\n \r\n \r\n style\r\n \r\n \r\n choose a style\r\n \r\n \r\n backward-diagonal\r\n \r\n cross\r\n \r\n diagonal-cross\r\n \r\n \r\n forward-diagonal\r\n \r\n horizontal\r\n none\r\n vertical\r\n {/* solid */}\r\n \r\n \r\n \r\n outline\r\n \r\n Set Outline\r\n \r\n \r\n \r\n color\r\n \r\n \r\n {/* \r\n Fill transparency\r\n \r\n */}\r\n \r\n\r\n {/* polylineSymbol */}\r\n \r\n \r\n style\r\n \r\n \r\n choose a style\r\n \r\n dash\r\n dash-dot\r\n dot\r\n long-dash\r\n \r\n long-dash-dot\r\n \r\n \r\n long-dash-dot-dot\r\n \r\n none\r\n short-dash\r\n \r\n short-dash-dot\r\n \r\n \r\n short-dash-dot-dot\r\n \r\n short-dot\r\n solid\r\n \r\n \r\n \r\n width\r\n \r\n \r\n \r\n color\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n {/* modal point outline */}\r\n \r\n

SimpleLineSymbol

\r\n
\r\n \r\n width\r\n \r\n \r\n \r\n color\r\n \r\n \r\n
\r\n
\r\n\r\n {/* modal polygon outline */}\r\n \r\n

SimpleLineSymbol

\r\n
\r\n \r\n style\r\n \r\n \r\n choose a style\r\n \r\n dash\r\n dash-dot\r\n dot\r\n long-dash\r\n \r\n long-dash-dot\r\n \r\n \r\n long-dash-dot-dot\r\n \r\n none\r\n short-dash\r\n \r\n short-dash-dot\r\n \r\n \r\n short-dash-dot-dot\r\n \r\n short-dot\r\n solid\r\n \r\n \r\n \r\n width\r\n \r\n \r\n \r\n color\r\n \r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default DrawingTool;\r\n","import React, { Component, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport ReactDOM from 'react-dom';\r\nimport { loadModules } from 'esri-loader';\r\nimport { _mapViewAvailable } from '../../utils/map';\r\nimport UtilityToggler from '../togglers/UtilityToggler';\r\nimport Sketching from '../sketch/Sketching';\r\n\r\nimport ActionBar, {\r\n Action,\r\n ActionGroup,\r\n BottomActionGroup,\r\n} from 'calcite-react/ActionBar';\r\n\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\n\r\nimport SearchIcon from 'calcite-ui-icons-react/SearchIcon';\r\nimport LayerHideIcon from 'calcite-ui-icons-react/LayerHideIcon';\r\nimport MeasureIcon from 'calcite-ui-icons-react/MeasureIcon';\r\nimport PointIcon from 'calcite-ui-icons-react/PointIcon';\r\nimport PencilIcon from 'calcite-ui-icons-react/PencilIcon';\r\nimport AddInNewIcon from 'calcite-ui-icons-react/AddInNewIcon';\r\nimport HideEmptyIcon from 'calcite-ui-icons-react/HideEmptyIcon';\r\nimport MagnifyingGlassPlusIcon from 'calcite-ui-icons-react/MagnifyingGlassPlusIcon';\r\nimport RecentIcon from 'calcite-ui-icons-react/RecentIcon';\r\nimport EraseIcon from 'calcite-ui-icons-react/EraseIcon';\r\n\r\nimport swal from 'sweetalert';\r\n\r\nimport { _user_auth } from '../services/gis_service';\r\nimport { setgraphics } from '../../redux/reducers/graphics';\r\nimport DrawingTool from '../drawingTool/DrawingTool';\r\n\r\nexport class RightNav extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n collapsed: true,\r\n activeAction: '',\r\n activeModule: null,\r\n isAuthorized: false,\r\n };\r\n this.onToggleCollapse = this.onToggleCollapse.bind(this);\r\n this.actionSelected = this.actionSelected.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const __isAuth = _user_auth.isAuthorized();\r\n this.setState({ isAuthorized: __isAuth });\r\n }\r\n\r\n /* shouldComponentUpdate(nextProps, nextState) {\r\n for (let i in nextProps) {\r\n if (blacklist.includes(i)) continue;\r\n if (nextProps[i] !== this.props[i]) {\r\n return true;\r\n }\r\n }\r\n for (let i in nextState) {\r\n if (nextState[i] !== this.state[i]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n } */\r\n\r\n onToggleCollapse() {\r\n this.setState({ collapsed: !this.state.collapsed });\r\n }\r\n\r\n __closeModule() {\r\n if (this.state.activeModule.iconClass === 'esri-icon-measure') {\r\n // remove measurements buttons\r\n document.getElementById('toolbarDiv').remove();\r\n }\r\n this.state.activeModule.destroy();\r\n this.setState({ activeModule: null });\r\n this.setState({ activeAction: '' });\r\n }\r\n\r\n actionSelected(activeAction) {\r\n // deactivate identify if any\r\n const btnIdentify = document.getElementById('mapIdentifyBtn');\r\n if (btnIdentify.classList.contains('map-identify-active')) {\r\n btnIdentify.classList.remove('map-identify-active');\r\n document.getElementById('map-view-container').style.cursor = 'auto';\r\n }\r\n\r\n this.setState({ activeAction });\r\n switch (activeAction) {\r\n case 'ADDRESS':\r\n if (this.state.activeModule && this.state.activeAction === 'ADDRESS') {\r\n this.__closeModule();\r\n } else {\r\n if (this.state.activeModule) {\r\n this.__destroyExisitingModule();\r\n }\r\n this.__createSearchModule();\r\n }\r\n break;\r\n\r\n case 'MEASURE':\r\n if (this.state.activeModule && this.state.activeAction === 'MEASURE') {\r\n this.__closeModule();\r\n } else {\r\n if (this.state.activeModule) {\r\n this.__destroyExisitingModule();\r\n }\r\n this.__createMeasurementsModule();\r\n }\r\n break;\r\n\r\n case 'LOCATION':\r\n if (this.state.activeModule && this.state.activeAction === 'LOCATION') {\r\n this.__closeModule();\r\n } else {\r\n if (this.state.activeModule) {\r\n this.__destroyExisitingModule();\r\n }\r\n this.__createLocationModule();\r\n }\r\n break;\r\n\r\n case 'UTLITYTOGGLER':\r\n if (\r\n this.state.activeModule &&\r\n this.state.activeAction === 'UTLITYTOGGLER'\r\n ) {\r\n this.__closeCustomModule('utilityTogglerDiv');\r\n } else {\r\n if (this.state.activeModule) {\r\n this.__destroyExisitingModule();\r\n }\r\n this.__createUtilityTogglerModule();\r\n }\r\n break;\r\n\r\n case 'DRAW':\r\n if (this.state.activeModule && this.state.activeAction === 'DRAW') {\r\n this.__closeCustomModule('sketchingDiv');\r\n } else {\r\n if (this.state.activeModule) {\r\n this.__destroyExisitingModule();\r\n }\r\n this.__createDrawModule();\r\n }\r\n break;\r\n case 'PRF':\r\n swal('The PRF will be an optional feature. Coming soon');\r\n /* if(this.state.activeModule && this.state.activeAction === 'DRAW') {\r\n this.__closeModule();\r\n } else{\r\n if(this.state.activeModule){\r\n this.__destroyExisitingModule();\r\n }\r\n this.__createDrawModule();\r\n } */\r\n break;\r\n }\r\n }\r\n\r\n __closeCustomModule(domID) {\r\n document.getElementById(domID).remove();\r\n this.setState({ activeModule: null });\r\n this.setState({ activeAction: '' });\r\n }\r\n\r\n __destroyExisitingModule() {\r\n if (this.state.activeModule.iconClass === 'esri-icon-measure') {\r\n // remove measurements buttons\r\n document.getElementById('toolbarDiv').remove();\r\n }\r\n this.setState({ activeModule: null });\r\n if (document.getElementById('utilityTogglerDiv')) {\r\n document.getElementById('utilityTogglerDiv').remove();\r\n return;\r\n }\r\n if (document.getElementById('sketchingDiv')) {\r\n document.getElementById('sketchingDiv').remove();\r\n return;\r\n }\r\n this.state.activeModule.destroy();\r\n }\r\n _areaMeasurement(distanceButton, areaButton) {\r\n this.state.activeModule.activeTool = 'area';\r\n areaButton.classList.add('active');\r\n distanceButton.classList.remove('active');\r\n }\r\n\r\n _distanceMeasurement(distanceButton, areaButton) {\r\n this.state.activeModule.activeTool = 'distance';\r\n distanceButton.classList.add('active');\r\n areaButton.classList.remove('active');\r\n }\r\n\r\n _clearMeasurements(distanceButton, areaButton) {\r\n distanceButton.classList.remove('active');\r\n areaButton.classList.remove('active');\r\n this.state.activeModule.clear();\r\n }\r\n\r\n __createMeasurementsModule() {\r\n loadModules(['esri/widgets/Measurement']).then(([Measurement]) => {\r\n // create buttons\r\n const distanceButton = document.createElement('button');\r\n distanceButton.setAttribute('id', 'distance');\r\n distanceButton.className =\r\n 'esri-widget--button esri-interactive esri-icon-measure-line active';\r\n distanceButton.setAttribute('title', 'Distance Measurement Tool');\r\n\r\n const areaButton = document.createElement('button');\r\n areaButton.setAttribute('id', 'area');\r\n areaButton.setAttribute('title', 'Area Measurement Tool');\r\n areaButton.className =\r\n 'esri-widget--button esri-interactive esri-icon-measure-area';\r\n\r\n const clearButton = document.createElement('button');\r\n clearButton.setAttribute('id', 'clear');\r\n clearButton.setAttribute('title', 'Clear Measurements');\r\n clearButton.className =\r\n 'esri-widget--button esri-interactive esri-icon-trash';\r\n\r\n const toolbarDiv = document.createElement('div');\r\n toolbarDiv.setAttribute('id', 'toolbarDiv');\r\n toolbarDiv.className = 'esri-component esri-widget';\r\n\r\n toolbarDiv.appendChild(distanceButton);\r\n toolbarDiv.appendChild(areaButton);\r\n toolbarDiv.appendChild(clearButton);\r\n\r\n distanceButton.addEventListener('click', () => {\r\n this._distanceMeasurement(distanceButton, areaButton);\r\n });\r\n areaButton.addEventListener('click', () => {\r\n this._areaMeasurement(distanceButton, areaButton);\r\n });\r\n clearButton.addEventListener('click', () => {\r\n this._clearMeasurements(distanceButton, areaButton);\r\n });\r\n\r\n const measurementWidget = new Measurement({\r\n view: _mapViewAvailable(),\r\n activeTool: 'distance',\r\n linearUnit: 'feet',\r\n areaUnit: 'acres',\r\n });\r\n this.setState({ activeModule: measurementWidget });\r\n _mapViewAvailable().ui.add([\r\n {\r\n component: toolbarDiv,\r\n position: 'top-right',\r\n index: 0,\r\n },\r\n {\r\n component: this.state.activeModule,\r\n position: 'top-right',\r\n index: 1,\r\n },\r\n ]);\r\n });\r\n }\r\n __createLocationModule() {\r\n loadModules(['esri/widgets/CoordinateConversion']).then(\r\n ([CoordinateConversion]) => {\r\n const ccWidget = new CoordinateConversion({\r\n view: _mapViewAvailable(),\r\n });\r\n this.setState({ activeModule: ccWidget });\r\n _mapViewAvailable().ui.add(this.state.activeModule, {\r\n position: 'top-right',\r\n });\r\n }\r\n );\r\n }\r\n\r\n __createSearchModule() {\r\n loadModules([\r\n 'esri/widgets/Search',\r\n 'esri/tasks/Locator',\r\n 'esri/layers/FeatureLayer',\r\n ]).then(([Search, Locator, FeatureLayer]) => {\r\n // add utility search within search\r\n //console.log(this.props.config);\r\n const sources = [\r\n {\r\n //locator: new Locator({ url: \"https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer\" }),\r\n locator: new Locator({ url: this.props.config.CityAddressGeocoder }),\r\n singleLineFieldName: 'SingleLine',\r\n name: 'City Geocoding Service',\r\n placeholder: 'Search Address',\r\n maxResults: 20,\r\n maxSuggestions: 20,\r\n suggestionsEnabled: true,\r\n minSuggestCharacters: 0,\r\n },\r\n {\r\n layer: new FeatureLayer({\r\n url: `${this.props.config.utilitySearch.utilityFeatureServiceBaseUrl}/${this.props.config.utilitySearch.searchableLayers.Hydrant}`,\r\n outFields: ['FACILITYID'],\r\n }),\r\n searchFields: ['FACILITYID'],\r\n displayField: 'FACILITYID',\r\n exactMatch: false,\r\n outFields: ['FACILITYID'],\r\n name: 'Hydrant',\r\n placeholder: 'Search hydrant',\r\n maxResults: 6,\r\n maxSuggestions: 6,\r\n suggestionsEnabled: true,\r\n minSuggestCharacters: 0,\r\n },\r\n {\r\n layer: new FeatureLayer({\r\n url: `${this.props.config.utilitySearch.utilityFeatureServiceBaseUrl}/${this.props.config.utilitySearch.searchableLayers.WaterMain}`,\r\n outFields: ['FACILITYID'],\r\n }),\r\n searchFields: ['FACILITYID'],\r\n displayField: 'FACILITYID',\r\n exactMatch: false,\r\n outFields: ['FACILITYID'],\r\n name: 'Water Main',\r\n placeholder: 'Search Water main',\r\n maxResults: 6,\r\n maxSuggestions: 6,\r\n suggestionsEnabled: true,\r\n minSuggestCharacters: 0,\r\n },\r\n {\r\n layer: new FeatureLayer({\r\n url: `${this.props.config.utilitySearch.utilityFeatureServiceBaseUrl}/${this.props.config.utilitySearch.searchableLayers.SewerMain}`,\r\n outFields: ['FACILITYID'],\r\n }),\r\n searchFields: ['FACILITYID'],\r\n displayField: 'FACILITYID',\r\n exactMatch: false,\r\n outFields: ['FACILITYID'],\r\n name: 'Sanitary Main', //hardcoded\r\n placeholder: 'Search sanitary gravity main',\r\n maxResults: 6,\r\n maxSuggestions: 6,\r\n suggestionsEnabled: true,\r\n minSuggestCharacters: 0,\r\n },\r\n {\r\n layer: new FeatureLayer({\r\n url: `${this.props.config.utilitySearch.utilityFeatureServiceBaseUrl}/${this.props.config.utilitySearch.searchableLayers.StormMain}`,\r\n outFields: ['FACILITYID'],\r\n }),\r\n searchFields: ['FACILITYID'],\r\n displayField: 'FACILITYID',\r\n exactMatch: false,\r\n outFields: ['FACILITYID'],\r\n name: 'Storm Main', //hardcoded\r\n placeholder: 'Search storm gravity main',\r\n maxResults: 6,\r\n maxSuggestions: 6,\r\n suggestionsEnabled: true,\r\n minSuggestCharacters: 0,\r\n },\r\n ];\r\n\r\n const searchWidget = new Search({\r\n view: _mapViewAvailable(),\r\n sources: sources,\r\n includeDefaultSources: false,\r\n });\r\n\r\n this.setState({ activeModule: searchWidget });\r\n\r\n // Add the search widget to the top right corner of the view\r\n _mapViewAvailable().ui.add(this.state.activeModule, {\r\n position: 'top-right',\r\n });\r\n });\r\n }\r\n\r\n __createDrawModule() {\r\n const sketchingDiv = document.createElement('div');\r\n sketchingDiv.setAttribute('id', 'sketchingDiv');\r\n sketchingDiv.setAttribute('iconClass', 'utility-toggler-div');\r\n sketchingDiv.className = 'esri-component esri-widget';\r\n this.setState({ activeModule: sketchingDiv });\r\n _mapViewAvailable().ui.add(sketchingDiv, 'top-right');\r\n setTimeout(() => {\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('sketchingDiv')\r\n );\r\n }, 50);\r\n }\r\n\r\n __createUtilityTogglerModule() {\r\n const utilityTogglerDiv = document.createElement('div');\r\n utilityTogglerDiv.setAttribute('id', 'utilityTogglerDiv');\r\n utilityTogglerDiv.setAttribute('iconClass', 'utility-toggler-div');\r\n utilityTogglerDiv.className = 'esri-component esri-widget';\r\n this.setState({ activeModule: utilityTogglerDiv });\r\n _mapViewAvailable().ui.add(utilityTogglerDiv, 'top-right');\r\n setTimeout(() => {\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('utilityTogglerDiv')\r\n );\r\n }, 50);\r\n }\r\n\r\n _(domID) {\r\n return document.getElementById(domID);\r\n }\r\n\r\n OpenWidgetWrapper() {\r\n this._('right-bar-wrapper').classList.remove('hidden');\r\n }\r\n CloseWidgetWrapper = () => {\r\n this._('right-bar-wrapper').classList.add('hidden');\r\n };\r\n\r\n _renderUtilityToggler() {\r\n if (this.state.isAuthorized) {\r\n return (\r\n }\r\n onClick={() => this.actionSelected('UTLITYTOGGLER')}\r\n active={this.state.activeAction === 'UTLITYTOGGLER'}\r\n >\r\n Utility Toggler\r\n \r\n );\r\n }\r\n }\r\n\r\n DeleteAllGraphicsButUsers = () => {\r\n const mapview = _mapViewAvailable();\r\n const parcelsNotificationGLayer =\r\n mapview.map.findLayerById('publicNotification');\r\n const bufferGraphicsLayer = mapview.map.findLayerById(\r\n 'bufferGraphicsLayer'\r\n );\r\n\r\n parcelsNotificationGLayer.removeAll();\r\n bufferGraphicsLayer.removeAll();\r\n };\r\n\r\n render() {\r\n const docsModalZIndex = { zIndex: 1001 };\r\n const __stylePanelHeader = {\r\n position: 'relative',\r\n backgroundColor: '#f5f5f5',\r\n padding: '15px',\r\n textAlign: 'left',\r\n fontSize: '1.2rem',\r\n fontWeight: 'bold',\r\n borderBottom: '1px solid #ddd',\r\n };\r\n const __styleClosePanelBtn = {\r\n position: 'absolute',\r\n width: '25px',\r\n top: '0',\r\n right: '0',\r\n height: '100%',\r\n fontWeight: '100',\r\n textAlign: 'center',\r\n cursor: 'pointer',\r\n };\r\n const __styleCloseBtnText = {\r\n position: 'relative',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n };\r\n const _panelInfoWindow = {\r\n position: 'relative',\r\n boxShadow: '0 0 1px rgba(0,0,0,.3)',\r\n background: '#fff',\r\n };\r\n const __styleLayerSettingsBtn = {\r\n position: 'absolute',\r\n width: '25px',\r\n top: '0',\r\n right: '30px',\r\n height: '100%',\r\n fontWeight: '100',\r\n textAlign: 'center',\r\n cursor: 'pointer',\r\n };\r\n const _identifyFooterToolbar = {\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n backgroundColor: '#f5f5f5',\r\n padding: '10px',\r\n textAlign: 'left',\r\n borderTop: '1px solid #ddd',\r\n };\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n config: state.config,\r\n };\r\n};\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n setUserGraphics: (gr) => dispatch(setgraphics(gr)),\r\n };\r\n};\r\n/* const mapDispatchToProps = (dispatch) => ({\r\n setUserGraphics: (graphics) => dispatch(setgraphics(graphics)),\r\n }); */\r\n/* const mapDispatchToProps = {\r\n setUserGraphics: setgraphics,\r\n }; */\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RightNav);\r\n","// React imports\r\nimport React, { useContext } from 'react';\r\nimport { loadModules } from 'esri-loader';\r\n// ESRI ArcGIS API\r\nimport { loadMap } from '../../../utils/map';\r\n// Styled Components\r\nimport styled from 'styled-components';\r\n\r\n// import { GlobalContext } from '../../../redux/context/GlobalState';\r\n\r\nconst DRAWINGS_KEY = 'arcgis-local-drawings';\r\n\r\nconst Container = styled.div`\r\n height: 100%;\r\n width: 100%;\r\n`;\r\n\r\n// Component\r\n/* const areEqual = (prevProps, nextProps) => {\r\n console.log('PrevProps :: ', prevProps);\r\n console.log('nextProps :: ', nextProps);\r\n for (let i in nextState) {\r\n if (nextState[i] !== this.state[i]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}; */\r\n\r\nconst Map = React.memo((props) => {\r\n //const { addGraphic } = useContext(GlobalContext);\r\n // set an ID for the map to attach to\r\n const containerID = 'map-view-container';\r\n // load map with config properties, street basemap, Layers\r\n loadMap(containerID, props.appConfig).then((view) => {\r\n // call the map loaded event when we get the map view back\r\n props.onMapLoaded();\r\n\r\n loadModules(['esri/Graphic']).then(([Graphic]) => {\r\n const existingGraphics = localStorage.getItem(DRAWINGS_KEY);\r\n if (existingGraphics !== undefined && existingGraphics !== null) {\r\n const _userSavedGraphics = JSON.parse(existingGraphics);\r\n if (_userSavedGraphics.length > 0) {\r\n const userGLayer = view.map.findLayerById('userGraphics');\r\n _userSavedGraphics.map((g) => {\r\n const __gr = Graphic.fromJSON(g);\r\n //_graphics_array.push(__gr);\r\n if (userGLayer !== null) {\r\n userGLayer.graphics.push(__gr);\r\n // add graphic to global graphic array\r\n //addGraphic(__gr);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n });\r\n\r\n // Compnent template\r\n return ;\r\n});\r\n\r\nexport default Map;\r\n","import React, { Component, Fragment } from 'react';\r\nimport Button from 'calcite-react/Button';\r\nimport Drawer from 'calcite-react/Drawer';\r\nimport SideNav, { SideNavTitle, SideNavLink } from 'calcite-react/SideNav';\r\nimport { _user_auth } from './services/gis_service';\r\n\r\nimport Avatar from 'calcite-react/Avatar';\r\n\r\nexport default class UserAccountBtn extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n drawerDirection: 'right',\r\n active: false,\r\n userName: this.props.userName,\r\n };\r\n this.showDrawerClicked = this.showDrawerClicked.bind(this);\r\n this.hideDrawer = this.hideDrawer.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n let userName = this.state.userName;\r\n if (userName) {\r\n userName = userName.substring(0, 3).toUpperCase();\r\n\r\n this.setState({ userName });\r\n }\r\n }\r\n\r\n showDrawerClicked(drawerDirection) {\r\n this.setState({\r\n drawerDirection,\r\n active: true,\r\n });\r\n }\r\n\r\n hideDrawer() {\r\n this.setState({\r\n active: false,\r\n });\r\n }\r\n _navigateTo = (url) => {\r\n window.open(url, '_blank');\r\n };\r\n\r\n __signout = () => {\r\n _user_auth.signout();\r\n setTimeout(() => {\r\n window.location.reload();\r\n }, 50);\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n this.showDrawerClicked('right')}\r\n >\r\n {this.state.userName}\r\n \r\n {/*
\r\n this.showDrawerClicked('right')}\r\n >\r\n {this.props.userName}\r\n \r\n
*/}\r\n \r\n \r\n Helpful Links...\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n","/**\r\n * This is an example component used to showcase authentication\r\n * @type {Class}\r\n */\r\n\r\n// React\r\nimport React, { useState } from 'react';\r\n\r\n// Components\r\nimport TopNavActionsList from 'calcite-react/TopNav/TopNavActionsList';\r\nimport ArcgisAccount from 'calcite-react/ArcgisAccount';\r\nimport ArcgisAccountMenuItem from 'calcite-react/ArcgisAccount/ArcgisAccountMenuItem';\r\nimport Button from 'calcite-react/Button';\r\nimport ComboButton from 'calcite-react/ComboButton';\r\nimport Menu, { MenuTitle, MenuItem } from 'calcite-react/Menu';\r\nimport Drawer from 'calcite-react/Drawer';\r\n\r\nimport Alert, { AlertTitle, AlertMessage } from 'calcite-react/Alert';\r\nimport swal from 'sweetalert';\r\n\r\nimport { useHistory } from 'react-router-dom';\r\nimport { _user_auth } from './services/gis_service';\r\nimport UserAccountBtn from './UserAccountBtn';\r\n\r\n// Class\r\nconst UserAccount = (props) => {\r\n const __isAuth = _user_auth.isAuthorized();\r\n const userName = _user_auth.GetAuthUser();\r\n\r\n // onClick={props.signIn}\r\n const _history = useHistory();\r\n\r\n const __signout = () => {\r\n alert('Signing you out!');\r\n };\r\n const _navigateTo = (url) => {\r\n window.open(url, '_blank');\r\n };\r\n\r\n const showDrawerClicked = (drawerDirection) => {\r\n this.setState({\r\n drawerDirection,\r\n active: true,\r\n });\r\n };\r\n\r\n const hideDrawer = () => {\r\n this.setState({\r\n active: false,\r\n });\r\n };\r\n\r\n const loggedInActionsComponent = (\r\n \r\n \r\n{/* */}\r\n {/* \r\n \r\n _navigateTo(\"https://gis.mansfieldcity.com/app/tap-valve-search.aspx\")}>Tap-valve search\r\n _navigateTo(\"https://gis.mansfieldcity.com/app/node-request.aspx\")}>Node request\r\n _navigateTo(\"https://rms.mansfieldcity.com/\")}>RMS\r\n __signout()}>Signout\r\n \r\n */}\r\n \r\n );\r\n const signedOutActionsComponent = (\r\n \r\n \r\n \r\n );\r\n\r\n let outputComponent = __isAuth\r\n ? loggedInActionsComponent\r\n : signedOutActionsComponent;\r\n\r\n return
{outputComponent}
;\r\n //return
{signedInActionsComponent}
;\r\n};\r\n\r\nexport default UserAccount;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport asyncLoading from 'react-async-loader';\r\nimport isEqual from 'lodash.isequal';\r\n\r\nclass GoogleStreetview extends React.Component {\r\n constructor() {\r\n super();\r\n this.streetView = null;\r\n }\r\n \r\n componentDidMount() {\r\n this.initialize(this.node, this.props);\r\n }\r\n \r\n componentDidUpdate(prevProps) {\r\n this.initialize(this.node, prevProps);\r\n }\r\n \r\n componentWillUnmount() {\r\n if (this.streetView) {\r\n this.props.googleMaps.event.clearInstanceListeners(this.streetView);\r\n }\r\n }\r\n \r\n initialize(canvas, prevProps) {\r\n if (this.props.googleMaps && this.streetView == null) {\r\n this.streetView = new this.props.googleMaps.StreetViewPanorama(\r\n canvas,\r\n this.props.streetViewPanoramaOptions,\r\n );\r\n \r\n this.streetView.addListener('pano_changed', () => {\r\n if (this.props.onPanoChanged) {\r\n this.props.onPanoChanged(this.streetView.getPano());\r\n }\r\n });\r\n \r\n this.streetView.addListener('position_changed', () => {\r\n if (this.props.onPositionChanged) {\r\n this.props.onPositionChanged(this.streetView.getPosition());\r\n }\r\n });\r\n \r\n this.streetView.addListener('pov_changed', () => {\r\n if (this.props.onPovChanged) {\r\n this.props.onPovChanged(this.streetView.getPov());\r\n }\r\n });\r\n \r\n this.streetView.addListener('visible_changed', () => {\r\n if (this.props.onVisibleChanged) {\r\n this.props.onVisibleChanged(this.streetView.getVisible());\r\n }\r\n });\r\n \r\n this.streetView.addListener('zoom_changed', () => {\r\n if (this.props.onZoomChanged) {\r\n this.props.onZoomChanged(this.streetView.getZoom());\r\n }\r\n });\r\n }\r\n if (\r\n this.streetView !== null &&\r\n this.props.streetViewPanoramaOptions &&\r\n !isEqual(\r\n this.props.streetViewPanoramaOptions,\r\n prevProps.streetViewPanoramaOptions,\r\n )\r\n ) {\r\n const {\r\n zoom,\r\n pov,\r\n position,\r\n ...otherOptions\r\n } = this.props.streetViewPanoramaOptions;\r\n const {\r\n zoom: prevZoom,\r\n pov: prevPov,\r\n position: prevPos,\r\n ...prevOtherOptions\r\n } = prevProps.streetViewPanoramaOptions;\r\n if (!isEqual(zoom, prevZoom)) {\r\n this.streetView.setZoom(zoom);\r\n }\r\n if (!isEqual(pov, prevPov)) {\r\n this.streetView.setPov(pov);\r\n }\r\n if (!isEqual(position, prevPos)) {\r\n this.streetView.setPosition(position);\r\n }\r\n if (!isEqual(otherOptions, prevOtherOptions)) {\r\n this.streetView.setOptions(otherOptions);\r\n }\r\n }\r\n }\r\n \r\n render() {\r\n return
(this.node = node)} />;\r\n }\r\n }\r\n \r\n GoogleStreetview.propTypes = {\r\n /* eslint-disable react/no-unused-prop-types */\r\n apiKey: PropTypes.string,\r\n streetViewPanoramaOptions: PropTypes.object,\r\n onPositionChanged: PropTypes.func,\r\n onPovChanged: PropTypes.func,\r\n onZoomChanged: PropTypes.func,\r\n onPanoChanged: PropTypes.func,\r\n onVisibleChanged: PropTypes.func,\r\n googleMaps: PropTypes.object,\r\n };\r\n \r\n GoogleStreetview.defaultProps = {\r\n apiKey: null,\r\n streetViewPanoramaOptions: {\r\n position: { lat: 46.9171876, lng: 17.8951832 },\r\n pov: { heading: 0, pitch: 0 },\r\n zoom: 1,\r\n },\r\n googleMaps: {},\r\n onPositionChanged: () => {},\r\n onPovChanged: () => {},\r\n onZoomChanged: () => {},\r\n onPanoChanged: () => {},\r\n onVisibleChanged: () => {},\r\n };\r\n \r\n function mapScriptsToProps({ apiKey }) {\r\n if (!apiKey) return {};\r\n \r\n return {\r\n googleMaps: {\r\n globalPath: 'google.maps',\r\n url: `https://maps.googleapis.com/maps/api/js?key=${apiKey}`,\r\n jsonp: true,\r\n },\r\n };\r\n }\r\n \r\n export default asyncLoading(mapScriptsToProps)(GoogleStreetview);","\r\nimport React, { Component } from 'react';\r\nimport GoogleStreetview from './GoogleStreetview';\r\n\r\nconst _header = {\r\n display:'block',\r\n position:'relative',\r\n backgroundColor: '#009688',\r\n color: '#fff',\r\n padding: '10px'\r\n}\r\nconst _contentWrapper = {\r\n\r\n}\r\nconst _btnClose = {\r\n position: 'absolute',\r\n width: '40px',\r\n height: '38px',\r\n top:' 0',\r\n right: '0',\r\n cursor: 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n}\r\nclass GStreetView extends Component {\r\n constructor(){\r\n super()\r\n this.state = {\r\n isLoading: true,\r\n _location: null\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n //console.log('component mounted...', this.props);\r\n }\r\n \r\n __closePanel = () => {\r\n this.props.onclose();\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n

Street View

\r\n
X
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n )\r\n }\r\n \r\n};\r\n\r\nexport default GStreetView;\r\n\r\n","import React, { Component, Fragment } from 'react';\r\nimport { loadModules } from 'esri-loader';\r\nimport { connect } from 'react-redux';\r\nimport { _mapViewAvailable } from '../../utils/map';\r\nimport { GIS_Base_Functions, _user_auth } from '../services/gis_service';\r\n\r\nimport Slider from 'calcite-react/Slider';\r\n\r\nimport './custom-util-toggler.css';\r\n\r\n// , border:`1px solid ${this.props.color}`\r\n\r\nclass CityUtilityCustomToggler extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isAuthorized: false,\r\n accessLevel: 0,\r\n latestImagery: this.props.config.latestImagery,\r\n Water: 'Water', //HARDCODED\r\n Storm: 'Storm', //HARDCODED\r\n Sewer: 'Sanitary', //HARDCODED\r\n Lights: 'Lights', //HARDCODED\r\n basemapOpacity: 100,\r\n };\r\n this.updateSliderValue = this.updateSliderValue.bind(this);\r\n }\r\n\r\n updateSliderValue(event) {\r\n this.setState({ basemapOpacity: parseInt(event.target.value, 10) });\r\n this.__updateBasemapOpacity();\r\n }\r\n\r\n componentDidMount() {\r\n const __isAuth = _user_auth.isAuthorized();\r\n const { accessLevel } = _user_auth.GetAuthUser();\r\n this.setState({ isAuthorized: __isAuth, accessLevel });\r\n }\r\n\r\n componentWillUnmount() {\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n __updateBasemapOpacity = () => {\r\n const mapview = _mapViewAvailable();\r\n mapview.map.basemap.baseLayers.items[0].opacity =\r\n this.state.basemapOpacity / 100;\r\n //console.log(mapview.map);\r\n };\r\n\r\n __toggleLatestImagery = (e) => {\r\n switch (e.target.checked) {\r\n case true:\r\n this.setAppBasemap('imagery');\r\n break;\r\n default:\r\n const mapview = _mapViewAvailable();\r\n GIS_Base_Functions.__getBasemap(this.state.latestImagery.defaultStreetBasemapServiceURL).then((streetBasemap) => {\r\n mapview.map.basemap = streetBasemap;\r\n });\r\n break;\r\n }\r\n this.__addDefaultBaseLayer(e.target.checked);\r\n };\r\n\r\n setAppBasemap = (basemapType) => {\r\n const { serviceURL, defaultStreetBasemapServiceURL } =\r\n this.state.latestImagery;\r\n const mapview = _mapViewAvailable();\r\n\r\n loadModules(['esri/Basemap', 'esri/layers/TileLayer']).then(\r\n ([Basemap, TileLayer]) => {\r\n const latestBasemap = new Basemap({\r\n baseLayers: [\r\n new TileLayer({\r\n url:\r\n basemapType === 'imagery'\r\n ? serviceURL\r\n : defaultStreetBasemapServiceURL,\r\n copyright: 'City of Reynoldsburg, Ohio',\r\n }),\r\n ],\r\n title: 'Latest Basemap',\r\n id: 'appbasemap',\r\n });\r\n mapview.map.basemap = latestBasemap;\r\n }\r\n );\r\n };\r\n\r\n __addDefaultBaseLayer = (checked) => {\r\n setTimeout(() => {\r\n GIS_Base_Functions.__addDefaultBaseLayer(checked);\r\n }, 10);\r\n };\r\n\r\n __toggleUtility(e, layerName) {\r\n const mapview = _mapViewAvailable();\r\n const utilityLayer = mapview.map.layers.items.find(\r\n (l) => l.id === '1703a0495d2-util' //HARDCODED\r\n );\r\n if (!utilityLayer.visible) {\r\n utilityLayer.visible = e.target.checked; // layer root\r\n }\r\n utilityLayer.sublayers.items.map((l) => {\r\n if (l.title.toUpperCase() === layerName.toUpperCase()) {\r\n l.visible = e.target.checked; // layer root\r\n const _recursiveFunc = (layers) => {\r\n layers.map((ly) => {\r\n if (ly.sublayers) {\r\n _recursiveFunc(ly.sublayers.items);\r\n } else {\r\n ly.visible = e.target.checked;\r\n }\r\n });\r\n };\r\n _recursiveFunc(l.sublayers.items);\r\n } // before\r\n else {\r\n // after\r\n const _recursiveFuncUncheck = (layers) => {\r\n layers.map((ly) => {\r\n if (ly.sublayers) {\r\n _recursiveFuncUncheck(ly.sublayers.items);\r\n } else {\r\n ly.visible = false;\r\n }\r\n });\r\n };\r\n switch (l.title) {\r\n case 'Atlas Grid':\r\n break;\r\n case 'Sanitary': //hardcoded\r\n const is_sewer_checked =\r\n document.getElementById('sanitary').checked; //hardcoded\r\n if (!is_sewer_checked) {\r\n l.visible = false;\r\n _recursiveFuncUncheck(l.sublayers.items);\r\n }\r\n break;\r\n case 'Storm': //hardcoded\r\n const is_storm_checked = document.getElementById('storm').checked; //hardcoded\r\n if (!is_storm_checked) {\r\n l.visible = false;\r\n _recursiveFuncUncheck(l.sublayers.items);\r\n }\r\n break;\r\n case 'Water': //hardcoded\r\n const is_water_checked = document.getElementById('water').checked; //hardcoded\r\n if (!is_water_checked) {\r\n l.visible = false;\r\n _recursiveFuncUncheck(l.sublayers.items);\r\n }\r\n\r\n break;\r\n case 'Lights': //hardcoded\r\n const is_lights_checked = document.getElementById('lights').checked; //hardcoded\r\n if (!is_lights_checked) {\r\n l.visible = false;\r\n _recursiveFuncUncheck(l.sublayers.items);\r\n } \r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n __renderTogglerUI() {\r\n const { title } = this.state.latestImagery;\r\n if (this.state.isAuthorized && this.state.accessLevel > 1) {\r\n return (\r\n \r\n \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n\r\n
  • \r\n \r\n
  • \r\n\r\n
  • \r\n \r\n
    \r\n \r\n
    \r\n
  • \r\n \r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n render() {\r\n return {this.__renderTogglerUI()};\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n config: state.config,\r\n };\r\n};\r\nexport default connect(mapStateToProps)(CityUtilityCustomToggler);\r\n","// React imports\r\nimport React, { useState, useEffect } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { loadModules } from 'esri-loader';\r\n// Redux imports\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { mapLoaded } from '../redux/reducers/map';\r\nimport { startAuth, logout } from '../redux/reducers/auth';\r\n\r\n// Component imports\r\nimport TopNav from 'calcite-react/TopNav';\r\nimport TopNavBrand from 'calcite-react/TopNav/TopNavBrand';\r\nimport TopNavTitle from 'calcite-react/TopNav/TopNavTitle';\r\nimport TopNavList from 'calcite-react/TopNav/TopNavList';\r\n//import TopNavLink from 'calcite-react/TopNav/TopNavLink';\r\n\r\nimport LeftNav from './navigation/LeftNav';\r\nimport RightNav from './navigation/RightNav';\r\n//import { FooterAerialImagery } from './navigation/FooterAerialImagery';\r\n\r\nimport Map from './esri/map/Map';\r\nimport LoadScreen from './LoadScreen';\r\nimport UserAccount from './UserAccount';\r\n//import logo from \"../styles/images/Esri-React-Logo.svg\";\r\n//import logo from '../styles/images/webgis4logo.png';\r\n\r\n// Styled Components\r\nimport styled from 'styled-components';\r\n//import { $CombinedState } from 'redux';\r\n\r\nimport Draggable from 'react-draggable';\r\n\r\nimport { _mapViewAvailable } from '../utils/map';\r\nimport GStreetViewWrapper from './GStreetViewWrapper';\r\n//import EditModal from './reports/EditModal';\r\nimport CityUtilityCustomToggler from './togglers/CityUtilityCustomToggler';\r\nimport { setgraphics } from '../redux/reducers/graphics';\r\n\r\n//import '../styles/draggable-report.css';\r\n//import logo from \"../styles/images/webgis4logo.png\";\r\n\r\nconst USER_THEME_KEY = 'user-local-theme';\r\n\r\nvar headerBackgroundColor = '#efe9e0';\r\nvar headerTitleTextColor = '#000000';\r\n//var headerNavLinksColor = '#808080';\r\n\r\nvar controlledPosition = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n position: absolute;\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n`;\r\n\r\nconst MapWrapper = styled.div`\r\n display: flex;\r\n flex: 1;\r\n flex-direction: column;\r\n position: relative;\r\n z-index: 0;\r\n overflow: hidden;\r\n`;\r\n\r\nconst Logo = styled(TopNavBrand)`\r\n justify-content: center;\r\n & img {\r\n height: 60px;\r\n }\r\n`;\r\n\r\nconst Nav = styled(TopNav)`\r\n && {\r\n z-index: 5;\r\n }\r\n`;\r\n\r\nconst NavList = styled(TopNavList)`\r\n text-align: left;\r\n`;\r\n\r\nconst DRAWINGS_KEY = 'arcgis-local-drawings';\r\n\r\n// Component definition\r\nconst Main = (props) => {\r\n const [state, setState] = useState({\r\n deltaPosition: {\r\n x: 0,\r\n y: 0,\r\n },\r\n isMapLoading: false,\r\n });\r\n const auth = useSelector((state) => state.auth);\r\n const config = useSelector((state) => state.config);\r\n //console.log(config);\r\n// const userGraphics = useSelector((state) => state.graphics.value);\r\n\r\n const _userGraphics = () => {\r\n loadModules(['esri/Graphic']).then(([Graphic]) => {\r\n const existingGraphics = localStorage.getItem(DRAWINGS_KEY);\r\n if (existingGraphics) {\r\n const _userSavedGraphics = JSON.parse(existingGraphics);\r\n if (_userSavedGraphics.length > 0) {\r\n let _graphics_array = [];\r\n _userSavedGraphics.map((g) => {\r\n const __gr = Graphic.fromJSON(g);\r\n _graphics_array.push(__gr);\r\n });\r\n dispatch(setgraphics(_graphics_array));\r\n }\r\n }\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n _userGraphics();\r\n }, []);\r\n\r\n const userTheme = localStorage.getItem(USER_THEME_KEY);\r\n if (userTheme) {\r\n const _theme = JSON.parse(userTheme);\r\n headerBackgroundColor = _theme.headerBackgroundColor;\r\n headerTitleTextColor = _theme.headerTitleTextColor;\r\n// headerNavLinksColor = _theme.headerNavLinksColor;\r\n }\r\n\r\n //const appLogo = '../styles/images/webgis4logo.png'; // config.appLogo; //from\r\n\r\n const isMapLoaded = useSelector((state) => state.map.loaded);\r\n const dispatch = useDispatch();\r\n\r\n // Sign in button click event\r\n const signIn = () => {\r\n const { clientId, sessionId, popup } = config;\r\n dispatch(\r\n startAuth({\r\n clientId,\r\n sessionId,\r\n popup,\r\n signInRequest: true,\r\n })\r\n );\r\n };\r\n\r\n // Sign out button click event\r\n const signOut = () => {\r\n dispatch(logout(config.sessionId));\r\n };\r\n\r\n const __toggleImagry = () => {\r\n const __panel = document.getElementById('imagery-panel');\r\n if (__panel.classList.contains('hidden')) {\r\n __panel.classList.remove('hidden');\r\n } else {\r\n __panel.classList.add('hidden');\r\n }\r\n };\r\n\r\n// const __onDragStart = () => {\r\n// //console.log('starting drag...');\r\n// };\r\n\r\n const __onDrag = (e, position) => {\r\n controlledPosition.x = position.x;\r\n controlledPosition.y = position.y;\r\n };\r\n const onGStreetViewClosed = () => {\r\n const view = _mapViewAvailable();\r\n //view.ui.empty(\"top-right\");\r\n view.ui.remove('streetViewWidget');\r\n // reset the pegman position\r\n controlledPosition.x = 0;\r\n controlledPosition.y = 0;\r\n document.getElementById('googleStreetViewBtn').style.transform =\r\n 'translate(0, 0)';\r\n };\r\n\r\n const __onDragEnd = (res) => {\r\n const view = _mapViewAvailable();\r\n const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\r\n var _screenLocation = isMobile\r\n ? { x: res.changedTouches[0].clientX, y: res.changedTouches[0].clientY }\r\n : { x: res.x - res.offsetX, y: res.y - res.offsetY };\r\n const _locationPoint = view.toMap(_screenLocation);\r\n\r\n loadModules([\r\n 'esri/geometry/support/webMercatorUtils',\r\n 'esri/geometry/SpatialReference',\r\n 'esri/tasks/GeometryService',\r\n 'esri/rest/support/ProjectParameters', //tasks to rest DMM 9/22/2022\r\n ]).then(\r\n ([\r\n webMercatorUtils,\r\n SpatialReference,\r\n GeometryService,\r\n ProjectParameters,\r\n ]) => {\r\n var geomSer = new GeometryService(config.geometryService);\r\n var params = new ProjectParameters({\r\n geometries: [_locationPoint],\r\n outSpatialReference: new SpatialReference({\r\n wkid: 102100,\r\n wkt: 'toJSON()',\r\n }),\r\n });\r\n\r\n geomSer.project(params).then((res) => {\r\n const _streetViewPanoramaOptions = {\r\n position: { lat: res[0].latitude, lng: res[0].longitude },\r\n pov: { heading: 0, pitch: 0 },\r\n zoom: 1,\r\n };\r\n\r\n if (isMobile) {\r\n const redirectUrl = `https://maps.google.com/maps?q=&layer=c&cbll=${res[0].latitude},${res[0].longitude}&cbp=11,0,0,0,0`;\r\n window.open(redirectUrl, '_blank');\r\n } else {\r\n const _streetViewDiv = document.getElementById('streetViewWidget');\r\n if (_streetViewDiv) {\r\n _streetViewDiv.remove();\r\n }\r\n var streetViewWidget = document.createElement('div');\r\n streetViewWidget.id = 'streetViewWidget';\r\n streetViewWidget.className =\r\n 'esri-widget esri-component street-view-widget-wrapper';\r\n const view = _mapViewAvailable();\r\n view.ui.add(streetViewWidget, 'top-right');\r\n ReactDOM.render(\r\n ,\r\n streetViewWidget\r\n );\r\n }\r\n });\r\n }\r\n );\r\n };\r\n\r\n const __toggleFeaturesIdentifyAction = (e) => {\r\n const btnIdentify = document.getElementById('mapIdentifyBtn');\r\n if (btnIdentify.classList.contains('map-identify-active')) {\r\n btnIdentify.classList.remove('map-identify-active');\r\n document.getElementById('map-view-container').style.cursor = 'default';\r\n } else {\r\n btnIdentify.classList.add('map-identify-active');\r\n document.getElementById('map-view-container').style.cursor = 'help';\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n GIS v4\r\n \r\n \r\n \r\n {/* \r\n Docs\r\n */}\r\n \r\n \r\n Parks Map\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n __toggleFeaturesIdentifyAction(e)}\r\n >\r\n \r\n
    \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n {/*
    \r\n \r\n
    */}\r\n
    \r\n
    \r\n {/* */}\r\n
    \r\n );\r\n};\r\nexport default Main;\r\n","import React, { Component, Fragment } from 'react';\r\nimport Button, { ButtonGroup } from 'calcite-react/Button';\r\nimport Form, {\r\n FormControl,\r\n FormControlLabel,\r\n FormHelperText,\r\n Fieldset,\r\n Legend,\r\n} from 'calcite-react/Form';\r\nimport TextField from 'calcite-react/TextField';\r\nimport Checkbox from 'calcite-react/Checkbox';\r\n\r\nimport './login.css';\r\nimport { _user_auth } from '../services/gis_service';\r\n\r\nclass Login extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n login: '',\r\n password: '',\r\n remember_me: false,\r\n isSubmitting: false,\r\n isIncorectSignin: false,\r\n };\r\n\r\n this.changeHandler = this.changeHandler.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n //this._isMounted = true;\r\n }\r\n componentWillUnmount() {\r\n this.setState = (state, callback) => {\r\n return;\r\n };\r\n }\r\n\r\n changeHandler = (e) => {\r\n this.setState({\r\n [e.target.name]: e.target.value,\r\n });\r\n };\r\n\r\n _signIn = () => {\r\n const { login, password, remember_me } = this.state;\r\n if (login === '' || password === '') {\r\n } else {\r\n this.setState({ isSubmitting: true });\r\n _user_auth.signin3(login, password).then((isAuthorise) => { /* DMM 10/3/2022 signin, signin2, signin3 */\r\n if (isAuthorise) {\r\n const { history } = this.props;\r\n if (history) {\r\n history.push('/main');\r\n }\r\n } else {\r\n // incorect credentials\r\n this.setState({ isIncorectSignin: false });\r\n }\r\n\r\n this.setState({ isSubmitting: false });\r\n });\r\n // call sigin api\r\n //console.log(this.state);\r\n }\r\n };\r\n\r\n render() {\r\n const { login, password, remember_me, isIncorectSignin } = this.state;\r\n return (\r\n \r\n
    \r\n
    \r\n

    Login to Web GIS

    \r\n\r\n
    \r\n \r\n Email\r\n \r\n \r\n \r\n Password\r\n \r\n \r\n {/* \r\n this.setState({remember_me: !remember_me})}> Remember me on this computer\r\n */}\r\n\r\n \r\n Invalid login attempt.\r\n

    \r\n\r\n \r\n \r\n {this.state.isSubmitting ? 'Submitting.......' : 'Login'}\r\n \r\n \r\n \r\n \r\n
    \r\n\r\n
    \r\n

    \r\n Forgot your password?\r\n \r\n Click here to reset it\r\n \r\n

    \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default Login;\r\n","\r\n// React imports\r\nimport React, { useEffect } from \"react\";\r\nimport { Route, Redirect } from \"react-router-dom\";\r\n\r\n// Redux imports\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { fetchConfig } from \"../redux/reducers/config\";\r\nimport { checkAuth, startAuth, completeAuth } from \"../redux/reducers/auth\";\r\n\r\n// Component imports\r\nimport LoadScreen from \"./LoadScreen\";\r\nimport Main from \"./Main\";\r\nimport Login from \"./account/Login\";\r\n\r\n// Component definition\r\nconst App = props => {\r\n // we'll use the url to determin sign-in state\r\n const { pathname } = props.location;\r\n // redux store state\r\n const user = useSelector(state => state.auth.user);\r\n const config = useSelector(state => state.config);\r\n const dispatch = useDispatch();\r\n\r\n // when the component mounts request the config and load it into the Redux state\r\n useEffect(() => {\r\n dispatch(fetchConfig());\r\n }, [dispatch]);\r\n\r\n // once the component mounts and the config loads, check if we have a saved session\r\n useEffect(() => {\r\n // if the config isn't yet loaded then skip this effect\r\n if (!config.loaded) {\r\n return;\r\n }\r\n\r\n const { portalUrl, clientId, sessionId } = config;\r\n\r\n dispatch(checkAuth({ portalUrl, clientId, sessionId }));\r\n }, [config, dispatch]);\r\n\r\n // if there's no stored session, we'll watch the url path to see if we need to kick off an authentication\r\n // this can happen automatically with a portalUrl property in the config\r\n // or if the user requests a login through an event\r\n useEffect(() => {\r\n // if the config isn't yet loaded then skip this effect\r\n if (!config.loaded) {\r\n return;\r\n }\r\n\r\n const { portalUrl, clientId, sessionId } = config;\r\n\r\n // we'll start the authentication here and it will return here to complete\r\n if (portalUrl && !user && pathname !== \"/auth\") {\r\n dispatch(startAuth({ portalUrl, clientId, sessionId }));\r\n } else if (pathname === \"/auth\" && !user) {\r\n dispatch(completeAuth({ portalUrl, clientId, sessionId }));\r\n }\r\n }, [config, user, pathname, dispatch]);\r\n\r\n // set a halt state to allow the authentication process to complete before\r\n // we redirect to the main component\r\n let signInRequested = false;\r\n if (pathname === \"/auth\") {\r\n signInRequested = true;\r\n }\r\n\r\n // RENDER RETURN\r\n // app is initializing for the following reasons, show the load screen\r\n // 1. config is not yet loaded\r\n // 2. authentication is required but there is no user information\r\n // 3. authentication is not required but user has requested to sign-in\r\n if (\r\n !config.loaded ||\r\n (config.portalUrl && !user) ||\r\n (signInRequested && !user)\r\n ) {\r\n return ;\r\n }\r\n\r\n // App is initialized and user is authenticated if needed, route to main component\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default App;\r\n","// Copyright 2019 Esri\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n// http://www.apache.org/licenses/LICENSE-2.0\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.​\r\n\r\nimport { createGlobalStyle } from \"styled-components\";\r\n\r\n// Global page styling\r\n// override AGIS JS API Widgets here\r\nexport const GlobalStyle = createGlobalStyle`\r\n html,\r\n body {\r\n height: 100%;\r\n font-family: Montserrat, sans-serif;\r\n }\r\n\r\n body {\r\n margin: 0;\r\n padding: 0;\r\n font-weight: 300;\r\n letter-spacing: 1px;\r\n font-size: 16px;\r\n }\r\n\r\n .esri-layer-list__item{\r\n &::before {\r\n width: 100%;\r\n left: 0;\r\n }\r\n }\r\n`;\r\n","// React //\r\nimport React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\n\r\n// Redux //\r\nimport { Provider } from \"react-redux\";\r\nimport { initStore } from \"./redux/store\";\r\n\r\n// React Router //\r\nimport { BrowserRouter, Route } from \"react-router-dom\";\r\n\r\n// Components //\r\nimport { homepage } from \"../package.json\";\r\nimport App from \"./components/App\";\r\n\r\n// Styles //\r\nimport CalciteThemeProvider from \"calcite-react/CalciteThemeProvider\";\r\nimport { GlobalStyle } from \"./styles/global\";\r\nimport \"./styles/fonts.css\";\r\n\r\n// App runs at the root locally, but under /{homepage} in production\r\nlet basename;\r\nprocess.env.NODE_ENV !== \"production\" ? (basename = \"\") : (basename = homepage);\r\n\r\n// Create Redux Store\r\nexport const store = initStore();\r\n\r\n// App entry point\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n);\r\n","// Copyright 2019 Esri\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n// http://www.apache.org/licenses/LICENSE-2.0\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.​\r\n\r\n/**\r\n * Configure and create the Redux here\r\n * includes Saga\r\n * @type {Object} This is the store object that Redux uses\r\n */\r\n\r\n// REDUX IMPORTS //\r\nimport { applyMiddleware, combineReducers, compose, createStore } from 'redux';\r\nimport createSagaMiddleware from 'redux-saga';\r\nimport rootSaga from './sagas/index';\r\n\r\nimport * as reducers from './';\r\n\r\nexport function initStore() {\r\n // Setup Redux dev tools\r\n // NOTE - Redux Devtool issue - see https://github.com/zalmoxisus/redux-devtools-extension/issues/619\r\n const composeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\r\n\r\n // Setup Redux store\r\n const rootReducer = combineReducers(reducers);\r\n const sagaMiddleware = createSagaMiddleware();\r\n\r\n const store = createStore(\r\n rootReducer,\r\n composeEnhancer(applyMiddleware(sagaMiddleware))\r\n );\r\n\r\n // Run sagas\r\n sagaMiddleware.run(rootSaga);\r\n\r\n return store;\r\n}\r\n"],"sourceRoot":""}