diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js index efb32ffc6..76077db76 100644 --- a/src/constants/endpoints.js +++ b/src/constants/endpoints.js @@ -56,6 +56,10 @@ const endpoints = { url: "/parts/api/v1/parts/parts-or-questions", method: "POST", }, + GetPartsOrQuestionsV3: { + url: "/parts/api/v3/parts/parts-or-questions", + method: "POST", + }, GetParts: { url: "/parts/api/v1/parts/parts", method: "POST", diff --git a/src/constants/header-keys.js b/src/constants/header-keys.js index ed88393b5..4341d416b 100644 --- a/src/constants/header-keys.js +++ b/src/constants/header-keys.js @@ -6,4 +6,5 @@ export const headerKeys = { TRANSACTION_ID: "X-Transaction-Id", EON: "X-Enterprise-Order-Number", LOG_ENABLED: "log-enabled", + PAGE_NAME_TO_LOG: "X-Page-Name-To-Log", }; diff --git a/src/constants/insurance.js b/src/constants/insurance.js index 1439fafcb..2b0cacc53 100644 --- a/src/constants/insurance.js +++ b/src/constants/insurance.js @@ -89,4 +89,5 @@ export const NON_MANAGED_SHOW_CLAIM_NUMBER_PARENTS = [ export const PARENT_ACCOUNT_NUMBERS = { STATE_FARM: "711310", USAA: "900040", + GEICO: "250034", }; diff --git a/src/fmg-components/funnel-sub-header/funnel-sub-header.vue b/src/fmg-components/funnel-sub-header/funnel-sub-header.vue index 4002b28fb..8c3c2fed2 100644 --- a/src/fmg-components/funnel-sub-header/funnel-sub-header.vue +++ b/src/fmg-components/funnel-sub-header/funnel-sub-header.vue @@ -39,6 +39,14 @@ export default { default: "dark-header", }, alignLeft: Boolean, + overrideHeaderText: { + type: String, + default: "", + }, + overrideHeaderSubText: { + type: String, + default: "", + }, }, components: { buttonBack, @@ -48,10 +56,13 @@ export default { return this.getCmsContent(this.cmsWidgetName, "HeaderSubText"); }, text() { - return this.getCmsContent(this.cmsWidgetName, "HeaderText"); + return this.overrideHeaderText || this.getCmsContent(this.cmsWidgetName, "HeaderText"); }, subText() { - return this.getCmsContent(this.cmsWidgetName, "HeaderSubText"); + return ( + this.overrideHeaderSubText || + this.getCmsContent(this.cmsWidgetName, "HeaderSubText") + ); }, backButtonAccessibleText() { return this.getCmsContent(this.cmsWidgetName, "BackButtonAccessibleText"); diff --git a/src/global-methods.js b/src/global-methods.js index f408230f8..584743b2d 100644 --- a/src/global-methods.js +++ b/src/global-methods.js @@ -69,6 +69,7 @@ export default { [headerKeys.APPLICATION_NAME]: applicationConfig.APPLICATION_NAME, [headerKeys.SESSION_SEQUENCE_NUMBER]: getSessionKeyValue(), [headerKeys.REFERRAL_SEQUENCE_NUMBER]: order?.referralSequenceNumber, + [headerKeys.PAGE_NAME_TO_LOG]: pageNameToLog, [headerKeys.TRANSACTION_ID]: crypto.randomUUID(), [headerKeys.EON]: order?.eon, [headerKeys.LOG_ENABLED]: store.getters.applicationUser?.loggingOption ?? false, diff --git a/src/helpers/cms-content-helper.js b/src/helpers/cms-content-helper.js index 450875d0f..e5e189908 100644 --- a/src/helpers/cms-content-helper.js +++ b/src/helpers/cms-content-helper.js @@ -3,29 +3,48 @@ import store from "@/store"; import { dynamicStrings } from "@/constants/dynamic-strings"; export function fetchCmsContentForPage(fmgPage) { - return store.dispatch(storeActions.GET_PAGE_DATA, { pageName: fmgPage }).then((response) => { - const pageDataFromCms = {}; + return store + .dispatch(storeActions.GET_PAGE_DATA, { pageName: fmgPage }) + .then((response) => { + const pageDataFromCms = {}; - response.data.Result.forEach((widget) => { - let widgetWithReplacements = findAndReplaceGlobalStateValues(widget.Model, widget.Name); + response.data.Result.forEach((widget) => { + let widgetWithReplacements = findAndReplaceGlobalStateValues( + widget.Model, + widget.Name + ); - // If we already have this widget, push it on the collection - if (widgetWithReplacements.Name in pageDataFromCms) { - pageDataFromCms[widgetWithReplacements.Name].push(widgetWithReplacements.Model); - return; + // If we already have this widget, push it on the collection + if (widgetWithReplacements.Name in pageDataFromCms) { + pageDataFromCms[widgetWithReplacements.Name].push(widgetWithReplacements.Model); + return; + } + + pageDataFromCms[widgetWithReplacements.Name] = [widgetWithReplacements.Model]; + }); + + Object.keys(pageDataFromCms).forEach((key) => { + if (pageDataFromCms[key].length === 1) { + pageDataFromCms[key] = pageDataFromCms[key][0]; + } + }); + + return pageDataFromCms; + }) + .catch((error) => { + // 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 status = error?.status ?? error?.response?.status; + const isNotFound = status == 404; + + if (isClientConfigPage && isNotFound) { + return {}; } - pageDataFromCms[widgetWithReplacements.Name] = [widgetWithReplacements.Model]; + return Promise.reject(error); }); - - Object.keys(pageDataFromCms).forEach((key) => { - if (pageDataFromCms[key].length === 1) { - pageDataFromCms[key] = pageDataFromCms[key][0]; - } - }); - - return pageDataFromCms; - }); } // Function to convert a string, into a matching global state item. diff --git a/src/layouts/coverage-statement/coverage-statement.vue b/src/layouts/coverage-statement/coverage-statement.vue index acdab2f17..f3269bcd9 100644 --- a/src/layouts/coverage-statement/coverage-statement.vue +++ b/src/layouts/coverage-statement/coverage-statement.vue @@ -127,7 +127,7 @@ export default { const resultMap = await settleAllPromises(promiseResultMap); next((vm) => { vm.setCmsContent(resultMap.cmsContent); - vm.clientConfig = resultMap.clientConfig; + vm.clientConfig = resultMap.clientConfig ?? {}; debugLog( `coverage-statement clientConfig::${clientConfigPageName}`, JSON.stringify(vm.clientConfig) @@ -182,7 +182,7 @@ export default { return this.clientConfig?.ClientLogoWidget?.Image || ""; }, deductibleAmount() { - return this.$store.getters.order.policy.currentDeductible; + return Number(this.$store.getters.order.policy.currentDeductible); }, cashPrice() { const lineItems = this.$store.getters.order.lineItems; diff --git a/src/layouts/duplicate-check/duplicate-check.vue b/src/layouts/duplicate-check/duplicate-check.vue index 8af8351df..40f0a8c0d 100644 --- a/src/layouts/duplicate-check/duplicate-check.vue +++ b/src/layouts/duplicate-check/duplicate-check.vue @@ -8,19 +8,10 @@