Merge pull request #70 from Safelite/feature/Digital/SSR-139_merge
Feature/digital/ssr 139 merge
This commit is contained in:
commit
9a4d121874
2 changed files with 95 additions and 30 deletions
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -74,6 +74,11 @@ const getDefaultState = () => {
|
|||
lastPageVisited: null,
|
||||
triggeredSiteEntry: false,
|
||||
},
|
||||
issConfig: {
|
||||
clientName: "",
|
||||
styleSheet: "",
|
||||
clientTag: "",
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue