Make ActiveWidgetStore clear persistent widgets
ActiveWidgetStore is now reponsible for removing the current persistent widget from the store if it's been removed from whatever room it was in. As per comment, this leaves us with the store updating itself in this case but in all other cases, views call setters on the store to update its state. We should make it so the store keeps itself up to date and views aren't responsible for keeping the store up to date. The store now emits events so it can notify PersistentApp when it changes. Fixes https://github.com/vector-im/riot-web/issues/7076
This commit is contained in:
parent
6804647dda
commit
ec4c7ffb71
3 changed files with 60 additions and 3 deletions
|
@ -27,17 +27,20 @@ module.exports = React.createClass({
|
|||
getInitialState: function() {
|
||||
return {
|
||||
roomId: RoomViewStore.getRoomId(),
|
||||
persistentWidgetId: ActiveWidgetStore.getPersistentWidgetId(),
|
||||
};
|
||||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
this._roomStoreToken = RoomViewStore.addListener(this._onRoomViewStoreUpdate);
|
||||
ActiveWidgetStore.on('update', this._onActiveWidgetStoreUpdate);
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
if (this._roomStoreToken) {
|
||||
this._roomStoreToken.remove();
|
||||
}
|
||||
ActiveWidgetStore.removeListener('update', this._onActiveWidgetStoreUpdate);
|
||||
},
|
||||
|
||||
_onRoomViewStoreUpdate: function(payload) {
|
||||
|
@ -47,9 +50,15 @@ module.exports = React.createClass({
|
|||
});
|
||||
},
|
||||
|
||||
_onActiveWidgetStoreUpdate: function() {
|
||||
this.setState({
|
||||
persistentWidgetId: ActiveWidgetStore.getPersistentWidgetId(),
|
||||
});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
if (ActiveWidgetStore.getPersistentWidgetId()) {
|
||||
const persistentWidgetInRoomId = ActiveWidgetStore.getRoomId(ActiveWidgetStore.getPersistentWidgetId());
|
||||
if (this.state.persistentWidgetId) {
|
||||
const persistentWidgetInRoomId = ActiveWidgetStore.getRoomId(this.state.persistentWidgetId);
|
||||
if (this.state.roomId !== persistentWidgetInRoomId) {
|
||||
const persistentWidgetInRoom = MatrixClientPeg.get().getRoom(persistentWidgetInRoomId);
|
||||
// get the widget data
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue