(this["webpackJsonpvalueguard-analytics"]=this["webpackJsonpvalueguard-analytics"]||[]).push([[0],{2:function(e,t,a){"use strict";var r=a(8),s=a(24);t.a=new class{constructor(){Object(r.h)(this,{loading:!1,isLoggedIn:!1,user_id:"",username:"",email:"",customer:null,access_token:"",refresh_token:null,roles:[],picture:"/global_assets/images/image.png",services:[]})}setTokens(e){let{accessToken:t,refreshToken:a}=e;this.access_token=t||"",this.refresh_token="undefined"!==typeof a?a:null,this.isLoggedIn=!!this.access_token}setProfileFromMe(e){e=e||{},this.user_id=e.id||"",this.email=e.email||"",this.username=e.username||this.email||"",this.customer=e.customer||null;const t=Array.isArray(e.roles)?e.roles:[];this.roles=t.map(e=>({authority:e}))}saveToSession(){const e={refresh_token:this.refresh_token,access_token:this.access_token,username:this.username,isLoggedIn:this.isLoggedIn,roles:this.roles,loading:this.loading,picture:this.picture};sessionStorage.setItem("loginSession",JSON.stringify(e))}loadFromSession(){try{const e=sessionStorage.getItem("loginSession");if(!e)return;const t=JSON.parse(e);this.refresh_token=t&&"undefined"!==typeof t.refresh_token?t.refresh_token:null,this.access_token=t&&t.access_token||"",this.username=t&&t.username||"",this.isLoggedIn=!(!t||!t.isLoggedIn)&&!!this.access_token,this.roles=t&&Array.isArray(t.roles)?t.roles:[],this.loading=!(!t||!t.loading),this.picture=t&&t.picture||this.picture}catch(e){}}clear(){this.loading=!1,this.isLoggedIn=!1,this.user_id="",this.username="",this.email="",this.customer=null,this.access_token="",this.refresh_token=null,this.roles=[],this.services=[],sessionStorage.removeItem("loginSession"),s.e()}async login(e,t){this.loading=!0;try{const a=await s.d(e,t);return this.setTokens({accessToken:a.access_token,refreshToken:a.refresh_token}),this.saveToSession(),a}catch(a){throw this.loading=!1,a}}async getAccessToken(){try{return await s.a()}catch(e){throw this.clear(),e}}hasRole(e){return Array.isArray(this.roles)&&this.roles.some(t=>t.authority===e)}hasAnyRole(e){return e=e||[],!!Array.isArray(this.roles)&&this.roles.some(t=>-1!==e.indexOf(t.authority))}hasAllRoles(e){return e=e||[],!!Array.isArray(this.roles)&&e.every(e=>this.roles.some(t=>t.authority===e))}}},20:function(e,t,a){"use strict";var r=a(0),s=a.n(r);class n extends r.Component{render(){return s.a.createElement("div",{class:"card"},s.a.createElement("div",{class:"card-header header-elements-inline"},s.a.createElement("h5",{class:"card-title"},this.props.title),s.a.createElement("div",{class:"header-elements"},s.a.createElement("div",{class:"list-icons"},s.a.createElement("a",{class:"list-icons-item","data-action":"collapse"})))),s.a.createElement("div",{class:"card-body"},this.props.body))}}t.a=n},24:function(e,t,a){"use strict";a.d(t,"d",(function(){return i})),a.d(t,"a",(function(){return l})),a.d(t,"c",(function(){return c})),a.d(t,"e",(function(){return m})),a.d(t,"b",(function(){return d}));let r=null,s=null;const n="MCzlK1nheYwYBykmpnsRBilN05qCc4yG",o="wISmqeyLNF6AyuR6ToNtG6LnRuaZ0HFGIdahKK3BUpKB2TUGV6ZTztkglM6I07wQ";async function i(e,t){try{const a=await fetch("".concat("https://api-prod.valueguard.se","/oauth/token"),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"password",username:e,password:t,audience:"https://api.valueguard.se",client_id:n,client_secret:o}).toString()});if(!a.ok){const e=await a.json().catch(()=>({}));throw new Error(e.error_description||"Authentication failed")}const i=await a.json();return r=i.access_token,s=i.refresh_token,localStorage.setItem("vg_access_token",r),s&&localStorage.setItem("vg_refresh_token",s),i}catch(a){throw console.error("Login failed:",a),a}}async function l(){if(r)return r;const e=localStorage.getItem("vg_access_token");if(e)return r=e,r;if(localStorage.getItem("vg_refresh_token"))try{return(await async function(){const e=s||localStorage.getItem("vg_refresh_token");if(!e)throw new Error("No refresh token available");try{const t=await fetch("".concat("https://api-prod.valueguard.se","/oauth/token"),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:n,client_secret:o}).toString()});if(!t.ok)throw new Error("Token refresh failed");const a=await t.json();return r=a.access_token,a.refresh_token&&(s=a.refresh_token),localStorage.setItem("vg_access_token",r),a.refresh_token&&localStorage.setItem("vg_refresh_token",a.refresh_token),a}catch(t){throw console.error("Token refresh failed:",t),p(),t}}()).access_token}catch(t){throw console.error("Token refresh failed:",t),p(),new Error("Authentication required")}throw new Error("No authentication token available")}function c(){return!(!r&&!localStorage.getItem("vg_access_token"))}function m(){p()}function p(){r=null,s=null,localStorage.removeItem("vg_access_token"),localStorage.removeItem("vg_refresh_token")}function d(){r=localStorage.getItem("vg_access_token"),s=localStorage.getItem("vg_refresh_token")}},28:function(e,t,a){"use strict";var r,s,n,o,i=a(33),l=a(0),c=a.n(l),m=a(61),p=a(34);class d extends l.Component{render(){const e=Object(p.a)(m.a)(r||(r=Object(i.a)(["\n width: 100%;\n height: 25px;\n "]))),t=p.a.div(s||(s=Object(i.a)(["\n height: 25px;\n line-height: 25px;\n width: 50px;\n text-align: center;\n background-color: #000;\n color: #fff;\n border-radius: 50%;\n cursor: grab;\n "]))),a=(e,a)=>c.a.createElement(t,e,a.valueNow),l=p.a.div(n||(n=Object(i.a)(["\n top: 0;\n bottom: 0;\n background: ",";\n border-radius: 999px;\n "])),e=>(2===e.index||e.index,"#0f0")),d=(e,t)=>c.a.createElement(l,Object.assign({},e,{index:t.index}));p.a.div(o||(o=Object(i.a)(["\n resize: horizontal;\n overflow: auto;\n width: 50%;\n max-width: 100%;\n padding-right: 8px;\n "])));return c.a.createElement("div",{class:"sidebar sidebar-light sidebar-right sidebar-expand-md"},c.a.createElement("div",{class:"sidebar-mobile-toggler text-center"},c.a.createElement("a",{href:"#",class:"sidebar-mobile-expand"},c.a.createElement("i",{class:"icon-screen-full"}),c.a.createElement("i",{class:"icon-screen-normal"})),c.a.createElement("span",{class:"font-weight-semibold"},"S\xf6k"),c.a.createElement("a",{href:"#",class:"sidebar-mobile-right-toggle"},c.a.createElement("i",{class:"icon-arrow-right8"}))),c.a.createElement("div",{class:"sidebar-content"},c.a.createElement("div",{class:"card"},c.a.createElement("div",{class:"card-header bg-transparent border-bottom header-elements-inline"},c.a.createElement("span",{class:"card-title font-weight-semibold"},"S\xf6kning"))),this.props.searchCriteria.map((function(t,r){return c.a.createElement("div",{class:t.pageClass},c.a.createElement("div",{class:"card-header bg-transparent header-elements-inline"},c.a.createElement("span",{class:"text-uppercase font-size-sm font-weight-semibold"},t.name),c.a.createElement("div",{class:"header-elements"},c.a.createElement("div",{class:"list-icons"},c.a.createElement("a",{class:"list-icons-item","data-action":"collapse"})))),c.a.createElement("div",{class:"card-body"},Object.keys(t.fields).map((function(r){return"text"===t.fields[r].type?c.a.createElement("div",{class:"form-group"},c.a.createElement("label",null,t.fields[r].title),c.a.createElement("input",{name:r,sectionid:t.id,onChange:this.props.updateSearchCriteria,value:t.fields[r].value,type:t.fields[r].type,class:"form-control",placeholder:t.fields[r].placeholder})):"dropdown"===t.fields[r].type?c.a.createElement("div",{class:"form-group"},c.a.createElement("label",null,t.fields[r].title),c.a.createElement("select",{name:r,sectionid:t.id,onChange:this.props.updateSearchCriteria,value:t.fields[r].value,class:"form-control"},Object.keys(t.fields[r].options).map((function(e){return c.a.createElement("option",{value:t.fields[r].options[e].value},t.fields[r].options[e].name)})))):"checkbox"===t.fields[r].type?c.a.createElement("div",{class:"form-group form-check"},c.a.createElement("input",{name:r,sectionid:t.id,onChange:this.props.updateSearchCriteria,checked:t.fields[r].value,type:"checkbox",class:"form-check-input"}),c.a.createElement("label",{class:"form-check-label"}," ",t.fields[r].title)):"single-slider"===t.fields[r].type?c.a.createElement("div",{class:"form-group"},c.a.createElement("label",null,t.fields[r].title),c.a.createElement(e,{renderTrack:d,renderThumb:a,min:"3",max:"3500"})):"min-max-slider"===t.fields[r].type?c.a.createElement("div",{class:"form-group"},c.a.createElement("label",null,t.fields[r].title),c.a.createElement(e,{defaultValue:[50,75],renderTrack:d,renderThumb:a})):void 0}),this)))}),this),c.a.createElement("div",{style:{paddingLeft:"20px"}},this.props.colorMapping&&this.props.colorMapping.map((e,t)=>{const a=Math.round(e.threshold);return c.a.createElement("div",{key:t,style:{display:"flex",alignItems:"center",marginBottom:"5px"}},c.a.createElement("div",{style:{width:"20px",height:"20px",backgroundColor:e.color,marginRight:"10px"}}),c.a.createElement("span",null,a))})),c.a.createElement("div",{class:"card-body"},c.a.createElement("div",{class:"col-12"},c.a.createElement("button",{onClick:this.props.searchFunction,class:"btn btn-success btn-block"},"S\xf6k")))))}}t.a=d},30:function(e,t,a){"use strict";var r=a(0),s=a.n(r),n=a(29),o=a(2);class i extends s.a.Component{render(){return s.a.createElement("div",{className:"inputField"},s.a.createElement("input",{className:"input",type:this.props.type,placeholder:this.props.placeholder,onChange:e=>this.props.onChange(e.target.value)}))}}var l=i;class c extends s.a.Component{render(){return s.a.createElement("div",{className:"SubmitButton"},s.a.createElement("button",{className:"btn",disabled:this.props.disabled,onClick:()=>this.props.onClick()},this.props.text))}}var m=c;class p extends s.a.Component{constructor(e){super(e),this.onSubmit=async e=>{if(e&&"function"===typeof e.preventDefault&&e.preventDefault(),this.state.username&&this.state.password){this.setState({buttonDisabled:!0,error:""});try{await o.a.login(this.state.username,this.state.password);const e=await o.a.getAccessToken(),t=await fetch("".concat("https://api-prod.valueguard.se","/v0/users/me?access_token=").concat(e));if(t.ok){const e=await t.json();if(o.a.setProfileFromMe(e),o.a.saveToSession(),this.props.onSuccess)this.props.onSuccess();else{const e=o.a.hasRole("MAPSTAT2:BASIC"),t=o.a.hasRole("API_SERVICE2:BOSTADSREGISTRET");window.location.href=e?"/mapstat":t?"/bostadsregistret":"/"}}}catch(t){console.error("login failed",t),this.setState({buttonDisabled:!1,error:t.message||"Login failed"})}}else this.setState({error:"Please enter both username and password"})},this.state={username:"",password:"",buttonDisabled:!1,error:""}}setInputValue(e,t){t=t.trim(),this.setState({[e]:t})}resetForm(){this.setState({username:"",password:"",buttonDisabled:!1,error:""})}render(){return s.a.createElement("div",{className:"loginForm"},"Log in",this.state.error&&s.a.createElement("div",{className:"alert alert-danger",role:"alert"},this.state.error),s.a.createElement(l,{type:"text",placeholder:"Username",value:this.state.username,onChange:e=>this.setInputValue("username",e)}),s.a.createElement(l,{type:"password",placeholder:"Password",value:this.state.password,onChange:e=>this.setInputValue("password",e)}),s.a.createElement(m,{text:this.state.buttonDisabled?"Logging in...":"Login",type:"button",disabled:this.state.buttonDisabled,onClick:this.onSubmit}))}}var d=p;class u extends r.Component{constructor(e){super(e),this.doLogout=this.doLogout.bind(this)}async doLogout(){try{o.a.clear(),window.location.href="proxy.php?url=https%3A%2F%2Fmapstat.valueguard.se%2F"}catch(e){console.log(e)}}render(){return s.a.createElement("div",{class:"navbar navbar-expand-md navbar-light bg-body navbar-static"},s.a.createElement("div",{class:"navbar-header navbar-light d-none d-md-flex align-items-md-center"},s.a.createElement("div",{class:"navbar-brand navbar-brand-md"},s.a.createElement("a",{href:"/",class:"d-inline-block"},s.a.createElement("img",{src:"/global_assets/images/logo_light.png",alt:""}))),s.a.createElement("div",{class:"navbar-brand navbar-brand-xs"},s.a.createElement("a",{href:"/",class:"d-inline-block"},s.a.createElement("img",{src:"/global_assets/images/logo_icon_light.png",alt:""})))),s.a.createElement("div",{class:"d-flex flex-1 d-md-none"},s.a.createElement("div",{class:"navbar-brand mr-auto"},s.a.createElement("a",{href:"/",class:"d-inline-block"},s.a.createElement("img",{src:"/global_assets/images/logo_light.png",alt:""}))),s.a.createElement("button",{class:"navbar-toggler",type:"button","data-toggle":"collapse","data-target":"#navbar-mobile"},s.a.createElement("i",{class:"icon-tree5"})),s.a.createElement("button",{class:"navbar-toggler sidebar-mobile-main-toggle",type:"button"},s.a.createElement("i",{class:"icon-paragraph-justify3"})),s.a.createElement("button",{class:"navbar-toggler sidebar-mobile-right-toggle",type:"button"},s.a.createElement("i",{class:"icon-more"}))),s.a.createElement("div",{class:"collapse navbar-collapse",id:"navbar-mobile"},s.a.createElement("ul",{class:"navbar-nav"},s.a.createElement("li",{class:"nav-item"},s.a.createElement("a",{href:"#",class:"navbar-nav-link sidebar-control sidebar-main-toggle d-none d-md-block"},s.a.createElement("i",{class:"icon-paragraph-justify3"}))),s.a.createElement("li",{class:"nav-item"},s.a.createElement("a",{href:"#",class:"navbar-nav-link sidebar-control sidebar-right-toggle d-none d-md-block"},s.a.createElement("i",{class:"icon-indent-decrease2"})))),s.a.createElement("ul",{class:"navbar-nav ml-auto"},o.a.isLoggedIn&&s.a.createElement("li",{class:"nav-item dropdown dropdown-user"},s.a.createElement("a",{href:"#",class:"navbar-nav-link d-flex align-items-center dropdown-toggle","data-toggle":"dropdown"},s.a.createElement("img",{src:o.a.picture,class:"rounded-circle mr-2",height:"34",alt:""}),s.a.createElement("span",null,o.a.username)),s.a.createElement("div",{class:"dropdown-menu dropdown-menu-right"},s.a.createElement("a",{onClick:()=>this.doLogout(),class:"dropdown-item"},s.a.createElement("i",{class:"icon-switch2"})," Logout"))),!o.a.isLoggedIn&&s.a.createElement("li",{class:"nav-item dropdown dropdown-user"},s.a.createElement("a",{href:"#",class:"navbar-nav-link d-flex align-items-center dropdown-toggle","data-toggle":"dropdown"},s.a.createElement("span",null,"login")),s.a.createElement("div",{class:"dropdown-menu dropdown-menu-right"},s.a.createElement(d,null))))))}}var h=Object(n.a)(u);class g extends r.Component{constructor(){super(...arguments),this.state={menu:[]}}render(){return s.a.createElement("div",{class:"sidebar sidebar-light sidebar-main sidebar-expand-md"},s.a.createElement("div",{class:"sidebar-mobile-toggler text-center"},s.a.createElement("a",{href:"#",class:"sidebar-mobile-main-toggle"},s.a.createElement("i",{class:"icon-arrow-left8"})),"Navigation",s.a.createElement("a",{href:"#",class:"sidebar-mobile-expand"},s.a.createElement("i",{class:"icon-screen-full"}),s.a.createElement("i",{class:"icon-screen-normal"}))),s.a.createElement("div",{class:"sidebar-content"},o.a.isLoggedIn&&s.a.createElement("div",{class:"sidebar-user"},s.a.createElement("div",{class:"card-body"},s.a.createElement("div",{class:"media"},s.a.createElement("div",{class:"mr-3"}),s.a.createElement("div",{class:"media-body"},s.a.createElement("div",{class:"media-title font-weight-semibold"},o.a.username),s.a.createElement("div",{class:"font-size-xs opacity-50"}))))),s.a.createElement("div",{class:"card card-sidebar-mobile"},s.a.createElement("ul",{class:"nav nav-sidebar","data-nav-type":"accordion"},s.a.createElement("li",{class:"nav-item-header"},s.a.createElement("div",{class:"text-uppercase font-size-xs line-height-xs"},"Main")," ",s.a.createElement("i",{class:"icon-menu",title:"main"})),o.a.services.map((function(e,t){return e.pages&&e.active?s.a.createElement("li",{class:"nav-item nav-item-submenu nav-item-expanded nav-item-open"},s.a.createElement("a",{href:"#",class:"nav-link"},s.a.createElement("i",{class:e.icon})," ",s.a.createElement("span",null,e.name)),s.a.createElement("ul",{class:"nav nav-group-sub","data-submenu-title":e.name},e.pages.map((function(t,a){return s.a.createElement("li",{class:"nav-item"},s.a.createElement("a",{href:t.url,target:e.target,class:"nav-link"},t.name))})))):e.active?s.a.createElement("li",{class:"nav-item"},s.a.createElement("a",{href:e.url,target:e.target,class:"nav-link"},s.a.createElement("i",{class:e.icon}),s.a.createElement("span",null,e.name))):void 0})),this.state.menu.map((function(e,t){return s.a.createElement(s.a.Fragment,null,s.a.createElement("li",{class:"nav-item-header"},s.a.createElement("div",{class:"text-uppercase font-size-xs line-height-xs"},e.name)," ",s.a.createElement("i",{class:"icon-menu",title:e.name})),e.components.map((function(e,t){return e.pages?s.a.createElement("li",{class:"nav-item nav-item-submenu nav-item-expanded nav-item-open"},s.a.createElement("a",{href:"#",class:"nav-link"},s.a.createElement("i",{class:e.icon})," ",s.a.createElement("span",null,e.name)),s.a.createElement("ul",{class:"nav nav-group-sub","data-submenu-title":e.name},e.pages.map((function(t,a){return s.a.createElement("li",{class:"nav-item"},s.a.createElement("a",{href:t.url,target:e.target,class:"nav-link"},t.name))})))):s.a.createElement("li",{class:"nav-item"},s.a.createElement("a",{href:e.url,target:e.target,class:"nav-link"},s.a.createElement("i",{class:e.icon}),s.a.createElement("span",null,e.name)))})))}))))))}}var f=Object(n.a)(g);class v extends r.Component{render(){return s.a.createElement("div",{class:"navbar navbar-expand-lg navbar-light"},s.a.createElement("div",{class:"text-center d-lg-none w-100"},s.a.createElement("button",{type:"button",class:"navbar-toggler dropdown-toggle","data-toggle":"collapse","data-target":"#navbar-footer"},s.a.createElement("i",{class:"icon-unfold mr-2"}),"Footer")),s.a.createElement("div",{class:"navbar-collapse collapse",id:"navbar-footer"},s.a.createElement("span",{class:"navbar-text"},"\xa9 2021 Valueguard Index Sweden AB")))}}var y=v;class E extends r.Component{render(){return s.a.createElement("div",{class:"page-header border-bottom-0"},s.a.createElement("div",{class:"page-header-content header-elements-md-inline"},s.a.createElement("div",{class:"page-title d-flex"},s.a.createElement("h4",null,s.a.createElement("span",{class:"font-weight-semibold"},this.props.pageTopic)),s.a.createElement("a",{href:"#",class:"header-elements-toggle text-default d-md-none"},s.a.createElement("i",{class:"icon-more"})))))}}var b=E;class k extends r.Component{async getLoginSession(){const e=sessionStorage.getItem("loginSession");if(e){const t=JSON.parse(e);o.a.access_token=t.access_token,o.a.refresh_token=t.refresh_token,o.a.username=t.username,o.a.isLoggedIn=t.isLoggedIn,o.a.roles=t.roles,o.a.loading=t.loading,o.a.picture=t.picture}}async userContainsRole(e,t){for(var a=!1,r=0;rs.a.createElement(s.a.Fragment,null,s.a.createElement("tr",{"data-toggle":"collapse",id:"row"+e.id,"data-target":"#id"+e.id,class:"accordion-toggle"},this.props.dataColumns.map((function(t,a){if("high"===t.priority)return s.a.createElement("th",null,e[t.name])}))),s.a.createElement("tr",null,s.a.createElement("td",{colspan:"6",style:{padding:"0"}},s.a.createElement("div",{class:"accordian-body collapse",id:"id"+e.id},s.a.createElement("table",{class:"table table-striped table-dark"},s.a.createElement("tbody",null,this.props.dataColumns.map((function(t,a){if("high"!==t.priority&&e[t.name])return s.a.createElement("tr",null,s.a.createElement("td",null,s.a.createElement("b",null,t.prettyName,":")),s.a.createElement("td",null,e[t.name]))})))))))))))})}}t.a=o},39:function(e,t,a){"use strict";a.d(t,"b",(function(){return c})),a.d(t,"a",(function(){return m}));var r=a(62);const s="valueguard.eu.auth0.com",n="gi8aFlVNTpxuEAyIC2PRR8NgIbXQ4RMg",o="https://api.valueguard.se";let i;async function l(){return i||(i=await Object(r.a)({domain:s,clientId:n,authorizationParams:{audience:o,redirect_uri:window.location.origin,scope:"openid profile email offline_access"},cacheLocation:"localstorage",useRefreshTokens:!0,useRefreshTokensFallback:!0})),i}async function c(){const e=await l();window.location.search.includes("code=")&&window.location.search.includes("state=")&&(await e.handleRedirectCallback(),window.history.replaceState({},document.title,window.location.pathname))}async function m(){return(await l()).getTokenSilently({authorizationParams:{audience:o}})}console.log("Auth0 env check:",{DOMAIN:s,CLIENTID:n,AUDIENCE:o})},41:function(e,t,a){"use strict";var r=a(0),s=a.n(r),n=a(20),o=a(51),i=a(56),l=a(52),c=a(55),m=a(54),p=a(53),d=a(35),u=a.n(d);a(42),a(84),a(57);class h extends r.Component{constructor(e){super(e)}render(){return s.a.createElement(o.a,{style:{height:"45vw"},center:[this.props.mapPositionLat,this.props.mapPositionLng],zoom:this.props.mapZoomLevel},s.a.createElement(i.a,{attribution:'© OpenStreetMap contributors',url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"}),this.props.markers.map(e=>s.a.createElement(l.a,{position:[e[this.props.latName],e[this.props.lonName]]},s.a.createElement(c.a,null,s.a.createElement("h4",null,e[this.props.markerTitle]),s.a.createElement("table",null,this.props.markerPopupColumns.map((function(t,a){if(("high"===t.priority||"normal"===t.priority)&&t.name!==this.props.markerTitle&&e[t.name])return s.a.createElement("tr",null,s.a.createElement("td",null,s.a.createElement("b",null,t.prettyName)),s.a.createElement("td",null,e[t.name]))}),this))))),this.props.polylines.map(e=>s.a.createElement(m.a,{color:"red",positions:e},s.a.createElement(c.a,null,s.a.createElement("h4",null,"test")))),this.props.polygons.map(e=>s.a.createElement(p.a,{color:"lime",positions:e},s.a.createElement(c.a,null,s.a.createElement("h4",null,"test")))),s.a.createElement(u.a,{position:"topright"}))}}var g=h;class f extends r.Component{render(){return s.a.createElement(n.a,{body:s.a.createElement(g,{markers:this.props.markers?this.props.markers:[],polylines:this.props.polylines?this.props.polylines:[],polygons:this.props.polygons?this.props.polygons:[],markerTitle:this.props.markerTitle,markerPopupColumns:this.props.markerPopupColumns,mapPositionLat:this.props.mapPositionLat,mapPositionLng:this.props.mapPositionLng,mapZoomLevel:this.props.mapZoomLevel,latName:this.props.latName,lonName:this.props.lonName,geojson:this.props.geojson})})}}t.a=f},63:function(e,t,a){"use strict";(function(e){var r=a(0),s=a.n(r),n=a(28),o=a(41),i=a(38),l=a(30),c=a(2);class m extends r.Component{constructor(){super(),this.makeResidentialRegistrySearch=async()=>{if(!c.a.access_token)return void alert("Please login first");const t=[];this.state.searchCriteria.forEach(e=>{Object.keys(e.fields).forEach(a=>{const r=e.fields[a].value;if(!r)return;const s="residential_ids"===a?"id":a,n="street"===s?"address":s;t.push("".concat(n,"=").concat(encodeURIComponent(r)))})}),t.push("access_token=".concat(c.a.access_token));const a=t.join("&"),r="".concat(e.apiUrl,"/v1/residential/registry?").concat(a);try{const e=await fetch(r,{headers:{Accept:"application/json"}});if(401===e.status)return void alert("Authentication failed. Please login again.");if(!e.ok)throw new Error("HTTP ".concat(e.status,": ").concat(e.statusText));const t=await e.json(),a=t&&t.residences?t.residences:[];this.setState({residences:a}),a[0]?this.setState({mapPositionLat:a[0].wgs84lat,mapPositionLng:a[0].wgs84lon,mapZoomLevel:14}):alert("No result found for your search criteria")}catch(s){console.error("Registry search failed:",s),alert("Search failed: ".concat(s.message))}},this.state={residences:[],dataColumns:[{name:"id",prettyName:"ID",priority:"high"},{name:"address",prettyName:"Address",priority:"high"},{name:"construction_year",prettyName:"Construction year",priority:"normal"},{name:"home_type",prettyName:"Home type",priority:"normal"},{name:"apartment_area",prettyName:"Apartment area",priority:"normal"},{name:"apartment_category",prettyName:"Apartment category",priority:"low"},{name:"apartment_nr",prettyName:"Apartment nr",priority:"high"},{name:"area_name",prettyName:"Area name",priority:"low"},{name:"building_purpose",prettyName:"Building purpose",priority:"low"},{name:"building_type",prettyName:"Building type",priority:"low"},{name:"county_code",prettyName:"County code",priority:"low"},{name:"municipality_code",prettyName:"Municipality code",priority:"low"},{name:"floor",prettyName:"Floor",priority:"low"},{name:"floors",prettyName:"Floors",priority:"low"},{name:"kitchen_type",prettyName:"Kitchen type",priority:"low"},{name:"ownership_type",prettyName:"Ownership type",priority:"low"},{name:"postal_area",prettyName:"Postal area",priority:"high"},{name:"property_key",prettyName:"Property key",priority:"low"},{name:"rooms",prettyName:"Rooms",priority:"low"},{name:"type_code",prettyName:"Type code",priority:"low"}],markerTopic:"address",searchCriteria:[{name:"Address",id:0,pageClass:"card",fields:{street:{value:"",title:"Street",type:"text",placeholder:"Street"},number:{value:"",title:"Street number",type:"text",placeholder:"Street number"},apartment_nr:{value:"",title:"Appartment number",type:"text",placeholder:"Appartment number"},letter:{value:"",title:"House address letter",type:"text",placeholder:"House address letter"},postal_area:{value:"",title:"Postal area",type:"text",placeholder:"Postal area"},postal_code:{value:"",title:"Postal code",type:"text",placeholder:"Postal code"}}},{name:"House properties",id:1,pageClass:"card card-collapsed",fields:{property_key:{value:"",title:"Property key",type:"text",placeholder:"Property key"}}},{name:"Location",id:2,pageClass:"card card-collapsed",fields:{county_code:{value:"",title:"County code",type:"text",placeholder:"County code"},municipality_code:{value:"",title:"Municipality code",type:"text",placeholder:"Municipality code"}}},{name:"Advanced settings",id:3,pageClass:"card card-collapsed",fields:{limit:{value:"50",title:"limit",type:"text",placeholder:"limit"},residential_ids:{value:"",title:"Residential IDs",type:"text",placeholder:"residential IDs"}}}],mapPositionLat:59.862215,mapPositionLng:17.64134,mapZoomLevel:13},this.makeResidentialRegistrySearch=this.makeResidentialRegistrySearch.bind(this),this.updateSearchCriteria=this.updateSearchCriteria.bind(this)}updateSearchCriteria(e){let t=this.state.searchCriteria;t[e.target.attributes.getNamedItem("sectionid").value].fields[e.target.name].value=e.target.value,this.setState({searchCriteria:t})}componentDidMount(){}render(){return s.a.createElement(l.a,{pageTopic:"Bostadsregistret",mainContent:s.a.createElement(s.a.Fragment,null,s.a.createElement(o.a,{polylines:[[[51.505,-.09],[51.51,-.1],[51.51,-.12]]],polygons:[[[51.515,-.09],[51.52,-.1],[51.52,-.12]]],markers:this.state.residences,lonName:"wgs84lon",latName:"wgs84lat",markerTitle:this.state.markerTopic,markerPopupColumns:this.state.dataColumns,mapPositionLat:this.state.mapPositionLat,mapPositionLng:this.state.mapPositionLng,mapZoomLevel:this.state.mapZoomLevel}),s.a.createElement(i.a,{title:"Residences",tableData:this.state.residences,dataColumns:this.state.dataColumns})),searchBar:s.a.createElement(n.a,{searchCriteria:this.state.searchCriteria,updateSearchCriteria:this.updateSearchCriteria,searchFunction:this.makeResidentialRegistrySearch})})}}t.a=m}).call(this,a(21))},64:function(e,t,a){"use strict";(function(e){var r=a(9),s=a(0),n=a.n(s),o=a(28),i=a(69),l=a(30),c=a(65),m=a(2);class p extends s.Component{constructor(){super(),this.onMapMoveBounds=(e,t)=>{this.setState({mapSouthWest:{lat:e.lat,lng:e.lng},mapNorthEast:{lat:t.lat,lng:t.lng}})},this.updateValidDatesForCategoryAndFields=async()=>{var t,a;const s=this.state.token||await m.a.getAccessToken().catch(()=>"");if(!s)return void console.error("Authentication required to load date options");const n={Accept:"application/json",Authorization:"Bearer ".concat(s)},o=this.state.searchCriteria[0].fields.valid_at.value,i=this.state.searchCriteria[0].fields.area_category.value,l=this.state.searchCriteria[0].fields.method.value+"_"+this.state.searchCriteria[0].fields.housing_type.value,c=await fetch("".concat(e.apiUrl,"/v1/area/information/field?names=").concat(encodeURIComponent(l)),{headers:n});if(401===c.status)return console.error("Authentication failed - field request"),void m.a.clear();if(!c.ok)return;const p=await c.json(),d=null===p||void 0===p||null===(t=p.area_information_fields)||void 0===t||null===(a=t[0])||void 0===a?void 0:a.id;if(!d)return;const u=await fetch("".concat(e.apiUrl,"/v1/area/information/dates?field_ids=").concat(d,"&category_ids=").concat(i),{headers:n});if(401===u.status)return console.error("Authentication failed - dates request"),void m.a.clear();if(!u.ok)return;const h=((await u.json()).area_information_dates||[]).map(e=>({name:e.valid_from.substring(0,7),value:e.valid_from})).sort((e,t)=>t.value.localeCompare(e.value)),g=[...this.state.searchCriteria];g[0]=Object(r.a)(Object(r.a)({},g[0]),{},{fields:Object(r.a)({},g[0].fields)}),g[0].fields.valid_at=Object(r.a)(Object(r.a)({},g[0].fields.valid_at),{},{options:h}),!h.some(e=>e.name===o.substring(0,7))&&h.length>0&&(alert("No data found for the date ==> "+o.substring(0,7)),g[0].fields.valid_at.value=h[0].value),this.setState({searchCriteria:g})},this.makeMapstatSearch=async()=>{if(this.state.searchInProgress)return void console.log("You need to wait before the earlier one finishes");const t=this.state.token||await m.a.getAccessToken().catch(()=>"");if(!t)return void console.error("Authentication required to perform search");const a={Accept:"application/json",Authorization:"Bearer ".concat(t)};this.setState({searchInProgress:!0});const r=this.state.searchCriteria[0].fields.area_category.value,s=this.state.searchCriteria[0].fields.method.value+"_"+this.state.searchCriteria[0].fields.housing_type.value,n=this.state.mapSouthWest.lat,o=this.state.mapNorthEast.lat,i=this.state.mapSouthWest.lng,l=this.state.mapNorthEast.lng,c=this.state.searchCriteria[0].fields.valid_at.value;try{var p;const t=await fetch("".concat(e.apiUrl,"/v1/area/information/field?names=").concat(encodeURIComponent(s)),{headers:a});if(401===t.status)return console.error("Authentication failed - field metadata request"),m.a.clear(),void this.setState({searchInProgress:!1});if(!t.ok)throw new Error("field metadata failed");const d=await t.json(),u=null===d||void 0===d||null===(p=d.area_information_fields)||void 0===p?void 0:p[0];if(!u)throw new Error("no field id");const h=u.id,g=u.colour_max_value,f=u.colour_min_value,v=u.colour_unit,y=u.max_colour,E=u.min_colour,b=new URLSearchParams({category_ids:String(r),information_field_id:String(h),min_wgs84lat:String(n),max_wgs84lat:String(o),min_wgs84lon:String(i),max_wgs84lon:String(l),valid_at:String(c)}),k=await fetch("".concat(e.apiUrl,"/v1/area/map?").concat(b.toString()),{headers:a});if(401===k.status)return console.error("Authentication failed - map request"),m.a.clear(),void this.setState({searchInProgress:!1});if(403===k.status)return console.warn("Forbidden for this endpoint"),void this.setState({searchInProgress:!1});if(!k.ok)throw new Error("map fetch failed");const _=await k.json(),w=(null===_||void 0===_?void 0:_.features)||[];if(!this.state.lockedColours)if(this.state.dynamicColours){const e=w.map(e=>{var t;return null===e||void 0===e||null===(t=e.properties)||void 0===t?void 0:t.field_value}).filter(e=>"number"===typeof e);if(e.length){const t=Math.max(...e),a=Math.min(...e),r=["#FFEDA0","#FED976","#FEB24C","#FD8D3C","#FC4E2A","#E31A1C","#BD0026","#800026"],s=(t-a)/(r.length-1||1),n=r.map((e,t)=>({threshold:a+t*s,color:e}));this.setState({colorMapping:n})}}else{const e=this.generateColorRange(f,g,v,E,y);this.setState({colorMapping:e})}this.setState({geojson:_,searchInProgress:!1})}catch(d){console.error(d),this.setState({searchInProgress:!1})}},this.convertGeoJson=this.convertGeoJson.bind(this),this.state={mapSouthWest:{lat:null,lng:null},mapNorthEast:{lat:null,lng:null},mapMinZoom:5,geojson:{},dataColumns:[],searchCriteria:[{name:"Successionsmarknad",id:0,pageClass:"card",fields:{area_category:{value:"2",title:"Omr\xe5destyp",type:"dropdown",options:[{name:"Delomraden sverige",value:"2"},{name:"Deso",value:"1"},{name:"kv100",value:"3"}],placeholder:"countyg"},housing_type:{value:"apt",title:"Bostadstyp",type:"dropdown",options:[{name:"Villor/radhus",value:"house"},{name:"Bostadsr\xe4tter",value:"apt"},{name:"1 Rok",value:"oneroom"},{name:"2 Rok",value:"tworoom"},{name:"3 Rok",value:"threeroom"},{name:"4 Rok",value:"fourroom"},{name:"5 Rok",value:"fiveroom_plus"},{name:"Totalt",value:"total"}]},method:{value:"avg_recounted_psqm_n_best",title:"Metod",type:"dropdown",options:[{name:"Kvadratmeterpris - medel",value:"avg_recounted_psqm_n_best"},{name:"Pris - medel",value:"avg_recounted_price_n_best"},{name:"M\xe5nadsavgift - medel",value:"mean_yearly_fee_sales"},{name:"Bygg\xe5r - medel",value:"sales_byear_mean"},{name:"Boarea - medel",value:"mean_area_sales_n_best"},{name:"Antal f\xf6rs\xe4ljningar per \xe5r",value:"number_of_sales_per_year"}]},valid_at:{value:"2025-07-01",title:"Datum",type:"dropdown",options:[{name:"2022-01",value:"2022-01-15"},{name:"2022-02",value:"2022-02-15"},{name:"2022-03",value:"2022-03-15"},{name:"2022-04",value:"2022-04-15"},{name:"2022-05",value:"2022-05-15"},{name:"2022-06",value:"2022-06-15"},{name:"2022-07",value:"2022-07-15"},{name:"2022-08",value:"2022-08-15"},{name:"2022-09",value:"2022-09-15"},{name:"2022-10",value:"2022-10-15"},{name:"2022-11",value:"2022-11-15"},{name:"2022-12",value:"2022-12-15"},{name:"2023-01",value:"2023-01-15"},{name:"2023-02",value:"2023-02-15"},{name:"2023-03",value:"2023-03-15"}]},dynamic_colour:{value:!0,title:"Dynamisk f\xe4rgskala",type:"checkbox"},lock_colour:{value:!1,title:"L\xe5s f\xe4rgskala",type:"checkbox"}}}],colorMapping:[],mapPositionLat:59.274472,mapPositionLng:17.944866,mapZoomLevel:13,searchInProgress:!1,dynamicColours:!0,lockedColours:!1},this.makeMapstatSearch=this.makeMapstatSearch.bind(this),this.updateSearchCriteria=this.updateSearchCriteria.bind(this),this.getPolygonColor=this.getPolygonColor.bind(this),this.updateValidDatesForCategoryAndFields=this.updateValidDatesForCategoryAndFields.bind(this)}convertGeoJson(e,t){const a=[];for(let r of e.features||[])a.push({type:r.geometry.type,coordinates:r.geometry.coordinates,properties:t[r.properties.id]});return e.features=a,e}updateSearchCriteria(e){if(!e||!e.target)return;const t=e.target.getAttribute("sectionid"),a=e.target.name,s=e.target.value,n=e.target.className,o=this.state.searchCriteria.map((e,o)=>{if(String(o)!==String(t))return e;const i=Object(r.a)({},e.fields);if("form-check-input"===n){if("dynamic_colour"===a){const e=!this.state.dynamicColours;i[a]=Object(r.a)(Object(r.a)({},i[a]),{},{value:e}),this.setState({dynamicColours:e})}else if("lock_colour"===a){const e=!this.state.lockedColours;i[a]=Object(r.a)(Object(r.a)({},i[a]),{},{value:e}),this.setState({lockedColours:e})}}else i[a]=Object(r.a)(Object(r.a)({},i[a]),{},{value:s});return Object(r.a)(Object(r.a)({},e),{},{fields:i})});this.setState({searchCriteria:o},()=>{"area_category"===a&&this.setState({mapMinZoom:"3"===s?2:5}),"form-check-input"!==n&&this.makeMapstatSearch()}),"area_category"!==a&&"housing_type"!==a&&"method"!==a||this.updateValidDatesForCategoryAndFields()}getPolygonColor(e){for(let a=0;a=t.threshold?t.color:"#FFEDA0"}generateColorRange(e,t,a,r,s){const n=[],o=(t-e)/a;function i(e){const t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null}function l(e,t,a){return"#"+((1<<24)+(e<<16)+(t<<8)+a).toString(16).slice(1)}const c=i(r),m=i(s);for(let p=0;p<=o;p++){const t=p/o,r=c.r+(m.r-c.r)*t,s=c.g+(m.g-c.g)*t,i=c.b+(m.b-c.b)*t;n.push({threshold:e+a*p,color:l(Math.round(r),Math.round(s),Math.round(i))})}return n}async componentDidMount(){try{const e=await m.a.getAccessToken();e&&this.setState({token:e},()=>{this.updateValidDatesForCategoryAndFields()})}catch(e){console.error("Failed to get access token:",e)}}render(){var e;return n.a.createElement(l.a,{pageTopic:"Mapstat",mainContent:n.a.createElement(n.a.Fragment,null,this.state.searchInProgress&&n.a.createElement(c.a,null),n.a.createElement(i.a,{geojson:(null===(e=this.state.geojson)||void 0===e?void 0:e.features)||[],lonName:"lon",latName:"lat",markerTitle:this.state.markerTopic,markerPopupColumns:this.state.dataColumns,mapPositionLat:this.state.mapPositionLat,mapPositionLng:this.state.mapPositionLng,mapZoomLevel:this.state.mapZoomLevel,mapMinZoom:this.state.mapMinZoom,onMapMoveBounds:this.onMapMoveBounds,getPolygonColor:this.getPolygonColor})),searchBar:n.a.createElement(o.a,{searchCriteria:this.state.searchCriteria,updateSearchCriteria:this.updateSearchCriteria,searchFunction:this.makeMapstatSearch,colorMapping:this.state.colorMapping})})}}t.a=p}).call(this,a(21))},65:function(e,t,a){"use strict";var r=a(0),s=a.n(r);a(88);class n extends r.Component{render(){return s.a.createElement("div",{className:"loading-screen"},s.a.createElement("img",{src:"/LoadingScreen.gif",alt:"Loading..."}))}}t.a=n},66:function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));function r(){"serviceWorker"in navigator&&navigator.serviceWorker.ready.then(e=>{e.unregister()}).catch(e=>{console.error(e.message)})}},67:function(e,t,a){"use strict";a.d(t,"a",(function(){return n}));var r=a(0),s=a.n(r);class n extends s.a.Component{constructor(e){super(e),this.state={hasError:!1,err:null}}static getDerivedStateFromError(e){return{hasError:!0,err:e}}componentDidCatch(e,t){console.error("UI crashed:",e,t)}render(){return this.state.hasError?s.a.createElement("div",{style:{padding:16,color:"#b00",fontFamily:"monospace"}},s.a.createElement("h3",null,"Something broke in the UI."),s.a.createElement("pre",null,String(this.state.err))):this.props.children}}},68:function(e,t,a){"use strict";var r=a(0),s=a.n(r),n=a(43),o=a(10),i=a(9),l=a(28),c=a(41),m=a(20),p=a(38),d=a(30),u=a(39);class h extends r.Component{constructor(){super(),this.state={residences:[],dataColumns:[{name:"id",prettyName:"Valueguard ID",priority:"High"},{name:"address",prettyName:"Adress",priority:"high"},{name:"construction_year",prettyName:"Bygg\xe5r",priority:"normal"},{name:"home_type",prettyName:"Home type",priority:"normal"},{name:"apartment_category",prettyName:"Apartment category",priority:"low"},{name:"apartment_nr",prettyName:"L\xe4genhetsnummer",priority:"low"},{name:"rooms",prettyName:"Rum",priority:"low"},{name:"apartment_area",prettyName:"Boyta",priority:"low"},{name:"floor",prettyName:"V\xe5ning",priority:"low"},{name:"area_name",prettyName:"Area name",priority:"low"},{name:"building_purpose",prettyName:"Building purpose",priority:"low"},{name:"building_type",prettyName:"Building type",priority:"low"},{name:"county_code",prettyName:"County code",priority:"low"},{name:"floors",prettyName:"V\xe5ningar",priority:"low"},{name:"house_nr",prettyName:"House nr",priority:"low"},{name:"kitchen_type",prettyName:"Kitchen type",priority:"low"},{name:"municipality_code",prettyName:"Municipality code",priority:"low"},{name:"owner_id",prettyName:"Owner id",priority:"low"},{name:"ownership_type",prettyName:"\xc4gandetyp",priority:"low"},{name:"postal_area",prettyName:"Postort",priority:"high"},{name:"property_key",prettyName:"Fastighetsnyckel",priority:"low"},{name:"type_code",prettyName:"Type code",priority:"low"}],markerTopic:"adress",searchCriteria:[{name:"Adress",id:0,pageClass:"card",fields:{street:{value:"",title:"Gata",type:"text",placeholder:"Gata"},number:{value:"",title:"Gatunummer",type:"text",placeholder:"Gatunummer"},letter:{value:"",title:"Gatunummer bokstav",type:"text",placeholder:"Gatunummer bokstav"},apartment_nr:{value:"",title:"L\xe4genhetsnummer",type:"text",placeholder:"L\xe4genhetsnummer"},postal_area:{value:"",title:"Postort",type:"text",placeholder:"Postort"}}}],mapPositionLat:59.862215,mapPositionLng:17.64134,mapZoomLevel:13,token:""},this.makeResidentialRegistrySearch=this.makeResidentialRegistrySearch.bind(this),this.updateSearchCriteria=this.updateSearchCriteria.bind(this)}updateSearchCriteria(e){const t=e.target.attributes.getNamedItem("sectionid").value,a=e.target.name,r=e.target.value,s=this.state.searchCriteria.map((e,s)=>String(s)!==String(t)?e:Object(i.a)(Object(i.a)({},e),{},{fields:Object(i.a)(Object(i.a)({},e.fields),{},{[a]:Object(i.a)(Object(i.a)({},e.fields[a]),{},{value:r})})}));this.setState({searchCriteria:s})}buildQueryString(){const e=new URLSearchParams;return e.set("limit","1"),this.state.searchCriteria.forEach(t=>{Object.keys(t.fields).forEach(a=>{const r=t.fields[a].value;r&&e.set(a,r)})}),e.toString()}async makeResidentialRegistrySearch(){let e=this.state.token;if(!e)try{e=await this.authenticateDefault(),this.setState({token:e})}catch(r){return void console.error("Default authentication failed:",r)}const t=this.buildQueryString(),a="".concat("https://api-prod.valueguard.se","/v1/residential/registry?").concat(t,"&access_token=").concat(encodeURIComponent(e));try{const t=await fetch(a,{headers:{Accept:"application/json"}});if(401===t.status)try{return e=await this.authenticateDefault(),this.setState({token:e}),await this.makeResidentialRegistrySearch()}catch(s){return void console.error("Re-authentication failed:",s)}const r=await t.json(),n=r&&Array.isArray(r.residences)?r.residences:[];this.setState({residences:n}),n.length>0&&this.setState({mapPositionLat:n[0].wgs84lat,mapPositionLng:n[0].wgs84lon,mapZoomLevel:14})}catch(n){console.error("registry search failed",n)}}async authenticateDefault(){const e=atob("cmVzaWRlbnRpYWwucmVnaXN0cnlAdmFsdWVndWFyZC5zZQ=="),t=atob("d3NrdVI1djcwVjNwR0hBY0pEY01Kcw=="),a=await fetch("".concat("https://api-prod.valueguard.se","/oauth/token"),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"password",username:e,password:t,audience:"https://api.valueguard.se",client_id:"MCzlK1nheYwYBykmpnsRBilN05qCc4yG",client_secret:"wISmqeyLNF6AyuR6ToNtG6LnRuaZ0HFGIdahKK3BUpKB2TUGV6ZTztkglM6I07wQ"}).toString()});if(!a.ok){const e=await a.json().catch(()=>({}));throw new Error(e.error_description||"Authentication failed")}return(await a.json()).access_token}async componentDidMount(){try{const e=await Object(u.a)();e&&this.setState({token:e})}catch(e){console.error("User not logged in: ",e)}}render(){return s.a.createElement(d.a,{pageTopic:"Bostadsregistret",mainContent:s.a.createElement(s.a.Fragment,null,s.a.createElement(m.a,{title:"V\xe4lkommen till Valueguards informationstj\xe4nst f\xf6r Bostadsregistret",body:s.a.createElement("p",null,"H\xe4r kan du till exempel se om din bostad finns i registret och vilken information som finns registrerad om den. Skriv in adressen till h\xf6ger s\xe5 visas informationen under kartan.")}),s.a.createElement(c.a,{polylines:[[[51.505,-.09],[51.51,-.1],[51.51,-.12]]],polygons:[[[51.515,-.09],[51.52,-.1],[51.52,-.12]]],markers:this.state.residences,lonName:"wgs84lon",latName:"wgs84lat",markerTitle:this.state.markerTopic,markerPopupColumns:this.state.dataColumns,mapPositionLat:this.state.mapPositionLat,mapPositionLng:this.state.mapPositionLng,mapZoomLevel:this.state.mapZoomLevel}),s.a.createElement(p.a,{title:"Bost\xe4der",tableData:this.state.residences,dataColumns:this.state.dataColumns,getValuationFunction:this.getValuation})),searchBar:s.a.createElement(l.a,{searchCriteria:this.state.searchCriteria,updateSearchCriteria:this.updateSearchCriteria,searchFunction:this.makeResidentialRegistrySearch})})}}var g=h,f=a(63),v=a(64),y=a(2),E=a(24);function b(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];const t=t=>Array.isArray(e)&&e.includes(t),a=t("API_SERVICE2:BOSTADSREGISTRET"),r=t("MAPSTAT2:BASIC");return[{name:"Bostadsregistret",url:a?"/bostadsregistret":"/",icon:"icon-home",target:"_self",active:!0},r&&{name:"Mapstat",url:"/mapstat",icon:"icon-map",target:"_self",active:!0}].filter(Boolean)}class k extends r.Component{async componentDidMount(){E.b(),function(){try{const e=sessionStorage.getItem("loginSession");if(!e)return!1;const t=JSON.parse(e);y.a.isLoggedIn=!!t.isLoggedIn,y.a.username=t.username||"",y.a.access_token=t.access_token||"",y.a.refresh_token=t.refresh_token||"",y.a.roles=Array.isArray(t.roles)?t.roles:[],y.a.picture=t.picture||y.a.picture,y.a.services=b(y.a.roles)}catch(e){return!1}}();try{if(!E.c())return;const e=await y.a.getAccessToken(),t="https://api-prod.valueguard.se",a=await fetch("".concat(t,"/v0/users/me?access_token=").concat(encodeURIComponent(e)),{headers:{Accept:"application/json"}});if(!a.ok)return console.error("/v0/users/me failed: ".concat(a.status)),void(401===a.status&&y.a.clear());const r=await a.json();y.a.setProfileFromMe(r),y.a.setTokens({accessToken:e}),y.a.services=b(r.roles||[]),y.a.saveToSession()}catch(e){console.error("App init failed:",e),y.a.clear()}}render(){return s.a.createElement(n.a,null,s.a.createElement("div",null,s.a.createElement(o.a,{exact:!0,path:"/",component:g}),s.a.createElement(o.a,{exact:!0,path:"/bostadsregistret",component:f.a}),s.a.createElement(o.a,{exact:!0,path:"/mapstat",component:v.a})))}}t.a=k},69:function(e,t,a){"use strict";var r=a(0),s=a.n(r),n=a(20),o=a(51),i=a(56),l=a(52),c=a(55),m=a(54),p=a(53),d=a(50),u=a(35),h=a.n(u),g=a(42),f=a.n(g);a(57);class v extends r.Component{constructor(e){super(e),this.updateMapBound=()=>{const e=this.mapRef.current.leafletElement.getBounds(),t=e.getSouthWest(),a=e.getNorthEast();this.props.onMapMoveBounds(t,a)},this.defaultControllerInfoBox={title:"Info",description:"Markera polygon f\xf6r att f\xe5 mer information\n"},this.state={controllerInfoBox:this.defaultControllerInfoBox},this.choroplethRef=Object(r.createRef)(),this.mapRef=Object(r.createRef)(),this.updateMapBound=this.updateMapBound.bind(this),this.getGeoJsonStyle=this.getGeoJsonStyle.bind(this)}getGeoJsonStyle(e){let t=e.properties.field_value;return{fillColor:this.props.getPolygonColor(t),weight:2,opacity:.2,color:"white",dashArray:"3",fillOpacity:.6}}render(){function e(e){var t=e.target;let a=function(e,t){let a=e.toString();switch(a=a.replace(/\.0+$/,""),a=a.replace(/(\.\d*[1-9])0+$/,"$1"),"years"!==t&&(a=parseFloat(a).toLocaleString("en-US",{thousandSeparator:" ",maximumFractionDigits:20}).replace(/,/g," ")),t){case"sqm":t="m\xb2";break;case"n":t=""}return a+" "+t}(t.feature.properties.field_value,t.feature.properties.field_unit);this.setState({controllerInfoBox:{title:t.feature.properties.area_display_name,description:t.feature.properties.field_display_name,value:a}}),t.setStyle({weight:5,dashArray:"",fillOpacity:.85}),t.bringToFront()}function t(e){e.target.setStyle({weight:2,dashArray:"3",fillOpacity:.6})}function a(e){}return s.a.createElement(o.a,{style:{height:"45vw"},center:[this.props.mapPositionLat,this.props.mapPositionLng],zoom:this.props.mapZoomLevel,onmoveend:this.updateMapBound,minZoom:this.props.mapMinZoom,maxZoom:17,whenReady:this.updateMapBound,ref:this.mapRef},s.a.createElement(i.a,{attribution:'© OpenStreetMap contributors',url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"}),this.props.markers.map(e=>s.a.createElement(l.a,{position:[e[this.props.latName],e[this.props.lonName]]},s.a.createElement(c.a,null,s.a.createElement("h4",null,e[this.props.markerTitle]),s.a.createElement("table",null,this.props.markerPopupColumns.map((function(t,a){if(t.name!==this.props.markerTitle&&e[t.name])return s.a.createElement("tr",null,s.a.createElement("td",null,s.a.createElement("b",null,t.prettyName)),s.a.createElement("td",null,e[t.name]))}),this)),s.a.createElement("a",{type:"button",class:"btn btn-info btn-lg btn-block",href:"#row"+e.id},"More information")))),this.props.polylines.map(e=>s.a.createElement(m.a,{color:"red",positions:e},s.a.createElement(c.a,null,s.a.createElement("h4",null,"test")))),this.props.polygons.map(e=>s.a.createElement(p.a,{color:"lime",positions:e},s.a.createElement(c.a,null,s.a.createElement("h4",null,"test")))),this.props.geojson&&s.a.createElement(d.a,{key:JSON.stringify(this.props.geojson),data:this.props.geojson,onEachFeature:(r,s)=>{s.setStyle(this.getGeoJsonStyle(r)),s.on({mouseover:e,mouseout:t,click:a},this)},ref:this.choroplethRef}),s.a.createElement(f.a,{position:"topleft"},s.a.createElement("div",{class:"card"},s.a.createElement("div",{class:"card-body"},s.a.createElement("h5",{class:"card-title"},this.state.controllerInfoBox.title),s.a.createElement("p",{class:"card-text"},s.a.createElement("i",null,this.state.controllerInfoBox.description)),s.a.createElement("p",{className:"card-text"},s.a.createElement("b",null,this.state.controllerInfoBox.value))))),s.a.createElement(h.a,{position:"topright"}))}}var y=v;class E extends r.Component{render(){return s.a.createElement(n.a,{body:s.a.createElement(y,{markers:this.props.markers?this.props.markers:[],polylines:this.props.polylines?this.props.polylines:[],polygons:this.props.polygons?this.props.polygons:[],markerTitle:this.props.markerTitle,markerPopupColumns:this.props.markerPopupColumns,mapPositionLat:this.props.mapPositionLat,mapPositionLng:this.props.mapPositionLng,mapZoomLevel:this.props.mapZoomLevel,latName:this.props.latName,lonName:this.props.lonName,geojson:this.props.geojson,onMapMoveBounds:this.props.onMapMoveBounds,mapMinZoom:this.props.mapMinZoom,getPolygonColor:this.props.getPolygonColor})})}}t.a=E},70:function(e,t,a){e.exports=a(71)},71:function(e,t,a){"use strict";a.r(t),function(e){var t=a(0),r=a.n(t),s=a(17),n=a.n(s),o=(a(76),a(68)),i=a(66),l=a(39),c=a(67);e.apiUrl="https://api-prod.valueguard.se",console.log("BOOT",{REACT_APP_AUTH0_DOMAIN:"valueguard.eu.auth0.com",REACT_APP_AUTH0_CLIENT_ID:"gi8aFlVNTpxuEAyIC2PRR8NgIbXQ4RMg",REACT_APP_AUTH0_AUDIENCE:"https://api.valueguard.se",REACT_APP_API_URL:"https://api-prod.valueguard.se"}),(async()=>{try{await Object(l.b)()}catch(e){console.error("handleAuthRedirectIfNeeded failed:",e)}finally{n.a.render(r.a.createElement(c.a,null,r.a.createElement(o.a,null)),document.getElementById("root"))}})(),i.a()}.call(this,a(21))},76:function(e,t,a){},88:function(e,t,a){}},[[70,1,2]]]); //# sourceMappingURL=main.2ea4fc2c.chunk.js.map