From 8403bf9b49b6a5f677b1880e8ba92be8c8eacb2d Mon Sep 17 00:00:00 2001 From: Fabien 'egg' O'Carroll Date: Tue, 2 Mar 2021 12:08:07 +0000 Subject: [PATCH] Added fallback for top members (#1856) * Added fallback for top members refs https://github.com/TryGhost/Team/issues/469 We do not have open rates for a member until we've sent at least 5 emails. In order to still display a top members section for sites which have not sent that many newsletters, we fallback to paid members, ordered by created_at. This effectively gives us our oldest members, which are currently paid. --- ghost/admin/app/controllers/dashboard.js | 17 +++++++++--- ghost/admin/app/styles/layouts/dashboard.css | 12 +++++++-- ghost/admin/app/templates/dashboard.hbs | 27 +++++++++++++++----- 3 files changed, 45 insertions(+), 11 deletions(-) diff --git a/ghost/admin/app/controllers/dashboard.js b/ghost/admin/app/controllers/dashboard.js index 997474963f..5361275054 100644 --- a/ghost/admin/app/controllers/dashboard.js +++ b/ghost/admin/app/controllers/dashboard.js @@ -54,8 +54,10 @@ export default class DashboardController extends Controller { @tracked whatsNewEntriesError = null; - get showTopMembers() { - return this.feature.get('emailAnalytics') && this.settings.get('emailTrackOpens'); + get topMembersDataHasOpenRates() { + return this.topMembersData && this.topMembersData.find((member) => { + return member.emailOpenRate !== null; + }); } initialise() { @@ -208,9 +210,18 @@ export default class DashboardController extends Controller { limit: 10 }; this.store.query('member', query).then((result) => { + if (!result.length) { + return this.store.query('member', { + filter: 'status:paid', + order: 'created_at asc', + limit: 10 + }); + } + return result; + }).then((result) => { this.topMembersData = result; this.topMembersLoading = false; - }, (error) => { + }).catch((error) => { this.topMembersError = error; this.topMembersLoading = false; }); diff --git a/ghost/admin/app/styles/layouts/dashboard.css b/ghost/admin/app/styles/layouts/dashboard.css index 82be31c962..9e8e909d73 100644 --- a/ghost/admin/app/styles/layouts/dashboard.css +++ b/ghost/admin/app/styles/layouts/dashboard.css @@ -440,7 +440,8 @@ line-height: 1; } -.gh-dashboard-top-member .name { +.gh-dashboard-top-member .name, +.gh-dashboard-top-member .email { font-size: 1.4rem; font-weight: 500; color: var(--black); @@ -451,6 +452,13 @@ margin-left: 12px; color: var(--midgrey); font-size: 1.3rem; + text-align: right; + line-height: 1.35em; +} + +.gh-dashboard-top-member .open-rate span { + color: var(--midlightgrey); + font-size: 1.2rem; } .gh-dashboard-top-members-footer { @@ -809,4 +817,4 @@ .gh-dashboard-summary.small .data { font-size: 2.0rem; } -} \ No newline at end of file +} diff --git a/ghost/admin/app/templates/dashboard.hbs b/ghost/admin/app/templates/dashboard.hbs index 4463abde24..7afbb8241b 100644 --- a/ghost/admin/app/templates/dashboard.hbs +++ b/ghost/admin/app/templates/dashboard.hbs @@ -170,20 +170,24 @@
- {{#if (and this.showTopMembers this.topMembersData)}} + {{#if this.topMembersData}}

Top members

+ {{#if this.topMembersDataHasOpenRates}}

Open rate

+ {{else}} +

Member since

+ {{/if}}
{{#if this.topMembersLoading}} Loading... {{else}} {{#if this.topMembersError}} -

- There was an error loading events - {{this.events.error.message}} +

+ There was an error loading member events. +

{{else}}
    @@ -191,9 +195,20 @@
  • - {{member.name}} + {{#if member.name}} + {{member.name}} + {{else}} + + {{/if}} - {{member.emailOpenRate}}% + {{#if member.emailOpenRate}} + {{member.emailOpenRate}}% + {{else}} + + {{moment-format @member.createdAtUTC "D MMM YYYY"}}
    + {{moment-from-now @member.createdAtUTC}} +
    + {{/if}}
  • {{/each}}