{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/models/Designer/Cell.ts","webpack:///./src/utils/DesignerHelper.ts","webpack:///./src/store/index.ts","webpack:///./src/models/UserProfile.ts","webpack:///./src/models/Brand.ts","webpack:///./src/models/SolarPanel.ts","webpack:///./src/models/SolarPanelRequest.ts","webpack:///./src/models/PhotovoltaicArray.ts","webpack:///./src/models/Inverter.ts","webpack:///./src/models/ProjectLayoutConfiguration.ts","webpack:///./src/models/MpptConfiguration.ts","webpack:///./src/models/InverterMpptConfiguration.ts","webpack:///./src/models/ExportedFile.ts","webpack:///./src/store/currentUser.ts","webpack:///./src/models/ProjectLayout.ts","webpack:///./src/mixins/http/SolarPanelRequestsMixin.ts","webpack:///./src/services/AuthHelper.ts","webpack:///./src/decorators/Restore.ts","webpack:///./src/models/Model.ts","webpack:///./node_modules/peimar-assets/src/assets/icons sync ./node_modules/svg-inline-loader ^\\.\\/.*\\.svg$","webpack:///./src/components/VIcon.vue?d495","webpack:///./src/components/VIcon.vue","webpack:///./src/components/VIcon.vue?f2f3","webpack:///./src/components/VIcon.vue?35af","webpack:///./src/utils/Decorators.ts","webpack:///./src/store/auth.ts","webpack:///./src/models/User.ts","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/mixins/http/SolarPanelsMixin.ts","webpack:///./src/services/solarPanelsService.ts","webpack:///./src/mixins/http/InvertersMixin.ts","webpack:///./src/services/inverterService.ts","webpack:///./src/mixins/http/MpptConfigurationsMixin.ts","webpack:///./src/services/mpptConfigurationService.ts","webpack:///./src/store/database.ts","webpack:///./src/models/Designer/Step.ts","webpack:///./src/models/Designer/DesignStep.ts","webpack:///./src/models/Designer/PanelsStep.ts","webpack:///./src/models/Designer/InvertersStep.ts","webpack:///./src/models/Designer/RecapStep.ts","webpack:///./src/store/project.ts","webpack:///./src/utils/Typography.ts","webpack:///./src/components/VIcon.vue?581a","webpack:///./src/utils/ClearIds.ts","webpack:///./src/components/Footer.vue?3f64","webpack:///./src/mixins/http/PhotovoltaicArraysMixin.ts","webpack:///./src/mixins/http/ProjectLayoutsMixin.ts","webpack:///./src/mixins/http/ProjectLayoutConfigurationsMixin.ts","webpack:///./src/services/ProjectSyncService.ts","webpack:///./src/store/typed.ts","webpack:///./src/models/Project.ts","webpack:///./src/mixins/http/RequestsMixin.ts","webpack:///./src/store/cable.ts","webpack:///./src/utils/Constants.ts","webpack:///./src/App.vue?b584","webpack:///./src/components/SessionExpiredModal.vue?b79a","webpack:///./src/decorators/StoreSubscribe.ts","webpack:///./src/components/SessionExpiredModal.vue","webpack:///./src/components/SessionExpiredModal.vue?1b8f","webpack:///./src/components/SessionExpiredModal.vue?5869","webpack:///./src/components/Footer.vue?a428","webpack:///./src/components/Footer.vue","webpack:///./src/components/Footer.vue?7157","webpack:///./src/components/Footer.vue?9652","webpack:///./src/App.vue","webpack:///./src/App.vue?c438","webpack:///./src/App.vue?bff9","webpack:///./src/router/Styleguide.ts","webpack:///./src/router/Project.ts","webpack:///./src/router/Authentication.ts","webpack:///./src/router/index.ts","webpack:///./src/mixins/ModelParser.ts","webpack:///./src/mixins/RouteHelpers.ts","webpack:///./src/initializers/fonts.ts","webpack:///./src/initializers/moment.ts","webpack:///./src/initializers/requests.ts","webpack:///./src/initializers/mq.ts","webpack:///./src/initializers/tooltips.ts","webpack:///./src/initializers/errors.ts","webpack:///./src/main.ts","webpack:///./src/mixins/http/ProjectsMixin.ts","webpack:///./src/store/http.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","minInParallelStringsCount","maxInParallelStringsCount","layoutConfig","configuration","inverter","project","currentProject","model","photovoltaicArray","$_partial","impTmax","imp","ctIsc","tMax","configurationName","label","iMaxMppt","numMppt","parseFloat","toString","chunks","split","isNaN","Math","floor","exportMpptNames","maxMpptCount","mppts","Array","from","_","join","minInSeriesPanelsCount","vocTmax","voc","ctVoc","vmpTmax","vmp","minPanelsStart","ceil","vstart","minPanelsMppt","vminMppt","max","maxInSeriesPanelsCount","vocTmin","tMin","vmpTmin","maxPanelsVmax","vmaxCc","maxPanelsMppt","vmaxMppt","maxPanelsSis","vdcMax","min","initMatrix","layoutConfiguration","mpptConfiguration","warn","matrix","minY","maxY","minX","maxX","cells","cell","panelsCount","panelsPower","power","initMatrixes","layout","inverterMpptConfiguration","matrixes","configurations","configurationMatrix","id","use","vuexPersist","storage","localStorage","restoreState","json","getItem","state","JSON","parse","Store","auth","currentUser","http","database","cable","plugins","plugin","Model","b","Brand","SolarPanel","brand","dummy","path","Restore","this","brandId","modelId","modelType","instance","assign","uuid","Inverter","status","coordinates","photovoltaicArrayId","x","y","mpttIndex","MpptConfiguration","labels","dummy2","CurrentUser","_currentUser","payload","options","commit","context","url","response","user","stateFactory","namespaced","ProjectLayout","inverterId","inverterMpptConfigurationId","map","toSavable","invertersCount","SOLAR_PANEL_REQUESTS_INDEX_TAG","SOLAR_PANEL_REQUESTS_UPSERT_TAG","SolarPanelsMixin","solarPanelRequestPath","projectPath","routes","$getModelRoutes","$httpGet","getUrl","projectId","$httpPost","$getRoute","$httpPut","AuthHelper","array","Uint32Array","crypto","getRandomValues","dec","substr","plain","shaObj","update","getHash","buffer","btoa","String","fromCharCode","Uint8Array","replace","verifier","hashed","sha256","base64encode","codeVerifier","challengeCode","pkceChallengeFromVerifier","params","URLSearchParams","client_id","clientID","redirect_uri","redirectUri","code_challenge_method","code_challenge","response_type","scope","location","origin","typesThatShouldBeRestored","classNameProperty","isArray","item","isObject","constructor","RestorableClass","args","canBeRestored","restoreTyping","forEach","targetObject","find","instanceType","Parser","included","parseList","parseElement","list","element","models","loadedElement","load","values","attributes","relationships","relation","toJSON","formData","FormData","append","File","filename","webpackContext","req","webpackContextResolve","keys","render","_vm","_h","$createElement","_c","_self","staticClass","class","spin","disabled","sizeClass","colorReset","domProps","_s","getSvg","on","onClick","staticRenderFns","$slots","default","text","getIcon","$emit","size","component","NoCache","computed","cache","RegisterHttp","beforeCreate","dispatchRegister","oldBeforeCreate","Auth","_accessToken","_tokenType","_codeVerifier","_authorizationCode","_authRunning","access_token","token_type","a","defaults","headers","common","helper","generateRandomString","getters","authorizationCode","grant_type","code_verifier","endpoint","method","accessToken","token","rootGetters","dispatch","root","isDraft","current","bindUserToProject","log","route","rawError","User","userProfile","firstName","lastName","email","role","adminRoles","roles","SOLAR_PANELS_INDEX_TAG","indexUrl","RequestsMixin","INVERTERS_INDEX_TAG","MPPT_CONFIGURATION_INDEX_TAG","_inverters","_solarPanels","_mpptConfigurations","_brands","_brandSolarPanels","_brandInverters","Set","solarPanels","solarPanel","brandPresent","page","include","inverterService","getInverters","inverters","getSolarPanels","mpptConfigurationService","mpptConfigurations","brands","brandSolarPanels","brandInverters","completed","visitable","routeName","tAvg","DesignStep","photovoltaicArrays","every","PanelsStep","layouts","InvertersStep","RecapStep","_project","_matrixConfigurations","_currentStep","_steps","index","step","arrays","findIndex","foundConfigIndex","newMatrixes","matrixConfigurationIds","layoutConfigurationsIds","flat","idsToRemove","filter","includes","solarPanelRequest","solarPanelRequests","isSuccessorVisitable","validate","ProjectSyncService","reloadProject","createProject","syncProject","currentStep","steps","addPhotovoltaicArray","removePhotovoltaicArray","syncPhotovoltaicArray","addProjectLayout","addSolarPanelRequest","removeProjectLayout","syncProjectLayout","newLayout","syncProjectLayoutConfiguration","camelToUnderscore","toLowerCase","clearFakeIds","items","indexOf","PHOTOVOLTAIC_ARRAYS_INDEX_TAG","PHOTOVOLTAIC_ARRAYS_SHOW_TAG","photovoltaicArrayPath","photovoltaicArrayRoutes","updateUrl","$httpDelete","deleteUrl","PROJECT_LAYOUT_INCLUDES","PROJECT_LAYOUT_INDEX_TAG","PROJECT_LAYOUT_SHOW_TAG","projectLayoutPath","projectLayoutRoutes","PROJECT_LAYOUT_CONFIG_SHOW_TAG","projectLayoutConfigurationPath","projectLayoutConfigurationRoutes","getProject","fullSync","savableProject","updateProject","bindToUser","userId","createPhotovoltaicArray","updatePhotovoltaicArray","destroyPhotovoltaicArray","createProjectLayout","updateProjectLayout","destroyProjectLayout","updateProjectLayoutConfiguration","createSolarPanelRequest","_instance","ProjectsMixin","SolarPanelRequestsMixin","httpStore","currentUserStore","authStore","projectStore","databaseStore","cableStore","Project","peak","Number","toFixed","empty","opts","stringify","fields","arrayFormat","query","createUrl","Cable","_consumer","disconnect","handler","subscription","consumer","subscriptions","connected","rejected","BASE_API_URL","BASE_WS_URL","AUTH_ENDPOINT","AUTH_CLIENT_ID","AUTHORIZER_URL","DESIGNER_STEP_COUNT","P_NOM_CA_MAX","attrs","ref","slot","_v","$t","reload","mutationName","destroyedFunction","methods","$store","subscribe","mutation","destroyed","olddestroyed","modal","show","StoreSubscribe","components","VModal","SessionExpiredModal","Footer","meta","noAuth","children","projectCreate","redirect","Styleguide","Authentication","router","base","beforeEach","to","next","matched","initialize","routeGuard","record","ModelParser","$route","some","RouteHelpers","google","families","moment","interceptors","authRunning","notifySessionExpired","errors","toasted","position","icon","duration","keepOnHover","action","toastObject","goAway","breakpoints","sm","md","lg","xl","defaultBreakpoint","defaultOffset","popover","defaultTrigger","SENTRY_DSN","dsn","blacklistUrls","integrations","Vue","attachProps","mixin","VIcon","config","productionTip","devtools","i18n","messages","locale","addEventListener","app","store","h","$mount","body","$el","PROJECT_INCLUDED_MODELS","PROJECTS_INDEX_TAG","PROJECTS_SHOW_TAG","PROJECTS_DESTROY_TAG","PROJECT_BIND_TO_USER_TAG","projectRoutes","Http","_status","set","loading","statusCode","isError","links","statusText","raw","registered"],"mappings":"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","file":"js/app.5ca6f37c.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"project\":\"project\",\"styleguide\":\"styleguide\"}[chunkId]||chunkId) + \".\" + {\"chunk-2d0be70b\":\"a7a28a36\",\"chunk-2d0cfdf7\":\"74b82510\",\"chunk-2d0e4ca0\":\"610052c7\",\"chunk-2d21a3d2\":\"2cb1d19c\",\"chunk-302f6b36\":\"2e03630a\",\"chunk-bb193d8a\":\"a2c7e541\",\"project\":\"cff59e97\",\"styleguide\":\"21df4d2d\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-302f6b36\":1,\"chunk-bb193d8a\":1,\"project\":1,\"styleguide\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"project\":\"project\",\"styleguide\":\"styleguide\"}[chunkId]||chunkId) + \".\" + {\"chunk-2d0be70b\":\"31d6cfe0\",\"chunk-2d0cfdf7\":\"31d6cfe0\",\"chunk-2d0e4ca0\":\"31d6cfe0\",\"chunk-2d21a3d2\":\"31d6cfe0\",\"chunk-302f6b36\":\"a8a57618\",\"chunk-bb193d8a\":\"77cba695\",\"project\":\"ee5e4c9f\",\"styleguide\":\"f60622c1\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export default class Cell {\n panelsCount!: number;\n panelsPower!: number;\n}\n","import {\n Inverter,\n MpptConfiguration,\n ProjectLayout,\n ProjectLayoutConfiguration\n} from \"@/models\";\nimport Cell from \"@/models/Designer/Cell\";\nimport MatrixConfiguration from \"@/models/Designer/MatrixConfiguration\";\nimport { ConfigurationMatrixMap } from \"@/store/project\";\nimport { projectStore } from \"@/store/typed\";\n\nexport function minInParallelStringsCount() {\n return 1;\n}\n\nexport function maxInParallelStringsCount(\n layoutConfig: ProjectLayoutConfiguration,\n configuration: MpptConfiguration,\n inverter: Inverter\n) {\n const project = projectStore.currentProject;\n const model = layoutConfig!.photovoltaicArray!.model!;\n if (!model || model.$_partial) {\n console.error('Model partially loaded!')\n return 0;\n }\n const impTmax = model.imp * (1 + (model.ctIsc * (project!.tMax - 25)) / 100);\n const configurationName = layoutConfig.label;\n let iMaxMppt = 0;\n if (configurationName === \"mppt_1_parallel_2_parallel_3\")\n {\n for (let i = 1; i <= inverter.numMppt ; i++)\n {\n iMaxMppt += parseFloat(\n (inverter as any)[`imaxMppt`+i]?.toString() || 0\n );\n }\n }\n else{\n const chunks = configurationName.split(\"_\");\n for (const chunk of chunks) {\n if (!isNaN(+chunk)) {\n iMaxMppt += parseFloat(\n (inverter as any)[`imaxMppt${chunk}`]?.toString() || 0\n );\n }\n }\n }\n return Math.floor(iMaxMppt / impTmax);\n}\n\nexport function exportMpptNames(name: string, maxMpptCount = 0) {\n\n const mppts = []\n\n if(name==='mppts_parallel') {\n mppts.push(...Array.from(Array(maxMpptCount), (_, i) => i+1))\n return mppts.join(\"/\");\n }\n const chunks = name.split(\"_\");\n for (const chunk of chunks) {\n if (!isNaN(+chunk)) {\n mppts.push(chunk);\n }\n }\n\n if (mppts.length > 1) {\n return mppts.join(\"/\");\n } else {\n return mppts[0];\n }\n}\n\nexport function minInSeriesPanelsCount(\n layoutConfig: ProjectLayoutConfiguration,\n inverter: Inverter\n) {\n const project = projectStore.currentProject;\n const model = layoutConfig!.photovoltaicArray!.model!;\n\n const vocTmax = model.voc * (1 + (model.ctVoc * (project!.tMax - 25)) / 100);\n const vmpTmax = model.vmp * (1 + (model.ctVoc * (project!.tMax - 25)) / 100);\n\n const minPanelsStart = Math.ceil(inverter.vstart / vocTmax);\n const minPanelsMppt = Math.ceil(inverter.vminMppt / vmpTmax);\n\n return Math.max(minPanelsStart, minPanelsMppt);\n}\n\nexport function maxInSeriesPanelsCount(\n layoutConfig: ProjectLayoutConfiguration,\n inverter: Inverter\n) {\n const project = projectStore.currentProject;\n const model = layoutConfig!.photovoltaicArray!.model!;\n const vocTmin = model.voc * (1 + (model.ctVoc * (project!.tMin - 25)) / 100);\n const vmpTmin = model.vmp * (1 + (model.ctVoc * (project!.tMin - 25)) / 100);\n\n const maxPanelsVmax = Math.floor(inverter.vmaxCc / vocTmin);\n const maxPanelsMppt = Math.floor(inverter.vmaxMppt / vmpTmin);\n const maxPanelsSis = Math.floor(model.vdcMax / vocTmin);\n return Math.min(maxPanelsVmax, maxPanelsMppt, maxPanelsSis);\n}\n\nexport function initMatrix(\n layoutConfiguration: ProjectLayoutConfiguration,\n mpptConfiguration: MpptConfiguration,\n inverter: Inverter\n): MatrixConfiguration {\n const model = layoutConfiguration.photovoltaicArray?.model;\n if (!model) {\n console.warn('MISSING MODEL IN ARRAY');\n return { matrix: [], minY: 0, maxY: 0, minX: 0, maxX: 0 };\n }\n\n const cells: Cell[][] = [];\n const minX = minInParallelStringsCount();\n const maxX = maxInParallelStringsCount(\n layoutConfiguration,\n mpptConfiguration,\n inverter\n );\n const minY = minInSeriesPanelsCount(layoutConfiguration, inverter);\n const maxY = maxInSeriesPanelsCount(layoutConfiguration, inverter);\n\n for (let i: number = minX; i < maxX + 1; i++) {\n cells[i] = [];\n for (let j: number = minY; j < maxY + 1; j++) {\n const cell = new Cell();\n cell.panelsCount = i * j;\n cell.panelsPower = i * j * model.power;\n cells[i][j] = cell;\n }\n }\n\n return { matrix: cells, minY: minY, maxY: maxY, minX: minX, maxX: maxX };\n}\n\nexport function initMatrixes(layout: ProjectLayout) {\n if (!layout.inverter || !layout.inverterMpptConfiguration) {\n console.warn('Invalid data');\n return {};\n }\n const matrixes: ConfigurationMatrixMap = {};\n\n for (const configuration of layout.configurations) {\n const configurationMatrix = initMatrix(\n configuration,\n layout.inverterMpptConfiguration.configuration,\n layout.inverter\n );\n matrixes[configuration.id] = configurationMatrix;\n }\n\n return matrixes;\n}\n","import Vue from \"vue\";\nimport Vuex from \"vuex\";\nimport http from \"./http\";\nimport auth from \"./auth\";\nimport project from \"./project\";\nimport database from \"./database\";\nimport currentUser from \"./currentUser\";\nimport cable from \"./cable\";\nimport { restoreTyping } from \"@/decorators/Restore\";\n\nVue.use(Vuex);\nimport VuexPersist from \"vuex-persist\";\n\nconst vuexPersist = new VuexPersist({\n key: \"peimar-designer\",\n storage: window.localStorage,\n modules: [\"auth\", \"project\"],\n restoreState: (key, storage) => {\n let json = storage?.getItem(key) as string;\n if (!json) {\n json = '{}';\n }\n\n try {\n const state = JSON.parse(json);\n restoreTyping(state);\n return state;\n } catch (e) {\n console.error(e);\n return {}\n }\n }\n});\n\nexport default new Vuex.Store({\n modules: {\n auth,\n currentUser,\n http,\n database,\n project,\n cable\n },\n plugins: [vuexPersist.plugin]\n});\n","import Model from \"./Model\";\n\nexport default class UserProfile extends Model {\n static type = \"userProfiles\";\n\n firstName!: string;\n lastName!: string;\n businessName!: string;\n phone!: string;\n address!: string;\n}\n","import Model from \"./Model\";\nimport { v1 as uuid } from \"uuid\";\nexport default class Brand extends Model {\n static type = \"designerBrands\";\n name!: string;\n\n static dummy(): Brand {\n const b = new Brand();\n b.id = \"peimar\";\n b.name = \"Peimar\";\n\n return b;\n }\n}\n","import Brand from \"./Brand\";\nimport Model from \"./Model\";\nexport default class SolarPanel extends Model {\n static type = \"designerSolarPanels\";\n static path = \"solar_panels\";\n\n name!: string;\n power!: number;\n brand!: Brand;\n vmp!: number;\n imp!: number;\n voc!: number;\n isc!: number;\n vdcMax!: number;\n imaxFuse!: number;\n efficiency!: number;\n protectionClass!: string;\n ctPMax!: number;\n ctVoc!: number;\n ctIsc!: number;\n width!: number;\n height!: number;\n depth!: number;\n weight!: number;\n cellType!: number;\n cellFullness!: number;\n cellQuantity!: number;\n status!: string;\n\n static dummy(): SolarPanel[] {\n const i = new SolarPanel();\n i.id = \"solar_panel\";\n i.power = 4;\n i.name = \"Solar panel 1\";\n i.brand = Brand.dummy();\n return [i];\n }\n}\n","import { Restore } from \"@/decorators/Restore\";\nimport Model from \"./Model\";\n\n@Restore()\nexport default class SolarPanelRequest extends Model {\n static type = \"designerSolarPanelRequests\";\n static path = \"solar_panel_requests\";\n\n name!: string;\n brand!: string;\n power!: number;\n status!: \"pending\" | \"accepted\" | \"rejected\";\n\n vmp!: number;\n imp!: number;\n voc!: number;\n isc!: number;\n vdcMax!: number;\n imaxFuse!: number;\n efficiency!: number;\n protectionClass!: string;\n ctPMax!: number;\n ctVoc!: number;\n ctIsc!: number;\n width!: number;\n height!: number;\n depth!: number;\n weight!: number;\n cellType!: number;\n cellFullness!: number;\n cellQuantity!: number;\n}\n","import { Restore } from \"@/decorators/Restore\";\nimport Brand from \"./Brand\";\nimport Model from \"./Model\";\nimport Project from \"./Project\";\nimport SolarPanel from \"./SolarPanel\";\nimport SolarPanelRequest from \"./SolarPanelRequest\";\nimport { v1 as uuid } from \"uuid\";\n\n@Restore()\nexport default class PhotovoltaicArray extends Model {\n static type = \"designerPhotovoltaicArrays\";\n\n name!: string;\n brand!: Brand | null;\n model!: SolarPanel | SolarPanelRequest | null;\n project!: Project;\n panelsCount!: number | null;\n modelType!: string;\n\n static empty() {\n const instance = new PhotovoltaicArray();\n return Object.assign(instance, {\n id: uuid(),\n name: '',\n project: {} as any,\n brand: null,\n model: null,\n panelsCount: 1\n });\n }\n\n\n get modelBrandId() {\n if (this.model instanceof SolarPanel) {\n return this.model?.brand?.id || null;\n }\n\n if (this.model instanceof SolarPanelRequest) {\n return this.model?.brand || null;\n }\n\n return null;\n }\n\n toSavable() {\n\n return {\n id: this.id,\n name: this.name,\n brandId: this.brand?.id || null,\n modelId: this.model?.id,\n modelType: this.modelType,\n panelsCount: this.panelsCount,\n };\n }\n}\n","import { Brand, InverterMpptConfiguration } from \".\";\nimport Model from \"./Model\";\nimport { v1 as uuid } from \"uuid\";\n\nexport default class Inverter extends Model {\n static type = \"designerInverters\";\n static path = \"inverters\";\n\n configurations!: InverterMpptConfiguration[];\n model!: string;\n version!: string;\n percPminCc!: number;\n percPmaxCc!: number;\n pnomCc!: number;\n vmaxCc!: number;\n vminMppt!: number;\n vmaxMppt!: number;\n vnomCc!: number;\n vstart!: number;\n vminCc!: number;\n numMppt!: number;\n nInputMppt1!: number;\n nInputMppt2!: number;\n nInputMppt3!: number;\n nInputMppt4!: number;\n nInputMppt5!: number;\n nInputMppt6!: number;\n nInputMppt7!: number;\n nInputMppt8!: number;\n nInputMppt9!: number;\n nInputMppt10!: number;\n nInputMppt11!: number;\n nInputMppt12!: number;\n nInputMppt13!: number;\n nInputMppt14!: number;\n nInputMppt15!: number;\n nInputMppt16!: number;\n nInputMppt17!: number;\n nInputMppt18!: number;\n nInputMppt19!: number;\n nInputMppt20!: number;\n\n config!: string[];\n imaxMppt1!: number;\n imaxMppt2!: number;\n imaxMppt3!: number;\n imaxMppt4!: number;\n imaxMppt5!: number;\n imaxMppt6!: number;\n imaxMppt7!: number;\n imaxMppt8!: number;\n imaxMppt9!: number;\n imaxMppt10!: number;\n imaxMppt11!: number;\n imaxMppt12!: number;\n imaxMppt13!: number;\n imaxMppt14!: number;\n imaxMppt15!: number;\n imaxMppt16!: number;\n imaxMppt17!: number;\n imaxMppt18!: number;\n imaxMppt19!: number;\n imaxMppt20!: number;\n\n imaxInput!: number;\n pnomCa!: number;\n pmaxCa!: number;\n inomCa!: number;\n imaxCa!: number;\n iccCa!: number;\n vnomCa!: string;\n freq!: string;\n cosfi!: string;\n phase!: number;\n fuse!: string;\n connection!: string;\n maxEfficiency!: number;\n europeanEfficiency!: number;\n mpptPrecision!: number;\n protectionClass!: string;\n width!: number;\n height!: number;\n depth!: number;\n weight!: number;\n integratedSpd!: string;\n integratedCommunication!: string;\n accumulator!: boolean;\n imageUrl!: string;\n\n static dummy(): Inverter[] {\n const i = new Inverter();\n i.id = \"inverter\";\n i.model = \"Inverter 1\";\n return [i];\n }\n}\n","import Inverter from \"./Inverter\";\nimport Model from \"./Model\";\nimport MpptConfiguration from \"./MpptConfiguration\";\nimport PhotovoltaicArray from \"./PhotovoltaicArray\";\nimport { v1 as uuid } from \"uuid\";\nimport { Restore } from \"@/decorators/Restore\";\n\ninterface Point {\n x: number;\n y: number;\n}\n\n@Restore()\nexport default class ProjectLayoutConfiguration extends Model {\n static type = \"designerProjectLayoutConfigurations\";\n label!: string;\n status!: string;\n coordinates!: Point | null;\n photovoltaicArray!: PhotovoltaicArray | null;\n\n static empty() {\n return Object.assign(new ProjectLayoutConfiguration(), {\n status: 'optimal',\n mpttIndex: 0,\n label: '',\n coordinates: null,\n photovoltaicArray: null\n });\n }\n\n get x() {\n return this.coordinates?.x;\n }\n\n get panelsCount() {\n return (this.x || 0) * (this.y || 0);\n }\n\n get y() {\n return this.coordinates?.y;\n }\n\n toSavable() {\n return {\n id: this.id,\n label: this.label,\n status: this.status,\n coordinates: this.coordinates,\n photovoltaicArrayId: this.photovoltaicArray?.id\n };\n }\n}\n","import Brand from \"./Brand\";\nimport Inverter from \"./Inverter\";\nimport Model from \"./Model\";\n\nexport default class MpptConfiguration extends Model {\n static type = \"designerMpptConfigurations\";\n static path = \"mppt_configurations\";\n\n key!: string;\n labels!: string[];\n name!: string;\n\n static dummy() {\n const dummy = new MpptConfiguration();\n dummy.key = \"1\";\n dummy.labels = [\"mppt\"];\n dummy.name = \"uniqueMppt\";\n\n const dummy2 = new MpptConfiguration();\n dummy2.key = \"ALL\";\n dummy2.labels = [\"mpptParallel\"];\n dummy2.name = \"parallelAll\";\n\n return [dummy, dummy2];\n }\n}\n","import { Restore } from \"@/decorators/Restore\";\nimport { MpptConfiguration } from \".\";\nimport Inverter from \"./Inverter\";\nimport Model from \"./Model\";\n\nexport default class InverterMpptConfiguration extends Model {\n static type = \"designerInverterMpptConfigurations\";\n\n inverter!: Inverter;\n configuration!: MpptConfiguration;\n position!: number;\n labels!: string[];\n name!: string;\n\n toJSON() {\n\n }\n}\n","import Model from \"./Model\";\n\nexport default class ExportedFile extends Model {\n static type = \"designerExportedFiles\";\n status!: string;\n kind!: string;\n file!: string;\n}\n","import User from \"@/models/User\";\nimport axios from \"axios\";\nimport { Parser } from \"@/models/Model\";\nimport { Action, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\nimport { AUTH_ENDPOINT } from \"@/utils/Constants\";\n\n@Module({\n stateFactory: true,\n namespaced: false,\n name: \"currentUser\"\n})\nexport default class CurrentUser extends VuexModule {\n private _currentUser: User | undefined = undefined;\n\n // TODO change in the whole views currentUser with user\n get currentUser() {\n return this._currentUser;\n }\n\n get user() {\n return this._currentUser;\n }\n\n @Mutation\n setCurrentUser(payload: User | undefined) {\n this._currentUser = payload;\n }\n\n @Action\n async loadCurrentUser(options: any = {}) {\n const { commit } = this.context;\n\n try {\n const response = await axios({ url: AUTH_ENDPOINT + \"/current_user?include=user_profile\", ...options });\n const user = Parser.parse(response.data) as User;\n if (user) {\n commit(\"setCurrentUser\", user);\n return user;\n } else {\n commit(\"setCurrentUser\", undefined);\n return undefined;\n }\n } catch (e) {\n commit(\"setCurrentUser\", undefined);\n return undefined;\n }\n }\n}\n","import { Restore } from \"@/decorators/Restore\";\nimport { InverterMpptConfiguration } from \".\";\nimport Inverter from \"./Inverter\";\nimport Model from \"./Model\";\nimport { clearFakeIds } from \"@/utils/ClearIds\";\nimport ProjectLayoutConfiguration from \"./ProjectLayoutConfiguration\";\n\n@Restore()\nexport default class ProjectLayout extends Model {\n static type = \"designerProjectLayouts\";\n\n inverter!: Inverter | null;\n invertersCount!: number | null;\n inverterMpptConfiguration!: InverterMpptConfiguration | null;\n configurations!: ProjectLayoutConfiguration[];\n\n static empty() {\n return Object.assign(new ProjectLayout(), {\n inverter: null,\n inverterMpptConfiguration: null,\n invertersCount: 1,\n configurations: []\n });\n }\n\n toSavable() {\n\n return {\n id: this.id,\n inverterId: this.inverter?.id,\n inverterMpptConfigurationId: this.inverterMpptConfiguration?.id,\n configurations: clearFakeIds(this.configurations.map(e => e.toSavable())),\n invertersCount: this.invertersCount,\n };\n }\n}\n","import { SolarPanelRequest } from \"@/models\";\nimport { Component, Vue } from \"vue-property-decorator\";\nimport { camelToUnderscore } from \"../../utils/Typography\";\n\nexport const SOLAR_PANEL_REQUESTS_INDEX_TAG = \"solar_panel_requests_index\";\nexport const SOLAR_PANEL_REQUESTS_UPSERT_TAG = \"solar_panel_requests_upsert\";\n\n@Component\nexport default class SolarPanelsMixin extends Vue {\n readonly solarPanelRequestPath = camelToUnderscore(SolarPanelRequest.path);\n readonly projectPath = camelToUnderscore('projects');\n readonly routes = this.$getModelRoutes(this.solarPanelRequestPath);\n\n getSolarPanelRequest(id: string) {\n return this.$httpGet(this.routes.getUrl(id), SOLAR_PANEL_REQUESTS_INDEX_TAG);\n }\n\n createSolarPanelRequest(projectId: string, data: any) {\n return this.$httpPost(\n this.$getRoute(`${this.projectPath}/${projectId}/${SolarPanelRequest.path}`), \n SOLAR_PANEL_REQUESTS_UPSERT_TAG, \n data\n );\n }\n\n attachSolarPanelRequestSpecs(id: string, data: FormData) {\n return this.$httpPut(\n this.routes.getUrl(id) + '/specs',\n SOLAR_PANEL_REQUESTS_UPSERT_TAG,\n data\n );\n }\n}\n","import { AUTHORIZER_URL, AUTH_CLIENT_ID, AUTH_ENDPOINT } from \"@/utils/Constants\";\nimport jsSHA from \"jssha\";\n\nexport default class AuthHelper {\n static get endpoint(): string {\n return AUTH_ENDPOINT + \"/oauth\";\n }\n\n static get clientID(): string {\n return AUTH_CLIENT_ID;\n }\n\n static get redirectUri(): string {\n return location.origin + \"/auth\";\n }\n\n generateRandomString(): string {\n const array = new Uint32Array(28);\n window.crypto.getRandomValues(array);\n return Array.from(array, dec => (\"0\" + dec.toString(16)).substr(-2)).join(\n \"\"\n );\n }\n\n sha256(plain: string): ArrayBuffer {\n const shaObj = new jsSHA(\"SHA-256\", \"TEXT\");\n shaObj.update(plain);\n return shaObj.getHash(\"ARRAYBUFFER\");\n }\n\n base64encode(buffer: ArrayBuffer) {\n return btoa(String.fromCharCode(...new Uint8Array(buffer)))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n }\n\n pkceChallengeFromVerifier(verifier: string) {\n const hashed = this.sha256(verifier);\n return this.base64encode(hashed);\n }\n\n generateAuthorizeUri(codeVerifier: string) {\n const challengeCode = this.pkceChallengeFromVerifier(codeVerifier);\n const params = new URLSearchParams({\n client_id: AuthHelper.clientID,\n redirect_uri: AuthHelper.redirectUri,\n code_challenge_method: \"S256\",\n code_challenge: challengeCode,\n response_type: \"code\",\n scope: \"public designer\"\n });\n\n return AUTHORIZER_URL + \"/authorize?\" + params.toString();\n }\n\n getRegistrationUri(): string {\n return AUTHORIZER_URL + \"/registration?client_id=\" + AuthHelper.clientID;\n }\n\n getLogoutUri(): string {\n return AUTH_ENDPOINT + \"/logout\";\n }\n}\n","// Based on: https://github.com/championswimmer/vuex-persist/issues/175\n\nconst typesThatShouldBeRestored: { name: string; prototype: any }[] = []\nconst classNameProperty = '__className'\n\nfunction isArray(item: any) {\n return Array.isArray(item);\n}\n\nfunction isObject(item: any) {\n return typeof item === 'object';\n}\n\n// Use this to decorate a class that needs to be restored\nexport function Restore() {\n\n return function _Restore(constructor: T) {\n\n typesThatShouldBeRestored.push(constructor);\n\n const RestorableClass = class extends constructor {\n constructor(...args: any[]) {\n super(...args);\n // eslint-disable-next-line\n (this as any)[classNameProperty] = constructor.name\n }\n }\n\n // Object.defineProperty(RestorableClass, 'name', { value: constructor.name, writable: false });\n // Object.defineProperty(RestorableClass.prototype.constructor, 'name', { value: constructor.name, writable: false });\n\n return RestorableClass;\n }\n}\n\nfunction canBeRestored(object: Record): boolean {\n // eslint-disable-next-line\n return object?.hasOwnProperty(classNameProperty)\n}\n\n// Use this method to restore the typing on an object\nexport function restoreTyping(object: any) {\n\n if (isArray(object)) {\n object.forEach((item: any) => restoreTyping(item))\n }\n\n for (const property in object) {\n // eslint-disable-next-line\n if (!object.hasOwnProperty(property)) {\n continue\n }\n\n const targetObject = object[property]\n // eslint-disable-next-line\n if (isObject(targetObject)) {\n if (canBeRestored(targetObject)) {\n\n const type = typesThatShouldBeRestored.find(\n instanceType => instanceType.name === targetObject[classNameProperty]\n )\n if (type) {\n object[property] = Object.assign(Object.create(type.prototype), targetObject)\n }\n }\n restoreTyping(targetObject);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface JSONModel {\n id: string;\n type: string;\n attributes?: { [key: string]: any };\n relationships?: { [key: string]: any };\n}\n\nexport interface JSONData {\n data: JSONModel | JSONModel[];\n included: JSONModel[];\n}\n\nexport class Parser {\n static parse(data: JSONData | JSONModel[] | JSONModel, included: JSONModel[] = []): T | T[] | null {\n if (data == null) {\n return null;\n }\n\n if (Array.isArray(data)) {\n return Parser.parseList(data, included) as T[];\n } else if ('data' in data && !('id' in data)) {\n return Parser.parse(data.data, data.included || included);\n } else {\n return Parser.parseElement(data, included) as T;\n }\n }\n\n static parseList(list: JSONModel[], included: JSONModel[]) {\n return list.map((e) => {\n return Parser.parseElement(e, included);\n });\n }\n\n static parseElement(element: JSONModel, included: JSONModel[]): Model {\n // eslint-disable-next-line\n const models = require('.');\n\n const loadedElement = Parser.load(element, included);\n\n const model = Object.values(models).find((e: any) => e.type === loadedElement.type) as any;\n // eslint-disable-next-line\n return new (model || Model)(loadedElement, included);\n }\n\n static load(element: JSONModel, included: JSONModel[]) {\n // eslint-disable-next-line\n return included.find(e => e.id == element.id && e.type === element.type) || { ...element, $_partial: true };\n }\n}\n\nexport default class Model {\n id!: string;\n $_partial?: boolean;\n static type: string | undefined;\n\n constructor(data?: JSONModel | null, included: JSONModel[] = []) {\n if (!data) {\n return;\n }\n this.id = data.id;\n for (const key in data.attributes) {\n (this as any)[key] = data.attributes[key];\n }\n\n for (const key in data.relationships) {\n const relation = data.relationships[key];\n if (relation) {\n (this as any)[key] = Parser.parse(relation, included);\n }\n }\n }\n\n toJSON(): any {\n return { ...this };\n }\n\n toFormData() {\n const data = this.toJSON();\n const formData = new FormData();\n for (const key in data) {\n if (data[key] !== null && data[key] !== undefined) {\n if (Array.isArray(data[key])) {\n for (const value of data[key]) {\n formData.append(key + '[]', value);\n }\n } else if (data[key] instanceof File) {\n formData.append(key, data[key], data[key].filename);\n } else {\n formData.append(key, data[key]);\n }\n }\n }\n return formData;\n }\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","var map = {\n\t\"./account.svg\": \"5bc0\",\n\t\"./alert.svg\": \"7b96\",\n\t\"./alert2.svg\": \"4be6\",\n\t\"./arrow-next.svg\": \"c820\",\n\t\"./chevron-down.svg\": \"5e97\",\n\t\"./chevron-left.svg\": \"97ec\",\n\t\"./chevron-right.svg\": \"ea04\",\n\t\"./chevron-up.svg\": \"c944\",\n\t\"./close.svg\": \"dc6c\",\n\t\"./dropdown.svg\": \"8f0b\",\n\t\"./info.svg\": \"70d1\",\n\t\"./inverter-database.svg\": \"c064\",\n\t\"./inverter-placeholder.svg\": \"eaa9\",\n\t\"./menu-active.svg\": \"eaec\",\n\t\"./menu.svg\": \"07a6\",\n\t\"./no-registration.svg\": \"f3b4\",\n\t\"./panels-database.svg\": \"c620\",\n\t\"./parallel.svg\": \"7f32\",\n\t\"./plus.svg\": \"108a\",\n\t\"./sidebar-bottom.svg\": \"6610\",\n\t\"./sidebar-inverter-gray.svg\": \"b537\",\n\t\"./sidebar-inverter.svg\": \"e581\",\n\t\"./sidebar-panels-gray.svg\": \"5ffe\",\n\t\"./sidebar-panels.svg\": \"475b\",\n\t\"./sidebar-project.svg\": \"1c30\",\n\t\"./sidebar-recap-gray.svg\": \"295c\",\n\t\"./sidebar-recap.svg\": \"dd57\",\n\t\"./spinner.svg\": \"97e7\",\n\t\"./success.svg\": \"051f\",\n\t\"./thunder.svg\": \"c6fd\",\n\t\"./trash-gray.svg\": \"2dd9\",\n\t\"./trash.svg\": \"5c03\",\n\t\"./welcome.svg\": \"1d58\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"2422\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon\",class:[\n { spin: _vm.spin },\n { disabled: _vm.disabled },\n _vm.sizeClass,\n { 'color-reset': _vm.colorReset }\n ],domProps:{\"innerHTML\":_vm._s(_vm.getSvg())},on:{\"click\":_vm.onClick}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue, Prop } from \"vue-property-decorator\";\n\n@Component({ name: \"icon\" })\nexport default class VIcon extends Vue {\n @Prop({ default: false }) spin?: boolean;\n @Prop({ default: false }) disabled?: boolean;\n @Prop({ default: true }) colorReset?: boolean;\n\n getIcon() {\n return this.$slots.default && this.$slots.default.length\n ? this.$slots.default[0].text\n : null;\n }\n\n getSvg() {\n return this.getIcon()\n ? require(`!svg-inline-loader!peimar-assets/src/assets/icons/${this.getIcon()}.svg`)\n : null;\n }\n\n @Prop({ default: \"md\" })\n size!: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"xxxl\";\n\n get sizeClass() {\n return `icon-${this.size}`;\n }\n\n onClick() {\n if (!this.disabled) {\n this.$emit(\"click\");\n }\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VIcon.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VIcon.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VIcon.vue?vue&type=template&id=78a7d370&\"\nimport script from \"./VIcon.vue?vue&type=script&lang=ts&\"\nexport * from \"./VIcon.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./VIcon.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { createDecorator } from \"vue-class-component\";\nimport Vue from \"vue\";\nimport { httpStore } from \"@/store/typed\";\n\nexport const NoCache = createDecorator((options, key) => {\n // component options should be passed to the callback\n // and update for the options object affect the component\n if (options?.computed) {\n (options.computed[key] as any).cache = false;\n }\n});\n\nexport const RegisterHttp = (tag: string) => {\n return createDecorator((options, key) => {\n const beforeCreate = function(this: Vue) {\n httpStore?.dispatchRegister(tag);\n };\n\n if (options.beforeCreate) {\n const oldBeforeCreate = options.beforeCreate;\n options.beforeCreate = function() {\n oldBeforeCreate.bind(this)();\n beforeCreate.bind(this)();\n };\n } else {\n options.beforeCreate = beforeCreate;\n }\n if (!options.computed) {\n options.computed = {};\n }\n options.computed[key] = function mappedGetter() {\n return httpStore.status[tag];\n };\n });\n};\n","import User from \"@/models/User\";\nimport AuthHelper from \"@/services/AuthHelper\";\nimport ProjectSyncService from \"@/services/ProjectSyncService\";\nimport axios from \"axios\";\nimport { Route } from \"vue-router\";\nimport { Action, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\nimport { projectStore } from \"./typed\";\n\ninterface TokenCredentials {\n codeVerifier: string;\n authorizationCode: string;\n}\n\ninterface TokenResponse {\n access_token: string;\n token_type: string;\n expires_in: number;\n scope: string;\n created_at: number;\n}\n\n@Module({\n stateFactory: true,\n namespaced: true,\n name: \"auth\"\n})\nexport default class Auth extends VuexModule {\n private _accessToken: string | undefined = undefined;\n private _tokenType: string | undefined = undefined;\n private _codeVerifier: string | undefined = undefined;\n private _authorizationCode: string | undefined = undefined;\n private _authRunning = false;\n\n get authRunning(): boolean {\n return this._authRunning;\n }\n\n get accessToken(): string | undefined {\n return this._accessToken;\n }\n\n get codeVerifier(): string | undefined {\n return this._codeVerifier;\n }\n\n get authorizationCode(): string | undefined {\n return this._authorizationCode;\n }\n\n @Mutation\n runAuth(value: boolean) {\n this._authRunning = value;\n }\n\n @Mutation\n setSessionExpired() {}\n\n @Mutation\n setCodeVerifier(code: string) {\n this._codeVerifier = code;\n }\n\n @Mutation\n setAuthorizationCode(code: string) {\n this._authorizationCode = code;\n }\n\n @Mutation\n updateTokenData(payload: TokenResponse) {\n this._accessToken = payload.access_token;\n this._tokenType = payload.token_type;\n }\n\n @Mutation\n updateRequestHeader() {\n if (this._accessToken && this._tokenType) {\n axios.defaults.headers.common[\n \"Authorization\"\n ] = `${this._tokenType} ${this._accessToken}`;\n } else {\n axios.defaults.headers.common[\"Authorization\"] = null;\n }\n }\n\n @Mutation\n clearAuthorizationData() {\n this._authorizationCode = undefined;\n this._codeVerifier = undefined;\n }\n\n @Mutation\n clearSession() {\n this._accessToken = undefined;\n this._tokenType = undefined;\n this._codeVerifier = undefined;\n }\n\n @Action\n generateCodeVerifier(): Promise {\n const helper = new AuthHelper();\n const code = helper.generateRandomString();\n\n this.context.commit(\"setCodeVerifier\", code);\n return Promise.resolve(code);\n }\n\n @Action({ rawError: true })\n async requestToken(): Promise {\n const { commit } = this.context;\n if (\n !(\n this.context.getters.codeVerifier ||\n this.context.getters.authorizationCode\n )\n ) {\n throw new Error(\"no such codeVerifier\");\n }\n\n const data = {\n client_id: AuthHelper.clientID,\n redirect_uri: AuthHelper.redirectUri,\n grant_type: \"authorization_code\",\n code: this.context.getters.authorizationCode,\n code_verifier: this.context.getters.codeVerifier\n };\n\n const response = await axios({\n url: `${AuthHelper.endpoint}/token`,\n data: data,\n method: \"POST\"\n });\n commit(\"updateTokenData\", response.data);\n commit(\"updateRequestHeader\");\n commit(\"clearAuthorizationData\");\n\n return this.context.getters.accessToken;\n }\n\n\n @Action({ rawError: true })\n async invalidateToken(): Promise {\n const { commit } = this.context;\n if (!this.context.getters.accessToken) {\n throw new Error(\"no such access token\");\n }\n try {\n const data = {\n token: this.context.getters.accessToken,\n client_id: AuthHelper.clientID\n };\n\n await axios({\n url: `${AuthHelper.endpoint}/revoke`,\n data: data,\n method: \"POST\"\n });\n } finally {\n commit(\"clearSession\");\n commit(\"clearAuthorizationData\");\n }\n\n return true;\n }\n\n @Action({ rawError: true })\n authenticate(): Promise {\n if (this.context.getters.accessToken !== undefined) {\n return Promise.resolve(this.context.getters.accessToken);\n }\n return Promise.reject(undefined);\n }\n\n @Action({ rawError: true })\n async initialize() {\n this.context.commit('runAuth', true);\n try {\n if (!this.context.getters[\"accessToken\"]) {\n throw new Error(\"Access token not set\");\n }\n\n if (this.context.rootGetters.user instanceof User) {\n return true;\n }\n\n this.context.commit(\"updateRequestHeader\");\n this.context.dispatch(\"http/dispatchRegister\", \"auth\", { root: true });\n const user = await this.context.dispatch(\"loadCurrentUser\", null, { root: true });\n\n if (!user) {\n this.context.commit(\"clearSession\");\n this.context.commit(\"clearAuthorizationData\");\n throw new Error(\"No such user\");\n }\n\n // FIXME: Why this is here D:\n if (projectStore.currentProject && projectStore.currentProject.isDraft) {\n try {\n await ProjectSyncService.current.bindUserToProject(projectStore.currentProject);\n this.context.commit(\"project/$bindProject\", projectStore.currentProject, { root: true });\n this.context.dispatch(\"project/$setCurrentProject\", undefined, { root: true });\n } catch (e) {\n console.log(e);\n }\n }\n\n return true;\n } finally {\n this.context.commit('runAuth', false);\n }\n }\n\n @Action\n notifySessionExpired() {\n this.context.commit(\"setSessionExpired\");\n }\n\n @Action({ rawError: true })\n async routeGuard(route: Route): Promise {\n const user = this.context.rootGetters.user as User;\n\n if (!user) {\n throw new Error(\"User undefined\");\n }\n\n return user;\n }\n}\n","import Model from \"./Model\";\nimport IUser from \"./interfaces/IUser\";\nimport { UserProfile } from \".\";\nexport default class User extends Model implements IUser {\n static type = \"users\";\n\n email!: string;\n\n role!: string;\n active!: boolean;\n confirmedAt?: Date;\n\n userProfile!: UserProfile;\n\n fullname(): string {\n if (this.userProfile) {\n return `${this.userProfile.firstName} ${this.userProfile.lastName}`;\n } else {\n return this.email;\n }\n }\n\n get isSystemAdmin() {\n return this.role === \"system_admin\";\n }\n\n static adminRoles: Array<{ name: string; id: string }> = [\n { name: \"SuperAdmin\", id: \"superadmin\" },\n { name: \"SystemAdmin\", id: \"system_admin\" }\n ];\n\n static roles: Array<{ name: string; id: string }> = [...User.adminRoles];\n\n get isSuperAdmin() {\n return this.role === \"superadmin\";\n }\n\n get isCompanyAdministrator() {\n return this.role === \"administrator\";\n }\n}\n","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn-bd\": \"9686\",\n\t\"./bn-bd.js\": \"9686\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb71\",\n\t\"./de-ch.js\": \"bb71\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"7333\",\n\t\"./en-il.js\": \"7333\",\n\t\"./en-in\": \"ec2e\",\n\t\"./en-in.js\": \"ec2e\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./en-sg\": \"b7e9\",\n\t\"./en-sg.js\": \"b7e9\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-mx\": \"b5b7\",\n\t\"./es-mx.js\": \"b5b7\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df4\",\n\t\"./fa.js\": \"8df4\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fil\": \"d69a\",\n\t\"./fil.js\": \"d69a\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b4\",\n\t\"./gd.js\": \"f6b4\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-deva\": \"aaf2\",\n\t\"./gom-deva.js\": \"aaf2\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./oc-lnc\": \"167b\",\n\t\"./oc-lnc.js\": \"167b\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tk\": \"5aff\",\n\t\"./tk.js\": \"5aff\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33\",\n\t\"./yo.js\": \"7f33\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-mo\": \"3a6c\",\n\t\"./zh-mo.js\": \"3a6c\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"4678\";","import { SolarPanel } from \"@/models\";\nimport { Component, Vue } from \"vue-property-decorator\";\nimport { camelToUnderscore } from \"../../utils/Typography\";\n\nconst SOLAR_PANELS_INDEX_TAG = \"solar_panels_index\";\n\n@Component\nexport default class SolarPanelsMixin extends Vue {\n readonly path = camelToUnderscore(SolarPanel.path);\n readonly routes = this.$getModelRoutes(this.path);\n\n getSolarPanels(data: any) {\n return this.$httpGet(this.routes.indexUrl(data), SOLAR_PANELS_INDEX_TAG);\n }\n}\n","import { Component, Mixins } from \"vue-property-decorator\";\nimport SolarPanelsMixin from \"@/mixins/http/SolarPanelsMixin\";\nimport RequestsMixin from \"@/mixins/http/RequestsMixin\";\n\n@Component\nclass SolarPanelService extends Mixins(SolarPanelsMixin, RequestsMixin) {}\n\nexport default new SolarPanelService();\n","import { Inverter } from \"@/models\";\nimport { Component, Vue } from \"vue-property-decorator\";\nimport { camelToUnderscore } from \"../../utils/Typography\";\n\nconst INVERTERS_INDEX_TAG = \"inverters_index\";\n\n@Component\nexport default class InvertersMixin extends Vue {\n readonly path = camelToUnderscore(Inverter.path);\n readonly routes = this.$getModelRoutes(this.path);\n\n getInverters(data: any) {\n return this.$httpGet(this.routes.indexUrl(data), INVERTERS_INDEX_TAG);\n }\n}\n","import { Component, Mixins } from \"vue-property-decorator\";\nimport InvertersMixin from \"@/mixins/http/InvertersMixin\";\nimport RequestsMixin from \"@/mixins/http/RequestsMixin\";\n\n@Component\nclass InverterService extends Mixins(InvertersMixin, RequestsMixin) {}\n\nexport default new InverterService();\n","import { MpptConfiguration, SolarPanel } from \"@/models\";\nimport { Component, Vue } from \"vue-property-decorator\";\nimport { camelToUnderscore } from \"../../utils/Typography\";\n\nconst MPPT_CONFIGURATION_INDEX_TAG = \"solar_panels_index\";\n\n@Component\nexport default class MpptConfigurationsMixin extends Vue {\n readonly path = camelToUnderscore(MpptConfiguration.path);\n readonly routes = this.$getModelRoutes(this.path);\n\n getSolarPanels(data: any) {\n return this.$httpGet(\n this.routes.indexUrl(data),\n MPPT_CONFIGURATION_INDEX_TAG\n );\n }\n}\n","import { Component, Mixins } from \"vue-property-decorator\";\nimport MpptConfigurationsMixin from \"@/mixins/http/MpptConfigurationsMixin\";\nimport RequestsMixin from \"@/mixins/http/RequestsMixin\";\n\n@Component\nclass MpptConfigurationService extends Mixins(\n MpptConfigurationsMixin,\n RequestsMixin\n) {}\n\nexport default new MpptConfigurationService();\n","import { Brand, Inverter, MpptConfiguration, SolarPanel, SolarPanelRequest } from \"@/models\";\nimport { Action, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\n\nimport solarPanelService from \"@/services/solarPanelsService\";\nimport inverterService from \"@/services/inverterService\";\nimport mpptConfigurationService from \"@/services/mpptConfigurationService\";\n\nexport type BrandSolarPanelMap = { [brandId: string]: Array };\nexport type BrandInverterMap = { [brandId: string]: Inverter[] };\n\n@Module({\n namespaced: true,\n name: \"database\"\n})\nexport default class Database extends VuexModule {\n private _inverters: Inverter[] = [];\n private _solarPanels: SolarPanel[] = [];\n private _mpptConfigurations: MpptConfiguration[] = [];\n private _brands: Brand[] = [];\n private _brandSolarPanels: BrandSolarPanelMap = {};\n private _brandInverters: BrandInverterMap = {};\n\n get brandSolarPanels() {\n return this._brandSolarPanels;\n }\n\n get brandInverters() {\n return this._brandInverters;\n }\n\n get inverters() {\n return this._inverters;\n }\n\n get mpptConfigurations() {\n return this._mpptConfigurations;\n }\n\n get solarPanels() {\n return this._solarPanels;\n }\n\n get brands() {\n return this._brands;\n }\n\n get brandById() {\n return (brandId: string) => this.brands.find(o => o.id === brandId);\n }\n\n get solarPanelsByBrand() {\n return (brandId: string) => this.brandSolarPanels[brandId];\n }\n\n\n get invertersByBrand() {\n return (brandId: string) => this.brandInverters[brandId];\n }\n\n @Mutation\n private setInverters(payload: Inverter[]) {\n this._inverters = payload;\n }\n\n @Mutation\n private setSolarPanels(payload: SolarPanel[]) {\n this._solarPanels = payload;\n }\n\n @Mutation\n private setMpptConfigurations(payload: MpptConfiguration[]) {\n this._mpptConfigurations = payload;\n }\n\n @Mutation\n private setBrands(payload: { solarPanels: SolarPanel[] }) {\n const brands = new Set();\n\n for (const solarPanel of payload.solarPanels) {\n const brandPresent = this._brands.find(o => o.id === solarPanel.brand.id);\n if (!brandPresent) {\n this._brands.push(solarPanel.brand);\n }\n if (!this._brandSolarPanels[solarPanel.id]) {\n this._brandSolarPanels[solarPanel.brand.id] = [solarPanel];\n } else {\n this._brandSolarPanels[solarPanel.brand.id].push(solarPanel);\n }\n }\n }\n\n @Action({ rawError: true })\n async $loadData() {\n const { commit } = this.context;\n // FIXME : don't use **\n const data = { page: { size: \"all\" }, include: '**' };\n const inverters = await inverterService.getInverters(data);\n const solarPanels = await solarPanelService.getSolarPanels(data);\n const mpptConfigurations = await mpptConfigurationService.getSolarPanels(\n data\n );\n\n commit(\"setInverters\", inverters);\n commit(\"setSolarPanels\", solarPanels);\n commit(\"setMpptConfigurations\", mpptConfigurations);\n\n commit(\"setBrands\", { solarPanels: solarPanels });\n }\n}\n","import Project from \"../Project\";\n\nexport default class Step {\n completed = false;\n visitable = false;\n value: number | null = null;\n routeName = \"\";\n\n validate(project: Project) {\n\n }\n}\n","import Project from \"../Project\";\nimport Step from \"./Step\";\n\nexport default class DesignStep extends Step {\n value = 0;\n routeName = \"project-design\";\n visitable = true;\n\n private static instance: DesignStep;\n\n private constructor() {\n super();\n }\n\n public static get(): DesignStep {\n if (!DesignStep.instance) {\n DesignStep.instance = new DesignStep();\n }\n\n return DesignStep.instance;\n }\n\n public static reset(): DesignStep {\n\n DesignStep.instance = new DesignStep();\n return DesignStep.instance;\n }\n\n clear() {\n this.completed = false;\n }\n\n public validate(project: Project) {\n\n if(!project) {\n this.completed = false;\n return;\n }\n this.completed = !!(\n project.name &&\n project.tMin &&\n project.tAvg &&\n project.tMax\n );\n }\n}\n","import Project from \"../Project\";\nimport Step from \"./Step\";\n\nexport default class PanelsStep extends Step {\n value = 1;\n routeName = \"project-panels\";\n\n private static instance: PanelsStep;\n\n private constructor() {\n super();\n }\n\n public validate(project: Project) {\n\n if(!project?.photovoltaicArrays?.length) {\n this.completed = false;\n return\n }\n this.completed = !!project.photovoltaicArrays?.every(\n o => o.name && o.panelsCount && o.model\n );\n }\n\n public static get(): PanelsStep {\n if (!PanelsStep.instance) {\n PanelsStep.instance = new PanelsStep();\n }\n return PanelsStep.instance;\n }\n\n public static reset(): PanelsStep {\n if (!PanelsStep.instance) {\n PanelsStep.instance = new PanelsStep();\n }\n return PanelsStep.instance;\n }\n}\n","import Project from \"../Project\";\nimport ProjectLayout from \"../ProjectLayout\";\nimport Step from \"./Step\";\n\nexport default class InvertersStep extends Step {\n value = 2;\n routeName = \"project-inverters\";\n\n private static instance: InvertersStep;\n\n private constructor() {\n super();\n }\n\n clear() {\n this.completed = false;\n this.visitable = false;\n }\n\n public validate(project: Project) {\n\n if(!project?.layouts?.length) {\n this.completed = false;\n return;\n }\n\n this.completed = !!project.layouts?.every(\n (layout: ProjectLayout) =>\n {\n return layout.inverter &&\n layout.invertersCount &&\n layout.inverterMpptConfiguration &&\n layout.configurations.length === layout.inverterMpptConfiguration?.labels?.length}\n );\n }\n\n public static get(): InvertersStep {\n if (!InvertersStep.instance) {\n InvertersStep.instance = new InvertersStep();\n }\n return InvertersStep.instance;\n }\n public static reset(): InvertersStep {\n\n InvertersStep.instance = new InvertersStep();\n\n return InvertersStep.instance;\n }\n}\n","import Step from \"./Step\";\n\nexport default class RecapStep extends Step {\n value = 3;\n routeName = \"project-recap\";\n\n private static instance: RecapStep;\n\n private constructor() {\n super();\n }\n\n public static get(): RecapStep {\n if (!RecapStep.instance) {\n RecapStep.instance = new RecapStep();\n }\n return RecapStep.instance;\n }\n\n public static reset(): RecapStep {\n if (!RecapStep.instance) {\n RecapStep.instance = new RecapStep();\n }\n return RecapStep.instance;\n }\n\n\n}\n","import { Action, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\nimport {\n PhotovoltaicArray,\n ProjectLayoutConfiguration,\n SolarPanelRequest,\n User\n} from \"@/models\";\nimport Project from \"@/models/Project\";\nimport Step from \"@/models/Designer/Step\";\nimport DesignStep from \"@/models/Designer/DesignStep\";\nimport PanelsStep from \"@/models/Designer/PanelsStep\";\nimport InvertersStep from \"@/models/Designer/InvertersStep\";\nimport RecapStep from \"@/models/Designer/RecapStep\";\n\nimport { DESIGNER_STEP_COUNT } from \"@/utils/Constants\";\nimport ProjectLayout from \"@/models/ProjectLayout\";\nimport { initMatrixes } from \"@/utils/DesignerHelper\";\nimport MatrixConfiguration from \"@/models/Designer/MatrixConfiguration\";\nimport ProjectSyncService from \"@/services/ProjectSyncService\";\n\nexport type ConfigurationMatrixMap = { [id: string]: MatrixConfiguration };\n\n@Module({\n namespaced: true,\n name: \"project\"\n})\nexport default class ProjectStore extends VuexModule {\n private _project: Project | undefined = undefined;\n private _matrixConfigurations: ConfigurationMatrixMap = {};\n private _currentStep = 'project-design';\n private _steps: Step[] = [\n DesignStep.get(),\n PanelsStep.get(),\n InvertersStep.get(),\n RecapStep.get()\n ];\n\n get currentProject(): Project | undefined {\n return this._project;\n }\n\n get currentStep(): Step | undefined {\n return this._steps.find(e => e.routeName === this._currentStep);\n }\n\n get matrixConfigurations(): ConfigurationMatrixMap {\n return this._matrixConfigurations;\n }\n\n get photovoltaicArrays(): PhotovoltaicArray[] {\n return this.currentProject?.photovoltaicArrays || [];\n }\n\n get layouts(): ProjectLayout[] {\n return this.currentProject?.layouts || [];\n }\n\n get layout() {\n return (id: string) => this.layouts.find(o => o.id === id);\n }\n\n get stepByName() {\n return (name: string) => this._steps.find(e => e.routeName === name);\n }\n\n get steps(): Step[] {\n return this._steps;\n }\n\n @Mutation\n $setCurrentStep(index: number) {\n const step = this._steps.find(o => o.value === index);\n if (step) {\n this._currentStep = step.routeName;\n } else {\n console.error('Invalid step', index);\n }\n }\n\n @Mutation\n $setCurrentProject(project: Project | undefined) {\n this._project = project;\n console.warn('$setCurrentProject', project);\n }\n\n @Mutation\n $addPhotovoltaicArray(payload: PhotovoltaicArray) {\n this._project?.photovoltaicArrays.push(payload);\n }\n\n @Mutation\n $updatePhotovoltaicArray(payload: PhotovoltaicArray) {\n let array = this._project?.photovoltaicArrays.find(\n o => o.id === payload.id\n );\n Object.assign(array, payload);\n }\n\n @Mutation\n $deletePhotovoltaicArray(id: string) {\n let arrays = this._project?.photovoltaicArrays;\n const index = arrays?.findIndex(o => o.id === id);\n\n if (index !== undefined) {\n this._project?.photovoltaicArrays.splice(index, 1);\n }\n }\n\n @Mutation\n $addProjectLayout(payload: ProjectLayout) {\n this._project?.layouts.push(payload);\n }\n\n @Mutation\n $updateProjectLayout(payload: ProjectLayout) {\n let layout = this._project?.layouts.find(o => o.id === payload.id);\n Object.assign(layout, payload);\n }\n\n @Mutation\n $deleteProjectLayout(id: string) {\n let layouts = this._project?.layouts;\n const index = layouts?.findIndex(o => o.id === id);\n\n if (index !== undefined) {\n this._project?.layouts.splice(index, 1);\n }\n }\n\n @Mutation\n $updateProjectLayoutConfiguration(configuration: ProjectLayoutConfiguration) {\n if (!this._project) {\n return;\n }\n\n for (const layout of this._project.layouts) {\n const foundConfigIndex = layout.configurations.findIndex(c => c.id === configuration.id);\n if (foundConfigIndex !== -1) {\n Object.assign(layout.configurations[foundConfigIndex], configuration);\n }\n }\n }\n\n @Mutation\n $computeMatrixes(layout: ProjectLayout) {\n const newMatrixes = initMatrixes(layout);\n const layouts = this._project?.layouts\n const matrixConfigurationIds = Object.keys(this._matrixConfigurations)\n const layoutConfigurationsIds = layouts?.map(l => l.configurations?.map(c => c.id) || [])?.flat() || [];\n const idsToRemove = matrixConfigurationIds.filter( o => !layoutConfigurationsIds.includes(o))\n for(const id of idsToRemove) {\n delete this._matrixConfigurations[id]\n }\n this._matrixConfigurations = Object.assign(this._matrixConfigurations, newMatrixes);\n }\n\n @Mutation\n $bindProject(project: Project) {\n }\n\n @Mutation\n $addSolarPanelRequest(solarPanelRequest: SolarPanelRequest) {\n this._project?.solarPanelRequests.push(solarPanelRequest);\n }\n\n @Mutation\n $validateProject() {\n\n let isSuccessorVisitable = false;\n\n for (let i = 0; i < this._steps.length; i++) {\n let step = this._steps[i];\n if (isSuccessorVisitable) {\n step.visitable = true;\n isSuccessorVisitable = false;\n } else {\n if (i > 0) {\n step.visitable = false;\n }\n }\n step.validate(this._project!);\n isSuccessorVisitable = step.completed;\n }\n }\n\n @Action({ rawError: true })\n loadProject(project: Project) {\n const { commit } = this.context;\n commit(\"$setCurrentStep\", 0);\n commit(\"$setCurrentProject\", project);\n for (const layout of project.layouts) {\n commit(\"$computeMatrixes\", layout);\n }\n commit(\"$validateProject\");\n }\n\n @Action({ rawError: true })\n async reloadProject() {\n const { commit, getters } = this.context;\n if (!getters.currentProject) {\n return;\n }\n const project = await ProjectSyncService.current.reloadProject(getters.currentProject.id)\n commit(\"$setCurrentProject\", Object.assign(getters.currentProject, project));\n }\n\n @Action({ rawError: true })\n async startNewProject() {\n const { commit } = this.context;\n commit(\"$setCurrentStep\", 0);\n const project = await ProjectSyncService.current.createProject({})\n commit(\"$setCurrentProject\", project);\n return project;\n }\n\n @Action({ rawError: true })\n async saveProject(project: Project) {\n const { commit, getters } = this.context;\n commit(\"$setCurrentProject\", project);\n commit(\"$validateProject\");\n await ProjectSyncService.current.syncProject(project);\n }\n\n @Action({ rawError: true })\n nextStep(): Promise {\n const { commit, getters } = this.context;\n let index = getters.currentStep.value;\n if (getters.currentStep.value < DESIGNER_STEP_COUNT) {\n index++;\n }\n\n commit(\"$setCurrentStep\", index);\n\n const step = getters.steps.find((o: Step) => o.value === index);\n return step.routeName;\n }\n\n @Action({ rawError: true })\n setStepByName(name: string) {\n const { commit, getters } = this.context;\n const step = getters.steps.find((o: Step) => o.routeName === name);\n commit(\"$setCurrentStep\", step.value);\n }\n\n @Action({ rawError: true })\n async addPhotovoltaicArray() {\n const { commit, getters } = this.context;\n const array = await ProjectSyncService.current.addPhotovoltaicArray(getters.currentProject?.id);\n commit(\"$addPhotovoltaicArray\", array);\n commit(\"$validateProject\");\n }\n\n @Action({ rawError: true })\n async deletePhotovoltaicArray(id: string) {\n const { commit, dispatch, getters } = this.context;\n\n await ProjectSyncService.current.removePhotovoltaicArray(id);\n commit(\"$deletePhotovoltaicArray\", id);\n\n if (getters.currentProject?.photovoltaicArrays?.length === 0) {\n await dispatch('addPhotovoltaicArray');\n }\n\n commit(\"$validateProject\");\n }\n\n @Action({ rawError: true })\n async updatePhotovoltaicArray(payload: PhotovoltaicArray) {\n const { commit, getters, dispatch } = this.context;\n await ProjectSyncService.current.syncPhotovoltaicArray(payload.id, payload);\n commit(\"$updatePhotovoltaicArray\", payload);\n\n if (getters.currentProject?.layouts?.length) {\n await dispatch('reloadProject');\n for (const layout of (getters.currentProject as Project).layouts) {\n commit(\"$computeMatrixes\", layout);\n }\n }\n\n commit(\"$validateProject\");\n }\n\n @Action({ rawError: true })\n async addProjectLayout() {\n const { commit, getters } = this.context;\n const layout = await ProjectSyncService.current.addProjectLayout(getters.currentProject?.id);\n commit(\"$addProjectLayout\", layout);\n commit(\"$validateProject\");\n }\n\n @Action({ rawError: true })\n async addSolarPanelRequest(data: any) {\n const { commit, getters } = this.context;\n\n const solarPanelRequest = await ProjectSyncService.current.addSolarPanelRequest(getters.currentProject?.id, data);\n\n commit(\"$addSolarPanelRequest\", solarPanelRequest);\n commit(\"$validateProject\");\n return solarPanelRequest;\n }\n\n @Action({ rawError: true })\n async deleteProjectLayout(id: string) {\n const { commit, getters, dispatch } = this.context;\n\n await ProjectSyncService.current.removeProjectLayout(id);\n commit(\"$deleteProjectLayout\", id);\n if ((getters.currentProject as Project)?.layouts?.length === 0) {\n await dispatch('addProjectLayout');\n }\n commit(\"$validateProject\");\n }\n\n @Action({ rawError: true })\n setCurrentProject(project: Project | undefined) {\n const { commit } = this.context;\n commit('$setCurrentProject', project);\n }\n\n @Action({ rawError: true })\n async updateProjectLayout(layout: ProjectLayout) {\n const { commit } = this.context;\n\n const newLayout = await ProjectSyncService.current.syncProjectLayout(layout.id, layout);\n Object.assign(layout, newLayout);\n commit(\"$updateProjectLayout\", layout);\n commit(\"$computeMatrixes\", layout);\n commit(\"$validateProject\");\n }\n\n @Action({ rawError: true })\n async updateProjectLayoutConfiguration(payload: ProjectLayoutConfiguration) {\n const { commit, getters } = this.context;\n\n const configuration = await ProjectSyncService.current.syncProjectLayoutConfiguration(payload.id, payload);\n commit(\"$updateProjectLayoutConfiguration\", configuration);\n\n for (const layout of (getters.currentProject as Project).layouts) {\n if (layout.configurations.find(e => configuration.id === e.id)) {\n commit(\"$computeMatrixes\", layout);\n }\n }\n commit(\"$validateProject\");\n }\n}\n","export function camelToUnderscore(key: string) {\n if (!key) {\n return \"\";\n }\n let result = key.replace(/([A-Z])/g, \" $1\");\n return result\n .split(\" \")\n .join(\"_\")\n .toLowerCase();\n}\n\nexport function queryParams(params: any) {\n return Object.entries(params)\n .map(([key, val]) => `${key}=${val}`)\n .join(\"&\");\n}\n\nexport function startsWithVowel(string: string): boolean {\n const vowelRegex = \"^[aieouAIEOU].*\";\n return !!string.match(vowelRegex);\n}\n\nexport function capitalize(s: string) {\n if (typeof s !== \"string\") return \"\";\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport function firstLowerCase(s: string) {\n if (typeof s !== \"string\") return \"\";\n return s.charAt(0).toLowerCase() + s.slice(1);\n}\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VIcon.vue?vue&type=style&index=0&lang=scss&\"","export function clearFakeIds(items: Array<{ id: string }>) {\n return items.map(data => {\n const item: any = Object.assign({}, data);\n if (data.id.indexOf('-') !== -1) {\n delete item.id;\n }\n return item;\n });\n}\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Footer.vue?vue&type=style&index=0&lang=css&\"","import { PhotovoltaicArray } from \"@/models\";\nimport RequestData from \"@/store/types/RequestData\";\nimport { RegisterHttp } from \"@/utils/Decorators\";\nimport { Component, Vue } from \"vue-property-decorator\";\nimport { camelToUnderscore } from \"../../utils/Typography\";\n\nconst PHOTOVOLTAIC_ARRAYS_INDEX_TAG = \"arrays_index\";\nconst PHOTOVOLTAIC_ARRAYS_SHOW_TAG = \"arrays_show\";\n\n@Component\nexport default class PhotovoltaicArraysMixin extends Vue {\n @RegisterHttp(PHOTOVOLTAIC_ARRAYS_INDEX_TAG) readonly arraysHttp!: RequestData;\n @RegisterHttp(PHOTOVOLTAIC_ARRAYS_SHOW_TAG) readonly arrayHttp!: RequestData;\n\n readonly projectPath = camelToUnderscore('projects');\n readonly photovoltaicArrayPath = camelToUnderscore('photovoltaicArrays');\n readonly photovoltaicArrayRoutes = this.$getModelRoutes(this.photovoltaicArrayPath);\n\n createPhotovoltaicArray(projectId: string, data: any): Promise {\n return this.$httpPost(this.$getRoute(`${this.projectPath}/${projectId}/${this.photovoltaicArrayPath}`), PHOTOVOLTAIC_ARRAYS_SHOW_TAG, data);\n }\n\n updatePhotovoltaicArray(id: string, data: any): Promise {\n return this.$httpPut(this.photovoltaicArrayRoutes.updateUrl(id), PHOTOVOLTAIC_ARRAYS_SHOW_TAG, data);\n }\n\n destroyPhotovoltaicArray(id: string): Promise {\n return this.$httpDelete(this.photovoltaicArrayRoutes.deleteUrl(id), PHOTOVOLTAIC_ARRAYS_SHOW_TAG, {});\n }\n}\n","import { ProjectLayout } from \"@/models\";\nimport RequestData from \"@/store/types/RequestData\";\nimport { RegisterHttp } from \"@/utils/Decorators\";\nimport { Component, Vue } from \"vue-property-decorator\";\nimport { camelToUnderscore } from \"../../utils/Typography\";\n\nexport const PROJECT_LAYOUT_INCLUDES = '*,configurations.inverter_mppt_configuration.configuration.*,configurations.photovoltaic_array.model';\nconst PROJECT_LAYOUT_INDEX_TAG = \"projectLayouts_index\";\nconst PROJECT_LAYOUT_SHOW_TAG = \"projectLayouts_show\";\n\n@Component\nexport default class ProjectLayoutsMixin extends Vue {\n @RegisterHttp(PROJECT_LAYOUT_INDEX_TAG) readonly projectLayoutsHttp!: RequestData;\n @RegisterHttp(PROJECT_LAYOUT_SHOW_TAG) readonly projectLayoutHttp!: RequestData;\n\n readonly projectPath = camelToUnderscore('projects');\n readonly projectLayoutPath = camelToUnderscore('projectLayouts');\n readonly projectLayoutRoutes = this.$getModelRoutes(this.projectLayoutPath);\n\n createProjectLayout(projectId: string, data: any): Promise {\n return this.$httpPost(this.$getRoute(`${this.projectPath}/${projectId}/layouts`), PROJECT_LAYOUT_SHOW_TAG, data);\n }\n\n updateProjectLayout(id: string, data: any, include = '*'): Promise {\n return this.$httpPut(\n this.projectLayoutRoutes.updateUrl(id) + '?include=' + include,\n PROJECT_LAYOUT_SHOW_TAG, data\n );\n }\n\n destroyProjectLayout(id: string): Promise {\n return this.$httpDelete(this.projectLayoutRoutes.deleteUrl(id), PROJECT_LAYOUT_SHOW_TAG, {});\n }\n}\n","import { ProjectLayout } from \"@/models\";\nimport RequestData from \"@/store/types/RequestData\";\nimport { RegisterHttp } from \"@/utils/Decorators\";\nimport { Component, Vue } from \"vue-property-decorator\";\nimport { camelToUnderscore } from \"../../utils/Typography\";\n\nconst PROJECT_LAYOUT_CONFIG_SHOW_TAG = \"projectLayouts_show\";\n\n@Component\nexport default class ProjectLayoutConfigurationsMixin extends Vue {\n @RegisterHttp(PROJECT_LAYOUT_CONFIG_SHOW_TAG) readonly projectLayoutHttp!: RequestData;\n\n readonly projectPath = camelToUnderscore('projects');\n readonly projectLayoutConfigurationPath = camelToUnderscore('projectLayoutConfigurations');\n readonly projectLayoutConfigurationRoutes = this.$getModelRoutes(this.projectLayoutConfigurationPath);\n\n updateProjectLayoutConfiguration(id: string, data: any, include = '*'): Promise {\n return this.$httpPut(\n this.projectLayoutConfigurationRoutes.updateUrl(id) + '?include=' + include,\n PROJECT_LAYOUT_CONFIG_SHOW_TAG, data\n );\n }\n}\n","import PhotovoltaicArraysMixin from \"@/mixins/http/PhotovoltaicArraysMixin\";\nimport ProjectsMixin, { PROJECT_INCLUDED_MODELS } from \"@/mixins/http/ProjectsMixin\";\nimport { PhotovoltaicArray, ProjectLayout, ProjectLayoutConfiguration, SolarPanelRequest } from \"@/models\";\nimport Project from \"@/models/Project\";\nimport { currentUserStore } from \"@/store/typed\";\nimport { mixins } from \"vue-class-component\";\nimport ProjectLayoutsMixin, { PROJECT_LAYOUT_INCLUDES } from \"@/mixins/http/ProjectLayoutsMixin\";\nimport ProjectLayoutConfigurationsMixin from \"@/mixins/http/ProjectLayoutConfigurationsMixin\";\nimport SolarPanelRequestsMixin from '@/mixins/http/SolarPanelRequestsMixin';\n\n\nexport default class ProjectSyncService extends mixins(ProjectsMixin, PhotovoltaicArraysMixin, ProjectLayoutsMixin, ProjectLayoutConfigurationsMixin, SolarPanelRequestsMixin) {\n private static _instance: ProjectSyncService;\n static get current() {\n if (!this._instance) {\n this._instance = new ProjectSyncService();\n }\n return this._instance;\n }\n\n reloadProject(projectId: string) {\n return this.getProject(projectId, PROJECT_INCLUDED_MODELS);\n }\n\n syncProject(project: Project, fullSync = false) {\n const savableProject = project.toSavable(fullSync);\n return this.updateProject(savableProject.id, savableProject)\n }\n\n saveProject(project: Project, fullSync = false) {\n const savableProject = project.toSavable(fullSync);\n return this.createProject(savableProject);\n }\n\n bindUserToProject(project: Project) {\n\n if (!currentUserStore.currentUser) {\n return;\n }\n\n return this.bindToUser(project.id,{userId: currentUserStore.currentUser.id})\n }\n\n addPhotovoltaicArray(projectId: string | undefined) {\n\n return this.createPhotovoltaicArray(projectId!, {});\n }\n\n syncPhotovoltaicArray(id: string, data: PhotovoltaicArray) {\n\n return this.updatePhotovoltaicArray(id, data.toSavable());\n }\n\n removePhotovoltaicArray(id: string) {\n\n return this.destroyPhotovoltaicArray(id);\n }\n\n addProjectLayout(projectId: string | undefined) {\n\n return this.createProjectLayout(projectId!, {});\n }\n\n syncProjectLayout(id: string, data: ProjectLayout) {\n return this.updateProjectLayout(id, data.toSavable(), PROJECT_LAYOUT_INCLUDES);\n }\n\n removeProjectLayout(id: string) {\n return this.destroyProjectLayout(id);\n }\n\n syncProjectLayoutConfiguration(id: string, data: ProjectLayoutConfiguration) {\n return this.updateProjectLayoutConfiguration(id, data.toSavable(), 'photovoltaic_array.model');\n }\n\n async addSolarPanelRequest(id: string, data: SolarPanelRequest) {\n return await this.createSolarPanelRequest(id, data) as SolarPanelRequest;\n }\n}\n","import store from \"@/store\";\nimport Http from \"@/store/http\";\nimport CurrentUser from \"@/store/currentUser\";\nimport Project from \"@/store/project\";\nimport Auth from \"./auth\";\nimport Database from \"./database\";\nimport Cable from \"./cable\";\n\nimport { getModule } from \"vuex-module-decorators\";\n\nexport const httpStore: Http = getModule(Http, store);\nexport const currentUserStore: CurrentUser = getModule(CurrentUser, store);\nexport const authStore: Auth = getModule(Auth, store);\nexport const projectStore: Project = getModule(Project, store);\nexport const databaseStore: Database = getModule(Database, store);\nexport const cableStore: Cable = getModule(Cable, store);\n","import Model, { JSONModel } from \"./Model\";\nimport User from \"@/models/User\";\nimport { PhotovoltaicArray, SolarPanelRequest } from \".\";\nimport ProjectLayout from \"./ProjectLayout\";\nimport { Restore } from \"@/decorators/Restore\";\nimport { clearFakeIds } from \"@/utils/ClearIds\";\n\n@Restore()\nexport default class Project extends Model {\n static type = \"designerProjects\";\n user!: User;\n name!: string | null;\n code!: string | null;\n clientName!: string | null;\n plantAddress!: string | null;\n notes!: string | null;\n tMin!: number;\n tAvg!: number;\n tMax!: number;\n isDraft!: boolean;\n photovoltaicArrays!: PhotovoltaicArray[];\n solarPanelRequests!: SolarPanelRequest[];\n layouts!: ProjectLayout[];\n\n static empty() {\n return Object.assign(new Project(), {\n name: null,\n code: null,\n photovoltaicArrays: [PhotovoltaicArray.empty()],\n solarPanelRequests: [],\n layouts: [ProjectLayout.empty()],\n tMin: -10,\n tAvg: 45,\n tMax: 70,\n });\n }\n\n get peak() {\n\n let peak = 0;\n\n const layouts = this.layouts;\n for (const layout of layouts) {\n for (const configuration of layout.configurations) {\n const power = configuration.photovoltaicArray?.model?.power || 0\n peak += power * configuration.panelsCount * layout.invertersCount!;\n }\n }\n\n peak = Number.parseFloat(\n (peak / 1000).toFixed(2)\n );\n\n return peak;\n }\n\n toSavable(fullSync: boolean) {\n\n const savableProject = Object.assign({}, this) as any;\n\n if (fullSync) {\n savableProject.photovoltaicArrays = clearFakeIds(\n this.photovoltaicArrays.map(e => e.toSavable())\n );\n savableProject.layouts = this.layouts.map(e => e.toSavable());\n } else {\n delete savableProject.photovoltaicArrays;\n delete savableProject.layouts;\n }\n\n return savableProject;\n }\n}\n","import { Component, Vue } from \"vue-property-decorator\";\nimport { BASE_API_URL } from \"../../utils/Constants\";\nimport qs from \"qs\";\nimport { httpStore } from \"@/store/typed\";\n\n@Component\nexport default class RequestsMixin extends Vue {\n $getRoute(path: string) {\n return BASE_API_URL + path;\n }\n\n $getModelRoutes(path: string) {\n path = BASE_API_URL + path;\n const data = {\n getUrl: (\n id: string | number,\n opts?: { fields?: { [key: string]: string }; include?: string }\n ) => {\n const params = qs.stringify(\n { fields: opts?.fields, include: opts?.include },\n { arrayFormat: \"brackets\" }\n );\n const query = params.length > 0 ? \"?\" + params : \"\";\n\n return path + \"/\" + id + query;\n },\n createUrl: () => path,\n indexUrl: (params: any) =>\n path + \"?\" + qs.stringify(params, { arrayFormat: \"brackets\" }),\n updateUrl: (id: string | number) => path + \"/\" + id,\n deleteUrl: (id: string | number) => path + \"/\" + id\n };\n\n return data;\n }\n\n $httpGet(url: string, tag: string) {\n return httpStore.request({\n tag: tag,\n url: url,\n method: \"GET\"\n });\n }\n\n public $httpPost(url: string, tag: string, data: any) {\n return httpStore.request({\n tag: tag,\n url: url,\n data: data,\n method: \"POST\"\n });\n }\n\n public $httpPut(url: string, tag: string, data: any) {\n return httpStore.request({\n tag: tag,\n url: url,\n data: data,\n method: \"PUT\"\n });\n }\n\n public $httpDelete(url: string, tag: string, data: any = null) {\n return httpStore.request({\n tag: tag,\n url: url,\n data: data,\n method: \"DELETE\"\n });\n }\n}\n","import { BASE_WS_URL } from \"@/utils/Constants\";\nimport { createConsumer, Consumer, Channel } from \"@rails/actioncable\";\nimport { Action, Module, Mutation, VuexModule } from 'vuex-module-decorators';\nimport { authStore } from './typed';\n@Module({\n namespaced: true,\n name: 'cable'\n})\nexport default class Cable extends VuexModule {\n private _consumer: Consumer | undefined = undefined;\n\n get consumer() {\n return this._consumer;\n }\n\n @Mutation\n init(token: string) {\n if (this._consumer) {\n return;\n }\n this._consumer = createConsumer(\n `${BASE_WS_URL}?token=${token}`\n );\n }\n\n @Mutation\n disconnect() {\n this._consumer?.disconnect();\n this._consumer = undefined;\n }\n\n @Action({ rawError: true })\n subscribe({ params, handler, token }: { params: any; handler: T; token?: string }): Promise {\n return new Promise((resolve, reject) => {\n token = token || authStore.accessToken;\n const { commit } = this.context;\n\n commit('init', token);\n\n const subscription = this.context.getters.consumer.subscriptions.create(\n params,\n {\n ...handler,\n connected() {\n resolve(subscription);\n if ('connected' in handler) {\n (handler as any).connected();\n }\n },\n rejected() {\n if ('rejected' in handler) {\n (handler as any).rejected();\n }\n reject(new Error('Connection rejected'));\n }\n }\n );\n });\n }\n}\n","export const BASE_API_URL: string =\n// edited by reza\n //process.env.BASE_API_URL ?? \"http://peimar-monitoring-api.test/v1/designer/\";\n //process.env.BASE_API_URL ?? \"http://127.0.0.1:3000/v1/designer/\";\n process.env.BASE_API_URL ?? \"https://api.peimar.com/v1/designer/\";\n //process.env.BASE_API_URL ?? \"https://api-staging.peimar.com/v1/designer/\";\n//end\nexport const BASE_WS_URL: string =\n// edited by reza\n//process.env.BASE_WS_URL ?? \"http://peimar-monitoring-api.test/v1/ws\";\n process.env.BASE_WS_URL ?? \"https://api.peimar.com/v1/ws\";\n //process.env.BASE_WS_URL ?? \"https://api-staging.peimar.com/v1/ws\";\n//end\n\nexport const AUTH_ENDPOINT =\n// edited by reza\n //process.env.AUTH_ENDPOINT || \"http://peimar-monitoring-api.test/v1\";\n process.env.AUTH_ENDPOINT || \"https://api.peimar.com/v1/\";\n //process.env.AUTH_ENDPOINT || \"https://api-staging.peimar.com/v1/\";\n //end\nexport const AUTH_CLIENT_ID =\n process.env.AUTH_CLIENT_ID || \"tHmkjNpCbWaRIYPpiedfznThznFBy9sHkqVcKpjrMko\"; // production\n //process.env.AUTH_CLIENT_ID || \"J-4YFew2HtWIqqg3oLBFJ-j5kh9vRgWvpXuyd481WFk\"; // staging\n\nexport const AUTHORIZER_URL =\n // edited by reza\n //process.env.AUTHORIZER_URL || \"http://peimar-auth.test\";\n process.env.AUTHORIZER_URL || \"https://auth.peimar.com\";\n //process.env.AUTHORIZER_URL || \"https://auth-staging.peimar.com\";\n // end\n\nexport const DESIGNER_STEP_COUNT = 4;\n\nexport const P_NOM_CA_MAX = 11.08\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('session-expired-modal'),_c('router-view'),_c('Footer')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-modal',{ref:\"modal\"},[_c('template',{slot:\"header\"},[_c('div',{staticClass:\"d-flex\"},[_c('p',{staticClass:\"subtitle my-auto\"},[_vm._v(_vm._s(_vm.$t('session.expired.title')))])])]),[_c('div',{staticClass:\"py-1\"},[_c('div',[_vm._v(_vm._s(_vm.$t('session.expired.description')))])])],_c('template',{slot:\"footer\"},[_c('button',{staticClass:\"btn btn-primary\",on:{\"click\":_vm.reload}},[_vm._v(_vm._s(_vm.$t('session.expired.reload')))])])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { createDecorator } from 'vue-class-component';\nimport Vue from 'vue';\n\nexport default (mutationName: string) => {\n return createDecorator((options, key) => {\n // eslint-disable-next-line\n let destroyedFunction: Function;\n\n const beforeCreate = function(this: Vue) {\n if (options.methods) {\n const method = (options.methods)[key].bind(this);\n destroyedFunction = this.$store.subscribe(mutation => {\n if (mutation.type === mutationName) {\n method(mutation.payload);\n }\n })\n }\n };\n\n const destroyed = function(this: Vue) {\n destroyedFunction();\n };\n\n if (options.beforeCreate) {\n const oldBeforeCreate = options.beforeCreate;\n options.beforeCreate = function() {\n oldBeforeCreate.bind(this)();\n beforeCreate.bind(this)();\n };\n } else {\n options.beforeCreate = beforeCreate;\n }\n\n if (options.destroyed) {\n const olddestroyed = options.destroyed;\n options.destroyed = function(this: Vue) {\n olddestroyed.bind(this)();\n destroyed.bind(this)();\n };\n } else {\n options.destroyed = destroyed;\n }\n });\n};\n\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Ref, Vue } from \"vue-property-decorator\";\nimport StoreSubscribe from '@/decorators/StoreSubscribe';\nimport VModal from '@monade/vue-components/src/components/VModal.vue';\n\n@Component({ components: { VModal } })\nexport default class SessionExpiredModal extends Vue {\n @Ref() readonly modal!: VModal;\n\n @StoreSubscribe('auth/setSessionExpired')\n onSessionExpired() {\n this.modal.show();\n }\n\n reload() {\n window.location.reload();\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SessionExpiredModal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SessionExpiredModal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SessionExpiredModal.vue?vue&type=template&id=6bab012c&\"\nimport script from \"./SessionExpiredModal.vue?vue&type=script&lang=ts&\"\nexport * from \"./SessionExpiredModal.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"footer bg-light\"},[_vm._v(\" \"+_vm._s(_vm.$t('common.footer'))+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Component, Ref } from \"vue-property-decorator\";\r\nexport default class Footer extends Vue {\r\n\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Footer.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Footer.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Footer.vue?vue&type=template&id=d2627eda&\"\nimport script from \"./Footer.vue?vue&type=script&lang=ts&\"\nexport * from \"./Footer.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Footer.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\nimport { Vue, Component, Prop } from \"vue-property-decorator\";\nimport SessionExpiredModal from '@/components/SessionExpiredModal.vue';\nimport Footer from \"@/components/Footer.vue\";\n\n@Component({ components: { SessionExpiredModal , Footer } })\nexport default class App extends Vue {}\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--14-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--14-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??ref--14-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=2b2c3235&\"\nimport script from \"./App.vue?vue&type=script&lang=ts&\"\nexport * from \"./App.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","const routes = [\n {\n path: \"/styleguide\",\n component: () =>\n import(\n /* webpackChunkName: \"styleguide\" */ \"@/views/Styleguide/Index.vue\"\n ),\n meta: { noAuth: true, role: [\"anyone\"] },\n children: [\n {\n path: \"\",\n name: \"styleguide-typography\",\n component: () =>\n import(\n /* webpackChunkName: \"styleguide\" */ \"@/views/Styleguide/Typography.vue\"\n )\n },\n {\n path: \"buttons\",\n name: \"styleguide-buttons\",\n component: () =>\n import(\n /* webpackChunkName: \"styleguide\" */ \"@/views/Styleguide/Buttons.vue\"\n )\n },\n {\n path: \"labels\",\n name: \"styleguide-labels\",\n component: () =>\n import(\n /* webpackChunkName: \"styleguide\" */ \"@/views/Styleguide/Labels.vue\"\n )\n },\n {\n path: \"tables\",\n name: \"styleguide-tables\",\n component: () =>\n import(\n /* webpackChunkName: \"styleguide\" */ \"@/views/Styleguide/Tables.vue\"\n )\n },\n {\n path: \"form\",\n name: \"styleguide-form\",\n component: () =>\n import(\n /* webpackChunkName: \"styleguide\" */ \"@/views/Styleguide/Form.vue\"\n )\n }\n ]\n }\n];\n\nexport default routes;\n","const routes = [\n\n {\n path: '/projects',\n meta: { noAuth: true, role: ['anyone'] },\n component: () => import(/* webpackChunkName: \"project\" */ \"@/views/Projects.vue\"),\n children: [\n {\n path: '',\n name: \"projects-list\",\n meta: { role: ['anyone'] },\n component: () => import(/* webpackChunkName: \"project\" */ \"@/views/Project/List.vue\"),\n },\n {\n path: ':id',\n component: () => import(/* webpackChunkName: \"project\" */ \"@/views/Project/Create.vue\"),\n meta: { noAuth: true, projectCreate: true },\n children: [\n {\n path: '',\n redirect: { name: 'project-design' },\n },\n {\n meta: { noAuth: true },\n path: \"print\",\n name: \"project-print\",\n component: () =>\n import(/* webpackChunkName: \"project\" */ \"@/views/Project/Print.vue\")\n },\n {\n meta: { noAuth: true },\n path: \"design\",\n name: \"project-design\",\n component: () =>\n import(/* webpackChunkName: \"project\" */ \"@/views/Project/Data.vue\")\n },\n {\n meta: { noAuth: true },\n path: \"panels\",\n name: \"project-panels\",\n component: () =>\n import(/* webpackChunkName: \"project\" */ \"@/views/Project/Panels.vue\")\n },\n {\n meta: { noAuth: true },\n path: \"inverters\",\n name: \"project-inverters\",\n component: () =>\n import(\n /* webpackChunkName: \"project\" */ \"@/views/Project/Inverters.vue\"\n )\n },\n {\n meta: { noAuth: true },\n path: \"recap\",\n name: \"project-recap\",\n component: () =>\n import(/* webpackChunkName: \"project\" */ \"@/views/Project/Recap.vue\")\n }\n ]\n },\n ]\n }\n];\n\nexport default routes;\n","import { RouteConfig } from \"vue-router\";\n\n\nconst routes: RouteConfig[] = [\n {\n path: '/auth',\n name: 'oauth_response',\n component: () => import('@/views/Auth.vue'),\n meta: { noAuth: true }\n },\n {\n path: '/oauth_start',\n name: 'oauth_start',\n component: () => import('@/views/OauthStart.vue'),\n meta: { noAuth: true }\n },\n {\n path: '/login',\n name: 'login',\n component: () => import('@/views/Login.vue'),\n meta: { noAuth: true }\n },\n {\n path: '/forbidden',\n name: 'forbidden',\n component: () => import('@/views/Errors/Forbidden.vue'),\n meta: { noAuth: true, role: [\"anyone\"] }\n }\n];\n\nexport default routes;\n","import VueRouter, { RouteConfig } from \"vue-router\";\nimport { authStore } from \"@/store/typed\";\nimport StyleguideRoutes from \"@/router/Styleguide\";\nimport ProjectRoutes from \"@/router/Project\";\n\nimport AuthenticationRoutes from \"@/router/Authentication\";\n\nconst routes: RouteConfig[] = [\n {\n path: \"/\",\n name: 'index',\n component: () => import(\"@/views/Home.vue\"),\n meta: { noAuth: true, role: ['anyone'] },\n },\n ...ProjectRoutes,\n ...StyleguideRoutes,\n ...AuthenticationRoutes,\n {\n path: \"*\",\n component: () => import(\"@/views/Errors/NotFound.vue\"),\n name: \"404\",\n meta: { noAuth: true, role: [\"anyone\"] }\n }\n];\n\nconst router = new VueRouter({\n base: \"/\",\n routes,\n mode: \"history\"\n});\n\nrouter.beforeEach(async (to, from, next) => {\n const { role } = to?.matched[0]?.meta || {};\n\n try {\n await authStore.initialize();\n const user = await authStore.routeGuard(to);\n if (role?.includes(user?.role) || role?.includes(\"anyone\")) {\n // if authorized\n next();\n return;\n } else {\n // if not it is redirected\n next(false);\n return;\n }\n } catch (e) {\n if (to?.matched?.every(record => record.meta.noAuth)) {\n next();\n return;\n } else {\n next({ name: 'login' });\n }\n }\n});\n\nexport default router;\n","import { JSONData, Parser } from \"../models/Model\";\nimport { Vue, Component } from \"vue-property-decorator\";\n\n@Component\nexport default class ModelParserMixin extends Vue {\n $parseModel(list: JSONData) {\n return Parser.parse(list);\n }\n}\n","import { JSONData, Parser } from \"../models/Model\";\nimport { Vue, Component } from \"vue-property-decorator\";\n\n@Component\nexport default class RouteHelpersMixin extends Vue {\n $isRouteActive(route: string): boolean {\n return !!this.$route.matched.find((e: any) => e.name === route);\n }\n $areRouteActive(routes: string[]): boolean {\n return !!this.$route.matched.some((e: any) => routes.includes(e.name));\n }\n}\n","import * as WebFont from \"webfontloader\";\n\nWebFont.load({\n google: {\n families: [\"Raleway:100,200,300,400,600,700\",\"Space+Grotesk:100,200,300,400,600,700\"]\n }\n});\n","import Vue from 'vue';\nimport VueMoment from 'vue-moment';\nimport * as moment from 'moment';\nimport 'moment/locale/it';\n\nmoment.locale('it');\n\nVue.use(VueMoment, {\n moment\n});\n","import axios from \"axios\";\nimport Vue from \"vue\";\nimport { authStore } from \"@/store/typed\";\n\naxios.interceptors.response.use(\n r => r,\n error => {\n if (error?.response?.status === 422 || error?.response?.status === 404) {\n return Promise.reject(error);\n }\n\n if (error?.response?.status === 401) {\n if (!authStore.authRunning) {\n authStore.notifySessionExpired();\n }\n } else {\n const message =\n (error.response?.data &&\n ((error.response.data?.errors?.message) ||\n error.response.data?.message)) ||\n error.message;\n Vue.toasted.show(message, {\n position: \"bottom-right\",\n type: \"error\",\n icon: \"warning\",\n duration: 5000,\n keepOnHover: true,\n action: {\n text: \"Chiudi\",\n onClick(e: any, toastObject: any) {\n toastObject.goAway(0);\n }\n }\n } as any);\n }\n return Promise.reject(error);\n }\n);\n","import Vue from \"vue\";\n//eslint-disable-next-line\nimport VueMq from \"vue-mq\";\n\nVue.use(VueMq, {\n breakpoints: {\n // default breakpoints - customize this\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200\n },\n defaultBreakpoint: \"sm\" // customize this for SSR\n});\n","import Vue from 'vue';\nimport VTooltip from 'v-tooltip';\n\nconst options = {\n defaultOffset: 5,\n popover: {\n defaultTrigger: 'hover focus'\n }\n};\n\nVue.use(VTooltip, options);\n","import * as Sentry from '@sentry/browser';\nimport Vue from 'vue';\nimport * as Integrations from '@sentry/integrations';\n\nif (process.env.SENTRY_DSN) {\n Sentry.init({\n dsn: process.env.SENTRY_DSN,\n blacklistUrls: [\n // Facebook flakiness\n /graph\\.facebook\\.com/i,\n // Facebook blocked\n /connect\\.facebook\\.net\\/en_US\\/all\\.js/i,\n // Chrome extensions\n /extensions\\//i,\n /^chrome:\\/\\//i\n ],\n integrations: [\n new Integrations.Vue({\n Vue,\n attachProps: true,\n }),\n ],\n });\n}\n","import \"core-js/stable\";\nimport \"regenerator-runtime/runtime\";\nimport Vue from \"vue\";\nimport App from \"./App.vue\";\nimport router from \"./router\";\nimport store from \"./store\";\nimport Toasted from \"vue-toasted\";\nimport VueI18n from \"vue-i18n\";\nimport ModelParserMixin from \"@/mixins/ModelParser\";\nimport RouteHelpersMixin from \"@/mixins/RouteHelpers\";\nimport RequestsMixin from \"@/mixins/http/RequestsMixin\";\nimport { messages } from \"@/translations/strings.json\";\nimport VueRouter from \"vue-router\";\nimport VIcon from \"@/components/VIcon.vue\";\nimport \"vue-moment\";\nimport \"@/initializers\";\n\nVue.use(VueI18n);\nVue.mixin(ModelParserMixin);\nVue.mixin(RouteHelpersMixin);\nVue.mixin(RequestsMixin);\nVue.use(VueRouter);\nVue.use(Toasted);\nVue.component(\"v-icon\", VIcon);\n\nVue.config.productionTip = false;\n// added by reza\nVue.config.devtools = true;\n//end\n\n// TODO: Add types to $http* methods\ndeclare module \"vue/types/vue\" {\n interface Vue {\n $parseModel(list: any | any[]): any;\n $getRoute(path: string): string;\n $getModelRoutes(name: string): {\n getUrl: (id: string | number, opts?: {\n fields?: {\n [key: string]: string;\n } | undefined;\n include?: string | undefined;\n } | undefined) => string;\n createUrl: () => string;\n indexUrl: (params: any) => string;\n updateUrl: (id: string | number) => string;\n deleteUrl: (id: string | number) => string;\n };\n $httpGet(\n url: string,\n tag: string,\n fields?: string[] | string\n ): Promise;\n $httpPost(url: string, tag: string, data: any): Promise;\n $httpPut(url: string, tag: string, data: any): Promise;\n $httpDelete(url: string, tag: string, data: any): Promise;\n $isRouteActive(route: string): boolean;\n $areRouteActive(routes: string[]): boolean;\n $mq: string;\n }\n}\n\nconst i18n = new VueI18n({ messages });\n// FIXME: handle language\ni18n.locale = \"it\";\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const app = new Vue({\n i18n,\n router,\n store,\n render: h => h(App)\n }).$mount();\n document.body.appendChild(app.$el);\n});\n","import Project from \"@/models/Project\";\nimport RequestData from \"@/store/types/RequestData\";\nimport { RegisterHttp } from \"@/utils/Decorators\";\nimport { Component, Vue } from \"vue-property-decorator\";\nimport { camelToUnderscore } from \"../../utils/Typography\";\n\n\nexport const PROJECT_INCLUDED_MODELS =\n \"solar_panel_requests,photovoltaic_arrays.brand,photovoltaic_arrays.model,layouts.configurations,layouts.inverter,layouts.inverter_mppt_configuration.configuration\";\n\nconst PROJECTS_INDEX_TAG = \"projects_index\";\nconst PROJECTS_SHOW_TAG = \"project_show\";\nconst PROJECTS_DESTROY_TAG = \"project_destroy\";\nconst PROJECT_BIND_TO_USER_TAG = \"bind_to_user\"\n@Component\nexport default class ProjectsMixin extends Vue {\n @RegisterHttp(PROJECTS_INDEX_TAG) readonly projectsHttp!: RequestData;\n @RegisterHttp(PROJECTS_SHOW_TAG) readonly projectHttp!: RequestData;\n @RegisterHttp(PROJECTS_DESTROY_TAG) readonly destroyProjectHttp!: RequestData;\n\n readonly projectPath = camelToUnderscore('projects');\n readonly projectRoutes = this.$getModelRoutes(this.projectPath);\n\n getProject(id: number | string, include?: string): Promise {\n return this.$httpGet(this.projectRoutes.getUrl(id, { include }), PROJECTS_SHOW_TAG);\n }\n\n getProjects(data: any): Promise {\n return this.$httpGet(this.projectRoutes.indexUrl(data), PROJECTS_INDEX_TAG);\n }\n\n createProject(data: any): Promise {\n return this.$httpPost(this.projectRoutes.createUrl(), PROJECTS_SHOW_TAG, data);\n }\n\n destroyProject(id: string): Promise {\n return this.$httpDelete(this.projectRoutes.deleteUrl(id), PROJECTS_DESTROY_TAG, {});\n }\n\n updateProject(id: string, data: any): Promise {\n return this.$httpPut(this.projectRoutes.updateUrl(id), PROJECTS_SHOW_TAG, data);\n }\n\n bindToUser(id: string, data: any): Promise {\n return this.$httpPut(`${this.projectRoutes.updateUrl(id)}/bind`, PROJECT_BIND_TO_USER_TAG, data);\n }\n}\n","import axios, { AxiosResponse, AxiosRequestConfig } from \"axios\";\nimport Vue from \"vue\";\nimport { Module, VuexModule, Mutation, Action } from \"vuex-module-decorators\";\nimport { Parser } from \"@/models/Model\";\nimport RequestData from \"@/store/types/RequestData\";\n\n@Module({\n stateFactory: true,\n namespaced: true,\n name: \"http\"\n})\nexport default class Http extends VuexModule {\n private _status: { [key: string]: RequestData } = {};\n\n get status(): { [key: string]: RequestData } {\n return this._status;\n }\n\n get registered() {\n return (key: string) => this._status[key] !== undefined;\n }\n\n @Mutation\n register(payload: string) {\n if (this._status[payload]) {\n return;\n }\n\n Vue.set(this._status, payload, {\n loading: false,\n statusCode: 0,\n errors: null\n });\n }\n\n @Mutation\n clear(payload: string) {\n Vue.set(this._status, payload, {\n loading: false,\n statusCode: 0,\n errors: null\n });\n }\n\n @Mutation\n setError(payload: { tag: string; errors: any }) {\n Vue.set(this._status[payload.tag], \"errors\", payload.errors);\n }\n\n @Mutation\n setResponseData({\n tag,\n response,\n isError\n }: {\n tag: string;\n response: AxiosResponse;\n isError: boolean;\n }) {\n this._status[tag].statusCode = response?.status || -1;\n if (!isError) {\n Vue.set(this._status[tag], \"meta\", response.data.meta);\n Vue.set(this._status[tag], \"links\", response.data.links);\n return;\n }\n if (response?.data /* && response.data.errors */) {\n Vue.set(this._status[tag], \"errors\", response.data);\n } else {\n Vue.set(this._status[tag], \"errors\", {\n message: response?.statusText || \"Unknown Error\"\n });\n }\n }\n\n @Mutation\n setLoading({ tag, loading }: { tag: string; loading: boolean }) {\n this._status[tag].loading = loading;\n }\n\n @Action({ commit: \"register\" })\n dispatchRegister(tag: string) {\n return tag;\n }\n\n @Action({ commit: \"clear\" })\n dispatchClear(tag: string) {\n return tag;\n }\n\n @Action({ rawError: true })\n async request(config: AxiosRequestConfig & { tag: string; raw?: boolean }) {\n const { commit, getters } = this.context;\n const { tag, raw } = config;\n\n if (!getters.registered(tag)) {\n commit(\"register\", tag);\n }\n\n commit(\"setLoading\", { tag, loading: true });\n\n try {\n const response = await axios(config);\n commit(\"setResponseData\", { tag, response, isError: false });\n return raw ? response : Parser.parse(response.data);\n } catch (err) {\n const { response } = err;\n commit(\"setResponseData\", { tag, response, isError: true });\n throw err;\n } finally {\n commit(\"setLoading\", { tag, loading: false });\n }\n }\n}\n"],"sourceRoot":""}