// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved. // See License.txt for license information. var PostStore = require('../stores/post_store.jsx'); var ChannelStore = require('../stores/channel_store.jsx'); var UserStore = require('../stores/user_store.jsx'); var UserProfile = require( './user_profile.jsx' ); var SearchBox =require('./search_bar.jsx'); var utils = require('../utils/utils.jsx'); var client = require('../utils/client.jsx'); var AsyncClient = require('../utils/async_client.jsx'); var AppDispatcher = require('../dispatcher/app_dispatcher.jsx'); var Constants = require('../utils/constants.jsx'); var ActionTypes = Constants.ActionTypes; var RhsHeaderSearch = React.createClass({ handleClose: function(e) { e.preventDefault(); AppDispatcher.handleServerAction({ type: ActionTypes.RECIEVED_SEARCH, results: null }); AppDispatcher.handleServerAction({ type: ActionTypes.RECIEVED_SEARCH_TERM, term: null, do_search: false, is_mention_search: false }); AppDispatcher.handleServerAction({ type: ActionTypes.RECIEVED_POST_SELECTED, results: null }); }, render: function() { var title = this.props.isMentionSearch ? "Recent Mentions" : "Search Results"; return (
{title}
); } }); var SearchItem = React.createClass({ handleClick: function(e) { e.preventDefault(); var self = this; client.getPost( this.props.post.channel_id, this.props.post.id, function(data) { AppDispatcher.handleServerAction({ type: ActionTypes.RECIEVED_POST_SELECTED, post_list: data, from_search: PostStore.getSearchTerm() }); AppDispatcher.handleServerAction({ type: ActionTypes.RECIEVED_SEARCH, results: null, is_mention_search: self.props.isMentionSearch }); }, function(err) { AsyncClient.dispatchError(err, "getPost"); } ); var postChannel = ChannelStore.get(this.props.post.channel_id); var teammate = postChannel.type === 'D' ? utils.getDirectTeammate(this.props.post.channel_id).username : ""; utils.switchChannel(postChannel, teammate); }, render: function() { var message = utils.textToJsx(this.props.post.message, {searchTerm: this.props.term, noMentionHighlight: !this.props.isMentionSearch}); var channelName = ""; var channel = ChannelStore.get(this.props.post.channel_id); var timestamp = UserStore.getCurrentUser().update_at; if (channel) { channelName = (channel.type === 'D') ? "Private Message" : channel.display_name; } return (
{ channelName }
{message}
); } }); function getStateFromStores() { return { results: PostStore.getSearchResults() }; } module.exports = React.createClass({ displayName: 'SearchResults', componentDidMount: function() { PostStore.addSearchChangeListener(this._onChange); this.resize(); var self = this; $(window).resize(function(){ self.resize(); }); }, componentDidUpdate: function() { this.resize(); }, componentWillUnmount: function() { PostStore.removeSearchChangeListener(this._onChange); }, _onChange: function() { if (this.isMounted()) { var newState = getStateFromStores(); if (!utils.areStatesEqual(newState, this.state)) { this.setState(newState); } } }, getInitialState: function() { return getStateFromStores(); }, resize: function() { var height = $(window).height() - $('#error_bar').outerHeight() - 100; $("#search-items-container").css("height", height + "px"); $("#search-items-container").scrollTop(0); $("#search-items-container").perfectScrollbar(); }, render: function() { var results = this.state.results; var currentId = UserStore.getCurrentId(); var searchForm = currentId ? : null; var noResults = (!results || !results.order || !results.order.length); var searchTerm = PostStore.getSearchTerm(); return (
{searchForm}
{ noResults ?
No results
: results.order.map(function(id) { var post = results.posts[id]; return }, this) }
); } });