diff --git a/src/assets/img/icons/chevron-no-background.svg b/src/assets/img/icons/chevron-no-background.svg new file mode 100644 index 000000000..a5c669c0f --- /dev/null +++ b/src/assets/img/icons/chevron-no-background.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/img/shop.svg b/src/assets/img/shop.svg new file mode 100644 index 000000000..34dfea893 --- /dev/null +++ b/src/assets/img/shop.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/constants/header-keys.js b/src/constants/header-keys.js index 4341d416b..c91e4aca8 100644 --- a/src/constants/header-keys.js +++ b/src/constants/header-keys.js @@ -7,4 +7,5 @@ export const headerKeys = { EON: "X-Enterprise-Order-Number", LOG_ENABLED: "log-enabled", PAGE_NAME_TO_LOG: "X-Page-Name-To-Log", + DEVICE_ID: "X-Device-Id", }; diff --git a/src/constants/insurance.js b/src/constants/insurance.js index 2b0cacc53..651be751c 100644 --- a/src/constants/insurance.js +++ b/src/constants/insurance.js @@ -82,9 +82,6 @@ export function coverageTypeEnum(strCoverageType) { export const parentAccountNumbers = { CONNECT: "560636", }; -export const NON_MANAGED_SHOW_CLAIM_NUMBER_PARENTS = [ - { name: "KentuckyFarmBureau", value: "223499" }, -]; export const PARENT_ACCOUNT_NUMBERS = { STATE_FARM: "711310", diff --git a/src/constants/state-options.js b/src/constants/state-options.js index 19eb348d5..e803b6440 100644 --- a/src/constants/state-options.js +++ b/src/constants/state-options.js @@ -52,3 +52,80 @@ const stateOptions = { WY: "Wyoming", }; export { stateOptions }; + +const stateOptionsInternational = { + AL: "Alabama", + AK: "Alaska", + AZ: "Arizona", + AR: "Arkansas", + CA: "California", + CO: "Colorado", + CT: "Connecticut", + DE: "Delaware", + DC: "District Of Columbia", + FL: "Florida", + GA: "Georgia", + GU: "Guam", + HI: "Hawaii", + ID: "Idaho", + IL: "Illinois", + IN: "Indiana", + IA: "Iowa", + KS: "Kansas", + KY: "Kentucky", + LA: "Louisiana", + ME: "Maine", + MD: "Maryland", + MA: "Massachusetts", + MI: "Michigan", + MN: "Minnesota", + MS: "Mississippi", + MO: "Missouri", + MT: "Montana", + NE: "Nebraska", + NV: "Nevada", + NH: "New Hampshire", + NJ: "New Jersey", + NM: "New Mexico", + NY: "New York", + NC: "North Carolina", + ND: "North Dakota", + OH: "Ohio", + OK: "Oklahoma", + OR: "Oregon", + PA: "Pennsylvania", + PR: "Puerto Rico", + RI: "Rhode Island", + SC: "South Carolina", + SD: "South Dakota", + TN: "Tennessee", + TX: "Texas", + UT: "Utah", + VT: "Vermont", + VA: "Virginia", + WA: "Washington", + WV: "West Virginia", + WI: "Wisconsin", + WY: "Wyoming", + AB: "Alberta", + BC: "British Columbia", + MB: "Manitoba", + NB: "New Brunswick", + NS: "Nova Scotia", + ON: "Ontario", + PE: "Prince Edward Island", + QC: "Quebec", + SK: "Saskatchewan", + YT: "Yukon", + CN: "Canada", + AE: "Military Address - AE", + AP: "Military Address - AP", + AA: "Military Address - AA", + AS: "American Samoa - AS", + MH: "Marshall Islands - MH", + MP: "Mariana Islands - MP", + NL: "Newfoundland and Labrador", + PW: "Palau", + VI: "Virgin Islands", +}; +export { stateOptionsInternational }; diff --git a/src/digital-components/date-picker-popup/date-picker-popup.vue b/src/digital-components/date-picker-popup/date-picker-popup.vue index 087e68765..851e7c486 100644 --- a/src/digital-components/date-picker-popup/date-picker-popup.vue +++ b/src/digital-components/date-picker-popup/date-picker-popup.vue @@ -82,7 +82,7 @@ export default { // Format used for the v-model value emitted to parent modelType: { type: String, - default: "MM/dd/yyyy", + default: "yyyy-MM-dd", }, enableTimePicker: { type: Boolean, diff --git a/src/global-methods.js b/src/global-methods.js index 584743b2d..240c80d82 100644 --- a/src/global-methods.js +++ b/src/global-methods.js @@ -10,6 +10,7 @@ import { getSessionKeyValue } from "@/helpers/heritage-integration/cookie-helper import { headerKeys } from "@/constants/header-keys"; import axiosResponseInterceptorMessages from "@/constants/axios-response-interceptor-messages.js"; import { endpoints } from "@/constants/endpoints"; +import { getDeviceIdValue } from "@/helpers/heritage-integration/cookie-helper"; // Add a response interceptor for global axios error handing. axios.interceptors.response.use( @@ -73,6 +74,7 @@ export default { [headerKeys.TRANSACTION_ID]: crypto.randomUUID(), [headerKeys.EON]: order?.eon, [headerKeys.LOG_ENABLED]: store.getters.applicationUser?.loggingOption ?? false, + [headerKeys.DEVICE_ID]: getDeviceIdValue(), }; axios({ diff --git a/src/helpers/cms-content-helper.js b/src/helpers/cms-content-helper.js index e5e189908..f16edc3ca 100644 --- a/src/helpers/cms-content-helper.js +++ b/src/helpers/cms-content-helper.js @@ -35,7 +35,9 @@ export function fetchCmsContentForPage(fmgPage) { // Client-specific config pages are optional. When one doesn't exist // the CMS returns a 404 - treat that as "no overrides" instead of an // error so callers receive an empty config object. - const isClientConfigPage = typeof fmgPage === "string" && fmgPage.startsWith("client_"); + const isClientConfigPage = + typeof fmgPage === "string" && + (fmgPage.startsWith("client_") || fmgPage.startsWith("unmanaged_")); const status = error?.status ?? error?.response?.status; const isNotFound = status == 404; diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index f3269bcd9..6dda6fdd2 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -8,13 +8,14 @@
-
+
-
+
-
+
-
+
{ vm.setCmsContent(resultMap.cmsContent); @@ -139,9 +148,21 @@ export default { isClaimAndCoverageFromStore() { return store.getters.order?.payment?.isClaimAndCoverage; }, + isVerifiedInsuranceFromStore() { + return store.getters.order?.payment?.insuranceCoverage.isVerified; + }, + isItacFromStore() { + return store.getters.order?.policy?.isItac; + }, + isNoCompFromStore() { + return store.getters.order?.policy?.isNoComp; + }, isRecalibrationOnOrderFromStore() { return store.getters.isRecalibrationOnOrder; }, + isRepairFromStore() { + return store.getters.order?.damage?.isRepair; + }, backButtonAction() { if (!this.isClaimAndCoverage) { this.$router.navigateWithoutSaving( @@ -178,6 +199,27 @@ export default { }, }, computed: { + showVerifiedContent() { + return this.isVerified && !this.isItac && !this.isNoComp; + }, + showUnverifiedContent() { + return !this.isVerified; + }, + showItacContent() { + return this.isItac; + }, + showNoCompContent() { + return this.isNoComp; + }, + getUnverifiedInstructionsWidgetName() { + if (!this.isVerified) { + if (this.isRepair) { + return "InstructionsWidgetUnverifiedRepair"; + } + return "InstructionsWidgetUnverified"; + } + return ""; + }, clientLogoImageSrc() { return this.clientConfig?.ClientLogoWidget?.Image || ""; }, @@ -201,6 +243,9 @@ export default { diff --git a/src/layouts/scheduling/mobile-scheduling-card/mobile-scheduling-card.spec.js b/src/layouts/scheduling/mobile-scheduling-card/mobile-scheduling-card.spec.js index 3a44b0e34..6200deea3 100644 --- a/src/layouts/scheduling/mobile-scheduling-card/mobile-scheduling-card.spec.js +++ b/src/layouts/scheduling/mobile-scheduling-card/mobile-scheduling-card.spec.js @@ -1,6 +1,6 @@ import { shallowMount } from "@vue/test-utils"; import mobileSchedulingCard from "./mobile-scheduling-card"; -import { PREMIUM_TIME_SLOT_ID_FLAG } from "@/constants/schedule-constants"; +import { PREMIUM_TIME_SLOT_ID_FLAG, AppointmentTypeStrings } from "@/constants/schedule-constants"; import { getMountOptions } from "@/helpers/unit-test-helper.js"; const MOCK_TIME_SLOTS = [ @@ -54,6 +54,7 @@ function mountComponent(props = {}, cmsContent = {}) { return shallowMount(mobileSchedulingCard, { props: { zipCode: "43235", + providerNumber: "03357", timeSlots: MOCK_TIME_SLOTS, premiumTimeSlotPrice: 29.99, ...props, @@ -102,10 +103,10 @@ describe("mobile-scheduling-card.vue", () => { ); await premiumInput.setValue(true); expect(wrapper.emitted("update:modelValue")[0][0]).toEqual({ - selectedMobileTimeSlot: { - routeCodeId: MOCK_TIME_SLOTS[0].id, - isPremiumAppointment: true, - }, + appointmentType: AppointmentTypeStrings.MOBILE, + providerNumber: "03357", + routeCodeId: MOCK_TIME_SLOTS[0].id, + isPremiumAppointment: true, }); wrapper.unmount(); }); @@ -120,10 +121,10 @@ describe("mobile-scheduling-card.vue", () => { await premiumInput.setValue(true); await wrapper.setProps({ modelValue: { - selectedMobileTimeSlot: { - routeCodeId: MOCK_TIME_SLOTS[0].id, - isPremiumAppointment: true, - }, + appointmentType: AppointmentTypeStrings.MOBILE, + providerNumber: "03357", + routeCodeId: MOCK_TIME_SLOTS[0].id, + isPremiumAppointment: true, }, }); @@ -136,11 +137,23 @@ describe("mobile-scheduling-card.vue", () => { const pmInput = wrapper.find(`input[value="${MOCK_TIME_SLOTS[1].id}"]`); await pmInput.setValue(true); expect(wrapper.emitted("update:modelValue")[0][0]).toEqual({ - selectedMobileTimeSlot: { - routeCodeId: MOCK_TIME_SLOTS[1].id, - isPremiumAppointment: false, + appointmentType: AppointmentTypeStrings.MOBILE, + providerNumber: "03357", + routeCodeId: MOCK_TIME_SLOTS[1].id, + isPremiumAppointment: false, + }); + wrapper.unmount(); + }); + + test("does not highlight selection from in-shop appointment", async () => { + const wrapper = mountComponent({ + modelValue: { + appointmentType: AppointmentTypeStrings.IN_SHOP, + providerNumber: "001820", + routeCodeId: MOCK_TIME_SLOTS[0].id, }, }); + expect(wrapper.find(".mobile-scheduling-card__slot--selected").exists()).toBe(false); wrapper.unmount(); }); diff --git a/src/layouts/scheduling/mobile-scheduling-card/mobile-scheduling-card.vue b/src/layouts/scheduling/mobile-scheduling-card/mobile-scheduling-card.vue index 578faaa39..757d4dfb2 100644 --- a/src/layouts/scheduling/mobile-scheduling-card/mobile-scheduling-card.vue +++ b/src/layouts/scheduling/mobile-scheduling-card/mobile-scheduling-card.vue @@ -32,7 +32,7 @@ @@ -59,7 +59,7 @@ @@ -84,7 +84,7 @@