0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-24 23:48:13 -05:00

Added top members by email open rate to dashboard (#1844)

refs https://github.com/TryGhost/Team/issues/469
This commit is contained in:
Fabien 'egg' O'Carroll 2021-02-19 12:12:53 +00:00 committed by GitHub
parent b045a28ec3
commit 68da78111c
2 changed files with 62 additions and 25 deletions

View file

@ -7,6 +7,7 @@ export default class DashboardController extends Controller {
@service feature; @service feature;
@service session; @service session;
@service membersStats; @service membersStats;
@service store;
@tracked @tracked
events = { events = {
@ -27,9 +28,21 @@ export default class DashboardController extends Controller {
loading: false loading: false
}; };
@tracked
topMembers = {
data: null,
error: null,
loading: false
};
get showTopMembers() {
return this.feature.get('emailAnalytics') && this.settings.get('emailTrackOpens');
}
constructor(...args) { constructor(...args) {
super(...args); super(...args);
this.loadEvents(); this.loadEvents();
this.loadTopMembers();
this.loadCharts(); this.loadCharts();
} }
@ -120,4 +133,20 @@ export default class DashboardController extends Controller {
this.events.loading = false; this.events.loading = false;
}); });
} }
loadTopMembers() {
this.topMembers.loading = true;
let query = {
filter: 'email_open_rate:-null',
order: 'email_open_rate desc',
limit: 10
};
this.store.query('member', query).then((result) => {
this.topMembers.data = result;
this.topMembers.loading = false;
}, (error) => {
this.topMembers.error = error;
this.topMembers.loading = false;
});
}
} }

View file

@ -115,33 +115,41 @@
</section> </section>
<section class="gh-dashboard-area members-activity"> <section class="gh-dashboard-area members-activity">
{{#if this.showTopMembers}}
<div class="gh-dashboard-box grey activity-feed"> <div class="gh-dashboard-box grey activity-feed">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<h4 class="gh-dashboard-header">Top members</h4> <h4 class="gh-dashboard-header">Top members</h4>
<h4 class="gh-dashboard-header secondary">Open rate</h4> <h4 class="gh-dashboard-header secondary">Open rate</h4>
</div> </div>
<div class="gh-dashboard-list nodata"> <div class="gh-dashboard-list nodata">
{{#if this.events.loading}}
Loading...
{{else}}
{{#if this.events.error}}
<p class="error">
There was an error loading events
<code>{{this.events.error.message}}</code>
</p>
{{else}}
<ul class="gh-dashboard-top-members"> <ul class="gh-dashboard-top-members">
{{#each this.topMembers.data as |member|}}
<li class="gh-dashboard-top-member"> <li class="gh-dashboard-top-member">
<div class="member-details"> <div class="member-details">
<div class="avatar">KL</div> <GhMemberAvatar @member={{member}} @containerClass="w9 h9 mr3 flex-shrink-0" />
<span class="name">Kadin Levin</span> <span class="name">{{member.name}}</span>
</div> </div>
<span class="open-rate">97%</span> <span class="open-rate">{{member.emailOpenRate}}%</span>
</li>
<li class="gh-dashboard-top-member">
<div class="member-details">
<div class="avatar">TS</div>
<span class="name">Terry Stanton</span>
</div>
<span class="open-rate">91%</span>
</li> </li>
{{/each}}
</ul> </ul>
{{/if}}
{{/if}}
<div class="gh-dashboard-top-members-footer"> <div class="gh-dashboard-top-members-footer">
<LinkTo @route="members">See all members {{svg-jar "arrow-right"}}</LinkTo> <LinkTo @route="members">See all members {{svg-jar "arrow-right"}}</LinkTo>
</div> </div>
</div> </div>
</div> </div>
{{/if}}
<div class="gh-dashboard-box grey activity-feed"> <div class="gh-dashboard-box grey activity-feed">
<h4 class="gh-dashboard-header">Activity feed</h4> <h4 class="gh-dashboard-header">Activity feed</h4>
<div class="content"> <div class="content">