forked from trading-peter/chart-elements
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchart-property-mixin.js
77 lines (66 loc) · 1.5 KB
/
chart-property-mixin.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
import { html, css } from 'lit-element/lit-element.js';
/**
* Adds basic properties to all chart elements.
* @polymer
* @mixinFunction
*/
export const ChartPropertyMixin = function(superClass) {
return class extends superClass {
static get properties() {
return {
chart: Object,
data: Object,
options: Object
};
}
constructor() {
super();
this.__hasData = false;
}
static get styles() {
return css`
:host {
display: inline-block;
position: relative;
}
:host > div {
height: 100%;
}
#canvas {
width: 100%;
height: 100%;
}
`;
}
render() {
return html`
<div>
<canvas id="canvas"></canvas>
</div>
`;
}
shouldUpdate(changes) {
if (changes.has('data') || changes.has('options')) {
this._configurationChanged(this.data, this.options);
}
if (changes.has('chart')) {
this.dispatchEvent(new CustomEvent('chart-changed', { detail: this.chart, bubbles: true, composed: true }));
return false;
}
return true;
}
updated() {
if (this.__hasData && this.isConnected) {
this._queue();
}
}
_configurationChanged(data) {
if (!data) return;
if ((this.__type === 'bubble' || data.labels) && data.datasets) {
this.__hasData = true;
} else {
this.__hasData = false;
}
}
}
};