{"version":3,"file":"funnel.c8609830d9da6722032a.js","mappings":"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","sources":["webpack:///./Onlia/Scripts/onlia/funnel/mixins/api.js","webpack:///./Onlia/Scripts/onlia/funnel/components/async-page-container.js","webpack:///./Onlia/Scripts/onlia/funnel/components/async-step.js","webpack:///./Onlia/Scripts/onlia/funnel/components/custom-template-provider.js","webpack:///./Onlia/Scripts/onlia/funnel/components/funnel-navigation.js","webpack:///./Onlia/Scripts/onlia/funnel/components/funnel-page-container.js","webpack:///./Onlia/Scripts/onlia/funnel/components/funnel-progress-bar.js","webpack:///./Onlia/Scripts/onlia/funnel/components/funnel.js","webpack:///./Onlia/Scripts/onlia/funnel/components/gif-list.js","webpack:///./Onlia/Scripts/onlia/funnel/components/policy-card.js","webpack:///./Onlia/Scripts/onlia/funnel/components/step-group-item.js","webpack:///./Onlia/Scripts/onlia/funnel/components/step-group.js","webpack:///./Onlia/Scripts/onlia/funnel/components/step.js","webpack:///./Onlia/Scripts/onlia/funnel/components/total-premium-swtich.js","webpack:///./Onlia/Scripts/onlia/funnel/directives/align-with.js","webpack:///./Onlia/Scripts/onlia/funnel/directives/check-if-disable-condition.js","webpack:///./Onlia/Scripts/onlia/funnel/directives/check-if-disable.js","webpack:///./Onlia/Scripts/onlia/funnel/directives/copy-content-to.js","webpack:///./Onlia/Scripts/onlia/funnel/directives/disable-select-placeholder.js","webpack:///./Onlia/Scripts/onlia/funnel/directives/float-total-block.js","webpack:///./Onlia/Scripts/onlia/funnel/directives/track-checkbox.js","webpack:///./Onlia/Scripts/onlia/funnel/index.js","webpack:///./Onlia/Scripts/onlia/funnel/utils/FunnelComponentsStates.js","webpack:///./Onlia/Scripts/onlia/funnel/utils/page-load-util.js","webpack:///./Onlia/Scripts/onlia/products/auto/components/car-auto-complete.js","webpack:///./Onlia/Scripts/onlia/products/auto/components/car-commercial-use.js","webpack:///./Onlia/Scripts/onlia/products/auto/components/car-funnel.js","webpack:///./Onlia/Scripts/onlia/products/auto/components/car-init.js","webpack:///./Onlia/Scripts/onlia/products/auto/components/car-owner-details.js","webpack:///./Onlia/Scripts/onlia/products/auto/components/car-selection.js","webpack:///./Onlia/Scripts/onlia/products/auto/components/car-typeahead.js","webpack:///./Onlia/Scripts/onlia/products/auto/components/change-funnel-temp.js","webpack:///./Onlia/Scripts/onlia/products/auto/mixins/changeCarApi.js","webpack:///./Onlia/Scripts/onlia/products/auto/components/change-funnel.js","webpack:///./Onlia/Scripts/onlia/products/auto/components/driver-additional-details.js","webpack:///./Onlia/Scripts/onlia/products/auto/components/driver-people.js","webpack:///./Onlia/Scripts/onlia/products/auto/components/long-term-parking.js","webpack:///./Onlia/Scripts/onlia/products/auto/components/scoped-driver.js","webpack:///./Onlia/Scripts/onlia/products/auto/directives/driver-disabled-fields.js","webpack:///./Onlia/Scripts/onlia/products/auto/mixins/api.js","webpack:///./Onlia/Scripts/onlia/products/auto/mixins/changeCarTempApi.js","webpack:///./Onlia/Scripts/onlia/products/auto/validation/car-name-validator.js","webpack:///./Onlia/Scripts/onlia/products/auto/validation/directives/displayif-first-year-license.js","webpack:///./Onlia/Scripts/onlia/products/auto/validation/driver-license-dob-validator.js","webpack:///./Onlia/Scripts/onlia/products/auto/validation/vin-validator.js","webpack:///./Onlia/Scripts/onlia/products/account/mixins/api.js","webpack:///./Onlia/Scripts/onlia/products/account/components/account-funnel.js","webpack:///./Onlia/Scripts/onlia/products/account/mixins/changeAccountApi.js","webpack:///./Onlia/Scripts/onlia/products/account/components/account-change-funnel.js","webpack:///./Onlia/Scripts/onlia/products/account/components/account-owner-personal-info.js","webpack:///./Onlia/Scripts/onlia/products/account/mixins/password-utils.js","webpack:///./Onlia/Scripts/onlia/products/account/components/account-owner-password.js","webpack:///./Onlia/Scripts/onlia/products/account/mixins/exclude-driver-utils.js","webpack:///./Onlia/Scripts/onlia/products/account/components/exclude-driver.js","webpack:///./Onlia/Scripts/onlia/products/account/components/exclude-driver-list.js","webpack:///./Onlia/Scripts/onlia/products/account/components/change-payment.js","webpack:///./Onlia/Scripts/onlia/products/account/components/change-policy-holder-details.js","webpack:///./Onlia/Scripts/onlia/products/account/components/change-policy-holder-password.js","webpack:///./Onlia/Scripts/onlia/products/account/components/payment-explanation-block.js","webpack:///./Onlia/Scripts/onlia/products/account/components/payment-mvr-impact-popup.js","webpack:///./Onlia/Scripts/onlia/products/account/components/email-subscribe-consent.js","webpack:///./Onlia/Scripts/onlia/products/account/components/sms-subscribe-consent.js","webpack:///./Onlia/Scripts/onlia/products/account/validation/account-primary-email-validator.js","webpack:///./Onlia/Scripts/onlia/products/account/validation/account-recovery-email-validator.js","webpack:///./Onlia/Scripts/onlia/products/account/validation/password-strength-validator.js","webpack:///./Onlia/Scripts/onlia/products/account/validation/repeated-password-validator.js","webpack:///./Onlia/Scripts/onlia/products/account/validation/account-confirm-email-validator.js","webpack:///./Onlia/Scripts/onlia/products/auto/index.js","webpack:///./Onlia/Scripts/onlia/products/property/index.js","webpack:///./Onlia/Scripts/onlia/products/shared/index.js","webpack:///./Onlia/Scripts/onlia/products/property/components/add-additional-home-owners.js","webpack:///./Onlia/Scripts/onlia/products/property/components/additional-home-owner.js","webpack:///./Onlia/Scripts/onlia/products/property/components/change-property-coverages.js","webpack:///./Onlia/Scripts/onlia/products/property/components/change-property-details-form.js","webpack:///./Onlia/Scripts/onlia/products/property/components/change-property-form.js","webpack:///./Onlia/Scripts/onlia/products/property/components/change-property-funnel-temp.js","webpack:///./Onlia/Scripts/onlia/products/property/components/change-property-homeowners.js","webpack:///./Onlia/Scripts/onlia/products/property/components/change-property-mortgage.js","webpack:///./Onlia/Scripts/onlia/products/property/components/myzone-property-summary-total-premium.js","webpack:///./Onlia/Scripts/onlia/products/property/components/myzone-property-summary.js","webpack:///./Onlia/Scripts/onlia/products/property/components/property-credit-check.js","webpack:///./Onlia/Scripts/onlia/products/property/components/property-funnel.js","webpack:///./Onlia/Scripts/onlia/products/property/components/property-premium-threshold-check.js","webpack:///./Onlia/Scripts/onlia/products/property/components/property-questions.js","webpack:///./Onlia/Scripts/onlia/products/property/directives/adjust-container-wide.js","webpack:///./Onlia/Scripts/onlia/products/property/directives/data-property-opta.js","webpack:///./Onlia/Scripts/onlia/products/property/directives/init-consent.js","webpack:///./Onlia/Scripts/onlia/products/property/mixins/api.js","webpack:///./Onlia/Scripts/onlia/products/property/mixins/changePropertyTempApi.js","webpack:///./Onlia/Scripts/onlia/products/property/mixins/shared.js","webpack:///./Onlia/Scripts/onlia/products/property/validation/input-year-validator.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/address-component.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/address-typeahead.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/cancellation-date-changed.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/company-name-component.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/company-name-typeahead.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/coverage-group.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/coverage-item.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/coverage-stack.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/coverage-steps.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/coverages-start-date.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/final-step.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/ga-ecommerce-checkout.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/ga-ecommerce-on-submit.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/ga-track-virtual-page.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/generic-pill-button.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/mortgage-company.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/opcf-modal.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/payment-option-selection.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/pipeda-modal.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/policy-detail-card-item.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/policy-detail-card.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/save-for-later-consent.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/save-for-later.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/step-indicator-api-provider.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/stepper.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/store-temp-changes.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/total-policy-premium.js","webpack:///./Onlia/Scripts/onlia/products/shared/components/unit-number.js","webpack:///./Onlia/Scripts/onlia/products/shared/directives/capitalize-input.js","webpack:///./Onlia/Scripts/onlia/products/shared/directives/coverage-related-field.js","webpack:///./Onlia/Scripts/onlia/products/shared/directives/display-options-init.js","webpack:///./Onlia/Scripts/onlia/products/shared/directives/format-phone.js","webpack:///./Onlia/Scripts/onlia/products/shared/directives/lowercase-input.js","webpack:///./Onlia/Scripts/onlia/products/shared/directives/move-submit-button.js","webpack:///./Onlia/Scripts/onlia/products/shared/directives/remove-html-tag.js","webpack:///./Onlia/Scripts/onlia/products/shared/directives/require-toggle-yes.js","webpack:///./Onlia/Scripts/onlia/products/shared/directives/set-property.js","webpack:///./Onlia/Scripts/onlia/products/shared/directives/slider-init.js","webpack:///./Onlia/Scripts/onlia/products/shared/directives/trim-input.js","webpack:///./Onlia/Scripts/onlia/products/shared/directives/update-policy.js","webpack:///./Onlia/Scripts/onlia/products/shared/directives/uppercase-input.js","webpack:///./Onlia/Scripts/onlia/products/shared/mixins/api.js","webpack:///./Onlia/Scripts/onlia/products/shared/mixins/coverages-utils.js","webpack:///./Onlia/Scripts/onlia/products/shared/mixins/ecommerce-tracking.js","webpack:///./Onlia/Scripts/onlia/products/shared/mixins/scroll-input-to-page-top.js","webpack:///./Onlia/Scripts/onlia/products/shared/mixins/storage-utils.js","webpack:///./Onlia/Scripts/onlia/products/shared/validation/address-name-validator.js","webpack:///./Onlia/Scripts/onlia/products/shared/validation/credit-card-security-code-validator.js","webpack:///./Onlia/Scripts/onlia/products/shared/validation/credit-card-validator-expiration.js","webpack:///./Onlia/Scripts/onlia/products/shared/mixins/credit-card-utils.js","webpack:///./Onlia/Scripts/onlia/products/shared/validation/credit-card-validator.js","webpack:///./Onlia/Scripts/onlia/products/shared/validation/postal-code-validator.js","webpack:///./Onlia/Scripts/onlia/products/shared/validation/unit-number-validator.js","webpack:///./Onlia/Scripts/onlia/products/shared/validation/zero-to-hundred-validator.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/premium-discount.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/shopping-basket-card.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/shopping-basket-checkout-total-premium.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/shopping-basket-container.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/shopping-basket-coverages-card.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/shopping-basket-empty-set.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/shopping-basket-funnel.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/shopping-basket-new-insurance.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/shopping-basket-payment.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/shopping-basket-policy.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/shopping-basket-product-select.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/shopping-basket-summary-premium.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/shopping-basket-summary.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/shopping-basket-total-premium.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/components/shopping-basket.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/index.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/mixins/api.js","webpack:///./Onlia/Scripts/onlia/shoppingbasket/mixins/total-premium-utils.js"],"sourcesContent":["import { shared } from '@Apis';\r\n\r\nexport default {\r\n computed: {\r\n api() {\r\n return shared;\r\n }\r\n }\r\n};\r\n","import Vue from 'vue';\r\nimport axios from 'axios';\r\nimport api from '../mixins/api';\r\n\r\nVue.component('async-page-container', {\r\n mixins: [ api ],\r\n props: {\r\n model: Object,\r\n steps: Array,\r\n checkoutUrl: String,\r\n pageUrl: String\r\n },\r\n data() {\r\n return {\r\n asyncPage: '',\r\n asyncPageIndex: 0,\r\n isAsyncPageLoaded: false\r\n };\r\n },\r\n computed: {\r\n funnelMethods() {\r\n return {\r\n saveActiveStep: this.saveActiveStep\r\n };\r\n }\r\n },\r\n created() {\r\n const vm = this;\r\n\r\n vm.storeName = vm.$options._componentTag;\r\n vm.$store.registerModule(vm.storeName, {\r\n namespaced: true,\r\n\r\n state: {\r\n model: vm.model\r\n },\r\n\r\n mutations: {\r\n mutate(state, payload) {\r\n state.model = payload;\r\n }\r\n }\r\n });\r\n\r\n vm.getAsyncPage(vm.$store.state[vm.storeName].model);\r\n },\r\n\r\n methods: {\r\n saveActiveStep(step) {\r\n return axios.post(this.api.saveActiveStep, {\r\n ActiveStep: step || this.$store.state[this.storeName].model.ActiveStep,\r\n IsInChangeMode: typeof this.$store.state[this.storeName].model.IsInChangeMode !== 'undefined' ?\r\n this.$store.state[this.storeName].model.IsInChangeMode :\r\n false\r\n });\r\n },\r\n getAsyncPage(model) {\r\n const vm = this;\r\n\r\n const currentStep = vm.steps.find(x => x.StepNumber === model.AsyncStepIndex);\r\n\r\n if (currentStep && currentStep.AsyncPage) {\r\n Vue.component('async-page', (resolve) => {\r\n axios.get(`${currentStep.AsyncPage}?sbpolicyid=${model.Id}`).then((response) => {\r\n const compiledHtml = Vue.compile(response.data);\r\n\r\n this.isAsyncPageLoaded = true;\r\n\r\n resolve({\r\n render: compiledHtml.render,\r\n staticRenderFns: compiledHtml.staticRenderFns\r\n });\r\n });\r\n });\r\n\r\n vm.asyncPageIndex = currentStep.StepNumber;\r\n vm.asyncPage = 'async-page';\r\n }\r\n },\r\n\r\n //selectPolicyDetailsAsyncStep(policyId) {\r\n // const vm = this;\r\n\r\n // axios.post(vm.api.selectPolicyDetailsAsyncStep, {\r\n // policyId\r\n // }).then((response) => {\r\n // if (response.data.RedirectUrl) {\r\n // window.location.replace(response.data.RedirectUrl);\r\n // }\r\n // });\r\n //}\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport axios from 'axios';\r\nimport windowSize from '@Shared/mixins/window-size';\r\nimport { asyncParallelTasks } from '../../forms/utils/async-parallel-tasks';\r\nimport { IS_DEV } from '@Shared/settings';\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component('async-step', {\r\n mixins: [windowSize],\r\n\r\n props: {\r\n step: Number,\r\n stepId: String,\r\n api: Object,\r\n funnelProperties: Object,\r\n storeName: String,\r\n parentMethods: Object\r\n },\r\n\r\n data() {\r\n return {\r\n onBeforeSubmitQueue: [],\r\n onAfterSubmitQueue: [],\r\n funnelMethods: {\r\n ...this.parentMethods,\r\n submitStep: this.handleSubmit\r\n }\r\n };\r\n },\r\n\r\n computed: {\r\n stepStateActive: function () {\r\n return this.step === this.Model.ActiveStep;\r\n },\r\n Model: function () {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n asyncPageContainer() {\r\n return this.getComponent('async-page-container');\r\n }\r\n },\r\n\r\n methods: {\r\n pushOnBeforeSubmitQueue: function (callback) {\r\n this.onBeforeSubmitQueue.push(callback);\r\n },\r\n\r\n pushOnAfterSubmitQueue: function (callback) {\r\n this.onAfterSubmitQueue.push(callback);\r\n },\r\n\r\n navigateToPreviousStep: function () {\r\n const vm = this;\r\n axios.post(vm.api.stepDownAsyncStep, vm.Model).then(({ data }) => {\r\n if (vm.asyncPageContainer.model.Id !== data.PolicyContext.Id) {\r\n if (data.PolicyContext) {\r\n if (data.PolicyContext.AsyncStepIndex < 1) {\r\n UnsavedChangesPopup.redirect(vm.asyncPageContainer.pageUrl);\r\n }\r\n else {\r\n UnsavedChangesPopup.redirect(data.PolicyContext.NextStepsUrl);\r\n }\r\n }\r\n }\r\n else {\r\n if (data.PolicyContext.AsyncStepIndex < 1) {\r\n UnsavedChangesPopup.redirect(vm.asyncPageContainer.pageUrl);\r\n }\r\n else {\r\n vm.asyncPageContainer.getAsyncPage(data.PolicyContext);\r\n }\r\n }\r\n });\r\n },\r\n\r\n async validateFormFields() {\r\n this.$validator.fields.items.map((field) => {\r\n if (field.rules['val_compulsory']) {\r\n field.update({\r\n rules: {\r\n val_compulsory: field.rules.val_compulsory,\r\n ...field.rules\r\n }\r\n });\r\n }\r\n });\r\n\r\n return await this.$validator.validate();\r\n },\r\n\r\n async handleSubmit() {\r\n try {\r\n const isValid = await this.validateFormFields();\r\n\r\n if (!isValid) {\r\n Vue.prototype.handleInvalidForm(this);\r\n return;\r\n }\r\n\r\n this.$set(this.Model, 'ActiveAsyncStep', this.asyncPageContainer.model.AsyncStepIndex);\r\n this.$set(this.Model, 'ActiveStepID', this.stepId);\r\n this.$store.commit(`${this.storeName}/mutate`, this.Model);\r\n\r\n const hasBeforeTasksSucceeded = await asyncParallelTasks(this.onBeforeSubmitQueue);\r\n\r\n if (!hasBeforeTasksSucceeded) return;\r\n\r\n const { data, status } = await axios.post(this.api.submitAsyncStep, {\r\n ...this.$store.state[this.storeName].model\r\n });\r\n\r\n if (status === 200) {\r\n const hasAfterTasksSucceeded = await asyncParallelTasks(this.onAfterSubmitQueue);\r\n\r\n if (hasAfterTasksSucceeded) {\r\n this.onBeforeSubmitQueue = [];\r\n this.onAfterSubmitQueue = [];\r\n\r\n if (data.PolicyContext) {\r\n UnsavedChangesPopup.redirect(data.PolicyContext.NextStepsUrl);\r\n }\r\n else {\r\n UnsavedChangesPopup.redirect(this.asyncPageContainer.checkoutUrl);\r\n }\r\n }\r\n else {\r\n this.asyncPageContainer.getAsyncPage(data.PolicyContext);\r\n }\r\n }\r\n //else {\r\n // alert(data.Message);\r\n //}\r\n }\r\n catch (error) {\r\n (IS_DEV && console.error('handleSubmit error:', error));\r\n\r\n //if (error.message) {\r\n // alert(error.message);\r\n //}\r\n }\r\n }\r\n }\r\n});\r\n","import Vue from \"vue\";\r\n\r\n// Use this component for attaching custom template to a vue component\r\nVue.component('custom-template-provider', {\r\n props: {\r\n rawTemplate: String,\r\n componentName: String,\r\n options: Object\r\n },\r\n inject: [\"$validator\"],\r\n render: function (createElement) {\r\n return createElement(this.componentName, {\r\n inlineTemplate: Vue.compile(this.rawTemplate),\r\n ...this.options\r\n })\r\n }\r\n})","import Vue from 'vue';\r\nimport { mapGetters } from 'vuex';\r\nimport slotUtils from '@Shared/mixins/slot-utils';\r\nimport { APP_EL_ID, IS_DEV } from '@Shared/settings';\r\nimport focusTrap from '@Shared/mixins/focus-trap';\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component('funnel-navigation', {\r\n mixins: [ slotUtils, focusTrap ],\r\n\r\n props: {\r\n funnelMethods: {\r\n type: Object,\r\n required: true\r\n },\r\n storeName: {\r\n type: String,\r\n required: true\r\n },\r\n stepData: {\r\n type: Array,\r\n required: true,\r\n validator(stepData) {\r\n return stepData.every(({ Icon, Number, Steps, Title }) => (\r\n typeof Icon === 'string' &&\r\n typeof Title === 'string' &&\r\n typeof Number === 'number' &&\r\n Array.isArray(Steps)\r\n ));\r\n }\r\n }\r\n },\r\n data() {\r\n return {\r\n completedSteps: [],\r\n pageTitle: '',\r\n isOpenInMobile: false,\r\n willRenderOnMobile: false,\r\n funnelTopProgressBarHeight: 60\r\n };\r\n },\r\n computed: {\r\n ...mapGetters([\r\n 'breakpointPhone',\r\n 'breakpointMobile'\r\n ]),\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n willRender() {\r\n return (!this.breakpointMobile || this.willRenderOnMobile);\r\n },\r\n navHeight() {\r\n return this.$store.getters.currentHeaderHeight + this.funnelTopProgressBarHeight;\r\n },\r\n funnelNavigationStyles() {\r\n return {\r\n position: 'fixed',\r\n top: `${this.navHeight}px`\r\n }\r\n },\r\n },\r\n watch: {\r\n breakpointMobile: {\r\n handler: 'checkBreakpoint'\r\n }\r\n },\r\n\r\n created() {\r\n this._isAppendedToBody = false;\r\n this._isOpenInMobileUnWatcher = null;\r\n this.startOverModalId = 'startOverModalId';\r\n this._outsideClick = (e) => this.handleOutsideClick(e);\r\n \r\n this.$eventBus.$on('funnel:open-step-indicator-mobile', this.toggleVisibilityOnMobile);\r\n this.$eventBus.$on('stepIndicator:activateStep', this.activateStep);\r\n this.$eventBus.$on('funnelNavigation:StartOver', this.openStarOverModal);\r\n\r\n const activeStepData = this.stepData.find(st => st.Steps.find(s => s.Index == this.Model.ActiveStep));\r\n\r\n this.$eventBus.$emit('funnel:load-step-indicator-data', {\r\n Index: activeStepData.Number,\r\n TotalCount: this.stepData.length,\r\n Title: activeStepData.Title,\r\n Icon: activeStepData.Icon\r\n });\r\n },\r\n mounted() {\r\n this.checkBreakpoint(this.breakpointMobile);\r\n this.registerStartOverModalCloseHandler();\r\n },\r\n beforeDestroy() {\r\n this.$eventBus.$off('funnel:open-step-indicator-mobile', this.toggleVisibilityOnMobile);\r\n this.$eventBus.$off('stepIndicator:activateStep', this.activateStep);\r\n this.$eventBus.$off('funnelNavigation:StartOver', this.openStarOverModal);\r\n },\r\n\r\n methods: {\r\n areLessThanActiveStep(stepNumbers) {\r\n for (let i = 0; i < stepNumbers.length; i++) {\r\n if (stepNumbers[i] >= this.Model.ActiveStep) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n activateStep(steps, stepNumbers) {\r\n const vm = this;\r\n\r\n if (vm.areLessThanActiveStep(stepNumbers)) {\r\n vm.Model.ActiveStep = stepNumbers[0];\r\n\r\n vm.funnelMethods.saveActiveStep(vm.Model.ActiveStep).then(() => {\r\n if (window.location.pathname !== steps[0]) {\r\n UnsavedChangesPopup.redirect(steps[0]);\r\n return;\r\n }\r\n\r\n vm.$store.commit(`${vm.storeName}/mutate`, vm.Model);\r\n });\r\n }\r\n },\r\n\r\n toggleVisibilityOnMobile() {\r\n this.isOpenInMobile = !this.isOpenInMobile;\r\n\r\n if (this.isOpenInMobile) {\r\n document.body.addEventListener('click', this._outsideClick);\r\n } else {\r\n document.body.removeEventListener('click', this._outsideClick);\r\n }\r\n \r\n this.breakpointMobile && this.$eventBus.$emit(`funnelNavigation:${this.isOpenInMobile ? 'open' : 'close'}`);\r\n this.$eventBus.$emit('funnel:toggle-chevron'); \r\n },\r\n\r\n handleInitialOpenOnMobile(isOpen) {\r\n if (isOpen) {\r\n this.willRenderOnMobile = true;\r\n this._isOpenInMobileUnWatcher();\r\n }\r\n },\r\n handleOutsideClick(event) {\r\n const btn = document.getElementById('funnelProgressBarButton');\r\n if (event.target !== btn && !btn.contains(event.target) && (this.$el !== event.target && !this.$el.contains(event.target))) {\r\n this.toggleVisibilityOnMobile();\r\n }\r\n },\r\n\r\n checkBreakpoint(isMobile) {\r\n if (isMobile && !this._isOpenInMobileUnWatcher) {\r\n this._isOpenInMobileUnWatcher = this.$watch('isOpenInMobile', this.handleInitialOpenOnMobile);\r\n }\r\n\r\n if (isMobile && !this._isAppendedToBody) {\r\n this.appendToMain();\r\n return;\r\n }\r\n\r\n if (!isMobile && this._isAppendedToBody) {\r\n this.removeFromMain();\r\n }\r\n },\r\n appendToMain() {\r\n try {\r\n // document.body.append(this.$el);\r\n document.getElementById(APP_EL_ID).append(this.$el);\r\n this._isAppendedToBody = true;\r\n }\r\n catch (error) {\r\n (IS_DEV && console.error('appendToMain error:', error));\r\n }\r\n },\r\n removeFromMain() {\r\n try {\r\n // document.body.removeChild(this.$el);\r\n document.getElementById(APP_EL_ID).removeChild(this.$el);\r\n this._isAppendedToBody = false;\r\n\r\n const aside = document.getElementById('funnelNav');\r\n\r\n if (aside) {\r\n aside.append(this.$el);\r\n }\r\n }\r\n catch (error) {\r\n (IS_DEV && console.error('removeFromMain error:', error));\r\n }\r\n },\r\n createContentContainer(createElement) {\r\n return createElement('div', {\r\n class: 'o-funnelNavigation__steps',\r\n on: {\r\n click: event => event.stopPropagation()\r\n },\r\n attrs: {\r\n ...(this.breakpointMobile && {\r\n // Required to set focus on mobile overlay. Without it, user will keep tabbing through the body.\r\n tabindex: 0\r\n })\r\n },\r\n ref: 'stepsContainer'\r\n }, [\r\n this.createCloseButton(createElement),\r\n this.getSlot('default')\r\n ]);\r\n },\r\n createCloseButton(createElement) {\r\n if (!this.breakpointMobile) return null;\r\n\r\n return createElement('onlia-button', {\r\n class: 'o-funnelNavigation__closeButton',\r\n props: {\r\n variant: 'none',\r\n tag: 'button',\r\n type: 'button'\r\n },\r\n on: {\r\n click: this.toggleVisibilityOnMobile\r\n }\r\n }, [\r\n createElement('span', { class: 'icon-close' })\r\n ]);\r\n },\r\n wrapWithTransition(createElement, rootEl) {\r\n return createElement('transition', {\r\n props: {\r\n appear: true,\r\n name: 'funnelNav',\r\n duration: {\r\n enter: 500,\r\n leave: 300\r\n }\r\n },\r\n on: {\r\n afterEnter: this.setFocusOnContainer\r\n }\r\n }, [ rootEl ]);\r\n },\r\n\r\n /**\r\n * We have to set focus on the container for correct tabbing order.\r\n */\r\n async setFocusOnContainer() {\r\n const { stepsContainer } = this.$refs;\r\n await this.$nextTick();\r\n stepsContainer.focus();\r\n },\r\n\r\n openStarOverModal() {\r\n this.$root.$emit('dynamic::modal::show', this.startOverModalId);\r\n },\r\n\r\n async startOver() {\r\n try {\r\n const apiParams = {\r\n ActiveStep: 1, //vm.startOverStep,\r\n IsInBundle: this.Model.IsInBundle\r\n };\r\n\r\n await this.funnelMethods.startOver(apiParams);\r\n\r\n UnsavedChangesPopup.redirect(window.location.href.replace(window.location.search, ''));\r\n }\r\n catch (error) {\r\n (IS_DEV && console.error('startOver error:', error));\r\n }\r\n },\r\n\r\n registerStartOverModalCloseHandler() {\r\n const vm = this;\r\n this.$eventBus.$on(this.$globalModal.events.ok, ({ id }) => {\r\n if (vm.startOverModalId === id) {\r\n vm.startOver();\r\n }\r\n });\r\n }\r\n },\r\n\r\n render(createElement) {\r\n /**\r\n * On mobile the component will not render anything until 'isOpenInMobile' is true. One it is set to true,\r\n * 'willRenderOnMobile' will be set to true, and the component will render. After the first successful render,\r\n * v-show will be used to toggle the visibility of the component,\r\n */\r\n // if (!this.willRender) return null;\r\n\r\n const rootEl = createElement('div', {\r\n class: 'o-funnelNavigation',\r\n style: this.funnelNavigationStyles,\r\n on: {\r\n ...(this.breakpointMobile && {\r\n click: this.toggleVisibilityOnMobile,\r\n keydown: this.$_focusTrap_trapFocus\r\n })\r\n },\r\n // ...(this.breakpointMobile && {\r\n directives: [\r\n {\r\n name: 'show',\r\n value: this.isOpenInMobile\r\n }\r\n ],\r\n // })\r\n }, [ this.createContentContainer(createElement) ]);\r\n\r\n if (this.breakpointMobile) {\r\n return this.wrapWithTransition(createElement, rootEl);\r\n }\r\n\r\n return rootEl;\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport slotUtils from '@Shared/mixins/slot-utils';\r\nimport resizeObserver from '@Shared/mixins/resize-observer';\r\nimport ScrollUtil from '@Shared/utils/ScrollUtil';\r\nimport { IS_DEV } from '@Shared/settings';\r\nimport Components from '../utils/FunnelComponentsStates';\r\n\r\nconst TOTAL_PREMIUM_CLASS = 'o-totalPremium__container';\r\nconst TOTAL_PREMIUM_CONDENSED_CLASS = 'o-totalPremium__container -condensed';\r\n\r\n// Transitions required to sync the header nav size change, with the premium header top repositioning\r\nconst HEADER_TRANSITION = {\r\n shrink: 'top 0.3s cubic-bezier(0.39, 0.575, 0.565, 1)',\r\n grow: 'top 0.3s cubic-bezier(0.47, 0, 0.745, 0.715)'\r\n};\r\n\r\nVue.component('funnel-page-container', {\r\n mixins: [ slotUtils, resizeObserver ],\r\n props: {\r\n isTotalPremiumReady: {\r\n type: Boolean,\r\n default: null\r\n },\r\n storeName: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n data() {\r\n return {\r\n premiumHeight: null,\r\n hasFunnelTopProgressBar: this.storeName !== \"shoppingBasketStore\" ? true : false,\r\n funnelTopProgressBarHeight: this.storeName !== \"shoppingBasketStore\" ? 60 : null,\r\n isHeaderCondensed: ScrollUtil.scrollTop > 0,\r\n bodyTop: 0,\r\n headerTopTransition: HEADER_TRANSITION.shrink,\r\n hasHeaderAppeared: typeof this.isTotalPremiumReady === 'boolean' ? this.isTotalPremiumReady : true\r\n };\r\n },\r\n computed: {\r\n navHeight() {\r\n if (this.hasFunnelTopProgressBar) {\r\n return this.$store.getters.currentHeaderHeight + this.funnelTopProgressBarHeight;\r\n }\r\n return this.$store.getters.currentHeaderHeight;\r\n },\r\n condensedThreshold() {\r\n return (this.bodyTop - this.premiumHeight);\r\n },\r\n isMobile() {\r\n return this.$store.getters.breakpointMobile;\r\n },\r\n headerStyles() {\r\n return {\r\n position: 'fixed',\r\n top: `${this.navHeight}px`,\r\n left: 0,\r\n width: '100vw',\r\n\r\n // NOTE 2022-03-14 AndrewKim: Header transition has to be removed while the header is animating in from\r\n // Vue '' tag\r\n ...(this.hasHeaderAppeared && {\r\n // transition necessary to try and sync repositioning with header nav transition\r\n transition: this.isMobile ? 'none' : this.headerTopTransition\r\n })\r\n };\r\n },\r\n bodyStyles() {\r\n // if (!this.premiumHeight) return {};\r\n\r\n if (this.hasFunnelTopProgressBar) {\r\n return {\r\n paddingTop: `${this.premiumHeight + this.funnelTopProgressBarHeight}px`,\r\n }\r\n }\r\n\r\n return {\r\n paddingTop: `${this.premiumHeight}px`\r\n };\r\n },\r\n slotProps() {\r\n return {\r\n isHeaderCondensed: this.isHeaderCondensed\r\n };\r\n }\r\n },\r\n watch: {\r\n navHeight(newHeight, oldHeight) {\r\n this.headerTopTransition = newHeight > oldHeight ?\r\n HEADER_TRANSITION.grow :\r\n HEADER_TRANSITION.shrink;\r\n }\r\n },\r\n created() {\r\n this._premiumHeaderSize = {\r\n width: 0,\r\n height: 0\r\n };\r\n\r\n this._premiumHeaderCondensedSize = {\r\n width: 0,\r\n height: 0\r\n };\r\n\r\n Components.on(Components.events[0], this.handleFunnelComponentStateChange);\r\n },\r\n mounted() {\r\n ScrollUtil.addScrollEventListener();\r\n ScrollUtil.on(ScrollUtil.events.scroll, this.handleScroll);\r\n\r\n this.watchHeaderResize();\r\n },\r\n beforeDestroy() {\r\n this.removeScrollEvents();\r\n Components.off(Components.events[0], this.handleFunnelComponentStateChange);\r\n },\r\n methods: {\r\n async handleFunnelComponentStateChange() {\r\n const { isProgressBarMounted, isPremiumDiscountsMounted } = Components;\r\n\r\n if (!this.isMobile) return;\r\n\r\n // Hide funnel-progress-bar's bar and the entire premium-discount\r\n if (isProgressBarMounted && isPremiumDiscountsMounted) {\r\n this.$eventBus.$emit('premiumDiscount:toggleVisibility', false);\r\n this.$eventBus.$emit('funnelProgressBar:toggleVisibility', false);\r\n\r\n await this.$nextTick();\r\n\r\n this.setHeaderHeight(true, [ 'o-totalPremium__container' ]);\r\n return;\r\n }\r\n\r\n // Otherwise show\r\n if (isPremiumDiscountsMounted) {\r\n this.$eventBus.$emit('premiumDiscount:toggleVisibility', true);\r\n\r\n await this.$nextTick();\r\n\r\n this.setHeaderHeight(true, [ 'o-totalPremium__container', 'm-premiumDiscount' ]);\r\n }\r\n else if (isProgressBarMounted) {\r\n this.$eventBus.$emit('funnelProgressBar:toggleVisibility', true);\r\n }\r\n },\r\n\r\n removeScrollEvents() {\r\n ScrollUtil.off(ScrollUtil.events.scroll, this.handleScroll);\r\n ScrollUtil.removeScrollEventListener();\r\n },\r\n setScrollbarWidth(width) {\r\n this.scrollBarWidth = width;\r\n },\r\n handleScroll({ scrollTop }) {\r\n const threshold = Math.max(0, (this.premiumHeight - this._premiumHeaderCondensedSize.height));\r\n this.isHeaderCondensed = scrollTop > threshold;\r\n },\r\n\r\n watchHeaderResize() {\r\n const { header } = this.$refs;\r\n const [ totalPremium ] = header.getElementsByClassName(TOTAL_PREMIUM_CLASS);\r\n const [ totalPremiumCondensed ] = header.getElementsByClassName(TOTAL_PREMIUM_CONDENSED_CLASS);\r\n\r\n if (!totalPremium && !totalPremiumCondensed) {\r\n (IS_DEV && console.warn('No premium headers found.'));\r\n }\r\n\r\n if (!totalPremium || !totalPremiumCondensed) {\r\n this.removeScrollEvents();\r\n // return;\r\n }\r\n\r\n this.createResizeObserver({\r\n element: [\r\n ...(totalPremium ? [ totalPremium ] : []),\r\n ...(totalPremiumCondensed ? [ totalPremiumCondensed ] : [])\r\n ],\r\n resizeHandler: this.handlePremiumHeaderResize\r\n });\r\n },\r\n\r\n handlePremiumHeaderResize(entries) {\r\n if (!entries) {\r\n this.setHeaderHeight();\r\n return;\r\n }\r\n\r\n const [ entry ] = entries;\r\n\r\n // Not every browser supports the target or contentRect properties\r\n if (!entry || !entry.target || !entry.contentRect) {\r\n this.setHeaderHeight();\r\n return;\r\n }\r\n\r\n this.setHeaderHeightWithResizeObserverEntries(entries);\r\n },\r\n\r\n /**\r\n * Fallback resize handler if resize observer is not the caller.\r\n * @param {boolean} [forceCalculation=false] - Optional param to force setting of 'premiumHeight'.\r\n * @param {string[]} [targetEls=[]] - Optional array of element class names. This can be used to select specific\r\n * elements for setting 'premiumHeight'.\r\n * For example on the coverages page, we toggle between two different step components, while also hiding/showing\r\n * the entire premium-discount element, and the funnel-progress-bar's bar. This requires constant recalculation of\r\n * the premiumHeight.\r\n */\r\n setHeaderHeight(forceCalculation = false, targetEls = []) {\r\n const { header } = this.$refs;\r\n\r\n if (this.isHeaderCondensed && !forceCalculation) return;\r\n\r\n if (targetEls.length) {\r\n const totalHeight = targetEls.reduce((totalHeight, elClassName) => {\r\n const [ targetEl ] = header.getElementsByClassName(elClassName);\r\n\r\n return (targetEl ? targetEl.offsetHeight : 0) + totalHeight;\r\n }, 0);\r\n\r\n if (totalHeight) {\r\n this.premiumHeight = totalHeight;\r\n return;\r\n }\r\n }\r\n\r\n this.premiumHeight = header.offsetHeight;\r\n },\r\n\r\n /**\r\n * Resize observer callback handler.\r\n */\r\n setHeaderHeightWithResizeObserverEntries(entries) {\r\n const { header } = this.$refs;\r\n let hasPremiumWidthChanged = false;\r\n let hasPremiumCondensedWidthChanged = false;\r\n\r\n if (this.isHeaderCondensed) return;\r\n\r\n for (const entry of entries) {\r\n const { target, contentRect: { width, height } } = entry;\r\n const isCondensed = target.classList.contains('-condensed');\r\n const propertyKey = isCondensed ? '_premiumHeaderCondensedSize' : '_premiumHeaderSize';\r\n\r\n const { height: previousHeight } = this[propertyKey];\r\n\r\n if (previousHeight === height) return;\r\n\r\n this[propertyKey] = { width, height };\r\n\r\n if (isCondensed) {\r\n hasPremiumCondensedWidthChanged = true;\r\n }\r\n else {\r\n hasPremiumWidthChanged = true;\r\n }\r\n }\r\n\r\n if (hasPremiumWidthChanged || hasPremiumCondensedWidthChanged) {\r\n this.premiumHeight = header.offsetHeight;\r\n }\r\n },\r\n renderHeader(createElement) {\r\n const isPremiumReadyPropBool = typeof this.isTotalPremiumReady === 'boolean';\r\n\r\n const headerEl = createElement('div', {\r\n class: 'o-funnel__stepTop funnel-steps-top a-totalPremiumSticky__container',\r\n ref: 'header',\r\n style: this.headerStyles,\r\n ...(isPremiumReadyPropBool && {\r\n directives: [\r\n {\r\n name: 'show',\r\n value: this.isTotalPremiumReady\r\n }\r\n ]\r\n })\r\n }, this.getSlot('header', this.slotProps));\r\n\r\n if (!isPremiumReadyPropBool) return headerEl;\r\n\r\n return createElement('transition', {\r\n props: {\r\n name: 'fade-fast',\r\n appear: true\r\n },\r\n on: {\r\n afterEnter: () => {\r\n this.hasHeaderAppeared = true;\r\n }\r\n }\r\n }, [ headerEl ]);\r\n },\r\n renderBody(createElement) {\r\n return createElement('div', {\r\n class: 'o-funnel__step funnel-steps a-totalPremiumSticky__containerSibling',\r\n ref: 'body',\r\n style: this.bodyStyles\r\n }, this.getSlot('body'));\r\n },\r\n onItemChanged(event, params) {\r\n !!event && this.$root.$emit(event, params);\r\n }\r\n },\r\n render(createElement) {\r\n return createElement('div', {\r\n class: 'o-funnel__container a-totalPremiumSticky',\r\n style: this.rootElStyles\r\n }, [\r\n this.renderHeader(createElement),\r\n this.renderBody(createElement)\r\n ]);\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport ScrollUtil from '@Shared/utils/ScrollUtil';\r\nimport { loadGSAP } from '@Shared/utils/gsap-utils';\r\nimport Components from '../utils/FunnelComponentsStates';\r\nimport GoogleAnalytics from '@Shared/utils/GoogleAnalytics';\r\n\r\nVue.component('funnel-progress-bar', {\r\n props: {\r\n storeName: {\r\n type: String,\r\n required: true\r\n }\r\n },\r\n data() {\r\n return {\r\n isInitialized: false,\r\n stepIndex: 1,\r\n stepsCount: 1,\r\n stepTitle: '',\r\n stepIcon: '',\r\n scrollBarWidth: ScrollUtil.verticalScrollbarWidth,\r\n hasAnimatedIn: false,\r\n isProgressBarHidden: false,\r\n chevronIconUp: false,\r\n activeStepProduct: ''\r\n };\r\n },\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n label() {\r\n if (this.Model.IsAggregatorRequest) {\r\n return `${this.stepTitle}`;\r\n } else {\r\n return `${this.stepIndex}/${this.stepsCount} ${this.stepTitle}`;\r\n }\r\n },\r\n mainTitle() {\r\n return `${this.activeStepProduct}:`\r\n },\r\n progressFillScale() {\r\n return (this.stepIndex / this.stepsCount);\r\n },\r\n isMobile() {\r\n return this.$store.getters.breakpointMobile;\r\n },\r\n navHeight() {\r\n return this.$store.getters.currentHeaderHeight;\r\n },\r\n progressBarStyles() {\r\n return {\r\n position: 'fixed',\r\n top: `${this.navHeight}px`,\r\n left: '0px',\r\n width: '100vw',\r\n }\r\n },\r\n },\r\n\r\n created() {\r\n this.$eventBus.$on('funnel:load-step-indicator-data', this.loadStepData);\r\n this.$eventBus.$on('funnel:toggle-chevron', this.handleChevron )\r\n this.$eventBus.$on('funnelProgressBar:toggleVisibility', this.handleVisibilityChangeEvent);\r\n this.$eventBus.$on('funnel:activeStepProduct', this.setActiveStepProduct);\r\n },\r\n\r\n beforeDestroy() {\r\n this.$eventBus.$off('funnel:load-step-indicator-data', this.loadStepData);\r\n this.$eventBus.$off('funnel:toggle-chevron', this.handleChevron )\r\n this.$eventBus.$off('funnel:activeStepProduct', this.setActiveStepProduct);\r\n\r\n Components.isProgressBarMounted = false;\r\n this.$eventBus.$off('funnelProgressBar:toggleVisibility', this.handleVisibilityChangeEvent);\r\n },\r\n\r\n methods: {\r\n handleVisibilityChangeEvent(isVisible) {\r\n this.isProgressBarHidden = !isVisible;\r\n },\r\n handleChevron() {\r\n this.chevronIconUp = !this.chevronIconUp;\r\n },\r\n async animateIn(el, done) {\r\n const { progressBar, progressBarFill, buttonContainer} = this.$refs;\r\n\r\n (!window.gsap && await loadGSAP());\r\n\r\n const timeline = gsap.timeline({\r\n onComplete: () => {\r\n done();\r\n this.hasAnimatedIn = true;\r\n }\r\n });\r\n\r\n timeline.fromTo([ ...(progressBar ? [ progressBar ] : []), buttonContainer ], { autoAlpha: 0 }, {\r\n autoAlpha: 1,\r\n duration: 0.5,\r\n ease: 'sine.out'\r\n });\r\n\r\n if (progressBarFill) {\r\n timeline.fromTo(progressBarFill, { scaleX: 0 }, {\r\n scaleX: (this.stepIndex / this.stepsCount),\r\n duration: 1,\r\n ease: 'power2.out'\r\n }, '-=0.1');\r\n }\r\n },\r\n\r\n openStepIndicator() {\r\n GoogleAnalytics.push({\r\n event: 'link_click',\r\n clickId: 'funnel_step',\r\n clickText: this.label\r\n });\r\n this.$eventBus.$emit('funnel:open-step-indicator-mobile');\r\n },\r\n\r\n loadStepData(stepData) {\r\n this.isInitialized = true;\r\n\r\n this.stepIndex = stepData.Index;\r\n this.stepsCount = stepData.TotalCount;\r\n this.stepTitle = stepData.Title;\r\n this.stepIcon = stepData.Icon;\r\n },\r\n setActiveStepProduct(product) {\r\n this.activeStepProduct = product;\r\n },\r\n createProgressBar(createElement) {\r\n // if (this.isProgressBarHidden) return null;\r\n\r\n const barFill = createElement('div', {\r\n class: 'a-funnelProgressBar__fill',\r\n style: {\r\n ...(this.hasAnimatedIn && {\r\n transform: `scaleX(${this.stepIndex / this.stepsCount})`\r\n })\r\n },\r\n ref: 'progressBarFill'\r\n });\r\n\r\n const barBackground = createElement('div', {\r\n class: 'a-funnelProgressBar__barBackground',\r\n ref: 'progressBarBackground'\r\n });\r\n\r\n return createElement('div', {\r\n class: 'a-funnelProgressBar__bar',\r\n style: {\r\n ...(!this.hasAnimatedIn && {\r\n opacity: 0\r\n })\r\n },\r\n ref: 'progressBar'\r\n }, [ barFill, barBackground ]);\r\n },\r\n\r\n createButton(createElement) {\r\n const quoteEl = createElement('span', {\r\n domProps: {\r\n innerHTML: this.mainTitle\r\n }, \r\n class: 'a-funnelProgressBar__button--quote'\r\n });\r\n\r\n const labelEl = createElement('span', {\r\n domProps: {\r\n innerHTML: this.label\r\n },\r\n class: 'a-funnelProgressBar__button--label'\r\n });\r\n const chevronIcon = createElement('span', {\r\n class: [\r\n {'icon icon-down-bold': !this.chevronIconUp},\r\n {'icon icon-up-bold': this.chevronIconUp}\r\n ],\r\n ref: 'chevonIcon'\r\n }\r\n );\r\n\r\n const buttonEl = createElement('onlia-button', {\r\n class: 'a-funnelProgressBar__button',\r\n attrs: {\r\n id: \"funnelProgressBarButton\"\r\n },\r\n props: {\r\n tag: 'button',\r\n variant: 'hyperlink',\r\n labelWrap: true\r\n },\r\n on: {\r\n click: this.openStepIndicator\r\n }\r\n }, [ quoteEl, labelEl, chevronIcon ]);\r\n\r\n return createElement('div', {\r\n class: 'a-funnelProgressBar__buttonContainer container',\r\n ref: 'buttonContainer',\r\n style: {\r\n ...(!this.hasAnimatedIn && {\r\n opacity: 0\r\n })\r\n }\r\n }, [ buttonEl ]);\r\n }\r\n },\r\n render(createElement) {\r\n Components.isProgressBarMounted = (this.isInitialized);\r\n\r\n if (this.isInitialized) {\r\n const rootEl = createElement('div', {\r\n class: 'a-funnelProgressBar',\r\n style: this.progressBarStyles\r\n }, [\r\n this.createProgressBar(createElement),\r\n this.createButton(createElement)\r\n ]);\r\n\r\n return createElement('transition', {\r\n props: {\r\n // name : 'funnelProgressBar',\r\n css: false,\r\n appear: true\r\n },\r\n on: {\r\n enter: this.animateIn\r\n }\r\n }, [ rootEl ]);\r\n }\r\n\r\n return null;\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport axios from 'axios';\r\nimport { scrollPage } from '@Shared/utils/scroll-page';\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component('funnel', {\r\n props: {\r\n api: Object,\r\n funnelInit: Object,\r\n funnelParams: Array,\r\n parentProperties: Object,\r\n parentMethods: Object,\r\n funnelComputed: Object,\r\n storeName: String\r\n },\r\n\r\n data() {\r\n const vm = this;\r\n\r\n return {\r\n redirectLocation: '',\r\n\r\n funnelProperties: {\r\n ...vm.parentProperties\r\n },\r\n\r\n funnelMethods: {\r\n ...vm.parentMethods,\r\n\r\n postFunnel: function () {\r\n return axios.post(vm.api.submitStep, { ...vm.$store.state[vm.storeName].model });\r\n },\r\n\r\n toggleInfoTooltip(event) {\r\n vm.funnelProperties.showInfoTooltip = !vm.funnelProperties.showInfoTooltip;\r\n event.stopPropagation();\r\n },\r\n\r\n scrollToActiveStep() {\r\n const scrollTop = document.querySelector('.panel-step-active').offsetTop;\r\n scrollPage(scrollTop);\r\n },\r\n\r\n saveActiveStep: function (step) {\r\n return axios.post(vm.api.saveActiveStep, {\r\n ActiveStep: step || vm.$store.state[vm.storeName].model.ActiveStep,\r\n IsInBundle: step || vm.$store.state[vm.storeName].model.IsInBundle,\r\n IsInChangeMode: typeof vm.$store.state[vm.storeName].model.IsInChangeMode !== 'undefined' ?\r\n vm.$store.state[vm.storeName].model.IsInChangeMode :\r\n false,\r\n NavigateToPreviousAggregatorsVehicle: vm.$store.state[vm.storeName].model.NavigateToPreviousAggregatorsVehicle\r\n });\r\n },\r\n\r\n startOver: function (startOverParams) {\r\n return axios.post(vm.api.startOver, startOverParams);\r\n }\r\n },\r\n isBasketReady: true\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n created() {\r\n this.$eventBus.$on('calculating-basket', this.setBaskingIsLoading);\r\n this.$root.$on('Broadcast::ShoppingBasketLoaded', this.setBasketIsReady);\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n\r\n if (vm.funnelInit && typeof vm.funnelInit === 'object' && vm.funnelParams) {\r\n vm.funnelParams.forEach((item) => {\r\n if (typeof vm.funnelInit[item.init] === 'function') {\r\n vm.funnelInit[item.init]();\r\n }\r\n });\r\n }\r\n\r\n document.addEventListener('click', (e) => {\r\n const url = e.srcElement.getAttribute('href') ?\r\n e.srcElement.getAttribute('href') :\r\n e.srcElement.parentElement ? e.srcElement.parentElement.getAttribute('href') : null;\r\n const allowedClass = e.srcElement.getAttribute('class') ?\r\n e.srcElement.getAttribute('class') :\r\n e.srcElement.parentElement ? e.srcElement.parentElement.getAttribute('class') : null;\r\n const canProceed = allowedClass && allowedClass.includes('data-save-allow');\r\n\r\n if (url && vm.Model.IsInEditState && vm.Model.IsInEditedState && !canProceed) {\r\n e.preventDefault();\r\n vm.redirectLocation = url;\r\n vm.$refs['warning-modal'].show();\r\n }\r\n });\r\n },\r\n\r\n beforeDestroy() {\r\n this.$eventBus.$off('calculating-basket', this.setBaskingIsLoading);\r\n this.$root.$off('Broadcast::ShoppingBasketLoaded', this.setBasketIsReady);\r\n },\r\n\r\n methods: {\r\n leaveWithoutSaving() {\r\n const vm = this;\r\n\r\n axios.post(vm.api.clearFunnelState).then(() => {\r\n UnsavedChangesPopup.redirect(vm.redirectLocation);\r\n });\r\n },\r\n setBaskingIsLoading() {\r\n this.isBasketReady = false;\r\n },\r\n setBasketIsReady() {\r\n this.isBasketReady = true;\r\n }\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport callVueInstanceMethod from '@Shared/utils/call-vue-instance-method';\r\n\r\nVue.component('gif-list', {\r\n inject: ['$validator'],\r\n\r\n props: {\r\n field: {\r\n type: String,\r\n required: true\r\n },\r\n storeName: {\r\n type: String,\r\n required: true\r\n },\r\n assetsUrl: {\r\n type: String,\r\n required: true\r\n },\r\n options: {\r\n type: Array,\r\n default: null\r\n }\r\n },\r\n\r\n data() {\r\n return {\r\n errorMessage: '',\r\n infoBar: null,\r\n value: null,\r\n dropdownOptions: {}\r\n };\r\n },\r\n\r\n computed: {\r\n dropdownOptionsKey() {\r\n return `Model.${this.field}`;\r\n },\r\n gifs() {\r\n const options = this.dropdownOptions[this.dropdownOptionsKey];\r\n return Array.isArray(options) ?\r\n options.map(({ t: text, v: id }) => {\r\n const [ toolTip = '', explanation = '' ] = (text || '').split('-explanation-');\r\n const imgSrc = `${this.assetsUrl}/${id}/${id}-01.jpg`;\r\n const gifSrc = `${this.assetsUrl}/${id}/${id}.gif`;\r\n return {\r\n id,\r\n toolTip,\r\n explanation,\r\n gifSrc,\r\n imgSrc\r\n };\r\n }) :\r\n [];\r\n },\r\n explanation() {\r\n const [ matched = {} ] = this.gifs.filter(option => option.id === this.value);\r\n return matched.explanation;\r\n },\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n Field() {\r\n return this.field;\r\n }\r\n },\r\n watch: {\r\n Model(newVal) {\r\n const newValue = newVal[this.field];\r\n if (newValue) {\r\n this.value = newValue;\r\n }\r\n },\r\n options: {\r\n immediate: true,\r\n handler(newOptions) {\r\n if (newOptions) {\r\n this.dropdownOptions = {\r\n ...this.dropdownOptions,\r\n [ this.dropdownOptionsKey ]: newOptions\r\n };\r\n }\r\n }\r\n }\r\n },\r\n methods: {\r\n handleChange() {\r\n if (this.$attrs.onchangecallback) {\r\n this.$nextTick(() => {\r\n callVueInstanceMethod(`this.$parent.${this.$attrs.onchangecallback}`, this, this.Model);\r\n });\r\n }\r\n },\r\n updateModel(val) {\r\n this.Model[this.field] = val;\r\n this.value = val;\r\n // cannot use Model[this.field] directly for v-model as it strangely doese not update the model on time and validation fails\r\n // NOTE 2021-02-22 AndrewKim: You can't directly mutate a computed value.\r\n\r\n this.$nextTick(function () {\r\n this.$validator\r\n .validate(this.field)\r\n .then(this.handleChange);\r\n });\r\n }\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport { getSlotFunctional } from '@Shared/mixins/slot-utils';\r\nimport { mergeClasses } from '@Shared/utils/vue-component-helpers';\r\n\r\nconst createContentContainer = (createElement, context, children = null) => {\r\n const containerEl = createElement('div', { class: 'o-policyCard__contentContainer' }, children);\r\n\r\n return createElement('div', { class: 'o-policyCard__contentWrapper' }, [\r\n containerEl,\r\n getSlotFunctional(context, 'default'),\r\n getSlotFunctional(context, 'end'),\r\n getSlotFunctional(context, 'bottom')\r\n ]);\r\n};\r\n\r\nconst createProductIcon = (createElement, context) => {\r\n const { props: { iconClassName } } = context;\r\n return createElement('product-icon', {\r\n class: 'o-policyCard__icon',\r\n props: {\r\n iconClassName\r\n }\r\n });\r\n};\r\n\r\nconst createLeftContainer = (createElement, context) => {\r\n const productIconEl = createProductIcon(createElement, context);\r\n\r\n const iconContainerEl = createElement('div', { class: 'o-policyCard__iconContainer' }, [ productIconEl ]);\r\n\r\n return createElement('div', { class: 'o-policyCard__leftContainer' }, [\r\n iconContainerEl,\r\n getSlotFunctional(context, 'left')\r\n ]);\r\n};\r\n\r\nconst createCenterContainer = (createElement, context) => (\r\n createElement('div', { class: 'o-policyCard__centerContainer' }, getSlotFunctional(context, 'center'))\r\n);\r\n\r\nconst createRightContainer = (createElement, context) => {\r\n const slotContent = getSlotFunctional(context, 'right');\r\n\r\n if (!slotContent) return null;\r\n\r\n return createElement('div', { class: 'o-policyCard__rightContainer' }, slotContent);\r\n};\r\n\r\nVue.component('policy-card', {\r\n functional: true,\r\n props: {\r\n iconClassName: {\r\n type: String,\r\n required: true\r\n },\r\n cart: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n render(createElement, context) {\r\n const leftContainerEl = createLeftContainer(createElement, context);\r\n const centerContainerEl = createCenterContainer(createElement, context);\r\n const rightContainerEl = createRightContainer(createElement, context);\r\n\r\n const contentContainerEl = createContentContainer(createElement, context, [\r\n leftContainerEl,\r\n centerContainerEl,\r\n rightContainerEl\r\n ]);\r\n\r\n return createElement('article', {\r\n ...context.data,\r\n ...context.listeners,\r\n class: [\r\n 'o-policyCard',\r\n { '-cart': context.props.cart },\r\n ...mergeClasses(context)\r\n ]\r\n }, [ contentContainerEl ]);\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport { mergeClasses } from '@Shared/utils/vue-component-helpers';\r\nimport eventBus from '@Shared/utils/event-bus';\r\n\r\nVue.component('step-group-item', {\r\n functional: true,\r\n props: {\r\n activeStepNumber: {\r\n type: Number,\r\n required: true\r\n },\r\n title: {\r\n type: String,\r\n required: true\r\n },\r\n stepNumber: {\r\n type: Number,\r\n required: true\r\n },\r\n pageURL: {\r\n type: String,\r\n required: true\r\n },\r\n product: {\r\n type: String,\r\n required: true\r\n },\r\n icon: {\r\n type: String,\r\n required: true\r\n },\r\n stepNumbers: {\r\n type: Array,\r\n required: true\r\n },\r\n allURLs: {\r\n type: Array,\r\n required: true\r\n }\r\n },\r\n render(createElement, context) {\r\n const {\r\n data,\r\n // listeners: { click: onClick },\r\n props: {\r\n stepNumbers,\r\n activeStepNumber,\r\n title,\r\n allURLs\r\n }\r\n } = context;\r\n\r\n let state = '';\r\n\r\n if (stepNumbers.every(num => num < activeStepNumber)) {\r\n state = '-completed';\r\n }\r\n else if (!stepNumbers.includes(activeStepNumber)) {\r\n state = '-inactive';\r\n }\r\n else {\r\n state = '-active';\r\n }\r\n\r\n const dotEl = createElement('div', { class: 'a-stepGroupItem__dot' });\r\n\r\n const buttonEl = createElement('onlia-button', {\r\n class: 'a-stepGroupItem__button',\r\n props: {\r\n label: title,\r\n variant: 'none',\r\n labelWrap: true,\r\n tag: 'button',\r\n type: 'button'\r\n },\r\n attrs: {\r\n 'data-gtm-category': 'User Interaction',\r\n 'data-gtm-action': 'Component Funnel Steps',\r\n 'data-gtm-label': title,\r\n ...(state === '-inactive' && {\r\n tabindex: -1\r\n })\r\n },\r\n on: {\r\n click: () => {\r\n // $emit('activate-step', allURLs, stepNumbers);\r\n eventBus.$emit('stepIndicator:activateStep', allURLs, stepNumbers);\r\n }\r\n }\r\n });\r\n\r\n return createElement('li', {\r\n ...data,\r\n class: [ 'a-stepGroupItem', state, ...mergeClasses(context) ]\r\n }, [\r\n dotEl,\r\n buttonEl\r\n ]);\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport { loadGSAP } from '@Shared/utils/gsap-utils';\r\nimport slotUtils from '@Shared/mixins/slot-utils';\r\nimport resizeObserver from '@Shared/mixins/resize-observer';\r\n\r\nconst DOT_HEIGHT = 10;\r\nconst DOT_MARGIN_TOP = 6;\r\n\r\nVue.component('step-group', {\r\n mixins: [ slotUtils, resizeObserver ],\r\n\r\n props: {\r\n steps: {\r\n type: Array,\r\n default: () => []\r\n },\r\n storeName: {\r\n type: String,\r\n required: true\r\n },\r\n initialCartCount: {\r\n type: String\r\n }\r\n },\r\n data() {\r\n return {\r\n isExpanded: false,\r\n listHeight: 0,\r\n dotPositionTops: [],\r\n basketCount: 0\r\n };\r\n },\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n activeStep() {\r\n return this.Model.ActiveStep;\r\n },\r\n slotProps() {\r\n return {\r\n toggleContent: this.toggleContent,\r\n activeStep: this.activeStep,\r\n cartItemsCount: this.basketCount,\r\n resetFunnelSteps: this.resetFunnelSteps,\r\n isAggregatorRequest: this.isAggregatorRequest,\r\n mainTitle: this.mainTitle\r\n };\r\n },\r\n totalSteps() {\r\n return this.steps.length;\r\n },\r\n allStepNumbers() {\r\n if (!this.totalSteps) return [];\r\n\r\n return this.steps.reduce((allSteps, step) => [\r\n ...allSteps,\r\n ...step.StepNumbers\r\n ], []);\r\n },\r\n isActiveStepGroup() {\r\n return this.allStepNumbers.includes(this.activeStep);\r\n },\r\n isAggregatorRequest() {\r\n return this.Model.IsAggregatorRequest;\r\n },\r\n parsedSteps() {\r\n return this.steps.map((step) => {\r\n const { AllUrls, StepNumbers, Icon, Product, PageUrl, Title, Number: stepNumber } = step;\r\n return {\r\n stepNumber,\r\n allURLs: AllUrls,\r\n stepNumbers: StepNumbers,\r\n icon: Icon,\r\n product: Product,\r\n pageURL: PageUrl,\r\n title: Title\r\n };\r\n });\r\n },\r\n activeCar() {\r\n return this.Model.Car.IndexFromAggregators;\r\n },\r\n totalCars() {\r\n return this.Model.CarsCount;\r\n },\r\n mainTitle() {\r\n if (this.Model.CarsCount !== 0) {\r\n if (this.totalCars > 1) {\r\n return `Vehicle ${this.activeCar} of ${this.totalCars}`;\r\n } else {\r\n return `Vehicle ${this.totalCars}`;\r\n }\r\n } else {\r\n return `Vehicle ${this.activeCar} of ${this.Model.BasketCount}`;\r\n }\r\n },\r\n firstDotTop() {\r\n if (!this.dotPositionTops.length) return 0;\r\n\r\n return this.dotPositionTops[0];\r\n },\r\n lastDotTop() {\r\n if (!this.dotPositionTops.length) return 0;\r\n\r\n return this.dotPositionTops[this.totalSteps - 1];\r\n },\r\n activeStepItemIndex() {\r\n return this.steps.findIndex(step => step.StepNumbers.includes(this.activeStep));\r\n }\r\n },\r\n\r\n created() {\r\n this.isExpanded = this.isActiveStepGroup;\r\n this.setActiveStepProduct();\r\n },\r\n mounted() {\r\n this.getDotsPositions();\r\n this.initListResize();\r\n (this.initialCartCount != undefined) && this.onUpdateCartCount();\r\n },\r\n\r\n methods: {\r\n initListResize() {\r\n const { list } = this.$refs;\r\n if (list) {\r\n this.createResizeObserver({\r\n element: list,\r\n resizeHandler: this.getDotsPositions,\r\n debounce: false\r\n });\r\n }\r\n },\r\n onUpdateCartCount() {\r\n this.basketCount = this.initialCartCount ? parseInt(this.initialCartCount) : 0;\r\n this.$root.$on('Broadcast::UpdateShoppingBasketCount', (data) => {\r\n this.basketCount = data;\r\n });\r\n },\r\n setActiveStepProduct() {\r\n const activeStepProduct = this.steps.find(step => step.StepNumbers.includes(this.activeStep));\r\n \r\n if (this.steps.length > 0 ) {\r\n if (this.isAggregatorRequest && this.storeName === \"car-funnel\") {\r\n this.$eventBus.$emit('funnel:activeStepProduct', this.mainTitle);\r\n }\r\n else {\r\n (activeStepProduct != undefined) && this.$eventBus.$emit('funnel:activeStepProduct', activeStepProduct.Product);\r\n }\r\n }\r\n },\r\n getDotsPositions() {\r\n const { list, steps } = this.$refs;\r\n\r\n if (!this.totalSteps /*|| !this.isExpanded*/) return;\r\n\r\n const { height } = list.getBoundingClientRect();\r\n\r\n this.dotPositionTops = steps.map(step => step.offsetTop);\r\n\r\n this.listHeight = height;\r\n },\r\n toggleContent() {\r\n this.isExpanded = !this.isExpanded;\r\n },\r\n resetFunnelSteps() {\r\n this.$eventBus.$emit('funnelNavigation:StartOver');\r\n },\r\n\r\n async animateIn(el, done) {\r\n if (!this.isExpanded) return;\r\n\r\n const { steps, progressContainer } = this.$refs;\r\n\r\n (!window.gsap && await loadGSAP());\r\n\r\n gsap.fromTo(steps, { autoAlpha: 0 }, {\r\n autoAlpha: 1,\r\n duration: 0.4,\r\n ease: 'sine.out',\r\n stagger: 0.2,\r\n onComplete: done\r\n });\r\n\r\n gsap.fromTo(progressContainer, { scaleY: 0 }, {\r\n scaleY: 1,\r\n duration: 0.1 * steps.length,\r\n ease: 'quad.out',\r\n delay: 0.2,\r\n clearProps: 'scale'\r\n });\r\n },\r\n createProgressLine(createElement) {\r\n if (!this.steps.length) return null;\r\n\r\n const firstDotTop = Math.max(this.firstDotTop + DOT_MARGIN_TOP, 0);\r\n const lastDotTop = Math.max(this.lastDotTop + DOT_MARGIN_TOP, 0);\r\n const activeDotTop = this.dotPositionTops[this.activeStepItemIndex] || 0;\r\n\r\n const containerHeight = (lastDotTop - firstDotTop + DOT_HEIGHT);\r\n const fillHeight = ((activeDotTop + DOT_MARGIN_TOP + DOT_HEIGHT) - firstDotTop) / containerHeight;\r\n\r\n const progressFill = createElement('div', {\r\n class: 'm-stepGroup__progressFill',\r\n style: {\r\n transform: `scaleY(${Math.max(0, fillHeight)})`\r\n }\r\n });\r\n\r\n return createElement('div', {\r\n class: 'm-stepGroup__progressContainer',\r\n style: {\r\n top: `${firstDotTop}px`,\r\n height: `${containerHeight / this.listHeight * 100}%`\r\n },\r\n ref: 'progressContainer'\r\n }, [ progressFill ]);\r\n },\r\n createList(createElement) {\r\n if (!this.steps.length) return null;\r\n\r\n const listItemEls = this.parsedSteps.map(step => createElement('step-group-item', {\r\n class: 'm-stepGroup__step',\r\n props: {\r\n ...step,\r\n activeStepNumber: this.activeStep\r\n },\r\n key: step.PageUrl,\r\n ref: 'steps',\r\n refInFor: true\r\n }));\r\n\r\n const listEl = createElement('ul', {\r\n class: 'm-stepGroup__list',\r\n ref: 'list'\r\n }, [ listItemEls, this.createProgressLine(createElement) ]);\r\n\r\n const contentToggleEl = createElement('content-toggle', {\r\n props: {\r\n value: this.isExpanded,\r\n isOpenInitially: this.isActiveStepGroup,\r\n appear: false,\r\n debounceDuration: 0\r\n }\r\n }, [ listEl ]);\r\n\r\n if (this.$store.getters.breakpointMobile) {\r\n return contentToggleEl;\r\n }\r\n\r\n return createElement('transition', {\r\n props: {\r\n appear: true,\r\n css: false\r\n },\r\n on: {\r\n enter: this.animateIn\r\n }\r\n }, [ contentToggleEl ]);\r\n }\r\n },\r\n\r\n render(createElement) {\r\n return createElement('li', {\r\n class: 'm-stepGroup'\r\n }, [\r\n this.getSlot('heading', this.slotProps),\r\n this.createList(createElement)\r\n ]);\r\n } \r\n});\r\n","import Vue from 'vue';\r\nimport axios from 'axios';\r\nimport windowSize from '@Shared/mixins/window-size';\r\nimport { asyncParallelTasks } from '../../forms/utils/async-parallel-tasks';\r\nimport { IS_DEV } from '@Shared/settings';\r\nimport { wait } from '@Shared/utils/basic-functions';\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component('step', {\r\n mixins: [windowSize],\r\n\r\n props: {\r\n step: String,\r\n stepId: String,\r\n nextStep: String,\r\n nextActiveStep: String,\r\n previousStep: String,\r\n previousActiveStep: String,\r\n api: Object,\r\n parentMethods: Object,\r\n funnelProperties: Object,\r\n funnelComputed: Object,\r\n transitToShoppingBasket: Boolean,\r\n promptLogin: Boolean,\r\n storeName: String,\r\n isNextStepExternal: Boolean,\r\n nextStepExternalSuccessUrl: String,\r\n nextStepExternalCancelUrl: String,\r\n nextStepExternalFailUrl: String,\r\n nextStepExternalReturnUrl: String,\r\n nextStepButtonText: String\r\n },\r\n\r\n data() {\r\n return {\r\n onBeforeSubmitQueue: [],\r\n onAfterSubmitQueue: [],\r\n isLoginPopupNeeded: this.promptLogin,\r\n containsTotalPremium: false,\r\n funnelMethods: {\r\n ...this.parentMethods,\r\n submitStep: this.submitStep\r\n },\r\n isBodyVisible: false,\r\n hyperLinkModalId: \"CarMainDetails.BusinessUse\"\r\n };\r\n },\r\n\r\n computed: {\r\n stepStateActive() {\r\n return +this.step === this.Model.ActiveStep;\r\n },\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n isFormDirty() {\r\n return Object.keys(this.fields).some(key => this.fields[key].dirty);\r\n }\r\n },\r\n created() {\r\n this.$eventBus.$on('step:back-previous-step', this.navigateToPreviousStepFromEvent);\r\n this.$eventBus.$on('step:total-premium-mounted', this.totalPremiumMounted);\r\n this.$eventBus.$emit('step:activeStep', this.Model.ActiveStep);\r\n this.$eventBus.$emit('step:internalPolicyId', this.Model.InternalPolicyId);\r\n\r\n this.$eventBus.$on('pageLoadUtil:PageLoaded', this.handlePageLoaded);\r\n this.$eventBus.$on('step:submit-step', this.submitStep);\r\n },\r\n beforeDestroy() {\r\n this.$eventBus.$off('step:back-previous-step', this.navigateToPreviousStepFromEvent);\r\n this.$eventBus.$off('step:total-premium-mounted', this.totalPremiumMounted);\r\n\r\n this.$eventBus.$off('pageLoadUtil:PageLoaded', this.handlePageLoaded);\r\n this.$eventBus.$off('step:submit-step', this.submitStep);\r\n },\r\n methods: {\r\n showHyperLinkModal() {\r\n this.$globalModal.show(this.hyperLinkModalId);\r\n },\r\n handlePageLoaded() {\r\n this.isBodyVisible = true;\r\n },\r\n\r\n pushOnBeforeSubmitQueue(callback) {\r\n this.onBeforeSubmitQueue.push(callback);\r\n },\r\n\r\n pushOnAfterSubmitQueue(callback) {\r\n this.onAfterSubmitQueue.push(callback);\r\n },\r\n\r\n submitFromPopup(isLoginPopupNeeded, nextStep) {\r\n if (isLoginPopupNeeded !== undefined) this.isLoginPopupNeeded = isLoginPopupNeeded;\r\n if (nextStep !== undefined) this.nextStep = nextStep;\r\n this.funnelMethods.submitStep();\r\n },\r\n\r\n totalPremiumMounted() {\r\n this.containsTotalPremium = true;\r\n },\r\n\r\n isStepEnabled() {\r\n const step = +this.step;\r\n const completedSteps = [];\r\n\r\n for (let idx = 1; idx < this.Model.ActiveStep; idx++) {\r\n completedSteps.push(idx);\r\n }\r\n\r\n return this.Model.ActiveStep === step || completedSteps.includes(step);\r\n },\r\n\r\n setActiveStep(activeStep) {\r\n const vm = this;\r\n Vue.set(vm.Model, 'ActiveStep', activeStep);\r\n vm.$store.commit(`${vm.storeName}/mutate`, vm.Model);\r\n },\r\n\r\n navigateToNextStep() {\r\n this.activateStep(this.nextStep);\r\n },\r\n\r\n navigateToPreviousAggregatorsVehicle() {\r\n const vm = this;\r\n if (this.Model.IsAggregatorRequest && vm.previousStep === \"/insurance/auto-quote/coverages\") {\r\n Vue.set(vm.Model, 'NavigateToPreviousAggregatorsVehicle', true);\r\n vm.$store.commit(`${vm.storeName}/mutate`, vm.Model);\r\n }\r\n },\r\n\r\n navigateToPreviousStepFromEvent({ activeStep }) {\r\n if (activeStep === this.step) {\r\n this.navigateToPreviousStep();\r\n }\r\n },\r\n\r\n async navigateToPreviousStep() {\r\n this.setActiveStep(isNaN(this.previousActiveStep) ? this.Model.ActiveStep - 1 : +this.previousActiveStep);\r\n\r\n this.navigateToPreviousAggregatorsVehicle();\r\n\r\n const { data } = await this.funnelMethods.saveActiveStep();\r\n\r\n if (data.previousStepUrl) {\r\n window.location.replace(data.previousStepUrl);\r\n }\r\n else {\r\n this.activateStep(this.previousStep);\r\n }\r\n },\r\n\r\n cancelStep(url) {\r\n if (url) {\r\n UnsavedChangesPopup.redirect(url);\r\n }\r\n },\r\n\r\n activateStep: function (step) {\r\n\r\n if (!step) { return }\r\n\r\n const vm = this;\r\n\r\n if (!isNaN(step)) {\r\n\r\n if (vm.isStepEnabled()) {\r\n vm.setActiveStep(+step);\r\n }\r\n\r\n setTimeout(() => {\r\n vm.funnelMethods.scrollToActiveStep();\r\n }, 500);\r\n }\r\n else {\r\n UnsavedChangesPopup.redirect(step);\r\n }\r\n },\r\n\r\n async validateFormFields() {\r\n this.$validator.fields.items.map((field) => {\r\n if (field.rules['val_compulsory']) {\r\n field.update({\r\n rules: {\r\n val_compulsory: field.rules.val_compulsory,\r\n ...field.rules\r\n }\r\n });\r\n }\r\n });\r\n\r\n return await this.$validator.validate();\r\n },\r\n\r\n async submitStep() {\r\n try {\r\n const isValid = await this.validateFormFields();\r\n\r\n if (!isValid) {\r\n Vue.prototype.handleInvalidForm(this);\r\n return;\r\n }\r\n\r\n Vue.set(this.Model, 'TransitToShoppingBasketStep', this.transitToShoppingBasket);\r\n Vue.set(this.Model, 'NextActiveStep', +this.nextActiveStep);\r\n Vue.set(this.Model, 'ActiveStepID', this.stepId);\r\n\r\n if (this.Model.IsInEditState) {\r\n Vue.set(this.Model, 'IsInEditedState', true);\r\n }\r\n\r\n this.$store.commit(`${this.storeName}/mutate`, this.Model);\r\n\r\n if (this.isLoginPopupNeeded) {\r\n this.$root.$emit('show-login-popup' + this.step);\r\n return;\r\n }\r\n\r\n const hasBeforeTasksSucceeded = await asyncParallelTasks(this.onBeforeSubmitQueue);\r\n\r\n if (!hasBeforeTasksSucceeded) return;\r\n\r\n const { status, data } = await this.funnelMethods.postFunnel();\r\n\r\n if (status === 200) {\r\n const hasAfterTasksSucceeded = await asyncParallelTasks(this.onAfterSubmitQueue);\r\n\r\n if (!hasAfterTasksSucceeded) return;\r\n\r\n if (this.isNextStepExternal) {\r\n await axios.post(this.api.saveExternalNavigationContext, {\r\n ActiveStep: this.Model.ActiveStep,\r\n TotalPremium: this.Model.Payment.TotalPremium,\r\n PageUrl: this.nextStep,\r\n CurrentPageUrl: window.location.href,\r\n ReturnPageUrl: this.nextStepExternalReturnUrl,\r\n SuccessPageUrl: this.nextStepExternalSuccessUrl,\r\n CancelPageUrl: this.nextStepExternalCancelUrl,\r\n FailPageUrl: this.nextStepExternalFailUrl\r\n });\r\n\r\n UnsavedChangesPopup.redirect(data.PageUrl);\r\n }\r\n else {\r\n this.$root.$emit('submitStepResponseHandler', data);\r\n this.onBeforeSubmitQueue = [];\r\n this.onAfterSubmitQueue = [];\r\n this.navigateToNextStep();\r\n }\r\n }\r\n //else {\r\n // alert(data.Message);\r\n //}\r\n }\r\n catch (error) {\r\n (IS_DEV && console.error('submitStep error:', error));\r\n\r\n //if (error.message) {\r\n // alert(error.message);\r\n //}\r\n }\r\n }\r\n }\r\n});\r\n","import Vue from 'vue';\r\n\r\nVue.component('total-premium-switch', {\r\n props: {\r\n value: {\r\n type: String,\r\n required: true\r\n },\r\n checkboxes: {\r\n type: Array,\r\n required: true,\r\n validator(checkboxes) {\r\n // interface Checkbox {\r\n // label: string;\r\n // value: string;\r\n // gtmLabel: string;\r\n // }\r\n return (checkboxes.length && checkboxes.every((checkbox) => {\r\n const { label, value, gtmLabel } = checkbox;\r\n return (\r\n (label && typeof label === 'string') &&\r\n (value && typeof value === 'string') &&\r\n (gtmLabel && typeof gtmLabel === 'string')\r\n );\r\n }));\r\n }\r\n }\r\n },\r\n data() {\r\n return {\r\n focusedElementValue: ''\r\n };\r\n },\r\n methods: {\r\n handleInput(value) {\r\n this.$emit('change', value);\r\n this.$emit('input', value);\r\n },\r\n handleFocus(value) {\r\n this.focusedElementValue = value;\r\n },\r\n clearFocus() {\r\n this.focusedElementValue = '';\r\n }\r\n },\r\n template: `\r\n
\r\n \r\n \r\n {{ checkbox.label }}\r\n \r\n \r\n \r\n
\r\n \r\n `\r\n});\r\n","import Vue from 'vue';\r\nimport { getElementTop } from '@Shared/utils/get-element-top';\r\nimport { IS_DEV } from '@Shared/settings';\r\n\r\nconst alignElement = (el, targetElementSelector) => {\r\n const targetElement = document.querySelector(targetElementSelector);\r\n\r\n if (targetElement) {\r\n const targetElTop = getElementTop(targetElement);\r\n const elTop = getElementTop(el);\r\n const paddingTop = `${targetElTop - elTop}px`;\r\n\r\n if (getComputedStyle(el).paddingTop !== paddingTop) {\r\n el.style['padding-top'] = paddingTop;\r\n }\r\n }\r\n};\r\n\r\nVue.directive('align-with', (el, binding) => {\r\n try {\r\n if (!('isObserved' in el.dataset)) {\r\n const resizeObserver = new ResizeObserver(() => {\r\n alignElement(el, binding.value);\r\n });\r\n\r\n resizeObserver.observe(el);\r\n\r\n el.dataset.isObserved = 'true';\r\n return;\r\n }\r\n\r\n alignElement(el, binding.value);\r\n }\r\n catch (error) {\r\n (IS_DEV && console.error('Vue directive align-with error:', error));\r\n }\r\n});\r\n","import Vue from \"vue\";\r\n\r\nVue.directive(\"check-if-disable-condition\", {\r\n inserted: function (el, binding, vnode) {\r\n // Disable condition is coming from backend\r\n const vm = vnode.context;\r\n const isDisabled = (binding.expression === \"true\");\r\n vm.$root.$on(\"Emit::CheckIfDisableCondition\", function (args) {\r\n if (isDisabled) {\r\n args.oElement.remove();\r\n }\r\n });\r\n }\r\n});\r\n","import Vue from \"vue\";\r\n\r\nVue.directive(\"check-if-disable\", {\r\n inserted: function (el, binding, vnode) {\r\n // Disable link is in Sitecore(richtext field)\r\n const vm = vnode.context;\r\n vm.$root.$emit(\"Emit::CheckIfDisableCondition\", { oElement: el });\r\n }\r\n});\r\n","import Vue from \"vue\";\r\n\r\nVue.directive(\"copy-content-to\", {\r\n inserted: function (el, binding, vnode) {\r\n let parentDataProperty = binding.expression;\r\n let content = binding.modifiers.html ? el.innerHTML : el.innerText;\r\n content = binding.modifiers.trim ? content.trim() : content;\r\n\r\n Vue.set(vnode.context, parentDataProperty, content);\r\n }\r\n});","import Vue from 'vue';\r\n\r\nVue.directive('disable-select-placeholder', {\r\n bind(el, binding, vNode) {\r\n vNode.children[0].elm.disabled = true;\r\n }\r\n});\r\n","/* eslint-disable */\r\nimport Vue from \"vue\";\r\n\r\nVue.directive(\"float-total-block\", {\r\n inserted: function(el, binding, vnode) {\r\n const vm = vnode.context;\r\n const maxWidthMid = 767;\r\n const maxWidthSmall = 480;\r\n\r\n const hasTotalBlockMobile = (el.attributes[\"float-total-block-mobile\"].value == \"true\");\r\n vm.lastScrollTop = 0;\r\n\r\n let { left, width, height } = el.getBoundingClientRect();\r\n let universalbar = document.getElementsByClassName(\"HeaderNav__nav--top\")[0];\r\n let navbar = document.getElementsByClassName(\"HeaderNav__nav--bottom\")[0];\r\n let stepsIndicator = document.getElementsByClassName(\"steps-indicator-bg\")[0];\r\n\r\n let universalbarHeight = universalbar ? universalbar.offsetHeight : 0;\r\n let headerHeight = navbar ? navbar.offsetHeight : 0;\r\n let stepHeight = stepsIndicator ? stepsIndicator.offsetHeight : 0;\r\n let fixedElHeight = universalbarHeight + headerHeight + stepHeight + 30; //fixed header in top + steps-indicator(if have) + 30px margin between header and total block\r\n\r\n let parentEl = el.closest(\"aside\");\r\n let sidebarBottomPos = parentEl ? (parentEl.offsetHeight - height) : 0;\r\n\r\n vm.deviceResolution = \"screen-lg\";\r\n\r\n if (window.innerWidth <= maxWidthMid) {\r\n vm.deviceResolution = \"screen-sm\";\r\n }\r\n\r\n if (window.innerWidth <= maxWidthSmall) {\r\n vm.deviceResolution = \"screen-xs\";\r\n }\r\n\r\n function toggleClass(element, addClass, removeClass) {\r\n if (element && element.length && element.length > 0) {\r\n for (let i = 0; i < element.length; i++) {\r\n if (element[i]) {\r\n if (!!removeClass) {\r\n element[i].classList.remove(removeClass);\r\n }\r\n if (!!addClass) {\r\n element[i].classList.add(addClass);\r\n }\r\n }\r\n }\r\n } else if (element && !!element.length) {\r\n if (!!removeClass) {\r\n element.classList.remove(removeClass);\r\n }\r\n if (!!addClass) {\r\n element.classList.add(addClass);\r\n }\r\n }\r\n }\r\n\r\n function setBlockClass() {\r\n sidebarBottomPos = parentEl ? (parentEl.offsetHeight - height) : 0;\r\n if (window.scrollY >= fixedElHeight) {\r\n el.classList.add(\"fix-block\");\r\n el.style.left = left + \"px\";\r\n el.style.width = width + \"px\";\r\n } else {\r\n el.classList.remove(\"fix-block\");\r\n el.style.removeProperty(\"width\");\r\n el.style.removeProperty(\"left\");\r\n }\r\n\r\n if (window.scrollY /*- fixedElHeight*/ >= sidebarBottomPos) {\r\n el.classList.add(\"bottom-block\");\r\n el.style.width = width + \"px\";\r\n el.style.removeProperty(\"left\");\r\n } else {\r\n el.classList.remove(\"bottom-block\");\r\n el.style.left = left + \"px\";\r\n }\r\n }\r\n\r\n window.addEventListener(\"load\", () => {\r\n const rect = el.getBoundingClientRect();\r\n left = rect.left;\r\n width = rect.width;\r\n height = rect.height;\r\n\r\n universalbar = document.getElementsByClassName(\"HeaderNav__nav--top\")[0];\r\n navbar = document.getElementsByClassName(\"HeaderNav__nav--bottom\")[0];\r\n stepsIndicator = document.getElementsByClassName(\"steps-indicator-bg\")[0];\r\n\r\n universalbarHeight = universalbar ? universalbar.offsetHeight : 0;\r\n headerHeight = navbar ? navbar.offsetHeight : 0;\r\n stepHeight = stepsIndicator ? stepsIndicator.offsetHeight : 0;\r\n fixedElHeight = universalbarHeight + headerHeight + stepHeight + 30; //fixed header in top + steps-indicator(if have) + 30px margin between header and total block\r\n\r\n parentEl = el.closest(\"aside\");\r\n sidebarBottomPos = parentEl ? (parentEl.offsetHeight - height) : 0;\r\n\r\n if (window.innerWidth > maxWidthMid) {\r\n el.style.top = fixedElHeight + \"px\"; // 170px is the fixed header in top + 30px margin between header and total block\r\n } else {\r\n document.getElementsByClassName(\"has-total\")[0].style.paddingTop =\r\n height + stepHeight + \"px\";\r\n }\r\n });\r\n\r\n vm.$root.$on(\"update-float-total-block\", data => {\r\n if (window.innerWidth > maxWidthMid) {\r\n const cardOpenTimeout = setTimeout(() => {\r\n clearTimeout(cardOpenTimeout);\r\n setBlockClass();\r\n }, 200);\r\n }\r\n });\r\n\r\n window.addEventListener(\"resize\", () => {\r\n //parentEl = el.closest(\"aside\");\r\n if (window.innerWidth > maxWidthMid) {\r\n if (vm.deviceResolution != \"screen-lg\") {\r\n vm.deviceResolution = \"screen-lg\";\r\n }\r\n document\r\n .getElementsByClassName(\"has-total\")[0]\r\n .removeAttribute(\"style\");\r\n //el.style.top = fixedElHeight + \"px\"; // 170px is the fixed header in top + 30px margin between header and total block\r\n parentEl.style.minHeight = el.offsetHeight + \"px\";\r\n\r\n left = parentEl.getClientRects()[0].left + 15; // 15px is the padding of the column\r\n width = parentEl.offsetWidth - 30; // 30px is the padding(left and right) of the column\r\n\r\n setBlockClass();\r\n } else {\r\n vm.deviceResolution = \"screen-sm\";\r\n if (window.outerWidth <= maxWidthSmall && vm.deviceResolution != \"screen-xs\") {\r\n vm.deviceResolution = \"screen-xs\";\r\n }\r\n\r\n el.classList.remove(\"bottom-block\");\r\n el.classList.remove(\"fix-block\");\r\n\r\n height = el.offsetHeight;\r\n document.getElementsByClassName(\"has-total\")[0].style.paddingTop = (height + stepHeight - 20) + \"px\";\r\n\r\n if (window.outerWidth >= maxWidthSmall && hasTotalBlockMobile) { // if Scroll down/up functionallity for mobile version has been applied, back to initial state\r\n toggleClass(document.getElementsByClassName(\"hide-when-scrolling\"), \"visible\", \"hidden\");\r\n toggleClass(document.getElementsByClassName(\"header\")[0], \"visible\", \"hidden\");\r\n toggleClass(document.getElementsByClassName(\"funnel-steps-indicator\")[0], \"visible\", \"invisible\");\r\n el.classList.remove(\"fixed-top\");\r\n }\r\n el.removeAttribute(\"style\");\r\n parentEl.removeAttribute(\"style\");\r\n }\r\n });\r\n\r\n window.addEventListener(\"scroll\", () => {\r\n //parentEl = el.closest(\"aside\");\r\n if (window.innerWidth > maxWidthMid) {\r\n parentEl.style.minHeight = el.offsetHeight + \"px\";\r\n\r\n left = el.getClientRects()[0].left;\r\n width = el.offsetWidth;\r\n\r\n setBlockClass();\r\n } else if (window.innerWidth <= maxWidthSmall && hasTotalBlockMobile) {\r\n //Scroll down/up functionallity for mobile version\r\n vm.st = window.pageYOffset;\r\n vm.scrollTop = window.scrollY;\r\n\r\n if (vm.st >= vm.lastScrollTop) {\r\n //scrolling down\r\n\r\n // if Save my quote is open, no custum scroll functionality\r\n const saveQuoteEl = document.querySelector('aside .sb-total-premium > .buttons .component--save-for-later .save-and-continue');\r\n\r\n // if ($(\"aside .sb-total-premium > .buttons .component--save-for-later .save-and-continue\").is(\":visible\")) {\r\n if (saveQuoteEl && saveQuoteEl.style.display !== 'none') {\r\n return;\r\n }\r\n\r\n if (vm.lastScrollTop > 50) {\r\n toggleClass(document.getElementsByClassName(\"hide-when-scrolling\"), \"hidden\", \"visible\");\r\n toggleClass(document.getElementsByClassName(\"header\")[0], \"hidden\", \"visible\");\r\n toggleClass(document.getElementsByClassName(\"funnel-steps-indicator\")[0], \"invisible\", \"visible\");\r\n el.classList.add(\"fixed-top\");\r\n }\r\n } else {\r\n //scrolling up\r\n toggleClass(document.getElementsByClassName(\"hide-when-scrolling\"), \"visible\", \"hidden\");\r\n //toggleClass(document.getElementsByClassName('.header')[0], \"visible\", \"hidden\");\r\n toggleClass(document.getElementsByClassName(\"funnel-steps-indicator\")[0], \"invisible\", \"visible\");\r\n el.classList.add(\"fixed-top\");\r\n }\r\n //detect bottom\r\n if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {\r\n toggleClass(document.getElementsByClassName(\"hide-when-scrolling\"), \"visible\", \"hidden\");\r\n toggleClass(document.getElementsByClassName(\"header\")[0], \"hidden\", \"visible\");\r\n toggleClass(document.getElementsByClassName(\"funnel-steps-indicator\")[0], \"invisible\", \"visible\");\r\n el.classList.add(\"fixed-top\");\r\n }\r\n\r\n //detect top\r\n if (vm.scrollTop <= 0) {\r\n toggleClass(document.getElementsByClassName(\"hide-when-scrolling\"), \"visible\", \"hidden\");\r\n toggleClass(document.getElementsByClassName(\"header\")[0], \"visible\", \"hidden\");\r\n toggleClass(document.getElementsByClassName(\"funnel-steps-indicator\")[0], \"visible\", \"invisible\");\r\n el.classList.remove(\"fixed-top\");\r\n }\r\n\r\n vm.lastScrollTop = vm.st;\r\n }\r\n });\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport GoogleAnalytics from '@Shared/utils/GoogleAnalytics';\r\n\r\nVue.directive('track-checkbox', {\r\n update: (el, binding) => {\r\n const { value: { isChecked, labelElClass = '' }, oldValue: { isChecked: prevIsChecked } } = binding;\r\n\r\n // Don't track on initial mount or if the checkbox state hasn't changed.\r\n if (prevIsChecked === undefined || isChecked === prevIsChecked) return;\r\n\r\n const labelEl = el.parentElement.getElementsByClassName(labelElClass)[0];\r\n const label = labelEl ? labelEl.innerText : el.parentElement.innerText;\r\n\r\n GoogleAnalytics.push({\r\n event: 'checkbox',\r\n checkbox_item: label || 'Error: No text found.',\r\n action: isChecked ? 'select' : 'deselect'\r\n });\r\n }\r\n});\r\n","import requireAll from '@Shared/utils/require-all';\r\n\r\nrequireAll(require.context('./components/', true, /\\.js$/));\r\nrequireAll(require.context('./directives/', true, /\\.js$/));\r\n\r\nimport(/* webpackChunkName: 'styles.forms' */ \"@Styles/forms\");","import EventEmitter from '@Shared/utils/EventEmitter';\r\n\r\nconst events = [ 'component-state:change' ];\r\n\r\n/**\r\n * Utility class for tracking the state of components in the funnel\r\n */\r\nclass FunnelComponentsStates extends EventEmitter {\r\n constructor(options) {\r\n super(options);\r\n this.events = options.events;\r\n this.isProgressBarMounted = false;\r\n this.isPremiumDiscountsMounted = false;\r\n }\r\n\r\n set isProgressBarMounted(isMounted) {\r\n const previousState = this._progressBarIsMounted;\r\n\r\n this._progressBarIsMounted = isMounted;\r\n\r\n if (previousState !== isMounted) {\r\n this.emit(events[0]);\r\n }\r\n }\r\n get isProgressBarMounted() {\r\n return this._progressBarIsMounted;\r\n }\r\n\r\n set isPremiumDiscountsMounted(isMounted) {\r\n const previousState = this._premiumDiscountsIsMounted;\r\n\r\n this._premiumDiscountsIsMounted = isMounted;\r\n\r\n if (previousState !== isMounted) {\r\n this.emit(events[0]);\r\n }\r\n }\r\n get isPremiumDiscountsMounted() {\r\n return this._premiumDiscountsIsMounted;\r\n }\r\n}\r\n\r\nexport default new FunnelComponentsStates({ events });\r\n","import EventBus from '@Shared/utils/event-bus';\r\n\r\nclass PageLoadUtil {\r\n constructor() {\r\n this.loadingComponents = [];\r\n this.pageLoadTimeout = undefined;\r\n\r\n this.startPageLoadTimeout = this.startPageLoadTimeout.bind(this);\r\n window.addEventListener('load', this.startPageLoadTimeout);\r\n }\r\n\r\n startPageLoadTimeout() {\r\n window.removeEventListener('load', this.startPageLoadTimeout);\r\n if (this.loadingComponents.length) {\r\n const maxTimeout = Math.max(...this.loadingComponents.map(comp => comp.timeout));\r\n this.pageLoadTimeout = setTimeout(() => this.onPageLoad(false), maxTimeout);\r\n } else {\r\n this.onPageLoad(true);\r\n }\r\n }\r\n\r\n onPageLoad(isNoPageLoadDelay) {\r\n EventBus.$emit('pageLoadUtil:PageLoaded', isNoPageLoadDelay);\r\n this.loadingComponents = [];\r\n if (this.pageLoadTimeout) {\r\n clearTimeout(this.pageLoadTimeout);\r\n this.pageLoadTimeout = undefined;\r\n }\r\n }\r\n\r\n setComponentLoading(compName, timeout) {\r\n if (!this.loadingComponents.some(comp => comp.name === compName)) {\r\n this.loadingComponents.push({ name: compName, timeout });\r\n }\r\n }\r\n\r\n setComponentLoaded(compName) {\r\n if (this.loadingComponents.length) {\r\n this.loadingComponents = this.loadingComponents.filter(comp => comp.name !== compName);\r\n // edge case: component loads before document loads or after timeout triggered, \r\n // then pageLoadTimeout is undefined, will not trigger page load as expected\r\n if (!this.loadingComponents.length && this.pageLoadTimeout) {\r\n this.onPageLoad(false);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default new PageLoadUtil();\r\n","import Vue from 'vue';\r\nimport api from '../mixins/api';\r\nimport _merge from 'lodash/merge';\r\nimport scrollInputToPageTop from '../../shared/mixins/scroll-input-to-page-top';\r\n\r\nVue.component('car-auto-complete', {\r\n inject: [ '$validator' ],\r\n mixins: [ api, scrollInputToPageTop ],\r\n props: {\r\n storeName: String,\r\n modelSpace: String\r\n },\r\n data() {\r\n return {\r\n carEndpoint: {\r\n url: '',\r\n method: 'POST',\r\n options: {}\r\n },\r\n validateEndpoint: {\r\n url: '',\r\n method: 'POST',\r\n options: {}\r\n },\r\n carModel: null\r\n };\r\n },\r\n computed: {\r\n Model: function () {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n created() {\r\n this.carEndpoint.url = this.api.getCars;\r\n this.validateEndpoint.url = this.api.validateCarName;\r\n\r\n this.carModel = this;\r\n const modelDrilldown = this.modelSpace.split('.');\r\n modelDrilldown.forEach((level) => {\r\n this.carModel = this.carModel[level];\r\n });\r\n },\r\n methods: {\r\n onCarUpdated(car) {\r\n if (car) {\r\n _merge(this.carModel, car);\r\n if (this.carModel) {\r\n this.carModel.Title = null;\r\n }\r\n }\r\n }\r\n }\r\n});\r\n","import Vue from \"vue\";\r\n\r\nVue.component('car-commercial-use', {\r\n props: {\r\n storeName: String,\r\n commercialUsePopup: String,\r\n isChangeMode: Boolean,\r\n beforeSubmitQueue: Function,\r\n },\r\n\r\n inject: [\"$validator\"],\r\n\r\n computed: {\r\n Model: function () {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n created() {\r\n if (this.isChangeMode) {\r\n Vue.set(this.Model.Car, \"CommercialUse\", false); //default input to No (false);\r\n }\r\n },\r\n data() {\r\n return {\r\n hyperLinkModalId: \"CarMainDetails.CommercialUse\"\r\n }\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n vm.beforeSubmitQueue(callback => {\r\n vm.$validator.validate().then(valid => {\r\n if (valid) {\r\n if (vm.Model.Car.CommercialUse == true) {\r\n vm.$globalModal.show(vm.commercialUsePopup);\r\n }\r\n else {\r\n callback();\r\n }\r\n }\r\n });\r\n });\r\n },\r\n\r\n methods: {\r\n onCommercialUseChange() {\r\n if (this.Model.Car.CommercialUse == true) {\r\n this.$globalModal.show(this.commercialUsePopup);\r\n }\r\n },\r\n showHyperLinkModal() {\r\n this.$globalModal.show(this.hyperLinkModalId);\r\n },\r\n }\r\n})\r\n","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport _merge from \"lodash/merge\";\r\nimport api from \"../mixins/api\";\r\nimport storageUtils from \"../../shared/mixins/storage-utils\";\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component('car-funnel', {\r\n mixins: [api, storageUtils],\r\n\r\n props: {\r\n model: Object,\r\n funnelDict: {\r\n type: Object,\r\n default: {}\r\n },\r\n basketCount: Number\r\n },\r\n\r\n data() {\r\n return {\r\n Model: {},\r\n Funnel: {\r\n \"Api\": \"CarApi\",\r\n \"DriversList\": [],\r\n \"ProposalPersonsList\": []\r\n },\r\n funnelProperties: {},\r\n funnelMethods: {}\r\n };\r\n },\r\n\r\n watch: {\r\n \"Model.ActiveStep\": function (newVal, oldVal) {\r\n this.Funnel.DriversList = [];\r\n this.Model.Drivers.forEach(driver => {\r\n const driverName = driver.FirstName ? driver.FirstName + \" \" + driver.LastName : driver.ProposalDriverName;\r\n if (driverName) {\r\n this.Funnel.DriversList.push({\r\n \"Id\": driver.Id,\r\n \"Name\": driverName,\r\n \"EmailAddress\": driver.EmailAddress,\r\n \"IsAccountOwner\": driver.IsAccountOwner\r\n });\r\n }\r\n\r\n //sort alphabetialy by lastName\r\n this.Funnel.DriversList.sort((a, b) => {\r\n const namesA = a.Name.split(\" \");\r\n const namesB = b.Name.split(\" \");\r\n const nameA = namesA[1].toLowerCase();\r\n const nameB = namesB[1].toLowerCase();\r\n if (nameA < nameB)\r\n return -1;\r\n if (nameA > nameB)\r\n return 1;\r\n return 0;\r\n });\r\n });\r\n\r\n this.Funnel.DriversList.push({ \"Id\": \"0\", \"Name\": this.Labels.AnotherPerson });\r\n this.Funnel.DriversList.push({ \"Id\": \"1\", \"Name\": this.Labels.Business });\r\n\r\n this.Funnel.ProposalPersonsList = [];\r\n this.Model.ProposalDrivers.forEach(driver => {\r\n this.Funnel.ProposalPersonsList.push({\r\n \"Id\": driver.ProposalDriverId,\r\n \"Name\": driver.ProposalDriverName,\r\n \"EmailAddress\": driver.EmailAddress,\r\n \"IsAccountOwner\": driver.IsAccountOwner\r\n });\r\n });\r\n\r\n this.Funnel.ProposalPersonsList.push({ \"Id\": \"0\", \"Name\": this.Labels.AnotherPerson });\r\n this.Funnel.ProposalPersonsList.push({ \"Id\": \"1\", \"Name\": this.Labels.Business });\r\n }\r\n },\r\n\r\n computed: {\r\n Labels: function () {\r\n return this.funnelDict;\r\n }\r\n },\r\n\r\n created() {\r\n const vm = this;\r\n\r\n vm.storeName = vm.$options._componentTag;\r\n\r\n vm.$store.registerModule(vm.storeName, {\r\n namespaced: true,\r\n\r\n state: {\r\n model: vm.model\r\n },\r\n\r\n mutations: {\r\n mutate(state, payload) {\r\n state.model = payload;\r\n }\r\n }\r\n });\r\n\r\n vm.Model = vm.$store.state[vm.storeName].model;\r\n\r\n vm.Model.PageUrl = window.location.pathname.substring(0, 1) === \"/\"\r\n ? window.location.pathname.substring(1)\r\n : window.location.pathname;\r\n\r\n this.stateRestored = false;\r\n },\r\n\r\n mounted() {\r\n this.$root.$emit(\"Broadcast::UpdateShoppingBasketCount\", this.basketCount);\r\n\r\n this.savePageState();\r\n },\r\n\r\n methods: {\r\n savePageState() {\r\n if (ir && ir.antiforgeryKey && this.hasExistingPageState(this.hashCode(ir.antiforgeryKey))) {\r\n this.restoreState();\r\n }\r\n },\r\n\r\n restoreState() {\r\n if (!this.stateRestored) {\r\n const vm = this;\r\n this.stateRestored = true;\r\n\r\n axios.post(vm.api.restoreFunnelStep, { ...vm.Model })\r\n .then(result => {\r\n\r\n if (result.status !== 200)\r\n return;\r\n\r\n const data = result.data;\r\n\r\n if (data.RedirectUrl) {\r\n UnsavedChangesPopup.redirect(data.RedirectUrl);\r\n }\r\n\r\n if (data.Result) {\r\n _merge(vm.Model, data.Result);\r\n\r\n vm.$root.$emit(\"Broadcast::DriversInitialization\");\r\n }\r\n })\r\n .catch(result => {\r\n //do nothing\r\n });\r\n }\r\n }\r\n }\r\n})","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport api from \"../mixins/api\";\r\n\r\nVue.component('car-init', {\r\n props: {\r\n storeName: String,\r\n aggregatorsPopup: String,\r\n beforeSubmitQueue: Function,\r\n selectedFillOptionDefaultValue: String\r\n },\r\n\r\n mixins: [api],\r\n inject: [\"$validator\"],\r\n\r\n computed: {\r\n Model: function () {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n created() {\r\n if (this.selectedFillOptionDefaultValue !== '') {\r\n this.selectFillOption(this.selectedFillOptionDefaultValue);\r\n }\r\n },\r\n mounted() {\r\n const vm = this;\r\n\r\n vm.submitParent = document.querySelectorAll(\"button[type=submit]\")[0].closest(\".step-buttons\");\r\n if (vm.submitParent) {\r\n //hide the main step submit button\r\n if (!vm.Model.SelectedFillOption) {\r\n vm.submitParent.style.display = \"none\";\r\n } else {\r\n vm.submitParent.style.display = \"block\";\r\n }\r\n }\r\n\r\n if (vm.Model.IsAggregatorRequest &&\r\n !vm.Model.DriverLicenseNumber.DriverHomeAddress.InternationalAddressId &&\r\n !vm.Model.DriverPostCode.DriverHomeAddress.InternationalAddressId) {\r\n vm.$globalModal.show(vm.aggregatorsPopup);\r\n }\r\n\r\n vm.beforeSubmitQueue(callback => {\r\n vm.$validator.validate().then(valid => {\r\n if (valid) {\r\n if (vm.Model.SelectedFillOption == \"0\") { // use Postal code form\r\n //clear DriverLicenseNumber\r\n vm.Model.DriverLicenseNumber = Object.assign({}, vm.Model.DriverLicenseNumber, {\r\n DriverHomeAddress: { IsEmpty: true }\r\n })\r\n\r\n axios.post(vm.api.StartFunnelByPostCode, { ...vm.Model.DriverPostCode })\r\n .then(response => {\r\n vm.Model.Car.ParkingPostCode = vm.Model.DriverPostCode.DriverHomeAddress.PostCode;\r\n callback();\r\n })\r\n //.catch(error => console.log(error));\r\n } else { // use Driver License Form\r\n //clear DriverPostCode\r\n vm.Model.DriverPostCode = Object.assign({}, vm.Model.DriverPostCode, {\r\n DriverHomeAddress: { IsEmpty: true }\r\n });\r\n\r\n axios.post(vm.api.StartFunnelByLicenseNumber, { ...vm.Model.DriverLicenseNumber })\r\n .then(response => {\r\n if (response.data.ProposalCars) {\r\n vm.Model.Car.ProposalCars = response.data.ProposalCars;\r\n }\r\n vm.Model.Car.ParkingPostCode = vm.Model.DriverLicenseNumber.DriverHomeAddress.PostCode;\r\n callback();\r\n })\r\n //.catch(error => console.log(error));\r\n }\r\n } else {\r\n Vue.prototype.handleInvalidForm(vm);\r\n }\r\n });\r\n });\r\n },\r\n methods: {\r\n selectFillOption(selectedOption) {\r\n const vm = this;\r\n Vue.set(vm.Model, \"SelectedFillOption\", selectedOption);\r\n\r\n if (vm.submitParent) {\r\n vm.submitParent.style.display = \"block\";\r\n }\r\n }\r\n }\r\n})\r\n","import Vue from \"vue\";\r\nimport sharedUtils from \"../../../shared/mixins/shared-utils\";\r\n\r\nVue.component('car-owner-details', {\r\n inject: [\"$validator\"],\r\n\r\n props: {\r\n storeName: String,\r\n carOwnerNameField: String,\r\n labels: {}\r\n },\r\n\r\n data() {\r\n return {\r\n isSelectedDriverAccountOwner: false,\r\n hideEmailAddress: false\r\n }\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n mounted() {\r\n this.initializeFields();\r\n this.initializeSelectedOwner();\r\n\r\n this.$eventBus.$on('additional-driver:name-change', this.driverNameChangeHandler)\r\n },\r\n\r\n beforeDestroy() {\r\n this.$eventBus.$off('additional-driver:name-change', this.driverNameChangeHandler);\r\n },\r\n\r\n methods: {\r\n initializeFields() {\r\n const vm = this;\r\n\r\n let carOwnerOptions = vm.dropdownOptions[vm.carOwnerNameField];\r\n if (vm.Model.ProposalDrivers && vm.Model.ProposalDrivers.length > 0) {\r\n for (let i = vm.Model.ProposalDrivers.length - 1; i >= 0; i--) {\r\n carOwnerOptions.push({ v: vm.Model.ProposalDrivers[i].ProposalDriverId, t: vm.Model.ProposalDrivers[i].ProposalDriverName });\r\n //Decode ProposalDrivers' names\r\n Vue.set(vm.Model.ProposalDrivers[i], \"FirstName\", sharedUtils.methods.decodeHTML(vm.Model.ProposalDrivers[i].FirstName));\r\n Vue.set(vm.Model.ProposalDrivers[i], \"LastName\", sharedUtils.methods.decodeHTML(vm.Model.ProposalDrivers[i].LastName));\r\n Vue.set(vm.Model.ProposalDrivers[i], \"ProposalDriverName\", sharedUtils.methods.decodeHTML(vm.Model.ProposalDrivers[i].ProposalDriverName));\r\n }\r\n carOwnerOptions.reverse();\r\n carOwnerOptions.push({ v: \"1\", t: vm.labels.Business });\r\n }\r\n\r\n //Decode Drivers' names\r\n if (vm.Model.Drivers && vm.Model.Drivers.length > 0) {\r\n for (let i = vm.Model.Drivers.length - 1; i >= 0; i--) {\r\n Vue.set(vm.Model.Drivers[i], \"FirstName\", sharedUtils.methods.decodeHTML(vm.Model.Drivers[i].FirstName));\r\n Vue.set(vm.Model.Drivers[i], \"LastName\", sharedUtils.methods.decodeHTML(vm.Model.Drivers[i].LastName));\r\n }\r\n }\r\n },\r\n\r\n initializeSelectedOwner() {\r\n const vm = this;\r\n const selectedCarOwner = vm.Model.CarAdditional.CarOwner;\r\n if (selectedCarOwner) {\r\n if (selectedCarOwner != \"0\" && selectedCarOwner != \"1\") { //driver or account owner\r\n var person = vm.findPerson(selectedCarOwner);\r\n if (person) {\r\n vm.isSelectedDriverAccountOwner = person.IsAccountOwner;\r\n\r\n vm.hideEmailAddress = !!person.EmailAddress;\r\n }\r\n } else {\r\n vm.isSelectedDriverAccountOwner = vm.Model.CarAdditional.IsAccountOwner;\r\n }\r\n }\r\n },\r\n\r\n onCarOwnerChanged() {\r\n const vm = this;\r\n const selectedCarOwner = vm.Model.CarAdditional.CarOwner;\r\n \r\n if (selectedCarOwner) {\r\n if (selectedCarOwner != \"0\" && selectedCarOwner != \"1\") { //driver or account owner\r\n var person = vm.findPerson(selectedCarOwner);\r\n if (person) {\r\n vm.Model.CarAdditional.CarOwnerEmail = person.EmailAddress;\r\n vm.isSelectedDriverAccountOwner = person.IsAccountOwner;\r\n \r\n vm.hideEmailAddress = !!person.EmailAddress;\r\n }\r\n else {\r\n vm.Model.CarAdditional.CarOwnerEmail = null;\r\n }\r\n }\r\n else if (selectedCarOwner == \"0\") { //another person\r\n vm.Model.CarAdditional.CarOwnerEmail = null;\r\n vm.Model.CarAdditional.CarOwnerFirstName = null;\r\n vm.Model.CarAdditional.CarOwnerLastName = null;\r\n vm.isSelectedDriverAccountOwner = false;\r\n vm.hideEmailAddress = false;\r\n }\r\n else if (selectedCarOwner == \"1\") { //company or business\r\n vm.Model.CarAdditional.CarOwnerEmail = null;\r\n vm.Model.CarAdditional.CarOwnerCompanyName = null;\r\n vm.isSelectedDriverAccountOwner = false;\r\n vm.hideEmailAddress = false;\r\n }\r\n vm.$validator.reset();\r\n }\r\n },\r\n\r\n findPerson(id) {\r\n return this.Model.ProposalDrivers.find((p) => { return p.ProposalDriverId == id });\r\n },\r\n\r\n driverNameChangeHandler(driver) {\r\n let carOwnerOptions = this.dropdownOptions[this.carOwnerNameField];\r\n const changedDriver = carOwnerOptions.find(d => d.v === driver.ProposalDriverId);\r\n\r\n if (changedDriver) {\r\n changedDriver.t = `${driver.FirstName} ${driver.LastName}`;\r\n }\r\n }\r\n }\r\n})","import Vue from 'vue';\r\nimport { hideElement } from '@Shared/utils/dom-utils';\r\nimport EventBus from '@Shared/utils/event-bus';\r\n\r\nVue.component('car-selection', {\r\n props: {\r\n storeName: String,\r\n BasketCount: Number,\r\n isAuthenticated: Boolean,\r\n aggregatorsPopup: String,\r\n aggregatorsTwoCarsPopup: String,\r\n aggregatorsMoreCarsPopup: String,\r\n cookieBanner: String,\r\n //ProposalCarsList: Array,\r\n PurchaseConditionDefaultValue: String,\r\n CommuteDistanceDefaultValue: Number,\r\n BusinessUseDefaultValue: Number\r\n },\r\n inject: ['$validator'],\r\n\r\n data() {\r\n return {\r\n //proposalCars: this.ProposalCarsList,\r\n basketItemCount: this.BasketCount,\r\n purchaseCondition: this.PurchaseConditionDefaultValue,\r\n selectedCarIndex: 0\r\n };\r\n },\r\n\r\n computed: {\r\n Model: function () {\r\n const model = this.$store.state[this.storeName].model;\r\n if (model.Car && model.Car.ProposalCars) {\r\n Vue.set(model, 'ProposalCars', model.Car.ProposalCars);\r\n }\r\n if (!model.Car || !model.Car.BusinessUsePercentage) {\r\n Vue.set(model, 'Car.BusinessUsePercentage', this.BusinessUseDefaultValue);\r\n }\r\n if (!model.Car || !model.Car.BusinessUsePercentage) {\r\n Vue.set(model, 'Car.BusinessUsePercentage', this.BusinessUseDefaultValue);\r\n }\r\n return model;\r\n }\r\n },\r\n mounted() {\r\n const vm = this;\r\n\r\n if (vm.basketItemCount > 0 || vm.isAuthenticated) {\r\n hideElement(document.getElementsByClassName('btn-funnel-back'));\r\n }\r\n\r\n //this.selectedCarIndex = function () {\r\n let proposalCarIndex = null;\r\n const carModel = vm.Model.Car;\r\n\r\n vm.Model.ProposalCars.forEach((c, index) => {\r\n if (c.VIN == carModel.VIN &&\r\n c.Model == carModel.Model &&\r\n c.Brand == carModel.Brand &&\r\n c.Year == carModel.Year &&\r\n c.FullName == carModel.FullName) {\r\n proposalCarIndex = index;\r\n }\r\n });\r\n vm.selectedCarIndex = proposalCarIndex;\r\n //};\r\n\r\n Vue.nextTick(() => {\r\n if (vm.Model.IsAggregatorRequest && vm.basketItemCount === 0) {\r\n if (document.cookie.split(\";\").some((item) => item.trim().startsWith(\"CookiesConsent=\"))) {\r\n vm.showAggregatorPopup();\r\n } else {\r\n EventBus.$on('cookieConsentGiven', () => {\r\n vm.showAggregatorPopup();\r\n });\r\n }\r\n }\r\n });\r\n },\r\n methods: {\r\n showAggregatorPopup() {\r\n Vue.nextTick(() => {\r\n const vm = this;\r\n if (vm.Model.CarsCount == 1) {\r\n vm.$globalModal.show(vm.aggregatorsPopup);\r\n } else if (vm.Model.CarsCount == 2) {\r\n vm.$globalModal.show(vm.aggregatorsTwoCarsPopup);\r\n } else if (vm.Model.CarsCount > 2) {\r\n vm.$globalModal.show(vm.aggregatorsMoreCarsPopup);\r\n }\r\n });\r\n\r\n },\r\n setCar(index) {\r\n const isSelectedCar = this.selectedCarIndex !== index;\r\n this.clearCar();// clear the filds first\r\n\r\n if (isSelectedCar) {\r\n setTimeout(() => {\r\n this.Model.ProposalCars.forEach((oProposalCar, i) => {\r\n if (oProposalCar.isSelectedVehicle && i !== index) {\r\n Vue.set(this.Model.ProposalCars[i], 'isSelectedVehicle', false);\r\n }\r\n });\r\n const selectedCar = this.Model.ProposalCars[index];\r\n this.selectedCarIndex = index;\r\n this.Model.Car.Model = selectedCar.Model;\r\n this.Model.Car.Brand = selectedCar.Brand;\r\n this.Model.Car.Year = selectedCar.Year;\r\n this.Model.Car.VIN = selectedCar.VIN;\r\n this.Model.Car.FullName = selectedCar.FullName;\r\n this.Model.Car.IsYear6YearsOldOrNewer = selectedCar.IsYear6YearsOldOrNewer;\r\n\r\n //Note: if these values are returned, then populate them\r\n this.Model.Car.CommuteDistance = this.CommuteDistanceDefaultValue; // set default value, bacause service returns no such a value\r\n //$rootScope.$broadcast(\"Broadcast::SliderRangeOptionsAvailable\", { bindingName: \"Model.Car.CommuteDistance\" });\r\n //this.$root.$emit(\"DynamicListOptionsAvailable\", this.CommuteDistanceDefaultValue);\r\n\r\n this.Model.Car.BusinessUsePercentage = this.BusinessUseDefaultValue; // set default value, bacause service returns no such a value\r\n //$rootScope.$broadcast(\"Broadcast::SliderChoiceOptionsAvailable\", { bindingName: \"Model.Car.BusinessUsePercentage\" });\r\n\r\n this.Model.Car.PurchaseCondition = this.purchaseCondition;\r\n this.Model.Car.PurchaseDate = '';\r\n this.Model.Car.VehicleExtendedCode = selectedCar.VehicleExtendedCode;\r\n this.Model.Car.VIN1To8Positions = null;\r\n this.Model.Car.VIN910Positions = null;\r\n\r\n this.$validator.reset();\r\n });\r\n }\r\n },\r\n\r\n clearCar() {\r\n const parkingPostalCode = this.Model.Car.ParkingPostCode;\r\n //formCtrl.clear();\r\n //CommonUtils.resetForm(formCtrl);\r\n\r\n this.selectedCarIndex = null;\r\n this.Model.Car.Model = null;\r\n this.Model.Car.Brand = null;\r\n this.Model.Car.Year = null;\r\n this.Model.Car.VIN = null;\r\n this.Model.Car.FullName = null;\r\n this.Model.Car.IsYear6YearsOldOrNewer = null;\r\n this.Model.Car.AnnualDistance = '';\r\n this.Model.Car.WinterTires = null;\r\n\r\n this.Model.Car.CommuteDistance = this.CommuteDistanceDefaultValue;\r\n //$rootScope.$broadcast(\"Broadcast::SliderRangeOptionsAvailable\", { bindingName: \"Model.Car.CommuteDistance\" });\r\n\r\n this.Model.Car.BusinessUsePercentage = this.BusinessUseDefaultValue;\r\n //$rootScope.$broadcast(\"Broadcast::SliderChoiceOptionsAvailable\", { bindingName: \"Model.Car.BusinessUsePercentage\" });\r\n\r\n this.Model.Car.CommercialUse = '';\r\n this.Model.Car.PurchaseCondition = this.purchaseCondition;\r\n this.Model.Car.PurchaseDate = '';\r\n this.Model.Car.ParkingPostCode = parkingPostalCode;\r\n this.Model.Car.VehicleExtendedCode = null;\r\n this.Model.Car.VIN1To8Positions = null;\r\n this.Model.Car.VIN910Positions = null;\r\n\r\n this.$validator.reset();\r\n }\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport axios from 'axios';\r\nimport _debounce from 'lodash/debounce';\r\nimport { browserDetect } from '@Shared/utils/browser-detect';\r\n\r\nVue.component('car-typeahead', {\r\n inject: [ '$validator' ],\r\n props: {\r\n value: String,\r\n isAggregator: Boolean,\r\n inputLabel: String,\r\n carEndpoint: {\r\n type: Object,\r\n default: function () {\r\n return {\r\n url: '',\r\n method: '',\r\n options: {}\r\n };\r\n },\r\n validator: function (value) {\r\n return value && value.url && value.method && value.options;\r\n }\r\n },\r\n validateEndpoint: {\r\n type: Object,\r\n default: function () {\r\n return {\r\n url: '',\r\n method: '',\r\n options: {}\r\n };\r\n },\r\n validator: function (value) {\r\n return value && value.url && value.method && value.options;\r\n }\r\n }\r\n },\r\n data() {\r\n return {\r\n isLoading: false,\r\n viewValue: '',\r\n debounce: null,\r\n selectedCar: null,\r\n selectedCarIndex: null,\r\n carList: [],\r\n isOpen: false\r\n };\r\n },\r\n computed: {\r\n ariaHidden() {\r\n return this.carList.length ? 'true' : 'false';\r\n }\r\n },\r\n watch: {\r\n value: function (val, oldVal) {\r\n if (val && val != oldVal && val.length > 2) {\r\n if (this.viewValue !== val) {\r\n this.viewValue = val;\r\n this.carList = [];\r\n\r\n setTimeout(() => {\r\n this.$validator.validate(this.$attrs.name);\r\n });\r\n }\r\n }\r\n else if (val == null && this.viewValue !== val) {\r\n this.viewValue = val;\r\n this.carList = [];\r\n }\r\n }\r\n },\r\n created() {\r\n this.unknownValue = '?';\r\n },\r\n mounted() {\r\n if (this.isAggregator) {\r\n this.viewValue = this.value;\r\n this.requestData(this.value);\r\n }\r\n else if (this.value) {\r\n if (this.value == this.unknownValue) {\r\n this.emitValue(null, false);\r\n }\r\n this.viewValue = this.value;\r\n }\r\n\r\n this.$el.className = '';\r\n this.$refs.input.setAttribute('autocomplete', browserDetect() === 'edge' ? 'nope' : 'off');\r\n },\r\n methods: {\r\n onInputChange($event) {\r\n this.viewValue = $event.target.value;\r\n if (this.viewValue.length > 2) {\r\n if (!this.debounce) {\r\n this.debounce = _debounce(\r\n () => {\r\n this.requestData(this.viewValue);\r\n this.debounce = undefined;\r\n },\r\n 500\r\n );\r\n }\r\n this.debounce();\r\n }\r\n else {\r\n this.carList = [];\r\n this.isOpen = false;\r\n this.resetCar();\r\n\r\n if (this.viewValue.length === 0) {\r\n this.emitValue(null, true);\r\n }\r\n }\r\n },\r\n emitValue(value, validate) {\r\n this.$emit('input', value);\r\n\r\n if (validate) {\r\n setTimeout(() => {\r\n this.$validator.validate(this.$attrs.name);\r\n });\r\n }\r\n },\r\n requestData(requestData) {\r\n this.resetCar();\r\n\r\n this.isLoading = true;\r\n this.carList = [];\r\n this.isOpen = false;\r\n axios.request({\r\n url: this.carEndpoint.url,\r\n method: this.carEndpoint.method,\r\n params: this.carEndpoint.options,\r\n data: '\"' + requestData + '\"',\r\n headers: { 'Content-Type': 'application/json', skipLoading: 'true' }\r\n })\r\n .then((res) => {\r\n if (res.data) {\r\n if (requestData == this.viewValue) {\r\n this.handleResult(res.data);\r\n }\r\n }\r\n else {\r\n this.emitValue(this.unknownValue, true);\r\n this.resetCar();\r\n //skip api validation (not needed anymore)\r\n //this.validateCar(requestData);\r\n }\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n });\r\n },\r\n handleResult(data) {\r\n this.carList = data.map(item => ({\r\n Title: this.highlightText(item.Title, this.viewValue),\r\n FullName: item.Title,\r\n Brand: item.Brand,\r\n Model: item.Model,\r\n Year: item.Year,\r\n VIN: item.VIN,\r\n VIN1To8Positions: item.VIN1To8Positions,\r\n VIN910Positions: item.VIN910Positions,\r\n IsYear6YearsOldOrNewer: item.IsYear6YearsOldOrNewer,\r\n VehicleExtendedCode: item.VehicleExtendedCode,\r\n IsAggregatorData: false\r\n }));\r\n if (this.carList.length) {\r\n if (this.carList.length === 1 && this.carList[0].FullName === this.viewValue) {\r\n this.selectCar(this.carList[0]);\r\n }\r\n\r\n this.openList();\r\n }\r\n },\r\n resetCar() {\r\n this.$emit('input', this.unknownValue);\r\n this.$emit('car-updated', {\r\n FullName: this.unknownValue,\r\n Brand: null,\r\n Model: null,\r\n Year: null,\r\n VIN: null,\r\n VIN1To8Positions: null,\r\n VIN910Positions: null,\r\n IsYear6YearsOldOrNewer: null,\r\n VehicleExtendedCode: null\r\n });\r\n },\r\n hideListOnClick() {\r\n this.isOpen = false;\r\n document.removeEventListener('click', this.hideListOnClick);\r\n },\r\n openList() {\r\n this.isOpen = true;\r\n setTimeout(() => document.addEventListener('click', this.hideListOnClick));\r\n },\r\n selectCar(car, event) {\r\n // On click of item, the event is propogating to the input. Which is keeping the list open.\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n\r\n this.isOpen = false;\r\n this.selectedCar = car;\r\n\r\n this.viewValue = this.selectedCar.FullName;\r\n this.emitValue(this.selectedCar.FullName, true);\r\n this.$emit('car-updated', this.selectedCar);\r\n },\r\n inputClicked() {\r\n if (this.carList.length) {\r\n this.openList();\r\n }\r\n },\r\n highlightText(text, fragment) {\r\n if (text) {\r\n const regex = new RegExp(fragment, 'gi');\r\n return text.replace(regex, str => '' + str + '');\r\n }\r\n else {\r\n return '';\r\n }\r\n },\r\n\r\n validateCar(carTitle) {\r\n this.isLoading = true;\r\n axios.request({\r\n url: this.validateEndpoint.url,\r\n method: this.validateEndpoint.method,\r\n params: this.validateEndpoint.options,\r\n data: '\"' + carTitle + '\"',\r\n headers: { 'Content-Type': 'application/json' }\r\n })\r\n .then((res) => {\r\n this.carList = [];\r\n this.viewValue = carTitle;\r\n this.emitValue(carTitle, true);\r\n this.$emit('car-updated', carTitle);\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n });\r\n },\r\n\r\n isActive(index) {\r\n return index === this.selectedCarIndex;\r\n },\r\n selectIndex(index) {\r\n this.selectedCarIndex = index;\r\n },\r\n arrowKeyMapper(event) {\r\n if (!this.isOpen) return;\r\n switch (event.keyCode) {\r\n case 40: //arrow down\r\n if (this.selectedCarIndex === null) {\r\n this.selectedCarIndex = 0;\r\n }\r\n else if (this.selectedCarIndex < this.carList.length - 1) {\r\n this.selectedCarIndex++;\r\n }\r\n break;\r\n case 38: //arrow up\r\n if (this.selectedCarIndex === null) {\r\n this.selectedCarIndex = this.carList.length - 1;\r\n }\r\n else if (this.selectedCarIndex > 0) {\r\n this.selectedCarIndex--;\r\n }\r\n break;\r\n case 13: // Enter\r\n this.selectCar(this.carList[this.selectedCarIndex]);\r\n event.preventDefault();\r\n break;\r\n }\r\n if (this.selectedCarIndex !== null) {\r\n setTimeout(() => {\r\n const activeElement = this.$refs.list.querySelector('li.active');\r\n if (activeElement) {\r\n this.$refs.list.scrollTop = activeElement.offsetTop;\r\n }\r\n });\r\n }\r\n }\r\n },\r\n template: `\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
`\r\n});\r\n","import Vue from 'vue';\r\nimport api from '../mixins/changeCarTempApi';\r\nimport clearMyAccountClasses from '@Shared/utils/clear-my-account-classes';\r\n\r\nVue.component('change-funnel-temp', {\r\n mixins: [api],\r\n props: {\r\n model: Object,\r\n funnelDict: {\r\n type: Object,\r\n default: {}\r\n },\r\n basketCount: Number\r\n },\r\n data() {\r\n return {\r\n Model: {},\r\n Funnel: {\r\n DriversList: [],\r\n ProposalPersonsList: []\r\n },\r\n funnelProperties: {},\r\n funnelMethods: {},\r\n isSelectedDriverAccountOwner: false\r\n };\r\n },\r\n\r\n computed: {\r\n Labels: function () {\r\n return this.funnelDict;\r\n }\r\n },\r\n created() {\r\n const vm = this;\r\n vm.storeName = vm.$options._componentTag;\r\n\r\n vm.$store.registerModule(vm.storeName, {\r\n namespaced: true,\r\n\r\n state: {\r\n model: vm.model\r\n },\r\n\r\n mutations: {\r\n mutate(state, payload) {\r\n state.model = payload;\r\n }\r\n }\r\n });\r\n\r\n vm.Model = vm.$store.state[vm.storeName].model;\r\n\r\n clearMyAccountClasses();\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n vm.$root.$emit('Broadcast::UpdateShoppingBasketCount', vm.basketCount);\r\n\r\n const hasAnyVisibleAndNotMarkedAsRemovedDrivers = vm.Model.Drivers.some(this.hasAnyVisibleAndNotMarkedAsRemoved);\r\n vm.Model.Drivers.forEach((driver) => {\r\n if (driver.IsInvisible || hasAnyVisibleAndNotMarkedAsRemovedDrivers) {\r\n const driverName = driver.FirstName ? driver.FirstName + ' ' + driver.LastName : driver.ProposalDriverName;\r\n if (driverName) {\r\n vm.Funnel.DriversList.push({\r\n Id: driver.Id,\r\n Name: driverName,\r\n EmailAddress: driver.EmailAddress,\r\n IsAccountOwner: driver.IsAccountOwner\r\n });\r\n }\r\n }\r\n });\r\n\r\n vm.Model.ProposalDrivers.forEach((driver) => {\r\n const driverName = driver.FirstName ? driver.FirstName + ' ' + driver.LastName : driver.ProposalDriverName;\r\n if (driverName) {\r\n vm.Funnel.ProposalPersonsList.push({\r\n Id: driver.ProposalDriverId,\r\n Name: driverName,\r\n EmailAddress: driver.EmailAddress,\r\n IsAccountOwner: driver.IsAccountOwner\r\n });\r\n }\r\n });\r\n\r\n if (hasAnyVisibleAndNotMarkedAsRemovedDrivers) {\r\n const anotherPersonAndBusiness = [\r\n { Id: '0', Name: vm.Labels.AnotherPerson },\r\n {\r\n Id: '1', Name: vm.Labels.Business,\r\n EmailAddress: vm.Model.CarAdditional.CarOwner == '1' ? vm.Model.CarAdditional.CarOwnerEmail : null,\r\n CompanyName: vm.Model.CarAdditional.CarOwner == '1' ? vm.Model.CarAdditional.CarOwnerCompanyName : null\r\n }\r\n ];\r\n Vue.set(vm.Funnel, 'DriversList', vm.Funnel.DriversList.concat(anotherPersonAndBusiness));\r\n Vue.set(vm.Funnel, 'ProposalPersonsList', vm.Funnel.ProposalPersonsList.concat(anotherPersonAndBusiness));\r\n }\r\n\r\n //sort alphabetialy by lastName\r\n this.Funnel.DriversList.sort((a, b) => {\r\n const namesA = a.Name.split(' ');\r\n const namesB = b.Name.split(' ');\r\n const nameA = namesA[1].toLowerCase();\r\n const nameB = namesB[1].toLowerCase();\r\n if (nameA < nameB)\r\n return -1;\r\n if (nameA > nameB)\r\n return 1;\r\n return 0;\r\n });\r\n },\r\n\r\n //watch: {\r\n // \"Model.CarAdditional.CarOwner\": function (newValue, oldValue) {\r\n // if (newValue != undefined) {\r\n // var person = this.findPerson(newValue);\r\n // if (person != undefined) {\r\n // this.isSelectedDriverAccountOwner = person.IsAccountOwner || false;\r\n // }\r\n // if (newValue != oldValue) {\r\n // if (newValue != \"0\" && newValue != \"1\") {\r\n // if (person != undefined) {\r\n // Vue.set(this.Model.CarAdditional, \"CarOwnerEmail\", person.EmailAddress);\r\n // }\r\n // else {\r\n // Vue.set(this.Model.CarAdditional, \"CarOwnerEmail\", null);\r\n // }\r\n // }\r\n // else if (newValue == \"0\") {\r\n // Vue.set(this.Model.CarAdditional, \"CarOwnerEmail\", null);\r\n // Vue.set(this.Model.CarAdditional, \"CarOwnerFirstName\", null);\r\n // Vue.set(this.Model.CarAdditional, \"CarOwnerLastName\", null);\r\n // }\r\n // else if (newValue == \"1\") {\r\n // var company = this.findPerson(newValue);\r\n // if (company != undefined) {\r\n // Vue.set(this.Model.CarAdditional, \"CarOwnerEmail\", company.EmailAddress);\r\n // Vue.set(this.Model.CarAdditional, \"CarOwnerCompanyName\", company.CompanyName);\r\n // }\r\n // else {\r\n // Vue.set(this.Model.CarAdditional, \"CarOwnerEmail\", null);\r\n // Vue.set(this.Model.CarAdditional, \"CarOwnerCompanyName\", null);\r\n // }\r\n // }\r\n // }\r\n // }\r\n // },\r\n // \"Model.CarAdditional.Ownership\": function (newValue) {\r\n // if (newValue == undefined || newValue == \"\" || newValue == \"1\") {\r\n // Vue.set(this.Model.CarAdditional, \"LeasingCompanyName\", \"\");\r\n // Vue.set(this.Model.CarAdditional, \"FinanceCompanyName\", \"\");\r\n // }\r\n // }\r\n //},\r\n methods: {\r\n hasAnyVisibleAndNotMarkedAsRemoved: function (element) {\r\n return !element.IsInvisible && !element.IsDriverRemoved;\r\n }\r\n //findPerson: function(id) {\r\n // let person = undefined;\r\n // this.Funnel.DriversList.forEach(function (d) {\r\n // if (d.Id == id) {\r\n // person = d;\r\n // }\r\n // });\r\n\r\n // if (person === undefined) {\r\n // this.Funnel.ProposalPersonsList.forEach(function (d) {\r\n // if (d.Id == id) {\r\n // person = d;\r\n // }\r\n // });\r\n // }\r\n // if (person === undefined && this.Model.CarAdditional.IsAccountOwner) {\r\n // person = { IsAccountOwner: this.Model.CarAdditional.IsAccountOwner };\r\n // }\r\n // return person;\r\n //}\r\n }\r\n});\r\n","import { productsChangeCar } from '@Apis';\r\n\r\nexport default {\r\n computed: {\r\n api() {\r\n return productsChangeCar;\r\n }\r\n }\r\n};\r\n","import Vue from \"vue\";\r\nimport api from \"../mixins/changeCarApi\";\r\n\r\nVue.component('change-funnel', {\r\n mixins: [api],\r\n props: {\r\n model: Object,\r\n funnelDict: {\r\n type: Object,\r\n default: {}\r\n },\r\n basketCount: Number\r\n },\r\n data() {\r\n return {\r\n Model: {},\r\n Funnel: {},\r\n funnelProperties: {},\r\n funnelMethods: {}\r\n };\r\n },\r\n created() {\r\n const vm = this;\r\n vm.storeName = vm.$options._componentTag;\r\n\r\n vm.$store.registerModule(vm.storeName, {\r\n namespaced: true,\r\n\r\n state: {\r\n model: vm.model\r\n },\r\n\r\n mutations: {\r\n mutate(state, payload) {\r\n state.model = payload;\r\n }\r\n }\r\n });\r\n\r\n vm.Model = vm.$store.state[vm.storeName].model;\r\n },\r\n computed: {\r\n Labels: function () {\r\n return this.funnelDict;\r\n }\r\n },\r\n\r\n mounted() {\r\n this.$root.$emit(\"Broadcast::UpdateShoppingBasketCount\", this.basketCount);\r\n },\r\n\r\n watch: {\r\n \"Model.ActiveStep\": function (newVal, oldVal) {\r\n this.Funnel.DriversList = [];\r\n this.Model.Drivers.forEach(driver => {\r\n const driverName = driver.FirstName ? driver.FirstName + \" \" + driver.LastName : driver.ProposalDriverName;\r\n if (driverName) {\r\n this.Funnel.DriversList.push({\r\n \"Id\": driver.Id,\r\n \"Name\": driverName,\r\n \"EmailAddress\": driver.EmailAddress,\r\n \"IsAccountOwner\": driver.IsAccountOwner\r\n });\r\n }\r\n\r\n //sort alphabetialy by lastName\r\n this.Funnel.DriversList.sort((a, b) => {\r\n const namesA = a.Name.split(\" \");\r\n const namesB = b.Name.split(\" \");\r\n const nameA = namesA[1].toLowerCase();\r\n const nameB = namesB[1].toLowerCase();\r\n if (nameA < nameB)\r\n return -1;\r\n if (nameA > nameB)\r\n return 1;\r\n return 0;\r\n });\r\n });\r\n\r\n this.Funnel.DriversList.push({ \"Id\": \"0\", \"Name\": this.Labels.AnotherPerson });\r\n this.Funnel.DriversList.push({ \"Id\": \"1\", \"Name\": this.Labels.Business });\r\n }\r\n //\"Model.CarAdditional.CarOwner\": function (newValue, oldValue) {\r\n // if (newValue != oldValue && newValue != undefined) {\r\n // if (newValue != \"0\") {\r\n // var person = this.findPerson(newValue);\r\n // if (person != undefined) {\r\n // Vue.set(this.Model.CarAdditional, \"CarOwnerEmail\", person.EmailAddress);\r\n // }\r\n // }\r\n // else {\r\n // Vue.set(this.Model.CarAdditional, \"CarOwnerEmail\", null);\r\n // Vue.set(this.Model.CarAdditional, \"CarOwnerFirstName\", null);\r\n // Vue.set(this.Model.CarAdditional, \"CarOwnerLastName\", null);\r\n // }\r\n // }\r\n //},\r\n //\"Model.CarAdditional.Ownership\": function(newValue) {\r\n // if (newValue == undefined || newValue == \"\" || newValue == \"1\") {\r\n // Vue.set(this.Model.CarAdditional, \"LeasingCompanyName\", \"\");\r\n // Vue.set(this.Model.CarAdditional, \"FinanceCompanyName\", \"\");\r\n // }\r\n //}\r\n },\r\n methods: {\r\n findPerson: (id) => {\r\n let person = undefined;\r\n this.Funnel.DriversList.forEach(function (d) {\r\n if (d.Id == id) {\r\n person = d;\r\n }\r\n });\r\n return person;\r\n }\r\n }\r\n})","import Vue from \"vue\";\r\nimport api from \"../mixins/api\"; \r\n\r\nVue.component('driver-additional-details', {\r\n props: {\r\n repeatableScope: Object,\r\n repeatableIndex: Number,\r\n storeName: String,\r\n isPolicyChange: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n mixins: [api],\r\n inject: [\"$validator\"], \r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n isDriverNameValid() {\r\n if (!this.fields[`Driver_FirstName_${this.repeatableIndex}`] || !this.fields[`Driver_LastName_${this.repeatableIndex}`]) {\r\n return false;\r\n }\r\n\r\n return this.fields[`Driver_FirstName_${this.repeatableIndex}`].valid && this.fields[`Driver_LastName_${this.repeatableIndex}`].valid;\r\n }\r\n },\r\n\r\n data() {\r\n return {\r\n Driver: this.repeatableScope,\r\n driverIndex: this.repeatableIndex\r\n };\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n Vue.set(vm.Driver, \"IsPolicyChange\", vm.isPolicyChange);\r\n Vue.set(vm.Driver, \"HasEmailAddress\", (vm.Driver.EmailAddress && vm.Driver.EmailAddress != '') == true ? true : false);\r\n\r\n if (vm.isPolicyChange) {\r\n Vue.set(vm.Driver, \"IsLicenseNumberEmpty\", !vm.Driver.LicenseNumber);\r\n }\r\n\r\n vm.initializeField(vm.Driver, \"IsDriverLicenseSuspended\", false);\r\n vm.initializeField(vm.Driver, \"HasPolicyCancelled\", false);\r\n vm.initializeField(vm.Driver, \"HasDriverTraining\", undefined);\r\n },\r\n\r\n methods: {\r\n initializeField(model, fieldName, value) {\r\n if (model[fieldName] === undefined) {\r\n Vue.set(model, fieldName, value);\r\n }\r\n },\r\n driverBlurHandler() {\r\n if (this.isDriverNameValid) {\r\n this.$eventBus.$emit('additional-driver:name-change', this.Driver);\r\n }\r\n },\r\n //After $validator.reset(), field valid property is null\r\n driverFocusHandler() {\r\n const firstNameValid = this.fields[`Driver_FirstName_${this.repeatableIndex}`].valid;\r\n const lastNameValid = this.fields[`Driver_LastName_${this.repeatableIndex}`].valid;\r\n\r\n if (firstNameValid === null && lastNameValid === null && this.Driver.FirstName && this.Driver.LastName) {\r\n this.$validator.validate(`Driver_LastName_${this.repeatableIndex}`);\r\n this.$validator.validate(`Driver_FirstName_${this.repeatableIndex}`);\r\n }\r\n },\r\n }\r\n})","import Vue from \"vue\";\r\nimport { getElementTop } from '@Shared/utils/get-element-top';\r\nimport { scrollPage } from '@Shared/utils/scroll-page';\r\nimport _debounce from \"lodash/debounce\";\r\n\r\nVue.component('driver-people', {\r\n props: {\r\n storeName: String,\r\n beforeSubmitQueue: Function,\r\n driverTemplate: String,\r\n driverMaxCount: String,\r\n },\r\n\r\n inject: [\"$validator\"],\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n driversMaxAllowed() {\r\n return (isNaN(this.driverMaxCount) ? 0 : Number(this.driverMaxCount));\r\n },\r\n stopAddingMoreDrivers: {\r\n get: function () {\r\n return this.driversMaxAllowed > 1 && (this.Model.Drivers.length >= this.driversMaxAllowed);\r\n },\r\n set: function (newValue) {\r\n return newValue;\r\n }\r\n },\r\n nextDriverIndex: {\r\n get: function () {\r\n return this.Model.Drivers.length + 1;\r\n },\r\n set: function (newValue) {\r\n return newValue;\r\n }\r\n },\r\n navHeaderHeight() {\r\n return this.$store.getters['currentHeaderHeight'];\r\n },\r\n },\r\n\r\n data() {\r\n return {\r\n btnSubmitHtml: \"\",\r\n backButtonHtml: \"\",\r\n isFormOpen: false,\r\n showButtons: false,\r\n removeDriverModalId:'dmRemoveDriverModal',\r\n rateChangePopup: 'rateChangePopup',\r\n showRateChangePopup: false\r\n };\r\n },\r\n mounted() {\r\n const vm = this;\r\n\r\n //initializes list\r\n vm.Model.Drivers = vm.Model.Drivers || [];\r\n vm.Model.Drivers.forEach(function (o) {\r\n o.Template = vm.driverTemplate;\r\n o.Visibility = false; \r\n o.IsDriverOpen = false;\r\n if (o.IsPrimaryDriver || !o.IsInvisible) {\r\n o.IsDriverOpen = true;\r\n // vm.resetDriversOpen(0);\r\n }\r\n });\r\n\r\n vm.beforeSubmitQueue(callback => {\r\n this.callRateChangePopup();\r\n \r\n if(this.showRateChangePopup) {\r\n this.$globalModal.show(this.rateChangePopup);\r\n } \r\n else {\r\n document.querySelectorAll(\"button[type=submit]\").forEach((btn) => {\r\n btn.disabled = true;\r\n });\r\n callback();\r\n }\r\n })\r\n\r\n vm.$root.$on('Broadcast::scrollToDriverTop', (driverIndex) => {\r\n vm.scrollToDriverTop(driverIndex);\r\n });\r\n vm.$root.$on('Broadcast::resetDriversOpen', (driverIndex) => {\r\n vm.resetDriversOpen(driverIndex);\r\n });\r\n },\r\n beforeDestroy() {\r\n this.$root.$off('Broadcast::scrollToDriverTop');\r\n this.$root.$off('Broadcast::resetDriversOpen');\r\n },\r\n methods: {\r\n setShowButtons(isSet) {\r\n this.showButtons = isSet;\r\n },\r\n setIsFormOpen(isSet) {\r\n this.isFormOpen = isSet;\r\n },\r\n gotoPreviousStep() {\r\n //call method from IR Step component\r\n this.$parent.navigateToPreviousStep();\r\n }, \r\n areAllDriverFormsOpened() {\r\n let showButtons = true;\r\n this.Model.Drivers.forEach((driver) => {\r\n if (driver.SelectedFillOption == '' || driver.SelectedFillOption == undefined) {\r\n showButtons = false;\r\n return;\r\n }\r\n });\r\n return showButtons;\r\n },\r\n callRateChangePopup() {\r\n this.showRateChangePopup = false;\r\n this.Model.Drivers.forEach((driver) => {\r\n if (driver.HasPreviousAutoPolicy && driver.CancelationForNonPayment == 3) {\r\n this.showRateChangePopup = true;\r\n }\r\n })\r\n return this.showRateChangePopup;\r\n },\r\n scrollToDriverTop(driverIndex) {\r\n let el = document.getElementById(\"driver-template\"+driverIndex);\r\n if (!el) {\r\n el = document.getElementById(\"driver-template0\");\r\n }\r\n const top = getElementTop(el.parentElement) - this.navHeaderHeight;\r\n scrollPage(top);\r\n },\r\n resetDriversOpen(driverIndex) {\r\n const vm = this;\r\n // Current open driver, which will be collapsed\r\n let openDriverIndex = vm.Model.Drivers.findIndex(driver => driver.IsDriverOpen);\r\n\r\n if (openDriverIndex >= 0) {\r\n openDriverIndex = openDriverIndex > 0 ? openDriverIndex-1 : openDriverIndex;\r\n vm.$root.$emit(\"Broadcast::scrollToDriverTop\", openDriverIndex);\r\n }\r\n let debounceCloseDriver = undefined; \r\n let debounceOpenDriver = undefined; \r\n\r\n if (!debounceOpenDriver) {\r\n debounceOpenDriver = _debounce(\r\n () => {\r\n if (openDriverIndex > driverIndex) {\r\n const index = driverIndex > 0 ? driverIndex-1 : driverIndex;\r\n vm.$root.$emit(\"Broadcast::scrollToDriverTop\", index);\r\n }\r\n vm.$set(vm.Model.Drivers[driverIndex], \"IsDriverOpen\", true);\r\n debounceOpenDriver = undefined; \r\n },\r\n 600);\r\n \r\n if (!debounceCloseDriver) {\r\n debounceCloseDriver = _debounce(\r\n () => {\r\n vm.Model.Drivers.forEach((d, index) => {\r\n if (index !== driverIndex) { \r\n vm.$set(d, 'IsDriverOpen', false);\r\n }\r\n });\r\n debounceCloseDriver = undefined; \r\n },\r\n 250); \r\n }\r\n debounceCloseDriver();\r\n }\r\n debounceOpenDriver(); \r\n },\r\n addDriver(event, driver) {\r\n event.target.blur();\r\n if (this.driversMaxAllowed < 1) return;\r\n this.$validator.validate().then(valid => {\r\n if (valid) {\r\n this.$set(driver, 'UsedCarPlusService', this.Model.Drivers[0].UsedCarPlusService);\r\n this.$set(driver, 'IsNewDriver', true);\r\n this.$set(driver, 'IsDriverOpen', true);\r\n this.$set(driver, 'IsNewDriverAdded', true);\r\n this.$set(driver, 'Id', this.generateGuid());\r\n\r\n const driversCount = this.Model.Drivers.length; \r\n this.Model.Drivers.push(driver);\r\n this.resetDriversOpen(driversCount);\r\n \r\n this.nextDriverIndex = driversCount+1;//this.Model.Drivers.length;\r\n // Vue.nextTick(() => {\r\n // this.$store.commit(`${this.storeName}/mutate`, this.Model);\r\n // });\r\n }\r\n });\r\n },\r\n\r\n removeDriver(driverIndex) {\r\n const driver = this.Model.Drivers[driverIndex];\r\n\r\n if(this.Model.ProposalDrivers != undefined && this.Model.ProposalDrivers.length > 0) {\r\n this.Model.ProposalDrivers.forEach((proposalDriver, index) => {\r\n Vue.set(proposalDriver, 'isDisabled', false);\r\n //this proposalDriver has been already selected\r\n if (proposalDriver.ProposalDriverId === driver.ProposalDriverId) {\r\n Vue.set(proposalDriver, 'isSelectedDriver', false);\r\n }\r\n });\r\n }\r\n\r\n this.$delete(this.Model.Drivers, driverIndex);\r\n\r\n Vue.nextTick(() => {\r\n this.$store.commit(`${this.storeName}/mutate`, this.Model);\r\n this.showButtons = this.areAllDriverFormsOpened();\r\n this.isFormOpen = this.showButtons;\r\n });\r\n \r\n //CommonUtils.resetForm($scope.formCtrl, $scope.submitted);\r\n },\r\n },\r\n})","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport api from \"../mixins/changeCarTempApi\";\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component(\"long-term-parking\", {\r\n props: {\r\n model: Object,\r\n afterSubmitQueue: Function,\r\n longTermParkingOn: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n mixins: [api],\r\n\r\n data() {\r\n return {\r\n showLongTermOn: false,\r\n showLongTermOff: false,\r\n longTermOffModalId: 'longTermOffModalId'\r\n }\r\n },\r\n\r\n computed: {\r\n Model: function () {\r\n return this.model;\r\n }\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n\r\n if (vm.longTermParkingOn) {\r\n vm.afterSubmitQueue(callback => {\r\n axios.post(vm.api.longTermParkingOn, { ...vm.Model})\r\n .then(result => {\r\n axios.post(vm.api.saveTempChanges)\r\n .then(result => {\r\n let data = result.data;\r\n if (data && !data.HasChanges) {\r\n UnsavedChangesPopup.redirect(data.RedirectUrl);\r\n }\r\n else {\r\n callback();\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n this.$eventBus.$on(this.$globalModal.events.ok, ({ id }) => {\r\n if (this.longTermOffModalId === id) {\r\n this.turnOffLongTermParking();\r\n }\r\n });\r\n },\r\n\r\n methods: {\r\n showTurnOffLongTermParkingModal: function (event) {\r\n event.preventDefault();\r\n this.$root.$emit('dynamic::modal::show', this.longTermOffModalId);\r\n },\r\n\r\n turnOffLongTermParking: function () {\r\n const vm = this;\r\n axios.post(vm.api.longTermParkingOff)\r\n .then(result => {\r\n const longTermParkingOffData = result.data;\r\n axios.post(vm.api.saveTempChanges)\r\n .then(result => {\r\n let data = result.data;\r\n if (data && !data.HasChanges) {\r\n UnsavedChangesPopup.redirect(data.RedirectUrl);\r\n }\r\n else if (longTermParkingOffData && longTermParkingOffData.RedirectUrl) {\r\n UnsavedChangesPopup.redirect(longTermParkingOffData.RedirectUrl);\r\n }\r\n else {\r\n window.location.reload();\r\n }\r\n });\r\n });\r\n }\r\n },\r\n});\r\n","import Vue from 'vue';\r\nimport axios from 'axios';\r\nimport endOfToday from 'date-fns/endOfToday';\r\nimport differenceInYears from 'date-fns/differenceInYears';\r\nimport parseISO from 'date-fns/parseISO';\r\nimport api from '../mixins/api';\r\nimport GoogleAnalytics from '@Shared/utils/GoogleAnalytics';\r\n\r\nVue.component('scoped-driver', {\r\n mixins: [ api ],\r\n props: {\r\n repeatableScope: Object,\r\n repeatableIndex: Number,\r\n storeName: String,\r\n driverTemplate: String,\r\n driverIsRetiredDefault: String,\r\n driverHasPreviousAutoPolicy:String,\r\n driverAccidentsCountDefault: String,\r\n fillOptionEnterManuallyCode: String,\r\n fillOptionGetDriverCode: String,\r\n removeDriverModalId: String,\r\n rateChangePopup: String,\r\n rateChangeFieldsDisabled: String,\r\n isParentFormOpen : {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n inject: [ '$validator' ],\r\n\r\n data() {\r\n return {\r\n Driver: this.repeatableScope,\r\n driverIndex: this.repeatableIndex,\r\n markedForRemoval: false,\r\n nextDriverIndex: 1,\r\n // proposalDrivers: {},\r\n selectedProposalDriver: {},\r\n originalDriversProperties: []\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n proposalDrivers() {\r\n const vm = this;\r\n return vm.Model.ProposalDrivers.filter(proposalDriver => (\r\n proposalDriver.ProposalDriverId === vm.Driver.ProposalDriverId ||\r\n !proposalDriver.isSelectedDriver\r\n ));\r\n }\r\n },\r\n watch: {\r\n 'Driver.BirthDate': {\r\n immediate: true,\r\n handler(birthDate) {\r\n let greaterThan65 = false;\r\n\r\n if (birthDate) {\r\n greaterThan65 = (differenceInYears(endOfToday(), parseISO(birthDate)) >= 65);\r\n\r\n Vue.set(this.Driver, 'IsInRetirementAge', greaterThan65);\r\n Vue.set(this.Model.Drivers[this.repeatableIndex], 'IsInRetirementAge', greaterThan65);\r\n }\r\n\r\n // Driver.ProposalDriverSource:\r\n // Manual = 0,\r\n // AutoPlus = 1,\r\n // ManualProperty = 2,\r\n // ExistingPerson = 3, //For auto\r\n // CancelledExistingPerson = 4, //For auto\r\n // ExistingPersonProperty = 5,\r\n // CancelledExistingPersonProperty = 6,\r\n if (this.Driver.IsNewDriver && this.Driver.ProposalDriverSource !== \"3\") {\r\n //initialize it for new/non existing Driver \r\n Vue.set(this.Driver, 'IsRetired', greaterThan65);\r\n Vue.set(this.Model.Drivers[this.repeatableIndex], 'IsRetired', greaterThan65);\r\n }\r\n }\r\n },\r\n 'Driver.CancelationForNonPayment': {\r\n handler(cancelationForNonPayment) {\r\n if (this.Driver.HasPreviousAutoPolicy && cancelationForNonPayment == 3) {\r\n this.$globalModal.show(this.rateChangePopup);\r\n }\r\n this.Model.ProposalDrivers.forEach((proposalDriver, index) => {\r\n if ((proposalDriver.ProposalDriverId === this.Driver.ProposalDriverId) ) {\r\n proposalDriver.CancelationForNonPayment = cancelationForNonPayment;\r\n }\r\n })\r\n }\r\n },\r\n 'Driver.HasPreviousAutoPolicy': {\r\n handler(hasPreviousAutoPolicy) {\r\n if (!hasPreviousAutoPolicy && this.Driver.ProposalDriverSource !== \"1\") {\r\n this.Driver.CancelationForNonPayment = 0;\r\n }\r\n }\r\n }\r\n },\r\n mounted() {\r\n const vm = this;\r\n\r\n if (!vm.Driver.MaritalStatus) { //set default value for dropdown\r\n Vue.set(vm.Driver, 'MaritalStatus', '');\r\n }\r\n if (!vm.Driver.AccidentsCount) { //set default value for dropdown\r\n Vue.set(vm.Driver, 'AccidentsCount', 0);\r\n }\r\n if (!vm.Driver.ConvictionsCount) { //set default value for dropdown\r\n Vue.set(vm.Driver, 'ConvictionsCount', 0);\r\n }\r\n if (!vm.Driver.CancelationForNonPayment) { //set default value for dropdown\r\n Vue.set(vm.Driver, 'CancelationForNonPayment', 0);\r\n }\r\n if (!vm.Driver.SelectedFillOption) {\r\n vm.Driver.SelectedFillOption = vm.fillOptionEnterManuallyCode;\r\n }\r\n if (vm.Driver.HasPreviousAutoPolicy === undefined) {\r\n if (vm.rateChangeFieldsDisabled == \"True\") {\r\n Vue.set(vm.Driver, 'HasPreviousAutoPolicy', null);\r\n }\r\n else {\r\n Vue.set(vm.Driver, 'HasPreviousAutoPolicy', vm.driverHasPreviousAutoPolicy);\r\n }\r\n }\r\n vm.initializeProposalDriverIndex();\r\n\r\n Vue.nextTick(() => {\r\n Vue.set(vm.Model.Drivers, vm.repeatableIndex, vm.Driver);\r\n });\r\n\r\n vm.$root.$on('Broadcast::DriversInitialization', () => {\r\n vm.initializeProposalDriverIndex();\r\n vm.Model.Drivers.forEach((o) => {\r\n o.Template = vm.driverTemplate;\r\n o.Visibility = false;\r\n });\r\n });\r\n\r\n this.$eventBus.$on(this.$globalModal.events.ok, this.handleRemoveDriverModal);\r\n },\r\n beforeDestroy() {\r\n this.$eventBus.$off(this.$globalModal.events.ok, this.handleRemoveDriverModal);\r\n this.$root.$off('Broadcast::DriversInitialization');\r\n },\r\n methods: {\r\n // Driver.ProposalDriverSource:\r\n // Manual = 0,\r\n // AutoPlus = 1,\r\n // ManualProperty = 2,\r\n // ExistingPerson = 3, //For auto\r\n // CancelledExistingPerson = 4, //For auto\r\n // ExistingPersonProperty = 5,\r\n // CancelledExistingPersonProperty = 6,\r\n initializeProposalDriverIndex() {\r\n const driver = this.Driver;\r\n this.originalDriversProperties.push({\r\n ProposalDriverId: driver.ProposalDriverId,\r\n ProposalDriverSource: driver.ProposalDriverSource,\r\n IsDisabledExistingAnyPerson: driver.IsDisabledExistingAnyPerson,\r\n IsDisabledExistingActiveDriver: driver.IsDisabledExistingActiveDriver,\r\n IsDisabledExistingAnyDriver: driver.IsDisabledExistingAnyDriver,\r\n ExsitingPersonHasGenderCode: driver.ExsitingPersonHasGenderCode,\r\n HasBirthDate: driver.HasBirthDate\r\n });\r\n\r\n if (this.Model.ProposalDrivers != undefined && this.Model.ProposalDrivers.length > 0) {\r\n this.Model.ProposalDrivers.forEach((proposalDriver, index) => {\r\n Vue.set(proposalDriver, 'isDisabled', false);\r\n //this proposalDriver has been already selected\r\n if ((proposalDriver.ProposalDriverId === driver.ProposalDriverId) && proposalDriver.isSelectedDriver == undefined) {\r\n Vue.set(proposalDriver, 'isSelectedDriver', true);\r\n Vue.set(this.Driver, 'SelectedFillOption', this.fillOptionEnterManuallyCode);\r\n Vue.set(this.Driver, 'IsDriverOpen', false);\r\n }\r\n else if (proposalDriver.isSelectedDriver) {\r\n Vue.set(proposalDriver, 'isDisabled', true);\r\n }\r\n });\r\n }\r\n if (!this.$parent.showButtons &&\r\n driver.SelectedFillOption ===\r\n this.fillOptionEnterManuallyCode &&\r\n !driver.IsInvisible) {\r\n this.$parent.setShowButtons(true);\r\n this.$parent.setIsFormOpen(true);\r\n }\r\n },\r\n isProposalDriverDisabled(proposalDriverIndex) {\r\n const proposalDriver = this.Model.ProposalDrivers[proposalDriverIndex];\r\n return ((proposalDriver.ProposalDriverId !== this.Driver.ProposalDriverId) && proposalDriver.isSelectedDriver);\r\n },\r\n\r\n findOriginalDriver(proposalDriverId) {\r\n let driver = null;\r\n this.originalDriversProperties.forEach((d) => {\r\n if (d.ProposalDriverId == proposalDriverId) {\r\n driver = d;\r\n }\r\n });\r\n return driver;\r\n },\r\n\r\n fillDriverDetails(driver, driverDetails) {\r\n if (!!driver && !!driverDetails) {\r\n const originalDriver = this.findOriginalDriver(driverDetails.ProposalDriverId);\r\n const filledDriver = {\r\n ProposalDriverId: driverDetails.ProposalDriverId,\r\n ProposalDriverSource: originalDriver != null ?\r\n originalDriver.ProposalDriverSource :\r\n driverDetails.ProposalDriverSource,\r\n IsDisabledExistingAnyPerson: originalDriver != null ?\r\n originalDriver.IsDisabledExistingAnyPerson :\r\n driverDetails.IsDisabledExistingAnyPerson,\r\n IsDisabledExistingActiveDriver: originalDriver != null ?\r\n originalDriver.IsDisabledExistingActiveDriver :\r\n driverDetails.IsDisabledExistingActiveDriver,\r\n IsDisabledExistingAnyDriver: originalDriver != null ?\r\n originalDriver.IsDisabledExistingAnyDriver :\r\n driverDetails.IsDisabledExistingAnyDriver,\r\n ExsitingPersonHasGenderCode: originalDriver != null ?\r\n originalDriver.ExsitingPersonHasGenderCode :\r\n driverDetails.ExsitingPersonHasGenderCode,\r\n FirstName: driverDetails.FirstName,\r\n LastName: driverDetails.LastName,\r\n BirthDate: driverDetails.BirthDate,\r\n Gender: driverDetails.Gender,\r\n MaritalStatus: driverDetails.MaritalStatus || '',\r\n LicenseNumber: driverDetails.LicenseNumber,\r\n ClaimFreeYears: driverDetails.ClaimFreeYears != null ? driverDetails.ClaimFreeYears : driver.ClaimFreeYears,\r\n HomePostalCode: driverDetails.HomePostalCode,\r\n SelectedFillOption: this.fillOptionEnterManuallyCode,\r\n CancelationForNonPayment: driverDetails.CancelationForNonPayment,\r\n HasPreviousAutoPolicy: this.rateChangeFieldsDisabled != \"True\" ? driverDetails.HasPreviousAutoPolicy : null,\r\n EmailAddress: driverDetails.EmailAddress,\r\n ConvictionsCount: driverDetails.ConvictionsCount,\r\n AccidentsCount: driverDetails.AccidentsCount,\r\n AccidentsPrefilled: driverDetails.AccidentsPrefilled,\r\n DateOfLoss1: driverDetails.DateOfLoss1,\r\n DateOfLoss2: driverDetails.DateOfLoss2,\r\n DateOfLoss3: driverDetails.DateOfLoss3,\r\n IsRetired: driverDetails.IsRetired,\r\n HasDriverTraining: driverDetails.HasDriverTraining,\r\n IsDriverLicenseSuspended: driverDetails.IsDriverLicenseSuspended,\r\n HasPolicyCancelled: driverDetails.HasPolicyCancelled,\r\n Phone: driverDetails.Phone,\r\n ExternalId: driverDetails.ExternalId,\r\n IsAccountOwner: driverDetails.IsAccountOwner,\r\n HasBirthDate: originalDriver != null ? originalDriver.HasBirthDate : driverDetails.HasBirthDate\r\n };\r\n\r\n if (this.Model.IsAggregatorRequest && this.Model.Car.IndexFromAggregators === 1 && this.driverIndex === 0 && driverDetails.isSelectedDriver) {\r\n if (driverDetails.EmailAddress) {\r\n this.Model.MarketingEmail = driverDetails.EmailAddress;\r\n } else {\r\n this.Model.MarketingEmail = \"\";\r\n }\r\n } \r\n \r\n if (driverDetails.LicenseClass) {\r\n filledDriver.LicenseClass = driverDetails.LicenseClass;\r\n filledDriver.LicenseObtainedDate = driverDetails.LicenseObtainedDate;\r\n filledDriver.IsInFirstYearLicense = driverDetails.IsInFirstYearLicense;\r\n }\r\n return filledDriver;\r\n //CommonUtils.resetForm($scope.formCtrl);\r\n }\r\n return {};\r\n },\r\n\r\n areAllDriverFormsOpened() {\r\n let showButtons = true;\r\n this.Model.Drivers.forEach((driver) => {\r\n if (driver.SelectedFillOption == '' || driver.SelectedFillOption == undefined) {\r\n showButtons = false;\r\n return;\r\n }\r\n });\r\n return showButtons;\r\n },\r\n\r\n openDriver() {\r\n const vm = this;\r\n vm.$validator.validate().then((valid) => {\r\n if (valid) {\r\n vm.$root.$emit('Broadcast::resetDriversOpen', vm.repeatableIndex);\r\n }\r\n else {\r\n Vue.prototype.handleInvalidForm(vm);\r\n }\r\n });\r\n },\r\n\r\n setDriver(proposalDriver, index) {\r\n this.trackAdditionalDriverCheckbox(index, proposalDriver.isSelectedDriver);\r\n\r\n if (!proposalDriver.isSelectedDriver) {\r\n Vue.nextTick(() => {\r\n this.clearDriver(this.fillOptionEnterManuallyCode);\r\n });\r\n }\r\n else {\r\n this.Model.ProposalDrivers.forEach((oProposalDriver, i) => {\r\n if (oProposalDriver.isSelectedDriver && oProposalDriver.ProposalDriverId == this.Driver.ProposalDriverId) {\r\n Vue.set(this.Model.ProposalDrivers[i], 'isSelectedDriver', false);\r\n }\r\n });\r\n\r\n this.Driver = Object.assign({}, this.Driver, this.fillDriverDetails(this.Driver, proposalDriver));\r\n //this.Model.MarketingName = this.Driver.FirstName;\r\n\r\n Vue.nextTick(() => {\r\n Vue.set(this.Model.Drivers, this.repeatableIndex, this.Driver);\r\n\r\n const formsOpened = this.areAllDriverFormsOpened();\r\n this.$parent.setShowButtons(formsOpened);\r\n this.$parent.setIsFormOpen(formsOpened);\r\n this.$validator.reset();\r\n });\r\n }\r\n },\r\n clearDriver(fillDriverOptions, tabAddDriverUseLicenseName) {\r\n const driver = this.Model.Drivers[this.repeatableIndex];\r\n this.trackLabelButtons();\r\n let isFormOpen = false;\r\n\r\n if (this.proposalDrivers != undefined && this.proposalDrivers.length > 0) {\r\n this.proposalDrivers.forEach((proposalDriver, index) => {\r\n if (proposalDriver.ProposalDriverId === driver.ProposalDriverId) {\r\n proposalDriver.isSelectedDriver = false;\r\n \r\n if (this.Model.IsAggregatorRequest && this.Model.Car.IndexFromAggregators === 1 && this.driverIndex === 0 && !proposalDriver.isSelectedDriver) {\r\n this.Model.MarketingEmail = \"\";\r\n }\r\n }\r\n });\r\n }\r\n\r\n const isTabAddDriverUseLicenseClicked = (fillDriverOptions == '1');\r\n\r\n if (driver != null) {\r\n // if (tabAddDriverUseLicenseName) {\r\n // this.disabledAddDriverUseLicenseTabs(tabAddDriverUseLicenseName, isTabAddDriverUseLicenseClicked);\r\n // }\r\n const stepButtons = document.getElementById('stepButtons');\r\n // Find driver by licence\r\n if (isTabAddDriverUseLicenseClicked) { //in case of 'Use driver lisence to find car'\r\n // hide form submit button\r\n if (stepButtons) {\r\n stepButtons.classList.add('-hidden');\r\n stepButtons.setAttribute('aria-hidden', 'true');\r\n }\r\n this.Driver = Object.assign({}, this.Driver, {\r\n SelectedFillOption: fillDriverOptions,\r\n Id: this.generateGuid(),\r\n SelectedDriverIndex: null,\r\n ProposalDriverId: null,\r\n IsDisabledExistingAnyPerson: false,\r\n IsDisabledExistingActiveDriver: false,\r\n IsDisabledExistingAnyDriver: false,\r\n ExsitingPersonHasGenderCode: false,\r\n Age: 0,\r\n IsInRetirementAge: false,\r\n HasBirthDate: false\r\n });\r\n }\r\n // Manually enter information\r\n else {\r\n isFormOpen = true;\r\n // show back form submit button\r\n if (stepButtons) {\r\n stepButtons.classList.remove('-hidden');\r\n stepButtons.removeAttribute('aria-hidden');\r\n }\r\n this.Driver = Object.assign({}, this.Driver, {\r\n SelectedFillOption: fillDriverOptions,\r\n Id: this.generateGuid(),\r\n SelectedDriverIndex: undefined,\r\n ProposalDriverId: undefined,\r\n ProposalDriverSource: undefined,\r\n IsDisabledExistingAnyPerson: false,\r\n IsDisabledExistingActiveDriver: false,\r\n IsDisabledExistingAnyDriver: false,\r\n ExsitingPersonHasGenderCode: false,\r\n FirstName: '',\r\n LastName: undefined,\r\n BirthDate: undefined,\r\n Gender: undefined,\r\n MaritalStatus: '',\r\n LicenseObtainedDate: undefined,\r\n LicenseNumber: undefined,\r\n LicenseClass: undefined,\r\n IsInFirstYearLicense: undefined,\r\n IsPrimaryDriverOnAnotherPolicy: false,\r\n ClaimFreeYears: undefined,\r\n Age: 0,\r\n IsInRetirementAge: false,\r\n EmailAddress: undefined,\r\n ConvictionsCount: 0,\r\n AccidentsCount: this.driverAccidentsCountDefault,\r\n CancelationForNonPayment: 0,\r\n HasPreviousAutoPolicy: this.rateChangeFieldsDisabled == \"True\" ? null : this.driverHasPreviousAutoPolicy,\r\n AccidentsPrefilled: false,\r\n DateOfLoss1: undefined,\r\n DateOfLoss2: undefined,\r\n DateOfLoss3: undefined,\r\n IsRetired: (this.driverIsRetiredDefault == 'true'), \r\n HasDriverTraining: undefined,\r\n IsDriverLicenseSuspended: undefined,\r\n HasPolicyCancelled: undefined,\r\n Phone: undefined,\r\n ExternalId: 0,\r\n HasBirthDate: false\r\n });\r\n }\r\n\r\n Vue.nextTick(() => {\r\n Vue.set(this.Model.Drivers, this.repeatableIndex, this.Driver);\r\n\r\n this.initializeProposalDriverIndex();\r\n\r\n //CommonUtils.resetForm($scope.formCtrl);\r\n\r\n this.$parent.setIsFormOpen(isFormOpen);\r\n\r\n if (isTabAddDriverUseLicenseClicked) { //in case of 'Use driver lisence to find car'\r\n this.$parent.setShowButtons(false);\r\n }\r\n else if (this.areAllDriverFormsOpened()) {\r\n this.$parent.setShowButtons(true);\r\n }\r\n else {\r\n this.$parent.setIsFormOpen(false);\r\n }\r\n this.$validator.reset();\r\n });\r\n }\r\n },\r\n getDriverByLicenseNumber(driverText) {\r\n const vm = this;\r\n //event.preventDefault();\r\n this.$validator.validate().then((valid) => {\r\n if (valid) {\r\n const driver = this.Driver;\r\n\r\n //Get driver details by licensenumber and firstName\r\n axios.post(vm.api.GetDriverByLicenseNumber, {\r\n DriverLicenseNumber: driver.LicenseNumberEntry,\r\n DriverFirstName: driver.FirstNameEntry,\r\n DriverText: driverText\r\n })\r\n .then((result) => {\r\n if (!!result && !!result.data) {\r\n result.data.ProposalDrivers.forEach((proposalDriver) => {\r\n vm.Model.ProposalDrivers.push(proposalDriver);\r\n });\r\n vm.Model.Drivers.forEach((d) => {\r\n Vue.set(d, 'UsedCarPlusService', true);\r\n });\r\n //click 'Enter driver details' tab\r\n vm.clearDriver(this.fillOptionEnterManuallyCode, 'tabAddDriverUseLicense');\r\n }\r\n });\r\n }\r\n else {\r\n Vue.prototype.handleInvalidForm(this);\r\n }\r\n });\r\n },\r\n\r\n removeScopedDriver(event) {\r\n if (this.Driver.IsNewDriverAdded) {\r\n this.$emit('remove-driver');\r\n }\r\n else {\r\n this.markedForRemoval = true;\r\n this.$root.$emit('dynamic::modal::show', this.removeDriverModalId);\r\n }\r\n },\r\n handleRemoveDriverModal({ id }) {\r\n if (this.removeDriverModalId === id && this.markedForRemoval) {\r\n this.$emit('remove-driver');\r\n this.markedForRemoval = false;\r\n }\r\n },\r\n trackAdditionalDriverCheckbox(index, isSelected = false) {\r\n const itemLabel = this.repeatableIndex > 0 ?\r\n `additional driver ${index + this.repeatableIndex}` :\r\n 'primary driver';\r\n\r\n GoogleAnalytics.push({\r\n event: 'checkbox',\r\n checkbox_item: itemLabel,\r\n action: isSelected ? 'select' : 'deselect'\r\n });\r\n },\r\n trackLabelButtons() {\r\n GoogleAnalytics.push({\r\n event: \"click_button\",\r\n buttonId: \"label_button\",\r\n buttonName: \"textwrap\", \r\n buttonText: this.isParentFormOpen ? \"Manually enter driver\" : \"Find by driver licence\",\r\n })\r\n }, \r\n handleDriverDetailsFocus(){\r\n const vm = this;\r\n\r\n if (event.key === 'Enter' || event.key === ' ' || event.type=== 'click') {\r\n setTimeout(() => {\r\n let addDriverDetailsButton = document.querySelector(\"button#tabAddDriver_0\");\r\n //when \"find by driver's license\" is clicked or pressed enter/space bar on, set focus to \"manually enter driver details\"\r\n if(addDriverDetailsButton){ \r\n addDriverDetailsButton.focus(); \r\n\r\n // if the the expander is collapsed, then the user will not be able to tab to the link inside of the collapsed expander\r\n let expanderButton = document.querySelector(\"#driver-template0 .a-formGroup__wrapper .m-expandableLink > button.OnliaButton.OnliaButton--hyperlink.m-expandableLink__link\");\r\n let expanderLink = document.querySelector(\"#driver-template0 .a-formGroup__wrapper .m-expandableLink a\");\r\n expanderLink && expanderLink.setAttribute('tabindex', '-1');\r\n expanderButton & expanderButton.addEventListener('click', vm.handleClickOrKeyPressOfExpander);\r\n expanderButton & expanderButton.addEventListener('keydown', vm.handleClickOrKeyPressOfExpander);\r\n }\r\n //when \"manually enter driver details\" is clicked or pressed enter/space bar on, set focus to \"find by driver's license\"\r\n let findDriverButton = document.querySelector(\"button.OnliaButton.OnliaButton--hyperlink.icon-licence.o-driver__driverButton\");\r\n if(findDriverButton){ \r\n findDriverButton.focus(); \r\n }\r\n\r\n }, 100);\r\n }\r\n },\r\n handleClickOrKeyPressOfExpander(event) {\r\n if (event.type === 'click' || (event.type === 'keydown' && (event.key === 'Enter' || event.key === ' '))) {\r\n let expanderLink = document.querySelector(\"#driver-template0 .a-formGroup__wrapper .m-expandableLink a\");\r\n let expanderButton = document.querySelector(\"#driver-template0 .a-formGroup__wrapper .m-expandableLink > button.OnliaButton.OnliaButton--hyperlink.m-expandableLink__link\");\r\n //if the expander is closed give the link tabindex -1\r\n if (expanderButton && expanderButton.classList.contains('collapsed')){\r\n expanderLink && expanderLink.setAttribute('tabindex', '-1');\r\n }\r\n //if the expander is open make sure the tabindex -1 is removed\r\n else {\r\n expanderLink && expanderLink.removeAttribute('tabindex');\r\n }\r\n }\r\n }\r\n }\r\n});\r\n","import Vue from \"vue\";\r\n\r\nVue.directive(\"driver-disabled-fields\", {\r\n inserted: function (el, binding, vnode) {\r\n const vm = vnode.context;\r\n\r\n vm.Driver = Object.assign({}, vm.Driver, {\r\n DriverBirthDate: vm.Driver.BirthDate,\r\n DriverGender: vm.Driver.Gender,\r\n DriverConvictionsCount: vm.Driver.ConvictionsCount,\r\n DriverAccidentsCount: vm.Driver.AccidentsCount\r\n });\r\n }\r\n});","import { productsAuto } from '@Apis';\r\n\r\nexport default {\r\n computed: {\r\n api() {\r\n return productsAuto;\r\n }\r\n }\r\n};\r\n","import { productsChangeCarTemp } from '@Apis';\r\n\r\nexport default {\r\n computed: {\r\n api() {\r\n return productsChangeCarTemp;\r\n }\r\n }\r\n};\r\n","import { Validator } from \"@vee-validate-package\";\r\n\r\nValidator.extend(\"validateCarName\", {\r\n getMessage(field, args) {\r\n return args[0];\r\n },\r\n validate(value, args) {\r\n return value && value.length > 2;\r\n }\r\n});","import Vue from 'vue';\r\nimport ConditionalIf from '../../../../forms/validation/plugins/conditionalif';\r\nimport endOfToday from 'date-fns/endOfToday';\r\nimport isSameDay from 'date-fns/isSameDay';\r\nimport isAfter from 'date-fns/isAfter';\r\nimport isEqual from 'date-fns/isEqual';\r\nimport parseISO from 'date-fns/parseISO';\r\nimport differenceInYears from 'date-fns/differenceInYears';\r\nimport _get from 'lodash/get';\r\nimport { FOCUSABLE_ELEMENTS } from '@Shared/mixins/focus-trap';\r\n\r\nVue.directive('val-displayif-first-year-license', {\r\n inserted: function (el, binding, vnode) {\r\n\r\n Vue.use(ConditionalIf);\r\n const vm = vnode.context;\r\n\r\n //DisplayIf attributes values\r\n //--------------------------------------------------------------\r\n const propertyValues = [];\r\n let compareValues = [];\r\n let conditions = [];\r\n let logicalnots = [];\r\n let isVisible = false;\r\n\r\n let validate = false;\r\n const operator = el.dataset.valDisplayifOperator;\r\n //--------------------------------------------------------------\r\n\r\n //DisplayIf first-year-license attributes values\r\n //--------------------------------------------------------------\r\n let firstYearLicenseEditInitialized = false;\r\n const licenseObtainedDate = el.attributes['license-obtained-date'].value;\r\n let licenseObtainedDateValue = el.attributes['license-obtained-date-value'];\r\n licenseObtainedDateValue = licenseObtainedDateValue ? parseISO(licenseObtainedDateValue.value) : null;\r\n // let licenseObtainedDateLabelElement = $(\"label[for=\\\"\" + licenseObtainedDate.replace(\".\", \"_\") + \"\\\"]\");\r\n // const licenseObtainedDateLabelElement = document.querySelectorAll(`[for=\"${licenseObtainedDate.replace('.', '_')}\"]`);\r\n const licenseObtainedDateLabelElement = document.querySelectorAll(`[for=\"${licenseObtainedDate}\"]`);\r\n const licenseObtainedDateLabelValue = licenseObtainedDateLabelElement[0].innerHTML;\r\n //let isLicenseObtainedDateRequired = licenseObtainedDateLabelValue.indexOf(\"*\") != -1;\r\n const licenseObtainedDateLabels = el.attributes['license-obtained-date-labels'].value.split(';');\r\n const licenseClass = el.attributes['license-class'].value;\r\n const licenseClassLabelValues = el.attributes['license-class-label-values'].value.split(';');\r\n //--------------------------------------------------------------\r\n\r\n const validateConditions = function () {\r\n validate = ConditionalIf.validateConditions(conditions, propertyValues, compareValues, logicalnots, operator);\r\n ConditionalIf.toggleContainer(el, validate);\r\n\r\n return validate;\r\n };\r\n\r\n ConditionalIf.getPropertiesMatrix(el.dataset.valDisplayifProperty).forEach((property, index) => {\r\n setTimeout(() => {\r\n const propValue = _get(vm, property);\r\n propertyValues[index] = typeof propValue !== 'undefined' ? propValue : setModelValue(property, '');\r\n validateConditions();\r\n });\r\n\r\n vm.$watch(property, (newValue) => {\r\n propertyValues[index] = newValue;\r\n validateConditions();\r\n });\r\n });\r\n\r\n if (typeof el.dataset.valDisplayifValue !== 'undefined') {\r\n compareValues = ConditionalIf.getValuesMatrix(el.dataset.valDisplayifValue);\r\n }\r\n\r\n if (typeof el.dataset.valDisplayifCondition !== 'undefined') {\r\n conditions = ConditionalIf.getConditionsMatrix(el.dataset.valDisplayifCondition);\r\n }\r\n\r\n if (typeof el.dataset.valDisplayifLogicalnot !== 'undefined') {\r\n logicalnots = ConditionalIf.getLogicalnotsMatrix(el.dataset.valDisplayifLogicalnot);\r\n }\r\n setTimeout(() => {\r\n //init el based on initial licenseObtainedDateValue\r\n if (licenseObtainedDateValue) {\r\n const valid = validateDisplayIfAttribute() && validateLicenseObtainedDate(licenseObtainedDateValue);\r\n vm.valid = valid;\r\n ConditionalIf.toggleContainer(el, valid);\r\n isVisible = valid;\r\n }\r\n });\r\n\r\n vm.$watch(licenseObtainedDate, (newVal, oldVal) => {\r\n newVal = parseISO(newVal);\r\n oldVal = parseISO(oldVal);\r\n if (!isEqual(newVal, oldVal) && newVal != null && newVal != undefined) {\r\n const valid = validateDisplayIfAttribute() && validateLicenseObtainedDate(newVal);\r\n\r\n ConditionalIf.toggleContainer(el, valid);\r\n if (valid) {\r\n el.focus();\r\n isVisible = true;\r\n } else {\r\n Vue.set(vm.Driver, 'IsInFirstYearLicense', false);\r\n Vue.set(vm.Model.Drivers[vm.repeatableIndex], 'IsInFirstYearLicense', false);\r\n\r\n if (isVisible) {\r\n const focusableEls = document.querySelectorAll(FOCUSABLE_ELEMENTS);\r\n const elementIndex = Array.prototype.indexOf.call(focusableEls, el);\r\n focusableEls.item(elementIndex + 1).focus();\r\n isVisible = false;\r\n }\r\n }\r\n licenseObtainedDateValue = newVal;\r\n }\r\n });\r\n\r\n vm.$watch(licenseClass, (newVal, oldVal) => {\r\n if ((newVal != oldVal || (newVal === oldVal && !firstYearLicenseEditInitialized)) && newVal != null && newVal != undefined) {\r\n const i = licenseClassLabelValues.indexOf(newVal);\r\n if (i != -1) {\r\n licenseObtainedDateLabelElement[0].innerHTML = licenseObtainedDateLabels[i]; /* + (isLicenseObtainedDateRequired ? \"*\" : \"\");*/\r\n }\r\n else {\r\n licenseObtainedDateLabelElement[0].innerHTML = licenseObtainedDateLabelValue;\r\n }\r\n\r\n firstYearLicenseEditInitialized = true;\r\n const valid = validateDisplayIfAttribute() && validateLicenseObtainedDate(licenseObtainedDateValue);\r\n\r\n ConditionalIf.toggleContainer(el, valid);\r\n if (!valid) {\r\n Vue.set(vm.Driver, 'IsInFirstYearLicense', false);\r\n Vue.set(vm.Model.Drivers[vm.repeatableIndex], 'IsInFirstYearLicense', false);\r\n }\r\n }\r\n });\r\n\r\n function validateLicenseObtainedDate(licenseObtainedDate) {\r\n let valid = false;\r\n const now = endOfToday();\r\n const firstYearLicenseOffsetdateYears = el.attributes['val-displayif-first-year-license-offsetdate-years'].value;\r\n\r\n if (now && licenseObtainedDate &&\r\n (isSameDay(now, licenseObtainedDate) || isAfter(now, licenseObtainedDate)) &&\r\n differenceInYears(now, licenseObtainedDate) < firstYearLicenseOffsetdateYears) {\r\n valid = true;\r\n }\r\n return valid;\r\n }\r\n\r\n function validateDisplayIfAttribute() {\r\n return ConditionalIf.validateConditions(conditions, propertyValues, compareValues, logicalnots, operator);\r\n }\r\n\r\n function setModelValue(fullPropertyName, value) {\r\n const lastIndexOfproperty = fullPropertyName.lastIndexOf('.');\r\n const propertyName = fullPropertyName.substr(lastIndexOfproperty + 1, fullPropertyName.length);\r\n const parentProperty = fullPropertyName.substr(0, lastIndexOfproperty + 1);\r\n if (parentProperty !== 'Model.') {\r\n const rootProperty = parentProperty.substr(parentProperty.lastIndexOf('.') + 1, parentProperty.length);\r\n if (rootProperty) {\r\n Vue.set(vm.Model[rootProperty], propertyName, value);\r\n }\r\n }\r\n else {\r\n Vue.set(vm.Model, propertyName, value);\r\n }\r\n return value;\r\n }\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport { Validator } from \"@vee-validate-package\";\r\nimport format from 'date-fns/format';\r\n\r\nVue.directive('validate-driving-license', {\r\n inserted: function (el, binding, vnode) {\r\n const birthDate = el.dataset.birthDateField;\r\n const gender = el.dataset.genderField;\r\n const errorMessage = el.dataset.valCustom;\r\n\r\n const vvName = Vue.prototype.getValueFromAttribute(el, 'data-vv-name');\r\n const field = vnode.context.$validator.fields.find({ name: vvName ? vvName : el.name });\r\n const fieldRules = Object.assign({}, field.rules);\r\n\r\n fieldRules.validateDriverLicenceAgainstBirthDate = [ errorMessage, birthDate, gender ];\r\n field.update({ rules: fieldRules });\r\n }\r\n});\r\n\r\nValidator.extend('validateDriverLicenceAgainstBirthDate', {\r\n getMessage(field, args) {\r\n return args[0];\r\n },\r\n validate(value, args) {\r\n const driverLicence = value.substring(value.length - 6);\r\n const birthDate = args[1];\r\n const gender = args[2];\r\n const maleCheckValues = [0, 12, 24, 36];\r\n const femaleCheckValues = [50, 62, 74, 86];\r\n\r\n const isValid = (date, checkValues) => {\r\n return checkValues.some(check => {\r\n const formattedDate = ((date | 0) + check * 100).toString().padStart(6, '0');\r\n return driverLicence === formattedDate\r\n })\r\n }\r\n\r\n if (!birthDate) {\r\n return true;\r\n }\r\n else {\r\n let valid = false;;\r\n let formattedBirthDate = format(new Date(birthDate), 'yyMMdd', {\r\n locale: window.__dateFnsLocale__\r\n });\r\n\r\n switch (gender) {\r\n case '1':\r\n valid = isValid(formattedBirthDate, maleCheckValues);\r\n break;\r\n case '2':\r\n valid = isValid(formattedBirthDate, femaleCheckValues);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return valid;\r\n }\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport { Validator } from \"@vee-validate-package\";\r\n\r\nVue.directive(\"validate-vin-params\", {\r\n inserted: function (el, binding, vnode) {\r\n const errorMessage = el.dataset.valCustom;\r\n const vvName = Vue.prototype.getValueFromAttribute(el, \"data-vv-name\");\r\n const field = vnode.context.$validator.fields.find({ name: vvName ? vvName : el.name });\r\n const fieldRules = Object.assign({}, field.rules);\r\n\r\n fieldRules.validateVIN = [errorMessage, el];\r\n field.update({ rules: fieldRules });\r\n }\r\n});\r\n\r\nValidator.extend(\"validateVIN\", {\r\n getMessage(field, args, data) {\r\n return (data && data.message) ? data.message : args[0];\r\n },\r\n validate(value, args) {\r\n return new Promise(function (resolve) {\r\n const vin = value;\r\n const loadingClass = \"loading-indicator\";\r\n const validateVinApi = \"/api/onlia/auto/validateVin\";\r\n let errorText = args[0];\r\n let element = args[1];\r\n let dataset = element.dataset;\r\n\r\n if (vin && vin.length === 17) {\r\n element.classList.add(loadingClass);\r\n axios.post(validateVinApi, \"\\\"\" + vin + \"\\\"\", { headers: { \"skipLoading\": true, \"Content-Type\": \"application/json\" } })\r\n .then(result => {\r\n element.classList.remove(loadingClass);\r\n if (result.data) {\r\n let data = result.data;\r\n if (data.IsValid) {\r\n resolve({ valid: true });\r\n } else {\r\n if (data.ErrorMessageParams) {\r\n errorText = errorText.replace(\"{0}\", data.ErrorMessageParams).replace(\"[\", \"\").replace(\"]\", \"\");\r\n } else {\r\n let start = errorText.indexOf(\"[\");\r\n let end = errorText.indexOf(\"]\");\r\n let toRemove = errorText.slice(start, end + 1);\r\n\r\n errorText = errorText.replace(toRemove, \"\");\r\n }\r\n\r\n resolve({ valid: false, data: { message: errorText } });\r\n }\r\n }\r\n })\r\n .catch(function (error) {\r\n element.classList.remove(loadingClass);\r\n });\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n}, { immediate: false });","import { productsAccount } from '@Apis';\r\n\r\nexport default {\r\n computed: {\r\n api() {\r\n return productsAccount;\r\n }\r\n }\r\n};\r\n","import Vue from 'vue';\r\nimport api from '../mixins/api';\r\n\r\nVue.component('account-funnel', {\r\n mixins: [ api ],\r\n\r\n props: {\r\n model: Object,\r\n basketCount: Number\r\n },\r\n data() {\r\n return {\r\n Model: {},\r\n Funnel: {},\r\n funnelProperties: {},\r\n funnelMethods: {}\r\n };\r\n },\r\n created() {\r\n const vm = this;\r\n vm.storeName = vm.$options._componentTag;\r\n\r\n vm.$store.registerModule(vm.storeName, {\r\n namespaced: true,\r\n\r\n state: {\r\n model: vm.model\r\n },\r\n\r\n mutations: {\r\n mutate(state, payload) {\r\n state.model = payload;\r\n }\r\n }\r\n });\r\n\r\n vm.Model = vm.$store.state[vm.storeName].model;\r\n },\r\n\r\n mounted() {\r\n this.$root.$emit('Broadcast::UpdateShoppingBasketCount', this.basketCount);\r\n }\r\n});\r\n","import { productsChangeAccount } from '@Apis';\r\n\r\nexport default {\r\n computed: {\r\n api() {\r\n return productsChangeAccount;\r\n }\r\n }\r\n};\r\n","import Vue from 'vue';\r\nimport api from '../mixins/changeAccountApi';\r\nimport clearMyAccountClasses from '@Shared/utils/clear-my-account-classes';\r\n\r\nVue.component('account-change-funnel', {\r\n mixins: [api],\r\n props: {\r\n model: Object,\r\n basketCount: Number\r\n },\r\n data() {\r\n return {\r\n Model: {},\r\n Funnel: {},\r\n funnelProperties: {},\r\n funnelMethods: {}\r\n };\r\n },\r\n created() {\r\n const vm = this;\r\n vm.storeName = vm.$options._componentTag;\r\n\r\n vm.$store.registerModule(vm.storeName, {\r\n namespaced: true,\r\n\r\n state: {\r\n model: vm.model\r\n },\r\n\r\n mutations: {\r\n mutate(state, payload) {\r\n state.model = payload;\r\n }\r\n }\r\n });\r\n\r\n vm.Model = vm.$store.state[vm.storeName].model;\r\n\r\n clearMyAccountClasses();\r\n },\r\n\r\n mounted() {\r\n this.$root.$emit('Broadcast::UpdateShoppingBasketCount', this.basketCount);\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport sharedUtils from \"../../../shared/mixins/shared-utils\";\r\n\r\nVue.component('account-owner-personal-info', {\r\n inject: [\"$validator\"],\r\n\r\n props: {\r\n storeName: String,\r\n accountOwnerNameField: String,\r\n homePoliciesCount: Number\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n vm.ensureFieldsBinding();\r\n\r\n if (vm.homePoliciesCount > 0) {\r\n let accountOwnerOptions = vm.dropdownOptions[\"Model.SelectedAccountOwner\"] = [];\r\n if (vm.Model.PersonList.length == 1) {\r\n accountOwnerOptions.push({ v: vm.Model.PersonList[0].Id, t: vm.Model.PersonList[0].Name });\r\n Vue.set(vm.Model, \"SelectedAccountOwner\", vm.Model.PersonList[0].Id);\r\n vm.checkSelectedPerson();\r\n }\r\n } else {\r\n vm.checkSelectedPerson(true);\r\n }\r\n },\r\n\r\n methods: {\r\n ensureFieldsBinding() {\r\n const vm = this;\r\n\r\n let accountOnwerOptions = vm.dropdownOptions[vm.accountOwnerNameField];\r\n if (vm.Model.PersonList && vm.Model.PersonList.length > 0) {\r\n for (let i = vm.Model.PersonList.length - 1; i >= 0; i--) {\r\n accountOnwerOptions.push({ v: vm.Model.PersonList[i].Id, t: vm.Model.PersonList[i].Name });\r\n }\r\n accountOnwerOptions.reverse();\r\n }\r\n\r\n vm.initializeField(\"BirthDate\");\r\n vm.initializeField(\"EmailAddress\");\r\n vm.initializeField(\"RecoveryEmailAddress\");\r\n vm.initializeField(\"Password\");\r\n\r\n vm.initIsBirthDateDisabledField();\r\n },\r\n\r\n initializeField(fieldName) {\r\n if (!this.Model[fieldName]) {\r\n Vue.set(this.Model, fieldName, null);\r\n }\r\n },\r\n\r\n initIsBirthDateDisabledField() {\r\n this.initializeField(\"IsBirthDateDisabled\");\r\n\r\n this.Model.IsBirthDateDisabled = this.Model.SelectedAccountOwner && this.Model.SelectedAccountOwner != \"0\";\r\n },\r\n\r\n onAccountOwnerChanged() {\r\n this.checkSelectedPerson(true);\r\n },\r\n\r\n checkSelectedPerson(resetValidator) {\r\n const vm = this;\r\n if (vm.Model.SelectedAccountOwner != \"0\") { //existing person\r\n let selectedPerson = vm.findPerson(vm.Model.SelectedAccountOwner);\r\n if (selectedPerson) {\r\n vm.setSelectedPerson(selectedPerson);\r\n } else {\r\n vm.Model.SelectedAccountOwner = \"\"; //set Select option\r\n vm.resetSelectedPerson(resetValidator);\r\n }\r\n }\r\n else { // new person \r\n vm.resetSelectedPerson(true); \r\n }\r\n },\r\n\r\n findPerson(id) {\r\n return this.Model.PersonList.find((p) => { return p.Id == id });\r\n },\r\n\r\n setSelectedPerson(person) {\r\n const vm = this;\r\n\r\n if (!!person) {\r\n vm.Model.FirstName = sharedUtils.methods.decodeHTML(person.FirstName);\r\n vm.Model.LastName = sharedUtils.methods.decodeHTML(person.LastName);\r\n vm.Model.FullName = vm.Model.FirstName + \" \" + vm.Model.LastName;\r\n vm.Model.EmailAddress = person.EmailAddress;\r\n vm.Model.ConfirmEmailAddress = (vm.Model.EmailAddress != vm.Model.ConfirmEmailAddress) ? \"\" : vm.Model.EmailAddress;\r\n vm.Model.Gender = person.Gender;\r\n vm.Model.BirthDate = (!!person.BirthDate) ? person.BirthDate : null;\r\n\r\n vm.Model.IsBirthDateDisabled = (!!person.BirthDate);\r\n vm.$validator.reset(); \r\n }\r\n },\r\n\r\n resetSelectedPerson(resetValidator) {\r\n const vm = this; \r\n\r\n vm.Model.FirstName = \"\";\r\n vm.Model.LastName = \"\";\r\n vm.Model.FullName = \"\";\r\n vm.Model.EmailAddress = \"\";\r\n vm.Model.ConfirmEmailAddress = \"\";\r\n vm.Model.Gender = null;\r\n vm.Model.BirthDate = null;\r\n\r\n vm.Model.IsBirthDateDisabled = false;\r\n if (resetValidator) {\r\n vm.$validator.reset();\r\n }\r\n }\r\n }\r\n})","export default {\r\n methods: {\r\n validatePasswordStrength: function (password) {\r\n return password\r\n && password.length >= 8 // At least 8 chars long\r\n && /\\d/g.test(password) // Contains numerical character\r\n && /.*[a-zA-Z].*[a-zA-Z]/g.test(password) // Contains at least two alphanumerical chars\r\n && /^[a-zA-Z0-9@.\\-?+!#&=]+$/.test(password); // Contains alphanumric and certain special chars\r\n }\r\n }\r\n};\r\n","import Vue from \"vue\";\r\nimport passwordUtils from \"../mixins/password-utils\";\r\n\r\nVue.component('account-owner-password', {\r\n inject: [\"$validator\"],\r\n mixins: [passwordUtils],\r\n\r\n props: {\r\n storeName: String,\r\n },\r\n\r\n data() {\r\n return {\r\n showPasswordRequirements: true\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n mounted() {\r\n this.onPasswordEntered();\r\n },\r\n\r\n methods: {\r\n onPasswordEntered() {\r\n this.showPasswordRequirements = !this.validatePasswordStrength(this.Model.Password);\r\n\r\n }\r\n }\r\n})","export default {\r\n methods: {\r\n hasDuplicate(data) {\r\n for (var i = 0; i < data.length; i++) {\r\n for (var x = i + 1; x < data.length; x++) {\r\n if (data[i].FirstName && data[i].LastName && data[x].FirstName && data[x].LastName) {\r\n if (data[i].FirstName.toUpperCase() == data[x].FirstName.toUpperCase() && data[i].LastName.toUpperCase() == data[x].LastName.toUpperCase()) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n },\r\n\r\n raiseErrorIfDuplicateDriver(excludedDrivers, driversDuplicateError) {\r\n if (this.hasDuplicate(excludedDrivers)) {\r\n this.raiseDuplicateDriverError(driversDuplicateError);\r\n return true;\r\n }\r\n return false;\r\n },\r\n\r\n raiseDuplicateDriverError(driversDuplicateError) {\r\n this.$root.$emit('error-modal-open', driversDuplicateError);\r\n }\r\n }\r\n};\r\n","import Vue from \"vue\";\r\nimport excludeDriversUtils from \"../mixins/exclude-driver-utils\";\r\n\r\nVue.component('exclude-driver', {\r\n inject: [\"$validator\"],\r\n mixins: [excludeDriversUtils],\r\n\r\n props: {\r\n storeName: String,\r\n driver: Object,\r\n repeatableIndex: Number,\r\n driversMaxAllowed: Number,\r\n isInChangeMode: Boolean,\r\n driversDuplicateError: String\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n Driver() {\r\n return this.driver;\r\n },\r\n excludedDriversCount() {\r\n return this.Model.ExcludeDrivers.filter((d) => !d.IsHidden).length;\r\n },\r\n isHidden() {\r\n return this.driver.IsHidden;\r\n }\r\n },\r\n\r\n methods: {\r\n addExcludeDriver() {\r\n if (this.driversMaxAllowed > 1) {\r\n if (!this.raiseErrorIfDuplicateDriver(this.Model.ExcludeDrivers, this.driversDuplicateError)) {\r\n this.Model.ExcludeDrivers.push({\r\n Id: this.generateGuid(),\r\n FirstName: null,\r\n LastName: null,\r\n IsFirstNameEmpty: true,\r\n IsLastNameEmpty: true,\r\n ExternalId: null,\r\n });\r\n }\r\n }\r\n },\r\n\r\n clearExcludeDriver(index) {\r\n const excludeDriver = this.Model.ExcludeDrivers[index];\r\n if (excludeDriver.FirstName) {\r\n excludeDriver.FirstName = \"\";\r\n excludeDriver.IsFirstNameEmpty = true;\r\n }\r\n if (excludeDriver.LastName) {\r\n excludeDriver.LastName = \"\";\r\n excludeDriver.IsLastNameEmpty = true;\r\n }\r\n },\r\n\r\n removeExcludeDriver(index) {\r\n this.Model.ExcludeDrivers.splice(index, 1);\r\n },\r\n\r\n onFirstNameChange(index) {\r\n const text = this.Model.ExcludeDrivers[index].FirstName;\r\n this.Model.ExcludeDrivers[index].IsFirstNameEmpty = (!text || /^\\s*$/.test(text));\r\n },\r\n\r\n onLastNameChange(index) {\r\n const text = this.Model.ExcludeDrivers[index].LastName;\r\n this.Model.ExcludeDrivers[index].IsLastNameEmpty = (!text || /^\\s*$/.test(text));\r\n }\r\n }\r\n})","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport changeApi from \"../mixins/changeAccountApi\";\r\nimport excludeDriversUtils from \"../mixins/exclude-driver-utils\";\r\n\r\nVue.component('exclude-driver-list', {\r\n inject: [\"$validator\"],\r\n mixins: [changeApi, excludeDriversUtils],\r\n\r\n props: {\r\n storeName: String,\r\n beforeSubmitQueue: Function,\r\n driversMaxAllowed: Number,\r\n isInChangeMode: Boolean,\r\n driversDuplicateError: String\r\n },\r\n\r\n data() {\r\n return {\r\n showExcludeDrivers: false,\r\n showForm: true\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n stopExcludingMoreDrivers() {\r\n return this.driversMaxAllowed > 1 && (this.Model.ExcludeDrivers.length >= this.driversMaxAllowed);\r\n }\r\n },\r\n\r\n created() {\r\n if (this.isInChangeMode) {\r\n this.showExcludeDrivers = true;\r\n this.hideExistingExcludedDrivers();\r\n }\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n vm.beforeSubmitQueue(callback => {\r\n vm.checkBeforeSubmit(callback);\r\n })\r\n },\r\n\r\n methods: {\r\n checkBeforeSubmit(callback) {\r\n const vm = this;\r\n vm.$validator.validate().then(valid => {\r\n if (valid) {\r\n if (vm.isInChangeMode) {\r\n if (!vm.hasDuplicate(vm.Model.ExcludeDrivers)) {\r\n axios.post(vm.api.storeExcludedDrivers, vm.Model)\r\n .then(result => {\r\n callback();\r\n });\r\n } else if (vm.hasDuplicate(vm.Model.ExcludeDrivers)) {\r\n vm.raiseDuplicateDriverError(vm.driversDuplicateError);\r\n }\r\n }\r\n else {\r\n if (vm.hasDuplicate(vm.Model.ExcludeDrivers)) {\r\n vm.raiseDuplicateDriverError(vm.driversDuplicateError);\r\n }\r\n else {\r\n callback();\r\n }\r\n }\r\n }\r\n else {\r\n Vue.prototype.handleInvalidForm(vm);\r\n }\r\n });\r\n },\r\n\r\n hideExistingExcludedDrivers() {\r\n this.Model.ExcludeDrivers.forEach((driver) => driver.IsHidden = true);\r\n this.Model.ExcludeDrivers.push({\r\n Id: this.generateGuid(),\r\n FirstName: null,\r\n LastName: null,\r\n IsFirstNameEmpty: true,\r\n IsLastNameEmpty: true,\r\n ExternalId: null,\r\n });\r\n },\r\n toggleShowForm(){\r\n if (this.isInChangeMode) {\r\n this.showForm = !this.showForm;\r\n }\r\n }\r\n }\r\n}) ","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\n\r\nVue.component('change-payment', {\r\n inject: ['$validator'],\r\n\r\n props: {\r\n storeName: String,\r\n beforeSubmitQueue: Function\r\n },\r\n\r\n computed: {\r\n Model: function () {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n\r\n vm.$root.$on('child-validated', (errors) => {\r\n errors.items.forEach(error => {\r\n this.$validator.errors.items.push(error)\r\n })\r\n });\r\n\r\n vm.beforeSubmitQueue(callback => {\r\n vm.$root.$emit('validate-all');\r\n vm.$validator.validate().then(valid => {\r\n if (vm.$validator.errors.items.length > 0) {\r\n Vue.prototype.handleInvalidForm(vm);\r\n } else if (valid) {\r\n axios.post('/api/onlia/financial/UpdatePayment', { ...vm.Model })\r\n .then(response => {\r\n const data = response.data;\r\n if (data.PaymentResult) {\r\n callback();\r\n }\r\n else {\r\n this.$globalModal.msgBoxOk(data.Message);\r\n //template: \"
\" + data.Message + \"
\"\r\n return;\r\n }\r\n });\r\n } else {\r\n Vue.prototype.handleInvalidForm(vm);\r\n }\r\n });\r\n });\r\n }\r\n})\r\n","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport api from \"../mixins/changeAccountApi\";\r\n\r\nVue.component('change-policy-holder-details', {\r\n props: {\r\n storeName: String,\r\n beforeSubmitQueue: Function\r\n },\r\n\r\n mixins: [api],\r\n\r\n computed: {\r\n Model: function () {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n\r\n vm.beforeSubmitQueue(callback => {\r\n vm.$validator.validate().then(valid => {\r\n if (valid) {\r\n axios.post(vm.api.storeDetailsChanges, { ...vm.Model })\r\n .then(response => {\r\n callback();\r\n }); \r\n } else {\r\n Vue.prototype.handleInvalidForm(vm);\r\n }\r\n });\r\n });\r\n }\r\n})","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport api from \"../mixins/changeAccountApi\";\r\nimport passwordUtils from \"../mixins/password-utils\";\r\n\r\nVue.component('change-policy-holder-password', {\r\n inject: [\"$validator\"],\r\n mixins: [api, passwordUtils],\r\n\r\n props: {\r\n storeName: String,\r\n model: Object,\r\n changePasswordModal: String,\r\n beforeSubmitQueue: Function\r\n },\r\n\r\n data() {\r\n return {\r\n showPasswordRequirements: true\r\n };\r\n },\r\n\r\n computed: {\r\n Model: function () {\r\n const model = this.$store.state[this.storeName].model\r\n if (!model.Password) {\r\n Vue.set(model, \"Password\", \"\");\r\n }\r\n if (!model.NewPassword) {\r\n Vue.set(model, \"NewPassword\", \"\");\r\n }\r\n if (!model.RepeatedPassword) {\r\n Vue.set(model, \"RepeatedPassword\", \"\");\r\n }\r\n return model;\r\n }\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n let submitCallback = null;\r\n\r\n this.$eventBus.$on(this.$globalModal.events.hide, ({ id }) => {\r\n if (vm.changePasswordModal === id) {\r\n submitCallback();\r\n }\r\n });\r\n\r\n vm.beforeSubmitQueue(callback => {\r\n vm.$validator.validate().then(valid => {\r\n if (valid) {\r\n axios.post(vm.api.changepassword, { ...vm.Model })\r\n .then(response => {\r\n submitCallback = callback;\r\n vm.$globalModal.show(vm.changePasswordModal);\r\n });\r\n } else {\r\n Vue.prototype.handleInvalidForm(vm);\r\n }\r\n });\r\n });\r\n },\r\n methods: {\r\n onPasswordEntered() {\r\n this.showPasswordRequirements = !this.validatePasswordStrength(this.Model.NewPassword);\r\n }\r\n }\r\n})\r\n","import Vue from \"vue\";\r\nimport api from \"../mixins/api\";\r\n\r\nVue.component('payment-explanation-block', {\r\n mixins: [api],\r\n\r\n props: {\r\n model: Object\r\n },\r\n\r\n data() {\r\n return {\r\n showMvrData: false,\r\n Policies: Array,\r\n MessageContent: Array,\r\n OldTotalPremium: null,\r\n NewTotalPremium: null\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.model;\r\n }\r\n },\r\n\r\n mounted() {\r\n this.registerMvrDataEvent();\r\n },\r\n\r\n methods: {\r\n registerMvrDataEvent() {\r\n const vm = this;\r\n vm.$root.$on('Broadcast::PaymentExplanationMvrData', (mvrData) => {\r\n if (mvrData) {\r\n vm.showMvrData = true;\r\n vm.Policies = mvrData.Policies;\r\n vm.MessageContent = mvrData.MessageContent;\r\n vm.OldTotalPremium = mvrData.OldTotalPremium;\r\n vm.NewTotalPremium = mvrData.NewTotalPremium;\r\n }\r\n })\r\n }\r\n }\r\n})\r\n","import Vue from 'vue';\r\n\r\nVue.component('payment-mvr-impact-popup', {\r\n computed: {\r\n Policies() {\r\n return this.$store.state.mvr.Policies;\r\n },\r\n MessageContent() {\r\n return this.$store.state.mvr.MessageContent;\r\n },\r\n OldTotalPremium() {\r\n return this.$store.state.mvr.OldTotalPremium;\r\n },\r\n NewTotalPremium() {\r\n return this.$store.state.mvr.NewTotalPremium;\r\n }\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport api from \"../mixins/api\";\r\n\r\nVue.component('email-subscribe-consent', {\r\n mixins: [api],\r\n inject: [\"$validator\"],\r\n\r\n props: {\r\n storeName: String,\r\n listId: String,\r\n beforeSubmitQueue: Function\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n created() {\r\n const vm = this;\r\n vm.beforeSubmitQueue(callback => {\r\n vm.onBeforeSubmit(callback);\r\n })\r\n },\r\n\r\n methods: {\r\n onBeforeSubmit(callback) {\r\n const vm = this;\r\n\r\n vm.$validator.validate().then(function (isFormValid) {\r\n if (isFormValid) {\r\n if (!!vm.Model.IsEmailConsentGiven && !!vm.listId) { //&& !vm.emailSubscriptionSent\r\n const subscribeData = {\r\n Email: vm.Model.EmailAddress,\r\n FirstName: vm.Model.FirstName,\r\n LastName: vm.Model.LastName,\r\n EmailsAgreement: vm.Model.IsEmailConsentGiven,\r\n ListId: vm.listId\r\n };\r\n\r\n axios.post(vm.api.emailSubscribeAccount, subscribeData)\r\n .then(result => {\r\n //if (result.data) {\r\n // vm.emailSubscriptionSent = true;\r\n //}\r\n callback();\r\n })\r\n .catch(result => {\r\n callback(); //ignore the error\r\n });\r\n }\r\n else {\r\n callback();\r\n }\r\n } else {\r\n Vue.prototype.handleInvalidForm(vm);\r\n }\r\n });\r\n }\r\n }\r\n})","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport api from \"../mixins/api\";\r\n\r\nVue.component('sms-subscribe-consent', {\r\n mixins: [api],\r\n inject: [\"$validator\"],\r\n\r\n props: {\r\n storeName: String,\r\n listId: String,\r\n beforeSubmitQueue: Function\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n data() {\r\n return {\r\n isSMS: false\r\n }\r\n },\r\n\r\n created() {\r\n const vm = this;\r\n vm.beforeSubmitQueue(callback => {\r\n vm.onBeforeSubmit(callback);\r\n })\r\n },\r\n\r\n methods: {\r\n onBeforeSubmit(callback) {\r\n const vm = this;\r\n\r\n vm.$validator.validate().then(function (isFormValid) {\r\n if (isFormValid) {\r\n if (!!vm.Model.IsSmsConsentGiven && !!vm.listId) {\r\n vm.isSMS = true;\r\n const subscribeData = {\r\n Email: vm.Model.EmailAddress,\r\n PhoneNumber: vm.Model.PhoneNumber,\r\n FirstName: vm.Model.FirstName,\r\n LastName: vm.Model.LastName,\r\n SmsAgreement: vm.Model.IsSmsConsentGiven,\r\n ListId: vm.listId\r\n\r\n };\r\n\r\n axios.post('/api/onlia/emailsubscribe/subscribeSmsAccount', subscribeData)\r\n .then(result => {\r\n callback();\r\n })\r\n .catch(result => {\r\n callback();\r\n });\r\n }\r\n else {\r\n callback();\r\n }\r\n }\r\n\r\n else {\r\n Vue.prototype.handleInvalidForm(vm);\r\n }\r\n });\r\n }\r\n }\r\n})","import Vue from \"vue\";\r\nimport { Validator } from \"@vee-validate-package\";\r\n\r\nVue.directive(\"validate-primary-email\", {\r\n inserted: function (el, binding, vnode) {\r\n const vm = vnode.context;\r\n const recoveryEmailField = binding.value;\r\n\r\n Validator.extend(\"validatePolicyHolderPrimaryEmailAddress\", {\r\n getMessage(field, args) {\r\n return args[0];\r\n },\r\n validate(value, args) {\r\n let recoveryEmail = vm.Model ? vm.Model[recoveryEmailField] : null;\r\n\r\n return (value != recoveryEmail);\r\n }\r\n });\r\n }\r\n});\r\n\r\nValidator.extend(\"validatePolicyHolderPrimaryEmailAddress\", () => { return true; });","import Vue from \"vue\";\r\nimport { Validator } from \"@vee-validate-package\";\r\n\r\nVue.directive(\"validate-recovery-email\", {\r\n inserted: function (el, binding, vnode) {\r\n const vm = vnode.context;\r\n const primaryEmailField = binding.value;\r\n\r\n Validator.extend(\"validatePolicyHolderRecoveryEmailAddress\", {\r\n getMessage(field, args) {\r\n return args[0];\r\n },\r\n validate(value, args) {\r\n let primaryEmail = vm.Model ? vm.Model[primaryEmailField] : null;\r\n\r\n const isValid = (value != primaryEmail);\r\n\r\n if (isValid && primaryEmail) {\r\n vm.$validator.validate(primaryEmailField);\r\n }\r\n\r\n return isValid;\r\n }\r\n });\r\n }\r\n});\r\n\r\nValidator.extend(\"validatePolicyHolderRecoveryEmailAddress\", () => { return true; });","import { Validator } from \"@vee-validate-package\";\r\nimport passwordUtils from \"../mixins/password-utils\";\r\n\r\nValidator.extend(\"validatePasswordStrength\", {\r\n getMessage(field, args) {\r\n return args[0];\r\n },\r\n validate(value, args) {\r\n return passwordUtils.methods.validatePasswordStrength(value);\r\n }\r\n});","import Vue from \"vue\";\r\nimport { Validator } from \"@vee-validate-package\";\r\n\r\nVue.directive(\"repeated-password-validator\", {\r\n inserted: function (el, binding, vnode) {\r\n const vm = vnode.context;\r\n const passwordField = binding.value;\r\n\r\n Validator.extend(\"validateRepeatedPassword\", {\r\n getMessage(field, args) {\r\n return args[0];\r\n },\r\n validate(value, args) {\r\n let password = vm.Model && vm.Model[passwordField] ? vm.Model[passwordField] : null;\r\n return (value === password);\r\n }\r\n });\r\n }\r\n});\r\n\r\nValidator.extend(\"validateRepeatedPassword\", () => { return true; });","import Vue from \"vue\";\r\nimport { Validator } from \"@vee-validate-package\";\r\n\r\nVue.directive(\"validate-confirm-primary-email\", {\r\n inserted: function (el, binding, vnode) {\r\n const vm = vnode.context;\r\n const emailField = binding.value;\r\n\r\n Validator.extend(\"validatePolicyHolderConfirmEmailAddress\", {\r\n getMessage(field, args) {\r\n return args[0];\r\n },\r\n validate(value, args) {\r\n let password = vm.Model && vm.Model[emailField] ? vm.Model[emailField] : null;\r\n return (value === password);\r\n }\r\n });\r\n }\r\n});\r\n\r\nValidator.extend(\"validatePolicyHolderConfirmEmailAddress\", () => { return true; });","import requireAll from '@Shared/utils/require-all';\r\n\r\nrequireAll(require.context('./components/', true, /\\.js$/));\r\nrequireAll(require.context('./directives/', true, /\\.js$/));\r\nrequireAll(require.context('./validation/', true, /\\.js$/));","import requireAll from '@Shared/utils/require-all';\r\n\r\nrequireAll(require.context('./components/', true, /\\.js$/));\r\nrequireAll(require.context('./directives/', true, /\\.js$/));\r\nrequireAll(require.context('./validation/', true, /\\.js$/));","import requireAll from '@Shared/utils/require-all';\r\n\r\nrequireAll(require.context('./components/', true, /\\.js$/));\r\nrequireAll(require.context('./directives/', true, /\\.js$/));\r\nrequireAll(require.context('./validation/', true, /\\.js$/));\r\n","import Vue from 'vue';\r\nimport { IS_DEV } from '@Shared/settings';\r\n\r\nVue.component('add-additional-home-owners', {\r\n props: {\r\n storeModuleName: {\r\n type: String,\r\n required: true\r\n },\r\n beforeSubmitQueue: {\r\n type: Function,\r\n },\r\n anotherPersonLabel: {\r\n type: String,\r\n required: true\r\n },\r\n maxAdditionalHomeOwners: {\r\n type: Number,\r\n required: true\r\n },\r\n },\r\n inject: [ '$validator' ],\r\n data() {\r\n return {\r\n containerId: \"additionalHomeOwners\" + this._uid,\r\n additionalHomeOwners: []\r\n };\r\n },\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeModuleName].model;\r\n },\r\n defaultPersonObject() {\r\n return {\r\n // ...this.Model.Person,\r\n FirstName: '',\r\n LastName: '',\r\n AdditionalHomeowner: '0'\r\n };\r\n },\r\n persons() {\r\n // Persons added to current policy\r\n return this.Model.Persons.map((person) => {\r\n // TODO 2021-09-14 AndrewKim: Once persons are populated, check if this property addition is actually required\r\n person.IS_EXISTING_USER = true;\r\n return person;\r\n });\r\n },\r\n proposalPersons() {\r\n // Persons on account, not on current policy\r\n return this.Model.ProposalPersons.map((person) => {\r\n // TODO 2021-09-14 AndrewKim: Once persons are populated, check if this property addition is actually required\r\n person.IS_EXISTING_USER = true;\r\n return person;\r\n });\r\n },\r\n canAddAdditionalHomeOwners() {\r\n return this.additionalHomeOwners.length < this.maxAdditionalHomeOwners;\r\n },\r\n homeOwnersDropDownOptions() {\r\n return this.proposalPersons.map(person => ({\r\n v: person.Id,\r\n t: person.ProposalPersonName || `${person.FirstName} ${person.LastName}`\r\n }));\r\n },\r\n fieldsHomeOwners() {\r\n let arr= [];\r\n let el = null;\r\n return this.$validator.fields.items.filter((field) => {\r\n el = document.getElementsByName(field.name)[0] || document.getElementById(field.name);\r\n return (el && el.closest(\"#\" + this.containerId)) // Check if field is inside section \r\n });\r\n },\r\n editMode() {\r\n // editMode can be set by the parent component if any(different than Step component)\r\n return this.$parent.editMode || false;\r\n }\r\n },\r\n created() {\r\n this.additionalHomeOwners = [ ...this.persons ];\r\n if (this.editMode && this.additionalHomeOwners.length === 0) {\r\n this.addHomeOwner(null, false)\r\n }\r\n if (this.beforeSubmitQueue) {\r\n this.beforeSubmitQueue(this.submitAdditionalHomeOwners);\r\n }\r\n this.$eventBus.$on('additionalHomeOwners:open', () => {\r\n if (this.additionalHomeOwners.length === 0) {\r\n this.addHomeOwner(null, false);\r\n }\r\n });\r\n this.$eventBus.$on('additionalHomeOwners:submit', () => {\r\n // Emit whithout callback, \r\n // when there is another component(one the same level) with beforeSubmit function\r\n this.submitAdditionalHomeOwners();\r\n });\r\n },\r\n beforeDestroy() {\r\n this.$eventBus.$off('additionalHomeOwners:open', this.handleHomeOwnersSectionOpen);\r\n },\r\n methods: {\r\n /**\r\n * Before submitting form, set additional homeowners on Model Vuex Value\r\n */\r\n async submitAdditionalHomeOwners(callback) {\r\n try {\r\n if (callback) {\r\n const isValid = await this.$validator.validate();\r\n\r\n if (!isValid) return;\r\n }\r\n\r\n const additionalHomeOwners = this.additionalHomeOwners.reduce((additionalHomeOwners, homeOwner) => {\r\n if (homeOwner.Id && homeOwner.FirstName && homeOwner.LastName) {\r\n const clonedHomeOwner = { ...homeOwner };\r\n\r\n delete clonedHomeOwner.IS_EXISTING_USER;\r\n\r\n additionalHomeOwners.push(clonedHomeOwner);\r\n }\r\n return additionalHomeOwners;\r\n }, []);\r\n\r\n this.$set(this.Model, 'Persons', additionalHomeOwners);\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n }\r\n catch (error) {\r\n (IS_DEV && console.error('submitAdditionalHomeOwners error:', error));\r\n }\r\n },\r\n // Reset and/or validate ONLY homeowners fields\r\n async resetOrValidateFields(validate=true) { \r\n // Form fields validation\r\n let areValid = true;\r\n if (this.fieldsHomeOwners.length > 0) {\r\n let arr = [];\r\n this.fieldsHomeOwners.forEach((field) => {\r\n field.reset();\r\n if (validate) {\r\n arr.push(\r\n this.$validator.validate(field.name)\r\n );\r\n }\r\n });\r\n if (validate) {\r\n const results = Promise.all(arr);\r\n areValid = (await results).every(isValid => isValid); \r\n }\r\n return areValid;\r\n } \r\n },\r\n async addHomeOwner(id, validate=true) {\r\n if (validate) {\r\n const areValid = await this.resetOrValidateFields();\r\n if (!areValid) {\r\n // Vue.prototype.handleInvalidForm(this);\r\n return;\r\n };\r\n\r\n // When nothing is selected from dropdowns, we need to run different validation.\r\n const arePersonsValid = (\r\n !this.additionalHomeOwners.length ||\r\n this.additionalHomeOwners.every(homeOwner => homeOwner.FirstName)\r\n );\r\n\r\n if (!arePersonsValid) return;\r\n }\r\n \r\n if (id) {\r\n this.additionalHomeOwners.push({\r\n ...this.defaultPersonObject,\r\n Id: id,\r\n ProposalPersonId: id\r\n });\r\n }\r\n else {\r\n this.additionalHomeOwners.push({});\r\n }\r\n },\r\n removeHomeOwner(index) {\r\n this.additionalHomeOwners.splice(index, 1);\r\n if (this.additionalHomeOwners.length === 0) {\r\n // if (this.editMode) {\r\n // this.addHomeOwner(null, false)\r\n // }\r\n this.submitAdditionalHomeOwners();\r\n // if (!this.editMode) {\r\n this.$eventBus.$emit(\"changeAdditionalHomeowners:close\");\r\n // }\r\n }\r\n Vue.nextTick(() => {\r\n this.resetOrValidateFields(false);\r\n });\r\n },\r\n createNewHomeOwner(index, id) {\r\n this.additionalHomeOwners = this.additionalHomeOwners.map((homeowner, homeownerIndex) => {\r\n if (homeownerIndex === index) {\r\n return {\r\n ...this.defaultPersonObject,\r\n Id: id,\r\n ProposalPersonId: id\r\n };\r\n }\r\n return homeowner;\r\n });\r\n },\r\n updateHomeOwnerInfo(index, info) {\r\n this.additionalHomeOwners = this.additionalHomeOwners.map((homeowner, homeownerIndex) => {\r\n if (homeownerIndex === index) {\r\n return info;\r\n }\r\n return homeowner;\r\n });\r\n },\r\n handleHomeOwnersSectionOpen() {\r\n if (this.additionalHomeOwners.length === 0) {\r\n this.addHomeOwner(null, false);\r\n }\r\n },\r\n }\r\n});\r\n","import Vue from 'vue';\r\n\r\nconst EVENTS = {\r\n updateHomeOwnerInfo: 'update:home-owner',\r\n createNewHomeOwner: 'create:home-owner',\r\n addHomeOwner: 'add:home-owner',\r\n removeHomeOwner: 'remove:home-owner'\r\n};\r\n\r\nVue.component('additional-home-owner', {\r\n props: {\r\n storeModuleName: {\r\n type: String,\r\n required: true\r\n },\r\n homeOwnersDropDownOptions: {\r\n type: Array,\r\n required: true\r\n },\r\n homeOwner: {\r\n type: Object,\r\n required: true\r\n },\r\n repeatableIndex: {\r\n type: Number,\r\n required: true\r\n },\r\n canAddAdditionalHomeOwners: {\r\n type: Boolean,\r\n required: true\r\n },\r\n borderTop: {\r\n type: Boolean,\r\n default: false\r\n },\r\n dropDownKey: {\r\n type: String,\r\n required: true\r\n },\r\n selectedHomeOwners: {\r\n type: Array,\r\n required: true\r\n },\r\n proposalPersons: {\r\n type: Array,\r\n required: true\r\n }, \r\n editMode: {\r\n type: Boolean,\r\n required: true\r\n }\r\n },\r\n inject: ['$validator'],\r\n data() {\r\n let selectedOption = '';\r\n\r\n if (typeof this.homeOwner === 'object') {\r\n if (this.homeOwner.AdditionalHomeowner === '0') {\r\n selectedOption = '0';\r\n }\r\n else if (this.homeOwner.Id) {\r\n selectedOption = this.homeOwner.Id;\r\n }\r\n }\r\n\r\n return {\r\n componentId: this._uid,\r\n // Input fields data binding\r\n additionalHomeOwner: this.homeOwner,\r\n\r\n // Drop down data binding\r\n // Homeowner values: {}, '0\", ''\r\n // selectedOption: this.homeOwner.Id || this.homeOwner || '',\r\n selectedOption,\r\n\r\n initialDropDownOptions: []\r\n };\r\n },\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeModuleName].model;\r\n },\r\n areInputFieldsDisabled() {\r\n return this.homeOwner.IS_EXISTING_USER;\r\n }\r\n },\r\n watch: {\r\n homeOwner: {\r\n handler(homeOwner) {\r\n this.additionalHomeOwner = homeOwner;\r\n }\r\n },\r\n additionalHomeOwner: {\r\n deep: true,\r\n handler(homeOwner) {\r\n this.$emit(EVENTS.updateHomeOwnerInfo, this.repeatableIndex, homeOwner);\r\n }\r\n },\r\n selectedOption: {\r\n handler(selectedOption) {\r\n if (selectedOption === '0') {\r\n this.$emit(EVENTS.createNewHomeOwner);\r\n }\r\n else {\r\n const homeOwner = this.proposalPersons.find(selectedHomeOwner => selectedHomeOwner.Id === selectedOption);\r\n this.$emit(EVENTS.updateHomeOwnerInfo, this.repeatableIndex, homeOwner);\r\n }\r\n }\r\n },\r\n selectedHomeOwners: {\r\n handler: 'setDropDownOptions'\r\n }\r\n },\r\n mounted() {\r\n if (this.dropdownOptions[this.dropDownKey]) {\r\n this.initialDropDownOptions = this.dropdownOptions[this.dropDownKey];\r\n }\r\n this.setDropDownOptions();\r\n },\r\n methods: {\r\n setDropDownOptions() {\r\n const availableHomeOwnerOptions = this.homeOwnersDropDownOptions.filter(homeOwnerOption => (\r\n homeOwnerOption.v === this.selectedOption ||\r\n this.selectedHomeOwners.every(selectedHomeOwner => selectedHomeOwner.Id !== homeOwnerOption.v)\r\n ));\r\n\r\n this.dropdownOptions[this.dropDownKey] = [\r\n ...this.initialDropDownOptions,\r\n ...availableHomeOwnerOptions\r\n ];\r\n },\r\n addHomeOwner() {\r\n this.$emit(EVENTS.addHomeOwner);\r\n },\r\n removeHomeOwner() {\r\n this.$emit(EVENTS.removeHomeOwner);\r\n }\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport sharedUtils from \"../mixins/shared\";\r\n\r\nVue.component(\"change-property-coverages\", {\r\n props: {\r\n afterSubmitQueue: Function,\r\n beforeSubmitQueue: Function,\r\n confirmationModal: String,\r\n noChangesModal: String,\r\n storeName: String\r\n },\r\n // data() {\r\n // return {\r\n // redirectUrl: '',\r\n // }\r\n // },\r\n mixins: [sharedUtils],\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n let submitCallback = null;\r\n\r\n vm.beforeSubmitQueue(callback => {\r\n submitCallback = callback;\r\n vm.checkForChanges();\r\n });\r\n\r\n this.$eventBus.$on(this.$globalModal.events.hide, ({ id, trigger }) => {\r\n vm.handleSubmitPrompt(trigger, id, submitCallback);\r\n });\r\n\r\n vm.registerPolicyReloadOnChange(vm.afterSubmitQueue, vm.Model.InternalPolicyId);\r\n },\r\n methods: {\r\n // checkForChanges() {\r\n // const vm = this;\r\n // axios.post(vm.api.hasChanges, vm.Model)\r\n // .then(response => {\r\n // var data = response.data;\r\n\r\n // var modalID = response.data.hasChanges ? vm.confirmationModal : vm.noChangesModal;\r\n // vm.redirectUrl = data.redirectUrl;\r\n // vm.$globalModal.show(modalID);\r\n // });\r\n // },\r\n // handleSubmitPrompt(trigger, modalId, submitCallback) {\r\n // const vm = this;\r\n\r\n // if ((vm.confirmationModal === modalId || modalId === vm.noChangesModal) && trigger == 'ok') {\r\n // if (!!vm.redirectUrl && modalId === vm.noChangesModal) {\r\n // window.location.href = vm.redirectUrl;\r\n // } else {\r\n // submitCallback();\r\n // }\r\n // }\r\n // }\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport api from \"../mixins/changePropertyTempApi\";\r\nimport sharedUtils from \"../mixins/shared\";\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component('change-property-details-form', {\r\n props: {\r\n beforeSubmitQueue: Function,\r\n afterSubmitQueue: Function,\r\n confirmationModal: String,\r\n noChangesModal: String,\r\n changeType: String,\r\n storeName: String\r\n },\r\n mixins: [sharedUtils],\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n data() {\r\n return {\r\n changeableFields: {\r\n hasFields: false,\r\n noFields: false\r\n },\r\n // oldPremium: 0,\r\n // newPremium: 0,\r\n // redirectUrl:''\r\n };\r\n },\r\n mounted() {\r\n const vm = this;\r\n let submitCallback = null;\r\n vm.getChangeableFields();\r\n vm.Model.ChangeType = vm.changeType;\r\n\r\n this.$eventBus.$on(this.$globalModal.events.ok, ({ id }) => {\r\n if (vm.confirmationModal === id || id === vm.noChangesModal) {\r\n if (!!vm.redirectUrl) {\r\n UnsavedChangesPopup.redirect(vm.redirectUrl);\r\n } else {\r\n submitCallback();\r\n }\r\n }\r\n });\r\n\r\n vm.beforeSubmitQueue(callback => {\r\n submitCallback = callback;\r\n vm.calculateChangedPremium(vm.noChangesModal, vm.confirmationModal);\r\n });\r\n\r\n vm.afterSubmitQueue(callback => {\r\n axios.post(vm.api.reloadPolicy, \"\\\"\" + vm.Model.InternalPolicyId + \"\\\"\", { headers: { \"Content-Type\": \"application/json;charset=UTF-8\" } })\r\n .then(response => {\r\n callback();\r\n });\r\n })\r\n },\r\n methods: {\r\n getChangeableFields() {\r\n const vm = this;\r\n axios.post(vm.api.getChangeableFields, vm.Model)\r\n .then(response => {\r\n var data = response.data;\r\n vm.changeableFields.hasFields = !!data;\r\n vm.changeableFields.noFields = !vm.changeableFields.hasFields;\r\n if (vm.changeableFields.hasFields) {\r\n for (var field in data.data) {\r\n Vue.set(vm.changeableFields, field, data.data[field]);\r\n }\r\n }\r\n });\r\n },\r\n // calculateChangedPremium() {\r\n // const vm = this;\r\n // axios.post(vm.api.calculateChangedPremium, vm.Model)\r\n // .then(response => {\r\n // var data = response.data;\r\n // if (!!data.noChanges) {\r\n // vm.$globalModal.show(vm.noChangesModal);\r\n // vm.redirectUrl = data.redirectUrl;\r\n // } else {\r\n // vm.oldPremium = data.oldPremium;\r\n // vm.newPremium = data.newPremium;\r\n // vm.$globalModal.show(vm.confirmationModal);\r\n // }\r\n // });\r\n // }\r\n }\r\n})\r\n","import Vue from \"vue\";\r\nimport api from \"../mixins/changePropertyTempApi\";\r\n\r\nVue.component('change-property-form', {\r\n template: `
`,\r\n props: {\r\n storeName: String,\r\n beforeSubmitQueue: Function,\r\n confirmationModal: String\r\n },\r\n\r\n mixins: [api],\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n created() {\r\n this.Model.ChangeType = '';\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n let submitCallback = null;\r\n\r\n this.$eventBus.$on(this.$globalModal.events.ok, ({ id }) => {\r\n if (vm.confirmationModal === id) {\r\n submitCallback();\r\n }\r\n });\r\n\r\n vm.beforeSubmitQueue(callback => {\r\n submitCallback = callback;\r\n this.$globalModal.show(this.confirmationModal);\r\n });\r\n }\r\n})\r\n","import Vue from 'vue';\r\nimport api from '../mixins/changePropertyTempApi';\r\nimport clearMyAccountClasses from '@Shared/utils/clear-my-account-classes';\r\n\r\nVue.component('change-property-funnel-temp', {\r\n mixins: [api],\r\n props: {\r\n model: Object,\r\n funnelDict: {\r\n type: Object,\r\n default: {}\r\n },\r\n basketCount: Number\r\n },\r\n data() {\r\n return {\r\n funnelProperties: {},\r\n funnelMethods: {}\r\n };\r\n },\r\n\r\n computed: {\r\n Labels: function () {\r\n return this.funnelDict;\r\n }\r\n },\r\n\r\n created() {\r\n const vm = this;\r\n vm.storeName = vm.$options._componentTag;\r\n\r\n vm.$store.registerModule(vm.storeName, {\r\n namespaced: true,\r\n\r\n state: {\r\n model: vm.model\r\n },\r\n\r\n mutations: {\r\n mutate(state, payload) {\r\n state.model = payload;\r\n }\r\n }\r\n });\r\n\r\n vm.Model = vm.$store.state[vm.storeName].model;\r\n\r\n clearMyAccountClasses();\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n vm.$root.$emit('Broadcast::UpdateShoppingBasketCount', vm.basketCount);\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport sharedUtils from \"../mixins/shared\";\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component(\"change-property-homeowners\", {\r\n props: {\r\n storeName: String,\r\n beforeSubmitQueue: Function,\r\n confirmationModal: String,\r\n noChangesModal: String,\r\n changeType: String,\r\n },\r\n mixins: [sharedUtils],\r\n inject: [ '$validator' ],\r\n data() {\r\n return {\r\n isOpenHomeowners: true,\r\n pushOnBeforeSubmitQueue: null,\r\n initiallyPersons: null,\r\n editMode: true,\r\n }\r\n },\r\n computed: {\r\n Model() {\r\n const model = this.$store.state[this.storeName].model;\r\n // Set no EffectiveDate to force user to select the date\r\n // Vue.set(model, 'ChangeEffectiveDate', null); \r\n return model;\r\n },\r\n hasHomeowners() {\r\n return this.Model.Persons.length > 0;\r\n }\r\n },\r\n created() {\r\n this.initiallyPersons = this.Model.Persons;\r\n },\r\n mounted() {\r\n const vm = this;\r\n let submitCallback = null;\r\n vm.Model.ChangeType = vm.changeType;\r\n\r\n if (this.hasHomeowners) {\r\n this.isOpenHomeowners = true;\r\n }\r\n vm.$eventBus.$on(\"changeAdditionalHomeowners:close\", () => {\r\n vm.isOpenHomeowners = false;\r\n });\r\n\r\n this.$eventBus.$on(this.$globalModal.events.ok, ({ id }) => {\r\n if (vm.confirmationModal === id || id === vm.noChangesModal) {\r\n if (!!vm.redirectUrl) {\r\n UnsavedChangesPopup.redirect(vm.redirectUrl);\r\n } else {\r\n submitCallback();\r\n }\r\n }\r\n });\r\n this.$eventBus.$on(this.$globalModal.events.hide, ({ id, trigger }) => {\r\n vm.handleSubmitPrompt(trigger, id, submitCallback);\r\n });\r\n\r\n vm.beforeSubmitQueue(callback => {\r\n submitCallback = callback;\r\n vm.$eventBus.$emit('additionalHomeOwners:submit');\r\n vm.checkForAdditionalHomeOwnerChanges();\r\n });\r\n },\r\n beforeDestroy() {\r\n this.$eventBus.$off('changeAdditionalHomeowners:close');\r\n },\r\n methods: {\r\n async addHomeowners() {\r\n this.isOpenHomeowners = true;\r\n await this.$nextTick();\r\n await this.$eventBus.$emit('additionalHomeOwners:open');\r\n this.$validator.reset();\r\n },\r\n checkForAdditionalHomeOwnerChanges() {\r\n const vm = this;\r\n axios.post(vm.api.hasAdditionalHomeownerChanges, vm.Model)\r\n .then(response => {\r\n var data = response.data;\r\n\r\n var modalID = response.data.hasChanges ? vm.confirmationModal : vm.noChangesModal;\r\n vm.redirectUrl = data.redirectUrl;\r\n vm.$globalModal.show(modalID);\r\n });\r\n },\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport sharedUtils from \"../mixins/shared\";\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component(\"change-property-mortgage\", {\r\n props: {\r\n storeName: String,\r\n beforeSubmitQueue: Function,\r\n confirmationMortgageModal: String,\r\n noChangesModal: String,\r\n confirmationModal: String,\r\n changeType: String,\r\n },\r\n mixins: [sharedUtils],\r\n inject: [ '$validator' ],\r\n data() {\r\n return {\r\n isOpenMortagage: true,\r\n pushOnBeforeSubmitQueue: null,\r\n hasMortgageCompanyInitially: \"\",\r\n initiallyPersons: null,\r\n editMode: true,\r\n }\r\n },\r\n computed: {\r\n Model() {\r\n const model = this.$store.state[this.storeName].model;\r\n // Set no EffectiveDate to force user to select the date\r\n // Vue.set(model, 'ChangeEffectiveDate', null); \r\n return model;\r\n },\r\n hasMortgageCompany() {\r\n return this.Model.MortgageCompany.HasData;\r\n },\r\n },\r\n watch: {\r\n \"Model.MortgageCompany.Name\": function (newVal) {\r\n const address = this.Model.MortgageCompany.Address;\r\n const isEmptyAddress = address === null ||\r\n (address &&\r\n Object.keys(address).length === 0 &&\r\n address.constructor === Object);\r\n if (!!newVal && !isEmptyAddress && !address.IsEmpty) {\r\n Vue.set(this.Model.MortgageCompany, \"HasData\", true);\r\n } else if (this.Model.MortgageCompany.HasData) {\r\n Vue.set(this.Model.MortgageCompany, \"HasData\", false);\r\n }\r\n },\r\n\r\n \"Model.MortgageCompany.Address.FullAddress\": function (newVal) {\r\n const name = this.Model.MortgageCompany.Name;\r\n if (!!newVal && name !== \"\") {\r\n Vue.set(this.Model.MortgageCompany, \"HasData\", true);\r\n } else if (this.Model.MortgageCompany.HasData) {\r\n Vue.set(this.Model.MortgageCompany, \"HasData\", false);\r\n }\r\n },\r\n },\r\n created() {\r\n this.hasMortgageCompanyInitially = this.Model.MortgageCompany.HasData;\r\n this.initiallyPersons = this.Model.Persons;\r\n },\r\n mounted() {\r\n const vm = this;\r\n let submitCallback = null;\r\n vm.Model.ChangeType = vm.changeType;\r\n\r\n if (this.hasMortgageCompany) {\r\n this.isOpenMortagage = true;\r\n }\r\n\r\n this.$eventBus.$on(this.$globalModal.events.ok, ({ id }) => {\r\n if (vm.confirmationMortgageModal === id || id === vm.noChangesModal || vm.confirmationModal === id) {\r\n if (!!vm.redirectUrl) {\r\n UnsavedChangesPopup.redirect(vm.redirectUrl);\r\n } else {\r\n submitCallback();\r\n }\r\n }\r\n });\r\n this.$eventBus.$on(this.$globalModal.events.hide, ({ id, trigger }) => {\r\n vm.handleSubmitPrompt(trigger, id, submitCallback);\r\n });\r\n\r\n vm.beforeSubmitQueue(callback => {\r\n submitCallback = callback;\r\n if (this.hasMortgageCompanyInitially !== this.Model.MortgageCompany.HasData) {\r\n vm.calculateMortgageChangePremium(vm.noChangesModal, vm.confirmationMortgageModal);\r\n } else {\r\n vm.checkForMortgageChanges();\r\n }\r\n });\r\n },\r\n methods: {\r\n addMortgageCompany() {\r\n Vue.set(this.Model.MortgageCompany, \"Name\", \"\");\r\n Vue.set(this.Model.MortgageCompany, \"Address\", {});\r\n Vue.nextTick(() => {\r\n this.isOpenMortagage = true;\r\n })\r\n },\r\n removeMortgageCompany() {\r\n Vue.set(this.Model.MortgageCompany, \"Name\", null);\r\n Vue.set(this.Model.MortgageCompany, \"Address\", {});\r\n Vue.nextTick(() => {\r\n this.$store.commit(`${this.storeName}/mutate`, this.Model);\r\n this.isOpenMortagage = false;\r\n })\r\n }, \r\n checkForMortgageChanges() {\r\n const vm = this;\r\n axios.post(vm.api.hasMortgageChange, vm.Model)\r\n .then(response => {\r\n var data = response.data;\r\n\r\n var modalID = response.data.hasChanges ? vm.confirmationModal : vm.noChangesModal;\r\n vm.redirectUrl = data.redirectUrl;\r\n vm.$globalModal.show(modalID);\r\n });\r\n },\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport totalPremium from '@Shared/mixins/total-premium';\r\n\r\nVue.component('myzone-property-summary-total-premium', {\r\n mixins: [totalPremium],\r\n\r\n props: {\r\n storeName: String,\r\n },\r\n\r\n data() {\r\n return {\r\n totalPremiumCalculated: 0,\r\n isPaymentPerMonth: true,\r\n applicableTaxesIncluded: true\r\n\r\n //mvrResponse: null,\r\n //buttonType: 'submit',\r\n //renderReady: false,\r\n //submitCallback: Function,\r\n //stepCallback: Function\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n mounted() {\r\n this.calculateTotal(this.Model, this.isPaymentPerMonth);\r\n },\r\n\r\n methods: {\r\n changePremiumOptionsChange: function () {\r\n this.isPaymentPerMonth = !this.isPaymentPerMonth;\r\n this.recalculate();\r\n },\r\n\r\n changeApplicableTaxesIncludedChange: function () {\r\n this.applicableTaxesIncluded = !this.applicableTaxesIncluded;\r\n this.recalculate();\r\n },\r\n\r\n recalculate() {\r\n this.calculateTotal(this.Model, this.isPaymentPerMonth);\r\n },\r\n\r\n calculateTotal(model, isPaymentPerMonth) {\r\n const isPremiumFrequencyPerMonth = isPaymentPerMonth;\r\n let totalPremium = 0;\r\n\r\n model.TotalPremiumBlock = 0;\r\n totalPremium += this.applicableTaxesIncluded ?\r\n isPremiumFrequencyPerMonth ? model.Payment.TotalPremiumPerMonth : model.Payment.TotalPremiumPerYear :\r\n isPremiumFrequencyPerMonth ? model.Payment.TotalPremiumWithoutTaxPerMonth : model.Payment.TotalPremiumWithoutTaxPerYear;\r\n model.TotalPremiumBlock = totalPremium;\r\n\r\n this.totalPremiumCalculated = totalPremium;\r\n }\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport axios from 'axios';\r\nimport api from '../mixins/api';\r\n\r\nVue.component('myzone-property-summary', {\r\n inject: [\"$validator\"],\r\n\r\n mixins: [api],\r\n\r\n props: {\r\n model: Object,\r\n storeName: String,\r\n beforeSubmitQueue: Function,\r\n productIcons: Array,\r\n modalPipedaId: String\r\n },\r\n\r\n data() {\r\n return {\r\n getShoppingBasketFinished: false,\r\n submitCallback: Function,\r\n stepCallback: Function\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n policyItemBinding() {\r\n return {\r\n PolicyModel: this.Model,\r\n ProductName: 'Property'\r\n };\r\n },\r\n MessageContent() {\r\n return {};\r\n }\r\n },\r\n\r\n created() {\r\n const vm = this;\r\n vm.$store.registerModule(vm.storeName, {\r\n namespaced: true,\r\n state: {\r\n model: vm.model\r\n },\r\n mutations: {\r\n mutate(state, payload) {\r\n state.model = payload;\r\n }\r\n }\r\n });\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n\r\n vm.registerRecalculateTotal();\r\n vm.calculateTotalPremiumSet({ PremiumFrequency: vm.Model.PremiumFrequency });\r\n vm.addIconClassToPolicy(vm.Model);\r\n vm.getShoppingBasketFinished = true;\r\n\r\n Vue.nextTick(() => { \r\n vm.$root.$emit(\"Broadcast::ShoppingBasketLoaded\");\r\n });\r\n\r\n vm.setSubmitQueue();\r\n vm.registerPipedaCloseEvent();\r\n },\r\n\r\n methods: {\r\n calculateTotalPremiumSet(settings) {\r\n const vm = this;\r\n var IsTaxesIncluded = settings.ApplicableTaxesIncluded != null ? settings.ApplicableTaxesIncluded : vm.Model.ApplicableTaxesIncluded || vm.Model.ApplicableTaxesIncluded == undefined;\r\n var isPremiumFrequencyPerMonth = settings.PremiumFrequency === \"1\";\r\n\r\n vm.Model.Payment.TotalPremium = isPremiumFrequencyPerMonth ? vm.Model.Payment.TotalPremiumPerMonth : vm.Model.Payment.TotalPremiumPerYear;\r\n vm.Model.Payment.TotalPremiumWithoutTax = isPremiumFrequencyPerMonth ? vm.Model.Payment.TotalPremiumWithoutTaxPerMonth : vm.Model.Payment.TotalPremiumWithoutTaxPerYear;\r\n\r\n vm.Model.Payment.TotalPremium = IsTaxesIncluded ?\r\n isPremiumFrequencyPerMonth ? vm.Model.Payment.TotalPremiumPerMonth : vm.Model.Payment.TotalPremiumPerYear\r\n :\r\n isPremiumFrequencyPerMonth ? vm.Model.Payment.TotalPremiumWithoutTaxPerMonth : vm.Model.Payment.TotalPremiumWithoutTaxPerYear;\r\n vm.Model.Payment.TotalPremiumWithoutTax = isPremiumFrequencyPerMonth ? vm.Model.Payment.TotalPremiumWithoutTaxPerMonth : vm.Model.Payment.TotalPremiumWithoutTaxPerYear;\r\n vm.Model.GroupsSum = this.calculateSumPerGroup(vm.Model.Coverages, IsTaxesIncluded, isPremiumFrequencyPerMonth);\r\n vm.Model.PremiumFrequency = settings.PremiumFrequency;\r\n\r\n Vue.set(this.Model, \"Deductible\", vm.Model.Deductible || 0);\r\n },\r\n\r\n calculateSumPerGroup(coverages, IsTaxesIncluded, isPremiumFrequencyPerMonth) {\r\n var groupsSum = {};\r\n coverages.forEach(cover => {\r\n cover.Premium = IsTaxesIncluded ?\r\n isPremiumFrequencyPerMonth ? cover.PremiumPerMonth : cover.PremiumPerYear\r\n :\r\n isPremiumFrequencyPerMonth ? cover.PremiumWithoutTaxPerMonth : cover.PremiumWithoutTaxPerYear;\r\n cover.PremiumWithoutTax = isPremiumFrequencyPerMonth ? cover.PremiumWithoutTaxPerMonth : cover.PremiumWithoutTaxPerYear;\r\n\r\n if (groupsSum[cover.GroupBackOfficeCode] === undefined) {\r\n groupsSum[cover.GroupBackOfficeCode] = IsTaxesIncluded ?\r\n isPremiumFrequencyPerMonth ? cover.PremiumPerMonth : cover.PremiumPerYear\r\n :\r\n isPremiumFrequencyPerMonth ? cover.PremiumWithoutTaxPerMonth : cover.PremiumWithoutTaxPerYear;\r\n }\r\n else {\r\n groupsSum[cover.GroupBackOfficeCode] += IsTaxesIncluded ?\r\n isPremiumFrequencyPerMonth ? cover.PremiumPerMonth : cover.PremiumPerYear\r\n :\r\n isPremiumFrequencyPerMonth ? cover.PremiumWithoutTaxPerMonth : cover.PremiumWithoutTaxPerYear;\r\n }\r\n });\r\n\r\n return groupsSum;\r\n },\r\n\r\n addIconClassToPolicy(policy) {\r\n this.productIcons.forEach(product => {\r\n if (policy.ProductName === product.Name) {\r\n policy.ProductIconClass = product.IconClass;\r\n }\r\n });\r\n },\r\n\r\n registerRecalculateTotal() {\r\n const vm = this;\r\n vm.$root.$on(\"Broadcast::TotalPremiumSet\", (settings) => {\r\n vm.calculateTotalPremiumSet(settings);\r\n });\r\n },\r\n\r\n setSubmitQueue() {\r\n const vm = this;\r\n vm.beforeSubmitQueue((callback) => {\r\n vm.submitCallback = vm.loggedInUserCallback;\r\n vm.stepCallback = callback;\r\n\r\n this.$globalModal.show(this.modalPipedaId); //Show Pipeda modal\r\n });\r\n },\r\n\r\n registerPipedaCloseEvent() {\r\n const vm = this;\r\n\r\n if (!vm.Model.Pipeda) {\r\n Vue.set(vm.Model, 'Pipeda', { IsAccepted: false });\r\n }\r\n\r\n this.$eventBus.$on(this.$globalModal.events.hide, ({ id }) => {\r\n if (vm.modalPipedaId === id && vm.Model.Pipeda.IsAccepted) {\r\n axios.post(vm.api.savePipeda)\r\n .then(() => {\r\n vm.submitCallback(vm.stepCallback);\r\n });\r\n }\r\n });\r\n },\r\n\r\n loggedInUserCallback(callback) {\r\n const vm = this;\r\n const serviceData = {};\r\n\r\n axios.post(vm.api.callStoreNewProductsService, { ...serviceData })\r\n .then(() => {\r\n callback();\r\n });\r\n }\r\n }\r\n})","import Vue from 'vue';\r\nimport axios from 'axios';\r\nimport api from '../mixins/api';\r\nimport isSameDay from 'date-fns/isSameDay';\r\nimport parseISO from 'date-fns/parseISO';\r\nimport formatDate from 'date-fns/format';\r\nimport isValid from 'date-fns/isValid';\r\nimport { IS_DEV } from '@Shared/settings';\r\n\r\n// NOTE 2021-12-01 AndrewKim: Model.ProposalPersonSource values and what they mean.\r\n// ProposalPersonSource\r\n// 0 - manual (from car). Name will not be empty\r\n// 1 - autoplus\r\n// 2 = other person from home (or the value can be undefined)\r\n// 3 - existing person from auto\r\n// 4 - existing person from cancelled auto policy\r\n// 5 - existing person from home policy\r\n// 6 - existing person from cancelled home policy\r\n\r\nVue.component('property-credit-check', {\r\n filters: {\r\n formatDate(date) {\r\n if (date && isValid(parseISO(date))) {\r\n return formatDate(parseISO(date), 'yyyy-dd-MM');\r\n }\r\n return date;\r\n }\r\n },\r\n mixins: [ api ],\r\n inject: [ '$validator' ],\r\n\r\n props: {\r\n storeName: String,\r\n applyForCreditDiscount: Boolean,\r\n allowCreditCheck: Boolean,\r\n propertyCreditCheckModal: String,\r\n propertyCreditCheckProposallist: Array,\r\n propertyCreditCheckPreviousManualMainPerson: Object,\r\n\r\n dropDownKey: {\r\n type: String,\r\n required: true\r\n }\r\n },\r\n\r\n data() {\r\n return {\r\n originalMainPersonProperties: [],\r\n previousManualMainPersonProperties: [],\r\n showModal: false,\r\n modalCallback: null\r\n };\r\n },\r\n\r\n computed: {\r\n isUserLoggedIn() {\r\n return window.ir.authenticated;\r\n },\r\n modalId() {\r\n return 'allowCreditCheck';\r\n },\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n selectedApplicant() {\r\n const id = this.Model.CreditCheckApplicant;\r\n\r\n if (id) {\r\n return this.propertyCreditCheckProposallist.find(person => person.Id === id);\r\n }\r\n return null;\r\n },\r\n showNameFields() {\r\n return this.Model.MainPerson.IsPersonNameEditable;\r\n },\r\n showBirthDateField() {\r\n return this.Model.MainPerson.IsPersonDOBEditable;\r\n }\r\n },\r\n\r\n watch: {\r\n 'Model.CreditCheckApplicant': {\r\n handler(newVal) {\r\n const { MainPerson: { Id, ProposalPersonId } } = this.Model;\r\n\r\n if (!newVal && (Id || ProposalPersonId)) {\r\n this.Model.CreditCheckApplicant = Id || ProposalPersonId;\r\n return;\r\n }\r\n\r\n if (newVal === '0') {\r\n this.clearPerson();\r\n }\r\n else {\r\n const applicantIndex = this.propertyCreditCheckProposallist.findIndex(person => person.Id === newVal);\r\n this.setProposalPerson(applicantIndex);\r\n }\r\n }\r\n },\r\n showNameFields: {\r\n handler: 'handleFieldRenderingChange'\r\n },\r\n 'Model.ApplyForCreditDiscount': {\r\n async handler(isActive) {\r\n this.handleFieldRenderingChange(isActive);\r\n if (!isActive) {\r\n if (!ir.authenticated) {\r\n this.clearPerson();\r\n }\r\n }\r\n else {\r\n await this.$nextTick();\r\n this.setDropDownOptions();\r\n\r\n const applicantIndex = this.propertyCreditCheckProposallist.findIndex(person => person.Id === this.Model.CreditCheckApplicant);\r\n if (applicantIndex >= 0) {\r\n this.setProposalPerson(applicantIndex);\r\n }\r\n }\r\n }\r\n }\r\n },\r\n\r\n created() {\r\n this.$parent.onBeforeSubmitQueue.push((callback) => {\r\n this.modalCallback = callback;\r\n setTimeout(() => {\r\n if (!this.applyForCreditDiscount) {\r\n this.showModal = true;\r\n }\r\n else {\r\n callback();\r\n }\r\n });\r\n });\r\n\r\n this.$parent.onAfterSubmitQueue.push((callback) => {\r\n setTimeout(() => axios.post(this.api.saveMainPersonStatus)\r\n .then(() => {\r\n callback();\r\n }));\r\n });\r\n\r\n this.$eventBus.$on(this.$globalModal.events.hide, ({ id, trigger }) => {\r\n if (id === this.modalId) {\r\n if (trigger === 'ok') {\r\n this.modalCallback();\r\n }\r\n this.showModal = false;\r\n }\r\n });\r\n },\r\n\r\n mounted() {\r\n this.initializeField(this.Model.MainPerson, 'FirstName');\r\n this.initializeField(this.Model.MainPerson, 'LastName');\r\n this.initializeField(this.Model.MainPerson, 'BirthDate');\r\n this.initializeField(this.Model.MainPerson, 'SelectedFillOption');\r\n this.initializeField(this.Model.MainPerson, 'SelectedProposalPersonIndex');\r\n\r\n if (this.applyForCreditDiscount) {\r\n this.$watch('Model.MainPerson.FirstName', function (newVal, oldVal) {\r\n if (newVal != oldVal) {\r\n this.uncheckCreditCheckbox();\r\n }\r\n });\r\n this.$watch('Model.MainPerson.LastName', function (newVal, oldVal) {\r\n if (newVal != oldVal) {\r\n this.uncheckCreditCheckbox();\r\n }\r\n });\r\n this.$watch('Model.MainPerson.BirthDate', function (newVal, oldVal) {\r\n if (oldVal && !isSameDay(parseISO(oldVal), parseISO(newVal))) {\r\n this.uncheckCreditCheckbox();\r\n }\r\n });\r\n }\r\n else {\r\n this.Model.AllowCreditCheck = false;\r\n }\r\n\r\n this.initializeProposalPersonIndex();\r\n\r\n Vue.set(this.Model, 'IsBirthDateFieldEditableRule', false);\r\n\r\n this.setRulesForExistingCustomer();\r\n\r\n if (this.applyForCreditDiscount && this.allowCreditCheck) {\r\n this.setDropDownOptions();\r\n }\r\n },\r\n\r\n methods: {\r\n initializeField(model, fieldName) {\r\n if (!model[fieldName]) {\r\n Vue.set(model, fieldName, null);\r\n }\r\n },\r\n\r\n uncheckCreditCheckbox() {\r\n if (this.allowCreditCheck) {\r\n this.Model.AllowCreditCheck = false;\r\n }\r\n },\r\n\r\n initializeProposalPersonIndex() {\r\n this.Model.MainPerson.SelectedFillOption = null;\r\n\r\n this.originalMainPersonProperties.push({\r\n ProposalPersonId: this.Model.MainPerson.ProposalPersonId,\r\n ProposalPersonSource: this.Model.MainPerson.ProposalPersonSource\r\n });\r\n\r\n if (this.propertyCreditCheckPreviousManualMainPerson) {\r\n const {\r\n Id,\r\n FirstName,\r\n LastName,\r\n BirthDate,\r\n EmailAddress\r\n } = this.propertyCreditCheckPreviousManualMainPerson;\r\n this.previousManualMainPersonProperties.push({\r\n Id,\r\n FirstName,\r\n LastName,\r\n BirthDate,\r\n EmailAddress\r\n });\r\n }\r\n\r\n if (this.propertyCreditCheckProposallist != undefined && this.propertyCreditCheckProposallist.length > 0) {\r\n if (this.Model.MainPerson.IsEmpty) {\r\n // this.btnParentEl.hidden = true;\r\n }\r\n else {\r\n // this.btnParentEl.hidden = false;\r\n this.Model.MainPerson.SelectedFillOption = 0;\r\n }\r\n\r\n this.propertyCreditCheckProposallist.forEach((proposalDriver, index) => {\r\n if (this.Model.MainPerson.ProposalPersonId != undefined && proposalDriver.ProposalPersonId === this.Model.MainPerson.ProposalPersonId) {\r\n this.Model.MainPerson.SelectedProposalPersonIndex = index;\r\n this.Model.MainPerson.IsAutoPlus = proposalDriver.IsAutoPlus;\r\n }\r\n });\r\n }\r\n else {\r\n this.Model.MainPerson.SelectedFillOption = 0;\r\n }\r\n },\r\n\r\n setProposalPerson(index) {\r\n if (!this.propertyCreditCheckProposallist.length) return;\r\n\r\n const selectedPerson = this.propertyCreditCheckProposallist[index];\r\n\r\n if (this.Model.MainPerson.SelectedProposalPersonIndex == index) {\r\n return false;\r\n }\r\n\r\n this.Model.MainPerson.SelectedProposalPersonIndex = index;\r\n this.fillMainPersonDetails(this.Model.MainPerson, selectedPerson);\r\n\r\n this.$validator.reset();\r\n this.uncheckCreditCheckbox();\r\n },\r\n\r\n fillMainPersonDetails(mainPerson, proposalPersonDetails) {\r\n if (!!mainPerson && !!proposalPersonDetails) {\r\n mainPerson.ProposalPersonId = proposalPersonDetails.ProposalPersonId;\r\n\r\n mainPerson.ProposalPersonSource = this.originalMainPersonProperties.ProposalPersonSource != null ?\r\n this.originalMainPersonProperties.ProposalPersonSource :\r\n proposalPersonDetails.ProposalPersonSource;\r\n\r\n mainPerson.IsAutoPlus = proposalPersonDetails.IsAutoPlus;\r\n\r\n mainPerson.FirstName = proposalPersonDetails.FirstName;\r\n mainPerson.LastName = proposalPersonDetails.LastName;\r\n mainPerson.BirthDate = proposalPersonDetails.BirthDate;\r\n mainPerson.EmailAddress = proposalPersonDetails.EmailAddress;\r\n\r\n mainPerson.ExternalId = proposalPersonDetails.ExternalId;\r\n mainPerson.SelectedFillOption = 0;\r\n\r\n mainPerson.IsPersonNameEditable = proposalPersonDetails.IsPersonNameEditable;\r\n mainPerson.IsPersonDOBEditable = proposalPersonDetails.IsPersonDOBEditable;\r\n }\r\n },\r\n\r\n clearPerson() {\r\n if (this.previousManualMainPersonProperties.length) {\r\n const {\r\n Id,\r\n FirstName,\r\n LastName,\r\n BirthDate,\r\n EmailAddress,\r\n IsPersonNameEditable,\r\n IsPersonDOBEditable\r\n } = this.previousManualMainPersonProperties[0];\r\n this.Model.MainPerson.Id = Id;\r\n this.Model.MainPerson.FirstName = FirstName;\r\n this.Model.MainPerson.LastName = LastName;\r\n this.Model.MainPerson.BirthDate = BirthDate;\r\n this.Model.MainPerson.EmailAddress = EmailAddress;\r\n this.Model.MainPerson.IsPersonNameEditable = IsPersonNameEditable;\r\n this.Model.MainPerson.IsPersonDOBEditable = IsPersonDOBEditable;\r\n }\r\n else {\r\n this.Model.MainPerson.Id = null;\r\n this.Model.MainPerson.FirstName = null;\r\n this.Model.MainPerson.LastName = null;\r\n this.Model.MainPerson.BirthDate = null;\r\n this.Model.MainPerson.EmailAddress = null;\r\n this.Model.MainPerson.IsPersonNameEditable = true;\r\n this.Model.MainPerson.IsPersonDOBEditable = true;\r\n }\r\n\r\n this.Model.MainPerson.SelectedProposalPersonIndex = null;\r\n this.Model.MainPerson.ProposalPersonId = null;\r\n this.Model.MainPerson.ProposalPersonSource = null;\r\n\r\n this.uncheckCreditCheckbox();\r\n\r\n this.Model.MainPerson.ExternalId = 0;\r\n this.Model.MainPerson.SelectedFillOption = 0;\r\n this.Model.MainPerson.IsAutoPlus = false;\r\n\r\n this.$validator.reset();\r\n },\r\n\r\n setRulesForExistingCustomer() {\r\n if (!this.propertyCreditCheckProposallist.length) return;\r\n\r\n const { MainPerson } = this.Model;\r\n\r\n const personIndex = typeof MainPerson.SelectedProposalPersonIndex === 'number' ?\r\n MainPerson.SelectedProposalPersonIndex :\r\n 0;\r\n\r\n const selectedPerson = this.propertyCreditCheckProposallist[personIndex];\r\n\r\n this.setProposalPerson(personIndex);\r\n\r\n this.Model.IsBirthDateFieldEditableRule = !this.Model.MainPerson.BirthDate;\r\n\r\n Vue.set(this.Model, 'CreditCheckApplicant', selectedPerson.Id);\r\n },\r\n\r\n setDropDownOptions() {\r\n if (Array.isArray(this.propertyCreditCheckProposallist) && this.propertyCreditCheckProposallist.length) {\r\n const initialDropDownOptions = this.dropdownOptions[this.dropDownKey];\r\n\r\n this.dropdownOptions[this.dropDownKey] = [\r\n ...this.propertyCreditCheckProposallist.map(({ Name, BirthDate, Id, ProposalPersonName }) => {\r\n const label = /[a-z]/.test(Name) ?\r\n Name :\r\n `${ProposalPersonName} (${formatDate(parseISO(BirthDate), 'yyyy-dd-MM')})`;\r\n return {\r\n t: label,\r\n v: Id\r\n };\r\n }),\r\n ...(Array.isArray(initialDropDownOptions) ? initialDropDownOptions : [])\r\n ];\r\n }\r\n },\r\n\r\n async handleFieldRenderingChange(isRenderedOnPage) {\r\n try {\r\n if (!isRenderedOnPage) {\r\n this.$validator.pause();\r\n }\r\n\r\n await this.$nextTick();\r\n\r\n this.$validator.resume();\r\n }\r\n catch (error) {\r\n (IS_DEV && console.error('handleFieldRenderingChange error:', error));\r\n }\r\n }\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport _merge from \"lodash/merge\";\r\nimport api from \"../mixins/api\";\r\nimport storageUtils from \"../../shared/mixins/storage-utils\";\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component('property-funnel', {\r\n mixins: [api, storageUtils],\r\n\r\n props: {\r\n model: Object,\r\n funnelDict: {\r\n type: Object,\r\n default: {}\r\n },\r\n basketCount: Number\r\n },\r\n\r\n data() {\r\n return {\r\n Model: {},\r\n Funnel: {\r\n \"Api\": \"PropertyApi\",\r\n \"Init\": \"PropertyInit\"\r\n },\r\n funnelProperties: {},\r\n funnelMethods: {}\r\n };\r\n },\r\n\r\n computed: {\r\n Labels: function () {\r\n return this.funnelDict;\r\n }\r\n },\r\n\r\n created() {\r\n const vm = this;\r\n vm.storeName = vm.$options._componentTag;\r\n\r\n vm.$store.registerModule(vm.storeName, {\r\n namespaced: true,\r\n\r\n state: {\r\n model: vm.model\r\n },\r\n\r\n mutations: {\r\n mutate(state, payload) {\r\n state.model = payload;\r\n }\r\n }\r\n });\r\n\r\n vm.Model = vm.$store.state[vm.storeName].model;\r\n\r\n vm.Model.PageUrl = window.location.pathname.substring(0, 1) === \"/\"\r\n ? window.location.pathname.substring(1)\r\n : window.location.pathname;\r\n\r\n this.stateRestored = false;\r\n },\r\n\r\n mounted() {\r\n this.$root.$emit(\"Broadcast::UpdateShoppingBasketCount\", this.basketCount);\r\n\r\n this.savePageState();\r\n },\r\n\r\n methods: {\r\n savePageState() {\r\n if (ir && ir.antiforgeryKey && this.hasExistingPageState(this.hashCode(ir.antiforgeryKey))) {\r\n this.restoreState();\r\n }\r\n },\r\n\r\n restoreState() {\r\n if (!this.stateRestored) {\r\n const vm = this;\r\n this.stateRestored = true;\r\n\r\n axios.post(vm.api.restoreFunnelStep, { ...vm.Model })\r\n .then(result => {\r\n\r\n if (result.status !== 200)\r\n return;\r\n\r\n const data = result.data;\r\n\r\n if (data.RedirectUrl) {\r\n UnsavedChangesPopup.redirect(data.RedirectUrl);\r\n }\r\n\r\n if (data.Result) {\r\n _merge(vm.Model, data.Result);\r\n }\r\n })\r\n .catch(result => {\r\n //do nothing\r\n });\r\n }\r\n }\r\n }\r\n})","import Vue from 'vue';\r\nimport axios from 'axios';\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component('property-premium-threshold-check', {\r\n props: {\r\n api: Object,\r\n afterSubmitQueue: Function\r\n },\r\n\r\n mounted() {\r\n this.registerThresholdCheck();\r\n },\r\n\r\n render() {\r\n return '';\r\n },\r\n\r\n methods: {\r\n registerThresholdCheck() {\r\n const vm = this;\r\n if (!this.api.checkPremiumThreshold) {\r\n return;\r\n }\r\n\r\n window.premiumThresholdCheck = window.premiumThresholdCheck || false;\r\n\r\n if (!window.premiumThresholdCheck) {\r\n\r\n this.afterSubmitQueue((callback) => {\r\n axios.get(vm.api.checkPremiumThreshold)\r\n .then(({ data }) => {\r\n if (data.redirectUrl) {\r\n UnsavedChangesPopup.redirect(data.redirectUrl);\r\n callback({ hasRedirect: true });\r\n }\r\n else {\r\n callback();\r\n }\r\n });\r\n });\r\n\r\n window.premiumThresholdCheck = true;\r\n }\r\n }\r\n }\r\n});","import Vue from \"vue\";\r\n\r\nVue.component('property-questions', {\r\n props: {\r\n storeName: String\r\n },\r\n computed: {\r\n Model: function () {\r\n const model = this.$store.state[this.storeName].model;\r\n Vue.set(model, \"GiveConsent\", false);\r\n return model;\r\n }\r\n }\r\n})","import Vue from \"vue\";\r\n\r\nVue.directive(\"adjust-container-wide\", {\r\n inserted: function (el, binding, vnode) {\r\n var childEl = el.children[0]; //(\".container-wide\");\r\n \r\n if (window.innerWidth > 767) {\r\n if (childEl.offsetHeight > 100) {\r\n el.style.height = childEl.offsetHeight - 100; // padding-bottom-of-content-page = 100px\r\n } else {\r\n el.style.height = 0;\r\n }\r\n } else {\r\n el.style.height = childEl.offsetHeight;\r\n }\r\n childEl.classList.add(\"visible\");\r\n\r\n window.addEventListener('resize', () => {\r\n if (window.innerWidth > 767) {\r\n if (childEl.offsetHeight > 100) {\r\n el.style.height = childEl.offsetHeight - 100;\r\n } else {\r\n el.style.height = 0;\r\n }\r\n } else {\r\n el.style.height = childEl.offsetHeight;\r\n }\r\n })\r\n }\r\n});","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\n\r\nVue.directive(\"data-property-opta\", {\r\n inserted: function (el, binding, vnode) {\r\n const model = vnode.context.Model;\r\n\r\n model.PageUrl = window.location.pathname.substring(0, 1) === \"/\"\r\n ? window.location.pathname.substring(1)\r\n : window.location.pathname;\r\n\r\n vnode.context._data.onAfterSubmitQueue.push(callback => {\r\n setTimeout(() => {\r\n return axios.post(vnode.context.api.validateProperty, model)\r\n .then(() => callback())\r\n })\r\n })\r\n }\r\n});","import Vue from \"vue\";\r\n\r\nVue.directive(\"init-consent\", {\r\n bind: function (el, binding, vnode) {\r\n const vm = vnode.context;\r\n Vue.set(vm.Model, el.name, false);\r\n vm.errors.clear();\r\n }\r\n});\r\n","import { productsProperty } from '@Apis';\r\n\r\nexport default {\r\n computed: {\r\n api() {\r\n return productsProperty;\r\n }\r\n }\r\n};\r\n","import { productsChangePropertyTemp } from '@Apis';\r\n\r\nexport default {\r\n computed: {\r\n api() {\r\n return productsChangePropertyTemp;\r\n }\r\n }\r\n};\r\n","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport api from \"../mixins/changePropertyTempApi\";\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nexport default {\r\n mixins:[api],\r\n data() {\r\n return {\r\n oldPremium: 0,\r\n newPremium: 0,\r\n redirectUrl:''\r\n };\r\n },\r\n methods: {\r\n registerPolicyReloadOnChange: function (requestLifecycleQueue, policyId) {\r\n const vm = this;\r\n requestLifecycleQueue(callback => {\r\n axios.post(vm.api.reloadPolicy, \"\\\"\" + policyId + \"\\\"\", { headers: { \"Content-Type\": \"application/json;charset=UTF-8\" } })\r\n .then(response => {\r\n callback();\r\n });\r\n });\r\n },\r\n checkForChanges() {\r\n const vm = this;\r\n axios.post(vm.api.hasChanges, vm.Model)\r\n .then(response => {\r\n var data = response.data;\r\n\r\n var modalID = response.data.hasChanges ? vm.confirmationModal : vm.noChangesModal;\r\n vm.redirectUrl = data.redirectUrl;\r\n vm.$globalModal.show(modalID);\r\n });\r\n },\r\n calculateChangedPremium(noChangesModal, confirmationModal) {\r\n const vm = this;\r\n axios.post(vm.api.calculateChangedPremium, vm.Model)\r\n .then(response => {\r\n var data = response.data;\r\n if (!!data.noChanges) {\r\n vm.$globalModal.show(noChangesModal);\r\n vm.redirectUrl = data.redirectUrl;\r\n } else {\r\n vm.oldPremium = data.oldPremium;\r\n vm.newPremium = data.newPremium;\r\n vm.$globalModal.show(confirmationModal);\r\n }\r\n });\r\n },\r\n calculateMortgageChangePremium(noChangesModal, confirmationModal) {\r\n const vm = this;\r\n axios.post(vm.api.calculateMortgageChangePremium, vm.Model)\r\n .then(response => {\r\n var data = response.data;\r\n if (!!data.noChanges) {\r\n vm.$globalModal.show(noChangesModal);\r\n vm.redirectUrl = data.redirectUrl;\r\n } else {\r\n vm.oldPremium = data.oldPremium;\r\n vm.newPremium = data.newPremium;\r\n vm.$globalModal.show(confirmationModal);\r\n }\r\n });\r\n },\r\n handleSubmitPrompt(trigger, modalId, submitCallback) {\r\n const vm = this;\r\n\r\n if ((vm.confirmationModal === modalId || modalId === vm.noChangesModal) && trigger == 'ok') {\r\n if (!!vm.redirectUrl && modalId === vm.noChangesModal) {\r\n UnsavedChangesPopup.redirect(vm.redirectUrl);\r\n } else {\r\n submitCallback();\r\n }\r\n }\r\n }\r\n }\r\n};\r\n","import { Validator } from \"@vee-validate-package\";\r\n\r\nValidator.extend(\"inputYearValidator\", {\r\n getMessage(field, args) {\r\n return args[0];\r\n },\r\n validate(value, args) {\r\n const MAX_HOUSE_AGE = 130;\r\n const model = value.toString();\r\n const modelYear = parseInt(model);\r\n const nowYear = (new Date()).getFullYear();\r\n const yearInterval = nowYear - modelYear;\r\n\r\n if (model.length == 4 && yearInterval <= MAX_HOUSE_AGE) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n});","import Vue from 'vue';\r\nimport api from '../mixins/api';\r\nimport axios from 'axios';\r\nimport _merge from 'lodash/merge';\r\nimport scrollInputToPageTop from '../mixins/scroll-input-to-page-top';\r\nimport callVueInstanceMethod from '@Shared/utils/call-vue-instance-method';\r\n\r\nVue.component('address-component', {\r\n inject: [ '$validator' ],\r\n mixins: [ api, scrollInputToPageTop ],\r\n props: {\r\n storeName: String,\r\n modelSpace: String,\r\n modelData: Object,\r\n decodeInput: Boolean,\r\n wrapperField: {\r\n type: Object,\r\n default: null\r\n },\r\n modalId: String,\r\n redirectUrl: String,\r\n displayCookieBanner: Boolean\r\n },\r\n data() {\r\n return {\r\n ignoreProvinceCode: false,\r\n addressEndpoint: {\r\n url: '',\r\n method: 'POST',\r\n options: {}\r\n },\r\n validateEndpoint: {\r\n url: '',\r\n method: 'POST',\r\n options: {}\r\n },\r\n validateUnitEndpoint: {\r\n url: '',\r\n method: 'POST',\r\n options: {}\r\n },\r\n addressModel: null,\r\n unitIsLoading: false\r\n };\r\n },\r\n computed: {\r\n Model: function () {\r\n return (this.modelData) ? this.modelData : this.$store.state[this.storeName].model;\r\n }\r\n },\r\n watch: {\r\n wrapperField: {\r\n handler: function (newVal, oldVal) {\r\n const addressField = this.$refs.addressField;\r\n if (newVal.IsVisible && newVal.Value == null && !!addressField.viewValue) {\r\n addressField.viewValue = '';\r\n //the following 2 rows fix DEV-1500 by preserving the value, but to be consistent with other claims fields,\r\n // the fix will be by clearing the viewValue addressField.emitValue(addressField.viewValue);\r\n // this.$root.$emit(\"report-field-value-changed\", { fieldName: newVal.Name, fieldValue:\r\n // addressField.viewValue });\r\n }\r\n },\r\n deep: true\r\n }\r\n },\r\n created() {\r\n this.addressEndpoint.url = this.api.getAddresses;\r\n this.validateEndpoint.url = this.api.validateAddress;\r\n this.validateUnitEndpoint.url = this.api.validateAddressWithUnitNumber;\r\n this.ignoreProvinceCode = this.$attrs['address-auto-complete-ignore-province-code'] === 'true' ? true : false;\r\n\r\n const modelDrilldown = this.modelSpace.split('.');\r\n this.addressModel = this;\r\n modelDrilldown.forEach((level) => {\r\n this.addressModel = this.addressModel[level];\r\n });\r\n //if we are coming from home quote with manual address the mailing addresss cannot be manual !!\r\n if (this.Model.IsHomeAddressDisabled && this.addressModel.IsManual) {\r\n this.Model.IsMailingAddressEqual = false;\r\n }\r\n },\r\n mounted() {\r\n const vm = this;\r\n Vue.nextTick(() => {\r\n if (vm.Model.IsAggregatorRequest) {\r\n if (vm.displayCookieBanner) {\r\n if (document.cookie.split(\";\").some((item) => item.trim().startsWith(\"CookiesConsent=\"))) {\r\n vm.showAutoFirstAggregatorPopup();\r\n } else {\r\n this.$eventBus.$on('cookieConsentGiven', () => {\r\n vm.showAutoFirstAggregatorPopup();\r\n })\r\n }\r\n } else {\r\n vm.showAutoFirstAggregatorPopup();\r\n } \r\n }\r\n });\r\n vm.hideAutoFirstAggregatorPopup();\r\n },\r\n methods: {\r\n showAutoFirstAggregatorPopup() {\r\n Vue.nextTick(() => {\r\n const vm = this;\r\n vm.$globalModal.show(vm.modalId);\r\n });\r\n },\r\n hideAutoFirstAggregatorPopup() {\r\n const vm = this;\r\n vm.$eventBus.$on(vm.$globalModal.events.hide, ({ id }) => {\r\n if (vm.modalId == id) {\r\n window.location.href = this.redirectUrl;\r\n }\r\n });\r\n },\r\n toggleManualAddress(address) {\r\n this.addressModel.IsManual = !address;\r\n if (this.Model.HomeAddress != undefined) {\r\n this.Model.HomeAddress.IsManual = !address;\r\n }\r\n else {\r\n this.Model.House.PropertyAddress.IsManual = !address;\r\n }\r\n this.Model.IsMailingAddressEqual = address;\r\n //if coming from manual address clear canada post fields\r\n if (!this.addressModel.IsManual) {\r\n this.addressModel.HouseNumberExt = '';\r\n this.addressModel.FullAddress = '';\r\n }\r\n },\r\n onAddressUpdated(address) {\r\n if (this.addressModel) {\r\n _merge(this.addressModel, address);\r\n }\r\n else {\r\n this.addressModel = address;\r\n }\r\n\r\n const unitNumberRef = this.$refs.unitNumberContainer;\r\n this.addressModel.ManualUnitNumber = this.addressModel.HouseNumberExt;\r\n if (unitNumberRef) {\r\n unitNumberRef.forceViewValueUpdate();\r\n }\r\n\r\n if (this.$attrs.onchangecallback) {\r\n this.$nextTick(this.callOnChangeCallback);\r\n }\r\n },\r\n callOnChangeCallback() {\r\n // NOTE 2022-07-05 AndrewKim: There is an issue with onchangecallback, where the second argument for the method is\r\n // trying to access a property on an undefined object.\r\n // Code example: this.$parent.submitField('schadelocatie_adres', Model.schadelocatie_adres)\r\n // As you can see in code above, we are trying to access a property for 'Model', when it should be 'this.Model'.\r\n // This results in an error: 'ReferenceError: Model is not defined'.\r\n // As a work around, without causing backend side effects, I've added a regex to fix the second argument.\r\n const method = `this.$parent.${this.$attrs.onchangecallback}`;\r\n const fixedMethod = method.replace(/\\b(Model)\\b/, 'this.$1');\r\n\r\n callVueInstanceMethod(fixedMethod, this);\r\n },\r\n onUnitValidate($event) {\r\n const unitNr = $event.value;\r\n const addressField = this.$refs.addressField;\r\n const address = Array.isArray(addressField) ? addressField[0].value : addressField.value;\r\n\r\n if (!this.unitIsLoading && address) {\r\n const request = unitNr ? unitNr + '-' + address : address;\r\n\r\n if (request) {\r\n this.unitIsLoading = true;\r\n axios.request({\r\n url: this.validateUnitEndpoint.url,\r\n method: this.validateUnitEndpoint.method,\r\n params: this.validateUnitEndpoint.options,\r\n data: {\r\n AddressText: request,\r\n IgnoreProvinceCode: this.ignoreProvinceCode\r\n }\r\n })\r\n .then((result) => {\r\n if (result.data.FoundAddress) {\r\n this.addressModel.InternationalAddressId = result.data.InternationalAddressId;\r\n $event.callbacks.success();\r\n }\r\n else {\r\n $event.callbacks.fail();\r\n }\r\n })\r\n .finally(() => {\r\n this.unitIsLoading = false;\r\n });\r\n }\r\n }\r\n }\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport _get from \"lodash/get\";\r\nimport _debounce from \"lodash/debounce\";\r\nimport sharedUtils from \"../../../shared/mixins/shared-utils\";\r\nimport { browserDetect } from '@Shared/utils/browser-detect';\r\n\r\nVue.component('address-typeahead', {\r\n inject: ['$validator'],\r\n template: `
\r\n \r\n \r\n
`,\r\n props: {\r\n value: String,\r\n ignoreProvinceCode: Boolean,\r\n decodeInput: Boolean,\r\n modelSpace: String,\r\n aggregatorModal: String,\r\n model: Object,\r\n inputLabel: String,\r\n addressEndpoint: {\r\n type: Object,\r\n default: function () {\r\n return {\r\n url: '',\r\n method: '',\r\n options: {}\r\n }\r\n },\r\n validator: function (value) {\r\n return value && value.url && value.method && value.options;\r\n }\r\n },\r\n validateEndpoint: {\r\n type: Object,\r\n default: function () {\r\n return {\r\n url: '',\r\n method: '',\r\n options: {}\r\n }\r\n },\r\n validator: function (value) {\r\n return value && value.url && value.method && value.options;\r\n }\r\n }\r\n },\r\n data() {\r\n return {\r\n isLoading: false,\r\n viewValue: '',\r\n debounce: null,\r\n selectedAddress: null,\r\n selectedAddressIndex: null,\r\n addressList: [],\r\n isOpen: false\r\n }\r\n },\r\n created() {\r\n this._unknownValue = \"?\";\r\n },\r\n mounted() {\r\n let val = this.value;\r\n if (val) {\r\n if (this.decodeInput) {\r\n val = sharedUtils.methods.decodeHTML(val);\r\n }\r\n this.viewValue = val;\r\n const address = _get(this, this.modelSpace);\r\n if (this.Model.IsAggregatorRequest && !address.InternationalAddressId && !!this.aggregatorModal) {\r\n this.$eventBus.$on(this.$globalModal.events.hide, ({ id }) => {\r\n if (id === this.aggregatorModal) {\r\n this.requestData({\r\n AddressText: this.viewValue\r\n });\r\n }\r\n });\r\n }\r\n else if (address && !address.AddressId) {\r\n if (address.FullAddress != '' && !address.InternationalAddressId) {\r\n this.requestData({\r\n AddressText: this.viewValue\r\n });\r\n }\r\n else {\r\n this.validateAddress(val, null);\r\n }\r\n } else {\r\n this.handleValidationData(address, val, this.decodeInput);\r\n }\r\n } else {\r\n // FNOL functionality: use v-default-value directive\r\n const address = _get(this, this.modelSpace);\r\n if (address && typeof address === 'string') {\r\n this.viewValue = _get(this, this.modelSpace);\r\n }\r\n }\r\n // clean up any css classes that razor might attach\r\n this.$el.className = '';\r\n this.$refs.input.setAttribute('autocomplete', browserDetect() === 'edge' ? 'nope' : 'off');\r\n },\r\n computed: {\r\n Model: function () {\r\n return this.model;\r\n }\r\n },\r\n methods: {\r\n onInputChange($event) {\r\n this.viewValue = $event.target.value;\r\n if (this.viewValue.length > 2) {\r\n if (!this.debounce) {\r\n this.debounce = _debounce(\r\n () => {\r\n this.requestData({\r\n AddressText: this.viewValue\r\n });\r\n this.debounce = undefined;\r\n },\r\n 500)\r\n }\r\n this.debounce();\r\n } else if (this.viewValue.length > 0 && this.viewValue.length <= 2) {\r\n this.addressList = [];\r\n this.isOpen = false;\r\n this.emitValue(null);\r\n } else {\r\n this.addressList = [];\r\n this.isOpen = false;\r\n this.emitValue(null, true);\r\n }\r\n },\r\n emitValue(value, validate) {\r\n this.$emit('input', value);\r\n if (validate) {\r\n setTimeout(() => {\r\n this.$validator.validate(this.$attrs.name);\r\n });\r\n }\r\n },\r\n requestData(requestData) {\r\n this.isLoading = true;\r\n this.addressList = [];\r\n this.isOpen = false;\r\n this.emitValue(null); //reset value\r\n\r\n axios.request({\r\n url: this.addressEndpoint.url,\r\n method: this.addressEndpoint.method,\r\n params: this.addressEndpoint.options,\r\n headers: {\r\n skipLoading: true\r\n },\r\n data: Object.assign({\r\n IgnoreProvinceCode: this.ignoreProvinceCode\r\n }, requestData)\r\n })\r\n .then(res => {\r\n if (res.data) {\r\n this.handleAddressData(res.data)\r\n } else {\r\n this.emitValue(this._unknownValue, true);\r\n }\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n })\r\n },\r\n handleAddressData(data) {\r\n this.addressList = data.map(item => {\r\n return {\r\n Title: (item.IsFinal) ?\r\n this.formatPart(item.AddressText) + \" \" + this.formatPart(item.Description) : this.formatPart(item.AddressText),\r\n AddressId: item.AddressId,\r\n AddressText: item.AddressText,\r\n Description: item.Description,\r\n IsFinal: item.IsFinal\r\n };\r\n })\r\n if (this.addressList.length) {\r\n this.openList();\r\n this.selectIndex(0);\r\n }\r\n },\r\n hideListOnClick() {\r\n this.isOpen = false;\r\n document.removeEventListener('click', this.hideListOnClick);\r\n },\r\n openList() {\r\n this.isOpen = true;\r\n setTimeout(() => {\r\n /*this.$refs.input.focus();*/\r\n document.addEventListener('click', this.hideListOnClick);\r\n });\r\n },\r\n selectAddress(address, event) {\r\n // On click of item, the event is propogating to the input. Which is keeping the list open.\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n\r\n this.isOpen = false;\r\n this.selectedAddress = address;\r\n if (this.selectedAddress.IsFinal) {\r\n this.validateAddress(this.selectedAddress.Title, this.selectedAddress.AddressId);\r\n } else {\r\n this.requestData({\r\n AddressText: this.viewValue,\r\n AddressId: address.AddressId\r\n })\r\n }\r\n },\r\n inputClicked() {\r\n if (this.addressList.length) {\r\n this.openList();\r\n }\r\n },\r\n formatPart(part) {\r\n return part ? part : \"\";\r\n },\r\n validateAddress(addressText, addressId) {\r\n this.isLoading = true;\r\n axios.request({\r\n url: this.validateEndpoint.url,\r\n method: this.validateEndpoint.method,\r\n params: this.validateEndpoint.options,\r\n headers: {\r\n skipLoading: true\r\n },\r\n data: {\r\n AddressText: addressText,\r\n AddressId: addressId,\r\n IgnoreProvinceCode: this.ignoreProvinceCode\r\n }\r\n })\r\n .then(res => {\r\n this.handleValidationData(res.data, addressText);\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n })\r\n },\r\n handleValidationData(address, addressText, decodeInput) {\r\n const addressData = {\r\n City: decodeInput ? sharedUtils.methods.decodeHTML(address.City) : address.City,\r\n PostCode: address.ZipCode,\r\n StreetName: decodeInput ? sharedUtils.methods.decodeHTML(address.StreetName) : address.Street,\r\n StreetNumber: address.HouseNumber,\r\n Province: address.Province,\r\n Country: address.Country,\r\n AddressId: address.AddressId,\r\n HouseNumberExt: address.HouseNumberExtension,\r\n PoBox: address.PoBox,\r\n IsEmpty: !address.City && !address.PostCode && !address.Street && !address.HouseNumber,\r\n InternationalAddressId: address.InternationalAddressId,\r\n AddressAdditionalExplanation: address.AddressAdditionalExplanation,\r\n };\r\n\r\n const unitNumberRef = this.$parent.$refs.unitNumberContainer;\r\n if (address.HouseNumberExtension && unitNumberRef) {\r\n addressText = addressText.replace(address.HouseNumberExtension + '-', \"\");\r\n }\r\n\r\n this.addressList = [];\r\n this.viewValue = addressText;\r\n this.emitValue(addressText, true);\r\n this.$emit('address-updated', addressData);\r\n },\r\n isActive(index) {\r\n return index === this.selectedAddressIndex;\r\n },\r\n selectIndex(index) {\r\n this.selectedAddressIndex = index;\r\n },\r\n generateAddressHtml(text) {\r\n if (!text.toLowerCase().includes(this.viewValue.toLowerCase())) return text;\r\n\r\n const viewValueLength = this.viewValue.length;\r\n const startIndex = text.toLowerCase().indexOf(this.viewValue.toLowerCase());\r\n\r\n return `${text.slice(0, startIndex)}${text.slice(startIndex, startIndex + viewValueLength)}${text.slice(startIndex + viewValueLength)}`;\r\n },\r\n arrowKeyMapper(event) {\r\n if (!this.isOpen) return\r\n switch (event.keyCode) {\r\n case 40: //arrow down\r\n if (this.selectedAddressIndex === null) {\r\n this.selectedAddressIndex = 0;\r\n } else if (this.selectedAddressIndex < this.addressList.length - 1) {\r\n this.selectedAddressIndex++;\r\n }\r\n break;\r\n case 38: //arrow up\r\n if (this.selectedAddressIndex === null) {\r\n this.selectedAddressIndex = this.addressList.length - 1;\r\n } else if (this.selectedAddressIndex > 0) {\r\n this.selectedAddressIndex--;\r\n }\r\n break;\r\n case 13: // Enter\r\n this.selectAddress(this.addressList[this.selectedAddressIndex]);\r\n event.preventDefault();\r\n break;\r\n }\r\n if (this.selectedAddressIndex !== null) {\r\n setTimeout(() => {\r\n const activeElement = this.$refs.list.querySelector('li.active');\r\n if (activeElement) {\r\n this.$refs.list.scrollTop = activeElement.offsetTop;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n})\r\n","import Vue from \"vue\";\r\nimport formatDate from 'date-fns/format';\r\nimport parseISO from 'date-fns/parseISO';\r\n\r\nVue.component('cancellation-date-changed', {\r\n\r\n props: {\r\n cancellationEffectiveDate: String,\r\n model: Object\r\n },\r\n computed: {\r\n Model: function () {\r\n return this.model;\r\n },\r\n },\r\n watch: {\r\n cancellationEffectiveDate: function(newVal) {\r\n Vue.set(this.Model, \"ChangeEffectiveDateDisplay\", formatDate(parseISO(newVal), 'MMMM do, yyyy'));\r\n }\r\n },\r\n mounted() {\r\n this.Model.ChangeEffectiveDateDisplay = formatDate(parseISO(this.cancellationEffectiveDate), 'MMMM do, yyyy')\r\n }\r\n})","import Vue from 'vue';\r\nimport api from \"../mixins/api\";\r\n\r\nVue.component('company-name-component', {\r\n inject: ['$validator'],\r\n mixins: [api],\r\n props: {\r\n storeName: String,\r\n modelSpace: String,\r\n modelData: Object,\r\n decodeInput: Boolean\r\n },\r\n data: () => {\r\n return {\r\n companyEndpoint: {\r\n url: '',\r\n method: 'POST',\r\n options: {}\r\n },\r\n companyModel: null\r\n }\r\n },\r\n computed: {\r\n Model: function () {\r\n return (this.modelData) ? this.modelData : this.$store.state[this.storeName].model;\r\n }\r\n },\r\n created() {\r\n this.companyEndpoint.url = this.api.getCompanies;\r\n this.companyModel = this;\r\n\r\n const modelDrilldown = this.modelSpace.split('.');\r\n modelDrilldown.forEach(level => {\r\n let companyModelNext = this.companyModel[level];\r\n if (!companyModelNext) {\r\n Vue.set(this.companyModel, level, '');\r\n }\r\n this.companyModel = this.companyModel[level];\r\n\r\n });\r\n },\r\n methods: {\r\n onCompanyUpdated(company) {\r\n if (company) {\r\n //_.merge(this.companyModel, company);\r\n this.companyModel = company.Name;\r\n }\r\n },\r\n }\r\n})","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport _debounce from \"lodash/debounce\";\r\nimport sharedUtils from \"../../../shared/mixins/shared-utils\";\r\n\r\nVue.component('company-name-typeahead', {\r\n inject: ['$validator'],\r\n template: `
\r\n \r\n \r\n
`,\r\n props: {\r\n value: String,\r\n storeName: String,\r\n companyEndpoint: {\r\n type: Object,\r\n default: function () {\r\n return {\r\n url: '',\r\n method: '',\r\n options: {}\r\n }\r\n },\r\n validator: function (value) {\r\n return value && value.url && value.method && value.options;\r\n }\r\n },\r\n decodeInput: Boolean\r\n },\r\n data() {\r\n return {\r\n isLoading: false,\r\n viewValue: '',\r\n debounce: null,\r\n selectedCompany: null,\r\n selectedCompanyIndex: null,\r\n companyList: [],\r\n isOpen: false\r\n }\r\n },\r\n computed: {\r\n Model: function () {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n created() {\r\n this.unknownValue = null;\r\n },\r\n mounted() {\r\n let val = this.value;\r\n if (val) {\r\n if (this.decodeInput) {\r\n val = sharedUtils.methods.decodeHTML(val);\r\n this.$emit('input', val);\r\n }\r\n this.viewValue = val;\r\n }\r\n\r\n this.$el.className = '';\r\n },\r\n watch: {\r\n value: function (val, oldVal) {\r\n if (val && val != oldVal && val.length > 2) {\r\n if (this.viewValue !== val) {\r\n this.viewValue = val;\r\n this.companyList = [];\r\n\r\n //setTimeout(() => {\r\n // this.$validator.validate(this.$attrs.name);\r\n //});\r\n }\r\n }\r\n else if (val == null && this.viewValue !== val) {\r\n this.viewValue = val;\r\n this.companyList = [];\r\n }\r\n }\r\n },\r\n methods: {\r\n onInputChange($event) {\r\n this.viewValue = $event.target.value;\r\n if (this.viewValue.length > 2) {\r\n if (!this.debounce) {\r\n this.debounce = _debounce(\r\n () => {\r\n this.requestData(this.viewValue);\r\n this.debounce = undefined;\r\n },\r\n 500)\r\n }\r\n this.debounce();\r\n } else {\r\n this.companyList = [];\r\n this.isOpen = false;\r\n //this.resetCompany();\r\n\r\n if (this.viewValue.length === 0) {\r\n this.emitValue(null, true);\r\n }\r\n }\r\n },\r\n onChangeEvent($event) {\r\n this.viewValue = $event.target.value;\r\n\r\n if (this.viewValue.length > 0 && this.viewValue != this.value) {\r\n this.setManuallyEnteredCompany(this.viewValue);\r\n }\r\n },\r\n emitValue(value, validate) {\r\n this.$emit('input', value);\r\n\r\n if (validate) {\r\n setTimeout(() => {\r\n this.$validator.validate(this.$attrs.name);\r\n });\r\n }\r\n },\r\n requestData(requestData) {\r\n //this.resetCompany();\r\n\r\n this.isLoading = true;\r\n this.companyList = [];\r\n this.isOpen = false;\r\n axios.request({\r\n url: this.companyEndpoint.url,\r\n method: this.companyEndpoint.method,\r\n params: this.companyEndpoint.options,\r\n data: \"\\\"\" + requestData + \"\\\"\",\r\n headers: { \"Content-Type\": \"application/json\", \"skipLoading\": \"true\" }\r\n })\r\n .then(res => {\r\n if (res.data) {\r\n if (requestData == this.viewValue) {\r\n this.handleResult(res.data)\r\n }\r\n } else {\r\n //this.emitValue(this.unknownValue, true);\r\n //this.resetCompany();\r\n }\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n })\r\n },\r\n handleResult(data) {\r\n this.setManuallyEnteredCompany(this.viewValue);\r\n\r\n this.companyList = data.map(item => {\r\n return {\r\n Id: item.Id,\r\n Name: item.Name,\r\n Title: this.highlightText(item.Name, this.viewValue),\r\n };\r\n })\r\n if (this.companyList.length) {\r\n if (this.companyList.length === 1 && this.companyList[0].Name === this.viewValue) {\r\n this.selectCompany(this.companyList[0]);\r\n }\r\n\r\n this.openList();\r\n }\r\n },\r\n resetCompany() {\r\n //this.$emit('input', this.unknownValue);\r\n this.$emit('company-updated', {\r\n Id: null,\r\n Name: null,\r\n Title: null\r\n });\r\n },\r\n hideListOnClick() {\r\n this.isOpen = false;\r\n document.removeEventListener('click', this.hideListOnClick);\r\n },\r\n openList() {\r\n this.isOpen = true;\r\n setTimeout(() => document.addEventListener('click', this.hideListOnClick));\r\n },\r\n selectCompany(company, event) {\r\n // On click of item, the event is propogating to the input. Which is keeping the list open.\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n this.isOpen = false;\r\n this.selectedCompany = company;\r\n\r\n this.viewValue = this.selectedCompany.Name;\r\n this.emitValue(this.selectedCompany.Name, true);\r\n this.$emit('company-updated', this.selectedCompany);\r\n },\r\n setManuallyEnteredCompany(companyName) {\r\n if (this.value != companyName) {\r\n this.selectCompany({\r\n Id: companyName,\r\n Name: companyName,\r\n Title: companyName,\r\n });\r\n }\r\n },\r\n inputClicked() {\r\n if (this.companyList.length) {\r\n this.openList();\r\n }\r\n },\r\n highlightText(text, fragment) {\r\n if (text) {\r\n const regex = new RegExp(fragment, 'gi');\r\n return text.replace(regex, function (str) { return '' + str + '' });\r\n }\r\n else {\r\n return \"\";\r\n }\r\n },\r\n\r\n isActive(index) {\r\n return index === this.selectedCompanyIndex;\r\n },\r\n selectIndex(index) {\r\n this.selectedCompanyIndex = index;\r\n },\r\n arrowKeyMapper(event) {\r\n if (!this.isOpen) return\r\n switch (event.keyCode) {\r\n case 40: //arrow down\r\n if (this.selectedCompanyIndex === null) {\r\n this.selectedCompanyIndex = 0;\r\n } else if (this.selectedCompanyIndex < this.companyList.length - 1) {\r\n this.selectedCompanyIndex++;\r\n }\r\n break;\r\n case 38: //arrow up\r\n if (this.selectedCompanyIndex === null) {\r\n this.selectedCompanyIndex = this.companyList.length - 1;\r\n } else if (this.selectedCompanyIndex > 0) {\r\n this.selectedCompanyIndex--;\r\n }\r\n break;\r\n case 13: // Enter\r\n this.selectCompany(this.companyList[this.selectedCompanyIndex]);\r\n event.preventDefault();\r\n break;\r\n }\r\n if (this.selectedCompanyIndex !== null) {\r\n setTimeout(() => {\r\n const activeElement = this.$refs.list.querySelector('li.active');\r\n if (activeElement) {\r\n this.$refs.list.scrollTop = activeElement.offsetTop;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n})","import Vue from 'vue';\r\nimport expandAndCollapse from '@Shared/mixins/expand-and-collapse';\r\n\r\nVue.component('coverage-group', {\r\n mixins: [ expandAndCollapse ],\r\n\r\n props: {\r\n storeName: String,\r\n coverageGroupRequestModel: Object,\r\n coverageGroupOnloading: Boolean,\r\n coverageSteps: Number,\r\n isDeductible: {\r\n type: Boolean,\r\n default: false\r\n },\r\n isDcpd: {\r\n type: Boolean,\r\n default: false\r\n },\r\n allDeductibleCoveragesSelectedLightboxID: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n\r\n data() {\r\n return {\r\n groupModel: this.coverageGroupRequestModel,\r\n showGroup: false,\r\n isCollapseOpen: false\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n if (this.storeName == '') return this.$parent.Model;\r\n return this.$store.state[this.storeName].model;\r\n },\r\n coveragesSteps() {\r\n return this.$store.state['coverage-steps'].coverageStepsCount;\r\n },\r\n iconClass() {\r\n return this.isCollapseOpen ? 'icon-collapse' : 'icon-expand';\r\n },\r\n ariaControlsID() {\r\n return `coverage-${this._uid}`;\r\n }\r\n },\r\n\r\n mounted() {\r\n if (this.isDeductible) {\r\n this.$eventBus.$on('coverageItem:deductibleSelected', this.handleDeductibleCoverageChange);\r\n }\r\n\r\n const vm = this;\r\n if (vm.coverageGroupOnloading) {\r\n vm.calculateGroupTotal();\r\n }\r\n\r\n vm.$root.$on('Broadcast::PremiumCalculated', () => {\r\n vm.calculateGroupTotal();\r\n });\r\n vm.$root.$on('Broadcast::CoverageToggled', () => {\r\n vm.calculateGroupTotal();\r\n });\r\n vm.$root.$on('Broadcast::DCPDChecked', () => {\r\n vm.calculateGroupTotal();\r\n });\r\n\r\n const coverageGroups = document.querySelectorAll(\".o-coverageGroup\");\r\n coverageGroups.forEach(function (coverageGroup) {\r\n const collapsedGroup = coverageGroup.querySelector(\".o-coverageGroup__title.collapsed\");\r\n if (collapsedGroup) {\r\n const collapsedBoxes = coverageGroup.querySelectorAll(\".m-coverageList\");\r\n collapsedBoxes.forEach(function (collapsedBox) {\r\n const clickableElements = collapsedBox.querySelectorAll('a, button, input[type=\"button\"], input[type=\"checkbox\"]');\r\n clickableElements.forEach(function (element) {\r\n element.setAttribute(\"tabindex\", -1);\r\n });\r\n });\r\n }\r\n \r\n coverageGroup.addEventListener(\"click\", vm.handleCollapsedGroupFocus);\r\n coverageGroup.addEventListener(\"keydown\", vm.handleCollapsedGroupFocus);\r\n });\r\n\r\n },\r\n\r\n beforeDestroy() {\r\n if (this.isDeductible) {\r\n this.$eventBus.$off('coverageItem:deductibleSelected', this.handleDeductibleCoverageChange);\r\n }\r\n },\r\n\r\n methods: {\r\n calculateGroupTotal: function () {\r\n let totalPremium = 0;\r\n let totalPremiumWithoutTax = 0;\r\n let totalPremiumPerMonth = 0;\r\n let totalPremiumPerYear = 0;\r\n let totalPremiumWithoutTaxPerMonth = 0;\r\n let totalPremiumWithoutTaxPerYear = 0;\r\n this.groupModel.Coverages.forEach((coverage) => {\r\n if ((coverage.IsSelected && !coverage.IsDisabled) || (coverage.CoverageCode === \"DCPD2\" && coverage.IsSelected)) {\r\n totalPremium += coverage.Premium;\r\n totalPremiumWithoutTax += coverage.PremiumWithoutTax;\r\n totalPremiumPerMonth += coverage.PremiumPerMonth;\r\n totalPremiumPerYear += coverage.PremiumPerYear;\r\n totalPremiumWithoutTaxPerMonth += coverage.PremiumWithoutTaxPerMonth;\r\n totalPremiumWithoutTaxPerYear += coverage.PremiumWithoutTaxPerYear;\r\n }\r\n });\r\n\r\n this.groupModel = Object.assign({}, this.groupModel, {\r\n Premium: totalPremium,\r\n PremiumPerMonth: totalPremiumPerMonth,\r\n PremiumPerYear: totalPremiumPerYear,\r\n PremiumWithoutTax: totalPremiumWithoutTax,\r\n PremiumWithoutTaxPerMonth: totalPremiumWithoutTaxPerMonth,\r\n PremiumWithoutTaxPerYear: totalPremiumWithoutTaxPerYear\r\n });\r\n },\r\n handleCollapseOpen() {\r\n this.isCollapseOpen = true;\r\n },\r\n handleCollapseClose() {\r\n this.isCollapseOpen = false;\r\n },\r\n toggleCollapse() {\r\n this.isCollapseOpen = !this.isCollapseOpen;\r\n },\r\n handleDeductibleCoverageChange() {\r\n const areAllDeductiblesSelected = this.coverageGroupRequestModel.Coverages.every(coverage => coverage.IsSelected);\r\n\r\n if (areAllDeductiblesSelected) {\r\n this.$globalModal.show(this.allDeductibleCoveragesSelectedLightboxID);\r\n }\r\n },\r\n handleCollapsedGroupFocus(event) {\r\n if (event.type === \"click\" || (event.type === \"keydown\" && (event.key === \" \" || event.key === \"Enter\"))) {\r\n if (event.target.classList.contains(\"o-coverageGroup\") || event.target.closest(\".o-coverageGroup\")) {\r\n const coverageList = event.currentTarget.querySelector(\".m-coverageList\");\r\n if (coverageList) {\r\n const focusableElements = coverageList.querySelectorAll('a, button, input[type=\"button\"], input[type=\"checkbox\"]');\r\n focusableElements.forEach(function (element) {\r\n if (element.getAttribute(\"tabindex\") === \"-1\") {\r\n element.removeAttribute(\"tabindex\");\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n \r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport axios from 'axios';\r\nimport api from \"../../auto/mixins/api\";\r\nimport coveragesUtils from '../mixins/coverages-utils';\r\nimport sharedUtils from \"@Shared/mixins/shared-utils\";\r\nimport GoogleAnalytics from '@Shared/utils/GoogleAnalytics';\r\nimport { IS_DEV } from '@Shared/settings';\r\n\r\nVue.component('coverage-item', {\r\n mixins: [coveragesUtils, api], \r\n inject: [\"$validator\"],\r\n props: {\r\n storeName: String,\r\n coverageModel: Object,\r\n isDeductible: Boolean,\r\n maxDeductibleAmount: Number,\r\n deductibleCoveragesCodes: String,\r\n disableWhenSelected: String,\r\n disableWhenOneUnchecked: String,\r\n disableWhenAllUnchecked: String,\r\n dcpdInfoPopup: String,\r\n isDcpd: {\r\n type: Boolean,\r\n default: false\r\n },\r\n optOutDeductibleLightboxId: String,\r\n\r\n /**\r\n * When false, the coverage item is no longer \"covered\" by Onlia. IsCoverageNotSupported will then be true,\r\n * which will be used by the backend.\r\n */\r\n isCoverageSupported: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n\r\n data() {\r\n return {\r\n limitAmountData: undefined\r\n }\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n currentCoverage() {\r\n const currentCoverageModel = this.coverageModel;\r\n if (!currentCoverageModel.DisablingRules) {\r\n Vue.set(currentCoverageModel, 'DisablingRules', {});\r\n }\r\n return currentCoverageModel;\r\n },\r\n deductibleCoveragesCode() {\r\n return this.deductibleCoveragesCodes.split(',');\r\n },\r\n coveragesSteps() {\r\n return this.$store.state['coverage-steps'].coverageStepsCount;\r\n },\r\n allCoverages() {\r\n const oAllCoverage = [];\r\n this.Model.CoverageGroups.forEach((coverageGroup) => {\r\n coverageGroup.Coverages.forEach((coverage) => {\r\n this.$set(oAllCoverage, oAllCoverage.length, coverage);\r\n });\r\n });\r\n return oAllCoverage;\r\n },\r\n },\r\n watch: {\r\n \"currentCoverage.IsDisabled\": function (newVal) {\r\n if (this.currentCoverage.CoverageCode === \"DCPD2\") {\r\n const coverageTitle = document.querySelector('[for=\"Model.CoverageGroups[0].Coverages[0]\"]');\r\n if (!!newVal){\r\n Vue.set(this.currentCoverage, \"IsSelected\", true);\r\n this.$root.$emit('Broadcast::DCPDChecked');\r\n coverageTitle && coverageTitle.classList.add(\"--linkEnabled\");\r\n } else {\r\n coverageTitle && coverageTitle.classList.remove(\"--linkEnabled\");\r\n }\r\n }\r\n },\r\n \"currentCoverage.IsSelected\": function (newVal) {\r\n if (this.currentCoverage.CoverageCode === \"DCPD2\" && !!newVal) {\r\n Vue.set(this.Model, \"IsOptedOutOfDCPD\", false);\r\n Vue.set(this.currentCoverage, \"HasChange\", true);\r\n const coverageByCode = this.getCoverageByCode(this.allCoverages, \"DCPD\");\r\n coverageByCode.HasChange = true;\r\n this.updateDCPDCoverage();\r\n }\r\n },\r\n },\r\n\r\n created() {\r\n this._isCoverageInitiallySelected = this.coverageModel.IsSelected;\r\n },\r\n mounted() {\r\n const vm = this;\r\n vm.registerOptOutModalAcceptHandler();\r\n vm.registerOptOutModalCloseHandler();\r\n vm.registerOptOutModalCancelHandler();\r\n \r\n if (!vm.isDeductible) {\r\n vm.updateRelatedCoverageRules(\r\n vm.disableWhenSelected,\r\n vm.currentCoverage.IsSelected,\r\n vm.currentCoverage.CoverageCode\r\n );\r\n }\r\n else {\r\n vm.updateDeductible();\r\n }\r\n\r\n if (!this.isCoverageSupported) {\r\n this.initUnsupportedCoverage();\r\n }\r\n else {\r\n this._isCoverageSupportedUnwatcher = this.$watch('isCoverageSupported', this.handleIsCoverageSupportedChange);\r\n }\r\n\r\n vm.$root.$on('Broadcast::PremiumCalculated', () => {\r\n this.limitAmountData = this.coverageModel.LimitAmount;\r\n })\r\n },\r\n beforeDestroy() {\r\n this.unwatchCoverageIsSelected();\r\n this.unwatchIsCoverageSupported();\r\n },\r\n\r\n methods: {\r\n updateRelatedCoverageRules: function (coverageCodes, isDisabled, coverageCode) {\r\n const vm = this;\r\n\r\n if (coverageCodes) {\r\n const coveragesToDisable = coverageCodes.split(',');\r\n if (coveragesToDisable && coveragesToDisable.length > 0) {\r\n let coverageByCode = {};\r\n\r\n coveragesToDisable.forEach((coverageToDisable) => {\r\n coverageByCode = vm.getCoverageByCode(vm.allCoverages, coverageToDisable);\r\n if (coverageByCode && !coverageByCode.IsDisabledByService && !coverageByCode.IsDisabledInSitecore) {\r\n vm.coverageSetDisabledRequest(coverageByCode, isDisabled, coverageCode);\r\n }\r\n else {\r\n vm.coverageSetIsDisabledByRuleRequest(coverageByCode, isDisabled, coverageCode);\r\n }\r\n\r\n vm.allCoverages.forEach((coverage) => {\r\n if (!!coverage.DisablingRules && coverage.DisablingRules[coverageToDisable] != undefined && !!coverageByCode) {\r\n vm.coverageSetDisabledRequest(coverage, coverageByCode.IsDisabled, coverageToDisable);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n },\r\n populateUnavailableDeductibles: function (limitAmount) {\r\n if (this.Model.IsPolicyChange) {\r\n const maximumDeductible = this.maxDeductibleAmount;\r\n if (limitAmount > maximumDeductible) {\r\n var deductibleDropdown = Object.values(this.dropdownOptions)[0];\r\n var isAdded = deductibleDropdown.some(deductible => deductible === String(limitAmount));\r\n if (!isAdded) {\r\n deductibleDropdown.push({ t: `$${limitAmount}`, v: `${String(limitAmount)}` });\r\n } \r\n }\r\n }\r\n },\r\n \r\n updateDeductible: function () {\r\n const vm = this;\r\n const coverage = vm.currentCoverage;\r\n let isDisabledByService = coverage.IsDisabledByService || coverage.IsDisabledInSitecore;\r\n let isSelected = coverage.IsSelected;\r\n let oDeductibleCoverage;\r\n\r\n vm.populateUnavailableDeductibles(coverage.LimitAmount);\r\n vm.deductibleCoveragesCode.forEach((n, index) => {\r\n if (n !== coverage.CoverageCode) {\r\n oDeductibleCoverage = vm.getCoverageByCode(vm.allCoverages, n);\r\n if (oDeductibleCoverage) {\r\n isDisabledByService = isDisabledByService || oDeductibleCoverage.IsDisabledByService || oDeductibleCoverage.IsDisabledInSitecore;\r\n isSelected = isSelected && oDeductibleCoverage.IsSelected;\r\n }\r\n }\r\n });\r\n const deductibleMessageVisible = !isSelected && !isDisabledByService;\r\n const allDeductiblesDisabled = !isSelected;\r\n\r\n vm.updateRelatedCoverageRules(vm.disableWhenOneUnchecked, deductibleMessageVisible, 'Deductibles');\r\n vm.updateRelatedCoverageRules(vm.disableWhenAllUnchecked, allDeductiblesDisabled, 'Deductibles');\r\n },\r\n\r\n toggleCoverageSelection: function (modalId, customProperty, customPropertyName) {\r\n const vm = this;\r\n const coverage = vm.currentCoverage;\r\n if (vm.isDeductible) {\r\n vm.updateDeductible();\r\n vm.updateRelatedCoverageRules(vm.disableWhenSelected, coverage.IsSelected, coverage.CoverageCode);\r\n vm.Model.TotalPremiumBlock = 0;\r\n vm.Model.Payment.TotalPremium = 0;\r\n vm.$root.$emit('Broadcast::CoverageToggled', coverage);\r\n\r\n if (!coverage.IsSelected) {\r\n this.$globalModal.show(modalId);\r\n }\r\n else {\r\n !this.isDcpd && this.$eventBus.$emit('coverageItem:deductibleSelected');\r\n }\r\n }\r\n else {\r\n if (coverage.IsDisabled || coverage.IsMandatory) {\r\n return true;\r\n }\r\n\r\n vm.updateRelatedCoverageRules(vm.disableWhenSelected, coverage.IsSelected, coverage.CoverageCode);\r\n vm.Model.TotalPremiumBlock = 0;\r\n vm.Model.Payment.TotalPremium = 0;\r\n vm.$root.$emit('Broadcast::CoverageToggled', coverage);\r\n\r\n if (customProperty) {\r\n this.$globalModal.show(modalId);\r\n if (customPropertyName && customPropertyName != '') {\r\n Vue.set(vm.Model, customPropertyName, false);\r\n }\r\n }\r\n }\r\n },\r\n async updateDCPDCoverage() {\r\n try {\r\n const { data } = await axios.post(this.api.getCoverages, this.Model)\r\n if (data && data.Data) {\r\n const coverageByCode = this.getCoverageByCode(this.allCoverages, \"DCPD\");\r\n const responseCoverageByCode = this.getCoverageByCode(data.Data, \"DCPD\");\r\n if (responseCoverageByCode) {\r\n coverageByCode.PremiumPerMonth = responseCoverageByCode.PremiumPerMonth;\r\n coverageByCode.PremiumPerYear = responseCoverageByCode.PremiumPerYear;\r\n coverageByCode.PremiumWithoutTax = responseCoverageByCode.PremiumWithoutTax;\r\n coverageByCode.PremiumWithoutTaxPerMonth = responseCoverageByCode.PremiumWithoutTaxPerMonth;\r\n coverageByCode.PremiumWithoutTaxPerYear = responseCoverageByCode.PremiumWithoutTaxPerYear;\r\n coverageByCode.Premium = this.Model.PremiumFrequency == \"1\"? responseCoverageByCode.PremiumPerMonth : responseCoverageByCode.PremiumPerYear;\r\n }\r\n this.$root.$emit('Broadcast::DCPDChecked');\r\n }\r\n } catch (error) {\r\n (IS_DEV && console.error('updateDCPDCoverage error:', error));\r\n }\r\n },\r\n registerOptOutModalAcceptHandler() {\r\n const vm = this;\r\n this.$eventBus.$on(this.$globalModal.events.ok, ({ id }) => {\r\n if (vm.optOutDeductibleLightboxId === id) {\r\n Vue.set(this.Model, \"IsOptedOutOfDCPD\", true);\r\n this.Model.QuotationData.OptOutDCPD && Vue.set(this.Model.QuotationData, \"OptOutDCPD\", \"0\");\r\n this.Model.QuotationData.OptOutDCPDMyZone && Vue.set(this.Model.QuotationData, \"OptOutDCPDMyZone\", \"0\");\r\n Vue.set(this.currentCoverage, \"LimitAmount\", 0);\r\n Vue.set(this.currentCoverage, \"HasChange\", true);\r\n const coverageByCode = this.getCoverageByCode(this.allCoverages, \"DCPD\");\r\n coverageByCode.LimitAmount = 0;\r\n coverageByCode.HasChange = true;\r\n this.updateDCPDCoverage();\r\n };\r\n })\r\n },\r\n registerOptOutModalCloseHandler() {\r\n const vm = this;\r\n this.$eventBus.$on(this.$globalModal.events.close, ({ id }) => {\r\n if (vm.optOutDeductibleLightboxId === id) {\r\n vm.currentCoverage.IsSelected = true;\r\n }\r\n })\r\n },\r\n registerOptOutModalCancelHandler() {\r\n const vm = this;\r\n this.$eventBus.$on(this.$globalModal.events.hide, ({ id, trigger }) => {\r\n if (vm.optOutDeductibleLightboxId === id) {\r\n if (trigger === 'cancel') {\r\n vm.currentCoverage.IsSelected = true;\r\n vm.$root.$emit('dynamic::modal::show', vm.dcpdInfoPopup);\r\n }\r\n else if(trigger === \"backdropClick\"){\r\n vm.currentCoverage.IsSelected = true;\r\n }\r\n }\r\n });\r\n },\r\n coverageSetDisabledRequest: function (coverage, isDisabled, sender) {\r\n const vm = this;\r\n\r\n if (coverage) {\r\n if (!coverage.DisablingRules) {\r\n Vue.set(coverage, 'DisablingRules', {});\r\n }\r\n Vue.set(coverage.DisablingRules, sender, isDisabled);\r\n\r\n if (coverage.IsDisabled != isDisabled) {\r\n const newDisabledState = vm.getDisabledState(coverage.DisablingRules);\r\n coverage.IsDisabledByRule = newDisabledState;\r\n if (coverage.IsDisabled != newDisabledState) {\r\n coverage.IsDisabled = newDisabledState;\r\n if (newDisabledState) {\r\n coverage.IsSelected = false;\r\n }\r\n else if (coverage.IsSelectedOrigin) {\r\n coverage.IsSelected = true;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n coverageSetIsDisabledByRuleRequest: function (coverage, isDisabled, sender) {\r\n const vm = this;\r\n\r\n if (coverage) {\r\n if (!coverage.DisablingRules) {\r\n Vue.set(coverage, 'DisablingRules', {});\r\n }\r\n Vue.set(coverage.DisablingRules, sender, isDisabled);\r\n\r\n const newDisabledState = vm.getDisabledState(coverage.DisablingRules);\r\n coverage.IsDisabledByRule = newDisabledState;\r\n }\r\n },\r\n getDisabledState: function (rules) {\r\n let result = false;\r\n Object.values(rules).forEach((isDisabled) => {\r\n result = result || isDisabled;\r\n });\r\n\r\n return result;\r\n },\r\n\r\n /**\r\n * Logic for handling unsupported coverage. A coverage is considered unsupported, if Onlia previously offered it,\r\n * but has now decided to remove it.\r\n */\r\n initUnsupportedCoverage() {\r\n // Used by frontend. This will still change when certain coverage checkboxes like: Collision coverage, Comprehensive coverage, are toggled.\r\n this.$set(this.coverageModel, 'IsSelected', false);\r\n\r\n // Used by backend only.\r\n this.$set(this.coverageModel, 'IsCoverageNotSupported', true);\r\n\r\n this.$el.parentElement.setAttribute('style', 'display: none;');\r\n\r\n // If the policy already has the coverage, we have to show/hide it. Only once they have submitted the change\r\n // that removes the coverage, will we permanently hide it.\r\n if (this.Model.IsPolicyChange && this._isCoverageInitiallySelected) {\r\n this.watchCoverageIsSelected();\r\n }\r\n },\r\n\r\n /**\r\n * Watcher logic will only run when:\r\n * 1. An existing policy is being changed\r\n * 2. The current coverage-item is part of the policy.\r\n * 3. The current coverage-item for the policy is no longer being offered by Onlia\r\n */\r\n watchCoverageIsSelected() {\r\n this.unwatchCoverageIsSelected();\r\n\r\n this._isSelectedUnwatcher = this.$watch('coverageModel.IsSelected', (isSelected) => {\r\n this.$set(this.coverageModel, 'IsCoverageNotSupported', !isSelected);\r\n\r\n if (isSelected) {\r\n this.$el.parentElement.removeAttribute('style');\r\n }\r\n else {\r\n this.$el.parentElement.setAttribute('style', 'display: none;');\r\n }\r\n });\r\n },\r\n unwatchCoverageIsSelected() {\r\n if (this._isSelectedUnwatcher) {\r\n this._isSelectedUnwatcher();\r\n this._isSelectedUnwatcher = null;\r\n }\r\n },\r\n handleIsCoverageSupportedChange(isCovered) {\r\n if (!isCovered) {\r\n this.initUnsupportedCoverage();\r\n this.unwatchIsCoverageSupported();\r\n }\r\n },\r\n unwatchIsCoverageSupported() {\r\n if (this._isCoverageSupportedUnwatcher) {\r\n this._isCoverageSupportedUnwatcher();\r\n this._isCoverageSupportedUnwatcher = null;\r\n }\r\n },\r\n\r\n isLimitPercent() {\r\n const limit = this.limitAmountData || this.coverageModel.LimitAmount;\r\n return limit <= 100;\r\n },\r\n\r\n calculateRelativeCost(initialCost) {\r\n const limit = this.limitAmountData || this.coverageModel.LimitAmount;\r\n\r\n return (initialCost && limit)\r\n ? this.formatCalculatedAmount(parseInt(limit) * 0.01 * initialCost)\r\n : 0;\r\n },\r\n\r\n formatCalculatedAmount(amount){\r\n return sharedUtils.methods.formatCurrency(Math.round(amount), \"decimal\");\r\n },\r\n\r\n trackLabelButtons(labelname) {\r\n GoogleAnalytics.push({\r\n event: \"click_button\",\r\n buttonId: \"label_button\",\r\n buttonName: \"textwrap\", \r\n buttonText: labelname,\r\n })\r\n },\r\n\r\n }\r\n});\r\n","import Vue from 'vue';\r\n\r\nVue.component('coverage-stack', {\r\n props: {\r\n storeName: String,\r\n coverageStackName: String,\r\n coverageStackId: String\r\n },\r\n\r\n inject: ['$validator'],\r\n\r\n computed: {\r\n Model() {\r\n const model = this.$store.state[this.storeName].model;\r\n if (!model.TotalPremiumBlock) {\r\n Vue.set(model, 'TotalPremiumBlock', 0);\r\n }\r\n if (!model.QuotationData) {\r\n Vue.set(model, 'QuotationData', {});\r\n }\r\n return model;\r\n },\r\n coverageStacks() {\r\n return this.$store.state[this.$options._componentTag].coverageStacks;\r\n }\r\n },\r\n\r\n created() {\r\n const storeName = this.$options._componentTag;\r\n const vm = this;\r\n\r\n this.$store.registerModule(storeName, {\r\n namespaced: true,\r\n\r\n state: {\r\n model: this.Model,\r\n coverageStacks: []\r\n },\r\n\r\n mutations: {\r\n mutate(state, payload) {\r\n state.model = payload;\r\n },\r\n setCoverageStack(state, coverageStack) {\r\n Vue.set(state.coverageStacks, coverageStack.Id, coverageStack);\r\n }\r\n }\r\n });\r\n\r\n vm.$root.$on('validate-all', () => {\r\n vm.$validator.validateAll();\r\n vm.$root.$emit('child-validated', vm.$validator.errors);\r\n });\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n\r\n vm.$root.$on('Broadcast::PremiumCalculatedStack', () => {\r\n vm.calculateStackTotal();\r\n });\r\n vm.$root.$on('Broadcast::CoverageToggled', () => {\r\n vm.calculateStackTotal();\r\n });\r\n },\r\n\r\n methods: {\r\n calculateStackTotal: function () {\r\n const vm = this;\r\n const IsTaxesIncluded = vm.Model.QuotationData.ApplicableTaxesIncluded || vm.Model.QuotationData.ApplicableTaxesIncluded == undefined;\r\n let totalPremium = 0;\r\n let paymentTotalPremium = 0;\r\n\r\n vm.$children.forEach((group) => {\r\n if (group.groupModel) {\r\n totalPremium += IsTaxesIncluded ? group.groupModel.Premium : group.groupModel.PremiumWithoutTax;\r\n paymentTotalPremium += group.groupModel.Premium;\r\n }\r\n });\r\n\r\n vm.$store.commit(`${vm.$options._componentTag}/setCoverageStack`, { Id: vm.coverageStackId, Name: vm.coverageStackName, Premium: totalPremium });\r\n\r\n totalPremium += vm.Model.TotalPremiumBlock;\r\n paymentTotalPremium += vm.Model.Payment.TotalPremium;\r\n\r\n Vue.set(vm.Model, 'TotalPremiumBlock', totalPremium);\r\n\r\n this.Model.Payment = {\r\n ...this.Model.Payment,\r\n TotalPremium: paymentTotalPremium\r\n };\r\n }\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport coveragesUtils from '../mixins/coverages-utils';\r\nimport { HEADER_NAV } from '@Shared/settings';\r\nimport { scrollPage } from '@Shared/utils/scroll-page';\r\n\r\nVue.component('coverage-steps', {\r\n mixins: [ coveragesUtils ],\r\n\r\n props: {\r\n storeName: String,\r\n coverageSteps: Number,\r\n api: Object,\r\n beforeSubmitQueue: Function\r\n },\r\n\r\n data() {\r\n return {\r\n collapseCoverageSteps: [],\r\n coverageOriginDictionary: []\r\n };\r\n },\r\n\r\n computed: {\r\n Model: function () {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n isRetiredShown() {\r\n return this.Model.Drivers\r\n .filter(d => d.IsInRetirementAge)\r\n .map(d => d.IsRetired)\r\n .every(val => !val);\r\n },\r\n headerHeight: function () {\r\n const stepIndicator = document.getElementsByClassName('step-indicator')[0];\r\n return HEADER_NAV.topNavHeight + (stepIndicator ? stepIndicator.getBoundingClientRect().height : 0);\r\n }\r\n },\r\n\r\n created() {\r\n const storeName = this.$options._componentTag;\r\n const vm = this;\r\n\r\n this.$store.registerModule(storeName, {\r\n namespaced: true,\r\n\r\n state: {\r\n model: this.Model,\r\n coverageStepsCount: this.coverageSteps\r\n },\r\n\r\n mutations: {\r\n mutate(state, payload) {\r\n state.model = payload;\r\n },\r\n setCoverageStepsCount(state, coverageStepsCount) {\r\n state.coverageStepsCount = coverageStepsCount;\r\n }\r\n }\r\n });\r\n\r\n vm.$root.$on('Broadcast::ActivateNextCoverageStep', () => {\r\n vm.activateNextStep();\r\n });\r\n\r\n vm.$root.$on('child-validated', (errors) => {\r\n errors.items.forEach((error) => {\r\n this.$validator.errors.items.push(error);\r\n });\r\n });\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n vm.$set(vm.collapseCoverageSteps, vm.Model.ActiveCoverageStep, true);\r\n\r\n //init, CalculatePremium\r\n Vue.set(vm.Model, 'PremiumSuccess', false); //disable Continue button\r\n vm.getOriginProperties(vm);\r\n vm.fetchCoverages(vm, vm.api)\r\n .then((result) => {\r\n vm.$root.$emit('Broadcast::PremiumCalculated');\r\n vm.Model.TotalPremiumBlock = 0;\r\n vm.Model.Payment.TotalPremium = 0;\r\n vm.$root.$emit('Broadcast::PremiumCalculatedStack');\r\n });\r\n\r\n vm.$root.$on('Broadcast::CalculatePremium', (hasChange, relatedCoverageCode) => {\r\n Vue.set(vm.Model, 'PremiumSuccess', false); //disable Continue button\r\n\r\n vm.fetchCoverages(vm, vm.api, hasChange, relatedCoverageCode)\r\n .then((result) => {\r\n vm.$root.$emit('Broadcast::PremiumCalculated');\r\n vm.Model.TotalPremiumBlock = 0;\r\n vm.Model.Payment.TotalPremium = 0;\r\n vm.$root.$emit('Broadcast::PremiumCalculatedStack');\r\n });\r\n });\r\n\r\n vm.beforeSubmitQueue((callback) => {\r\n vm.$root.$emit('validate-all');\r\n vm.$validator.validate().then((valid) => {\r\n if (vm.$validator.errors.items.length > 0) {\r\n Vue.prototype.handleInvalidForm(vm);\r\n }\r\n else if (valid) {\r\n vm.$root.$emit('Broadcast::CleanUpInvisibleRelatedField');\r\n setTimeout(() => {\r\n callback();\r\n });\r\n }\r\n else {\r\n Vue.prototype.handleInvalidForm(vm);\r\n }\r\n });\r\n });\r\n },\r\n\r\n methods: {\r\n activateStep: function (stepIndex) {\r\n this.collapseCoverageSteps = [];\r\n this.$set(this.Model, 'ActiveCoverageStep', stepIndex);\r\n this.$set(this.collapseCoverageSteps, stepIndex, true);\r\n\r\n //scroll back to top of the current panel step\r\n const prevStep = stepIndex > 0 ? (stepIndex - 1) : stepIndex;\r\n\r\n const panelStep = document.getElementById(`coverageStep_${prevStep}`);\r\n if (panelStep) {\r\n const scrollTopNew = panelStep.offsetTop - this.headerHeight - 20;\r\n scrollPage(scrollTopNew);\r\n }\r\n },\r\n\r\n activateNextStep: function () {\r\n const vm = this;\r\n //Do not collapse last coverage tab/step\r\n if (vm.Model.ActiveCoverageStep === (vm.coverageSteps - 1)) return false;\r\n\r\n Vue.set(vm.Model, 'ActiveCoverageStep', vm.Model.ActiveCoverageStep + 1);\r\n Vue.nextTick(() => {\r\n vm.activateStep(vm.Model.ActiveCoverageStep);\r\n });\r\n },\r\n\r\n getCssClass: function (stepIndex) {\r\n if (stepIndex == this.Model.ActiveCoverageStep) {\r\n return 'panel-step-active';\r\n }\r\n else if (this.areLessThanActiveCoverageStep(stepIndex)) {\r\n return 'panel-step-complete';\r\n }\r\n },\r\n\r\n areLessThanActiveCoverageStep: function (stepIndex) {\r\n if (stepIndex >= this.Model.ActiveCoverageStep) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport isSameDay from 'date-fns/isSameDay';\r\n\r\nVue.component('coverages-start-date', {\r\n inject: ['$validator'],\r\n\r\n props: {\r\n storeName: String,\r\n startDate: String\r\n },\r\n\r\n computed: {\r\n hasErrors: function () {\r\n return this.errors.items.length > 0;\r\n }\r\n },\r\n\r\n mounted() {\r\n this.currentEffectiveDate = this.startDate;\r\n\r\n this.$root.$on('Broadcast::EffectiveDateChanged', (value) => {\r\n this.onEffectiveDateChanged(value);\r\n });\r\n },\r\n\r\n beforeDestroy() {\r\n this.$root.$off('Broadcast::EffectiveDateChanged');\r\n },\r\n\r\n methods: {\r\n onItemChanged(event, params) {\r\n !!event && this.$root.$emit(event, params);\r\n },\r\n\r\n onEffectiveDateChanged(value) {\r\n const vm = this;\r\n\r\n if (vm.currentEffectiveDate && value && !isSameDay(new Date(value), new Date(vm.currentEffectiveDate))) {\r\n vm.currentEffectiveDate = value;\r\n vm.$validator.validate()\r\n .then((isFieldValid) => {\r\n if (isFieldValid && !vm.hasErrors) {\r\n vm.$root.$emit('Broadcast::CalculatePremium');\r\n }\r\n });\r\n }\r\n }\r\n }\r\n})\r\n","import Vue from \"vue\";\r\n\r\nVue.component('final-step', {\r\n props: {\r\n model: Object,\r\n baseUrl: String,\r\n ecommerceTracker: String\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.model;\r\n }\r\n },\r\n\r\n mounted() {\r\n this.$root.$emit(\"Broadcast::UpdateShoppingBasketCount\", 0);\r\n\r\n var trackerObjs = JSON.parse(this.ecommerceTracker);\r\n if (!!this.ecommerceTracker && !!trackerObjs && trackerObjs.length > 0) {\r\n let dataLayer = window.dataLayer || [];\r\n for (var obj of trackerObjs) {\r\n if (obj) {\r\n dataLayer.push(obj);\r\n }\r\n }\r\n if (!!trackerObjs[0] && !!trackerObjs[0][\"ecommerce\"]) {\r\n this.trackEndFunnel(trackerObjs[0][\"ecommerce\"][\"purchase\"][\"products\"]);\r\n }\r\n }\r\n },\r\n methods: {\r\n trackEndFunnel(products) {\r\n if (!!products) {\r\n for (var product of products) {\r\n if (product) {\r\n dataLayer.push({\r\n \"event\": \"Funnel\",\r\n \"category\": \"Funnel\",\r\n \"action\": product[\"category\"] + \" Quote - funnel\",\r\n \"label\": \"Flow completion\"\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n})","import Vue from \"vue\";\r\nVue.component(\"ga-ecommerce-checkout\", {\r\n props: {\r\n checkoutStep: String,\r\n funnelProducts: String,\r\n beforeSubmitQueue: Function\r\n },\r\n data() {\r\n return {\r\n submitted: false\r\n }\r\n },\r\n render(h) {\r\n return h();\r\n },\r\n mounted() {\r\n let vm = this;\r\n if (!!vm.beforeSubmitQueue) {\r\n vm.beforeSubmitQueue((callback) => {\r\n vm.ecommerceTrack();\r\n\r\n Vue.nextTick(() => {\r\n callback();\r\n });\r\n });\r\n }\r\n },\r\n methods: {\r\n ecommerceTrack() {\r\n const vm = this;\r\n\r\n if (!!vm.funnelProducts && vm.funnelProducts.length > 0 && !vm.submitted) {\r\n let dataLayer = window.dataLayer || [];\r\n let ecommerceObj = vm.getEcommerceObject(vm.funnelProducts);\r\n dataLayer.push(ecommerceObj); \r\n }\r\n return true;\r\n },\r\n getEcommerceObject(products) {\r\n const vm = this;\r\n let actionField = {\r\n \"step\": vm.checkoutStep|0\r\n };\r\n\r\n let paymentMethod = vm.$parent.Model.Payment.PaymentMethod;\r\n if (vm.checkoutStep == '5' && !!paymentMethod && paymentMethod.length) {\r\n actionField[\"option\"] = paymentMethod;\r\n vm.submitted = true;\r\n }\r\n let eventName = \"\"; // Event name based on checkoutStep\r\n switch (vm.checkoutStep) {\r\n case '1':\r\n eventName = \"begin_checkout\";\r\n break;\r\n case '2':\r\n eventName = \"add_final_details\";\r\n break;\r\n case '3':\r\n eventName = \"create_account\";\r\n break;\r\n case '4':\r\n eventName = \"review_policy_summary\";\r\n break;\r\n case '5':\r\n eventName = \"add_payment_info\";\r\n break;\r\n default:\r\n eventName = \"checkout\";\r\n }\r\n \r\n let ecommerceObj = {\r\n \"event\": eventName,\r\n \"ecommerce\": {\r\n \"checkout\": {\r\n \"actionField\": actionField,\r\n \"products\": JSON.parse(products)\r\n }\r\n }\r\n };\r\n\r\n return ecommerceObj;\r\n }\r\n }\r\n});","import Vue from \"vue\";\r\nimport ecommerceTracking from \"../mixins/ecommerce-tracking\"\r\nVue.component(\"ga-ecommerce-on-submit\", {\r\n props: {\r\n eventName: String,\r\n funnelProduct: Object,\r\n beforeSubmitQueue: Function\r\n },\r\n mixins: [ecommerceTracking], \r\n render(h) {\r\n return h();\r\n },\r\n mounted() {\r\n if (!!this.beforeSubmitQueue) {\r\n this.beforeSubmitQueue((callback) => {\r\n this.ecommerceTrack(this.funnelProduct, this.eventName);\r\n Vue.nextTick(() => {\r\n callback();\r\n });\r\n });\r\n }\r\n },\r\n});","import Vue from 'vue';\r\n\r\nVue.component('ga-track-virtual-page', {\r\n props: {\r\n name: String,\r\n baseUrl: String,\r\n category: String\r\n },\r\n computed: {\r\n virtualPageURL() {\r\n if (!this.name || !this.baseUrl) return null;\r\n\r\n return `${this.baseUrl}${this.name.toLowerCase().split(' ').join('_')}`;\r\n }\r\n },\r\n created() {\r\n if (this.virtualPageURL) {\r\n this.$store.commit('setIsVirtualPage', true);\r\n this.$store.commit('setVirtualPageURL', this.virtualPageURL);\r\n }\r\n },\r\n mounted() {\r\n if (this.virtualPageURL) {\r\n const dataLayer = window.dataLayer || [];\r\n const virtualPageObj = {\r\n event: 'VirtualPage',\r\n pageTitle: this.name,\r\n pageUrl: this.virtualPageURL\r\n };\r\n\r\n if (this.category) {\r\n virtualPageObj[ 'category' ] = this.category;\r\n }\r\n dataLayer.push(virtualPageObj);\r\n\r\n window.ir.vpUrl = this.virtualPageURL;\r\n }\r\n },\r\n beforeDestroy() {\r\n if (this.virtualPageURL) {\r\n this.$store.commit('setIsVirtualPage', false);\r\n this.$store.commit('setVirtualPageURL', '');\r\n }\r\n },\r\n render() {\r\n return null;\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport { mergeClasses } from '@Shared/utils/vue-component-helpers';\r\nimport GoogleAnalytics from '@Shared/utils/GoogleAnalytics';\r\nimport { loadGSAP } from '@Shared/utils/gsap-utils';\r\n\r\nconst GTM_ATTRIBUTES = {\r\n saveQuote: {\r\n event: 'gtm.click',\r\n category: 'User Interaction',\r\n action: 'Component Button Email'\r\n }\r\n};\r\nconst BACKGROUND_EL_CLASS = 'm-genericPillButton__background';\r\n\r\nVue.component('generic-pill-button', {\r\n functional: true,\r\n props: {\r\n /**\r\n * Root element HTML tag. Default is 'a'.\r\n */\r\n tag: {\r\n type: String,\r\n validator(tag) {\r\n return /^(a|button)$/.test(tag);\r\n },\r\n default: 'a'\r\n },\r\n\r\n /**\r\n * Button label. Slots can be used instead of passing in a value.\r\n */\r\n label: {\r\n type: String,\r\n default: ''\r\n },\r\n\r\n /**\r\n * Button disabled state.\r\n */\r\n disabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n\r\n /**\r\n * Call Google analytics tracking.\r\n */\r\n trackGA: {\r\n type: Boolean,\r\n default: false\r\n },\r\n analyticsType: {\r\n type: String,\r\n validator(type) {\r\n return (!type || /^(saveQuote)$/.test(type));\r\n },\r\n default: ''\r\n }\r\n },\r\n render(createElement, context) {\r\n const {\r\n data: {\r\n attrs,\r\n ...rest\r\n },\r\n listeners: { click: onClick },\r\n props: {\r\n tag,\r\n disabled,\r\n label,\r\n trackGA,\r\n analyticsType\r\n },\r\n children = []\r\n } = context;\r\n\r\n const outlineEl = createElement('span', {\r\n class: 'm-genericPillButton__outline',\r\n attrs: { tabindex: -1 }\r\n });\r\n\r\n const labelEl = createElement('span', {\r\n class: 'm-genericPillButton__label',\r\n attrs: { tabindex: -1 }\r\n }, [ label, ...children ]);\r\n\r\n const backgroundEl = createElement('span', {\r\n class: BACKGROUND_EL_CLASS,\r\n attrs: { tabindex: -1 }\r\n });\r\n const backgroundWrapperEL = createElement('span', {\r\n class: 'm-genericPillButton__backgroundWrapper',\r\n attrs: { tabindex: -1 }\r\n }, [ backgroundEl ]);\r\n\r\n const childElements = [\r\n outlineEl,\r\n labelEl,\r\n backgroundWrapperEL\r\n ];\r\n\r\n const data = {\r\n ...rest,\r\n attrs: {\r\n ...(attrs && attrs),\r\n\r\n // Disabled attribute will cause screen readers to miss the button. 'aria-disabled' is the more appropriate attribute.\r\n ...(disabled && {\r\n 'aria-disabled': 'true'\r\n })\r\n },\r\n class: [\r\n 'm-genericPillButton',\r\n {\r\n '-disabled': disabled\r\n },\r\n // Make sure class overrides come after component's\r\n ...mergeClasses(context)\r\n ],\r\n on: {\r\n ...context.data.on,\r\n click: async (event) => {\r\n const { currentTarget } = event;\r\n const background = currentTarget.getElementsByClassName(BACKGROUND_EL_CLASS);\r\n\r\n (onClick && onClick(event));\r\n\r\n if (trackGA) {\r\n const payload = {\r\n ...(GTM_ATTRIBUTES[analyticsType] || {}),\r\n label\r\n };\r\n GoogleAnalytics.push(payload);\r\n }\r\n\r\n (!window.gsap && await loadGSAP());\r\n\r\n gsap.fromTo(background, { scale: 0 }, {\r\n scale: 1.3,\r\n ease: 'power2.out',\r\n duration: 0.7,\r\n clearProps: true\r\n });\r\n }\r\n }\r\n };\r\n\r\n return createElement(tag, data, childElements);\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport api from \"../mixins/api\";\r\n\r\nVue.component('mortgage-company', {\r\n inject: ['$validator'],\r\n mixins: [api],\r\n props: {\r\n storeName: String,\r\n mortgageCompany: Object\r\n },\r\n\r\n data() {\r\n return {\r\n MortgageCompany: this.mortgageCompany\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n mounted() {\r\n if (!this.mortgageCompany.Name) {\r\n Vue.set(this.mortgageCompany, \"Name\", '');\r\n }\r\n\r\n if (!this.mortgageCompany.Address) {\r\n Vue.set(this.mortgageCompany, \"Address\", {});\r\n }\r\n }\r\n})\r\n","import Vue from 'vue';\r\nimport axios from 'axios';\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component('opcf-modal', {\r\n inject: ['$validator'],\r\n\r\n props: {\r\n apiObject: Object,\r\n storeName: String,\r\n modalId: String,\r\n model: Object,\r\n isLastStep: Boolean,\r\n optedOutPolicies: {\r\n type: Array,\r\n },\r\n cardId: String,\r\n infoId: String\r\n },\r\n\r\n data() {\r\n return {\r\n policies: this.optedOutPolicies,\r\n tableCreated: false,\r\n pathInfo: 'changed',\r\n api: this.apiObject\r\n };\r\n },\r\n\r\n mounted() {\r\n this.showOPCFafterInfoPopup();\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model.OPCF;\r\n },\r\n filteredPolicies() {\r\n return this.policies.filter(\r\n policy => policy.IsOptedOutOfDCPD == true && policy.Status !== 8\r\n );\r\n },\r\n isDisabled: function () {\r\n return !this.Model.IsAccepted;\r\n },\r\n },\r\n\r\n created() {\r\n this.$eventBus.$on('pipedaAccepted', this.generateDynamicTable);\r\n this.$eventBus.$on('myZoneDynamicTable', this.generateDynamicTable);\r\n //create the table again when going back to OPCF from DCPD popup\r\n this.$nextTick(() => {\r\n this.$eventBus.$on('generateTable', this.generateDynamicTable);\r\n });\r\n },\r\n\r\n beforeDestroy() {\r\n this.$eventBus.$off(this.$globalModal.events.hide, this.rejectOPCF);\r\n },\r\n methods: {\r\n\r\n acceptOPCF() {\r\n this.$globalModal.hide(this.modalId);\r\n },\r\n\r\n showInfoPopup() {\r\n this.$globalModal.show(this.infoId);\r\n },\r\n\r\n showOPCFafterInfoPopup() {\r\n const vm = this;\r\n vm.$eventBus.$on(vm.$globalModal.events.hide, ({ id, trigger }) => {\r\n if (vm.infoId == id && (trigger == 'cancel' || trigger == 'close')) {\r\n vm.$globalModal.show(vm.modalId);\r\n this.$eventBus.$emit('generateTable');\r\n }\r\n });\r\n },\r\n\r\n // Function to generate the dynamic table\r\n generateDynamicTable() {\r\n if (!this.tableCreated) {\r\n this.$nextTick(() => {\r\n var container = document.getElementById('dynamicTableContent');\r\n\r\n var table = document.createElement('table');\r\n table.className = 'm-opcf__selected-policies';\r\n\r\n var thead = document.createElement('thead');\r\n var headerRow = document.createElement('tr');\r\n var headers = ['Model Year', 'Trade Name(Make)', 'Vehicle Identification Number (VIN)'];\r\n\r\n headers.forEach(function (headerText) {\r\n var th = document.createElement('th');\r\n th.appendChild(document.createTextNode(headerText));\r\n headerRow.appendChild(th);\r\n });\r\n\r\n thead.appendChild(headerRow);\r\n table.appendChild(thead);\r\n\r\n var tbody = document.createElement('tbody');\r\n\r\n this.filteredPolicies.forEach(function (policy) {\r\n var row = document.createElement('tr');\r\n var cell1 = document.createElement('td');\r\n cell1.appendChild(document.createTextNode(policy.Car.Year));\r\n var cell2 = document.createElement('td');\r\n cell2.appendChild(document.createTextNode(policy.Car.Brand));\r\n var cell3 = document.createElement('td');\r\n cell3.appendChild(document.createTextNode(policy.Car.VehicleIdentificationNumber));\r\n\r\n row.appendChild(cell1);\r\n row.appendChild(cell2);\r\n row.appendChild(cell3);\r\n\r\n tbody.appendChild(row);\r\n });\r\n\r\n table.appendChild(tbody);\r\n container.appendChild(table);\r\n });\r\n this.tableCreated = true;\r\n }\r\n },\r\n\r\n rejectOPCF({ trigger, id }) {\r\n if (trigger === 'close' && id === 'OPCFLightbox') {\r\n this.Model.IsAccepted = false;\r\n }\r\n },\r\n\r\n navigateToCoverages(policyId) {\r\n if (policyId) {\r\n const vm = this;\r\n const selectedPolicy = vm.policies.find(policy => policy.InternalPolicyId === policyId.InternalPolicyId);\r\n if (selectedPolicy) {\r\n const isNewPolicy = selectedPolicy.IsNewPolicy;\r\n const updateParams = {\r\n //cardID for myZone is hardcoded. This needs improvement\r\n cardId: isNewPolicy ? this.cardId : \"{F12EDA5B-1388-48C9-A1D0-CC04E8CC215F}\",\r\n policyId: policyId.InternalPolicyId\r\n };\r\n if (vm.$store.state.shoppingBasketStore.model.IsAuthenticated == true && !isNewPolicy) {\r\n axios.post(vm.api.setCurrentPolicy, { policyId: updateParams.policyId, pathInfo: vm.pathInfo })\r\n .then(() => {\r\n return axios.post(vm.api.refreshChangePolicyContext)\r\n }).then(() => {\r\n axios.post(vm.api.getPolicyMutationUrl, updateParams)\r\n .then(result => {\r\n if (result.data) {\r\n UnsavedChangesPopup.redirect(result.data);\r\n }\r\n });\r\n }); \r\n }\r\n else {\r\n axios.post(vm.api.getMutationUrl, updateParams)\r\n .then(result => {\r\n if (result.data) {\r\n UnsavedChangesPopup.redirect(result.data);\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n }\r\n },\r\n }\r\n})","import Vue from \"vue\";\r\n\r\nVue.component(\"payment-option-selection\", {\r\n props: {\r\n model: Object\r\n },\r\n inject: ['$validator'],\r\n\r\n computed: {\r\n Model() { \r\n return this.model;\r\n }\r\n },\r\n\r\n data() {\r\n return {\r\n isCreditOpen: false,\r\n isEFTOpen: false\r\n }\r\n },\r\n\r\n watch: {\r\n \"Model.Payment.EFTPaymentMethod\": function (newVal) {\r\n if (!!newVal) {\r\n Vue.set(this.Model.Payment, \"CreditCardPaymentMethod\", \"\");\r\n Vue.set(this.Model.Payment, \"PaymentMethod\", newVal);\r\n }\r\n },\r\n \"Model.Payment.CreditCardPaymentMethod\": function (newVal) {\r\n if (!!newVal) {\r\n Vue.set(this.Model.Payment, \"EFTPaymentMethod\", \"\");\r\n Vue.set(this.Model.Payment, \"PaymentMethod\", newVal);\r\n }\r\n }\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n if (vm.Model.Payment.PaymentMethod == \"EFT\") {\r\n vm.selectEFT();\r\n } else {\r\n vm.selectCreditcard();\r\n }\r\n\r\n vm.$root.$on('validate-all', () => {\r\n vm.$validator.validateAll();\r\n vm.$root.$emit('child-validated', vm.$validator.errors);\r\n });\r\n },\r\n\r\n methods: {\r\n selectCreditcard() {\r\n const vm = this;\r\n Vue.set(vm.Model.Payment, \"CreditCardPaymentMethod\", \"Creditcard\");\r\n vm.isCreditOpen = true;\r\n vm.isEFTOpen = false;\r\n },\r\n selectEFT() {\r\n const vm = this;\r\n Vue.set(vm.Model.Payment, \"EFTPaymentMethod\", \"EFT\");\r\n vm.isCreditOpen = false;\r\n vm.isEFTOpen = true;\r\n }\r\n }\r\n});","import Vue from 'vue';\r\n\r\nVue.component('pipeda-modal', {\r\n inject: [ '$validator' ],\r\n\r\n props: {\r\n storeName: String,\r\n modalId: String\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model.Pipeda;\r\n },\r\n MainModel() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n isDisabled: function () {\r\n return !this.Model.IsAccepted;\r\n }\r\n },\r\n\r\n created() {\r\n this.$eventBus.$on(this.$globalModal.events.hide, this.rejectPipeda);\r\n },\r\n beforeDestroy() {\r\n this.$eventBus.$off(this.$globalModal.events.hide, this.rejectPipeda);\r\n },\r\n\r\n methods: {\r\n acceptPipeda() {\r\n if (this.MainModel.ProductName && this.MainModel.ProductName === \"Auto\" ||\r\n (this.MainModel.Policies && this.MainModel.Policies.some(policy => policy.ProductName === \"Auto\"))) {\r\n if (this.MainModel.Policies.some(policy => policy.PolicyModel.IsOptedOutOfDCPD === true) ||\r\n this.MainModel.ChangedPolicies.some(policy => policy.PolicyModel.IsOptedOutOfDCPD === true && policy.PolicyModel.PolicyStatus !== \"8\")) {\r\n this.$globalModal.show('OPCFLightbox');\r\n this.$eventBus.$emit('pipedaAccepted');\r\n this.Model.IsAccepted = true;\r\n this.Model.IsPipedaAccepted = true;\r\n }\r\n else {\r\n this.closeModal();\r\n }\r\n }\r\n else{\r\n this.closeModal();\r\n }\r\n },\r\n\r\n rejectPipeda({ trigger, id }) {\r\n if (trigger === 'close' && id === 'PipedaLightbox') {\r\n this.Model.IsAccepted = false;\r\n }\r\n },\r\n\r\n closeModal() {\r\n this.$globalModal.hide(this.modalId);\r\n }\r\n }\r\n});\r\n","import Vue from 'vue';\r\n\r\nVue.component('policy-detail-card-item', {\r\n functional: true,\r\n props: {\r\n /**\r\n * Set entire element width to 100% of parent\r\n */\r\n fullWidth: {\r\n type: [ Boolean, String ],\r\n default: false\r\n },\r\n\r\n /**\r\n * Remove bottom border\r\n */\r\n noBorder: {\r\n type: Boolean,\r\n default: false\r\n },\r\n\r\n /**\r\n * Set flex row on content\r\n */\r\n row: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n render(createElement, context) {\r\n const {\r\n props: { fullWidth, noBorder, row },\r\n data: {\r\n class: classes = {},\r\n staticClass = '',\r\n ...rest\r\n },\r\n scopedSlots: {\r\n heading,\r\n body,\r\n default: defaultSlot\r\n }\r\n } = context;\r\n\r\n if (!heading && !body && !defaultSlot) return null;\r\n\r\n const headingEl = heading ?\r\n createElement('div', {\r\n class: 'm-policyDetailCardItem__heading'\r\n }, heading()) :\r\n null;\r\n\r\n const bodyEl = body ?\r\n createElement('div', {\r\n class: 'm-policyDetailCardItem__body'\r\n }, body()) :\r\n null;\r\n\r\n const defaultSlotContentEl = defaultSlot ? defaultSlot() : null;\r\n\r\n const namedSlotElements = [ headingEl, bodyEl ];\r\n\r\n const data = {\r\n ...rest,\r\n class: [\r\n 'm-policyDetailCardItem',\r\n {\r\n '-fullWidth': fullWidth,\r\n '-noBorder': noBorder,\r\n '-row': row\r\n },\r\n staticClass,\r\n ...(Array.isArray(classes) ?\r\n classes :\r\n [ classes ]\r\n )\r\n ]\r\n };\r\n\r\n return createElement('div', data, [\r\n ...(row ?\r\n [\r\n createElement('div', {\r\n class: 'm-policyDetailCardItem__wrapper'\r\n }, namedSlotElements)\r\n ] :\r\n namedSlotElements\r\n ),\r\n defaultSlotContentEl\r\n ]);\r\n }\r\n});\r\n","import Vue from 'vue';\r\n\r\nVue.component('policy-detail-card', {\r\n props: {\r\n skipBorderMask: {\r\n type: Boolean,\r\n default: false\r\n },\r\n\r\n /**\r\n * Enable additional styles specific to funnel redesign 2021\r\n */\r\n isShoppingCart: {\r\n type: Boolean,\r\n default: false\r\n },\r\n\r\n /**\r\n * Enable content expand/collapsing\r\n */\r\n withContentToggle: {\r\n type: Boolean,\r\n default: false\r\n },\r\n contentToggleID: {\r\n type: String,\r\n default: ''\r\n },\r\n\r\n /**\r\n * Props for removing some of the base styles for the component.\r\n */\r\n noBorderTop: {\r\n type: Boolean,\r\n default: false\r\n },\r\n noPaddingTop: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n data() {\r\n return {\r\n slider: {},\r\n showPinkSlip: true,\r\n showNotification: true,\r\n displayOptions: {},\r\n cancellationChangeType: -1,\r\n isOpen: false\r\n };\r\n },\r\n computed: {\r\n policyDate() {\r\n return '';\r\n },\r\n policyDateFormatted() {\r\n return '';\r\n },\r\n storeName() {\r\n return 'myzone-policy-details';\r\n },\r\n Model() {\r\n let model = {};\r\n\r\n if (this.storeName in this.$store.state) {\r\n model = this.$store.state[ this.storeName ].model || {};\r\n }\r\n else {\r\n for (const moduleName in this.$store.state) {\r\n const state = this.$store.state[ moduleName ];\r\n\r\n if (state.model) {\r\n model = state.model;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return model;\r\n }\r\n },\r\n methods: {\r\n toggleContent() {\r\n this.isOpen = !this.isOpen;\r\n },\r\n createToggleButton(createElement) {\r\n if (!this.withContentToggle) return null;\r\n\r\n const chevron = createElement('drop-down-chevron', {\r\n props: {\r\n isOpen: this.isOpen,\r\n iconType: 'myAccount'\r\n },\r\n class: 'o-policyDetailCard__chevron'\r\n });\r\n\r\n return createElement('onlia-button', {\r\n class: 'o-policyDetailCard__toggleButton',\r\n props: {\r\n tag: 'button',\r\n variant: 'none'\r\n },\r\n attrs: {\r\n type: 'button'\r\n },\r\n on: {\r\n click: this.toggleContent\r\n }\r\n }, [ chevron ]);\r\n },\r\n createHeader(createElement) {\r\n const { heading } = this.$scopedSlots;\r\n\r\n const headingEl = heading ?\r\n createElement('h6', {\r\n class: 'o-policyDetailCard__heading',\r\n directives: [\r\n {\r\n name: 'remove-html-tag'\r\n }\r\n ]\r\n }, heading()) :\r\n null;\r\n\r\n const toggleButtonEl = this.createToggleButton(createElement);\r\n\r\n if (!headingEl && !toggleButtonEl) return null;\r\n\r\n return createElement('div', { class: 'o-policyDetailCard__header' }, [\r\n headingEl,\r\n toggleButtonEl\r\n ]);\r\n },\r\n createContentContainer(createElement) {\r\n const {\r\n items,\r\n buttons,\r\n default: defaultSlot,\r\n 'top-content': topContent\r\n } = this.$scopedSlots;\r\n\r\n if (!items && !buttons && !defaultSlot) return null;\r\n\r\n const itemsContainerEl = items ?\r\n createElement('div', {\r\n class: 'o-policyDetailCard__itemsContainer'\r\n }, items()) :\r\n null;\r\n\r\n const buttonsContainerEl = buttons ?\r\n createElement('div', {\r\n class: 'o-policyDetailCard__buttonsContainer'\r\n }, buttons()) :\r\n null;\r\n\r\n const contentContainerEl = createElement(\r\n 'div',\r\n { class: 'o-policyDetailCard__contentContainer ' },\r\n [\r\n itemsContainerEl,\r\n buttonsContainerEl,\r\n defaultSlot ? defaultSlot() : null\r\n ]\r\n );\r\n\r\n if (this.withContentToggle) {\r\n return createElement('content-toggle', {\r\n props: {\r\n value: this.isOpen,\r\n id: this.contentToggleID,\r\n debounceDuration: 0\r\n }\r\n }, [\r\n topContent ? topContent() : null,\r\n contentContainerEl\r\n ]);\r\n }\r\n\r\n return contentContainerEl;\r\n }\r\n },\r\n render(createElement) {\r\n const {\r\n heading,\r\n items,\r\n buttons,\r\n default: defaultSlot\r\n } = this.$scopedSlots;\r\n\r\n if (!heading && !items && !buttons && !defaultSlot) return null;\r\n\r\n const headingEl = this.createHeader(createElement);\r\n\r\n const contentContainerEl = this.createContentContainer(createElement);\r\n\r\n const data = {\r\n ...this.$attrs,\r\n class: [\r\n 'o-policyDetailCard',\r\n {\r\n // Adds psuedo element to hide border bottom on last item, and reduce padding bottom\r\n '-noButtons': !buttons && !this.skipBorderMask && !defaultSlot,\r\n\r\n // Adds psuedo element to hide border bottom on last item only\r\n '-maskLastBorder': !buttons && !this.skipBorderMask && defaultSlot,\r\n\r\n '-cart': this.isShoppingCart,\r\n\r\n '-noBorderTop': this.noBorderTop,\r\n '-noPaddingTop': this.noPaddingTop\r\n }\r\n ]\r\n };\r\n\r\n return createElement('div', data, [ headingEl, contentContainerEl ]);\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport api from \"../mixins/api\";\r\nimport EventBus from '@Shared/utils/event-bus';\r\n\r\nVue.component('save-for-later-consent', {\r\n mixins: [api],\r\n inject: [\"$validator\"],\r\n\r\n props: {\r\n storeName: String,\r\n listId: String,\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n created() {\r\n EventBus.$on('saveForLaterConsent', () => {\r\n this.onBeforeSubmit();\r\n });\r\n },\r\n\r\n methods: {\r\n onBeforeSubmit() {\r\n const vm = this;\r\n vm.isSaveForLater = true;\r\n if (!!vm.Model.IsEmailConsentGivenForSaveQuote && !!vm.listId) {\r\n const subscribeData = {\r\n Email: vm.Model.FunnelStateEmailToSent,\r\n EmailsAgreement: vm.Model.IsEmailConsentGivenForSaveQuote,\r\n ListId: vm.listId,\r\n };\r\n\r\n axios.post('/api/onlia/emailsubscribe/subscribeSaveQuoteAccount', subscribeData)\r\n } else {\r\n Vue.prototype.handleInvalidForm(vm);\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n})","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport EventBus from '@Shared/utils/event-bus';\r\n\r\nVue.component('save-for-later', {\r\n inject: [\"$validator\"],\r\n\r\n props: {\r\n model: Object,\r\n api: Object,\r\n storeName: String,\r\n errorMessage: String,\r\n },\r\n\r\n data() {\r\n return {\r\n isFormOpen: false,\r\n isEmailSending: false,\r\n isEmailSent: false,\r\n isEmailValidityChecked: false,\r\n isEmailValid: false,\r\n };\r\n },\r\n \r\n computed: {\r\n Model: function () {\r\n const model = this.$store.state[this.storeName].model;\r\n // if there is MarketingEmail property, \r\n // input FunnelStateEmailToSent should be prefilled\r\n if (model.MarketingEmail) {\r\n Vue.set(model, 'FunnelStateEmailToSent', model.MarketingEmail);\r\n }\r\n return model;\r\n }\r\n },\r\n mounted(){\r\n setTimeout(function() {\r\n let saveQuoteCheckBox = document.getElementById(\"IsEmailConsentGivenForSaveQuote\");\r\n let saveQuoteSubmitButton = document.querySelector(\".o-saveForLater__formButton\");\r\n let saveQuoteEmailField = document.getElementById(\"FunnelStateEmailToSent\");\r\n let coveragesAddToCartButton = document.querySelector(\"#stepButtons button\");\r\n let checkOutButton = document.querySelector(\"#btnSBCheckout\");\r\n\r\n if (coveragesAddToCartButton){\r\n coveragesAddToCartButton.addEventListener('click', function (event) {\r\n if (saveQuoteSubmitButton && saveQuoteCheckBox.checked && saveQuoteEmailField.value == \"\") {\r\n event.preventDefault();\r\n saveQuoteSubmitButton.click();\r\n } \r\n });\r\n }\r\n\r\n if(checkOutButton){\r\n checkOutButton.addEventListener('click', function (event) {\r\n if (saveQuoteSubmitButton && saveQuoteCheckBox.checked && saveQuoteEmailField.value == \"\") {\r\n event.preventDefault();\r\n saveQuoteSubmitButton.click();\r\n } \r\n });\r\n }\r\n\r\n }, 2000);\r\n }, \r\n\r\n methods: {\r\n toggleSaveForLater() {\r\n this.isFormOpen = !this.isFormOpen;\r\n this.isEmailSent = false;\r\n },\r\n checkSaveQuoteEmailValidity(){\r\n this.isEmailValidityChecked = true;\r\n this.isEmailValid = false;\r\n \r\n var emailPattern = /^[A-Z0-9._%+-]$/i;\r\n this.isEmailValid = document.querySelector(\"#FunnelStateEmailToSent\").value !=\"\"; \r\n },\r\n\r\n saveFunnelState() {\r\n\r\n const vm = this;\r\n vm.checkSaveQuoteEmailValidity();\r\n if (!this.isEmailValid) return 0;\r\n\r\n setTimeout(function() {\r\n vm.$validator.validate().then(function (isFormValid) {\r\n if (isFormValid && !vm.isEmailSending) {\r\n vm.isEmailSending = true;\r\n \r\n const funnelModel = {\r\n FunnelViewModel: Object.assign({}, vm.Model),\r\n EmailAddress: vm.Model.FunnelStateEmailToSent,\r\n PageUrl: window.location.pathname.substring(0, 1) === \"/\"\r\n ? window.location.pathname.substring(1)\r\n : window.location.pathname,\r\n UserAgent: navigator.userAgent\r\n };\r\n \r\n axios.post(vm.api.saveFunnelState, funnelModel)\r\n .then(result => {\r\n if (result.data) { \r\n vm.isEmailSent = result.data.IsEmailSent; \r\n \r\n //Successful state should reset to default state after 5s\r\n const timeout = setTimeout(() => {\r\n vm.isEmailSent = false;\r\n vm.isFormOpen = false;\r\n clearTimeout(timeout);\r\n }, 5000);\r\n \r\n }\r\n \r\n if (!vm.isEmailSent) {\r\n vm.$root.$emit('error-modal-open', !result.data.Message ? vm.errorMessage : result.data.Message);\r\n }\r\n \r\n vm.isEmailSending = false;\r\n })\r\n .catch(() => {\r\n vm.isEmailSending = false;\r\n });\r\n } else {\r\n Vue.prototype.handleInvalidForm(vm);\r\n }\r\n EventBus.$emit('saveForLaterConsent');\r\n });\r\n }, 1000);\r\n \r\n \r\n }\r\n }\r\n})","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\n\r\nVue.component(\"step-indicator-api-provider\", {\r\n props: {\r\n storeName: String\r\n },\r\n\r\n data: function () {\r\n const vm = this;\r\n return {\r\n api: {\r\n saveActiveStep: \"/api/onlia/shoppingbasketapi/saveActiveStep\"\r\n },\r\n funnelMethods: {\r\n saveActiveStep: function (step) {\r\n return axios.post(vm.api.saveActiveStep, {\r\n ActiveStep: step || vm.$store.state[vm.storeName].model.ActiveStep,\r\n IsInChangeMode: typeof vm.$store.state[vm.storeName].model.IsInChangeMode !== \"undefined\"\r\n ? vm.$store.state[vm.storeName].model.IsInChangeMode\r\n : false\r\n });\r\n }\r\n }\r\n };\r\n }\r\n});","import Vue from \"vue\";\r\n\r\nVue.component(\"stepper\", {\r\n inject: [\"$validator\"],\r\n props: {\r\n stepperMin: String,\r\n stepperMax: String,\r\n stepperOffset: String,\r\n storeName: String,\r\n value: Number\r\n },\r\n\r\n computed: {\r\n isMinimumValueReached: function () {\r\n return (this.value || 0) <= parseInt(this.stepperMin || 0); \r\n },\r\n isMaximumValueReached: function () {\r\n return (this.value || 0) >= parseInt(this.stepperMax || 0);\r\n },\r\n Model: function () {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n methods: {\r\n onInputChange: function ($event) {\r\n this.viewValue = $event.target.value;\r\n }, \r\n emitValue(value) {\r\n this.$emit('input', value);\r\n },\r\n updateBindingModel: function (type) {\r\n const currentValue = +this.value || 0;\r\n let offset = parseInt(this.stepperOffset || 0);\r\n offset = type === \"increment\" ? +offset : -offset;\r\n this.viewValue = currentValue + offset;\r\n this.emitValue(currentValue + offset);\r\n }\r\n }\r\n});","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component(\"store-temp-changes\", {\r\n template: `
`,\r\n props: {\r\n model: Object,\r\n api: Object\r\n },\r\n\r\n computed: {\r\n Model: function () {\r\n return this.model;\r\n }\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n if (vm.$parent.pushOnAfterSubmitQueue) {\r\n vm.$parent.pushOnAfterSubmitQueue(callback => {\r\n if (vm.Model.TransitToShoppingBasketStep && !!vm.api.saveTempChanges) {\r\n axios.post(vm.api.saveTempChanges)\r\n .then(result => {\r\n let data = result.data;\r\n if (data && !data.HasChanges) {\r\n UnsavedChangesPopup.redirect(data.RedirectUrl);\r\n }\r\n else {\r\n callback();\r\n }\r\n });\r\n } else {\r\n callback();\r\n }\r\n });\r\n }\r\n }\r\n});","import Vue from 'vue';\r\nimport coveragesUtils from '../../shared/mixins/coverages-utils';\r\nimport totalPremium from '@Shared/mixins/total-premium';\r\nimport _isEmpty from 'lodash/isEmpty';\r\n\r\nVue.component('total-policy-premium', {\r\n mixins: [totalPremium, coveragesUtils],\r\n props: {\r\n storeName: String,\r\n api: Object\r\n },\r\n\r\n data() {\r\n return {\r\n totalPremiumCalculated: 0,\r\n coverageOriginDictionary: [],\r\n };\r\n },\r\n\r\n computed: { \r\n Model() {\r\n const model = this.$store.state[this.storeName].model;\r\n if (_isEmpty(model.QuotationData)) {\r\n Vue.set(model.QuotationData, 'ApplicableTaxesIncluded', true);\r\n }\r\n return model;\r\n },\r\n },\r\n mounted() {\r\n const vm = this;\r\n\r\n vm.$root.$on('Broadcast::PremiumCalculated', () => {\r\n vm.calculateTotal();\r\n });\r\n\r\n vm.$root.$on('Broadcast::CoverageToggled', () => {\r\n vm.calculateTotal();\r\n });\r\n\r\n vm.$root.$on('Broadcast::DCPDChecked', () => {\r\n vm.calculateTotal();\r\n });\r\n\r\n //if (this.Model.ActiveStep < 4) {\r\n if (this.Model.TotalPremiumBlock === undefined) {\r\n vm.callPremium();\r\n }\r\n },\r\n methods: {\r\n changePremiumOptionsChange: function (checked) {\r\n //defined in coverages-utils mixin\r\n this.changePremiumOptions(checked);\r\n },\r\n\r\n changeApplicableTaxesIncludedChange: function () {\r\n this.Model.QuotationData.ApplicableTaxesIncluded = !this.Model.QuotationData.ApplicableTaxesIncluded;\r\n //defined in coverages-utils mixin\r\n this.changeApplicableTaxesIncluded(this.Model.QuotationData.ApplicableTaxesIncluded);\r\n },\r\n\r\n callPremium: function () {\r\n const vm = this;\r\n //this.$root.$emit('Broadcast::CalculatePremium');\r\n //Vue.set(vm.Model, 'PremiumSuccess', false); //disable Continue button\r\n\r\n vm.getOriginProperties(vm);\r\n\r\n vm.fetchCoverages(vm, vm.api)\r\n .then(() => {\r\n vm.$root.$emit('Broadcast::PremiumCalculated');\r\n vm.Model.TotalPremiumBlock = 0;\r\n vm.Model.Payment.TotalPremium = 0;\r\n //vm.$root.$emit('Broadcast::PremiumCalculatedStack');\r\n });\r\n },\r\n\r\n calculateTotal: function () {\r\n const vm = this;\r\n const IsTaxesIncluded = vm.Model.QuotationData.ApplicableTaxesIncluded || vm.Model.QuotationData.ApplicableTaxesIncluded == undefined;\r\n let totalPremium = 0;\r\n let paymentTotalPremium = 0;\r\n\r\n vm.Model.CoverageGroups.forEach((group) => {\r\n group.Coverages.forEach((coverage) => {\r\n if (coverage.IsSelected && !coverage.IsDisabled || (coverage.CoverageCode === \"DCPD2\" && coverage.IsSelected)) {\r\n totalPremium += IsTaxesIncluded ? coverage.Premium : coverage.PremiumWithoutTax;\r\n paymentTotalPremium += coverage.Premium;\r\n }\r\n });\r\n });\r\n\r\n vm.totalPremiumCalculated = totalPremium;\r\n vm.Model.TotalPremiumBlock = totalPremium;\r\n //Vue.set(vm.Model, 'TotalPremiumBlock', totalPremium);\r\n\r\n this.Model.Payment = {\r\n ...this.Model.Payment,\r\n TotalPremium: paymentTotalPremium\r\n };\r\n },\r\n }\r\n});\r\n","import Vue from \"vue\";\r\n\r\nVue.component('unit-number', {\r\n inject: ['$validator'],\r\n props: {\r\n storeName: String,\r\n value: String,\r\n unitIsLoading: Boolean\r\n },\r\n data() {\r\n return {\r\n viewValue: '',\r\n unitHasChanged: false,\r\n unitValidityState: {\r\n isValid: false,\r\n message: ''\r\n }\r\n }\r\n },\r\n mounted() {\r\n if (this.value) {\r\n this.viewValue = this.value;\r\n this.unitValidityState.isValid = true;\r\n }\r\n const unitNumberRef = (this.$refs[\"unit-number\"] && this.$refs[\"unit-number\"].dataset)\r\n ? this.$refs[\"unit-number\"] : this.$refs[\"unit-number\"][0];\r\n if (unitNumberRef) {\r\n this.unitValidityState.message = unitNumberRef.dataset.valCustom;\r\n }\r\n },\r\n watch: {\r\n value: function (val) {\r\n if (val) {\r\n this.viewValue = val;\r\n }\r\n // value update coming from parent is valid by assumption. No need to revalidate\r\n this.unitValidityState.isValid = true;\r\n this.$validator.validate(this.$attrs.name);\r\n }\r\n },\r\n computed: {\r\n Model: function () {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n methods: {\r\n forceViewValueUpdate() {\r\n this.viewValue = this.value;\r\n // value update coming from parent is valid by assumption. No need to revalidate\r\n this.unitValidityState.isValid = true;\r\n this.$validator.validate(this.$attrs.name);\r\n },\r\n unitChangeHandler($event) {\r\n this.unitHasChanged = true;\r\n\r\n },\r\n unitBlurHandler($event) {\r\n const vm = this;\r\n if (!this.unitHasChanged) {\r\n return;\r\n }\r\n const unitNr = $event.target.value;\r\n this.$emit('validate-unit', {\r\n value: unitNr,\r\n callbacks: {\r\n success: () => {\r\n this.unitValidityState.isValid = true;\r\n vm.$validator.validate(vm.$attrs.name);\r\n vm.$emit('input', this.viewValue);\r\n },\r\n fail: () => {\r\n setTimeout(() => {\r\n vm.$validator.rules.validateAddressName.validate();\r\n this.unitValidityState.isValid = false;\r\n vm.$validator.validate(vm.$attrs.name);\r\n });\r\n }\r\n }\r\n\r\n })\r\n this.unitHasChanged = false;\r\n }\r\n }\r\n})","import Vue from \"vue\";\r\n\r\nVue.directive(\"capitalize-input\", {\r\n update(el) {\r\n if (el && el.value) {\r\n let capitalizedInput = el.value\r\n .replace(/\\s\\s+/g, ' ')\r\n .replace(/^(.)|\\s(.)/g, function (v) { return v.toUpperCase(); });\r\n\r\n if (el.value !== capitalizedInput) {\r\n el.value = capitalizedInput;\r\n el.dispatchEvent(new Event('input'));\r\n }\r\n }\r\n }\r\n});","import Vue from 'vue';\r\n\r\nVue.directive('coverage-related-field', {\r\n inserted: function (el, binding, vnode) {\r\n const vm = vnode.context;\r\n\r\n vm.skipRecalculation = false;\r\n\r\n const dependentField = el.attributes['data-coverage-related-field-dependent-field'].value;\r\n if (dependentField && dependentField != '') {\r\n const newOptions = JSON.parse(el.attributes['data-coverage-related-field-options'].value);\r\n vm.$watch(\r\n () => dependentField,\r\n (newValue, oldValue) => {\r\n newOptions.forEach((option) => {\r\n option.v = newValue * option.v;\r\n option.t = option.v; //$filter(\"currency\")(option.v);\r\n });\r\n\r\n //$scope.dropdownOptions[\"Model.\" + fieldModel.$name] = newOptions;\r\n el.value = newOptions[0].v;\r\n\r\n // Skip Premium recalculation for dependent field\r\n vm.skipRecalculation = true;\r\n },\r\n {\r\n deep: true\r\n }\r\n );\r\n }\r\n\r\n vm.$root.$on('validate-all', () => {\r\n vm.$validator.validateAll();\r\n vm.$root.$emit('child-validated', vm.$validator.errors);\r\n });\r\n },\r\n update: function (el, binding, vnode) {\r\n const vm = vnode.context;\r\n const field = vm.$validator.fields.find({ name: el.name });\r\n field.setFlags({\r\n pristine: false, valid: true, invalid: false\r\n });\r\n },\r\n bind: function (el, binding, vnode) {\r\n const vm = vnode.context;\r\n let modelName = el.attributes['data-binding-path'];\r\n modelName = modelName ? modelName.value : '';\r\n const relatedCoverageCode = binding.value;\r\n const relatedCoverageCodesWithSameFields = el.attributes['data-coverage-related-field-related-coverages-with-same-fields'] ? el.attributes['data-coverage-related-field-related-coverages-with-same-fields'].value : '';\r\n let originalLimitAmountByCode = null;\r\n const allCoverages = [];\r\n let currentCoverage = null;\r\n\r\n Vue.nextTick(() => {\r\n vm.Model.CoverageGroups.forEach((coverageGroup) => {\r\n coverageGroup.Coverages.forEach((coverage) => {\r\n allCoverages.push(coverage);\r\n if (coverage.CoverageCode == relatedCoverageCode) {\r\n originalLimitAmountByCode = coverage.LimitAmount;\r\n currentCoverage = coverage;\r\n }\r\n });\r\n });\r\n\r\n const field = vm.$validator.fields.find({ name: el.name });\r\n field && field.setFlags({\r\n pristine: false, valid: true, invalid: false\r\n });\r\n\r\n });\r\n\r\n vm.$root.$on('Broadcast::CleanUpInvisibleRelatedField', () => {\r\n if (currentCoverage && !currentCoverage.IsSelected) {\r\n el.value = null;\r\n currentCoverage.LimitAmount = null;\r\n }\r\n });\r\n\r\n //called in fetchedCoverage in CoverageUtils\r\n vm.$root.$on('Broadcast::PopulateOptions', (coverageCode, coverageLimits, coverageLimitDefault) => {\r\n if (relatedCoverageCode == coverageCode) {\r\n if (currentCoverage && currentCoverage.IsSelected && currentCoverage.LimitAmount == undefined) {\r\n currentCoverage.LimitAmount = coverageLimitDefault;\r\n }\r\n coverageLimitDefault = (currentCoverage.LimitAmount === undefined ? coverageLimitDefault.toString() : currentCoverage.LimitAmount.toString());\r\n\r\n const modelDrilldown = (modelName).split('.');\r\n Vue.set(vm.Model[modelDrilldown[0]], modelDrilldown[1], coverageLimitDefault);\r\n\r\n if (coverageLimits) {\r\n vm.dropdownOptions['Model.' + modelName] = coverageLimits;\r\n }\r\n }\r\n });\r\n\r\n el.addEventListener('change', (event) => {\r\n setTimeout(() => {\r\n const elValue = el.value;\r\n\r\n if (el.value == '') {\r\n const field = vm.$validator.fields.find({ name: el.name });\r\n //const fieldRules = Object.assign({}, field.rules);\r\n\r\n //fieldRules.val_licenseplate = true;\r\n //field.update({ rules: fieldRules });\r\n\r\n field.setFlags({\r\n pristine: true, valid: false, invalid: true\r\n });\r\n }\r\n else {\r\n vm.$validator.validate(el.name).then((valid) => {\r\n if (valid) {\r\n if (currentCoverage) {\r\n currentCoverage.LimitAmount = elValue;\r\n }\r\n if (relatedCoverageCodesWithSameFields != '') {\r\n const relatedCoverageCodes = relatedCoverageCodesWithSameFields.split(',');\r\n let relatedCoverage;\r\n for (var i = 0; i < relatedCoverageCodes.length; i++) {\r\n relatedCoverage = allCoverages.filter(o => o.CoverageCode === relatedCoverageCodes[i])[0];\r\n if (relatedCoverage) {\r\n relatedCoverage.LimitAmount = elValue;\r\n }\r\n }\r\n\r\n }\r\n if (!vm.skipRecalculation && elValue != undefined) {\r\n const hasChange = originalLimitAmountByCode != elValue;\r\n vm.$root.$emit('Broadcast::CalculatePremium', hasChange, relatedCoverageCode);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n});\r\n","import Vue from \"vue\";\r\n\r\nVue.directive(\"display-options-init\", {\r\n bind: function (el, binding, vnode) {\r\n\r\n const optionKey = binding.value.key;\r\n const optionValue = binding.value.value;\r\n const displayOptions = vnode.context.displayOptions;\r\n\r\n if (displayOptions) {\r\n if (!displayOptions[optionKey]) {\r\n Vue.set(displayOptions, optionKey, {});\r\n }\r\n\r\n displayOptions[optionKey] = JSON.parse(optionValue.replace(/\\'/g, '\"'));\r\n }\r\n }\r\n});","import Vue from \"vue\";\r\n\r\nVue.directive(\"format-phone\", {\r\n bind: function (el, binding) {\r\n const tel = el.innerText;\r\n let value = tel.toString().trim().replace(/^\\+/, '');\r\n let city = value.slice(0, 3);\r\n let number = value.slice(3);\r\n number = number.slice(0, 3) + ' - ' + number.slice(3);\r\n el.innerHTML = (\"(\" + city + \") \" + number).trim();\r\n }\r\n});","import Vue from \"vue\";\r\n\r\nVue.directive(\"lowercase-input\", {\r\n update(el) {\r\n if (el && el.value) {\r\n let lowercaseInput = el.value.toLowerCase();\r\n\r\n if (el.value !== lowercaseInput) {\r\n el.value = lowercaseInput;\r\n el.dispatchEvent(new Event('input'));\r\n }\r\n }\r\n }\r\n});","import Vue from 'vue';\r\nimport { SUBMIT_BUTTON_ID } from '@Shared/settings';\r\n\r\nconst checkForOnliaButton = element => element.classList.contains('OnliaButton');\r\n\r\nconst getOnliaButtonLabel = element => element.getElementsByClassName('OnliaButton__label')[0];\r\n\r\nVue.directive('move-submit-button', {\r\n bind : function (el) {\r\n const isOnliaButton = checkForOnliaButton(el);\r\n\r\n const timeout = setTimeout(() => {\r\n clearTimeout(timeout);\r\n\r\n const submitBtn = (\r\n document.getElementById(SUBMIT_BUTTON_ID) ||\r\n document.querySelectorAll('.o-step__footer button[type=submit]')[0]\r\n );\r\n let submitBtnContent = submitBtn.innerHTML;\r\n\r\n //hide the main step submit button\r\n submitBtn.style.display = 'none';\r\n\r\n // Handle submit button's that are OnliaButton Vue component\r\n if (checkForOnliaButton(submitBtn)) {\r\n const subtmitBtnLabel = getOnliaButtonLabel(submitBtn);\r\n\r\n if (subtmitBtnLabel) {\r\n submitBtnContent = subtmitBtnLabel.innerHTML;\r\n }\r\n }\r\n\r\n // Handle OnliaButton Vue component as element directive is bound to\r\n if (isOnliaButton) {\r\n const onliaButtonLabel = getOnliaButtonLabel(el);\r\n\r\n if (onliaButtonLabel) {\r\n onliaButtonLabel.innerHTML += submitBtnContent;\r\n }\r\n\r\n return;\r\n }\r\n\r\n //vm.newButtonType = \"submit\";\r\n if (el.innerHTML == '') {\r\n el.innerHTML = submitBtnContent;\r\n }\r\n }, 100);\r\n }\r\n});\r\n","import Vue from 'vue';\r\n\r\n// To support shared Razor view PolicyCardHeader.cshtml usage with my-account-card heading, this directive will\r\n// remove the h4 tag from the Razor view, as it is getting wrapped by an h6 already.\r\nVue.directive('remove-html-tag', {\r\n bind(el) {\r\n if (el.childElementCount) {\r\n const childElements = [ ...el.children ];\r\n\r\n // Clear children\r\n el.innerHTML = '';\r\n\r\n // Remove only heading tags.\r\n childElements.map((childEl) => {\r\n const isHeadingElement = /^H[0-9]$/.test(childEl.nodeName);\r\n\r\n if (isHeadingElement) {\r\n el.append(childEl.innerText);\r\n }\r\n else {\r\n el.append(childEl);\r\n }\r\n });\r\n }\r\n }\r\n});\r\n","import Vue from \"vue\";\r\n\r\nVue.directive(\"require-toggle-yes\", {\r\n bind: function (el, binding, vnode) {\r\n const vm = vnode.context;\r\n const toggleName = el.name;\r\n\r\n let submitBtn = null;\r\n const disableBtnTimeout = setTimeout(() => {\r\n clearTimeout(disableBtnTimeout);\r\n submitBtn = document.querySelectorAll(\"#stepButtons button[type=submit]\")[0];\r\n if (submitBtn) {\r\n submitBtn.disabled = !vm.Model[toggleName];\r\n }\r\n }, 100);\r\n\r\n vm.$watch(\"Model.\" + toggleName, function (newValue) {\r\n if (submitBtn) {\r\n submitBtn.disabled = !newValue;\r\n }\r\n });\r\n }\r\n});\r\n","import Vue from \"vue\";\r\n\r\nVue.directive(\"set-property\", {\r\n bind: function (el, binding, vnode) {\r\n const vm = vnode.context;\r\n let property = JSON.parse(binding.expression); // ex.: v-set-property='{\"key\": \"ConfirmCancellation\", \"value\": true}'>\r\n const propertyKey = property.key;\r\n const propertyValue = property.value;\r\n\r\n if (vm.Model) {\r\n Vue.set(vm.Model, propertyKey, propertyValue);\r\n }\r\n }\r\n});","import Vue from \"vue\";\r\n\r\nVue.directive(\"slider-init\", {\r\n bind: function (el, binding, vnode) {\r\n\r\n const sliderKey = binding.value.key;\r\n const sliderValue = binding.value.value;\r\n const slider = vnode.context.slider;\r\n\r\n if (slider) {\r\n if (!slider[sliderKey]) {\r\n Vue.set(slider, sliderKey, {});\r\n }\r\n\r\n slider[sliderKey] = JSON.parse(sliderValue.replace(/\\'/g, '\"'));\r\n }\r\n }\r\n});","import Vue from \"vue\";\r\n\r\nVue.directive(\"trim-input\", {\r\n update(el) {\r\n if (el && el.value) {\r\n let trimmedInput = el.value\r\n .replace(/\\s\\s+/g, ' ');\r\n\r\n if (el.value !== trimmedInput) {\r\n el.value = trimmedInput;\r\n el.dispatchEvent(new Event('input'));\r\n }\r\n }\r\n },\r\n bind(el) {\r\n el.addEventListener(\"blur\", () => {\r\n el.value = el.value.trim();\r\n el.dispatchEvent(new Event('input'));\r\n });\r\n }\r\n});\r\n","import Vue from 'vue';\r\n\r\n// NOTE 2021-08-13 AndrewKim:\r\n// There is an issue with the Razor view UpdatePolicyButton.cshtml. It calls updatePolicy on click, but this is\r\n// entirely dependant on parent component/ context. I've set up eventBus as an alternative method of calling this\r\n// function on 'policy-details' Vue component.\r\nVue.directive('update-policy', {\r\n bind: (el, binding, vNode) => {\r\n const { value: { cardID, policyID } } = binding;\r\n const { context: { updatePolicy } } = vNode;\r\n\r\n const onClick = () => {\r\n if (updatePolicy) {\r\n updatePolicy(cardID, policyID);\r\n }\r\n else {\r\n vNode.context.$eventBus.$emit('policyDetails:updatePolicy', cardID, policyID);\r\n }\r\n };\r\n\r\n el.addEventListener('click', onClick);\r\n }\r\n});\r\n","import Vue from \"vue\";\r\n\r\nVue.directive(\"uppercase-input\", {\r\n update(el) {\r\n if (el && el.value) {\r\n let uppercaseInput = el.value.toUpperCase();\r\n\r\n if (el.value !== uppercaseInput) {\r\n el.value = uppercaseInput;\r\n el.dispatchEvent(new Event('input'));\r\n }\r\n }\r\n }\r\n});","import { productsShared } from '@Apis';\r\n\r\nexport default {\r\n computed: {\r\n api() {\r\n return productsShared;\r\n }\r\n }\r\n};\r\n","import axios from 'axios';\r\nimport Vue from 'vue';\r\nimport _merge from 'lodash/merge';\r\nimport { hideElement } from '@Shared/utils/dom-utils';\r\n\r\nexport default {\r\n methods: {\r\n getOriginProperties: function (scope) {\r\n //scope.Model.PremiumFrequency = \"1\";\r\n\r\n scope.Model.CoverageGroups.forEach((group) => {\r\n group.Coverages.forEach((coverage) => {\r\n const coverageOrigin = {\r\n IsSelected: coverage.IsSelectedInSitecore,\r\n IsDisabled: coverage.IsDisabledInSitecore,\r\n LimitAmount: coverage.LimitAmount\r\n };\r\n //scope.coverageOriginDictionary[coverage.CoverageCode] = coverageOrigin;\r\n Vue.set(scope.coverageOriginDictionary, `${coverage.CoverageCode}`, coverageOrigin);\r\n });\r\n });\r\n },\r\n\r\n getCoverageByCode: function (coverages, coverageCode) {\r\n const result = coverages.filter(o => o.CoverageCode === coverageCode);\r\n if (result && result.length > 0) {\r\n return result[0];\r\n }\r\n else {\r\n return null;\r\n }\r\n },\r\n\r\n getOriginalLimitAmountByCode: function (scope, coverageCode) {\r\n if (scope.coverageOriginDictionary) {\r\n return scope.coverageOriginDictionary[coverageCode].LimitAmount;\r\n }\r\n else {\r\n return null;\r\n }\r\n },\r\n\r\n fetchCoverages: function (scope, oApi, hasChange, coverageCode) {\r\n const submitButtons = document.querySelectorAll('button[type=submit]');\r\n if (submitButtons.length) {\r\n submitButtons.forEach((button) => {\r\n button.setAttribute('disabled', '');\r\n });\r\n }\r\n\r\n scope.coverageDictionary = scope.coverageDictionary || [];\r\n\r\n if (coverageCode) {\r\n scope.Model.CoverageGroups.forEach((group) => {\r\n group.Coverages.forEach((coverage) => {\r\n if (coverage.CoverageCode == coverageCode) {\r\n coverage.HasChange = true;\r\n }\r\n });\r\n });\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n axios.post(oApi.getCoverages, scope.Model).then((res) => {\r\n if (res.data.RedirectUrl) {\r\n reject();\r\n window.location.href = res.data.RedirectUrl;\r\n //return;\r\n }\r\n const isPremiumFrequencyPerMonth = scope.Model.PremiumFrequency === '1';\r\n scope.Model.PremiumSuccess = true; //enable Continue button\r\n\r\n if (submitButtons.length) {\r\n submitButtons.forEach((button) => {\r\n button.removeAttribute('disabled');\r\n });\r\n }\r\n\r\n if (res.data.ReplacementCost != undefined) {\r\n //$rootScope.$broadcast(\"Broadcast::UpdateHomeReplacementCostFromPremium\", res.data.ReplacementCost);\r\n Vue.set(scope.Model.House, 'ReplacementCost', res.data.ReplacementCost);\r\n }\r\n if (res.data.Discount != undefined) {\r\n _merge(scope.Model.Discount, res.data.Discount);\r\n }\r\n res.data.Data.forEach((item) => {\r\n const premium = {\r\n Premium: item.Premium, PremiumWithoutTax: item.PremiumWithoutTax,\r\n IsDisabled: item.IsDisabled,\r\n IsDisabledForChange: item.IsDisabledForChange,\r\n PremiumPerMonth: item.PremiumPerMonth,\r\n PremiumPerYear: item.PremiumPerYear,\r\n PremiumWithoutTaxPerMonth: item.PremiumWithoutTaxPerMonth,\r\n PremiumWithoutTaxPerYear: item.PremiumWithoutTaxPerYear\r\n };\r\n if (hasChange === undefined && (item.Limits || item.LimitDefault)) {\r\n premium.CoverageLimitAmountCode = item.LimitAmountCode;\r\n premium.CoverageLimitDefault = item.LimitDefault;\r\n premium.CoverageLimits = item.Limits;\r\n }\r\n scope.coverageDictionary[item.CoverageCode] = premium;\r\n });\r\n\r\n scope.Model.CoverageGroups.forEach((group) => {\r\n group.Coverages.forEach((coverage) => {\r\n if (scope.coverageDictionary[coverage.CoverageCode]) {\r\n const previousStateOfIsDisabled = coverage.IsDisabled;\r\n coverage.Premium = isPremiumFrequencyPerMonth ?\r\n scope.coverageDictionary[coverage.CoverageCode].PremiumPerMonth :\r\n scope.coverageDictionary[coverage.CoverageCode].PremiumPerYear;\r\n coverage.PremiumPerMonth = scope.coverageDictionary[coverage.CoverageCode].PremiumPerMonth;\r\n coverage.PremiumPerYear = scope.coverageDictionary[coverage.CoverageCode].PremiumPerYear;\r\n coverage.PremiumWithoutTax = isPremiumFrequencyPerMonth ?\r\n scope.coverageDictionary[coverage.CoverageCode].PremiumWithoutTaxPerMonth :\r\n scope.coverageDictionary[coverage.CoverageCode].PremiumWithoutTaxPerYear;\r\n coverage.PremiumWithoutTaxPerMonth = scope.coverageDictionary[coverage.CoverageCode].PremiumWithoutTaxPerMonth;\r\n coverage.PremiumWithoutTaxPerYear = scope.coverageDictionary[coverage.CoverageCode].PremiumWithoutTaxPerYear;\r\n coverage.PremiumPerDay = scope.coverageDictionary[coverage.CoverageCode].Premium;\r\n coverage.PremiumWithoutTaxPerDay = scope.coverageDictionary[coverage.CoverageCode].PremiumWithoutTax;\r\n coverage.IsDisabledByService = scope.coverageDictionary[coverage.CoverageCode].IsDisabled;\r\n coverage.IsDisabledForChange = scope.coverageDictionary[coverage.CoverageCode].IsDisabledForChange;\r\n coverage.IsDisabled = scope.coverageOriginDictionary[coverage.CoverageCode].IsDisabled ||\r\n coverage.IsDisabledByRule ||\r\n scope.coverageDictionary[coverage.CoverageCode].IsDisabled;\r\n if (coverage.CoverageCode === \"DCPD2\" && scope.coverageDictionary[\"PDCL\"].IsDisabled) {\r\n coverage.IsDisabled = false;\r\n }\r\n coverage.IsSelectedOrigin = !scope.coverageDictionary[coverage.CoverageCode].IsDisabled &&\r\n scope.coverageOriginDictionary[coverage.CoverageCode].IsSelected;\r\n if (previousStateOfIsDisabled && !coverage.IsDisabled && coverage.IsSelectedOrigin) {\r\n coverage.IsSelected = true;\r\n }\r\n else {\r\n coverage.IsSelected = !coverage.IsDisabled && coverage.IsSelected;\r\n if (coverage.CoverageCode === \"DCPD2\") {\r\n if (coverage.IsDisabled) {\r\n coverage.IsSelected = true;\r\n coverage.LimitAmount = 0;\r\n }\r\n else if (scope.Model.IsOptedOutOfDCPD) {\r\n coverage.IsSelected = false;\r\n }\r\n }\r\n }\r\n if (scope.coverageDictionary[coverage.CoverageCode].CoverageLimits ||\r\n scope.coverageDictionary[coverage.CoverageCode].CoverageLimitDefault) {\r\n coverage.LimitAmountCode = scope.coverageDictionary[coverage.CoverageCode].CoverageLimitAmountCode;\r\n this.$root.$emit(\r\n 'Broadcast::PopulateOptions',\r\n coverage.CoverageCode,\r\n scope.coverageDictionary[coverage.CoverageCode].CoverageLimits,\r\n scope.coverageDictionary[coverage.CoverageCode].CoverageLimitDefault\r\n );\r\n\r\n }\r\n }\r\n });\r\n });\r\n\r\n // Add discount messages\r\n const { data: { DiscountMessages } } = res;\r\n if (Array.isArray(DiscountMessages)) {\r\n scope.Model.DiscountMessages = DiscountMessages;\r\n }\r\n\r\n resolve(scope.coverageDictionary);\r\n }).catch((error) => {\r\n //disable Continue button\r\n const submitButtons = document.querySelectorAll('button[type=submit]');\r\n if (submitButtons) {\r\n submitButtons.forEach((btn) => {\r\n btn.disabled = true;\r\n });\r\n }\r\n scope.Model.CoverageGroups.forEach((group) => {\r\n group.Coverages.forEach((coverage) => {\r\n coverage.Premium = 0;\r\n coverage.PremiumPerMonth = 0;\r\n coverage.PremiumPerYear = 0;\r\n coverage.PremiumWithoutTax = 0;\r\n coverage.PremiumWithoutTaxPerMonth = 0;\r\n coverage.PremiumWithoutTaxPerYear = 0;\r\n coverage.PremiumPerDay = 0;\r\n coverage.PremiumWithoutTaxPerDay = 0;\r\n });\r\n });\r\n reject(error);\r\n });\r\n });\r\n },\r\n\r\n //when changePremiumOptionsChange\r\n changePremiumOptions: function (checkboxChecked) {\r\n const isChecked = (checkboxChecked === '1');\r\n this.coveragesPremiumSet(isChecked, this.Model.QuotationData.ApplicableTaxesIncluded);\r\n this.$root.$emit('Broadcast::PremiumCalculated');\r\n this.Model.TotalPremiumBlock = 0;\r\n this.Model.Payment.TotalPremium = 0;\r\n this.$root.$emit('Broadcast::PremiumCalculatedStack');\r\n },\r\n\r\n //when changeApplicableTaxesIncludedChange\r\n changeApplicableTaxesIncluded: function () {\r\n const isChecked = (this.Model.PremiumFrequency === '1');\r\n this.coveragesPremiumSet(isChecked, this.Model.QuotationData.ApplicableTaxesIncluded);\r\n this.$root.$emit('Broadcast::PremiumCalculated');\r\n this.Model.TotalPremiumBlock = 0;\r\n this.Model.Payment.TotalPremium = 0;\r\n this.$root.$emit('Broadcast::PremiumCalculatedStack');\r\n },\r\n\r\n coveragesPremiumSet: function (isPremiumFrequencyPerMonth, applicableTaxesIncluded) {\r\n this.Model.CoverageGroups.forEach((group) => {\r\n group.Coverages.forEach((coverage) => {\r\n const isTaxesIncluded = applicableTaxesIncluded != null ?\r\n applicableTaxesIncluded :\r\n this.Model.QuotationData.ApplicableTaxesIncluded ||\r\n this.Model.QuotationData.ApplicableTaxesIncluded ==\r\n undefined;\r\n coverage.Premium = isTaxesIncluded ?\r\n isPremiumFrequencyPerMonth ? coverage.PremiumPerMonth : coverage.PremiumPerYear :\r\n isPremiumFrequencyPerMonth ? coverage.PremiumWithoutTaxPerMonth : coverage.PremiumWithoutTaxPerYear;\r\n coverage.PremiumWithoutTax = isPremiumFrequencyPerMonth ?\r\n coverage.PremiumWithoutTaxPerMonth :\r\n coverage.PremiumWithoutTaxPerYear;\r\n });\r\n });\r\n },\r\n\r\n // Do not use anymore\r\n // hideStepSubmitButton: function () {\r\n // const vm = this;\r\n\r\n // //hide the main step submit button\r\n // hideElement(document.getElementsByClassName('funnel-btn-bg')[0]);\r\n\r\n // vm.buttonType = 'submit';\r\n // Vue.set(vm.Model, 'TotalPremiumBlock', 0);\r\n // //vm.Model.TotalPremiumBlock = 0;\r\n // }\r\n }\r\n};\r\n","import sharedUtils from \"../../../shared/mixins/shared-utils\";\r\nexport default {\r\n mixins: [sharedUtils],\r\n data() {\r\n return {\r\n addEvent: \"add_to_cart\",\r\n removeEvent: \"remove_from_cart\"\r\n }\r\n },\r\n methods: {\r\n ecommerceTrack(funnelProduct, eventName) {\r\n const vm = this;\r\n if (!!funnelProduct) {\r\n let dataLayer = window.dataLayer || [];\r\n let ecommerceObj = vm.getEcommerceObject(eventName, funnelProduct);\r\n dataLayer.push(ecommerceObj);\r\n }\r\n return true;\r\n },\r\n getEcommerceObject(eventName, product) {\r\n const vm = this;\r\n let ecommerceObj = {\r\n \"event\": eventName,\r\n \"ecommerce\": {}\r\n };\r\n \r\n function productsData(prod) {\r\n let data = {\r\n \"products\": []\r\n };\r\n data.products.push(prod);\r\n return data;\r\n }\r\n\r\n let productObj = {\r\n \"brand\": \"Onlia\", //always Onlia\r\n \"category\": product.PolicyName, //Auto or Home\r\n //\"id\": \"898\", //productID\r\n \"name\": product.PolicyName + \" Insurance\" //Auto Insurance or Home Insurance\r\n };\r\n\r\n if (eventName !== vm.addEvent && eventName !== vm.removeEvent) {\r\n ecommerceObj.ecommerce[\"click\"] = productsData(productObj);\r\n return ecommerceObj;\r\n }\r\n\r\n let price = product.Payment.TotalPremiumPerMonth > 0 ? product.Payment.TotalPremiumPerMonth : product.Payment.TotalPremium;\r\n productObj[\"price\"] = vm.formatCurrency(price, \"decimal\"); //calculated quote price\r\n productObj[\"quantity\"] = 1; //always 1\r\n\r\n if (!!product.Car) { //dimensions will be used only with Car policies for now according to CRO guys (20.07.2020)\r\n productObj[\"dimension2\"] = product.Car.Brand; //car brand\r\n productObj[\"dimension3\"] = product.Car.Year; //construction year\r\n productObj[\"dimension4\"] = product.Car.Model; //type of car\r\n }\r\n\r\n if (eventName === vm.addEvent) {\r\n ecommerceObj.ecommerce[\"currencyCode\"] = \"CAD\";\r\n ecommerceObj.ecommerce[\"add\"] = productsData(productObj);\r\n } else {\r\n ecommerceObj.ecommerce[\"remove\"] = productsData(productObj);\r\n }\r\n\r\n return ecommerceObj;\r\n }\r\n }\r\n};","import { getElementTop } from '@Shared/utils/get-element-top';\r\nimport { scrollPage } from '@Shared/utils/scroll-page';\r\n\r\n/**\r\n * @export\r\n * @description This mixin is used to scroll input element, with suggestions dropdown, to the top of the page on mobile.\r\n * It can technically be used on any element.\r\n */\r\nconst scrollInputToPageTop = {\r\n computed: {\r\n isMobile() {\r\n return this.$store.getters.breakpointMobile;\r\n },\r\n headerHeight() {\r\n return this.$store.getters.currentHeaderHeight;\r\n }\r\n },\r\n methods: {\r\n scrollToPageTop({ target }) {\r\n if (!this.isMobile) return;\r\n\r\n const parentEl = (\r\n target.closest('.a-formGroup') ||\r\n target.closest('.form-group') ||\r\n target.closest('dl')\r\n );\r\n const labelEl = parentEl ? parentEl.querySelector('label') : null;\r\n const elTop = getElementTop(labelEl || parentEl || target);\r\n const targetScrollTop = elTop - this.headerHeight;\r\n\r\n if (document.scrollingElement.scrollTop !== targetScrollTop) {\r\n scrollPage(targetScrollTop);\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default scrollInputToPageTop;\r\n","export default {\r\n methods: {\r\n hashCode: function (str) {\r\n var hash = 0, i, chr;\r\n for (i = 0; i < str.length; i++) {\r\n chr = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + chr;\r\n hash |= 0;\r\n }\r\n return hash;\r\n },\r\n\r\n hasExistingPageState(pageKeyHash) {\r\n const maxPageStateCount = 20;\r\n if (typeof (Storage) !== \"undefined\") {\r\n sessionStorage.pageStates = sessionStorage.pageStates || JSON.stringify([]);\r\n\r\n let pagesStatesStorage = JSON.parse(sessionStorage.pageStates);\r\n if (pagesStatesStorage.length > maxPageStateCount) {\r\n pagesStatesStorage.shift();\r\n }\r\n\r\n const stateExists = (pagesStatesStorage.find((p) => p === pageKeyHash));\r\n\r\n if (!stateExists) {\r\n pagesStatesStorage.push(pageKeyHash);\r\n sessionStorage.pageStates = JSON.stringify(pagesStatesStorage);\r\n }\r\n\r\n return stateExists;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n }\r\n};","import { Validator } from \"@vee-validate-package\";\r\n\r\nValidator.extend(\"validateAddressName\", {\r\n getMessage(field, args) {\r\n return args[0];\r\n },\r\n validate(value, args) {\r\n return value && value.length > 2;\r\n }\r\n});","import Vue from \"vue\";\r\nimport { Validator } from \"@vee-validate-package\";\r\n\r\nVue.directive(\"validate-credit-card-security-code\", {\r\n inserted: function (el, binding, vnode) {\r\n const vm = vnode.context;\r\n const cardTypeField = binding.value;\r\n let cardSecurityCode= el.name;\r\n\r\n vm.$watch(cardTypeField, function (newVal, oldVal) {\r\n if (newVal && newVal != \"\" && newVal != oldVal) {\r\n vm.$validator.validate(cardSecurityCode);\r\n }\r\n });\r\n\r\n Validator.extend(\"validateCreditCardSecurityCode\", {\r\n getMessage(field, args) {\r\n return args[0];\r\n },\r\n validate(value, args) {\r\n if (!value) {\r\n return true;\r\n }\r\n\r\n let cardTypeModel = vm;\r\n cardTypeField.split('.').forEach(level => {\r\n cardTypeModel = cardTypeModel[level];\r\n });\r\n\r\n const visa = \"(?:[0-9]{3})\";\r\n const mastercard = \"(?:[0-9]{3})\";\r\n const americanexpress = \"(?:[0-9]{4})\";\r\n let regex;\r\n if (cardTypeModel) {\r\n switch (cardTypeModel.toLowerCase()) {\r\n case \"visa\":\r\n regex = visa;\r\n break;\r\n case \"mastercard\":\r\n regex = mastercard;\r\n break;\r\n case \"americanexpress\":\r\n regex = americanexpress;\r\n break;\r\n }\r\n }\r\n return RegExp(\"^\" + regex + \"$\").test(value);\r\n }\r\n });\r\n }\r\n});\r\n\r\nValidator.extend(\"validateCreditCardSecurityCode\", () => { return true; });","import Vue from \"vue\";\r\nimport { Validator } from \"@vee-validate-package\";\r\nimport startOfToday from \"date-fns/startOfToday\";\r\nimport subMonths from \"date-fns/subMonths\";\r\nimport isAfter from \"date-fns/isAfter\";\r\n\r\nValidator.extend(\"validateCreditCardExpiration\", {\r\n getMessage(field, args) {\r\n return args[0];\r\n },\r\n validate(value, args) { \r\n let expdate = null;\r\n if (value) {\r\n expdate = new Date(value);\r\n }\r\n var today = subMonths(startOfToday(), 1);//get the previous month because the current month could be a valid expire month \r\n\r\n if (expdate && isAfter(expdate, today)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n});\r\n\r\n","export default {\r\n methods: {\r\n getRegex: function (cardType) {\r\n const visa = \"(?:4[0-9]{12})(?:[0-9]{3})?\";\r\n const mastercard = \"(?:(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12})\";\r\n const americanexpress = \"(?:3[47][0-9]{13})\";\r\n const dinersclub = \"(?:3(?:0[0-5]|[68][0-9])[0-9]{11})\";\r\n const discover = \"(?:6(?:011|5[0-9]{2})(?:[0-9]{12}))\";\r\n const jcb = \"(?:(?:2131|1800|35\\\\d{3})\\\\d{11})\";\r\n const maestro = \"(?:(?:5[0678]\\\\d\\\\d|6304|6390|67\\\\d\\\\d)\\\\d{8,15})\";\r\n let regex = [\r\n visa,\r\n mastercard,\r\n americanexpress,\r\n dinersclub,\r\n discover,\r\n jcb,\r\n maestro,\r\n ].join(\"|\");\r\n\r\n if (cardType) {\r\n switch (cardType.toLowerCase()) {\r\n case \"visa\":\r\n regex = visa;\r\n break;\r\n case \"mastercard\":\r\n regex = mastercard;\r\n break;\r\n case \"americanexpress\":\r\n regex = americanexpress;\r\n break;\r\n case \"dinersclub\":\r\n regex = dinersclub;\r\n break;\r\n case \"discover\":\r\n regex = discover;\r\n break;\r\n case \"jcb\":\r\n regex = jcb;\r\n break;\r\n case \"maestro\":\r\n regex = maestro;\r\n break;\r\n }\r\n }\r\n\r\n return new RegExp(\"^\" + regex + \"$\");\r\n },\r\n isValidCheckSum: function (cardNumber) {\r\n if (/[^0-9-\\s]+/.test(cardNumber)) {\r\n return false;\r\n }\r\n\r\n let nCheck = 0;\r\n let bEven = false;\r\n cardNumber = cardNumber.replace(/\\D/g, \"\");\r\n\r\n for (let n = cardNumber.length - 1; n >= 0; n--) {\r\n let cDigit = cardNumber.charAt(n);\r\n let nDigit = parseInt(cDigit, 10);\r\n\r\n if (bEven) {\r\n if ((nDigit *= 2) > 9) nDigit -= 9;\r\n }\r\n\r\n nCheck += nDigit;\r\n bEven = !bEven;\r\n }\r\n\r\n return (nCheck !== 0) && (nCheck % 10) == 0;\r\n },\r\n validateCreditCard: function (cardNumber, cardType) {\r\n return (this.getRegex(cardType).test(cardNumber) && this.isValidCheckSum(cardNumber));\r\n }\r\n }\r\n};\r\n","import Vue from \"vue\";\r\nimport { Validator } from \"@vee-validate-package\";\r\nimport creditCardUtils from \"../mixins/credit-card-utils\";\r\n\r\nVue.directive(\"validate-credit-card\", {\r\n inserted: function (el, binding, vnode) {\r\n const vm = vnode.context;\r\n const cardTypeField = binding.value;\r\n let cardNumber = el.name;\r\n\r\n vm.$watch(cardTypeField, function (newVal, oldVal) {\r\n if (newVal && newVal != \"\" && newVal != oldVal) {\r\n vm.$validator.validate(cardNumber);\r\n }\r\n });\r\n\r\n Validator.extend(\"validateCreditCard\", {\r\n getMessage(field, args) {\r\n return args[0];\r\n },\r\n validate(value, args) { \r\n if (!value) {\r\n return true;\r\n }\r\n\r\n let cardTypeModel = vm;\r\n cardTypeField.split('.').forEach(level => {\r\n cardTypeModel = cardTypeModel[level];\r\n });\r\n return creditCardUtils.methods.validateCreditCard(value, cardTypeModel);\r\n }\r\n });\r\n }\r\n});\r\n\r\nValidator.extend(\"validateCreditCard\", () => { return true; });\r\n\r\n","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport { Validator } from \"@vee-validate-package\";\r\n\r\nVue.directive(\"postal-code-validator\", {\r\n inserted: function (el, binding, vnode) {\r\n const errorMessage = el.dataset.valCustom;\r\n const vvName = Vue.prototype.getValueFromAttribute(el, \"data-vv-name\");\r\n const field = vnode.context.$validator.fields.find({ name: vvName ? vvName : el.name });\r\n const fieldRules = Object.assign({}, field.rules);\r\n\r\n fieldRules.validatePostalCode = [errorMessage, el];\r\n field.update({ rules: fieldRules });\r\n }\r\n});\r\n\r\nValidator.extend(\"validatePostalCode\", {\r\n getMessage(field, args, data) {\r\n return (data && data.message) ? data.message : args[0];\r\n },\r\n validate(value, args) {\r\n return new Promise(function (resolve) {\r\n const postalCode = value;\r\n const loadingClass = \"loading-indicator\";\r\n const validateApi = \"/api/onlia/adresslookup/validatePostCode\";\r\n let errorText = args[0];\r\n let element = args[1];\r\n let dataset = element.dataset;\r\n\r\n if (postalCode && dataset.oldValue === postalCode && dataset.oldResult != undefined) {\r\n resolve({ valid: dataset.oldResult == \"true\" ? true : false, data: { message: errorText } });\r\n }\r\n else if (postalCode && postalCode.length === 6) {\r\n element.classList.add(loadingClass);\r\n axios.post(validateApi, \"\\\"\" + postalCode + \"\\\"\", { headers: { \"skipLoading\": true, \"Content-Type\": \"application/json\" } })\r\n .then(result => {\r\n element.classList.remove(loadingClass);\r\n if (result.data) {\r\n let data = result.data;\r\n dataset.oldValue = postalCode;\r\n dataset.oldResult = data.IsValid;\r\n if (data.IsValid) {\r\n resolve({ valid: true });\r\n } else {\r\n resolve({ valid: false, data: { message: errorText } });\r\n //if (data.ErrorMessages) {\r\n // errorText = data.ErrorMessages;\r\n // resolve({ valid: false, data: { message: errorText } });\r\n //}\r\n }\r\n }\r\n })\r\n .catch(function (error) {\r\n element.classList.remove(loadingClass);\r\n });\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n}, { immediate: false });","import { Validator } from \"@vee-validate-package\";\r\n\r\nValidator.extend(\"unitNumberValidator\", {\r\n getMessage(field, args) {\r\n return args.message;\r\n },\r\n validate(value, args) {\r\n return args.isValid;\r\n }\r\n});","import { Validator } from \"@vee-validate-package\";\r\n\r\nValidator.extend(\"validateNumberBetween0And100\", {\r\n getMessage(field, args) {\r\n return args[0];\r\n },\r\n validate(value, args) {\r\n const number = parseInt(value);\r\n if (number >= 0 && number <= 100) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n});","import Vue from 'vue';\r\nimport expandAndCollapse from '@Shared/mixins/expand-and-collapse';\r\nimport Components from '../../funnel/utils/FunnelComponentsStates';\r\n\r\nVue.component('premium-discount', {\r\n mixins: [ expandAndCollapse ],\r\n props: {\r\n closedHeading: {\r\n type: String,\r\n required: true\r\n },\r\n openHeading: {\r\n type: String,\r\n required: true\r\n },\r\n storeName: {\r\n type: String,\r\n required: true\r\n },\r\n additionalDiscounts: {\r\n type: Array,\r\n default: () => [],\r\n validator(additionalDiscounts) {\r\n return additionalDiscounts.every(discount => typeof discount === 'string');\r\n }\r\n },\r\n isHidden: {\r\n type: Boolean,\r\n required: true\r\n }\r\n },\r\n data() {\r\n return {\r\n isHiddenManually: false // property is used to hide the discounts when the funnel progress bar on mobile is visible\r\n };\r\n },\r\n computed: {\r\n Model() {\r\n const store = this.$store.state[this.storeName];\r\n return store ? store.model : {};\r\n },\r\n discountsList() {\r\n return [\r\n ...this.Model.DiscountMessages || [],\r\n ...(Array.isArray(this.additionalDiscounts) ? this.additionalDiscounts : [])\r\n ];\r\n }\r\n },\r\n watch: {\r\n isHidden: 'handleIsHidden'\r\n },\r\n created() {\r\n Components.isPremiumDiscountsMounted = true;\r\n this.$eventBus.$on('premiumDiscount:toggleVisibility', this.handleVisibilityChangeEvent);\r\n },\r\n beforeDestroy() {\r\n Components.isPremiumDiscountsMounted = false;\r\n this.$eventBus.$off('premiumDiscount:toggleVisibility', this.handleVisibilityChangeEvent);\r\n },\r\n methods: {\r\n handleVisibilityChangeEvent(isVisible) {\r\n this.isHiddenManually = !isVisible;\r\n },\r\n async handleIsHidden(isHidden) {\r\n if (isHidden && this.isContainerOpen) {\r\n await this.closeContainer();\r\n }\r\n },\r\n async handleContentToggle() {\r\n const { discountItems } = this.$refs;\r\n let onCompleteCallBack = null;\r\n\r\n if (!this.isContainerOpen) {\r\n this._gsapOnStartCallback = () => {\r\n gsap.fromTo(discountItems, {\r\n autoAlpha: 0\r\n }, {\r\n autoAlpha: 1,\r\n duration: 0.4,\r\n ease: 'sine.out',\r\n delay: 0.1,\r\n stagger: {\r\n each: 0.25\r\n // ease: 'power2.out'\r\n }\r\n });\r\n };\r\n\r\n onCompleteCallBack = () => {\r\n this._gsapOnStartCallback = null;\r\n };\r\n }\r\n\r\n await this.toggleContainerHeight(onCompleteCallBack);\r\n },\r\n createChevron(createElement) {\r\n return createElement('drop-down-chevron', {\r\n class: 'm-premiumDiscount__chevron',\r\n props: {\r\n isOpen: this.isContainerOpen,\r\n variant: 'magenta',\r\n iconType: 'myAccount'\r\n }\r\n });\r\n },\r\n createButton(createElement) {\r\n return createElement('onlia-button', {\r\n class: 'm-premiumDiscount__button',\r\n props: {\r\n tag: 'button',\r\n variant: 'none'\r\n },\r\n on: {\r\n click: this.handleContentToggle\r\n }\r\n });\r\n },\r\n createHeading(createElement) {\r\n return createElement('h6', {\r\n class: 'm-premiumDiscount__heading',\r\n domProps: {\r\n innerHTML: this.isContainerOpen ? this.openHeading : this.closedHeading\r\n }\r\n });\r\n },\r\n createHeader(createElement) {\r\n return createElement('header', {\r\n class: 'm-premiumDiscount__header'\r\n }, [\r\n this.createHeading(createElement),\r\n this.createChevron(createElement),\r\n this.createButton(createElement)\r\n ]);\r\n },\r\n createDiscountsList(createElement) {\r\n const discountsEl = this.discountsList.map((discount, index) => (\r\n createElement('li', {\r\n class: 'm-premiumDiscount__item',\r\n ref: 'discountItems',\r\n key: index,\r\n refInFor: true\r\n }, [\r\n createElement('div', { class: 'm-premiumDiscount__icon icon-checkmark-circle' }),\r\n createElement('div', {\r\n class: 'm-premiumDiscount__discount',\r\n domProps: {\r\n innerHTML: discount\r\n }\r\n })\r\n ])\r\n ));\r\n\r\n const discountsContainer = createElement('ul', {\r\n class: 'm-premiumDiscount__discountsList'\r\n }, [ discountsEl ]);\r\n\r\n const wrapperEl = createElement('div', {\r\n class: 'm-premiumDiscount__discountsWrapper',\r\n ref: 'wrapper'\r\n }, [ discountsContainer ]);\r\n\r\n return createElement('div', {\r\n class: 'm-premiumDiscount__discountsContainer',\r\n ref: 'container'\r\n }, [ wrapperEl ]);\r\n }\r\n },\r\n render(createElement) {\r\n if (!this.discountsList.length || this.isHiddenManually) return null;\r\n\r\n const contentContainerEl = createElement('div', {\r\n class: 'm-premiumDiscount__contentContainer'\r\n }, [\r\n this.createHeader(createElement),\r\n this.createDiscountsList(createElement)\r\n ]);\r\n\r\n const backgroundEl = createElement('div', { class: 'm-premiumDiscount__background' });\r\n\r\n return createElement('section', {\r\n class: [ 'm-premiumDiscount', { '-hidden': this.isHidden } ]\r\n }, [ backgroundEl, contentContainerEl ]);\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport api from \"../mixins/api\";\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component('shopping-basket-card', {\r\n mixins: [api],\r\n props: {\r\n renderReady: Boolean,\r\n policyItemBinding: Object,\r\n index: Number,\r\n repeatedItem: Object\r\n },\r\n\r\n data() {\r\n return {\r\n isBlockOpen: false,\r\n displayOptions: {}\r\n };\r\n },\r\n\r\n methods: {\r\n updatePolicy(cardId, policyId) {\r\n const vm = this;\r\n const updateParams = {\r\n cardId: cardId,\r\n policyId: policyId\r\n };\r\n axios.post(vm.api.getMutationUrl, updateParams)\r\n .then(result => {\r\n if (result.data) {\r\n UnsavedChangesPopup.redirect(result.data);\r\n }\r\n });\r\n }\r\n },\r\n\r\n watch: {\r\n \"isBlockOpen\": function (newVal, oldVal) {\r\n this.$root.$emit(\"update-float-total-block\");\r\n }\r\n }\r\n})\r\n","import Vue from 'vue';\r\nimport totalPremium from '@Shared/mixins/total-premium';\r\nimport totalPremiumUtils from \"../mixins/total-premium-utils\";\r\n\r\nVue.component('shopping-basket-checkout-total-premium', {\r\n mixins: [totalPremium, totalPremiumUtils],\r\n\r\n props: {\r\n storeName: String\r\n },\r\n\r\n data() {\r\n return {\r\n renderReady: false\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n }\r\n});\r\n","import Vue from \"vue\";\r\n\r\nVue.component('shopping-basket-container', {\r\n\r\n data() {\r\n return {\r\n stylesReady: false\r\n };\r\n },\r\n\r\n beforeCreate() {\r\n import(/* webpackChunkName: 'styles.forms' */ \"@Styles/forms\")\r\n .then(() => {\r\n this.stylesReady = true;\r\n });\r\n }\r\n})","import Vue from 'vue';\r\n\r\nVue.component('shopping-basket-coverages-card', {\r\n props : {\r\n policyItemBinding : Object,\r\n backOfficeCode : String,\r\n summaryLimitAmountLabelPerCoverages : Object\r\n },\r\n\r\n data() {\r\n return {\r\n isBlockOpen : false\r\n };\r\n },\r\n\r\n computed : {\r\n VisibleCoverages() {\r\n return this.policyItemBinding.PolicyModel.Coverages.filter(coverage => coverage.GroupBackOfficeCode == this.backOfficeCode);\r\n }\r\n },\r\n\r\n watch : {\r\n isBlockOpen : function () {\r\n this.$root.$emit('update-float-total-block');\r\n }\r\n },\r\n\r\n methods : {\r\n toggleBlock() {\r\n this.isBlockOpen = !this.isBlockOpen;\r\n }\r\n }\r\n});\r\n","import Vue from 'vue';\r\n\r\nVue.component('shopping-basket-empty-set', {\r\n props: {\r\n basketItems: Number\r\n },\r\n\r\n computed: {\r\n isEmptyBasket() {\r\n return this.basketItems == 0;\r\n }\r\n },\r\n\r\n created() {\r\n this.$root.$on('Broadcast::IsEmptyBasketSet', (data) => {\r\n this.basketItems = data;\r\n });\r\n },\r\n\r\n mounted() {\r\n this.$root.$emit('Broadcast::UpdateShoppingBasketCount', this.basketItems);\r\n },\r\n \r\n render() {\r\n if (this.isEmptyBasket) {\r\n return this.$scopedSlots.default();\r\n }\r\n return null;\r\n }\r\n});\r\n","import Vue from \"vue\";\r\nimport api from \"../mixins/api\";\r\n\r\nVue.component('shopping-basket-funnel', {\r\n mixins: [api],\r\n props: {\r\n model: Object,\r\n basketCount: Number\r\n },\r\n data() {\r\n return {\r\n Model: {},\r\n Funnel: {\r\n \"Api\": \"ShoppingBasketApi\"\r\n },\r\n funnelProperties: {},\r\n funnelMethods: {}\r\n };\r\n },\r\n created() {\r\n const vm = this;\r\n vm.storeName = vm.$options._componentTag;\r\n\r\n vm.$store.registerModule(vm.storeName, {\r\n namespaced: true,\r\n\r\n state: {\r\n model: vm.model\r\n },\r\n\r\n mutations: {\r\n mutate(state, payload) {\r\n state.model = payload;\r\n }\r\n }\r\n });\r\n\r\n vm.Model = vm.$store.state[vm.storeName].model;\r\n },\r\n\r\n mounted() {\r\n this.$root.$emit(\"Broadcast::UpdateShoppingBasketCount\", this.basketCount);\r\n }\r\n})","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport api from \"../mixins/api\";\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component('shopping-basket-new-insurance', {\r\n mixins: [api],\r\n\r\n props: {\r\n storeName: String,\r\n insuranceProduct: String\r\n },\r\n\r\n data() {\r\n return {\r\n showModal: false,\r\n addPolicyAhaModal: 'Modal.AddPolicyAhaLightbox',\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n const store = this.$store.state[this.storeName];\r\n if (!store) return {};\r\n return this.$store.state[this.storeName].model;\r\n },\r\n isDisabled: function () {\r\n return this.errors.items.length > 0;\r\n }\r\n },\r\n\r\n methods: {\r\n showAddInsuranceModal(event) {\r\n const vm = this;\r\n event.preventDefault();\r\n\r\n if (!vm.isDisabled) {\r\n vm.saveEffectiveDate(() => {\r\n vm.showModal = true;\r\n vm.resetModalState();\r\n vm.$root.$emit('dynamic::modal::show', 'dmAddInsurance');\r\n });\r\n }\r\n },\r\n\r\n addInsurance(event, link) {\r\n const vm = this;\r\n event.preventDefault();\r\n this.$globalModal.show(this.addPolicyAhaModal);\r\n //if (!vm.isDisabled) {\r\n // vm.saveEffectiveDate(() => UnsavedChangesPopup.redirect(link));\r\n //}\r\n },\r\n\r\n saveEffectiveDate(callback) {\r\n const vm = this;\r\n const requestParams = {\r\n EffectiveDate: vm.Model.EffectiveDate\r\n };\r\n let dataLayer = window.dataLayer || [];\r\n dataLayer.push({\r\n \"event\": \"Funnel\",\r\n \"category\": \"Funnel\",\r\n \"action\": vm.insuranceProduct+\" Quote - funnel\",\r\n \"label\": \"Flow start\"\r\n });\r\n\r\n\r\n axios.post(vm.api.saveEffectiveDate, requestParams) //, { headers: { \"skipLoading\": \"true\" } }\r\n .then(result => {\r\n callback();\r\n });\r\n },\r\n\r\n resetModalState() {\r\n const vm = this;\r\n Vue.nextTick(() => {\r\n vm.showModal = false;\r\n });\r\n },\r\n\r\n showDisabledInsuranceModal(event) {\r\n const vm = this;\r\n event.preventDefault();\r\n\r\n vm.showModal = true;\r\n vm.resetModalState();\r\n }\r\n }\r\n})","import Vue from \"vue\";\r\nimport axios from \"axios\";\r\nimport api from \"../mixins/api\";\r\nimport { hideElement, showElement } from '@Shared/utils/dom-utils';\r\nimport { getElementTop } from '@Shared/utils/get-element-top';\r\nimport { scrollPage } from '@Shared/utils/scroll-page';\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\n\r\nconst PAYMENT_SUMMARY_TOGGLE_ID = 'paymentSummaryToggle';\r\n\r\nVue.component('shopping-basket-payment', {\r\n mixins: [api],\r\n inject: [\"$validator\"],\r\n\r\n props: {\r\n storeName: String,\r\n beforeSubmitQueue: Function\r\n },\r\n\r\n data() {\r\n return {\r\n showMvrData: false,\r\n summaryOpen: true,\r\n paymentOpen: false\r\n };\r\n },\r\n\r\n computed: {\r\n navHeaderHeight() {\r\n return this.$store.getters['currentHeaderHeight'];\r\n },\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n paymentSummaryToggleId() {\r\n return PAYMENT_SUMMARY_TOGGLE_ID;\r\n }\r\n },\r\n\r\n watch: {\r\n summaryOpen: {\r\n handler() {\r\n this.$eventBus.$emit('contentToggle:toggle', PAYMENT_SUMMARY_TOGGLE_ID, null, this._animateNextToggle);\r\n this._animateNextToggle = true;\r\n }\r\n },\r\n },\r\n\r\n created() {\r\n this.trSessionId = null;\r\n this._animateNextToggle = true;\r\n },\r\n\r\n mounted() {\r\n this.initializeTransUnion();\r\n this.registerBeforeSubmitFunction();\r\n\r\n this.paymentSubmitButton = document.querySelectorAll('#stepButtons .Step__button--submit, #stepInfoMessageLink');\r\n this.toggleSubmitButton();\r\n },\r\n\r\n methods: {\r\n initializeTransUnion() {\r\n const vm = this;\r\n const intervalTimeout = 500;\r\n const intervalId = setInterval(() => {\r\n if (typeof TrustevV2 !== \"undefined\") {\r\n clearInterval(intervalId);\r\n\r\n TrustevV2.Init(ir.transUnionPublicKey, function (sessionId) {\r\n vm.trSessionId = sessionId;\r\n vm.Model.Payment.TransUnionSessionId = vm.trSessionId;\r\n });\r\n }\r\n }, intervalTimeout);\r\n },\r\n\r\n toggleSections() {\r\n this.summaryOpen = !this.summaryOpen;\r\n this.paymentOpen = !this.paymentOpen;\r\n\r\n this.toggleSubmitButton();\r\n },\r\n\r\n openPaymentTab() {\r\n if (this.showMvrData) {\r\n this.$eventBus.$emit('step:submit-step');\r\n return;\r\n }\r\n\r\n if (this.$el) {\r\n var top = getElementTop(this.$el) - this.navHeaderHeight;\r\n scrollPage(top);\r\n };\r\n\r\n this.toggleSections();\r\n\r\n setTimeout(function () {\r\n let firstInput = document.querySelector(\".o-paymentCheckoutToggle input\");\r\n if (firstInput) firstInput.focus(); \r\n }, 300);\r\n\r\n },\r\n\r\n toggleSubmitButton() {\r\n if (this.paymentSubmitButton) {\r\n if (this.summaryOpen) {\r\n hideElement(this.paymentSubmitButton);\r\n }\r\n else {\r\n showElement(this.paymentSubmitButton);\r\n }\r\n }\r\n },\r\n\r\n registerBeforeSubmitFunction() {\r\n const vm = this;\r\n vm.beforeSubmitQueue(callback => {\r\n vm.$root.$emit('validate-all');\r\n vm.$validator.validate().then(valid => {\r\n if (vm.$validator.errors.items.length > 0) {\r\n Vue.prototype.handleInvalidForm(vm);\r\n } else if (valid) {\r\n vm.callStoreNewProductsService(callback);\r\n } else {\r\n Vue.prototype.handleInvalidForm(vm);\r\n }\r\n });\r\n });\r\n },\r\n\r\n callStoreNewProductsService(callback) {\r\n const vm = this;\r\n\r\n axios.post(vm.api.callStoreNewProductsService, { ...vm.Model.Payment })\r\n .then(response => {\r\n const data = response.data;\r\n if (data.Result.IsHighRisk) {\r\n UnsavedChangesPopup.redirect(data.Result.RedirectUrl);\r\n return;\r\n }\r\n\r\n if (!data.Result.HasPremiumImpact) {\r\n vm.Model.Payment.showedMvr = false;\r\n callback();\r\n }\r\n else {\r\n var mvrResponse = data.Result;\r\n\r\n if (!vm.showMvrData) {\r\n vm.showMvrData = true;\r\n vm._animateNextToggle = false;\r\n vm.toggleSections();\r\n //vm.$root.$emit(\"Broadcast::ShowMvrData\", vm.showMvrData);\r\n\r\n let paymentExplanationData = {\r\n Policies: mvrResponse.Policies,\r\n MessageContent: mvrResponse.MessageContent,\r\n OldTotalPremium: mvrResponse.OldTotalPremium,\r\n NewTotalPremium: mvrResponse.NewTotalPremium,\r\n }\r\n\r\n vm.$root.$emit(\"Broadcast::PaymentExplanationMvrData\", paymentExplanationData);\r\n\r\n vm.Model.Payment.MessageCode = mvrResponse.MessageCode;\r\n vm.Model.TotalPremiumBlockAmount = mvrResponse.TotalPremiumBlockAmount;\r\n vm.Model.TotalPrePaymentForFirstMonthAmount = mvrResponse.TotalPrePaymentForFirstMonthAmount;\r\n vm.Model.TotalPrePaymentForSecondMonthAmount = mvrResponse.TotalPrePaymentForSecondMonthAmount;\r\n vm.Model.TotalForFirstPaymentAmount = mvrResponse.TotalForFirstPaymentAmount;\r\n vm.Model.PolicyIsActivatedInSameMonth = mvrResponse.PolicyIsActivatedInSameMonth;\r\n vm.Model.FirstBillDate = mvrResponse.FirstBillDate;\r\n\r\n window.scrollTo(0, 0);\r\n\r\n vm.Model.Payment.showedMvr = true;\r\n } else {\r\n callback();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n})\r\n","import Vue from 'vue';\r\nimport axios from 'axios';\r\nimport api from '../mixins/api';\r\nimport ecommerceTracking from '../../products/shared/mixins/ecommerce-tracking';\r\nimport slotUtils from '@Shared/mixins/slot-utils';\r\nimport { UnsavedChangesPopup } from \"@Shared/utils/UnsavedChangesPopup\";\r\n\r\nVue.component('shopping-basket-policy', {\r\n mixins: [ api, ecommerceTracking, slotUtils ],\r\n\r\n props: {\r\n renderReady: Boolean,\r\n policyId: String,\r\n policyIndex: Number,\r\n policyItemBinding: Object,\r\n isChanged: {\r\n type: Boolean,\r\n default: false\r\n },\r\n initialCardOpenState: Boolean,\r\n shoppingBasketDataSource: String,\r\n removePolicyModalUrl: String,\r\n showDetailsText: {\r\n type: String,\r\n required: true\r\n },\r\n hideDetailsText: {\r\n type: String,\r\n required: true\r\n },\r\n canceledPolicyStatus: {\r\n type: String,\r\n default: null\r\n }\r\n },\r\n\r\n data() {\r\n return {\r\n isCardOpen: this.initialCardOpenState || false,\r\n removePolicyModalId: (this.isChanged ? 'dmRemoveChangedInsurance' : 'dmRemoveInsurance') + this.policyIndex\r\n };\r\n },\r\n\r\n computed: {\r\n Model: function () {\r\n return this.policyItemBinding;\r\n },\r\n productIconClass() {\r\n if (this.isCancellation) {\r\n return 'icon-cancel-policy';\r\n }\r\n if (this.isChanged) {\r\n return 'icon-change-policy';\r\n }\r\n return /(property)/i.test(this.policyItemBinding.ProductName) ? 'icon-home' : 'icon-car';\r\n },\r\n toggleContentButtonLabel() {\r\n return this.isCardOpen ? this.hideDetailsText : this.showDetailsText;\r\n },\r\n isMobile() {\r\n return this.$store.getters.breakpointMobile;\r\n },\r\n slotProps() {\r\n return {\r\n policyItemBinding: this.policyItemBinding,\r\n renderReady: this.renderReady,\r\n Model: this.Model,\r\n productIconClass: this.productIconClass,\r\n toggleContentButtonLabel: this.toggleContentButtonLabel,\r\n isMobile: this.isMobile,\r\n togglePolicy: this.togglePolicy,\r\n removePolicyFromShoppingBasket: this.removePolicyFromShoppingBasket,\r\n removePolicy: this.removePolicy,\r\n goToNewPolicyPage: this.goToNewPolicyPage,\r\n redirectToDetailsPage: this.redirectToDetailsPage,\r\n handleModalEvent: this.handleModalEvent\r\n };\r\n },\r\n isCancellation() {\r\n const policyStatus = this.policyItemBinding.PolicyModel.PolicyStatus;\r\n return policyStatus && policyStatus === this.canceledPolicyStatus;\r\n }\r\n },\r\n\r\n mounted() {\r\n this.$eventBus.$on(this.$globalModal.events.ok, this.handleModalEvent);\r\n },\r\n beforeDestroy() {\r\n this.$eventBus.$off(this.$globalModal.events.ok, this.handleModalEvent);\r\n },\r\n\r\n methods: {\r\n togglePolicy(event) {\r\n this.isCardOpen = !this.isCardOpen;\r\n this.$root.$emit('update-float-total-block');\r\n },\r\n removePolicyFromShoppingBasket(event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.$root.$emit('dynamic::modal::show', this.removePolicyModalId);\r\n },\r\n\r\n removePolicy(policyId) {\r\n const vm = this;\r\n const apiParams = {\r\n PolicyId: policyId,\r\n PageUrl: window.location.pathname.substring(0, 1) === \"/\"\r\n ? window.location.pathname.substring(1)\r\n : window.location.pathnam\r\n };\r\n const apiUrl = vm.isChanged ? vm.api.removeChangedPolicy : vm.api.removePolicy;\r\n\r\n axios.post(apiUrl, apiParams)\r\n .then((result) => {\r\n const data = result.data;\r\n\r\n if (result.data) {\r\n if (vm.policyItemBinding.PolicyModel.BasketCount === 1){\r\n UnsavedChangesPopup.stop();\r\n } \r\n\r\n if (vm.isChanged && !data.HasAnyPolicies) {\r\n UnsavedChangesPopup.redirect(data.RedirectUrl);\r\n }\r\n else {\r\n // if (window.location.href.indexOf('fsid') == -1) {\r\n // window.location.reload();\r\n // }\r\n // else {\r\n UnsavedChangesPopup.redirect(window.location.href.substring(0, window.location.href.indexOf('fsid') - 1));\r\n // }\r\n }\r\n }\r\n });\r\n },\r\n\r\n goToNewPolicyPage(id) {\r\n const vm = this;\r\n const apiParams = {\r\n PolicyId: id,\r\n DataSourceId: vm.shoppingBasketDataSource\r\n };\r\n\r\n axios.post(vm.api.goToNewPolicyPage, apiParams)\r\n .then((result) => {\r\n if (result.data) {\r\n UnsavedChangesPopup.redirect(result.data.url);\r\n }\r\n });\r\n },\r\n\r\n redirectToDetailsPage(lightboxId, dataSourceId, stringChanged) {\r\n //var policy = $scope.Model.ExistingPolicies[index];\r\n const policy = this.Model;\r\n if (stringChanged != 'changed' && policy.ProductName == 'Property' && lightboxId != '') {\r\n this.$root.$emit('dynamic::modal::show', lightboxId);\r\n return;\r\n }\r\n\r\n if (policy != null && policy.PolicyModel.DetailsPage && policy.PolicyModel.DetailsPage != '') {\r\n axios.post(this.api.setCurrentPolicy, {\r\n dataSourceId: dataSourceId,\r\n policyId: policy.PolicyModel.InternalPolicyId,\r\n productName: policy.ProductName,\r\n pathInfo: stringChanged\r\n }).then((response) => {\r\n UnsavedChangesPopup.redirect(policy.PolicyModel.DetailsPage);\r\n });\r\n }\r\n },\r\n\r\n handleModalEvent({ id }) {\r\n if (this.removePolicyModalId === id && this.policyId) {\r\n this.removePolicy(this.policyId);\r\n }\r\n }\r\n },\r\n\r\n render() {\r\n return this.getSlot('default', this.slotProps);\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport { capitalizeString } from '@Shared/utils/basic-functions';\r\nimport GoogleAnalytics from '@Shared/utils/GoogleAnalytics';\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component('shopping-basket-product-select', {\r\n props: {\r\n href: {\r\n type: String,\r\n required: true\r\n },\r\n title: {\r\n type: String,\r\n required: true\r\n },\r\n body: {\r\n type: String,\r\n default: ''\r\n },\r\n isBundle: {\r\n type: Boolean,\r\n default: false\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n\r\n modalId: {\r\n type: String,\r\n default: ''\r\n },\r\n insuranceProductType: {\r\n type: String,\r\n required: true\r\n },\r\n productSubtype: {\r\n type: String,\r\n required: false\r\n },\r\n clickHandlerName: {\r\n type: String,\r\n required: true,\r\n validator(clickHandler) {\r\n return /(openModal|redirectToProduct|disabledClick)/.test(clickHandler);\r\n }\r\n },\r\n\r\n /**\r\n * When variant is emptyCart, the button will render in the style of empty cart: magenta background.\r\n * When variant is addToCart, the button will render in the style of 'add another product': plug icon, blue\r\n * background line\r\n */\r\n variant: {\r\n type: String,\r\n required: true,\r\n validator(variant) {\r\n return /^(emptyCart|addToCart|addToCart -versionTwo)$/.test(variant);\r\n }\r\n }\r\n },\r\n computed: {\r\n isEmptyCart() {\r\n return this.variant === 'emptyCart';\r\n },\r\n isAddToCartVersionTwo() {\r\n return this.variant === 'addToCart -versionTwo'\r\n },\r\n productIconClass() {\r\n if (this.isAddToCartVersionTwo) { \r\n if (this.insuranceProductType === 'auto') {\r\n return 'icon-new-auto'\r\n } else if (this.insuranceProductType === 'property') {\r\n if (this.productSubtype === \"seasonal\") {\r\n return 'icon-additional-seasonal'\r\n }\r\n else if (this.productSubtype === \"landlord\") {\r\n return 'icon-additional-landlord'\r\n }\r\n else {\r\n return 'icon-primary-home'\r\n }\r\n }\r\n } else {\r\n return this.insuranceProductType === 'auto' ? 'icon-car' : 'icon-home';\r\n }\r\n },\r\n gtmAttributes() {\r\n const buttonType = this.variant === 'emptyCart' ? 'Tile' : 'Add';\r\n\r\n return {\r\n 'data-gtm-event': 'gtm.click',\r\n 'data-gtm-category': 'User Interaction',\r\n 'data-gtm-action': `Component Button ${buttonType}`,\r\n 'data-gtm-label': this.title\r\n };\r\n }\r\n },\r\n methods: {\r\n openModal(event) {\r\n event.preventDefault();\r\n\r\n this.triggerTrackingEvent(() => {\r\n this.$root.$emit('dynamic::modal::show', this.modalId);\r\n });\r\n },\r\n\r\n redirectToProduct(event) {\r\n event.preventDefault();\r\n\r\n this.triggerTrackingEvent(() => UnsavedChangesPopup.redirect(this.href));\r\n },\r\n\r\n disabledClick(event) {\r\n event.preventDefault();\r\n },\r\n\r\n triggerTrackingEvent(callback) {\r\n GoogleAnalytics.push({\r\n event: 'Funnel',\r\n category: 'Funnel',\r\n action: `${capitalizeString(this.insuranceProductType)} Quote - funnel`,\r\n label: 'Flow start'\r\n });\r\n\r\n callback();\r\n },\r\n getSlot(name) {\r\n const slot = this.$scopedSlots[name];\r\n\r\n return (typeof slot === 'function' ? slot() : null);\r\n },\r\n createBlueLine(createElement) {\r\n if (this.isEmptyCart || this.isAddToCartVersionTwo) return null;\r\n\r\n return createElement('div', { class: 'a-productSelect__blueLine' });\r\n },\r\n createIcon(createElement) {\r\n // if (this.isEmptyCart) return null;\r\n\r\n const iconEl = createElement('product-icon', {\r\n props: {\r\n iconClassName: this.productIconClass\r\n },\r\n class: 'a-productSelect__productIcon'\r\n });\r\n\r\n return createElement('div', {\r\n class: 'a-productSelect__productIconContainer'\r\n }, [ iconEl, this.getSlot('image') ]);\r\n },\r\n createImage(createElement) {\r\n // const iconEl = this.createIcon(createElement);\r\n\r\n return createElement('div', {\r\n class: 'a-productSelect__imageContainer',\r\n attrs: {\r\n tabindex: -1\r\n }\r\n }, this.getSlot('image'));\r\n },\r\n createTextContent(createElement) {\r\n const titleEl = createElement('h2', {\r\n class: 'a-productSelect__title h5',\r\n domProps: {\r\n innerHTML: this.title\r\n }\r\n });\r\n\r\n const bodyEl = this.body ?\r\n createElement('div', {\r\n class: 'a-productSelect__body',\r\n domProps: {\r\n innerHTML: this.body\r\n }\r\n }) :\r\n null;\r\n\r\n return createElement('div', {\r\n class: 'a-productSelect__textContainer',\r\n attrs: {\r\n tabindex: -1\r\n }\r\n }, [ titleEl, bodyEl ]);\r\n },\r\n createPlusIcon(createElement) {\r\n if (this.isEmptyCart) return null;\r\n\r\n if (this.isAddToCartVersionTwo) {\r\n const labelEl = createElement('h5', {\r\n class: 'a-productSelect__addLabel',\r\n domProps: {\r\n innerHTML: 'ADD'\r\n }\r\n });\r\n return createElement('div', {\r\n class: 'a-productSelect__plusIconContainer icon-expand-plus'\r\n }, [labelEl]);\r\n }\r\n\r\n return createElement('div', {\r\n class: 'a-productSelect__plusIconContainer icon-expand-plus'\r\n });\r\n },\r\n createOutline(createElement) {\r\n return createElement('div', {\r\n class: 'a-productSelect__outline',\r\n attrs: {\r\n tabindex: -1\r\n }\r\n });\r\n },\r\n createDisabledContent(createElement) {\r\n const slotContent = this.getSlot('disabled');\r\n\r\n if (!slotContent) return null;\r\n\r\n const hasNonFunctionalClick = this.clickHandlerName === 'disabledClick';\r\n\r\n const buttonEl = createElement(hasNonFunctionalClick ? 'div' : 'onlia-button', {\r\n props: {\r\n tag: 'button',\r\n variant: 'none'\r\n },\r\n class: 'a-productSelect__disabledButton',\r\n on: {\r\n click: this[this.clickHandlerName]\r\n }\r\n }, slotContent);\r\n\r\n return createElement('div', {\r\n class: 'a-productSelect__disabledContainer'\r\n }, [ buttonEl ]);\r\n }\r\n },\r\n render(createElement) {\r\n const imageEl = this.isEmptyCart ? this.createImage(createElement) : this.createIcon(createElement);\r\n\r\n const disabledContent = this.createDisabledContent(createElement);\r\n\r\n const content = [\r\n this.createBlueLine(createElement),\r\n imageEl,\r\n this.createTextContent(createElement),\r\n this.createPlusIcon(createElement),\r\n this.createOutline(createElement),\r\n disabledContent\r\n ];\r\n\r\n const data = {\r\n class: [\r\n 'a-productSelect',\r\n `-${this.variant}`,\r\n {\r\n '-bundle': this.isBundle,\r\n '-disabled': this.disabled,\r\n '-clickable': (this.disabled && !disabledContent)\r\n }\r\n ],\r\n attrs: {\r\n ...this.gtmAttributes,\r\n ...(!disabledContent && {\r\n href: this.href\r\n })\r\n },\r\n on: {\r\n ...(!disabledContent && { click: this[this.clickHandlerName] })\r\n }\r\n };\r\n\r\n return createElement(disabledContent ? 'div' : 'a', data, content);\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport totalPremium from '@Shared/mixins/total-premium';\r\nimport totalPremiumUtils from '../mixins/total-premium-utils';\r\n\r\nVue.component('shopping-basket-summary-premium', {\r\n mixins: [totalPremium, totalPremiumUtils],\r\n\r\n props: {\r\n storeName: String\r\n },\r\n\r\n data() {\r\n return {\r\n renderReady: false,\r\n isPaymentPerMonth: true,\r\n pushOnBeforeSubmitQueue: undefined //needed for ecommerce component\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n const store = this.$store.state[this.storeName];\r\n return store ? store.model : { PremiumFrequency: '' };\r\n }\r\n },\r\n\r\n mounted() {\r\n this.$root.$on('Broadcast::ShoppingBasketLoaded', () => {\r\n this.calculateInitialTotal();\r\n this.renderReady = true;\r\n });\r\n },\r\n\r\n methods: {\r\n calculateInitialTotal() {\r\n this.calculateTotal(this.Model, this.isPaymentPerMonth);\r\n },\r\n\r\n onPaymentFrequencyChange: function (checked) {\r\n this.isPaymentPerMonth = (checked == '1');\r\n this.recalculate();\r\n },\r\n\r\n onApplicableTaxesChange: function () {\r\n this.Model.ApplicableTaxesIncluded = !this.Model.ApplicableTaxesIncluded;\r\n this.recalculate();\r\n },\r\n\r\n recalculate() {\r\n const vm = this;\r\n vm.calculateTotal(vm.Model, vm.isPaymentPerMonth);\r\n\r\n vm.$root.$emit('Broadcast::TotalPremiumSet',\r\n {\r\n PremiumFrequency: vm.isPaymentPerMonth ? '1' : '0',\r\n ApplicableTaxesIncluded: vm.Model.ApplicableTaxesIncluded\r\n });\r\n }\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport axios from 'axios';\r\nimport api from '../mixins/api';\r\nimport { mvr as mvrModule } from '@Store';\r\nimport { UnsavedChangesPopup } from '@Shared/utils/UnsavedChangesPopup';\r\n\r\nVue.component('shopping-basket-summary', {\r\n mixins: [api],\r\n\r\n props: {\r\n storeName: String,\r\n beforeSubmitQueue: Function,\r\n isLastStep: Boolean,\r\n modalPipedaId: String,\r\n modalOpcfId: String,\r\n modalMvrImpactId: String,\r\n modalVinBlockedId: String\r\n },\r\n\r\n data() {\r\n return {\r\n renderReady: false,\r\n submitCallback: Function,\r\n stepCallback: Function\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n created() {\r\n this.$store.registerModule('mvr', mvrModule);\r\n },\r\n\r\n mounted() {\r\n const vm = this;\r\n vm.$root.$on('Broadcast::ShoppingBasketLoaded', (data) => {\r\n vm.renderReady = true;\r\n //vm.calculateTotal(vm.Model, vm.isPaymentPerMonth);\r\n });\r\n\r\n vm.setSubmitQueue();\r\n vm.registerPipedaCloseEvent();\r\n vm.registerMvrModalEvent();\r\n vm.registerOPCFCloseEvent();\r\n },\r\n\r\n methods: {\r\n setSubmitQueue() {\r\n const vm = this;\r\n vm.beforeSubmitQueue((callback) => {\r\n vm.submitCallback = vm.isLastStep ? vm.loggedInUserCallback : callback;\r\n vm.stepCallback = vm.isLastStep ? callback : null;\r\n\r\n if (vm.Model.HasBlockedVIN) { //Show Blocked Vin Error Message if any\r\n this.$globalModal.show(this.modalVinBlockedId);\r\n }\r\n else {\r\n this.$globalModal.show(this.modalPipedaId); //Show Pipeda modal\r\n }\r\n });\r\n },\r\n\r\n registerPipedaCloseEvent() {\r\n const vm = this;\r\n this.$eventBus.$on(this.$globalModal.events.hide, ({ id }) => {\r\n if (vm.modalPipedaId === id && vm.Model.Pipeda.IsAccepted) {\r\n axios.post(vm.api.savePipeda)\r\n .then((response) => {\r\n vm.submitCallback(vm.stepCallback);\r\n });\r\n }\r\n });\r\n },\r\n registerOPCFCloseEvent() {\r\n const vm = this;\r\n this.$eventBus.$on(this.$globalModal.events.hide, ({ id, trigger }) => {\r\n if (vm.modalOpcfId === id && trigger !== 'close' &&vm.Model.OPCF.IsAccepted) {\r\n vm.submitCallback(vm.stepCallback); \r\n }\r\n });\r\n },\r\n\r\n registerMvrModalEvent() {\r\n const vm = this;\r\n this.$eventBus.$on(this.$globalModal.events.hide, ({ id, trigger }) => {\r\n if (this.modalMvrImpactId === id) {\r\n if (trigger === 'ok') {\r\n vm.confirmMvrOverride();\r\n }\r\n else {\r\n vm.Model.Pipeda.IsAccepted = false;\r\n }\r\n }\r\n });\r\n },\r\n\r\n loggedInUserCallback(callback) {\r\n const vm = this;\r\n const serviceData = {};\r\n\r\n axios.post(vm.api.callStoreNewProductsService, { ...serviceData })\r\n .then((response) => {\r\n const data = response.data;\r\n\r\n if (!!data.Result && !!data.Result.IsHighRisk) {\r\n UnsavedChangesPopup.redirect(data.Result.RedirectUrl);\r\n return;\r\n }\r\n\r\n if (!data.Result.HasPremiumImpact) {\r\n callback();\r\n }\r\n else {\r\n const { Policies, MessageContent, OldTotalPremium, NewTotalPremium, MessageCode } = data.Result;\r\n\r\n this.$store.commit('setMVR', {\r\n Policies,\r\n MessageContent,\r\n OldTotalPremium,\r\n NewTotalPremium,\r\n MessageCode\r\n });\r\n\r\n this.$root.$emit('dynamic::modal::show', this.modalMvrImpactId);\r\n }\r\n });\r\n },\r\n\r\n confirmMvrOverride() {\r\n const vm = this;\r\n const serviceData = {};\r\n serviceData.MessageCode = this.$store.state.mvr.MessageCode;\r\n\r\n axios.post(vm.api.callStoreNewProductsService, { ...serviceData })\r\n .then((result) => {\r\n const data = result.data;\r\n if (data) {\r\n vm.stepCallback();\r\n }\r\n });\r\n },\r\n\r\n ecommerceTrack() {\r\n //TODO:\r\n return true;\r\n }\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport totalPremium from '@Shared/mixins/total-premium';\r\nimport totalPremiumUtils from '../mixins/total-premium-utils';\r\n\r\nVue.component('shopping-basket-total-premium', {\r\n mixins: [ totalPremium, totalPremiumUtils ],\r\n\r\n props: {\r\n storeName: String,\r\n renderReady: Boolean\r\n },\r\n\r\n data() {\r\n return {\r\n isLoaded: false,\r\n isPaymentPerMonth: true,\r\n pushOnBeforeSubmitQueue: undefined //needed for ecommerce child component\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n }\r\n },\r\n\r\n watch: {\r\n renderReady() {\r\n if (this.renderReady && !this.isLoaded) {\r\n this.calculateInitialTotal();\r\n this.isLoaded = true;\r\n }\r\n }\r\n },\r\n\r\n created() {\r\n this.recalculate();\r\n },\r\n mounted() {\r\n this.$root.$on('Broadcast::ShoppingBasketLoaded', this.recalculate);\r\n },\r\n beforeDestroy() {\r\n this.$root.$off('Broadcast::ShoppingBasketLoaded');\r\n },\r\n\r\n methods: {\r\n calculateInitialTotal() {\r\n this.calculateTotal(this.Model, this.isPaymentPerMonth);\r\n },\r\n\r\n onPaymentFrequencyChange(checked) {\r\n this.isPaymentPerMonth = (checked == '1');\r\n this.recalculate();\r\n },\r\n\r\n onApplicableTaxesChange() {\r\n this.Model.ApplicableTaxesIncluded = !this.Model.ApplicableTaxesIncluded;\r\n this.recalculate();\r\n },\r\n\r\n recalculate() {\r\n const vm = this;\r\n vm.calculateTotal(vm.Model, vm.isPaymentPerMonth);\r\n\r\n vm.$root.$emit('Broadcast::TotalPremiumSet', {\r\n PremiumFrequency: vm.isPaymentPerMonth ? '1' : '0',\r\n ApplicableTaxesIncluded: vm.Model.ApplicableTaxesIncluded\r\n });\r\n }\r\n }\r\n});\r\n","import Vue from 'vue';\r\nimport axios from 'axios';\r\nimport api from '../mixins/api';\r\nimport isSameDay from 'date-fns/isSameDay';\r\nimport { IS_DEV, PAGE_LOAD_TIMEOUT } from '@Shared/settings';\r\nimport { mvr as mvrModule } from '@Store';\r\nimport { wait } from '@Shared/utils/basic-functions';\r\nimport PageLoadUtil from '../../funnel/utils/page-load-util';\r\nimport { UnsavedChangesPopup } from \"@Shared/utils/UnsavedChangesPopup\";\r\n\r\nVue.component('shopping-basket', {\r\n mixins: [api],\r\n inject: ['$validator'],\r\n\r\n props: {\r\n model: Object,\r\n storeName: String,\r\n initialItemsCount: Number,\r\n shoppingBasketDataSource: String,\r\n isShoppingBasketSummary: Boolean,\r\n callPremiumOnSummary: Boolean,\r\n productIcons: Array,\r\n modalMvrImpactId: String,\r\n modalConfirmationId: String,\r\n removePolicyModal: String,\r\n modalOpcfId: String,\r\n modalVinBlockedId: String\r\n //postalCodeValidationErrorModalID: {\r\n // type: String,\r\n // default: ''\r\n //}\r\n },\r\n\r\n data() {\r\n return {\r\n isCardOpen: false,\r\n getShoppingBasketFinished: false,\r\n getPreparedPopupID: 'getPreparedPopup',\r\n currentEffectiveDate: null,\r\n submitBtnText: '',\r\n isGettingBasket: false,\r\n pushOnBeforeSubmitQueue: undefined\r\n };\r\n },\r\n\r\n computed: {\r\n Model() {\r\n return this.$store.state[this.storeName].model;\r\n },\r\n hasErrors: function () {\r\n return this.errors.items.length > 0;\r\n },\r\n hasAnyPolicies() {\r\n return (this.Model.Policies.length || this.Model.ExistingPolicies.length || this.Model.ChangedPolicies.length);\r\n },\r\n basketItemsCount() {\r\n return this.Model.Policies.length + this.Model.ChangedPolicies.length;\r\n },\r\n MessageContent() {\r\n return {};\r\n },\r\n itemsTitle() {\r\n return `Items (${this.basketItemsCount})`;\r\n }\r\n },\r\n\r\n created() {\r\n const vm = this;\r\n //vm.storeName = vm.$options._componentTag;\r\n vm.$store.registerModule(vm.storeName, {\r\n namespaced: true,\r\n state: {\r\n model: vm.model\r\n },\r\n mutations: {\r\n mutate(state, payload) {\r\n state.model = payload;\r\n }\r\n }\r\n });\r\n\r\n this.$store.registerModule('mvr', mvrModule);\r\n },\r\n\r\n mounted() {\r\n if (this.initialItemsCount > 0) {\r\n PageLoadUtil.setComponentLoading(this.$options.name, PAGE_LOAD_TIMEOUT);\r\n this.getShoppingBasket(false);\r\n this.registerRecalculateTotal();\r\n }\r\n\r\n if (!this.Model.ApplicableTaxesIncluded) {\r\n Vue.set(this.Model, 'ApplicableTaxesIncluded', true);\r\n }\r\n\r\n this.$root.$on('Broadcast::EffectiveDateChanged', (value) => {\r\n this.onEffectiveDateChanged(value);\r\n });\r\n\r\n this.registerMvrModalEvent();\r\n this.registerOPCFCloseEvent();\r\n },\r\n\r\n beforeDestroy() {\r\n this.$root.$off('Broadcast::EffectiveDateChanged');\r\n },\r\n\r\n methods: {\r\n async getShoppingBasket(isChangedEffectiveDate) {\r\n this.$eventBus.$emit('calculating-basket');\r\n try {\r\n this.isGettingBasket = true;\r\n\r\n var explicitCallPremiumOnSummary = (!window.ir.authenticated && this.isShoppingBasketSummary && this.Model.Policies.length == 1);\r\n\r\n const basketData = {\r\n DataSourceId: this.shoppingBasketDataSource,\r\n IsShoppingBasketSummaryPage: (this.isShoppingBasketSummary || false),\r\n CallPremiumOnSummary: (this.callPremiumOnSummary || (explicitCallPremiumOnSummary) || false),\r\n EffectiveDate: (isChangedEffectiveDate ? this.Model.EffectiveDate : null),\r\n PageUrl: window.location.pathname.substring(0, 1) === \"/\"\r\n ? window.location.pathname.substring(1)\r\n : window.location.pathnam\r\n };\r\n\r\n const { data } = await axios.post(this.api.getShoppingBasket, basketData);\r\n\r\n const newModelState = Object.assign({}, this.Model, data.Result);\r\n newModelState.PremiumFrequency = this.Model.PremiumFrequency;\r\n newModelState.ApplicableTaxesIncluded = this.Model.ApplicableTaxesIncluded;\r\n\r\n this.$store.commit(`${this.storeName}/mutate`, newModelState);\r\n\r\n this.addIconClassToPolicies(data.Result);\r\n this.calculateTotalPremiumSet({ PremiumFrequency: this.Model.PremiumFrequency });\r\n\r\n this.Model.Policies.forEach((policy) => {\r\n if (policy.PolicyModel.Drivers != undefined) {\r\n policy.PolicyModel.Drivers.forEach((driver) => {\r\n if (driver.IsRetired) {\r\n policy.PolicyModel.IsRetiredShown = true;\r\n }\r\n });\r\n }\r\n });\r\n\r\n this.currentEffectiveDate = this.Model.EffectiveDate;\r\n this.Model.PremiumSuccess = true;\r\n\r\n this.$root.$emit(\r\n 'Broadcast::UpdateShoppingBasketCount',\r\n this.Model.Policies.length + this.Model.ChangedPolicies.length\r\n );\r\n\r\n if (data.Message != '') {\r\n this.Model.PremiumSuccess = false; //disable Continue button\r\n\r\n let modalType = 'error';\r\n if (data.IsDeclineRule) {\r\n modalType = 'decline';\r\n if (data.IsOptionalABError != undefined && data.IsOptionalABError) {\r\n modalType = 'decline-optional-ab';\r\n }\r\n }\r\n\r\n this.$root.$emit(modalType + '-modal-open', data.Message);\r\n }\r\n\r\n this.getShoppingBasketFinished = true;\r\n\r\n this.$root.$emit('Broadcast::ShoppingBasketLoaded');\r\n }\r\n catch (error) {\r\n (IS_DEV && console.error('getShoppingBasket error:', error));\r\n }\r\n finally {\r\n // NOTE 2022-02-18 AndrewKim: Delay showing of policies to reduce CLS.\r\n await wait(500);\r\n PageLoadUtil.setComponentLoaded(this.$options.name);\r\n this.isGettingBasket = false;\r\n }\r\n },\r\n\r\n calculateTotalPremiumSet(settings) {\r\n const vm = this;\r\n const IsTaxesIncluded = settings.ApplicableTaxesIncluded != null ? settings.ApplicableTaxesIncluded : vm.Model.ApplicableTaxesIncluded || vm.Model.ApplicableTaxesIncluded == undefined;\r\n const isPremiumFrequencyPerMonth = settings.PremiumFrequency === '1';\r\n\r\n vm.Model.Payment.TotalPremium = isPremiumFrequencyPerMonth ? vm.Model.Payment.TotalPremiumPerMonth : vm.Model.Payment.TotalPremiumPerYear;\r\n vm.Model.Payment.TotalPremiumWithoutTax = isPremiumFrequencyPerMonth ? vm.Model.Payment.TotalPremiumWithoutTaxPerMonth : vm.Model.Payment.TotalPremiumWithoutTaxPerYear;\r\n\r\n vm.Model.Policies.forEach((policy) => {\r\n policy.PolicyModel.Payment.TotalPremium = IsTaxesIncluded ?\r\n isPremiumFrequencyPerMonth ? policy.PolicyModel.Payment.TotalPremiumPerMonth : policy.PolicyModel.Payment.TotalPremiumPerYear :\r\n isPremiumFrequencyPerMonth ? policy.PolicyModel.Payment.TotalPremiumWithoutTaxPerMonth : policy.PolicyModel.Payment.TotalPremiumWithoutTaxPerYear;\r\n policy.PolicyModel.Payment.TotalPremiumWithoutTax = isPremiumFrequencyPerMonth ? policy.PolicyModel.Payment.TotalPremiumWithoutTaxPerMonth : policy.PolicyModel.Payment.TotalPremiumWithoutTaxPerYear;\r\n policy.PolicyModel.GroupsSum = this.calculateSumPerGroup(policy.PolicyModel.Coverages, IsTaxesIncluded, isPremiumFrequencyPerMonth);\r\n policy.PolicyModel.PremiumFrequency = settings.PremiumFrequency;\r\n });\r\n\r\n vm.Model.ChangedPolicies.forEach((policy) => {\r\n policy.PolicyModel.Payment.TotalPremium = IsTaxesIncluded ?\r\n isPremiumFrequencyPerMonth ? policy.PolicyModel.Payment.TotalPremiumPerMonth : policy.PolicyModel.Payment.TotalPremiumPerYear :\r\n isPremiumFrequencyPerMonth ? policy.PolicyModel.Payment.TotalPremiumWithoutTaxPerMonth : policy.PolicyModel.Payment.TotalPremiumWithoutTaxPerYear;\r\n policy.PolicyModel.Payment.TotalPremiumWithoutTax = isPremiumFrequencyPerMonth ? policy.PolicyModel.Payment.TotalPremiumWithoutTaxPerMonth : policy.PolicyModel.Payment.TotalPremiumWithoutTaxPerYear;\r\n policy.PolicyModel.Payment.OldTotalPremium = IsTaxesIncluded ?\r\n isPremiumFrequencyPerMonth ? policy.PolicyModel.Payment.OldTotalPremiumPerMonth : policy.PolicyModel.Payment.OldTotalPremiumPerYear :\r\n isPremiumFrequencyPerMonth ? policy.PolicyModel.Payment.OldTotalPremiumWithoutTaxPerMonth : policy.PolicyModel.Payment.OldTotalPremiumWithoutTaxPerYear;\r\n policy.PolicyModel.Payment.OldTotalPremiumWithoutTax = isPremiumFrequencyPerMonth ? policy.PolicyModel.Payment.OldTotalPremiumWithoutTaxPerMonth : policy.PolicyModel.Payment.OldTotalPremiumWithoutTaxPerYear;\r\n });\r\n\r\n vm.Model.ExistingPolicies.forEach((policy) => {\r\n policy.PolicyModel.Payment.TotalPremium = IsTaxesIncluded ?\r\n isPremiumFrequencyPerMonth ? policy.PolicyModel.Payment.TotalPremiumPerMonth : policy.PolicyModel.Payment.TotalPremiumPerYear :\r\n isPremiumFrequencyPerMonth ? policy.PolicyModel.Payment.TotalPremiumWithoutTaxPerMonth : policy.PolicyModel.Payment.TotalPremiumWithoutTaxPerYear;\r\n policy.PolicyModel.Payment.TotalPremiumWithoutTax = isPremiumFrequencyPerMonth ? policy.PolicyModel.Payment.TotalPremiumWithoutTaxPerMonth : policy.PolicyModel.Payment.TotalPremiumWithoutTaxPerYear;\r\n });\r\n },\r\n\r\n calculateSumPerGroup(coverages, IsTaxesIncluded, isPremiumFrequencyPerMonth) {\r\n const groupsSum = {};\r\n coverages.forEach((cover) => {\r\n cover.Premium = IsTaxesIncluded ?\r\n isPremiumFrequencyPerMonth ? cover.PremiumPerMonth : cover.PremiumPerYear :\r\n isPremiumFrequencyPerMonth ? cover.PremiumWithoutTaxPerMonth : cover.PremiumWithoutTaxPerYear;\r\n cover.PremiumWithoutTax = isPremiumFrequencyPerMonth ? cover.PremiumWithoutTaxPerMonth : cover.PremiumWithoutTaxPerYear;\r\n\r\n if (groupsSum[cover.GroupBackOfficeCode] === undefined) {\r\n groupsSum[cover.GroupBackOfficeCode] = IsTaxesIncluded ?\r\n isPremiumFrequencyPerMonth ? cover.PremiumPerMonth : cover.PremiumPerYear :\r\n isPremiumFrequencyPerMonth ? cover.PremiumWithoutTaxPerMonth : cover.PremiumWithoutTaxPerYear;\r\n }\r\n else {\r\n groupsSum[cover.GroupBackOfficeCode] += IsTaxesIncluded ?\r\n isPremiumFrequencyPerMonth ? cover.PremiumPerMonth : cover.PremiumPerYear :\r\n isPremiumFrequencyPerMonth ? cover.PremiumWithoutTaxPerMonth : cover.PremiumWithoutTaxPerYear;\r\n }\r\n });\r\n\r\n return groupsSum;\r\n },\r\n\r\n addIconClassToPolicies(data) {\r\n data.Policies.forEach(policy => this.addIconClassToPolicy(policy));\r\n data.ProposalPolicies.forEach(policy => this.addIconClassToPolicy(policy));\r\n data.ExistingPolicies.forEach(policy => this.addIconClassToPolicy(policy));\r\n\r\n //return data;\r\n },\r\n\r\n addIconClassToPolicy(policy) {\r\n this.productIcons.forEach((product) => {\r\n if (policy.ProductName === product.Name) {\r\n policy.PolicyModel.ProductIconClass = product.IconClass;\r\n }\r\n });\r\n },\r\n\r\n registerRecalculateTotal() {\r\n const vm = this;\r\n vm.$root.$on('Broadcast::TotalPremiumSet', (settings) => {\r\n vm.calculateTotalPremiumSet(settings);\r\n });\r\n },\r\n\r\n onEffectiveDateChanged(value) {\r\n const vm = this;\r\n if (vm.currentEffectiveDate && value && !isSameDay(new Date(value), new Date(vm.currentEffectiveDate))) {\r\n vm.currentEffectiveDate = value;\r\n\r\n vm.$validator.validate()\r\n .then((isFieldValid) => {\r\n if (isFieldValid && !vm.hasErrors) {\r\n vm.getShoppingBasket(true);\r\n }\r\n });\r\n }\r\n },\r\n\r\n ecommerceTrack() {\r\n if (this.$refs.ecommerceTracker) {\r\n this.$refs.ecommerceTracker.ecommerceTrack();\r\n }\r\n return true;\r\n },\r\n\r\n checkServiceAndProceed(nextStepsUrl) {\r\n const vm = this;\r\n axios.post(vm.api.checkServiceStatus)\r\n .then((result) => {\r\n UnsavedChangesPopup.redirect(nextStepsUrl);\r\n });\r\n },\r\n\r\n async checkServiceAndStoreChangedPolicies() {\r\n try {\r\n await axios.post(this.api.checkServiceStatus);\r\n\r\n const { data: { Result } } = await axios.post(this.api.callStoreNewProductsService, {});\r\n\r\n if (!Result.HasPremiumImpact) {\r\n UnsavedChangesPopup.stop();\r\n this.showConfirmationPopUp(); //shows confirmation pop-up\r\n }\r\n else {\r\n const { Policies, MessageContent, OldTotalPremium, NewTotalPremium, MessageCode } = Result;\r\n\r\n this.$store.commit('setMVR', {\r\n Policies,\r\n MessageContent,\r\n OldTotalPremium,\r\n NewTotalPremium,\r\n MessageCode\r\n });\r\n\r\n this.showMvrImpactPopUp();\r\n }\r\n }\r\n catch (error) {\r\n (IS_DEV && console.error('checkServiceAndStoreChangedPolicies error:', error));\r\n }\r\n },\r\n showOpcfPopup() {\r\n if (this.Model.ChangedPolicies.some(policy => policy.PolicyModel.IsOptedOutOfDCPD === true && policy.PolicyModel.PolicyStatus !== \"8\")) {\r\n this.$globalModal.show(this.modalOpcfId);\r\n this.$eventBus.$emit('myZoneDynamicTable');\r\n } else if (this.Model.HasBlockedVIN) {\r\n this.$globalModal.show(this.modalVinBlockedId);\r\n } else{\r\n this.checkServiceAndStoreChangedPolicies();\r\n }\r\n },\r\n registerOPCFCloseEvent() {\r\n const vm = this;\r\n this.$eventBus.$on(this.$globalModal.events.hide, ({ id, trigger }) => {\r\n if (vm.modalOpcfId === id && trigger !== 'close' && vm.Model.OPCF.IsAccepted ) {\r\n this.checkServiceAndStoreChangedPolicies();\r\n }\r\n });\r\n },\r\n showConfirmationPopUp() {\r\n this.$root.$emit('dynamic::modal::show', this.modalConfirmationId);\r\n },\r\n showMvrImpactPopUp() {\r\n this.$root.$emit('dynamic::modal::show', this.modalMvrImpactId);\r\n },\r\n\r\n registerMvrModalEvent() {\r\n const vm = this;\r\n this.$eventBus.$on(this.$globalModal.events.ok, ({ id }) => {\r\n if (vm.modalMvrImpactId === id) {\r\n vm.confirmMvrOverride();\r\n }\r\n });\r\n },\r\n showPreparationPopupAndContinue() {\r\n const vm = this;\r\n this.$root.$emit('dynamic::modal::show', this.getPreparedPopupID);\r\n\r\n this.$eventBus.$on(this.$globalModal.events.ok, ({ id }) => {\r\n if (vm.getPreparedPopupID === id) {\r\n vm.ecommerceTrack() && vm.checkServiceAndProceed(vm.Model.Policies[0].NextStepsUrl);\r\n //vm.validatePostalCodes(() => vm.ecommerceTrack() && vm.checkServiceAndProceed(vm.Model.Policies[0].NextStepsUrl));\r\n }\r\n });\r\n },\r\n\r\n confirmMvrOverride() {\r\n const vm = this;\r\n const serviceData = {};\r\n serviceData.MessageCode = this.$store.state.mvr.MessageCode;\r\n\r\n axios.post(vm.api.callStoreNewProductsService, serviceData)\r\n .then((result) => {\r\n vm.showConfirmationPopUp();\r\n });\r\n }\r\n\r\n //// Check if all vehicle policies' postal codes match. If they do not, api call will return a result object with HasDifferentPostCode.\r\n //// ex. data.Result = { HasDifferentPostCode : true }. Otherwise, data will be an empty string.\r\n //async validatePostalCodes(onSuccessCallback) {\r\n // if (this.postalCodeValidationErrorModalID) {\r\n // try {\r\n // const { data } = await axios.post(this.api.checkAllPoliciesPostcode);\r\n\r\n // if (!data || !data.Result) {\r\n // onSuccessCallback();\r\n // return;\r\n // }\r\n\r\n // this.$root.$emit('dynamic::modal::show', this.postalCodeValidationErrorModalID);\r\n // }\r\n // catch (error) {\r\n // (IS_DEV && console.error('validatePostalCodes error:', error));\r\n // }\r\n // }\r\n // else {\r\n // onSuccessCallback();\r\n // }\r\n //}\r\n }\r\n});\r\n","import requireAll from '@Shared/utils/require-all';\r\n\r\nrequireAll(require.context('./components/', true, /\\.js$/));","import { shoppingBasket } from '@Apis';\r\n\r\nexport default {\r\n computed: {\r\n api() {\r\n return shoppingBasket;\r\n }\r\n }\r\n};\r\n","\r\nexport default {\r\n methods: {\r\n calculateTotal: function (model, isPaymentPerMonth) {\r\n const isTaxesIncluded = model.ApplicableTaxesIncluded || model.ApplicableTaxesIncluded == undefined;\r\n const isPremiumFrequencyPerMonth = isPaymentPerMonth; \r\n let totalPremium = 0;\r\n\r\n const setTotalPremiumPerPolicy = policy => {\r\n if (!policy.PolicyModel || !policy.PolicyModel.Payment) {\r\n return;\r\n }\r\n\r\n const payment = policy.PolicyModel.Payment;\r\n\r\n if (isTaxesIncluded) {\r\n totalPremium += isPremiumFrequencyPerMonth ? payment.TotalPremiumPerMonth : payment.TotalPremiumPerYear;\r\n } else {\r\n totalPremium += isPremiumFrequencyPerMonth ? payment.TotalPremiumWithoutTaxPerMonth : payment.TotalPremiumWithoutTaxPerYear\r\n }\r\n }\r\n\r\n model.TotalPremiumBlock = 0;\r\n model.Policies.forEach(policy => setTotalPremiumPerPolicy(policy));\r\n model.ChangedPolicies.forEach(policy => setTotalPremiumPerPolicy(policy));\r\n model.ExistingPolicies.forEach(policy => setTotalPremiumPerPolicy(policy));\r\n \r\n model.TotalPremiumBlock = totalPremium;\r\n }\r\n }\r\n};\r\n"],"names":["computed","api","shared","Vue","mixins","props","model","Object","steps","Array","checkoutUrl","String","pageUrl","data","asyncPage","asyncPageIndex","isAsyncPageLoaded","funnelMethods","saveActiveStep","this","created","vm","storeName","$options","_componentTag","$store","registerModule","namespaced","state","mutations","mutate","payload","getAsyncPage","methods","step","axios","post","ActiveStep","IsInChangeMode","currentStep","find","x","StepNumber","AsyncStepIndex","AsyncPage","resolve","get","concat","Id","then","response","compiledHtml","render","staticRenderFns","windowSize","Number","stepId","funnelProperties","parentMethods","onBeforeSubmitQueue","onAfterSubmitQueue","_objectSpread","submitStep","handleSubmit","stepStateActive","Model","asyncPageContainer","getComponent","pushOnBeforeSubmitQueue","callback","push","pushOnAfterSubmitQueue","navigateToPreviousStep","stepDownAsyncStep","_ref","PolicyContext","UnsavedChangesPopup","redirect","NextStepsUrl","validateFormFields","$validator","fields","items","map","field","rules","update","val_compulsory","validate","handleInvalidForm","$set","commit","asyncParallelTasks","status","submitAsyncStep","error","IS_DEV","rawTemplate","componentName","options","inject","createElement","inlineTemplate","slotUtils","focusTrap","type","required","stepData","validator","every","Icon","Steps","Title","isArray","completedSteps","pageTitle","isOpenInMobile","willRenderOnMobile","funnelTopProgressBarHeight","mapGetters","willRender","breakpointMobile","navHeight","getters","currentHeaderHeight","funnelNavigationStyles","position","top","watch","handler","_isAppendedToBody","_isOpenInMobileUnWatcher","startOverModalId","_outsideClick","e","handleOutsideClick","$eventBus","$on","toggleVisibilityOnMobile","activateStep","openStarOverModal","activeStepData","st","s","Index","$emit","TotalCount","length","mounted","checkBreakpoint","registerStartOverModalCloseHandler","beforeDestroy","$off","areLessThanActiveStep","stepNumbers","i","window","location","pathname","document","body","addEventListener","removeEventListener","handleInitialOpenOnMobile","isOpen","event","btn","getElementById","target","contains","$el","isMobile","$watch","removeFromMain","appendToMain","APP_EL_ID","append","removeChild","aside","createContentContainer","class","on","click","stopPropagation","attrs","tabindex","ref","createCloseButton","getSlot","variant","tag","wrapWithTransition","rootEl","appear","name","duration","enter","leave","afterEnter","setFocusOnContainer","stepsContainer","$refs","$nextTick","focus","$root","startOver","apiParams","IsInBundle","href","replace","search","$globalModal","events","ok","_ref2","id","style","keydown","$_focusTrap_trapFocus","directives","value","HEADER_TRANSITION","resizeObserver","isTotalPremiumReady","Boolean","default","premiumHeight","hasFunnelTopProgressBar","isHeaderCondensed","ScrollUtil","scrollTop","bodyTop","headerTopTransition","hasHeaderAppeared","condensedThreshold","headerStyles","left","width","transition","bodyStyles","paddingTop","slotProps","newHeight","oldHeight","_premiumHeaderSize","height","_premiumHeaderCondensedSize","Components","handleFunnelComponentStateChange","addScrollEventListener","scroll","handleScroll","watchHeaderResize","removeScrollEvents","off","isProgressBarMounted","isPremiumDiscountsMounted","setHeaderHeight","removeScrollEventListener","setScrollbarWidth","scrollBarWidth","threshold","Math","max","header","totalPremium","getElementsByClassName","totalPremiumCondensed","createResizeObserver","element","resizeHandler","handlePremiumHeaderResize","entries","entry","contentRect","setHeaderHeightWithResizeObserverEntries","forceCalculation","arguments","undefined","targetEls","totalHeight","reduce","elClassName","targetEl","offsetHeight","hasPremiumWidthChanged","hasPremiumCondensedWidthChanged","isCondensed","classList","propertyKey","previousHeight","renderHeader","isPremiumReadyPropBool","headerEl","renderBody","onItemChanged","params","rootElStyles","isInitialized","stepIndex","stepsCount","stepTitle","stepIcon","verticalScrollbarWidth","hasAnimatedIn","isProgressBarHidden","chevronIconUp","activeStepProduct","label","IsAggregatorRequest","mainTitle","progressFillScale","progressBarStyles","loadStepData","handleChevron","handleVisibilityChangeEvent","setActiveStepProduct","isVisible","animateIn","el","done","progressBar","progressBarFill","buttonContainer","gsap","loadGSAP","timeline","onComplete","fromTo","autoAlpha","ease","scaleX","openStepIndicator","GoogleAnalytics","clickId","clickText","product","createProgressBar","barFill","transform","barBackground","opacity","createButton","quoteEl","domProps","innerHTML","labelEl","chevronIcon","buttonEl","labelWrap","css","funnelInit","funnelParams","parentProperties","funnelComputed","redirectLocation","postFunnel","toggleInfoTooltip","showInfoTooltip","scrollToActiveStep","querySelector","offsetTop","scrollPage","NavigateToPreviousAggregatorsVehicle","startOverParams","isBasketReady","setBaskingIsLoading","setBasketIsReady","forEach","item","init","url","srcElement","getAttribute","parentElement","allowedClass","canProceed","includes","IsInEditState","IsInEditedState","preventDefault","show","leaveWithoutSaving","clearFunnelState","assetsUrl","errorMessage","infoBar","dropdownOptions","dropdownOptionsKey","gifs","t","v","toolTip","explanation","text","split","imgSrc","gifSrc","matched","filter","option","Field","newVal","newValue","immediate","newOptions","handleChange","$attrs","onchangecallback","callVueInstanceMethod","updateModel","val","functional","iconClassName","cart","context","leftContainerEl","createLeftContainer","productIconEl","createProductIcon","iconContainerEl","getSlotFunctional","centerContainerEl","createCenterContainer","rightContainerEl","createRightContainer","slotContent","contentContainerEl","containerEl","listeners","mergeClasses","activeStepNumber","title","stepNumber","pageURL","icon","allURLs","num","dotEl","eventBus","initialCartCount","isExpanded","listHeight","dotPositionTops","basketCount","activeStep","toggleContent","cartItemsCount","resetFunnelSteps","isAggregatorRequest","totalSteps","allStepNumbers","allSteps","StepNumbers","isActiveStepGroup","parsedSteps","AllUrls","Product","PageUrl","activeCar","Car","IndexFromAggregators","totalCars","CarsCount","BasketCount","firstDotTop","lastDotTop","activeStepItemIndex","findIndex","getDotsPositions","initListResize","onUpdateCartCount","list","debounce","parseInt","getBoundingClientRect","progressContainer","stagger","scaleY","delay","clearProps","createProgressLine","containerHeight","fillHeight","progressFill","createList","listItemEls","key","refInFor","listEl","contentToggleEl","isOpenInitially","debounceDuration","nextStep","nextActiveStep","previousStep","previousActiveStep","transitToShoppingBasket","promptLogin","isNextStepExternal","nextStepExternalSuccessUrl","nextStepExternalCancelUrl","nextStepExternalFailUrl","nextStepExternalReturnUrl","nextStepButtonText","isLoginPopupNeeded","containsTotalPremium","isBodyVisible","hyperLinkModalId","isFormDirty","keys","some","dirty","navigateToPreviousStepFromEvent","totalPremiumMounted","InternalPolicyId","handlePageLoaded","showHyperLinkModal","submitFromPopup","isStepEnabled","idx","setActiveStep","navigateToNextStep","navigateToPreviousAggregatorsVehicle","isNaN","previousStepUrl","cancelStep","setTimeout","saveExternalNavigationContext","TotalPremium","Payment","CurrentPageUrl","ReturnPageUrl","SuccessPageUrl","CancelPageUrl","FailPageUrl","checkboxes","checkbox","gtmLabel","focusedElementValue","handleInput","handleFocus","clearFocus","template","alignElement","targetElementSelector","targetElement","targetElTop","getElementTop","elTop","getComputedStyle","binding","dataset","ResizeObserver","observe","isObserved","inserted","vnode","isDisabled","expression","args","oElement","remove","parentDataProperty","content","modifiers","html","innerText","trim","bind","vNode","children","elm","disabled","maxWidthMid","maxWidthSmall","hasTotalBlockMobile","attributes","lastScrollTop","universalbar","navbar","stepsIndicator","universalbarHeight","headerHeight","stepHeight","fixedElHeight","parentEl","closest","sidebarBottomPos","toggleClass","addClass","removeClass","add","setBlockClass","scrollY","removeProperty","deviceResolution","innerWidth","rect","cardOpenTimeout","clearTimeout","removeAttribute","minHeight","getClientRects","offsetWidth","outerWidth","pageYOffset","saveQuoteEl","display","innerHeight","isChecked","labelElClass","oldValue","prevIsChecked","checkbox_item","action","requireAll","require","FunnelComponentsStates","EventEmitter","constructor","super","isMounted","previousState","_progressBarIsMounted","emit","_premiumDiscountsIsMounted","loadingComponents","pageLoadTimeout","startPageLoadTimeout","maxTimeout","comp","timeout","onPageLoad","isNoPageLoadDelay","EventBus","setComponentLoading","compName","setComponentLoaded","scrollInputToPageTop","modelSpace","carEndpoint","method","validateEndpoint","carModel","getCars","validateCarName","level","onCarUpdated","car","_merge","commercialUsePopup","isChangeMode","beforeSubmitQueue","Function","valid","CommercialUse","onCommercialUseChange","storageUtils","funnelDict","Funnel","oldVal","DriversList","Drivers","driver","driverName","FirstName","LastName","ProposalDriverName","EmailAddress","IsAccountOwner","sort","a","b","namesA","Name","namesB","nameA","toLowerCase","nameB","Labels","AnotherPerson","Business","ProposalPersonsList","ProposalDrivers","ProposalDriverId","substring","stateRestored","savePageState","ir","antiforgeryKey","hasExistingPageState","hashCode","restoreState","restoreFunnelStep","result","RedirectUrl","Result","catch","aggregatorsPopup","selectedFillOptionDefaultValue","selectFillOption","submitParent","querySelectorAll","SelectedFillOption","DriverLicenseNumber","DriverHomeAddress","InternationalAddressId","DriverPostCode","assign","IsEmpty","StartFunnelByPostCode","ParkingPostCode","PostCode","StartFunnelByLicenseNumber","ProposalCars","selectedOption","carOwnerNameField","labels","isSelectedDriverAccountOwner","hideEmailAddress","initializeFields","initializeSelectedOwner","driverNameChangeHandler","carOwnerOptions","sharedUtils","decodeHTML","reverse","selectedCarOwner","CarAdditional","CarOwner","person","findPerson","onCarOwnerChanged","CarOwnerEmail","CarOwnerFirstName","CarOwnerLastName","CarOwnerCompanyName","reset","p","changedDriver","d","isAuthenticated","aggregatorsTwoCarsPopup","aggregatorsMoreCarsPopup","cookieBanner","PurchaseConditionDefaultValue","CommuteDistanceDefaultValue","BusinessUseDefaultValue","basketItemCount","purchaseCondition","selectedCarIndex","BusinessUsePercentage","hideElement","proposalCarIndex","c","index","VIN","Brand","Year","FullName","cookie","startsWith","showAggregatorPopup","setCar","isSelectedCar","clearCar","oProposalCar","isSelectedVehicle","selectedCar","IsYear6YearsOldOrNewer","CommuteDistance","PurchaseCondition","PurchaseDate","VehicleExtendedCode","VIN1To8Positions","VIN910Positions","parkingPostalCode","AnnualDistance","WinterTires","isAggregator","inputLabel","isLoading","viewValue","carList","ariaHidden","unknownValue","requestData","emitValue","className","input","setAttribute","browserDetect","onInputChange","$event","_debounce","resetCar","request","headers","skipLoading","res","handleResult","finally","highlightText","IsAggregatorData","selectCar","openList","hideListOnClick","inputClicked","fragment","regex","RegExp","str","validateCar","carTitle","isActive","selectIndex","arrowKeyMapper","keyCode","activeElement","clearMyAccountClasses","hasAnyVisibleAndNotMarkedAsRemovedDrivers","hasAnyVisibleAndNotMarkedAsRemoved","IsInvisible","anotherPersonAndBusiness","CompanyName","IsDriverRemoved","productsChangeCar","repeatableScope","repeatableIndex","isPolicyChange","isDriverNameValid","Driver","driverIndex","LicenseNumber","initializeField","fieldName","driverBlurHandler","driverFocusHandler","firstNameValid","lastNameValid","driverTemplate","driverMaxCount","driversMaxAllowed","stopAddingMoreDrivers","set","nextDriverIndex","navHeaderHeight","btnSubmitHtml","backButtonHtml","isFormOpen","showButtons","removeDriverModalId","rateChangePopup","showRateChangePopup","o","Template","Visibility","IsDriverOpen","IsPrimaryDriver","callRateChangePopup","scrollToDriverTop","resetDriversOpen","setShowButtons","isSet","setIsFormOpen","gotoPreviousStep","$parent","areAllDriverFormsOpened","HasPreviousAutoPolicy","CancelationForNonPayment","debounceCloseDriver","debounceOpenDriver","openDriverIndex","addDriver","blur","UsedCarPlusService","generateGuid","driversCount","removeDriver","proposalDriver","$delete","afterSubmitQueue","longTermParkingOn","showLongTermOn","showLongTermOff","longTermOffModalId","saveTempChanges","HasChanges","turnOffLongTermParking","showTurnOffLongTermParkingModal","longTermParkingOff","longTermParkingOffData","reload","driverIsRetiredDefault","driverHasPreviousAutoPolicy","driverAccidentsCountDefault","fillOptionEnterManuallyCode","fillOptionGetDriverCode","rateChangeFieldsDisabled","isParentFormOpen","markedForRemoval","selectedProposalDriver","originalDriversProperties","proposalDrivers","isSelectedDriver","birthDate","greaterThan65","differenceInYears","endOfToday","parseISO","IsNewDriver","ProposalDriverSource","cancelationForNonPayment","hasPreviousAutoPolicy","MaritalStatus","AccidentsCount","ConvictionsCount","initializeProposalDriverIndex","handleRemoveDriverModal","IsDisabledExistingAnyPerson","IsDisabledExistingActiveDriver","IsDisabledExistingAnyDriver","ExsitingPersonHasGenderCode","HasBirthDate","isProposalDriverDisabled","proposalDriverIndex","findOriginalDriver","proposalDriverId","fillDriverDetails","driverDetails","originalDriver","filledDriver","BirthDate","Gender","ClaimFreeYears","HomePostalCode","AccidentsPrefilled","DateOfLoss1","DateOfLoss2","DateOfLoss3","IsRetired","HasDriverTraining","IsDriverLicenseSuspended","HasPolicyCancelled","Phone","ExternalId","MarketingEmail","LicenseClass","LicenseObtainedDate","IsInFirstYearLicense","openDriver","setDriver","trackAdditionalDriverCheckbox","oProposalDriver","formsOpened","clearDriver","fillDriverOptions","tabAddDriverUseLicenseName","trackLabelButtons","isTabAddDriverUseLicenseClicked","stepButtons","SelectedDriverIndex","Age","IsInRetirementAge","IsPrimaryDriverOnAnotherPolicy","getDriverByLicenseNumber","driverText","GetDriverByLicenseNumber","LicenseNumberEntry","DriverFirstName","FirstNameEntry","DriverText","removeScopedDriver","IsNewDriverAdded","isSelected","itemLabel","buttonId","buttonName","buttonText","handleDriverDetailsFocus","addDriverDetailsButton","expanderButton","expanderLink","handleClickOrKeyPressOfExpander","findDriverButton","DriverBirthDate","DriverGender","DriverConvictionsCount","DriverAccidentsCount","productsAuto","productsChangeCarTemp","Validator","extend","getMessage","ConditionalIf","propertyValues","compareValues","conditions","logicalnots","operator","valDisplayifOperator","firstYearLicenseEditInitialized","licenseObtainedDate","licenseObtainedDateValue","licenseObtainedDateLabelElement","licenseObtainedDateLabelValue","licenseObtainedDateLabels","licenseClass","licenseClassLabelValues","validateConditions","toggleContainer","validateLicenseObtainedDate","now","firstYearLicenseOffsetdateYears","isSameDay","isAfter","validateDisplayIfAttribute","getPropertiesMatrix","valDisplayifProperty","property","propValue","_get","fullPropertyName","lastIndexOfproperty","lastIndexOf","propertyName","substr","parentProperty","rootProperty","setModelValue","valDisplayifValue","getValuesMatrix","valDisplayifCondition","getConditionsMatrix","valDisplayifLogicalnot","getLogicalnotsMatrix","isEqual","focusableEls","FOCUSABLE_ELEMENTS","elementIndex","prototype","indexOf","call","birthDateField","gender","genderField","valCustom","vvName","getValueFromAttribute","fieldRules","validateDriverLicenceAgainstBirthDate","driverLicence","maleCheckValues","femaleCheckValues","isValid","date","checkValues","check","formattedDate","toString","padStart","formattedBirthDate","format","Date","locale","__dateFnsLocale__","validateVIN","message","Promise","vin","loadingClass","errorText","IsValid","ErrorMessageParams","start","end","toRemove","slice","productsAccount","productsChangeAccount","accountOwnerNameField","homePoliciesCount","ensureFieldsBinding","accountOwnerOptions","PersonList","checkSelectedPerson","accountOnwerOptions","initIsBirthDateDisabledField","IsBirthDateDisabled","SelectedAccountOwner","onAccountOwnerChanged","resetValidator","selectedPerson","setSelectedPerson","resetSelectedPerson","ConfirmEmailAddress","validatePasswordStrength","password","test","passwordUtils","showPasswordRequirements","onPasswordEntered","Password","hasDuplicate","toUpperCase","raiseErrorIfDuplicateDriver","excludedDrivers","driversDuplicateError","raiseDuplicateDriverError","excludeDriversUtils","isInChangeMode","excludedDriversCount","ExcludeDrivers","IsHidden","isHidden","addExcludeDriver","IsFirstNameEmpty","IsLastNameEmpty","clearExcludeDriver","excludeDriver","removeExcludeDriver","splice","onFirstNameChange","onLastNameChange","changeApi","showExcludeDrivers","showForm","stopExcludingMoreDrivers","hideExistingExcludedDrivers","checkBeforeSubmit","storeExcludedDrivers","toggleShowForm","errors","PaymentResult","msgBoxOk","Message","storeDetailsChanges","changePasswordModal","NewPassword","RepeatedPassword","submitCallback","hide","changepassword","showMvrData","Policies","MessageContent","OldTotalPremium","NewTotalPremium","registerMvrDataEvent","mvrData","mvr","listId","onBeforeSubmit","isFormValid","IsEmailConsentGiven","subscribeData","Email","EmailsAgreement","ListId","emailSubscribeAccount","isSMS","IsSmsConsentGiven","PhoneNumber","SmsAgreement","recoveryEmailField","primaryEmailField","primaryEmail","passwordField","emailField","storeModuleName","anotherPersonLabel","maxAdditionalHomeOwners","containerId","_uid","additionalHomeOwners","defaultPersonObject","AdditionalHomeowner","persons","Persons","IS_EXISTING_USER","proposalPersons","ProposalPersons","canAddAdditionalHomeOwners","homeOwnersDropDownOptions","ProposalPersonName","fieldsHomeOwners","getElementsByName","editMode","addHomeOwner","submitAdditionalHomeOwners","handleHomeOwnersSectionOpen","homeOwner","clonedHomeOwner","resetOrValidateFields","areValid","arr","results","all","ProposalPersonId","removeHomeOwner","createNewHomeOwner","homeowner","homeownerIndex","updateHomeOwnerInfo","info","EVENTS","borderTop","dropDownKey","selectedHomeOwners","componentId","additionalHomeOwner","initialDropDownOptions","areInputFieldsDisabled","deep","selectedHomeOwner","setDropDownOptions","availableHomeOwnerOptions","homeOwnerOption","confirmationModal","noChangesModal","checkForChanges","trigger","handleSubmitPrompt","registerPolicyReloadOnChange","changeType","changeableFields","hasFields","noFields","getChangeableFields","ChangeType","redirectUrl","calculateChangedPremium","reloadPolicy","isOpenHomeowners","initiallyPersons","hasHomeowners","checkForAdditionalHomeOwnerChanges","addHomeowners","hasAdditionalHomeownerChanges","modalID","hasChanges","confirmationMortgageModal","isOpenMortagage","hasMortgageCompanyInitially","hasMortgageCompany","MortgageCompany","HasData","address","Address","isEmptyAddress","calculateMortgageChangePremium","checkForMortgageChanges","addMortgageCompany","removeMortgageCompany","hasMortgageChange","totalPremiumCalculated","isPaymentPerMonth","applicableTaxesIncluded","calculateTotal","changePremiumOptionsChange","recalculate","changeApplicableTaxesIncludedChange","isPremiumFrequencyPerMonth","TotalPremiumBlock","TotalPremiumPerMonth","TotalPremiumPerYear","TotalPremiumWithoutTaxPerMonth","TotalPremiumWithoutTaxPerYear","productIcons","modalPipedaId","getShoppingBasketFinished","stepCallback","policyItemBinding","PolicyModel","ProductName","registerRecalculateTotal","calculateTotalPremiumSet","PremiumFrequency","addIconClassToPolicy","setSubmitQueue","registerPipedaCloseEvent","settings","IsTaxesIncluded","ApplicableTaxesIncluded","TotalPremiumWithoutTax","GroupsSum","calculateSumPerGroup","Coverages","Deductible","coverages","groupsSum","cover","Premium","PremiumPerMonth","PremiumPerYear","PremiumWithoutTaxPerMonth","PremiumWithoutTaxPerYear","PremiumWithoutTax","GroupBackOfficeCode","policy","ProductIconClass","IconClass","loggedInUserCallback","Pipeda","IsAccepted","savePipeda","callStoreNewProductsService","filters","formatDate","applyForCreditDiscount","allowCreditCheck","propertyCreditCheckModal","propertyCreditCheckProposallist","propertyCreditCheckPreviousManualMainPerson","originalMainPersonProperties","previousManualMainPersonProperties","showModal","modalCallback","isUserLoggedIn","authenticated","modalId","selectedApplicant","CreditCheckApplicant","showNameFields","MainPerson","IsPersonNameEditable","showBirthDateField","IsPersonDOBEditable","clearPerson","applicantIndex","setProposalPerson","handleFieldRenderingChange","saveMainPersonStatus","uncheckCreditCheckbox","AllowCreditCheck","initializeProposalPersonIndex","setRulesForExistingCustomer","ProposalPersonSource","SelectedProposalPersonIndex","IsAutoPlus","fillMainPersonDetails","mainPerson","proposalPersonDetails","personIndex","IsBirthDateFieldEditableRule","isRenderedOnPage","pause","resume","registerThresholdCheck","checkPremiumThreshold","premiumThresholdCheck","hasRedirect","childEl","_data","validateProperty","clear","productsProperty","productsChangePropertyTemp","oldPremium","newPremium","requestLifecycleQueue","policyId","noChanges","modelYear","yearInterval","getFullYear","modelData","decodeInput","wrapperField","displayCookieBanner","ignoreProvinceCode","addressEndpoint","validateUnitEndpoint","addressModel","unitIsLoading","addressField","IsVisible","Value","getAddresses","validateAddress","validateAddressWithUnitNumber","modelDrilldown","IsHomeAddressDisabled","IsManual","IsMailingAddressEqual","showAutoFirstAggregatorPopup","hideAutoFirstAggregatorPopup","toggleManualAddress","HomeAddress","House","PropertyAddress","HouseNumberExt","FullAddress","onAddressUpdated","unitNumberRef","unitNumberContainer","ManualUnitNumber","forceViewValueUpdate","callOnChangeCallback","fixedMethod","onUnitValidate","unitNr","AddressText","IgnoreProvinceCode","FoundAddress","callbacks","success","fail","aggregatorModal","selectedAddress","selectedAddressIndex","addressList","_unknownValue","AddressId","handleValidationData","handleAddressData","IsFinal","formatPart","Description","selectAddress","part","addressText","addressId","addressData","City","ZipCode","StreetName","Street","StreetNumber","HouseNumber","Province","Country","HouseNumberExtension","PoBox","AddressAdditionalExplanation","generateAddressHtml","viewValueLength","startIndex","cancellationEffectiveDate","ChangeEffectiveDateDisplay","companyEndpoint","companyModel","getCompanies","onCompanyUpdated","company","selectedCompany","selectedCompanyIndex","companyList","onChangeEvent","setManuallyEnteredCompany","selectCompany","resetCompany","companyName","expandAndCollapse","coverageGroupRequestModel","coverageGroupOnloading","coverageSteps","isDeductible","isDcpd","allDeductibleCoveragesSelectedLightboxID","groupModel","showGroup","isCollapseOpen","coveragesSteps","coverageStepsCount","iconClass","ariaControlsID","handleDeductibleCoverageChange","calculateGroupTotal","coverageGroup","collapsedBox","handleCollapsedGroupFocus","totalPremiumWithoutTax","totalPremiumPerMonth","totalPremiumPerYear","totalPremiumWithoutTaxPerMonth","totalPremiumWithoutTaxPerYear","coverage","IsSelected","IsDisabled","CoverageCode","handleCollapseOpen","handleCollapseClose","toggleCollapse","coverageList","currentTarget","coveragesUtils","coverageModel","maxDeductibleAmount","deductibleCoveragesCodes","disableWhenSelected","disableWhenOneUnchecked","disableWhenAllUnchecked","dcpdInfoPopup","optOutDeductibleLightboxId","isCoverageSupported","limitAmountData","currentCoverage","currentCoverageModel","DisablingRules","deductibleCoveragesCode","allCoverages","oAllCoverage","CoverageGroups","coverageTitle","getCoverageByCode","HasChange","updateDCPDCoverage","_isCoverageInitiallySelected","registerOptOutModalAcceptHandler","registerOptOutModalCloseHandler","registerOptOutModalCancelHandler","updateDeductible","updateRelatedCoverageRules","_isCoverageSupportedUnwatcher","handleIsCoverageSupportedChange","initUnsupportedCoverage","LimitAmount","unwatchCoverageIsSelected","unwatchIsCoverageSupported","coverageCodes","coverageCode","coveragesToDisable","coverageByCode","coverageToDisable","IsDisabledByService","IsDisabledInSitecore","coverageSetIsDisabledByRuleRequest","coverageSetDisabledRequest","populateUnavailableDeductibles","limitAmount","IsPolicyChange","maximumDeductible","deductibleDropdown","values","deductible","oDeductibleCoverage","isDisabledByService","n","deductibleMessageVisible","allDeductiblesDisabled","toggleCoverageSelection","customProperty","customPropertyName","IsMandatory","getCoverages","Data","responseCoverageByCode","QuotationData","OptOutDCPD","OptOutDCPDMyZone","close","_ref3","sender","newDisabledState","getDisabledState","IsDisabledByRule","IsSelectedOrigin","watchCoverageIsSelected","_isSelectedUnwatcher","isCovered","isLimitPercent","calculateRelativeCost","initialCost","limit","formatCalculatedAmount","amount","formatCurrency","round","labelname","coverageStackName","coverageStackId","coverageStacks","setCoverageStack","coverageStack","validateAll","calculateStackTotal","paymentTotalPremium","$children","group","collapseCoverageSteps","coverageOriginDictionary","isRetiredShown","stepIndicator","HEADER_NAV","topNavHeight","setCoverageStepsCount","activateNextStep","ActiveCoverageStep","getOriginProperties","fetchCoverages","hasChange","relatedCoverageCode","prevStep","panelStep","scrollTopNew","getCssClass","areLessThanActiveCoverageStep","startDate","hasErrors","currentEffectiveDate","onEffectiveDateChanged","isFieldValid","baseUrl","ecommerceTracker","trackerObjs","JSON","parse","dataLayer","obj","trackEndFunnel","products","checkoutStep","funnelProducts","submitted","h","ecommerceTrack","ecommerceObj","getEcommerceObject","actionField","paymentMethod","PaymentMethod","eventName","funnelProduct","ecommerceTracking","category","virtualPageURL","join","virtualPageObj","vpUrl","GTM_ATTRIBUTES","saveQuote","BACKGROUND_EL_CLASS","trackGA","analyticsType","onClick","rest","_objectWithoutProperties","_excluded","outlineEl","backgroundEl","childElements","async","background","scale","mortgageCompany","apiObject","isLastStep","optedOutPolicies","cardId","infoId","policies","tableCreated","pathInfo","showOPCFafterInfoPopup","OPCF","filteredPolicies","IsOptedOutOfDCPD","Status","generateDynamicTable","rejectOPCF","acceptOPCF","showInfoPopup","container","table","thead","headerRow","headerText","th","appendChild","createTextNode","tbody","row","cell1","cell2","cell3","VehicleIdentificationNumber","navigateToCoverages","selectedPolicy","isNewPolicy","IsNewPolicy","updateParams","shoppingBasketStore","IsAuthenticated","getMutationUrl","setCurrentPolicy","refreshChangePolicyContext","getPolicyMutationUrl","isCreditOpen","isEFTOpen","selectEFT","selectCreditcard","MainModel","rejectPipeda","acceptPipeda","ChangedPolicies","PolicyStatus","IsPipedaAccepted","closeModal","fullWidth","noBorder","classes","staticClass","scopedSlots","heading","defaultSlot","headingEl","bodyEl","defaultSlotContentEl","namedSlotElements","skipBorderMask","isShoppingCart","withContentToggle","contentToggleID","noBorderTop","noPaddingTop","slider","showPinkSlip","showNotification","displayOptions","cancellationChangeType","policyDate","policyDateFormatted","moduleName","createToggleButton","chevron","iconType","createHeader","$scopedSlots","toggleButtonEl","buttons","topContent","itemsContainerEl","buttonsContainerEl","isSaveForLater","IsEmailConsentGivenForSaveQuote","FunnelStateEmailToSent","isEmailSending","isEmailSent","isEmailValidityChecked","isEmailValid","saveQuoteCheckBox","saveQuoteSubmitButton","saveQuoteEmailField","coveragesAddToCartButton","checkOutButton","checked","toggleSaveForLater","checkSaveQuoteEmailValidity","saveFunnelState","funnelModel","FunnelViewModel","UserAgent","navigator","userAgent","IsEmailSent","stepperMin","stepperMax","stepperOffset","isMinimumValueReached","isMaximumValueReached","updateBindingModel","currentValue","offset","TransitToShoppingBasketStep","_isEmpty","callPremium","changePremiumOptions","changeApplicableTaxesIncluded","unitHasChanged","unitValidityState","unitChangeHandler","unitBlurHandler","validateAddressName","capitalizedInput","dispatchEvent","Event","skipRecalculation","dependentField","setFlags","pristine","invalid","modelName","relatedCoverageCodesWithSameFields","originalLimitAmountByCode","coverageLimits","coverageLimitDefault","elValue","relatedCoverageCodes","relatedCoverage","optionKey","optionValue","city","number","lowercaseInput","checkForOnliaButton","getOnliaButtonLabel","isOnliaButton","submitBtn","SUBMIT_BUTTON_ID","submitBtnContent","subtmitBtnLabel","onliaButtonLabel","childElementCount","nodeName","toggleName","disableBtnTimeout","propertyValue","sliderKey","sliderValue","trimmedInput","cardID","policyID","updatePolicy","uppercaseInput","productsShared","scope","coverageOrigin","IsSelectedInSitecore","getOriginalLimitAmountByCode","oApi","submitButtons","button","coverageDictionary","reject","PremiumSuccess","ReplacementCost","Discount","premium","IsDisabledForChange","Limits","LimitDefault","CoverageLimitAmountCode","LimitAmountCode","CoverageLimitDefault","CoverageLimits","previousStateOfIsDisabled","PremiumPerDay","PremiumWithoutTaxPerDay","DiscountMessages","checkboxChecked","coveragesPremiumSet","isTaxesIncluded","addEvent","removeEvent","productsData","prod","productObj","PolicyName","ecommerce","price","scrollToPageTop","targetScrollTop","scrollingElement","hash","charCodeAt","pageKeyHash","Storage","sessionStorage","pageStates","stringify","pagesStatesStorage","shift","stateExists","cardTypeField","cardSecurityCode","cardTypeModel","expdate","today","subMonths","startOfToday","getRegex","cardType","visa","mastercard","americanexpress","dinersclub","discover","jcb","maestro","isValidCheckSum","cardNumber","nCheck","bEven","cDigit","charAt","nDigit","validateCreditCard","creditCardUtils","validatePostalCode","postalCode","oldResult","closedHeading","openHeading","additionalDiscounts","discount","isHiddenManually","store","discountsList","handleIsHidden","isContainerOpen","closeContainer","handleContentToggle","discountItems","onCompleteCallBack","_gsapOnStartCallback","each","toggleContainerHeight","createChevron","createHeading","createDiscountsList","discountsEl","discountsContainer","wrapperEl","renderReady","repeatedItem","isBlockOpen","totalPremiumUtils","stylesReady","beforeCreate","backOfficeCode","summaryLimitAmountLabelPerCoverages","VisibleCoverages","toggleBlock","basketItems","isEmptyBasket","insuranceProduct","addPolicyAhaModal","showAddInsuranceModal","saveEffectiveDate","resetModalState","addInsurance","link","requestParams","EffectiveDate","showDisabledInsuranceModal","PAYMENT_SUMMARY_TOGGLE_ID","summaryOpen","paymentOpen","paymentSummaryToggleId","_animateNextToggle","trSessionId","initializeTransUnion","registerBeforeSubmitFunction","paymentSubmitButton","toggleSubmitButton","intervalId","setInterval","TrustevV2","clearInterval","Init","transUnionPublicKey","sessionId","TransUnionSessionId","toggleSections","openPaymentTab","firstInput","showElement","IsHighRisk","HasPremiumImpact","mvrResponse","paymentExplanationData","MessageCode","TotalPremiumBlockAmount","TotalPrePaymentForFirstMonthAmount","TotalPrePaymentForSecondMonthAmount","TotalForFirstPaymentAmount","PolicyIsActivatedInSameMonth","FirstBillDate","scrollTo","showedMvr","policyIndex","isChanged","initialCardOpenState","shoppingBasketDataSource","removePolicyModalUrl","showDetailsText","hideDetailsText","canceledPolicyStatus","isCardOpen","removePolicyModalId","productIconClass","isCancellation","toggleContentButtonLabel","togglePolicy","removePolicyFromShoppingBasket","removePolicy","goToNewPolicyPage","redirectToDetailsPage","handleModalEvent","policyStatus","PolicyId","pathnam","apiUrl","removeChangedPolicy","stop","HasAnyPolicies","DataSourceId","lightboxId","dataSourceId","stringChanged","DetailsPage","productName","isBundle","insuranceProductType","productSubtype","clickHandlerName","clickHandler","isEmptyCart","isAddToCartVersionTwo","gtmAttributes","buttonType","openModal","triggerTrackingEvent","redirectToProduct","disabledClick","capitalizeString","slot","createBlueLine","createIcon","iconEl","createImage","createTextContent","titleEl","createPlusIcon","createOutline","createDisabledContent","imageEl","disabledContent","calculateInitialTotal","onPaymentFrequencyChange","onApplicableTaxesChange","modalOpcfId","modalMvrImpactId","modalVinBlockedId","mvrModule","registerMvrModalEvent","registerOPCFCloseEvent","HasBlockedVIN","confirmMvrOverride","serviceData","isLoaded","initialItemsCount","isShoppingBasketSummary","callPremiumOnSummary","modalConfirmationId","removePolicyModal","getPreparedPopupID","submitBtnText","isGettingBasket","hasAnyPolicies","ExistingPolicies","basketItemsCount","itemsTitle","PageLoadUtil","PAGE_LOAD_TIMEOUT","getShoppingBasket","isChangedEffectiveDate","explicitCallPremiumOnSummary","basketData","IsShoppingBasketSummaryPage","CallPremiumOnSummary","newModelState","addIconClassToPolicies","IsRetiredShown","modalType","IsDeclineRule","IsOptionalABError","wait","OldTotalPremiumPerMonth","OldTotalPremiumPerYear","OldTotalPremiumWithoutTaxPerMonth","OldTotalPremiumWithoutTaxPerYear","OldTotalPremiumWithoutTax","ProposalPolicies","checkServiceAndProceed","nextStepsUrl","checkServiceStatus","checkServiceAndStoreChangedPolicies","showMvrImpactPopUp","showConfirmationPopUp","showOpcfPopup","showPreparationPopupAndContinue","shoppingBasket","setTotalPremiumPerPolicy","payment"],"sourceRoot":""}