{"version":3,"file":"js/chunk-common.24fd4368.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\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 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, false),\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 onlyMaxCadastreLevel = true\n ): Promise {\n return this.getData(\n `v1/cadastres/${cadastreKey}/ownershipsowningthiscadastre/?&onlyMaxCadastreLevel=${onlyMaxCadastreLevel}&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