diff --git a/src/helpers/cms-content-helper.js b/src/helpers/cms-content-helper.js index c4767e61..d132ae48 100644 --- a/src/helpers/cms-content-helper.js +++ b/src/helpers/cms-content-helper.js @@ -2,38 +2,98 @@ import { dynamicStrings } from "@/constants/dynamic-strings"; import { useMainStore } from '@/store'; export function fetchCmsContentForPage(issPage) { - return useMainStore().getPageData(issPage) - .then((response) => { - const pageDataFromCms = {}; - - response.data.Result.forEach((widget) => { - let widgetWithReplacements = findAndReplaceGlobalStateValues( - widget.Model, - widget.Name + const store = useMainStore() + const clientName = store.issConfig.clientName; + const clientOverride = (clientName.length > 0); + + return store.getPageData(issPage) + .then( + // Get the base/default page first. + (baseResponse) => { + if ( !clientOverride ) + { + // Return the base page if there are no client override. + return processPageData(baseResponse, null); + } + else { + // Else get the client override page. + const pageName = issPage + "_" + clientName.toLowerCase().replace(/ /g, ""); + + return store.getPageData(pageName) + .then( + (clientResponse) => { + // Process the client override if it exists. + return processPageData(baseResponse, clientResponse); + }, + (error) => { + // Process the just the base if no client override exists. + return processPageData(baseResponse, null); + } ); - - // 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; - }); + } + } + ); +}; + +// Support method for processing the page data from the CMS call. +// baseResponse = contains the widgets from the base page. +// clientResponse = contains the widgets from the client override page. (null if none) +function processPageData(baseResponse, clientResponse) { + const pageDataFromCms = {}; + let widgets = []; + + if ( clientResponse === null ) + { + widgets = baseResponse.data.Result; } + else + { + // Overide any base widgets with the client override widgets if found. + baseResponse.data.Result.forEach((baseWidget) => { + let found = false; + clientResponse.data.Result.forEach((clientWidget) => { + + if ( clientWidget.Name == baseWidget.Name ) + { + widgets.push(clientWidget); + found = true; + } + }); + + if ( !found ) + widgets.push(baseWidget); + + }); + } + + widgets.forEach((widget) => { + // Global state value replacement. + 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; + } + + pageDataFromCms[widgetWithReplacements.Name] = [ + widgetWithReplacements.Model, + ]; + }); + + Object.keys(pageDataFromCms).forEach((key) => { + if (pageDataFromCms[key].length === 1) { + pageDataFromCms[key] = pageDataFromCms[key][0]; + } + }); + + return pageDataFromCms; +} // Parent function for processWidgetItemForReplacement. This will loop through the parent // object and pass any objects that need additional processing to the processWidgetItemForReplacement function. diff --git a/src/store/index.js b/src/store/index.js index d875d8c7..cd726469 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -74,6 +74,11 @@ const getDefaultState = () => { lastPageVisited: null, triggeredSiteEntry: false, }, + issConfig: { + clientName: "", + styleSheet: "", + clientTag: "", + } }; };