message: Clean up widgets when leaving the room
diff: @@ -31,6 +31,7 @@ export default class PersistentApp extends React.Component {
  componentDidMount() {
  this._roomStoreToken = RoomViewStore.addListener(this._onRoomViewStoreUpdate);
  ActiveWidgetStore.on('update', this._onActiveWidgetStoreUpdate);
  + MatrixClientPeg.get().on("Room.myMembership", this._onMyMembership);
  }
  componentWillUnmount() {
  @@ -38,6 +39,9 @@ export default class PersistentApp extends React.Component {
  this._roomStoreToken.remove();
  }
  ActiveWidgetStore.removeListener('update', this._onActiveWidgetStoreUpdate);
  + if (MatrixClientPeg.get()) {
  + MatrixClientPeg.get().removeListener("Room.myMembership", this._onMyMembership);
  + }
  }
  _onRoomViewStoreUpdate = payload => {
  @@ -53,16 +57,28 @@ export default class PersistentApp extends React.Component {
  });
  };
  + _onMyMembership = async (room) => {
  + const persistentWidgetInRoomId = ActiveWidgetStore.getRoomId(this.state.persistentWidgetId);
  + if (room.getMyMembership() !== "join") {
  + // we're not in the room anymore - delete
  + if (room.roomId === persistentWidgetInRoomId) {
  + ActiveWidgetStore.destroyPersistentWidget(this.state.persistentWidgetId);
  + }
  + }
  + };
  +
  render() {
  if (this.state.persistentWidgetId) {
  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;
  + const myMembership = persistentWidgetInRoom.getMyMembership();
  + if (this.state.roomId !== persistentWidgetInRoomId && myMembership === "join") {
  // get the widget data
  const appEvent = WidgetUtils.getRoomWidgets(persistentWidgetInRoom).find((ev) => {
  return ev.getStateKey() === ActiveWidgetStore.getPersistentWidgetId();
  