diff --git a/app/assets/javascripts/admin/adapters/flagged-post.js.es6 b/app/assets/javascripts/admin/adapters/flagged-post.js.es6 new file mode 100644 index 00000000000..ed5237588c6 --- /dev/null +++ b/app/assets/javascripts/admin/adapters/flagged-post.js.es6 @@ -0,0 +1,36 @@ +import RestAdapter from 'discourse/adapters/rest'; + +export default RestAdapter.extend({ + pathFor(store, type, findArgs) { + return `/admin/flags/${findArgs.filter}.json?rest_api=true`; + }, + + afterFindAll(results, helper) { + results.forEach(flag => { + let conversations = []; + flag.post_actions.forEach(pa => { + if (pa.conversation) { + let conversation = { + permalink: pa.permalink, + hasMore: pa.conversation.has_more, + response: { + excerpt: pa.conversation.response.excerpt, + user: helper.lookup('user', pa.conversation.response.user_id) + } + }; + + if (pa.conversation.reply) { + conversation.reply = { + excerpt: pa.conversation.reply.excerpt, + user: helper.lookup('user', pa.conversation.reply.user_id) + }; + } + conversations.push(conversation); + } + }); + flag.set('conversations', conversations); + }); + + return results; + } +}); diff --git a/app/assets/javascripts/admin/helpers/disposition-icon.js.es6 b/app/assets/javascripts/admin/helpers/disposition-icon.js.es6 new file mode 100644 index 00000000000..60473dc18b0 --- /dev/null +++ b/app/assets/javascripts/admin/helpers/disposition-icon.js.es6 @@ -0,0 +1,15 @@ +import { iconHTML } from 'discourse-common/lib/icon-library'; + +export default Ember.Helper.extend({ + compute([disposition]) { + if (!disposition) { return null; } + let icon; + let title = 'admin.flags.dispositions.' + disposition; + switch (disposition) { + case "deferred": { icon = "external-link"; break; } + case "agreed": { icon = "thumbs-o-up"; break; } + case "disagreed": { icon = "thumbs-o-down"; break; } + } + return iconHTML(icon, { title }).htmlSafe(); + } +}); diff --git a/app/assets/javascripts/admin/models/flagged-post.js.es6 b/app/assets/javascripts/admin/models/flagged-post.js.es6 index 14af903c220..73e513f12c4 100644 --- a/app/assets/javascripts/admin/models/flagged-post.js.es6 +++ b/app/assets/javascripts/admin/models/flagged-post.js.es6 @@ -1,11 +1,8 @@ import { ajax } from 'discourse/lib/ajax'; -import AdminUser from 'admin/models/admin-user'; -import Topic from 'discourse/models/topic'; import Post from 'discourse/models/post'; -import { iconHTML } from 'discourse-common/lib/icon-library'; import computed from 'ember-addons/ember-computed-decorators'; -const FlaggedPost = Post.extend({ +export default Post.extend({ @computed summary() { @@ -15,34 +12,6 @@ const FlaggedPost = Post.extend({ .join(','); }, - @computed - flaggers() { - return this.post_actions.map(postAction => { - return { - user: this.userLookup[postAction.user_id], - topic: this.topicLookup[postAction.topic_id], - flagType: I18n.t('admin.flags.summary.action_type_' + postAction.post_action_type_id, { count: 1 }), - flaggedAt: postAction.created_at, - disposedBy: postAction.disposed_by_id ? this.userLookup[postAction.disposed_by_id] : null, - disposedAt: postAction.disposed_at, - dispositionIcon: this.dispositionIcon(postAction.disposition), - tookAction: postAction.staff_took_action - }; - }); - }, - - dispositionIcon(disposition) { - if (!disposition) { return null; } - let icon; - let title = 'admin.flags.dispositions.' + disposition; - switch (disposition) { - case "deferred": { icon = "external-link"; break; } - case "agreed": { icon = "thumbs-o-up"; break; } - case "disagreed": { icon = "thumbs-o-down"; break; } - } - return iconHTML(icon, { title }); - }, - @computed('last_revised_at', 'post_actions.@each.created_at') wasEdited(lastRevisedAt) { if (Ember.isEmpty(this.get("last_revised_at"))) { return false; } @@ -52,44 +21,6 @@ const FlaggedPost = Post.extend({ }); }, - @computed - conversations() { - let conversations = []; - - this.post_actions.forEach(postAction => { - if (postAction.conversation) { - let conversation = { - permalink: postAction.permalink, - hasMore: postAction.conversation.has_more, - response: { - excerpt: postAction.conversation.response.excerpt, - user: this.userLookup[postAction.conversation.response.user_id] - } - }; - - if (postAction.conversation.reply) { - conversation.reply = { - excerpt: postAction.conversation.reply.excerpt, - user: this.userLookup[postAction.conversation.reply.user_id] - }; - } - conversations.push(conversation); - } - }); - - return conversations; - }, - - @computed - user() { - return this.userLookup[this.user_id]; - }, - - @computed - topic() { - return this.topicLookup[this.topic_id]; - }, - @computed('post_actions.@each.name_key') flaggedForSpam() { return this.get('post_actions').every(action => action.name_key === 'spam'); @@ -136,43 +67,3 @@ const FlaggedPost = Post.extend({ deleted: Ember.computed.or('deleted_at', 'topic_deleted_at'), }); - -FlaggedPost.reopenClass({ - findAll(args) { - let { filter } = args; - - let result = []; - result.set('loading', true); - - let data = {}; - if (args.topic_id) { - data.topic_id = args.topic_id; - } - if (args.offset) { - data.offset = args.offset; - } - - return ajax(`/admin/flags/${filter}.json`, { data }).then(response => { - // users - let userLookup = {}; - response.users.forEach(user => userLookup[user.id] = AdminUser.create(user)); - - // topics - let topicLookup = {}; - response.topics.forEach(topic => topicLookup[topic.id] = Topic.create(topic)); - - // posts - response.posts.forEach(post => { - let f = FlaggedPost.create(post); - f.userLookup = userLookup; - f.topicLookup = topicLookup; - result.pushObject(f); - }); - - result.set('loading', false); - return result; - }); - } -}); - -export default FlaggedPost; diff --git a/app/assets/javascripts/admin/routes/admin-flags-posts-active.js.es6 b/app/assets/javascripts/admin/routes/admin-flags-posts-active.js.es6 index c1d2dd21017..6c8b797603a 100644 --- a/app/assets/javascripts/admin/routes/admin-flags-posts-active.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-flags-posts-active.js.es6 @@ -1,7 +1,5 @@ -import FlaggedPost from 'admin/models/flagged-post'; - export default Discourse.Route.extend({ model() { - return FlaggedPost.findAll({ filter: 'active' }); + return this.store.findAll('flagged-post', { filter: 'active' }); } }); diff --git a/app/assets/javascripts/admin/routes/admin-flags-posts-old.js.es6 b/app/assets/javascripts/admin/routes/admin-flags-posts-old.js.es6 index ff3c1305984..f6743f4857a 100644 --- a/app/assets/javascripts/admin/routes/admin-flags-posts-old.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-flags-posts-old.js.es6 @@ -1,7 +1,5 @@ -import FlaggedPost from 'admin/models/flagged-post'; - export default Discourse.Route.extend({ model() { - return FlaggedPost.findAll({ filter: 'old' }); + return this.store.findAll('flagged-post', { filter: 'old' }); }, }); diff --git a/app/assets/javascripts/admin/templates/components/flagged-post-response.hbs b/app/assets/javascripts/admin/templates/components/flagged-post-response.hbs index 1cac2cc51be..be71bef0793 100644 --- a/app/assets/javascripts/admin/templates/components/flagged-post-response.hbs +++ b/app/assets/javascripts/admin/templates/components/flagged-post-response.hbs @@ -1,4 +1,4 @@ -{{#link-to 'adminUser' response.user class="response-avatar"}} +{{#link-to 'adminUser' response.user.id response.user.username class="response-avatar"}} {{avatar response.user imageSize="medium"}} {{/link-to}}