{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/store/index.ts","webpack:///./src/store/common.ts","webpack:///./src/models/FeatureFlagNames.ts","webpack:///./src/utils/EventBus.ts","webpack:///./src/filters/dateWithFullTime.ts","webpack:///./src/services/TelemetryService.ts","webpack:///./src/components/general/ContactCard.vue?682b","webpack:///./src/utils/Helpers.ts","webpack:///./src/router/functions.ts","webpack:///./src/filters/yearAndMonth.ts","webpack:///./src/models/UserProfile/PermissionType.ts","webpack:///./src/utils/Dates.ts","webpack:///./src/filters/day.ts","webpack:///./src/filters/number.ts","webpack:///./src/filters/dateRange.ts","webpack:///./src/filters/dateRangeShort.ts","webpack:///./src/utils/Permissions.ts","webpack:///./src/services/BaseService.ts","webpack:///./src/common/services/AuthService.ts","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/services/ImpersonationService.ts","webpack:///./src/utils/RoutingGeneral.ts","webpack:///./src/i18n/i18n.ts","webpack:///./src/router/routes.ts","webpack:///./src/utils/RoutingForQData.ts","webpack:///./src/utils/RoutingForSustainability.ts","webpack:///./src/models/Sustainability/EnvironmentalData/EnvironmentalDataReportType.ts","webpack:///./src/components/CustomersTreeSelect.vue?b869","webpack:///./src/components/CustomersTreeSelect.vue","webpack:///./src/components/CustomersTreeSelect.vue?9234","webpack:///./src/components/CustomersTreeSelect.vue?f71b","webpack:///./src/models/Message.ts","webpack:///./src/store/modules/userContacts.ts","webpack:///./src/components/general/ContactCard.vue?77ce","webpack:///./src/components/general/ContactCard.vue","webpack:///./src/components/general/ContactCard.vue?0c6b","webpack:///./src/components/general/ContactCard.vue?31fe","webpack:///./src/store/modules/loading.ts","webpack:///./src/store/commonArrayStore.ts","webpack:///./src/components/general/Sidebar.vue?81ab","webpack:///./src/filters/date.ts","webpack:///./src/services/AuthService.ts","webpack:///./src/models/UserProfile/Roles.ts","webpack:///./src/utils/Pages.ts","webpack:///./src/filters/fileNameDate.ts","webpack:///./src/utils/LocalStorage.ts","webpack:///./src/store/modules/userProfile.ts","webpack:///./src/filters/weekRange.ts","webpack:///./src/services/FeatureFlagsService.ts","webpack:///./src/store/modules/featureFlags.ts","webpack:///./src/services/UserService.ts","webpack:///./src/components/general/Modal.vue?d7e6","webpack:///./src/components/general/Modal.vue","webpack:///./src/components/general/Modal.vue?bf6f","webpack:///./src/components/general/Modal.vue?0f65","webpack:///./src/components/general/TreeSelect.vue?e22e","webpack:///./src/components/general/TreeSelect.vue","webpack:///./src/components/general/TreeSelect.vue?79cc","webpack:///./src/components/general/TreeSelect.vue?bcd8","webpack:///./src/components/TheFeedbackButtonAndModal.vue?9a65","webpack:///./src/utils/Constants.ts","webpack:///./src/router/authRequirements.ts","webpack:///./src/App.vue?a4e3","webpack:///./src/router/index.ts","webpack:///./src/models/ErrorType.ts","webpack:///./src/utils/Consoler.ts","webpack:///./src/App.vue?b4f5","webpack:///./src/components/general/PageHeader.vue?c641","webpack:///./src/components/general/PageHeader.vue","webpack:///./src/components/general/PageHeader.vue?e401","webpack:///./src/components/general/PageHeader.vue?e2e1","webpack:///./src/components/general/Sidebar.vue?4272","webpack:///./src/components/general/MenuItem.vue?7f59","webpack:///./src/components/general/MenuItem.vue","webpack:///./src/components/general/MenuItem.vue?fe68","webpack:///./src/components/general/MenuItem.vue?154b","webpack:///./src/components/general/Sidebar.vue","webpack:///./src/components/general/Sidebar.vue?c602","webpack:///./src/components/general/Sidebar.vue?631b","webpack:///./src/components/general/PageFooter.vue?460b","webpack:///./src/components/general/PageFooter.vue","webpack:///./src/components/general/PageFooter.vue?ec6c","webpack:///./src/components/general/PageFooter.vue?b324","webpack:///./src/components/TheImpersonationModal.vue?0cd6","webpack:///./src/components/TheImpersonationModal.vue","webpack:///./src/components/TheImpersonationModal.vue?0b5f","webpack:///./src/components/TheImpersonationModal.vue?9d1a","webpack:///./src/components/TheImpersonationBar.vue?b74e","webpack:///./src/components/TheImpersonationBar.vue","webpack:///./src/components/TheImpersonationBar.vue?344a","webpack:///./src/components/TheImpersonationBar.vue?9cde","webpack:///./src/components/TheCustomerSelectionModal.vue?e71d","webpack:///./src/components/TheCustomerSelectionModal.vue","webpack:///./src/components/TheCustomerSelectionModal.vue?a7b5","webpack:///./src/components/TheCustomerSelectionModal.vue?2d52","webpack:///./src/components/TheFeedbackButtonAndModal.vue?ad76","webpack:///./src/components/ContactsEmailTreeSelect.vue?f2d2","webpack:///./src/components/ContactsEmailTreeSelect.vue","webpack:///./src/components/ContactsEmailTreeSelect.vue?d923","webpack:///./src/components/ContactsEmailTreeSelect.vue?41fd","webpack:///./src/services/FeedbackService.ts","webpack:///./src/components/TheFeedbackButtonAndModal.vue","webpack:///./src/components/TheFeedbackButtonAndModal.vue?c395","webpack:///./src/components/TheFeedbackButtonAndModal.vue?171b","webpack:///./src/App.vue","webpack:///./src/App.vue?198c","webpack:///./src/App.vue?315a","webpack:///./src/filters/dayAndShortMonthAndTime.ts","webpack:///./src/filters/dayWithOrdinal.ts","webpack:///./src/filters/month.ts","webpack:///./src/filters/monthLong.ts","webpack:///./src/plugins/highcharts.ts","webpack:///./src/plugins/moment.ts","webpack:///./src/plugins/jquery.js","webpack:///./src/plugins/element-ui.ts","webpack:///./src/plugins/vue-treeselect.ts","webpack:///./src/plugins/vee-validate.ts","webpack:///./src/plugins/vue-filepond.ts","webpack:///./src/main.ts","webpack:///./src/store/modules/auth.ts","webpack:///./src/filters/dayAndShortMonth.ts","webpack:///./src/services/DeliveryMessageService.ts","webpack:///./src/components/general/MenuItem.vue?1255","webpack:///./src/filters/monthRange.ts","webpack:///./src/filters/dateWithTime.ts","webpack:///./src/store/modules/deliveryMessages.ts","webpack:///./src/utils/Config.ts","webpack:///./src/models/PsolParameterId.ts","webpack:///./src/models/Sustainability/SustainabilityDataType.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","use","store","Store","strict","DEV","CommonStore","reLoadMinMinutesInterval","isLoading","isError","loadingPromise","loadingPromiseForId","this","lastLoad","Date","payload","loading","checkNeedToLoadOrFetch","loadingId","lastLoadOrFetch","reLoadOrFetchMinMinutesInterval","getMinutesBetweenDates","startDate","endDate","diff","getTime","FeatureFlagNames","EventBusInstance","EventBus","dateWithFullTimeFilter","utcDate","utc","localDate","local","format","dateWithFullTimeFormat","filter","_trackingPageName","instrumentationKey","appInsights","config","enableUnhandledPromiseRejectionTracking","Consoler","debugLog","loadAppInsights","authenticatedUserId","debugWarn","setAuthenticatedUserContext","clearAuthenticatedUserContext","routeTrackingInfo","checkRouteTrackingInfo","track","repeat","trackingPageName","startTrackPage","customCustomProperties","customProperties","measurements","isStoppingLatestStartedTrackPage","isAuthenticated","auth","isImpersonated","userProfile","isAdminUser","Permissions","hasRole","Roles","IsAdminUser","hasEmployeeEmail","impersonatingUser","userAxId","axId","customerAxId","selectedCustomer","number","customerName","stoppedInAdvance","notFound","sendStopTrackPage","skipPageView","url","stopTrackPage","exception","trackException","trackTrace","telemetryService","HelpersDefinition","ms","eventName","Event","createEvent","initEvent","dispatchEvent","el","classList","Array","from","classAttr","split","Math","random","toString","replace","substr","hideCurrency","minDigits","maxDigits","formatter","Intl","NumberFormat","style","currency","minimumFractionDigits","maximumFractionDigits","value1","value2","a","b","every","indexOf","hex","alpha","parseInt","g","color","opacity","_opacity","round","min","max","toUpperCase","positiveWholeNumberRegex","test","Number","fileType","toLowerCase","Helpers","programmaticRoutingParamName","documentTitleParamName","addProgrammaticRoutingParamToRoute","route","params","createParamsWithProgrammaticRouting","hasProgrammaticRoutingParam","addDocumentTitleToRouteMeta","documentTitle","meta","getDocumentTitleFromRouteMeta","getFullUrlForRoute","location","protocol","host","fullPath","getLoggingNameForRoute","getIsToTrackRoute","getRouteTrackingInfo","getNotFoundOrErrorLocation","actualRoute","NotFound","customHeader","customMessage","createLocationFromRoute","0","path","query","yearAndMonthFilter","year","month","yearAndMonthFormat","PermissionType","DatesDefinition","date","startOf","toDate","startOfDay","startOfYear","getFullYear","endOf","endOfYear","isSame","Dates","startOfWeek","isoWeek","momentValue","$moment","daysInMonth","numberOfMonthsBack","setMonth","getMonth","startOfMonth","yearRegex","dayFilter","numberFilter","minDecimals","maxDecimals","dateRangeFilter","fromDate","showDayMonthAndYear","fromDateMoment","toDateMoment","dateRangeDayMonthAndYear","dateRangeDayAndMonth","day","dateRangeDay","dateRangeShortFilter","dateFormat","ValidationError","hasPermission","permission","isDevelopment","DevPermissionsEnabled","permissions","some","x","role","roles","isFeatureEnabled","featureFlag","enabled","items","validate","requirements","userCustomers","requiresAuth","valid","NotAuthenticated","MissingFeatureFlag","requiresNonSmiCustomer","isSmiCustomer","requiresSmiCustomer","NotAuthorizedMissingPermission","NotAuthorizedMissingRole","HasNoSmiCustomer","HasNoNonSmiCustomer","arrayParamsSerializer","options","forEach","BaseServiceDefinition","axiosInstance","headers","Pragma","withCredentials","interceptors","getAccessToken","accessToken","id","apiBaseUrl","paramsSerializer","post","patch","put","delete","filename","responseType","response","LoginMode","Silent","PopUp","Redirect","QueryParameterNames","ReturnUrl","Message","LogoutActions","LogoutCallback","Logout","LoggedOut","LoginActions","Login","LoginCallback","LoginFailed","Profile","Register","AuthenticationResultStatus","Success","Fail","AuthorizeService","clientB2CSettings","loginCallback","logOutCallback","authConfig","client_id","ClientId","authority","Authority","passwordreset_authority","PasswordResetAuthority","passwordreset_authorization_endpoint","PasswordResetAuthorizationEndpoint","passwordreset_nonce","passwordreset_scope","passwordreset_response_type","redirect_uri","ClientUri","post_logout_redirect_uri","response_type","scope","Scope","extraQueryParams","portal","idps","ui_locales","requireAuthenticationAfter","RequireAuthenticationAfter","clockSkew","userManager","getUser","user","expired","ensureUserManagerInitialized","profile","access_token","getUserProfile","auth_time","now","signinSilent","createArguments","silentUser","updateState","success","policyUrl","URL","searchParams","append","state","usePopup","signinPopup","popUpUser","log","createSigninRequest","signInRequest","redirect","getSignInResponse","signinPopupCallback","signinRedirectCallback","userState","error_description","settings","loadUserInfo","automaticSilentRenew","includeIdTokenInSilentRenew","userStore","monitorSession","response_mode","redirectUserManager","stateStore","getAllKeys","stateKeys","states","startsWith","stateString","JSON","parse","created","join","clearStaleState","createSignoutRequest","signOutRequest","signoutRedirectCallback","clearAllStorage","callback","callbacks","subscription","nextSubscriptionId","subscriptionId","subscriptionIndex","map","element","index","found","keys","remove","notifySubscribers","readSigninResponseState","retryAvailable","status","redirectUrl","createUserManager","events","addUserSignedOut","removeUser","addSilentRenewError","signIn","returnUrl","origin","webpackContext","req","webpackContextResolve","ImpersonationService","azureAdId","catch","term","impersonationService","getMonthRangeFromRouteParams","fromYear","GetWholeNumberFromString","trim","fromMonth","toYear","toMonth","to","getDocumentTitle","BaseDocumentTitle","te","routeDocumentTitle","documentTitleIncludeParams","paramName","documentTitleIncludeQDataQueryText","qDataQueryText","documentTitleIncludeSustainabilityRouteText","sustainabilityType","sustainabilityRouteText","messages","en","i18n","locale","AuthorizationPage","HomePage","NotFoundAndErrorPage","OrderFlowPage","OrdersPage","QDataPage","QDataSearchPage","QDataUnitSearchPage","QDataDeliveryPage","QDataSubscriptionsPage","InvoicesPage","ForecastsPage","PerformanceInvoicedVolumesPage","PerformanceContractPerformancePage","SustainabilityPage","SustainabilitySubscriptionsPage","UserContactsPage","DocumentsPage","DashboardPage","AdminUsersPage","AdminSubscriptionsPage","AdminParametersPage","AdminSustainabilityPage","SmiForecastsPage","SmiConsumptionLogPage","SmiMyWarehousePage","SmiMyConsumptionsPage","SmiStockDeviationsPage","SmiAdminWarehousesPage","SmiAdminWarehousePage","routeNameAuthentication","routeNameHome","routeNameLoginRedirect","routeNameDashboard","routeNameQDataRoot","routeNameQData","routeNameQDataDelivery","routeNameQDataSearch","routeNameQDataSubscriptions","routeNameQDataUnitSearch","routeNameOrderFlowRoot","routeNameOrderFlow","routeNameOrders","routeNameForecasts","routeNameInvoices","routeNamePerformanceRoot","routeNamePerformanceInvoicedVolumes","routeNamePerformanceContractPerformance","routeNameSustainabilityRoot","routeNameSustainability","routeNameSustainabilitySubscriptions","routeNameSustainabilityCertifiedVolumes","routeNameUserContacts","routeNameDocuments","routeNameNotFoundAndError","routeNameSmiRoot","routeNameSmiForecasts","routeNameSmiConsumptionLog","routeNameSmiMyWarehouse","routeNameSmiMyConsumptions","routeNameSmiStockDeviations","routeNameSmiAdminRoot","routeNameSmiAdminWarehousesRoot","routeNameSmiAdminWarehouses","routeNameSmiAdminWarehouse","routeNameAdminRoot","routeNameAdminUsers","routeNameAdminSubscriptions","routeNameAdminParameters","routeNameAdminSustainability","routes","component","accessibleWithoutSelectedCustomer","getResetPasswordPolicyUrl","authRequirements","render","children","hasCustomersQuery","EnvironmentalData","CertifiedVolumes","tabName","accessibleByAdminsWithoutCustomers","hasWarehouseQuery","props","defaultPageSize","getQDataQueryType","isQDataQueryByDates","ByDates","isQDataQueryByTerm","ByTerm","by","getQDataPageQueryData","queryType","page","pageIndex","isNaN","pageSize","urlDateFormat","parameterAsNumber","parameter","productNames","products","isValid","getQDataPageQueryText","generateQDataPageQuery","copyQDataPageQueryFromRoute","newPageIndex","compareQDataPageQuery","SustainabilityRouteTabNames","startOfToday","startOf12MonthsAgo","getStartOfMonthInThePast","defaultMonthRange","getSustainabilityRouteParams","getSustainabilityTabFromRoute","environmentalDataReportType","reportType","All","productName","millId","millName","getYearFromString","productMillAndYear","selectedMonthRange","routeTabName","CarbonFootprints","OriginOfWood","WaterFootprints","getSustainabilityRouteParamTabName","getSustainabilityRoute","tab","product","monthRange","String","padStart","getSustainabilityRouteParamsText","getSustainabilityRouteBreadcrumbs","tabType","hasProductAndMillName","hasMonthRange","breadcrumbs","routeName","routeParams","routeParamsText","routeQuery","EnvironmentalDataReportType","_vm","_h","$createElement","_c","_self","attrs","placeholder","clearable","multiple","disabled","required","on","onInput","onSelect","staticRenderFns","customers","customer","label","$emit","default","components","TreeSelect","MessageType","UserContactsModule","customerNumber","common","getDataFor","setLoading","setLoadingComplete","setLoadingError","hasFreshDataFor","item","currentlyLoadingPromise","isCurrentlyLoading","getContacts","commitSetLoadingComplete","commitSetLoadingError","commitSetLoading","namespaced","dynamic","userContactsModule","staticClass","class","noBackground","largeAvatar","contact","imageUrl","fallbackImageGrey","_v","_e","_s","responsibility","$t","phoneNumber","_f","email","_t","filters","lowercase","LoadingModule","statuses","currentStatus","text","loadingStatus","find","newStatus","commitAdd","loadingModule","CommonArrayStore","complexIdFields","getOrAddItem","clearData","loadDate","checkIsDataFresh","itemWithStatus","field","isArray","includes","newItemWithStatus","dateFilter","prefix","ApplicationPaths","DefaultLoginRedirectPath","ApiAuthorizationPrefix","LogOut","LogOutCallback","authService","IsImpersonationUser","pages","icon","showOnDashboard","showInMenu","subItems","routeParam","checkPageItemAuthRequirements","checkPageSubItemAuthRequirements","subItem","fileNameDateFilter","fileNameDateFormat","LocalStorageInstance","localStorageTest","localStorage","userState_v1_0","stringify","currentUser","createUserState","selectedCustomerNumber","selectedCameraDeviceId","setItem","removeItem","warn","LocalStorage","currenUser","deviceId","setLoadedDate","clearLoadedDate","clearLoading","setLoadingPromise","force","needToReLoad","isInitialized","dispatchInitialize","commitClearCurrenUser","commitSetLoadedDate","commitClearLoading","getCurrent","validateUserState","commitSetSelectedCustomer","commitClearSelectedCustomer","commitClearSelectedCameraDeviceId","commitSetSelectedCameraDeviceId","commitSetCurrenUser","extend","commitSetLoadingPromise","userProfileModule","weekRangeFilter","fromDateWeek","toDateWeek","BaseService","featureFlagsService","featureFlags","getFeatureFlags","commitSetFeatureFlags","commitClearFeatureFlags","featureFlagsModule","UserService","highlights","userService","closeableByOutsideClickAndEscKey","isExtraLarge","isLarge","$event","preventDefault","onCloseClick","arguments","title","dispathWindowEventForModal","hideModal","openNotClose","eventType","CustomEvent","detail","targetModal","TreeSelectValueConsistsOf","TreeSelectShowCountOf","showCountOf","valueConsistsOf","beforeClearAll","onClose","model","$$v","theValue","expression","LeafDescendants","val","doSelect","node","LeafPriority","immediate","deep","DateFormats","dateWithTimeFormat","dayAndShortMonthAndTime","dayAndShortMonth","dayAndShortMonthAndYear","dayWithOrdinal","shortMonthAndDay","Colors","blue","blue50","blue20","limeGreen","limeGreen50","limeGreen20","red","red50","red20","yellow","yellow50","yellow20","sodraGreen","sodraGreen50","sodraGreen20","sodraBlack","sodraBlack10","sodraBlack20","backgroundColorLightGrey","white","UnsupportedBrowsers","ie","authRequirementsForQData","IsAllowedToViewQualityData","QData","authRequirementsForDashboard","authRequirementsForOrderFlow","IsAllowedToViewOrders","Orders","authRequirementsForForecasts","IsAllowedToViewForecasts","Forecasts","authRequirementsForInvoices","IsAllowedToViewInvoices","Invoices","authRequirementsForCreditLimits","IsAllowedToViewCreditLimits","CreditLimits","authRequirementsForPerformanceInvoicedVolumes","Performance","authRequirementsForPerformanceContractPerformance","authRequirementsForSustainability","Sustainability","authRequirementsForSustainabilityCertifiedVolumes","IsAllowedToViewCertifiedVolumes","authRequirementsForUserContacts","UserContacts","authRequirementsForDocuments","Documents","authRequirementsForSubscriptions","IsAllowedToViewSubscriptions","Subscriptions","authRequirementsForImpersonation","Impersonations","authRequirementsForAdminUsers","IsAllowedToViewUsers","AdminUsers","authRequirementsForAdminUserCustomers","IsAllowedToEditUserCustomers","authRequirementsForAdminUserPermissions","IsAllowedToEditUserPermissions","authRequirementsForAdminParameters","IsAllowedToViewAdminParameters","AdminParameters","authRequirementsForAdminSubscriptions","IsAllowedToViewAdminSubscriptions","AdminSubscriptions","authRequirementsForAdminSustainability","IsAllowedToEditSustainabilityData","AdminSustainability","authRequirementsForSmiForecasts","IsAllowedToViewSmiForecasts","SmiForecasts","authRequirementsForSmiConsumptionLog","IsAllowedToViewSmiConsumptions","SmiConsumptions","authRequirementsForSmiMyWarehouse","IsAllowedToViewSmiWarehouse","SmiWarehouse","authRequirementsForSmiMyConsumptions","authRequirementsForSmiStockDeviations","authRequirementsForSmiAdminWarehouses","IsAllowedToViewSmiWarehouses","SmiAdminWarehouses","router","linkExactActiveClass","linkActiveClass","beforeEach","next","debugGroupEnd","debugGroup","routeAuthRequirements","clearAuthenticatedUser","authInitializationFailed","GeneralError","isLoginRedirectRoute","routeRequiresAuth","redirectedToLogin","dispatchLogin","doContinue","dispatchAdd","loadingFeatureFlags","errorLoadingFeatureFlags","dispatchLoad","finally","commitComplete","loadingUserProfile","userProfileLoadFailed","setAuthenticatedUser","warehouse","onSelectionGoTo","notCloseable","ShowCustomerSelectionModalEvent","ImpersonationNeeded","CustomerError","validation","afterEach","nextTick","ErrorType","ConsoleHelperDefinition","Settings","FullConsole","optionalParams","fullConsole","group","groupEnd","logo","loadingText","ref","_m","_l","menuItem","isOnPath","loggedInUser","profileUser","scopedSlots","_u","fn","changeCustomer","proxy","feedback","impersonation","logout","login","$route","matched","featureHighlights","firstName","lastName","given_name","family_name","impersonated","menuItems","newFeature","hasNewFeature","Config","LoginEvent","LogoutEvent","ShowImpersonationModalEvent","ShowFeedbackModalEvent","f","featurePage","ContactCard","MenuItem","domProps","impersonatedMemberName","stop","directives","rawName","searching","startingOrStoppingSession","composing","searchUserText","onSearchUserFormSubmit","searchUserResults","searchedUserText","onImpersonateUserClick","errorSearching","startingSessionError","stoppingSessionError","$refs","modal","showModal","searchUser","searchForUsers","start","end","Modal","stoppingSession","stopImpersonation","errorMessage","AddMessageEvent","closable","onCustomerClick","$router","go","onFeedbackButtonClick","onSubmit","formInvalid","formDetails","selectedCustomerId","onCustomersInput","contactEmail","contacts","generalContactNode","onContactsInput","$set","errorSendingFeedback","errorLoadingContacts","onCloseAlertClick","sendingFeedback","onCancelClick","extraNode","contactsEmail","feedbackService","isFeedbackFeatureEnabled","Feedback","userContacts","initialize","loadUserContacts","successMessage","loadingContacts","detectBrowserInfo","browserInfo","version","os","userAgent","navigator","routeInfo","sendFeedback","onSuccess","show","CustomersTreeSelect","ContactsEmailTreeSelect","$on","showImpersonationModal","showCustomerSelectionModal","showFeedbackModal","$nextTick","dispatchDeinitialize","$off","impersonationModal","feedbackModal","customerSelectionModal","dispatchLogout","returnTo","PageHeader","Sidebar","PageFooter","TheImpersonationModal","TheImpersonationBar","TheCustomerSelectionModal","TheFeedbackButtonAndModal","dayAndShortMonthAndTimeFilter","dayWithOrdinalFilter","setOptions","lang","numericSymbols","chart","fontFamily","$","jQuery","exp","args","other1","other2","productionTip","errorHandler","vm","info","loadSettings","setConfig","ClientB2C","ApplicationInsightsInstrumentationKey","h","$mount","AuthModule","authServiceSubscription","unsubscribe","commitSetAuthServiceSubscription","commitSetIsInitialized","signOut","subscribe","checkAuthentication","canAttemptSilentSignin","commitSetIsAuthenticated","commitSetProfile","authModule","dayAndShortMonthFilter","DeliveryMessageService","toDateString","deliveryMessageNumber","deliveryNoteNumber","downloadFile","deliveryMessageService","monthRangeFilter","dateWithTimeFilter","QueryType","Search","ByDatesSearch","toISOString","areInProductNames","names","thisProductName","ByTermSearch","DeliveryMessagesModule","search","equals","commitClearSearch","commitSetSearch","queryBy","byDatesSearch","byDates","results","hasUnitsFromBeforeAndAfterBreakpoint","byTermSearch","byTerm","deliveryMessagesModule","ConfigDefinition","ApiBaseUrl","ProductColors","ProductDefaultColor","ContactSustainabilityEmailAddress","ContactGeneralEmailAddress","ContactOfficeAddresses","ContactMillAddresses","EudrDownloadsFromDate","VUE_APP_DEV_PERMISSONS_ENABLED","productColorCategory","settingsFileUrl","SettingsFile","WebUISettings","ParameterPsolId","SustainabilityDataType"],"mappings":"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","file":"js/app.93f523b9.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/\" + ({\"admin~invoices~orders~qdata~smi~smiAdmin\":\"admin~invoices~orders~qdata~smi~smiAdmin\",\"admin~qdata~sustainability\":\"admin~qdata~sustainability\",\"admin~qdata\":\"admin~qdata\",\"admin\":\"admin\",\"qdata~smi\":\"qdata~smi\",\"qdata\":\"qdata\",\"forecasts~smi\":\"forecasts~smi\",\"smi~smiAdmin\":\"smi~smiAdmin\",\"smi\":\"smi\",\"invoices\":\"invoices\",\"orders\":\"orders\",\"smiAdmin\":\"smiAdmin\",\"performance~sustainability\":\"performance~sustainability\",\"sustainability\":\"sustainability\",\"contacts\":\"contacts\",\"dashboard~home\":\"dashboard~home\",\"dashboard\":\"dashboard\",\"home\":\"home\",\"documents\":\"documents\",\"forecasts\":\"forecasts\",\"performance\":\"performance\"}[chunkId]||chunkId) + \".\" + {\"admin~invoices~orders~qdata~smi~smiAdmin\":\"d8c11439\",\"admin~qdata~sustainability\":\"bf815af5\",\"admin~qdata\":\"c93c3486\",\"admin\":\"232812e3\",\"qdata~smi\":\"7f0ec1a3\",\"qdata\":\"ca99c0ee\",\"forecasts~smi\":\"5c95b081\",\"smi~smiAdmin\":\"3571de91\",\"smi\":\"8de14fce\",\"invoices\":\"421a0450\",\"orders\":\"f6c68cbc\",\"smiAdmin\":\"ee87a82c\",\"performance~sustainability\":\"5176e371\",\"sustainability\":\"f616be8b\",\"contacts\":\"ec13eb78\",\"dashboard~home\":\"f2cb3510\",\"dashboard\":\"a5f54d68\",\"home\":\"01a60a30\",\"documents\":\"6bf70226\",\"forecasts\":\"cde8e8c2\",\"performance\":\"8a8f347c\"}[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 = {\"admin~invoices~orders~qdata~smi~smiAdmin\":1,\"admin~qdata~sustainability\":1,\"admin\":1,\"qdata~smi\":1,\"qdata\":1,\"forecasts~smi\":1,\"smi\":1,\"invoices\":1,\"orders\":1,\"smiAdmin\":1,\"performance~sustainability\":1,\"sustainability\":1,\"contacts\":1,\"dashboard~home\":1,\"dashboard\":1,\"home\":1,\"documents\":1,\"forecasts\":1,\"performance\":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/\" + ({\"admin~invoices~orders~qdata~smi~smiAdmin\":\"admin~invoices~orders~qdata~smi~smiAdmin\",\"admin~qdata~sustainability\":\"admin~qdata~sustainability\",\"admin~qdata\":\"admin~qdata\",\"admin\":\"admin\",\"qdata~smi\":\"qdata~smi\",\"qdata\":\"qdata\",\"forecasts~smi\":\"forecasts~smi\",\"smi~smiAdmin\":\"smi~smiAdmin\",\"smi\":\"smi\",\"invoices\":\"invoices\",\"orders\":\"orders\",\"smiAdmin\":\"smiAdmin\",\"performance~sustainability\":\"performance~sustainability\",\"sustainability\":\"sustainability\",\"contacts\":\"contacts\",\"dashboard~home\":\"dashboard~home\",\"dashboard\":\"dashboard\",\"home\":\"home\",\"documents\":\"documents\",\"forecasts\":\"forecasts\",\"performance\":\"performance\"}[chunkId]||chunkId) + \".\" + {\"admin~invoices~orders~qdata~smi~smiAdmin\":\"6c642649\",\"admin~qdata~sustainability\":\"d1586ff4\",\"admin~qdata\":\"31d6cfe0\",\"admin\":\"2ef7704a\",\"qdata~smi\":\"40b44192\",\"qdata\":\"bb396e05\",\"forecasts~smi\":\"c792f180\",\"smi~smiAdmin\":\"31d6cfe0\",\"smi\":\"b1174427\",\"invoices\":\"a8774a88\",\"orders\":\"468fcaac\",\"smiAdmin\":\"7ffb26ff\",\"performance~sustainability\":\"48bf4fef\",\"sustainability\":\"895c625c\",\"contacts\":\"e9e62ca5\",\"dashboard~home\":\"6c360918\",\"dashboard\":\"9c7c7c90\",\"home\":\"752b9381\",\"documents\":\"e9e62ca5\",\"forecasts\":\"def11ba4\",\"performance\":\"5c30f665\"}[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","import Vue from 'vue';\r\nimport Vuex from 'vuex';\r\n\r\nVue.use(Vuex);\r\n\r\nexport const store = new Vuex.Store({\r\n /*\r\n Ideally if all your modules are dynamic\r\n then your store is registered initially\r\n as a completely empty object\r\n */\r\n\r\n // enable strict mode (adds overhead!)\r\n // for dev mode only\r\n strict: process.env.DEV === 'true',\r\n});\r\n","export interface LoadingStatus {\r\n isLoading: boolean;\r\n isError: boolean;\r\n error: any;\r\n // errorMessage: string;\r\n loadingPromise: Promise | null;\r\n loadingPromiseForId: any;\r\n}\r\n\r\nexport class CommonStore {\r\n public loading: LoadingStatus = {\r\n isLoading: false,\r\n isError: false,\r\n error: null,\r\n loadingPromise: null,\r\n loadingPromiseForId: null,\r\n };\r\n public lastLoad: Date | null = null;\r\n public reLoadMinMinutesInterval: number = 1;\r\n\r\n constructor(reLoadMinMinutesInterval: number) {\r\n this.reLoadMinMinutesInterval = reLoadMinMinutesInterval;\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n public setLoadedDate(): void {\r\n this.lastLoad = new Date();\r\n }\r\n\r\n public clearLoadedDate(): void {\r\n this.lastLoad = null;\r\n }\r\n\r\n public setLoadingError(payload: { error: any }): void {\r\n this.loading.isLoading = false;\r\n this.loading.isError = true;\r\n this.loading.error = payload.error;\r\n }\r\n\r\n public setLoading(): void {\r\n this.loading.isLoading = true;\r\n this.loading.isError = false;\r\n this.loading.error = null;\r\n }\r\n\r\n public clearLoading(): void {\r\n this.loading.isLoading = false;\r\n this.loading.isError = false;\r\n this.loading.error = null;\r\n }\r\n\r\n public setLoadingPromise(payload: {\r\n loadingPromise: Promise;\r\n loadingPromiseForId: any;\r\n }): void {\r\n this.loading.loadingPromise = payload.loadingPromise;\r\n this.loading.loadingPromiseForId = payload.loadingPromiseForId;\r\n }\r\n\r\n //\r\n // Helper functions\r\n //\r\n public needToReLoad(): boolean {\r\n return this.checkNeedToLoadOrFetch(\r\n this.lastLoad,\r\n this.reLoadMinMinutesInterval\r\n );\r\n }\r\n\r\n public isCurrentlyLoading(loadingId: any = null): boolean {\r\n return (\r\n this.loading.isLoading &&\r\n (this.loading.loadingPromiseForId === null ||\r\n loadingId === this.loading.loadingPromiseForId)\r\n );\r\n }\r\n\r\n private checkNeedToLoadOrFetch(\r\n lastLoadOrFetch: Date | null,\r\n reLoadOrFetchMinMinutesInterval: number\r\n ): boolean {\r\n if (\r\n lastLoadOrFetch !== null &&\r\n this.getMinutesBetweenDates(lastLoadOrFetch, new Date()) <=\r\n reLoadOrFetchMinMinutesInterval\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n private getMinutesBetweenDates(startDate: Date, endDate: Date): number {\r\n const diff = endDate.getTime() - startDate.getTime();\r\n return diff / 60000;\r\n }\r\n}\r\n","export enum FeatureFlagNames {\r\n QData = 'QData',\r\n Orders = 'Orders',\r\n Invoices = 'Invoices',\r\n CreditLimits = 'CreditLimits',\r\n Forecasts = 'Forecasts',\r\n Impersonations = 'Impersonations',\r\n Performance = 'Performance',\r\n Sustainability = 'Sustainability',\r\n UserContacts = 'UserContacts',\r\n Pfi = 'Pfi',\r\n Documents = 'Documents',\r\n Subscriptions = 'Subscriptions',\r\n Feedback = 'Feedback',\r\n AdminUsers = 'AdminUsers',\r\n AdminSubscriptions = 'AdminSubscriptions',\r\n AdminParameters = 'AdminParameters',\r\n AdminSustainability = 'AdminSustainability',\r\n SmiForecasts = 'SmiForecasts',\r\n SmiConsumptions = 'SmiConsumptions',\r\n SmiWarehouse = 'SmiWarehouse',\r\n SmiAdminWarehouses = 'SmiAdminWarehouses',\r\n News = 'News',\r\n DeliveryNotePdf = 'DeliveryNotePdf',\r\n InvoicePdf = 'InvoicePdf',\r\n QDataScanning = 'QDataScanning',\r\n FeatureHighlights = 'FeatureHighlights',\r\n EudrDownloads = 'EudrDownloads',\r\n}\r\n","import Vue from 'vue';\r\n\r\nclass EventBusInstance extends Vue {}\r\n\r\nexport const EventBus = new EventBusInstance();\r\n","import moment from 'moment';\r\nimport Vue from 'vue';\r\nimport { DateFormats } from '@/utils/Constants';\r\n\r\nVue.filter('dateWithFullTime', (value: moment.MomentInput) =>\r\n dateWithFullTimeFilter(value)\r\n);\r\n\r\nexport function dateWithFullTimeFilter(value: moment.MomentInput): string {\r\n if (value) {\r\n const utcDate = moment.utc(value);\r\n const localDate = utcDate.local();\r\n\r\n return localDate.format(DateFormats.dateWithFullTimeFormat);\r\n }\r\n\r\n return '';\r\n}\r\n","import { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport { authModule } from '@/store/modules/auth';\r\nimport { dateWithFullTimeFilter } from '@/filters/dateWithFullTime';\r\nimport { Permissions } from '@/utils/Permissions';\r\nimport { Roles } from '@/models/UserProfile/Roles';\r\n\r\nexport interface RouteTrackingInfo {\r\n track?: boolean;\r\n name?: string;\r\n url?: string;\r\n}\r\n\r\nexport interface CustomCustomProperties {\r\n skipPageView?: boolean;\r\n stoppedInAdvance?: boolean;\r\n notFound?: boolean;\r\n}\r\n\r\nclass TelemetryService {\r\n private appInsights?: ApplicationInsights;\r\n private _trackingPageName: string | null = null;\r\n\r\n public get trackingPageName(): string | null {\r\n return this._trackingPageName;\r\n }\r\n private set trackingPageName(value: string | null) {\r\n this._trackingPageName = value;\r\n }\r\n\r\n public initialize(instrumentationKey: string) {\r\n this.appInsights = new ApplicationInsights({\r\n config: {\r\n instrumentationKey,\r\n enableUnhandledPromiseRejectionTracking: true,\r\n },\r\n });\r\n Consoler.debugLog('Load App Insights');\r\n this.appInsights.loadAppInsights();\r\n }\r\n\r\n public setAuthenticatedUser(authenticatedUserId: string): void {\r\n Consoler.debugWarn(\r\n 'Setting authenticated user context:',\r\n authenticatedUserId\r\n );\r\n if (this.appInsights) {\r\n this.appInsights.setAuthenticatedUserContext(\r\n authenticatedUserId,\r\n undefined,\r\n true\r\n );\r\n }\r\n }\r\n\r\n public clearAuthenticatedUser(): void {\r\n Consoler.debugWarn('Clearing authenticated user context');\r\n if (this.appInsights) {\r\n this.appInsights.clearAuthenticatedUserContext();\r\n }\r\n }\r\n\r\n public startTrackPage(routeTrackingInfo: RouteTrackingInfo): void {\r\n this.checkRouteTrackingInfo(routeTrackingInfo);\r\n\r\n if (routeTrackingInfo.track !== true) {\r\n return;\r\n }\r\n\r\n Consoler.debugLog('-'.repeat(30));\r\n Consoler.debugLog(\r\n 'Start Track Page:',\r\n { name: routeTrackingInfo.name },\r\n dateWithFullTimeFilter(new Date())\r\n );\r\n\r\n this.trackingPageName = routeTrackingInfo.name ?? '';\r\n\r\n if (this.appInsights) {\r\n this.appInsights.startTrackPage(routeTrackingInfo.name);\r\n }\r\n }\r\n\r\n public stopTrackPage(\r\n routeTrackingInfo: RouteTrackingInfo,\r\n customCustomProperties?: CustomCustomProperties,\r\n customProperties?: { [key: string]: any },\r\n measurements?: { [key: string]: number }\r\n ): void {\r\n this.checkRouteTrackingInfo(routeTrackingInfo);\r\n\r\n if (routeTrackingInfo.track !== true) {\r\n return;\r\n }\r\n\r\n const isStoppingLatestStartedTrackPage =\r\n this.trackingPageName === (routeTrackingInfo.name ?? '');\r\n\r\n customProperties =\r\n customProperties !== undefined ? { ...customProperties } : {};\r\n\r\n customProperties.isAuthenticated = authModule.isAuthenticated;\r\n customProperties.isImpersonated =\r\n userProfileModule.data?.userProfile.isImpersonated ?? false;\r\n customProperties.isAdminUser = Permissions.hasRole(Roles.IsAdminUser);\r\n customProperties.hasEmployeeEmail = userProfileModule.data?.userProfile\r\n .isImpersonated\r\n ? userProfileModule.data?.userProfile.impersonatingUser?.hasEmployeeEmail\r\n : userProfileModule.data?.userProfile.hasEmployeeEmail;\r\n\r\n customProperties.userAxId = userProfileModule.data?.userProfile.axId;\r\n customProperties.customerAxId = userProfileModule.selectedCustomer?.number;\r\n customProperties.customerName = userProfileModule.selectedCustomer?.name;\r\n\r\n if (customCustomProperties?.stoppedInAdvance !== undefined) {\r\n customProperties.stoppedInAdvance =\r\n customCustomProperties.stoppedInAdvance;\r\n }\r\n if (customCustomProperties?.notFound !== undefined) {\r\n customProperties.notFound = customCustomProperties.notFound;\r\n }\r\n\r\n const sendStopTrackPage: boolean =\r\n customCustomProperties?.skipPageView !== true;\r\n\r\n Consoler.debugLog(\r\n sendStopTrackPage\r\n ? isStoppingLatestStartedTrackPage\r\n ? 'Stop Track Page - Creating PageView for:'\r\n : 'Stop Track (earlier) Page - Creating PageView for:'\r\n : isStoppingLatestStartedTrackPage\r\n ? '(Skipping track of page - stopped in advance)'\r\n : '(Skipping track of (earlier) page - stopped in advance)',\r\n {\r\n name: routeTrackingInfo.name,\r\n url: routeTrackingInfo.url,\r\n customProperties,\r\n measurements,\r\n },\r\n dateWithFullTimeFilter(new Date())\r\n );\r\n\r\n if (isStoppingLatestStartedTrackPage) {\r\n Consoler.debugLog('-'.repeat(30));\r\n this.trackingPageName = null;\r\n }\r\n\r\n if (sendStopTrackPage && this.appInsights) {\r\n this.appInsights.stopTrackPage(\r\n routeTrackingInfo.name,\r\n routeTrackingInfo.url,\r\n customProperties,\r\n measurements\r\n );\r\n }\r\n }\r\n\r\n public trackException(exception: Error): void {\r\n Consoler.debugWarn('Track Exception', exception);\r\n if (this.appInsights) {\r\n this.appInsights.trackException({\r\n exception,\r\n });\r\n }\r\n }\r\n\r\n public trackTrace(message: string): void {\r\n Consoler.debugLog('Track Trace', message);\r\n\r\n if (this.appInsights) {\r\n this.appInsights.trackTrace({\r\n message,\r\n });\r\n }\r\n }\r\n\r\n private checkRouteTrackingInfo(routeTrackingInfo: RouteTrackingInfo): void {\r\n if (\r\n routeTrackingInfo.track === undefined ||\r\n routeTrackingInfo.name === undefined ||\r\n routeTrackingInfo.url === undefined\r\n ) {\r\n Consoler.debugWarn(\r\n 'Route tracking info for page view tracking is not complete',\r\n routeTrackingInfo\r\n );\r\n }\r\n }\r\n}\r\n\r\nconst telemetryService: TelemetryService = new TelemetryService();\r\n\r\nexport default telemetryService;\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactCard.vue?vue&type=style&index=0&id=b347a684&scoped=true&lang=scss&\"","import Vue from 'vue';\r\nimport { Document } from '@/models/Documents/Document';\r\n\r\nclass HelpersDefinition extends Vue {\r\n private readonly positiveWholeNumberRegex = /^\\d+$/;\r\n\r\n public Wait = (ms: number) => new Promise((r) => setTimeout(r, ms));\r\n\r\n public DispatchWindowEvent(eventName: string) {\r\n let event;\r\n if (typeof Event === 'function') {\r\n event = new Event(eventName);\r\n } else {\r\n event = document.createEvent('Event');\r\n event.initEvent(eventName, true, true);\r\n }\r\n window.dispatchEvent(event);\r\n }\r\n\r\n public GetClassesForHtmlElement(el: HTMLElement): string[] | null {\r\n if (el.classList) {\r\n return Array.from(el.classList);\r\n } else {\r\n // IE fix:\r\n const classAttr = el.getAttribute('class');\r\n if (classAttr !== null) {\r\n return classAttr.split(' ');\r\n } else {\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n public GetRandomId(): string {\r\n return Math.random()\r\n .toString(36)\r\n .replace(/[^a-z]+/g, '')\r\n .substr(2, 10);\r\n }\r\n\r\n public ToCurrency(\r\n value: number,\r\n hideCurrency: boolean | undefined,\r\n minDigits: number | undefined,\r\n maxDigits: number | undefined\r\n ): string {\r\n if (typeof value !== 'number') {\r\n return value;\r\n }\r\n\r\n const formatter = new Intl.NumberFormat('sv-SE', {\r\n style: hideCurrency === true ? 'decimal' : 'currency',\r\n currency: 'SEK',\r\n minimumFractionDigits: minDigits !== undefined ? minDigits : 0,\r\n maximumFractionDigits: maxDigits,\r\n });\r\n\r\n return formatter.format(value);\r\n }\r\n\r\n public IsBothEmptyOrNull(value1: string, value2: string) {\r\n return (\r\n (value1 === null || value1 === '') && (value2 === null || value2 === '')\r\n );\r\n }\r\n\r\n public areEqual(a: T[], b: T[]): boolean {\r\n return a.length === b.length && a.every((c) => b.indexOf(c) !== -1);\r\n }\r\n\r\n // Remark: This requires hex color codes in the full 6 number format, #000000\r\n public HexToRGB(hex: string, alpha?: number) {\r\n const r = parseInt(hex.slice(1, 3), 16);\r\n const g = parseInt(hex.slice(3, 5), 16);\r\n const b = parseInt(hex.slice(5, 7), 16);\r\n\r\n if (alpha) {\r\n return 'rgba(' + r + ', ' + g + ', ' + b + ', ' + alpha + ')';\r\n } else {\r\n return 'rgb(' + r + ', ' + g + ', ' + b + ')';\r\n }\r\n }\r\n\r\n public AddAlphaToColor(color: string, opacity: number): string {\r\n const _opacity = Math.round(Math.min(Math.max(opacity || 1, 0), 1) * 255);\r\n return color + _opacity.toString(16).toUpperCase();\r\n }\r\n\r\n public GetWholeNumberFromString(value: string): number | null {\r\n if (!this.positiveWholeNumberRegex.test(value)) {\r\n return null;\r\n }\r\n return Number(value);\r\n }\r\n\r\n public getDocumentIconClass(document: Document): string {\r\n if (document.fileType && document.fileType.toLowerCase() === 'pdf') {\r\n return 'mdi-file-pdf';\r\n } else if (\r\n document.fileType &&\r\n (document.fileType.toLowerCase() === 'xls' ||\r\n document.fileType.toLowerCase() === 'xlsx')\r\n ) {\r\n return 'mdi-file-excel';\r\n } else {\r\n return 'mdi-file-document';\r\n }\r\n }\r\n}\r\n\r\nexport const Helpers = new HelpersDefinition();\r\n","import { routeNameNotFoundAndError } from './routes';\r\nimport { Route, Location } from 'vue-router';\r\nimport { ErrorType } from '@/models/ErrorType';\r\nimport { Dictionary } from 'vue-router/types/router';\r\nimport { RouteTrackingInfo } from '@/services/TelemetryService';\r\n\r\nconst programmaticRoutingParamName: string = 'programmaticRouting';\r\nconst documentTitleParamName: string = 'documentTitle';\r\n\r\nexport function addProgrammaticRoutingParamToRoute(route: Route): Route {\r\n if (route.params === undefined) {\r\n route.params = {};\r\n }\r\n route.params[programmaticRoutingParamName] = 'true';\r\n return route;\r\n}\r\n\r\nexport function createParamsWithProgrammaticRouting(): Dictionary {\r\n const params: Dictionary = {};\r\n params[programmaticRoutingParamName] = 'true';\r\n return params;\r\n}\r\n\r\nexport function hasProgrammaticRoutingParam(route: Route): boolean {\r\n return (\r\n route.params !== undefined &&\r\n route.params[programmaticRoutingParamName] === 'true'\r\n );\r\n}\r\n\r\nexport function addDocumentTitleToRouteMeta(\r\n route: Route,\r\n documentTitle: string\r\n): Route {\r\n if (route.meta === undefined) {\r\n route.meta = {};\r\n }\r\n route.meta[documentTitleParamName] = documentTitle;\r\n return route;\r\n}\r\n\r\nexport function getDocumentTitleFromRouteMeta(route: Route): string {\r\n return route.meta !== undefined ? route.meta[documentTitleParamName] : '';\r\n}\r\n\r\nexport function getFullUrlForRoute(route: Route): string {\r\n return `${location.protocol}//${location.host}${route.fullPath}`;\r\n}\r\n\r\nexport function getLoggingNameForRoute(route: Route): string {\r\n return `${route.name}: ${getDocumentTitleFromRouteMeta(route)}`;\r\n}\r\n\r\nexport function getIsToTrackRoute(route: Route): boolean {\r\n return route.meta?.track === true;\r\n}\r\n\r\nexport function getRouteTrackingInfo(route: Route): RouteTrackingInfo {\r\n return {\r\n track: getIsToTrackRoute(route),\r\n name: getLoggingNameForRoute(route),\r\n url: getFullUrlForRoute(route),\r\n };\r\n}\r\n\r\nexport function getNotFoundOrErrorLocation(\r\n actualRoute: Route,\r\n errorType: ErrorType = ErrorType.NotFound,\r\n customHeader: string = '',\r\n customMessage: string = ''\r\n): Location {\r\n actualRoute.params.errorType = errorType;\r\n if (customHeader) {\r\n actualRoute.params.customHeader = customHeader;\r\n }\r\n if (customMessage) {\r\n actualRoute.params.customMessage = customMessage;\r\n }\r\n const location = createLocationFromRoute(actualRoute);\r\n location.name = routeNameNotFoundAndError;\r\n\r\n return location;\r\n}\r\n\r\nexport function createLocationFromRoute(route: Route): Location {\r\n return {\r\n name: route.name === null ? undefined : route.name,\r\n params: { 0: route.path, ...route.params },\r\n query: route.query,\r\n };\r\n}\r\n","import moment from 'moment';\r\nimport Vue from 'vue';\r\nimport { DateFormats } from '@/utils/Constants';\r\n\r\nVue.filter('yearAndMonth', (year: number, month: number) =>\r\n yearAndMonthFilter(year, month)\r\n);\r\n\r\nexport function yearAndMonthFilter(year: number, month: number): string {\r\n return moment(new Date(year, month - 1, 1)).format(\r\n DateFormats.yearAndMonthFormat\r\n );\r\n}\r\n","export enum PermissionType {\r\n IsAllowedToViewCreditLimits = 'IsAllowedToViewCreditLimits',\r\n IsAllowedToViewQualityData = 'IsAllowedToViewQualityData',\r\n IsAllowedToViewForecasts = 'IsAllowedToViewForecasts',\r\n IsAllowedToEditForecasts = 'IsAllowedToEditForecasts',\r\n IsAllowedToViewOrders = 'IsAllowedToViewOrders',\r\n IsAllowedToViewInvoices = 'IsAllowedToViewInvoices',\r\n IsAllowedToViewCertifiedVolumes = 'IsAllowedToViewCertifiedVolumes',\r\n IsAllowedToViewUsers = 'IsAllowedToViewUsers',\r\n IsAllowedToEditUserCustomers = 'IsAllowedToEditUserCustomers',\r\n IsAllowedToEditUserPermissions = 'IsAllowedToEditUserPermissions',\r\n IsAllowedToViewAdminSubscriptions = 'IsAllowedToViewAdminSubscriptions',\r\n IsAllowedToEditAdminSubscriptions = 'IsAllowedToEditAdminSubscriptions',\r\n IsAllowedToViewSubscriptions = 'IsAllowedToViewSubscriptions',\r\n IsAllowedToEditSubscriptions = 'IsAllowedToEditSubscriptions',\r\n IsAllowedToViewAdminParameters = 'IsAllowedToViewAdminParameters',\r\n IsAllowedToEditAdminParameters = 'IsAllowedToEditAdminParameters',\r\n IsAllowedToEditSustainabilityData = 'IsAllowedToEditSustainabilityData',\r\n IsAllowedToViewSmiForecasts = 'IsAllowedToViewSmiForecasts',\r\n IsAllowedToEditSmiForecasts = 'IsAllowedToEditSmiForecasts',\r\n IsAllowedToViewSmiConsumptions = 'IsAllowedToViewSmiConsumptions',\r\n IsAllowedToEditSmiConsumptions = 'IsAllowedToEditSmiConsumptions',\r\n IsAllowedToViewSmiWarehouse = 'IsAllowedToViewSmiWarehouse',\r\n IsAllowedToEditSmiWarehouse = 'IsAllowedToEditSmiWarehouse',\r\n IsAllowedToViewSmiWarehouses = 'IsAllowedToViewSmiWarehouses',\r\n IsAllowedToEditSmiWarehouses = 'IsAllowedToEditSmiWarehouses',\r\n}\r\n","import moment from 'moment';\r\nimport Vue from 'vue';\r\n\r\nclass DatesDefinition extends Vue {\r\n private readonly yearRegex = /\\d{4}/;\r\n\r\n public startOfDay(date: Date): Date {\r\n return moment(date).startOf('day').toDate();\r\n }\r\n\r\n public startOfToday(): Date {\r\n return this.startOfDay(new Date());\r\n }\r\n\r\n public startOfYear(year: number): Date {\r\n return moment(new Date(year, 1, 1)).startOf('year').startOf('day').toDate();\r\n }\r\n\r\n public startOfLastYear(): Date {\r\n return this.startOfYear(new Date().getFullYear() - 1);\r\n }\r\n\r\n public endOfYear(year: number): Date {\r\n return moment(new Date(year, 1, 1)).endOf('year').startOf('day').toDate();\r\n }\r\n\r\n public endOfLastYear(): Date {\r\n return this.endOfYear(new Date().getFullYear() - 1);\r\n }\r\n\r\n public startOfMonth(date: moment.MomentInput): Date {\r\n return moment(date).startOf('month').startOf('day').toDate();\r\n }\r\n\r\n public endOfMonth(date: moment.MomentInput): Date {\r\n return moment(date).endOf('month').startOf('day').toDate();\r\n }\r\n\r\n public startOfWeek(date: moment.MomentInput): Date {\r\n return moment(date).startOf('isoWeek').startOf('day').toDate();\r\n }\r\n\r\n public endOfWeek(date: moment.MomentInput): Date {\r\n return moment(date).endOf('isoWeek').startOf('day').toDate();\r\n }\r\n\r\n public isToday(date: moment.MomentInput) {\r\n return moment().isSame(date, 'day');\r\n }\r\n\r\n public isCurrentWeek(date: moment.MomentInput) {\r\n return (\r\n Dates.startOfWeek(new Date()).getFullYear() ===\r\n this.startOfWeek(date).getFullYear() &&\r\n moment().isoWeek() === moment(date).isoWeek()\r\n );\r\n }\r\n\r\n public isFirstOrLastDayOfMonth(value: moment.MomentInput) {\r\n const momentValue = this.$moment(value);\r\n return (\r\n momentValue.date() === 1 ||\r\n momentValue.date() === momentValue.daysInMonth()\r\n );\r\n }\r\n\r\n public getDateANumbersOfMonthsInThePast(numberOfMonthsBack: number): Date {\r\n const date = new Date();\r\n date.setMonth(date.getMonth() - numberOfMonthsBack);\r\n return this.startOfDay(date);\r\n }\r\n\r\n public getStartOfMonthInThePast(numberOfMonthsBack: number): Date {\r\n const date = new Date();\r\n date.setMonth(date.getMonth() - numberOfMonthsBack);\r\n return this.startOfMonth(date);\r\n }\r\n\r\n public getYearFromString(value: string): number | null {\r\n if (!this.yearRegex.test(value)) {\r\n return null;\r\n }\r\n return Number(value);\r\n }\r\n}\r\n\r\nexport const Dates = new DatesDefinition();\r\n","import moment from 'moment';\r\nimport Vue from 'vue';\r\n\r\nVue.filter('day', (value: string) => dayFilter(value));\r\n\r\nexport function dayFilter(value: moment.MomentInput): number {\r\n return moment(value).date();\r\n}\r\n","import Vue from 'vue';\r\n\r\nVue.filter('number', (value?: number, minDecimals?: number) =>\r\n numberFilter(value, minDecimals)\r\n);\r\n\r\nexport function numberFilter(\r\n value?: number,\r\n minDecimals?: number,\r\n maxDecimals?: number\r\n): string | undefined {\r\n return value !== undefined\r\n ? new Intl.NumberFormat(\r\n undefined,\r\n minDecimals || maxDecimals\r\n ? {\r\n maximumFractionDigits: maxDecimals ?? 10,\r\n minimumFractionDigits: minDecimals,\r\n }\r\n : undefined\r\n ).format(value)\r\n : undefined;\r\n}\r\n","import moment from 'moment';\r\nimport Vue from 'vue';\r\nimport { DateFormats } from '@/utils/Constants';\r\n\r\nVue.filter(\r\n 'dateRange',\r\n (fromDate: string, toDate: string, showDayMonthAndYear: boolean) =>\r\n dateRangeFilter(fromDate, toDate, showDayMonthAndYear)\r\n);\r\n\r\nexport function dateRangeFilter(\r\n fromDate: moment.MomentInput,\r\n toDate: moment.MomentInput,\r\n showDayMonthAndYear?: boolean\r\n): string {\r\n const fromDateMoment = moment(fromDate);\r\n const toDateMoment = moment(toDate);\r\n if (showDayMonthAndYear) {\r\n if (toDateMoment.year() !== fromDateMoment.year()) {\r\n return `${fromDateMoment.format(\r\n DateFormats.dateRangeDayMonthAndYear\r\n )} - ${toDateMoment.format(DateFormats.dateRangeDayMonthAndYear)}`;\r\n } else {\r\n return `${fromDateMoment.format(\r\n DateFormats.dateRangeDayAndMonth\r\n )} - ${toDateMoment.format(DateFormats.dateRangeDayMonthAndYear)}`;\r\n }\r\n }\r\n if (toDateMoment.year() !== fromDateMoment.year()) {\r\n return `${fromDateMoment.format(\r\n DateFormats.dateRangeDayMonthAndYear\r\n )} - ${toDateMoment.format(DateFormats.dateRangeDayMonthAndYear)}`;\r\n } else if (toDateMoment.month() !== fromDateMoment.month()) {\r\n return `${fromDateMoment.format(\r\n DateFormats.dateRangeDayAndMonth\r\n )} - ${toDateMoment.format(\r\n toDateMoment.year() !== moment().year()\r\n ? DateFormats.dateRangeDayMonthAndYear\r\n : DateFormats.dateRangeDayAndMonth\r\n )}`;\r\n } else if (toDateMoment.day() !== fromDateMoment.day()) {\r\n return `${fromDateMoment.format(\r\n DateFormats.dateRangeDay\r\n )}-${toDateMoment.format(\r\n toDateMoment.year() !== moment().year()\r\n ? DateFormats.dateRangeDayMonthAndYear\r\n : DateFormats.dateRangeDayAndMonth\r\n )}`;\r\n } else {\r\n return fromDateMoment.format(\r\n fromDateMoment.year() !== moment().year()\r\n ? DateFormats.dateRangeDayMonthAndYear\r\n : DateFormats.dateRangeDayAndMonth\r\n );\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport Vue from 'vue';\r\nimport { DateFormats } from '@/utils/Constants';\r\n\r\nVue.filter('dateRangeShort', (fromDate: string, toDate: string) =>\r\n dateRangeShortFilter(fromDate, toDate)\r\n);\r\n\r\nexport function dateRangeShortFilter(fromDate: string, toDate: string): string {\r\n const fromDateMoment = moment(fromDate);\r\n const toDateMoment = moment(toDate);\r\n return `${fromDateMoment.format(\r\n DateFormats.dateFormat\r\n )} - ${toDateMoment.format(DateFormats.dateFormat)}`;\r\n}\r\n","import { Consoler } from './Consoler';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport { Config } from './Config';\r\nimport { FeatureFlagNames } from '@/models/FeatureFlagNames';\r\nimport { AuthRequirements } from '@/router/authRequirements';\r\nimport { featureFlagsModule } from '@/store/modules/featureFlags';\r\nimport { authModule } from '@/store/modules/auth';\r\nimport { PermissionType } from '@/models/UserProfile/PermissionType';\r\nimport { Customer } from '@/models/Customer';\r\nimport { Roles } from '@/models/UserProfile/Roles';\r\n\r\nconst hasPermission = (permission: PermissionType): boolean => {\r\n if (Config.isDevelopment && !Config.DevPermissionsEnabled) {\r\n Consoler.debugLog('No permissions check (development)');\r\n return true;\r\n }\r\n\r\n if (!authModule.isAuthenticated || !userProfileModule.data) {\r\n return false;\r\n }\r\n\r\n const result = userProfileModule.data.permissions.some(\r\n (x) => x === permission\r\n );\r\n if (result === false) {\r\n Consoler.debugLog('User permission check negative for: ', permission);\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst hasRole = (role: string): boolean => {\r\n if (Config.isDevelopment && !Config.DevPermissionsEnabled) {\r\n Consoler.debugLog('No permissions check (development)');\r\n return true;\r\n }\r\n\r\n if (!authModule.isAuthenticated || !userProfileModule.data) {\r\n return false;\r\n }\r\n\r\n const result = userProfileModule.data.roles.some((x) => x === role);\r\n if (result === false) {\r\n Consoler.debugLog('User role check negative for: ', role);\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst isFeatureEnabled = (featureFlag: FeatureFlagNames): boolean => {\r\n if (!featureFlagsModule.data) {\r\n return false;\r\n }\r\n\r\n const enabled = featureFlagsModule.data.items.some(\r\n (x) => x.enabled === true && x.name === featureFlag\r\n );\r\n if (!enabled) {\r\n Consoler.debugLog('User feature flag check negative', featureFlag);\r\n }\r\n return enabled;\r\n};\r\n\r\nexport enum ValidationError {\r\n NotAuthenticated,\r\n NotAuthorizedMissingPermission,\r\n NotAuthorizedMissingRole,\r\n MissingFeatureFlag,\r\n HasNoSmiCustomer,\r\n HasNoNonSmiCustomer,\r\n}\r\n\r\nconst validate = (\r\n requirements: AuthRequirements,\r\n userCustomers?: Customer[]\r\n): { valid: boolean; error: ValidationError | undefined } => {\r\n if (requirements.requiresAuth && !authModule.isAuthenticated) {\r\n return { valid: false, error: ValidationError.NotAuthenticated };\r\n }\r\n\r\n if (requirements.featureFlag && !isFeatureEnabled(requirements.featureFlag)) {\r\n return { valid: false, error: ValidationError.MissingFeatureFlag };\r\n }\r\n\r\n if (\r\n requirements.requiresNonSmiCustomer &&\r\n !hasRole(Roles.IsAdminUser) &&\r\n !userCustomers?.some((c) => !c.isSmiCustomer)\r\n ) {\r\n return { valid: false, error: ValidationError.HasNoNonSmiCustomer };\r\n }\r\n\r\n if (\r\n requirements.requiresSmiCustomer &&\r\n !hasRole(Roles.IsAdminUser) &&\r\n !userCustomers?.some((c) => c.isSmiCustomer)\r\n ) {\r\n return { valid: false, error: ValidationError.HasNoSmiCustomer };\r\n }\r\n\r\n if (requirements.permission && !hasPermission(requirements.permission)) {\r\n return {\r\n valid: false,\r\n error: ValidationError.NotAuthorizedMissingPermission,\r\n };\r\n }\r\n\r\n if (requirements.role && !hasRole(requirements.role)) {\r\n return { valid: false, error: ValidationError.NotAuthorizedMissingRole };\r\n }\r\n\r\n return { valid: true, error: undefined };\r\n};\r\n\r\nexport const Permissions = {\r\n hasPermission: hasPermission,\r\n hasRole: hasRole,\r\n isFeatureEnabled: isFeatureEnabled,\r\n validate: validate,\r\n};\r\n","import Axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\r\nimport fileDownload from 'js-file-download';\r\nimport { Config } from '@/utils/Config';\r\nimport authService from './AuthService';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\n\r\nexport const arrayParamsSerializer = (params: any): string => {\r\n // This serializes array query params as \"id=1&id=2\", instead of the axios default \"id[]=1&id[]=2\" which .Net Core doesn't handle without customization.\r\n let options = '';\r\n for (const key in params) {\r\n if (typeof params[key] !== 'object' && params[key]) {\r\n options += `${key}=${params[key]}&`;\r\n } else if (\r\n typeof params[key] === 'object' &&\r\n params[key] &&\r\n params[key].length\r\n ) {\r\n params[key].forEach((el: any) => {\r\n options += `${key}=${el}&`;\r\n });\r\n }\r\n }\r\n return options ? options.slice(0, -1) : options;\r\n};\r\n\r\nexport abstract class BaseServiceDefinition {\r\n private get apiBaseUrl(): string {\r\n return Config.apiBaseUrl;\r\n }\r\n\r\n private axiosInstance: AxiosInstance;\r\n\r\n constructor() {\r\n this.axiosInstance = Axios.create({\r\n headers: { Pragma: 'no-cache', 'Cache-Control': 'no-cache' },\r\n withCredentials: true,\r\n });\r\n\r\n this.axiosInstance.interceptors.request.use(async (config) => {\r\n const accessToken = await authService.getAccessToken();\r\n if (accessToken) {\r\n config.headers['Authorization'] = 'Bearer ' + accessToken;\r\n }\r\n\r\n if (userProfileModule.selectedCustomer !== null) {\r\n config.headers['CustomerId'] = userProfileModule.selectedCustomer.id;\r\n config.headers['CustomerNumber'] =\r\n userProfileModule.selectedCustomer.number;\r\n }\r\n\r\n return config;\r\n });\r\n }\r\n\r\n protected get(\r\n url: string,\r\n params?: any,\r\n paramsSerializer?: (params: any) => string\r\n ): Promise {\r\n return this.axiosInstance.get(this.apiBaseUrl + url, {\r\n params,\r\n paramsSerializer,\r\n } as AxiosRequestConfig);\r\n }\r\n\r\n protected post(url: string, data?: any, config?: any): Promise {\r\n return this.axiosInstance.post(this.apiBaseUrl + url, data, config);\r\n }\r\n\r\n protected patch(url: string, data?: any): Promise {\r\n return this.axiosInstance.patch(this.apiBaseUrl + url, data);\r\n }\r\n\r\n protected put(url: string, data: any, params?: any): Promise {\r\n return this.axiosInstance.put(this.apiBaseUrl + url, data, { params });\r\n }\r\n\r\n protected delete(\r\n url: string,\r\n params?: any,\r\n paramsSerializer?: (params: any) => string\r\n ): Promise {\r\n return this.axiosInstance.delete(this.apiBaseUrl + url, {\r\n params,\r\n paramsSerializer,\r\n } as AxiosRequestConfig);\r\n }\r\n\r\n protected async downloadFile(\r\n url: string,\r\n filename: string,\r\n params?: any,\r\n paramsSerializer?: (params: any) => string\r\n ): Promise {\r\n const response = await this.axiosInstance.get(this.apiBaseUrl + url, {\r\n responseType: 'blob',\r\n params,\r\n paramsSerializer,\r\n } as AxiosRequestConfig);\r\n\r\n const type = response.headers['content-type'] || 'application/octet-stream';\r\n\r\n return fileDownload(response.data, filename, type);\r\n }\r\n\r\n protected sleep(ms: number): Promise {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n }\r\n}\r\n","import {\r\n UserManager,\r\n WebStorageStateStore,\r\n User,\r\n UserManagerSettings,\r\n Profile,\r\n} from 'oidc-client';\r\nimport { B2CSettings } from '../models/B2CSettings';\r\n\r\nimport telemetryService from '@/services/TelemetryService';\r\n\r\nconst LoginMode = {\r\n Silent: 'silent',\r\n PopUp: 'popup',\r\n Redirect: 'redirect',\r\n};\r\n\r\nexport const QueryParameterNames = {\r\n ReturnUrl: 'returnUrl',\r\n Message: 'message',\r\n};\r\n\r\nexport const LogoutActions = {\r\n LogoutCallback: 'logout-callback',\r\n Logout: 'logout',\r\n LoggedOut: 'logged-out',\r\n};\r\n\r\nexport const LoginActions = {\r\n Login: 'login',\r\n LoginCallback: 'login-callback',\r\n LoginFailed: 'login-failed',\r\n Profile: 'profile',\r\n Register: 'register',\r\n};\r\n\r\nexport const AuthenticationResultStatus = {\r\n Redirect: 'redirect',\r\n Success: 'success',\r\n Fail: 'fail',\r\n};\r\n\r\nexport interface ReturnStatus {\r\n status: string;\r\n message?: string;\r\n state?: { returnUrl: string };\r\n redirectUrl?: string;\r\n retryAvailable?: boolean;\r\n}\r\n\r\nexport class AuthorizeService {\r\n private callbacks: Array<{\r\n callback: () => Promise;\r\n subscription: number;\r\n }> = [];\r\n private nextSubscriptionId: number = 0;\r\n private user: User | null | undefined = null;\r\n private userManager: UserManager | undefined;\r\n private authConfig:\r\n | {\r\n passwordreset_authority: string;\r\n passwordreset_authorization_endpoint: string;\r\n passwordreset_response_type: string;\r\n passwordreset_scope: string;\r\n client_id: string;\r\n redirect_uri: string;\r\n }\r\n | any;\r\n\r\n public setConfig(\r\n clientB2CSettings: B2CSettings,\r\n loginCallback: string,\r\n logOutCallback: string\r\n ): void {\r\n this.authConfig = {\r\n client_id: clientB2CSettings.ClientId,\r\n authority: clientB2CSettings.Authority,\r\n passwordreset_authority: clientB2CSettings.PasswordResetAuthority,\r\n passwordreset_authorization_endpoint:\r\n clientB2CSettings.PasswordResetAuthorizationEndpoint,\r\n passwordreset_nonce: 'defaultNonce',\r\n passwordreset_scope: 'openid',\r\n passwordreset_response_type: 'id_token',\r\n redirect_uri: `${clientB2CSettings.ClientUri}${loginCallback}`,\r\n post_logout_redirect_uri: `${clientB2CSettings.ClientUri}${logOutCallback}`,\r\n response_type: 'code',\r\n scope: clientB2CSettings.Scope,\r\n extraQueryParams: { portal: true, idps: 'web' },\r\n ui_locales: 'en',\r\n requireAuthenticationAfter: clientB2CSettings.RequireAuthenticationAfter,\r\n clockSkew: 600,\r\n };\r\n\r\n this.userManager = undefined;\r\n }\r\n\r\n /**\r\n * Check if authenticated and has a not expired.\r\n */\r\n public async isAuthenticated(): Promise {\r\n const user = await this.getUser();\r\n return !!user && !user.expired;\r\n }\r\n\r\n /**\r\n * Get user.\r\n */\r\n public async getUser(): Promise {\r\n if (this.user) {\r\n return this.user;\r\n }\r\n\r\n await this.ensureUserManagerInitialized();\r\n if (this.userManager) {\r\n return await this.userManager.getUser();\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Get user profile.\r\n */\r\n public async getUserProfile(): Promise {\r\n if (this.user && this.user.profile) {\r\n return this.user.profile;\r\n }\r\n\r\n const user = await this.getUser();\r\n\r\n return user && user.profile;\r\n }\r\n\r\n /**\r\n * Get access token. Will be null/undefined if expired.\r\n */\r\n public async getAccessToken(): Promise {\r\n await this.ensureUserManagerInitialized();\r\n if (this.userManager) {\r\n const user = await this.userManager.getUser();\r\n return user && !user.expired ? user.access_token : undefined;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n /**\r\n * We check to see if we can authenticate the user silently This happens\r\n * when the user has an refresh token and the time since authentication is not longer than the configured maximum.\r\n */\r\n public async canAttemptSilentSignin(): Promise {\r\n await this.ensureUserManagerInitialized();\r\n if (!this.userManager) {\r\n return false;\r\n }\r\n\r\n const user = await this.getUserProfile();\r\n\r\n return user &&\r\n user.auth_time &&\r\n user.auth_time >\r\n Date.now() / 1000 - this.authConfig.requireAuthenticationAfter\r\n ? true\r\n : false;\r\n }\r\n\r\n /**\r\n * 1) We try to see if we can authenticate the user silently. This happens\r\n * when the user has an refresh token and the time since authentication is not longer than the configured maximum.\r\n */\r\n public async signinSilent(): Promise {\r\n await this.ensureUserManagerInitialized();\r\n if (!this.userManager) {\r\n return this.error('SignIn error: UserManager not initialized.');\r\n }\r\n\r\n try {\r\n const silentUser = await this.userManager.signinSilent(\r\n this.createArguments(LoginMode.Silent)\r\n );\r\n this.updateState(silentUser);\r\n return this.success(undefined);\r\n } catch (silentError: any) {\r\n return this.error(silentError);\r\n }\r\n }\r\n\r\n public getResetPasswordPolicyUrl(): URL {\r\n const config = this.authConfig;\r\n\r\n const policyUrl = new URL(config.passwordreset_authorization_endpoint);\r\n\r\n policyUrl.searchParams.append('nonce', config.passwordreset_nonce);\r\n policyUrl.searchParams.append('scope', config.passwordreset_scope);\r\n policyUrl.searchParams.append(\r\n 'response_type',\r\n config.passwordreset_response_type\r\n );\r\n policyUrl.searchParams.append('client_id', config.client_id);\r\n policyUrl.searchParams.append('redirect_uri', config.redirect_uri);\r\n\r\n return policyUrl;\r\n }\r\n\r\n /**\r\n * 1) We try to authenticate the user using a PopUp Window. This might fail if there is a\r\n * Pop-Up blocker or the user has disabled PopUps.\r\n * 2) If the two methods above fail, we redirect the browser to the IdP to perform a traditional\r\n * redirect flow.\r\n *\r\n * @param state\r\n * @param usePopup Attempt popup auth or not.\r\n */\r\n public async signIn(\r\n state: { returnUrl: string },\r\n usePopup?: boolean\r\n ): Promise {\r\n await this.ensureUserManagerInitialized();\r\n if (!this.userManager) {\r\n return this.error('SignIn error: UserManager not initialized.');\r\n }\r\n\r\n try {\r\n if (!usePopup) {\r\n throw new Error('usePopup is false.');\r\n }\r\n\r\n const popUpUser = await this.userManager.signinPopup(\r\n this.createArguments(LoginMode.PopUp)\r\n );\r\n this.updateState(popUpUser);\r\n return this.success(state);\r\n } catch (popUpError: any) {\r\n if (popUpError.message === 'Popup window closed') {\r\n // The user explicitly cancelled the login action by closing an opened popup.\r\n return this.error('The user closed the window.');\r\n } else if (usePopup) {\r\n // eslint-disable-next-line no-console\r\n console.log('Popup authentication error: ', popUpError);\r\n }\r\n\r\n // usePopup might be false or PopUps might be blocked by the user, fallback to redirect\r\n try {\r\n const signInRequest = await this.userManager.createSigninRequest(\r\n this.createArguments(LoginMode.Redirect, state)\r\n );\r\n return this.redirect(signInRequest.url);\r\n } catch (redirectError: any) {\r\n return this.error(redirectError);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * We are receiving a callback from the IdP. This code can be running in 2 situations:\r\n * 1) As a PopUp window started by a pop-up login on signIn (above). The code in the main\r\n * browser window will close the pop-up window after returning from signInPopUp\r\n * 2) On the main browser window when the IdP redirects back to the app. We will process\r\n * the response and redirect to the return url or display an error message.\r\n * @param url\r\n */\r\n public async completeSignIn(url: string | undefined): Promise {\r\n await this.ensureUserManagerInitialized();\r\n\r\n if (!this.userManager) {\r\n return this.error(\r\n 'Callback authentication error: UserManager not initialized.'\r\n );\r\n }\r\n\r\n try {\r\n const response = await this.getSignInResponse(url);\r\n\r\n switch (response.state.data.mode) {\r\n case LoginMode.PopUp:\r\n await this.userManager.signinPopupCallback(url);\r\n return this.success(undefined);\r\n case LoginMode.Redirect: {\r\n const user = await this.userManager.signinRedirectCallback(url);\r\n this.updateState(user);\r\n return this.success(user.state.userState);\r\n }\r\n default:\r\n throw new Error(`Invalid login mode '${response.state.data.mode}'.`);\r\n }\r\n } catch (processSignInResponseError: any) {\r\n if (processSignInResponseError.error === 'login_required') {\r\n // This error is thrown by the underlying oidc client when it tries to log in\r\n // the user silently as in case 1 defined above and the IdP requires the user\r\n // to enter credentials. We let the user manager handle the response to notify\r\n // the main window.\r\n throw new Error(processSignInResponseError);\r\n } else {\r\n // User requested password reset\r\n if (\r\n processSignInResponseError.error_description &&\r\n processSignInResponseError.error_description.indexOf('AADB2C90118') >\r\n -1\r\n ) {\r\n const settings: UserManagerSettings = {\r\n client_id: this.authConfig.client_id,\r\n authority: this.authConfig.passwordreset_authority,\r\n redirect_uri: this.authConfig.redirect_uri,\r\n post_logout_redirect_uri: this.authConfig.post_logout_redirect_uri,\r\n response_type: this.authConfig.response_type,\r\n scope: this.authConfig.scope,\r\n loadUserInfo: false,\r\n automaticSilentRenew: true,\r\n includeIdTokenInSilentRenew: true,\r\n userStore: new WebStorageStateStore({}),\r\n extraQueryParams: this.authConfig.extraQueryParams,\r\n ui_locales: this.authConfig.ui_locales,\r\n monitorSession: false,\r\n response_mode: 'fragment',\r\n clockSkew: this.authConfig.clockSkew,\r\n };\r\n\r\n const redirectUserManager = new UserManager(settings);\r\n const signInRequest = await redirectUserManager.createSigninRequest(\r\n this.createArguments(LoginMode.Redirect)\r\n );\r\n return this.redirect(signInRequest.url);\r\n }\r\n\r\n // When message is not the message for password reset completed.\r\n if (\r\n processSignInResponseError.message !==\r\n 'authority mismatch on settings vs. signin state'\r\n ) {\r\n telemetryService.trackException(processSignInResponseError);\r\n }\r\n\r\n if (\r\n processSignInResponseError.message ===\r\n 'No matching state found in storage'\r\n ) {\r\n try {\r\n const stateKeys =\r\n await this.userManager.settings.stateStore!.getAllKeys();\r\n const states: string[] = [];\r\n for (const key of stateKeys) {\r\n if (key.startsWith('user')) {\r\n continue;\r\n }\r\n const stateString =\r\n await this.userManager.settings.stateStore!.get(key);\r\n\r\n const state = JSON.parse(stateString);\r\n states.push(\r\n `Key: ${key}. Created: ${state.created}. Mode: ${state.data.mode}.`\r\n );\r\n }\r\n\r\n telemetryService.trackTrace(\r\n 'Auth States in storage: ' + states.join(', ')\r\n );\r\n\r\n // eslint-disable-next-line no-empty\r\n } catch {}\r\n\r\n await this.userManager?.clearStaleState();\r\n return this.error(\r\n 'There was an error processing the sign-in response.',\r\n true\r\n );\r\n }\r\n\r\n return this.error(\r\n 'There was an error processing the sign-in response.'\r\n );\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Redirect the browser to the IdP to perform a traditional post logout redirect flow.\r\n */\r\n public async signOut(\r\n state: { returnUrl: string } | undefined\r\n ): Promise {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n if (this.userManager) {\r\n const signOutRequest = await this.userManager.createSignoutRequest(\r\n this.createArguments(LoginMode.Redirect, state)\r\n );\r\n return this.redirect(signOutRequest.url);\r\n } else {\r\n return this.error('Signout error: UserManager not initialized.');\r\n }\r\n } catch (redirectSignOutError: any) {\r\n return this.error(redirectSignOutError);\r\n }\r\n }\r\n\r\n /**\r\n * On the main browser window when the IdP redirects back to the app. We will process\r\n * the response and redirect to the logged-out url or display an error message.\r\n */\r\n public async completeSignOut(url?: string): Promise {\r\n await this.ensureUserManagerInitialized();\r\n\r\n try {\r\n const response = await this.userManager!.signoutRedirectCallback(url);\r\n\r\n if (response.error) {\r\n return this.error(`${response.error}: ${response.error_description}`);\r\n }\r\n\r\n this.updateState(undefined);\r\n this.clearAllStorage();\r\n return this.success(response.state.userState);\r\n } catch (processSignOutResponseError: any) {\r\n return this.error(\r\n `${processSignOutResponseError.error}: ${processSignOutResponseError.error_description}`\r\n );\r\n }\r\n }\r\n\r\n public subscribe(callback: () => Promise): number {\r\n this.callbacks.push({ callback, subscription: this.nextSubscriptionId++ });\r\n return this.nextSubscriptionId - 1;\r\n }\r\n\r\n public unsubscribe(subscriptionId: number): void {\r\n const subscriptionIndex = this.callbacks\r\n .map((element, index) =>\r\n element.subscription === subscriptionId\r\n ? { found: true, index }\r\n : { found: false }\r\n )\r\n .filter((element) => element.found === true);\r\n if (subscriptionIndex.length !== 1 || !subscriptionIndex[0].index) {\r\n throw new Error(\r\n `Found an invalid number of subscriptions ${subscriptionIndex.length}`\r\n );\r\n }\r\n\r\n this.callbacks = this.callbacks.splice(subscriptionIndex[0].index, 1);\r\n }\r\n\r\n private async clearAllStorage() {\r\n await this.ensureUserManagerInitialized();\r\n if (\r\n this.userManager &&\r\n this.userManager.settings &&\r\n this.userManager.settings.stateStore\r\n ) {\r\n const store = this.userManager.settings.stateStore;\r\n const keys = await store.getAllKeys();\r\n keys.forEach(async (key: string) => await store.remove(key));\r\n }\r\n }\r\n\r\n private updateState(user: User | undefined) {\r\n this.user = user;\r\n this.notifySubscribers();\r\n }\r\n\r\n private notifySubscribers() {\r\n for (const callback of this.callbacks) {\r\n callback.callback();\r\n }\r\n }\r\n\r\n private async getSignInResponse(url: string | undefined) {\r\n // Not documented in ts but is not \"marked\" as private in lib code.\r\n return await (this.userManager as any).readSigninResponseState(url);\r\n }\r\n\r\n private createArguments(mode: string, state?: { returnUrl: string }) {\r\n if (mode !== LoginMode.Silent) {\r\n return { data: { mode, userState: state } };\r\n } else {\r\n return {\r\n data: { mode, userState: state },\r\n redirect_uri: this.userManager\r\n ? this.userManager.settings.redirect_uri\r\n : undefined,\r\n };\r\n }\r\n }\r\n\r\n private error(message: string, retryAvailable?: boolean): ReturnStatus {\r\n return { status: AuthenticationResultStatus.Fail, message, retryAvailable };\r\n }\r\n\r\n private success(state: { returnUrl: string } | undefined): ReturnStatus {\r\n return { status: AuthenticationResultStatus.Success, state };\r\n }\r\n\r\n private redirect(redirectUrl: string): ReturnStatus {\r\n return {\r\n status: AuthenticationResultStatus.Redirect,\r\n redirectUrl,\r\n };\r\n }\r\n\r\n private createUserManager(\r\n authority: string,\r\n redirect_uri: string\r\n ): UserManager {\r\n if (!authority || !redirect_uri) {\r\n throw new Error(`Error: Invalid authority or redirect uri`);\r\n }\r\n\r\n const settings: UserManagerSettings = {\r\n client_id: this.authConfig.client_id,\r\n authority: authority,\r\n redirect_uri: redirect_uri,\r\n post_logout_redirect_uri: this.authConfig.post_logout_redirect_uri,\r\n response_type: this.authConfig.response_type,\r\n scope: this.authConfig.scope,\r\n loadUserInfo: false,\r\n automaticSilentRenew: true,\r\n includeIdTokenInSilentRenew: true,\r\n userStore: new WebStorageStateStore({}),\r\n extraQueryParams: this.authConfig.extraQueryParams,\r\n ui_locales: this.authConfig.ui_locales,\r\n monitorSession: false,\r\n response_mode: 'fragment',\r\n clockSkew: this.authConfig.clockSkew,\r\n };\r\n\r\n return new UserManager(settings);\r\n }\r\n\r\n private async ensureUserManagerInitialized() {\r\n if (this.userManager !== undefined) {\r\n return;\r\n }\r\n\r\n this.userManager = this.createUserManager(\r\n this.authConfig.authority,\r\n this.authConfig.redirect_uri\r\n );\r\n\r\n this.userManager.events.addUserSignedOut(async () => {\r\n if (this.userManager) {\r\n await this.userManager.removeUser();\r\n }\r\n this.updateState(undefined);\r\n });\r\n\r\n // Listen for silent renew error. This will happen if the refresh token has expired.\r\n // Attempt to sign in using popup and if that fails, use redirect.\r\n this.userManager.events.addSilentRenewError(async () => {\r\n const response = await this.signIn(\r\n { returnUrl: window.location.href },\r\n true\r\n );\r\n\r\n if (\r\n response.status === AuthenticationResultStatus.Redirect &&\r\n response.redirectUrl\r\n ) {\r\n window.location.replace(response.redirectUrl);\r\n } else if (response.status === AuthenticationResultStatus.Fail) {\r\n window.location.replace(window.location.origin);\r\n }\r\n });\r\n }\r\n}\r\n","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn-bd\": \"9686\",\n\t\"./bn-bd.js\": \"9686\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb71\",\n\t\"./de-ch.js\": \"bb71\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"7333\",\n\t\"./en-il.js\": \"7333\",\n\t\"./en-in\": \"ec2e\",\n\t\"./en-in.js\": \"ec2e\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./en-sg\": \"b7e9\",\n\t\"./en-sg.js\": \"b7e9\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-mx\": \"b5b7\",\n\t\"./es-mx.js\": \"b5b7\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df4\",\n\t\"./fa.js\": \"8df4\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fil\": \"d69a\",\n\t\"./fil.js\": \"d69a\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b4\",\n\t\"./gd.js\": \"f6b4\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-deva\": \"aaf2\",\n\t\"./gom-deva.js\": \"aaf2\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./oc-lnc\": \"167b\",\n\t\"./oc-lnc.js\": \"167b\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tk\": \"5aff\",\n\t\"./tk.js\": \"5aff\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33\",\n\t\"./yo.js\": \"7f33\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-mo\": \"3a6c\",\n\t\"./zh-mo.js\": \"3a6c\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"4678\";","import { FindUsersToImpersonateUser } from '@/models/FindUsersToImpersonateUser';\r\nimport { BaseServiceDefinition } from './BaseService';\r\n\r\nclass ImpersonationService extends BaseServiceDefinition {\r\n constructor() {\r\n super();\r\n }\r\n\r\n public start(azureAdId: string): Promise {\r\n return this.post(\r\n '/api/v1/impersonations/start?azureAdId=' + azureAdId,\r\n undefined,\r\n {\r\n headers: {\r\n 'Content-Length': 0,\r\n },\r\n }\r\n ).catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public extend(): Promise {\r\n return this.post('/api/v1/impersonations/extend', undefined, {\r\n headers: {\r\n 'Content-Length': 0,\r\n },\r\n }).catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public end(): Promise {\r\n return this.post('/api/v1/impersonations/end', undefined, {\r\n headers: {\r\n 'Content-Length': 0,\r\n },\r\n }).catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public searchForUsers(\r\n term: string\r\n ): Promise> {\r\n return this.get('/api/v1/impersonations/findusers', { term })\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n}\r\n\r\nconst impersonationService: ImpersonationService = new ImpersonationService();\r\n\r\nexport default impersonationService;\r\n","import i18n from '@/i18n/i18n';\r\nimport { MonthRange } from '@/models/MonthRange';\r\nimport { Route } from 'vue-router/types/router';\r\nimport { Config } from './Config';\r\nimport { Consoler } from './Consoler';\r\nimport { Helpers } from './Helpers';\r\nimport { getQDataPageQueryText } from './RoutingForQData';\r\nimport {\r\n getSustainabilityRouteParamsText,\r\n getSustainabilityTabFromRoute,\r\n} from './RoutingForSustainability';\r\n\r\nexport function getMonthRangeFromRouteParams(\r\n route: Route\r\n): MonthRange | undefined {\r\n const fromYear = route.params.fromYear\r\n ? Helpers.GetWholeNumberFromString(route.params.fromYear.trim())\r\n : null;\r\n let fromMonth = route.params.fromMonth\r\n ? Helpers.GetWholeNumberFromString(route.params.fromMonth.trim())\r\n : null;\r\n const toYear = route.params.toYear\r\n ? Helpers.GetWholeNumberFromString(route.params.toYear.trim())\r\n : null;\r\n let toMonth = route.params.toMonth\r\n ? Helpers.GetWholeNumberFromString(route.params.toMonth.trim())\r\n : null;\r\n if (fromMonth !== null) {\r\n fromMonth -= 1;\r\n }\r\n if (toMonth !== null) {\r\n toMonth -= 1;\r\n }\r\n\r\n return fromYear !== null &&\r\n fromMonth !== null &&\r\n toYear !== null &&\r\n toMonth !== null &&\r\n fromMonth >= 0 &&\r\n fromMonth <= 11 &&\r\n toMonth >= 0 &&\r\n toMonth <= 11 &&\r\n fromYear >= 1990 &&\r\n toYear <= 2100 &&\r\n new Date(fromYear, fromMonth, 1).getTime() <=\r\n new Date(toYear, toMonth, 1).getTime()\r\n ? {\r\n from: {\r\n year: fromYear,\r\n month: fromMonth,\r\n },\r\n to: {\r\n year: toYear,\r\n month: toMonth,\r\n },\r\n }\r\n : undefined;\r\n}\r\n\r\nexport function getDocumentTitle(route: Route): string {\r\n let documentTitle = Config.BaseDocumentTitle;\r\n\r\n if (route.name) {\r\n if (i18n.te(`documentTitles.${route.name}`)) {\r\n let routeDocumentTitle: string;\r\n if (route.meta?.documentTitleIncludeParams) {\r\n const params = (route.meta.documentTitleIncludeParams as string)\r\n .split(',')\r\n .map((paramName) => route.params[paramName]);\r\n routeDocumentTitle = i18n\r\n .t(`documentTitles.${route.name}`, params)\r\n .toString();\r\n } else if (route.meta?.documentTitleIncludeQDataQueryText) {\r\n const qDataQueryText = getQDataPageQueryText(route);\r\n if (qDataQueryText) {\r\n routeDocumentTitle = i18n\r\n .t(`documentTitles.${route.name}.withQuery`, [qDataQueryText])\r\n .toString();\r\n } else {\r\n routeDocumentTitle = i18n\r\n .t(`documentTitles.${route.name}.withoutQuery`)\r\n .toString();\r\n }\r\n } else if (route.meta?.documentTitleIncludeSustainabilityRouteText) {\r\n const sustainabilityType = getSustainabilityTabFromRoute(route);\r\n const sustainabilityRouteText = getSustainabilityRouteParamsText(route);\r\n if (sustainabilityType) {\r\n if (sustainabilityRouteText) {\r\n routeDocumentTitle = i18n\r\n .t(`documentTitles.${route.name}.withRouteParamsText`, [\r\n i18n.t(`sustainabilityDataType.${sustainabilityType}`),\r\n sustainabilityRouteText,\r\n ])\r\n .toString();\r\n } else {\r\n routeDocumentTitle = i18n\r\n .t(`documentTitles.${route.name}.withoutRouteParamsText`, [\r\n i18n.t(`sustainabilityDataType.${sustainabilityType}`),\r\n ])\r\n .toString();\r\n }\r\n } else {\r\n routeDocumentTitle = i18n\r\n .t(`documentTitles.${route.name}.default`)\r\n .toString();\r\n }\r\n } else {\r\n routeDocumentTitle = i18n.t(`documentTitles.${route.name}`).toString();\r\n }\r\n if (routeDocumentTitle) {\r\n documentTitle += `: ${routeDocumentTitle}`;\r\n }\r\n } else {\r\n Consoler.debugWarn(`No document title localization for ${route.name}`);\r\n }\r\n }\r\n\r\n return documentTitle;\r\n}\r\n","import Vue from 'vue';\r\nimport VueI18n from 'vue-i18n';\r\n\r\nVue.use(VueI18n);\r\n\r\nconst messages = {\r\n en: require('./lang/en.json'),\r\n};\r\n\r\nconst i18n = new VueI18n({\r\n locale: 'en',\r\n messages,\r\n});\r\n\r\nexport default i18n;\r\n","const AuthorizationPage = (): Promise =>\r\n import(/* webpackChunkName: \"home\" */ '@/views/AuthorizationPage.vue');\r\nconst HomePage = (): Promise =>\r\n import(/* webpackChunkName: \"home\" */ '@/views/HomePage.vue');\r\nconst NotFoundAndErrorPage = (): Promise =>\r\n import(/* webpackChunkName: \"home\" */ '@/views/NotFoundAndErrorPage.vue');\r\n\r\nconst OrderFlowPage = (): Promise =>\r\n import(/* webpackChunkName: \"orders\" */ '@/views/OrderFlowPage.vue');\r\nconst OrdersPage = (): Promise =>\r\n import(/* webpackChunkName: \"orders\" */ '@/views/OrdersPage.vue');\r\n\r\nconst QDataPage = (): Promise =>\r\n import(/* webpackChunkName: \"qdata\" */ '@/views/QDataPage.vue');\r\nconst QDataSearchPage = (): Promise =>\r\n import(/* webpackChunkName: \"qdata\" */ '@/views/QDataSearchPage.vue');\r\nconst QDataUnitSearchPage = (): Promise =>\r\n import(/* webpackChunkName: \"qdata\" */ '@/views/QDataUnitSearchPage.vue');\r\nconst QDataDeliveryPage = (): Promise =>\r\n import(/* webpackChunkName: \"qdata\" */ '@/views/QDataDeliveryPage.vue');\r\nconst QDataSubscriptionsPage = (): Promise =>\r\n import(/* webpackChunkName: \"qdata\" */ '@/views/QDataSubscriptionsPage.vue');\r\n\r\nconst InvoicesPage = (): Promise =>\r\n import(/* webpackChunkName: \"invoices\" */ '@/views/InvoicesPage.vue');\r\nconst ForecastsPage = (): Promise =>\r\n import(/* webpackChunkName: \"forecasts\" */ '@/views/ForecastsPage.vue');\r\n\r\nconst PerformanceInvoicedVolumesPage = (): Promise =>\r\n import(\r\n /* webpackChunkName: \"performance\" */ '@/views/PerformanceInvoicedVolumesPage.vue'\r\n );\r\nconst PerformanceContractPerformancePage = (): Promise =>\r\n import(\r\n /* webpackChunkName: \"performance\" */ '@/views/PerformanceContractPerformancePage.vue'\r\n );\r\n\r\nconst SustainabilityPage = (): Promise =>\r\n import(\r\n /* webpackChunkName: \"sustainability\" */ '@/views/SustainabilityPage.vue'\r\n );\r\nconst SustainabilitySubscriptionsPage = (): Promise =>\r\n import(\r\n /* webpackChunkName: \"sustainability\" */ '@/views/SustainabilitySubscriptionsPage.vue'\r\n );\r\nconst UserContactsPage = (): Promise =>\r\n import(/* webpackChunkName: \"contacts\" */ '@/views/UserContactsPage.vue');\r\nconst DocumentsPage = (): Promise =>\r\n import(/* webpackChunkName: \"documents\" */ '@/views/DocumentsPage.vue');\r\nconst DashboardPage = (): Promise =>\r\n import(/* webpackChunkName: \"dashboard\" */ '@/views/DashboardPage.vue');\r\n\r\nconst AdminUsersPage = (): Promise =>\r\n import(/* webpackChunkName: \"admin\" */ '@/views/AdminUsersPage.vue');\r\nconst AdminSubscriptionsPage = (): Promise =>\r\n import(/* webpackChunkName: \"admin\" */ '@/views/AdminSubscriptionsPage.vue');\r\nconst AdminParametersPage = (): Promise =>\r\n import(/* webpackChunkName: \"admin\" */ '@/views/AdminParametersPage.vue');\r\nconst AdminSustainabilityPage = (): Promise =>\r\n import(/* webpackChunkName: \"admin\" */ '@/views/AdminSustainabilityPage.vue');\r\n\r\nconst SmiForecastsPage = (): Promise =>\r\n import(/* webpackChunkName: \"smi\" */ '@/views/SmiForecastsPage.vue');\r\nconst SmiConsumptionLogPage = (): Promise =>\r\n import(/* webpackChunkName: \"smi\" */ '@/views/SmiConsumptionLogPage.vue');\r\nconst SmiMyWarehousePage = (): Promise =>\r\n import(/* webpackChunkName: \"smi\" */ '@/views/SmiMyWarehousePage.vue');\r\nconst SmiMyConsumptionsPage = (): Promise =>\r\n import(/* webpackChunkName: \"smi\" */ '@/views/SmiMyConsumptionsPage.vue');\r\nconst SmiStockDeviationsPage = (): Promise =>\r\n import(/* webpackChunkName: \"smi\" */ '@/views/SmiStockDeviationsPage.vue');\r\nconst SmiAdminWarehousesPage = (): Promise =>\r\n import(\r\n /* webpackChunkName: \"smiAdmin\" */ '@/views/SmiAdminWarehousesPage.vue'\r\n );\r\nconst SmiAdminWarehousePage = (): Promise =>\r\n import(\r\n /* webpackChunkName: \"smiAdmin\" */ '@/views/SmiAdminWarehousePage.vue'\r\n );\r\n\r\nimport {\r\n authRequirementsForAdminUsers,\r\n authRequirementsForDocuments,\r\n authRequirementsForInvoices,\r\n authRequirementsForOrderFlow,\r\n authRequirementsForQData,\r\n authRequirementsForSmiAdminWarehouses,\r\n authRequirementsForSmiConsumptionLog,\r\n authRequirementsForSmiForecasts,\r\n authRequirementsForSmiMyWarehouse,\r\n authRequirementsForSmiMyConsumptions,\r\n authRequirementsForSubscriptions,\r\n authRequirementsForSustainability,\r\n authRequirementsForSustainabilityCertifiedVolumes,\r\n authRequirementsForUserContacts,\r\n authRequirementsForForecasts,\r\n authRequirementsForPerformanceInvoicedVolumes,\r\n authRequirementsForPerformanceContractPerformance,\r\n authRequirementsForDashboard,\r\n authRequirementsForSmiStockDeviations,\r\n authRequirementsForAdminSubscriptions,\r\n authRequirementsForAdminParameters,\r\n authRequirementsForAdminSustainability,\r\n} from './authRequirements';\r\nimport { SustainabilityRouteTabNames } from '@/utils/RoutingForSustainability';\r\nimport { RouteConfig } from 'vue-router';\r\nimport { ImportedComponent } from 'vue/types/options';\r\nimport authService from '../services/AuthService';\r\n\r\nexport const routeNameAuthentication = 'Authentication';\r\nexport const routeNameHome = 'Home';\r\nexport const routeNameLoginRedirect = 'LoginRedirect';\r\nexport const routeNameDashboard = 'Dashboard';\r\nexport const routeNameQDataRoot = 'QDataRoot';\r\nexport const routeNameQData = 'QData';\r\nexport const routeNameQDataDelivery = 'QDataDelivery';\r\nexport const routeNameQDataSearch = 'QDataSearch';\r\nexport const routeNameQDataSubscriptions = 'QDataSubscriptions';\r\nexport const routeNameQDataUnitSearch = 'QDataUnitSearch';\r\nexport const routeNameOrderFlowRoot = 'OrderFlowRoot';\r\nexport const routeNameOrderFlow = 'OrderFlow';\r\nexport const routeNameOrders = 'Orders';\r\nexport const routeNameForecasts = 'Forecasts';\r\nexport const routeNameInvoices = 'Invoices';\r\nexport const routeNamePerformanceRoot = 'PerformanceRoot';\r\nexport const routeNamePerformanceInvoicedVolumes = 'PerformanceInvoicedVolumes';\r\nexport const routeNamePerformanceContractPerformance =\r\n 'PerformanceContractPerformance';\r\nexport const routeNameSustainabilityRoot = 'SustainabilityRoot';\r\nexport const routeNameSustainability = 'Sustainability';\r\nexport const routeNameSustainabilitySubscriptions =\r\n 'SustainabilitySubscriptions';\r\nexport const routeNameSustainabilityCertifiedVolumes =\r\n 'SustainabilityCertifiedVolumes';\r\nexport const routeNameUserContacts = 'UserContacts';\r\nexport const routeNameDocuments = 'Documents';\r\nexport const routeNameSubscriptions = 'Subscriptions';\r\nexport const routeNameNotFoundAndError = 'NotFoundAndError';\r\nexport const routeNameSmiRoot = 'SmiRoot';\r\nexport const routeNameSmiForecasts = 'SmiForecasts';\r\nexport const routeNameSmiConsumptionLog = 'SmiConsumptionLog';\r\nexport const routeNameSmiMyWarehouse = 'SmiMyWarehouse';\r\nexport const routeNameSmiMyConsumptions = 'SmiMyConsumptions';\r\nexport const routeNameSmiStockDeviations = 'SmiStockDeviations';\r\nexport const routeNameSmiAdminRoot = 'SmiAdminRoot';\r\nexport const routeNameSmiAdminWarehousesRoot = 'SmiAdminWarehousesRoot';\r\nexport const routeNameSmiAdminWarehouses = 'SmiAdminWarehouses';\r\nexport const routeNameSmiAdminWarehouse = 'SmiAdminWarehouse';\r\n\r\nexport const routeNameAdminRoot = 'AdminRoot';\r\nexport const routeNameAdminUsers = 'AdminUsers';\r\nexport const routeNameAdminSubscriptions = 'AdminSubscriptions';\r\nexport const routeNameAdminParameters = 'AdminParameters';\r\nexport const routeNameAdminSustainability = 'AdminSustainability';\r\n\r\nexport const routes: RouteConfig[] = [\r\n {\r\n name: routeNameHome,\r\n path: '/',\r\n component: HomePage,\r\n meta: {\r\n track: true,\r\n accessibleWithoutSelectedCustomer: true,\r\n },\r\n },\r\n {\r\n name: routeNameLoginRedirect,\r\n path: '/login',\r\n },\r\n {\r\n path: '/first-time-use/reset-password',\r\n redirect: (): string => {\r\n const policyUrl = authService.getResetPasswordPolicyUrl();\r\n\r\n window.location.href = policyUrl.href;\r\n\r\n return '/';\r\n },\r\n },\r\n {\r\n name: routeNameAuthentication,\r\n path: '/authentication/:action',\r\n component: AuthorizationPage,\r\n },\r\n {\r\n name: routeNameDashboard,\r\n path: '/dashboard',\r\n component: DashboardPage,\r\n meta: {\r\n authRequirements: authRequirementsForDashboard,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n },\r\n },\r\n {\r\n name: routeNameOrderFlowRoot,\r\n path: '/order-flow',\r\n redirect: '/order-flow',\r\n component: {\r\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\n render(c: any) {\r\n return c('router-view');\r\n },\r\n },\r\n children: [\r\n {\r\n name: routeNameOrderFlow,\r\n path: '',\r\n component: OrderFlowPage,\r\n meta: {\r\n authRequirements: authRequirementsForOrderFlow,\r\n track: true,\r\n },\r\n },\r\n {\r\n name: routeNameOrders,\r\n path: '/order-flow/search',\r\n component: OrdersPage,\r\n meta: {\r\n authRequirements: authRequirementsForOrderFlow,\r\n track: true,\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n name: routeNameQDataRoot,\r\n path: '/q-data',\r\n redirect: '/q-data',\r\n component: {\r\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\n render(c: any) {\r\n return c('router-view');\r\n },\r\n },\r\n children: [\r\n {\r\n name: routeNameQData,\r\n path: '',\r\n component: QDataPage,\r\n meta: {\r\n authRequirements: authRequirementsForQData,\r\n track: true,\r\n documentTitleIncludeQDataQueryText: true,\r\n },\r\n },\r\n {\r\n name: routeNameQDataSearch,\r\n path: '/q-data/search',\r\n component: QDataSearchPage,\r\n meta: {\r\n authRequirements: authRequirementsForQData,\r\n track: true,\r\n documentTitleIncludeQDataQueryText: true,\r\n },\r\n },\r\n {\r\n name: routeNameQDataUnitSearch,\r\n path: '/q-data/search/units',\r\n component: QDataUnitSearchPage,\r\n meta: {\r\n authRequirements: authRequirementsForQData,\r\n track: true,\r\n },\r\n },\r\n {\r\n name: routeNameQDataDelivery,\r\n path: '/q-data/delivery/:deliveryMessageNumber',\r\n component: QDataDeliveryPage,\r\n meta: {\r\n authRequirements: authRequirementsForQData,\r\n track: true,\r\n documentTitleIncludeParams: 'deliveryMessageNumber',\r\n },\r\n },\r\n {\r\n name: routeNameQDataSubscriptions,\r\n path: '/q-data/subscriptions',\r\n component: QDataSubscriptionsPage,\r\n meta: {\r\n authRequirements: authRequirementsForSubscriptions,\r\n track: true,\r\n accessibleWithoutSelectedCustomer: true,\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n name: routeNameInvoices,\r\n path: '/invoices',\r\n component: InvoicesPage,\r\n meta: {\r\n authRequirements: authRequirementsForInvoices,\r\n track: true,\r\n },\r\n },\r\n {\r\n name: routeNamePerformanceRoot,\r\n path: '/performance',\r\n redirect: '/performance/invoiced-volumes',\r\n component: {\r\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\n render(c: any) {\r\n return c('router-view');\r\n },\r\n },\r\n children: [\r\n {\r\n name: routeNamePerformanceInvoicedVolumes,\r\n path: '/performance/invoiced-volumes/:fromYear?/:fromMonth?/:toYear?/:toMonth?',\r\n component: PerformanceInvoicedVolumesPage,\r\n meta: {\r\n authRequirements: authRequirementsForPerformanceInvoicedVolumes,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n hasCustomersQuery: true,\r\n },\r\n },\r\n {\r\n name: routeNamePerformanceContractPerformance,\r\n path: '/performance/contract-performance/:fromYear?/:fromMonth?/:toYear?/:toMonth?',\r\n component: PerformanceContractPerformancePage,\r\n meta: {\r\n authRequirements: authRequirementsForPerformanceContractPerformance,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n hasCustomersQuery: true,\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n name: routeNameSustainabilityRoot,\r\n path: '/sustainability',\r\n redirect: `/sustainability/${SustainabilityRouteTabNames.EnvironmentalData}`,\r\n component: {\r\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\n render(c: any) {\r\n return c('router-view');\r\n },\r\n },\r\n children: [\r\n {\r\n name: routeNameSustainabilityCertifiedVolumes,\r\n path: `/sustainability/${SustainabilityRouteTabNames.CertifiedVolumes}/:fromYear?/:fromMonth?/:toYear?/:toMonth?`,\r\n component: SustainabilityPage,\r\n meta: {\r\n authRequirements: authRequirementsForSustainabilityCertifiedVolumes,\r\n track: true,\r\n tabName: SustainabilityRouteTabNames.CertifiedVolumes,\r\n documentTitleIncludeSustainabilityRouteText: true,\r\n },\r\n },\r\n {\r\n name: routeNameSustainability,\r\n path: '/sustainability/:tabName/:productName?/:millId?/:millName?/:year?',\r\n component: SustainabilityPage,\r\n meta: {\r\n authRequirements: authRequirementsForSustainability,\r\n track: true,\r\n documentTitleIncludeSustainabilityRouteText: true,\r\n },\r\n },\r\n {\r\n name: routeNameSustainabilitySubscriptions,\r\n path: '/sustainability/subscriptions',\r\n component: SustainabilitySubscriptionsPage,\r\n meta: {\r\n authRequirements: authRequirementsForSubscriptions,\r\n track: true,\r\n accessibleWithoutSelectedCustomer: true,\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n name: routeNameForecasts,\r\n path: '/forecasts',\r\n component: ForecastsPage,\r\n meta: {\r\n authRequirements: authRequirementsForForecasts,\r\n accessibleByAdminsWithoutCustomers: true,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n },\r\n },\r\n {\r\n name: routeNameUserContacts,\r\n path: '/contacts',\r\n component: UserContactsPage,\r\n meta: {\r\n authRequirements: authRequirementsForUserContacts,\r\n track: true,\r\n },\r\n },\r\n {\r\n name: routeNameDocuments,\r\n path: '/documents',\r\n component: DocumentsPage,\r\n meta: {\r\n authRequirements: authRequirementsForDocuments,\r\n track: true,\r\n },\r\n },\r\n\r\n {\r\n name: routeNameAdminRoot,\r\n path: '/admin',\r\n redirect: '/admin/users',\r\n component: {\r\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\n render(c: any) {\r\n return c('router-view');\r\n },\r\n },\r\n children: [\r\n {\r\n name: routeNameAdminUsers,\r\n path: '/admin/users',\r\n component: AdminUsersPage,\r\n meta: {\r\n authRequirements: authRequirementsForAdminUsers,\r\n accessibleByAdminsWithoutCustomers: true,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n },\r\n },\r\n {\r\n name: routeNameAdminSubscriptions,\r\n path: '/admin/subscriptions',\r\n component: AdminSubscriptionsPage,\r\n meta: {\r\n authRequirements: authRequirementsForAdminSubscriptions,\r\n accessibleByAdminsWithoutCustomers: true,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n },\r\n },\r\n {\r\n name: routeNameAdminParameters,\r\n path: '/admin/parameters',\r\n component: AdminParametersPage,\r\n meta: {\r\n authRequirements: authRequirementsForAdminParameters,\r\n accessibleByAdminsWithoutCustomers: true,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n },\r\n },\r\n {\r\n name: routeNameAdminSustainability,\r\n path: '/admin/sustainability',\r\n component: AdminSustainabilityPage,\r\n meta: {\r\n authRequirements: authRequirementsForAdminSustainability,\r\n accessibleByAdminsWithoutCustomers: true,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n },\r\n },\r\n ],\r\n },\r\n\r\n {\r\n name: routeNameSmiRoot,\r\n path: '/smi',\r\n redirect: `/smi/forecasts`,\r\n component: {\r\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\n render(c: any) {\r\n return c('router-view');\r\n },\r\n },\r\n children: [\r\n {\r\n name: routeNameSmiForecasts,\r\n path: '/smi/forecasts',\r\n component: SmiForecastsPage,\r\n meta: {\r\n authRequirements: authRequirementsForSmiForecasts,\r\n accessibleByAdminsWithoutCustomers: true,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n hasWarehouseQuery: true,\r\n },\r\n },\r\n {\r\n name: routeNameSmiConsumptionLog,\r\n path: '/smi/consumption-log',\r\n component: SmiConsumptionLogPage,\r\n meta: {\r\n authRequirements: authRequirementsForSmiConsumptionLog,\r\n accessibleByAdminsWithoutCustomers: true,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n hasWarehouseQuery: true,\r\n },\r\n },\r\n {\r\n name: routeNameSmiMyWarehouse,\r\n path: '/smi/my-warehouse',\r\n component: SmiMyWarehousePage,\r\n meta: {\r\n authRequirements: authRequirementsForSmiMyWarehouse,\r\n accessibleByAdminsWithoutCustomers: true,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n hasWarehouseQuery: true,\r\n },\r\n },\r\n {\r\n name: routeNameSmiMyConsumptions,\r\n path: '/smi/my-consumptions',\r\n component: SmiMyConsumptionsPage,\r\n meta: {\r\n authRequirements: authRequirementsForSmiMyConsumptions,\r\n accessibleByAdminsWithoutCustomers: true,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n hasWarehouseQuery: true,\r\n },\r\n },\r\n {\r\n name: routeNameSmiStockDeviations,\r\n path: '/smi/stock-deviations',\r\n component: SmiStockDeviationsPage,\r\n meta: {\r\n authRequirements: authRequirementsForSmiStockDeviations,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n hasWarehouseQuery: true,\r\n },\r\n },\r\n {\r\n name: routeNameSmiAdminRoot,\r\n path: '/smi/admin',\r\n redirect: `/smi/admin/warehouses`,\r\n component: {\r\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\n render(c: any) {\r\n return c('router-view');\r\n },\r\n },\r\n children: [\r\n {\r\n name: routeNameSmiAdminWarehousesRoot,\r\n path: '/smi/admin/warehouses',\r\n redirect: `/smi/admin/warehouses`,\r\n component: {\r\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\r\n render(c: any) {\r\n return c('router-view');\r\n },\r\n },\r\n children: [\r\n {\r\n name: routeNameSmiAdminWarehouses,\r\n path: '/smi/admin/warehouses',\r\n component: SmiAdminWarehousesPage,\r\n meta: {\r\n authRequirements: authRequirementsForSmiAdminWarehouses,\r\n accessibleByAdminsWithoutCustomers: true,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n },\r\n },\r\n {\r\n name: routeNameSmiAdminWarehouse,\r\n path: '/smi/admin/warehouses/:smiWarehouseId/:smiWarehouseCustomerName',\r\n component: SmiAdminWarehousePage,\r\n meta: {\r\n authRequirements: authRequirementsForSmiAdminWarehouses,\r\n accessibleByAdminsWithoutCustomers: true,\r\n accessibleWithoutSelectedCustomer: true,\r\n track: true,\r\n documentTitleIncludeParams: 'smiWarehouseCustomerName',\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n\r\n // not found/error route should be last because of dynamic path:\r\n {\r\n name: routeNameNotFoundAndError,\r\n path: '/*',\r\n component: NotFoundAndErrorPage,\r\n props: true,\r\n meta: {\r\n track: true,\r\n },\r\n },\r\n];\r\n","import { Route } from 'vue-router';\r\nimport { Dictionary } from 'vue-router/types/router';\r\nimport moment from 'moment';\r\nimport { DateFormats } from '@/utils/Constants';\r\nimport { QueryType } from '@/store/modules/deliveryMessages';\r\nimport { ParameterPsolId } from '@/models/PsolParameterId';\r\nimport i18n from '@/i18n/i18n';\r\n\r\nexport const defaultPageSize: number = 10;\r\n\r\nexport interface QDataQueryData {\r\n by: QueryType;\r\n\r\n // QueryType.ByTerm specific:\r\n term?: string;\r\n type?: string;\r\n\r\n // QueryType.ByDates specific:\r\n from?: Date;\r\n to?: Date;\r\n parameter?: ParameterPsolId;\r\n productNames?: string[];\r\n\r\n // General:\r\n pageIndex: number;\r\n pageSize: number;\r\n}\r\n\r\nexport function getQDataQueryType(route: Route): QueryType | null {\r\n if (isQDataQueryByDates(route)) {\r\n return QueryType.ByDates;\r\n } else if (isQDataQueryByTerm(route)) {\r\n return QueryType.ByTerm;\r\n }\r\n return null;\r\n}\r\n\r\nexport function isQDataQueryByDates(route: Route): boolean {\r\n return route.query.by === QueryType.ByDates.toString();\r\n}\r\n\r\nexport function isQDataQueryByTerm(route: Route): boolean {\r\n return route.query.by === QueryType.ByTerm.toString();\r\n}\r\n\r\nexport function getQDataPageQueryData(route: Route): QDataQueryData | null {\r\n const queryType = getQDataQueryType(route);\r\n if (queryType === null) {\r\n return null;\r\n }\r\n\r\n const page = Number(route.query.page as string);\r\n const pageIndex = !isNaN(page) ? page - 1 : 0;\r\n\r\n let pageSize = Number(route.query.pageSize as string);\r\n if (isNaN(pageSize)) {\r\n pageSize = defaultPageSize;\r\n }\r\n\r\n if (queryType === QueryType.ByDates) {\r\n const from = moment(\r\n route.query.from as string,\r\n DateFormats.urlDateFormat,\r\n true\r\n );\r\n const to = moment(\r\n route.query.to as string,\r\n DateFormats.urlDateFormat,\r\n true\r\n );\r\n\r\n const parameterAsNumber = Number(route.query.parameter);\r\n const parameter =\r\n parameterAsNumber &&\r\n !isNaN(parameterAsNumber) &&\r\n parameterAsNumber in ParameterPsolId\r\n ? parameterAsNumber\r\n : undefined;\r\n\r\n let productNames: string[] = [];\r\n if (route.query.products) {\r\n productNames = route.query.products\r\n .toString()\r\n .split(',')\r\n .map((p) => p.trim())\r\n .filter((p) => p.length > 0);\r\n }\r\n\r\n return {\r\n by: QueryType.ByDates,\r\n from: from.isValid() ? from.startOf('day').toDate() : undefined,\r\n to: to.isValid() ? to.startOf('day').toDate() : undefined,\r\n parameter,\r\n productNames,\r\n pageIndex,\r\n pageSize,\r\n };\r\n } else if (queryType === QueryType.ByTerm) {\r\n return {\r\n by: QueryType.ByTerm,\r\n term: (route.query.term as string) ?? null,\r\n type: (route.query.type as string) ?? null,\r\n pageIndex,\r\n pageSize,\r\n };\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function getQDataPageQueryText(route: Route): string {\r\n const queryType = getQDataQueryType(route);\r\n if (queryType === null) {\r\n return '';\r\n }\r\n\r\n if (queryType === QueryType.ByDates) {\r\n const from = moment(\r\n route.query.from as string,\r\n DateFormats.urlDateFormat,\r\n true\r\n );\r\n const to = moment(\r\n route.query.to as string,\r\n DateFormats.urlDateFormat,\r\n true\r\n );\r\n if (from.isValid() && to.isValid()) {\r\n return i18n\r\n .t('routingForQData.queryText.byDates', [\r\n from.format(DateFormats.dateFormat),\r\n to.format(DateFormats.dateFormat),\r\n ])\r\n .toString();\r\n }\r\n } else if (queryType === QueryType.ByTerm) {\r\n if (route.query.term) {\r\n return route.query.type\r\n ? i18n\r\n .t('routingForQData.queryText.byTerm.withType', [\r\n route.query.term,\r\n i18n.t(`suggestionType.${route.query.type}`).toString(),\r\n ])\r\n .toString()\r\n : i18n\r\n .t('routingForQData.queryText.byTerm.withoutType', [\r\n route.query.term,\r\n ])\r\n .toString();\r\n }\r\n }\r\n\r\n return '';\r\n}\r\n\r\nexport function generateQDataPageQuery(\r\n data: QDataQueryData\r\n): Dictionary> {\r\n const query: any = {};\r\n\r\n query.by = data.by;\r\n if (data.by === QueryType.ByDates) {\r\n if (data.from && data.to) {\r\n query.from = moment(data.from).format(DateFormats.urlDateFormat);\r\n query.to = moment(data.to).format(DateFormats.urlDateFormat);\r\n }\r\n if (data.parameter) {\r\n query.parameter = data.parameter;\r\n }\r\n if (data.productNames) {\r\n query.products = data.productNames.join(',');\r\n }\r\n } else if (data.by === QueryType.ByTerm) {\r\n if (data.term !== null) {\r\n query.term = data.term;\r\n }\r\n if (data.type !== null) {\r\n query.type = data.type;\r\n }\r\n }\r\n\r\n if (data.pageIndex > 0) {\r\n query.page = data.pageIndex + 1;\r\n }\r\n if (data.pageSize !== defaultPageSize) {\r\n query.pageSize = data.pageSize;\r\n }\r\n\r\n return query;\r\n}\r\n\r\nexport function copyQDataPageQueryFromRoute(\r\n route: Route,\r\n newPageIndex?: number\r\n): Dictionary | null | undefined> {\r\n const page =\r\n newPageIndex !== undefined\r\n ? newPageIndex > 0\r\n ? (newPageIndex + 1).toString()\r\n : undefined\r\n : route.query.page;\r\n\r\n return {\r\n by: route.query.by,\r\n term: route.query.term,\r\n type: route.query.type,\r\n from: route.query.from,\r\n to: route.query.to,\r\n parameter: route.query.parameter,\r\n products: route.query.products,\r\n pageSize: route.query.pageSize,\r\n page,\r\n };\r\n}\r\n\r\nexport function compareQDataPageQuery(\r\n route: Route,\r\n query: Dictionary>\r\n): boolean {\r\n return (\r\n route.query.by == query.by &&\r\n route.query.term == query.term &&\r\n route.query.type == query.type &&\r\n route.query.from == query.from &&\r\n route.query.to == query.to &&\r\n route.query.parameter == query.parameter &&\r\n route.query.products == query.products &&\r\n route.query.page == query.page &&\r\n route.query.pageSize == query.pageSize\r\n );\r\n}\r\n","import { monthRangeFilter } from '@/filters/monthRange';\r\nimport i18n from '@/i18n/i18n';\r\nimport { Breadcrumb } from '@/models/Breadcrumb';\r\nimport { MonthRange } from '@/models/MonthRange';\r\nimport { SustainabilityDataType } from '@/models/Sustainability/SustainabilityDataType';\r\nimport { SustainabilityProduct } from '@/models/Sustainability/SustainabilityProduct';\r\nimport {\r\n routeNameSustainability,\r\n routeNameSustainabilityCertifiedVolumes,\r\n routeNameSustainabilityRoot,\r\n} from '@/router/routes';\r\nimport { Dictionary, Location, Route } from 'vue-router/types/router';\r\nimport { Dates } from './Dates';\r\nimport { Helpers } from './Helpers';\r\nimport { getMonthRangeFromRouteParams } from './RoutingGeneral';\r\nimport { EnvironmentalDataReportType } from '@/models/Sustainability/EnvironmentalData/EnvironmentalDataReportType';\r\n\r\nconst startOfToday = Dates.startOfToday();\r\nconst startOf12MonthsAgo = Dates.getStartOfMonthInThePast(11);\r\nexport const defaultMonthRange: MonthRange = {\r\n from: {\r\n year: startOf12MonthsAgo.getFullYear(),\r\n month: startOf12MonthsAgo.getMonth(),\r\n },\r\n to: {\r\n year: startOfToday.getFullYear(),\r\n month: startOfToday.getMonth(),\r\n },\r\n};\r\n\r\nexport enum SustainabilityRouteTabNames {\r\n EnvironmentalData = 'environmental',\r\n CarbonFootprints = 'carbon-footprints',\r\n OriginOfWood = 'origin-of-wood',\r\n CertifiedVolumes = 'certified-volumes',\r\n WaterFootprints = 'water-footprints',\r\n}\r\n\r\nexport interface SustainabilityParams {\r\n type: SustainabilityDataType;\r\n productMillAndYear?: {\r\n productName: string;\r\n millId: number;\r\n millName: string;\r\n year: number;\r\n };\r\n environmentalDataReportType: EnvironmentalDataReportType;\r\n selectedMonthRange?: MonthRange;\r\n}\r\n\r\nexport function getSustainabilityRouteParams(\r\n route: Route\r\n): SustainabilityParams | null {\r\n const type = getSustainabilityTabFromRoute(route);\r\n if (type === null) {\r\n return null;\r\n }\r\n\r\n const environmentalDataReportType =\r\n EnvironmentalDataReportType[\r\n route.query.reportType as keyof typeof EnvironmentalDataReportType\r\n ] ?? EnvironmentalDataReportType.All;\r\n\r\n if (type !== SustainabilityDataType.CertifiedVolumes) {\r\n const productName = route.params.productName?.trim();\r\n const millId = route.params.millId\r\n ? Helpers.GetWholeNumberFromString(route.params.millId.trim())\r\n : null;\r\n const millName = route.params.millName?.trim();\r\n const year = route.params.year\r\n ? Dates.getYearFromString(route.params.year.toString().trim())\r\n : null;\r\n const productMillAndYear =\r\n productName && millId !== null && year !== null\r\n ? {\r\n productName,\r\n millId,\r\n millName,\r\n year,\r\n }\r\n : undefined;\r\n\r\n return {\r\n type,\r\n productMillAndYear,\r\n environmentalDataReportType,\r\n };\r\n } else {\r\n const selectedMonthRange = getMonthRangeFromRouteParams(route);\r\n\r\n return {\r\n type,\r\n selectedMonthRange,\r\n environmentalDataReportType,\r\n };\r\n }\r\n}\r\n\r\nexport function getSustainabilityTabFromRoute(\r\n route: Route\r\n): SustainabilityDataType | null {\r\n let routeTabName = route.params.tabName ?? route.meta?.tabName;\r\n if (!routeTabName) {\r\n return null;\r\n }\r\n routeTabName = routeTabName.toLowerCase();\r\n if (routeTabName === SustainabilityRouteTabNames.EnvironmentalData) {\r\n return SustainabilityDataType.EnvironmentalData;\r\n } else if (routeTabName === SustainabilityRouteTabNames.CarbonFootprints) {\r\n return SustainabilityDataType.CarbonFootprints;\r\n } else if (routeTabName === SustainabilityRouteTabNames.OriginOfWood) {\r\n return SustainabilityDataType.OriginOfWood;\r\n } else if (routeTabName === SustainabilityRouteTabNames.CertifiedVolumes) {\r\n return SustainabilityDataType.CertifiedVolumes;\r\n } else if (routeTabName === SustainabilityRouteTabNames.WaterFootprints) {\r\n return SustainabilityDataType.WaterFootprints;\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function getSustainabilityRouteParamTabName(\r\n type: SustainabilityDataType\r\n): string {\r\n if (type === SustainabilityDataType.EnvironmentalData) {\r\n return SustainabilityRouteTabNames.EnvironmentalData;\r\n } else if (type === SustainabilityDataType.CarbonFootprints) {\r\n return SustainabilityRouteTabNames.CarbonFootprints;\r\n } else if (type === SustainabilityDataType.OriginOfWood) {\r\n return SustainabilityRouteTabNames.OriginOfWood;\r\n } else if (type === SustainabilityDataType.CertifiedVolumes) {\r\n return SustainabilityRouteTabNames.CertifiedVolumes;\r\n } else if (type === SustainabilityDataType.WaterFootprints) {\r\n return SustainabilityRouteTabNames.WaterFootprints;\r\n }\r\n return '';\r\n}\r\n\r\nexport function getSustainabilityRoute(\r\n tab: SustainabilityDataType,\r\n product: SustainabilityProduct | null,\r\n year: number | null,\r\n monthRange: MonthRange | null,\r\n environmentalDataReportType?: EnvironmentalDataReportType\r\n): Location {\r\n let params: Dictionary = {};\r\n let query: Dictionary = {};\r\n if (tab !== SustainabilityDataType.CertifiedVolumes && product) {\r\n params = {\r\n tabName: getSustainabilityRouteParamTabName(tab),\r\n productName: product.productName,\r\n millId: product.millId.toString(),\r\n millName: product.millName,\r\n year: year ? year.toString() : '',\r\n };\r\n if (\r\n tab === SustainabilityDataType.EnvironmentalData &&\r\n environmentalDataReportType\r\n ) {\r\n query = {\r\n reportType: environmentalDataReportType.toString(),\r\n };\r\n }\r\n } else if (tab === SustainabilityDataType.CertifiedVolumes && monthRange) {\r\n params = {\r\n tabName: getSustainabilityRouteParamTabName(tab),\r\n fromYear: monthRange.from.year.toString(),\r\n fromMonth: String(monthRange.from.month + 1).padStart(2, '0'),\r\n toYear: monthRange.to.year.toString(),\r\n toMonth: String(monthRange.to.month + 1).padStart(2, '0'),\r\n };\r\n } else {\r\n params = { tabName: getSustainabilityRouteParamTabName(tab) };\r\n }\r\n\r\n return {\r\n name:\r\n tab !== SustainabilityDataType.CertifiedVolumes\r\n ? routeNameSustainability\r\n : routeNameSustainabilityCertifiedVolumes,\r\n params,\r\n query,\r\n };\r\n}\r\n\r\nexport function getSustainabilityRouteParamsText(route: Route): string {\r\n const params = getSustainabilityRouteParams(route);\r\n if (params === null) {\r\n return '';\r\n }\r\n\r\n if (\r\n params.type !== SustainabilityDataType.CertifiedVolumes &&\r\n params.productMillAndYear\r\n ) {\r\n return i18n\r\n .t('routingForSustainability.routeParamsText.withProduct', [\r\n params.productMillAndYear.productName,\r\n params.productMillAndYear.millName,\r\n params.productMillAndYear.year,\r\n ])\r\n .toString();\r\n } else if (\r\n params.type === SustainabilityDataType.CertifiedVolumes &&\r\n params.selectedMonthRange\r\n ) {\r\n return monthRangeFilter(params.selectedMonthRange);\r\n } else {\r\n return '';\r\n }\r\n}\r\n\r\nexport function getSustainabilityRouteBreadcrumbs(route: Route): Breadcrumb[] {\r\n // Sustainability data -> [Sustainability data type] -> [Product name - Mill name OR Month range]\r\n\r\n const tabType = getSustainabilityTabFromRoute(route);\r\n const hasProductAndMillName =\r\n route.params.productName && route.params.millName;\r\n const hasMonthRange =\r\n route.params.fromYear &&\r\n route.params.fromMonth &&\r\n route.params.toYear &&\r\n route.params.toMonth;\r\n\r\n const breadcrumbs: Breadcrumb[] = [\r\n {\r\n routeName: routeNameSustainabilityRoot,\r\n name: i18n.t(`breadcrumbs.${routeNameSustainabilityRoot}`).toString(),\r\n },\r\n ];\r\n\r\n if (tabType) {\r\n breadcrumbs.push({\r\n routeName:\r\n tabType !== SustainabilityDataType.CertifiedVolumes\r\n ? routeNameSustainability\r\n : routeNameSustainabilityCertifiedVolumes,\r\n routeParams: {\r\n tabName: route.params.tabName,\r\n },\r\n name: i18n.t(`sustainabilityDataType.${tabType}`).toString(),\r\n });\r\n }\r\n\r\n const routeParamsText = getSustainabilityRouteParamsText(route);\r\n\r\n if (\r\n tabType !== SustainabilityDataType.CertifiedVolumes &&\r\n hasProductAndMillName\r\n ) {\r\n breadcrumbs.push({\r\n routeName: routeNameSustainability,\r\n routeParams: {\r\n tabName: route.params.tabName,\r\n productName: route.params.productName,\r\n millId: route.params.millId,\r\n millName: route.params.millName,\r\n year: route.params.year,\r\n },\r\n routeQuery:\r\n tabType === SustainabilityDataType.EnvironmentalData\r\n ? {\r\n reportType: route.query.reportType,\r\n }\r\n : undefined,\r\n name: routeParamsText,\r\n });\r\n } else if (\r\n tabType === SustainabilityDataType.CertifiedVolumes &&\r\n hasMonthRange\r\n ) {\r\n breadcrumbs.push({\r\n routeName: routeNameSustainabilityCertifiedVolumes,\r\n routeParams: {\r\n tabName: route.params.tabName,\r\n fromYear: route.params.fromYear,\r\n fromMonth: route.params.fromMonth,\r\n toYear: route.params.toYear,\r\n toMonth: route.params.toMonth,\r\n },\r\n name: routeParamsText,\r\n });\r\n }\r\n\r\n return breadcrumbs;\r\n}\r\n","export enum EnvironmentalDataReportType {\r\n All = 'All',\r\n EuEcolabel = 'EuEcolabel',\r\n NordicSwan = 'NordicSwan',\r\n PaperProfile = 'PaperProfile',\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TreeSelect',{attrs:{\"value\":_vm.value,\"options\":_vm.options,\"placeholder\":_vm.placeholder,\"clearable\":_vm.clearable,\"multiple\":_vm.multiple,\"disabled\":_vm.disabled,\"required\":_vm.required},on:{\"input\":_vm.onInput,\"select\":_vm.onSelect}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport TreeSelect, {\r\n TreeSelectNode,\r\n} from '@/components/general/TreeSelect.vue';\r\nimport { Customer } from '@/models/Customer';\r\n\r\n@Component({\r\n components: {\r\n TreeSelect,\r\n },\r\n})\r\nexport default class CustomersTreeSelect extends Vue {\r\n @Prop({ required: true }) private value!: number[];\r\n @Prop({ required: true }) private customers!: Customer[];\r\n @Prop({ required: true }) private placeholder!: string;\r\n @Prop({ required: false, default: () => false })\r\n private clearable!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n private multiple!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n private disabled!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n private required!: boolean;\r\n\r\n private get options(): TreeSelectNode[] {\r\n return this.customers.map((customer) => ({\r\n id: customer.id,\r\n label: customer.name,\r\n }));\r\n }\r\n\r\n private onInput(customers: number[]) {\r\n this.$emit('input', customers);\r\n }\r\n\r\n private onSelect(customers: number[]) {\r\n this.$emit('select', customers);\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomersTreeSelect.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomersTreeSelect.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./CustomersTreeSelect.vue?vue&type=template&id=4a44d5a1&\"\nimport script from \"./CustomersTreeSelect.vue?vue&type=script&lang=ts&\"\nexport * from \"./CustomersTreeSelect.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export interface Message {\r\n text: string;\r\n type: MessageType;\r\n}\r\n\r\nexport enum MessageType {\r\n info,\r\n success,\r\n warning,\r\n error,\r\n}\r\n","import { Consoler } from '@/utils/Consoler';\r\nimport { store } from '@/store';\r\nimport {\r\n Module,\r\n VuexModule,\r\n Mutation,\r\n Action,\r\n getModule,\r\n} from 'vuex-module-decorators';\r\nimport { CommonArrayStore } from '../commonArrayStore';\r\nimport userService from '@/services/UserService';\r\nimport { Contact } from '@/models/Contacts/Contact';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'userContacts',\r\n dynamic: true,\r\n store,\r\n})\r\nclass UserContactsModule extends VuexModule {\r\n private common = new CommonArrayStore, string>(20); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get item() {\r\n return (customerNumber: string) => this.common.getDataFor(customerNumber);\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation private commitSetLoading(payload: {\r\n id: string;\r\n loadingPromise: Promise;\r\n clearData?: boolean;\r\n }) {\r\n this.common.setLoading(payload);\r\n }\r\n @Mutation private commitSetLoadingComplete(payload: {\r\n id: string;\r\n data: Contact[];\r\n }) {\r\n this.common.setLoadingComplete(payload);\r\n }\r\n @Mutation private commitSetLoadingError(payload: {\r\n id: string;\r\n error?: any;\r\n clearData?: boolean;\r\n }) {\r\n this.common.setLoadingError(payload);\r\n }\r\n\r\n // ---------------\r\n // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchLoad(customerNumber: string): Promise {\r\n // If recently loaded, return\r\n if (this.common.hasFreshDataFor(customerNumber)) {\r\n return Promise.resolve(this.item(customerNumber)!);\r\n }\r\n\r\n const currentlyLoadingPromise =\r\n this.common.isCurrentlyLoading(customerNumber);\r\n if (currentlyLoadingPromise) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'userContacts',\r\n customerNumber\r\n );\r\n return currentlyLoadingPromise;\r\n }\r\n\r\n const loadingPromise = userService\r\n .getContacts(customerNumber)\r\n .then((response) => {\r\n this.commitSetLoadingComplete({\r\n id: customerNumber,\r\n data: response,\r\n });\r\n Consoler.debugLog(\r\n 'Load userContacts success',\r\n customerNumber,\r\n response\r\n );\r\n return Promise.resolve(response);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load userContacts failed', customerNumber, error);\r\n this.commitSetLoadingError({\r\n id: customerNumber,\r\n error,\r\n });\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoading({\r\n id: customerNumber,\r\n loadingPromise,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const userContactsModule = getModule(UserContactsModule);\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-contact-card\",class:{ 'no-background': _vm.noBackground, 'large-avatar': _vm.largeAvatar }},[(_vm.contact.imageUrl)?_c('img',{staticClass:\"c-contact-card__image c-contact-card__image--round\",attrs:{\"src\":_vm.contact.imageUrl,\"alt\":_vm.contact.name}}):(_vm.useFallbackImage)?_c('div',{staticClass:\"c-contact-card__image\"},[_c('i',{staticClass:\"material-icons c-contact-card__icon\",class:{ 'grey-fallback-icon': _vm.fallbackImageGrey }},[_vm._v(\"account_circle\")])]):_vm._e(),_c('div',{staticClass:\"c-contact-card__information d-flex justify-content-between u-full-width\"},[_c('div',[_c('span',{staticClass:\"c-contact-card__information-row\"},[_c('strong',[_vm._v(_vm._s(_vm.contact.name))])]),(_vm.contact.responsibility)?_c('span',{staticClass:\"c-contact-card__information-row\"},[_c('span',[_vm._v(_vm._s(_vm.contact.responsibility))])]):_vm._e(),(_vm.contact.phoneNumber)?_c('span',{staticClass:\"c-contact-card__information-row\"},[_vm._v(_vm._s(_vm.$t('contactCard.phone'))+\" \"+_vm._s(_vm.contact.phoneNumber))]):_vm._e(),(_vm.contact.email)?_c('span',{staticClass:\"c-contact-card__information-row\"},[_c('a',{attrs:{\"href\":_vm._f(\"lowercase\")(('mailto:' + _vm.contact.email))}},[_vm._v(_vm._s(_vm._f(\"lowercase\")(_vm.contact.email)))])]):_vm._e()]),_c('div',{staticClass:\"align-self-center\"},[_vm._t(\"right\")],2)])])}\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\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport { Contact } from '@/models/Contacts/Contact';\r\n\r\n@Component({\r\n components: {},\r\n filters: {\r\n lowercase: (value: string): string => {\r\n if (!value) {\r\n return value;\r\n }\r\n return value.toLowerCase();\r\n },\r\n },\r\n})\r\nexport default class ContactCard extends Vue {\r\n @Prop({ required: true })\r\n private contact!: Contact;\r\n\r\n @Prop({ required: false, default: () => false })\r\n private useFallbackImage!: boolean;\r\n\r\n @Prop({ required: false, default: () => false })\r\n private fallbackImageGrey!: boolean;\r\n\r\n @Prop({ required: false, default: () => false })\r\n private noBackground!: boolean;\r\n\r\n @Prop({ required: false, default: () => false })\r\n private largeAvatar!: boolean;\r\n\r\n private onButtonClick() {\r\n this.$emit('onButtonClick');\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactCard.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactCard.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ContactCard.vue?vue&type=template&id=b347a684&scoped=true&\"\nimport script from \"./ContactCard.vue?vue&type=script&lang=ts&\"\nexport * from \"./ContactCard.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ContactCard.vue?vue&type=style&index=0&id=b347a684&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b347a684\",\n null\n \n)\n\nexport default component.exports","import { store } from '@/store';\r\n\r\nimport {\r\n Module,\r\n VuexModule,\r\n Mutation,\r\n getModule,\r\n Action,\r\n} from 'vuex-module-decorators';\r\n\r\nexport interface LoadingStatus {\r\n loading: boolean;\r\n text?: string;\r\n}\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'loading',\r\n dynamic: true,\r\n store,\r\n})\r\nclass LoadingModule extends VuexModule {\r\n private statuses: LoadingStatus[] = [];\r\n\r\n private get currentStatus(): LoadingStatus | null {\r\n if (this.statuses.length === 0) {\r\n return null;\r\n }\r\n for (let i = this.statuses.length - 1; i >= 0; i--) {\r\n if (this.statuses[i].loading) {\r\n return this.statuses[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get isLoading(): boolean {\r\n const currentStatus = this.currentStatus;\r\n if (currentStatus !== null) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n public get loadingText(): string {\r\n const currentStatus = this.currentStatus;\r\n if (currentStatus !== null) {\r\n return currentStatus.text ? currentStatus.text : '';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation private commitAdd(status: LoadingStatus) {\r\n this.statuses.push(status);\r\n }\r\n\r\n @Mutation public commitComplete(loadingStatus: LoadingStatus) {\r\n const status = this.statuses.find((s) => s === loadingStatus);\r\n if (status) {\r\n status.loading = false;\r\n }\r\n }\r\n\r\n // ---------------\r\n // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchAdd(text?: string): Promise {\r\n const newStatus: LoadingStatus = {\r\n loading: true,\r\n text,\r\n };\r\n this.commitAdd(newStatus);\r\n return newStatus;\r\n }\r\n}\r\n\r\nexport const loadingModule = getModule(LoadingModule);\r\n","export interface LoadingStatus {\r\n isLoading: boolean;\r\n isError: boolean;\r\n error: any;\r\n loadingPromise: Promise | null;\r\n loadDate: Date | null;\r\n}\r\n\r\nexport interface ItemWithStatus {\r\n id: TKey;\r\n data: T | null;\r\n loading: LoadingStatus;\r\n}\r\nexport class CommonArrayStore {\r\n private complexIdFields?: string[];\r\n\r\n public reLoadMinMinutesInterval: number = 10;\r\n public items: Array> = [];\r\n\r\n constructor(reLoadMinMinutesInterval: number, complexIdFields?: string[]) {\r\n this.reLoadMinMinutesInterval = reLoadMinMinutesInterval;\r\n this.complexIdFields = complexIdFields;\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n public setLoading(payload: {\r\n id: TKey;\r\n loadingPromise: Promise;\r\n clearData?: boolean;\r\n }): void {\r\n const item = this.getOrAddItem(payload.id);\r\n\r\n item.loading.isLoading = true;\r\n item.loading.isError = false;\r\n item.loading.error = null;\r\n item.loading.loadingPromise = payload.loadingPromise;\r\n\r\n if (payload.clearData === true) {\r\n item.data = null;\r\n }\r\n }\r\n\r\n public setLoadingComplete(payload: { id: TKey; data: T }): void {\r\n const item = this.getOrAddItem(payload.id);\r\n\r\n item.loading.isLoading = false;\r\n item.loading.isError = false;\r\n item.loading.error = null;\r\n item.loading.loadDate = new Date();\r\n\r\n item.data = payload.data;\r\n }\r\n\r\n public setLoadingError(payload: {\r\n id: TKey;\r\n error?: any;\r\n clearData?: boolean;\r\n }): void {\r\n const item = this.getOrAddItem(payload.id);\r\n\r\n item.loading.isLoading = false;\r\n item.loading.isError = true;\r\n item.loading.error = payload.error;\r\n item.loading.loadDate = null;\r\n\r\n if (payload.clearData === true) {\r\n item.data = null;\r\n }\r\n }\r\n\r\n // ------------------------\r\n // ### Helper functions ###\r\n // ------------------------\r\n public getDataFor(id: TKey): T | null {\r\n const item = this.getOrAddItem(id);\r\n\r\n return item.data;\r\n }\r\n\r\n public removeDataFor(id: TKey): void {\r\n const item = this.getOrAddItem(id);\r\n\r\n item.data = null;\r\n }\r\n\r\n public hasFreshDataFor(id: TKey): boolean {\r\n const item = this.getOrAddItem(id);\r\n\r\n return this.checkIsDataFresh(item);\r\n }\r\n\r\n public isCurrentlyLoading(id: TKey): Promise | null {\r\n const item = this.getOrAddItem(id);\r\n\r\n if (!item.loading.isLoading) {\r\n return null;\r\n }\r\n\r\n return item.loading.loadingPromise;\r\n }\r\n\r\n private getOrAddItem(id: TKey): ItemWithStatus {\r\n let itemWithStatus: ItemWithStatus | undefined;\r\n\r\n if (this.complexIdFields && this.complexIdFields.length > 0) {\r\n itemWithStatus = this.items.find((i) =>\r\n this.complexIdFields?.every((field) => {\r\n const a = (i.id as any)[field];\r\n const b = (id as any)[field];\r\n\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n return a.length === b.length && a.every((item) => b.includes(item));\r\n }\r\n\r\n return a === b;\r\n })\r\n );\r\n } else {\r\n itemWithStatus = this.items.find((i) => i.id === id);\r\n }\r\n\r\n if (itemWithStatus) {\r\n return itemWithStatus;\r\n }\r\n\r\n const newItemWithStatus: ItemWithStatus = {\r\n id,\r\n data: null,\r\n loading: {\r\n isLoading: false,\r\n isError: false,\r\n error: null,\r\n loadingPromise: null,\r\n loadDate: null,\r\n },\r\n };\r\n\r\n this.items.push(newItemWithStatus);\r\n\r\n return newItemWithStatus;\r\n }\r\n\r\n private checkIsDataFresh(item: ItemWithStatus): boolean {\r\n return (\r\n item.data !== null &&\r\n item.loading.loadDate !== null &&\r\n this.getMinutesBetweenDates(item.loading.loadDate, new Date()) <=\r\n this.reLoadMinMinutesInterval\r\n );\r\n }\r\n\r\n private getMinutesBetweenDates(startDate: Date, endDate: Date) {\r\n const diff = endDate.getTime() - startDate.getTime();\r\n return diff / 60000;\r\n }\r\n}\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Sidebar.vue?vue&type=style&index=0&id=1126b10b&scoped=true&lang=scss&\"","import moment from 'moment';\r\nimport Vue from 'vue';\r\nimport { DateFormats } from '@/utils/Constants';\r\n\r\nVue.filter('date', (value: moment.MomentInput) => dateFilter(value));\r\n\r\nexport function dateFilter(value: moment.MomentInput): string {\r\n if (value) {\r\n return moment(value).format(DateFormats.dateFormat);\r\n }\r\n\r\n return '';\r\n}\r\n","import {\r\n AuthorizeService,\r\n LoginActions,\r\n LogoutActions,\r\n} from '@common/services/AuthService';\r\n\r\nconst prefix = '/authentication';\r\n\r\nexport const ApplicationPaths = {\r\n DefaultLoginRedirectPath: '/',\r\n ApiAuthorizationPrefix: prefix,\r\n Login: `${prefix}/${LoginActions.Login}`,\r\n LoginFailed: `${prefix}/${LoginActions.LoginFailed}`,\r\n LoginCallback: `${prefix}/${LoginActions.LoginCallback}`,\r\n Register: `${prefix}/${LoginActions.Register}`,\r\n Profile: `${prefix}/${LoginActions.Profile}`,\r\n LogOut: `${prefix}/${LogoutActions.Logout}`,\r\n LoggedOut: `${prefix}/${LogoutActions.LoggedOut}`,\r\n LogOutCallback: `${prefix}/${LogoutActions.LogoutCallback}`,\r\n};\r\n\r\nconst authService = new AuthorizeService();\r\n\r\nexport default authService;\r\n","export const Roles = {\r\n IsImpersonationUser: 'IsImpersonationUser',\r\n IsAdminUser: 'IsAdminUser',\r\n};\r\n","import { PageItem } from '@/models/Pages/PageItem';\r\nimport { PageSubItem } from '@/models/Pages/PageSubItem';\r\nimport { Customer } from '@/models/Customer';\r\nimport {\r\n authRequirementsForDashboard,\r\n authRequirementsForOrderFlow,\r\n authRequirementsForQData,\r\n authRequirementsForInvoices,\r\n authRequirementsForForecasts,\r\n authRequirementsForPerformanceInvoicedVolumes,\r\n authRequirementsForPerformanceContractPerformance,\r\n authRequirementsForSustainability,\r\n authRequirementsForSustainabilityCertifiedVolumes,\r\n authRequirementsForDocuments,\r\n authRequirementsForUserContacts,\r\n authRequirementsForSmiForecasts,\r\n authRequirementsForSmiConsumptionLog,\r\n authRequirementsForSmiMyWarehouse,\r\n authRequirementsForSmiAdminWarehouses,\r\n authRequirementsForAdminUsers,\r\n authRequirementsForSmiMyConsumptions,\r\n authRequirementsForAdminParameters,\r\n authRequirementsForAdminSustainability,\r\n authRequirementsForSmiStockDeviations,\r\n authRequirementsForAdminSubscriptions,\r\n authRequirementsForSubscriptions,\r\n} from '@/router/authRequirements';\r\nimport {\r\n routeNameDashboard,\r\n routeNameQDataRoot,\r\n routeNameInvoices,\r\n routeNameForecasts,\r\n routeNamePerformanceRoot,\r\n routeNamePerformanceInvoicedVolumes,\r\n routeNamePerformanceContractPerformance,\r\n routeNameSustainabilityRoot,\r\n routeNameSustainabilityCertifiedVolumes,\r\n routeNameDocuments,\r\n routeNameUserContacts,\r\n routeNameSmiRoot,\r\n routeNameSmiForecasts,\r\n routeNameSmiConsumptionLog,\r\n routeNameSmiMyWarehouse,\r\n routeNameSmiMyConsumptions,\r\n routeNameSmiAdminRoot,\r\n routeNameSmiAdminWarehousesRoot,\r\n routeNameAdminRoot,\r\n routeNameAdminUsers,\r\n routeNameOrderFlowRoot,\r\n routeNameSustainability,\r\n routeNameSmiStockDeviations,\r\n routeNameAdminParameters,\r\n routeNameAdminSubscriptions,\r\n routeNameAdminSustainability,\r\n routeNameSustainabilitySubscriptions,\r\n routeNameQDataSubscriptions,\r\n routeNameQData,\r\n} from '@/router/routes';\r\nimport { Permissions } from './Permissions';\r\nimport { SustainabilityRouteTabNames } from './RoutingForSustainability';\r\n\r\nexport const pages: PageItem[] = [\r\n {\r\n key: 'dashboard',\r\n routeName: routeNameDashboard,\r\n authRequirements: authRequirementsForDashboard,\r\n icon: 'view-dashboard',\r\n showOnDashboard: false,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'orderFlow',\r\n routeName: routeNameOrderFlowRoot,\r\n authRequirements: authRequirementsForOrderFlow,\r\n icon: 'clipboard-arrow-down',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'qData',\r\n routeName: routeNameQDataRoot,\r\n authRequirements: authRequirementsForQData,\r\n icon: 'file-chart',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n subItems: [\r\n {\r\n key: 'qData',\r\n routeName: routeNameQData,\r\n authRequirements: authRequirementsForQData,\r\n icon: 'chart-box',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'subscriptions',\r\n routeName: routeNameQDataSubscriptions,\r\n authRequirements: authRequirementsForSubscriptions,\r\n icon: 'playlist-check',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n ],\r\n },\r\n {\r\n key: 'invoices',\r\n routeName: routeNameInvoices,\r\n authRequirements: authRequirementsForInvoices,\r\n icon: 'clipboard-text',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'forecasts',\r\n routeName: routeNameForecasts,\r\n authRequirements: authRequirementsForForecasts,\r\n icon: 'calendar-check',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'performance',\r\n routeName: routeNamePerformanceRoot,\r\n icon: 'poll',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n subItems: [\r\n {\r\n key: 'invoicedVolumes',\r\n routeName: routeNamePerformanceInvoicedVolumes,\r\n authRequirements: authRequirementsForPerformanceInvoicedVolumes,\r\n icon: 'chart-bell-curve',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'contractPerformance',\r\n routeName: routeNamePerformanceContractPerformance,\r\n authRequirements: authRequirementsForPerformanceContractPerformance,\r\n icon: 'finance',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n ],\r\n },\r\n {\r\n key: 'sustainability',\r\n routeName: routeNameSustainabilityRoot,\r\n authRequirements: authRequirementsForSustainability,\r\n icon: 'leaf',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n subItems: [\r\n {\r\n key: 'environmentalData',\r\n routeName: routeNameSustainabilityRoot,\r\n authRequirements: authRequirementsForSustainability,\r\n icon: 'sprout',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'carbonFootprint',\r\n routeName: routeNameSustainability,\r\n authRequirements: authRequirementsForSustainability,\r\n routeParam: SustainabilityRouteTabNames.CarbonFootprints,\r\n icon: 'leaf',\r\n showOnDashboard: true,\r\n showInMenu: false,\r\n },\r\n {\r\n key: 'originOfWood',\r\n routeName: routeNameSustainability,\r\n routeParam: SustainabilityRouteTabNames.OriginOfWood,\r\n authRequirements: authRequirementsForSustainability,\r\n icon: 'leaf',\r\n showOnDashboard: true,\r\n showInMenu: false,\r\n },\r\n {\r\n key: 'certifiedVolumes',\r\n routeName: routeNameSustainabilityCertifiedVolumes,\r\n authRequirements: authRequirementsForSustainabilityCertifiedVolumes,\r\n icon: 'leaf',\r\n showOnDashboard: true,\r\n showInMenu: false,\r\n },\r\n {\r\n key: 'waterFootprint',\r\n routeName: routeNameSustainability,\r\n routeParam: SustainabilityRouteTabNames.WaterFootprints,\r\n authRequirements: authRequirementsForSustainability,\r\n icon: 'leaf',\r\n showOnDashboard: true,\r\n showInMenu: false,\r\n },\r\n {\r\n key: 'subscriptions',\r\n routeName: routeNameSustainabilitySubscriptions,\r\n authRequirements: authRequirementsForSubscriptions,\r\n icon: 'playlist-check',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n ],\r\n },\r\n {\r\n key: 'documents',\r\n routeName: routeNameDocuments,\r\n authRequirements: authRequirementsForDocuments,\r\n icon: 'file-document-multiple',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'userContacts',\r\n routeName: routeNameUserContacts,\r\n authRequirements: authRequirementsForUserContacts,\r\n icon: 'account-box',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'smi',\r\n routeName: routeNameSmiRoot,\r\n icon: 'warehouse',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n subItems: [\r\n {\r\n key: 'forecasts',\r\n routeName: routeNameSmiForecasts,\r\n authRequirements: authRequirementsForSmiForecasts,\r\n icon: 'calendar-check',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'consumptionLog',\r\n routeName: routeNameSmiConsumptionLog,\r\n authRequirements: authRequirementsForSmiConsumptionLog,\r\n icon: 'cart-arrow-right',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'myConsumptions',\r\n routeName: routeNameSmiMyConsumptions,\r\n authRequirements: authRequirementsForSmiMyConsumptions,\r\n icon: 'cart-outline',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'myWarehouse',\r\n routeName: routeNameSmiMyWarehouse,\r\n authRequirements: authRequirementsForSmiMyWarehouse,\r\n icon: 'warehouse',\r\n showOnDashboard: true,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'stockDeviations',\r\n routeName: routeNameSmiStockDeviations,\r\n authRequirements: authRequirementsForSmiStockDeviations,\r\n icon: 'plus-minus',\r\n showOnDashboard: false,\r\n showInMenu: true,\r\n },\r\n ],\r\n },\r\n {\r\n key: 'smiAdmin',\r\n routeName: routeNameSmiAdminRoot,\r\n icon: 'shield-home',\r\n showOnDashboard: false,\r\n showInMenu: true,\r\n subItems: [\r\n {\r\n key: 'warehouses',\r\n routeName: routeNameSmiAdminWarehousesRoot,\r\n authRequirements: authRequirementsForSmiAdminWarehouses,\r\n icon: 'home-group',\r\n showOnDashboard: false,\r\n showInMenu: true,\r\n },\r\n ],\r\n },\r\n {\r\n key: 'admin',\r\n routeName: routeNameAdminRoot,\r\n icon: 'shield-account',\r\n showOnDashboard: false,\r\n showInMenu: true,\r\n subItems: [\r\n {\r\n key: 'users',\r\n routeName: routeNameAdminUsers,\r\n authRequirements: authRequirementsForAdminUsers,\r\n icon: 'account-group',\r\n showOnDashboard: false,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'subscriptions',\r\n routeName: routeNameAdminSubscriptions,\r\n authRequirements: authRequirementsForAdminSubscriptions,\r\n icon: 'playlist-check',\r\n showOnDashboard: false,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'parameters',\r\n routeName: routeNameAdminParameters,\r\n authRequirements: authRequirementsForAdminParameters,\r\n icon: 'home-analytics',\r\n showOnDashboard: false,\r\n showInMenu: true,\r\n },\r\n {\r\n key: 'sustainability',\r\n routeName: routeNameAdminSustainability,\r\n authRequirements: authRequirementsForAdminSustainability,\r\n icon: 'sprout',\r\n showOnDashboard: false,\r\n showInMenu: true,\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport function checkPageItemAuthRequirements(\r\n item: PageItem,\r\n userCustomers?: Customer[]\r\n): boolean {\r\n return (\r\n item.authRequirements === undefined ||\r\n Permissions.validate(item.authRequirements, userCustomers).valid\r\n );\r\n}\r\n\r\nexport function checkPageSubItemAuthRequirements(\r\n subItem: PageSubItem,\r\n userCustomers?: Customer[]\r\n): boolean {\r\n return (\r\n subItem.authRequirements === undefined ||\r\n Permissions.validate(subItem.authRequirements, userCustomers).valid\r\n );\r\n}\r\n","import moment from 'moment';\r\nimport Vue from 'vue';\r\nimport { DateFormats } from '@/utils/Constants';\r\n\r\nVue.filter('fileNameDate', (value: moment.MomentInput) =>\r\n fileNameDateFilter(value)\r\n);\r\n\r\nexport function fileNameDateFilter(value: moment.MomentInput): string {\r\n return moment(value).format(DateFormats.fileNameDateFormat);\r\n}\r\n","import Vue from 'vue';\r\nimport { UserState } from '@/models/UserState';\r\nimport { Consoler } from './Consoler';\r\nimport { CurrentUser } from '@/models/UserProfile/CurrentUser';\r\n\r\n// Wrapper for accessing and modifying local storage data\r\nclass LocalStorageInstance extends Vue {\r\n private static localStorageTest() {\r\n const test = 'test';\r\n try {\r\n localStorage.setItem(test, test);\r\n localStorage.removeItem(test);\r\n return true;\r\n } catch (e) {\r\n Consoler.warn('Local storage not supported!');\r\n return false;\r\n }\r\n }\r\n\r\n private get userState(): UserState | null | undefined {\r\n if (!LocalStorageInstance.localStorageTest()) {\r\n return undefined;\r\n }\r\n\r\n if (localStorage.userState_v1_0 === undefined) {\r\n return null;\r\n }\r\n\r\n try {\r\n return JSON.parse(localStorage.userState_v1_0) as UserState;\r\n } catch {\r\n localStorage.userState_v1_0 = undefined;\r\n return null;\r\n }\r\n }\r\n\r\n private set userState(value: UserState | null | undefined) {\r\n if (!LocalStorageInstance.localStorageTest()) {\r\n return;\r\n }\r\n\r\n localStorage.userState_v1_0 = JSON.stringify(value);\r\n }\r\n\r\n public validateUserState(currentUser: CurrentUser) {\r\n if (!LocalStorageInstance.localStorageTest()) {\r\n return;\r\n }\r\n\r\n let userState = this.userState;\r\n\r\n if (\r\n userState === null ||\r\n userState === undefined ||\r\n !currentUser.userProfile ||\r\n !currentUser.userProfile.azureAdId ||\r\n userState.azureAdId !== currentUser.userProfile.azureAdId\r\n ) {\r\n if (currentUser.userProfile && currentUser.userProfile.azureAdId) {\r\n userState = this.createUserState(currentUser.userProfile.azureAdId);\r\n this.userState = userState;\r\n Consoler.debugLog(\r\n 'Creating new user state, for user profile',\r\n this.userState,\r\n currentUser\r\n );\r\n } else {\r\n Consoler.debugLog(\r\n 'No profile or azure ad id, clearing user state',\r\n this.userState,\r\n currentUser\r\n );\r\n this.userState = undefined;\r\n }\r\n } else {\r\n Consoler.debugLog(\r\n 'Keeping current user state',\r\n this.userState,\r\n currentUser\r\n );\r\n }\r\n }\r\n\r\n public get selectedCustomerNumber(): string | null {\r\n const userState = this.userState;\r\n if (userState === null || userState === undefined) {\r\n return null;\r\n }\r\n\r\n return userState.selectedCustomerNumber;\r\n }\r\n public set selectedCustomerNumber(value: string | null) {\r\n const userState = this.userState;\r\n if (userState === null || userState === undefined) {\r\n return;\r\n }\r\n\r\n userState.selectedCustomerNumber = value;\r\n\r\n this.userState = userState;\r\n }\r\n\r\n public get selectedCameraDeviceId(): string | null {\r\n const userState = this.userState;\r\n\r\n if (userState === null || userState === undefined) {\r\n return null;\r\n }\r\n\r\n return userState.selectedCameraDeviceId;\r\n }\r\n public set selectedCameraDeviceId(value: string | null) {\r\n const userState = this.userState;\r\n if (userState === null || userState === undefined) {\r\n return;\r\n }\r\n\r\n userState.selectedCameraDeviceId = value;\r\n\r\n this.userState = userState;\r\n }\r\n\r\n private createUserState(azureAdId: string): UserState {\r\n return {\r\n azureAdId,\r\n selectedCustomerNumber: null,\r\n selectedCameraDeviceId: null,\r\n };\r\n }\r\n}\r\n\r\nexport const LocalStorage = new LocalStorageInstance();\r\n","import { CommonStore } from '@/store/common';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { store } from '@/store';\r\n\r\nimport {\r\n Module,\r\n VuexModule,\r\n Mutation,\r\n Action,\r\n getModule,\r\n} from 'vuex-module-decorators';\r\nimport { CurrentUser } from '@/models/UserProfile/CurrentUser';\r\nimport { authModule } from './auth';\r\nimport userService from '@/services/UserService';\r\nimport impersonationService from '@/services/ImpersonationService';\r\nimport { Customer } from '@/models/Customer';\r\nimport { LocalStorage } from '@/utils/LocalStorage';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'userProfile',\r\n dynamic: true,\r\n store,\r\n})\r\nclass UserProfileModule extends VuexModule {\r\n public data: CurrentUser | null = null;\r\n public selectedCustomer: Customer | null = null;\r\n public selectedCameraDeviceId: string | null = null;\r\n\r\n private common = new CommonStore(20); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get loading() {\r\n return this.common.loading;\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation public commitSetCurrenUser(currenUser: CurrentUser) {\r\n this.data = currenUser;\r\n }\r\n\r\n @Mutation public commitSetSelectedCustomer(customer: Customer) {\r\n this.selectedCustomer = customer;\r\n LocalStorage.selectedCustomerNumber = customer.number;\r\n }\r\n\r\n @Mutation public commitClearSelectedCustomer() {\r\n this.selectedCustomer = null;\r\n LocalStorage.selectedCustomerNumber = null;\r\n }\r\n\r\n @Mutation public commitSetSelectedCameraDeviceId(deviceId: string) {\r\n this.selectedCameraDeviceId = deviceId;\r\n LocalStorage.selectedCameraDeviceId = deviceId;\r\n }\r\n\r\n @Mutation public commitClearSelectedCameraDeviceId() {\r\n this.selectedCameraDeviceId = null;\r\n LocalStorage.selectedCameraDeviceId = null;\r\n }\r\n\r\n @Mutation public commitClearCurrenUser() {\r\n this.data = null;\r\n }\r\n\r\n // From common:\r\n @Mutation private commitSetLoadedDate() {\r\n this.common.setLoadedDate();\r\n }\r\n @Mutation private commitClearLoadedDate() {\r\n this.common.clearLoadedDate();\r\n }\r\n @Mutation private commitSetLoadingError(payload: { error: any }) {\r\n this.common.setLoadingError(payload);\r\n }\r\n @Mutation private commitSetLoading() {\r\n this.common.setLoading();\r\n }\r\n @Mutation private commitClearLoading() {\r\n this.common.clearLoading();\r\n }\r\n @Mutation private commitSetLoadingPromise(payload: {\r\n loadingPromise: Promise;\r\n loadingPromiseForId: any;\r\n }) {\r\n this.common.setLoadingPromise(payload);\r\n }\r\n\r\n // ---------------\r\n // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchLoad(data?: { force: boolean }): Promise {\r\n // If recently loaded, return\r\n if ((!data || (data && !data.force)) && !this.common.needToReLoad()) {\r\n return Promise.resolve();\r\n }\r\n\r\n if (this.common.isCurrentlyLoading()) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'userProfile'\r\n );\r\n return this.common.loading.loadingPromise;\r\n }\r\n\r\n this.commitSetLoading();\r\n\r\n if (!authModule.isInitialized) {\r\n await authModule.dispatchInitialize();\r\n }\r\n\r\n if (!authModule.isAuthenticated) {\r\n this.commitClearCurrenUser();\r\n this.commitSetLoadedDate();\r\n this.commitClearLoading();\r\n Consoler.debugLog('Not authenticated, clearing userProfile');\r\n } else {\r\n const loadingPromise = userService\r\n .getCurrent()\r\n .then((currentUser) => {\r\n // Validate stored user state\r\n LocalStorage.validateUserState(currentUser);\r\n\r\n // Use the stored selected customer, if valid (in the user profile customers list)\r\n const selectedCustomerNumber = LocalStorage.selectedCustomerNumber;\r\n let selectedCustomer =\r\n selectedCustomerNumber !== null\r\n ? currentUser.userProfile?.customers?.find(\r\n (customer) => customer.number === selectedCustomerNumber\r\n )\r\n : undefined;\r\n\r\n // If no valid stored selected customer, and if having exactly one customer in profile, then select that one\r\n if (\r\n !selectedCustomer &&\r\n currentUser.userProfile?.customers?.length === 1\r\n ) {\r\n Consoler.debugLog(\r\n 'No (valid) stored selected customer for the current user profile, but setting to the single customer user has access to.',\r\n currentUser.userProfile.customers[0]\r\n );\r\n selectedCustomer = currentUser.userProfile.customers[0];\r\n }\r\n\r\n if (selectedCustomer) {\r\n Consoler.debugLog(\r\n 'A valid stored selected customer for the current user profile was found',\r\n selectedCustomer\r\n );\r\n this.commitSetSelectedCustomer(selectedCustomer);\r\n } else {\r\n Consoler.debugLog(\r\n 'No (valid) stored selected customer for the current user profile',\r\n currentUser.userProfile?.customers\r\n );\r\n this.commitClearSelectedCustomer();\r\n }\r\n\r\n const selectedCameraDeviceId = LocalStorage.selectedCameraDeviceId;\r\n if (selectedCameraDeviceId === null) {\r\n Consoler.debugLog(\r\n 'No selected camera device id for the current user profile was found'\r\n );\r\n this.commitClearSelectedCameraDeviceId();\r\n } else {\r\n Consoler.debugLog(\r\n 'A stored camera device id for the current user profile was found'\r\n );\r\n this.commitSetSelectedCameraDeviceId(selectedCameraDeviceId);\r\n }\r\n\r\n this.commitSetCurrenUser(currentUser);\r\n this.commitSetLoadedDate();\r\n this.commitClearLoading();\r\n Consoler.debugLog('Load userProfile success', currentUser);\r\n\r\n // Extend impersonation\r\n if (currentUser.userProfile?.isImpersonated) {\r\n Consoler.debugLog('userProfile isImpersonated, extending session.');\r\n impersonationService.extend().catch((error) => {\r\n Consoler.debugWarn('Extending impersonation failed.', error);\r\n // TODO: Handle 404? Should never really happen though\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load userProfile failed', error);\r\n this.commitSetLoadingError({ error });\r\n this.commitClearCurrenUser();\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoadingPromise({\r\n loadingPromise,\r\n loadingPromiseForId: null,\r\n });\r\n return loadingPromise;\r\n }\r\n }\r\n}\r\n\r\nexport const userProfileModule = getModule(UserProfileModule);\r\n","import moment from 'moment';\r\nimport Vue from 'vue';\r\nimport i18n from '@/i18n/i18n';\r\n\r\nVue.filter('weekRange', (fromDate: string, toDate: string) =>\r\n weekRangeFilter(fromDate, toDate)\r\n);\r\n\r\nexport function weekRangeFilter(\r\n fromDate: moment.MomentInput,\r\n toDate: moment.MomentInput\r\n): string {\r\n const fromDateWeek = moment(fromDate).isoWeek();\r\n const toDateWeek = moment(toDate).isoWeek();\r\n\r\n if (fromDateWeek === toDateWeek) {\r\n return i18n.t('filters.weekRangeFilter.same', [fromDateWeek]).toString();\r\n } else {\r\n return i18n\r\n .t('filters.weekRangeFilter.default', [fromDateWeek, toDateWeek])\r\n .toString();\r\n }\r\n}\r\n","import { BaseServiceDefinition } from './BaseService';\r\nimport { FeatureFlags } from '@/models/FeatureFlags';\r\n\r\nclass FeatureFlagsService extends BaseServiceDefinition {\r\n constructor() {\r\n super();\r\n }\r\n\r\n public async getFeatureFlags(): Promise {\r\n return this.get('/api/v1/featureFlags')\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n}\r\n\r\nconst featureFlagsService: FeatureFlagsService = new FeatureFlagsService();\r\n\r\nexport default featureFlagsService;\r\n","import { CommonStore } from '@/store/common';\r\nimport { store } from '@/store';\r\n\r\nimport {\r\n Module,\r\n VuexModule,\r\n Mutation,\r\n Action,\r\n getModule,\r\n} from 'vuex-module-decorators';\r\nimport featureFlagsService from '@/services/FeatureFlagsService';\r\nimport { FeatureFlags } from '@/models/FeatureFlags';\r\nimport { Consoler } from '@/utils/Consoler';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'featureFlags',\r\n dynamic: true,\r\n store,\r\n})\r\nclass FeatureFlagsModule extends VuexModule {\r\n public data: FeatureFlags | null = null;\r\n\r\n private common = new CommonStore(10); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get loading() {\r\n return this.common.loading;\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation public commitSetFeatureFlags(featureFlags: FeatureFlags) {\r\n this.data = featureFlags;\r\n }\r\n\r\n @Mutation public commitClearFeatureFlags() {\r\n this.data = null;\r\n }\r\n\r\n // From common:\r\n @Mutation private commitSetLoadedDate() {\r\n this.common.setLoadedDate();\r\n }\r\n @Mutation private commitClearLoadedDate() {\r\n this.common.clearLoadedDate();\r\n }\r\n @Mutation private commitSetLoadingError(payload: { error: any }) {\r\n this.common.setLoadingError(payload);\r\n }\r\n @Mutation private commitSetLoading() {\r\n this.common.setLoading();\r\n }\r\n @Mutation private commitClearLoading() {\r\n this.common.clearLoading();\r\n }\r\n @Mutation private commitSetLoadingPromise(payload: {\r\n loadingPromise: Promise;\r\n loadingPromiseForId: any;\r\n }) {\r\n this.common.setLoadingPromise(payload);\r\n }\r\n\r\n // ---------------\r\n // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchLoad(): Promise {\r\n if (!this.common.needToReLoad()) {\r\n return Promise.resolve();\r\n }\r\n\r\n if (this.common.isCurrentlyLoading()) {\r\n return this.common.loading.loadingPromise;\r\n }\r\n\r\n this.commitSetLoading();\r\n\r\n const loadingPromise = featureFlagsService\r\n .getFeatureFlags()\r\n .then((featureFlags) => {\r\n Consoler.debugLog('Load featureFlags success', featureFlags);\r\n this.commitSetFeatureFlags(featureFlags);\r\n this.commitSetLoadedDate();\r\n this.commitClearLoading();\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load featureFlags failed', error);\r\n this.commitSetLoadingError({ error });\r\n this.commitClearFeatureFlags();\r\n\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoadingPromise({ loadingPromise, loadingPromiseForId: null });\r\n\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const featureFlagsModule = getModule(FeatureFlagsModule);\r\n","import { BaseServiceDefinition } from './BaseService';\r\nimport { Contact } from '@/models/Contacts/Contact';\r\nimport { CurrentUser } from '@/models/UserProfile/CurrentUser';\r\nimport { Customers } from '@/models/Customers';\r\nimport { FeatureHighlights } from '@/models/UserProfile/FeatureHighlights';\r\n\r\nclass UserService extends BaseServiceDefinition {\r\n constructor() {\r\n super();\r\n }\r\n\r\n public getCurrent(): Promise {\r\n return this.get('/api/v1/users/current')\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public getContacts(customerNumber: string): Promise {\r\n return this.get('/api/v1/users/current/contacts', { customerNumber })\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public getCustomers(): Promise {\r\n return this.get('/api/v1/users/current/customers')\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public markFeatureHighlightAsDisplayed(\r\n highlights: FeatureHighlights[]\r\n ): Promise {\r\n return this.post('/api/v1/users/current/featuresHighlighted', highlights)\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n}\r\n\r\nconst userService: UserService = new UserService();\r\n\r\nexport default userService;\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal\",attrs:{\"id\":_vm.id,\"data-closable\":_vm.closeableByOutsideClickAndEscKey ? 'true' : 'false'}},[_c('div',{staticClass:\"c-modal__dialog\",class:{\n 'c-modal__dialog--xl': _vm.isExtraLarge,\n 'c-modal__dialog--lg': _vm.isLarge,\n }},[_c('div',{staticClass:\"c-modal__content\"},[_c('div',{staticClass:\"c-modal__header\"},[(_vm.closeButton)?_c('div',{staticClass:\"js-modal-close-trigger c-modal__close\",on:{\"click\":function($event){$event.preventDefault();return _vm.onCloseClick.apply(null, arguments)}}},[_c('span',{staticClass:\"material-icons c-modal__close__icon\"},[_vm._v(\"close\")])]):_vm._e(),_c('label',{staticClass:\"c-modal__title u-truncate\"},[_vm._v(\" \"+_vm._s(_vm.title)+\" \")])]),_c('div',{staticClass:\"c-modal__body d-block\"},[_vm._t(\"body\")],2),(_vm.showFooter)?_c('div',{staticClass:\"c-modal__footer mt-4\"},[_vm._t(\"footer\")],2):_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\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\n\r\n@Component\r\nexport default class Modal extends Vue {\r\n @Prop({ required: true }) private id!: string;\r\n @Prop({ required: true }) private title!: string;\r\n @Prop({ required: false, default: () => false })\r\n private isLarge!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n private isExtraLarge!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n private showFooter!: boolean;\r\n @Prop({ required: false, default: () => true })\r\n private closeableByOutsideClickAndEscKey!: boolean;\r\n @Prop({ required: false, default: () => true })\r\n private closeButton!: boolean;\r\n\r\n public showModal(): void {\r\n this.dispathWindowEventForModal(true);\r\n }\r\n\r\n public hideModal(): void {\r\n this.dispathWindowEventForModal(false);\r\n }\r\n\r\n private onCloseClick() {\r\n this.hideModal();\r\n this.$emit('close');\r\n }\r\n\r\n private dispathWindowEventForModal(openNotClose: boolean) {\r\n const eventType = openNotClose ? 'openUnityModal' : 'closeUnityModal';\r\n const event = new CustomEvent(eventType, {\r\n detail: { targetModal: '#' + this.id },\r\n });\r\n document.dispatchEvent(event);\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-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--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-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=7c8f0cea&\"\nimport script from \"./Modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./Modal.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Treeselect',{staticClass:\"tree-select mb-0\",attrs:{\"options\":_vm.options,\"placeholder\":_vm.placeholder,\"appendToBody\":\"\",\"multiple\":_vm.multiple,\"required\":_vm.required,\"disabled\":_vm.disabled,\"clear-on-select\":\"\",\"clearable\":_vm.clearable,\"show-count\":\"\",\"showCountOf\":_vm.showCountOf,\"disableBranchNodes\":!_vm.multiple,\"value-consists-of\":_vm.valueConsistsOf,\"beforeClearAll\":_vm.beforeClearAll},on:{\"select\":_vm.onSelect,\"close\":_vm.onClose},model:{value:(_vm.theValue),callback:function ($$v) {_vm.theValue=$$v},expression:\"theValue\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\r\n\r\nexport interface TreeSelectNode {\r\n id: number | string;\r\n label: string;\r\n children?: TreeSelectNode[] | null;\r\n isDisabled?: boolean;\r\n isNew?: boolean;\r\n isDefaultExpanded?: boolean;\r\n}\r\n\r\nexport enum TreeSelectValueConsistsOf {\r\n All = 'ALL',\r\n BranchPriority = 'BRANCH_PRIORITY',\r\n LeafPriority = 'LEAF_PRIORITY',\r\n AllWithIndeterminate = 'ALL_WITH_INDETERMINATE',\r\n}\r\n\r\nexport enum TreeSelectShowCountOf {\r\n AllChildren = 'ALL_CHILDREN',\r\n AllDescendants = 'ALL_DESCENDANTS',\r\n LeafChildren = 'LEAF_CHILDREN',\r\n LeafDescendants = 'LEAF_DESCENDANTS',\r\n}\r\n\r\n@Component\r\nexport default class TreeSelect extends Vue {\r\n @Prop({ required: true }) private value!: number[] | string[];\r\n @Prop({ required: false, default: () => [] })\r\n private options!: TreeSelectNode[];\r\n @Prop({ required: false, default: () => false })\r\n private clearable!: boolean;\r\n @Prop({ required: false }) private placeholder!: string;\r\n @Prop({\r\n required: false,\r\n default: () => TreeSelectValueConsistsOf.LeafPriority,\r\n })\r\n private valueConsistsOf!: TreeSelectValueConsistsOf;\r\n @Prop({ required: false, default: () => true })\r\n private multiple!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n private required!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n private disabled!: boolean;\r\n\r\n private showCountOf: TreeSelectShowCountOf =\r\n TreeSelectShowCountOf.LeafDescendants;\r\n\r\n private theValue: (number | string)[] = [];\r\n\r\n private created(): void {\r\n this.theValue = this.value;\r\n }\r\n\r\n @Watch('value', { immediate: false, deep: true })\r\n private onValueChange(val: (number | string)[]) {\r\n this.theValue = val;\r\n }\r\n\r\n @Watch('theValue', { immediate: false, deep: true })\r\n private onTheValueChange(val: number[] | string[]) {\r\n if (val !== this.value) {\r\n this.$emit('input', val);\r\n }\r\n }\r\n\r\n private beforeClearAll(): () => boolean {\r\n this.doSelect([]);\r\n return () => {\r\n return true;\r\n };\r\n }\r\n\r\n private onSelect(node: TreeSelectNode) {\r\n if (!this.multiple) {\r\n this.doSelect([node.id]);\r\n }\r\n }\r\n\r\n private onClose(val: (number | string)[]) {\r\n if (this.multiple) {\r\n this.doSelect(val);\r\n }\r\n }\r\n\r\n private doSelect(val: (number | string)[]) {\r\n this.$emit('select', val);\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TreeSelect.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TreeSelect.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./TreeSelect.vue?vue&type=template&id=0f745dcc&\"\nimport script from \"./TreeSelect.vue?vue&type=script&lang=ts&\"\nexport * from \"./TreeSelect.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheFeedbackButtonAndModal.vue?vue&type=style&index=0&id=3e395b91&scoped=true&lang=scss&\"","export const DateFormats = {\r\n dateFormat: 'DD/MM/YYYY',\r\n dateWithTimeFormat: 'DD/MM/YYYY HH:mm',\r\n dateWithFullTimeFormat: 'DD/MM/YYYY HH:mm:ss',\r\n urlDateFormat: 'YYYY-MM-DD',\r\n dayAndShortMonthAndTime: 'D MMM h:mm',\r\n dayAndShortMonth: 'D MMM',\r\n dayAndShortMonthAndYear: 'D MMM YYYY',\r\n day: 'D',\r\n dayWithOrdinal: 'Do',\r\n dateRangeDay: 'D',\r\n dateRangeDayAndMonth: 'D MMMM',\r\n dateRangeDayMonthAndYear: 'D MMM YYYY',\r\n shortMonthAndDay: 'MMM D',\r\n yearAndMonthFormat: 'MMMM YYYY',\r\n fileNameDateFormat: 'YYYY-MM-DD HHmmss',\r\n};\r\n\r\nexport const Colors = {\r\n blue: '#64c5d9',\r\n blue50: '#b1e2ec',\r\n blue20: '#e0f3f7',\r\n limeGreen: '#acc84e',\r\n limeGreen50: '#d5e3a6',\r\n limeGreen20: '#e8f0d0',\r\n red: '#e4624a',\r\n red50: '#f1b0a4',\r\n red20: '#fae0db',\r\n yellow: '#ffeb46',\r\n yellow50: '#fff5a2',\r\n yellow20: '#fffbda',\r\n sodraGreen: '#00854a',\r\n sodraGreen50: '#7fc2a4',\r\n sodraGreen20: '#cce7db',\r\n sodraBlack: '#0d171a',\r\n sodraBlack10: '#e2e2e2',\r\n sodraBlack20: '#cfd1d1',\r\n backgroundColorLightGrey: '#edf1f2',\r\n white: '#fff',\r\n};\r\n\r\nexport const UnsupportedBrowsers = {\r\n ie: 'ie',\r\n};\r\n","import { FeatureFlagNames } from '@/models/FeatureFlagNames';\r\nimport { PermissionType } from '@/models/UserProfile/PermissionType';\r\nimport { Roles } from '@/models/UserProfile/Roles';\r\n\r\nexport interface AuthRequirements {\r\n requiresAuth: boolean;\r\n permission: PermissionType | null;\r\n role: string | null;\r\n featureFlag: FeatureFlagNames | null;\r\n requiresSmiCustomer?: boolean;\r\n requiresNonSmiCustomer?: boolean;\r\n}\r\n\r\nexport const authRequirementsForQData: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewQualityData,\r\n role: null,\r\n featureFlag: FeatureFlagNames.QData,\r\n};\r\nexport const authRequirementsForDashboard: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: null,\r\n role: null,\r\n featureFlag: null,\r\n};\r\nexport const authRequirementsForOrderFlow: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewOrders,\r\n role: null,\r\n featureFlag: FeatureFlagNames.Orders,\r\n};\r\nexport const authRequirementsForForecasts: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewForecasts,\r\n role: null,\r\n featureFlag: FeatureFlagNames.Forecasts,\r\n requiresNonSmiCustomer: true,\r\n};\r\nexport const authRequirementsForInvoices: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewInvoices,\r\n role: null,\r\n featureFlag: FeatureFlagNames.Invoices,\r\n};\r\nexport const authRequirementsForCreditLimits: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewCreditLimits,\r\n role: null,\r\n featureFlag: FeatureFlagNames.CreditLimits,\r\n};\r\nexport const authRequirementsForPerformanceInvoicedVolumes: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: null,\r\n role: null,\r\n featureFlag: FeatureFlagNames.Performance,\r\n};\r\nexport const authRequirementsForPerformanceContractPerformance: AuthRequirements =\r\n {\r\n requiresAuth: true,\r\n permission: null,\r\n role: null,\r\n featureFlag: FeatureFlagNames.Performance,\r\n };\r\nexport const authRequirementsForSustainability: AuthRequirements = {\r\n requiresAuth: false,\r\n permission: null,\r\n role: null,\r\n featureFlag: FeatureFlagNames.Sustainability,\r\n};\r\nexport const authRequirementsForSustainabilityCertifiedVolumes: AuthRequirements =\r\n {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewCertifiedVolumes,\r\n role: null,\r\n featureFlag: FeatureFlagNames.Sustainability,\r\n };\r\nexport const authRequirementsForUserContacts: AuthRequirements = {\r\n requiresAuth: false,\r\n permission: null,\r\n role: null,\r\n featureFlag: FeatureFlagNames.UserContacts,\r\n};\r\nexport const authRequirementsForDocuments: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: null,\r\n role: null,\r\n featureFlag: FeatureFlagNames.Documents,\r\n};\r\nexport const authRequirementsForSubscriptions: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewSubscriptions,\r\n role: null,\r\n featureFlag: FeatureFlagNames.Subscriptions,\r\n};\r\nexport const authRequirementsForImpersonation: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: null,\r\n role: Roles.IsImpersonationUser,\r\n featureFlag: FeatureFlagNames.Impersonations,\r\n};\r\nexport const authRequirementsForAdminUsers: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewUsers,\r\n role: null,\r\n featureFlag: FeatureFlagNames.AdminUsers,\r\n};\r\nexport const authRequirementsForAdminUserCustomers: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToEditUserCustomers,\r\n role: null,\r\n featureFlag: FeatureFlagNames.AdminUsers,\r\n};\r\nexport const authRequirementsForAdminUserPermissions: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToEditUserPermissions,\r\n role: null,\r\n featureFlag: FeatureFlagNames.AdminUsers,\r\n};\r\nexport const authRequirementsForAdminParameters: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewAdminParameters,\r\n role: Roles.IsAdminUser,\r\n featureFlag: FeatureFlagNames.AdminParameters,\r\n};\r\n\r\nexport const authRequirementsForAdminSubscriptions: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewAdminSubscriptions,\r\n role: Roles.IsAdminUser,\r\n featureFlag: FeatureFlagNames.AdminSubscriptions,\r\n};\r\n\r\nexport const authRequirementsForAdminSustainability: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToEditSustainabilityData,\r\n role: Roles.IsAdminUser,\r\n featureFlag: FeatureFlagNames.AdminSustainability,\r\n};\r\n\r\nexport const authRequirementsForSmiForecasts: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewSmiForecasts,\r\n role: null,\r\n featureFlag: FeatureFlagNames.SmiForecasts,\r\n requiresSmiCustomer: true,\r\n};\r\nexport const authRequirementsForSmiConsumptionLog: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewSmiConsumptions,\r\n role: null,\r\n featureFlag: FeatureFlagNames.SmiConsumptions,\r\n requiresSmiCustomer: true,\r\n};\r\nexport const authRequirementsForSmiMyWarehouse: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewSmiWarehouse,\r\n role: null,\r\n featureFlag: FeatureFlagNames.SmiWarehouse,\r\n requiresSmiCustomer: true,\r\n};\r\nexport const authRequirementsForSmiMyConsumptions: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewSmiConsumptions,\r\n role: null,\r\n featureFlag: FeatureFlagNames.SmiConsumptions,\r\n requiresSmiCustomer: true,\r\n};\r\nexport const authRequirementsForSmiStockDeviations: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewSmiWarehouse,\r\n role: null,\r\n featureFlag: FeatureFlagNames.SmiWarehouse,\r\n requiresSmiCustomer: true,\r\n};\r\nexport const authRequirementsForSmiAdminWarehouses: AuthRequirements = {\r\n requiresAuth: true,\r\n permission: PermissionType.IsAllowedToViewSmiWarehouses,\r\n role: Roles.IsAdminUser,\r\n featureFlag: FeatureFlagNames.SmiAdminWarehouses,\r\n requiresSmiCustomer: false,\r\n};\r\n","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&id=10d86d49&scoped=true&lang=scss&\"","import Vue from 'vue';\r\nimport VueRouter, { Location } from 'vue-router';\r\nimport { authModule } from '../store/modules/auth';\r\nimport { userProfileModule } from '../store/modules/userProfile';\r\nimport { Consoler } from '../utils/Consoler';\r\nimport { Permissions, ValidationError } from '../utils/Permissions';\r\nimport { loadingModule } from '../store/modules/loading';\r\nimport i18n from '../i18n/i18n';\r\nimport { ErrorType } from '@/models/ErrorType';\r\nimport { featureFlagsModule } from '../store/modules/featureFlags';\r\nimport {\r\n routes,\r\n routeNameAuthentication,\r\n routeNameHome,\r\n routeNameNotFoundAndError,\r\n routeNameDashboard,\r\n routeNameLoginRedirect,\r\n} from './routes';\r\nimport {\r\n AuthRequirements,\r\n authRequirementsForImpersonation,\r\n} from './authRequirements';\r\nimport {\r\n addDocumentTitleToRouteMeta,\r\n addProgrammaticRoutingParamToRoute,\r\n createLocationFromRoute,\r\n getDocumentTitleFromRouteMeta,\r\n getFullUrlForRoute,\r\n getLoggingNameForRoute,\r\n getNotFoundOrErrorLocation,\r\n getRouteTrackingInfo,\r\n hasProgrammaticRoutingParam,\r\n} from './functions';\r\nimport { Roles } from '@/models/UserProfile/Roles';\r\nimport telemetryService from '@/services/TelemetryService';\r\nimport { getDocumentTitle } from '@/utils/RoutingGeneral';\r\nimport { EventBus } from '@/utils/EventBus';\r\nimport { Config } from '@/utils/Config';\r\nimport { CustomerSelectionOptions } from '@/models/CustomerSelectionOptions';\r\n\r\nVue.use(VueRouter);\r\n\r\nconst router = new VueRouter({\r\n mode: 'history',\r\n linkExactActiveClass: 'active',\r\n linkActiveClass: 'open',\r\n routes: routes,\r\n});\r\n\r\nrouter.beforeEach(async (to, from, next) => {\r\n if (!hasProgrammaticRoutingParam(to)) {\r\n // Console grouping (end any earlier)\r\n Consoler.debugGroupEnd();\r\n\r\n Consoler.debugLog('Routing to:', getFullUrlForRoute(to), to);\r\n\r\n // Check if last route tracking has stopped, otherwise log it\r\n if (telemetryService.trackingPageName !== null) {\r\n Consoler.debugWarn(\r\n `Tracking of page '${telemetryService.trackingPageName}' has not been stopped before navigating to a new one. Either a stop of the tracking is missing for this page or a navigation was done before the last tracking completed.`\r\n );\r\n }\r\n\r\n // Get document title and add it to route meta, to use in telemetry and as document title later on\r\n addDocumentTitleToRouteMeta(to, getDocumentTitle(to));\r\n\r\n // Console grouping (begin a new)\r\n Consoler.debugGroup(getLoggingNameForRoute(to));\r\n\r\n // Start tracking page\r\n telemetryService.startTrackPage(getRouteTrackingInfo(to));\r\n } else {\r\n Consoler.debugLog('Programmatic routing to url:', getFullUrlForRoute(to));\r\n }\r\n\r\n const routeAuthRequirements = to.meta?.authRequirements\r\n ? (to.meta.authRequirements as AuthRequirements)\r\n : undefined;\r\n\r\n if (to.name === routeNameAuthentication) {\r\n Consoler.debugLog('Authentication route, letting through.');\r\n telemetryService.clearAuthenticatedUser();\r\n next();\r\n return;\r\n }\r\n\r\n // Make sure auth is initialized\r\n if (!authModule.isInitialized) {\r\n Consoler.debugLog('Initializing auth module.', to);\r\n let authInitializationFailed = false;\r\n await authModule.dispatchInitialize().catch((error) => {\r\n // If something failed initializing auth, and not already going to error route, goto error route\r\n Consoler.debugLog('Something went wrong initializing auth.', error, to);\r\n if (to.name !== routeNameNotFoundAndError) {\r\n telemetryService.stopTrackPage(getRouteTrackingInfo(to), {\r\n skipPageView: true,\r\n });\r\n next(getNotFoundOrErrorLocation(to, ErrorType.GeneralError));\r\n } else {\r\n next();\r\n }\r\n authInitializationFailed = true;\r\n });\r\n\r\n if (authInitializationFailed) {\r\n telemetryService.trackException(\r\n new Error('Something went wrong initializing auth.')\r\n );\r\n return;\r\n }\r\n }\r\n\r\n const isLoginRedirectRoute = to.name === routeNameLoginRedirect;\r\n const routeRequiresAuth =\r\n routeAuthRequirements && routeAuthRequirements.requiresAuth;\r\n\r\n if (to.name === routeNameLoginRedirect && authModule.isAuthenticated) {\r\n Consoler.debugLog(\r\n 'Redirect to login route, but already logged in so going to start page.'\r\n );\r\n next('/');\r\n return;\r\n } else if (\r\n isLoginRedirectRoute ||\r\n (routeRequiresAuth && !authModule.isAuthenticated)\r\n ) {\r\n // If route requires auth or is login redirect route and not authenticated, redirect to login\r\n if (routeRequiresAuth) {\r\n Consoler.debugLog(\r\n 'Route needs auth and is not authenticated, triggering login.',\r\n to\r\n );\r\n }\r\n let redirectedToLogin = false;\r\n await authModule\r\n .dispatchLogin(!isLoginRedirectRoute ? to : undefined)\r\n .then((doContinue) => {\r\n if (!doContinue) {\r\n redirectedToLogin = true;\r\n }\r\n });\r\n\r\n if (redirectedToLogin) {\r\n return;\r\n } else if (isLoginRedirectRoute) {\r\n next('/');\r\n return;\r\n }\r\n }\r\n\r\n // Load feature flags\r\n const loadingFeatureFlags = await loadingModule.dispatchAdd();\r\n let errorLoadingFeatureFlags = false;\r\n await featureFlagsModule\r\n .dispatchLoad()\r\n .catch(() => {\r\n // If failed loading feature flags, but not already going to error route, goto error route\r\n if (to.name !== routeNameNotFoundAndError) {\r\n Consoler.debugLog(\r\n 'Something went wrong loading feature flags, going to error route.',\r\n to\r\n );\r\n telemetryService.stopTrackPage(getRouteTrackingInfo(to), {\r\n skipPageView: true,\r\n });\r\n next(getNotFoundOrErrorLocation(to, ErrorType.GeneralError));\r\n } else {\r\n next();\r\n }\r\n errorLoadingFeatureFlags = true;\r\n })\r\n .finally(() => {\r\n loadingModule.commitComplete(loadingFeatureFlags);\r\n });\r\n\r\n if (errorLoadingFeatureFlags) {\r\n telemetryService.trackException(\r\n new Error('Something went wrong loading feature flags.')\r\n );\r\n return;\r\n }\r\n\r\n // If authenticated, load user profile\r\n if (authModule.isAuthenticated) {\r\n const loadingUserProfile = await loadingModule.dispatchAdd(\r\n i18n.t('loading.userProfile').toString()\r\n );\r\n let userProfileLoadFailed = false;\r\n await userProfileModule\r\n .dispatchLoad()\r\n .then(() => {\r\n if (userProfileModule.data !== null) {\r\n telemetryService.setAuthenticatedUser(\r\n userProfileModule.data.userProfile.isImpersonated\r\n ? userProfileModule.data.userProfile.impersonatingUser!.azureAdId\r\n : userProfileModule.data.userProfile.azureAdId\r\n );\r\n } else {\r\n // Should never happen\r\n telemetryService.clearAuthenticatedUser();\r\n }\r\n })\r\n .catch(() => {\r\n // If failed loading profile, but not already going to error route, goto error route\r\n if (to.name !== routeNameNotFoundAndError) {\r\n Consoler.debugLog(\r\n 'Something went wrong loading user profile, going to error route.',\r\n to\r\n );\r\n telemetryService.stopTrackPage(getRouteTrackingInfo(to), {\r\n skipPageView: true,\r\n });\r\n next(getNotFoundOrErrorLocation(to, ErrorType.GeneralError));\r\n } else {\r\n next();\r\n }\r\n userProfileLoadFailed = true;\r\n })\r\n .finally(() => {\r\n loadingModule.commitComplete(loadingUserProfile);\r\n });\r\n\r\n if (userProfileLoadFailed) {\r\n telemetryService.trackException(\r\n new Error('Something went wrong loading user profile.')\r\n );\r\n return;\r\n }\r\n } else {\r\n telemetryService.clearAuthenticatedUser();\r\n }\r\n\r\n // If error route, let it through\r\n if (to.name === routeNameNotFoundAndError) {\r\n Consoler.debugLog('Going to not found/error page.');\r\n next();\r\n return;\r\n }\r\n\r\n // Keep customers query if applicable\r\n if (\r\n to.name !== from.name &&\r\n to.meta?.hasCustomersQuery &&\r\n to.meta.hasCustomersQuery === true &&\r\n !to.query.customers &&\r\n from.query.customers\r\n ) {\r\n to.query.customers = from.query.customers;\r\n next(createLocationFromRoute(addProgrammaticRoutingParamToRoute(to)));\r\n return;\r\n }\r\n\r\n // Keep warehouse query if applicable\r\n if (\r\n to.name !== from.name &&\r\n to.meta?.hasWarehouseQuery &&\r\n to.meta.hasWarehouseQuery === true &&\r\n !to.query.warehouse &&\r\n from.query.warehouse\r\n ) {\r\n to.query.warehouse = from.query.warehouse;\r\n next(createLocationFromRoute(addProgrammaticRoutingParamToRoute(to)));\r\n return;\r\n }\r\n\r\n // If authenticated\r\n if (authModule.isAuthenticated) {\r\n let location: Location | undefined = undefined;\r\n\r\n // If having no selected customer...\r\n if (userProfileModule.selectedCustomer === null) {\r\n // ... but has admin role and requesting an view that doesn't require a selected customer for admins, do nothing (permission check will be done later on here)\r\n if (\r\n Permissions.hasRole(Roles.IsAdminUser) &&\r\n to.meta?.accessibleByAdminsWithoutCustomers === true\r\n ) {\r\n // Do nothing\r\n }\r\n // ... or having customers...\r\n else if (\r\n userProfileModule.data !== null &&\r\n userProfileModule.data.userProfile &&\r\n userProfileModule.data.userProfile.customers !== undefined &&\r\n userProfileModule.data.userProfile.customers.length > 0\r\n ) {\r\n // ... and is going to a route where a selected customer isn't needed, do nothing\r\n if (to.meta?.accessibleWithoutSelectedCustomer === true) {\r\n // Do nothing\r\n } else {\r\n // ... otherwise show customer selection\r\n Consoler.debugLog(\r\n 'No selected customer, but there are customers, so going to error page showing customer selection.',\r\n to,\r\n from\r\n );\r\n\r\n const options: CustomerSelectionOptions = {\r\n onSelectionGoTo: to,\r\n notCloseable: from.name === null || from.name === undefined,\r\n };\r\n EventBus.$emit(Config.ShowCustomerSelectionModalEvent, options);\r\n telemetryService.stopTrackPage(getRouteTrackingInfo(to), {\r\n skipPageView: true,\r\n });\r\n return;\r\n }\r\n\r\n // ... or has impersonation permission, show impersonation\r\n } else if (\r\n Permissions.validate(\r\n authRequirementsForImpersonation,\r\n userProfileModule.data?.userProfile.customers\r\n ).valid\r\n ) {\r\n Consoler.debugLog(\r\n 'No selected customer, and no customers, but have impersonation permission so going to error page showing impersonation selection.',\r\n to\r\n );\r\n location = getNotFoundOrErrorLocation(\r\n to,\r\n ErrorType.ImpersonationNeeded\r\n );\r\n } else {\r\n // ... if no customers and no impersonation permission, show customer error\r\n Consoler.debugLog(\r\n 'No selected customer, no customers, and no impersonation permission - going to error page showing customer error.',\r\n to\r\n );\r\n location = getNotFoundOrErrorLocation(to, ErrorType.CustomerError);\r\n }\r\n\r\n if (location) {\r\n telemetryService.stopTrackPage(getRouteTrackingInfo(to), {\r\n skipPageView: true,\r\n });\r\n next(location);\r\n return;\r\n }\r\n }\r\n\r\n // If home page, and authenticated - goto Dashboard page\r\n if (to.name === routeNameHome && authModule.isAuthenticated) {\r\n telemetryService.stopTrackPage(getRouteTrackingInfo(to), {\r\n skipPageView: true,\r\n });\r\n next({ name: routeNameDashboard });\r\n return;\r\n }\r\n }\r\n\r\n if (routeAuthRequirements) {\r\n const validation = Permissions.validate(\r\n routeAuthRequirements,\r\n userProfileModule.data?.userProfile.customers\r\n );\r\n\r\n switch (validation.error) {\r\n case ValidationError.MissingFeatureFlag:\r\n Consoler.debugWarn(\r\n 'Feature flag is not enabled for this route, going to not found route.',\r\n to\r\n );\r\n telemetryService.stopTrackPage(getRouteTrackingInfo(to), {\r\n skipPageView: true,\r\n });\r\n next(\r\n getNotFoundOrErrorLocation(\r\n to,\r\n ErrorType.NotFound,\r\n i18n.t('generalError.featureFlagDisabled.header').toString(),\r\n i18n.t('generalError.featureFlagDisabled.message').toString()\r\n )\r\n );\r\n return;\r\n\r\n case ValidationError.NotAuthenticated:\r\n case ValidationError.NotAuthorizedMissingPermission:\r\n case ValidationError.NotAuthorizedMissingRole:\r\n Consoler.debugWarn(\r\n 'User does not have permission to go to route, going to not found route.',\r\n to\r\n );\r\n telemetryService.stopTrackPage(getRouteTrackingInfo(to), {\r\n skipPageView: true,\r\n });\r\n next(getNotFoundOrErrorLocation(to, ErrorType.NotFound));\r\n return;\r\n\r\n case ValidationError.HasNoSmiCustomer:\r\n Consoler.debugLog(\r\n 'Does not have any smi customers, so going to not found route.',\r\n to\r\n );\r\n telemetryService.stopTrackPage(getRouteTrackingInfo(to), {\r\n skipPageView: true,\r\n });\r\n next(getNotFoundOrErrorLocation(to, ErrorType.NotFound));\r\n return;\r\n\r\n case ValidationError.HasNoNonSmiCustomer:\r\n Consoler.debugLog(\r\n 'Does not have any non smi customers, so going to not found route.',\r\n to\r\n );\r\n telemetryService.stopTrackPage(getRouteTrackingInfo(to), {\r\n skipPageView: true,\r\n });\r\n next(getNotFoundOrErrorLocation(to, ErrorType.NotFound));\r\n return;\r\n }\r\n }\r\n\r\n // All checks done, continue to route\r\n next();\r\n});\r\n\r\nrouter.afterEach((route) => {\r\n // Update page title.\r\n Vue.nextTick(() => {\r\n document.title = getDocumentTitleFromRouteMeta(route);\r\n });\r\n});\r\n\r\nexport default router;\r\n","export enum ErrorType {\r\n NotFound = 'NotFound',\r\n GeneralError = 'GeneralError',\r\n CustomerError = 'CustomerError',\r\n ImpersonationNeeded = 'ImpersonationNeeded',\r\n}\r\n","import Vue from 'vue';\r\nimport { Config } from './Config';\r\n\r\nclass ConsoleHelperDefinition extends Vue {\r\n private get fullConsole(): boolean {\r\n return Config.Settings !== null && Config.Settings.FullConsole === 'true';\r\n }\r\n\r\n /* eslint-disable no-console */\r\n public log(message?: any, ...optionalParams: any[]) {\r\n if (console && console.log) {\r\n console.log(message, ...optionalParams);\r\n }\r\n }\r\n\r\n public warn(message?: any, ...optionalParams: any[]) {\r\n if (console && console.warn) {\r\n console.warn(message, ...optionalParams);\r\n }\r\n }\r\n\r\n public debugLog(message?: any, ...optionalParams: any[]) {\r\n if (this.fullConsole && console && console.log) {\r\n console.log(message, ...optionalParams);\r\n }\r\n }\r\n\r\n public debugWarn(message?: any, ...optionalParams: any[]) {\r\n if (this.fullConsole && console && console.warn) {\r\n console.warn(message, ...optionalParams);\r\n }\r\n }\r\n\r\n public debugGroup(name?: string, ...optionalParams: any[]) {\r\n if (this.fullConsole && console && console.group) {\r\n console.group(name, ...optionalParams);\r\n }\r\n }\r\n\r\n public debugGroupEnd() {\r\n if (this.fullConsole && console && console.groupEnd) {\r\n console.groupEnd();\r\n }\r\n }\r\n /* eslint-enable no-console */\r\n}\r\n\r\nexport const Consoler = new ConsoleHelperDefinition();\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"application u-sans-serif\",class:{ 'is-impersonated': _vm.isImpersonated }},[_c('TheImpersonationBar',{staticClass:\"impersonation-bar-height\"}),_c('PageHeader',{staticClass:\"app-header\",class:{ 'impersonated-header-present': _vm.isImpersonated },attrs:{\"logo\":_vm.logo}}),_c('Sidebar'),(_vm.isLoading)?_c('div',{staticClass:\"o-loader o-loader--fullscreen\"},[_c('div',{staticClass:\"mt-5\"},[_vm._v(\" \"+_vm._s(_vm.loadingText)+\" \")])]):_vm._e(),_c('router-view'),_c('PageFooter',{staticClass:\"app-footer\"}),_c('TheFeedbackButtonAndModal',{ref:\"feedbackModal\"}),_c('TheImpersonationModal',{ref:\"impersonationModal\"}),_c('TheCustomerSelectionModal',{ref:\"customerSelectionModal\"})],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('header',{staticClass:\"c-compact-header\"},[_c('div',{staticClass:\"container-fluid\"},[_c('div',{staticClass:\"c-compact-header__content c-compact-header__content--left\"},[_c('a',{staticClass:\"c-compact-header__logo-link\",attrs:{\"href\":\"/\"}},[_c('img',{staticClass:\"c-compact-header__logo-image\",attrs:{\"src\":_vm.logo,\"alt\":\"Södra\"}})])]),_c('div',{staticClass:\"c-compact-header__content c-compact-header__content--right\"},[_c('a',{staticClass:\"o-button o-button--small o-button--light-grey u-float-left mr-3 d-none d-sm-inline-flex\",attrs:{\"href\":\"https://www.sodra.com\"}},[_vm._v(_vm._s(_vm.$t('header.to_sodra')))]),_c('router-link',{staticClass:\"c-compact-header__button u-float-left mr-3\",attrs:{\"to\":'/'}},[_c('i',{staticClass:\"c-compact-header__button-icon material-icons\"},[_vm._v(\"home\")])]),_c('div',{staticClass:\"header-slot\",attrs:{\"id\":\"headerSlot\"}}),_vm._m(0)],1)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"c-compact-header__button c-compact-header__button--yellow js-toggle-open\",attrs:{\"data-element-id\":\"sidebar\"}},[_c('i',{staticClass:\"c-compact-header__button-icon material-icons\"},[_vm._v(\"menu\")])])}]\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\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\n\r\n@Component\r\nexport default class PageHeader extends Vue {\r\n @Prop({ required: true })\r\n public logo!: string;\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-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--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-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=43ea6e2d&\"\nimport script from \"./PageHeader.vue?vue&type=script&lang=ts&\"\nexport * from \"./PageHeader.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-sidebar-container c-sidebar-container--right\",attrs:{\"data-element-id\":\"sidebar\"}},[_c('div',{staticClass:\"c-sidebar c-sidebar--yellow\"},[_c('div',{staticClass:\"c-sidebar__header\"},[_c('span',{staticClass:\"c-sidebar__header-label\"},[_vm._v(\" \"+_vm._s(_vm.$t('sidebar.header'))+\" \")]),_vm._m(0)]),_c('nav',{staticClass:\"c-sidebar-nav c-sidebar-nav--yellow\"},[_c('ul',_vm._l((_vm.menuItems),function(menuItem,index){return _c('MenuItem',{key:index,class:{ 'is-open': _vm.isOnPath(menuItem.routeName) },attrs:{\"item\":menuItem}})}),1)]),(_vm.isAuthenticated && _vm.isImpersonated)?[_c('div',{staticClass:\"c-sidebar__content mt-3 pb-0\"},[_c('h3',{staticClass:\"t-heading-4\"},[_vm._v(\" \"+_vm._s(_vm.$t('sidebar.logged_in_as'))+\" \")]),_c('ContactCard',{staticClass:\"px-0 pt-1\",attrs:{\"contact\":_vm.loggedInUser,\"useFallbackImage\":true,\"fallbackImageGrey\":true}})],1)]:_vm._e(),(_vm.isAuthenticated)?[_c('div',{staticClass:\"c-sidebar__content mt-3 pb-0\"},[_c('h3',{staticClass:\"t-heading-4\"},[(_vm.isImpersonated)?[_vm._v(_vm._s(_vm.$t('sidebar.impersonated_as')))]:[_vm._v(_vm._s(_vm.$t('sidebar.logged_in_as')))]],2),_c('ContactCard',{staticClass:\"px-0 pt-1\",attrs:{\"contact\":_vm.isImpersonated ? _vm.profileUser : _vm.loggedInUser,\"useFallbackImage\":true},scopedSlots:_vm._u([(_vm.hasMultipleCustomers)?{key:\"right\",fn:function(){return [_c('button',{staticClass:\"o-button o-button--black o-button--small js-toggle-open nowrap ml-2 px-3\",attrs:{\"type\":\"button\",\"data-element-id\":\"sidebar\"},on:{\"click\":function($event){$event.preventDefault();return _vm.changeCustomer.apply(null, arguments)}}},[_vm._v(\" \"+_vm._s(_vm.$t('sidebar.changeCustomer'))+\" \")])]},proxy:true}:null],null,true)})],1)]:_vm._e(),_c('div',{staticClass:\"mt-3\"},[(_vm.isAuthenticated)?_c('ul',{staticClass:\"u-no-padding c-sidebar__actions\"},[_c('li',{staticClass:\"my-2\"},[_c('a',{staticClass:\"o-text-link o-text-link--black js-toggle-open\",attrs:{\"href\":\"\",\"data-element-id\":\"sidebar\"},on:{\"click\":function($event){$event.preventDefault();return _vm.feedback.apply(null, arguments)}}},[_c('i',{staticClass:\"material-icons\"},[_vm._v(\"feedback\")]),_vm._v(\" \"+_vm._s(_vm.$t('sidebar.feedback'))+\" \")])]),(_vm.canImpersonate)?_c('li',{staticClass:\"my-2\"},[_c('a',{staticClass:\"o-text-link o-text-link--black js-toggle-open\",attrs:{\"href\":\"\",\"data-element-id\":\"sidebar\"},on:{\"click\":function($event){$event.preventDefault();return _vm.impersonation.apply(null, arguments)}}},[_c('i',{staticClass:\"material-icons\"},[_vm._v(\"supervisor_account\")]),_vm._v(\" \"+_vm._s(_vm.$t('sidebar.impersonation'))+\" \")])]):_vm._e(),_c('li',{staticClass:\"my-2\"},[_c('a',{staticClass:\"o-text-link o-text-link--black c-sidebar__actions--uppercase js-toggle-open\",attrs:{\"href\":\"\",\"data-element-id\":\"sidebar\"},on:{\"click\":function($event){$event.preventDefault();return _vm.logout.apply(null, arguments)}}},[_c('i',{staticClass:\"material-icons\"},[_vm._v(\"exit_to_app\")]),_vm._v(\" \"+_vm._s(_vm.$t('sidebar.logout'))+\" \")])])]):[_c('button',{staticClass:\"o-button o-button--lime-green u-full-width u-center-text js-toggle-open\",attrs:{\"data-element-id\":\"sidebar\"},on:{\"click\":function($event){return _vm.login()}}},[_vm._v(\" \"+_vm._s(_vm.$t('sidebar.login'))+\" \"),_c('i',{staticClass:\"material-icons\"},[_vm._v(\"arrow_forward\")])])]],2)],2)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"js-toggle-open u-float-right\",attrs:{\"data-element-id\":\"sidebar\"}},[_c('i',{staticClass:\"material-icons c-sidebar__header-icon\"},[_vm._v(\"close\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{staticClass:\"c-sidebar-nav__item\",class:{ 'is-open': _vm.isOnPath(_vm.item.routeName) }},[(_vm.hasSubItems)?[_c('span',{staticClass:\"c-sidebar-nav__link\",attrs:{\"data-element-id\":\"sidebar\"}},[(_vm.item.icon)?_c('span',{class:(\"mdi u-color-sodra-black mdi--24 mdi-\" + (_vm.item.icon) + \" mr-2\")}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.item.title)+\" \"),(_vm.item.newFeature)?_c('div',{staticClass:\"c-sidebar-nav__label border-radius u-background-color-blue u-color-white position-if-sub-menu\"},[_vm._v(\" \"+_vm._s(_vm.$t('menuItem.newLabel'))+\" \")]):_vm._e()]),_vm._m(0),_c('ul',{staticClass:\"c-sidebar-nav__submenu\"},_vm._l((_vm.item.subItems),function(subItem,index){return _c('MenuItem',{key:index,attrs:{\"item\":subItem}})}),1)]:_c('router-link',{staticClass:\"c-sidebar-nav__link js-toggle-open\",attrs:{\"to\":{ name: _vm.item.routeName },\"data-element-id\":\"sidebar\"}},[(_vm.item.icon)?_c('span',{class:(\"mdi u-color-sodra-black mdi--24 mdi-\" + (_vm.item.icon) + \" mr-2\")}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.item.title)+\" \"),(_vm.item.newFeature)?_c('span',{staticClass:\"o-chip border-radius u-background-color-blue u-color-white\"},[_vm._v(\" \"+_vm._s(_vm.$t('menuItem.newLabel')))]):_vm._e()])],2)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"c-sidebar-nav__open-submenu\"},[_c('i',{staticClass:\"material-icons\"})])}]\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\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport { AuthRequirements } from '@/router/authRequirements';\r\n\r\nexport interface MenuItemModel {\r\n title: string;\r\n icon: string;\r\n authRequirements?: AuthRequirements;\r\n routeName?: string;\r\n newFeature: boolean;\r\n subItems?: MenuItemModel[];\r\n}\r\n\r\n@Component({\r\n name: 'MenuItem',\r\n})\r\nexport default class MenuItem extends Vue {\r\n @Prop({ required: true }) private item!: MenuItemModel;\r\n\r\n private get hasSubItems() {\r\n return this.item.subItems && this.item.subItems.length > 0;\r\n }\r\n\r\n private isOnPath(routeName?: string): boolean {\r\n return (\r\n routeName !== undefined &&\r\n this.$route.matched.some((route) => route.name === routeName)\r\n );\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuItem.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuItem.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./MenuItem.vue?vue&type=template&id=33b05e62&scoped=true&\"\nimport script from \"./MenuItem.vue?vue&type=script&lang=ts&\"\nexport * from \"./MenuItem.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./MenuItem.vue?vue&type=style&index=0&id=33b05e62&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"33b05e62\",\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\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\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, Vue } from 'vue-property-decorator';\r\nimport ContactCard from '@/components/general/ContactCard.vue';\r\nimport { authModule } from '@/store/modules/auth';\r\nimport { Permissions } from '@/utils/Permissions';\r\nimport { Config } from '@/utils/Config';\r\nimport { Contact } from '@/models/Contacts/Contact';\r\nimport { EventBus } from '@/utils/EventBus';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport { Customer } from '@/models/Customer';\r\nimport { UserProfile } from '@/models/UserProfile/UserProfile';\r\nimport { authRequirementsForImpersonation } from '@/router/authRequirements';\r\nimport MenuItem from './MenuItem.vue';\r\nimport {\r\n checkPageItemAuthRequirements,\r\n checkPageSubItemAuthRequirements,\r\n pages,\r\n} from '@/utils/Pages';\r\nimport { MenuItem as MenuItemModel } from '@/models/menu/MenuItem';\r\nimport { FeatureHighlights } from '@/models/UserProfile/FeatureHighlights';\r\n\r\n@Component({\r\n components: {\r\n ContactCard,\r\n MenuItem,\r\n },\r\n})\r\nexport default class Sidebar extends Vue {\r\n private get isAuthenticated(): boolean {\r\n return authModule.isAuthenticated;\r\n }\r\n\r\n private get profile(): UserProfile | null {\r\n return userProfileModule.data !== null && userProfileModule.data.userProfile\r\n ? userProfileModule.data.userProfile\r\n : null;\r\n }\r\n\r\n private get selectedCustomer(): Customer | null {\r\n return userProfileModule.selectedCustomer;\r\n }\r\n\r\n private get userCustomers(): Customer[] | undefined {\r\n return userProfileModule.data?.userProfile.customers;\r\n }\r\n\r\n private get hasMultipleCustomers(): boolean {\r\n return (\r\n this.profile !== null &&\r\n this.profile.customers !== undefined &&\r\n this.profile.customers.length > 1\r\n );\r\n }\r\n\r\n private get featureHighlights(): FeatureHighlights[] {\r\n return userProfileModule.data?.featureHighlights ?? [];\r\n }\r\n\r\n private get isImpersonated(): boolean {\r\n return this.profile !== null ? this.profile.isImpersonated : false;\r\n }\r\n\r\n private get profileUser(): Contact | null {\r\n return this.profile !== null\r\n ? {\r\n name: `${this.profile.firstName} ${this.profile.lastName}`,\r\n email: this.profile.email,\r\n responsibility: this.selectedCustomer?.name,\r\n }\r\n : null;\r\n }\r\n\r\n private get loggedInUser(): Contact | null {\r\n return this.isAuthenticated && authModule.profile\r\n ? {\r\n name: `${authModule.profile.given_name} ${authModule.profile.family_name}`,\r\n email: authModule.profile.impersonated,\r\n responsibility: !this.isImpersonated\r\n ? this.selectedCustomer?.name\r\n : undefined,\r\n }\r\n : null;\r\n }\r\n\r\n public get canImpersonate(): boolean {\r\n return Permissions.validate(authRequirementsForImpersonation).valid;\r\n }\r\n\r\n private get menuItems(): MenuItemModel[] {\r\n const menuItems: (MenuItemModel | null)[] = pages\r\n .filter((page) => checkPageItemAuthRequirements(page, this.userCustomers))\r\n .map((page) => {\r\n const subItems =\r\n page.subItems?.filter(\r\n (subItem) =>\r\n subItem.showInMenu &&\r\n checkPageSubItemAuthRequirements(subItem, this.userCustomers)\r\n ) ?? [];\r\n\r\n if (\r\n page.subItems !== undefined &&\r\n page.subItems.filter((subItem) => subItem.showInMenu).length > 0 &&\r\n subItems.length === 0\r\n ) {\r\n // Page has sub items (to show in menu) but none was valid, skip this one\r\n return null;\r\n }\r\n\r\n const menuItem: MenuItemModel = {\r\n title: this.$t(`menuPages.${page.key}.title`).toString(),\r\n routeName: page.routeName,\r\n icon: page.icon,\r\n subItems: subItems.map((subItem) => ({\r\n title: this.$t(\r\n `menuPages.${page.key}.subItems.${subItem.key}`\r\n ).toString(),\r\n routeName: subItem.routeName,\r\n icon: subItem.icon,\r\n newFeature: this.hasNewFeature(page.key + subItem.key),\r\n })),\r\n newFeature: this.hasNewFeature(page.key),\r\n };\r\n\r\n return menuItem;\r\n });\r\n\r\n return menuItems.filter((item) => item !== null).map((item) => item!);\r\n }\r\n\r\n private isOnPath(routeName: string): boolean {\r\n return this.$route.matched.some((route) => route.name === routeName);\r\n }\r\n\r\n private login(): void {\r\n EventBus.$emit(Config.LoginEvent);\r\n }\r\n\r\n private logout(): void {\r\n EventBus.$emit(Config.LogoutEvent);\r\n }\r\n\r\n private impersonation(): void {\r\n EventBus.$emit(Config.ShowImpersonationModalEvent);\r\n }\r\n\r\n private feedback(): void {\r\n EventBus.$emit(Config.ShowFeedbackModalEvent);\r\n }\r\n\r\n private changeCustomer(): void {\r\n EventBus.$emit(Config.ShowCustomerSelectionModalEvent);\r\n }\r\n\r\n private hasNewFeature(key: string): boolean {\r\n return this.featureHighlights.some(\r\n (f) => f.featurePage.toLowerCase() == key.toLowerCase()\r\n );\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Sidebar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Sidebar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Sidebar.vue?vue&type=template&id=1126b10b&scoped=true&\"\nimport script from \"./Sidebar.vue?vue&type=script&lang=ts&\"\nexport * from \"./Sidebar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Sidebar.vue?vue&type=style&index=0&id=1126b10b&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1126b10b\",\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:\"c-compact-footer u-full-width u-background-color-white py-6\",domProps:{\"innerHTML\":_vm._s(_vm.$t('footer.text'))}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\n\r\n@Component\r\nexport default class PageFooter extends Vue {}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageFooter.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageFooter.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PageFooter.vue?vue&type=template&id=9a7b3884&\"\nimport script from \"./PageFooter.vue?vue&type=script&lang=ts&\"\nexport * from \"./PageFooter.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.canImpersonate)?_c('Modal',{ref:\"modal\",attrs:{\"id\":\"theImpersonationModal\",\"title\":_vm.$t('theImpersonationModal.title')},scopedSlots:_vm._u([{key:\"body\",fn:function(){return [_c('div',[(_vm.isImpersonated)?[_c('section',{staticClass:\"c-section c-section u-background-color-red u-color-white c-section--padding\"},[_c('h3',{staticClass:\"t-heading-5 mt-0\"},[_vm._v(\" \"+_vm._s(_vm.$t('theImpersonationModal.current.title'))+\" \")]),_c('span',{staticClass:\"d-block mb-3\"},[_vm._v(_vm._s(_vm.$t('theImpersonationModal.current.leadingText'))+\" \"),_c('strong',[_vm._v(_vm._s(_vm.impersonatedMemberName))])]),(_vm.isImpersonatingAndHasNoCustomers)?_c('div',{staticClass:\"c-alert c-alert--yellow mb-3\"},[_c('span',{staticClass:\"c-alert__icon mr-1\"},[_c('span',{staticClass:\"material-icons\"},[_vm._v(\"warning\")])]),_c('span',{staticClass:\"c-alert__text\"},[(_vm.isImpersonatingAndHasNoCustomers)?[_vm._v(_vm._s(_vm.$t('theImpersonationModal.current.noCustomersError')))]:_vm._e()],2)]):_vm._e(),_c('button',{staticClass:\"o-button o-button--black u-center-text\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.stop}},[_vm._v(\" \"+_vm._s(_vm.$t('theImpersonationModal.current.stop'))+\" \")])])]:[_c('div',{staticClass:\"c-alert c-alert--red mb-3\"},[_c('span',{staticClass:\"c-alert__icon\"},[_c('span',{staticClass:\"mdi mdi--24 mdi-account-supervisor mr-1\"})]),_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('theImpersonationModal.noCurrent.alert')))])]),_c('form',{on:{\"submit\":function($event){$event.preventDefault();}}},[_c('div',{staticClass:\"o-search-input o-search-input--light-grey @@modifiers u-full-width mb-4\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.searchUserText),expression:\"searchUserText\"}],staticClass:\"o-search-input__input\",attrs:{\"type\":\"search\",\"placeholder\":_vm.$t('theImpersonationModal.noCurrent.start.searchPlaceholder'),\"disabled\":_vm.searching || _vm.startingOrStoppingSession},domProps:{\"value\":(_vm.searchUserText)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.searchUserText=$event.target.value}}}),_c('button',{staticClass:\"o-search-input__button\",attrs:{\"type\":\"submit\",\"disabled\":_vm.searching || _vm.startingOrStoppingSession || !_vm.searchUserText},on:{\"click\":_vm.onSearchUserFormSubmit}},[_c('i',{staticClass:\"material-icons search-form__button-icon\"},[_vm._v(\"search\")])])])]),(_vm.searching)?_c('div',{staticClass:\"u-position-relative u-min-height-100\"},[_c('span',{staticClass:\"o-loader o-loader--absolute\"})]):_vm._e(),(!_vm.searching && _vm.searchUserResults)?_c('div',[(_vm.searchUserResults.length > 0)?[_c('span',{staticClass:\"t-body-regular-small-bold d-block mb-2\",domProps:{\"innerHTML\":_vm._s(\n _vm.$t(\n 'theImpersonationModal.noCurrent.start.searchResults.any',\n [_vm.searchUserResults.length, _vm.searchedUserText]\n )\n )}}),_c('ul',{staticClass:\"c-list m-0\"},_vm._l((_vm.searchUserResults),function(user,index){return _c('li',{key:index,staticClass:\"c-list__item\"},[_c('span',[_vm._v(\" \"+_vm._s(user.firstName)+\" \"+_vm._s(user.lastName)+\" (\"+_vm._s(user.axId)+\") \")]),_c('a',{staticClass:\"u-float-right\",attrs:{\"href\":\"\"},on:{\"click\":function($event){$event.preventDefault();return _vm.onImpersonateUserClick(user)}}},[_vm._v(\" \"+_vm._s(_vm.$t('theImpersonationModal.noCurrent.start.impersonate'))+\" \")])])}),0)]:[_c('span',{staticClass:\"t-body-regular-small-bold d-block mb-2\",domProps:{\"innerHTML\":_vm._s(\n _vm.$t(\n 'theImpersonationModal.noCurrent.start.searchResults.none',\n [_vm.searchedUserText]\n )\n )}})]],2):_vm._e()],(_vm.errorSearching || _vm.startingSessionError || _vm.stoppingSessionError)?_c('div',{staticClass:\"c-alert c-alert--red mt-3\",attrs:{\"data-element-id\":\"theImpersonationModal_ErrorAlert\"}},[_c('span',{staticClass:\"material-icons mr-1\"},[_vm._v(\"warning\")]),_c('span',{staticClass:\"c-alert__text\"},[(_vm.errorSearching)?[_vm._v(_vm._s(_vm.$t('theImpersonationModal.errorSearching'))+\" \")]:_vm._e(),(_vm.startingSessionError)?[_vm._v(_vm._s(_vm.$t('theImpersonationModal.errorStarting'))+\" \")]:_vm._e(),(_vm.stoppingSessionError)?[_vm._v(_vm._s(_vm.$t('theImpersonationModal.errorStopping'))+\" \")]:_vm._e()],2),_c('span',{staticClass:\"js-toggle-hidden c-alert__close\",attrs:{\"data-element-id\":\"theImpersonationModal_ErrorAlert\"}})]):_vm._e()],2)]},proxy:true}],null,false,2611645990)}):_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\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\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, Vue } from 'vue-property-decorator';\r\nimport Modal from '@/components/general/Modal.vue';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport { UserProfile } from '@/models/UserProfile/UserProfile';\r\nimport { FindUsersToImpersonateUser } from '@/models/FindUsersToImpersonateUser';\r\nimport impersonationService from '@/services/ImpersonationService';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { Permissions } from '@/utils/Permissions';\r\nimport { loadingModule } from '@/store/modules/loading';\r\nimport { authRequirementsForImpersonation } from '@/router/authRequirements';\r\n\r\n@Component({\r\n components: {\r\n Modal,\r\n },\r\n})\r\nexport default class TheImpersonationModal extends Vue {\r\n private searching: boolean = false;\r\n private errorSearching: boolean = false;\r\n\r\n private searchUserText: string = '';\r\n private searchedUserText: string = '';\r\n private searchUserResults: Array | null = null;\r\n\r\n private startingOrStoppingSession: boolean = false;\r\n private startingSessionError: boolean = false;\r\n private stoppingSessionError: boolean = false;\r\n\r\n public get canImpersonate(): boolean {\r\n return Permissions.validate(authRequirementsForImpersonation).valid;\r\n }\r\n\r\n public get isImpersonatingAndHasNoCustomers(): boolean {\r\n return (\r\n this.isImpersonated &&\r\n this.userProfile !== null &&\r\n this.userProfile.customers !== undefined &&\r\n this.userProfile.customers.length === 0\r\n );\r\n }\r\n\r\n private get userProfile(): UserProfile | null {\r\n return userProfileModule.data?.userProfile ?? null;\r\n }\r\n\r\n private get isImpersonated(): boolean {\r\n return this.userProfile !== null && this.userProfile.isImpersonated;\r\n }\r\n\r\n private get impersonatedMemberName(): string {\r\n return this.userProfile !== null\r\n ? this.userProfile.firstName + ' ' + this.userProfile.lastName\r\n : '';\r\n }\r\n\r\n public show(): void {\r\n (this.$refs.modal as Modal).showModal();\r\n }\r\n\r\n private onSearchUserFormSubmit(): void {\r\n if (this.searchUserText) {\r\n this.searchUser(this.searchUserText);\r\n }\r\n }\r\n\r\n private searchUser(searchUserText: string): void {\r\n this.errorSearching = false;\r\n this.searching = true;\r\n this.searchUserResults = null;\r\n this.searchedUserText = searchUserText;\r\n\r\n impersonationService\r\n .searchForUsers(this.searchedUserText)\r\n .then((result) => {\r\n this.searchUserResults = result;\r\n })\r\n .catch(() => {\r\n this.errorSearching = true;\r\n })\r\n .finally(() => {\r\n this.searching = false;\r\n });\r\n }\r\n\r\n private onImpersonateUserClick(user: FindUsersToImpersonateUser): void {\r\n if (!this.startingOrStoppingSession) {\r\n this.start(user);\r\n }\r\n }\r\n\r\n private async start(user: FindUsersToImpersonateUser): Promise {\r\n this.startingSessionError = false;\r\n this.startingOrStoppingSession = true;\r\n\r\n const loading = await loadingModule.dispatchAdd(\r\n this.$t('loading.startingImpersonation').toString()\r\n );\r\n\r\n return impersonationService\r\n .start(user.azureAdId)\r\n .then(() => {\r\n Consoler.debugLog('Successfully started impersonation.');\r\n window.location.href = '/';\r\n })\r\n .catch((error) => {\r\n Consoler.debugLog('Failed to start impersonation.', error);\r\n this.startingSessionError = true;\r\n loadingModule.commitComplete(loading);\r\n })\r\n .finally(() => {\r\n this.startingOrStoppingSession = false;\r\n });\r\n }\r\n\r\n private async stop(): Promise {\r\n this.stoppingSessionError = false;\r\n this.startingOrStoppingSession = true;\r\n\r\n const loading = await loadingModule.dispatchAdd(\r\n this.$t('loading.stoppingImpersonation').toString()\r\n );\r\n\r\n return impersonationService\r\n .end()\r\n .then(() => {\r\n Consoler.debugLog('Successfully stopped impersonation.');\r\n window.location.href = '/';\r\n })\r\n .catch((error) => {\r\n Consoler.debugLog('Failed to stop impersonation.', error);\r\n this.stoppingSessionError = true;\r\n loadingModule.commitComplete(loading);\r\n })\r\n .finally(() => {\r\n this.startingOrStoppingSession = false;\r\n });\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheImpersonationModal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheImpersonationModal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./TheImpersonationModal.vue?vue&type=template&id=5564ca16&\"\nimport script from \"./TheImpersonationModal.vue?vue&type=script&lang=ts&\"\nexport * from \"./TheImpersonationModal.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.enabled)?_c('div',{staticClass:\"c-alert c-alert--red py-2 px-0 mb-0 c-alert--sticky-top\"},[_c('div',{staticClass:\"container-fluid\"},[_c('div',{staticClass:\"impersonation-row row align-items-center justify-content-center\"},[_c('span',{staticClass:\"c-alert__text line-height-1\"},[_c('span',{staticClass:\"mdi mdi--24 mdi-account-supervisor mr-1\"}),_vm._v(\" \"+_vm._s(_vm.$t('theImpersonationBar.info'))+\" \"),_c('strong',[_vm._v(_vm._s(_vm.impersonatedMemberName))])]),_c('button',{staticClass:\"o-button o-button--black o-button--small ml-3\",attrs:{\"type\":\"button\",\"disabled\":_vm.stoppingSession},on:{\"click\":_vm.stopImpersonation}},[_vm._v(\" \"+_vm._s(_vm.$t('theImpersonationBar.stop'))+\" \")])])])]):_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\r\nimport { Component, Vue } from 'vue-property-decorator';\r\nimport { UserProfile } from '@/models/UserProfile/UserProfile';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport impersonationService from '@/services/ImpersonationService';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { EventBus } from '@/utils/EventBus';\r\nimport { Config } from '@/utils/Config';\r\nimport { Message, MessageType } from '@/models/Message';\r\n\r\n@Component\r\nexport default class TheImpersonationBar extends Vue {\r\n private stoppingSession: boolean = false;\r\n\r\n private get userProfile(): UserProfile | null {\r\n return userProfileModule.data?.userProfile ?? null;\r\n }\r\n\r\n private get enabled(): boolean {\r\n return this.userProfile !== null && this.userProfile.isImpersonated;\r\n }\r\n\r\n private get impersonatedMemberName(): string {\r\n return this.userProfile !== null\r\n ? this.userProfile.firstName + ' ' + this.userProfile.lastName\r\n : '';\r\n }\r\n\r\n private stopImpersonation(): Promise {\r\n this.stoppingSession = true;\r\n\r\n return impersonationService\r\n .end()\r\n .then(() => {\r\n Consoler.debugLog('Successfully stopped impersonation.');\r\n window.location.href = '/';\r\n })\r\n .catch((error) => {\r\n Consoler.debugLog('Failed to stop impersonation.', error);\r\n const errorMessage: Message = {\r\n text: this.$t('theImpersonationBar.errorStopping').toString(),\r\n type: MessageType.error,\r\n };\r\n EventBus.$emit(Config.AddMessageEvent, errorMessage);\r\n this.stoppingSession = false;\r\n });\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheImpersonationBar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheImpersonationBar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./TheImpersonationBar.vue?vue&type=template&id=19b14b18&\"\nimport script from \"./TheImpersonationBar.vue?vue&type=script&lang=ts&\"\nexport * from \"./TheImpersonationBar.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{ref:\"modal\",attrs:{\"id\":\"theCustomerSelectionModal\",\"title\":_vm.$t('theCustomerSelectionModal.title'),\"closeableByOutsideClickAndEscKey\":_vm.closable,\"closeButton\":_vm.closable},scopedSlots:_vm._u([{key:\"body\",fn:function(){return [_c('div',[(_vm.customers.length > 0)?[_c('div',{staticClass:\"c-alert c-alert--blue mb-3\"},[_c('span',{staticClass:\"c-alert__icon\"},[_c('span',{staticClass:\"material-icons\"},[_vm._v(\"info\")])]),_c('span',{staticClass:\"c-alert__text\"},[_vm._v(\" \"+_vm._s(_vm.$t('theCustomerSelectionModal.info.default'))+\" \")])]),_c('ul',{staticClass:\"c-list m-0\"},_vm._l((_vm.customers),function(customer,index){return _c('li',{key:index,staticClass:\"c-list__item d-flex justify-content-between\",class:{\n 'u-background-color-blue-50':\n _vm.selectedCustomer &&\n _vm.selectedCustomer.number === customer.number,\n 'u-bold':\n _vm.selectedCustomer &&\n _vm.selectedCustomer.number === customer.number,\n }},[_c('span',[_vm._v(_vm._s(customer.name)+\" (\"+_vm._s(customer.number)+\")\")]),(\n _vm.selectedCustomer &&\n _vm.selectedCustomer.number === customer.number\n )?_c('span',[_vm._v(_vm._s(_vm.$t('theCustomerSelectionModal.selected'))+\" \")]):_c('a',{attrs:{\"href\":\"\"},on:{\"click\":function($event){$event.preventDefault();return _vm.onCustomerClick(customer)}}},[_vm._v(\" \"+_vm._s(_vm.$t('theCustomerSelectionModal.select'))+\" \")])])}),0)]:[_c('div',{staticClass:\"c-alert c-alert--yellow\"},[_c('span',{staticClass:\"material-icons mr-1\"},[_vm._v(\"warning\")]),_c('span',{staticClass:\"c-alert__text\"},[_c('span',[_vm._v(_vm._s(_vm.$t('theCustomerSelectionModal.noCustomers')))])])])]],2)]},proxy:true}])})}\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\n\n\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\nimport Modal from '@/components/general/Modal.vue';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport { UserProfile } from '@/models/UserProfile/UserProfile';\r\nimport { Customer } from '@/models/Customer';\r\nimport { loadingModule } from '@/store/modules/loading';\r\nimport { Route } from 'vue-router';\r\nimport { CustomerSelectionOptions } from '@/models/CustomerSelectionOptions';\r\nimport { getFullUrlForRoute } from '@/router/functions';\r\n\r\n@Component({\r\n components: {\r\n Modal,\r\n },\r\n})\r\nexport default class TheCustomerSelectionModal extends Vue {\r\n private onSelectionGoTo: Route | null = null;\r\n private closable: boolean = true;\r\n\r\n private get profile(): UserProfile | null {\r\n return userProfileModule.data !== null && userProfileModule.data.userProfile\r\n ? userProfileModule.data.userProfile\r\n : null;\r\n }\r\n\r\n private get selectedCustomer(): Customer | null {\r\n return userProfileModule.selectedCustomer;\r\n }\r\n\r\n private get customers(): Customer[] {\r\n return this.profile !== null && this.profile.customers\r\n ? this.profile.customers\r\n : [];\r\n }\r\n\r\n public show(options?: CustomerSelectionOptions): void {\r\n this.onSelectionGoTo = options?.onSelectionGoTo ?? null;\r\n this.closable = !(options?.notCloseable === true);\r\n\r\n (this.$refs.modal as Modal).showModal();\r\n }\r\n\r\n private async onCustomerClick(customer: Customer) {\r\n userProfileModule.commitSetSelectedCustomer(customer);\r\n await loadingModule.dispatchAdd('');\r\n\r\n if (this.onSelectionGoTo !== null) {\r\n window.location.href = getFullUrlForRoute(this.onSelectionGoTo);\r\n } else {\r\n this.$router.go(0);\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheCustomerSelectionModal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheCustomerSelectionModal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./TheCustomerSelectionModal.vue?vue&type=template&id=cb66e89e&\"\nimport script from \"./TheCustomerSelectionModal.vue?vue&type=script&lang=ts&\"\nexport * from \"./TheCustomerSelectionModal.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isEnabled)?_c('div',{staticClass:\"d-print-none\"},[_c('button',{staticClass:\"feedback-button o-round-button o-round-button--black\",attrs:{\"title\":_vm.$t('theFeedbackButtonAndModal.button.tooltip')},on:{\"click\":_vm.onFeedbackButtonClick}},[_c('span',{staticClass:\"mdi mdi-message-alert\"})]),_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.onSubmit.apply(null, arguments)}}},[_c('Modal',{ref:\"modal\",attrs:{\"id\":\"feedbackModal\",\"title\":_vm.$t('theFeedbackButtonAndModal.title'),\"isLarge\":true,\"showFooter\":true,\"closeableByOutsideClickAndEscKey\":false},scopedSlots:_vm._u([{key:\"body\",fn:function(){return [_c('p',{staticClass:\"t-body-regular mt-3 mb-3\"},[_vm._v(\" \"+_vm._s(_vm.$t('theFeedbackButtonAndModal.introduction'))+\" \")]),_c('div',{staticClass:\"c-form\",class:{\n 'c-form--validated': _vm.formInvalid,\n }},[(\n _vm.customers.length > 1 || _vm.formDetails.selectedCustomerId === null\n )?_c('div',{staticClass:\"mb-3\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-12 col-md-6\"},[_c('label',{staticClass:\"o-label o-label--required u-bold\"},[_vm._v(_vm._s(_vm.$t('theFeedbackButtonAndModal.customers.title')))]),_c('CustomersTreeSelect',{staticClass:\"tree-select--light-grey\",attrs:{\"value\":_vm.formDetails.selectedCustomerId,\"customers\":_vm.customers,\"multiple\":false,\"required\":true,\"placeholder\":_vm.$t('theFeedbackButtonAndModal.customers.placeholder')},on:{\"input\":_vm.onCustomersInput}})],1)]),_c('div',{staticClass:\"t-body-regular-small mt-1\"},[_vm._v(\" \"+_vm._s(_vm.$t('theFeedbackButtonAndModal.customers.info'))+\" \")])]):_vm._e(),_c('div',{staticClass:\"mb-3\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-12 col-md-6\"},[_c('label',{staticClass:\"o-label o-label--required u-bold\"},[_vm._v(_vm._s(_vm.$t('theFeedbackButtonAndModal.contacts.title')))]),(_vm.loadingContacts)?_c('div',[_c('div',{staticClass:\"o-loader o-loader--medium\"})]):_c('ContactsEmailTreeSelect',{staticClass:\"tree-select--light-grey\",attrs:{\"value\":_vm.formDetails.contactEmail,\"contacts\":_vm.contacts,\"multiple\":false,\"placeholder\":_vm.$t('theFeedbackButtonAndModal.contacts.placeholder'),\"extraNode\":_vm.generalContactNode,\"required\":true},on:{\"input\":_vm.onContactsInput}})],1)]),_c('div',{staticClass:\"t-body-regular-small mt-1\"},[_vm._v(\" \"+_vm._s(_vm.$t('theFeedbackButtonAndModal.contacts.info'))+\" \")])]),_c('div',{staticClass:\"mb-3\"},[_c('label',{staticClass:\"o-label o-label--required u-bold\"},[_vm._v(_vm._s(_vm.$t('theFeedbackButtonAndModal.message.title')))]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.formDetails.message),expression:\"formDetails.message\"}],staticClass:\"o-textarea u-width-100\",attrs:{\"placeholder\":_vm.$t('theFeedbackButtonAndModal.message.placeholder'),\"rows\":\"5\",\"required\":true},domProps:{\"value\":(_vm.formDetails.message)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.formDetails, \"message\", $event.target.value)}}})])])]},proxy:true},{key:\"footer\",fn:function(){return [(_vm.errorSendingFeedback || _vm.errorLoadingContacts || _vm.formInvalid)?_c('div',{staticClass:\"c-alert c-alert--red mb-3\"},[_c('span',{staticClass:\"c-alert__text\"},[(_vm.errorSendingFeedback)?[_vm._v(_vm._s(_vm.$t('theFeedbackButtonAndModal.errorFeedback')))]:(_vm.errorLoadingContacts)?[_vm._v(_vm._s(_vm.$t('theFeedbackButtonAndModal.errorContacts')))]:(_vm.formInvalid)?[_vm._v(_vm._s(_vm.$t('theFeedbackButtonAndModal.errorForm')))]:_vm._e()],2),_c('span',{staticClass:\"c-alert__close\",on:{\"click\":_vm.onCloseAlertClick}})]):_vm._e(),_c('button',{staticClass:\"o-button o-button--blue mr-2\",attrs:{\"type\":\"submit\",\"disabled\":_vm.sendingFeedback}},[_vm._v(\" \"+_vm._s(_vm.$t('theFeedbackButtonAndModal.submit'))+\" \")]),_c('button',{staticClass:\"o-button o-button--white mr-2\",attrs:{\"disabled\":_vm.sendingFeedback,\"type\":\"button\"},on:{\"click\":_vm.onCancelClick}},[_vm._v(\" \"+_vm._s(_vm.$t('theFeedbackButtonAndModal.cancel'))+\" \")])]},proxy:true}],null,false,679873845)})],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TreeSelect',{attrs:{\"value\":_vm.value,\"options\":_vm.options,\"placeholder\":_vm.placeholder,\"clearable\":_vm.clearable,\"multiple\":_vm.multiple,\"required\":_vm.required},on:{\"input\":_vm.onInput,\"select\":_vm.onSelect}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport TreeSelect, {\r\n TreeSelectNode,\r\n} from '@/components/general/TreeSelect.vue';\r\nimport { Contact } from '@/models/Contacts/Contact';\r\n\r\n@Component({\r\n components: {\r\n TreeSelect,\r\n },\r\n})\r\nexport default class ContactsEmailTreeSelect extends Vue {\r\n @Prop({ required: true }) private value!: string[];\r\n @Prop({ required: true }) private contacts!: Contact[];\r\n @Prop({ required: true }) private placeholder!: string;\r\n @Prop({ required: false, default: () => false })\r\n private clearable!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n private multiple!: boolean;\r\n @Prop({ required: false, default: () => null }) private extraNode!: {\r\n id: string;\r\n label: string;\r\n } | null;\r\n @Prop({ required: false, default: () => false })\r\n private required!: boolean;\r\n\r\n private get options(): TreeSelectNode[] {\r\n const options: TreeSelectNode[] = [];\r\n\r\n if (this.extraNode !== null) {\r\n options.push({\r\n id: this.extraNode.id,\r\n label: this.extraNode.label,\r\n });\r\n }\r\n\r\n for (let contact of this.contacts) {\r\n if (contact.email != undefined) {\r\n options.push({\r\n id: contact.email,\r\n label: this.$t('contactEmailTreeSelect.contactLabel', [\r\n contact.name,\r\n contact.responsibility,\r\n ]).toString(),\r\n });\r\n }\r\n }\r\n\r\n return options;\r\n }\r\n\r\n private onInput(contacts: string[]) {\r\n this.$emit('input', contacts);\r\n }\r\n\r\n private onSelect(contactsEmail: string[]) {\r\n this.$emit('select', contactsEmail);\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsEmailTreeSelect.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsEmailTreeSelect.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ContactsEmailTreeSelect.vue?vue&type=template&id=c8fa1048&\"\nimport script from \"./ContactsEmailTreeSelect.vue?vue&type=script&lang=ts&\"\nexport * from \"./ContactsEmailTreeSelect.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { BaseServiceDefinition } from './BaseService';\r\nimport { SendFeedback } from '@/models/Feedback/SendFeedback';\r\nimport { SendFeedbackResult } from '@/models/Feedback/SendFeedbackResult';\r\n\r\nclass FeedbackService extends BaseServiceDefinition {\r\n constructor() {\r\n super();\r\n }\r\n\r\n public async sendFeedback(\r\n feedback: SendFeedback\r\n ): Promise {\r\n return this.post('/api/v1/feedback', feedback)\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n}\r\n\r\nconst feedbackService: FeedbackService = new FeedbackService();\r\n\r\nexport default feedbackService;\r\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\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\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, Vue } from 'vue-property-decorator';\r\nimport Modal from '@/components/general/Modal.vue';\r\nimport CustomersTreeSelect from '@/components/CustomersTreeSelect.vue';\r\nimport ContactsEmailTreeSelect from '@/components/ContactsEmailTreeSelect.vue';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport { Customer } from '@/models/Customer';\r\nimport { loadingModule } from '@/store/modules/loading';\r\nimport { userContactsModule } from '@/store/modules/userContacts';\r\nimport { Contact } from '@/models/Contacts/Contact';\r\nimport feedbackService from '@/services/FeedbackService';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { SendFeedback } from '@/models/Feedback/SendFeedback';\r\nimport { FeatureFlagNames } from '@/models/FeatureFlagNames';\r\nimport { Permissions } from '@/utils/Permissions';\r\nimport { authModule } from '@/store/modules/auth';\r\nimport { Config } from '@/utils/Config';\r\nimport { EventBus } from '@/utils/EventBus';\r\nimport { Message, MessageType } from '@/models/Message';\r\nimport { detect } from 'detect-browser';\r\n\r\ninterface FormDetails {\r\n selectedCustomerId: number | null;\r\n contactEmail: string | null;\r\n message: string;\r\n}\r\n\r\n@Component({\r\n components: {\r\n Modal,\r\n CustomersTreeSelect,\r\n ContactsEmailTreeSelect,\r\n },\r\n})\r\nexport default class TheFeedbackButtonAndModal extends Vue {\r\n private sendingFeedback: boolean = false;\r\n private errorSendingFeedback: boolean = false;\r\n private loadingContacts: boolean = false;\r\n private errorLoadingContacts: boolean = false;\r\n private formInvalid: boolean = false;\r\n\r\n private readonly generalContactNode: { id: string; label: string } = {\r\n id: 'general',\r\n label: this.$t(\r\n 'theFeedbackButtonAndModal.contacts.generalContact'\r\n ).toString(),\r\n };\r\n\r\n private formDetails: FormDetails = {\r\n selectedCustomerId: null,\r\n contactEmail: null,\r\n message: '',\r\n };\r\n\r\n private get isEnabled(): boolean {\r\n return this.isAuthenticated && this.isFeedbackFeatureEnabled;\r\n }\r\n private get isAuthenticated(): boolean {\r\n return authModule.isAuthenticated;\r\n }\r\n private get isFeedbackFeatureEnabled(): boolean {\r\n return Permissions.isFeatureEnabled(FeatureFlagNames.Feedback);\r\n }\r\n\r\n private get customers(): Customer[] {\r\n return userProfileModule.data?.userProfile.customers ?? [];\r\n }\r\n\r\n private get selectedCustomer(): Customer | null {\r\n return this.formDetails.selectedCustomerId !== null\r\n ? this.customers.find(\r\n (customer) => customer.id === this.formDetails.selectedCustomerId\r\n ) ?? null\r\n : null;\r\n }\r\n\r\n private get contacts(): Contact[] {\r\n return this.selectedCustomer !== null\r\n ? userContactsModule.item(this.selectedCustomer.number) ?? []\r\n : [];\r\n }\r\n\r\n public show(): void {\r\n this.initialize();\r\n\r\n (this.$refs.modal as Modal).showModal();\r\n }\r\n\r\n private hideModal(): void {\r\n (this.$refs.modal as Modal).hideModal();\r\n }\r\n\r\n private initialize() {\r\n this.formDetails = {\r\n selectedCustomerId: userProfileModule.selectedCustomer\r\n ? userProfileModule.selectedCustomer.id\r\n : null,\r\n contactEmail: this.generalContactNode.id,\r\n message: '',\r\n };\r\n\r\n this.errorSendingFeedback = false;\r\n this.errorLoadingContacts = false;\r\n this.loadUserContacts();\r\n }\r\n\r\n private onCloseAlertClick() {\r\n this.errorSendingFeedback = false;\r\n this.errorLoadingContacts = false;\r\n this.formInvalid = false;\r\n }\r\n\r\n private onSuccess() {\r\n const successMessage: Message = {\r\n text: this.$t('theFeedbackButtonAndModal.submitSuceeded').toString(),\r\n type: MessageType.success,\r\n };\r\n EventBus.$emit(Config.AddMessageEvent, successMessage);\r\n\r\n this.hideModal();\r\n }\r\n\r\n private async loadUserContacts(): Promise {\r\n const selectedCustomerNumber = this.selectedCustomer?.number;\r\n if (selectedCustomerNumber === undefined) {\r\n return Promise.reject('No (valid) customer selected');\r\n }\r\n\r\n this.errorLoadingContacts = false;\r\n this.loadingContacts = true;\r\n\r\n return userContactsModule\r\n .dispatchLoad(selectedCustomerNumber)\r\n .then(() => undefined)\r\n .catch(() => {\r\n this.errorLoadingContacts = true;\r\n })\r\n .finally(() => {\r\n this.loadingContacts = false;\r\n });\r\n }\r\n\r\n private async onSubmit() {\r\n if (\r\n this.formDetails.selectedCustomerId === null ||\r\n this.selectedCustomer == null ||\r\n this.formDetails.contactEmail === null ||\r\n this.formDetails.contactEmail === '' ||\r\n this.formDetails.message === ''\r\n ) {\r\n this.formInvalid = true;\r\n return;\r\n }\r\n\r\n const detectBrowserInfo = detect();\r\n\r\n const feedback: SendFeedback = {\r\n customerNumber: this.selectedCustomer.number,\r\n customerName: this.selectedCustomer.name,\r\n contactEmail:\r\n this.formDetails.contactEmail !== this.generalContactNode.id\r\n ? this.formDetails.contactEmail\r\n : undefined,\r\n message: this.formDetails.message,\r\n browserInfo:\r\n detectBrowserInfo !== null\r\n ? {\r\n name: detectBrowserInfo.name,\r\n version: detectBrowserInfo.version ?? undefined,\r\n os: detectBrowserInfo.os ?? undefined,\r\n type: detectBrowserInfo.type,\r\n userAgent: navigator.userAgent,\r\n }\r\n : null,\r\n routeInfo: {\r\n name: this.$route.name ?? undefined,\r\n url: window.location.href,\r\n },\r\n };\r\n\r\n Consoler.debugLog('Sending feedback', feedback);\r\n\r\n this.sendingFeedback = true;\r\n this.errorSendingFeedback = false;\r\n this.formInvalid = false;\r\n\r\n const loading = await loadingModule.dispatchAdd(\r\n this.$t('loading.theFeedbackButtonAndModal.sending').toString()\r\n );\r\n\r\n feedbackService\r\n .sendFeedback(feedback)\r\n .then((result) => {\r\n if (result.success) {\r\n Consoler.debugLog('Sending feedback was done successfully', result);\r\n this.onSuccess();\r\n } else {\r\n Consoler.debugLog(\r\n \"Sending feedback was done but didn't succeed\",\r\n result\r\n );\r\n this.errorSendingFeedback = true;\r\n }\r\n })\r\n .catch((error) => {\r\n Consoler.debugLog('Sending feedback failed', error);\r\n this.errorSendingFeedback = true;\r\n })\r\n .finally(() => {\r\n this.sendingFeedback = false;\r\n loadingModule.commitComplete(loading);\r\n });\r\n }\r\n\r\n private onCustomersInput(customer: number) {\r\n this.formDetails.selectedCustomerId = customer;\r\n this.formDetails.contactEmail = null;\r\n this.loadUserContacts();\r\n }\r\n\r\n private onContactsInput(contactEmail: string) {\r\n this.formDetails.contactEmail = contactEmail;\r\n }\r\n\r\n private onFeedbackButtonClick() {\r\n this.show();\r\n }\r\n\r\n private onCancelClick() {\r\n this.hideModal();\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheFeedbackButtonAndModal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TheFeedbackButtonAndModal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./TheFeedbackButtonAndModal.vue?vue&type=template&id=3e395b91&scoped=true&\"\nimport script from \"./TheFeedbackButtonAndModal.vue?vue&type=script&lang=ts&\"\nexport * from \"./TheFeedbackButtonAndModal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./TheFeedbackButtonAndModal.vue?vue&type=style&index=0&id=3e395b91&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3e395b91\",\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\n\n\n\n\n\n\n\r\nrequire('@sodraskog/unity/scripts/polyfills');\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport PageHeader from './components/general/PageHeader.vue';\r\nimport Sidebar from './components/general/Sidebar.vue';\r\nimport PageFooter from './components/general/PageFooter.vue';\r\nimport TheImpersonationModal from './components/TheImpersonationModal.vue';\r\nimport TheImpersonationBar from './components/TheImpersonationBar.vue';\r\nimport TheCustomerSelectionModal from './components/TheCustomerSelectionModal.vue';\r\nimport TheFeedbackButtonAndModal from './components/TheFeedbackButtonAndModal.vue';\r\nimport Unity from '@sodraskog/unity/scripts/unity';\r\nimport { authModule } from './store/modules/auth';\r\nimport { loadingModule } from './store/modules/loading';\r\nimport { userProfileModule } from './store/modules/userProfile';\r\nimport { Route } from 'vue-router';\r\nimport { EventBus } from './utils/EventBus';\r\nimport { Config } from './utils/Config';\r\nimport { UserProfile } from './models/UserProfile/UserProfile';\r\nimport { CustomerSelectionOptions } from './models/CustomerSelectionOptions';\r\n\r\n// Import Main styles for this application\r\nimport './scss/main.scss';\r\n\r\n@Component({\r\n components: {\r\n PageHeader,\r\n Sidebar,\r\n PageFooter,\r\n TheImpersonationModal,\r\n TheImpersonationBar,\r\n TheCustomerSelectionModal,\r\n TheFeedbackButtonAndModal,\r\n },\r\n})\r\nexport default class App extends Vue {\r\n @Prop({ required: true })\r\n public logo!: string;\r\n\r\n private get isLoading(): boolean {\r\n return loadingModule.isLoading;\r\n }\r\n private get loadingText(): string {\r\n return loadingModule.loadingText;\r\n }\r\n\r\n private get userProfile(): UserProfile | null {\r\n return userProfileModule.data?.userProfile ?? null;\r\n }\r\n\r\n private get isImpersonated(): boolean {\r\n return this.userProfile !== null && this.userProfile.isImpersonated;\r\n }\r\n\r\n private created() {\r\n EventBus.$on(Config.LoginEvent, this.login);\r\n EventBus.$on(Config.LogoutEvent, this.logout);\r\n EventBus.$on(\r\n Config.ShowImpersonationModalEvent,\r\n this.showImpersonationModal\r\n );\r\n EventBus.$on(\r\n Config.ShowCustomerSelectionModalEvent,\r\n this.showCustomerSelectionModal\r\n );\r\n EventBus.$on(Config.ShowFeedbackModalEvent, this.showFeedbackModal);\r\n }\r\n\r\n private mounted() {\r\n this.$nextTick(() => {\r\n new Unity(document);\r\n });\r\n }\r\n\r\n private beforeDestroy() {\r\n authModule.dispatchDeinitialize();\r\n\r\n EventBus.$off(Config.LoginEvent, this.login);\r\n EventBus.$off(Config.LogoutEvent, this.logout);\r\n EventBus.$off(\r\n Config.ShowImpersonationModalEvent,\r\n this.showImpersonationModal\r\n );\r\n EventBus.$off(\r\n Config.ShowCustomerSelectionModalEvent,\r\n this.showCustomerSelectionModal\r\n );\r\n }\r\n\r\n private showImpersonationModal() {\r\n (this.$refs.impersonationModal as TheImpersonationModal).show();\r\n }\r\n\r\n private showFeedbackModal() {\r\n (this.$refs.feedbackModal as TheFeedbackButtonAndModal).show();\r\n }\r\n\r\n private showCustomerSelectionModal(options?: CustomerSelectionOptions) {\r\n (this.$refs.customerSelectionModal as TheCustomerSelectionModal).show(\r\n options\r\n );\r\n }\r\n\r\n private logout() {\r\n authModule.dispatchLogout();\r\n }\r\n\r\n private login(returnTo?: Route) {\r\n authModule.dispatchLogin(returnTo).then((doContinue) => {\r\n if (doContinue) {\r\n userProfileModule.dispatchLoad({ force: true });\r\n }\r\n });\r\n }\r\n}\r\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--15-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--15-3!../node_modules/cache-loader/dist/cjs.js??ref--1-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--15-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--15-3!../node_modules/cache-loader/dist/cjs.js??ref--1-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=10d86d49&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=10d86d49&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"10d86d49\",\n null\n \n)\n\nexport default component.exports","import moment from 'moment';\r\nimport Vue from 'vue';\r\nimport { DateFormats } from '@/utils/Constants';\r\n\r\nVue.filter('dayAndShortMonthAndTime', (value: string) =>\r\n dayAndShortMonthAndTimeFilter(value)\r\n);\r\n\r\nexport function dayAndShortMonthAndTimeFilter(value: string): string {\r\n return moment(value, 'YYY-MM-DD h:mm').format(\r\n DateFormats.dayAndShortMonthAndTime\r\n );\r\n}\r\n","import moment from 'moment';\r\nimport Vue from 'vue';\r\nimport { DateFormats } from '@/utils/Constants';\r\n\r\nVue.filter('dayWithOrdinal', (value: string) => dayWithOrdinalFilter(value));\r\n\r\nexport function dayWithOrdinalFilter(value: moment.MomentInput): string {\r\n return moment(value).format(DateFormats.dayWithOrdinal);\r\n}\r\n","import moment from 'moment';\r\nimport Vue from 'vue';\r\n\r\nVue.filter('month', (value: number) =>\r\n moment(new Date(new Date().getFullYear(), value - 1, 1)).format('MMM')\r\n);\r\n","import moment from 'moment';\r\nimport Vue from 'vue';\r\n\r\nVue.filter('monthLong', (value: number) =>\r\n moment(new Date(new Date().getFullYear(), value - 1, 1)).format('MMMM')\r\n);\r\n","import Vue from 'vue';\r\nimport Highcharts from 'highcharts';\r\nimport HighchartsVue from 'highcharts-vue';\r\nimport HighchartsMore from 'highcharts/highcharts-more';\r\n\r\nHighchartsMore(Highcharts);\r\n\r\nHighcharts.setOptions({\r\n lang: {\r\n numericSymbols: undefined,\r\n },\r\n chart: {\r\n style: {\r\n fontFamily: '\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,Sans-Serif', // Unity 2 fonts\r\n },\r\n },\r\n});\r\n\r\nVue.use(HighchartsVue);\r\n","import Vue from 'vue';\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\nVue.use(require('vue-moment'));\r\n","import jQuery from 'jquery';\r\n\r\nwindow.$ = jQuery;\r\nwindow.jQuery = jQuery;\r\n","import Vue from 'vue';\r\nimport { DatePicker } from 'element-ui';\r\nimport lang from 'element-ui/lib/locale/lang/en';\r\nimport locale from 'element-ui/lib/locale';\r\nimport 'element-ui/lib/theme-chalk/date-picker.css';\r\nimport 'element-ui/lib/theme-chalk/icon.css';\r\n\r\nlocale.use(lang);\r\n\r\nVue.component(DatePicker.name, DatePicker);\r\n","import Vue from 'vue';\r\nimport Treeselect from '@riophae/vue-treeselect';\r\nimport '@riophae/vue-treeselect/dist/vue-treeselect.css';\r\n\r\nVue.component('Treeselect', Treeselect);\r\n","import Vue from 'vue';\r\nimport { ValidationProvider, extend, ValidationObserver } from 'vee-validate';\r\nimport {\r\n required,\r\n email,\r\n regex,\r\n numeric,\r\n min_value,\r\n} from 'vee-validate/dist/rules';\r\n\r\nextend('email', email);\r\nextend('required', required);\r\nextend('regex', regex);\r\nextend('numeric', numeric);\r\nextend('min_value', min_value);\r\n\r\nextend('maxThreeDecimals', {\r\n validate(value: string) {\r\n const exp = /^\\d+(\\.\\d{1,3})?$/;\r\n return exp.test(value);\r\n },\r\n});\r\n\r\nextend('maxLength', {\r\n validate(value: string, args) {\r\n return value.length <= args.length;\r\n },\r\n params: ['length'],\r\n});\r\n\r\nextend('notEqualTo', {\r\n params: ['other1', 'other2'],\r\n validate(value, { other1, other2 }: Record) {\r\n return value !== other1 && value !== other2;\r\n },\r\n});\r\n\r\nextend('lessThanOrEqualTo', {\r\n params: ['other1'],\r\n validate(value, { other1 }: Record) {\r\n return Number(value) <= Number(other1);\r\n },\r\n});\r\n\r\nextend('largerThanOrEqualTo', {\r\n params: ['other1'],\r\n validate(value, { other1 }: Record) {\r\n return Number(value) >= Number(other1);\r\n },\r\n});\r\n\r\nVue.component('ValidationProvider', ValidationProvider);\r\nVue.component('ValidationObserver', ValidationObserver);\r\n","import Vue from 'vue';\r\nimport vueFilePond from 'vue-filepond';\r\nimport 'filepond/dist/filepond.min.css';\r\n\r\nVue.component('FilePond', vueFilePond());\r\n","import 'core-js/stable';\r\nimport 'regenerator-runtime/runtime';\r\nimport Vue from 'vue';\r\nimport { Config } from './utils/Config';\r\nimport App from './App.vue';\r\nimport router from './router';\r\nimport i18n from './i18n/i18n';\r\nimport './filters';\r\nimport './plugins';\r\nimport authService, { ApplicationPaths } from './services/AuthService';\r\nimport telemetryService from './services/TelemetryService';\r\nimport { Consoler } from './utils/Consoler';\r\n\r\nVue.config.productionTip = false;\r\n\r\nVue.config.errorHandler = (err, vm, info) => {\r\n telemetryService.trackException(err);\r\n\r\n // Original logic from vue.\r\n if (process.env.NODE_ENV !== 'production') {\r\n (Vue as any).util.warn(`Error in ${info}: \"${err.toString()}\"`, vm);\r\n }\r\n // eslint-disable-next-line no-console\r\n console.error(err);\r\n};\r\n\r\nConfig.loadSettings().then(async () => {\r\n authService.setConfig(\r\n Config.Settings.ClientB2C,\r\n ApplicationPaths.LoginCallback,\r\n ApplicationPaths.LogOutCallback\r\n );\r\n\r\n if (Config.Settings.ApplicationInsightsInstrumentationKey) {\r\n telemetryService.initialize(\r\n Config.Settings.ApplicationInsightsInstrumentationKey\r\n );\r\n } else {\r\n Consoler.debugWarn(\r\n 'Application Insights instrumentation key not found. Telemetry will be disabled.'\r\n );\r\n }\r\n\r\n new Vue({\r\n router,\r\n i18n,\r\n render: (h) =>\r\n h(App, {\r\n props: {\r\n logo: '/img/sodra-logo.svg',\r\n },\r\n }),\r\n }).$mount('#app');\r\n});\r\n","import { store } from '@/store';\r\n\r\nimport {\r\n Module,\r\n VuexModule,\r\n Mutation,\r\n Action,\r\n getModule,\r\n} from 'vuex-module-decorators';\r\nimport authService from '@/services/AuthService';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport {\r\n AuthenticationResultStatus,\r\n ReturnStatus,\r\n} from '@/common/services/AuthService';\r\nimport { Route } from 'vue-router';\r\nimport { CommonStore } from '../common';\r\nimport { Profile } from 'oidc-client';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'auth',\r\n dynamic: true,\r\n store,\r\n})\r\nclass AuthModule extends VuexModule {\r\n public isInitialized: boolean = false;\r\n public isAuthenticated = false;\r\n public profile: Profile | null | undefined = null;\r\n private authServiceSubscription = 0;\r\n\r\n private common = new CommonStore(1); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation private commitSetAuthServiceSubscription(id: number) {\r\n this.authServiceSubscription = id;\r\n }\r\n\r\n @Mutation private commitSetIsAuthenticated(isAuthenticated: boolean) {\r\n this.isAuthenticated = isAuthenticated;\r\n }\r\n\r\n @Mutation private commitSetIsInitialized(isInitialized: boolean) {\r\n this.isInitialized = isInitialized;\r\n }\r\n\r\n @Mutation private commitSetProfile(profile: Profile | null | undefined) {\r\n this.profile = profile;\r\n }\r\n\r\n // From common:\r\n @Mutation private commitSetLoadedDate() {\r\n this.common.setLoadedDate();\r\n }\r\n @Mutation private commitClearLoadedDate() {\r\n this.common.clearLoadedDate();\r\n }\r\n @Mutation private commitSetLoadingError(payload: { error: any }) {\r\n this.common.setLoadingError(payload);\r\n }\r\n @Mutation private commitSetLoading() {\r\n this.common.setLoading();\r\n }\r\n @Mutation private commitClearLoading() {\r\n this.common.clearLoading();\r\n }\r\n @Mutation private commitSetLoadingPromise(payload: {\r\n loadingPromise: Promise;\r\n loadingPromiseForId: any;\r\n }) {\r\n this.common.setLoadingPromise(payload);\r\n }\r\n\r\n // ---------------\r\n // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchInitialize() {\r\n if (this.common.isCurrentlyLoading()) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'auth'\r\n );\r\n return this.common.loading.loadingPromise;\r\n }\r\n\r\n this.commitSetLoading();\r\n\r\n if (!this.isInitialized) {\r\n const loadingPromise = this.initialize().finally(() => {\r\n this.commitSetLoadedDate();\r\n this.commitClearLoading();\r\n });\r\n this.commitSetLoadingPromise({\r\n loadingPromise,\r\n loadingPromiseForId: null,\r\n });\r\n return loadingPromise;\r\n }\r\n }\r\n\r\n @Action\r\n public dispatchDeinitialize() {\r\n if (this.authServiceSubscription) {\r\n Consoler.debugLog('Deinitializing auth');\r\n authService.unsubscribe(this.authServiceSubscription);\r\n this.commitSetAuthServiceSubscription(0);\r\n }\r\n this.commitSetIsInitialized(false);\r\n }\r\n\r\n // Returns true if to continue, false if a window.location will be done\r\n @Action\r\n public dispatchLogin(returnTo?: Route): Promise {\r\n let returnUrl = window.location.origin;\r\n if (returnTo) {\r\n returnUrl += returnTo.fullPath;\r\n }\r\n\r\n Consoler.debugLog('Starting sign in, return url', returnUrl);\r\n return authService.signIn({ returnUrl }).then((response: ReturnStatus) => {\r\n if (\r\n response.status === AuthenticationResultStatus.Redirect &&\r\n response.redirectUrl\r\n ) {\r\n window.location.replace(response.redirectUrl);\r\n return Promise.resolve(false);\r\n } else if (response.status === AuthenticationResultStatus.Fail) {\r\n Consoler.debugWarn('Login failed', response);\r\n window.location.replace(window.location.origin);\r\n return Promise.resolve(false);\r\n } else if (response.status === AuthenticationResultStatus.Success) {\r\n return Promise.resolve(true);\r\n }\r\n return Promise.resolve(false);\r\n });\r\n }\r\n\r\n @Action\r\n public dispatchLogout() {\r\n Consoler.debugLog('Starting sign out, return url', window.location.origin);\r\n authService\r\n .signOut({ returnUrl: window.location.origin })\r\n .then((response: ReturnStatus) => {\r\n if (\r\n response.status === AuthenticationResultStatus.Redirect &&\r\n response.redirectUrl\r\n ) {\r\n window.location.replace(response.redirectUrl);\r\n } else if (response.status === AuthenticationResultStatus.Success) {\r\n window.location.replace(window.location.origin);\r\n } else {\r\n Consoler.debugWarn('Logout failed', response);\r\n }\r\n });\r\n }\r\n\r\n // ---------------\r\n // ### private methods ###\r\n // ---------------\r\n @Action\r\n private async initialize(): Promise {\r\n Consoler.debugLog('Initializing auth');\r\n const authServiceSubscription = authService.subscribe(() =>\r\n this.checkAuthentication()\r\n );\r\n this.commitSetAuthServiceSubscription(authServiceSubscription);\r\n\r\n await this.checkAuthentication();\r\n\r\n if (!this.isAuthenticated && (await authService.canAttemptSilentSignin())) {\r\n try {\r\n await authService.signinSilent();\r\n } catch {\r\n // Fail silently. To the user this is the same as not being authenticated.\r\n }\r\n }\r\n\r\n this.commitSetIsInitialized(true);\r\n }\r\n\r\n @Action\r\n private async checkAuthentication() {\r\n const isAuthenticated = await authService.isAuthenticated();\r\n const profile = await authService.getUserProfile();\r\n this.commitSetIsAuthenticated(isAuthenticated);\r\n this.commitSetProfile(profile);\r\n }\r\n}\r\n\r\nexport const authModule = getModule(AuthModule);\r\n","import moment from 'moment';\r\nimport Vue from 'vue';\r\nimport { DateFormats } from '@/utils/Constants';\r\n\r\nVue.filter('dayAndShortMonth', (value: string) =>\r\n dayAndShortMonthFilter(value)\r\n);\r\n\r\nexport function dayAndShortMonthFilter(value: string): string {\r\n return moment(value, 'YYY-MM-DD').format(DateFormats.dayAndShortMonth);\r\n}\r\n","import { arrayParamsSerializer, BaseServiceDefinition } from './BaseService';\r\nimport { DeliveryMessage } from '@/models/QualityData/DeliveryMessage';\r\nimport { PaginatedResult } from '@/models/PaginatedResult{T}';\r\nimport { PaginatedDeliveryMessages } from '@/models/QualityData/PaginatedDeliveryMessages';\r\nimport { fileNameDateFilter } from '@/filters/fileNameDate';\r\nimport moment from 'moment';\r\n\r\nclass DeliveryMessageService extends BaseServiceDefinition {\r\n constructor() {\r\n super();\r\n }\r\n\r\n public byTerm(\r\n term: string,\r\n type: string | null,\r\n pageIndex: number,\r\n pageSize: number\r\n ): Promise> {\r\n return this.get('/api/v1/deliveryMessages/find', {\r\n term,\r\n type,\r\n pageIndex,\r\n pageSize,\r\n })\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public byDates(\r\n fromDate: Date,\r\n toDate: Date,\r\n pageIndex: number,\r\n pageSize: number,\r\n productNames?: string[]\r\n ): Promise {\r\n return this.get(\r\n '/api/v1/deliveryMessages',\r\n {\r\n fromDate: fromDate.toDateString(),\r\n toDate: toDate.toDateString(),\r\n productNames,\r\n pageIndex,\r\n pageSize,\r\n },\r\n arrayParamsSerializer\r\n )\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public getDeliveryMessage(\r\n deliveryMessageNumber: string\r\n ): Promise {\r\n return this.get('/api/v1/deliveryMessages/' + deliveryMessageNumber)\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public async downloadDeliveryNoteAsPdf(\r\n deliveryNoteNumber: string\r\n ): Promise {\r\n await this.downloadFile(\r\n `/api/v1/deliveryMessages/${deliveryNoteNumber}/pdf`,\r\n `delivery_${deliveryNoteNumber}_${fileNameDateFilter(moment())}.pdf`\r\n );\r\n }\r\n\r\n public async downloadDeliveryMessageEudrDataAsCsv(\r\n deliveryMessageNumber: string\r\n ): Promise {\r\n await this.downloadFile(\r\n `/api/v1/deliveryMessages/eudr/${deliveryMessageNumber}/csv`,\r\n `DeliveryEudrData_${deliveryMessageNumber}.csv`\r\n );\r\n }\r\n}\r\n\r\nconst deliveryMessageService: DeliveryMessageService =\r\n new DeliveryMessageService();\r\n\r\nexport default deliveryMessageService;\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MenuItem.vue?vue&type=style&index=0&id=33b05e62&scoped=true&lang=scss&\"","import moment from 'moment';\r\nimport Vue from 'vue';\r\nimport i18n from '@/i18n/i18n';\r\nimport { MonthRange } from '@/models/MonthRange';\r\n\r\nVue.filter('monthRange', (monthRange: MonthRange) =>\r\n monthRangeFilter(monthRange)\r\n);\r\n\r\nexport function monthRangeFilter(monthRange: MonthRange): string {\r\n if (\r\n monthRange.from.year === monthRange.to.year &&\r\n monthRange.from.month === monthRange.to.month\r\n ) {\r\n return i18n\r\n .t('filters.monthRangeFilter.same', [\r\n moment(new Date(monthRange.from.year, monthRange.from.month, 1)).format(\r\n 'MMM'\r\n ),\r\n monthRange.from.year,\r\n ])\r\n .toString();\r\n } else {\r\n return i18n\r\n .t('filters.monthRangeFilter.default', [\r\n moment(new Date(monthRange.from.year, monthRange.from.month, 1)).format(\r\n 'MMM'\r\n ),\r\n monthRange.from.year,\r\n moment(new Date(monthRange.to.year, monthRange.to.month, 1)).format(\r\n 'MMM'\r\n ),\r\n monthRange.to.year,\r\n ])\r\n .toString();\r\n }\r\n}\r\n","import moment from 'moment';\r\nimport Vue from 'vue';\r\nimport { DateFormats } from '@/utils/Constants';\r\n\r\nVue.filter('dateWithTime', (value: moment.MomentInput) =>\r\n dateWithTimeFilter(value)\r\n);\r\n\r\nexport function dateWithTimeFilter(value: moment.MomentInput): string {\r\n if (value) {\r\n const utcDate = moment.utc(value);\r\n const localDate = utcDate.local();\r\n\r\n return localDate.format(DateFormats.dateWithTimeFormat);\r\n }\r\n\r\n return '';\r\n}\r\n","import { CommonStore } from '@/store/common';\r\nimport { store } from '@/store';\r\n\r\nimport {\r\n Module,\r\n VuexModule,\r\n Mutation,\r\n Action,\r\n getModule,\r\n} from 'vuex-module-decorators';\r\nimport moment from 'moment';\r\nimport deliveryMessageService from '@/services/DeliveryMessageService';\r\nimport { defaultPageSize } from '@/utils/RoutingForQData';\r\nimport { PaginatedResult } from '@/models/PaginatedResult{T}';\r\nimport { DeliveryMessage } from '@/models/QualityData/DeliveryMessage';\r\nimport { DeliveryMessageProduct } from '@/models/QualityData/DeliveryMessageProduct';\r\nimport { Consoler } from '@/utils/Consoler';\r\n\r\nexport enum QueryType {\r\n ByDates = 'dates',\r\n ByTerm = 'term',\r\n}\r\n\r\nexport abstract class Search {\r\n public pageIndex: number = 0;\r\n public pageSize: number = defaultPageSize;\r\n public results: PaginatedResult | null = null;\r\n public products: DeliveryMessageProduct[] = [];\r\n public hasUnitsFromBeforeAndAfterBreakpoint: boolean = false;\r\n\r\n public abstract get queryBy(): QueryType;\r\n\r\n public abstract get id(): string;\r\n\r\n public abstract equals(payload: Search): boolean;\r\n}\r\n\r\nexport class ByDatesSearch extends Search {\r\n public from: Date | null = null;\r\n public to: Date | null = null;\r\n public productNames: string[] = [];\r\n\r\n public get queryBy(): QueryType {\r\n return QueryType.ByDates;\r\n }\r\n\r\n public get id(): string {\r\n return `${moment(this.from).toISOString()}|${moment(\r\n this.to\r\n ).toISOString()}`;\r\n }\r\n\r\n public isSameSearch(\r\n from: Date | null,\r\n to: Date | null,\r\n productNames: string[]\r\n ): boolean {\r\n return (\r\n from !== null &&\r\n to !== null &&\r\n moment(this.from).isSame(from, 'day') &&\r\n moment(this.to).isSame(to, 'day') &&\r\n this.areInProductNames(productNames)\r\n );\r\n }\r\n\r\n public equals(payload: ByDatesSearch): boolean {\r\n if (!payload) {\r\n return false;\r\n }\r\n\r\n return (\r\n moment(this.from).isSame(payload.from, 'day') &&\r\n moment(this.to).isSame(payload.to, 'day') &&\r\n this.areInProductNames(payload.productNames) &&\r\n this.pageIndex === payload.pageIndex &&\r\n this.pageSize === payload.pageSize\r\n );\r\n }\r\n\r\n private areInProductNames(names: string[]): boolean {\r\n return (\r\n names.length === this.productNames.length &&\r\n names.every((name) =>\r\n this.productNames.find((thisProductName) => name === thisProductName)\r\n )\r\n );\r\n }\r\n}\r\n\r\nexport class ByTermSearch extends Search {\r\n public term: string | null = null;\r\n public type: string | null = null;\r\n\r\n public get queryBy(): QueryType {\r\n return QueryType.ByTerm;\r\n }\r\n\r\n public get id(): string {\r\n return `${this.term}|${this.type}`;\r\n }\r\n\r\n public isSameSearch(term: string | null, type: string | null): boolean {\r\n return term === this.term && type === this.type;\r\n }\r\n\r\n public equals(payload: ByTermSearch): boolean {\r\n if (!payload) {\r\n return false;\r\n }\r\n\r\n return (\r\n this.term === payload.term &&\r\n this.type === payload.type &&\r\n this.pageIndex === payload.pageIndex &&\r\n this.pageSize === payload.pageSize\r\n );\r\n }\r\n}\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'deliveryMessages',\r\n dynamic: true,\r\n store,\r\n})\r\nclass DeliveryMessagesModule extends VuexModule {\r\n public search: Search | null = null;\r\n\r\n private common = new CommonStore(10); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get loading() {\r\n return this.common.loading;\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation public commitSetSearch(payload: Search) {\r\n this.search = payload;\r\n }\r\n\r\n @Mutation public commitClearSearch() {\r\n this.search = null;\r\n }\r\n\r\n // From common:\r\n @Mutation private commitSetLoadedDate() {\r\n this.common.setLoadedDate();\r\n }\r\n @Mutation private commitClearLoadedDate() {\r\n this.common.clearLoadedDate();\r\n }\r\n @Mutation private commitSetLoadingError(payload: { error: any }) {\r\n this.common.setLoadingError(payload);\r\n }\r\n @Mutation private commitSetLoading() {\r\n this.common.setLoading();\r\n }\r\n @Mutation private commitClearLoading() {\r\n this.common.clearLoading();\r\n }\r\n @Mutation private commitSetLoadingPromise(payload: {\r\n loadingPromise: Promise;\r\n loadingPromiseForId: any;\r\n }) {\r\n this.common.setLoadingPromise(payload);\r\n }\r\n\r\n // ---------------\r\n // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchLoad(payload: Search): Promise {\r\n if (this.search?.equals(payload) && !this.common.needToReLoad()) {\r\n return Promise.resolve();\r\n }\r\n\r\n const loadingId = payload.id;\r\n\r\n if (this.common.isCurrentlyLoading(loadingId)) {\r\n return this.common.loading.loadingPromise;\r\n }\r\n\r\n this.commitSetLoading();\r\n this.commitClearSearch();\r\n\r\n let loadingPromise: Promise;\r\n\r\n const success = (search: Search) => {\r\n this.commitSetSearch(search);\r\n this.commitSetLoadedDate();\r\n this.commitClearLoading();\r\n };\r\n const error = (e: any): Promise => {\r\n Consoler.debugWarn('Load deliveryMessages failed', error);\r\n this.commitSetLoadingError({ error: e });\r\n return Promise.reject(e);\r\n };\r\n\r\n if (payload.queryBy === QueryType.ByDates) {\r\n const byDatesSearch = payload as ByDatesSearch;\r\n\r\n loadingPromise = deliveryMessageService\r\n .byDates(\r\n byDatesSearch.from as Date,\r\n byDatesSearch.to as Date,\r\n byDatesSearch.pageIndex,\r\n byDatesSearch.pageSize,\r\n byDatesSearch.productNames\r\n )\r\n .then((response) => {\r\n Consoler.debugLog(\r\n 'Load deliveryMessages byDates success',\r\n byDatesSearch,\r\n response\r\n );\r\n byDatesSearch.results = response.results;\r\n byDatesSearch.products = response.products;\r\n byDatesSearch.hasUnitsFromBeforeAndAfterBreakpoint =\r\n response.hasUnitsFromBeforeAndAfterBreakpoint;\r\n success(byDatesSearch);\r\n })\r\n .catch(error);\r\n } else if (payload.queryBy === QueryType.ByTerm) {\r\n const byTermSearch = payload as ByTermSearch;\r\n\r\n loadingPromise = deliveryMessageService\r\n .byTerm(\r\n byTermSearch.term ? byTermSearch.term : '',\r\n byTermSearch.type,\r\n byTermSearch.pageIndex,\r\n byTermSearch.pageSize\r\n )\r\n .then((response) => {\r\n Consoler.debugLog(\r\n 'Load deliveryMessages byTerm success',\r\n byTermSearch,\r\n response\r\n );\r\n byTermSearch.results = response;\r\n success(byTermSearch);\r\n })\r\n .catch(error);\r\n } else {\r\n return Promise.reject();\r\n }\r\n\r\n this.commitSetLoadingPromise({\r\n loadingPromise,\r\n loadingPromiseForId: loadingId,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const deliveryMessagesModule = getModule(DeliveryMessagesModule);\r\n","import Vue from 'vue';\r\nimport Axios from 'axios';\r\nimport { Consoler } from './Consoler';\r\nimport { Settings } from '@/models/Settings';\r\n\r\nclass ConfigDefinition extends Vue {\r\n public readonly LoginEvent: string = 'GlobalEvent.Login';\r\n public readonly LogoutEvent: string = 'GlobalEvent.Logout';\r\n public readonly AddMessageEvent: string = 'GlobalEvent.AddMessage';\r\n public readonly ShowImpersonationModalEvent: string =\r\n 'GlobalEvent.ShowImpersonationModal';\r\n public readonly ShowCustomerSelectionModalEvent: string =\r\n 'GlobalEvent.ShowCustomerSelectionModal';\r\n public readonly ShowFeedbackModalEvent: string =\r\n 'GlobalEvent.ShowFeedbackModal';\r\n\r\n public Settings: Settings = {\r\n ApiBaseUrl: '',\r\n FullConsole: 'false',\r\n ApplicationInsightsInstrumentationKey: '',\r\n ClientB2C: {\r\n ClientUri: '',\r\n ClientId: '',\r\n Authority: '',\r\n Scope: '',\r\n PasswordResetAuthority: '',\r\n PasswordResetAuthorizationEndpoint: '',\r\n RequireAuthenticationAfter: 86400, // 24h\r\n },\r\n ProductColors: {},\r\n ProductDefaultColor: '',\r\n ContactSustainabilityEmailAddress: '',\r\n ContactGeneralEmailAddress: '',\r\n ContactOfficeAddresses: [],\r\n ContactMillAddresses: [],\r\n EudrDownloadsFromDate: '',\r\n };\r\n\r\n public readonly BaseDocumentTitle: string =\r\n process.env.VUE_APP_DOCUMENT_BASE_TITLE ?? '';\r\n public readonly DevPermissionsEnabled: boolean =\r\n process.env.VUE_APP_DEV_PERMISSONS_ENABLED === 'true';\r\n\r\n private readonly SettingsFile: string =\r\n process.env.VUE_APP_SETTINGS_FILE ?? '';\r\n\r\n public get apiBaseUrl(): string {\r\n return this.Settings !== null ? this.Settings.ApiBaseUrl : '';\r\n }\r\n\r\n public get isDevelopment(): boolean {\r\n return process.env.NODE_ENV === 'development';\r\n }\r\n\r\n public getProductColor(productColorCategory: string | null) {\r\n if (productColorCategory) {\r\n return (\r\n this.Settings.ProductColors[productColorCategory] ??\r\n Config.Settings.ProductDefaultColor\r\n );\r\n }\r\n\r\n return Config.Settings.ProductDefaultColor;\r\n }\r\n\r\n public loadSettings(): Promise {\r\n const settingsFileUrl = '/' + this.SettingsFile;\r\n\r\n return Axios.get(settingsFileUrl, {\r\n headers: { Pragma: 'no-cache', 'Cache-Control': 'no-cache' },\r\n })\r\n .then((result) => {\r\n this.Settings = result.data.WebUISettings;\r\n Consoler.debugLog('Settings set:', this.Settings);\r\n })\r\n .catch((error) => {\r\n Consoler.warn('Failed reading settings file', error);\r\n });\r\n }\r\n}\r\n\r\nexport const Config = new ConfigDefinition();\r\n","export enum ParameterPsolId {\r\n FibreWidth = 2,\r\n\r\n FibreShape = 3,\r\n\r\n FibreLength = 4,\r\n\r\n FibreStrength = 5,\r\n\r\n Fines = 6,\r\n\r\n BrightnessOnline = 8,\r\n\r\n Ph = 9,\r\n\r\n DirtContentOnline = 11,\r\n\r\n DirtContentManual = 14,\r\n\r\n Xylan = 44,\r\n\r\n SheetBasisWeight = 47,\r\n\r\n Viscosity = 51,\r\n\r\n CalciumContent = 52,\r\n\r\n AlkaliResistanceR18 = 53,\r\n\r\n AlkaliResistanceR10 = 54,\r\n\r\n CopperContent = 55,\r\n\r\n IronContent = 56,\r\n\r\n MagnesiumContent = 57,\r\n\r\n AshContent = 58,\r\n\r\n ExtractiveContent = 59,\r\n\r\n SiliconContent = 60,\r\n\r\n ManganeseContent = 61,\r\n\r\n Coarseness = 62,\r\n\r\n MoistureContent = 63,\r\n\r\n NetWeight = 67,\r\n\r\n Betulinol = 69,\r\n\r\n AlphaCellulose = 70,\r\n\r\n GrossWeight = 86,\r\n\r\n FinesP = 89,\r\n}\r\n","export enum SustainabilityDataType {\r\n EnvironmentalData = 'EnvironmentalData',\r\n CarbonFootprints = 'CarbonFootprints',\r\n OriginOfWood = 'OriginOfWood',\r\n CertifiedVolumes = 'CertifiedVolumes',\r\n WaterFootprints = 'WaterFootprints',\r\n}\r\n"],"sourceRoot":""}