Changed SearchResults to update when the channel store receives data
Этот коммит содержится в:
@@ -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
|
||||||
};
|
};
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user