UX: -2/+2% change in stats should be no-change in dashboard

This commit is contained in:
Joffrey JAFFEUX 2018-05-28 10:55:42 +02:00 committed by GitHub
parent 754458e6a2
commit 82e5727287
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 21 deletions

View File

@ -60,14 +60,14 @@ const Report = Discourse.Model.extend({
return this.get("average") ? value / count : value; return this.get("average") ? value / count : value;
}, },
@computed("yesterdayCount") @computed("yesterdayCount", "higher_is_better")
yesterdayTrend(yesterdayCount) { yesterdayTrend(yesterdayCount, higherIsBetter) {
return this._computeTrend(this.valueAt(2), yesterdayCount); return this._computeTrend(this.valueAt(2), yesterdayCount, higherIsBetter);
}, },
@computed("lastSevenDaysCount") @computed("lastSevenDaysCount", "higher_is_better")
sevenDaysTrend(lastSevenDaysCount) { sevenDaysTrend(lastSevenDaysCount, higherIsBetter) {
return this._computeTrend(this.valueFor(8, 14), lastSevenDaysCount); return this._computeTrend(this.valueFor(8, 14), lastSevenDaysCount, higherIsBetter);
}, },
@computed("data") @computed("data")
@ -100,15 +100,15 @@ const Report = Discourse.Model.extend({
return this._iconForTrend(yesterdayTrend, higherIsBetter); return this._iconForTrend(yesterdayTrend, higherIsBetter);
}, },
@computed("prev_period", "currentTotal", "currentAverage") @computed("prev_period", "currentTotal", "currentAverage", "higher_is_better")
trend(prev, currentTotal, currentAverage) { trend(prev, currentTotal, currentAverage, higherIsBetter) {
const total = this.get("average") ? currentAverage : currentTotal; const total = this.get("average") ? currentAverage : currentTotal;
return this._computeTrend(prev, total); return this._computeTrend(prev, total, higherIsBetter);
}, },
@computed("prev30Days", "lastThirtyDaysCount") @computed("prev30Days", "lastThirtyDaysCount", "higher_is_better")
thirtyDaysTrend(prev30Days, lastThirtyDaysCount) { thirtyDaysTrend(prev30Days, lastThirtyDaysCount, higherIsBetter) {
return this._computeTrend(prev30Days, lastThirtyDaysCount); return this._computeTrend(prev30Days, lastThirtyDaysCount, higherIsBetter);
}, },
@computed("type") @computed("type")
@ -205,19 +205,18 @@ const Report = Discourse.Model.extend({
return ((valAtT2 - valAtT1) / valAtT1) * 100; return ((valAtT2 - valAtT1) / valAtT1) * 100;
}, },
_computeTrend(valAtT1, valAtT2) { _computeTrend(valAtT1, valAtT2, higherIsBetter) {
const change = this._computeChange(valAtT1, valAtT2); const change = this._computeChange(valAtT1, valAtT2);
const higherIsBetter = this.get("higher_is_better");
if (change > 50) { if (change > 50) {
return higherIsBetter ? "high-trending-up" : "high-trending-down"; return higherIsBetter ? "high-trending-up" : "high-trending-down";
} else if (change > 0) { } else if (change > 2) {
return higherIsBetter ? "trending-up" : "trending-down"; return higherIsBetter ? "trending-up" : "trending-down";
} else if (change === 0) { } else if (change <= 2 && change >= -2) {
return "no-change"; return "no-change";
} else if (change < -50) { } else if (change < -50) {
return higherIsBetter ? "high-trending-down" : "high-trending-up"; return higherIsBetter ? "high-trending-down" : "high-trending-up";
} else if (change < 0) { } else if (change < -2) {
return higherIsBetter ? "trending-down" : "trending-up"; return higherIsBetter ? "trending-down" : "trending-up";
} }
}, },

View File

@ -84,7 +84,7 @@ QUnit.test("sevenDaysTrend", assert => {
report = reportWithData([0, 1,1,1,1,1,1,0, 1,1,1,1,1,1,1]); report = reportWithData([0, 1,1,1,1,1,1,0, 1,1,1,1,1,1,1]);
trend = report.get("sevenDaysTrend"); trend = report.get("sevenDaysTrend");
assert.ok(trend === "trending-down");; assert.ok(trend === "trending-down");
}); });
QUnit.test("yesterdayTrend", assert => { QUnit.test("yesterdayTrend", assert => {
@ -109,7 +109,7 @@ QUnit.test("yesterdayTrend", assert => {
report = reportWithData([0, 1, 1.1]); report = reportWithData([0, 1, 1.1]);
trend = report.get("yesterdayTrend"); trend = report.get("yesterdayTrend");
assert.ok(trend === "trending-down");; assert.ok(trend === "trending-down");
}); });
QUnit.test("thirtyDaysTrend", assert => { QUnit.test("thirtyDaysTrend", assert => {
@ -139,7 +139,7 @@ QUnit.test("thirtyDaysTrend", assert => {
report = reportWithData([0, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0]); report = reportWithData([0, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0]);
report.set("prev30Days", 35); report.set("prev30Days", 35);
trend = report.get("thirtyDaysTrend"); trend = report.get("thirtyDaysTrend");
assert.ok(trend === "trending-down");; assert.ok(trend === "trending-down");
}); });
QUnit.test("higher is better false", assert => { QUnit.test("higher is better false", assert => {
@ -164,7 +164,20 @@ QUnit.test("higher is better false", assert => {
report = reportWithData([0, 1, 1.1]); report = reportWithData([0, 1, 1.1]);
report.set("higher_is_better", false); report.set("higher_is_better", false);
trend = report.get("yesterdayTrend"); trend = report.get("yesterdayTrend");
assert.ok(trend === "trending-up");; assert.ok(trend === "trending-up");
});
QUnit.test("small variation (-2/+2% change) is no-change", assert => {
let report;
let trend;
report = reportWithData([0, 1,1,1,1,1,1,0.9, 1,1,1,1,1,1,1]);
trend = report.get("sevenDaysTrend");
assert.ok(trend === "no-change");
report = reportWithData([0, 1,1,1,1,1,1,1.1, 1,1,1,1,1,1,1]);
trend = report.get("sevenDaysTrend");
assert.ok(trend === "no-change");
}); });
QUnit.test("average", assert => { QUnit.test("average", assert => {