mirror of
https://github.com/element-hq/element-web
synced 2024-11-26 11:15:53 +03:00
Ensure widgets are destroyed cleanly when minimized
Fixes https://github.com/vector-im/element-web/issues/15444 (an artifact of joining a call then minimizing the widget) Also fixes other issues relating to widgets not loading when being minimized/maximized.
This commit is contained in:
parent
40038a6100
commit
294c35347c
3 changed files with 15 additions and 3 deletions
|
@ -240,10 +240,14 @@ export default class AppTile extends React.Component {
|
|||
this.iframe.src = 'about:blank';
|
||||
}
|
||||
|
||||
if (WidgetType.JITSI.matches(this.props.app.type)) {
|
||||
dis.dispatch({action: 'hangup_conference'});
|
||||
}
|
||||
|
||||
// Delete the widget from the persisted store for good measure.
|
||||
PersistedElement.destroyElement(this._persistKey);
|
||||
|
||||
this._sgWidget.stop();
|
||||
this._sgWidget.stop({forceDestroy: true});
|
||||
}
|
||||
|
||||
/* If user has permission to modify widgets, delete the widget,
|
||||
|
@ -387,6 +391,9 @@ export default class AppTile extends React.Component {
|
|||
if (this.props.show) {
|
||||
// if we were being shown, end the widget as we're about to be minimized.
|
||||
this._endWidgetActions();
|
||||
} else {
|
||||
// restart the widget actions
|
||||
this._resetWidget(this.props);
|
||||
}
|
||||
dis.dispatch({
|
||||
action: 'appsDrawer',
|
||||
|
|
|
@ -58,6 +58,11 @@ export default class PersistentApp extends React.Component {
|
|||
const persistentWidgetInRoomId = ActiveWidgetStore.getRoomId(this.state.persistentWidgetId);
|
||||
if (this.state.roomId !== persistentWidgetInRoomId) {
|
||||
const persistentWidgetInRoom = MatrixClientPeg.get().getRoom(persistentWidgetInRoomId);
|
||||
|
||||
// Sanity check the room - the widget may have been destroyed between render cycles, and
|
||||
// thus no room is associated anymore.
|
||||
if (!persistentWidgetInRoom) return null;
|
||||
|
||||
// get the widget data
|
||||
const appEvent = WidgetUtils.getRoomWidgets(persistentWidgetInRoom).find((ev) => {
|
||||
return ev.getStateKey() === ActiveWidgetStore.getPersistentWidgetId();
|
||||
|
|
|
@ -283,8 +283,8 @@ export class StopGapWidget extends EventEmitter {
|
|||
}
|
||||
}
|
||||
|
||||
public stop() {
|
||||
if (ActiveWidgetStore.getPersistentWidgetId() === this.mockWidget.id) {
|
||||
public stop(opts = {forceDestroy: false}) {
|
||||
if (!opts?.forceDestroy && ActiveWidgetStore.getPersistentWidgetId() === this.mockWidget.id) {
|
||||
console.log("Skipping destroy - persistent widget");
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue