Skip to content

Commit 43363fc

Browse files
authored
Merge pull request #109 from MuseofMoose/patch-1
Fix reactive mixins animation re-rendering issue.
2 parents 29d1ca3 + dbce4d7 commit 43363fc

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

src/mixins/reactiveData.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,26 @@ module.exports = {
2626
// Check if Labels are equal and if dataset length is equal
2727
if (newLabels === oldLabels && oldData.datasets.length === newData.datasets.length) {
2828
newData.datasets.forEach((dataset, i) => {
29-
chart.data.datasets[i] = dataset
29+
// Get new and old dataset keys
30+
const oldDatasetKeys = Object.keys(oldData.datasets[i])
31+
const newDatasetKeys = Object.keys(dataset)
32+
33+
// Get keys that aren't present in the new data
34+
const deletionKeys = oldDatasetKeys.filter((key) => {
35+
return key !== '_meta' && newDatasetKeys.indexOf(key) === -1
36+
})
37+
38+
// Remove outdated key-value pairs
39+
deletionKeys.forEach((deletionKey) => {
40+
delete chart.data.datasets[i][deletionKey]
41+
})
42+
43+
// Update attributes individually to avoid re-rendering the entire chart
44+
for (const attribute in dataset) {
45+
if (dataset.hasOwnProperty(attribute)) {
46+
chart.data.datasets[i][attribute] = dataset[attribute]
47+
}
48+
}
3049
})
3150

3251
chart.data.labels = newData.labels

src/mixins/reactiveProp.js

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ module.exports = {
44
required: true
55
}
66
},
7-
87
watch: {
98
'chartData': {
109
handler (newData, oldData) {
@@ -27,7 +26,26 @@ module.exports = {
2726
// Check if Labels are equal and if dataset length is equal
2827
if (newLabels === oldLabels && oldData.datasets.length === newData.datasets.length) {
2928
newData.datasets.forEach((dataset, i) => {
30-
chart.data.datasets[i] = dataset
29+
// Get new and old dataset keys
30+
const oldDatasetKeys = Object.keys(oldData.datasets[i])
31+
const newDatasetKeys = Object.keys(dataset)
32+
33+
// Get keys that aren't present in the new data
34+
const deletionKeys = oldDatasetKeys.filter((key) => {
35+
return key !== '_meta' && newDatasetKeys.indexOf(key) === -1
36+
})
37+
38+
// Remove outdated key-value pairs
39+
deletionKeys.forEach((deletionKey) => {
40+
delete chart.data.datasets[i][deletionKey]
41+
})
42+
43+
// Update attributes individually to avoid re-rendering the entire chart
44+
for (const attribute in dataset) {
45+
if (dataset.hasOwnProperty(attribute)) {
46+
chart.data.datasets[i][attribute] = dataset[attribute]
47+
}
48+
}
3149
})
3250

3351
chart.data.labels = newData.labels

0 commit comments

Comments
 (0)