Discard outdated results in modal searches (#5082)

Этот коммит содержится в:
Joram Wilander
2017-01-16 18:32:51 -05:00
коммит произвёл Corey Hulen
родитель 4257114a37
Коммит 6b2c4a346b
6 изменённых файлов: 43 добавлений и 8 удалений

Просмотреть файл

@@ -158,13 +158,17 @@ export default class UserList extends React.Component {
clearTimeout(this.searchTimeoutId); clearTimeout(this.searchTimeoutId);
this.searchTimeoutId = setTimeout( const searchTimeoutId = setTimeout(
() => { () => {
searchUsers( searchUsers(
term, term,
this.props.params.team, this.props.params.team,
options, options,
(users) => { (users) => {
if (searchTimeoutId !== this.searchTimeoutId) {
return;
}
this.setState({loading: true, search: true, users}); this.setState({loading: true, search: true, users});
loadTeamMembersForProfilesList(users, this.props.params.team, this.loadComplete); loadTeamMembersForProfilesList(users, this.props.params.team, this.loadComplete);
} }
@@ -172,6 +176,8 @@ export default class UserList extends React.Component {
}, },
Constants.SEARCH_TIMEOUT_MILLISECONDS Constants.SEARCH_TIMEOUT_MILLISECONDS
); );
this.searchTimeoutId = searchTimeoutId;
} }
render() { render() {

Просмотреть файл

@@ -117,19 +117,25 @@ export default class ChannelInviteModal extends React.Component {
clearTimeout(this.searchTimeoutId); clearTimeout(this.searchTimeoutId);
this.searchTimeoutId = setTimeout( const searchTimeoutId = setTimeout(
() => { () => {
searchUsers( searchUsers(
term, term,
TeamStore.getCurrentId(), TeamStore.getCurrentId(),
{not_in_channel_id: this.props.channel.id}, {not_in_channel_id: this.props.channel.id},
(users) => { (users) => {
if (searchTimeoutId !== this.searchTimeoutId) {
return;
}
this.setState({search: true, users}); this.setState({search: true, users});
} }
); );
}, },
Constants.SEARCH_TIMEOUT_MILLISECONDS Constants.SEARCH_TIMEOUT_MILLISECONDS
); );
this.searchTimeoutId = searchTimeoutId;
} }
render() { render() {

Просмотреть файл

@@ -104,13 +104,17 @@ export default class MemberListChannel extends React.Component {
clearTimeout(this.searchTimeoutId); clearTimeout(this.searchTimeoutId);
this.searchTimeoutId = setTimeout( const searchTimeoutId = setTimeout(
() => { () => {
searchUsers( searchUsers(
term, term,
TeamStore.getCurrentId(), TeamStore.getCurrentId(),
{}, {},
(users) => { (users) => {
if (searchTimeoutId !== this.searchTimeoutId) {
return;
}
this.setState({ this.setState({
loading: true, loading: true,
search: true, search: true,
@@ -125,6 +129,8 @@ export default class MemberListChannel extends React.Component {
}, },
Constants.SEARCH_TIMEOUT_MILLISECONDS Constants.SEARCH_TIMEOUT_MILLISECONDS
); );
this.searchTimeoutId = searchTimeoutId;
} }
render() { render() {

Просмотреть файл

@@ -23,6 +23,7 @@ export default class MemberListTeam extends React.Component {
super(props); super(props);
this.onChange = this.onChange.bind(this); this.onChange = this.onChange.bind(this);
this.onTeamChange = this.onTeamChange.bind(this);
this.onStatsChange = this.onStatsChange.bind(this); this.onStatsChange = this.onStatsChange.bind(this);
this.search = this.search.bind(this); this.search = this.search.bind(this);
this.loadComplete = this.loadComplete.bind(this); this.loadComplete = this.loadComplete.bind(this);
@@ -44,7 +45,7 @@ export default class MemberListTeam extends React.Component {
componentDidMount() { componentDidMount() {
UserStore.addInTeamChangeListener(this.onChange); UserStore.addInTeamChangeListener(this.onChange);
UserStore.addStatusesChangeListener(this.onChange); UserStore.addStatusesChangeListener(this.onChange);
TeamStore.addChangeListener(this.onChange.bind(null, true)); TeamStore.addChangeListener(this.onTeamChange);
TeamStore.addStatsChangeListener(this.onStatsChange); TeamStore.addStatsChangeListener(this.onStatsChange);
loadProfilesAndTeamMembers(0, Constants.PROFILE_CHUNK_SIZE, TeamStore.getCurrentId(), this.loadComplete); loadProfilesAndTeamMembers(0, Constants.PROFILE_CHUNK_SIZE, TeamStore.getCurrentId(), this.loadComplete);
@@ -54,7 +55,7 @@ export default class MemberListTeam extends React.Component {
componentWillUnmount() { componentWillUnmount() {
UserStore.removeInTeamChangeListener(this.onChange); UserStore.removeInTeamChangeListener(this.onChange);
UserStore.removeStatusesChangeListener(this.onChange); UserStore.removeStatusesChangeListener(this.onChange);
TeamStore.removeChangeListener(this.onChange); TeamStore.removeChangeListener(this.onTeamChange);
TeamStore.removeStatsChangeListener(this.onStatsChange); TeamStore.removeStatsChangeListener(this.onStatsChange);
} }
@@ -62,6 +63,10 @@ export default class MemberListTeam extends React.Component {
this.setState({loading: false}); this.setState({loading: false});
} }
onTeamChange() {
this.onChange(true);
}
onChange(force) { onChange(force) {
if (this.state.search && !force) { if (this.state.search && !force) {
return; return;
@@ -90,13 +95,16 @@ export default class MemberListTeam extends React.Component {
clearTimeout(this.searchTimeoutId); clearTimeout(this.searchTimeoutId);
this.searchTimeoutId = setTimeout( const searchTimeoutId = setTimeout(
() => { () => {
searchUsers( searchUsers(
term, term,
TeamStore.getCurrentId(), TeamStore.getCurrentId(),
{}, {},
(users) => { (users) => {
if (searchTimeoutId !== this.searchTimeoutId) {
return;
}
this.setState({loading: true, search: true, users, term, teamMembers: Object.assign([], TeamStore.getMembersInTeam())}); this.setState({loading: true, search: true, users, term, teamMembers: Object.assign([], TeamStore.getMembersInTeam())});
loadTeamMembersForProfilesList(users, TeamStore.getCurrentId(), this.loadComplete); loadTeamMembersForProfilesList(users, TeamStore.getCurrentId(), this.loadComplete);
} }
@@ -104,6 +112,8 @@ export default class MemberListTeam extends React.Component {
}, },
Constants.SEARCH_TIMEOUT_MILLISECONDS Constants.SEARCH_TIMEOUT_MILLISECONDS
); );
this.searchTimeoutId = searchTimeoutId;
} }
render() { render() {

Просмотреть файл

@@ -107,17 +107,22 @@ export default class MoreChannels extends React.Component {
clearTimeout(this.searchTimeoutId); clearTimeout(this.searchTimeoutId);
this.searchTimeoutId = setTimeout( const searchTimeoutId = setTimeout(
() => { () => {
searchMoreChannels( searchMoreChannels(
term, term,
(channels) => { (channels) => {
if (searchTimeoutId !== this.searchTimeoutId) {
return;
}
this.setState({search: true, channels}); this.setState({search: true, channels});
} }
); );
}, },
SEARCH_TIMEOUT_MILLISECONDS SEARCH_TIMEOUT_MILLISECONDS
); );
this.searchTimeoutId = searchTimeoutId;
} }
render() { render() {
@@ -196,4 +201,4 @@ export default class MoreChannels extends React.Component {
MoreChannels.propTypes = { MoreChannels.propTypes = {
onModalDismissed: React.PropTypes.func, onModalDismissed: React.PropTypes.func,
handleNewChannel: React.PropTypes.func handleNewChannel: React.PropTypes.func
}; };

Просмотреть файл

@@ -379,5 +379,7 @@ TeamStore.dispatchToken = AppDispatcher.register((payload) => {
} }
}); });
TeamStore.setMaxListeners(15);
window.TeamStore = TeamStore; window.TeamStore = TeamStore;
export default TeamStore; export default TeamStore;