FEATURE: Support filtering of groups page by category if in url

This commit is contained in:
Robin Ward
2017-10-31 16:47:47 -04:00
parent ca8922e6f8
commit 076df104dc
9 changed files with 67 additions and 32 deletions

View File

@@ -0,0 +1,3 @@
export default Ember.Component.extend({
tagName: 'li'
});

View File

@@ -2,6 +2,7 @@ import { fmt } from 'discourse/lib/computed';
export default Ember.Controller.extend({
group: Ember.inject.controller(),
groupActivity: Ember.inject.controller(),
loading: false,
emptyText: fmt('type', 'groups.empty.%@'),
@@ -14,7 +15,9 @@ export default Ember.Controller.extend({
const beforePostId = posts[posts.length-1].get('id');
const group = this.get('group.model');
const opts = { beforePostId, type: this.get('type') };
let categoryId = this.get('groupActivity.category_id');
const opts = { beforePostId, type: this.get('type'), categoryId };
group.findPosts(opts).then(newPosts => {
posts.addObjects(newPosts);
this.set('loading', false);

View File

@@ -2,6 +2,7 @@ import computed from 'ember-addons/ember-computed-decorators';
export default Ember.Controller.extend({
application: Ember.inject.controller(),
queryParams: ['category_id'],
@computed('model.is_group_user')
showGroupMessages(isGroupUser) {

View File

@@ -203,12 +203,13 @@ const Group = RestModel.extend({
findPosts(opts) {
opts = opts || {};
const type = opts['type'] || 'posts';
const type = opts.type || 'posts';
var data = {};
if (opts.beforePostId) { data.before_post_id = opts.beforePostId; }
if (opts.categoryId) { data.category_id = parseInt(opts.categoryId); }
return ajax(`/groups/${this.get('name')}/${type}.json`, { data: data }).then(posts => {
return ajax(`/groups/${this.get('name')}/${type}.json`, { data }).then(posts => {
return posts.map(p => {
p.user = User.create(p.user);
p.topic = Topic.create(p.topic);

View File

@@ -6,8 +6,9 @@ export function buildGroupPage(type) {
return I18n.t(`groups.${type}`);
},
model() {
return this.modelFor("group").findPosts({ type });
model(params, transition) {
let categoryId = Ember.get(transition, 'queryParams.category_id');
return this.modelFor("group").findPosts({ type, categoryId });
},
setupController(controller, model) {

View File

@@ -0,0 +1,3 @@
{{#link-to (concat 'group.activity.' filter) (query-params category_id=categoryId)}}
{{i18n (concat 'groups.' filter)}}
{{/link-to}}

View File

@@ -1,21 +1,10 @@
<div class='group-activity container'>
{{#mobile-nav class='group-activity-nav' desktopClass="pull-left nav nav-stacked" currentPath=application.currentPath}}
<li>
{{#link-to 'group.activity.posts'}}{{i18n 'groups.posts'}}{{/link-to}}
</li>
<li>
{{#link-to 'group.activity.topics'}}{{i18n 'groups.topics'}}{{/link-to}}
</li>
<li>
{{#link-to 'group.activity.mentions'}}{{i18n 'groups.mentions'}}{{/link-to}}
</li>
{{group-activity-filter filter="posts" categoryId=category_id}}
{{group-activity-filter filter="topics" categoryId=category_id}}
{{group-activity-filter filter="mentions" categoryId=category_id}}
{{#if showGroupMessages}}
<li>
{{#link-to 'group.activity.messages'}}{{i18n 'groups.messages'}}{{/link-to}}
</li>
{{group-activity-filter filter="messages"}}
{{/if}}
{{/mobile-nav}}