Changed SearchResults to update when the channel store receives data

Этот коммит содержится в:
hmhealey
2016-02-08 13:36:13 -05:00
родитель fa069e4e1f
Коммит be716c3b66
2 изменённых файлов: 28 добавлений и 8 удалений

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

@@ -1,6 +1,7 @@
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information. // See License.txt for license information.
import ChannelStore from '../stores/channel_store.jsx';
import SearchStore from '../stores/search_store.jsx'; import SearchStore from '../stores/search_store.jsx';
import UserStore from '../stores/user_store.jsx'; import UserStore from '../stores/user_store.jsx';
import SearchBox from './search_bar.jsx'; import SearchBox from './search_bar.jsx';
@@ -11,7 +12,22 @@ import SearchResultsItem from './search_results_item.jsx';
import {FormattedMessage, FormattedHTMLMessage} from 'mm-intl'; import {FormattedMessage, FormattedHTMLMessage} from 'mm-intl';
function getStateFromStores() { function getStateFromStores() {
return {results: SearchStore.getSearchResults()}; const results = SearchStore.getSearchResults();
const channels = new Map();
const channelIds = results.order.map((postId) => results.posts[postId].channel_id);
for (const id of channelIds) {
if (channels.has(id)) {
continue;
}
channels.set(id, ChannelStore.get(id));
}
return {
results,
channels
};
} }
export default class SearchResults extends React.Component { export default class SearchResults extends React.Component {
@@ -33,16 +49,22 @@ export default class SearchResults extends React.Component {
componentDidMount() { componentDidMount() {
this.mounted = true; this.mounted = true;
SearchStore.addSearchChangeListener(this.onChange); SearchStore.addSearchChangeListener(this.onChange);
ChannelStore.addChangeListener(this.onChange);
this.resize(); this.resize();
window.addEventListener('resize', this.handleResize); window.addEventListener('resize', this.handleResize);
} }
shouldComponentUpdate(nextProps, nextState) {
return !Utils.areObjectsEqual(this.props, nextProps) || !Utils.areObjectsEqual(this.state, nextState);
}
componentDidUpdate() { componentDidUpdate() {
this.resize(); this.resize();
} }
componentWillUnmount() { componentWillUnmount() {
SearchStore.removeSearchChangeListener(this.onChange); SearchStore.removeSearchChangeListener(this.onChange);
ChannelStore.removeChangeListener(this.onChange);
this.mounted = false; this.mounted = false;
window.removeEventListener('resize', this.handleResize); window.removeEventListener('resize', this.handleResize);
} }
@@ -56,10 +78,7 @@ export default class SearchResults extends React.Component {
onChange() { onChange() {
if (this.mounted) { if (this.mounted) {
var newState = getStateFromStores(); this.setState(getStateFromStores());
if (!Utils.areObjectsEqual(newState, this.state)) {
this.setState(newState);
}
} }
} }
@@ -116,6 +135,7 @@ export default class SearchResults extends React.Component {
return ( return (
<SearchResultsItem <SearchResultsItem
key={post.id} key={post.id}
channel={this.state.channels.get(post.channel_id)}
post={post} post={post}
term={searchTerm} term={searchTerm}
isMentionSearch={this.props.isMentionSearch} isMentionSearch={this.props.isMentionSearch}

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

@@ -1,7 +1,6 @@
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information. // See License.txt for license information.
import ChannelStore from '../stores/channel_store.jsx';
import UserStore from '../stores/user_store.jsx'; import UserStore from '../stores/user_store.jsx';
import UserProfile from './user_profile.jsx'; import UserProfile from './user_profile.jsx';
import * as EventHelpers from '../dispatcher/event_helpers.jsx'; import * as EventHelpers from '../dispatcher/event_helpers.jsx';
@@ -37,8 +36,8 @@ export default class SearchResultsItem extends React.Component {
} }
render() { render() {
var channelName = ''; var channelName = null;
var channel = ChannelStore.get(this.props.post.channel_id); const channel = this.props.channel;
var timestamp = UserStore.getCurrentUser().update_at; var timestamp = UserStore.getCurrentUser().update_at;
if (channel) { if (channel) {
@@ -136,6 +135,7 @@ export default class SearchResultsItem extends React.Component {
SearchResultsItem.propTypes = { SearchResultsItem.propTypes = {
post: React.PropTypes.object, post: React.PropTypes.object,
channel: React.PropTypes.object,
isMentionSearch: React.PropTypes.bool, isMentionSearch: React.PropTypes.bool,
term: React.PropTypes.string term: React.PropTypes.string
}; };