@spartacus/storefront
Version:
Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.
84 lines • 9.22 kB
JavaScript
import { provideConfig } from '@spartacus/core';
/**
* Helper function to simplify the creation of static CMS structure (`CmsStructureConfig`).
* The helper function leverage the `provideConfig`, and is only providing an easy way to
* generate the cms structure. The function creates a configuration structure for components,
* page slot and page template. The following example adds a component to a page slot:
*
* ```ts
* provideCmsStructure({
* componentId: 'LoginComponent',
* pageSlotPosition: 'SiteLogin'
* })
* ```
*
* @param options.componentId component identifier is used to provide component structure
* @param options.pageSlotPosition page slot position is used to provide the slot configuration
* @param options.pageTemplate the page template is used to provide the page slot to the given page template
* @param options.section the section is used to provide the page slot to the given section
* @param options.breakpoint the breakpoint is used to provide the page slot for a specific breakpoint
*/
export function provideCmsStructure(options) {
return provideConfig(Object.assign(Object.assign({}, buildCmsStructure(options)), buildLayoutConfig(options)));
}
/**
* @private
*/
function buildCmsStructure({ componentId, pageSlotPosition, } = {}) {
const config = { cmsStructure: {} };
if (componentId) {
config.cmsStructure = {
components: {
[componentId]: {
typeCode: componentId,
flexType: componentId,
},
},
};
}
if (componentId && pageSlotPosition) {
config.cmsStructure.slots = {
[pageSlotPosition]: { componentIds: [componentId] },
};
}
return config;
}
/**
* @private
*/
function buildLayoutConfig({ pageTemplate, pageSlotPosition, breakpoint, section, } = {}) {
const layoutConfig = {};
if (pageTemplate && pageSlotPosition) {
const pageTemplateSlots = {};
if (breakpoint) {
pageTemplateSlots[breakpoint] = {
slots: [pageSlotPosition],
};
}
else {
pageTemplateSlots.slots = [pageSlotPosition];
}
layoutConfig.layoutSlots = {
[pageTemplate]: pageTemplateSlots,
};
}
if (section && pageSlotPosition) {
const sectionSlots = {};
if (breakpoint) {
sectionSlots[breakpoint] = { slots: [pageSlotPosition] };
}
else {
sectionSlots.slots = [pageSlotPosition];
}
if (layoutConfig.layoutSlots) {
layoutConfig.layoutSlots[section] = sectionSlots;
}
else {
layoutConfig.layoutSlots = {
[section]: sectionSlots,
};
}
}
return layoutConfig;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21zLXN0cnVjdHVyZS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RvcmVmcm9udGxpYi9jbXMtc3RydWN0dXJlL3V0aWxzL2Ntcy1zdHJ1Y3R1cmUudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXNCLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSXBFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLE9BQTRCO0lBRTVCLE9BQU8sYUFBYSxpQ0FDZixpQkFBaUIsQ0FBQyxPQUFPLENBQUMsR0FDMUIsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQzdCLENBQUM7QUFDTCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEVBQ3pCLFdBQVcsRUFDWCxnQkFBZ0IsTUFDTyxFQUFFO0lBQ3pCLE1BQU0sTUFBTSxHQUF1QixFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUV4RCxJQUFJLFdBQVcsRUFBRTtRQUNmLE1BQU0sQ0FBQyxZQUFZLEdBQUc7WUFDcEIsVUFBVSxFQUFFO2dCQUNWLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQ2IsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFFBQVEsRUFBRSxXQUFXO2lCQUN0QjthQUNGO1NBQ0YsQ0FBQztLQUNIO0lBRUQsSUFBSSxXQUFXLElBQUksZ0JBQWdCLEVBQUU7UUFDbkMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUc7WUFDMUIsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUU7U0FDcEQsQ0FBQztLQUNIO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxFQUN6QixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixPQUFPLE1BQ2dCLEVBQUU7SUFDekIsTUFBTSxZQUFZLEdBQWlCLEVBQUUsQ0FBQztJQUN0QyxJQUFJLFlBQVksSUFBSSxnQkFBZ0IsRUFBRTtRQUNwQyxNQUFNLGlCQUFpQixHQUFRLEVBQUUsQ0FBQztRQUNsQyxJQUFJLFVBQVUsRUFBRTtZQUNkLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxHQUFHO2dCQUM5QixLQUFLLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQzthQUMxQixDQUFDO1NBQ0g7YUFBTTtZQUNMLGlCQUFpQixDQUFDLEtBQUssR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDOUM7UUFDRCxZQUFZLENBQUMsV0FBVyxHQUFHO1lBQ3pCLENBQUMsWUFBWSxDQUFDLEVBQUUsaUJBQWlCO1NBQ2xDLENBQUM7S0FDSDtJQUVELElBQUksT0FBTyxJQUFJLGdCQUFnQixFQUFFO1FBQy9CLE1BQU0sWUFBWSxHQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLFVBQVUsRUFBRTtZQUNkLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztTQUMxRDthQUFNO1lBQ0wsWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDekM7UUFDRCxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUU7WUFDNUIsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxZQUFZLENBQUM7U0FDbEQ7YUFBTTtZQUNMLFlBQVksQ0FBQyxXQUFXLEdBQUc7Z0JBQ3pCLENBQUMsT0FBTyxDQUFDLEVBQUUsWUFBWTthQUN4QixDQUFDO1NBQ0g7S0FDRjtJQUNELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDbXNTdHJ1Y3R1cmVDb25maWcsIHByb3ZpZGVDb25maWcgfSBmcm9tICdAc3BhcnRhY3VzL2NvcmUnO1xuaW1wb3J0IHsgTGF5b3V0Q29uZmlnIH0gZnJvbSAnLi4vLi4vbGF5b3V0L2NvbmZpZy9sYXlvdXQtY29uZmlnJztcbmltcG9ydCB7IENtc1N0cnVjdHVyZU9wdGlvbnMgfSBmcm9tICcuL2Ntcy1zdHJ1Y3R1cmUubW9kZWwnO1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBzaW1wbGlmeSB0aGUgY3JlYXRpb24gb2Ygc3RhdGljIENNUyBzdHJ1Y3R1cmUgKGBDbXNTdHJ1Y3R1cmVDb25maWdgKS5cbiAqIFRoZSBoZWxwZXIgZnVuY3Rpb24gbGV2ZXJhZ2UgdGhlIGBwcm92aWRlQ29uZmlnYCwgYW5kIGlzIG9ubHkgcHJvdmlkaW5nIGFuIGVhc3kgd2F5IHRvXG4gKiBnZW5lcmF0ZSB0aGUgY21zIHN0cnVjdHVyZS4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgY29tcG9uZW50cyxcbiAqIHBhZ2Ugc2xvdCBhbmQgcGFnZSB0ZW1wbGF0ZS4gVGhlIGZvbGxvd2luZyBleGFtcGxlIGFkZHMgYSBjb21wb25lbnQgdG8gYSBwYWdlIHNsb3Q6XG4gKlxuICogYGBgdHNcbiAqIHByb3ZpZGVDbXNTdHJ1Y3R1cmUoe1xuICogICBjb21wb25lbnRJZDogJ0xvZ2luQ29tcG9uZW50JyxcbiAqICAgcGFnZVNsb3RQb3NpdGlvbjogJ1NpdGVMb2dpbidcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucy5jb21wb25lbnRJZCBjb21wb25lbnQgaWRlbnRpZmllciBpcyB1c2VkIHRvIHByb3ZpZGUgY29tcG9uZW50IHN0cnVjdHVyZVxuICogQHBhcmFtIG9wdGlvbnMucGFnZVNsb3RQb3NpdGlvbiBwYWdlIHNsb3QgcG9zaXRpb24gaXMgdXNlZCB0byBwcm92aWRlIHRoZSBzbG90IGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBvcHRpb25zLnBhZ2VUZW1wbGF0ZSB0aGUgcGFnZSB0ZW1wbGF0ZSBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIHBhZ2Ugc2xvdCB0byB0aGUgZ2l2ZW4gcGFnZSB0ZW1wbGF0ZVxuICogQHBhcmFtIG9wdGlvbnMuc2VjdGlvbiB0aGUgc2VjdGlvbiBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIHBhZ2Ugc2xvdCB0byB0aGUgZ2l2ZW4gc2VjdGlvblxuICogQHBhcmFtIG9wdGlvbnMuYnJlYWtwb2ludCB0aGUgYnJlYWtwb2ludCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIHBhZ2Ugc2xvdCBmb3IgYSBzcGVjaWZpYyBicmVha3BvaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQ21zU3RydWN0dXJlKFxuICBvcHRpb25zOiBDbXNTdHJ1Y3R1cmVPcHRpb25zXG4pOiBWYWx1ZVByb3ZpZGVyIHtcbiAgcmV0dXJuIHByb3ZpZGVDb25maWcoe1xuICAgIC4uLmJ1aWxkQ21zU3RydWN0dXJlKG9wdGlvbnMpLFxuICAgIC4uLmJ1aWxkTGF5b3V0Q29uZmlnKG9wdGlvbnMpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBidWlsZENtc1N0cnVjdHVyZSh7XG4gIGNvbXBvbmVudElkLFxuICBwYWdlU2xvdFBvc2l0aW9uLFxufTogQ21zU3RydWN0dXJlT3B0aW9ucyA9IHt9KTogQ21zU3RydWN0dXJlQ29uZmlnIHtcbiAgY29uc3QgY29uZmlnOiBDbXNTdHJ1Y3R1cmVDb25maWcgPSB7IGNtc1N0cnVjdHVyZToge30gfTtcblxuICBpZiAoY29tcG9uZW50SWQpIHtcbiAgICBjb25maWcuY21zU3RydWN0dXJlID0ge1xuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBbY29tcG9uZW50SWRdOiB7XG4gICAgICAgICAgdHlwZUNvZGU6IGNvbXBvbmVudElkLFxuICAgICAgICAgIGZsZXhUeXBlOiBjb21wb25lbnRJZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChjb21wb25lbnRJZCAmJiBwYWdlU2xvdFBvc2l0aW9uKSB7XG4gICAgY29uZmlnLmNtc1N0cnVjdHVyZS5zbG90cyA9IHtcbiAgICAgIFtwYWdlU2xvdFBvc2l0aW9uXTogeyBjb21wb25lbnRJZHM6IFtjb21wb25lbnRJZF0gfSxcbiAgICB9O1xuICB9XG4gIHJldHVybiBjb25maWc7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYnVpbGRMYXlvdXRDb25maWcoe1xuICBwYWdlVGVtcGxhdGUsXG4gIHBhZ2VTbG90UG9zaXRpb24sXG4gIGJyZWFrcG9pbnQsXG4gIHNlY3Rpb24sXG59OiBDbXNTdHJ1Y3R1cmVPcHRpb25zID0ge30pOiBMYXlvdXRDb25maWcge1xuICBjb25zdCBsYXlvdXRDb25maWc6IExheW91dENvbmZpZyA9IHt9O1xuICBpZiAocGFnZVRlbXBsYXRlICYmIHBhZ2VTbG90UG9zaXRpb24pIHtcbiAgICBjb25zdCBwYWdlVGVtcGxhdGVTbG90czogYW55ID0ge307XG4gICAgaWYgKGJyZWFrcG9pbnQpIHtcbiAgICAgIHBhZ2VUZW1wbGF0ZVNsb3RzW2JyZWFrcG9pbnRdID0ge1xuICAgICAgICBzbG90czogW3BhZ2VTbG90UG9zaXRpb25dLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFnZVRlbXBsYXRlU2xvdHMuc2xvdHMgPSBbcGFnZVNsb3RQb3NpdGlvbl07XG4gICAgfVxuICAgIGxheW91dENvbmZpZy5sYXlvdXRTbG90cyA9IHtcbiAgICAgIFtwYWdlVGVtcGxhdGVdOiBwYWdlVGVtcGxhdGVTbG90cyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHNlY3Rpb24gJiYgcGFnZVNsb3RQb3NpdGlvbikge1xuICAgIGNvbnN0IHNlY3Rpb25TbG90czogYW55ID0ge307XG4gICAgaWYgKGJyZWFrcG9pbnQpIHtcbiAgICAgIHNlY3Rpb25TbG90c1ticmVha3BvaW50XSA9IHsgc2xvdHM6IFtwYWdlU2xvdFBvc2l0aW9uXSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWN0aW9uU2xvdHMuc2xvdHMgPSBbcGFnZVNsb3RQb3NpdGlvbl07XG4gICAgfVxuICAgIGlmIChsYXlvdXRDb25maWcubGF5b3V0U2xvdHMpIHtcbiAgICAgIGxheW91dENvbmZpZy5sYXlvdXRTbG90c1tzZWN0aW9uXSA9IHNlY3Rpb25TbG90cztcbiAgICB9IGVsc2Uge1xuICAgICAgbGF5b3V0Q29uZmlnLmxheW91dFNsb3RzID0ge1xuICAgICAgICBbc2VjdGlvbl06IHNlY3Rpb25TbG90cyxcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBsYXlvdXRDb25maWc7XG59XG4iXX0=