Skip to content

Commit 99d33d5

Browse files
authored
Merge pull request #82 from Owlman145/master
Change to didUpdateAttrs() from observers
2 parents 7ff9a1a + ec4b47a commit 99d33d5

File tree

2 files changed

+52
-41
lines changed

2 files changed

+52
-41
lines changed

addon/components/ember-chart.js

+27-21
Original file line numberDiff line numberDiff line change
@@ -5,36 +5,42 @@ export default Ember.Component.extend({
55
tagName: 'canvas',
66
attributeBindings: ['width', 'height'],
77

8-
didInsertElement: function(){
9-
var context = this.get('element');
10-
var data = this.get('data');
11-
var type = this.get('type');
12-
var options = this.get('options');
13-
14-
var chart = new Chart(context, {
8+
didInsertElement() {
9+
this._super(...arguments);
10+
let context = this.get('element');
11+
let data = this.get('data');
12+
let type = this.get('type');
13+
let options = this.get('options');
14+
15+
let chart = new Chart(context, {
1516
type: type,
1617
data: data,
1718
options: options
1819
});
1920
this.set('chart', chart);
20-
this.addObserver('data', this, this.updateChart);
21-
this.addObserver('data.[]', this, this.updateChart);
22-
this.addObserver('options', this, this.updateChart);
2321
},
2422

25-
willDestroyElement: function(){
23+
willDestroyElement() {
24+
this._super(...arguments);
2625
this.get('chart').destroy();
27-
this.removeObserver('data', this, this.updateChart);
28-
this.removeObserver('data.[]', this, this.updateChart);
29-
this.removeObserver('options', this, this.updateChart);
3026
},
3127

32-
updateChart: function(){
33-
var chart = this.get('chart');
34-
var data = this.get('data');
35-
var options = this.get('options');
36-
chart.config.data = data;
37-
chart.config.options = options;
38-
chart.update();
28+
didUpdateAttrs() {
29+
this._super(...arguments);
30+
31+
let chart = this.get('chart');
32+
let data = this.get('data');
33+
let options = this.get('options');
34+
let animate = this.get('animate');
35+
36+
if (chart) {
37+
chart.config.data = data;
38+
chart.config.options = options;
39+
if (animate) {
40+
chart.update();
41+
} else {
42+
chart.update(0);
43+
}
44+
}
3945
}
4046
});

tests/unit/components/ember-chart-test.js

+25-20
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ moduleForComponent('ember-chart', 'EmberChartComponent', {
99
});
1010

1111
// Test Data
12-
var ChartTestData = Ember.Object.extend({
12+
let ChartTestData = Ember.Object.extend({
1313
pieValue1: 300,
1414
pieValue2: 50,
1515
pieValue3: 100,
@@ -166,113 +166,118 @@ var ChartTestData = Ember.Object.extend({
166166
}),
167167
});
168168

169-
var testData = ChartTestData.create();
169+
let testData = ChartTestData.create();
170170
// Test Data
171171

172172

173173
test('it can be a pie chart', function(assert) {
174-
var component = this.subject({
174+
let component = this.subject({
175175
type: 'pie',
176176
data: testData.get('pieData')
177177
});
178178

179179
this.render();
180-
var chart = component.get('chart');
181-
180+
let chart = component.get('chart');
182181
assert.equal(chart.config.type, 'pie');
183182
assert.equal(chart.data.datasets[0].data.length, 3);
184183
});
185184

186185
test('it can be a line chart', function(assert) {
187-
var component = this.subject({
186+
let component = this.subject({
188187
type: 'line',
189188
data: testData.get('lineData')
190189
});
191190

192191
this.render();
193-
var chart = component.get('chart');
192+
let chart = component.get('chart');
194193

195194
assert.equal(chart.config.type, 'line');
196195
assert.equal(chart.data.datasets.length, 2);
197196
});
198197

199198
test('it can be a bar chart', function(assert) {
200-
var component = this.subject({
199+
let component = this.subject({
201200
type: 'bar',
202201
data: testData.get('lineData')
203202
});
204203

205204
this.render();
206-
var chart = component.get('chart');
205+
let chart = component.get('chart');
207206

208207
assert.equal(chart.config.type, 'bar');
209208
assert.equal(chart.data.datasets.length, 2);
210209
});
211210

212211
test('it can be a Radar chart', function(assert) {
213-
var component = this.subject({
212+
let component = this.subject({
214213
type: 'radar',
215214
data: testData.get('lineData')
216215
});
217216

218217
this.render();
219-
var chart = component.get('chart');
218+
let chart = component.get('chart');
220219

221220
assert.equal(chart.config.type, 'radar');
222221
assert.equal(chart.data.datasets.length, 2);
223222
});
224223

225224
test('it can be a Polar Area chart', function(assert) {
226-
var component = this.subject({
225+
let component = this.subject({
227226
type: 'polarArea',
228227
data: testData.get('pieData')
229228
});
230229

231230
this.render();
232-
var chart = component.get('chart');
231+
let chart = component.get('chart');
233232

234233
assert.equal(chart.config.type, 'polarArea');
235234
assert.equal(chart.data.datasets[0].data.length, 3);
236235
});
237236

238237
test('it should update pie charts dynamically', function(assert) {
239-
var component = this.subject({
238+
assert.expect(2);
239+
let component = this.subject({
240240
type: 'pie',
241241
data: testData.get('pieData')
242242
});
243243

244244
this.render();
245-
var chart = component.get('chart');
245+
let chart = component.get('chart');
246246
assert.equal(chart.data.datasets[0].data[0], 300);
247247

248248
// Update Data
249249
testData.set('pieValue1', 600);
250250
component.set('data', testData.get('pieData'));
251+
component.didUpdateAttrs();
251252

252253
chart = component.get('chart');
253254
assert.equal(chart.data.datasets[0].data[0], 600);
254255
});
255256

256257
test('it should update charts dynamically', function(assert) {
257-
var component = this.subject({
258+
assert.expect(3);
259+
let component = this.subject({
258260
type: 'line',
259261
data: testData.get('lineData')
260-
});
262+
});
261263

262-
this.render();
263-
var chart = component.get('chart');
264+
this.render();
265+
let chart = component.get('chart');
264266
assert.equal(chart.data.datasets[0].data[0], 65);
265267

266268
// Update Data
267269
testData.set('lineValue1', 105);
268270
component.set('data', testData.get('lineData'));
269-
271+
component.didUpdateAttrs();
272+
270273
chart = component.get('chart');
271274
assert.equal(chart.data.datasets[0].data[0], 105);
272275

276+
273277
// Update Labels
274278
testData.set('labelValue1', 'December');
275279
component.set('data', testData.get('lineData'));
280+
component.didUpdateAttrs();
276281

277282
chart = component.get('chart');
278283
assert.equal(chart.data.labels[0], 'December');

0 commit comments

Comments
 (0)