89 lines
2.1 KiB
JavaScript
89 lines
2.1 KiB
JavaScript
var AppDispatcher = require('../dispatcher/appDispatcher');
|
|
var EventEmitter = require('events').EventEmitter;
|
|
|
|
var SearchConstants = require('../constants/searchConstants');
|
|
var SearchActions = require('../actions/searchActions');
|
|
var NavigationActions = require('../actions/navigationActions');
|
|
|
|
var ItemSearchCollection = require('../models/itemSearchCollection');
|
|
var globals = require('../globals');
|
|
var _ = require('underscore');
|
|
|
|
var _searchBoxState = {
|
|
q: ''
|
|
};
|
|
|
|
var _searchResultsState = {
|
|
q: '',
|
|
items: (new ItemSearchCollection())
|
|
};
|
|
|
|
var handleSearchBoxChange = function(q) {
|
|
_searchBoxState.q = q;
|
|
};
|
|
|
|
|
|
var handleGetSearchResults = function(q) {
|
|
_searchResultsState.q = q;
|
|
_searchBoxState.q = '';
|
|
|
|
var searchResults = new ItemSearchCollection();
|
|
searchResults.setQuery(q);
|
|
searchResults.fetch({success: function() {
|
|
_searchResultsState.items = searchResults;
|
|
SearchStore.emit('change');
|
|
}});
|
|
};
|
|
|
|
// Extend ItemStore with EventEmitter to add eventing capabilities
|
|
var SearchStore = _.extend({}, EventEmitter.prototype, {
|
|
|
|
getSearchBoxState: function() {
|
|
return _searchBoxState;
|
|
},
|
|
getSearchResultsState: function() {
|
|
return _searchResultsState;
|
|
},
|
|
// Emit Change event
|
|
emitChange: function() {
|
|
|
|
this.emit('change');
|
|
},
|
|
|
|
// Add change listener
|
|
addChangeListener: function(callback) {
|
|
this.on('change', callback);
|
|
},
|
|
|
|
// Remove change listener
|
|
removeChangeListener: function(callback) {
|
|
this.removeListener('change', callback);
|
|
}
|
|
|
|
});
|
|
|
|
|
|
// Register callback with AppDispatcher
|
|
SearchStore.dispatchToken = AppDispatcher.register(function(payload) {
|
|
var action = payload.action;
|
|
|
|
switch(action.actionType) {
|
|
case SearchConstants.SEARCH_BOX_CHANGE:
|
|
handleSearchBoxChange(action.q);
|
|
break;
|
|
|
|
case SearchConstants.GET_SEARCH_RESULTS:
|
|
handleGetSearchResults(action.q);
|
|
break;
|
|
default:
|
|
return true;
|
|
}
|
|
|
|
// If action was responded to, emit change event
|
|
SearchStore.emitChange();
|
|
return true;
|
|
|
|
});
|
|
|
|
module.exports = SearchStore;
|