scrivito
Version:
Scrivito is a professional, yet easy to use SaaS Enterprise Content Management Service, built for digital agencies and medium to large businesses. It is completely maintenance-free, cost-effective, and has unprecedented performance and security.
30 lines (22 loc) • 879 B
text/typescript
import { BasicObj, BasicWidget } from 'scrivito_sdk/models';
import { schemaFromBasicObjOrWidget } from 'scrivito_sdk/realm';
export function subWidgets(content: BasicObj | BasicWidget): BasicWidget[] {
const contentSchema = schemaFromBasicObjOrWidget(content);
if (!contentSchema) return [];
const attributes = contentSchema.attributes();
return Object.keys(attributes).reduce((memo, attrName) => {
const [attrType] = attributes[attrName];
if (attrType === 'widget') {
const widget = content.get(attrName, 'widget');
if (widget) return [...memo, widget, ...subWidgets(widget)];
}
if (attrType === 'widgetlist') {
const widgets = content.get(attrName, 'widgetlist');
return Array.prototype.concat(
memo,
...widgets.map((widget) => [widget, ...subWidgets(widget)])
);
}
return memo;
}, []);
}