Fix WidgetStore wrongly hanging onto old Widget definitions during removal
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>pull/21833/head
							parent
							
								
									951ad5d581
								
							
						
					
					
						commit
						cf23417e6e
					
				|  | @ -55,7 +55,7 @@ class WidgetEchoStore extends EventEmitter { | |||
|             const widgetId = w.getStateKey(); | ||||
|             // 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,
 | ||||
|             // 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) { | ||||
|                 echoedWidgets.push(w); | ||||
|             } | ||||
|  |  | |||
|  | @ -122,6 +122,15 @@ export default class WidgetStore extends AsyncStoreWithClient<IState> { | |||
|         if (!room) return; | ||||
|         const roomInfo = this.roomMap.get(room.roomId); | ||||
|         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.widgetMap.set(app.id, app); | ||||
|             roomInfo.widgets.push(app); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Michael Telatynski
						Michael Telatynski