From bbbd9744877653b0adb1f336f28970106fbf85aa Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Tue, 5 Sep 2017 15:29:53 -0400 Subject: [PATCH] REFACTOR: Convert admin flagged posts to a component --- .../admin/controllers/admin-flags-list.js.es6 | 41 --------------- .../modals/admin-agree-flag.js.es6 | 21 +++----- .../modals/admin-delete-flag.js.es6 | 24 +++------ .../admin/routes/admin-flags-index.js.es6 | 2 +- .../admin/routes/admin-flags-list.js.es6 | 27 ---------- .../routes/admin-flags-posts-active.js.es6 | 7 +++ .../admin/routes/admin-flags-posts-old.js.es6 | 7 +++ .../admin/routes/admin-route-map.js.es6 | 3 +- .../flagged-posts.hbs} | 34 ++++++------ .../admin/templates/flags-posts-active.hbs | 1 + .../admin/templates/flags-posts-old.hbs | 1 + .../javascripts/admin/templates/flags.hbs | 4 +- .../discourse/components/flagged-posts.js.es6 | 52 +++++++++++++++++++ .../discourse/lib/show-modal.js.es6 | 2 +- 14 files changed, 105 insertions(+), 121 deletions(-) delete mode 100644 app/assets/javascripts/admin/controllers/admin-flags-list.js.es6 delete mode 100644 app/assets/javascripts/admin/routes/admin-flags-list.js.es6 create mode 100644 app/assets/javascripts/admin/routes/admin-flags-posts-active.js.es6 create mode 100644 app/assets/javascripts/admin/routes/admin-flags-posts-old.js.es6 rename app/assets/javascripts/admin/templates/{flags-list.hbs => components/flagged-posts.hbs} (80%) create mode 100644 app/assets/javascripts/admin/templates/flags-posts-active.hbs create mode 100644 app/assets/javascripts/admin/templates/flags-posts-old.hbs create mode 100644 app/assets/javascripts/discourse/components/flagged-posts.js.es6 diff --git a/app/assets/javascripts/admin/controllers/admin-flags-list.js.es6 b/app/assets/javascripts/admin/controllers/admin-flags-list.js.es6 deleted file mode 100644 index e3101e2fa3..0000000000 --- a/app/assets/javascripts/admin/controllers/admin-flags-list.js.es6 +++ /dev/null @@ -1,41 +0,0 @@ -import FlaggedPost from 'admin/models/flagged-post'; - -export default Ember.Controller.extend({ - query: null, - - adminOldFlagsView: Em.computed.equal("query", "old"), - adminActiveFlagsView: Em.computed.equal("query", "active"), - - actions: { - disagreeFlags(flaggedPost) { - flaggedPost.disagreeFlags().then(() => { - this.get('model').removeObject(flaggedPost); - }, function () { - bootbox.alert(I18n.t("admin.flags.error")); - }); - }, - - deferFlags(flaggedPost) { - flaggedPost.deferFlags().then(() => { - this.get('model').removeObject(flaggedPost); - }, function () { - bootbox.alert(I18n.t("admin.flags.error")); - }); - }, - - doneTopicFlags(item) { - this.send("disagreeFlags", item); - }, - - loadMore() { - const flags = this.get('model'); - return FlaggedPost.findAll(this.get('query'), flags.length+1).then(data => { - if (data.length===0) { - flags.set("allLoaded",true); - } - flags.addObjects(data); - }); - } - } - -}); diff --git a/app/assets/javascripts/admin/controllers/modals/admin-agree-flag.js.es6 b/app/assets/javascripts/admin/controllers/modals/admin-agree-flag.js.es6 index 7f1f4f2e49..a5f20e6368 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-agree-flag.js.es6 +++ b/app/assets/javascripts/admin/controllers/modals/admin-agree-flag.js.es6 @@ -1,24 +1,19 @@ import ModalFunctionality from 'discourse/mixins/modal-functionality'; export default Ember.Controller.extend(ModalFunctionality, { - adminFlagsList: Ember.inject.controller(), + removeAfter: null, - _agreeFlag: function (actionOnPost) { - const adminFlagController = this.get("adminFlagsList"); - const post = this.get("content"); - - return post.agreeFlags(actionOnPost).then(() => { - adminFlagController.get('model').removeObject(post); - this.send("closeModal"); - }, function () { - bootbox.alert(I18n.t("admin.flags.error")); + _agreeFlag(action) { + let flaggedPost = this.get('model'); + return this.removeAfter(flaggedPost.agreeFlags(action), flaggedPost).then(() => { + this.send('closeModal'); }); }, actions: { - agreeFlagHidePost: function () { return this._agreeFlag("hide"); }, - agreeFlagKeepPost: function () { return this._agreeFlag("keep"); }, - agreeFlagRestorePost: function () { return this._agreeFlag("restore"); } + agreeFlagHidePost() { return this._agreeFlag("hide"); }, + agreeFlagKeepPost() { return this._agreeFlag("keep"); }, + agreeFlagRestorePost() { return this._agreeFlag("restore"); } } }); diff --git a/app/assets/javascripts/admin/controllers/modals/admin-delete-flag.js.es6 b/app/assets/javascripts/admin/controllers/modals/admin-delete-flag.js.es6 index fc2e062794..2cabebb04b 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-delete-flag.js.es6 +++ b/app/assets/javascripts/admin/controllers/modals/admin-delete-flag.js.es6 @@ -1,30 +1,20 @@ import ModalFunctionality from 'discourse/mixins/modal-functionality'; export default Ember.Controller.extend(ModalFunctionality, { - adminFlagsList: Ember.inject.controller(), + removeAfter: null, actions: { deletePostDeferFlag() { - const adminFlagController = this.get("adminFlagsList"); - const post = this.get("content"); - - return post.deferFlags(true).then(() => { - adminFlagController.get('model').removeObject(post); - this.send("closeModal"); - }, function () { - bootbox.alert(I18n.t("admin.flags.error")); + let flaggedPost = this.get('model'); + this.removeAfter(flaggedPost.deferFlags(true), flaggedPost).then(() => { + this.send('closeModal'); }); }, deletePostAgreeFlag() { - const adminFlagController = this.get("adminFlagsList"); - const post = this.get("content"); - - return post.agreeFlags("delete").then(() => { - adminFlagController.get('model').removeObject(post); - this.send("closeModal"); - }, function () { - bootbox.alert(I18n.t("admin.flags.error")); + let flaggedPost = this.get('model'); + this.removeAfter(flaggedPost.agreeFlags('delete'), flaggedPost).then(() => { + this.send('closeModal'); }); } } diff --git a/app/assets/javascripts/admin/routes/admin-flags-index.js.es6 b/app/assets/javascripts/admin/routes/admin-flags-index.js.es6 index c3f9a6d373..ae4a2e089d 100644 --- a/app/assets/javascripts/admin/routes/admin-flags-index.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-flags-index.js.es6 @@ -1,5 +1,5 @@ export default Discourse.Route.extend({ redirect() { - this.replaceWith('adminFlags.list', 'active'); + this.replaceWith('adminFlags.postsActive'); } }); diff --git a/app/assets/javascripts/admin/routes/admin-flags-list.js.es6 b/app/assets/javascripts/admin/routes/admin-flags-list.js.es6 deleted file mode 100644 index ba00186d90..0000000000 --- a/app/assets/javascripts/admin/routes/admin-flags-list.js.es6 +++ /dev/null @@ -1,27 +0,0 @@ -import showModal from 'discourse/lib/show-modal'; -import FlaggedPost from 'admin/models/flagged-post'; - -export default Discourse.Route.extend({ - model(params) { - this.filter = params.filter; - return FlaggedPost.findAll(params.filter); - }, - - setupController(controller, model) { - controller.set('model', model); - controller.set('query', this.filter); - }, - - actions: { - showAgreeFlagModal(model) { - showModal('admin-agree-flag', { model, admin: true }); - this.controllerFor('modal').set('modalClass', 'agree-flag-modal'); - }, - - showDeleteFlagModal(model) { - showModal('admin-delete-flag', { model, admin: true }); - this.controllerFor('modal').set('modalClass', 'delete-flag-modal'); - } - - } -}); 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 new file mode 100644 index 0000000000..c38488e0f6 --- /dev/null +++ b/app/assets/javascripts/admin/routes/admin-flags-posts-active.js.es6 @@ -0,0 +1,7 @@ +import FlaggedPost from 'admin/models/flagged-post'; + +export default Discourse.Route.extend({ + model() { + return FlaggedPost.findAll('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 new file mode 100644 index 0000000000..312e240527 --- /dev/null +++ b/app/assets/javascripts/admin/routes/admin-flags-posts-old.js.es6 @@ -0,0 +1,7 @@ +import FlaggedPost from 'admin/models/flagged-post'; + +export default Discourse.Route.extend({ + model() { + return FlaggedPost.findAll('old'); + }, +}); diff --git a/app/assets/javascripts/admin/routes/admin-route-map.js.es6 b/app/assets/javascripts/admin/routes/admin-route-map.js.es6 index 34e55914ad..0644cd2552 100644 --- a/app/assets/javascripts/admin/routes/admin-route-map.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-route-map.js.es6 @@ -54,7 +54,8 @@ export default function() { this.route('adminReports', { path: '/reports/:type', resetNamespace: true }); this.route('adminFlags', { path: '/flags', resetNamespace: true }, function() { - this.route('list', { path: '/:filter' }); + this.route('postsActive', { path: 'active' }); + this.route('postsOld', { path: 'old' }); }); this.route('adminLogs', { path: '/logs', resetNamespace: true }, function() { diff --git a/app/assets/javascripts/admin/templates/flags-list.hbs b/app/assets/javascripts/admin/templates/components/flagged-posts.hbs similarity index 80% rename from app/assets/javascripts/admin/templates/flags-list.hbs rename to app/assets/javascripts/admin/templates/components/flagged-posts.hbs index 0c26c8254b..6a93dcb0d0 100644 --- a/app/assets/javascripts/admin/templates/flags-list.hbs +++ b/app/assets/javascripts/admin/templates/components/flagged-posts.hbs @@ -1,16 +1,16 @@ -{{#if model.length}} - {{#load-more selector="tbody tr" action="loadMore"}} +{{#if flaggedPosts}} + {{#load-more selector=".flagged-post" action=(action "loadMore")}} - + - {{#each content as |flaggedPost|}} - + {{#each flaggedPosts as |flaggedPost|}} + @@ -78,7 +78,7 @@
{{i18n 'admin.flags.flagged_by'}}{{#if adminOldFlagsView}}{{i18n 'admin.flags.resolved_by'}}{{/if}}{{#if showResolvedBy}}{{i18n 'admin.flags.resolved_by'}}{{/if}}
@@ -24,7 +24,7 @@ {{/if}} {{/if}} {{/if}} - {{#if adminActiveFlagsView}} + {{#if canAct}} {{#if flaggedPost.previous_flags_count}} {{flaggedPost.previous_flags_count}} {{/if}} @@ -68,7 +68,7 @@ {{flagger.user.username}} {{/link-to}} {{format-age flagger.flaggedAt}} -
+
{{flagger.flagType}}
- {{#if adminOldFlagsView}} + {{#if showResolvedBy}} {{#each flaggedPost.flaggers as |flagger|}} @@ -140,22 +140,20 @@ {{/each}} - {{#unless adminOldFlagsView}} + {{#if canAct}} - {{/unless}} + {{/if}} {{/each}} diff --git a/app/assets/javascripts/admin/templates/flags-posts-active.hbs b/app/assets/javascripts/admin/templates/flags-posts-active.hbs new file mode 100644 index 0000000000..9f1c21e463 --- /dev/null +++ b/app/assets/javascripts/admin/templates/flags-posts-active.hbs @@ -0,0 +1 @@ +{{flagged-posts flaggedPosts=model filter="active"}} diff --git a/app/assets/javascripts/admin/templates/flags-posts-old.hbs b/app/assets/javascripts/admin/templates/flags-posts-old.hbs new file mode 100644 index 0000000000..b4f5284612 --- /dev/null +++ b/app/assets/javascripts/admin/templates/flags-posts-old.hbs @@ -0,0 +1 @@ +{{flagged-posts flaggedPosts=model filter="old"}} diff --git a/app/assets/javascripts/admin/templates/flags.hbs b/app/assets/javascripts/admin/templates/flags.hbs index b19e8e2276..f794efb57b 100644 --- a/app/assets/javascripts/admin/templates/flags.hbs +++ b/app/assets/javascripts/admin/templates/flags.hbs @@ -1,6 +1,6 @@ {{#admin-nav}} - {{nav-item route='adminFlags.list' routeParam='active' label='admin.flags.active'}} - {{nav-item route='adminFlags.list' routeParam='old' label='admin.flags.old'}} + {{nav-item route='adminFlags.postsActive' label='admin.flags.active'}} + {{nav-item route='adminFlags.postsOld' label='admin.flags.old'}} {{/admin-nav}}
diff --git a/app/assets/javascripts/discourse/components/flagged-posts.js.es6 b/app/assets/javascripts/discourse/components/flagged-posts.js.es6 new file mode 100644 index 0000000000..99a7e58e48 --- /dev/null +++ b/app/assets/javascripts/discourse/components/flagged-posts.js.es6 @@ -0,0 +1,52 @@ +import FlaggedPost from 'admin/models/flagged-post'; +import showModal from 'discourse/lib/show-modal'; + +export default Ember.Component.extend({ + canAct: Ember.computed.equal('filter', 'active'), + showResolvedBy: Ember.computed.equal('filter', 'old'), + + removeAfter(promise, flaggedPost) { + return promise.then(() => { + this.get('flaggedPosts').removeObject(flaggedPost); + }).catch(() => { + bootbox.alert(I18n.t("admin.flags.error")); + }); + }, + + _spawnModal(name, flaggedPost, modalClass) { + let controller = showModal(name, { + model: flaggedPost, + admin: true, + modalClass + }); + controller.removeAfter = (p, f) => this.removeAfter(p, f); + }, + + actions: { + disagree(flaggedPost) { + this.removeAfter(flaggedPost.disagreeFlags(), flaggedPost); + }, + + defer(flaggedPost) { + this.removeAfter(flaggedPost.deferFlags(), flaggedPost); + }, + + loadMore() { + const flaggedPosts = this.get('flaggedPosts'); + return FlaggedPost.findAll(this.get('query'), flaggedPosts.length+1).then(data => { + if (data.length===0) { + flaggedPosts.set("allLoaded",true); + } + flaggedPosts.addObjects(data); + }); + }, + + showAgreeFlagModal(flaggedPost) { + this._spawnModal('admin-agree-flag', flaggedPost, 'agree-flag-modal'); + }, + + showDeleteFlagModal(flaggedPost) { + this._spawnModal('admin-delete-flag', flaggedPost, 'delete-flag-modal'); + } + } +}); diff --git a/app/assets/javascripts/discourse/lib/show-modal.js.es6 b/app/assets/javascripts/discourse/lib/show-modal.js.es6 index 739fdd17b3..10e7695b57 100644 --- a/app/assets/javascripts/discourse/lib/show-modal.js.es6 +++ b/app/assets/javascripts/discourse/lib/show-modal.js.es6 @@ -7,7 +7,7 @@ export default function(name, opts) { const route = container.lookup('route:application'); const modalController = route.controllerFor('modal'); - modalController.set('modalClass', null); + modalController.set('modalClass', opts.modalClass); const controllerName = opts.admin ? `modals/${name}` : name;
- {{#if adminActiveFlagsView}} - {{#if flaggedPost.postHidden}} - - {{else}} - - {{/if}} - - + {{#if flaggedPost.postHidden}} + + {{else}} + {{/if}} + +