From 1b141681ae6a169272003fa83fb83ba245dbafc7 Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Thu, 3 Nov 2016 11:23:57 -0400 Subject: Add status listeners back to user list modals (#4428) --- webapp/components/channel_invite_modal.jsx | 21 +++++++++++++++++---- webapp/components/channel_members_modal.jsx | 26 ++++++++++++++++++++++---- webapp/components/member_list_team.jsx | 13 ++++++++----- 3 files changed, 47 insertions(+), 13 deletions(-) (limited to 'webapp') diff --git a/webapp/components/channel_invite_modal.jsx b/webapp/components/channel_invite_modal.jsx index 7f6ca4d32..576a33dc5 100644 --- a/webapp/components/channel_invite_modal.jsx +++ b/webapp/components/channel_invite_modal.jsx @@ -25,6 +25,7 @@ export default class ChannelInviteModal extends React.Component { super(props); this.onChange = this.onChange.bind(this); + this.onStatusChange = this.onStatusChange.bind(this); this.handleInviteError = this.handleInviteError.bind(this); this.nextPage = this.nextPage.bind(this); this.search = this.search.bind(this); @@ -37,7 +38,8 @@ export default class ChannelInviteModal extends React.Component { this.state = { users: [], total: teamStats.member_count - channelStats.member_count, - search: false + search: false, + statusChange: false }; } @@ -46,6 +48,7 @@ export default class ChannelInviteModal extends React.Component { TeamStore.addStatsChangeListener(this.onChange); ChannelStore.addStatsChangeListener(this.onChange); UserStore.addNotInChannelChangeListener(this.onChange); + UserStore.addStatusesChangeListener(this.onStatusChange); this.onChange(); AsyncClient.getProfilesNotInChannel(this.props.channel.id, 0); @@ -54,6 +57,7 @@ export default class ChannelInviteModal extends React.Component { TeamStore.removeStatsChangeListener(this.onChange); ChannelStore.removeStatsChangeListener(this.onChange); UserStore.removeNotInChannelChangeListener(this.onChange); + UserStore.removeStatusesChangeListener(this.onStatusChange); } } @@ -61,10 +65,11 @@ export default class ChannelInviteModal extends React.Component { ChannelStore.removeStatsChangeListener(this.onChange); ChannelStore.removeChangeListener(this.onChange); UserStore.removeNotInChannelChangeListener(this.onChange); + UserStore.removeStatusesChangeListener(this.onStatusChange); } - onChange() { - if (this.state.search) { + onChange(force) { + if (this.state.search && !force) { this.search(this.term); return; } @@ -78,6 +83,13 @@ export default class ChannelInviteModal extends React.Component { }); } + onStatusChange() { + // Initiate a render to pick up on new statuses + this.setState({ + statusChange: !this.state.statusChange + }); + } + handleInviteError(err) { if (err) { this.setState({ @@ -98,7 +110,8 @@ export default class ChannelInviteModal extends React.Component { this.term = term; if (term === '') { - this.setState({users: UserStore.getProfileListNotInChannel(), search: false}); + this.onChange(true); + this.setState({search: false}); return; } diff --git a/webapp/components/channel_members_modal.jsx b/webapp/components/channel_members_modal.jsx index 76ce535ad..75810cf05 100644 --- a/webapp/components/channel_members_modal.jsx +++ b/webapp/components/channel_members_modal.jsx @@ -27,6 +27,7 @@ export default class ChannelMembersModal extends React.Component { super(props); this.onChange = this.onChange.bind(this); + this.onStatusChange = this.onStatusChange.bind(this); this.handleRemove = this.handleRemove.bind(this); this.createRemoveMemberButton = this.createRemoveMemberButton.bind(this); this.search = this.search.bind(this); @@ -40,7 +41,8 @@ export default class ChannelMembersModal extends React.Component { users: [], total: stats.member_count, showInviteModal: false, - search: false + search: false, + statusChange: false }; } @@ -48,17 +50,25 @@ export default class ChannelMembersModal extends React.Component { if (!this.props.show && nextProps.show) { ChannelStore.addStatsChangeListener(this.onChange); UserStore.addInChannelChangeListener(this.onChange); + UserStore.addStatusesChangeListener(this.onStatusChange); this.onChange(); AsyncClient.getProfilesInChannel(this.props.channel.id, 0); } else if (this.props.show && !nextProps.show) { ChannelStore.removeStatsChangeListener(this.onChange); UserStore.removeInChannelChangeListener(this.onChange); + UserStore.removeStatusesChangeListener(this.onStatusChange); } } - onChange() { - if (this.state.search) { + componentWillUnmount() { + ChannelStore.removeStatsChangeListener(this.onChange); + UserStore.removeInChannelChangeListener(this.onChange); + UserStore.removeStatusesChangeListener(this.onStatusChange); + } + + onChange(force) { + if (this.state.search && !force) { this.search(this.term); return; } @@ -70,6 +80,13 @@ export default class ChannelMembersModal extends React.Component { }); } + onStatusChange() { + // Initiate a render to pick up on new statuses + this.setState({ + statusChange: !this.state.statusChange + }); + } + handleRemove(user) { const userId = user.id; @@ -110,7 +127,8 @@ export default class ChannelMembersModal extends React.Component { this.term = term; if (term === '') { - this.setState({users: UserStore.getProfileListInChannel(this.props.channel.id), search: false}); + this.onChange(true); + this.setState({search: false}); return; } diff --git a/webapp/components/member_list_team.jsx b/webapp/components/member_list_team.jsx index e457e48a4..b32ab117d 100644 --- a/webapp/components/member_list_team.jsx +++ b/webapp/components/member_list_team.jsx @@ -38,6 +38,7 @@ export default class MemberListTeam extends React.Component { componentDidMount() { UserStore.addInTeamChangeListener(this.onChange); + UserStore.addStatusesChangeListener(this.onChange); TeamStore.addChangeListener(this.onChange); TeamStore.addStatsChangeListener(this.onStatsChange); @@ -47,6 +48,7 @@ export default class MemberListTeam extends React.Component { componentWillUnmount() { UserStore.removeInTeamChangeListener(this.onChange); + UserStore.removeStatusesChangeListener(this.onChange); TeamStore.removeChangeListener(this.onChange); TeamStore.removeStatsChangeListener(this.onStatsChange); } @@ -55,12 +57,12 @@ export default class MemberListTeam extends React.Component { this.setState({loading: false}); } - onChange() { - if (!this.state.search) { - this.setState({users: UserStore.getProfileListInTeam()}); + onChange(force) { + if (this.state.search && !force) { + return; } - this.setState({teamMembers: Object.assign([], TeamStore.getMembersInTeam())}); + this.setState({users: UserStore.getProfileListInTeam(), teamMembers: Object.assign([], TeamStore.getMembersInTeam())}); } onStatsChange() { @@ -74,7 +76,8 @@ export default class MemberListTeam extends React.Component { search(term) { if (term === '') { - this.setState({search: false, users: UserStore.getProfileListInTeam()}); + this.onChange(true); + this.setState({search: false}); return; } -- cgit v1.2.3-1-g7c22