Ejegg has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/197845

Change subject: Use shared context in distance to goal
......................................................................

Use shared context in distance to goal

Display an error message if no widget exists to provide totals.

Change-Id: I84c84b6213fe28070e759215f6c2c7b54d20e292
---
M src/components/widgets/distance-to-goal-chart/distance-to-goal-chart.html
M src/components/widgets/distance-to-goal-chart/distance-to-goal-chart.js
2 files changed, 26 insertions(+), 65 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/dash 
refs/changes/45/197845/1

diff --git 
a/src/components/widgets/distance-to-goal-chart/distance-to-goal-chart.html 
b/src/components/widgets/distance-to-goal-chart/distance-to-goal-chart.html
index 78983e9..b74b42f 100644
--- a/src/components/widgets/distance-to-goal-chart/distance-to-goal-chart.html
+++ b/src/components/widgets/distance-to-goal-chart/distance-to-goal-chart.html
@@ -4,6 +4,7 @@
                        <p data-bind="text: title"></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="row-fluid">
                                <div class="col-md-12">
                                        <div id="distanceToGoalChart" 
width='1000' height='450'></div>
diff --git 
a/src/components/widgets/distance-to-goal-chart/distance-to-goal-chart.js 
b/src/components/widgets/distance-to-goal-chart/distance-to-goal-chart.js
index 8ce31e1..2a16254 100644
--- a/src/components/widgets/distance-to-goal-chart/distance-to-goal-chart.js
+++ b/src/components/widgets/distance-to-goal-chart/distance-to-goal-chart.js
@@ -2,79 +2,33 @@
        'knockout',
        
'text!components/widgets/distance-to-goal-chart/distance-to-goal-chart.html',
        'c3',
-       'momentjs'
-], function( ko, template, c3, moment ){
-
+       'WidgetBase'
+], function( ko, template, c3, WidgetBase ){
 
        function DistanceToGoalChartViewModel( params ){
 
                var self = this;
-               self.goal = ko.observable('20,000,000');
-               self.dailyDataArray = [ 'Daily Total' ];
+               WidgetBase.call( this, params );
+               self.hasData = ko.observable( false );
 
-               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.makeCharts();
-
-                       self.raised(runningTotal);
-               };
-
-               // $.get('data/big-english', function(dtgData){
-
-               //      console.log('dtgData', dtgData);
-
-               //      self.dailyDataArray;
-
-
-               // });
-
-               self.title = ko.observable(params.title);
                self.makeCharts = function() {
-                       if ( self.dailyDataArray.length < 2 ) {
+                       if ( params.sharedContext.dailyDataArray.length < 2 ) {
                                return;
                        }
-                       self.goal = ko.observable(self.goal);
+                       self.hasData( true );
 
-                       self.updatedGoal = self.goal();
+                       self.updatedGoal = params.sharedContext.goal();
                        self.neededArray = ['Needed'];
-                       for(var d = 1; d < self.dailyDataArray.length; d++) {
-                               self.updatedGoal = self.updatedGoal - 
self.dailyDataArray[d];
+                       for(var d = 1; d < 
params.sharedContext.dailyDataArray.length; d++) {
+                               self.updatedGoal = self.updatedGoal - 
params.sharedContext.dailyDataArray[d];
                                self.neededArray[d] = self.updatedGoal >= 0 ? 
self.updatedGoal : 0;
+                       }
+
+                       if ( self.distanceToGoalChart ) {
+                               self.distanceToGoalChart.load( {
+                                       columns: [ self.neededArray ]
+                               } );
+                               return;
                        }
 
                        self.distanceToGoalChart = c3.generate({
@@ -114,9 +68,15 @@
                                }
                        });
                };
-
-               //self.makeCharts();
+               self.subscribe = function() {
+                       if ( !params.sharedContext.totalsChanged ) {
+                               window.setTimeout( self.subscribe, 50 );
+                               return;
+                       }
+                       params.sharedContext.totalsChanged.subscribe( 
self.makeCharts );
+                       self.makeCharts();
+               };
+               self.subscribe();
        }
        return { viewModel: DistanceToGoalChartViewModel, template: template };
-
 });

-- 
To view, visit https://gerrit.wikimedia.org/r/197845
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I84c84b6213fe28070e759215f6c2c7b54d20e292
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

Reply via email to