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.
// See License.txt for license information.
import ChannelStore from '../stores/channel_store.jsx';
import SearchStore from '../stores/search_store.jsx';
import UserStore from '../stores/user_store.jsx';
import SearchBox from './search_bar.jsx';
@@ -11,7 +12,22 @@ import SearchResultsItem from './search_results_item.jsx';
import {FormattedMessage, FormattedHTMLMessage} from 'mm-intl';
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 {
@@ -33,16 +49,22 @@ export default class SearchResults extends React.Component {
componentDidMount() {
this.mounted = true;
SearchStore.addSearchChangeListener(this.onChange);
ChannelStore.addChangeListener(this.onChange);
this.resize();
window.addEventListener('resize', this.handleResize);
}
shouldComponentUpdate(nextProps, nextState) {
return !Utils.areObjectsEqual(this.props, nextProps) || !Utils.areObjectsEqual(this.state, nextState);
}
componentDidUpdate() {
this.resize();
}
componentWillUnmount() {
SearchStore.removeSearchChangeListener(this.onChange);
ChannelStore.removeChangeListener(this.onChange);
this.mounted = false;
window.removeEventListener('resize', this.handleResize);
}
@@ -56,10 +78,7 @@ export default class SearchResults extends React.Component {
onChange() {
if (this.mounted) {
var newState = getStateFromStores();
if (!Utils.areObjectsEqual(newState, this.state)) {
this.setState(newState);
}
this.setState(getStateFromStores());
}
}
@@ -116,6 +135,7 @@ export default class SearchResults extends React.Component {
return (
<SearchResultsItem
key={post.id}
channel={this.state.channels.get(post.channel_id)}
post={post}
term={searchTerm}
isMentionSearch={this.props.isMentionSearch}

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

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