mirror of https://github.com/vector-im/riot-web
Clean up widgets when leaving the room
parent
dee7c7b556
commit
e2fb9b3ae8
|
@ -31,6 +31,7 @@ export default class PersistentApp extends React.Component {
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
this._roomStoreToken = RoomViewStore.addListener(this._onRoomViewStoreUpdate);
|
this._roomStoreToken = RoomViewStore.addListener(this._onRoomViewStoreUpdate);
|
||||||
ActiveWidgetStore.on('update', this._onActiveWidgetStoreUpdate);
|
ActiveWidgetStore.on('update', this._onActiveWidgetStoreUpdate);
|
||||||
|
MatrixClientPeg.get().on("Room.myMembership", this._onMyMembership);
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
|
@ -38,6 +39,9 @@ export default class PersistentApp extends React.Component {
|
||||||
this._roomStoreToken.remove();
|
this._roomStoreToken.remove();
|
||||||
}
|
}
|
||||||
ActiveWidgetStore.removeListener('update', this._onActiveWidgetStoreUpdate);
|
ActiveWidgetStore.removeListener('update', this._onActiveWidgetStoreUpdate);
|
||||||
|
if (MatrixClientPeg.get()) {
|
||||||
|
MatrixClientPeg.get().removeListener("Room.myMembership", this._onMyMembership);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_onRoomViewStoreUpdate = payload => {
|
_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() {
|
render() {
|
||||||
if (this.state.persistentWidgetId) {
|
if (this.state.persistentWidgetId) {
|
||||||
const persistentWidgetInRoomId = ActiveWidgetStore.getRoomId(this.state.persistentWidgetId);
|
const persistentWidgetInRoomId = ActiveWidgetStore.getRoomId(this.state.persistentWidgetId);
|
||||||
if (this.state.roomId !== persistentWidgetInRoomId) {
|
|
||||||
const persistentWidgetInRoom = MatrixClientPeg.get().getRoom(persistentWidgetInRoomId);
|
const persistentWidgetInRoom = MatrixClientPeg.get().getRoom(persistentWidgetInRoomId);
|
||||||
|
|
||||||
// Sanity check the room - the widget may have been destroyed between render cycles, and
|
// Sanity check the room - the widget may have been destroyed between render cycles, and
|
||||||
// thus no room is associated anymore.
|
// thus no room is associated anymore.
|
||||||
if (!persistentWidgetInRoom) return null;
|
if (!persistentWidgetInRoom) return null;
|
||||||
|
|
||||||
|
const myMembership = persistentWidgetInRoom.getMyMembership();
|
||||||
|
if (this.state.roomId !== persistentWidgetInRoomId && myMembership === "join") {
|
||||||
// get the widget data
|
// get the widget data
|
||||||
const appEvent = WidgetUtils.getRoomWidgets(persistentWidgetInRoom).find((ev) => {
|
const appEvent = WidgetUtils.getRoomWidgets(persistentWidgetInRoom).find((ev) => {
|
||||||
return ev.getStateKey() === ActiveWidgetStore.getPersistentWidgetId();
|
return ev.getStateKey() === ActiveWidgetStore.getPersistentWidgetId();
|
||||||
|
|
Loading…
Reference in New Issue