Skip to content

Commit 7a36b84

Browse files
authored
Merge pull request #31 from brafdlog/master
Fix for bug in deepEquals close #30
2 parents e9b7c1e + 29412b3 commit 7a36b84

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

src/__tests__/ChartTests.js

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import ChartComponent from "../Chart";
1+
import ChartComponent from '../Chart';
22

33
describe('Chart re-rendering', () => {
44

@@ -14,6 +14,40 @@ describe('Chart re-rendering', () => {
1414
expect(updateRequired).toBeTruthy();
1515
});
1616

17+
it('required when data is changed in an inner object/array of the data', () => {
18+
const originalData = {
19+
'data': {
20+
'datasets': [
21+
{
22+
'data': [
23+
122968
24+
]
25+
},
26+
{
27+
'data': [
28+
14738
29+
]
30+
}
31+
]
32+
}
33+
};
34+
// The new data has only one data set instead of two
35+
const newData = {
36+
'data': {
37+
'datasets': [
38+
{
39+
'data': [
40+
122968
41+
]
42+
}
43+
]
44+
}
45+
};
46+
const chart = new ChartComponent(originalData);
47+
const updateRequired = chart.shouldComponentUpdate(newData);
48+
expect(updateRequired).toBeTruthy();
49+
});
50+
1751
it('required when chart options change', () => {
1852
const chart = new ChartComponent({type: 'bar', options: {hover: {mode: 'single'}}});
1953
const updateRequired = chart.shouldComponentUpdate({type: 'bar', options: {hover: {mode: 'label'}}});

src/utils/deepEqual.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,15 @@ const deepEqual = (objA, objB) => {
2222
}
2323

2424
let keysA = Object.keys(objA);
25+
let keysB = Object.keys(objB);
26+
let allKeys = keysA.concat(keysB);
2527

26-
// Test for A's keys different from B.
27-
for (let i = 0; i < keysA.length; i++) {
28-
if (!hasOwnProperty.call(objB, keysA[i])) {
28+
// Verify both objects have all the keys
29+
for (let i = 0; i < allKeys.length; i++) {
30+
if (!hasOwnProperty.call(objB, allKeys[i])) {
31+
return false;
32+
}
33+
if (!hasOwnProperty.call(objA, allKeys[i])) {
2934
return false;
3035
}
3136
}

0 commit comments

Comments
 (0)