{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/utils/eventBus/eventBusEvent.enum.ts","webpack:///./src/components/Button/Button.vue?845f","webpack:///./src/typing/api/ship.class.ts","webpack:///./src/utils/auth/index.ts","webpack:///./src/typing/enums/tripStatus.enum.ts","webpack:///./src/utils/eventBus/listnerFuncs/onAuthed.ts","webpack:///./src/utils/eventBus/eventBus.ts","webpack:///./src/typing/api/project.class.ts","webpack:///./src/typing/api/report.class.ts","webpack:///./src/typing/api/projectsResponse.class.ts","webpack:///./src/store/modules/project/projectTypes.ts","webpack:///./src/components/Loader.vue?d0d4","webpack:///./src/store/modules/misc/miscTypes.ts","webpack:///./src/utils/environment/getEnvironment.ts","webpack:///./src/utils/dayjs.ts","webpack:///./src/components/Modal/Modal.vue?f44e","webpack:///./src/components/Modal/Modal.vue","webpack:///./src/components/Modal/Modal.vue?d5f7","webpack:///./src/components/Modal/Modal.vue?1635","webpack:///./src/typing/enums/tripStatusLocal.enum.ts","webpack:///./src/typing/api/user.class.ts","webpack:///./src/utils/customWindow.ts","webpack:///./src/App.vue?c025","webpack:///./src/store/modules/user/userTypes.ts","webpack:///./src/components/PageHeader/PageHeader.vue?80b7","webpack:///./src/components/Notification/Notification.vue?4510","webpack:///./src/utils/eventBus/listnerFuncs/onNetworkStateChange.ts","webpack:///./src/typing/enums/role.enum.ts","webpack:///./src/utils/vueInstance.ts","webpack:///./src/components/DevToolbar/DevToolbar.vue?dc0d","webpack:///./src/components/Button/Button.vue?58d3","webpack:///./src/components/Button/Button.vue","webpack:///./src/components/Button/Button.vue?fadb","webpack:///./src/components/Button/Button.vue?0ffb","webpack:///./src/components/BaseComponent.ts","webpack:///./src/App.vue?38c3","webpack:///./src/components/PageHeader/PageHeader.vue?8451","webpack:///./src/components/PageHeader/PageHeader.vue","webpack:///./src/components/PageHeader/PageHeader.vue?6832","webpack:///./src/components/PageHeader/PageHeader.vue?2d9b","webpack:///./src/components/Notification/Notification.vue?5c84","webpack:///./src/components/Notification/Notification.vue","webpack:///./src/components/Notification/Notification.vue?3064","webpack:///./src/components/Notification/Notification.vue?1d30","webpack:///./src/components/DevToolbar/DevToolbar.vue?ef43","webpack:///./src/components/DevToolbar/DevToolbar.vue","webpack:///./src/components/DevToolbar/DevToolbar.vue?2294","webpack:///./src/components/DevToolbar/DevToolbar.vue?1de1","webpack:///./src/components/Loader.vue?4972","webpack:///./src/components/Loader.vue","webpack:///./src/components/Loader.vue?fdaa","webpack:///./src/components/Loader.vue?f04a","webpack:///./src/components/ErrorModal.vue?a0c0","webpack:///./src/components/ErrorModal.vue","webpack:///./src/components/ErrorModal.vue?fe8a","webpack:///./src/components/ErrorModal.vue?3bd3","webpack:///./src/App.vue","webpack:///./src/App.vue?c438","webpack:///./src/App.vue?bff9","webpack:///./src/registerServiceWorker.ts","webpack:///./src/utils/auth/authRouteGuard.ts","webpack:///./src/utils/isOfflineGuard.ts","webpack:///./src/utils/auth/unAuthedRouteGuard.ts","webpack:///./src/router/authRoutes.ts","webpack:///./src/views/Offline.vue?0a1e","webpack:///./src/views/Offline.vue","webpack:///./src/views/Offline.vue?cda0","webpack:///./src/views/Offline.vue?c3db","webpack:///./src/router/index.ts","webpack:///./src/store/modules/baseStoreModule.class.ts","webpack:///./src/store/modules/environment/environmentTypes.ts","webpack:///./src/store/modules/environment/actions.ts","webpack:///./src/store/modules/environment/getters.ts","webpack:///./src/store/modules/environment/mutations.ts","webpack:///./src/store/modules/environment/environmentModule.class.ts","webpack:///./src/store/modules/misc/actions.ts","webpack:///./src/store/modules/misc/getters.ts","webpack:///./src/store/modules/misc/mutations.ts","webpack:///./src/store/modules/misc/miscModule.class.ts","webpack:///./src/store/modules/project/actions.ts","webpack:///./src/store/modules/project/getters.ts","webpack:///./src/store/modules/project/mutations.ts","webpack:///./src/store/modules/project/projectModule.class.ts","webpack:///./src/store/modules/user/actions.ts","webpack:///./src/store/modules/user/getters.ts","webpack:///./src/store/modules/user/mutations.ts","webpack:///./src/store/modules/user/userModule.ts","webpack:///./src/store/index.ts","webpack:///./src/utils/environment/loadEnvironment.ts","webpack:///./src/plugins/dayjs.plugin.ts","webpack:///./src/utils/onlineStatusCheck.ts","webpack:///./src/utils/axiosInterceptors.ts","webpack:///./src/utils/stringSplice.ts","webpack:///./src/main.ts","webpack:///./src/utils/notification.ts","webpack:///./src/utils/dexieDB/getToBackupState.ts","webpack:///./src/utils/dexieDB/tableNames.enum.ts","webpack:///./src/utils/dexieDB/schema.ts","webpack:///./src/utils/dexieDB/index.ts","webpack:///./src/typing/api/contractor.class.ts","webpack:///./src/api/data.ts","webpack:///./src/typing/api/tripNew.class.ts","webpack:///./src/typing/validationResult.class.ts","webpack:///./src/utils/isUndefined.ts","webpack:///./src/api/manage.ts","webpack:///./src/components/Modal/Modal.vue?cde0"],"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","EventBusEvent","Ship","validationResult","this","id","maximumVolume","imo","eni","mmsi","contractorId","addError","trim","obj","instance","sessionCheckExpiryDays","DEFAULT_REDIRECT_CALLBACK","appState","history","replaceState","title","location","pathname","getInstance","useAuth0","onRedirectCallback","redirectUri","origin","options","loading","isAuthenticated","user","auth0Client","popupOpen","methods","loginWithPopup","getUser","handleRedirectCallback","loginWithRedirect","getIdTokenClaims","getTokenSilently","getTokenWithPopup","getRole","roleKeyName","tokenObj","Array","isArray","logout","getUserId","sub","returnTo","instanceCreatedCallback","checkSession","checkAuthentication","$emit","Authed","$router","created","domain","client_id","clientId","audience","redirect_uri","cacheLocation","search","includes","Auth0Plugin","install","Vue","$auth","isAuth0Loaded","poll","TripStatus","onAuthed","userRole","userId","vueInstance","$store","commit","userTypes","mutations","SET_ROLE","SET_AUTH0_ID","dispatch","projectTypes","actions","FETCH_PROJECT_DATA","startRoute","getStartRouteByRole","route","Client","Contractor","Skipper","lastVisitedProject","checkLastVisitedProject","state","project","isUndefined","projectId","shipId","projectData","getReport","params","toString","SET_LAST_VISITED_PROJECT","EventBus","initGlobalListeners","$on","NetworkStatusChange","isOnline","onNetworkStateChange","number","description","startDate","concurrencyKey","trips","sort","a","b","forEach","trip","merge","_mergeTrips","lastTrip","newTripNumber","Number","lastTripEndTime","endTimeDumping","lastFuelType","fuel","date","format","lastTripDate","lastTripDumpBox","dumpBoxName","lastTripSoilType","soilType","newTrip","startTime","startTimeDate","OpenSkipper","validate","filter","toUpdateReports","fetchedTripNumbers","flatMap","toMergeTrips","localTrip","fetched","find","fetchedTrip","newTrips","findIndex","toDeleteTripIndexes","index","apiStatus","New","tripIndex","reports","projects","contractors","ships","report","contractor","ship","_getItemFromArray","newData","ProjectResponse","fetchedReportIds","fetchedReport","toMergeReports","localReport","newReports","arr","filterFn","filtered","prefix","UPDATE_TRIP","CHECK_TO_UPDATE_REPORTS","SAVE_REPORT","SET_OR_MERGE_PROJECT_DATA","SET_SHOULD_FETCH_PROJECT_DATA","SET_TRIP","SET_TO_UPDATE_REPORTS","SET_BOXLIST","miscTypes","ADD_HEADER_NAV_LINK","REMOVE_HEADER_NAV_LINKS","TOGGLE_LOADER","FETCH_USERS","SET_IS_ONLINE","SET_PAGE_TITLE","SET_HEADER_NAV_LINKS","SET_SHOW_LOADER","SET_API_ERRORS","SET_USERS","getEnv","environment","$dayjs","getTimeFromDateTime","getDateFromDateTime","validateDateTime","time","customDateFormat","dateValid","isValid","timeValid","createDateTime","local","extend","render","_vm","_h","$createElement","_c","_self","attrs","staticClass","on","backdropClick","_e","style","maxWidth","modalSize","zIndex","$props","onTop","_v","_s","headerTitle","closeModal","_t","slotData","staticRenderFns","showModal","variant","size","closeOnBackdropClick","changeName","props","showHeader","default","Boolean","active","showFooter","showCloseButton","String","component","TripStatusLocal","User","u","auth0UserID","email","role","appMetadata","body","keys","k","globalVueInstanceVariableName","useIndexedDB","onAppInit","lastOnlineState","misc","newOnlineState","shouldFetchProjectData","Role","readableRole","getState","class","btnClassList","emitClick","cL","disabled","BaseComponent","$state","val","log","clearNavLinks","pageTitle","isReportPage","headerNavLinks","pageName","showLogout","$event","toggledNavLinkListener","showNotification","notificationText","devToolbarClosed","directives","rawName","expression","_l","item","toggleNavItemActive","label","left","navItemActiveBarStyles","width","navItems","$nextTick","calculateActiveNavItemBarPosition","$watch","navLinks","navItemIndex","links","activeNavItem","querySelector","defaultValue","textPositions","getClientRects","extraBarWidth","leftPosition","Math","ceil","components","Button","show","envName","logEnvironment","logState","componentAction","toggleOnlineState","toggleRole","currentRole","logJWT","clearRefresh","switchingRoles","_readableConsoleLog","nextRole","isClient","isContractor","back","forward","ComponentAction","reload","JSON","parse","stringify","emitClose","scopedSlots","_u","fn","errorData","errorAction","proxy","apiErrors","errors","Modal","$route","showDevTool","ShowNotification","eventData","_handleNotificationEvent","activeNavLink","navPath","path","PageHeader","Notification","DevToolbar","Loader","ErrorModal","ready","registered","cached","updatefound","updated","offline","authGuard","to","from","next","authService","isOfflineGuard","navigator","onLine","unAuthedRouteGuard","authRoutes","beforeEnter","_genericInit","newNetworkState","use","routes","redirect","Offline","concat","router","base","namespaced","getters","environmentTypes","CHANGE_ENVIRONMENT","SET_ENVIRONMENT","context","root","payload","payloadKeys","stateKeys","toReplaceValues","apiBaseUrl","auth0","showLoader","map","x","users","rootState","override","skipBoxData","boxListData","boxDataResponse","newApiStatus","tripCopy","reportRef","currentValue","itemIndex","tripHasChanged","Unchanged","Changed","shouldUpdateProject","some","successNotificationFn","toSaveReportRef","reportRelation","reportHasChanges","createPostPutModel","mergeTrips","tripsResponse","hasError","boxList","auth0ID","getBackedUpState","isAuthed","createStore","Store","LoadEnvironment","headers","envConfig","startNetworkCheckInterval","intervalMS","setInterval","triggerNetworkStatusEvent","networkCheck","unix","initInterceptors","interceptors","config","isCheckNetworkCall","url","token","Authorization","toJSON","response","hasErrors","toCommitMessages","stringSplice","str","count","add","directive","el","binding","maxLength","newValue","productionTip","env","store","h","$mount","timeoutInMS","getToBackUpState","currentState","TableNames","version","stores","stateBackup","table","StateBackup","db","initDB","openDB","checkDBUsage","isOpen","open","getLatestStoreBackup","collection","toCollection","last","saveStoreBackup","backupData","clear","clearStateBackup","getProjectData","upsertTrips","reportId","put","submitTrips","tripIds","rejectTrips","postProject","post","putProject","closeProject","approveTrips","getBoxList","Trip","tripNo","tripStatus","isNewTrip","status","boxNumber","boxName","startTimeDredging","startTimeDredgingDate","endTimeDredging","endTimeDredgingDate","startTimeDumping","startTimeDumpingDate","endTimeDumpingDate","volume","tds","delayType","startTimeDelay","startTimeDelayDate","endTimeDelay","endTimeDelayDate","remarks","forceMerge","fillFromApi","startTimeOffset","startTimeDredgingOffset","endTimeDredgingOffset","startTimeDumpingOffset","endTimeDumpingOffset","startTimeDelayOffset","endTimeDelayOffset","model","ValidationResult","postContractor","createPostPutBody","putContractor","deleteContractor","postShip","putShip","deleteShip","postUser","toBody","putUser","getUsers","userPasswordReset","deleteUser","delete"],"mappings":"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","file":"js/app.a04d4eb9.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/\" + ({\"AuthLogin\":\"AuthLogin\",\"ProjectOverview~ReportOverview\":\"ProjectOverview~ReportOverview\",\"ProjectOverview\":\"ProjectOverview\",\"ReportOverview\":\"ReportOverview\"}[chunkId]||chunkId) + \".\" + {\"AuthLogin\":\"5f0c8002\",\"ProjectOverview~ReportOverview\":\"7528ea99\",\"ProjectOverview\":\"75e86e8f\",\"ReportOverview\":\"126cd0af\",\"chunk-6b0879cd\":\"de98e591\"}[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 = {\"AuthLogin\":1,\"ProjectOverview~ReportOverview\":1,\"ProjectOverview\":1,\"chunk-6b0879cd\":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/\" + ({\"AuthLogin\":\"AuthLogin\",\"ProjectOverview~ReportOverview\":\"ProjectOverview~ReportOverview\",\"ProjectOverview\":\"ProjectOverview\",\"ReportOverview\":\"ReportOverview\"}[chunkId]||chunkId) + \".\" + {\"AuthLogin\":\"fa06c7ef\",\"ProjectOverview~ReportOverview\":\"22ccf793\",\"ProjectOverview\":\"63b0f1fe\",\"ReportOverview\":\"31d6cfe0\",\"chunk-6b0879cd\":\"147cde77\"}[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 enum EventBusEvent {\r\n Authed = 'authed',\r\n ShowNotification = 'showNotification',\r\n NetworkStatusChange = 'networkStatusChange',\r\n ComponentAction = 'ComponentAction',\r\n}\r\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!./Button.vue?vue&type=style&index=0&id=2ed34a4a&lang=scss&scoped=true&\"","import { ValidationResult } from '../validationResult.class';\r\n\r\nexport class Ship {\r\n id: number;\r\n name: string;\r\n type: string;\r\n maximumVolume: number; // beuninhoud m3\r\n validationResult?: ValidationResult = undefined;\r\n imo?: string;\r\n eni?: string;\r\n mmsi?: string;\r\n contractorId: number;\r\n\r\n constructor(s?: Ship) {\r\n this.id = s?.id ?? -1;\r\n this.name = s?.name ?? '';\r\n this.type = s?.type ?? '';\r\n this.maximumVolume = s?.maximumVolume ?? 0;\r\n this.imo = s?.imo ?? undefined;\r\n this.eni = s?.eni ?? undefined;\r\n this.mmsi = s?.mmsi ?? undefined;\r\n this.contractorId = s?.contractorId ?? -1;\r\n }\r\n\r\n validate(): ValidationResult {\r\n const validationResult = new ValidationResult();\r\n\r\n if (this.contractorId === -1) {\r\n validationResult.addError({\r\n message: 'Selecteer een aannemer.',\r\n });\r\n }\r\n\r\n if (this.name.trim() === '') {\r\n validationResult.addError({\r\n message: 'Vul een naam in.',\r\n });\r\n }\r\n\r\n if (!this.type) {\r\n validationResult.addError({\r\n message: 'Selecteer een type.',\r\n });\r\n }\r\n\r\n if (this.maximumVolume < 0) {\r\n validationResult.addError({\r\n message: 'Beuninhoud kan niet minder zijn dan 0.',\r\n });\r\n }\r\n\r\n this.validationResult = validationResult;\r\n\r\n return validationResult;\r\n }\r\n\r\n createPostPutBody(): any {\r\n const obj: any = {\r\n name: this.name,\r\n type: this.type,\r\n maximumVolume: this.maximumVolume,\r\n contractorId: this.contractorId,\r\n eni: this.eni,\r\n imo: this.imo,\r\n mmsi: this.mmsi,\r\n };\r\n\r\n if (this.id > -1) {\r\n obj['id'] = this.id;\r\n }\r\n\r\n return obj;\r\n }\r\n}\r\n","import Vue from 'vue';\r\nimport createAuth0Client, {\r\n Auth0Client,\r\n Auth0ClientOptions,\r\n BaseLoginOptions,\r\n getIdTokenClaimsOptions,\r\n GetTokenSilentlyOptions,\r\n GetTokenWithPopupOptions,\r\n LogoutOptions,\r\n} from '@auth0/auth0-spa-js';\r\nimport { vueInstance } from '../vueInstance';\r\nimport { EventBus } from '../eventBus/eventBus';\r\nimport { EventBusEvent } from '../eventBus/eventBusEvent.enum';\r\nimport Role from '@/typing/enums/role.enum';\r\n\r\nexport const sessionCheckExpiryDays = 100;\r\n\r\n/** Define a default action to perform after authentication */\r\n// eslint-disable-next-line\r\nconst DEFAULT_REDIRECT_CALLBACK = (appState?: any) => {\r\n window.history.replaceState({}, document.title, window.location.pathname);\r\n};\r\n\r\nlet instance: any;\r\n\r\n/** Returns the current instance of the SDK */\r\nexport const getInstance = () => instance;\r\n\r\n/** Creates an instance of the Auth0 SDK. If one has already been created, it returns that instance */\r\nexport const useAuth0 = ({\r\n onRedirectCallback = DEFAULT_REDIRECT_CALLBACK,\r\n redirectUri = `${window.location.origin}/auth/callback`,\r\n ...options\r\n}) => {\r\n if (instance) return instance;\r\n\r\n // The 'instance' is simply a Vue object\r\n instance = new Vue({\r\n data() {\r\n return {\r\n loading: true,\r\n isAuthenticated: false,\r\n user: {},\r\n auth0Client: null,\r\n popupOpen: false,\r\n error: null,\r\n };\r\n },\r\n methods: {\r\n /** Authenticates the user using a popup window */\r\n async loginWithPopup(o: BaseLoginOptions) {\r\n this.popupOpen = true;\r\n\r\n try {\r\n await (this.auth0Client as any).loginWithPopup(o);\r\n } catch (e) {\r\n // eslint-disable-next-line\r\n console.error(e);\r\n } finally {\r\n this.popupOpen = false;\r\n }\r\n\r\n this.user = await (this.auth0Client as any).getUser();\r\n this.isAuthenticated = true;\r\n },\r\n /** Handles the callback when logging in using a redirect */\r\n async handleRedirectCallback() {\r\n try {\r\n await (this.auth0Client as any).handleRedirectCallback();\r\n\r\n this.user = await (this\r\n .auth0Client as Auth0Client).getUser();\r\n this.isAuthenticated = true;\r\n } catch (e) {\r\n this.error = e;\r\n }\r\n },\r\n /** Authenticates the user using the redirect method */\r\n loginWithRedirect() {\r\n return (this.auth0Client as any).loginWithRedirect({\r\n redirectUri: `${window.location.origin}/auth/callback`,\r\n });\r\n },\r\n /** Returns all the claims present in the ID token */\r\n getIdTokenClaims(o: getIdTokenClaimsOptions) {\r\n return (this.auth0Client as any).getIdTokenClaims(o);\r\n },\r\n /** Returns the access token. If the token is invalid or missing, a new one is retrieved */\r\n getTokenSilently(o?: GetTokenSilentlyOptions) {\r\n return (this.auth0Client as any).getTokenSilently(o ?? {});\r\n },\r\n /** Gets the access token using a popup window */\r\n\r\n getTokenWithPopup(o: GetTokenWithPopupOptions) {\r\n return (this.auth0Client as any).getTokenWithPopup(o);\r\n },\r\n async getRole(): Promise {\r\n const roleKeyName = 'https://schemas.quickstarts.com/roles';\r\n\r\n const tokenObj = await this.getIdTokenClaims();\r\n if (!tokenObj) return null;\r\n\r\n if (\r\n !tokenObj[roleKeyName] ||\r\n !Array.isArray(tokenObj[roleKeyName])\r\n )\r\n return null;\r\n if (tokenObj[roleKeyName].length <= 0) {\r\n this.logout();\r\n return null;\r\n }\r\n\r\n return tokenObj[roleKeyName][0] as string;\r\n },\r\n async getUserId(): Promise {\r\n return (await this.getIdTokenClaims()).sub;\r\n },\r\n /** Logs the user out and removes their session on the authorization server */\r\n logout(o: LogoutOptions = { returnTo: window.location.origin }) {\r\n return (this.auth0Client as any).logout(o);\r\n },\r\n async instanceCreatedCallback() {\r\n this.auth0Client.checkSession();\r\n this.isAuthenticated = await this.auth0Client.isAuthenticated();\r\n if (this.isAuthenticated) {\r\n this.user = await this.auth0Client.getUser();\r\n }\r\n },\r\n checkAuthentication() {\r\n if (!this.isAuthenticated) {\r\n vueInstance().$router.push({ name: 'AuthLogin' });\r\n } else {\r\n EventBus.$emit(EventBusEvent.Authed);\r\n }\r\n },\r\n },\r\n /** Use this lifecycle method to instantiate the SDK client */\r\n async created() {\r\n (this.auth0Client as any) = await createAuth0Client({\r\n domain: options.domain,\r\n client_id: options.clientId,\r\n audience: options.audience,\r\n redirect_uri: redirectUri,\r\n cacheLocation: 'localstorage',\r\n sessionCheckExpiryDays,\r\n });\r\n\r\n try {\r\n // If the user is returning to the app after authentication..\r\n if (\r\n window.location.search.includes('code=') &&\r\n window.location.search.includes('state=')\r\n ) {\r\n // handle the redirect and retrieve tokens\r\n const { appState } = await (this\r\n .auth0Client as any).handleRedirectCallback();\r\n // Notify subscribers that the redirect callback has happened, passing the appState\r\n // (useful for retrieving any pre-authentication state)\r\n onRedirectCallback(appState);\r\n }\r\n } catch (e) {\r\n this.error = e;\r\n } finally {\r\n await this.instanceCreatedCallback();\r\n this.loading = false;\r\n }\r\n },\r\n });\r\n\r\n return instance;\r\n};\r\n\r\n// Create a simple Vue plugin to expose the wrapper object throughout the application\r\nexport const Auth0Plugin = {\r\n install(Vue: any, options: Auth0ClientOptions) {\r\n Vue.prototype.$auth = useAuth0(options);\r\n },\r\n};\r\n\r\nexport function isAuth0Loaded(): Promise {\r\n const poll = (resolve: any) => {\r\n if (getInstance() && !getInstance().loading) {\r\n resolve();\r\n } else {\r\n setTimeout(() => poll(resolve), 400);\r\n }\r\n };\r\n\r\n return new Promise(poll);\r\n}\r\n","export enum TripStatus {\r\n OpenSkipper = 'OpenSkipper',\r\n OpenContractor = 'OpenContractor',\r\n RejectedContractor = 'RejectedContractor',\r\n OpenClient = 'OpenClient', // Ingedient door aannemener bij opdrachtgever\r\n RejectedClient = 'RejectedClient',\r\n ApprovedClient = 'ApprovedClient'\r\n}\r\n","import { projectTypes } from '@/store/modules/project/projectTypes';\r\nimport { userTypes } from '@/store/modules/user/userTypes';\r\nimport { IState } from '@/store/state.interface';\r\nimport Role from '@/typing/enums/role.enum';\r\nimport { getInstance } from '@/utils/auth';\r\nimport { isUndefined } from '@/utils/isUndefined';\r\nimport { getState, vueInstance } from '@/utils/vueInstance';\r\nimport { RawLocation } from 'vue-router';\r\n\r\nexport default async function onAuthed(): Promise {\r\n const userRole = await getInstance().getRole();\r\n const userId = await getInstance().getUserId();\r\n\r\n vueInstance().$store.commit(userTypes.mutations.SET_ROLE, userRole);\r\n vueInstance().$store.commit(userTypes.mutations.SET_AUTH0_ID, userId);\r\n await vueInstance().$store.dispatch(\r\n projectTypes.actions.FETCH_PROJECT_DATA\r\n );\r\n\r\n const startRoute = getStartRouteByRole(userRole);\r\n\r\n try {\r\n await vueInstance().$router.push(startRoute);\r\n } catch {\r\n // Catch to supress 'duplicated' navigation error.\r\n return;\r\n }\r\n}\r\n\r\nfunction getStartRouteByRole(userRole: Role): RawLocation {\r\n let route: RawLocation;\r\n\r\n if (userRole === Role.Client) {\r\n route = { name: 'Projects' };\r\n } else if (userRole === Role.Contractor) {\r\n route = { name: 'Reports' };\r\n } else if (userRole === Role.Skipper) {\r\n const lastVisitedProject = checkLastVisitedProject();\r\n route = lastVisitedProject ?? { name: 'Reports' };\r\n } else {\r\n route = { name: 'Reports' };\r\n }\r\n\r\n return route;\r\n}\r\n\r\nfunction checkLastVisitedProject(): RawLocation | null {\r\n const lastVisitedProject = (vueInstance().$store.state as IState).project\r\n .lastVisitedProject;\r\n if (\r\n lastVisitedProject &&\r\n !isUndefined(lastVisitedProject.projectId) &&\r\n !isUndefined(lastVisitedProject.shipId)\r\n ) {\r\n if (\r\n getState().project.projectData?.getReport(\r\n lastVisitedProject.projectId,\r\n lastVisitedProject.shipId\r\n )\r\n ) {\r\n return {\r\n name: 'Project',\r\n params: {\r\n projectId: lastVisitedProject.projectId.toString(),\r\n shipId: lastVisitedProject.shipId.toString(),\r\n },\r\n };\r\n } else {\r\n vueInstance().$store.commit(\r\n projectTypes.mutations.SET_LAST_VISITED_PROJECT,\r\n undefined\r\n );\r\n }\r\n }\r\n return null;\r\n}\r\n","import Vue from 'vue';\r\nimport { EventBusEvent } from './eventBusEvent.enum';\r\nimport onAuthed from './listnerFuncs/onAuthed';\r\nimport onNetworkStateChange from './listnerFuncs/onNetworkStateChange';\r\n\r\nexport const EventBus = new Vue();\r\n\r\nexport function initGlobalListeners() {\r\n EventBus.$on(EventBusEvent.Authed, () => onAuthed());\r\n EventBus.$on(EventBusEvent.NetworkStatusChange, (isOnline: boolean) => onNetworkStateChange(isOnline));\r\n}\r\n","interface IProject {\r\n id?: number;\r\n name?: string;\r\n number?: string;\r\n description?: string;\r\n startDate?: string; // Datetime UTC\r\n contractorId?: number;\r\n}\r\n\r\nexport class Project implements IProject {\r\n id?: number;\r\n name?: string;\r\n number?: string;\r\n description?: string;\r\n startDate?: string; // Datetime UTC\r\n contractorId?: number;\r\n\r\n constructor(p?: IProject) {\r\n this.id = p?.id;\r\n this.name = p?.name;\r\n this.number = p?.number;\r\n this.description = p?.description;\r\n this.startDate = p?.startDate;\r\n this.contractorId = p?.contractorId;\r\n }\r\n\r\n merge(p: Project): Project {\r\n this.contractorId = p.contractorId;\r\n this.description = p.description;\r\n this.name = p.name;\r\n this.number = p.number;\r\n this.startDate = p.startDate;\r\n\r\n return this;\r\n }\r\n}\r\n","import $dayjs from '@/utils/dayjs';\r\nimport { getState } from '@/utils/vueInstance';\r\nimport { TripStatus } from '../enums/tripStatus.enum';\r\nimport TripStatusLocal from '../enums/tripStatusLocal.enum';\r\nimport { IReportRelationship } from '../reportRelationship.interface';\r\nimport { Trip } from './tripNew.class';\r\n\r\ninterface IReport {\r\n id?: number;\r\n concurrencyKey?: string;\r\n projectId?: number;\r\n shipId?: number;\r\n trips?: Trip[];\r\n}\r\n\r\nexport class Report implements IReport {\r\n id: number;\r\n concurrencyKey?: string;\r\n projectId: number;\r\n shipId: number;\r\n trips: Trip[];\r\n\r\n constructor(r?: IReport) {\r\n this.id = r?.id ?? -1;\r\n this.concurrencyKey = r?.concurrencyKey ?? undefined;\r\n this.projectId = r?.projectId ?? -1;\r\n this.shipId = r?.shipId ?? -1;\r\n this.trips = [];\r\n\r\n if (Array.isArray(r?.trips)) {\r\n r?.trips.sort((a, b) => (a.number ?? 0) - (b.number ?? 0));\r\n r?.trips.forEach((t: Trip) => {\r\n const trip = new Trip(t).merge(t, true);\r\n this.trips.push(trip);\r\n });\r\n }\r\n }\r\n\r\n merge(r: Report): Report {\r\n return this._mergeTrips(r.trips);\r\n }\r\n\r\n mergeTrips(trips: Trip[]): Report {\r\n return this._mergeTrips(trips);\r\n }\r\n\r\n addTrip(): Report {\r\n const lastTrip =\r\n this.trips.length > 0 ? this.trips[this.trips.length - 1] : null;\r\n const newTripNumber = lastTrip ? Number(lastTrip.number) + 1 : 1;\r\n const lastTripEndTime = lastTrip ? lastTrip.endTimeDumping : undefined;\r\n const lastFuelType = lastTrip ? lastTrip.fuel : undefined;\r\n const date = $dayjs().format('DD/MM/YYYY');\r\n const lastTripDate = lastTrip ? lastTrip.date : undefined;\r\n const lastTripDumpBox = lastTrip ? lastTrip.dumpBoxName : undefined;\r\n const lastTripSoilType = lastTrip ? lastTrip.soilType : undefined;\r\n\r\n const newTrip = new Trip(\r\n {\r\n startTime:\r\n lastTripDate && lastTripDate === date\r\n ? lastTripEndTime\r\n : $dayjs().format('HH:mm'),\r\n startTimeDate: $dayjs().format('YYYY-MM-DD'),\r\n fuel: lastFuelType,\r\n dumpBoxName: lastTripDumpBox,\r\n soilType: lastTripSoilType,\r\n } as any,\r\n newTripNumber,\r\n TripStatus.OpenSkipper\r\n );\r\n\r\n this.trips.push(newTrip);\r\n return this;\r\n }\r\n\r\n canAddNewTrip(): boolean {\r\n if (!this.trips || this.trips.length === 0) return true;\r\n\r\n const lastTrip = this.trips[this.trips.length - 1];\r\n return lastTrip.validate();\r\n }\r\n\r\n reportHasChanges(): boolean {\r\n const filter = (getState().project.toUpdateReports ?? []).filter(\r\n (r: IReportRelationship) =>\r\n r.projectId === this.projectId && r.shipId === this.shipId\r\n );\r\n\r\n return filter && filter.length > 0;\r\n }\r\n\r\n private _mergeTrips(trips: Trip[]): Report {\r\n const fetchedTripNumbers = trips.flatMap((t: Trip) => t.number);\r\n const toMergeTrips = this.trips.filter((t: Trip) =>\r\n fetchedTripNumbers.includes(t.number)\r\n );\r\n\r\n toMergeTrips.forEach((localTrip: Trip) => {\r\n const fetched = trips.find(\r\n (fetchedTrip: Trip) => fetchedTrip.number === localTrip.number\r\n );\r\n if (!fetched) return;\r\n localTrip.merge(fetched);\r\n });\r\n\r\n const newTrips = trips.filter(\r\n (t: Trip) =>\r\n this.trips.findIndex(\r\n (trip: Trip) => trip.number === t.number\r\n ) === -1\r\n );\r\n\r\n this.trips.push(...newTrips);\r\n\r\n const toDeleteTripIndexes: any[] = [];\r\n this.trips.forEach((t: Trip, index: number) => {\r\n if (t.apiStatus === TripStatusLocal.New) {\r\n return;\r\n }\r\n\r\n if (!t.number) {\r\n toDeleteTripIndexes.push(index);\r\n return;\r\n }\r\n\r\n if (t.number && !fetchedTripNumbers.includes(t.number)) {\r\n toDeleteTripIndexes.push(index);\r\n }\r\n });\r\n\r\n toDeleteTripIndexes.forEach((tripIndex: number) => {\r\n this.trips.splice(tripIndex, 1);\r\n });\r\n\r\n this.trips.sort(\r\n (a: Trip, b: Trip) => (a.number as number) - (b.number as number)\r\n );\r\n\r\n return this;\r\n }\r\n}\r\n","import { Contractor } from './contractor.class';\r\nimport { Project } from './project.class';\r\nimport { Report } from './report.class';\r\nimport { Ship } from './ship.class';\r\n\r\nexport class ProjectResponse {\r\n reports: Report[];\r\n projects: Project[];\r\n contractors: Contractor[];\r\n ships: Ship[];\r\n\r\n constructor(p?: ProjectResponse) {\r\n this.reports = [];\r\n this.projects = [];\r\n this.contractors = [];\r\n this.ships = [];\r\n\r\n if (p) {\r\n if (Array.isArray(p.reports)) {\r\n p.reports.forEach((report: Report) =>\r\n this.reports.push(new Report(report))\r\n );\r\n }\r\n\r\n if (Array.isArray(p.projects)) {\r\n p.projects.forEach((project: Project) =>\r\n this.projects.push(new Project(project))\r\n );\r\n }\r\n\r\n if (Array.isArray(p.contractors)) {\r\n p.contractors.forEach((contractor: Contractor) =>\r\n this.contractors.push(new Contractor(contractor))\r\n );\r\n }\r\n\r\n if (Array.isArray(p.ships)) {\r\n p.ships.forEach((ship: Ship) =>\r\n this.ships.push(new Ship(ship))\r\n );\r\n }\r\n }\r\n }\r\n\r\n public getContractorById(contractorId: number): Contractor | null { \r\n return this._getItemFromArray(\r\n this.contractors,\r\n (c: Contractor) => c.id === contractorId\r\n );\r\n }\r\n\r\n public getShipById(shipId: number): Ship | null {\r\n return this._getItemFromArray(this.ships, (s: Ship) => s.id === shipId);\r\n }\r\n\r\n public getProjectById(projectId: number): Project | null {\r\n return this._getItemFromArray(\r\n this.projects,\r\n (p: Project) => p.id === projectId\r\n );\r\n }\r\n\r\n public getReport(projectId: number, shipId: number): Report | null {\r\n return this._getItemFromArray(\r\n this.reports,\r\n (r: Report) => r.projectId === projectId && r.shipId === shipId\r\n );\r\n }\r\n\r\n // TODO: What happends when a report that the user is currently editing doesn't exist in the to merge response?\r\n public merge(p: ProjectResponse): ProjectResponse {\r\n const newData = new ProjectResponse(p);\r\n this.contractors = [...newData.contractors];\r\n this.ships = [...newData.ships];\r\n this.projects = [...newData.projects];\r\n\r\n const fetchedReportIds = p.reports.flatMap(\r\n (fetchedReport: Report) => fetchedReport.id\r\n );\r\n \r\n const toMergeReports = this.reports.filter((r: Report) =>\r\n fetchedReportIds.includes(r.id)\r\n );\r\n toMergeReports.forEach((localReport: Report) => {\r\n const fetched = p.reports.find(\r\n (fetchedReport: Project) => fetchedReport.id === localReport.id\r\n );\r\n if (!fetched) return;\r\n localReport.merge(fetched);\r\n });\r\n const newReports = p.reports.filter(\r\n (r: Report) =>\r\n this.reports.findIndex(\r\n (report: Report) => report.id === r.id\r\n ) === -1\r\n );\r\n this.reports.push(...newReports);\r\n\r\n return this;\r\n }\r\n\r\n private _getItemFromArray(\r\n arr: any[],\r\n filterFn: (val: any) => boolean\r\n ): any | null {\r\n const filtered = arr.filter(filterFn);\r\n return filtered.length > 0 ? filtered[0] : null;\r\n }\r\n}\r\n","const prefix = 'project/';\r\n\r\nexport const projectTypes = {\r\n actions: {\r\n FETCH_PROJECT_DATA: prefix + 'FETCH_PROJECT_DATA',\r\n UPDATE_TRIP: prefix + 'UPDATE_TRIP',\r\n CHECK_TO_UPDATE_REPORTS: prefix + 'CHECK_TO_UPDATE_REPORTS',\r\n SAVE_REPORT: prefix + 'SAVE_REPORT',\r\n },\r\n mutations: {\r\n SET_LAST_VISITED_PROJECT: prefix + 'SET_LAST_VISITED_PROJECT',\r\n SET_OR_MERGE_PROJECT_DATA: prefix + 'SET_OR_MERGE_PROJECT_DATA',\r\n SET_SHOULD_FETCH_PROJECT_DATA: prefix + 'SET_SHOULD_FETCH_PROJECT_DATA',\r\n SET_TRIP: prefix + 'SET_TRIP',\r\n SET_TO_UPDATE_REPORTS: prefix + 'SET_TO_UPDATE_REPORTS',\r\n SET_BOXLIST: prefix + 'SET_BOXLIST'\r\n }\r\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!./Loader.vue?vue&type=style&index=0&id=05c4b3c4&lang=scss&scoped=true&\"","const prefix = 'misc/';\r\n\r\nexport const miscTypes = {\r\n actions: {\r\n ADD_HEADER_NAV_LINK: prefix + 'ADD_HEADER_NAV_LINK',\r\n REMOVE_HEADER_NAV_LINKS: prefix + 'REMOVE_HEADER_NAV_LINKS',\r\n TOGGLE_LOADER: prefix + 'TOGGLE_LOADER',\r\n FETCH_USERS: prefix + 'FETCH_USERS'\r\n },\r\n mutations: {\r\n SET_IS_ONLINE: prefix + 'SET_IS_ONLINE',\r\n SET_PAGE_TITLE: prefix + 'SET_PAGE_TITLE',\r\n SET_HEADER_NAV_LINKS: prefix + 'SET_HEADER_NAV_LINKS',\r\n SET_SHOW_LOADER: prefix + 'SET_SHOW_LOADER',\r\n SET_API_ERRORS: prefix + 'SET_API_ERRORS',\r\n SET_USERS: prefix + 'SET_USERS'\r\n },\r\n};\r\n","import { EnvironmentState } from \"@/store/modules/environment/environmentModule.class\";\r\nimport { getState } from \"../vueInstance\";\r\n\r\nexport default function getEnv(): EnvironmentState {\r\n return getState().environment;\r\n}","import dayjs from 'dayjs';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport isBetween from 'dayjs/plugin/isBetween';\r\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\r\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\r\nimport duration from 'dayjs/plugin/duration';\r\nimport utc from 'dayjs/plugin/utc';\r\n\r\nconst $dayjs = dayjs;\r\n$dayjs.extend(utc);\r\n$dayjs.extend(customParseFormat);\r\n$dayjs.extend(duration);\r\n$dayjs.extend(isBetween);\r\n$dayjs.extend(isSameOrAfter);\r\n$dayjs.extend(isSameOrBefore);\r\n\r\nexport default $dayjs;\r\n\r\nexport function isTimeString(s: string): boolean {\r\n return $dayjs(s, 'HH:mm', true).isValid();\r\n}\r\n\r\nexport function isDateString(s: string): boolean {\r\n return $dayjs(s, 'YYYY-MM-DD', true).isValid();\r\n}\r\n\r\nexport function getTimeFromDateTime(s: string): string {\r\n return $dayjs(s).format('HH:mm');\r\n}\r\n\r\nexport function getDateFromDateTime(s: string): string {\r\n return $dayjs(s).format('YYYY-MM-DD');\r\n}\r\n\r\nexport function validateDateTime(\r\n date = '',\r\n time = '',\r\n customDateFormat?: string\r\n): boolean {\r\n const dateValid = $dayjs(\r\n date,\r\n customDateFormat ? customDateFormat : 'YYYY-MM-DD',\r\n true\r\n ).isValid();\r\n const timeValid = $dayjs(time, 'HH:mm', true).isValid();\r\n\r\n return dateValid && timeValid;\r\n}\r\n\r\nexport function createDateTime(\r\n date: string | undefined,\r\n time: string | undefined,\r\n customDateFormat?: string\r\n): any {\r\n if (!date || !time) return undefined;\r\n if (!validateDateTime(date, time, customDateFormat)) return undefined;\r\n\r\n return $dayjs(\r\n `${date} ${time}`,\r\n `${customDateFormat ? customDateFormat : 'YYYY-MM-DD'} HH:mm`\r\n )\r\n .local()\r\n .format();\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.active)?_c('div',{attrs:{\"tabindex\":\"-1\"}},[(_vm.active)?_c('div',{staticClass:\"n-modal-backdrop\",on:{\"click\":_vm.backdropClick}}):_vm._e(),_c('transition',{attrs:{\"name\":\"fade\"}},[_c('div',{staticClass:\"n-modal\",style:({ maxWidth: _vm.modalSize, zIndex: _vm.$props.onTop ? 99999 : null })},[(_vm.$props.showHeader)?_c('div',{staticClass:\"n-modal-header\"},[_c('h2',{staticClass:\"n-modal-header-title\"},[_vm._v(\" \"+_vm._s(_vm.$props.headerTitle ? _vm.$props.headerTitle : 'Header title')+\" \")]),(_vm.$props.showCloseButton)?_c('div',{staticClass:\"close material-icons\",on:{\"click\":_vm.closeModal}},[_vm._v(\" close \")]):_vm._e()]):_vm._e(),_c('div',{staticClass:\"n-modal-body\"},[_vm._t(\"body\",null,{\"slotData\":_vm.$props.slotData})],2),(_vm.$props.showFooter)?_c('div',{staticClass:\"n-modal-footer\"},[_vm._t(\"footer\",null,{\"slotData\":_vm.$props.slotData})],2):_vm._e()])])],1):_vm._e()}\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\n\n\n\n\n\n\n\n\r\nimport Component from 'vue-class-component';\r\nimport Vue from 'vue';\r\n\r\n@Component({\r\n props: {\r\n showHeader: {\r\n default: true,\r\n type: Boolean,\r\n },\r\n active: {\r\n default: true,\r\n type: Boolean,\r\n },\r\n showFooter: {\r\n default: true,\r\n type: Boolean,\r\n },\r\n closeOnBackdropClick: Boolean,\r\n showCloseButton: Boolean,\r\n headerTitle: String,\r\n slotData: {\r\n default: Object,\r\n },\r\n size: {\r\n type: String,\r\n default: 'md',\r\n },\r\n onTop: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n})\r\nexport default class Modal extends Vue {\r\n showModal = false;\r\n\r\n get modalSize(): string {\r\n const variant = this.$props.size;\r\n\r\n if (variant === 'md') return '800px';\r\n if (variant === 'lg') return '1000px';\r\n\r\n return '800px';\r\n }\r\n\r\n closeModal(): void {\r\n this.$emit('close');\r\n }\r\n\r\n backdropClick(): void {\r\n if (this.$props.closeOnBackdropClick) this.closeModal();\r\n }\r\n\r\n emitChange(changeName: string, value: any): void {\r\n this.$emit('change', { changeName, value });\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!./Modal.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!./Modal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Modal.vue?vue&type=template&id=907cab5e&scoped=true&\"\nimport script from \"./Modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./Modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Modal.vue?vue&type=style&index=0&id=907cab5e&lang=scss&scoped=true&\"\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 \"907cab5e\",\n null\n \n)\n\nexport default component.exports","enum TripStatusLocal {\r\n Unchanged = 'Unchanged',\r\n Changed = 'Changed',\r\n New = 'New'\r\n}\r\n\r\nexport default TripStatusLocal;","import Role from '../enums/role.enum';\r\nimport { ValidationResult } from '../validationResult.class';\r\n\r\nexport class User {\r\n auth0UserID: string;\r\n name: string;\r\n email: string;\r\n role?: Role;\r\n appMetadata?: IAuth0UserMetaData;\r\n\r\n validationResult?: ValidationResult = undefined;\r\n\r\n constructor(u?: User) {\r\n this.auth0UserID = u?.auth0UserID ?? '';\r\n this.name = u?.name ?? '';\r\n this.email = u?.email ?? '';\r\n this.role = u?.role ?? undefined;\r\n this.appMetadata = u?.appMetadata ?? {};\r\n }\r\n\r\n toBody(): any {\r\n const body: any = {\r\n auth0UserID: this.auth0UserID,\r\n name: this.name,\r\n email: this.email,\r\n role: this.role,\r\n appMetadata: this.appMetadata ?? {},\r\n };\r\n\r\n Object.keys(body.appMetadata).forEach(k => {\r\n body.appMetadata[k] = body.appMetadata\r\n ? body.appMetadata[k].toString()\r\n : null;\r\n });\r\n\r\n return body;\r\n }\r\n\r\n validate(): ValidationResult {\r\n const validationResult = new ValidationResult();\r\n\r\n if (this.name.trim() === '') {\r\n validationResult.addError({\r\n message: 'Gebruiker moet een naam hebben.',\r\n });\r\n }\r\n if (this.email.trim() === '') {\r\n validationResult.addError({\r\n message: 'Gebruiker moet een email hebben.',\r\n });\r\n }\r\n if (!this.role) {\r\n validationResult.addError({\r\n message: 'Gebruiker moet een rol hebben.',\r\n });\r\n }\r\n\r\n if (this.role === Role.Contractor) {\r\n if (\r\n !this.appMetadata ||\r\n (this.appMetadata && !this.appMetadata.contractorId)\r\n ) {\r\n validationResult.addError({\r\n message: 'Selecteer een aannemersbedrijf voor de aannemer.',\r\n });\r\n }\r\n }\r\n\r\n if (this.role === Role.Skipper) {\r\n if (\r\n !this.appMetadata ||\r\n (this.appMetadata && !this.appMetadata.shipId)\r\n ) {\r\n validationResult.addError({\r\n message: 'Selecteer een schip voor de schipper.',\r\n });\r\n }\r\n }\r\n\r\n this.validationResult = validationResult;\r\n\r\n return validationResult;\r\n }\r\n}\r\n\r\nexport interface IAuth0UserMetaData {\r\n shipId?: string;\r\n contractorId?: string;\r\n}\r\n","export const globalVueInstanceVariableName = '__app__';\r\nexport const useIndexedDB = '__useIndexedDB__';","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!./App.vue?vue&type=style&index=0&id=079d84fc&lang=scss&scoped=true&\"","export const userTypes = {\r\n actions: {},\r\n mutations: {\r\n SET_ROLE: 'user/SET_ROLE',\r\n SET_AUTH0_ID: 'user/SET_AUTH0_ID'\r\n }\r\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!./PageHeader.vue?vue&type=style&index=0&id=7f8e75d3&lang=scss&scoped=true&\"","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!./Notification.vue?vue&type=style&index=0&id=39d962a1&lang=scss&scoped=true&\"","import { miscTypes } from '@/store/modules/misc/miscTypes';\r\nimport { projectTypes } from '@/store/modules/project/projectTypes';\r\nimport Role from '@/typing/enums/role.enum';\r\nimport { getInstance } from '@/utils/auth';\r\nimport showNotification from '@/utils/notification';\r\nimport { getState, vueInstance } from '@/utils/vueInstance';\r\n\r\nexport default async function onNetworkStateChange(\r\n isOnline: boolean,\r\n onAppInit = false\r\n) {\r\n const lastOnlineState = getState().misc.isOnline;\r\n const newOnlineState = isOnline;\r\n const isAuthenticated = (vueInstance() as any).$auth.isAuthenticated;\r\n\r\n vueInstance().$store.commit(\r\n miscTypes.mutations.SET_IS_ONLINE,\r\n newOnlineState\r\n );\r\n\r\n if (lastOnlineState && !newOnlineState && isAuthenticated) {\r\n const role = await getInstance().getRole();\r\n if (role === Role.Skipper) {\r\n setTimeout(() => {\r\n showNotification('Connectie met internet verloren.');\r\n }, 500);\r\n }\r\n }\r\n\r\n if (!newOnlineState && lastOnlineState && isAuthenticated) {\r\n const role = await getInstance().getRole();\r\n if (role === Role.Client || role === Role.Contractor) {\r\n // TODO: Navigate to offline page.\r\n // Will need a watcher to navigate back to original screen.\r\n vueInstance().$router.push({ name: 'Offline' });\r\n }\r\n }\r\n\r\n if (!onAppInit && !lastOnlineState && newOnlineState) {\r\n if (isAuthenticated) {\r\n // Regained connection....\r\n showNotification('Connectie hersteld.');\r\n if (getState().project.shouldFetchProjectData) {\r\n vueInstance().$store.dispatch(\r\n projectTypes.actions.FETCH_PROJECT_DATA\r\n );\r\n }\r\n }\r\n }\r\n}\r\n","enum Role {\r\n Client = 'Client',\r\n Contractor = 'Contractor',\r\n Skipper = 'Skipper',\r\n}\r\n\r\nexport function readableRole(r: Role): string {\r\n switch (r) {\r\n case Role.Client:\r\n return 'Opdrachtgever';\r\n case Role.Contractor:\r\n return 'Aannemer';\r\n case Role.Skipper:\r\n return 'Schipper';\r\n default:\r\n return 'Onbekend';\r\n }\r\n}\r\n\r\nexport default Role;\r\n","import { IState } from '@/store/state.interface';\r\nimport { globalVueInstanceVariableName } from './customWindow';\r\n\r\nexport const vueInstance = (): Vue => {\r\n const instance = (window as any)[globalVueInstanceVariableName];\r\n \r\n if (!instance) {\r\n throw new Error(\r\n 'The Vue instance is either not created yet, or not globally available.'\r\n );\r\n }\r\n\r\n return instance;\r\n};\r\n\r\nexport function getState(): IState {\r\n return vueInstance().$store.state;\r\n}\r\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!./DevToolbar.vue?vue&type=style&index=0&id=f4555c36&lang=scss&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"btn\",class:[_vm.btnClassList],on:{\"click\":_vm.emitClick}},[_c('div',{staticClass:\"btn-content\"},[_vm._t(\"default\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\r\nimport Component from 'vue-class-component';\r\nimport BaseComponent from '../BaseComponent';\r\n\r\n@Component({\r\n props: {\r\n variant: String,\r\n disabled: Boolean,\r\n },\r\n})\r\nexport default class Button extends BaseComponent {\r\n get btnClassList(): string[] {\r\n const cL: string[] = [];\r\n\r\n if (this.$props.disabled) {\r\n cL.push('disabled');\r\n }\r\n\r\n cL.push(this.$props.variant);\r\n\r\n return cL;\r\n }\r\n\r\n emitClick(): void {\r\n this.$emit('click');\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!./Button.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!./Button.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Button.vue?vue&type=template&id=2ed34a4a&scoped=true&\"\nimport script from \"./Button.vue?vue&type=script&lang=ts&\"\nexport * from \"./Button.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Button.vue?vue&type=style&index=0&id=2ed34a4a&lang=scss&scoped=true&\"\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 \"2ed34a4a\",\n null\n \n)\n\nexport default component.exports","import { miscTypes } from '@/store/modules/misc/miscTypes';\r\nimport { IState } from '@/store/state.interface';\r\nimport Role from '@/typing/enums/role.enum';\r\nimport { getInstance } from '@/utils/auth';\r\nimport Vue from 'vue';\r\nimport Component from 'vue-class-component';\r\n\r\n@Component\r\nexport default class BaseComponent extends Vue {\r\n get $state(): IState {\r\n return this.$store.state as IState;\r\n }\r\n\r\n get isOnline(): boolean {\r\n return this.$state.misc.isOnline;\r\n }\r\n\r\n clog(val: any): void {\r\n console.log(val);\r\n }\r\n\r\n isLoggedIn(): boolean {\r\n return getInstance().isAuthenticated;\r\n }\r\n\r\n isClient(): boolean {\r\n return this.getRole() === Role.Client;\r\n }\r\n\r\n isContractor(): boolean {\r\n return this.getRole() === Role.Contractor;\r\n }\r\n\r\n isSkipper(): boolean {\r\n return this.getRole() === Role.Skipper;\r\n }\r\n\r\n protected _genericInit(clearNavLinks: boolean): void {\r\n if (clearNavLinks) {\r\n this.$store.dispatch(miscTypes.actions.REMOVE_HEADER_NAV_LINKS);\r\n }\r\n }\r\n\r\n protected _setPageName(pageTitle: string): void {\r\n this.$store.commit(miscTypes.mutations.SET_PAGE_TITLE, pageTitle);\r\n }\r\n\r\n protected getRole(): Role.Client | Role.Contractor | Role.Skipper {\r\n return this.$state.user.role as\r\n | Role.Client\r\n | Role.Contractor\r\n | Role.Skipper;\r\n }\r\n\r\n protected _toggleLoader(): void {\r\n this.$store.dispatch(miscTypes.actions.TOGGLE_LOADER);\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"d-flex flex-column app-wrapper\",class:{ 'app-wrapper--report-page': _vm.isReportPage }},[_c('PageHeader',{attrs:{\"navItems\":_vm.headerNavLinks,\"pageName\":_vm.pageName,\"showLogout\":_vm.showLogout},on:{\"toggledNavLink\":function($event){return _vm.toggledNavLinkListener($event)}}}),_c('router-view'),_c('Notification',{attrs:{\"show\":_vm.showNotification,\"notificationText\":_vm.notificationText}}),(_vm.showDevToolbar)?_c('DevToolbar',{on:{\"close\":function($event){_vm.devToolbarClosed = true}}}):_vm._e(),_c('Loader'),_c('ErrorModal')],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('div',{staticClass:\"wrapper\"},[_c('div',{staticClass:\"header-wrapper\"},[_c('div',{staticClass:\"header-col\"},[_c('div',{staticClass:\"title\"},[_c('img',{staticClass:\"nsp-logo\",attrs:{\"src\":\"/img/nsp_logo.svg\",\"alt\":\"Nort Sea Port logo\"}}),_c('div',{staticClass:\"title-text\"},[_vm._v(\" \"+_vm._s(_vm.title)+\" \")])]),_c('div',{staticClass:\"d-flex align-items-center\"},[_c('Button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showLogout),expression:\"showLogout\"}],attrs:{\"variant\":\"nsp-outline\"},on:{\"click\":_vm.logout}},[_c('span',{staticClass:\"material-icons\"},[_vm._v(\"account_circle\")]),_vm._v(\" Uitloggen \")])],1)])]),_c('div',{staticClass:\"nav-wrapper\"},[_vm._l((_vm.navLinks),function(item,i){return _c('div',{key:i,staticClass:\"nav-item\",class:{ active: item.active },on:{\"click\":function($event){return _vm.toggleNavItemActive(i)}}},[_c('div',{staticClass:\"nav-item-label\"},[_vm._v(\" \"+_vm._s(item.label)+\" \")])])}),_c('div',{staticClass:\"active-nav-item-bar\",style:({\n left: _vm.navItemActiveBarStyles.left,\n width: _vm.navItemActiveBarStyles.width,\n })})],2),_c('transition',{attrs:{\"name\":\"fade\"}},[(!_vm.$state.misc.isOnline && _vm.$auth.isAuthenticated)?_c('div',{staticClass:\"offline-bar\"},[_vm._v(\" Er is geen internet verbinding, sommige functionaliteiten zijn uitgeschakeld. \")]):_vm._e()])],1)}\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport BaseComponent from '@/components/BaseComponent';\r\nimport Component from 'vue-class-component';\r\nimport Button from '@/components/Button/Button.vue';\r\nimport IHeaderNavLink from '@/typing/headerNavLink.interface';\r\nimport { getInstance } from '@/utils/auth';\r\n\r\n@Component({\r\n props: {\r\n pageName: String,\r\n showLogout: Boolean,\r\n navItems: {\r\n default: Array,\r\n type: Array,\r\n },\r\n },\r\n components: {\r\n Button,\r\n },\r\n})\r\nexport default class PageHeader extends BaseComponent {\r\n get title(): string {\r\n return this.$props.pageName ?? 'Page Title Placeholder';\r\n }\r\n\r\n get navLinks(): IHeaderNavLink[] {\r\n return this.$props.navItems;\r\n }\r\n\r\n navItemActiveBarStyles: { width: string; left: string } = {\r\n width: '0',\r\n left: '0',\r\n };\r\n\r\n mounted(): void {\r\n this.$nextTick(this.calculateActiveNavItemBarPosition);\r\n\r\n this.$watch(\r\n () => this.navLinks,\r\n () => {\r\n this.$nextTick(() => this.calculateActiveNavItemBarPosition());\r\n }\r\n );\r\n }\r\n\r\n logout(): void {\r\n getInstance().logout();\r\n }\r\n\r\n toggleNavItemActive(navItemIndex: number): void {\r\n const links: IHeaderNavLink[] = [...this.navLinks];\r\n\r\n links.forEach((item: any) => (item.active = false));\r\n links[navItemIndex].active = true;\r\n\r\n this.$emit('toggledNavLink', links);\r\n\r\n this.$nextTick(this.calculateActiveNavItemBarPosition);\r\n }\r\n\r\n calculateActiveNavItemBarPosition(): void {\r\n const activeNavItem = document.querySelector(\r\n '.nav-wrapper .nav-item.active .nav-item-label'\r\n );\r\n const defaultValue = (this.navItemActiveBarStyles = {\r\n width: '0',\r\n left: '0',\r\n });\r\n\r\n if (!activeNavItem) {\r\n this.navItemActiveBarStyles = defaultValue;\r\n return;\r\n }\r\n\r\n try {\r\n const textPositions = activeNavItem.getClientRects()[0];\r\n const extraBarWidth = 12;\r\n const leftPosition = Math.ceil(textPositions.left) - extraBarWidth / 2;\r\n\r\n this.navItemActiveBarStyles = {\r\n width: `${textPositions.width + extraBarWidth}px`,\r\n left: `${leftPosition}px`,\r\n };\r\n } catch {\r\n this.navItemActiveBarStyles = defaultValue;\r\n }\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!./PageHeader.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!./PageHeader.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PageHeader.vue?vue&type=template&id=7f8e75d3&scoped=true&\"\nimport script from \"./PageHeader.vue?vue&type=script&lang=ts&\"\nexport * from \"./PageHeader.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./PageHeader.vue?vue&type=style&index=0&id=7f8e75d3&lang=scss&scoped=true&\"\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 \"7f8e75d3\",\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('transition',{attrs:{\"name\":\"popup\"}},[(_vm.show)?_c('div',{staticClass:\"notification\"},[_vm._v(_vm._s(_vm.notificationText ? _vm.notificationText : 'undefined, this shouldn\\'t be happening.'))]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\r\nimport Component from 'vue-class-component';\r\nimport BaseComponent from '../BaseComponent';\r\n\r\n@Component({\r\n props: {\r\n show: Boolean,\r\n notificationText: String,\r\n },\r\n})\r\nexport default class Notification extends BaseComponent {}\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!./Notification.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!./Notification.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Notification.vue?vue&type=template&id=39d962a1&scoped=true&\"\nimport script from \"./Notification.vue?vue&type=script&lang=ts&\"\nexport * from \"./Notification.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Notification.vue?vue&type=style&index=0&id=39d962a1&lang=scss&scoped=true&\"\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 \"39d962a1\",\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('div',{staticClass:\"wrapper\"},[_c('span',[_vm._v(\"Debugging env: \"),_c('b',[_vm._v(_vm._s(_vm.envName))])]),_c('button',{on:{\"click\":_vm.logEnvironment}},[_vm._v(\"Log environment\")]),_c('button',{on:{\"click\":_vm.logState}},[_vm._v(\"Log full state\")]),_c('button',{on:{\"click\":_vm.componentAction}},[_vm._v(\"Component action\")]),_c('button',{on:{\"click\":_vm.toggleOnlineState}},[_vm._v(\" Toggle online state, current: \"+_vm._s(_vm.$state.misc.isOnline)+\" \")]),_c('button',{on:{\"click\":_vm.toggleRole}},[_vm._v(\"Toggle role, current: \"+_vm._s(_vm.currentRole))]),(_vm.isLoggedIn)?_c('button',{on:{\"click\":_vm.logJWT}},[_vm._v(\"Log JWT\")]):_vm._e(),_c('button',{on:{\"click\":_vm.clearRefresh}},[_vm._v(\"Clear IndexedDB and refresh\")]),_c('button',{on:{\"click\":function($event){return _vm.$emit('close')}}},[_vm._v(\"close this bar\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { miscTypes } from '@/store/modules/misc/miscTypes';\r\nimport { userTypes } from '@/store/modules/user/userTypes';\r\nimport Role from '@/typing/enums/role.enum';\r\nimport { getInstance } from '@/utils/auth';\r\nimport { clearStateBackup } from '@/utils/dexieDB';\r\nimport { EventBus } from '@/utils/eventBus/eventBus';\r\nimport { EventBusEvent } from '@/utils/eventBus/eventBusEvent.enum';\r\nimport Component from 'vue-class-component';\r\nimport BaseComponent from '../BaseComponent';\r\n\r\n@Component\r\nexport default class DevToolbar extends BaseComponent {\r\n public switchingRoles = false;\r\n\r\n get envName(): string {\r\n return this.$state.environment.envName ?? 'Undefined';\r\n }\r\n\r\n get currentRole(): string {\r\n return this.$state.user.role ?? 'Undefined';\r\n }\r\n\r\n logEnvironment() {\r\n this._readableConsoleLog(this.$state.environment);\r\n }\r\n\r\n logState() {\r\n this._readableConsoleLog(this.$state);\r\n }\r\n\r\n toggleOnlineState() {\r\n console.log('Toggled online state to:', !this.$state.misc.isOnline);\r\n this.$store.commit(\r\n miscTypes.mutations.SET_IS_ONLINE,\r\n !this.$state.misc.isOnline\r\n );\r\n }\r\n\r\n toggleRole() {\r\n if (this.switchingRoles) return;\r\n this.switchingRoles = true;\r\n\r\n let nextRole;\r\n\r\n if (this.isClient()) {\r\n nextRole = Role.Contractor;\r\n } else if (this.isContractor()) {\r\n nextRole = Role.Skipper;\r\n } else {\r\n nextRole = Role.Client;\r\n }\r\n\r\n console.log('Toggled role to:', nextRole);\r\n this.$store.commit(userTypes.mutations.SET_ROLE, nextRole);\r\n\r\n // Refresh component\r\n this.$nextTick(() => {\r\n this.$router.back();\r\n\r\n this.$nextTick(() => {\r\n this.$router.forward();\r\n this.switchingRoles = false;\r\n });\r\n });\r\n }\r\n\r\n async logJWT(): Promise {\r\n this._readableConsoleLog(await getInstance().getTokenSilently());\r\n }\r\n\r\n componentAction(): void {\r\n EventBus.$emit(EventBusEvent.ComponentAction);\r\n }\r\n\r\n async clearRefresh(): Promise {\r\n await clearStateBackup();\r\n setTimeout(() => {\r\n window.location.reload();\r\n }, 500);\r\n }\r\n\r\n private _readableConsoleLog(val: any): any {\r\n console.log(\r\n JSON.parse(\r\n JSON.stringify(val, (key: any, value: any) =>\r\n value === undefined ? null : value\r\n )\r\n )\r\n );\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!./DevToolbar.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!./DevToolbar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./DevToolbar.vue?vue&type=template&id=f4555c36&scoped=true&\"\nimport script from \"./DevToolbar.vue?vue&type=script&lang=ts&\"\nexport * from \"./DevToolbar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./DevToolbar.vue?vue&type=style&index=0&id=f4555c36&lang=scss&scoped=true&\"\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 \"f4555c36\",\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('transition',{attrs:{\"name\":\"fade\"}},[(_vm.$state.misc.showLoader)?_c('div',{staticClass:\"loader-container\"},[_c('div',{staticClass:\"loader\"})]):_vm._e()])}\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\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\n\n\n\n\n\n\n\r\nimport Component from 'vue-class-component';\r\nimport BaseComponent from './BaseComponent';\r\n\r\n@Component\r\nexport default class Loader extends BaseComponent {}\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!./Loader.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!./Loader.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Loader.vue?vue&type=template&id=05c4b3c4&scoped=true&\"\nimport script from \"./Loader.vue?vue&type=script&lang=ts&\"\nexport * from \"./Loader.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Loader.vue?vue&type=style&index=0&id=05c4b3c4&lang=scss&scoped=true&\"\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 \"05c4b3c4\",\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 (_vm.showModal)?_c('Modal',{attrs:{\"headerTitle\":'Er zijn fouten opgetreden',\"showCloseButton\":true,\"closeOnBackdropClick\":true,\"size\":'lg',\"onTop\":true},on:{\"close\":_vm.emitClose},scopedSlots:_vm._u([{key:\"body\",fn:function(){return [_c('p',[_vm._v(_vm._s(_vm.errorData.errorAction))]),_c('ul',_vm._l((_vm.errorData.errors),function(e,i){return _c('li',{key:i},[_vm._v(\" \"+_vm._s(e)+\" \")])}),0)]},proxy:true}],null,false,3280254942)}):_vm._e()}\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\r\nimport BaseComponent from './BaseComponent';\r\nimport Component from 'vue-class-component';\r\nimport Modal from '@/components/Modal/Modal.vue';\r\n\r\n@Component({\r\n components: {\r\n Modal,\r\n },\r\n})\r\nexport default class ErrorModal extends BaseComponent {\r\n showModal = false;\r\n errorData: any = null;\r\n\r\n mounted(): void {\r\n this.$watch(\r\n () => this.$state.misc.apiErrors,\r\n () => {\r\n if (this.$state.misc.apiErrors.length > 0) {\r\n this.errorData = {\r\n errorAction: '',\r\n errors: this.$state.misc.apiErrors,\r\n };\r\n this.showModal = true;\r\n }\r\n }\r\n );\r\n }\r\n\r\n emitClose(): void {\r\n this.showModal = false;\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!./ErrorModal.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!./ErrorModal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ErrorModal.vue?vue&type=template&id=5c2c41e5&scoped=true&\"\nimport script from \"./ErrorModal.vue?vue&type=script&lang=ts&\"\nexport * from \"./ErrorModal.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 \"5c2c41e5\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component } from 'vue-property-decorator';\r\nimport BaseComponent from '@/components/BaseComponent';\r\nimport PageHeader from '@/components/PageHeader/PageHeader.vue';\r\nimport Notification from '@/components/Notification/Notification.vue';\r\nimport IHeaderNavLink from './typing/headerNavLink.interface';\r\nimport { miscTypes } from './store/modules/misc/miscTypes';\r\nimport { getInstance } from './utils/auth';\r\nimport { EventBus } from './utils/eventBus/eventBus';\r\nimport { EventBusEvent } from './utils/eventBus/eventBusEvent.enum';\r\nimport DevToolbar from '@/components/DevToolbar/DevToolbar.vue';\r\nimport Loader from '@/components/Loader.vue';\r\nimport ErrorModal from '@/components/ErrorModal.vue';\r\n\r\n@Component({\r\n components: {\r\n PageHeader,\r\n Notification,\r\n DevToolbar,\r\n Loader,\r\n ErrorModal,\r\n },\r\n})\r\nexport default class App extends BaseComponent {\r\n showNotification = false;\r\n notificationText = '';\r\n devToolbarClosed = false;\r\n\r\n get isReportPage(): boolean {\r\n return this.$route.name === 'Project';\r\n }\r\n\r\n get showDevToolbar(): boolean {\r\n return !this.devToolbarClosed && this.$state.environment.showDevTool;\r\n }\r\n\r\n get showLogout(): boolean {\r\n return getInstance().isAuthenticated;\r\n }\r\n\r\n get pageName(): string {\r\n return this.$state.misc.pageTitle;\r\n }\r\n\r\n get headerNavLinks(): IHeaderNavLink[] {\r\n return this.$state.misc.headerNavLinks;\r\n }\r\n\r\n mounted(): void {\r\n EventBus.$on(EventBusEvent.ShowNotification, (eventData: any) => {\r\n this._handleNotificationEvent(eventData);\r\n });\r\n }\r\n\r\n toggledNavLinkListener(navLinks: IHeaderNavLink[]): void {\r\n const activeNavLink = navLinks.filter((n: IHeaderNavLink) => n.active);\r\n\r\n if (activeNavLink.length > 0) {\r\n if (activeNavLink[0].navPath) {\r\n this.$router.push({ path: activeNavLink[0].navPath });\r\n }\r\n }\r\n this.$store.commit(miscTypes.mutations.SET_HEADER_NAV_LINKS, navLinks);\r\n }\r\n\r\n private _handleNotificationEvent(eventData: {\r\n notificationText: string;\r\n timeout: number;\r\n }): void {\r\n this.notificationText = eventData.notificationText;\r\n this.showNotification = true;\r\n\r\n setTimeout(() => {\r\n this.showNotification = false;\r\n }, eventData.timeout);\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!./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=079d84fc&scoped=true&\"\nimport script from \"./App.vue?vue&type=script&lang=ts&\"\nexport * from \"./App.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=079d84fc&lang=scss&scoped=true&\"\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 \"079d84fc\",\n null\n \n)\n\nexport default component.exports","/* eslint-disable no-console */\r\nimport { register } from 'register-service-worker';\r\n\r\nif (process.env.NODE_ENV === 'production') {\r\n register(window.location.origin + '/serviceWorker.js', {\r\n ready() {\r\n console.log('App is being served from cache by a service worker.');\r\n },\r\n registered() {\r\n console.log('Service worker has been registered.');\r\n },\r\n cached() {\r\n console.log('Content has been cached for offline use.');\r\n },\r\n updatefound() {\r\n console.log('New content is downloading.');\r\n },\r\n updated() {\r\n // console.log('New content is available; please refresh.')\r\n window.location.reload();\r\n },\r\n offline() {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n },\r\n error(error) {\r\n console.error('Error during service worker registration:', error);\r\n },\r\n });\r\n}\r\n","import { getInstance } from '.';\r\n\r\nexport default function authGuard(to: any, from: any, next: any) {\r\n const authService = getInstance();\r\n\r\n const fn = () => {\r\n // If the user is authenticated, continue with the route\r\n if (authService.isAuthenticated) {\r\n next();\r\n return;\r\n }\r\n\r\n // Otherwise, log in\r\n next({ name: 'AuthLogin' });\r\n };\r\n\r\n // If loading has already finished, check our auth state using `fn()`\r\n if (!authService.loading) {\r\n return fn();\r\n }\r\n\r\n // Watch for the loading property to change before we check isAuthenticated\r\n authService.$watch('loading', (loading: boolean) => {\r\n if (loading === false) {\r\n return fn();\r\n }\r\n });\r\n}\r\n","export default function isOfflineGuard(to: any, from: any, next: any) {\r\n if (!navigator.onLine) {\r\n next();\r\n } else {\r\n return;\r\n }\r\n}\r\n","import { getInstance } from '.';\r\n\r\nexport default function unAuthedRouteGuard(to: any, from: any, next: any) {\r\n const authService = getInstance();\r\n \r\n\r\n const fn = () => {\r\n if (!authService.isAuthenticated) {\r\n // If the user is not authenticated, continue with the route\r\n next();\r\n return;\r\n }\r\n \r\n next({ name: 'Reports' });\r\n };\r\n\r\n // If loading has already finished, check our auth state using `fn()`\r\n if (!authService.loading) {\r\n return fn();\r\n }\r\n\r\n // Watch for the loading property to change before we check isAuthenticated\r\n authService.$watch('loading', (loading: boolean) => {\r\n if (loading === false) {\r\n return fn();\r\n }\r\n });\r\n}\r\n","import unAuthedRouteGuard from '@/utils/auth/unAuthedRouteGuard';\r\nimport { RouteConfig } from 'vue-router';\r\n\r\nconst authRoutes: Array = [\r\n {\r\n path: '/auth/callback',\r\n name: 'AuthCallback',\r\n component: () => import(/* webpackChunkName: \"AuthLogin\" */ '../views/auth/Callback.vue')\r\n },\r\n {\r\n path: '/auth/login',\r\n name: 'AuthLogin',\r\n beforeEnter: unAuthedRouteGuard,\r\n component: () => import(/* webpackChunkName: \"AuthLogin\" */ '../views/auth/Login.vue')\r\n }\r\n];\r\n\r\nexport default authRoutes;\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.showModal)?_c('Modal',{attrs:{\"headerTitle\":'Offline',\"showCloseButton\":false,\"showFooter\":false,\"closeOnBackdropClick\":false},scopedSlots:_vm._u([{key:\"body\",fn:function(){return [_c('p',[_vm._v(\" De connectie met het internet is verloren, deze applicatie is alleen te gebruiken met een internet connectie. \")]),_c('p',[_vm._v(\" Wanneer de internet connectie hersteld is zal er teruggenavigeerd worden naar het vorige scherm. \")]),_c('p',[_vm._v(\" Of \"),_c('a',{staticClass:\"link\",on:{\"click\":_vm.logout}},[_vm._v(\"klik hier\")]),_vm._v(\" om uit te loggen. \")])]},proxy:true}],null,false,3216266768)}):_vm._e()],1)}\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\n\n\n\r\nimport BaseComponent from '@/components/BaseComponent';\r\nimport Component from 'vue-class-component';\r\nimport Modal from '@/components/Modal/Modal.vue';\r\nimport { EventBus } from '@/utils/eventBus/eventBus';\r\nimport { EventBusEvent } from '@/utils/eventBus/eventBusEvent.enum';\r\nimport { miscTypes } from '@/store/modules/misc/miscTypes';\r\n\r\n@Component({\r\n components: {\r\n Modal,\r\n },\r\n})\r\nexport default class OfflinePage extends BaseComponent {\r\n showModal = false;\r\n\r\n mounted(): void {\r\n this._genericInit(true);\r\n this.$store.commit(miscTypes.mutations.SET_PAGE_TITLE, 'Offline');\r\n\r\n setTimeout(() => {\r\n this.showModal = true;\r\n }, 500);\r\n\r\n EventBus.$on(\r\n EventBusEvent.NetworkStatusChange,\r\n (newNetworkState: boolean) => {\r\n if (newNetworkState) {\r\n try {\r\n this.$router.back();\r\n } catch {\r\n this.$router.push({ name: 'Root' });\r\n }\r\n }\r\n }\r\n );\r\n }\r\n\r\n logout(): void {\r\n (this as any).$auth.logout();\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!./Offline.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!./Offline.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Offline.vue?vue&type=template&id=6c094003&scoped=true&\"\nimport script from \"./Offline.vue?vue&type=script&lang=ts&\"\nexport * from \"./Offline.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 \"6c094003\",\n null\n \n)\n\nexport default component.exports","import authGuard from '@/utils/auth/authRouteGuard';\r\nimport isOfflineGuard from '@/utils/isOfflineGuard';\r\nimport Vue from 'vue';\r\nimport VueRouter, { RouteConfig } from 'vue-router';\r\nimport authRoutes from './authRoutes';\r\nimport Offline from '@/views/Offline.vue';\r\n\r\nVue.use(VueRouter);\r\n\r\nconst routes: Array = [\r\n {\r\n path: '/',\r\n name: 'Root',\r\n redirect: '/auth/login',\r\n },\r\n {\r\n path: '/reports',\r\n name: 'Reports',\r\n beforeEnter: authGuard,\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"ReportOverview\" */ '../views/ReportOverview.vue'\r\n ),\r\n },\r\n {\r\n path: '/projects',\r\n name: 'Projects',\r\n beforeEnter: authGuard,\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"ProjectOverview\" */ '../views/ProjectOverview.vue'\r\n ),\r\n },\r\n {\r\n path: '/export',\r\n name: 'Export',\r\n beforeEnter: authGuard,\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"ProjectOverview\" */ '../views/ReportExport.vue'\r\n ),\r\n },\r\n {\r\n path: '/manage',\r\n name: 'Manage',\r\n beforeEnter: authGuard,\r\n component: () =>\r\n import(\r\n /* webpackChunkName: \"ProjectOverview\" */ '../views/Manage.vue'\r\n ),\r\n },\r\n {\r\n path: '/project/:projectId/report/:shipId',\r\n name: 'Project',\r\n props: true,\r\n beforeEnter: authGuard,\r\n component: () =>\r\n import(\r\n /* webpackChuckName: \"ProjectPage\" */ '../views/ProjectPage/ProjectPage.vue'\r\n ),\r\n },\r\n {\r\n path: '/offline',\r\n name: 'Offline',\r\n beforeEnter: isOfflineGuard,\r\n component: Offline,\r\n },\r\n].concat(authRoutes as any[]);\r\n\r\nconst router = new VueRouter({\r\n mode: 'history',\r\n base: process.env.BASE_URL,\r\n routes,\r\n});\r\n\r\nexport default router;\r\n","import { ActionTree, GetterTree, Module, MutationTree } from \"vuex\";\r\n\r\nexport class BaseStoreModule implements Module {\r\n namespaced = false;\r\n state: any; \r\n actions: ActionTree = {};\r\n mutations: MutationTree = {};\r\n getters: GetterTree = {};\r\n\r\n constructor(module: BaseStoreModule) {\r\n this.namespaced = module.namespaced;\r\n this.state = module.state;\r\n this.actions = module.actions;\r\n this.mutations = module.mutations\r\n this.getters = module.getters;\r\n }\r\n}","export const environmentTypes = {\r\n actions: {\r\n CHANGE_ENVIRONMENT: 'environment/CHANGE_ENVIRONMENT'\r\n },\r\n mutations: {\r\n SET_ENVIRONMENT: 'environment/SET_ENVIRONMENT'\r\n }\r\n}","import { IState } from '@/store/state.interface';\r\nimport { ActionContext, ActionTree } from 'vuex';\r\nimport { EnvironmentState } from './environmentModule.class';\r\nimport { environmentTypes } from './environmentTypes';\r\n\r\nconst actions: ActionTree = {\r\n CHANGE_ENVIRONMENT: async (\r\n context: ActionContext,\r\n data: any\r\n ) => {\r\n context.commit(\r\n environmentTypes.mutations.SET_ENVIRONMENT,\r\n data,\r\n { root: true }\r\n );\r\n },\r\n};\r\n\r\nexport default actions;\r\n","import { GetterTree } from \"vuex\";\r\n\r\nconst getters: GetterTree = {};\r\n\r\nexport default getters;","import { MutationTree } from 'vuex';\r\nimport { EnvironmentState } from './environmentModule.class';\r\n\r\nconst mutations: MutationTree = {\r\n SET_ENVIRONMENT: (state: EnvironmentState, payload: any) => {\r\n const payloadKeys = Object.keys(payload);\r\n const stateKeys = Object.keys(state);\r\n\r\n const toReplaceValues = payloadKeys.filter((k: string) => stateKeys.includes(k));\r\n toReplaceValues.forEach((k: string) => {\r\n (state as any)[k] = payload[k]; \r\n });\r\n },\r\n};\r\n\r\nexport default mutations;\r\n","import { Module } from \"vuex\";\r\nimport { BaseStoreModule } from \"../baseStoreModule.class\";\r\nimport actions from \"./actions\";\r\nimport getters from \"./getters\";\r\nimport mutations from \"./mutations\";\r\n\r\nexport class EnvironmentStateModule extends BaseStoreModule {\r\n constructor(state?: EnvironmentState) {\r\n super({\r\n namespaced: true,\r\n state: new EnvironmentState(state),\r\n actions,\r\n mutations,\r\n getters\r\n }); \r\n }\r\n\r\n getModule(): Module {\r\n return {\r\n namespaced: this.namespaced,\r\n state: this.state,\r\n actions: this.actions,\r\n mutations: this.mutations,\r\n getters: this.getters\r\n }\r\n }\r\n}\r\n\r\nexport class EnvironmentState {\r\n apiBaseUrl: string | undefined;\r\n envName: string | undefined;\r\n auth0: IAuth0Environment | undefined;\r\n showDevTool: boolean;\r\n\r\n constructor(state?: EnvironmentState) {\r\n this.apiBaseUrl = state?.apiBaseUrl ?? undefined;\r\n this.envName = state?.envName ?? undefined;\r\n this.auth0 = state?.auth0 ?? undefined;\r\n this.showDevTool = state?.showDevTool ?? false;\r\n }\r\n}\r\n\r\ninterface IAuth0Environment {\r\n domain: string;\r\n clientId: string;\r\n audience: string;\r\n}","import { getUsers } from '@/api/manage';\r\nimport { IState } from '@/store/state.interface';\r\nimport { User } from '@/typing/api/user.class';\r\nimport IHeaderNavLink from '@/typing/headerNavLink.interface';\r\nimport showNotification from '@/utils/notification';\r\nimport { ActionContext, ActionTree } from 'vuex';\r\nimport { MiscState } from './miscModule.class';\r\nimport { miscTypes } from './miscTypes';\r\n\r\nconst actions: ActionTree = {\r\n ADD_HEADER_NAV_LINK: (context: any, data: IHeaderNavLink) => {\r\n context.commit(\r\n miscTypes.mutations.SET_HEADER_NAV_LINKS,\r\n [...context.state.headerNavLinks, data],\r\n { root: true }\r\n );\r\n },\r\n REMOVE_HEADER_NAV_LINKS: (context: any) => {\r\n context.commit(miscTypes.mutations.SET_HEADER_NAV_LINKS, [], {\r\n root: true,\r\n });\r\n },\r\n TOGGLE_LOADER: (context: ActionContext) => {\r\n context.commit(\r\n miscTypes.mutations.SET_SHOW_LOADER,\r\n !context.state.showLoader,\r\n { root: true }\r\n );\r\n },\r\n FETCH_USERS: async (\r\n context: ActionContext,\r\n payload: { showLoader: boolean } = { showLoader: true }\r\n ) => {\r\n try {\r\n if (payload.showLoader) {\r\n context.dispatch(miscTypes.actions.TOGGLE_LOADER, null, {\r\n root: true,\r\n });\r\n }\r\n const result = (await getUsers()).data;\r\n const arr = [] as any[];\r\n if (Array.isArray(result)) {\r\n arr.push(...result.map(x => new User(x)));\r\n }\r\n context.commit(miscTypes.mutations.SET_USERS, arr, { root: true });\r\n } catch (error) {\r\n showNotification('Gebruikers konden niet opgehaald worden.');\r\n } finally {\r\n if (payload.showLoader) {\r\n context.dispatch(miscTypes.actions.TOGGLE_LOADER, null, {\r\n root: true,\r\n });\r\n }\r\n }\r\n },\r\n};\r\n\r\nexport default actions;\r\n","import { GetterTree } from \"vuex\";\r\n\r\nconst getters: GetterTree = {};\r\n\r\nexport default getters;","import IHeaderNavLink from '@/typing/headerNavLink.interface';\r\nimport { MutationTree } from 'vuex';\r\nimport { MiscState } from './miscModule.class';\r\n\r\nconst mutations: MutationTree = {\r\n SET_IS_ONLINE: (state: MiscState, payload: boolean) =>\r\n (state.isOnline = payload),\r\n SET_PAGE_TITLE: (state: MiscState, payload: string) =>\r\n (state.pageTitle = payload),\r\n SET_HEADER_NAV_LINKS: (state: MiscState, payload: IHeaderNavLink[]) =>\r\n (state.headerNavLinks = [...payload]),\r\n SET_SHOW_LOADER: (state: MiscState, payload: boolean) =>\r\n (state.showLoader = payload),\r\n SET_API_ERRORS: (state: MiscState, payload: string[]) =>\r\n (state.apiErrors = payload),\r\n SET_USERS: (state: MiscState, payload: any[]) =>\r\n (state.users = payload),\r\n};\r\n\r\nexport default mutations;\r\n","import IHeaderNavLink from '@/typing/headerNavLink.interface';\r\nimport { Module } from 'vuex';\r\nimport { BaseStoreModule } from '../baseStoreModule.class';\r\nimport actions from './actions';\r\nimport getters from './getters';\r\nimport mutations from './mutations';\r\n\r\nexport class MiscStateModule extends BaseStoreModule {\r\n constructor(state?: MiscState) {\r\n super({\r\n namespaced: true,\r\n state: new MiscState(state),\r\n actions,\r\n mutations,\r\n getters,\r\n });\r\n }\r\n\r\n getModule(): Module {\r\n return {\r\n namespaced: this.namespaced,\r\n state: this.state,\r\n actions: this.actions,\r\n mutations: this.mutations,\r\n getters: this.getters,\r\n };\r\n }\r\n}\r\n\r\nexport class MiscState {\r\n isOnline: boolean;\r\n pageTitle: string;\r\n headerNavLinks: IHeaderNavLink[];\r\n showLoader: boolean;\r\n apiErrors: string[];\r\n users: any[];\r\n\r\n constructor(state?: MiscState) {\r\n this.isOnline = state?.isOnline ?? false;\r\n this.pageTitle = state?.pageTitle ?? '';\r\n this.headerNavLinks = state?.headerNavLinks ?? [];\r\n this.showLoader = false;\r\n this.apiErrors = [];\r\n this.users = [];\r\n }\r\n}\r\n","import { getBoxList, getProjectData, upsertTrips } from '@/api/data';\r\nimport { IState } from '@/store/state.interface';\r\nimport showNotification from '@/utils/notification';\r\nimport { ActionContext, ActionTree } from 'vuex';\r\nimport { ProjectState } from './projectModule.class';\r\nimport { projectTypes } from './projectTypes';\r\nimport { Trip } from '@/typing/api/tripNew.class';\r\nimport TripStatusLocal from '@/typing/enums/tripStatusLocal.enum';\r\nimport { Report } from '@/typing/api/report.class';\r\nimport { IReportRelationship } from '@/typing/reportRelationship.interface';\r\nimport { miscTypes } from '../misc/miscTypes';\r\nimport Role from '@/typing/enums/role.enum';\r\n\r\nconst actions: ActionTree = {\r\n FETCH_PROJECT_DATA: async (\r\n context: ActionContext,\r\n payload: { skipBoxData?: boolean }\r\n ) => {\r\n if (!context.rootState.misc.isOnline) {\r\n context.commit(\r\n projectTypes.mutations.SET_SHOULD_FETCH_PROJECT_DATA,\r\n true,\r\n { root: true }\r\n );\r\n return;\r\n }\r\n\r\n context.dispatch(miscTypes.actions.TOGGLE_LOADER, null, { root: true });\r\n\r\n try {\r\n const projectData = await getProjectData();\r\n context.commit(\r\n projectTypes.mutations.SET_OR_MERGE_PROJECT_DATA,\r\n {\r\n projectData,\r\n override: context.rootState.user.role !== Role.Skipper,\r\n },\r\n { root: true }\r\n );\r\n\r\n if (context.state.shouldFetchProjectData) {\r\n context.commit(\r\n projectTypes.mutations.SET_SHOULD_FETCH_PROJECT_DATA,\r\n false,\r\n { root: true }\r\n );\r\n }\r\n\r\n context.dispatch(\r\n projectTypes.actions.CHECK_TO_UPDATE_REPORTS,\r\n null,\r\n { root: true }\r\n );\r\n\r\n if (!payload || (payload && !payload.skipBoxData)) {\r\n const boxListData = await getBoxList();\r\n context.commit(\r\n projectTypes.mutations.SET_BOXLIST,\r\n boxListData.data.boxDataResponse,\r\n { root: true }\r\n );\r\n }\r\n } catch (error) {\r\n showNotification(\r\n 'Er is een probleem opgetreden bij het ophalen van projecten.'\r\n );\r\n return error;\r\n } finally {\r\n context.dispatch(miscTypes.actions.TOGGLE_LOADER, null, {\r\n root: true,\r\n });\r\n }\r\n },\r\n UPDATE_TRIP: (\r\n context: ActionContext,\r\n payload: {\r\n projectId: number;\r\n shipId: number;\r\n itemIndex: number;\r\n trip: Trip;\r\n }\r\n ) => {\r\n const tripCopy = new Trip(payload.trip);\r\n const reportRef = context.state.projectData?.getReport(\r\n payload.projectId,\r\n payload.shipId\r\n );\r\n const currentValue = reportRef?.trips[payload.itemIndex];\r\n const tripHasChanged =\r\n JSON.stringify(tripCopy) !== JSON.stringify(currentValue);\r\n\r\n if (!tripHasChanged) return;\r\n\r\n let newApiStatus;\r\n\r\n if (tripCopy.apiStatus === TripStatusLocal.Unchanged) {\r\n newApiStatus = TripStatusLocal.Changed;\r\n } else {\r\n newApiStatus = tripCopy.apiStatus;\r\n }\r\n\r\n tripCopy.apiStatus = newApiStatus;\r\n\r\n context.commit(\r\n projectTypes.mutations.SET_TRIP,\r\n {\r\n projectId: payload.projectId,\r\n shipId: payload.shipId,\r\n itemIndex: payload.itemIndex,\r\n trip: tripCopy,\r\n },\r\n { root: true }\r\n );\r\n\r\n context.dispatch(projectTypes.actions.CHECK_TO_UPDATE_REPORTS, null, {\r\n root: true,\r\n });\r\n },\r\n CHECK_TO_UPDATE_REPORTS: (\r\n context: ActionContext\r\n ): IReportRelationship[] => {\r\n const toUpdateReports: IReportRelationship[] = [];\r\n context.state.projectData?.reports.forEach((r: Report) => {\r\n const shouldUpdateProject = r.trips.some((t: Trip) => {\r\n return (\r\n t.apiStatus === TripStatusLocal.New ||\r\n t.apiStatus === TripStatusLocal.Changed\r\n );\r\n });\r\n\r\n if (shouldUpdateProject) {\r\n toUpdateReports.push({\r\n projectId: r.projectId,\r\n shipId: r.shipId,\r\n });\r\n }\r\n });\r\n\r\n context.commit(\r\n projectTypes.mutations.SET_TO_UPDATE_REPORTS,\r\n toUpdateReports,\r\n { root: true }\r\n );\r\n\r\n return toUpdateReports;\r\n },\r\n SAVE_REPORT: async (\r\n context: ActionContext,\r\n payload: { reportRelation: IReportRelationship; showLoader?: boolean }\r\n ): Promise => {\r\n const successNotificationFn = () =>\r\n showNotification('Wijzigingen opgeslagen.');\r\n let result;\r\n\r\n const toSaveReportRef = context.state.projectData?.getReport(\r\n payload.reportRelation.projectId,\r\n payload.reportRelation.shipId\r\n );\r\n\r\n if (!toSaveReportRef?.reportHasChanges()) {\r\n // successNotificationFn();\r\n return;\r\n }\r\n\r\n if (payload.showLoader) {\r\n context.commit(miscTypes.mutations.SET_SHOW_LOADER, true, {\r\n root: true,\r\n });\r\n }\r\n\r\n if (!toSaveReportRef) return;\r\n\r\n try {\r\n result = await upsertTrips(\r\n toSaveReportRef.id,\r\n toSaveReportRef.trips.map(t => t.createPostPutModel())\r\n );\r\n\r\n toSaveReportRef.mergeTrips(result.data.tripsResponse);\r\n if (result.data.hasError) {\r\n successNotificationFn();\r\n }\r\n } catch (error) {\r\n result = error;\r\n } finally {\r\n if (payload.showLoader) {\r\n context.commit(miscTypes.mutations.SET_SHOW_LOADER, false, {\r\n root: true,\r\n });\r\n }\r\n context.dispatch(\r\n projectTypes.actions.CHECK_TO_UPDATE_REPORTS,\r\n null,\r\n { root: true }\r\n );\r\n\r\n // eslint-disable-next-line no-unsafe-finally\r\n return result as any;\r\n }\r\n },\r\n};\r\n\r\nexport default actions;\r\n","import { GetterTree } from \"vuex\";\r\n\r\nconst getters: GetterTree = {};\r\n\r\nexport default getters;","import { IBox } from '@/typing/api/box.interface';\r\nimport { ProjectResponse } from '@/typing/api/projectsResponse.class';\r\nimport { Report } from '@/typing/api/report.class';\r\nimport { Trip } from '@/typing/api/tripNew.class';\r\nimport { saveStoreBackup } from '@/utils/dexieDB';\r\nimport { MutationTree } from 'vuex';\r\nimport { ProjectState } from './projectModule.class';\r\n\r\nconst mutations: MutationTree = {\r\n SET_LAST_VISITED_PROJECT: (state: ProjectState, payload: any) => {\r\n state.lastVisitedProject = payload;\r\n saveStoreBackup();\r\n },\r\n SET_OR_MERGE_PROJECT_DATA: (\r\n state: ProjectState,\r\n payload: { projectData: ProjectResponse; override: boolean }\r\n ) => {\r\n if (state.projectData && !payload.override) {\r\n state.projectData = state.projectData.merge(payload.projectData);\r\n } else {\r\n state.projectData = new ProjectResponse(payload.projectData);\r\n }\r\n saveStoreBackup();\r\n },\r\n SET_SHOULD_FETCH_PROJECT_DATA: (state: ProjectState, payload: any) => {\r\n state.shouldFetchProjectData = payload;\r\n },\r\n SET_TRIP: (\r\n state: ProjectState,\r\n payload: {\r\n projectId: number;\r\n shipId: number;\r\n itemIndex: number;\r\n trip: Trip;\r\n }\r\n ) => {\r\n const report: Report | null =\r\n state.projectData?.getReport(payload.projectId, payload.shipId) ??\r\n null;\r\n\r\n if (!report) return;\r\n report.trips.splice(payload.itemIndex, 1, payload.trip);\r\n saveStoreBackup();\r\n },\r\n SET_TO_UPDATE_REPORTS: (state: ProjectState, payload: any) => {\r\n state.toUpdateReports = [...(payload ?? [])];\r\n saveStoreBackup();\r\n },\r\n SET_BOXLIST: (state: ProjectState, payload: IBox[]) => {\r\n state.boxList = [...payload];\r\n saveStoreBackup();\r\n },\r\n};\r\n\r\nexport default mutations;\r\n","import { IBox } from \"@/typing/api/box.interface\";\r\nimport { ProjectResponse } from \"@/typing/api/projectsResponse.class\";\r\nimport { IReportRelationship } from \"@/typing/reportRelationship.interface\";\r\nimport { Module } from \"vuex\";\r\nimport { BaseStoreModule } from \"../baseStoreModule.class\";\r\nimport actions from \"./actions\";\r\nimport getters from \"./getters\";\r\nimport mutations from \"./mutations\";\r\n\r\nexport class ProjectStateModule extends BaseStoreModule {\r\n constructor(state?: ProjectState) {\r\n super({\r\n namespaced: true,\r\n state: new ProjectState(state),\r\n actions,\r\n mutations,\r\n getters\r\n }); \r\n }\r\n\r\n getModule(): Module {\r\n return {\r\n namespaced: this.namespaced,\r\n state: this.state,\r\n actions: this.actions,\r\n mutations: this.mutations,\r\n getters: this.getters\r\n }\r\n }\r\n}\r\n\r\nexport class ProjectState {\r\n projectData?: ProjectResponse;\r\n lastVisitedProject?: IReportRelationship;\r\n shouldFetchProjectData?: boolean;\r\n toUpdateReports?: IReportRelationship[];\r\n boxList?: IBox[];\r\n\r\n constructor(state?: ProjectState) {\r\n this.lastVisitedProject = state?.lastVisitedProject ?? undefined;\r\n this.shouldFetchProjectData = false;\r\n this.toUpdateReports = state?.toUpdateReports ?? [];\r\n \r\n if (state?.projectData) {\r\n this.projectData = new ProjectResponse(state?.projectData);\r\n } else {\r\n this.projectData = undefined;\r\n }\r\n\r\n this.boxList = state?.boxList ?? [];\r\n }\r\n}\r\n","import { ActionTree } from 'vuex';\r\n\r\nconst actions: ActionTree = {\r\n CHANGE_ENVIRONMENT: async (context: any, data: any) => {\r\n context.commit('SET_ENVIRONMENT', data);\r\n },\r\n};\r\n\r\nexport default actions;\r\n","import { GetterTree } from \"vuex\";\r\n\r\nconst getters: GetterTree = {};\r\n\r\nexport default getters;","import { MutationTree } from 'vuex';\r\nimport { UserState } from './userModule';\r\n\r\nconst mutations: MutationTree = {\r\n SET_ROLE: (state: UserState, payload: any) => {\r\n state.role = payload;\r\n },\r\n SET_AUTH0_ID: (state: UserState, payload: any) => {\r\n state.auth0ID = payload;\r\n }\r\n};\r\n\r\nexport default mutations;\r\n","import { isUndefined } from \"@/utils/isUndefined\";\r\nimport { Module } from \"vuex\";\r\nimport { BaseStoreModule } from \"../baseStoreModule.class\";\r\nimport actions from \"./actions\";\r\nimport getters from \"./getters\";\r\nimport mutations from \"./mutations\";\r\n\r\nexport class UserStateModule extends BaseStoreModule {\r\n constructor(state?: UserState) {\r\n super({\r\n namespaced: true,\r\n state: new UserState(state),\r\n actions,\r\n mutations,\r\n getters\r\n }); \r\n }\r\n\r\n getModule(): Module {\r\n return {\r\n namespaced: this.namespaced,\r\n state: this.state,\r\n actions: this.actions,\r\n mutations: this.mutations,\r\n getters: this.getters\r\n };\r\n }\r\n}\r\n\r\nexport class UserState {\r\n role?: string;\r\n auth0ID?: any;\r\n\r\n constructor(state?: UserState) {\r\n this.role = state?.role ?? undefined;\r\n this.auth0ID = isUndefined(state?.auth0ID) ? state?.auth0ID : undefined;\r\n }\r\n}","import { getInstance } from '@/utils/auth';\r\nimport { clearStateBackup, getLatestStoreBackup } from '@/utils/dexieDB';\r\nimport Vue from 'vue';\r\nimport Vuex, { Store } from 'vuex';\r\nimport { EnvironmentState, EnvironmentStateModule } from './modules/environment/environmentModule.class';\r\nimport { MiscState, MiscStateModule } from './modules/misc/miscModule.class';\r\nimport { ProjectState, ProjectStateModule } from './modules/project/projectModule.class';\r\nimport { UserStateModule, UserState } from './modules/user/userModule';\r\nimport { IState } from './state.interface';\r\n\r\nVue.use(Vuex);\r\n\r\nexport async function getBackedUpState(): Promise {\r\n const isAuthed = getInstance().isAuthenticated; \r\n \r\n if (!isAuthed) {\r\n await clearStateBackup();\r\n }\r\n\r\n return isAuthed ? await getLatestStoreBackup() : null;\r\n}\r\n\r\nexport async function createStore(): Promise> {\r\n const state: any = await getBackedUpState() ?? {};\r\n const environment = state?.environment ? new EnvironmentState(state?.environment) : new EnvironmentState();\r\n const misc = state?.misc ? new MiscState(state?.misc) : new MiscState();\r\n const user = state?.user ? new UserState(state?.user) : new UserState();\r\n const project = state?.project ? new ProjectState(state?.project) : new ProjectState();\r\n \r\n return new Vuex.Store({\r\n modules: {\r\n environment: new EnvironmentStateModule(environment),\r\n misc: new MiscStateModule(misc),\r\n user: new UserStateModule(user),\r\n project: new ProjectStateModule(project)\r\n }\r\n });\r\n}\r\n","import { EnvironmentState } from '@/store/modules/environment/environmentModule.class';\r\nimport axios from 'axios';\r\n\r\nexport default async function LoadEnvironment(): Promise {\r\n const envConfig = await axios.get(`${window.location.origin}/environments/env.json`, {\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return await envConfig.data;\r\n}","import Vue from 'vue';\r\nimport 'dayjs/locale/en';\r\nimport $dayjs from '@/utils/dayjs';\r\n\r\nVue.prototype.$dayjs = $dayjs;","import axios from 'axios';\r\nimport dayjs from 'dayjs';\r\nimport { EventBus } from './eventBus/eventBus';\r\nimport { EventBusEvent } from './eventBus/eventBusEvent.enum';\r\n\r\nlet eventListener: number | null = null;\r\n\r\nexport function startNetworkCheckInterval(intervalMS: number): void {\r\n eventListener = setInterval(async () => {\r\n triggerNetworkStatusEvent(await networkCheck());\r\n }, intervalMS);\r\n}\r\n\r\nexport function stopNetworkCheckInterval(): void {\r\n if (eventListener !== null) {\r\n clearInterval(eventListener);\r\n eventListener = null;\r\n }\r\n}\r\n\r\nexport async function networkCheck(): Promise {\r\n try {\r\n await axios.get(`${window.location.origin}/test-network.json?v=${dayjs().unix()}`, {\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n\r\n return true;\r\n } catch (error) {\r\n return false;\r\n }\r\n}\r\n\r\nexport function triggerNetworkStatusEvent(isOnline: boolean): void {\r\n EventBus.$emit(EventBusEvent.NetworkStatusChange, isOnline);\r\n}\r\n","import { miscTypes } from '@/store/modules/misc/miscTypes';\r\nimport Axios, { AxiosError } from 'axios';\r\nimport { getInstance } from './auth';\r\nimport { EventBus } from './eventBus/eventBus';\r\nimport { EventBusEvent } from './eventBus/eventBusEvent.enum';\r\nimport { triggerNetworkStatusEvent } from './onlineStatusCheck';\r\nimport { vueInstance } from './vueInstance';\r\n\r\nexport function initInterceptors(): void {\r\n Axios.interceptors.request.use(\r\n async function(config) {\r\n const isCheckNetworkCall = config.url?.includes(\r\n 'test-network.json'\r\n );\r\n\r\n if (!isCheckNetworkCall) {\r\n const token = await getInstance().getTokenSilently();\r\n\r\n if (token) {\r\n config.headers = {\r\n Authorization: `Bearer ${token}`,\r\n };\r\n }\r\n }\r\n\r\n return config;\r\n },\r\n function(error: AxiosError) {\r\n if (error) {\r\n const isCheckNetworkCall = error.config.url?.includes(\r\n 'test-network.json'\r\n );\r\n if (\r\n !!isCheckNetworkCall &&\r\n (error.toJSON() as any).message === 'Network Error'\r\n ) {\r\n triggerNetworkStatusEvent(false);\r\n }\r\n } else {\r\n return Promise.reject(null);\r\n }\r\n return Promise.reject(error);\r\n }\r\n );\r\n\r\n // Response interceptor\r\n Axios.interceptors.response.use(\r\n function(response) {\r\n try {\r\n if (response.data.hasErrors) {\r\n const toCommitMessages: string[] = response.data.errors\r\n .filter((e: any) => e.message)\r\n .map((e: any) => e.message);\r\n\r\n vueInstance().$store.commit(\r\n miscTypes.mutations.SET_API_ERRORS,\r\n toCommitMessages,\r\n { root: true }\r\n );\r\n }\r\n return response.data;\r\n } catch (error) {\r\n return response.data;\r\n }\r\n },\r\n function(error) {\r\n if (!error.response) {\r\n EventBus.$emit(EventBusEvent.NetworkStatusChange, false);\r\n }\r\n return Promise.reject(error);\r\n }\r\n );\r\n}\r\n","export default function stringSplice(\r\n str: string,\r\n index: number,\r\n count: number,\r\n add: string\r\n) {\r\n // We cannot pass negative indexes directly to the 2nd slicing operation.\r\n if (index < 0) {\r\n index = str.length + index;\r\n if (index < 0) {\r\n index = 0;\r\n }\r\n }\r\n\r\n return str.slice(0, index) + (add || '') + str.slice(index + count);\r\n}\r\n","import Vue from 'vue';\r\nimport App from './App.vue';\r\nimport './registerServiceWorker';\r\nimport router from './router';\r\nimport { createStore } from './store';\r\nimport { environmentTypes } from './store/modules/environment/environmentTypes';\r\nimport { Auth0Plugin, isAuth0Loaded } from './utils/auth';\r\nimport {\r\n globalVueInstanceVariableName,\r\n useIndexedDB,\r\n} from './utils/customWindow';\r\nimport { initDB } from './utils/dexieDB';\r\nimport LoadEnvironment from './utils/environment/loadEnvironment';\r\nimport { initGlobalListeners } from './utils/eventBus/eventBus';\r\nimport onNetworkStateChange from './utils/eventBus/listnerFuncs/onNetworkStateChange';\r\nimport { vueInstance } from './utils/vueInstance';\r\nimport vSelect from 'vue-select';\r\nimport '@/scss/styles.scss';\r\nimport '@/plugins/dayjs.plugin';\r\nimport { initInterceptors } from '@/utils/axiosInterceptors';\r\nimport {\r\n networkCheck,\r\n startNetworkCheckInterval,\r\n} from './utils/onlineStatusCheck';\r\nimport { BFormDatepicker } from 'bootstrap-vue';\r\nimport stringSplice from './utils/stringSplice';\r\n\r\nVue.component('v-select', vSelect);\r\nVue.component('b-form-datepicker', BFormDatepicker);\r\n\r\nVue.directive('timeinput', function(el: HTMLInputElement, binding: any) {\r\n if (binding.value) {\r\n const value = el.value;\r\n el.maxLength = 5;\r\n let newValue: string = value;\r\n\r\n if (value.length >= 3 && value[2] !== ':') {\r\n newValue = stringSplice(newValue, 2, 0, ':');\r\n }\r\n\r\n el.value = newValue;\r\n }\r\n} as any);\r\n\r\nVue.config.productionTip = false;\r\n\r\nLoadEnvironment().then(async env => {\r\n try {\r\n await initDB();\r\n (window as any)[useIndexedDB] = true;\r\n } catch (error) {\r\n (window as any)[useIndexedDB] = false;\r\n }\r\n\r\n initInterceptors();\r\n\r\n Vue.use(Auth0Plugin, {\r\n domain: env.auth0?.domain,\r\n clientId: env.auth0?.clientId,\r\n audience: env.auth0?.audience,\r\n });\r\n\r\n await isAuth0Loaded();\r\n\r\n const store = await createStore();\r\n\r\n const isOnline = await networkCheck();\r\n\r\n (window as any)[globalVueInstanceVariableName] = new Vue({\r\n router,\r\n store,\r\n render: h => h(App),\r\n });\r\n\r\n onNetworkStateChange(isOnline, true);\r\n\r\n startNetworkCheckInterval(30000);\r\n\r\n initGlobalListeners();\r\n\r\n vueInstance().$store.dispatch(\r\n environmentTypes.actions.CHANGE_ENVIRONMENT,\r\n env\r\n );\r\n\r\n (vueInstance() as any).$auth.checkAuthentication();\r\n\r\n vueInstance().$mount('#app');\r\n});\r\n","import { EventBus } from \"./eventBus/eventBus\";\r\nimport { EventBusEvent } from \"./eventBus/eventBusEvent.enum\";\r\n\r\nexport default function showNotification(notificationText: string, timeoutInMS = 5000) {\r\n EventBus.$emit(EventBusEvent.ShowNotification, { notificationText, timeout: timeoutInMS })\r\n}","import { EnvironmentState } from \"@/store/modules/environment/environmentModule.class\";\r\nimport { MiscState } from \"@/store/modules/misc/miscModule.class\";\r\nimport { IState } from \"@/store/state.interface\";\r\nimport Role from \"@/typing/enums/role.enum\";\r\nimport { getState } from \"../vueInstance\";\r\n\r\nexport default async function getToBackUpState(): Promise {\r\n const currentState = getState();\r\n \r\n if (getState().user.role === Role.Skipper) {\r\n return {\r\n project: {\r\n projectData: currentState.project.projectData,\r\n lastVisitedProject: currentState.project?.lastVisitedProject ?? undefined,\r\n toUpdateReports: currentState.project.toUpdateReports ?? undefined,\r\n boxList: currentState.project.boxList ?? undefined\r\n },\r\n user: currentState.user,\r\n misc: {} as MiscState,\r\n environment: {} as EnvironmentState,\r\n };\r\n }\r\n \r\n return {} as IState;\r\n}","enum TableNames {\r\n StateBackup = 'stateBackup'\r\n}\r\n\r\nexport default TableNames;","import { IState } from '@/store/state.interface';\r\nimport Dexie from 'dexie';\r\nimport TableNames from './tableNames.enum';\r\n\r\nexport class ApplicationDB extends Dexie {\r\n stateBackup: Dexie.Table;\r\n\r\n constructor() {\r\n super('ApplicationDB');\r\n \r\n this.version(1).stores({\r\n 'stateBackup': '++id, state'\r\n });\r\n\r\n this.stateBackup = this.table(TableNames.StateBackup);\r\n }\r\n}","import { IState } from \"@/store/state.interface\";\r\nimport { useIndexedDB } from \"../customWindow\";\r\nimport getToBackUpState from \"./getToBackupState\";\r\nimport { ApplicationDB } from \"./schema\";\r\nimport TableNames from \"./tableNames.enum\";\r\n\r\nlet db: ApplicationDB | null = null;\r\n\r\nexport async function initDB(): Promise {\r\n db = new ApplicationDB();\r\n await openDB();\r\n}\r\n\r\nexport async function openDB(): Promise {\r\n if (!db || !checkDBUsage()) return;\r\n \r\n if (db.isOpen()) return true;\r\n\r\n return (await db.open()).isOpen();\r\n}\r\n\r\nexport async function getLatestStoreBackup(): Promise {\r\n try {\r\n if (!db || !checkDBUsage()) return null;\r\n \r\n const collection = db\r\n .table(TableNames.StateBackup)\r\n .toCollection();\r\n \r\n return await collection.last();\r\n } catch {\r\n (window as any)[useIndexedDB] = false;\r\n return {} as any;\r\n } \r\n}\r\n\r\nexport async function saveStoreBackup(): Promise {\r\n try {\r\n if (!db || !checkDBUsage()) return;\r\n const backupData = await getToBackUpState();\r\n\r\n if (JSON.stringify(backupData) === '{}') return;\r\n\r\n const table = db\r\n .table(TableNames.StateBackup);\r\n \r\n await table.clear();\r\n \r\n return await table.add(backupData);\r\n } catch(error) {\r\n (window as any)[useIndexedDB] = false;\r\n return;\r\n }\r\n}\r\n\r\nexport async function clearDatabase(): Promise {\r\n try {\r\n if (!db || !checkDBUsage()) return;\r\n\r\n return await db\r\n .delete();\r\n } catch {\r\n (window as any)[useIndexedDB] = false;\r\n return;\r\n }\r\n}\r\n\r\nexport async function clearStateBackup(): Promise {\r\n try {\r\n if (!db || !checkDBUsage()) return;\r\n \r\n return await db\r\n .table(TableNames.StateBackup)\r\n .clear();\r\n } catch {\r\n (window as any)[useIndexedDB] = false;\r\n return;\r\n }\r\n}\r\n\r\nfunction checkDBUsage(): boolean {\r\n return (window as any)[useIndexedDB];\r\n}\r\n\r\nexport default db;","import { ValidationResult } from '../validationResult.class';\r\n\r\nexport class Contractor {\r\n id: number;\r\n name: string;\r\n\r\n validationResult?: ValidationResult = undefined;\r\n\r\n constructor(c?: Contractor) {\r\n this.id = c?.id ?? -1;\r\n this.name = c?.name ?? '';\r\n }\r\n\r\n validate(): ValidationResult {\r\n const validationResult = new ValidationResult();\r\n\r\n if (this.name.trim() === '') {\r\n validationResult.addError({\r\n message: 'Aannemer moet een naam hebben.',\r\n });\r\n }\r\n\r\n this.validationResult = validationResult;\r\n\r\n return validationResult;\r\n }\r\n\r\n createPostPutBody(): any {\r\n const obj: any = {\r\n name: this.name,\r\n };\r\n\r\n if (this.id > -1) {\r\n obj['id'] = this.id;\r\n }\r\n\r\n return obj;\r\n }\r\n}\r\n","import { PostPutProject } from '@/typing/api/postProject.class';\r\nimport { ProjectResponse } from '@/typing/api/projectsResponse.class';\r\nimport { ITripAPI } from '@/typing/api/tripNew.class';\r\nimport getEnv from '@/utils/environment/getEnvironment';\r\nimport axios, { AxiosResponse } from 'axios';\r\nimport { APIResponse } from '@/typing/api/apiResponse.interface';\r\n\r\nfunction apiBaseUrl(): string {\r\n return getEnv().apiBaseUrl ?? '';\r\n}\r\n\r\nexport async function getProjectData(): Promise {\r\n try {\r\n const result: APIResponse = await axios.get(\r\n `${apiBaseUrl()}/v1/reports`\r\n );\r\n return new ProjectResponse(result.data);\r\n } catch (error) {\r\n return error;\r\n }\r\n}\r\n\r\nexport function upsertTrips(\r\n reportId: number,\r\n trips: ITripAPI[]\r\n): Promise {\r\n return axios.put(`${apiBaseUrl()}/v1/reports/${reportId}/trips`, trips);\r\n}\r\n\r\nexport function submitTrips(\r\n reportId: number,\r\n tripIds: number[]\r\n): Promise {\r\n return axios.put(\r\n `${apiBaseUrl()}/v1/reports/${reportId}/trips/submit`,\r\n tripIds\r\n );\r\n}\r\n\r\nexport function rejectTrips(\r\n reportId: number,\r\n tripIds: number[],\r\n message: string\r\n): Promise {\r\n return axios.put(`${apiBaseUrl()}/v1/reports/${reportId}/trips/reject`, {\r\n tripIds,\r\n message,\r\n });\r\n}\r\n\r\nexport function postProject(project: PostPutProject): Promise {\r\n return axios.post(`${apiBaseUrl()}/v1/projects`, project);\r\n}\r\n\r\nexport function putProject(project: PostPutProject): Promise {\r\n return axios.put(`${apiBaseUrl()}/v1/projects/${project.id}`, project);\r\n}\r\n\r\nexport function closeProject(projectId: number): Promise {\r\n return axios.put(`${apiBaseUrl()}/v1/projects/${projectId}/close`);\r\n}\r\n\r\nexport function approveTrips(\r\n reportId: number,\r\n tripIds: number[]\r\n): Promise {\r\n return axios.put(\r\n `${apiBaseUrl()}/v1/reports/${reportId}/trips/approve`,\r\n tripIds\r\n );\r\n}\r\n\r\nexport function getBoxList(): Promise {\r\n return axios.get(`${apiBaseUrl()}/v1/data/boxdata`);\r\n}\r\n","import {\r\n createDateTime,\r\n getDateFromDateTime,\r\n getTimeFromDateTime,\r\n} from '@/utils/dayjs';\r\nimport { isUndefined } from '@/utils/isUndefined';\r\nimport dayjs from 'dayjs';\r\nimport { TripStatus } from '../enums/tripStatus.enum';\r\nimport TripStatusLocal from '../enums/tripStatusLocal.enum';\r\n\r\nexport interface ITripAPI {\r\n id?: number;\r\n concurrencyKey?: string;\r\n status?:\r\n | TripStatus.OpenSkipper\r\n | TripStatus.RejectedContractor\r\n | TripStatus.OpenContractor\r\n | TripStatus.OpenClient\r\n | TripStatus.RejectedClient\r\n | TripStatus.ApprovedClient;\r\n number?: number;\r\n date?: string; // Datetime UTC\r\n startTimeOffset?: string;\r\n boxNumber?: string;\r\n boxName?: string;\r\n startTimeDredgingOffset?: string;\r\n endTimeDredgingOffset?: string;\r\n dumpBoxName?: string;\r\n startTimeDumpingOffset?: string;\r\n endTimeDumpingOffset?: string;\r\n volume?: number;\r\n tds?: number;\r\n soilType?: string;\r\n delayType?: string;\r\n fuel?: string;\r\n startTimeDelayOffset?: string;\r\n endTimeDelayOffset?: string;\r\n remarks?: string;\r\n apiStatus?:\r\n | TripStatusLocal.Unchanged\r\n | TripStatusLocal.Changed\r\n | TripStatusLocal.New;\r\n}\r\n\r\nexport class Trip {\r\n id?: number;\r\n concurrencyKey?: string;\r\n status?:\r\n | TripStatus.OpenSkipper\r\n | TripStatus.RejectedContractor\r\n | TripStatus.OpenContractor\r\n | TripStatus.OpenClient\r\n | TripStatus.RejectedClient\r\n | TripStatus.ApprovedClient;\r\n number?: number;\r\n date?: string; // Datetime UTC\r\n startTime?: string;\r\n startTimeDate?: string;\r\n boxNumber?: string;\r\n boxName?: string;\r\n startTimeDredging?: string;\r\n startTimeDredgingDate?: string;\r\n endTimeDredging?: string;\r\n endTimeDredgingDate?: string;\r\n dumpBoxName?: string;\r\n startTimeDumping?: string;\r\n startTimeDumpingDate?: string;\r\n endTimeDumping?: string;\r\n endTimeDumpingDate?: string;\r\n fuel?: string;\r\n volume?: number;\r\n tds?: number;\r\n soilType?: string;\r\n delayType?: string;\r\n startTimeDelay?: string;\r\n startTimeDelayDate?: string;\r\n endTimeDelay?: string;\r\n endTimeDelayDate?: string;\r\n remarks?: string;\r\n apiStatus?:\r\n | TripStatusLocal.Unchanged\r\n | TripStatusLocal.Changed\r\n | TripStatusLocal.New;\r\n\r\n constructor(trip?: Trip, tripNo?: number, tripStatus?: TripStatus) {\r\n const isNewTrip = isUndefined(trip?.id);\r\n this.id = trip?.id ?? undefined;\r\n this.concurrencyKey = trip?.concurrencyKey ?? undefined;\r\n this.status = trip?.status ?? tripStatus ?? undefined;\r\n this.number = trip?.number ?? tripNo ?? 0;\r\n this.date = trip?.date ?? dayjs().format('DD/MM/YYYY');\r\n this.startTime = trip?.startTime ?? undefined;\r\n this.startTimeDate = trip?.startTimeDate ?? undefined;\r\n this.boxNumber = trip?.boxNumber ?? undefined;\r\n this.boxName = trip?.boxName ?? undefined;\r\n this.startTimeDredging = trip?.startTimeDredging ?? undefined;\r\n this.startTimeDredgingDate = trip?.startTimeDredgingDate ?? undefined;\r\n this.endTimeDredging = trip?.endTimeDredging ?? undefined;\r\n this.endTimeDredgingDate = trip?.endTimeDredgingDate ?? undefined;\r\n this.dumpBoxName = trip?.dumpBoxName ?? undefined;\r\n this.startTimeDumping = trip?.startTimeDumping ?? undefined;\r\n this.startTimeDumpingDate = trip?.startTimeDumpingDate ?? undefined;\r\n this.endTimeDumping = trip?.endTimeDumping ?? undefined;\r\n this.endTimeDumpingDate = trip?.endTimeDumpingDate ?? undefined;\r\n this.volume = !isUndefined(trip?.volume) ? trip?.volume : undefined;\r\n this.tds = !isUndefined(trip?.tds) ? trip?.tds : undefined;\r\n this.soilType = trip?.soilType ?? undefined;\r\n this.fuel = trip?.fuel ?? undefined;\r\n this.delayType = trip?.delayType ?? undefined;\r\n this.startTimeDelay = trip?.startTimeDelay ?? undefined;\r\n this.startTimeDelayDate = trip?.startTimeDelayDate ?? undefined;\r\n this.endTimeDelay = trip?.endTimeDelay ?? undefined;\r\n this.endTimeDelayDate = trip?.endTimeDelayDate ?? undefined;\r\n this.remarks = trip?.remarks ?? undefined;\r\n\r\n if (isNewTrip) {\r\n this.apiStatus = TripStatusLocal.New;\r\n } else {\r\n this.apiStatus = TripStatusLocal.Unchanged;\r\n }\r\n }\r\n\r\n merge(t: ITripAPI, forceMerge = false): Trip {\r\n if (this.concurrencyKey !== t.concurrencyKey || forceMerge) {\r\n this.fillFromApi(t);\r\n }\r\n return this;\r\n }\r\n\r\n fillFromApi(t: ITripAPI): Trip {\r\n this.startTime = t.startTimeOffset\r\n ? getTimeFromDateTime(t.startTimeOffset)\r\n : this.startTime;\r\n this.startTimeDate = t.startTimeOffset\r\n ? getDateFromDateTime(t.startTimeOffset)\r\n : this.startTimeDate;\r\n\r\n this.startTimeDredging = t.startTimeDredgingOffset\r\n ? getTimeFromDateTime(t.startTimeDredgingOffset)\r\n : this.startTimeDredging;\r\n this.startTimeDredgingDate = t.startTimeDredgingOffset\r\n ? getDateFromDateTime(t.startTimeDredgingOffset)\r\n : this.startTimeDredgingDate;\r\n\r\n this.endTimeDredging = t.endTimeDredgingOffset\r\n ? getTimeFromDateTime(t.endTimeDredgingOffset)\r\n : this.endTimeDredging;\r\n this.endTimeDredgingDate = t.endTimeDredgingOffset\r\n ? getDateFromDateTime(t.endTimeDredgingOffset)\r\n : this.endTimeDredgingDate;\r\n\r\n this.startTimeDumping = t.startTimeDumpingOffset\r\n ? getTimeFromDateTime(t.startTimeDumpingOffset)\r\n : this.startTimeDumping;\r\n this.startTimeDumpingDate = t.startTimeDumpingOffset\r\n ? getDateFromDateTime(t.startTimeDumpingOffset)\r\n : this.startTimeDumpingDate;\r\n\r\n this.endTimeDumping = t.endTimeDumpingOffset\r\n ? getTimeFromDateTime(t.endTimeDumpingOffset)\r\n : this.endTimeDumping;\r\n this.endTimeDumpingDate = t.endTimeDumpingOffset\r\n ? getDateFromDateTime(t.endTimeDumpingOffset)\r\n : this.endTimeDumpingDate;\r\n\r\n this.startTimeDelay = t.startTimeDelayOffset\r\n ? getTimeFromDateTime(t.startTimeDelayOffset)\r\n : this.startTimeDelay;\r\n this.startTimeDelayDate = t.startTimeDelayOffset\r\n ? getDateFromDateTime(t.startTimeDelayOffset)\r\n : this.startTimeDelayDate;\r\n\r\n this.endTimeDelay = t.endTimeDelayOffset\r\n ? getTimeFromDateTime(t.endTimeDelayOffset)\r\n : this.endTimeDelay;\r\n this.endTimeDelayDate = t.endTimeDelayOffset\r\n ? getDateFromDateTime(t.endTimeDelayOffset)\r\n : this.endTimeDelayDate;\r\n\r\n this.id = t.id;\r\n // this.number = t.number ?? this.number;\r\n this.concurrencyKey = t.concurrencyKey ?? undefined;\r\n this.apiStatus = t?.apiStatus ?? TripStatusLocal.Unchanged;\r\n this.status = t?.status ?? this.status;\r\n this.date = t?.date ?? this.date;\r\n this.boxNumber = t?.boxNumber ?? this.boxNumber;\r\n this.boxName = t?.boxName ?? this.boxName;\r\n this.dumpBoxName = t?.dumpBoxName ?? this.dumpBoxName;\r\n this.volume = t.volume;\r\n this.tds = t.tds;\r\n this.soilType = t?.soilType ?? this.soilType;\r\n this.delayType = t?.delayType ?? this.delayType;\r\n this.fuel = t?.fuel ?? this.fuel;\r\n this.remarks = t?.remarks ?? this.remarks;\r\n\r\n return this;\r\n }\r\n\r\n validate(): boolean {\r\n if (!this.status) return false;\r\n if (!this.date) return false;\r\n if (!this.startTime) return false;\r\n if (!this.boxNumber) return false;\r\n if (!this.boxName) return false;\r\n if (!this.startTimeDredging) return false;\r\n if (!this.endTimeDredging) return false;\r\n if (!this.dumpBoxName) return false;\r\n if (!this.startTimeDumping) return false;\r\n if (!this.endTimeDumping) return false;\r\n if (isUndefined(this.volume)) return false;\r\n if (isUndefined(this.tds)) return false;\r\n if (!this.soilType) return false;\r\n\r\n return true;\r\n }\r\n\r\n createPostPutModel(): ITripAPI {\r\n const model = {\r\n concurrencyKey: this.concurrencyKey,\r\n id: this.id,\r\n number: this.number,\r\n status: this.status,\r\n date: this.date,\r\n boxNumber: this.boxNumber,\r\n apiStatus: this.apiStatus,\r\n boxName: this.boxName,\r\n dumpBoxName: this.dumpBoxName,\r\n volume: this.volume,\r\n tds: this.tds,\r\n soilType: this.soilType,\r\n fuel: this.fuel,\r\n delayType: this.delayType,\r\n remarks: this.remarks,\r\n // Start trip\r\n startTimeOffset: createDateTime(\r\n this.date,\r\n this.startTime,\r\n 'DD/MM/YYYY'\r\n ),\r\n\r\n // Dredging\r\n startTimeDredgingOffset: createDateTime(\r\n this.startTimeDredgingDate,\r\n this.startTimeDredging\r\n ),\r\n endTimeDredgingOffset: createDateTime(\r\n this.endTimeDredgingDate,\r\n this.endTimeDredging\r\n ),\r\n\r\n // Dumping\r\n startTimeDumpingOffset: createDateTime(\r\n this.startTimeDumpingDate,\r\n this.startTimeDumping\r\n ),\r\n endTimeDumpingOffset: createDateTime(\r\n this.endTimeDumpingDate,\r\n this.endTimeDumping\r\n ),\r\n\r\n // Delay\r\n startTimeDelayOffset: createDateTime(\r\n this.startTimeDelayDate,\r\n this.startTimeDelay\r\n ),\r\n endTimeDelayOffset: createDateTime(\r\n this.endTimeDelayDate,\r\n this.endTimeDelay\r\n ),\r\n };\r\n return model;\r\n }\r\n}\r\n","export class ValidationResult {\r\n isValid: boolean;\r\n errors: IValidationError[];\r\n\r\n constructor() {\r\n this.isValid = true;\r\n this.errors = [];\r\n }\r\n\r\n addError(error: IValidationError) {\r\n this.errors.push(error);\r\n this.isValid = this.errors.length === 0;\r\n }\r\n}\r\n\r\nexport interface IValidationError {\r\n message?: string;\r\n requiredError?: string;\r\n}\r\n","export function isUndefined(value: any): boolean {\r\n return value !== 0 && !value;\r\n}","import { APIResponse } from '@/typing/api/apiResponse.interface';\r\nimport { Contractor } from '@/typing/api/contractor.class';\r\nimport { Ship } from '@/typing/api/ship.class';\r\nimport { User } from '@/typing/api/user.class';\r\nimport getEnv from '@/utils/environment/getEnvironment';\r\nimport axios from 'axios';\r\n\r\nfunction apiBaseUrl(): string {\r\n return getEnv().apiBaseUrl ?? '';\r\n}\r\n\r\nexport async function postContractor(c: Contractor): Promise> {\r\n return axios.post(\r\n `${apiBaseUrl()}/v1/dashboard/contractor`,\r\n c.createPostPutBody()\r\n );\r\n}\r\n\r\nexport async function putContractor(c: Contractor): Promise> {\r\n return axios.put(\r\n `${apiBaseUrl()}/v1/dashboard/contractor`,\r\n c.createPostPutBody()\r\n );\r\n}\r\n\r\nexport async function deleteContractor(\r\n c: Contractor\r\n): Promise> {\r\n return axios.put(`${apiBaseUrl()}/v1/dashboard/contractor/${c.id}/delete`);\r\n}\r\n\r\nexport async function postShip(s: Ship): Promise> {\r\n return axios.post(\r\n `${apiBaseUrl()}/v1/dashboard/ship`,\r\n s.createPostPutBody()\r\n );\r\n}\r\n\r\nexport async function putShip(s: Ship): Promise> {\r\n return axios.put(\r\n `${apiBaseUrl()}/v1/dashboard/ship`,\r\n s.createPostPutBody()\r\n );\r\n}\r\n\r\nexport async function deleteShip(s: Ship): Promise> {\r\n return axios.put(`${apiBaseUrl()}/v1/dashboard/ship/${s.id}/delete`);\r\n}\r\n\r\nexport async function postUser(u: User): Promise> {\r\n return axios.post(`${apiBaseUrl()}/v1/dashboard/user/create`, u.toBody());\r\n}\r\n\r\nexport async function putUser(u: User): Promise> {\r\n return axios.put(`${apiBaseUrl()}/v1/dashboard/user`, u.toBody());\r\n}\r\n\r\nexport async function getUsers(): Promise> {\r\n return axios.get(`${apiBaseUrl()}/v1/dashboard/user`);\r\n}\r\n\r\nexport async function userPasswordReset(u: User): Promise> {\r\n return axios.post(`${apiBaseUrl()}/v1/dashboard/user/password-reset`, u);\r\n}\r\n\r\nexport async function deleteUser(u: User): Promise> {\r\n return axios.delete(`${apiBaseUrl()}/v1/dashboard/user?email=${u.email}`);\r\n}\r\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!./Modal.vue?vue&type=style&index=0&id=907cab5e&lang=scss&scoped=true&\""],"sourceRoot":""}