diff --git a/.gitignore b/.gitignore index b01672f1a..3018f2938 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,9 @@ ortoni-report/ *.sln *.sw? +# Cursor +.cursor/ + # Misc coverage/* junit.xml \ No newline at end of file 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/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/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index a3c93f0ea..6dda6fdd2 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -8,13 +8,14 @@
-
+
-
+
-
+
-
+
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 @@