From 0fbb6d67cae025195679569c0f7136eaa72a7add Mon Sep 17 00:00:00 2001 From: Bryan Mauger Date: Wed, 9 Aug 2023 08:32:03 -0400 Subject: [PATCH 01/30] Commit Leah's changes to avoid later conflicts. --- src/layouts/payment-method/payment-method.vue | 211 ++++++++++++++++-- 1 file changed, 196 insertions(+), 15 deletions(-) diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index ff5cb0e35..a7a8ed89a 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -2,10 +2,57 @@
+ - -
+ + + + + + +
+ +
+ + +
+ + + +
+ + + +
+ + +
+ { vm.setCmsContent(resultMap.cmsContent); + vm.pricedGlassParts = clonedGlassParts; + vm.supportingItems = resultMap.supportingItems; + vm.availableLineItems = pricingResults; + vm.isInsuranceSelected = vm.getDefaultIsInsuranceSelectedValue(vm.availableLineItems); }); }, data() { - return {}; + return { + isInsuranceSelected: null, + selectedVaps: null, + availableLineItems: null, + supportingItems: null, + pricedGlassParts: null, + }; }, methods: { arePagePrerequisitesValid() { - // TODO - return true; + return ( + store.getters.order.serviceLocation.zipCode && + store.getters.order.serviceLocation.zipCodeCtu && + (store.getters.order.damage.isRepair || + (store.getters.order.lineItems?.glassParts != null && + store.getters.order.lineItems.glassParts.length > 0)) && + store.getters.order.referralNumber?.length !== 6 + ); + }, + getDefaultIsInsuranceSelectedValue(availableLineItems) { + // Override if coming back from QuoteDetails. Remove override after Quote release + const isInsuranceOverrideValue = this.$route.query?.isInsurance; + + const defaultIsInsuranceSelectedValue = this.$store.getters.order.payment.isInsurance; + if (isInsuranceOverrideValue != null) { + return isInsuranceOverrideValue == "true"; + } else if (defaultIsInsuranceSelectedValue != null) { + return defaultIsInsuranceSelectedValue; + } else { + return availableLineItems + ? baseMixin.methods.getTierOnePackagePrice( + baseMixin.methods.filterOutFees(availableLineItems) + ) > 300 + : null; + } + }, + vapsItemsSelectedAction(vapsItemsSelected) { + this.selectedVaps = vapsItemsSelected; + }, + backButtonAction() { + vehicleQuestionsMixin.methods.navigateBack(this); + }, + forwardButtonAction() { + this.dispatchStoreAction( + this.storeActions.SAVE_PAYMENT_TYPE, + this.isInsuranceSelected, + false + ); + + if (!this.isInsuranceSelected) { + this.dispatchStoreAction( + this.storeActions.SAVE_PARENT_ACCOUNT_NUMBER, + applicationConfig.CASH_PARENT_ACCOUNT_NUMBER, + false + ); + } + + if ( + this.$store.getters.order.payment.parentAccountNumber != + applicationConfig.CASH_PARENT_ACCOUNT_NUMBER + ) { + this.supportingItems = this.filterOutFees(this.supportingItems); + } + + if (this.pricedGlassParts.length > 0) { + this.dispatchStoreAction( + this.storeActions.SAVE_GLASS_PART_PRICES, + this.pricedGlassParts, + false + ); + } + + this.dispatchStoreAction( + this.storeActions.SAVE_SUPPORTING_ITEMS, + this.supportingItems, + false + ); + + this.dispatchStoreAction(this.storeActions.SAVE_VAPS, this.selectedVaps, false); + + const payment = this.$store.getters.payment; + if (payment.isInsurance) { + navigateToHeritageFunnel({ loadingModal: this.$refs.loadingModal }); + } else { + this.$router.navigateWithSaving( + this.navigationScenarios.CLICKED_FORWARD_WITH_CASH, + this.$route + ); + } }, - backButtonAction() {}, - forwardButtonAction() {}, }, components: { funnelHeader, funnelFooter, + vehicleBanner, funnelSubHeader, Form, + loadingModal, }, }; - - + From f2f791baef3689acefd0e7e25d14c8c9c255236e Mon Sep 17 00:00:00 2001 From: Bryan Mauger Date: Wed, 9 Aug 2023 14:08:29 -0400 Subject: [PATCH 02/30] Add cart to payment-method. --- src/fmg-components/cart/cart.vue | 131 ++++++++++++++++++ .../funnel-header/funnel-header.vue | 5 +- .../funnel-header/menu-modal/menu-modal.vue | 6 +- src/layouts/payment-method/payment-method.vue | 55 ++++++-- 4 files changed, 178 insertions(+), 19 deletions(-) create mode 100644 src/fmg-components/cart/cart.vue diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue new file mode 100644 index 000000000..4c456a32b --- /dev/null +++ b/src/fmg-components/cart/cart.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/src/fmg-components/funnel-header/funnel-header.vue b/src/fmg-components/funnel-header/funnel-header.vue index acfacd709..aa1d5722a 100644 --- a/src/fmg-components/funnel-header/funnel-header.vue +++ b/src/fmg-components/funnel-header/funnel-header.vue @@ -63,11 +63,12 @@ export default { diff --git a/src/global-methods.js b/src/global-methods.js index 44ba07acc..301fded68 100644 --- a/src/global-methods.js +++ b/src/global-methods.js @@ -12,8 +12,8 @@ export default { method, endpoint, payload, - logApiCall = true, - isFormData = false, + logApiCall = false, + pageNameToLog = null, additionalSuccessEventDataHandler, }) { return new Promise((resolve, reject) => { @@ -37,13 +37,11 @@ export default { if (additionalSuccessEventDataHandler) { additionalEventData = "_" + additionalSuccessEventDataHandler(response); } - const pageName = analyticsMixIn.methods.getPageName(); - const nextPageName = router.lastNavigationPage || pageName; const endpointWithoutParams = analyticsMixIn.methods.removeParamsFromEndpoint(endpoint); analyticsMixIn.methods.pushEventToGA( GaCategories.API_RESPONSE, - `${nextPageName}_${endpointWithoutParams}`, + `${pageNameToLog}_${endpointWithoutParams}`, `${GaLabels.SUCCESS}${additionalEventData}`, true ); diff --git a/src/helpers/damage-helper.js b/src/helpers/damage-helper.js index 727825d9d..13defa5df 100644 --- a/src/helpers/damage-helper.js +++ b/src/helpers/damage-helper.js @@ -54,10 +54,11 @@ export function includesWindshieldReplacement() { return windshieldMatches.length > 0; } -export async function isGlassAvailableForCarId(carId) { - const newGlassOptions = await baseMixin.methods.dispatchStoreAction( +export async function isGlassAvailableForCarId(carId, pageNameToLog) { + const newGlassOptions = await baseMixin.methods.dispatchStoreActionWithLogging( storeActions.GET_DAMAGE_OPTIONS, - { carId: carId } + { carId: carId }, + pageNameToLog ); const currentGlassOptions = store.getters.damage.glassToReplace; diff --git a/src/helpers/damage-helper.spec.js b/src/helpers/damage-helper.spec.js index 73215b9c7..1b4bd9261 100644 --- a/src/helpers/damage-helper.spec.js +++ b/src/helpers/damage-helper.spec.js @@ -11,6 +11,13 @@ jest.mock("@/mixins/base-mixin.js", () => ({ }, }; }), + dispatchStoreActionWithLogging: jest.fn().mockImplementation(() => { + return { + data: { + windshieldOptions: { availableReplacementOptions: ["windshield"] }, + }, + }; + }), }, })); @@ -77,7 +84,7 @@ describe("damage-helper.js", () => { ]; // Act - const isGlassAvailable = await isGlassAvailableForCarId(); + const isGlassAvailable = await isGlassAvailableForCarId("id", "testName"); // Assert expect(isGlassAvailable).toEqual(true); @@ -91,7 +98,7 @@ describe("damage-helper.js", () => { { glassLocation: "Windshield", glassName: "sideWindow" }, ]; - const isGlassAvailable = await isGlassAvailableForCarId(); + const isGlassAvailable = await isGlassAvailableForCarId("id", "testName"); // Assert expect(isGlassAvailable).toEqual(false); diff --git a/src/helpers/date-helper.js b/src/helpers/date-helper.js new file mode 100644 index 000000000..dce497231 --- /dev/null +++ b/src/helpers/date-helper.js @@ -0,0 +1,10 @@ +export function getDateDifferenceInDays(startDate, endDate) { + var date1 = new Date(endDate); + date1.setHours(0, 0, 0, 0); + var date2 = new Date(startDate); + date2.setHours(0, 0, 0, 0); + // To calculate the time difference of two dates + var Difference_In_Time = date1.getTime() - date2.getTime(); + // To calculate the no. of days between two dates + return Difference_In_Time / (1000 * 3600 * 24); +} diff --git a/src/helpers/heritage-integration/navigation-helper.js b/src/helpers/heritage-integration/navigation-helper.js index fe6a16591..8fdfc40bb 100644 --- a/src/helpers/heritage-integration/navigation-helper.js +++ b/src/helpers/heritage-integration/navigation-helper.js @@ -1,4 +1,5 @@ import { queryStrings } from "@/constants/query-strings"; +import { getQuerystringParameter } from "@/helpers/querystring-helper"; import { externalUrls } from "@/router/router-constants/externalUrl-values"; import { lazyLoadComponent } from "@/router/dynamic-routing/component-loader.js"; import { saveSession } from "@/helpers/heritage-integration/order-helper.js"; @@ -16,15 +17,11 @@ import router from "@/router"; drop them so they don't start at the beginning again. This method will return 'heritage' if the user has an existing order and they come back in from the Safelite.com CTA. */ -export async function getPageToRouteExistingOrderTo(toRoute = {}, existingHeritageOrder = false) { +export async function getPageToRouteExistingOrderTo(toRoute = {}) { // If the user is coming in via the Safelite.Com CTA if (toRoute.query[queryStrings.START_TYPE] === "fmg") { - // If they have an existing order, return 'heritage' for the page name. - if (existingHeritageOrder) { - return fmgPageValues.HERITAGE; - } - - return await getLatestPageForRedirection(); + const latestPageRoute = await getLatestPageForRedirection(); + return latestPageRoute; } // If navigating to a specific page, and that page is not part of the vin pages. @@ -41,7 +38,6 @@ export async function getPageToRouteExistingOrderTo(toRoute = {}, existingHerita // If this is not a direct link to a page using fmgPage, not from Safelite.com CTA or this is a vin related page. // Get the latest page for redirection. const latestPageRoute = await getLatestPageForRedirection(); - return latestPageRoute; } @@ -49,31 +45,41 @@ export async function getPageToRouteExistingOrderTo(toRoute = {}, existingHerita Used to navigate to the heritage funnel with the correct query string and url. */ -export async function navigateToHeritageFunnel({ shouldSaveSession = true, loadingModal }) { +export async function navigateToHeritageFunnel({ shouldSaveSession, pageNameToLog, loadingModal }) { // Create the order (or save existing order) when navigating to Heritage Funnel. if (shouldSaveSession) { - await saveSession({ shouldAwaitSaveSessionQueue: true }); + await saveSession({ pageNameToLog: pageNameToLog, shouldAwaitSaveSessionQueue: true }); } if (loadingModal && loadingModal.showModal) { loadingModal.showModal(); } - router.navigateToExternalUrl(externalUrls.HERITAGE_FUNNEL, { + var heritageParms = { corid: store.getters.order.referralCorrelationId, src: "concept-funnel", conceptsqid: store.getters.applicationUser.savedSessionId, isInsurance: store.getters.payment.isInsurance, - }); + }; + + const promo = getQuerystringParameter(queryStrings.PROMO); + + if (promo) { + heritageParms["promo"] = promo; + } + + router.navigateToExternalUrl(externalUrls.HERITAGE_FUNNEL, heritageParms); } export async function skipVinLookup() { + if (store.getters.damage.isRepair) { + return true; + } const isVinOptionalVehicle = store.getters.order.vehicle.make ? await store.dispatch(storeActions.IS_VIN_OPTIONAL_VEHICLE) : false; return ( - store.getters.damage.isRepair || isVinOptionalVehicle || !includesWindshieldReplacement() || experimentMixin.methods.hasSettingEqualTo(experimentSettings.SUPPRESS_VIN_CAPTURE, "true") @@ -81,18 +87,18 @@ export async function skipVinLookup() { } export async function skipVinLookupNotRepair() { + if (store.getters.damage.isRepair) { + return false; + } + const isVinOptionalVehicle = store.getters.order.vehicle.make ? await store.dispatch(storeActions.IS_VIN_OPTIONAL_VEHICLE) : false; return ( - !store.getters.damage.isRepair && - (isVinOptionalVehicle || - !includesWindshieldReplacement() || - experimentMixin.methods.hasSettingEqualTo( - experimentSettings.SUPPRESS_VIN_CAPTURE, - "true" - )) + isVinOptionalVehicle || + !includesWindshieldReplacement() || + experimentMixin.methods.hasSettingEqualTo(experimentSettings.SUPPRESS_VIN_CAPTURE, "true") ); } diff --git a/src/helpers/heritage-integration/navigation-helper.spec.js b/src/helpers/heritage-integration/navigation-helper.spec.js index cb0664f78..e0bd51b95 100644 --- a/src/helpers/heritage-integration/navigation-helper.spec.js +++ b/src/helpers/heritage-integration/navigation-helper.spec.js @@ -36,7 +36,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.VEHICLE); @@ -59,7 +59,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.VEHICLE_DAMAGE); @@ -97,7 +97,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.ESTIMATE); @@ -125,7 +125,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.ESTIMATE); @@ -153,7 +153,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.CAPABILITY_QUESTIONS); @@ -181,7 +181,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.MOLDING_QUESTIONS); @@ -209,7 +209,7 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.VEHICLE_PARTS); @@ -237,29 +237,11 @@ describe("getPageToRouteExistingOrderTo", () => { }); // Act - const result = await getPageToRouteExistingOrderTo(toRoute, false); + const result = await getPageToRouteExistingOrderTo(toRoute); //Assert expect(result).toBe(fmgPageValues.PART_QUESTIONS); }); - - test("existing order > should return heritage", async () => { - // Arrange - const toRoute = { - query: { - [queryStrings.START_TYPE]: "fmg", - }, - }; - - store.commit(storeMutations.UPDATE_IS_REPAIR, false); - store.commit(storeMutations.UPDATE_MAKE, "acura"); - - // Act - const result = await getPageToRouteExistingOrderTo(toRoute, true); - - // Assert - expect(result).toBe(fmgPageValues.HERITAGE); - }); }); describe("navigateToHeritageFunnel", () => { @@ -295,7 +277,7 @@ describe("navigateToHeritageFunnel", () => { router.navigateToExternalUrl = jest.fn(); // Act - await navigateToHeritageFunnel({}); + await navigateToHeritageFunnel({ loadingModal: null, shouldSaveSession: true }); // Assert expect(saveSessionFunction).toHaveBeenCalled(); diff --git a/src/helpers/heritage-integration/order-helper.js b/src/helpers/heritage-integration/order-helper.js index 01f5a5d67..addca2d41 100644 --- a/src/helpers/heritage-integration/order-helper.js +++ b/src/helpers/heritage-integration/order-helper.js @@ -14,7 +14,7 @@ import { storeMutations } from "@/constants/store-mutations"; it will reset the state and go back to the start of the funnel. */ -export async function loadSessionIfPresent(isConceptInsurance) { +export async function loadSessionIfPresent(isConceptInsurance, pageNameToLog) { const funnelCookie = getFunnelCookie(); // Do nothing if there is no cookie or session to use for loading. @@ -42,7 +42,8 @@ export async function loadSessionIfPresent(isConceptInsurance) { funnelCookie.ReferralDate, funnelCookie.ReferralParentAccountNumber, funnelCookie.ReferralCorrelationId, - isConceptInsurance + isConceptInsurance, + pageNameToLog ) )?.data; } @@ -52,17 +53,17 @@ export async function loadSessionIfPresent(isConceptInsurance) { This will also set Referral information in the store after saving, and then update the cookie. To force synchronous behavior pass in 'true' for shouldAwaitSaveSessionQueue */ -export async function saveSession({ shouldAwaitSaveSessionQueue = false }) { +export async function saveSession({ pageNameToLog, shouldAwaitSaveSessionQueue = false }) { var saveSessionPromise; if (store.getters.applicationUser.saveSessionPromise) { // queue newest request after current saveSessionPromise resolves saveSessionPromise = store.getters.applicationUser.saveSessionPromise.then(() => { // get a new saveSessionPromise - return saveSessionHelper(); + return saveSessionHelper(pageNameToLog); }); } else { // create an initial saveSessionPromise - saveSessionPromise = saveSessionHelper(); + saveSessionPromise = saveSessionHelper(pageNameToLog); } store.commit(storeMutations.UPDATE_SAVE_SESSION_PROMISE, saveSessionPromise); // await here to allow for a caller to await and make the function synchronous @@ -83,12 +84,13 @@ async function loadSession( referralDate, parentAccountNumber, referralCorrelationId, - isConceptInsurance + isConceptInsurance, + pageNameToLog ) { // await the saveSessionPromise in the store to make sure we're loading up to date information await store.getters.applicationUser.saveSessionPromise; - const response = await baseMixin.methods.dispatchStoreAction( + const response = await baseMixin.methods.dispatchStoreActionWithLogging( storeActions.LOAD_SESSION, { savedSessionId: savedSessionId?.toString(), @@ -98,6 +100,7 @@ async function loadSession( parentAccountNumber, isConceptInsurance, }, + pageNameToLog, false ); @@ -107,8 +110,12 @@ async function loadSession( /* Encapsulates asynchronous Save Session logic inside a promise to allow for Save Session queuing */ -async function saveSessionHelper() { - const savedSessionInfo = await baseMixin.methods.dispatchStoreAction(storeActions.SAVE_SESSION); +async function saveSessionHelper(pageNameToLog) { + const savedSessionInfo = await baseMixin.methods.dispatchStoreActionWithLogging( + storeActions.SAVE_SESSION, + null, + pageNameToLog + ); // Update the store with information received from the saveSession response await baseMixin.methods.dispatchStoreAction( storeActions.UPDATE_STORE_WITH_SAVE_SESSION_RESPONSE, diff --git a/src/helpers/heritage-integration/order-helper.spec.js b/src/helpers/heritage-integration/order-helper.spec.js index fab4a1532..94e52b1dd 100644 --- a/src/helpers/heritage-integration/order-helper.spec.js +++ b/src/helpers/heritage-integration/order-helper.spec.js @@ -170,11 +170,13 @@ describe("saveSession", () => { const mocks = setupMocksForJsFiles(mockData); // Act - await saveSession({}); + await saveSession({ pageNameToLog: "test" }); // Assert - expect(mocks.baseMixin.methods.dispatchStoreAction).toHaveBeenCalledWith( - storeActions.SAVE_SESSION + expect(mocks.baseMixin.methods.dispatchStoreActionWithLogging).toHaveBeenCalledWith( + storeActions.SAVE_SESSION, + null, + "test" ); expect(mocks.baseMixin.methods.dispatchStoreAction).toHaveBeenCalledWith( storeActions.UPDATE_STORE_WITH_SAVE_SESSION_RESPONSE, @@ -231,7 +233,7 @@ describe("saveSession", () => { setupCookies({ funnelCookieValue: JSON.stringify(testCookieValue) }); // Act - await saveSession({}); + await saveSession({ pageNameToLog: "test" }); // Assert expect(cookieHelper.getFunnelCookie().DidHeritageFunnelUpdateLast).toEqual(false); diff --git a/src/helpers/unit-test-helper.js b/src/helpers/unit-test-helper.js index 1210f119c..467b38c2b 100644 --- a/src/helpers/unit-test-helper.js +++ b/src/helpers/unit-test-helper.js @@ -44,6 +44,16 @@ export function getMountOptions(mockData) { }); } }); + mocks.dispatchStoreActionWithLogging = jest.fn(); + mocks.dispatchStoreActionWithLogging.mockImplementation((actionName) => { + let actionFilterResult = mockData.actionList?.filter((x) => x.actionName == actionName); + + if (actionFilterResult?.length === 1) { + return Promise.resolve({ + data: actionFilterResult[0].data, + }); + } + }); // Mock const files mocks.storeActions = storeActions; @@ -141,5 +151,16 @@ function setupBaseMixinDispatchStoreAction(mockData) { }); } }); + + baseMixin.methods.dispatchStoreActionWithLogging = jest.fn(); + baseMixin.methods.dispatchStoreActionWithLogging.mockImplementation((actionName) => { + let actionFilterResult = mockData.actionList.filter((x) => x.actionName == actionName); + + if (actionFilterResult.length > 0 && actionFilterResult.length === 1) { + return Promise.resolve({ + data: actionFilterResult[0].data, + }); + } + }); } } diff --git a/src/layouts/address-lookup/address-lookup.spec.js b/src/layouts/address-lookup/address-lookup.spec.js index 63847588b..cce68d793 100644 --- a/src/layouts/address-lookup/address-lookup.spec.js +++ b/src/layouts/address-lookup/address-lookup.spec.js @@ -471,7 +471,7 @@ describe("address-lookup.vue", () => { await wrapper.vm.forwardButtonAction(); // Assert - expect(wrapper.vm.dispatchStoreAction).toHaveBeenCalledWith( + expect(wrapper.vm.dispatchStoreActionWithLogging).toHaveBeenCalledWith( "lookupVinByAddress", { licenseLastName: undefined, @@ -479,12 +479,17 @@ describe("address-lookup.vue", () => { licenseStreetAddress: "1234 Main St", licenseZip: "43215", }, + "address-lookup", false ); - expect(wrapper.vm.dispatchStoreAction).toHaveBeenCalledWith("validateZip", { - zip: "43215", - }); + expect(wrapper.vm.dispatchStoreActionWithLogging).toHaveBeenCalledWith( + "validateZip", + { + zip: "43215", + }, + "address-lookup" + ); }); }); @@ -722,8 +727,8 @@ function setupMocks({ wrapper.vm.getCmsContent = jest.fn().mockImplementation(() => ""); wrapper.vm.setCmsContent = jest.fn(); - wrapper.vm.$refs.funnelFooter.updateButtonText = jest.fn(); - wrapper.vm.$refs.funnelFooter.removeLoader = jest.fn(); + wrapper.vm.$refs.navbar.updateButtonText = jest.fn(); + wrapper.vm.$refs.navbar.removeLoader = jest.fn(); return { wrapper }; } diff --git a/src/layouts/address-lookup/address-lookup.vue b/src/layouts/address-lookup/address-lookup.vue index 48ab0dd08..3b75d7a73 100644 --- a/src/layouts/address-lookup/address-lookup.vue +++ b/src/layouts/address-lookup/address-lookup.vue @@ -5,75 +5,92 @@ ref="theForm" v-slot="{ meta }" autocomplete="off"> -
- - - -
- - - - - - - -
-
-
- +
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + +
+
+
+ +
-
- - + + +
@@ -82,7 +99,7 @@ diff --git a/src/layouts/customer-details/customer-details.vue b/src/layouts/customer-details/customer-details.vue index 82e9f6f4b..03de9ff97 100644 --- a/src/layouts/customer-details/customer-details.vue +++ b/src/layouts/customer-details/customer-details.vue @@ -1,57 +1,72 @@ diff --git a/src/layouts/vehicle-parts/vehicle-parts.spec.js b/src/layouts/vehicle-parts/vehicle-parts.spec.js index 4d4287430..57ecfb117 100644 --- a/src/layouts/vehicle-parts/vehicle-parts.spec.js +++ b/src/layouts/vehicle-parts/vehicle-parts.spec.js @@ -542,7 +542,7 @@ function setupMocks({ pageHeaderWidgetHeaderText = {}, mountOptionsMockData = {} partQuestionRearWrapper.vm.initializeComponent = glassPartQuestion.methods.initializeComponent; wrapper.vm.setCmsContent = baseMixin.methods.setCmsContent; - wrapper.vm.$refs.funnelFooter.removeLoader = jest.fn(); + wrapper.vm.$refs.navbar.removeLoader = jest.fn(); wrapper.vm.$refs.loadingModal.showModal = jest.fn(); // wrapper.vm.$refs.onSubmit = jest.fn(); // wrapper.vm.$refs.onInvalidSubmit = jest.fn(); diff --git a/src/layouts/vehicle-parts/vehicle-parts.vue b/src/layouts/vehicle-parts/vehicle-parts.vue index 9b4b8b185..d2a20ac8e 100644 --- a/src/layouts/vehicle-parts/vehicle-parts.vue +++ b/src/layouts/vehicle-parts/vehicle-parts.vue @@ -1,42 +1,54 @@