Fix WidgetStore wrongly hanging onto old Widget definitions during removal
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
parent
951ad5d581
commit
cf23417e6e
2 changed files with 10 additions and 1 deletions
|
@ -55,7 +55,7 @@ class WidgetEchoStore extends EventEmitter {
|
||||||
const widgetId = w.getStateKey();
|
const widgetId = w.getStateKey();
|
||||||
// If there's no echo, or the echo still has a widget present, show the *old* widget
|
// If there's no echo, or the echo still has a widget present, show the *old* widget
|
||||||
// we don't include widgets that have changed for the same reason we don't include new ones,
|
// we don't include widgets that have changed for the same reason we don't include new ones,
|
||||||
// ie. we'd need to fake matrix events to do so and therte's currently no need.
|
// ie. we'd need to fake matrix events to do so and there's currently no need.
|
||||||
if (!roomEchoState[widgetId] || Object.keys(roomEchoState[widgetId]).length !== 0) {
|
if (!roomEchoState[widgetId] || Object.keys(roomEchoState[widgetId]).length !== 0) {
|
||||||
echoedWidgets.push(w);
|
echoedWidgets.push(w);
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,6 +122,15 @@ export default class WidgetStore extends AsyncStoreWithClient<IState> {
|
||||||
if (!room) return;
|
if (!room) return;
|
||||||
const roomInfo = this.roomMap.get(room.roomId);
|
const roomInfo = this.roomMap.get(room.roomId);
|
||||||
roomInfo.widgets = [];
|
roomInfo.widgets = [];
|
||||||
|
|
||||||
|
// first clean out old widgets from the map which originate from this room
|
||||||
|
// otherwise we are out of sync with the rest of the app with stale widget events during removal
|
||||||
|
Array.from(this.widgetMap.values()).forEach(app => {
|
||||||
|
if (app.roomId === room.roomId) {
|
||||||
|
this.widgetMap.delete(app.id);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
this.generateApps(room).forEach(app => {
|
this.generateApps(room).forEach(app => {
|
||||||
this.widgetMap.set(app.id, app);
|
this.widgetMap.set(app.id, app);
|
||||||
roomInfo.widgets.push(app);
|
roomInfo.widgets.push(app);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue