{"version":3,"file":"js/chunk-common.60fb95bd.js","mappings":"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","sources":["webpack://propfinder/./node_modules/@stencil/core/internal/client/ lazy ^\\.\\/.*\\.entry\\.js.*$ include: \\.entry\\.js$ exclude: \\.system\\.entry\\.js$ strict namespace object","webpack://propfinder/./src/css/index.scss","webpack://propfinder/./src/data/Projects.ts","webpack://propfinder/./src/data/wrapper/Polygon.ts","webpack://propfinder/./src/data/Realty.ts","webpack://propfinder/./src/data/xhr/AuthToken.ts","webpack://propfinder/./src/data/xhr/BearerRequest.ts","webpack://propfinder/./src/data/xhr/JSONRequest.ts","webpack://propfinder/./src/data/xhr/XhrRequest.ts","webpack://propfinder/./src/data/xhr/XhrResponse.ts","webpack://propfinder/./src/data/xhr/geodataToken.ts","webpack://propfinder/./src/store/map.ts","webpack://propfinder/./src/store/project.ts","webpack://propfinder/./src/types/ptm.ts","webpack://propfinder/./src/types/spatialReference.ts","webpack://propfinder/./src/utilities/CustomEvents.ts","webpack://propfinder/./src/utilities/GisUtil.ts","webpack://propfinder/./src/types/loggerLevels.ts","webpack://propfinder/./src/utilities/Logger.ts","webpack://propfinder/./src/utilities/PTM.ts","webpack://propfinder/./src/utilities/Validate.ts","webpack://propfinder/./src/css/index.scss?c252"],"sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 54140;\nmodule.exports = webpackEmptyAsyncContext;","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-24.use[1]!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-24.use[2]!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-24.use[3]!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-24.use[4]!../../node_modules/sanitize.css/sanitize.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-24.use[1]!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-24.use[2]!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-24.use[3]!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-24.use[4]!../../node_modules/sanitize.css/forms.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-24.use[1]!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-24.use[2]!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-24.use[3]!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-24.use[4]!../../node_modules/sanitize.css/typography.css\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTAuMDE1IDEuNUgxLjg3IiBzdHJva2U9IiM1QTVBNUEiIHN0cm9rZS13aWR0aD0iMiIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PC9zdmc+\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2U9IiM1QTVBNUEiIHN0cm9rZS13aWR0aD0iMiI+PHBhdGggZD0iTTEwLjUgMS41IDQuNDggNy41Mk00LjAzNCA4LjA3NSAxLjQyNyA1LjQ2OCIvPjwvZz48L3N2Zz4=\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"@font-face{font-family:ff-din-round-web;src:url(https://static.ambita.com/assets/fonts/din-round-regular.woff2) format(\\\"woff2\\\"),url(https://static.ambita.com/assets/fonts/din-round-regular.woff) format(\\\"woff\\\");font-weight:400;font-style:normal;font-display:auto}@font-face{font-family:ff-din-round-web;src:url(https://static.ambita.com/assets/fonts/din-round-medium.woff2) format(\\\"woff2\\\"),url(https://static.ambita.com/assets/fonts/din-round-medium.woff) format(\\\"woff\\\");font-weight:500;font-style:normal;font-display:auto}@font-face{font-family:ff-din-round-web;src:url(https://static.ambita.com/assets/fonts/din-round-bold.woff2) format(\\\"woff2\\\"),url(https://static.ambita.com/assets/fonts/din-round-bold.woff) format(\\\"woff\\\");font-weight:700;font-style:normal;font-display:auto}body{background-color:#f5f5f5;margin:0;padding:0;font-family:ff-din-round-web,\\\"sans-serif\\\",monospace,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:1rem;font-weight:400}code{font-family:ff-din-round-web,sans-serif,monospace}h1{font-weight:400;font-size:3.125rem;line-height:3.375rem;margin:0}hr{height:.0625rem;border:0;opacity:.6;overflow:visible}.popover-body{padding:0!important}.project-description{width:100%;max-width:40rem;font-weight:700}.project-spacing{margin:1.5625rem 0}.project-section{padding:1.25rem;margin:1.875rem 0;box-shadow:0 .25rem .5rem .1875rem rgba(0,0,0,.15),0 .0625rem .1875rem rgba(0,0,0,.3)}a{font-weight:500}a:link,a:visited{color:#682cb0}a:focus,a:hover{color:#682cb0;text-decoration:underline}input,textarea{border:0;height:36px;outline:none;padding-right:5px}input[type=checkbox],input[type=radio]{border:none;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:30px;height:20px}input[type=checkbox]:before,input[type=radio]:before{background:#fff;border:2px solid #bdbdbd;display:inline-block;content:\\\"\\\";height:20px;width:20px;vertical-align:-5px}hr{background-color:#afafaf}input[type=date],input[type=datetime-local],input[type=email],input[type=month],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{padding-left:10px;background:#fff}input.hs-input:invalid,select.hs-input:invalid{box-shadow:inset 0 -2px 0 0 #b7b7b7,inset 0 0 0 2px #ededed}input.hs-input.invalid:invalid,select.hs-input.invalid:invalid{box-shadow:inset 0 -2px 0 0 #ce2520,inset 0 0 0 2px #ededed}input.hs-input:hover,select.hs-input:hover{box-shadow:inset 0 -2px 0 0 #bdbdbd,inset 0 0 0 2px #ededed}input.hs-input:focus,select.hs-input:focus{box-shadow:inset 0 -2px 0 0 #2eaa9e,inset 0 0 0 2px #ededed}select{display:block;font-size:1rem;color:#444;line-height:1.3;padding:.6em 1.4em .5em .8em;width:100%;max-width:100%;box-sizing:border-box;margin:0;border:none;border-radius:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;background-color:#fff;background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");background-repeat:no-repeat,repeat;background-position:right .7em top 50%,0 0;background-size:.65em auto,100%}select::-ms-expand{display:none}select:hover{border-color:#888}select:focus{border-color:#aaa;box-shadow:0 0 1px 3px rgba(59,153,252,.7);box-shadow:0 0 0 3px -moz-mac-focusring;color:#222;outline:none}select option{font-weight:400}input[type=radio]:before{border:2px solid #bdbdbd;border-radius:100%}input[type=radio]:checked:after,input[type=radio]:hover:after{display:block;width:10px;height:10px;border-radius:100%;content:\\\"\\\";position:absolute;top:5px;left:5px;background:#5a5a5a}input[type=radio]:hover:after{opacity:.3}input[type=radio]:checked:hover:after{opacity:1}input[type=radio]:disabled:after{background-color:transparent}input[type=radio]:disabled:checked:after{background-color:#b2b2b2}input[type=checkbox]:before{border-radius:2px;cursor:pointer}input[type=checkbox]:indeterminate:before{background:no-repeat 50% #fff url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \")}input[type=checkbox]:checked:before{border-color:#bdbdbd;background:#fff}input[type=checkbox]:checked:after{display:block;width:10px;height:10px;content:\\\"\\\";position:absolute;top:5px;left:5px;background:no-repeat url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \")}input[type=checkbox]:disabled:after{opacity:.5}input[type=checkbox]:hover:before,input[type=radio]:hover:before{border-color:#676767}input[type=checkbox]:focus:before,input[type=radio]:focus:before{border-color:#2eaa9e}input[type=checkbox]:disabled:before,input[type=radio]:disabled:before{background-color:#e3e3e3!important;border-color:#979797!important}input[type=number]:disabled{background-color:#e1e1e1!important;border-color:#555!important}.inactive{color:#bebebe!important}button,input[type=button],input[type=submit]{cursor:pointer}.button--primary,.hs-button,input[type=submit].button--primary{background:#715495;border-radius:.125rem;color:#fff;cursor:pointer;border:.125rem solid #715495;box-shadow:0 .125rem .25rem 0 rgba(85,85,85,.5);font-size:1rem;padding:.375rem .8125rem .3125rem .8125rem;font-weight:700;text-align:center;transition:background-color .1s ease-in-out,box-shadow .05s ease-in-out}.button--primary:disabled,.hs-button:disabled,input[type=submit].button--primary:disabled{background:#ccc;border-color:#ccc;cursor:default}.button--primary:not(:disabled):focus,.button--primary:not(:disabled):hover,.hs-button:not(:disabled):focus,.hs-button:not(:disabled):hover,input[type=submit].button--primary:not(:disabled):focus,input[type=submit].button--primary:not(:disabled):hover{background-color:#584076;border-color:#584076}.page-item:first-child .page-link{padding:22px 17px}.page-item:nth-child(2) .page-link{padding:22px 20px}.page-item:nth-child(3) .page-link{padding:22px 14px}.page-item:nth-child(4) .page-link{padding:22px 7px}.page-item:nth-child(5) .page-link{padding:22px 8px}.page-item:nth-child(6) .page-link{padding:22px 17px}.legal{position:absolute;text-align:center;bottom:0;left:50%;z-index:1}.legal div{background-color:hsla(0,0%,100%,.5);padding:.6rem .8rem;position:relative;left:-50%}.legal a{color:#333;font-size:.8rem}@media(max-width:600px){.legal div{padding:.3rem .4rem}.legal a{font-size:.4rem}}.aux-modal,.aux-modal div{text-align:left}.esri-input,.esri-select{background-color:#fff!important;color:#333!important}.esri-input{background:unset!important}.esri-ui-corner .esri-component{box-shadow:unset!important}.esri-elevation-profile__select-button{display:none}.button-2d{color:#ac1631;font-weight:700}.hidden{display:none}.aux-checkbox input:hover,.aux-checkbox label:hover{cursor:pointer}.aux-definition-value{align-self:center!important}#ArcgisMap li.aux-file{cursor:pointer}#ArcgisMap li.aux-file:hover{background-color:hsla(0,0%,100%,.3)}#ArcgisMap .dragable .aux-spinner{margin:0 auto 1rem}.sr-only:not(:focus):not(:active){clip:rect(0 0 0 0);clip-path:inset(100%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import PTM from '@/utilities/PTM';\nimport {\n HasProperty,\n ValidateCadastre,\n ValidateProjectId,\n ValidateProjectName,\n} from '@/utilities/Validate';\nimport { PTMCategory } from '@/types/ptm';\nimport { GetAuthToken, BearerRequest, XhrRequest } from './xhr';\n\nconst API = String(process.env.VUE_APP_BACKEND_ENDPOINT);\n\nexport interface ProjectNote {\n id: string;\n created: number;\n content: string;\n author: string;\n cadastre?: string;\n icon?: string;\n position?: number[];\n}\n\nexport interface Project {\n Author: string;\n Created: string;\n Name: string;\n Project: string;\n Status: string;\n Updated: number;\n Default: boolean;\n}\n\nexport interface ProjectFile {\n id: string;\n created: number;\n updated: number;\n name: string;\n size: number;\n type: string;\n usedInMaps?: boolean;\n}\n\nexport const GetProject = async (\n id: string\n): Promise> => {\n const request = new BearerRequest(GetAuthToken);\n const encoded = encodeURIComponent(id);\n let error: Error | undefined;\n\n const result = await request\n .getJSON>(`${API}/project/${encoded}`)\n .catch((e) => {\n error = e;\n });\n\n if (!result || error) {\n return Promise.reject(error);\n }\n\n /* Remap some project keys */\n result.properties = {};\n const properties = result.properties as Record<\n string,\n Record\n >;\n\n Object.keys(result)\n .filter((key) => HasProperty(result, key))\n .forEach((key) => {\n const needle = 'Cadastre#';\n const pos = key.indexOf(needle);\n\n if (pos === 0) {\n const cadastre = key.substring(needle.length);\n properties[cadastre] = {\n status: result[key],\n };\n }\n });\n\n return Promise.resolve(result);\n};\n\nexport const GetProjects = async (owner = 'all'): Promise => {\n const request = new BearerRequest(GetAuthToken);\n let error: Error | undefined;\n const projects = await request\n .getJSON(`${API}/project?owner=${owner}`)\n .catch((e) => {\n error = e;\n });\n\n if (!projects || error) {\n return Promise.reject(error);\n }\n\n return projects;\n};\n\nexport const CreateProject = async (name: string): Promise => {\n if (ValidateProjectName(name)) {\n const request = new BearerRequest(GetAuthToken);\n let error: Error | undefined;\n\n const result = await request\n .postJSON(`${API}/project`, { name })\n .catch((e) => {\n error = e;\n });\n\n if (!result || error) {\n return Promise.reject(error);\n }\n\n if (Object.prototype.hasOwnProperty.call(result, 'id')) {\n PTM.event(PTMCategory.project, 'Create project', '');\n return Promise.resolve(String(result.id));\n }\n\n return Promise.reject(\n new Error(`Unknown reply from server ${String(result)}`)\n );\n }\n\n const badNameError = new Error('Ugyldig prosjektnavn');\n badNameError.name = 'InvalidParameterError';\n return Promise.reject(badNameError);\n};\n\nexport const DeleteFile = async (\n projectId: string,\n fileId: string\n): Promise => {\n const request = new BearerRequest(GetAuthToken);\n let error: Error | undefined;\n\n const result = await request\n .deleteJSON(`${API}/upload`, {\n name: fileId,\n project: projectId,\n })\n .catch((e) => {\n error = e;\n });\n\n if (!result || error) {\n return Promise.reject(error);\n }\n PTM.event(PTMCategory.project, 'Delete file', '');\n\n return String(result.name);\n};\n\nexport const DeleteProject = async (id: string): Promise => {\n if (ValidateProjectId(id)) {\n const request = new BearerRequest(GetAuthToken);\n const encoded = encodeURIComponent(id);\n let error: Error | undefined;\n\n const result = await request\n .deleteJSON(`${API}/project/${encoded}`, {})\n .catch((e) => {\n error = e;\n });\n\n if (!result || error) {\n return Promise.reject(error);\n }\n\n if (Object.prototype.hasOwnProperty.call(result, 'id')) {\n PTM.event(PTMCategory.project, 'Delete project', '');\n\n return Promise.resolve(String(result.id));\n }\n\n return Promise.reject(\n new Error(`Unknown reply from server ${String(result)}`)\n );\n }\n\n const badIdError = new Error('Ugyldig prosjekt ID');\n badIdError.name = 'InvalidParameterError';\n return Promise.reject(badIdError);\n};\n\nexport const DeleteCadastre = async (\n projectId: string,\n cadastre: string\n): Promise => {\n let badParamError: Error = new Error('Ukjent feil');\n\n if (ValidateProjectId(projectId)) {\n if (ValidateCadastre(cadastre)) {\n const request = new BearerRequest(GetAuthToken);\n const idEncoded = encodeURIComponent(projectId);\n const cadastreEncoded = encodeURIComponent(cadastre);\n let error: Error | undefined;\n\n const result = await request\n .deleteJSON(\n `${API}/project/${idEncoded}/cadastre/${cadastreEncoded}`,\n {}\n )\n .catch((e) => {\n error = e;\n });\n\n if (!result || error) {\n return Promise.reject(error);\n }\n\n PTM.event(PTMCategory.project, 'Remove cadastre from project', '');\n return Promise.resolve(String(result));\n }\n\n badParamError = new Error('Ugyldig matrikkelnummer');\n } else {\n badParamError = new Error('Ugyldig prosjekt-ID');\n }\n\n badParamError.name = 'InvalidParameterError';\n return Promise.reject(badParamError);\n};\n\nexport const GetCadastres = async (\n projectId: string\n): Promise> => {\n let badParamError: Error = new Error('Ukjent feil');\n\n if (ValidateProjectId(projectId)) {\n const request = new BearerRequest(GetAuthToken);\n const idEncoded = encodeURIComponent(projectId);\n let error: Error | undefined;\n\n const result = await request\n .getJSON>(\n `${API}/project/${idEncoded}/cadastre`,\n {}\n )\n .catch((e) => {\n error = e;\n });\n\n if (!result || error) {\n return Promise.reject(error);\n }\n\n return Promise.resolve(result);\n }\n\n badParamError = new Error('Ugyldig prosjekt-ID');\n badParamError.name = 'InvalidParameterError';\n\n return Promise.reject(badParamError);\n};\n\nexport const SaveCadastre = async (\n projectId: string,\n cadastre: string\n): Promise => {\n let badParamError: Error = new Error('Ukjent feil');\n\n if (ValidateProjectId(projectId)) {\n if (ValidateCadastre(cadastre)) {\n const request = new BearerRequest(GetAuthToken);\n const idEncoded = encodeURIComponent(projectId);\n const cadastreEncoded = encodeURIComponent(cadastre);\n let error: Error | undefined;\n\n const result = await request\n .putJSON(`${API}/project/${idEncoded}/cadastre/${cadastreEncoded}`, {})\n .catch((e) => {\n error = e;\n });\n\n if (!result || error) {\n return Promise.reject(error);\n }\n PTM.event(PTMCategory.project, 'Add cadastre to project', '');\n return Promise.resolve(String(result));\n }\n\n badParamError = new Error('Ugyldig matrikkelnummer');\n } else {\n badParamError = new Error('Ugyldig prosjekt-ID');\n }\n\n badParamError.name = 'InvalidParameterError';\n return Promise.reject(badParamError);\n};\n\nexport const SetProjectState = async (\n projectId: string,\n stateIdx: number\n): Promise => {\n const stateLabels = ['Aktiv', 'Avsluttet', 'Arkivert'];\n const request = new BearerRequest(GetAuthToken);\n const idEncoded = encodeURIComponent(projectId);\n const stateEncoded = encodeURIComponent(stateIdx);\n let error: Error | undefined;\n\n const result = await request\n .patchJSON(`${API}/project/${idEncoded}/status/${stateEncoded}`, {})\n .catch((e) => {\n error = e;\n });\n\n if (!result || error) {\n return Promise.reject(error);\n }\n\n PTM.event(\n PTMCategory.project,\n 'Set project status',\n stateLabels[Number(stateEncoded)]\n );\n\n return Promise.resolve(String(result));\n};\n\nexport const SetProjectName = async (\n projectId: string,\n name: string\n): Promise => {\n const request = new BearerRequest(GetAuthToken);\n const idEncoded = encodeURIComponent(projectId);\n let error: Error | undefined;\n\n const result = await request\n .patchJSON(`${API}/project/${idEncoded}/name`, {\n name,\n })\n .catch((e) => {\n error = e;\n });\n\n if (!result || error) {\n return Promise.reject(error);\n }\n\n PTM.event(PTMCategory.project, 'Rename project', '');\n\n return Promise.resolve(String(result));\n};\n\nexport const GetFile = async (\n projectId: string,\n fileId = ''\n): Promise => {\n const request = new BearerRequest(GetAuthToken);\n const projectIdEncoded = encodeURIComponent(projectId);\n const fileIdEncoded = encodeURIComponent(fileId);\n let error: Error | undefined;\n\n const result = await request\n .getJSON(`${API}/files/${projectIdEncoded}/${fileIdEncoded}`)\n .catch((e) => {\n error = e;\n });\n\n if (!result || error) {\n return Promise.reject(error);\n }\n\n return result;\n};\n\nexport const GetFiles = async (\n projectId: string,\n type = ''\n): Promise => {\n const request = new BearerRequest(GetAuthToken);\n const idEncoded = encodeURIComponent(projectId);\n let typeEncoded = encodeURIComponent(type);\n let error: Error | undefined;\n\n if (typeEncoded.length) {\n typeEncoded = `/${typeEncoded}`;\n }\n\n const result = await request\n .getJSON(`${API}/files/${idEncoded}${typeEncoded}`)\n .catch((e) => {\n error = e;\n });\n\n if (!result || error) {\n return Promise.reject(error);\n }\n\n return result;\n};\n\nexport const GetFileDownloadLink = async (\n projectId: string,\n fileId: string\n): Promise => {\n if (ValidateProjectId(projectId)) {\n const request = new BearerRequest(GetAuthToken);\n const idEncoded = encodeURIComponent(projectId);\n const fileEncoded = encodeURIComponent(fileId);\n let error: Error | undefined;\n\n const result = await request\n .getJSON>(\n `${API}/file/${idEncoded}/${fileEncoded}`,\n {}\n )\n .catch((e) => {\n error = e;\n });\n\n if (!result || error) {\n return Promise.reject(error);\n }\n\n return Promise.resolve(result.url);\n }\n\n const badParamError = new Error('Ugyldig prosjekt-ID');\n badParamError.name = 'InvalidParameterError';\n\n return Promise.reject(badParamError);\n};\n\nexport const UploadFile = async (\n projectId: string,\n file: File,\n progressCb?: (loaded: number, total: number) => void\n): Promise> => {\n const request = new BearerRequest(GetAuthToken);\n let error: Error | undefined;\n\n const uploadURL = (await request\n .postJSON(`${API}/upload`, {\n name: file.name,\n size: file.size,\n project: projectId,\n })\n .catch((e) => {\n error = e;\n })) as Record;\n\n if (!uploadURL || error) {\n return Promise.reject(error);\n }\n\n const { url, name } = uploadURL;\n const uploadRequest = new XhrRequest();\n\n if (progressCb) {\n uploadRequest.subscribe('progress', (event) => {\n if (event.lengthComputable) {\n progressCb(event.loaded, event.total);\n }\n });\n }\n\n const upload = await uploadRequest\n .put(url, file, {\n 'Content-Type': file.type,\n })\n .catch((e: Error) => {\n error = e;\n });\n\n if (!upload || error) {\n return Promise.reject(error);\n }\n\n PTM.event(\n PTMCategory.project,\n 'Upload file',\n file.name.split('.').pop() || 'unknown filetype',\n file.size\n );\n\n return Promise.resolve({ id: name });\n};\n\nexport const SaveNote = async (projectId: string, note: ProjectNote) => {\n if (note.content.length && ValidateProjectId(projectId)) {\n if (!note.cadastre || ValidateCadastre(note.cadastre)) {\n const request = new BearerRequest(GetAuthToken);\n let error: Error | undefined;\n\n const pId = encodeURIComponent(projectId);\n const body: Record = {\n content: note.content,\n };\n\n if (note.cadastre) {\n body.cadastre = note.cadastre;\n }\n\n const created = await request\n .putJSON(`${API}/project/${pId}/note`, body)\n .catch((e) => {\n error = e;\n });\n\n if (!created || error) {\n return Promise.reject(error);\n }\n PTM.event(PTMCategory.project, 'Save note', '');\n\n return created;\n }\n }\n\n return Promise.reject(new Error('Invalid parameters'));\n};\n\nexport const DeleteNote = async (projectId: string, noteId: string) => {\n if (ValidateProjectId(projectId)) {\n const regex = /^[a-f0-9-]{36}_\\d{1,2000}$/;\n\n if (regex.test(noteId)) {\n const request = new BearerRequest(GetAuthToken);\n let error: Error | undefined;\n\n const pId = encodeURIComponent(projectId);\n const nId = encodeURIComponent(noteId);\n\n const deleted = await request\n .deleteJSON(`${API}/project/${pId}/note/${nId}`, {})\n .catch((e) => {\n error = e;\n });\n\n if (!deleted || error) {\n return Promise.reject(error);\n }\n PTM.event(PTMCategory.project, 'Delete note', '');\n\n return deleted;\n }\n }\n\n return Promise.reject(new Error('Invalid parameters'));\n};\n\nexport const GetNotes = async (projectId: string, idOrCadastre?: string) => {\n let valid = ValidateProjectId(projectId);\n let idStr = '';\n\n if (valid && idOrCadastre) {\n const regex = /^[a-f0-9-]{36}_\\d{1,2000}$/;\n valid &&= ValidateCadastre(idOrCadastre) || regex.test(idOrCadastre);\n idStr = `/${encodeURIComponent(idOrCadastre)}`;\n }\n\n if (valid) {\n const request = new BearerRequest(GetAuthToken);\n let error: Error | undefined;\n\n const pId = encodeURIComponent(projectId);\n\n const notes = await request\n .getJSON(`${API}/project/${pId}/note${idStr}`)\n .catch((e) => {\n error = e;\n });\n\n if (!notes || error) {\n return Promise.reject(error);\n }\n\n return notes;\n }\n\n return Promise.reject(new Error('Invalid parameters'));\n};\n\nexport const GetEvents = async (\n projectId: string\n): Promise[]> => {\n if (ValidateProjectId(projectId)) {\n const request = new BearerRequest(GetAuthToken);\n let error: Error | undefined;\n\n const pId = encodeURIComponent(projectId);\n\n const events = await request\n .getJSON[]>(`${API}/project/${pId}/events`)\n .catch((e) => {\n error = e;\n });\n\n if (!events || error) {\n return Promise.reject(error);\n }\n\n return events;\n }\n\n return Promise.reject(new Error('Invalid parameters'));\n};\n\nexport default {\n CreateProject,\n DeleteFile,\n DeleteCadastre,\n DeleteProject,\n GetCadastres,\n GetFiles,\n GetProject,\n GetProjects,\n SaveCadastre,\n SaveNote,\n UploadFile,\n};\n","import ST from 'geojson-bounds';\nimport Leaflet from 'leaflet';\nimport PolygonLookup from 'polygon-lookup';\nimport AmbitaMap from '@ambita/ambita-map';\nimport { Geometry, GeoJsonProperties } from 'geojson';\n\n/* eslint-disable import/no-cycle */\n// @TODO: fix dependency cycle\nimport PropFinderMap from '@/components/Map/PropfinderMap';\n/* eslint-enable import/no-cycle */\nimport { RealtyPolygon } from '../RealtyTypes';\n\nexport default class Polygon implements RealtyPolygon {\n public type: string;\n\n public coordinates: number[][][][];\n\n constructor(realtyItem: RealtyPolygon) {\n this.type = realtyItem.type;\n this.coordinates = realtyItem.coordinates;\n }\n\n /**\n * Returns the bounds (in Leaflet format) for this polygon\n * @returns {null|LatLngBounds|null|N}\n */\n public bounds(): Leaflet.LatLngBounds | null {\n const extent = ST.extent(this as RealtyPolygon);\n\n if (!extent) {\n return null;\n }\n\n const [first, second, third, fourth] = extent;\n const corner1 = AmbitaMap.latLng(second, first);\n const corner2 = AmbitaMap.latLng(fourth, third);\n\n return AmbitaMap.latLngBounds(corner1, corner2);\n }\n\n /**\n * Checks if this polygon is within the given leaflet-map\n * @param propFinderMap\n * @returns {boolean|*}\n */\n public isWithinMap(propFinderMap: PropFinderMap): boolean {\n const bounds = this.bounds();\n\n if (bounds) {\n return propFinderMap.bounds().contains(bounds);\n }\n\n return false;\n }\n\n public isNotWithinMap(propFinderMap: PropFinderMap): boolean {\n return !this.isWithinMap(propFinderMap);\n }\n\n /**\n * Checks if this polygon contains the given point (latLng)\n * @param latLng\n * @returns {boolean}\n */\n public contains(latLng: Leaflet.LatLng): boolean {\n const featureCollection = {\n type: 'FeatureCollection',\n features: [\n {\n type: 'Feature',\n properties: { id: 'test' },\n geometry: this as RealtyPolygon,\n },\n ],\n };\n\n const lookup = new PolygonLookup(\n featureCollection as unknown as GeoJSONFeatureCollection<\n Geometry,\n GeoJsonProperties\n >\n );\n const polygon = lookup.search(latLng.lng, latLng.lat);\n\n return polygon !== undefined;\n }\n}\n","import axios, { AxiosError, AxiosResponse } from 'axios';\nimport { coreStore } from '@ambita/ambita-components-core';\nimport { LatLng, LatLngLiteral } from 'leaflet';\nimport { LoadingEvent } from '@/utilities/CustomEvents';\nimport logger from '@/utilities/Logger';\n\n/* eslint-disable import/no-cycle */\n// @TODO: fix dependency cycle\nimport Polygon from '@/data/wrapper/Polygon';\n/* eslint-enable import/no-cycle */\nimport * as RealtyTypes from './RealtyTypes';\n\nexport interface RelatedToCadastre {\n polygon: Polygon | null;\n ownerships: RealtyTypes.RealtyOwnerShip[] | null;\n address: RealtyTypes.RealtyPresentationAddress | null;\n buildings: RealtyTypes.RealtyBuildings[] | null;\n latestConveyance: RealtyTypes.RealtyConveyances | null;\n heritages: RealtyTypes.RealtySingleHeritage[] | null;\n soilContaminations: RealtyTypes.RealtySoilContamination[] | null;\n}\n\nexport interface PropertyData extends RelatedToCadastre {\n cadastre: RealtyTypes.RealtyCadastreItem;\n}\n\nexport type LandRegistryPart =\n | 'EASEMENTS'\n | 'LANDDATA'\n | 'PRIVILEGES'\n | 'MONETARY_ENCUMBRANCES'\n | 'TITLES'\n | 'ENCUMBRANCES';\n\nexport type LandRegistryState =\n | 'active'\n | 'historical'\n | 'active_and_historical';\n\n// eslint-disable-next-line\ndeclare global { interface Window { L: any; } }\ntype CacheItem = { timeStamp: number; data: any };\nlet cache: { [key: string]: CacheItem } = {};\nconst FIVE_MINUTES = 60 * 1000 * 5;\nconst SIX_HOURS = 6 * 60 * 60 * 1000;\nlet cacheSize = 0;\n\nconst cleanCache = () => {\n if (cacheSize >= 3000) {\n cache = {};\n cacheSize = 0;\n }\n};\n\nconst checkCacheExpiry = (item: CacheItem) => {\n const now = Date.now();\n const cacheAge = now - item.timeStamp;\n const isExpired = cacheAge > SIX_HOURS;\n\n return isExpired;\n};\n\nconst expireCache = () => {\n Object.entries(cache).forEach(([key, item]) => {\n if (checkCacheExpiry(item)) {\n delete cache[key];\n }\n });\n};\n\nsetInterval(expireCache, FIVE_MINUTES);\n\nconst cacheAdd = (key: string, element: any) => {\n cleanCache();\n cache[key] = { timeStamp: Date.now(), data: element };\n cacheSize += 1;\n};\n\nconst cacheGet = (url: string) => {\n let isExpired = false;\n if (cache[url]) {\n isExpired = checkCacheExpiry(cache[url]);\n }\n\n if (isExpired) {\n return null;\n }\n\n return cache[url];\n};\n\nexport default class Realty {\n static baseUrl = `${process.env.VUE_APP_AMBITA_API}/realty/`;\n\n static async getPropertyByPosition(\n pos: LatLngLiteral\n ): Promise {\n const cadastre = await this.getFirstCadastreByPosition(pos);\n const data = await this.getProperty(cadastre.key);\n return data;\n }\n\n static async getPolygonByPosition(pos: LatLngLiteral): Promise<{\n polygon: Polygon | null;\n cadastre: RealtyTypes.RealtyCadastreItem;\n }> {\n const cadastre = await this.getFirstCadastreByPosition(pos);\n const polygon = await this.getPolygon(cadastre.key);\n return { cadastre, polygon };\n }\n\n static getFirstCadastreByPosition(\n pos: LatLngLiteral\n ): Promise {\n return new Promise((resolve, reject) => {\n this.getCadastresByPosition(pos)\n .then((result: RealtyTypes.RealtyCadastreResponse) => {\n if (\n !result ||\n !Object.prototype.hasOwnProperty.call(result, 'items') ||\n !result.items ||\n result.items.length < 1\n ) {\n // eslint-disable-next-line prefer-promise-reject-errors\n reject('Ingen eiendom funnet');\n } else {\n resolve(this.selectFirstPreferMainCadastres(result.items));\n }\n })\n .catch((reason) => {\n logger.error(reason);\n // eslint-disable-next-line prefer-promise-reject-errors\n reject(`En feil har oppstått ved oppslag av eiendom. ${reason}`);\n });\n });\n }\n\n static selectFirstPreferMainCadastres(\n cadastres: RealtyTypes.RealtyCadastreItem[]\n ): RealtyTypes.RealtyCadastreItem {\n if (cadastres.length === 1) {\n return cadastres[0];\n }\n\n const mainCadastres = cadastres\n .filter(\n (c: RealtyTypes.RealtyCadastreItem) => c.ident.sectionNumber === 0\n )\n .sort((a, b) => a.specifiedArea - b.specifiedArea);\n\n if (mainCadastres.length > 0) {\n logger.info('Flere seksjoner funnet. Returnerer hovedeiendom (snr=0)');\n return mainCadastres[0];\n }\n\n return cadastres[0];\n }\n\n static getCadastresByPosition(\n pos: LatLngLiteral\n ): Promise {\n return this.getData(\n `v1/positions/${pos.lng},${pos.lat},wgs84/cadastres/?pagesize=200&datum=WGS84`\n ) as Promise as Promise;\n }\n\n static getPlotPolygonByPosition(pos: LatLng): Promise {\n return this.getData(\n `v1/positions/${pos.lng},${pos.lat},wgs84/plot/polygon/`\n ) as Promise as Promise;\n }\n\n /**\n * Retrieves a list of properties for the given list of cadastre keys\n * @param cadastreKeys - List of keys\n * @returns {Promise<[Property]>} - Promise with a list of properties\n */\n static getProperties(cadastreKeys: string[]): Promise {\n const promises = cadastreKeys.map((cadastreKey) =>\n Realty.getProperty(cadastreKey)\n );\n return Promise.all(promises);\n }\n\n /**\n * Retrieved a complete Property with related data\n * @param cadastreKey\n * @returns {Promise} - Promise with a property object\n */\n static getProperty(cadastreKey: string): Promise {\n return new Promise((resolve, reject) => {\n let cadastre: RealtyTypes.RealtyCadastreItem;\n\n Realty.getCadastreByKey(cadastreKey)\n .then((result) => {\n if (!result.item) {\n throw new Error(`Tomt datasett for matrikkel ${cadastreKey}`);\n }\n\n /* Key may differ from original cadastre key */\n cadastre = result.item;\n return Realty.getRelatedToCadastre(cadastre);\n })\n .then((related) => {\n resolve({\n cadastre,\n ...related,\n });\n })\n .catch(reject);\n });\n }\n\n static getRelatedToCadastre(\n cadastre: RealtyTypes.RealtyCadastreItem\n ): Promise {\n return new Promise((resolve, reject) => {\n if (this.cadastreIsVannteigOrEierlos(cadastre.key)) {\n resolve({\n polygon: null,\n ownerships: null,\n address: null,\n buildings: null,\n latestConveyance: null,\n heritages: null,\n soilContaminations: null,\n });\n return;\n }\n\n Promise.allSettled([\n Realty.getPolygon(cadastre.key),\n Realty.getOwnerships(cadastre.key),\n Realty.getPresentationAddress(cadastre.key),\n Realty.getBuildings(cadastre.key),\n Realty.getLatestConveyance(cadastre.key),\n Realty.getSingleHeritages(cadastre.key),\n Realty.getSoilContaminations(cadastre.key),\n ])\n .then(\n ([\n polygonResponse,\n ownershipResponse,\n presentationAddressResponse,\n buildingsResponse,\n conveyanceResponse,\n singleHeritagesResponse,\n soilContaminationResponse,\n ]) => {\n const response: RelatedToCadastre = {\n polygon: null,\n ownerships: null,\n address: null,\n buildings: null,\n latestConveyance: null,\n heritages: null,\n soilContaminations: null,\n };\n\n if (polygonResponse.status === 'fulfilled') {\n response.polygon = polygonResponse.value;\n } else {\n reject(new Error('Failed to fetch polygon'));\n }\n\n if (ownershipResponse.status === 'fulfilled') {\n response.ownerships = ownershipResponse.value.items;\n } else {\n reject(new Error('Failed to fetch owners'));\n }\n\n if (presentationAddressResponse.status === 'fulfilled') {\n response.address = presentationAddressResponse.value.item;\n } else {\n reject(new Error('Failed to fetch address'));\n }\n\n if (buildingsResponse.status === 'fulfilled') {\n response.buildings = buildingsResponse.value.items;\n } else {\n reject(new Error('Failed to fetch address'));\n }\n\n if (conveyanceResponse.status === 'fulfilled') {\n response.latestConveyance = conveyanceResponse.value;\n } else {\n reject(new Error('Failed to fetch address'));\n }\n\n if (singleHeritagesResponse.status === 'fulfilled') {\n response.heritages = singleHeritagesResponse.value.items;\n } else {\n reject(new Error('Failed to fetch single herritages'));\n }\n\n if (soilContaminationResponse.status === 'fulfilled') {\n response.soilContaminations =\n soilContaminationResponse.value.items;\n } else {\n reject(new Error('Failed to fetch soil contaminations'));\n }\n\n resolve(response);\n }\n )\n .catch((reason) => reject(reason));\n });\n }\n\n static cadastreIsVannteigOrEierlos(cadastreKey: string): boolean {\n const key = cadastreKey.trim();\n\n return key.endsWith('-0-0-0-0') || key.endsWith('-0-1-0-0');\n }\n\n static getCadastresByAddressKey(\n addressKey: string\n ): Promise {\n return this.getData(\n `v1/addresses/${addressKey}/cadastres/?datum=WGS84`\n ) as Promise as Promise;\n }\n\n static getCadastreByKey(\n cadastreKey: string\n ): Promise {\n return this.getData(\n `v1/cadastres/${cadastreKey}?datum=WGS84`\n ) as Promise as Promise;\n }\n\n static getOwners(\n cadastreKey: string\n ): Promise {\n return this.getData(\n `v1/cadastres/${cadastreKey}/owners/?&onlyMaxCadastreLevel=true&pagesize=200`\n ) as Promise as Promise;\n }\n\n static getEstimatedValue(cadastreKey: string): Promise {\n return this.getData(\n `v1/cadastres/${cadastreKey}/housingvalue/`\n ) as Promise as Promise;\n }\n\n static getOwnerships(\n cadastreKey: string\n ): Promise {\n return this.getData(\n `v1/cadastres/${cadastreKey}/ownershipsowningthiscadastre/?&onlyMaxCadastreLevel=true&pagesize=200`\n ) as Promise as Promise;\n }\n\n static getOwnedOwnerships(cadastreKey: string) {\n return this.getData(\n `v1/cadastres/${cadastreKey}/ownershipsownedbythiscadastre/?&onlyMaxCadastreLevel=true&pagesize=200`\n ) as Promise as Promise;\n }\n\n static getSections(cadastreKey: string) {\n return this.getData(\n `v1/cadastres/${cadastreKey}/sections/?&pagesize=9999`\n ) as Promise as Promise;\n }\n\n static getPolygon(cadastreKey: string): Promise {\n return new Promise((resolve, reject) => {\n this.getData(`v1/cadastres/${cadastreKey}/polygon/`)\n .then((data) => {\n if (data.type === undefined) {\n resolve(null);\n return;\n }\n resolve(new Polygon(data as unknown as RealtyTypes.RealtyPolygon));\n })\n .catch(reject);\n });\n }\n\n static getBuildings(cadastreKey: string) {\n return this.getData(\n `v1/cadastres/${cadastreKey}/buildings/?datum=wgs84&pagesize=200&includeSections=true`\n ) as Promise as Promise;\n }\n\n static getBuilding(buildingKey: string) {\n return this.getData(`v1/buildings/${buildingKey}?datum=wgs84`).then(\n (result) => result.item\n ) as Promise as Promise;\n }\n\n static getPlots(\n cadastreKey: string\n ): Promise {\n return this.getData(\n `v1/cadastres/${cadastreKey}/plots/?datum=wgs84&pagesize=200`\n ) as Promise as Promise;\n }\n\n static getHousingValue(\n cadastreKey: string\n ): Promise {\n return this.getData(\n `v1/cadastres/${cadastreKey}/housingvalue/`\n ) as Promise as Promise;\n }\n\n static getLatestConveyance(\n cadastreKey: string\n ): Promise {\n return new Promise(\n (resolve, reject) => {\n this.getData(\n `v1/cadastres/${cadastreKey}/conveyances/?pagesize=1&freeMarketOnly=true&sortByDateDescending=true`\n )\n .then(\n (response: Record) =>\n response as unknown as RealtyTypes.RealtyConveyancesResponse\n )\n .then((response: RealtyTypes.RealtyConveyancesResponse) => {\n if (response.items.length === 0) {\n resolve(null);\n }\n\n resolve(response.items[0]);\n })\n .catch((error: AxiosError) => {\n reject(error);\n });\n }\n );\n }\n\n static getSingleHeritages(\n cadastreKey: string\n ): Promise {\n return this.getData(\n `v1/cadastres/${cadastreKey}/singleheritages/?pagesize=200`\n ) as Promise as Promise;\n }\n\n static getSingleHeritage(\n singleHeritageKey: string\n ): Promise {\n return this.getData(`v1/singleheritages/${singleHeritageKey}`).then(\n (result) => result.item\n ) as Promise as Promise;\n }\n\n static getSoilContaminations(\n cadastreKey: string\n ): Promise {\n return this.getData(\n `v1/cadastres/${cadastreKey}/soilcontaminations/?pagesize=200`\n ) as Promise as Promise;\n }\n\n static getSoilContamination(\n soilContaminationKey: string\n ): Promise {\n return this.getData(`v1/soilcontaminations/${soilContaminationKey}`).then(\n (result) => result.item\n ) as Promise as Promise;\n }\n\n static getPresentationAddress(\n cadastreKey: string\n ): Promise {\n return this.getData(\n `v1/cadastres/${cadastreKey}/presentationaddress/`\n ) as Promise as Promise;\n }\n\n static getLandRegistry(\n cadastreKey: string,\n part: LandRegistryPart,\n state: LandRegistryState = 'active_and_historical'\n ): Promise {\n return this.getData(\n `v1/cadastres/${cadastreKey}/landregistry/?parts=${part}&state=${state}`\n ).then(\n (result) => result.item\n ) as Promise as Promise;\n }\n\n static newPromise(data: unknown): Promise {\n return new Promise((resolve) => {\n resolve(data);\n });\n }\n\n static nullResult(): Promise {\n return new Promise((resolve) => {\n resolve(null);\n });\n }\n\n static itemsEmpty(): Record {\n return {\n error: {\n returnCode: 0,\n message: '',\n },\n info: {\n realtyCode: 0,\n message: '',\n links: [],\n },\n item: null,\n items: [],\n pagination: {\n previous: '',\n next: '',\n },\n };\n }\n\n static getData(\n url: string,\n dispatchEvents = true\n ): Promise> {\n const loadingEvent = new LoadingEvent('loading');\n loadingEvent.details = url;\n\n if (dispatchEvents) {\n document.dispatchEvent(loadingEvent);\n }\n\n return new Promise>((resolve, reject) => {\n const cacheResult = cacheGet(url);\n\n if (cacheResult) {\n resolve(cache[url].data);\n\n if (dispatchEvents) {\n const loadingCompleteEvent = new LoadingEvent('loadingComplete');\n loadingCompleteEvent.details = url;\n document.dispatchEvent(loadingCompleteEvent);\n }\n } else {\n this.get(`${url}`)\n .then((result: AxiosResponse>) => result.data)\n .then((result: Record) => {\n const loadingCompleteEvent = new LoadingEvent('loadingComplete');\n loadingCompleteEvent.details = url;\n\n if (dispatchEvents) {\n document.dispatchEvent(loadingCompleteEvent);\n }\n\n cacheAdd(url, result);\n resolve(result);\n })\n .catch((error: AxiosError) => {\n if (error.response && error.response.status === 404) {\n const loadingCompleteEvent = new LoadingEvent('loadingComplete');\n loadingCompleteEvent.details = url;\n\n if (dispatchEvents) {\n document.dispatchEvent(loadingCompleteEvent);\n }\n\n return resolve(this.itemsEmpty());\n }\n\n // eslint-disable-next-line prefer-promise-reject-errors\n return reject(`Feil oppstod ved kall til <${url}>: ${error}`);\n });\n }\n });\n }\n\n static get(url: string): Promise>> {\n const tokenOrPromise = coreStore.getAccessToken();\n\n const tokenPromise = new Promise((resolve, reject) => {\n if (typeof tokenOrPromise === 'string') {\n resolve(tokenOrPromise);\n } else {\n tokenOrPromise.then(resolve).catch(reject);\n }\n });\n\n return tokenPromise.then((token) =>\n axios.get>(this.baseUrl + url, {\n headers: {\n Authorization: token as string,\n },\n })\n );\n }\n}\n","import { coreStore } from '@ambita/ambita-components-core';\n\nexport const GetAuthToken = (): Promise => {\n return new Promise((resolve, reject) => {\n const tokenOrPromise = coreStore.getAccessToken();\n\n if (typeof tokenOrPromise === 'string') {\n resolve(tokenOrPromise);\n } else {\n tokenOrPromise.then(resolve).catch(reject);\n }\n });\n};\n\nexport default { GetAuthToken };\n","import { JSONRequest } from './JSONRequest';\nimport { XhrRequestInit } from './XhrRequest';\nimport { XhrResponse } from './XhrResponse';\n\nexport class BearerRequest extends JSONRequest {\n #tokenGenerator: () => Promise;\n\n constructor(tokenGenerator: () => Promise) {\n super();\n this.#tokenGenerator = tokenGenerator;\n }\n\n request(url: string | URL, init: XhrRequestInit): Promise {\n return this.#tokenGenerator().then((token: string) => {\n const initCopy = init;\n\n initCopy.headers = init.headers ? init.headers : {};\n initCopy.headers.Authorization = String(token);\n\n return super.request(url, initCopy);\n });\n }\n}\n\nexport default { BearerRequest };\n","import { XhrRequest, XhrRequestInit } from './XhrRequest';\n\nexport class JSONRequest extends XhrRequest {\n deleteJSON(\n url: string | URL,\n body: Record,\n headers?: Record\n ): Promise> {\n const hdrs = headers || {};\n\n hdrs.Accept = 'application/json';\n hdrs['Content-Type'] = 'application/json';\n\n return super.delete(url, JSON.stringify(body), hdrs).then((r) => r.json());\n }\n\n getJSON(url: string | URL, headers?: Record): Promise {\n const hdrs = headers || {};\n hdrs.Accept = 'application/json';\n\n return super.get(url, hdrs).then((r) => r.json());\n }\n\n patchJSON(\n url: string | URL,\n body: Record,\n headers?: Record\n ): Promise> {\n const hdrs = headers || {};\n\n hdrs.Accept = 'application/json';\n hdrs['Content-Type'] = 'application/json';\n\n return super.patch(url, JSON.stringify(body), hdrs).then((r) => r.json());\n }\n\n postJSON(\n url: string | URL,\n body: Record,\n headers?: Record\n ): Promise> {\n const hdrs = headers || {};\n\n hdrs.Accept = 'application/json';\n hdrs['Content-Type'] = 'application/json';\n\n return super.post(url, JSON.stringify(body), hdrs).then((r) => r.json());\n }\n\n putJSON(\n url: string | URL,\n body: Record,\n headers?: Record\n ): Promise> {\n const hdrs = headers || {};\n\n hdrs.Accept = 'application/json';\n hdrs['Content-Type'] = 'application/json';\n\n return super.put(url, JSON.stringify(body), hdrs).then((r) => r.json());\n }\n\n requestJSON(\n url: string | URL,\n init: XhrRequestInit\n ): Promise> {\n const modifiedInit = init;\n const hdrs = init.headers ? init.headers : {};\n\n hdrs.Accept = 'application/json';\n hdrs['Content-Type'] = 'application/json';\n\n modifiedInit.headers = hdrs;\n\n return super.request(url, modifiedInit).then((r) => r.json());\n }\n}\n\nexport default { JSONRequest };\n","import { XhrResponse } from './XhrResponse';\n\nexport type XhrBody =\n | Blob\n | BufferSource\n | Document\n | FormData\n | null\n | string\n | URLSearchParams;\n\nexport type XhrSubscription =\n | 'abort'\n | 'error'\n | 'load'\n | 'loadend'\n | 'loadstart'\n | 'progress'\n | 'readystatechange'\n | 'timeout';\n\nexport type XhrRequestInit = {\n method: string;\n body?: XhrBody;\n headers?: Record;\n};\n\nexport type XhrEventCallback = (e: ProgressEvent) => void;\n\nexport class XhrRequest extends XMLHttpRequest {\n #eventListeners: Record = {};\n\n #subscriptions: Record = {\n abort: [],\n error: [],\n load: [],\n loadend: [],\n loadstart: [],\n progress: [],\n readystatechange: [],\n timeout: [],\n };\n\n private addEventListeners() {\n Object.keys(this.#subscriptions)\n .filter((key) => {\n return Object.prototype.hasOwnProperty.call(this.#subscriptions, key);\n })\n .forEach((key) => {\n this.#eventListeners[key] = (e: Event) => {\n this.#subscriptions[key].forEach((subscriber) => {\n subscriber(e as ProgressEvent);\n });\n };\n\n this.addEventListener(key, this.#eventListeners[key]);\n });\n }\n\n private removeEventListeners() {\n Object.keys(this.#eventListeners)\n .filter((key) => {\n return Object.prototype.hasOwnProperty.call(this.#eventListeners, key);\n })\n .forEach((key) => {\n this.removeEventListener(key, this.#eventListeners[key]);\n });\n }\n\n delete(\n url: string | URL,\n body: XhrBody = null,\n headers: Record = {}\n ): Promise {\n return this.request(url, {\n method: 'DELETE',\n headers,\n body,\n });\n }\n\n get(\n url: string | URL,\n headers?: Record\n ): Promise {\n return this.request(url, {\n method: 'GET',\n headers,\n });\n }\n\n patch(\n url: string | URL,\n body: XhrBody = null,\n headers: Record = {}\n ): Promise {\n return this.request(url, {\n method: 'PATCH',\n headers,\n body,\n });\n }\n\n post(\n url: string | URL,\n body: XhrBody = null,\n headers: Record = {}\n ): Promise {\n return this.request(url, {\n method: 'POST',\n headers,\n body,\n });\n }\n\n put(\n url: string | URL,\n body: XhrBody = null,\n headers: Record = {}\n ): Promise {\n return this.request(url, {\n method: 'PUT',\n headers,\n body,\n });\n }\n\n request(url: string | URL, init: XhrRequestInit): Promise {\n this.open(init.method, url);\n\n if (init.headers) {\n const { headers } = init;\n\n Object.keys(headers)\n .filter((key) => Object.prototype.hasOwnProperty.call(headers, key))\n .forEach((key) => {\n this.setRequestHeader(key, headers[key]);\n });\n }\n\n return this.send(init.body);\n }\n\n send(body?: XhrBody): Promise {\n return new Promise((resolve, reject) => {\n const onSuccess = () => {\n if (this.status > 199 && this.status < 300) {\n resolve(new XhrResponse(this));\n } else {\n reject(new Error(`${this.status} ${this.statusText}`));\n }\n };\n\n const onError = () => {\n reject(new Error(`${this.status} ${this.statusText}`));\n };\n\n const onAbort = () => {\n reject(new Error('Transaction aborted'));\n };\n\n const onComplete = () => {\n this.removeEventListeners();\n this.unsubscribe('load', onSuccess);\n this.unsubscribe('error', onError);\n this.unsubscribe('abort', onAbort);\n this.unsubscribe('loadend', onComplete);\n };\n\n this.subscribe('load', onSuccess);\n this.subscribe('error', onError);\n this.subscribe('abort', onAbort);\n this.subscribe('loadend', onComplete);\n\n this.addEventListeners();\n\n super.send(body);\n });\n }\n\n subscribe(event: XhrSubscription, cb: XhrEventCallback): void {\n if (Object.prototype.hasOwnProperty.call(this.#subscriptions, event)) {\n this.#subscriptions[event].push(cb);\n }\n }\n\n unsubscribe(event: XhrSubscription, cb: XhrEventCallback): void {\n if (Object.prototype.hasOwnProperty.call(this.#subscriptions, event)) {\n const pos = this.#subscriptions[event].indexOf(cb);\n\n if (pos !== -1) {\n this.#subscriptions[event] = this.#subscriptions[event].filter(\n (fn) => fn !== cb\n );\n }\n }\n }\n}\n\nexport default { XhrRequest };\n","export class XhrResponse {\n #xhr: XMLHttpRequest;\n\n constructor(xhr: XMLHttpRequest) {\n this.#xhr = xhr;\n }\n\n json(): Promise {\n try {\n const json = JSON.parse(this.#xhr.responseText);\n return Promise.resolve(json);\n } catch (e: unknown) {\n if (e instanceof Error) {\n return Promise.reject(e);\n }\n return Promise.reject(new Error(String(e)));\n }\n }\n\n xml(): Promise {\n try {\n const xml = this.#xhr.responseXML;\n\n if (xml) {\n return Promise.resolve(xml);\n }\n\n throw new Error('response is null');\n } catch (e) {\n if (e instanceof Error) {\n return Promise.reject(e);\n }\n return Promise.reject(new Error(String(e)));\n }\n }\n\n response(): Promise {\n return Promise.resolve(this.#xhr.response);\n }\n}\n\nexport default { XhrResponse };\n","import { BearerRequest } from '@/data/xhr/BearerRequest';\nimport { GetAuthToken } from '@/data/xhr/AuthToken';\nimport IdentityManager from '@arcgis/core/identity/IdentityManager';\nimport logger from '@/utilities/Logger';\n\nconst API = String(process.env.VUE_APP_BACKEND_ENDPOINT);\nconst ARCGIS_SERVER = String(process.env.VUE_APP_ARCGIS_ENDPOINT);\n\nlet tokenRegistered = false;\n\nexport async function getGeodataToken() {\n const request = new BearerRequest(GetAuthToken);\n\n let response: Record;\n try {\n response = await request.getJSON>(\n `${API}/token/geodata`\n );\n } catch (error) {\n if (error instanceof Error) {\n logger.error(`Geodata token error: ${error.message}`);\n }\n throw new Error(`Unable to get Geodata token: ${error}`);\n }\n\n if (!Object.prototype.hasOwnProperty.call(response, 'token')) {\n throw new Error(`Unable to get Geodata token: ${response.message}`);\n }\n\n return response.token;\n}\n\nexport async function registerGeodataToken() {\n if (tokenRegistered) {\n return;\n }\n\n try {\n const token = await getGeodataToken();\n\n IdentityManager.registerToken({\n server: ARCGIS_SERVER,\n token,\n });\n\n tokenRegistered = true;\n } catch (error) {\n throw new Error(`Unable to register Geodata token: ${error}`);\n }\n}\n","import { defineStore } from 'pinia';\nimport GisUtil from '@/utilities/GisUtil';\nimport Extent from '@arcgis/core/geometry/Extent';\nimport { MapLayers } from '@/components/Map2D/MapLayers';\nimport logger from '@/utilities/Logger';\n\nconst MAPLAYERS_LOCALSTORAGE_KEY = 'pf-active-layers';\nconst BASELAYER_LOCALSTORAGE_KEY = 'pf-baselayer';\nconst LEGEND_EXPANSION_LOCALSTORAGE_KEY = 'pf-legend-open';\n\nconst getInitialActiveMapLayers = () => {\n const localStorageLayers = localStorage\n .getItem(MAPLAYERS_LOCALSTORAGE_KEY)\n ?.split('$PF$') || ['eiendomsGrenser'];\n const mapLayers = localStorageLayers.filter((layer) => layer !== '');\n\n return mapLayers;\n};\n\nconst getInitialBaseLayers = (): string => {\n return localStorage.getItem(BASELAYER_LOCALSTORAGE_KEY) || 'monotone';\n};\n\nconst getInitialLegendExpansion = (): boolean => {\n const state = localStorage.getItem(LEGEND_EXPANSION_LOCALSTORAGE_KEY);\n if (state === null) {\n return true;\n }\n\n const isExpanded = state === 'true';\n return isExpanded ?? true;\n};\n\nexport const useMapStore = defineStore('map', {\n state: (): {\n baseLayer: string | number;\n activeView: '3D' | '2D';\n selectedLayers: MapLayers[];\n x: number;\n y: number;\n zoom: number;\n extent: Extent;\n legendOpen: boolean;\n screenshot: __esri.Screenshot | null;\n baseLayerOpacity: number;\n } => ({\n x: 262579.16443590284,\n y: 6648955.153945487,\n selectedLayers: getInitialActiveMapLayers(),\n baseLayer: getInitialBaseLayers(),\n activeView: '2D',\n zoom: 13,\n extent: {} as Extent,\n legendOpen: getInitialLegendExpansion(),\n screenshot: null,\n baseLayerOpacity: 1,\n }),\n getters: {\n getLatLng(): { lat: number; lng: number } {\n const [lng, lat] = GisUtil.arcgisXYtoLatLng(this.x, this.y);\n return { lat, lng };\n },\n getXY(): { x: number; y: number } {\n return {\n x: this.x,\n y: this.y,\n };\n },\n },\n actions: {\n setMapCenterXY(x: number, y: number) {\n this.x = x;\n this.y = y;\n },\n setMapCenterLatLng(lat: number, lng: number) {\n const [x, y] = GisUtil.arcgisLatLngToXy(lat, lng);\n this.x = x;\n this.y = y;\n },\n setMapZoom(zoom: number) {\n this.zoom = zoom;\n },\n zoomIn() {\n this.setMapZoom(this.zoom + 1);\n },\n zoomOut() {\n this.setMapZoom(this.zoom - 1);\n },\n setBaseLayer(baseLayer: string) {\n localStorage.setItem(BASELAYER_LOCALSTORAGE_KEY, baseLayer);\n this.baseLayer = baseLayer;\n },\n setBaseLayerOpacity(opacity: number) {\n this.baseLayerOpacity = opacity;\n },\n setActiveLayers(layers: MapLayers[]) {\n localStorage.setItem(MAPLAYERS_LOCALSTORAGE_KEY, layers.join('$PF$'));\n\n this.selectedLayers = layers;\n },\n setExtent(extent: Extent) {\n this.extent = {\n xmin: extent.xmin,\n xmax: extent.xmax,\n ymin: extent.ymin,\n ymax: extent.ymax,\n } as Extent;\n },\n async toggleActiveMapView() {\n const is3D = this.activeView === '3D';\n\n const toggleMapState = () => {\n this.activeView = !is3D ? '3D' : '2D';\n };\n\n setTimeout(() => {\n toggleMapState();\n }, 1000);\n },\n setLegendState(open: boolean) {\n localStorage.setItem(LEGEND_EXPANSION_LOCALSTORAGE_KEY, String(open));\n this.legendOpen = open;\n },\n captureScreenshot() {\n // Trigger listeners without doing anything else.\n logger.debug('Generating screenshot');\n },\n zoomToSelectedProperties() {\n // Trigger listeners without doing anything else.\n logger.debug('Zooming to selected properties');\n },\n },\n});\n","import { defineStore } from 'pinia';\nimport { ref, computed, nextTick } from 'vue';\nimport Realty, { PropertyData } from '@/data/Realty';\nimport { WKID } from '@/types/spatialReference';\nimport Point from '@arcgis/core/geometry/Point';\nimport Polygon from '@arcgis/core/geometry/Polygon';\nimport {\n SaveCadastre,\n DeleteCadastre,\n GetProject,\n GetCadastres,\n} from '@/data/Projects';\nimport { Project } from '@/types/project';\nimport GisUtil from '@/utilities/GisUtil';\nimport { RealtyCadastreItem } from '@/data/RealtyTypes';\nimport logger from '@/utilities/Logger';\n\ntype PointXY = {\n x: number;\n y: number;\n};\n\ntype PointLatLng = {\n lat: number;\n lng: number;\n};\n\ntype PropertySelection = { [key: string]: PropertyData };\n\nconst getAllPolygons = (selection: PropertySelection) => {\n return Object.entries(selection)\n .filter((key) => key[1] && key[1].polygon)\n .map((key) => {\n return key[1].polygon;\n });\n};\n\nconst getProperty = (lat: number, lng: number): Promise => {\n return Realty.getPropertyByPosition({ lat, lng });\n};\n\nexport const useProjectStore = defineStore('project', () => {\n const loadedProperties = ref({});\n type CadastreIndexKey = keyof typeof loadedProperties.value;\n\n const selectedCadastres = ref([]);\n const currentProperty = ref(null);\n const hoverProperty = ref(null);\n const pointer = ref(null);\n const projectLoaded = ref(false);\n const project = ref(null);\n\n const selectedProperties = computed(() => {\n const selection: PropertySelection = {};\n\n selectedCadastres.value.forEach((cadastre) => {\n selection[cadastre] = loadedProperties.value[cadastre];\n });\n\n return selection;\n });\n const projectId = computed(() => {\n return project.value?.Project || null;\n });\n\n const getCadastres = computed(() => Object.keys(selectedProperties));\n\n const getSelectedCadastresPolygons = computed(() =>\n getAllPolygons(selectedProperties.value)\n );\n\n const getCurrentProperty = computed(() => {\n if (currentProperty.value) {\n return loadedProperties.value[currentProperty.value];\n }\n return null;\n });\n\n const getCadastreCenterPointLatLng = (cadastre: RealtyCadastreItem) => {\n const [lat, lng] = cadastre.position.geometry.coordinates;\n\n return {\n lat,\n lng,\n };\n };\n\n const getSelectedCadastresCenterPointsLatLng = computed((): PointLatLng[] => {\n return Object.entries(selectedProperties.value).map((key) => {\n return getCadastreCenterPointLatLng(key[1].cadastre);\n });\n });\n\n const getSelectedCadastresCenterPointsXY = computed((): PointXY[] => {\n return getSelectedCadastresCenterPointsLatLng.value.map(({ lat, lng }) => {\n const [x, y] = GisUtil.arcgisLatLngToXy(lat, lng);\n\n return {\n x,\n y,\n };\n });\n });\n\n const getCurrentCadastresCenterPointsXY = computed((): PointXY | null => {\n const property = getCurrentProperty.value;\n if (!property) {\n return null;\n }\n const { lat, lng } = getCadastreCenterPointLatLng(property.cadastre);\n const [x, y] = GisUtil.arcgisLatLngToXy(lat, lng);\n\n return {\n x,\n y,\n };\n });\n\n const getCurrentCadastresCenterPointsLatLng = computed(\n (): PointLatLng | null => {\n const property = getCurrentProperty.value;\n if (!property) {\n return null;\n }\n\n return getCadastreCenterPointLatLng(property.cadastre);\n }\n );\n\n const getCurrentPropertyPolygon = computed(() => {\n if (!currentProperty.value) {\n return null;\n }\n\n return loadedProperties.value[currentProperty.value].polygon;\n });\n\n const getHoverPropertyPolygon = computed(() => {\n if (!hoverProperty.value) {\n return null;\n }\n\n return loadedProperties.value[hoverProperty.value].polygon;\n });\n\n const getTotalSelectedArea = computed(() => {\n return Object.entries(selectedProperties.value)\n .map(([_, cadastre]) => cadastre.cadastre.specifiedArea)\n .reduce((total, value) => total + value, 0);\n });\n\n const getProjectRoute = computed(() => {\n return `/prosjekter/${projectId.value}/kart`;\n });\n\n const movePointer = (lat: number, lng: number) => {\n if (lat === 0 || lng === 0) {\n pointer.value = null;\n } else {\n pointer.value = {\n lat,\n lng,\n };\n }\n };\n\n const removePointer = () => {\n pointer.value = null;\n };\n\n const setCurrentProperty = (cadastreKey: string | null) => {\n currentProperty.value = cadastreKey;\n };\n\n const setHoverProperty = (cadastreKey: string | null) => {\n hoverProperty.value = cadastreKey;\n };\n\n const addProperty = (\n cadastreKey: string,\n property: PropertyData,\n saveToProject: boolean\n ) => {\n if (saveToProject) {\n if (projectId.value === null) {\n return;\n }\n\n SaveCadastre(projectId.value, cadastreKey)\n .then(() => {\n selectedCadastres.value.push(cadastreKey);\n loadedProperties.value[cadastreKey] = property;\n })\n .catch(() => {\n logger.warn('Klarte ikke lagre matrikkel til prosjektet.');\n });\n } else {\n selectedCadastres.value.push(cadastreKey);\n loadedProperties.value[cadastreKey] = property;\n }\n };\n\n const viewProperty = (cadastreKey: string, property: PropertyData) => {\n loadedProperties.value[cadastreKey] = property;\n currentProperty.value = cadastreKey;\n };\n\n const removeProperty = (cadastreKey: string) => {\n if (projectId.value !== null) {\n DeleteCadastre(projectId.value, cadastreKey)\n .then(() => {\n selectedCadastres.value = selectedCadastres.value.filter(\n (cadastre) => cadastre !== cadastreKey\n );\n })\n .catch(() => {\n logger.warn('Klarte ikke slettte matrikkel fra prosjektet.');\n });\n }\n };\n\n const removeAllProperties = (saveToProject = false) => {\n if (saveToProject) {\n selectedCadastres.value.forEach((cadastre) => {\n if (typeof cadastre === 'string') {\n removeProperty(cadastre);\n }\n });\n }\n selectedCadastres.value = [];\n };\n\n const selectPropertyAtPosition = async (\n lat: number,\n lng: number\n ): Promise => {\n const point = new Point({\n latitude: lat,\n longitude: lng,\n spatialReference: {\n wkid: WKID.WGS84,\n },\n });\n\n const matchedCadastres = Object.entries(loadedProperties.value).filter(\n ([_, cadastre]) => {\n const isSectioned = cadastre.cadastre.key.split('-').pop() !== '0';\n if (\n cadastre.polygon &&\n cadastre.polygon.type &&\n cadastre.polygon.coordinates &&\n !isSectioned\n ) {\n // ignore sections, and always select the base cadastre.\n const matchedPolygons = cadastre.polygon.coordinates.filter(\n (plot: any) => {\n const bounds = new Polygon({\n rings: plot,\n spatialReference: {\n wkid: WKID.WGS84,\n },\n });\n\n return bounds.contains(point);\n }\n );\n return matchedPolygons.length > 0;\n }\n return false;\n }\n );\n const isAlreadySelected = matchedCadastres.length > 0;\n\n if (isAlreadySelected) {\n const property = matchedCadastres[0][1];\n viewProperty(property.cadastre.key, property);\n\n return Promise.resolve(matchedCadastres[0][1]);\n }\n return getProperty(lat, lng).then((property) => {\n const isOwnerless = property.cadastre.key.endsWith('0-0-0-0');\n\n if (!isOwnerless) {\n viewProperty(property.cadastre.key, property);\n }\n return property;\n });\n };\n\n const resetStore = () => {\n removeAllProperties();\n projectLoaded.value = false;\n currentProperty.value = null;\n hoverProperty.value = null;\n pointer.value = null;\n project.value = null;\n };\n\n const loadProject = async (id: string) => {\n resetStore();\n projectLoaded.value = false;\n\n GetProject(id).then((data) => {\n project.value = data as unknown as Project;\n\n if (project.value) {\n GetCadastres(project.value.Project).then((cadastres) => {\n Realty.getProperties(Object.keys(cadastres)).then((cadastreList) => {\n cadastreList.forEach((cadastre) => {\n addProperty(cadastre.cadastre.key, cadastre, false);\n });\n nextTick(() => {\n projectLoaded.value = true;\n });\n });\n });\n }\n });\n };\n\n return {\n // state\n project,\n projectId,\n loadedProperties,\n selectedProperties,\n selectedCadastres,\n currentProperty,\n hoverProperty,\n pointer,\n projectLoaded,\n\n // get\n getCadastres,\n getSelectedCadastresPolygons,\n getCurrentProperty,\n getHoverPropertyPolygon,\n getTotalSelectedArea,\n getCurrentPropertyPolygon,\n getProjectRoute,\n getCurrentCadastresCenterPointsXY,\n getCurrentCadastresCenterPointsLatLng,\n getSelectedCadastresCenterPointsXY,\n getSelectedCadastresCenterPointsLatLng,\n\n // actions\n viewProperty,\n setCurrentProperty,\n removeAllProperties,\n removeProperty,\n addProperty,\n setHoverProperty,\n selectPropertyAtPosition,\n removePointer,\n movePointer,\n loadProject,\n };\n});\n","export enum PTMCategory {\n project = 'Project',\n analyze = 'Analyze',\n ecommerce = 'Purchase',\n}\n\nexport default { PTMCategory };\n","export enum SpatialReference {\n UTM33 = 'EPSG:25833',\n WGS84 = 'EPSG:4326',\n}\n\nexport enum WKID {\n UTM33 = 25833,\n WGS84 = 4326,\n}\n","/* eslint-disable max-classes-per-file */\n\nexport class LoadingEvent extends Event {\n public details?: string;\n}\n\nexport class ToolbarButtonEvent extends Event {\n public name?: string;\n\n public active?: boolean;\n\n constructor(type: string, name: string, active: boolean) {\n super(type);\n this.name = name;\n this.active = active;\n }\n}\n\nexport class ProjectCreateEvent extends Event {\n readonly onCreated: (id: string) => void;\n\n readonly onCancel?: () => void;\n\n constructor(createdCB: (id: string) => void, cancelCB?: () => void) {\n super('ProjectCreateEvent');\n this.onCreated = createdCB;\n this.onCancel = cancelCB;\n }\n}\n\nexport interface AuxCheckboxEvent {\n checked: boolean;\n option: string;\n}\n","import { LatLng, LatLngBounds } from 'leaflet';\nimport AmbitaMap from '@ambita/ambita-map';\nimport Proj4js from 'proj4';\n\nexport const UTM32 = '+proj=utm +zone=32';\nexport const UTM33 = '+proj=utm +zone=33';\nexport const WGS84 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs';\nconst UTM33New =\n '+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs';\n\nexport default class GisUtil {\n static utmPointToLatLng(utmPLatLng: LatLng): AmbitaMap.LatLngExpression {\n const utmPointArrary = [utmPLatLng.lat, utmPLatLng.lng];\n\n const wgsPoint: number[] = Proj4js(UTM33, WGS84, utmPointArrary);\n\n const [lng, lat] = wgsPoint;\n\n return {\n lat,\n lng,\n };\n }\n\n static arcgisXYtoLatLng = (x: number, y: number) => {\n return Proj4js(UTM33New, WGS84, [x, y]);\n };\n\n static arcgisLatLngToXy = (\n lat: number,\n lng: number\n ): [x: number, y: number] => {\n return Proj4js(WGS84, UTM33New, [lat, lng]);\n };\n\n static latLngToUtmPoint(\n wsgLatLng: AmbitaMap.LatLngLiteral,\n datum: string = UTM32\n ): number[] {\n const wsgPointArrary = [wsgLatLng.lng, wsgLatLng.lat];\n return Proj4js(WGS84, datum, wsgPointArrary);\n }\n\n static utmBboxToLatLngBounds(utmBbox: number[]): LatLngBounds {\n const [latA, lngA, latB, lngB] = utmBbox;\n\n const utmPointA = {\n lat: latA,\n lng: lngA,\n };\n\n const utmPointB = {\n lat: latB,\n lng: lngB,\n };\n\n const wgsPointA = GisUtil.utmPointToLatLng(utmPointA as LatLng);\n const wgsPointB = GisUtil.utmPointToLatLng(utmPointB as LatLng);\n\n return AmbitaMap.latLngBounds(wgsPointA, wgsPointB);\n }\n\n static getCenter(lat1: number, lat2: number, lng1: number, lng2: number) {\n const latMin = Math.min(lat1, lat2);\n const latMax = Math.max(lat1, lat2);\n const lngMin = Math.min(lng1, lng2);\n const lngMax = Math.max(lng1, lng2);\n\n const x = Math.round(latMin + (latMax - latMin) / 2);\n const y = Math.round(lngMin + (lngMax - lngMin) / 2);\n return { x, y };\n }\n\n static getCenterLatLng(\n lat1: number,\n lat2: number,\n lng1: number,\n lng2: number\n ) {\n const latMin = Math.min(lat1, lat2);\n const latMax = Math.max(lat1, lat2);\n const lngMin = Math.min(lng1, lng2);\n const lngMax = Math.max(lng1, lng2);\n\n return {\n lat: (latMin + latMax) / 2,\n lng: (lngMin + lngMax) / 2,\n };\n }\n}\n","export enum LoggerLevel {\n debug = 0,\n log = 1,\n info = 2,\n warn = 3,\n error = 4,\n}\n\nexport default { LoggerLevel };\n","import { LoggerLevel } from '@/types/loggerLevels';\n\nconst isProduction = false;\nconst loggerLevel = 1;\n\ntype LoggerCall = unknown[];\n\nconst logger = {\n error: (...args: LoggerCall) => {\n if (isProduction && loggerLevel <= LoggerLevel.error) {\n // log Cloudwatch\n } else {\n // eslint-disable-next-line no-console\n console.error(...args);\n }\n },\n info: (...args: LoggerCall) => {\n if (isProduction && loggerLevel <= LoggerLevel.info) {\n // log Cloudwatch\n } else {\n // eslint-disable-next-line no-console\n console.info(...args);\n }\n },\n warn: (...args: LoggerCall) => {\n if (isProduction && loggerLevel <= LoggerLevel.warn) {\n // log Cloudwatch\n } else {\n // eslint-disable-next-line no-console\n console.warn(...args);\n }\n },\n debug: (...args: LoggerCall) => {\n if (isProduction && loggerLevel <= LoggerLevel.debug) {\n // log Cloudwatch\n } else {\n // eslint-disable-next-line no-console\n console.debug(...args);\n }\n },\n log: (...args: LoggerCall) => {\n if (isProduction && loggerLevel <= LoggerLevel.log) {\n // log Cloudwatch\n } else {\n // eslint-disable-next-line no-console\n console.log(...args);\n }\n },\n};\n\nexport default logger;\n","import logger from '@/utilities/Logger';\n\nexport interface PTMEvent {\n event_key?: string; // eslint-disable-line\n action?: string;\n value?: string;\n event?: string;\n url?: string;\n usertype?: string;\n}\n\n// eslint-disable-next-line\ndeclare global { interface Window { dataLayer: any; } }\n\n/* eslint-disable no-underscore-dangle */\nconst PTM = {\n routeChange(route: string, usertype?: string): void {\n const event: PTMEvent = {\n event: 'Pageview',\n event_key: route,\n };\n\n if (usertype) {\n event.usertype = usertype;\n }\n\n this._push_old(event);\n },\n event(category: string, action: string, name: string, value = 1): void {\n const event = {\n event: 'custom-event',\n category,\n action,\n name,\n value,\n };\n\n this._push(event);\n },\n event_old(eventName: string, data: PTMEvent = {}): void {\n const event: PTMEvent = {\n event: eventName,\n event_key: data.event_key ? data.event_key : '',\n action: data.action ? data.action : '',\n value: data.value ? data.value : '',\n };\n\n if (data.url) {\n event.url = data.url;\n }\n\n if (data.usertype) {\n event.usertype = data.usertype;\n }\n\n this._push_old(event);\n },\n\n _push_old(content: PTMEvent): void {\n if (Object.prototype.hasOwnProperty.call(window, 'dataLayer')) {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(content);\n } else if (process.env.NODE_ENV === 'production') {\n logger.error('No PTM instance loaded.');\n }\n },\n _push(content: { [key: string]: unknown }): void {\n if (Object.prototype.hasOwnProperty.call(window, 'dataLayer')) {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(content);\n } else if (process.env.NODE_ENV === 'production') {\n logger.error('No PTM instance loaded.');\n }\n },\n};\n/* eslint-enable no-underscore-dangle */\n\nexport default PTM;\n","export function HasProperty(\n input: unknown,\n property: string | number\n): boolean {\n let result = input !== undefined && input !== null;\n result &&= Object.prototype.hasOwnProperty.call(input, property);\n\n if (result) {\n const obj = input as Record;\n result = obj[property] !== undefined && obj[property] !== null;\n }\n\n return result;\n}\n\nexport function ValidateString(input: string, minLength = 1): boolean {\n if (typeof input !== 'string' || input.length < minLength) {\n return false;\n }\n\n return true;\n}\n\nexport function ValidateNumber(input: number): boolean {\n if (typeof input !== 'number') {\n return false;\n }\n\n return !Number.isNaN(input);\n}\n\nexport function ValidateCadastre(cadastre: string): boolean {\n const regex = /^[0-9]{3,4}(-[0-9]{1,4}){3,4}$/;\n return ValidateString(cadastre, 9) && regex.test(cadastre);\n}\n\nexport function ValidateProjectId(id: string): boolean {\n const regex = /^[a-f0-9-]{36}$/;\n return ValidateString(id, 36) && regex.test(id);\n}\n\nexport function ValidateProjectName(name: string): boolean {\n const regex = new RegExp(\n '^[a-zA-Z0-9æøåÆØÅäöÄÖüÜéèÉÈáàóòÓÒúÙÁÀõÕôÔêÊçÇíìÍÌñÑß!?¿¡\\\\ #\\\\-––—_$€' +\n '£¥₽§@^,\\\\.]{3,150}$' // eslint-disable-line prettier/prettier\n );\n\n return ValidateString(name, 3) && regex.test(name);\n}\n\nexport default {\n HasProperty,\n ValidateString,\n ValidateCadastre,\n ValidateProjectId,\n ValidateProjectName,\n};\n","// style-loader: Adds some css to the DOM by adding a