UNPKG

@merkur/plugin-component

Version:

Merkur component plugin.

61 lines (59 loc) 1.97 kB
/** * Utility function to iterate thorugh views returned from * view factory and call callback function with view arguments * on each them. */ async function mapViews(widget, viewFactory, callback) { var _widget$slot; if (widget.$in.component.resolvedViews.has(viewFactory)) { var _widget$$in$component; return mapResolvedViews((_widget$$in$component = widget.$in.component.resolvedViews.get(viewFactory)) !== null && _widget$$in$component !== void 0 ? _widget$$in$component : [], callback); } const { containerSelector } = widget; const { View, ErrorView, slot = {} } = await viewFactory(widget); // Add additional slot information to slot views const slots = Object.keys((_widget$slot = widget.slot) !== null && _widget$slot !== void 0 ? _widget$slot : {}).reduce((acc, cur) => { var _widget$slot$cur, _widget$slot$cur2; acc[cur] = { ...slot[cur], isSlot: true, containerSelector: (_widget$slot$cur = widget.slot[cur]) === null || _widget$slot$cur === void 0 ? void 0 : _widget$slot$cur.containerSelector, container: (_widget$slot$cur2 = widget.slot[cur]) === null || _widget$slot$cur2 === void 0 ? void 0 : _widget$slot$cur2.container }; return acc; }, {}); const views = [{ View, ErrorView, containerSelector, isSlot: false, container: widget.container }, ...Object.values(slots)]; widget.$in.component.resolvedViews.set(viewFactory, views); return mapResolvedViews(views, callback); } function mapResolvedViews(views, callback) { return views.map(({ View, ErrorView, containerSelector, isSlot, container }) => { var _document; callback({ View, ErrorView, isSlot, containerSelector, container: containerSelector && ((_document = document) === null || _document === void 0 ? void 0 : _document.querySelector(containerSelector)) || container || null }); }); } export { mapViews };