From 9adfad67d20b345fae6f5765503b831037e508b0 Mon Sep 17 00:00:00 2001 From: Kevin Ansfield Date: Fri, 11 Jun 2021 12:19:44 +0100 Subject: [PATCH] Added `` no issue - added generic members filter component - updated `` to use the new generic component with `subscribed:true` added to the filter --- .../components/gh-members-filter-count.hbs | 1 + .../app/components/gh-members-filter-count.js | 23 +++++++++++++++ .../components/gh-recipient-filter-count.hbs | 6 +++- .../components/gh-recipient-filter-count.js | 28 ------------------- .../admin/app/services/members-count-cache.js | 4 +-- 5 files changed, 31 insertions(+), 31 deletions(-) create mode 100644 ghost/admin/app/components/gh-members-filter-count.hbs create mode 100644 ghost/admin/app/components/gh-members-filter-count.js delete mode 100644 ghost/admin/app/components/gh-recipient-filter-count.js diff --git a/ghost/admin/app/components/gh-members-filter-count.hbs b/ghost/admin/app/components/gh-members-filter-count.hbs new file mode 100644 index 0000000000..d5c14bc94e --- /dev/null +++ b/ghost/admin/app/components/gh-members-filter-count.hbs @@ -0,0 +1 @@ +{{this.memberCount}} \ No newline at end of file diff --git a/ghost/admin/app/components/gh-members-filter-count.js b/ghost/admin/app/components/gh-members-filter-count.js new file mode 100644 index 0000000000..13bcb205ae --- /dev/null +++ b/ghost/admin/app/components/gh-members-filter-count.js @@ -0,0 +1,23 @@ +import Component from '@glimmer/component'; +import {inject as service} from '@ember/service'; +import {task} from 'ember-concurrency-decorators'; +import {tracked} from '@glimmer/tracking'; + +export default class GhMembersFilterCountComponent extends Component { + @service membersCountCache; + + @tracked memberCount; + + constructor() { + super(...arguments); + this.getMembersCountTask.perform(); + } + + @task + *getMembersCountTask() { + this.memberCount = yield this.membersCountCache.countString( + this.args.filter, + {knownCount: this.args.knownCount} + ); + } +} diff --git a/ghost/admin/app/components/gh-recipient-filter-count.hbs b/ghost/admin/app/components/gh-recipient-filter-count.hbs index 68f1c27117..523c64c87a 100644 --- a/ghost/admin/app/components/gh-recipient-filter-count.hbs +++ b/ghost/admin/app/components/gh-recipient-filter-count.hbs @@ -1 +1,5 @@ -{{this.recipientCount}} \ No newline at end of file +{{#if @filter}} + +{{else}} +no members +{{/if}} \ No newline at end of file diff --git a/ghost/admin/app/components/gh-recipient-filter-count.js b/ghost/admin/app/components/gh-recipient-filter-count.js deleted file mode 100644 index 1af863bbeb..0000000000 --- a/ghost/admin/app/components/gh-recipient-filter-count.js +++ /dev/null @@ -1,28 +0,0 @@ -import Component from '@glimmer/component'; -import {inject as service} from '@ember/service'; -import {task} from 'ember-concurrency-decorators'; -import {tracked} from '@glimmer/tracking'; - -export default class GhRecipientFilterCountComponent extends Component { - @service membersCountCache; - - @tracked recipientCount; - - constructor() { - super(...arguments); - this.getRecipientCountTask.perform(); - } - - @task - *getRecipientCountTask() { - if (!this.args.filter) { - this.recipientCount = 'no members'; - return; - } - - this.recipientCount = yield this.membersCountCache.countString( - `subscribed:true+(${this.args.filter})`, - {knownCount: this.args.knownCount} - ); - } -} diff --git a/ghost/admin/app/services/members-count-cache.js b/ghost/admin/app/services/members-count-cache.js index ce2efa1fe0..3e37848d2d 100644 --- a/ghost/admin/app/services/members-count-cache.js +++ b/ghost/admin/app/services/members-count-cache.js @@ -24,14 +24,14 @@ export default class MembersCountCacheService extends Service { return count; } - async countString(filter, {knownCount} = {}) { + async countString(filter = '', {knownCount} = {}) { const user = await this.session.user; const basicFilter = filter.replace(/^subscribed:true\+\((.*)\)$/, '$1'); const filterParts = basicFilter.split(','); const isFree = filterParts.length === 1 && filterParts[0] === 'status:free'; const isPaid = filterParts.length === 1 && filterParts[0] === 'status:-free'; - const isAll = filterParts.includes('status:free') && filterParts.includes('status:-free'); + const isAll = !filter || (filterParts.includes('status:free') && filterParts.includes('status:-free');) // editors don't have permission to browse members so can't retrieve a count // TODO: remove when editors have relevant permissions or we have a different way of fetching counts