UNPKG

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