Skip to content

Commit a5a965a

Browse files
committed
fix: 🐛 mapViews is async only for mounting methods
Always async mapViews method cause problem with updating and unmounting widget in external application.
1 parent d059203 commit a5a965a

File tree

1 file changed

+32
-19
lines changed
  • packages/create-widget/template/src/lib

1 file changed

+32
-19
lines changed

Diff for: packages/create-widget/template/src/lib/utils.js

+32-19
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,38 @@
1-
async function mapViews(widget, factoryFn, callback) {
2-
const { View, slot = {} } = await factoryFn(widget);
3-
const { containerSelector } = widget;
1+
function mapViews(widget, factoryFn, callback) {
2+
if (widget.$external.resolvedViews) {
3+
return mapResolvedViews(widget, callback);
4+
}
45

5-
// Add container selectors defined on widget instance after creation
6-
Object.keys(widget.slot).forEach((slotName) => {
7-
slot[slotName].isSlot = true;
8-
slot[slotName].containerSelector = widget.slot[slotName].containerSelector;
9-
});
10-
11-
return [
12-
{ View, containerSelector, isSlot: false },
13-
...Object.values(slot),
14-
].map(({ View, containerSelector, isSlot }) => {
15-
callback({
16-
View,
17-
isSlot,
18-
containerSelector,
19-
container:
20-
containerSelector && document?.querySelector(containerSelector),
6+
return factoryFn(widget).then(({ View, slot = {} }) => {
7+
const { containerSelector } = widget;
8+
// Add container selectors defined on widget instance after creation
9+
Object.keys(widget.slot).forEach((slotName) => {
10+
slot[slotName].isSlot = true;
11+
slot[slotName].containerSelector =
12+
widget.slot[slotName].containerSelector;
2113
});
14+
15+
widget.$external.resolvedViews = [
16+
{ View, containerSelector, isSlot: false },
17+
...Object.values(slot),
18+
];
19+
20+
return mapResolvedViews(widget, callback);
2221
});
2322
}
2423

24+
function mapResolvedViews(widget, callback) {
25+
return widget.$external.resolvedViews.map(
26+
({ View, containerSelector, isSlot }) => {
27+
callback({
28+
View,
29+
isSlot,
30+
containerSelector,
31+
container:
32+
containerSelector && document?.querySelector(containerSelector),
33+
});
34+
}
35+
);
36+
}
37+
2538
export { mapViews };

0 commit comments

Comments
 (0)