{"version":3,"sources":["components/images/eztBlackAndWhiteLogo.svg","components/images/eztDefaultImg.svg","components/images/EztSplashImg.svg","components/MenuButton.js","components/autoComplete.js","components/autoCompleteErrorMess.js","components/Toolbar.js","components/Utils/BuildHtml.js","components/Atlas/atlasEventHandlerMove.js","components/Atlas/showPopupForPoint.js","components/SideMenuPoints.js","components/SideMenu.js","components/Version.js","components/mapsJs/mapsJs.js","components/Utils/PointInBoundingBox.js","components/Utils/SearchShowPolygon.js","components/Utils/SearchShowPoint.js","components/Map.js","components/Utils/EztJsonToFeatureArr.js","components/Atlas/atlasEventHandlerClick.js","components/Atlas/atlasEventHandlerClose.js","components/EztSplash.js","components/MapConsoleMessage.js","components/MapConsole.js","components/countryCodes/countryCodes.js","components/MapContainer.js","App.js","registerServiceWorker.js","index.js"],"names":["module","exports","MenuButton","id","onClick","this","props","MenuButtonClicked","src","alt","Component","autoComplete","selectItem","event","onSelectAutoComplete","className","name","data-lat","lat","data-lon","lon","autoCompleteErrorMess","cancel","abort","CancelToken","axios","Toolbar","state","input","location","selectAutoComplete","e","onSearch","target","dataset","setState","apiCall","debounce","getGeocodedResults","onInput","value","length","searchClick","getLocation","navigator","geolocation","getCurrentPosition","pos","crd","coords","url","latitude","longitude","azureKey","get","timeout","then","x","loc","data","addresses","address","countryCode","catch","err","console","log","callInvokedBy","query","encodeURIComponent","trim","searchCountryCode","countrySet","queryCountryCode","undefined","cancelToken","c","results","orderResults","i","push","key","freeformAddress","position","isCancel","enterPressed","ordered","notInCountry","prevAddress","forEach","a","concat","menuButtonClick","menuButtonClicked","searchAddressText","fullSearch","Fragment","type","placeholder","onChange","onKeyDown","onFocus","EztImage","eztObject2Table","shapeProps","copyDataToClipboard","tableDiv","document","createElement","setAttribute","html","appendChild","Object","keys","callOutProperties","index","htmlTr2","htmlTr2dr","textContent","toString","toLowerCase","includes","htmlTr2dr2","link","p","href","style","font","padding","margin","color","nameId","fontWeight","copyToClipboard","title","copyToClipboardImg","addEventListener","copied","permissions","result","clipboard","writeText","atlasEventHandlerMove","pointPopup","offSet","autoAnchor","popupOptions","getOptions","pixelOffset","setOptions","showPopupForPoint","point","map","datasource","fromSideBar","popup","getType","markers","getMarkers","clear","setCamera","center","getCoordinates","getProperties","content","draggable","fillColor","closeButton","isOpen","open","shapes","getShapes","polygonSelectedArr","markup","addProperty","eztMakupOpacity","fillOpacity","bounds","atlas","BoundingBox","fromData","SideMenuPoints","tableClick","copyCalloutToClipboard","trData","nameKey","nameValue","points","SideMenu","sideMenuPoints","searchResult","message","errorMessage","cssClass","Version","number","deprojectToLatLon","y","_circumferenceHalf","Math","PI","exp","asin","pointInBoundingBox","bbox","searchForPolygon","shape","geometry","booleanPointInPolygon","searchForPoint","territoryFound","pointsinPolygons","territory","j","Map","primaryNameCol","mapReady","configurationError","searchPoint","fullAddress","showMenu","updateMap","pointsInPolygons","polygonsContainPoints","geocodedSearch","error","polygonsFound","doesShow","searchBarAction","zoom","view","dragRotateInteraction","authOptions","authType","subscriptionKey","events","add","project","eztPoints","pointLayerIcon","logo","eztIcon","imageSprite","featureArray","pointsJson","JSON","parse","json","latLon","ShapeWkt","replace","split","geom","mapsJs","Point","Position","pointFields","pointNameId","Fields","Values","calloutColumns","label","feature","Feature","eztPointsToFeatureArr","featureCollection","FeatureCollection","DataSource","sources","symbolLayer","SymbolLayer","iconOptions","image","anchor","allowOverlap","size","filter","polygonLayer","PolygonLayer","layers","toJson","top","bottom","left","right","polyFeatureArr","markupJson","z","sphericalMercWkt","wkt","group","opacity","latLonWkt","coors","spatial","ogc","WKT","read","eztMarkupToFeatureArr","eztMarkup","polyFeatureCollection","atlasClickEventHandlerClick","ev","atlasEventHandlerClosePopup","controls","ZoomControl","zoomDelta","light","prevProps","prevState","snapshot","parseFloat","searchMarker","htmlContent","pointInPolygon","showPointCallout","close","highlightPolygons","polygonProps","showPolygons","sideMenu","EztSplash","splash","EztSplashImg","MapConsoleMessage","mess","MapConsole","countryCodeList","MapContainer","eztProjectJson","atlasSupported","renderCheck","eztSplash","projectId","match","params","search","paramsInUrl","countryCodeValid","startsWith","toUpperCase","searchCountryCodeError","azureMapsSupport","App","exact","path","component","displayName","Boolean","window","hostname","baseUrl","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","render","basename","serviceWorker","ready","registration","unregister"],"mappings":"yHAAAA,EAAOC,QAAU,IAA0B,kD,oBCA3CD,EAAOC,QAAU,IAA0B,2C,oBCA3CD,EAAOC,QAAU,IAA0B,0C,kgBCkB5BC,G,qLAZP,OACI,4BAAQC,GAAG,aAAaC,QAASC,KAAKC,MAAMC,mBACxC,yBAAKJ,GAAG,iBACJK,IAAI,qgBACJC,IAAI,qB,GARCC,cCwBVC,G,yNApBXC,WAAa,SAACC,GACV,EAAKP,MAAMQ,qBAAqBD,I,uDAIhC,OACI,wBAAIE,UAAU,iBACVX,QAASC,KAAKO,WACdT,GAAIE,KAAKC,MAAMU,KACfC,WAAUZ,KAAKC,MAAMY,IACrBC,WAAUd,KAAKC,MAAMc,KAGpBf,KAAKC,MAAMU,U,GAfDN,cCeZW,G,8KAZP,OACI,wBAAIN,UAAU,0BACVZ,GAAIE,KAAKC,MAAMU,MAGdX,KAAKC,MAAMU,U,GARQN,c,sCCShCY,EACAC,E,SAFAC,EAAcC,IAAMD,YAwRTE,E,4MAlRXC,MAAQ,CACJC,MAAO,GACPjB,aAAc,GACdkB,SAAU,I,EAGdC,mBAAqB,SAACC,GAElB,EAAKzB,MAAM0B,SAASD,EAAEE,OAAOC,QAAQhB,IAAKa,EAAEE,OAAOC,QAAQd,IAAKW,EAAEE,OAAO9B,GAAI,MAE7E,EAAKgC,SAAS,CAAEP,MAAOG,EAAEE,OAAO9B,GAAIQ,aAAc,Q,EAGtDyB,QAAUC,oBAAS,SAACJ,GAEZV,GAIJ,EAAKe,mBAAmBL,KAEzB,K,EAEHM,QAAU,SAACR,GAEP,IAAMS,EAAQT,EAAEE,OAAOO,MAEnBA,EAAMC,OAAS,GAEflB,GAAQ,EACR,EAAKY,SAAS,CAAEP,MAAOY,MAIvBjB,GAAQ,EACR,EAAKY,SAAS,CAAEP,MAAOY,EAAO7B,aAAc,QAGhD,EAAKyB,QAAQI,I,EAIjBE,YAAc,SAACT,GAEPA,GAEAV,GAAQ,EACR,EAAKe,mBAAmBL,EAAQ,UAIhC,EAAK3B,MAAM0B,SAAS,KAAM,KAAM,KAAM,+B,EAK9CW,YAAc,WAEkB,KAAxB,EAAKhB,MAAME,WAENe,UAAUC,YAOXD,UAAUC,YAAYC,oBAAmB,SAACC,GAEtC,IAAIC,EAAMD,EAAIE,OAKVC,EAAM,iFAHAF,EAAIG,SAGqF,IAFzFH,EAAII,UAEiG,qBAAuB,EAAK9C,MAAM+C,SAEjJ5B,IAAM6B,IAAIJ,EAAK,CAAEK,QAAS,MACrBC,MAAK,SAAAC,GAEF,IAAIC,EAAMD,EAAEE,KAAKC,UAAU,GAAGC,QAAQC,YAEtC,EAAK3B,SAAS,CAAEN,SAAU6B,OAE7BK,OAAM,SAAAC,GAEHC,QAAQC,IAAI,kBAAmBF,GAC/B,EAAK7B,SAAS,CAAEN,SAAU,aAGnC,SAACmC,GAEA,EAAK7B,SAAS,CAAEN,SAAU,WA7B9BoC,QAAQC,IAAI,2BACZ,EAAK/B,SAAS,CAAEN,SAAU,U,EAkCtCS,mBAAqB,SAACE,EAAO2B,GAEzB,IAAMC,EAAQC,mBAAmB7B,EAAM8B,QAEnCpB,EAAM,mFAAqF,EAAK5C,MAAM+C,SAAW,wBAA0Be,EAAQ,aAEvJ,GAAI,EAAK9D,MAAMiE,kBAAmB,CAE9B,IAAMC,EAAa,cAAgB,EAAKlE,MAAMiE,kBACxCE,EAAmBJ,mBAAmB7B,EAAQ,IAAM,EAAKlC,MAAMiE,mBACrErB,EAAM,mFAAqF,EAAK5C,MAAM+C,SAAW,wBAA0BoB,EAAmB,IAAMD,EAAa,kBAIvKE,GAAVpD,GAEAA,IAGJ,IAAIX,EAAe,GAEnBc,IAAM6B,IAAIJ,EAAK,CACXK,QAAS,IACToB,YACI,IAAInD,GAAY,SAAkBoD,GAE9BtD,EAASsD,OAGpBpB,MAAK,SAAAC,GAEF,GAAIA,EAAEE,KAAKkB,SAAWpB,EAAEE,KAAKkB,QAAQpC,OAAQ,CAEzC,IAAIoC,EAAUpB,EAAEE,KAAKkB,QAEjB,EAAKlD,MAAME,WAEXgD,EAAU,EAAKC,aAAaD,IAGhC,IAAK,IAAIE,EAAI,EAAGA,EAAIF,EAAQpC,OAAQsC,IAChCpE,EAAaqE,KAAK,kBAAC,EAAD,CACdC,IAAKJ,EAAQE,GAAG5E,GAChBa,KAAM6D,EAAQE,GAAGlB,QAAQqB,gBACzBhE,IAAK2D,EAAQE,GAAGI,SAASjE,IACzBE,IAAKyD,EAAQE,GAAGI,SAAS/D,IACzBN,qBAAsB,EAAKgB,sBAInC,EAAKK,SAAS,CACVxB,aAAcA,SAKlBsD,QAAQC,IAAI,kCAAmC1B,GAEzB,UAAlB2B,GAA+C,UAAlBA,IAE7BxD,EAAaqE,KAAK,kBAAC,EAAD,CACdC,IAAK,mCAAqCzC,EAAQ,IAClDxB,KAAM,mCAAqCwB,EAAQ,OAGvD,EAAKL,SAAS,CACVxB,aAAcA,QAK7BoD,OAAM,SAAAC,GAECvC,IAAM2D,SAASpB,GACfC,QAAQC,IAAI,mBAAoBF,IAGhCC,QAAQC,IAAI,iBAAkBF,GAER,UAAlBG,GAA+C,UAAlBA,IAE7BxD,EAAaqE,KAAK,kBAAC,EAAD,CACdC,IAAK,mCAAqCzC,EAAO,IACjDxB,KAAM,mCAAqCwB,EAAO,OAGtD,EAAKL,SAAS,CACVxB,aAAcA,U,EASlC0E,aAAe,SAACtD,GAEE,UAAVA,EAAEkD,MAEF1D,GAAQ,EACR,EAAKmB,YAAY,EAAKf,MAAMC,MAAO,W,EAI3CkD,aAAe,SAACD,GAEZ,IAAIS,EAAU,GACVC,EAAe,GACfC,EAAc,GAoBlB,OAlBAX,EAAQY,SAAQ,SAACC,GAGTA,EAAE7B,QAAQqB,kBAAoBM,IAE1BE,EAAE7B,QAAQC,cAAgB,EAAKnC,MAAME,SAErCyD,EAAQN,KAAKU,GAIbH,EAAaP,KAAKU,GAGtBF,EAAcE,EAAE7B,QAAQqB,oBAIzBI,EAAQK,OAAOJ,I,EAI1BK,gBAAkB,WACd,EAAKtF,MAAMuF,kBAAkB,EAAKlE,MAAMC,OACxC,EAAKO,SAAS,CAAExB,aAAc,Q,uDAGxB,IAAD,OAEDmF,EAAoBzF,KAAKC,MAAMyF,WAAa,sBAAwB,iBAExE,OACI,kBAAC,IAAMC,SAAP,KACI,4BAAQjF,UAAU,aAClB,yBAAKA,UAAU,gBACX,kBAAC,EAAD,CAAYR,kBAAqBF,KAAKuF,kBAClC,2BAAO7E,UAAU,WACbkF,KAAK,OACLC,YAAaJ,EACbK,SAAU9F,KAAKkC,QACf6D,UAAW/F,KAAKgF,aAChB7C,MAAOnC,KAAKsB,MAAMC,MAClByE,QAAShG,KAAKsC,cAGlB,4BAAQxC,GAAG,cAAc8F,KAAK,SAAS7F,QAAS,kBAAM,EAAKsC,YAAY,EAAKf,MAAMC,SAClF,yBACIb,UAAU,YACVP,IAAI,61CACJC,IAAK,mBAGb,yBAAKM,UAAU,iBACX,yBAAKA,UAAW,UAAUP,IAAK8F,IAAU7F,IAAI,eAIrD,wBAAIM,UAAU,gBACTV,KAAKsB,MAAMhB,mB,GA5QVD,a,MCdf,SAAS6F,EAAgBC,EAAYC,GAExC,IAAIC,EAAWC,SAASC,cAAc,OACtCF,EAASG,aAAa,QAAS,mBAE/B,IAAIC,EAAOH,SAASC,cAAc,SAyElC,GAxEAF,EAASK,YAAYD,GACrBA,EAAKD,aAAa,QAAS,gBAE3BG,OAAOC,KAAKT,EAAWU,mBAAmBzB,SAAQ,SAAUR,EAAKkC,GAE7D,GAAIX,EAAWU,kBAAkBjC,GAAM,CAEnC,IAAImC,EAAUT,SAASC,cAAc,MACjCS,EAAYV,SAASC,cAAc,MACvCS,EAAUR,aAAa,QAAS,gBAChCQ,EAAUC,YAAcrC,EACxB6B,EAAKC,YAAYK,GACjBA,EAAQL,YAAYM,GAEpB,IAAI7E,EAAQgE,EAAWU,kBAAkBjC,GAAKsC,WAAWC,cAEzD,GAAIhF,EAAMiF,SAAS,aAAejF,EAAMiF,SAAS,QAC7CjF,EAAMiF,SAAS,YAAcxC,EAAIuC,cAAcC,SAAS,UAAYxC,EAAIuC,cAAcC,SAAS,WAC5FxC,EAAIuC,cAAcC,SAAS,SAChC,CAEE,IAAIC,EAAaf,SAASC,cAAc,MACxCc,EAAWb,aAAa,QAAS,kBACjC,IAAIc,EAAOhB,SAASC,cAAc,KAC9BgB,EAAIjB,SAASC,cAAc,KAC/BgB,EAAEf,aAAa,QAAS,SACxBe,EAAEN,YAAcd,EAAWU,kBAAkBjC,GAE7C0C,EAAKE,KAAOrB,EAAWU,kBAAkBjC,GAErCzC,EAAMiF,SAAS,SAEfE,EAAKE,KAAO,KAAOrB,EAAWU,kBAAkBjC,KAGhDA,EAAIuC,cAAcC,SAAS,UAAYxC,EAAIuC,cAAcC,SAAS,aAClEE,EAAKE,KAAO,UAAYrB,EAAWU,kBAAkBjC,IAGrDA,EAAIuC,cAAcC,SAAS,WAE3BE,EAAKE,KAAO,OAASrB,EAAWU,kBAAkBjC,IAGtD0C,EAAK1F,OAAS,SACd0F,EAAKZ,YAAYa,GACjBF,EAAWX,YAAYY,GACvBP,EAAQL,YAAYW,OAEjB,CACH,IAAIA,EAAaf,SAASC,cAAc,MACxCc,EAAWb,aAAa,QAAS,kBAEjC,IAAIe,EAAIjB,SAASC,cAAc,KAC/BgB,EAAEE,MAAMC,KAAO,wDACfH,EAAEE,MAAME,QAAU,IAClBJ,EAAEE,MAAMG,OAAS,IACjBL,EAAEE,MAAMI,MAAQ,QAChBN,EAAEN,YAAcd,EAAWU,kBAAkBjC,GAC7CyC,EAAWX,YAAYa,GACvBR,EAAQL,YAAYW,GAEhBlB,EAAWU,kBAAkBjC,GAAKsC,aAAef,EAAW2B,SAC5DP,EAAEE,MAAMC,KAAO,wDACfH,EAAEE,MAAMM,WAAa,aAQjC3B,EAAqB,CAErB,IAAI4B,EAAkB1B,SAASC,cAAc,UAC7CyB,EAAgBxB,aAAa,QAAS,mBACtCwB,EAAgBC,MAAQ,iCAExB,IAAIC,EAAqB5B,SAASC,cAAc,OAChD2B,EAAmB1B,aAAa,QAAS,sBACzC0B,EAAmB/H,IAAM,q/BAEzB6H,EAAgBtB,YAAYwB,GAC5BF,EAAgBG,iBAAiB,SAAS,WAEtC,IAAIC,EAAS,GACbzB,OAAOC,KAAKT,EAAWU,mBAAmBzB,SAAQ,SAAUR,EAAKkC,GAC7DsB,GAAUxD,EAAM,MAAQuB,EAAWU,kBAAkBjC,GAAKsC,WAAa,QAK3E3E,UAAU8F,YAAYtE,MAAM,CAAEpD,KAAM,oBAAqBwC,MAAK,SAAAmF,GACtC,WAAhBA,EAAOhH,OAAsC,UAAhBgH,EAAOhH,OAEpCiB,UAAUgG,UAAUC,UAAUJ,GAAQjF,MAAK,eAExC,WACCS,QAAQC,IAAI,uDAIrB,WAECtB,UAAUgG,UAAUC,UAAUJ,GAAQjF,MAAK,eAExC,WACCS,QAAQC,IAAI,0DAMxBwC,EAASK,YAAYsB,GAGzB,OAAO3B,EC5HJ,SAASoC,EAAsB/G,EAAGgH,GAErC,IAAIC,EAG0B,WAA1BD,EAAWE,YAA4D,qBAA1BF,EAAWE,YAAwD,iBAA1BF,EAAWE,YAA2D,gBAA1BF,EAAWE,WAC7ID,EAAS,CAAC,GAAI,IAEmB,UAA1BD,EAAWE,WAClBD,EAAS,EAAE,GAAI,GAEkB,SAA1BD,EAAWE,WAClBD,EAAS,CAAC,GAAI,GAEmB,QAA1BD,EAAWE,YAAkD,cAA1BF,EAAWE,YAAwD,aAA1BF,EAAWE,aAC9FD,EAAS,CAAC,EAAG,KAGjB,IAAIE,EAAeH,EAAWI,aAE1BD,EAAaE,cAAgBJ,IAE7BE,EAAaE,YAAcJ,EAE3BD,EAAWM,WAAWH,ICnBvB,SAASI,EAAkBC,EAAOC,EAAKC,EAAYC,EAAaC,EAAOlD,GAI1E,GAAa,UAFA8C,EAAMK,UAEG,CAQlB,IAAIZ,GANCU,GAAeF,EAAIK,QAAQC,aAAarH,QACzC+G,EAAIK,QAAQE,QAGhBP,EAAIQ,UAAU,CAAEC,OAAQV,EAAMW,iBAAkBjE,KAAM,QAK7B,WAArB0D,EAAMV,YAAuD,qBAArBU,EAAMV,YAAmD,iBAArBU,EAAMV,YAAsD,gBAArBU,EAAMV,WACzHD,EAAS,CAAC,GAAI,IAEc,UAArBW,EAAMV,WACbD,EAAS,EAAE,GAAI,GAEa,SAArBW,EAAMV,WACbD,EAAS,CAAC,GAAI,GAEc,QAArBW,EAAMV,YAA6C,cAArBU,EAAMV,YAAmD,aAArBU,EAAMV,aAC/ED,EAAS,CAAC,EAAG,KAIjB,IAAM1I,EAAQiJ,EAAMY,gBAEdC,EAAU7D,EAAgBjG,EAAOmG,GAEvCkD,EAAMN,WAAW,CACbe,QAASA,EACTjF,SAAUoE,EAAMW,iBAChBG,WAAW,EACXjB,YAAaJ,EACbsB,UAAW,2BACXC,aAAa,IAIZZ,EAAMa,UAEPb,EAAMc,KAAKjB,GAQf,IALA,IAAIkB,EAASjB,EAAWkB,YAEpBC,EAAqB,GAGhB7F,EAAI,EAAGA,EAAI2F,EAAOjI,OAAQsC,IAAK,CAEpC,IAAIkB,EAAOyE,EAAO3F,GAAG6E,UAErB,GAAa,YAAT3D,GAA+B,iBAATA,EAAyB,CAE/C,IAAI4E,EAASH,EAAO3F,GAAGoF,gBAGnBU,EAAO7J,KAAKyG,SAASnH,EAAM6H,SAE3BuC,EAAO3F,GAAG+F,YAAY,cAAeD,EAAOE,iBAE5CH,EAAmB5F,KAAK0F,EAAO3F,KAMJ,IAAvB8F,EAAOG,aACPN,EAAO3F,GAAG+F,YAAY,cAAe,IAYjDF,EAAmBnI,QACnB+G,EAAIQ,UAAU,CAAEiB,OAAQC,OAAWC,YAAYC,SAASR,GAAqB3E,KAAM,S,sBC3ChFoF,G,0NA1CXC,WAAa,SAACvJ,GAEV,EAAKzB,MAAMmJ,WAAWkB,YAAYlF,SAAQ,SAAAhC,GAElB,UAAhBA,EAAEmG,WAAyBnG,EAAE0G,gBAAgBhC,SAAWpG,EAAEoG,QAE1DmB,EAAkB7F,EAAG,EAAKnD,MAAMkJ,IAAK,EAAKlJ,MAAMmJ,YAAY,EAAM,EAAKnJ,MAAMqJ,MAAO,EAAKrJ,MAAMiL,4B,uDAMjG,IAAD,OAEDC,EAAS,CAAEC,QAAS,GAAIC,UAAW,IAevC,OAbIrL,KAAKC,MAAMqL,QAEX3E,OAAOC,KAAK5G,KAAKC,MAAMqL,OAAOzE,mBAAmBzB,SAAQ,SAACR,EAAKkC,GAEvD,EAAK7G,MAAMqL,OAAOzE,kBAAkBjC,KAAS,EAAK3E,MAAMqL,OAAOxD,SAC/DqD,EAAOC,QAAUxG,EACjBuG,EAAOE,UAAY,EAAKpL,MAAMqL,OAAOzE,kBAAkBjC,OAQ/D,2BAAOlE,UAAU,uBAAuBkE,IAAK5E,KAAKC,MAAMqL,OAAOxD,OAAQ/H,QAAS,kBAAM,EAAKkL,WAAW,EAAKhL,MAAMqL,UAC7G,+BACI,4BACI,wBAAI5K,UAAU,gBAAgByK,EAAOC,SACrC,wBAAI1K,UAAU,oBAAmB,gCAASyK,EAAOE,mB,GApC5ChL,cCuCdkL,G,8KArCD,IAAD,OAEDC,EAAiB,KACjBC,EAAe,KAEnB,GAAIzL,KAAKC,MAAMqL,QAAUtL,KAAKC,MAAMqL,OAAOlJ,OAAQ,CAE/CoJ,EAAiBxL,KAAKC,MAAMqL,OAAOnC,KAAI,SAAA/F,GACnC,OAAQ,kBAAC,EAAD,CACJwB,IAAKxB,EAAE0G,gBAAgBhC,OACvBwD,OAAQlI,EAAE0G,gBAAiBX,IAAK,EAAKlJ,MAAMkJ,IAC3CC,WAAY,EAAKnJ,MAAMmJ,WACvBE,MAAO,EAAKrJ,MAAMqJ,MAClB4B,uBAAwB,EAAKjL,MAAMiL,4BAI3C,IAAIQ,EAAU1L,KAAKC,MAAMqL,OAAOlJ,OAAS,EAAI,iBAAmB,gBAEhEqJ,EAAe,uBAAG/K,UAAU,mBAAmBV,KAAKC,MAAMqL,OAAOlJ,OAAlD,IAA2DsJ,EAA3D,UAIfD,EAFOzL,KAAKC,MAAM0L,aAEH,uBAAGjL,UAAU,mBAAmBV,KAAKC,MAAM0L,aAA3C,KAEA,uBAAGjL,UAAU,mBAAb,6CAGnB,OACI,yBAAKA,UAAWV,KAAKC,MAAM2L,UACrBH,EACDD,O,GAjCMnL,cCYRwL,G,8KAVP,OACI,yBAAKnL,UAAU,qBACX,wDAC4BV,KAAKC,MAAM6L,a,GAPjCzL,cCwDf,SAAS0L,EAAmB3I,EAAG4I,GAE9B,IAEIC,EAFU,WAEqBC,KAAKC,GAEpC9G,EAAI6G,KAAKE,IAAS,EAAJJ,EAJJ,YAOd,MAAO,CAAEjL,IADCqC,EAAI6I,EAAsB,IAClBpL,IAFPqL,KAAKG,MAAMhH,EAAI,IAAMA,EAAI,IAAO6G,KAAKC,GAAM,K,yBCjEvD,SAASG,EAAmBvL,EAAKF,EAAK0L,GAEzC,OAAQxL,GAAOwL,EAAK,IAChBxL,GAAOwL,EAAK,IACZ1L,GAAO0L,EAAK,IACZ1L,GAAO0L,EAAK,GCqDb,SAASC,EAAiBnC,EAAQxJ,EAAKE,GAK1C,IAHA,IAAIwJ,EAAqB,GAGhB7F,EAAI,EAAGA,EAAI2F,EAAOjI,OAAQsC,IAAK,CAEpC,IAAM+H,EAAQpC,EAAO3F,GAErB,GAAiC,YAA7B+H,EAAMnJ,KAAKoJ,SAAS9G,MAAmD,iBAA7B6G,EAAMnJ,KAAKoJ,SAAS9G,KAK9D,GAAI0G,EAAmBvL,EAAKF,EAAK4L,EAAM3C,gBAAgByC,MAEnCI,YAAsB,CAAC5L,EAAKF,GAAM4L,EAAMnJ,OAKpDiH,EAAmB5F,KAAK8H,GAOxC,OAAOlC,ECZJ,SAASqC,EAAevC,EAAQwC,GAKnC,IAHA,IAAMC,EAAmB,GAGhBpI,EAAI,EAAGA,EAAImI,EAAezK,OAAQsC,IAKvC,IAHA,IAAMqI,EAAYF,EAAenI,GAGxBsI,EAAI,EAAGA,EAAI3C,EAAOjI,OAAQ4K,IAAK,CAEpC,IAAMP,EAAQpC,EAAO2C,GAErB,GAAiC,UAA7BP,EAAMnJ,KAAKoJ,SAAS9G,KAAkB,CAEtC,IAAM3F,EAAQwM,EAAM3C,gBAIhBiD,EAAUjD,gBAAgBnJ,KAAKyG,SAASnH,EAAM6H,SAE9CgF,EAAiBnI,KAAK8H,IAMtC,OAAOK,E,ICqOIG,E,4MA1TX3L,MAAQ,CACJ6H,IAAK,GACLC,WAAY,GACZE,MAAO,GACP4D,eAAgB,GAChBC,UAAU,EACVC,mBAAoB,GACpBC,YAAa,CACTxM,IAAK,EACLE,IAAK,EACLuM,YAAa,GACb3B,aAAc,IAElB4B,UAAU,EACVC,WAAW,EACXC,iBAAkB,GAClBC,sBAAuB,I,EAkM3BC,eAAiB,SAAC9M,EAAKE,EAAKyC,EAASoK,GAEjC,GAAKA,EAuBD,EAAK9L,SAAS,CAAEuL,YAAa,CAAExM,IAAK,GAAIE,IAAK,GAAIuM,YAAa,GAAI3B,aAAciC,GAASH,iBAAkB,GAAIF,UAAU,EAAMG,sBAAuB,SAvB9I,CAGR,IAAMrD,EAAS,EAAK/I,MAAM8H,WAAWkB,YAG/BuD,EAAgBrB,EAAiBnC,EAAQxJ,EAAKE,GAK9C0M,EAAmBb,EAAevC,EAAQwD,EAAe,EAAKvM,OAEhEmM,EAAiBrL,OAAS,EAE1B,EAAKN,SAAS,CAAEuL,YAAa,CAAExM,IAAKA,EAAKE,IAAKA,EAAKuM,YAAa9J,GAAW+J,UAAU,EAAME,iBAAkBA,EAAkBC,sBAAuBG,EAAeL,WAAW,IAIhL,EAAK1L,SAAS,CAAEuL,YAAa,CAAExM,IAAKA,EAAKE,IAAKA,EAAKuM,YAAa9J,EAASmI,aAAc,IAAM4B,UAAU,EAAOE,iBAAkBA,EAAkBC,sBAAuBG,EAAeL,WAAW,M,EAS/MhI,kBAAoB,WAEhB,IAAMsI,EAAW,EAAKxM,MAAMiM,SAC5B,EAAKzL,SAAS,CAAEyL,UAAWO,EAAUN,WAAW,K,EAGpDO,gBAAkB,SAAClN,EAAKE,GAapB,OAFsByL,EAFT,EAAKlL,MAAM8H,WAAWkB,YAEYzJ,EAAKE,I,kEA9OnC,IAAD,OAEVoI,EAAM,IAAI0B,MAAU,MAAO,CAC7BjB,OAAQ,EAAE,QAAS,SACnBoE,KAAM,EACNC,KAAM,OACNC,uBAAuB,EACvBC,YAAa,CACTC,SAAU,kBACVC,gBAAiBrO,KAAKC,MAAM+C,YAIpCmG,EAAImF,OAAOC,IAAI,SAAS,WAEpBpF,EAAImF,OAAOC,IAAI,SAAS,SAAC7M,GAErBkC,QAAQC,IAAI,8BAA+BnC,MAI/C,IAAI8M,EAAU,EAAKvO,MAAMuO,QAEzB,GAAIA,GAAWA,EAAQC,UAAUrM,QAAUoM,EAAQC,UAAU,GAAGvB,eAAepN,GAAI,CAE/E,IAAIoN,EAAiBsB,EAAQC,UAAU,GAAGvB,eAEtCwB,EAAiBF,EAAQG,KAAOH,EAAQG,KAAOC,IAGnDzF,EAAI0F,YAAYN,IAAI,uBAAwBG,GAAgBvL,MAAK,WAG7D,IAAI2L,ECjEjB,SAA+BL,GASlC,IAPA,IAAInD,EAASmD,EAETM,EAAaC,KAAKC,MAAM3D,EAAO4D,MAE/BJ,EAAe,GAN0B,WASpCpK,GAYL,IAVA,IAAIyK,EAASJ,EAAWK,SAAS1K,GAAG2K,QAAQ,SAAU,IAAIA,QAAQ,IAAK,IAAIC,MAAM,KAG7EC,EAAOC,EAAyBL,EAAO,GAAIA,EAAO,IAClDjG,EAAQ,IAAI2B,OAAW4E,MAAM,IAAI5E,OAAW6E,SAASH,EAAI,IAASA,EAAI,MAEtEI,EAAc,GACdC,EAAc,GAlBuB,WAqBhC5C,GAGD+B,EAAWc,OAAO7C,KAAO1B,EAAO4B,eAAepN,KAC/C8P,EAAcb,EAAWe,OAAOpL,GAAGsI,IAIvC1B,EAAOyE,eAAe3K,SAAQ,SAAAhC,GAEtB2L,EAAWc,OAAO7C,KAAO5J,EAAEtD,KAE3B6P,EAAYvM,EAAE4M,OAASjB,EAAWe,OAAOpL,GAAGsI,QAZ/CA,EAAI,EAAGA,EAAI+B,EAAWc,OAAOzN,OAAQ4K,IAAM,EAA3CA,GAmBT,IAAIiD,EAAU,IAAIpF,OAAWqF,QAAQhH,EAAO,CAAEpB,OAAQ8H,EAAa/I,kBAAmB8I,IAEtFb,EAAanK,KAAKsL,IAjCbvL,EAAI,EAAGA,EAAIqK,EAAWK,SAAShN,OAAQsC,IAAM,EAA7CA,GAqCT,OAAOoK,EDmB4BqB,CAAsB3B,EAAQC,UAAU,IAEvD2B,EAAoB,IAAIvF,OAAWwF,kBAAkBvB,GAErD1F,EAAa,IAAIyB,SAAayF,WAAW,eAE7CnH,EAAIoH,QAAQhC,IAAInF,GAEhB,IAAIoH,EAAc,IAAI3F,QAAY4F,YAAYrH,EAAY,KAAM,CAC5DsH,YAAa,CACTC,MAAO,uBACPC,OAAQ,SACRC,cAAc,EACdC,KAAM,IAEVC,OAAQ,CAAC,MAAO,CAAC,KAAM,CAAC,iBAAkB,SAAU,CAAC,KAAM,CAAC,iBAAkB,iBAG9EC,EAAe,IAAInG,QAAYoG,aAAa7H,EAAY,KAAM,CAC9Da,UAAW,CAAC,MAAO,aACnBU,YAAa,CAAC,MAAO,eACrBoG,OAAQ,CAAC,MAAO,CAAC,KAAM,CAAC,iBAAkB,WAAY,CAAC,KAAM,CAAC,iBAAkB,mBAGpF5H,EAAI+H,OAAO3C,IAAI,CAACyC,EAAcR,IAE9BpH,EAAWmF,IAAI6B,GAEfjH,EAAIQ,UAAU,CAAEiB,OAAQC,OAAWC,YAAYC,SAAS3B,EAAW+H,UAAWxJ,QAAQ,CAAEyJ,IAAK,GAAIC,OAAQ,GAAIC,KAAM,GAAIC,MAAO,IAAM3L,KAAM,QAE1I,IAAI4L,EC7CjB,SAA+BC,GAKlC,IAHA,IAAID,EAAiB,GAGZE,EAAI,EAAGA,EAAID,EAAWrP,OAAQsP,IAAK,CAExC,IAAIC,EAAmBF,EAAWC,GAAGE,IACjCjR,EAAO8Q,EAAWC,GAAG/Q,KACrBkR,EAAQJ,EAAWC,GAAGG,MACtBhK,EAAQ4J,EAAWC,GAAG7J,MACtBiK,EAAUL,EAAWC,GAAGI,QAKxBC,EAAYJ,EAAiBtC,QAHrB,2DAGoC,SAAUjM,GACtD,IAAI+L,EAAS/L,EAAEkM,MAAM,KAEjB0C,EAAQxC,EAAyBL,EAAO,GAAIA,EAAO,IACvD,OAAO6C,EAAK,IAAU,IAAMA,EAAK,OAIjCtF,EAAWuF,KAAWC,IAAIC,IAAIC,KAAKL,GAEnCxF,EAAO1B,OAAWC,YAAYC,SAAS2B,EAAS,IAEhDuD,EAAU,IAAIpF,OAAWqF,QAAQxD,EAAS,GAAI,CAAE/L,KAAMA,EAAMkR,MAAOA,EAAO5H,UAAWpC,EAAO8C,YAAa,EAAGD,gBAAiBoH,EAASvF,KAAMA,GAAO,MAEvJiF,EAAe7M,KAAKsL,GAIxB,OAAOuB,EDW8Ba,CAAsB7D,EAAQ8D,WAE/CC,EAAwB,IAAI1H,OAAWwF,kBAAkBmB,GAE7DpI,EAAWmF,IAAIgE,GAEf,IAAIjJ,EAAQ,IAAIuB,QAEhB1B,EAAImF,OAAOC,IAAI,SAAS,SAAC7M,IEzGtC,SAAqCA,EAAG0H,EAAYE,EAAOlD,GAE9D,IAAI8C,EAAQxH,EAERwH,EAAMmB,OAAO,IAAM,SAAUnB,EAAMmB,OAAO,IAE1CpB,EAAkBC,EAAMmB,OAAO,GAAI3I,EAAEyH,IAAKC,GAAY,EAAOE,EAAOlD,GFmGvBoM,CAA4B9Q,EAAG0H,EAAYE,EAAO,EAAKrJ,MAAMiL,2BAE9F/B,EAAImF,OAAOC,IAAI,QAASjF,GAAO,SAAUmJ,IGlFtD,SAAqCA,EAAItJ,EAAKC,EAAYC,GAa7D,IAXA,IAAIgB,EAASjB,EAAWkB,YAWf5F,EAAI,EAAGA,EAAI2F,EAAOjI,OAAQsC,IAAK,CAEpC,IAAI+H,EAAQpC,EAAO3F,GACfkB,EAAO6G,EAAMlD,UAEH,YAAT3D,GAA+B,iBAATA,GAAkE,IAAtC6G,EAAM3C,gBAAgBa,aAEzE8B,EAAMhC,YAAY,cAAe,IH+DrBiI,CAA4BD,EAAItJ,EAAKC,MAGzCD,EAAImF,OAAOC,IAAI,QAAQ,SAAU7M,GAAK+G,EAAsB/G,EAAG4H,MAG/DH,EAAIwJ,SAASpE,IAAI,IAAI1D,UAAc+H,YAAY,CAC3CC,UAAW,EACXpL,MAAOoD,eAAmBiI,QAC1B,CAAEhO,SAAU,cAEX0J,EAAQ8D,UAAUlQ,QACnBwB,QAAQC,IAAI,+CAGhB,EAAK/B,SAAS,CAAEqH,IAAKA,EAAKC,WAAYA,EAAY8D,eAAgBA,EAAgBC,UAAU,EAAM7D,MAAOA,EAAOkE,WAAW,WAG5H,CAEH,IAAI7B,EAAe,6BAEd6C,EAAQC,UAAUrM,OAIXoM,EAAQC,UAAU,GAAGvB,eAAepN,KAE5C6L,GAAgB,sCAJhBA,GAAgB,6BAOf6C,EAAQ8D,UAAUlQ,SAEnBuJ,GAAgB,yBAGpBA,GAAgB,sDAEhB/H,QAAQC,IAAI,8BAA+B8H,GAE3C,EAAK7J,SAAS,CAAEsL,mBAAoBzB,U,yCAK7BoH,EAAWC,EAAWC,GAErC,GAAIjT,KAAKsB,MAAMkM,WAAaxN,KAAKsB,MAAM+L,YAAYxM,KAAOb,KAAKsB,MAAM+L,YAAYtM,IAAK,CASnF,GANKf,KAAKsB,MAAM6H,IAAIK,QAAQC,aAAarH,QAEpCpC,KAAKsB,MAAM6H,IAAIK,QAAQE,QAIxB1J,KAAKsB,MAAMoM,sBAAsBtL,OAGjCpC,KAAKsB,MAAM6H,IAAIQ,UAAU,CAAEiB,OAAQC,OAAWC,YAAYC,SAAS/K,KAAKsB,MAAMoM,uBAAwB9H,KAAM,YAExG,CAEH,IAAIgE,EAAS,CAACsJ,WAAWlT,KAAKsB,MAAM+L,YAAYtM,KAAMmS,WAAWlT,KAAKsB,MAAM+L,YAAYxM,MAGxFb,KAAKsB,MAAM6H,IAAIQ,UAAU,CAAEC,OAAQA,EAAQhE,KAAM,QAKrD,IAAIuN,EAAe,IAAItI,aAAiB,CACpCuI,YAAa,qEACbtO,SAAU,CAAC9E,KAAKsB,MAAM+L,YAAYtM,IAAKf,KAAKsB,MAAM+L,YAAYxM,KAC9DkI,YAAa,CAAC,GAAI,MAMtB,GAHA/I,KAAKsB,MAAM6H,IAAIK,QAAQ+E,IAAI4E,GAGgB,IAAvCnT,KAAKsB,MAAMmM,iBAAiBrL,QDrFrC,SAA0B+G,EAAKG,EAAO+J,EAAgBnI,GAEzD,IAAMnB,EAAU7D,EAAgBmN,EAAevJ,gBAAiBoB,GAE5DvC,EAAS,CAAC,EAAG,GAGQ,WAArBW,EAAMV,YAAuD,qBAArBU,EAAMV,YAAmD,iBAArBU,EAAMV,YAAsD,gBAArBU,EAAMV,WACzHD,EAAS,CAAC,GAAI,IAEc,UAArBW,EAAMV,WACbD,EAAS,EAAE,GAAI,GAEa,SAArBW,EAAMV,WACbD,EAAS,CAAC,GAAI,GAEc,QAArBW,EAAMV,YAA6C,cAArBU,EAAMV,YAAmD,aAArBU,EAAMV,aAC/ED,EAAS,CAAC,EAAG,KAIjBW,EAAMN,WAAW,CACbe,QAASA,EACTjF,SAAUuO,EAAexJ,iBACzBG,WAAW,EACXjB,YAAaJ,EACbsB,UAAW,2BACXC,aAAa,IAIZZ,EAAMa,UAEPb,EAAMc,KAAKjB,GCsDHmK,CAAiBtT,KAAKsB,MAAM6H,IAAKnJ,KAAKsB,MAAMgI,MAAOtJ,KAAKsB,MAAMmM,iBAAiB,GAAIzN,KAAKC,MAAMiL,6BAE3F,IAAIlL,KAAKsB,MAAMmM,iBAAiBrL,OAAQ,CAEvCpC,KAAKsB,MAAMgI,MAAMa,UAEjBnK,KAAKsB,MAAMgI,MAAMiK,QAKrB,IAFA,IAAIlJ,EAASrK,KAAKsB,MAAM8H,WAAWkB,YAE1B5F,EAAI,EAAGA,EAAI2F,EAAOjI,OAAQsC,IAAK,CAEpC,IAAI+H,EAAQpC,EAAO3F,GACfkB,EAAO6G,EAAMlD,UAEH,YAAT3D,GAA+B,iBAATA,GAAkE,IAAtC6G,EAAM3C,gBAAgBa,aAEzE8B,EAAMhC,YAAY,cAAe,IAM7C,GAAIzK,KAAKsB,MAAMoM,sBAAsBtL,OAAQ,CAEzC,IAAIiI,EAASrK,KAAKsB,MAAM8H,WAAWkB,aFjI5C,SAAsBkJ,EAAmBnJ,GAE5C,IAAK,IAAI3F,EAAI,EAAGA,EAAI2F,EAAOjI,OAAQsC,IAAK,CAEpC,IAAI+H,EAAQpC,EAAO3F,GAEnB,GAAiC,YAA7B+H,EAAMnJ,KAAKoJ,SAAS9G,MAAmD,iBAA7B6G,EAAMnJ,KAAKoJ,SAAS9G,KAI9D,IAFA,IAAIO,EAAasG,EAAM3C,gBAEdkD,EAAI,EAAGA,EAAIwG,EAAkBpR,OAAQ4K,IAAK,CAE/C,IACIyG,EADmBD,EAAkBxG,GACLlD,gBAEhC3D,EAAWxF,OAAS8S,EAAa9S,KAE7BwF,EAAWwE,cAAgBxE,EAAWuE,iBAEtC+B,EAAMhC,YAAY,cAAetE,EAAWuE,iBAKjB,IAA3BvE,EAAWwE,aAEX8B,EAAMhC,YAAY,cAAe,KEyGzCiJ,CAAa1T,KAAKsB,MAAMoM,sBAAuBrD,O,+BA8EvD,IAAIsB,EAAe3L,KAAKsB,MAAM8L,mBAAqBpN,KAAKsB,MAAM8L,mBAAqBpN,KAAKsB,MAAM+L,YAAY1B,aAEtGgI,EAAW,yBAOf,OALI3T,KAAKsB,MAAMiM,UAAYvN,KAAKsB,MAAM8L,sBAElCuG,EAAW,yBAIX,kBAAC,IAAMhO,SAAP,KACI,kBAAC,EAAD,CAAShE,SAAU3B,KAAK2N,eACpBzJ,kBAAmBlE,KAAKC,MAAMiE,kBAC9BlB,SAAUhD,KAAKC,MAAM+C,SACrB4B,IAAI,aACJY,kBAAmBxF,KAAKwF,oBAE5B,yBAAK1F,GAAI,OACL,kBAAC,EAAD,CACIwL,OAAQtL,KAAKsB,MAAMmM,iBACnB9B,aAAcA,EAAcxC,IAAKnJ,KAAKsB,MAAM6H,IAC5CC,WAAYpJ,KAAKsB,MAAM8H,WAAYE,MAAOtJ,KAAKsB,MAAMgI,MACrDsC,SAAU+H,EACVzI,uBAAwBlL,KAAKC,MAAMiL,yBAEvC,kBAAC,EAAD,CAASY,OAAS,e,GApTpBzL,a,2BIMHuT,E,uKAbP,OACI,yBAAKlT,UAAY,mBACb,yBAAKA,UAAY,UACZV,KAAKC,MAAM4T,OAAS,yBAAKnT,UAAU,YAAYP,IAAK2T,IAAc1T,IAAM,kBACnE,+C,GARFC,aCYT0T,G,8KATP,OAEI,uBAAGrT,UAAW,kBAAkBV,KAAKC,MAAM+T,U,GANvB3T,cCejB4T,E,uKAXP,OACI,yBAAKvT,UAAU,cAEX,kBAAC,EAAD,CAAmBsT,KAAMhU,KAAKC,MAAM0L,aAAc/G,IAAM5E,KAAKC,MAAM0L,oB,GAN1DtL,aCJZ6T,EAAoB,CAAC,KAAM,KAAM,KAAM,KAC5C,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA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","file":"static/js/main.bb1c1479.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/eztBlackAndWhiteLogo.f65a119e.svg\";","module.exports = __webpack_public_path__ + \"static/media/eztDefaultImg.28ecdcf0.svg\";","module.exports = __webpack_public_path__ + \"static/media/EztSplashImg.c6bcc4d9.svg\";","import React, { Component } from 'react';\r\nimport './MenuButton.css';\r\nclass MenuButton extends Component {\r\n\r\n render() {\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default MenuButton;","import React, { Component } from 'react';\r\nimport './autoComplete.css';\r\nimport { extend } from 'jquery';\r\n\r\nclass autoComplete extends Component {\r\n\r\n selectItem = (event) => {\r\n this.props.onSelectAutoComplete(event);\r\n }\r\n\r\n render(){\r\n return (\r\n
  • \r\n \r\n {this.props.name}\r\n \r\n
  • \r\n );\r\n }\r\n}\r\n\r\nexport default autoComplete;\r\n","import React, { Component } from 'react';\r\nimport './autoCompleteErrorMess.css';\r\nimport { extend } from 'jquery';\r\n\r\nclass autoCompleteErrorMess extends Component {\r\n\r\n render() {\r\n return (\r\n
  • \r\n\r\n {this.props.name}\r\n\r\n
  • \r\n );\r\n }\r\n}\r\n\r\nexport default autoCompleteErrorMess;","import React, { Component } from 'react';\r\nimport axios from 'axios';\r\nimport './Toolbar.css';\r\nimport MenuButton from './MenuButton';\r\nimport AutoComplete from './autoComplete';\r\nimport AutoCompleteErrorMess from './autoCompleteErrorMess';\r\nimport './InputBox.css';\r\nimport './InputButton.css';\r\nimport EztImage from './images/eztBlackAndWhiteLogo.svg';\r\nimport { StateToAbbrev } from './Utils/StateToAbbrev';\r\nimport { debounce } from 'lodash';\r\n\r\nvar CancelToken = axios.CancelToken;\r\nvar cancel;\r\nvar abort;\r\n\r\nclass Toolbar extends Component {\r\n\r\n state = {\r\n input: '',\r\n autoComplete: [],\r\n location: '',\r\n }\r\n\r\n selectAutoComplete = (e) => {\r\n\r\n this.props.onSearch(e.target.dataset.lat, e.target.dataset.lon, e.target.id, null);\r\n\r\n this.setState({ input: e.target.id, autoComplete: null });\r\n }\r\n\r\n apiCall = debounce((target) => {\r\n\r\n if (abort) {\r\n return;\r\n }\r\n\r\n this.getGeocodedResults(target);\r\n\r\n }, 750);\r\n\r\n onInput = (e) => {\r\n\r\n const value = e.target.value;\r\n\r\n if (value.length > 3) {\r\n\r\n abort = false;\r\n this.setState({ input: value });\r\n\r\n } else {\r\n\r\n abort = true;\r\n this.setState({ input: value, autoComplete: null });\r\n }\r\n\r\n this.apiCall(value);\r\n \r\n };\r\n\r\n searchClick = (target) => {\r\n\r\n if (target) {\r\n\r\n abort = true;\r\n this.getGeocodedResults(target, 'click');\r\n\r\n } else {\r\n\r\n this.props.onSearch(null, null, null, 'Enter an address to search');\r\n }\r\n\r\n }\r\n\r\n getLocation = () => {\r\n\r\n if (this.state.location === \"\") {\r\n\r\n if (!navigator.geolocation) {\r\n\r\n console.log('navigator not available');\r\n this.setState({ location: null });\r\n\r\n } else {\r\n\r\n navigator.geolocation.getCurrentPosition((pos) => {\r\n\r\n let crd = pos.coords;\r\n\r\n let lat = crd.latitude;\r\n let lon = crd.longitude;\r\n\r\n let url = \"https://atlas.microsoft.com/search/address/reverse/json?api-version=1.0&query=\" + lat + \",\" + lon + \"&subscription-key=\" + this.props.azureKey;\r\n\r\n axios.get(url, { timeout: 5000 })\r\n .then(x => {\r\n\r\n let loc = x.data.addresses[0].address.countryCode;\r\n\r\n this.setState({ location: loc });\r\n })\r\n .catch(err => {\r\n\r\n console.log('navigator error', err);\r\n this.setState({ location: \"US\" });\r\n });\r\n\r\n }, (err) => {\r\n\r\n this.setState({ location: \"US\" });\r\n });\r\n }\r\n }\r\n }\r\n\r\n getGeocodedResults = (value, callInvokedBy) => {\r\n\r\n const query = encodeURIComponent(value.trim());\r\n\r\n let url = 'https://atlas.microsoft.com/search/address/json?typeahead=true&subscription-key=' + this.props.azureKey + '&api-version=1&query=' + query + '&view=Auto';\r\n\r\n if (this.props.searchCountryCode) {\r\n\r\n const countrySet = 'countrySet=' + this.props.searchCountryCode;\r\n const queryCountryCode = encodeURIComponent(value + ' ' + this.props.searchCountryCode);\r\n url = 'https://atlas.microsoft.com/search/address/json?typeahead=true&subscription-key=' + this.props.azureKey + '&api-version=1&query=' + queryCountryCode + '&' + countrySet + '&view=Auto';\r\n\r\n }\r\n\r\n if (cancel != undefined) {\r\n \r\n cancel();\r\n }\r\n\r\n let autoComplete = [];\r\n\r\n axios.get(url, {\r\n timeout: 3000,\r\n cancelToken:\r\n new CancelToken(function executor(c) {\r\n // An executor function receives a cancel function as a parameter\r\n cancel = c;\r\n })\r\n })\r\n .then(x => {\r\n\r\n if (x.data.results && x.data.results.length) {\r\n\r\n let results = x.data.results;\r\n\r\n if (this.state.location) {\r\n\r\n results = this.orderResults(results);\r\n }\r\n\r\n for (var i = 0; i < results.length; i++) {\r\n autoComplete.push();\r\n }\r\n\r\n this.setState({\r\n autoComplete: autoComplete\r\n });\r\n\r\n } else {\r\n\r\n console.log('No results returned for search '+ value);\r\n\r\n if (callInvokedBy === 'enter' || callInvokedBy === 'click') {\r\n\r\n autoComplete.push();\r\n\r\n this.setState({\r\n autoComplete: autoComplete\r\n });\r\n }\r\n }\r\n })\r\n .catch(err => {\r\n\r\n if (axios.isCancel(err)) {\r\n console.log('Request canceled', err);\r\n } else {\r\n\r\n console.log('Request failed', err);\r\n\r\n if (callInvokedBy === 'enter' || callInvokedBy === 'click') {\r\n\r\n autoComplete.push();\r\n\r\n this.setState({\r\n autoComplete: autoComplete\r\n });\r\n }\r\n \r\n }\r\n\r\n });\r\n }\r\n\r\n enterPressed = (e) => {\r\n\r\n if (e.key === 'Enter') {\r\n\r\n abort = true;\r\n this.searchClick(this.state.input, 'enter');\r\n }\r\n }\r\n\r\n orderResults = (results) => {\r\n\r\n let ordered = [];\r\n let notInCountry = [];\r\n let prevAddress = \"\"\r\n\r\n results.forEach((a) => {\r\n\r\n // remove duplicates\r\n if (a.address.freeformAddress !== prevAddress) {\r\n\r\n if (a.address.countryCode === this.state.location) {\r\n\r\n ordered.push(a);\r\n\r\n } else {\r\n\r\n notInCountry.push(a);\r\n }\r\n\r\n prevAddress = a.address.freeformAddress;\r\n }\r\n });\r\n\r\n return ordered.concat(notInCountry);\r\n\r\n }\r\n\r\n menuButtonClick = () => {\r\n this.props.menuButtonClicked(this.state.input);\r\n this.setState({ autoComplete: null });\r\n }\r\n\r\n render() {\r\n\r\n let searchAddressText = this.props.fullSearch ? 'Search Full Address' : 'Search Address';\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n \"EztLogo\"\r\n
    \r\n
    \r\n
    \r\n
      \r\n {this.state.autoComplete}\r\n
    \r\n
    \r\n\r\n );\r\n }\r\n}\r\n\r\nexport default Toolbar;","import './BuildHtml.css';\r\n\r\nexport function eztObject2Table(shapeProps, copyDataToClipboard) {\r\n\r\n let tableDiv = document.createElement('div');\r\n tableDiv.setAttribute('class', 'calloutTableDiv');\r\n\r\n let html = document.createElement(\"table\");\r\n tableDiv.appendChild(html);\r\n html.setAttribute('class', 'calloutTable');\r\n\r\n Object.keys(shapeProps.callOutProperties).forEach(function (key, index) {\r\n\r\n if (shapeProps.callOutProperties[key]) {\r\n\r\n let htmlTr2 = document.createElement(\"tr\");\r\n let htmlTr2dr = document.createElement(\"td\");\r\n htmlTr2dr.setAttribute('class', 'tableDataKey');\r\n htmlTr2dr.textContent = key;\r\n html.appendChild(htmlTr2);\r\n htmlTr2.appendChild(htmlTr2dr);\r\n\r\n let value = shapeProps.callOutProperties[key].toString().toLowerCase();\r\n \r\n if (value.includes('https://') || value.includes('www') ||\r\n value.includes('http://') || key.toLowerCase().includes('email') || key.toLowerCase().includes('e-mail')\r\n || key.toLowerCase().includes('phone')\r\n ) {\r\n\r\n let htmlTr2dr2 = document.createElement(\"td\");\r\n htmlTr2dr2.setAttribute('class', 'tableDataValue');\r\n var link = document.createElement('a');\r\n let p = document.createElement(\"p\");\r\n p.setAttribute(\"class\", \"pLink\");\r\n p.textContent = shapeProps.callOutProperties[key];\r\n\r\n link.href = shapeProps.callOutProperties[key];\r\n\r\n if (value.includes('www')) {\r\n \r\n link.href = \"//\" + shapeProps.callOutProperties[key];\r\n }\r\n\r\n if (key.toLowerCase().includes('email') || key.toLowerCase().includes('e-mail')) {\r\n link.href = 'mailto:' + shapeProps.callOutProperties[key];\r\n } \r\n\r\n if (key.toLowerCase().includes('phone')) {\r\n\r\n link.href = 'tel:' + shapeProps.callOutProperties[key];\r\n }\r\n \r\n link.target = '_blank';\r\n link.appendChild(p);\r\n htmlTr2dr2.appendChild(link);\r\n htmlTr2.appendChild(htmlTr2dr2);\r\n\r\n } else {\r\n let htmlTr2dr2 = document.createElement(\"td\");\r\n htmlTr2dr2.setAttribute('class', 'tableDataValue');\r\n\r\n let p = document.createElement(\"p\");\r\n p.style.font = \"12px/20px 'Helvetica Neue',Arial,Helvetica,sans-serif\";\r\n p.style.padding = '0';\r\n p.style.margin = '0';\r\n p.style.color = 'black';\r\n p.textContent = shapeProps.callOutProperties[key];\r\n htmlTr2dr2.appendChild(p);\r\n htmlTr2.appendChild(htmlTr2dr2);\r\n\r\n if (shapeProps.callOutProperties[key].toString() === shapeProps.nameId) {\r\n p.style.font = \"14px/20px 'Helvetica Neue',Arial,Helvetica,sans-serif\";\r\n p.style.fontWeight = 'bold';\r\n }\r\n\r\n }\r\n }\r\n\r\n });\r\n\r\n if (copyDataToClipboard) {\r\n\r\n let copyToClipboard = document.createElement('button');\r\n copyToClipboard.setAttribute('class', 'copyToClipboard');\r\n copyToClipboard.title = \"Copy contact info to clipboard\";\r\n\r\n let copyToClipboardImg = document.createElement('img');\r\n copyToClipboardImg.setAttribute('class', 'copyToClipboardImg');\r\n copyToClipboardImg.src = \"data:image/svg+xml;base64,PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhciIgZGF0YS1pY29uPSJjb3B5IiBjbGFzcz0ic3ZnLWlubGluZS0tZmEgZmEtY29weSBmYS13LTE0IiByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTQzMy45NDEgNjUuOTQxbC01MS44ODItNTEuODgyQTQ4IDQ4IDAgMCAwIDM0OC4xMTggMEgxNzZjLTI2LjUxIDAtNDggMjEuNDktNDggNDh2NDhINDhjLTI2LjUxIDAtNDggMjEuNDktNDggNDh2MzIwYzAgMjYuNTEgMjEuNDkgNDggNDggNDhoMjI0YzI2LjUxIDAgNDgtMjEuNDkgNDgtNDh2LTQ4aDgwYzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWOTkuODgyYTQ4IDQ4IDAgMCAwLTE0LjA1OS0zMy45NDF6TTI2NiA0NjRINTRhNiA2IDAgMCAxLTYtNlYxNTBhNiA2IDAgMCAxIDYtNmg3NHYyMjRjMCAyNi41MSAyMS40OSA0OCA0OCA0OGg5NnY0MmE2IDYgMCAwIDEtNiA2em0xMjgtOTZIMTgyYTYgNiAwIDAgMS02LTZWNTRhNiA2IDAgMCAxIDYtNmgxMDZ2ODhjMCAxMy4yNTUgMTAuNzQ1IDI0IDI0IDI0aDg4djIwMmE2IDYgMCAwIDEtNiA2em02LTI1NmgtNjRWNDhoOS42MzJjMS41OTEgMCAzLjExNy42MzIgNC4yNDMgMS43NTdsNDguMzY4IDQ4LjM2OGE2IDYgMCAwIDEgMS43NTcgNC4yNDNWMTEyeiI+PC9wYXRoPjwvc3ZnPg==\"\r\n\r\n copyToClipboard.appendChild(copyToClipboardImg)\r\n copyToClipboard.addEventListener('click', () => {\r\n\r\n let copied = \"\";\r\n Object.keys(shapeProps.callOutProperties).forEach(function (key, index) {\r\n copied += key + \" : \" + shapeProps.callOutProperties[key].toString() + \"\\n\";\r\n\r\n });\r\n\r\n // for chrome\r\n navigator.permissions.query({ name: \"clipboard-write\" }).then(result => {\r\n if (result.state == \"granted\" || result.state == \"prompt\") {\r\n\r\n navigator.clipboard.writeText(copied).then(function () {\r\n\r\n }, function () {\r\n console.log('EZT Locator APP - failed to copy to clipboard');\r\n });\r\n\r\n }\r\n }, function () {\r\n // for firefox\r\n navigator.clipboard.writeText(copied).then(function () {\r\n\r\n }, function () {\r\n console.log('EZT Locator APP - failed to copy to clipboard');\r\n });\r\n });\r\n \r\n });\r\n \r\n tableDiv.appendChild(copyToClipboard);\r\n }\r\n\r\n return tableDiv;\r\n}","export function atlasEventHandlerMove(e, pointPopup) {\r\n\r\n let offSet;\r\n\r\n // set the off set of popup\r\n if (pointPopup.autoAnchor === 'bottom' || typeof pointPopup.autoAnchor === 'undefined' || pointPopup.autoAnchor === 'bottom-right' || pointPopup.autoAnchor === 'bottom-left') {\r\n offSet = [0, -16];\r\n\r\n } else if (pointPopup.autoAnchor === 'right') {\r\n offSet = [-14, 0];\r\n\r\n } else if (pointPopup.autoAnchor === 'left') {\r\n offSet = [14, 0];\r\n\r\n } else if (pointPopup.autoAnchor === 'top' || pointPopup.autoAnchor === 'top-right' || pointPopup.autoAnchor === 'top-left') {\r\n offSet = [0, 16];\r\n }\r\n\r\n var popupOptions = pointPopup.getOptions();\r\n\r\n if (popupOptions.pixelOffset !== offSet) {\r\n\r\n popupOptions.pixelOffset = offSet;\r\n\r\n pointPopup.setOptions(popupOptions);\r\n\r\n }\r\n}","import * as atlas from 'azure-maps-control';\r\nimport { eztObject2Table } from '../Utils/BuildHtml';\r\nimport { atlasEventHandlerClose } from './atlasEventHandlerClose';\r\nimport { atlasEventHandlerMove } from './atlasEventHandlerMove';\r\n\r\nexport function showPopupForPoint(point, map, datasource, fromSideBar, popup, copyDataToClipboard) {\r\n\r\n const type = point.getType();\r\n\r\n if (type === \"Point\") {\r\n\r\n if (!fromSideBar && map.markers.getMarkers().length) {\r\n map.markers.clear();\r\n }\r\n\r\n map.setCamera({ center: point.getCoordinates(), type: 'fly' });\r\n\r\n let offSet;\r\n\r\n // set the position of popup\r\n if (popup.autoAnchor === 'bottom' || typeof popup.autoAnchor === 'undefined' || popup.autoAnchor === 'bottom-right' || popup.autoAnchor === 'bottom-left') {\r\n offSet = [0, -16];\r\n\r\n } else if (popup.autoAnchor === 'right') {\r\n offSet = [-14, 0];\r\n\r\n } else if (popup.autoAnchor === 'left') {\r\n offSet = [14, 0];\r\n\r\n } else if (popup.autoAnchor === 'top' || popup.autoAnchor === 'top-right' || popup.autoAnchor === 'top-left') {\r\n offSet = [0, 16];\r\n\r\n }\r\n\r\n const props = point.getProperties();\r\n\r\n const content = eztObject2Table(props, copyDataToClipboard);\r\n\r\n popup.setOptions({\r\n content: content,\r\n position: point.getCoordinates(),\r\n draggable: false,\r\n pixelOffset: offSet,\r\n fillColor: 'rgba(255, 255, 255, .94)',\r\n closeButton: true,\r\n\r\n });\r\n\r\n if (!popup.isOpen()) {\r\n\r\n popup.open(map);\r\n }\r\n\r\n var shapes = datasource.getShapes();\r\n\r\n var polygonSelectedArr = [];\r\n // loop through shapes in datasource and increase opacity for the markup \r\n // that has a 1 to 1 relationship with the clicked point\r\n for (var i = 0; i < shapes.length; i++) {\r\n\r\n let type = shapes[i].getType();\r\n\r\n if (type === 'Polygon' || type === 'MultiPolygon') {\r\n\r\n let markup = shapes[i].getProperties();\r\n\r\n // if the point name is included in markup name\r\n if (markup.name.includes(props.nameId)) {\r\n\r\n shapes[i].addProperty('fillOpacity', markup.eztMakupOpacity);\r\n\r\n polygonSelectedArr.push(shapes[i]);\r\n\r\n //e.map.setCamera({ bounds: shapes[i].getBounds(), type: 'fly' });\r\n\r\n } else {\r\n\r\n if (markup.fillOpacity !== 0) {\r\n shapes[i].addProperty('fillOpacity', 0);\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n // close event for popup either a popup clicked or popup from geocoded search\r\n //map.events.add('close', pointPopup, function (ev) { atlasEventHandlerClose(ev, shapes, polygonSelectedArr, map, fromSideBar) });\r\n\r\n //map.events.add('move', function (e) { atlasEventHandlerMove(e, pointPopup) });\r\n\r\n if (polygonSelectedArr.length) {\r\n map.setCamera({ bounds: atlas.data.BoundingBox.fromData(polygonSelectedArr), type: 'fly' });\r\n }\r\n }\r\n \r\n}","import React, { Component } from 'react';\r\nimport './Utils/BuildHtml.css';\r\nimport { showPopupForPoint } from './Atlas/showPopupForPoint';\r\n\r\nclass SideMenuPoints extends Component {\r\n\r\n tableClick = (e) => {\r\n\r\n this.props.datasource.getShapes().forEach(x => {\r\n\r\n if (x.getType() === \"Point\" && x.getProperties().nameId === e.nameId) {\r\n\r\n showPopupForPoint(x, this.props.map, this.props.datasource, true, this.props.popup, this.props.copyCalloutToClipboard);\r\n } \r\n });\r\n \r\n };\r\n\r\n render() {\r\n\r\n let trData = { nameKey: '', nameValue: '' };\r\n\r\n if (this.props.points) {\r\n\r\n Object.keys(this.props.points.callOutProperties).forEach((key, index) => {\r\n \r\n if (this.props.points.callOutProperties[key] === this.props.points.nameId) {\r\n trData.nameKey = key;\r\n trData.nameValue = this.props.points.callOutProperties[key];\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n return (\r\n this.tableClick(this.props.points)}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n
    {trData.nameKey}{trData.nameValue}
    \r\n );\r\n }\r\n}\r\n\r\nexport default SideMenuPoints;","import React, { Component } from 'react';\r\nimport SideMenuPoints from './SideMenuPoints';\r\nimport './SideMenu.css';\r\n\r\nclass SideMenu extends Component {\r\n\r\n render() {\r\n\r\n let sideMenuPoints = null;\r\n let searchResult = null;\r\n\r\n if (this.props.points && this.props.points.length) {\r\n\r\n sideMenuPoints = this.props.points.map(x => {\r\n return ();\r\n });\r\n\r\n let message = this.props.points.length > 1 ? \"results found:\" : \"result found:\";\r\n\r\n searchResult =

    {this.props.points.length} {message}

    ;\r\n\r\n } else if (this.props.errorMessage) {\r\n\r\n searchResult =

    {this.props.errorMessage}

    ;\r\n } else {\r\n searchResult =

    Enter a search to see nearest locations

    ;\r\n }\r\n\r\n return (\r\n
    \r\n { searchResult }\r\n {sideMenuPoints }\r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default SideMenu;","import React, { Component } from 'react';\r\nimport './Version.css';\r\nclass Version extends Component {\r\n\r\n render() {\r\n\r\n return (\r\n
    \r\n \r\n EasyTerritory Locator v{this.props.number}\r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default Version;","/*\r\n * Function: isc.rim.sphericalMercator.projectFromLatLon(lonLat)\r\n *\r\n * Static function.\r\n * Project a lon/lat point to a Spherical Mercator point\r\n *\r\n * Parameters:\r\n * lonLat - isc.rim.point where the x-coord is the longitude and the y-coord is the latitude\r\n *\r\n * Returns:\r\n * isc.rim.point\r\n */\r\nexport function projectFromLatLon (lonLat) {\r\n if (lonLat) {\r\n\r\n var _radius = 6378136.98;\r\n \r\n var _circumferenceHalf = _radius * Math.PI; \r\n\r\n // break lonLat apart\r\n var lat = lonLat.getY();\r\n var lon = lonLat.getX();\r\n\r\n var xx;\r\n var yy;\r\n\r\n if (lat > 86.0) {\r\n yy = _circumferenceHalf;\r\n }\r\n else if (lat < -86.0) {\r\n yy = -_circumferenceHalf;\r\n }\r\n else {\r\n var latRad = (lat / 180.0) * Math.PI;\r\n var arc = Math.log(Math.tan(latRad) + (1.0 / Math.cos(latRad)));\r\n yy = (arc / Math.PI) * _circumferenceHalf;\r\n }\r\n\r\n xx = (lon / 180.0) * _circumferenceHalf;\r\n return (xx, yy);\r\n }\r\n return null;\r\n};\r\n\r\n\r\n\r\n/*\r\n* Function: isc.rim.sphericalMercator.deprojectToLatLon(mp)\r\n*\r\n* Static function.\r\n* De-project a Spherical Mercator point to a lat-lon\r\n*\r\n* Parameters:\r\n* mp - isc.rim.point in Spherical Mercator\r\n*\r\n* Returns:\r\n* isc.rim.point where the x-coord is the longitude and the y-coord is the latitude\r\n*/\r\nexport function deprojectToLatLon (x, y) {\r\n \r\n var _radius = 6378136.98;\r\n \r\n var _circumferenceHalf = _radius * Math.PI;\r\n\r\n var a = Math.exp((y * 2) / _radius);\r\n var yy = ((Math.asin((a - 1) / (a + 1))) / Math.PI) * 180.0;\r\n var xx = (x / _circumferenceHalf) * 180.0;\r\n return { lon: xx, lat: yy };\r\n \r\n};\r\n","export function pointInBoundingBox(lon, lat, bbox) {\r\n\r\n return (lon >= bbox[0] &&\r\n lon <= bbox[2] &&\r\n lat >= bbox[1] &&\r\n lat <= bbox[3]);\r\n};","import * as atlas from 'azure-maps-control';\r\nimport booleanPointInPolygon from \"@turf/boolean-point-in-polygon\";\r\nimport { pointInBoundingBox } from \"./../Utils/PointInBoundingBox\"; \r\n\r\nexport function searchShowPolygon(shapes, state, lat, lon) {\r\n // filter out any shape that isn't a Polygon or MultiPolygon\r\n var polygons = shapes.filter(x => {\r\n return x.data.geometry && (x.data.geometry.type === \"Polygon\" || x.data.geometry.type === \"MultiPolygon\");\r\n });\r\n\r\n //var polygonSelected = '';\r\n var polygonSelectedArr = [];\r\n var polygonFound = false;\r\n\r\n polygons.forEach(x => {\r\n\r\n // loop through each polygon to see when the lat and lon falls in\r\n let terrCheck = booleanPointInPolygon([lon, lat], x.data);\r\n\r\n let props = x.getProperties();\r\n\r\n if (terrCheck) {\r\n\r\n // if point found in polygon, then show polygon\r\n x.addProperty('fillOpacity', props.eztMakupOpacity);\r\n\r\n polygonSelectedArr.push(x);\r\n\r\n polygonFound = true;\r\n\r\n } else {\r\n\r\n // if point is not found in polygon, then hide polygon\r\n if (props.fillOpacity !== 0) {\r\n x.addProperty('fillOpacity', 0);\r\n }\r\n }\r\n });\r\n\r\n if (polygonSelectedArr.length > 0) {\r\n\r\n state.map.setCamera({ bounds: atlas.data.BoundingBox.fromData(polygonSelectedArr), type: 'fly' });\r\n }\r\n\r\n if (!polygonFound) {\r\n\r\n // if no polygon is found from the lat and lon values than the points lands outside a polygon.\r\n\r\n var center = [parseFloat(lon), parseFloat(lat)];\r\n\r\n // center the map at that searched location\r\n state.map.setCamera({ center: center, type: 'fly' });\r\n\r\n }\r\n\r\n return polygonSelectedArr;\r\n}\r\n\r\nexport function searchForPolygon(shapes, lat, lon) {\r\n\r\n let polygonSelectedArr = [];\r\n let polygonFound = false;\r\n\r\n for (var i = 0; i < shapes.length; i++) {\r\n\r\n const shape = shapes[i];\r\n\r\n if (shape.data.geometry.type === \"Polygon\" || shape.data.geometry.type === \"MultiPolygon\") {\r\n\r\n // loop through each polygon to see when the lat and lon falls in\r\n\r\n //do bounding box check first\r\n if (pointInBoundingBox(lon, lat, shape.getProperties().bbox)) {\r\n\r\n let terrCheck = booleanPointInPolygon([lon, lat], shape.data);\r\n\r\n if (terrCheck) {\r\n\r\n // if point falls in territory add it to array\r\n polygonSelectedArr.push(shape);\r\n\r\n }\r\n }\r\n }\r\n }\r\n\r\n return polygonSelectedArr;\r\n}\r\n\r\nexport function showPolygons(highlightPolygons, shapes) {\r\n\r\n for (var i = 0; i < shapes.length; i++) {\r\n\r\n let shape = shapes[i];\r\n\r\n if (shape.data.geometry.type === \"Polygon\" || shape.data.geometry.type === \"MultiPolygon\") {\r\n\r\n let shapeProps = shape.getProperties();\r\n\r\n for (var j = 0; j < highlightPolygons.length; j++) {\r\n\r\n let highlightPolygon = highlightPolygons[j];\r\n let polygonProps = highlightPolygon.getProperties();\r\n\r\n if (shapeProps.name === polygonProps.name) {\r\n\r\n if (shapeProps.fillOpacity !== shapeProps.eztMakupOpacity) {\r\n\r\n shape.addProperty('fillOpacity', shapeProps.eztMakupOpacity);\r\n }\r\n } else {\r\n\r\n // if point is not found in polygon, then hide polygon\r\n if (shapeProps.fillOpacity !== 0) {\r\n\r\n shape.addProperty('fillOpacity', 0);\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n}","import * as atlas from 'azure-maps-control';\r\nimport { eztObject2Table } from './BuildHtml';\r\nimport { atlasEventHandlerClose } from './../Atlas/atlasEventHandlerClose';\r\nimport { atlasEventHandlerMove } from './../Atlas/atlasEventHandlerMove';\r\n\r\nexport function searchShowPoint(shapes, polygonSelected, thisState){\r\n\r\n thisState.map.popups.getPopups().forEach(p => { p.remove() });\r\n\r\n let pointsinPolygons = [];\r\n\r\n polygonSelected.forEach(y => {\r\n\r\n for (let i = 0; i < shapes.length; i++) {\r\n\r\n if (shapes[i].data.geometry.type === 'Point') {\r\n\r\n if (y.getProperties().name.includes(shapes[i].getProperties().nameId)) {\r\n\r\n const props = shapes[i].getProperties();\r\n\r\n const content = eztObject2Table(props);\r\n\r\n pointsinPolygons.push(shapes[i]);\r\n\r\n if (polygonSelected.length === 1) {\r\n let popup = new atlas.Popup();\r\n\r\n let offSet = [0, 0];\r\n\r\n // set the position of popup\r\n if (popup.autoAnchor === 'bottom' || typeof popup.autoAnchor === 'undefined' || popup.autoAnchor === 'bottom-right' || popup.autoAnchor === 'bottom-left') {\r\n offSet = [0, -16];\r\n\r\n } else if (popup.autoAnchor === 'right') {\r\n offSet = [-14, 0];\r\n\r\n } else if (popup.autoAnchor === 'left') {\r\n offSet = [14, 0];\r\n\r\n } else if (popup.autoAnchor === 'top' || popup.autoAnchor === 'top-right' || popup.autoAnchor === 'top-left') {\r\n offSet = [0, 16];\r\n\r\n }\r\n\r\n popup.setOptions({\r\n content: content,\r\n position: shapes[i].getCoordinates(),\r\n draggable: false,\r\n pixelOffset: offSet,\r\n fillColor: 'rgba(255, 255, 255, .94)',\r\n closeButton: true\r\n\r\n });\r\n\r\n popup.open(thisState.map);\r\n\r\n thisState.map.events.add('close', popup, function (ev) {\r\n atlasEventHandlerClose(ev, shapes, [y]);\r\n });\r\n\r\n thisState.map.events.add('move', function (e) { atlasEventHandlerMove(e, popup) });\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n });\r\n\r\n return pointsinPolygons\r\n}\r\n\r\nexport function searchForPoint(shapes, territoryFound) {\r\n\r\n const pointsinPolygons = [];\r\n\r\n // loop through the found territory\r\n for (var i = 0; i < territoryFound.length; i++) {\r\n\r\n const territory = territoryFound[i];\r\n\r\n // loop through the shapes\r\n for (var j = 0; j < shapes.length; j++) {\r\n\r\n const shape = shapes[j];\r\n\r\n if (shape.data.geometry.type === 'Point') {\r\n\r\n const props = shape.getProperties();\r\n\r\n // match the territory with the point\r\n // territory name has the name of point\r\n if (territory.getProperties().name.includes(props.nameId)) {\r\n\r\n pointsinPolygons.push(shape);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return pointsinPolygons;\r\n}\r\n\r\nexport function showPointCallout(map, popup, pointInPolygon, copyCalloutToClipboard) {\r\n\r\n const content = eztObject2Table(pointInPolygon.getProperties(), copyCalloutToClipboard);\r\n\r\n let offSet = [0, 0];\r\n\r\n // set the position of popup\r\n if (popup.autoAnchor === 'bottom' || typeof popup.autoAnchor === 'undefined' || popup.autoAnchor === 'bottom-right' || popup.autoAnchor === 'bottom-left') {\r\n offSet = [0, -16];\r\n\r\n } else if (popup.autoAnchor === 'right') {\r\n offSet = [-14, 0];\r\n\r\n } else if (popup.autoAnchor === 'left') {\r\n offSet = [14, 0];\r\n\r\n } else if (popup.autoAnchor === 'top' || popup.autoAnchor === 'top-right' || popup.autoAnchor === 'top-left') {\r\n offSet = [0, 16];\r\n\r\n }\r\n\r\n popup.setOptions({\r\n content: content,\r\n position: pointInPolygon.getCoordinates(),\r\n draggable: false,\r\n pixelOffset: offSet,\r\n fillColor: 'rgba(255, 255, 255, .94)',\r\n closeButton: true\r\n\r\n });\r\n\r\n if (!popup.isOpen()) {\r\n\r\n popup.open(map);\r\n }\r\n}","import React, { Component } from 'react';\r\nimport * as atlas from 'azure-maps-control';\r\nimport Toolbar from './Toolbar';\r\nimport { atlasClickEventHandlerClick } from './Atlas/atlasEventHandlerClick';\r\nimport { atlasEventHandlerMove } from './Atlas/atlasEventHandlerMove';\r\nimport { atlasEventHandlerClosePopup } from './Atlas/atlasEventHandlerClose';\r\nimport eztIcon from './images/eztDefaultImg.svg'; \r\nimport './Map.css';\r\nimport './../../node_modules/azure-maps-control/dist/atlas.min.css';\r\nimport SideMenu from './SideMenu';\r\nimport Version from './Version';\r\nimport { eztPointsToFeatureArr, eztMarkupToFeatureArr } from './Utils/EztJsonToFeatureArr';\r\nimport { searchShowPolygon, searchForPolygon, showPolygons } from './Utils/SearchShowPolygon';\r\nimport { searchShowPoint, searchForPoint, showPointCallout } from './Utils/SearchShowPoint';\r\n\r\nclass Map extends Component {\r\n\r\n state = {\r\n map: '',\r\n datasource: '',\r\n popup: '',\r\n primaryNameCol: '',\r\n mapReady: false,\r\n configurationError: '',\r\n searchPoint: {\r\n lat: 0,\r\n lon: 0,\r\n fullAddress: '',\r\n errorMessage: '',\r\n },\r\n showMenu: false,\r\n updateMap: false,\r\n pointsInPolygons: [],\r\n polygonsContainPoints: []\r\n };\r\n\r\n componentDidMount() {\r\n\r\n const map = new atlas.Map('map', {\r\n center: [-98.5795, 39.8283],\r\n zoom: 3,\r\n view: \"Auto\",\r\n dragRotateInteraction: false,\r\n authOptions: {\r\n authType: 'subscriptionKey',\r\n subscriptionKey: this.props.azureKey\r\n }\r\n });\r\n \r\n map.events.add('ready', () => {\r\n\r\n map.events.add('error', (e) => {\r\n\r\n console.log('Ezt Locator App Map Error: ', e);\r\n\r\n });\r\n\r\n var project = this.props.project;\r\n\r\n if (project && project.eztPoints.length && project.eztPoints[0].primaryNameCol.id) {\r\n\r\n var primaryNameCol = project.eztPoints[0].primaryNameCol;\r\n\r\n var pointLayerIcon = project.logo ? project.logo : eztIcon;\r\n\r\n //Load the custom image icon into the map resources.\r\n map.imageSprite.add('customer-custom-icon', pointLayerIcon).then(() => {\r\n\r\n // parse the points from ezt into a azure feature array\r\n var featureArray = eztPointsToFeatureArr(project.eztPoints[0]);\r\n\r\n var featureCollection = new atlas.data.FeatureCollection(featureArray);\r\n\r\n var datasource = new atlas.source.DataSource('eztFeatures');\r\n\r\n map.sources.add(datasource);\r\n\r\n var symbolLayer = new atlas.layer.SymbolLayer(datasource, null, {\r\n iconOptions: {\r\n image: 'customer-custom-icon',\r\n anchor: 'center',\r\n allowOverlap: true,\r\n size: .3\r\n },\r\n filter: ['any', ['==', ['geometry-type'], 'Point'], ['==', ['geometry-type'], 'MultiPoint']]\r\n });\r\n\r\n var polygonLayer = new atlas.layer.PolygonLayer(datasource, null, {\r\n fillColor: ['get', 'fillColor'],\r\n fillOpacity: ['get', 'fillOpacity'],\r\n filter: ['any', ['==', ['geometry-type'], 'Polygon'], ['==', ['geometry-type'], 'MultiPolygon']]\t//Only render Polygon or MultiPolygon in this layer.\r\n });\r\n\r\n map.layers.add([polygonLayer, symbolLayer]);\r\n\r\n datasource.add(featureCollection);\r\n\r\n map.setCamera({ bounds: atlas.data.BoundingBox.fromData(datasource.toJson()), padding:{ top: 25, bottom: 25, left: 25, right: 25 }, type: 'fly' });\r\n\r\n var polyFeatureArr = eztMarkupToFeatureArr(project.eztMarkup);\r\n\r\n var polyFeatureCollection = new atlas.data.FeatureCollection(polyFeatureArr);\r\n\r\n datasource.add(polyFeatureCollection);\r\n\r\n var popup = new atlas.Popup();\r\n\r\n map.events.add('click', (e) => { atlasClickEventHandlerClick(e, datasource, popup, this.props.copyCalloutToClipboard) });\r\n\r\n map.events.add('close', popup, function (ev) {\r\n atlasEventHandlerClosePopup(ev, map, datasource, false);\r\n });\r\n\r\n map.events.add('move', function (e) { atlasEventHandlerMove(e, popup) });\r\n\r\n // azure maps control for zoom in and out\r\n map.controls.add(new atlas.control.ZoomControl({\r\n zoomDelta: 1,\r\n style: atlas.ControlStyle.light\r\n }), { position: 'top-right'});\r\n\r\n if (!project.eztMarkup.length) {\r\n console.log('Ezt Locator App Map Error: Markup not found');\r\n }\r\n\r\n this.setState({ map: map, datasource: datasource, primaryNameCol: primaryNameCol, mapReady: true, popup: popup, updateMap: false });\r\n\r\n });\r\n } else {\r\n\r\n var errorMessage = \"Error Loading Project:\\r\\n\";\r\n\r\n if (!project.eztPoints.length) {\r\n\r\n errorMessage += \"Point layer not found.\\r\\n\";\r\n\r\n } else if (!project.eztPoints[0].primaryNameCol.id) {\r\n\r\n errorMessage += \"Primary name column not found.\\r\\n\";\r\n }\r\n\r\n if (!project.eztMarkup.length) {\r\n\r\n errorMessage += \"Markup not found.\\r\\n\";\r\n }\r\n\r\n errorMessage += \"Please check project configuration in EasyTerritory\"\r\n\r\n console.log('Ezt Locator App Map Error: ', errorMessage);\r\n\r\n this.setState({ configurationError: errorMessage });\r\n }\r\n });\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n\r\n if (this.state.updateMap && this.state.searchPoint.lat && this.state.searchPoint.lon) {\r\n\r\n // if marker exists remove it\r\n if (this.state.map.markers.getMarkers().length) {\r\n\r\n this.state.map.markers.clear();\r\n }\r\n\r\n // move map\r\n if (this.state.polygonsContainPoints.length) {\r\n\r\n // center on polygons\r\n this.state.map.setCamera({ bounds: atlas.data.BoundingBox.fromData(this.state.polygonsContainPoints), type: 'fly' });\r\n \r\n } else {\r\n\r\n let center = [parseFloat(this.state.searchPoint.lon), parseFloat(this.state.searchPoint.lat)];\r\n\r\n // center the map at that searched location\r\n this.state.map.setCamera({ center: center, type: 'fly' });\r\n\r\n }\r\n\r\n // drop html marker on map\r\n let searchMarker = new atlas.HtmlMarker({\r\n htmlContent: \"
    \",\r\n position: [this.state.searchPoint.lon, this.state.searchPoint.lat],\r\n pixelOffset: [5, -18]\r\n });\r\n\r\n this.state.map.markers.add(searchMarker);\r\n\r\n // show point callout if there is just one point\r\n if (this.state.pointsInPolygons.length === 1) {\r\n\r\n showPointCallout(this.state.map, this.state.popup, this.state.pointsInPolygons[0], this.props.copyCalloutToClipboard);\r\n\r\n } else if(!this.state.pointsInPolygons.length) {\r\n\r\n if (this.state.popup.isOpen()) {\r\n\r\n this.state.popup.close();\r\n }\r\n\r\n let shapes = this.state.datasource.getShapes();\r\n\r\n for (var i = 0; i < shapes.length; i++) {\r\n\r\n let shape = shapes[i];\r\n let type = shape.getType();\r\n\r\n if ((type === \"Polygon\" || type === \"MultiPolygon\") && shape.getProperties().fillOpacity !== 0) {\r\n\r\n shape.addProperty('fillOpacity', 0);\r\n }\r\n\r\n }\r\n }\r\n\r\n if (this.state.polygonsContainPoints.length) {\r\n\r\n let shapes = this.state.datasource.getShapes();\r\n\r\n showPolygons(this.state.polygonsContainPoints, shapes);\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n geocodedSearch = (lat, lon, address, error) => {\r\n\r\n if (!error) {\r\n\r\n //let pointsInPolygons = this.searchBarAction(lat, lon);\r\n const shapes = this.state.datasource.getShapes();\r\n\r\n // do a spatial search to find the territory that geocoded point falls in\r\n const polygonsFound = searchForPolygon(shapes, lat, lon);\r\n\r\n //let pointsInPolygons = searchShowPoint(shapes, polygonSelected, this.state);\r\n\r\n // look for the point from point layer with one to one relationship with the found polygon\r\n const pointsInPolygons = searchForPoint(shapes, polygonsFound, this.state);\r\n\r\n if (pointsInPolygons.length > 1) {\r\n\r\n this.setState({ searchPoint: { lat: lat, lon: lon, fullAddress: address }, showMenu: true, pointsInPolygons: pointsInPolygons, polygonsContainPoints: polygonsFound, updateMap: true});\r\n\r\n } else {\r\n\r\n this.setState({ searchPoint: { lat: lat, lon: lon, fullAddress: address, errorMessage: '' }, showMenu: false, pointsInPolygons: pointsInPolygons, polygonsContainPoints: polygonsFound, updateMap: true});\r\n }\r\n\r\n } else {\r\n this.setState({ searchPoint: { lat: '', lon: '', fullAddress: '', errorMessage: error }, pointsInPolygons: [], showMenu: true, polygonsContainPoints: [] });\r\n }\r\n\r\n };\r\n\r\n menuButtonClicked = () => {\r\n\r\n const doesShow = this.state.showMenu;\r\n this.setState({ showMenu: !doesShow, updateMap: false });\r\n }\r\n\r\n searchBarAction = (lat, lon) => {\r\n\r\n /*\r\n if (this.state.map.markers.getMarkers().length) {\r\n\r\n this.state.map.markers.clear();\r\n }\r\n */\r\n\r\n let shapes = this.state.datasource.getShapes();\r\n\r\n let polygonSelected = searchForPolygon(shapes, lat, lon);\r\n\r\n return polygonSelected;\r\n /*\r\n // take the lat and lon from search and find the polygon\r\n var polygonSelected = searchShowPolygon(shapes, this.state, lat, lon);\r\n\r\n // look for the point from point layer with one to one relationship with the found polygon\r\n let pointsInPolygons = searchShowPoint(shapes, polygonSelected, this.state);\r\n\r\n let searchMarker = new atlas.HtmlMarker({\r\n htmlContent: \"
    \",\r\n position: [lon, lat],\r\n pixelOffset: [5, -18]\r\n });\r\n\r\n this.state.map.markers.add(searchMarker);\r\n \r\n return pointsInPolygons;\r\n */\r\n }\r\n\r\n render() {\r\n\r\n let errorMessage = this.state.configurationError ? this.state.configurationError : this.state.searchPoint.errorMessage;\r\n \r\n let sideMenu = 'sideMenu sideMenuClose';\r\n\r\n if (this.state.showMenu || this.state.configurationError) {\r\n\r\n sideMenu = 'sideMenu sideMenuOpen';\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\nexport default Map;","import * as atlas from 'azure-maps-control';\r\nimport * as mapsJs from '../mapsJs/mapsJs';\r\nimport * as spatial from 'azure-maps-spatial-io';\r\n\r\nexport function eztPointsToFeatureArr(eztPoints) {\r\n\r\n var points = eztPoints;\r\n\r\n var pointsJson = JSON.parse(points.json);\r\n\r\n var featureArray = [];\r\n\r\n // loop through each point in the custom points layer\r\n for (let i = 0; i < pointsJson.ShapeWkt.length; i++) {\r\n\r\n let latLon = pointsJson.ShapeWkt[i].replace(\"POINT(\", \"\").replace(\")\", \"\").split(\" \");\r\n\r\n // convert spherical mercator to lat and lon\r\n let geom = mapsJs.deprojectToLatLon(latLon[0], latLon[1]);\r\n let point = new atlas.data.Point(new atlas.data.Position(geom['lon'], geom['lat']));\r\n\r\n let pointFields = {};\r\n let pointNameId = \"\";\r\n\r\n // loop through the field metadata from the project and extract columns flagged with 'name' and 'callout'\r\n for (let j = 0; j < pointsJson.Fields.length; j++) {\r\n\r\n // grab the column with the name flag at set that as the nameId on the azure maps feature point\r\n if (pointsJson.Fields[j] === points.primaryNameCol.id) {\r\n pointNameId = pointsJson.Values[i][j];\r\n }\r\n\r\n // grab all the 'callout columns' and add to the azure maps feature point properties\r\n points.calloutColumns.forEach(x => {\r\n\r\n if (pointsJson.Fields[j] === x.id) {\r\n\r\n pointFields[x.label] = pointsJson.Values[i][j];\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n let feature = new atlas.data.Feature(point, { nameId: pointNameId, callOutProperties: pointFields });\r\n\r\n featureArray.push(feature);\r\n\r\n }\r\n\r\n return featureArray;\r\n\r\n}\r\n\r\nexport function eztMarkupToFeatureArr(markupJson) {\r\n\r\n var polyFeatureArr = [];\r\n\r\n // loop through each markup from the project\r\n for (let z = 0; z < markupJson.length; z++) {\r\n\r\n var sphericalMercWkt = markupJson[z].wkt;\r\n var name = markupJson[z].name;\r\n var group = markupJson[z].group\r\n var color = markupJson[z].color;\r\n var opacity = markupJson[z].opacity;\r\n\r\n var regEx = /[-]{0,1}[\\d]*[.]{0,1}[\\d]+\\s[-]{0,1}[\\d]*[.]{0,1}[\\d]*/g;\r\n\r\n // using regular expression to find all coordinates and convert spherical mercator to lat and lon\r\n var latLonWkt = sphericalMercWkt.replace(regEx, function (x) {\r\n var latLon = x.split(\" \");\r\n // lon = latLon[0]; lat = latLon[1];\r\n var coors = mapsJs.deprojectToLatLon(latLon[0], latLon[1]);\r\n return coors['lon'] + \" \" + coors['lat'];\r\n });\r\n\r\n // read the wkt string to the map control \r\n let geometry = spatial.io.ogc.WKT.read(latLonWkt);\r\n\r\n let bbox = atlas.data.BoundingBox.fromData(geometry[0]);\r\n\r\n var feature = new atlas.data.Feature(geometry[0], { name: name, group: group, fillColor: color, fillOpacity: 0, eztMakupOpacity: opacity, bbox: bbox}, null);\r\n\r\n polyFeatureArr.push(feature);\r\n\r\n }\r\n\r\n return polyFeatureArr;\r\n}","import { showPopupForPoint} from './showPopupForPoint';\r\n\r\nexport function atlasClickEventHandlerClick(e, datasource, popup, copyDataToClipboard) {\r\n\r\n let point = e;\r\n\r\n if (point.shapes[0] && 'data' in point.shapes[0]) {\r\n\r\n showPopupForPoint(point.shapes[0], e.map, datasource, false, popup, copyDataToClipboard);\r\n }\r\n \r\n}\r\n\r\n","\r\nexport function atlasEventHandlerClose(ev, shapes, polygons, map, fromSideBar) {\r\n\r\n ev.target.close();\r\n\r\n if (fromSideBar && map.markers.getMarkers().length) {\r\n\r\n map.markers.clear();\r\n }\r\n\r\n polygons.forEach(x => { \r\n\r\n for (let i = 0; i < shapes.length; i++) {\r\n\r\n let type = shapes[i].getType();\r\n\r\n if ((type === \"Polygon\" || type === \"MultiPolygon\") && shapes[i].getProperties().name === x.getProperties().name && shapes[i].fillOpacity !== 0) {\r\n\r\n shapes[i].addProperty('fillOpacity', 0);\r\n\r\n }\r\n } \r\n\r\n }); \r\n\r\n}\r\n\r\nexport function atlasEventHandlerClosePopup(ev, map, datasource, fromSideBar) {\r\n\r\n let shapes = datasource.getShapes();\r\n\r\n /*\r\n if (fromSideBar) {\r\n if (map.markers.getMarkers().length) {\r\n\r\n map.markers.clear();\r\n }\r\n }\r\n */\r\n\r\n for (var i = 0; i < shapes.length; i++) {\r\n\r\n let shape = shapes[i];\r\n let type = shape.getType();\r\n\r\n if ((type === \"Polygon\" || type === \"MultiPolygon\") && shape.getProperties().fillOpacity !== 0) {\r\n\r\n shape.addProperty('fillOpacity', 0);\r\n }\r\n\r\n }\r\n\r\n}","import React, { Component } from 'react';\r\nimport './EztSplash.css';\r\nimport EztSplashImg from './images/EztSplashImg.svg'\r\n\r\nclass EztSplash extends Component {\r\n\r\n \r\n render() {\r\n return (\r\n
    \r\n
    \r\n {this.props.splash ? \"EasyTerritory\"/\r\n :

    Loading...

    \r\n }\r\n\r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default EztSplash;","import React, { Component } from 'react';\r\nimport './MapConsole.css';\r\n\r\nclass MapConsoleMessage extends Component {\r\n\r\n\r\n render() {\r\n return (\r\n\r\n

    {this.props.mess}

    \r\n\r\n );\r\n }\r\n\r\n}\r\n\r\nexport default MapConsoleMessage;","import React, { Component } from 'react';\r\nimport './MapConsole.css';\r\nimport MapConsoleMessage from './MapConsoleMessage';\r\n\r\nclass MapConsole extends Component {\r\n\r\n render() {\r\n return (\r\n
    \r\n\r\n \r\n {/*

    {this.props.errorMessage}

    */}\r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default MapConsole;","export const countryCodeList = [\"AF\", \"AX\", \"AL\", \"DZ\",\r\n \"AS\",\r\n \"AD\",\r\n \"AO\",\r\n \"AI\",\r\n \"AQ\",\r\n \"AG\",\r\n \"AR\",\r\n \"AM\",\r\n \"AW\",\r\n \"AU\",\r\n \"AT\",\r\n \"AZ\",\r\n \"BS\",\r\n \"BH\",\r\n \"BD\",\r\n \"BB\",\r\n \"BY\",\r\n \"BE\",\r\n \"BZ\",\r\n \"BJ\",\r\n \"BM\",\r\n \"BT\",\r\n \"BO\",\r\n \"BQ\",\r\n \"BA\",\r\n \"BW\",\r\n \"BV\",\r\n \"BR\",\r\n \"IO\",\r\n \"BN\",\r\n \"BG\",\r\n \"BF\",\r\n \"BI\",\r\n \"CV\",\r\n \"KH\",\r\n \"CM\",\r\n \"CA\",\r\n \"KY\",\r\n \"CF\",\r\n \"TD\",\r\n \"CL\",\r\n \"CN\",\r\n \"CX\",\r\n \"CC\",\r\n \"CO\",\r\n \"KM\",\r\n \"CG\",\r\n \"CD\",\r\n \"CK\",\r\n \"CR\",\r\n \"CI\",\r\n \"HR\",\r\n \"CU\",\r\n \"CW\",\r\n \"CY\",\r\n \"CZ\",\r\n \"DK\",\r\n \"DJ\",\r\n \"DM\",\r\n \"DO\",\r\n \"EC\",\r\n \"EG\",\r\n \"SV\",\r\n \"GQ\",\r\n \"ER\",\r\n \"EE\",\r\n \"SZ\",\r\n \"ET\",\r\n \"FK\",\r\n \"FO\",\r\n \"FJ\",\r\n \"FI\",\r\n \"FR\",\r\n \"GF\",\r\n \"PF\",\r\n \"TF\",\r\n \"GA\",\r\n \"GM\",\r\n \"GE\",\r\n \"DE\",\r\n \"GH\",\r\n \"GI\",\r\n \"GR\",\r\n \"GL\",\r\n \"GD\",\r\n \"GP\",\r\n \"GU\",\r\n \"GT\",\r\n \"GG\",\r\n \"GN\",\r\n \"GW\",\r\n \"GY\",\r\n \"HT\",\r\n \"HM\",\r\n \"VA\",\r\n \"HN\",\r\n \"HK\",\r\n \"HU\",\r\n \"IS\",\r\n \"IN\",\r\n \"ID\",\r\n \"IR\",\r\n \"IQ\",\r\n \"IE\",\r\n \"IM\",\r\n \"IL\",\r\n \"IT\",\r\n \"JM\",\r\n \"JP\",\r\n \"JE\",\r\n \"JO\",\r\n \"KZ\",\r\n \"KE\",\r\n \"KI\",\r\n \"KP\",\r\n \"KR\",\r\n \"KW\",\r\n \"KG\",\r\n \"LA\",\r\n \"LV\",\r\n \"LB\",\r\n \"LS\",\r\n \"LR\",\r\n \"LY\",\r\n \"LI\",\r\n \"LT\",\r\n \"LU\",\r\n \"MO\",\r\n \"MK\",\r\n \"MG\",\r\n \"MW\",\r\n \"MY\",\r\n \"MV\",\r\n \"ML\",\r\n \"MT\",\r\n \"MH\",\r\n \"MQ\",\r\n \"MR\",\r\n \"MU\",\r\n \"YT\",\r\n \"MX\",\r\n \"FM\",\r\n \"MD\",\r\n \"MC\",\r\n \"MN\",\r\n \"ME\",\r\n \"MS\",\r\n \"MA\",\r\n \"MZ\",\r\n \"MM\",\r\n \"NA\",\r\n \"NR\",\r\n \"NP\",\r\n \"NL\",\r\n \"NC\",\r\n \"NZ\",\r\n \"NI\",\r\n \"NE\",\r\n \"NG\",\r\n \"NU\",\r\n \"NF\",\r\n \"MP\",\r\n \"NO\",\r\n \"OM\",\r\n \"PK\",\r\n \"PW\",\r\n \"PS\",\r\n \"PA\",\r\n \"PG\",\r\n \"PY\",\r\n \"PE\",\r\n \"PH\",\r\n \"PN\",\r\n \"PL\",\r\n \"PT\",\r\n \"PR\",\r\n \"QA\",\r\n \"RE\",\r\n \"RO\",\r\n \"RU\",\r\n \"RW\",\r\n \"BL\",\r\n \"SH\",\r\n \"KN\",\r\n \"LC\",\r\n \"MF\",\r\n \"PM\",\r\n \"VC\",\r\n \"WS\",\r\n \"SM\",\r\n \"ST\",\r\n \"SA\",\r\n \"SN\",\r\n \"RS\",\r\n \"SC\",\r\n \"SL\",\r\n \"SG\",\r\n \"SX\",\r\n \"SK\",\r\n \"SI\",\r\n \"SB\",\r\n \"SO\",\r\n \"ZA\",\r\n \"GS\",\r\n \"SS\",\r\n \"ES\",\r\n \"LK\",\r\n \"SD\",\r\n \"SR\",\r\n \"SJ\",\r\n \"SE\",\r\n \"CH\",\r\n \"SY\",\r\n \"TW\",\r\n \"TJ\",\r\n \"TZ\",\r\n \"TH\",\r\n \"TL\",\r\n \"TG\",\r\n \"TK\",\r\n \"TO\",\r\n \"TT\",\r\n \"TN\",\r\n \"TR\",\r\n \"TM\",\r\n \"TC\",\r\n \"TV\",\r\n \"UG\",\r\n \"UA\",\r\n \"AE\",\r\n \"GB\",\r\n \"UM\",\r\n \"US\",\r\n \"UY\",\r\n \"UZ\",\r\n \"VU\",\r\n \"VE\",\r\n \"VN\",\r\n \"VG\",\r\n \"VI\",\r\n \"WF\",\r\n \"EH\",\r\n \"YE\",\r\n \"ZM\",\r\n \"ZW\"];\r\n\r\nexport default { countryCodeList: countryCodeList }","import React, { Component } from 'react';\r\nimport * as atlas from 'azure-maps-control';\r\nimport axios from 'axios';\r\nimport Map from './Map';\r\nimport EztSplash from './EztSplash';\r\nimport MapConsole from './MapConsole';\r\nimport { countryCodeList} from './countryCodes/countryCodes';\r\n\r\nexport class MapContainer extends Component {\r\n \r\n state = {\r\n eztProjectJson: null,\r\n azureKey: '',\r\n atlasSupported: true,\r\n showMenu: false,\r\n errorMessage: '',\r\n searchCountryCode: '',\r\n copyCalloutToClipboard: false\r\n }\r\n\r\n componentDidMount() {\r\n\r\n let projectId = this.props.match.params.projectId;\r\n\r\n let search = this.props.location.search;\r\n\r\n let searchCountryCode = '';\r\n\r\n let paramsInUrl = false;\r\n\r\n let countryCodeValid = false;\r\n\r\n if (search && search.toLowerCase().startsWith('?searchcountrycode=')) {\r\n\r\n paramsInUrl = true;\r\n\r\n let countryCode = search.split('=');\r\n\r\n if (countryCode[1]) {\r\n\r\n for (var i = 0; i < countryCodeList.length; i++) {\r\n\r\n if (countryCode[1].toUpperCase() === countryCodeList[i]) {\r\n\r\n countryCodeValid = true;\r\n }\r\n }\r\n\r\n if (countryCodeValid) {\r\n\r\n searchCountryCode = countryCode[1];\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n let searchCountryCodeValue = null;\r\n let searchCountryCodeError = false;\r\n\r\n if (paramsInUrl && countryCodeValid) {\r\n\r\n searchCountryCodeValue = searchCountryCode\r\n } else if (paramsInUrl && !countryCodeValid) {\r\n searchCountryCodeError = true;\r\n }\r\n\r\n if (projectId && !searchCountryCodeError) {\r\n\r\n var azureMapsSupport = true;\r\n\r\n if (!atlas.isSupported()) {\r\n\r\n console.log('EZT Locator App- Your browser is not supported by Azure Maps');\r\n azureMapsSupport = false;\r\n\r\n } else if (!atlas.isSupported(true)) {\r\n\r\n console.log('EZT Locator App- Your browser is supported by Azure Maps, but may have major performance caveats.');\r\n }\r\n\r\n axios.get('api/Project?id=' + projectId).then(x => {\r\n\r\n this.setState({ eztProjectJson: x.data, azureKey: x.data.azureKey, atlasSupported: azureMapsSupport, searchCountryCode: searchCountryCode, copyCalloutToClipboard: x.data.copyCalloutToClipboard });\r\n\r\n }).catch(err => {\r\n\r\n this.setState({ errorMessage: 'Call to get EZT project failed: ' + err.message });\r\n\r\n });\r\n\r\n } else if (projectId && searchCountryCodeError){\r\n\r\n this.setState({ errorMessage: \"Country Code not found. Please enter valid 'searchCountryCode' value\"});\r\n }\r\n\r\n }\r\n \r\n renderCheck = () => {\r\n\r\n if (this.state.eztProjectJson && this.state.atlasSupported && !this.state.errorMessage) {\r\n\r\n return \r\n } else {\r\n\r\n var eztSplash = [];\r\n eztSplash.push();\r\n\r\n if (!this.state.atlasSupported) {\r\n\r\n this.setState({ errorMessage: \"Your browser is not supported. Please use a modern browser\" });\r\n\r\n } else if (this.state.errorMessage) {\r\n\r\n eztSplash.push();\r\n }\r\n\r\n return eztSplash;\r\n \r\n }\r\n\r\n }\r\n\r\n render() {\r\n\r\n let map = this.renderCheck();\r\n \r\n return (\r\n \r\n {map}\r\n \r\n );\r\n \r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { MapContainer } from './components/MapContainer';\r\nimport './custom.css'\r\n\r\nexport default class App extends Component {\r\n static displayName = App.name;\r\n\r\n render() {\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\n//import registerServiceWorker from './registerServiceWorker';\r\nimport * as serviceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\nserviceWorker.unregister();\r\n\r\n"],"sourceRoot":""}