Ejegg has uploaded a new change for review.
https://gerrit.wikimedia.org/r/197848
Change subject: Use shared context in amount per second
......................................................................
Use shared context in amount per second
Also change y ticks to include cents, for use in smaller campaigns.
Bug: T89298
Change-Id: I867b741cddaaaec16bf7d4a25bac6e29a6a9be4b
---
M src/components/widgets/amt-per-second-chart/amt-per-second-chart.html
M src/components/widgets/amt-per-second-chart/amt-per-second-chart.js
2 files changed, 38 insertions(+), 60 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/dash
refs/changes/48/197848/1
diff --git
a/src/components/widgets/amt-per-second-chart/amt-per-second-chart.html
b/src/components/widgets/amt-per-second-chart/amt-per-second-chart.html
index 71185d3..2443393 100644
--- a/src/components/widgets/amt-per-second-chart/amt-per-second-chart.html
+++ b/src/components/widgets/amt-per-second-chart/amt-per-second-chart.html
@@ -4,6 +4,7 @@
<p>USD/Second Required (Average)</p>
</div>
<div class="panel-body">
+ <p data-bind="visible: !hasData()">No data available.
This widget requires a widget like Totals Earned to provide data.</p>
<div class="col-md-12">
<div id="avgUSDperSecond"></div>
</div>
diff --git
a/src/components/widgets/amt-per-second-chart/amt-per-second-chart.js
b/src/components/widgets/amt-per-second-chart/amt-per-second-chart.js
index e48d9db..f009e35 100644
--- a/src/components/widgets/amt-per-second-chart/amt-per-second-chart.js
+++ b/src/components/widgets/amt-per-second-chart/amt-per-second-chart.js
@@ -3,81 +3,41 @@
'text!components/widgets/amt-per-second-chart/amt-per-second-chart.html',
'c3',
'numeraljs',
- 'momentjs'
-], function( ko, template, c3, numeral, moment ){
-
+ 'WidgetBase'
+], function( ko, template, c3, numeral, WidgetBase ){
function AmtPerSecondChartViewModel( params ){
var self = this;
-
- //TODO: make dayObj (and other params) come from data
- self.dayObj = [];
-
- self.loadData = function ( decemberData, timestamp ) {
- var runningTotal = 0,
- currentDate = new Date(),
- timeFormat = 'dddd, MMMM Do YYYY, h:mm:ss a';
-
- currentDate.setTime( timestamp );
- self.displayDate( moment( currentDate ).format(
timeFormat ) );
- self.lastDataPoint.day = currentDate.getUTCDate();
- self.lastDataPoint.hour = currentDate.getUTCHours();
-
- for (var d = 1; d < 32; d++) {
- self.dailyDataArray[d] = 0;
- self.dailyCountArray[d] = 0;
- if (!self.dayObj[d]) {
- self.dayObj[d] = new Array(25);
- self.dayObj[d][0] = 'Hourly Totals';
- for (var h = 0; h < 24; h++) {
- self.dayObj[d][h + 1] = {
total: 0, count: 0 };
-
self.secondsByHourDonationData[(d - 1) * 24 + h + 1] = 0;
- }
- }
- }
-
- var dataCount = decemberData.length;
- for (var i = 0; i < dataCount; i++ ) {
-
- var el = decemberData[i],
- day = el.day,
- hour = el.hour,
- total = el.usd_total;
- self.dayObj[day][hour + 1] = { total: total,
count: el.donations };
-
- self.secondsByHourDonationData[(day - 1) * 24 +
hour + 1] = el.usd_per_second;
- runningTotal += total;
- self.dailyDataArray[day] += total;
- self.dailyCountArray[day] += el.donations;
- }
-
- self.raised(runningTotal);
- };
+ WidgetBase.call( this, params );
+ self.hasData = ko.observable( false );
self.makeChart = function() {
- if ( self.dayObj.length < 2 ) {
+ var columns;
+
+ if ( params.sharedContext.dayObj.length < 2 ) {
return;
}
- var numPoints = ( self.lastDataPoint.day - 1 ) * 24 +
self.lastDataPoint.hour + 1,
+ self.hasData( true );
+ var numPoints = (
params.sharedContext.lastDataPoint.day - 1 ) * 24 +
params.sharedContext.lastDataPoint.hour + 1,
xs = new Array( numPoints + 2 ), // label, data
to date, final point
index = 0,
- remainingNeeded = self.goal();
+ remainingNeeded = params.sharedContext.goal();
xs[0] = 'x1';
self.needPerSecond = new Array( numPoints + 2 );
self.needPerSecond[0] = 'Needed Per Second';
// secondsByHourDonationData already has a label in [0]
- self.gotPerSecond =
self.secondsByHourDonationData.slice( 0, numPoints + 1 );
+ self.gotPerSecond =
params.sharedContext.secondsByHourDonationData.slice( 0, numPoints + 1 );
- for( var d = 1; d < self.dayObj.length; d++ ) {
+ for( var d = 1; d < params.sharedContext.dayObj.length;
d++ ) {
for ( var h = 0; h < 24; h++ ) {
index = ( d - 1 ) * 24 + h + 1;
if ( index > numPoints + 1 ) {
break;
}
- remainingNeeded = remainingNeeded -
self.dayObj[d][h + 1].total;
+ remainingNeeded = remainingNeeded -
params.sharedContext.dayObj[d][h + 1].total;
if ( remainingNeeded < 0 ) {
remainingNeeded = 0;
}
@@ -94,6 +54,19 @@
self.gotPerSecond[ numPoints + 1 ] =
self.gotPerSecond[ numPoints ];
self.needPerSecond[ numPoints + 1 ] =
self.needPerSecond[ numPoints ];
}
+ columns = [
+ xs,
+ self.gotPerSecond,
+ self.needPerSecond
+ ];
+
+ if ( self.avgUSDComboChart ) {
+ self.avgUSDComboChart.load( {
+ columns: columns
+ } );
+ return;
+ }
+
self.avgUSDComboChart = c3.generate( {
bindto: '#avgUSDperSecond',
size: {
@@ -106,11 +79,7 @@
'Needed Per Second' : 'x1',
'Donations Per Second' : 'x1'
},
- columns: [
- xs,
- self.gotPerSecond,
- self.needPerSecond
- ],
+ columns: columns,
type: 'area',
types: {
'USD per second': 'line'
@@ -126,7 +95,7 @@
},
y: {
tick: {
- format: function(x){
return numeral(x).format('$0,0'); }
+ format: function(x){
return numeral(x).format('$0,0.00'); }
}
}
},
@@ -141,7 +110,15 @@
}
} );
};
- self.makeChart();
+ self.subscribe = function() {
+ if ( !params.sharedContext.totalsChanged ) {
+ window.setTimeout( self.subscribe, 50 );
+ return;
+ }
+ params.sharedContext.totalsChanged.subscribe(
self.makeChart );
+ self.makeChart();
+ };
+ self.subscribe();
}
return { viewModel: AmtPerSecondChartViewModel, template: template };
--
To view, visit https://gerrit.wikimedia.org/r/197848
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I867b741cddaaaec16bf7d4a25bac6e29a6a9be4b
Gerrit-PatchSet: 1
Gerrit-Project: wikimedia/fundraising/dash
Gerrit-Branch: master
Gerrit-Owner: Ejegg <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits