Use correct group store state when rendering "Invite to this community"

This required slight rework of how RightPanel uses the group store, and now it knows an unfortunate amount about the group store. Food for thought on stores in general, I think.
This commit is contained in:
Luke Barnard 2017-10-27 14:23:45 +01:00
parent 3df1808fd0
commit 7bae7fe9e5

View File

@ -100,6 +100,7 @@ module.exports = React.createClass({
this.dispatcherRef = dis.register(this.onAction); this.dispatcherRef = dis.register(this.onAction);
const cli = this.context.matrixClient; const cli = this.context.matrixClient;
cli.on("RoomState.members", this.onRoomStateMember); cli.on("RoomState.members", this.onRoomStateMember);
this._initGroupStore(this.props.groupId);
}, },
componentWillUnmount: function() { componentWillUnmount: function() {
@ -107,20 +108,42 @@ module.exports = React.createClass({
if (this.context.matrixClient) { if (this.context.matrixClient) {
this.context.matrixClient.removeListener("RoomState.members", this.onRoomStateMember); this.context.matrixClient.removeListener("RoomState.members", this.onRoomStateMember);
} }
this._unregisterGroupStore();
}, },
getInitialState: function() { getInitialState: function() {
if (this.props.groupId) { return {
return { phase: this.props.groupId ? this.Phase.GroupMemberList : this.Phase.RoomMemberList,
phase: this.Phase.GroupMemberList, isUserPrivilegedInGroup: null,
};
} else {
return {
phase: this.Phase.RoomMemberList,
};
} }
}, },
componentWillReceiveProps(newProps) {
if (newProps.groupId !== this.props.groupId) {
this._unregisterGroupStore();
this._initGroupStore(newProps.groupId);
}
},
_initGroupStore(groupId) {
this._groupStore = GroupStoreCache.getGroupStore(
this.context.matrixClient, this.props.groupId,
);
this._groupStore.registerListener(this.onGroupStoreUpdated);
},
_unregisterGroupStore() {
if (this._groupStore) {
this._groupStore.unregisterListener(this.onGroupStoreUpdated);
}
},
onGroupStoreUpdated: function(){
this.setState({
isUserPrivilegedInGroup: this._groupStore.isUserPrivileged(),
});
},
onCollapseClick: function() { onCollapseClick: function() {
dis.dispatch({ dis.dispatch({
action: 'hide_right_panel', action: 'hide_right_panel',
@ -328,9 +351,7 @@ module.exports = React.createClass({
panel = <div className="mx_RightPanel_blank"></div>; panel = <div className="mx_RightPanel_blank"></div>;
} }
if (this.props.groupId && if (this.props.groupId && this.state.isUserPrivilegedInGroup) {
GroupStoreCache.getGroupStore(this.context.matrixClient, this.props.groupId).isUserPrivileged()
) {
inviteGroup = isPhaseGroup ? ( inviteGroup = isPhaseGroup ? (
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } > <AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
<div className="mx_RightPanel_icon" > <div className="mx_RightPanel_icon" >