diff --git a/ember/app/controllers/index.js b/ember/app/controllers/index.js index 2fd308603..1cf9696da 100644 --- a/ember/app/controllers/index.js +++ b/ember/app/controllers/index.js @@ -24,7 +24,7 @@ export default Ember.Controller.extend(UseComposer, Paneable, { var controller = this; return this.saveAndDismissComposer(discussion).then(function(discussion) { - controller.get('index').set('model', null).send('refresh'); + controller.get('index').send('refresh'); controller.transitionToRoute('discussion', discussion); }); }, diff --git a/ember/app/controllers/index/index.js b/ember/app/controllers/index/index.js index 6c09a2055..48f20c5b1 100644 --- a/ember/app/controllers/index/index.js +++ b/ember/app/controllers/index/index.js @@ -4,111 +4,123 @@ import DiscussionResult from 'flarum/models/discussion-result'; import PostResult from 'flarum/models/post-result'; export default Ember.Controller.extend({ - needs: ['application'], + needs: ['application'], - queryParams: ['sort', 'show', {searchQuery: 'q'}, 'filter'], - sort: 'recent', - show: 'discussions', - filter: '', - searchQuery: '', + queryParams: ['sort', 'show', {searchQuery: 'q'}, 'filter'], + sort: 'recent', + show: 'discussions', + filter: '', + searchQuery: '', - meta: null, - resultsLoading: false, + meta: null, + resultsLoading: false, - sortOptions: [ - {key: 'recent', label: 'Recent', sort: 'recent'}, - {key: 'replies', label: 'Replies', sort: '-replies'}, - {key: 'newest', label: 'Newest', sort: '-created'}, - {key: 'oldest', label: 'Oldest', sort: 'created'}, - ], + sortOptions: [ + {key: 'recent', label: 'Recent', sort: 'recent'}, + {key: 'replies', label: 'Replies', sort: '-replies'}, + {key: 'newest', label: 'Newest', sort: '-created'}, + {key: 'oldest', label: 'Oldest', sort: 'created'}, + ], - terminalPostType: Ember.computed('sort', function() { - return ['newest', 'oldest'].indexOf(this.get('sort')) !== -1 ? 'start' : 'last'; - }), + terminalPostType: Ember.computed('sort', function() { + return ['newest', 'oldest'].indexOf(this.get('sort')) !== -1 ? 'start' : 'last'; + }), - countType: Ember.computed('sort', function() { - return this.get('sort') === 'replies' ? 'replies' : 'unread'; - }), + countType: Ember.computed('sort', function() { + return this.get('sort') === 'replies' ? 'replies' : 'unread'; + }), - moreResults: Ember.computed.bool('meta.moreUrl'), + moreResults: Ember.computed.bool('meta.moreUrl'), - getResults: function(start) { - var searchQuery = this.get('searchQuery'); - var sort = this.get('sort'); - var sortOptions = this.get('sortOptions'); - var sortOption = sortOptions.findBy('key', sort) || sortOptions.objectAt(0); - - var params = { - sort: sortOption.sort, - q: searchQuery, - start: start - }; - - if (this.get('show') === 'posts') { - if (searchQuery) { - params.include = 'relevantPosts'; - } else if (sort === 'created') { - params.include = 'startPost,startUser'; - } else { - params.include = 'lastPost,lastUser'; - } - } - - return this.store.find('discussion', params).then(function(discussions) { - var results = Ember.A(); - discussions.forEach(function(discussion) { - var relevantPosts = Ember.A(); - // discussion.get('relevantPosts.content').forEach(function(post) { - // relevantPosts.pushObject(PostResult.create(post)); - // }); - results.pushObject(DiscussionResult.create({ - content: discussion, - relevantPosts: relevantPosts, - lastPost: PostResult.create(discussion.get('lastPost')), - startPost: PostResult.create(discussion.get('startPost')) - })); - results.set('meta', discussions.get('meta')); - }); - return results; - }); - }, - - searchQueryDidChange: Ember.observer('searchQuery', function() { + getResults: function(start) { var searchQuery = this.get('searchQuery'); - this.get('controllers.application').setProperties({ + var sort = this.get('sort'); + var sortOptions = this.get('sortOptions'); + var sortOption = sortOptions.findBy('key', sort) || sortOptions.objectAt(0); + + var params = { + sort: sortOption.sort, + q: searchQuery, + start: start + }; + + if (this.get('show') === 'posts') { + if (searchQuery) { + params.include = 'relevantPosts'; + } else if (sort === 'created') { + params.include = 'startPost,startUser'; + } else { + params.include = 'lastPost,lastUser'; + } + } + + return this.store.find('discussion', params).then(function(discussions) { + var results = Ember.A(); + discussions.forEach(function(discussion) { + var relevantPosts = Ember.A(); + // discussion.get('relevantPosts.content').forEach(function(post) { + // relevantPosts.pushObject(PostResult.create(post)); + // }); + results.pushObject(DiscussionResult.create({ + content: discussion, + relevantPosts: relevantPosts, + lastPost: PostResult.create(discussion.get('lastPost')), + startPost: PostResult.create(discussion.get('startPost')) + })); + results.set('meta', discussions.get('meta')); + }); + return results; + }); + }, + + searchQueryDidChange: Ember.observer('searchQuery', function() { + var searchQuery = this.get('searchQuery'); + this.get('controllers.application').setProperties({ searchQuery: searchQuery, searchActive: !!searchQuery }); - var sortOptions = this.get('sortOptions'); + var sortOptions = this.get('sortOptions'); - if (this.get('searchQuery') && sortOptions[0].sort !== 'relevance') { - sortOptions.unshiftObject({key: 'relevance', label: 'Relevance', sort: 'relevance'}); - } else if (!this.get('searchQuery') && sortOptions[0].sort === 'relevance') { - sortOptions.shiftObject(); - } - }), + if (this.get('searchQuery') && sortOptions[0].sort !== 'relevance') { + sortOptions.unshiftObject({key: 'relevance', label: 'Relevance', sort: 'relevance'}); + } else if (!this.get('searchQuery') && sortOptions[0].sort === 'relevance') { + sortOptions.shiftObject(); + } + }), - paramsDidChange: Ember.observer('sort', 'show', 'searchQuery', function() { - if (this.get('model')) { - this.send('refresh'); - } - }), + paramsDidChange: Ember.observer('sort', 'show', 'searchQuery', function() { + if (this.get('model')) { + this.send('refresh'); + } + }), - actions: { - loadMore: function() { - var controller = this; - this.set('resultsLoading', true); - this.getResults(this.get('model.length')).then(function(results) { - controller.get('model').addObjects(results); - controller.set('meta', results.get('meta')); - controller.set('resultsLoading', false); - }); - }, + actions: { + loadMore: function() { + var controller = this; + this.set('resultsLoading', true); + this.getResults(this.get('model.length')).then(function(results) { + controller.get('model').addObjects(results); + controller.set('meta', results.get('meta')); + controller.set('resultsLoading', false); + }); + }, discussionRemoved: function(discussion) { var model = this.get('model'); model.removeObject(model.findBy('content', discussion)); + }, + + refresh: function() { + var controller = this; + controller.set('model', Ember.ArrayProxy.create()); + controller.set('resultsLoading', true); + controller.getResults().then(function(results) { + controller + .set('resultsLoading', false) + .set('meta', results.get('meta')) + .set('model.content', results); + }); } - } + } }); diff --git a/ember/app/routes/index/index.js b/ember/app/routes/index/index.js index b03037abe..578fb0a79 100644 --- a/ember/app/routes/index/index.js +++ b/ember/app/routes/index/index.js @@ -16,13 +16,7 @@ export default Ember.Route.extend(AddCssClassToBody, { controller.set('model', model); if (!model.get('length')) { - controller.set('resultsLoading', true); - controller.getResults().then(function(results) { - controller - .set('resultsLoading', false) - .set('meta', results.get('meta')) - .set('model.content', results); - }); + controller.send('refresh'); } },