discourse/app/assets/javascripts/admin/addon/mixins/period-computation.js
David Taylor d4479eab73
DEV: Remove object-property-decorators from admin mixins (#28172)
Ember's legacy mixin system does not support native-class syntax, so we have to use the non-decorator syntaxes for `action()` and `computed()`.

Eventually, we will need to refactor things to remove these mixins... but today is not that day.
2024-07-31 17:37:15 +01:00

72 lines
1.7 KiB
JavaScript

import { computed } from "@ember/object";
import Mixin from "@ember/object/mixin";
import DiscourseURL from "discourse/lib/url";
import deprecated from "discourse-common/lib/deprecated";
export default Mixin.create({
queryParams: ["period"],
period: "monthly",
init() {
this._super(...arguments);
deprecated(
"PeriodComputation mixin is deprecated. Use AdminDashboardTabController instead.",
{
id: "discourse.period-mixin",
since: "3.2.0.beta5-dev",
}
);
this.availablePeriods = ["yearly", "quarterly", "monthly", "weekly"];
},
startDate: computed("period", {
get() {
const period = this.period;
const fullDay = moment().locale("en").utc().endOf("day");
switch (period) {
case "yearly":
return fullDay.subtract(1, "year").startOf("day");
case "quarterly":
return fullDay.subtract(3, "month").startOf("day");
case "weekly":
return fullDay.subtract(6, "days").startOf("day");
case "monthly":
return fullDay.subtract(1, "month").startOf("day");
default:
return fullDay.subtract(1, "month").startOf("day");
}
},
set(period) {
return period;
},
}),
get lastWeek() {
return moment().locale("en").utc().endOf("day").subtract(1, "week");
},
get lastMonth() {
return moment().locale("en").utc().startOf("day").subtract(1, "month");
},
get endDate() {
return moment().locale("en").utc().endOf("day");
},
set endDate(value) {
/* noop */
},
get today() {
return moment().locale("en").utc().endOf("day");
},
actions: {
changePeriod(period) {
DiscourseURL.routeTo(this._reportsForPeriodURL(period));
},
},
});