Destroy widget when its permission is revoked

This commit is contained in:
David Baker 2018-07-23 17:11:53 +01:00
parent c1891aa005
commit 6804647dda

View file

@ -161,14 +161,18 @@ export default class AppTile extends React.Component {
// if it's not remaining on screen, get rid of the PersistedElement container
if (!ActiveWidgetStore.getWidgetPersistence(this.props.id)) {
// FIXME: ActiveWidgetStore should probably worry about this?
const PersistedElement = sdk.getComponent("elements.PersistedElement");
PersistedElement.destroyElement(this._persistKey);
ActiveWidgetStore.delWidgetMessaging(this.props.id);
ActiveWidgetStore.delWidgetCapabilities(this.props.id);
ActiveWidgetStore.delRoomId(this.props.id);
this._destroyPersistentWidget();
}
}
_destroyPersistentWidget() {
const PersistedElement = sdk.getComponent("elements.PersistedElement");
PersistedElement.destroyElement(this._persistKey);
ActiveWidgetStore.delWidgetMessaging(this.props.id);
ActiveWidgetStore.delWidgetCapabilities(this.props.id);
ActiveWidgetStore.delRoomId(this.props.id);
}
/**
* Adds a scalar token to the widget URL, if required
* Component initialisation is only complete when this function has resolved
@ -439,6 +443,10 @@ export default class AppTile extends React.Component {
console.warn('Revoking permission to load widget - ', this.state.widgetUrl);
localStorage.removeItem(this.state.widgetPermissionId);
this.setState({hasPermissionToLoad: false});
// Force the widget to be non-persistent
ActiveWidgetStore.setWidgetPersistence(this.props.id, false);
this._destroyPersistentWidget();
}
formatAppTileName() {