-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchartist-vue.js
99 lines (90 loc) · 3.39 KB
/
chartist-vue.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
'use strict';
var options;
var defaultOptions = {
};
options = Object.assign({}, defaultOptions, options);
Vue.component('chartist', {
template: '<div v-el:chart :class="[ratio, noData]" v-text="message"></div>',
ready: function ready() {
this.draw();
},
props: {
ratio: { type: String },
data: { type: Object },
options: { type: Object },
type: {
type: String,
required: true,
validator: function validator(val) {
return val === 'Pie' || val === 'Line' || val === 'Bar';
}
},
eventHandlers: { type: Array },
responsiveOptions: { type: Array }
},
data: function data() {
return {
Chartist: Chartist,
error: { onError: false, message: '' },
noData: '',
message: ''
};
},
methods: {
draw: function draw() {
if (this.data) {
//data is empty
if (this.data.series.length < 1 || this.type !== 'Pie' && this.data.labels.length < 1) {
new this.Chartist[this.type](this.$els.chart, this.data, this.options, this.responsiveOptions); //clear the potential old chart
this.setNoData();
//data is defined
} else {
this.noData = ''; //remove class ct-nodata
this.message = ''; //remove message no data
if (this.error.onError) this.error = { onError: false, message: '' }; //clear error
var chart = new this.Chartist[this.type](this.$els.chart, this.data, this.options, this.responsiveOptions);
if (this.eventHandlers) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = this.eventHandlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var item = _step.value;
chart.on(item.event, item.fn);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
}
} else {
this.setNoData();
}
},
setNoData: function setNoData() {
this.error = { onError: true, message: options.messageNoData };
this.noData = 'ct-nodata';
this.message = this.error.message;
}
},
watch: {
'ratio': 'draw',
'options': 'draw',
'data': {
handler: 'draw',
deep: true
},
'type': 'draw'
}
});