Merge pull request #70 from Safelite/feature/Digital/SSR-139_merge

Feature/digital/ssr 139 merge
This commit is contained in:
Kulbhushan Kaushik 2022-12-13 07:49:57 -05:00 committed by GitHub
commit 9a4d121874
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 95 additions and 30 deletions

View file

@ -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.

View file

@ -74,6 +74,11 @@ const getDefaultState = () => {
lastPageVisited: null,
triggeredSiteEntry: false,
},
issConfig: {
clientName: "",
styleSheet: "",
clientTag: "",
}
};
};