diff --git a/app/assets/javascripts/admin/addon/components/modal/custom-date-range.hbs b/app/assets/javascripts/admin/addon/components/modal/custom-date-range.hbs new file mode 100644 index 00000000000..902358aeaa6 --- /dev/null +++ b/app/assets/javascripts/admin/addon/components/modal/custom-date-range.hbs @@ -0,0 +1,22 @@ + + <:body> + + + <:footer> + + + \ No newline at end of file diff --git a/app/assets/javascripts/admin/addon/components/modal/custom-date-range.js b/app/assets/javascripts/admin/addon/components/modal/custom-date-range.js new file mode 100644 index 00000000000..42692d197f3 --- /dev/null +++ b/app/assets/javascripts/admin/addon/components/modal/custom-date-range.js @@ -0,0 +1,20 @@ +import Component from "@glimmer/component"; +import { action } from "@ember/object"; +import { tracked } from "@glimmer/tracking"; + +export default class CustomDateRange extends Component { + @tracked startDate = this.args.model.startDate; + @tracked endDate = this.args.model.endDate; + + @action + onChangeDateRange(range) { + this.startDate = range.from; + this.endDate = range.to; + } + + @action + updateDateRange() { + this.args.model.setCustomDateRange(this.startDate, this.endDate); + this.args.closeModal(); + } +} diff --git a/app/assets/javascripts/admin/addon/controllers/admin-dashboard-general.js b/app/assets/javascripts/admin/addon/controllers/admin-dashboard-general.js index b4373cb8ac7..da1181db066 100644 --- a/app/assets/javascripts/admin/addon/controllers/admin-dashboard-general.js +++ b/app/assets/javascripts/admin/addon/controllers/admin-dashboard-general.js @@ -1,4 +1,4 @@ -import { computed } from "@ember/object"; +import { action, computed } from "@ember/object"; import Controller, { inject as controller } from "@ember/controller"; import AdminDashboard from "admin/models/admin-dashboard"; import I18n from "I18n"; @@ -9,6 +9,7 @@ import getURL from "discourse-common/lib/get-url"; import { makeArray } from "discourse-common/lib/helpers"; import { setting } from "discourse/lib/computed"; import { inject as service } from "@ember/service"; +import CustomDateRangeModal from "../components/modal/custom-date-range"; function staticReport(reportType) { return computed("reports.[]", function () { @@ -19,6 +20,7 @@ function staticReport(reportType) { export default class AdminDashboardGeneralController extends Controller.extend( PeriodComputationMixin ) { + @service modal; @service router; @service siteSettings; @controller("exception") exceptionController; @@ -154,4 +156,20 @@ export default class AdminDashboardGeneralController extends Controller.extend( _reportsForPeriodURL(period) { return getURL(`/admin?period=${period}`); } + + @action + setCustomDateRange(startDate, endDate) { + this.setProperties({ startDate, endDate }); + } + + @action + openCustomDateRangeModal() { + this.modal.show(CustomDateRangeModal, { + model: { + startDate: this.startDate, + endDate: this.endDate, + setCustomDateRange: this.setCustomDateRange, + }, + }); + } } diff --git a/app/assets/javascripts/admin/addon/controllers/admin-dashboard-moderation.js b/app/assets/javascripts/admin/addon/controllers/admin-dashboard-moderation.js index ef08301f811..636695b851d 100644 --- a/app/assets/javascripts/admin/addon/controllers/admin-dashboard-moderation.js +++ b/app/assets/javascripts/admin/addon/controllers/admin-dashboard-moderation.js @@ -1,12 +1,16 @@ -import { computed } from "@ember/object"; +import { action, computed } from "@ember/object"; import Controller from "@ember/controller"; import PeriodComputationMixin from "admin/mixins/period-computation"; import discourseComputed from "discourse-common/utils/decorators"; import getURL from "discourse-common/lib/get-url"; +import { inject as service } from "@ember/service"; +import CustomDateRangeModal from "../components/modal/custom-date-range"; export default class AdminDashboardModerationController extends Controller.extend( PeriodComputationMixin ) { + @service modal; + @discourseComputed flagsStatusOptions() { return { @@ -48,4 +52,20 @@ export default class AdminDashboardModerationController extends Controller.exten _reportsForPeriodURL(period) { return getURL(`/admin/dashboard/moderation?period=${period}`); } + + @action + setCustomDateRange(startDate, endDate) { + this.setProperties({ startDate, endDate }); + } + + @action + openCustomDateRangeModal() { + this.modal.show(CustomDateRangeModal, { + model: { + startDate: this.startDate, + endDate: this.endDate, + setCustomDateRange: this.setCustomDateRange, + }, + }); + } } diff --git a/app/assets/javascripts/admin/addon/templates/dashboard_general.hbs b/app/assets/javascripts/admin/addon/templates/dashboard_general.hbs index 1294dda7a65..6215319581d 100644 --- a/app/assets/javascripts/admin/addon/templates/dashboard_general.hbs +++ b/app/assets/javascripts/admin/addon/templates/dashboard_general.hbs @@ -12,12 +12,20 @@ {{i18n "admin.dashboard.community_health"}} - + + + +
diff --git a/app/assets/javascripts/admin/addon/templates/dashboard_moderation.hbs b/app/assets/javascripts/admin/addon/templates/dashboard_moderation.hbs index 0ee4bc1daf1..3a1ef805dd3 100644 --- a/app/assets/javascripts/admin/addon/templates/dashboard_moderation.hbs +++ b/app/assets/javascripts/admin/addon/templates/dashboard_moderation.hbs @@ -14,12 +14,20 @@ {{i18n "admin.dashboard.moderators_activity"}} - + + + +
diff --git a/app/assets/javascripts/discourse/tests/acceptance/dashboard-test.js b/app/assets/javascripts/discourse/tests/acceptance/dashboard-test.js index 30e9487d804..ca53f05623f 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/dashboard-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/dashboard-test.js @@ -48,6 +48,7 @@ acceptance("Dashboard", function (needs) { test("general tab", async function (assert) { await visit("/admin"); + assert.ok(exists(".custom-date-range-button"), "custom date range button"); assert.ok(exists(".admin-report.signups"), "signups report"); assert.ok(exists(".admin-report.posts"), "posts report"); assert.ok(exists(".admin-report.dau-by-mau"), "dau-by-mau report"); @@ -68,6 +69,17 @@ acceptance("Dashboard", function (needs) { ); }); + test("moderation tab", async function (assert) { + await visit("/admin"); + await click(".dashboard .navigation-item.moderation .navigation-link"); + + assert.ok(exists(".custom-date-range-button"), "custom date range button"); + assert.ok( + exists(".admin-report.moderators-activity"), + "moderators activity report" + ); + }); + test("activity metrics", async function (assert) { await visit("/admin"); diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 0c2e0ad0650..c9f20d9dcc9 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -4677,6 +4677,7 @@ en: too_many_requests: You’ve performed this action too many times. Please wait before trying again. not_found_error: Sorry, this report doesn’t exist filter_reports: Filter reports + custom_date_range: Custom date range reports: trend_title: "%{percent} change. Currently %{current}, was %{prev} in previous period."