UX: new site setting to define activity metrics displayed on dashboard

This commit is contained in:
Joffrey JAFFEUX
2018-12-26 10:29:07 +01:00
committed by GitHub
parent 2ab02d6642
commit 0402f0f357
8 changed files with 68 additions and 48 deletions

View File

@@ -19,16 +19,9 @@ export default Ember.Controller.extend(PeriodComputationMixin, {
logSearchQueriesEnabled: setting("log_search_queries"), logSearchQueriesEnabled: setting("log_search_queries"),
basePath: Discourse.BaseUri, basePath: Discourse.BaseUri,
@computed @computed("siteSettings.dashboard_general_tab_activity_metrics")
activityMetrics() { activityMetrics(metrics) {
return [ return (metrics || "").split("|").filter(m => m);
"page_view_total_reqs",
"visits",
"time_to_first_response",
"likes",
"flags",
"user_to_user_private_messages_with_replies"
];
}, },
@computed @computed

View File

@@ -112,17 +112,15 @@
{{#if showFilteringUI}} {{#if showFilteringUI}}
<div class="filters"> <div class="filters">
{{#if showModes}} {{#if showModes}}
<ul class="modes"> <div class="modes">
{{#each displayedModes as |displayedMode|}} {{#each displayedModes as |displayedMode|}}
<li class="mode"> {{d-button
{{d-button action="changeMode"
action="changeMode" actionParam=displayedMode.mode
actionParam=displayedMode.mode class=displayedMode.cssClass
class=displayedMode.cssClass icon=displayedMode.icon}}
icon=displayedMode.icon}}
</li>
{{/each}} {{/each}}
</ul> </div>
{{/if}} {{/if}}
{{#if showDatesOptions}} {{#if showDatesOptions}}

View File

@@ -56,36 +56,38 @@
<div class="section-columns"> <div class="section-columns">
<div class="section-column"> <div class="section-column">
<div class="admin-report activity-metrics"> {{#if activityMetrics.length}}
<div class="header"> <div class="admin-report activity-metrics">
<ul class="breadcrumb"> <div class="header">
<li class="item report"> <ul class="breadcrumb">
{{#link-to "adminReports" class="report-url"}} <li class="item report">
{{i18n "admin.dashboard.activity_metrics"}} {{#link-to "adminReports" class="report-url"}}
{{/link-to}} {{i18n "admin.dashboard.activity_metrics"}}
</li> {{/link-to}}
</ul> </li>
</div> </ul>
<div class="report-body"> </div>
<div class="counters-list"> <div class="report-body">
<div class="counters-header"> <div class="counters-list">
<div class="counters-cell"></div> <div class="counters-header">
<div class="counters-cell">{{i18n 'admin.dashboard.reports.today'}}</div> <div class="counters-cell"></div>
<div class="counters-cell">{{i18n 'admin.dashboard.reports.yesterday'}}</div> <div class="counters-cell">{{i18n 'admin.dashboard.reports.today'}}</div>
<div class="counters-cell">{{i18n 'admin.dashboard.reports.last_7_days'}}</div> <div class="counters-cell">{{i18n 'admin.dashboard.reports.yesterday'}}</div>
<div class="counters-cell">{{i18n 'admin.dashboard.reports.last_30_days'}}</div> <div class="counters-cell">{{i18n 'admin.dashboard.reports.last_7_days'}}</div>
</div> <div class="counters-cell">{{i18n 'admin.dashboard.reports.last_30_days'}}</div>
</div>
{{#each activityMetrics as |metric|}} {{#each activityMetrics as |metric|}}
{{admin-report {{admin-report
showHeader=false showHeader=false
filters=activityMetricsFilters filters=activityMetricsFilters
forcedModes="counters" forcedModes="counters"
dataSourceName=metric}} dataSourceName=metric}}
{{/each}} {{/each}}
</div>
</div> </div>
</div> </div>
</div> {{/if}}
<div class="user-metrics"> <div class="user-metrics">
{{#conditional-loading-section isLoading=isLoading}} {{#conditional-loading-section isLoading=isLoading}}

View File

@@ -246,6 +246,8 @@ class Report
def self.report_signups(report) def self.report_signups(report)
report.group_filtering = true report.group_filtering = true
report.icon = 'user-plus'
if report.group_id if report.group_id
basic_report_about report, User.real, :count_by_signup_date, report.start_date, report.end_date, report.group_id basic_report_about report, User.real, :count_by_signup_date, report.start_date, report.end_date, report.group_id
add_counts report, User.real, 'users.created_at' add_counts report, User.real, 'users.created_at'

View File

@@ -3993,6 +3993,7 @@ en:
tags: "Tags" tags: "Tags"
search: "Search" search: "Search"
groups: "Groups" groups: "Groups"
dashboard: "Dashboard"
secret_list: secret_list:
invalid_input: "Input fields cannot be empty or contain vertical bar character." invalid_input: "Input fields cannot be empty or contain vertical bar character."

View File

@@ -1903,6 +1903,8 @@ en:
short_title: "The short title will be used on the user's home screen, launcher, or other places where space may be limited. A maximum of 12 characters is recommended." short_title: "The short title will be used on the user's home screen, launcher, or other places where space may be limited. A maximum of 12 characters is recommended."
dashboard_general_tab_activity_metrics: "Choose reports to be displayed as activity metrics on the general tab."
errors: errors:
invalid_email: "Invalid email address." invalid_email: "Invalid email address."
invalid_username: "There's no user with that username." invalid_username: "There's no user with that username."

View File

@@ -1898,3 +1898,19 @@ tags:
force_lowercase_tags: force_lowercase_tags:
default: true default: true
client: true client: true
dashboard:
dashboard_general_tab_activity_metrics:
client: true
type: list
list_type: compact
default: "page_view_total_reqs|visits|time_to_first_response|likes|flags|user_to_user_private_messages_with_replies"
allow_any: false
choices:
- page_view_total_reqs
- visits
- time_to_first_response
- likes
- flags
- user_to_user_private_messages_with_replies
- signups

View File

@@ -1,7 +1,10 @@
import { acceptance } from "helpers/qunit-helpers"; import { acceptance } from "helpers/qunit-helpers";
acceptance("Dashboard Next", { acceptance("Dashboard Next", {
loggedIn: true loggedIn: true,
settings: {
dashboard_general_tab_activity_metrics: "page_view_total_reqs"
}
}); });
QUnit.test("Dashboard", async assert => { QUnit.test("Dashboard", async assert => {
@@ -26,7 +29,6 @@ QUnit.test("tabs", async assert => {
QUnit.test("general tab", async assert => { QUnit.test("general tab", async assert => {
await visit("/admin"); await visit("/admin");
assert.ok(exists(".admin-report.signups"), "signups report"); assert.ok(exists(".admin-report.signups"), "signups report");
assert.ok(exists(".admin-report.posts"), "posts report"); assert.ok(exists(".admin-report.posts"), "posts report");
assert.ok(exists(".admin-report.dau-by-mau"), "dau-by-mau report"); assert.ok(exists(".admin-report.dau-by-mau"), "dau-by-mau report");
@@ -46,6 +48,10 @@ QUnit.test("general tab", async assert => {
"Houston...", "Houston...",
"displays problems" "displays problems"
); );
});
QUnit.test("general tab - activity metrics", async assert => {
await visit("/admin");
assert.equal( assert.equal(
$(".admin-report.page-view-total-reqs .today-count") $(".admin-report.page-view-total-reqs .today-count")