@operato/scene-chartjs 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/LICENSE +21 -0
- package/README.md +21 -0
- package/assets/bar-chart.png +0 -0
- package/assets/doughnut-chart.png +0 -0
- package/assets/horizontal-bar-chart.png +0 -0
- package/assets/line-chart.png +0 -0
- package/assets/mixed-chart.png +0 -0
- package/assets/pie-chart.png +0 -0
- package/assets/polar-area-chart.png +0 -0
- package/assets/radar-chart.png +0 -0
- package/demo/bar.html +266 -0
- package/demo/chartjs.html +73 -0
- package/demo/index.html +547 -0
- package/demo/legend.html +267 -0
- package/demo/things-scene-chartjs.html +7 -0
- package/dist/chartjs.d.ts +27 -0
- package/dist/chartjs.js +109 -0
- package/dist/chartjs.js.map +1 -0
- package/dist/config-converter.d.ts +1 -0
- package/dist/config-converter.js +343 -0
- package/dist/config-converter.js.map +1 -0
- package/dist/editors/index.d.ts +5 -0
- package/dist/editors/index.js +11 -0
- package/dist/editors/index.js.map +1 -0
- package/dist/editors/property-editor-chartjs-abstract.d.ts +44 -0
- package/dist/editors/property-editor-chartjs-abstract.js +250 -0
- package/dist/editors/property-editor-chartjs-abstract.js.map +1 -0
- package/dist/editors/property-editor-chartjs-hbar.d.ts +9 -0
- package/dist/editors/property-editor-chartjs-hbar.js +160 -0
- package/dist/editors/property-editor-chartjs-hbar.js.map +1 -0
- package/dist/editors/property-editor-chartjs-mixed.d.ts +20 -0
- package/dist/editors/property-editor-chartjs-mixed.js +193 -0
- package/dist/editors/property-editor-chartjs-mixed.js.map +1 -0
- package/dist/editors/property-editor-chartjs-multi-series-abstract.d.ts +31 -0
- package/dist/editors/property-editor-chartjs-multi-series-abstract.js +373 -0
- package/dist/editors/property-editor-chartjs-multi-series-abstract.js.map +1 -0
- package/dist/editors/property-editor-chartjs-pie.d.ts +14 -0
- package/dist/editors/property-editor-chartjs-pie.js +70 -0
- package/dist/editors/property-editor-chartjs-pie.js.map +1 -0
- package/dist/editors/property-editor-chartjs-radar.d.ts +10 -0
- package/dist/editors/property-editor-chartjs-radar.js +42 -0
- package/dist/editors/property-editor-chartjs-radar.js.map +1 -0
- package/dist/editors/property-editor-chartjs-styles.d.ts +1 -0
- package/dist/editors/property-editor-chartjs-styles.js +165 -0
- package/dist/editors/property-editor-chartjs-styles.js.map +1 -0
- package/dist/editors/property-editor-chartjs.d.ts +14 -0
- package/dist/editors/property-editor-chartjs.js +83 -0
- package/dist/editors/property-editor-chartjs.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/ox-chart.d.ts +20 -0
- package/dist/ox-chart.js +137 -0
- package/dist/ox-chart.js.map +1 -0
- package/dist/plugins/chart-series-highlight.d.ts +5 -0
- package/dist/plugins/chart-series-highlight.js +37 -0
- package/dist/plugins/chart-series-highlight.js.map +1 -0
- package/dist/plugins/chartjs-plugin-data-binder.d.ts +5 -0
- package/dist/plugins/chartjs-plugin-data-binder.js +111 -0
- package/dist/plugins/chartjs-plugin-data-binder.js.map +1 -0
- package/helps/scene/component/chartjs.ko.md +332 -0
- package/helps/scene/component/chartjs.md +333 -0
- package/helps/scene/component/chartjs.zh.md +331 -0
- package/helps/scene/images/chart-bar-01.png +0 -0
- package/helps/scene/images/chart-bar-02.png +0 -0
- package/helps/scene/images/chart-bar-03.png +0 -0
- package/helps/scene/images/chart-bar-08.png +0 -0
- package/helps/scene/images/chart-bar-12.png +0 -0
- package/helps/scene/images/chart-data-01.png +0 -0
- package/helps/scene/images/chart-data-04.png +0 -0
- package/helps/scene/images/chart-doughnut-01.png +0 -0
- package/helps/scene/images/chart-horizontal-bar-01.png +0 -0
- package/helps/scene/images/chart-line-01.png +0 -0
- package/helps/scene/images/chart-mix-01.png +0 -0
- package/helps/scene/images/chart-mix-02.png +0 -0
- package/helps/scene/images/chart-pie-01.png +0 -0
- package/helps/scene/images/chart-polar-01.png +0 -0
- package/helps/scene/images/chart-radar-01.png +0 -0
- package/package.json +78 -0
- package/src/chartjs.ts +134 -0
- package/src/config-converter.ts +401 -0
- package/src/editors/index.ts +11 -0
- package/src/editors/property-editor-chartjs-abstract.ts +301 -0
- package/src/editors/property-editor-chartjs-hbar.ts +163 -0
- package/src/editors/property-editor-chartjs-mixed.ts +204 -0
- package/src/editors/property-editor-chartjs-multi-series-abstract.ts +393 -0
- package/src/editors/property-editor-chartjs-pie.ts +79 -0
- package/src/editors/property-editor-chartjs-radar.ts +43 -0
- package/src/editors/property-editor-chartjs-styles.ts +165 -0
- package/src/editors/property-editor-chartjs.ts +88 -0
- package/src/index.ts +7 -0
- package/src/ox-chart.ts +150 -0
- package/src/plugins/chart-series-highlight.ts +43 -0
- package/src/plugins/chartjs-plugin-data-binder.ts +138 -0
- package/src/scene-chart.d.ts +152 -0
- package/templates/bar-chart.js +124 -0
- package/templates/doughnut-chart.js +58 -0
- package/templates/horizontal-bar-chart.js +121 -0
- package/templates/index.js +22 -0
- package/templates/line-chart.js +155 -0
- package/templates/mixed-chart.js +152 -0
- package/templates/pie-chart.js +58 -0
- package/templates/polar-area-chart.js +92 -0
- package/templates/radar-chart.js +98 -0
- package/test/basic-test.html +61 -0
- package/test/index.html +20 -0
- package/things-scene.config.js +7 -0
- package/translations/en.json +5 -0
- package/translations/ko.json +5 -0
- package/translations/ms.json +5 -0
- package/translations/zh.json +5 -0
- package/tsconfig.json +22 -0
- package/tsconfig.tsbuildinfo +1 -0
package/dist/ox-chart.js
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
3
|
+
*/
|
4
|
+
import { __decorate } from "tslib";
|
5
|
+
import 'chartjs-plugin-datalabels';
|
6
|
+
import 'chartjs-plugin-style';
|
7
|
+
import { LitElement, html } from 'lit';
|
8
|
+
import { customElement, property, query } from 'lit/decorators.js';
|
9
|
+
import { Chart } from 'chart.js';
|
10
|
+
import DataBinderPlugin from './plugins/chartjs-plugin-data-binder';
|
11
|
+
import { convertConfigure } from './config-converter';
|
12
|
+
Chart.plugins.register(DataBinderPlugin);
|
13
|
+
let OxChart = class OxChart extends LitElement {
|
14
|
+
firstUpdated() {
|
15
|
+
this.initChart();
|
16
|
+
}
|
17
|
+
render() {
|
18
|
+
return html ` <canvas></canvas> `;
|
19
|
+
}
|
20
|
+
updated(changes) {
|
21
|
+
if (changes.has('width') || changes.has('height')) {
|
22
|
+
this.updateChartSize();
|
23
|
+
}
|
24
|
+
if (changes.has('options')) {
|
25
|
+
this.updateChartConfig();
|
26
|
+
}
|
27
|
+
if (changes.has('data')) {
|
28
|
+
this._chart.data.rawData = this.data;
|
29
|
+
this._chart.update();
|
30
|
+
}
|
31
|
+
}
|
32
|
+
initChart() {
|
33
|
+
const { data, options, type } = this.options;
|
34
|
+
options.maintainAspectRatio = false;
|
35
|
+
this.attachPluginOptions(options);
|
36
|
+
convertConfigure(this.options);
|
37
|
+
this._chart = new Chart(this._canvas, {
|
38
|
+
type,
|
39
|
+
data,
|
40
|
+
options
|
41
|
+
});
|
42
|
+
this.updateChartSize();
|
43
|
+
this._initialized = true;
|
44
|
+
}
|
45
|
+
updateChartSize() {
|
46
|
+
const width = Math.floor(this.width);
|
47
|
+
const height = Math.floor(this.height);
|
48
|
+
this._canvas.style.width = `${width}px`;
|
49
|
+
this._canvas.style.height = `${height}px`;
|
50
|
+
const _ = () => {
|
51
|
+
if (this._canvas.offsetWidth == 0 || this._canvas.offsetHeight == 0) {
|
52
|
+
requestAnimationFrame(_);
|
53
|
+
}
|
54
|
+
else {
|
55
|
+
/*
|
56
|
+
주의 : chart.resize() 내에서 pixel ratio를 감안해서, canvas 의 width, height를 설정하기때문에,
|
57
|
+
별도 처리가 필요하지 않다.
|
58
|
+
*/
|
59
|
+
this._chart.resize();
|
60
|
+
}
|
61
|
+
};
|
62
|
+
requestAnimationFrame(_);
|
63
|
+
}
|
64
|
+
updateChartConfig() {
|
65
|
+
if (!this._chart)
|
66
|
+
return;
|
67
|
+
const { data, options, type } = this.options;
|
68
|
+
options.maintainAspectRatio = false;
|
69
|
+
this.attachPluginOptions(options);
|
70
|
+
convertConfigure(this.options);
|
71
|
+
this._chart.type = type;
|
72
|
+
this._chart.data = data;
|
73
|
+
this._chart.options = options;
|
74
|
+
this._chart.data.rawData = this.data;
|
75
|
+
this._chart.update();
|
76
|
+
}
|
77
|
+
attachPluginOptions(options) {
|
78
|
+
if (!options.plugins) {
|
79
|
+
options.plugins = {};
|
80
|
+
}
|
81
|
+
this.attachDatalabelPluginOptions(options.plugins);
|
82
|
+
}
|
83
|
+
attachDatalabelPluginOptions(pluginOptions) {
|
84
|
+
pluginOptions.datalabels = {
|
85
|
+
...pluginOptions.datalabels,
|
86
|
+
display: function (context) {
|
87
|
+
//@ts-ignore
|
88
|
+
return !!context.dataset.displayValue;
|
89
|
+
},
|
90
|
+
anchor: function (context) {
|
91
|
+
//@ts-ignore
|
92
|
+
return context.dataset.dataLabelAnchor || 'center';
|
93
|
+
},
|
94
|
+
color: function (context) {
|
95
|
+
//@ts-ignore
|
96
|
+
return context.dataset.defaultFontColor || '#000';
|
97
|
+
},
|
98
|
+
font: function (context) {
|
99
|
+
return {
|
100
|
+
//@ts-ignore
|
101
|
+
size: context.dataset.defaultFontSize
|
102
|
+
};
|
103
|
+
},
|
104
|
+
clamp: true,
|
105
|
+
formatter: function (value, context) {
|
106
|
+
//@ts-ignore
|
107
|
+
var prefix = context.dataset.valuePrefix || '';
|
108
|
+
//@ts-ignore
|
109
|
+
var suffix = context.dataset.valueSuffix || '';
|
110
|
+
if (value == undefined)
|
111
|
+
return value;
|
112
|
+
var stringValue = String(value);
|
113
|
+
return prefix + stringValue.toLocaleString() + suffix;
|
114
|
+
}
|
115
|
+
};
|
116
|
+
}
|
117
|
+
};
|
118
|
+
__decorate([
|
119
|
+
property({ type: Number })
|
120
|
+
], OxChart.prototype, "width", void 0);
|
121
|
+
__decorate([
|
122
|
+
property({ type: Number })
|
123
|
+
], OxChart.prototype, "height", void 0);
|
124
|
+
__decorate([
|
125
|
+
property({ type: Object })
|
126
|
+
], OxChart.prototype, "options", void 0);
|
127
|
+
__decorate([
|
128
|
+
property({ type: Object })
|
129
|
+
], OxChart.prototype, "data", void 0);
|
130
|
+
__decorate([
|
131
|
+
query('canvas')
|
132
|
+
], OxChart.prototype, "_canvas", void 0);
|
133
|
+
OxChart = __decorate([
|
134
|
+
customElement('ox-chart')
|
135
|
+
], OxChart);
|
136
|
+
export { OxChart };
|
137
|
+
//# sourceMappingURL=ox-chart.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ox-chart.js","sourceRoot":"","sources":["../src/ox-chart.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport 'chartjs-plugin-datalabels'\nimport 'chartjs-plugin-style'\n\nimport { LitElement, PropertyValues, html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\n\nimport { Chart } from 'chart.js'\nimport DataBinderPlugin from './plugins/chartjs-plugin-data-binder'\nimport { convertConfigure } from './config-converter'\n\nChart.plugins.register(DataBinderPlugin)\n\n@customElement('ox-chart')\nexport class OxChart extends LitElement {\n @property({ type: Number }) width!: number\n @property({ type: Number }) height!: number\n @property({ type: Object }) options!: SceneChart.ChartConfig\n @property({ type: Object }) data!: SceneChart.ChartData\n\n private _initialized?: boolean\n private _chart?: SceneChart\n\n @query('canvas') _canvas!: HTMLCanvasElement\n\n firstUpdated() {\n this.initChart()\n }\n\n render() {\n return html` <canvas></canvas> `\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('width') || changes.has('height')) {\n this.updateChartSize()\n }\n\n if (changes.has('options')) {\n this.updateChartConfig()\n }\n\n if (changes.has('data')) {\n this._chart!.data.rawData = this.data\n this._chart!.update()\n }\n }\n\n initChart() {\n const { data, options, type } = this.options\n options!.maintainAspectRatio = false\n\n this.attachPluginOptions(options)\n convertConfigure(this.options as SceneChart.ChartConfig)\n\n this._chart = new Chart(this._canvas, {\n type,\n data,\n options\n }) as SceneChart\n\n this.updateChartSize()\n\n this._initialized = true\n }\n\n updateChartSize() {\n const width = Math.floor(this.width)\n const height = Math.floor(this.height)\n\n this._canvas.style.width = `${width}px`\n this._canvas.style.height = `${height}px`\n\n const _ = () => {\n if (this._canvas.offsetWidth == 0 || this._canvas.offsetHeight == 0) {\n requestAnimationFrame(_)\n } else {\n /*\n 주의 : chart.resize() 내에서 pixel ratio를 감안해서, canvas 의 width, height를 설정하기때문에,\n 별도 처리가 필요하지 않다.\n */\n this._chart!.resize()\n }\n }\n\n requestAnimationFrame(_)\n }\n\n updateChartConfig() {\n if (!this._chart) return\n\n const { data, options, type } = this.options\n options!.maintainAspectRatio = false\n\n this.attachPluginOptions(options)\n convertConfigure(this.options as SceneChart.ChartConfig)\n\n this._chart.type = type\n this._chart.data = data\n this._chart.options = options\n this._chart.data.rawData = this.data\n this._chart.update()\n }\n\n attachPluginOptions(options: SceneChart.ChartOptions) {\n if (!options.plugins) {\n options.plugins = {}\n }\n\n this.attachDatalabelPluginOptions(options.plugins)\n }\n\n attachDatalabelPluginOptions(pluginOptions: SceneChart.ChartPluginsOptions) {\n pluginOptions.datalabels = {\n ...pluginOptions.datalabels,\n display: function (context) {\n //@ts-ignore\n return !!context.dataset.displayValue\n },\n anchor: function (context) {\n //@ts-ignore\n return context.dataset.dataLabelAnchor || 'center'\n },\n color: function (context) {\n //@ts-ignore\n return context.dataset.defaultFontColor || '#000'\n },\n font: function (context) {\n return {\n //@ts-ignore\n size: context.dataset.defaultFontSize\n }\n },\n clamp: true,\n formatter: function (value, context) {\n //@ts-ignore\n var prefix = context.dataset.valuePrefix || ''\n //@ts-ignore\n var suffix = context.dataset.valueSuffix || ''\n if (value == undefined) return value\n\n var stringValue = String(value)\n return prefix + stringValue.toLocaleString() + suffix\n }\n }\n }\n}\n"]}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
3
|
+
*/
|
4
|
+
function seriesHighlight(chartInstance, seriesData) {
|
5
|
+
var _a;
|
6
|
+
(_a = chartInstance.data.datasets) === null || _a === void 0 ? void 0 : _a.forEach(dataset => {
|
7
|
+
let highlight = dataset.highlight;
|
8
|
+
if (!highlight) {
|
9
|
+
return;
|
10
|
+
}
|
11
|
+
let highlightColor = highlight.color;
|
12
|
+
let highlightCondition = highlight.condition;
|
13
|
+
seriesData.forEach((sdata, sIndex) => {
|
14
|
+
sdata.forEach((data, i) => {
|
15
|
+
if (!eval(highlightCondition)) {
|
16
|
+
return;
|
17
|
+
}
|
18
|
+
let meta = chartInstance.getDatasetMeta(sIndex);
|
19
|
+
meta.data[i]._model.backgroundColor = highlightColor;
|
20
|
+
//@ts-ignore
|
21
|
+
meta.data[i]._model.hoverBackgroundColor = highlightColor;
|
22
|
+
// dataset.backgroundColor = highlightColor
|
23
|
+
});
|
24
|
+
});
|
25
|
+
});
|
26
|
+
}
|
27
|
+
export default {
|
28
|
+
id: 'chart-series-highlight',
|
29
|
+
beforeDraw: function (chartInstance) {
|
30
|
+
if (!chartInstance.data.rawData) {
|
31
|
+
return;
|
32
|
+
}
|
33
|
+
let seriesData = chartInstance.data.rawData.seriesData;
|
34
|
+
seriesHighlight(chartInstance, seriesData);
|
35
|
+
}
|
36
|
+
};
|
37
|
+
//# sourceMappingURL=chart-series-highlight.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"chart-series-highlight.js","sourceRoot":"","sources":["../../src/plugins/chart-series-highlight.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,SAAS,eAAe,CAAC,aAAyB,EAAE,UAAiC;;IACnF,MAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,0CAAE,OAAO,CAAC,OAAO,CAAC,EAAE;QAC7C,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QACjC,IAAI,CAAC,SAAS,EAAE;YACd,OAAM;SACP;QAED,IAAI,cAAc,GAAG,SAAS,CAAC,KAAK,CAAA;QACpC,IAAI,kBAAkB,GAAG,SAAS,CAAC,SAAS,CAAA;QAE5C,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACnC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAqB,EAAE,CAAS,EAAE,EAAE;gBACjD,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;oBAC7B,OAAM;iBACP;gBAED,IAAI,IAAI,GAAG,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;gBAC/C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,GAAG,cAAc,CAAA;gBACpD,YAAY;gBACZ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,oBAAoB,GAAG,cAAc,CAAA;gBAEzD,2CAA2C;YAC7C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,eAAe;IACb,EAAE,EAAE,wBAAwB;IAC5B,UAAU,EAAE,UAAU,aAAyB;QAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE;YAC/B,OAAM;SACP;QAED,IAAI,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAA;QACtD,eAAe,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;IAC5C,CAAC;CACF,CAAA","sourcesContent":["import Chart from 'chart.js'\n\n/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nfunction seriesHighlight(chartInstance: SceneChart, seriesData: SceneChart.DataSeries) {\n chartInstance.data.datasets?.forEach(dataset => {\n let highlight = dataset.highlight\n if (!highlight) {\n return\n }\n\n let highlightColor = highlight.color\n let highlightCondition = highlight.condition\n\n seriesData.forEach((sdata, sIndex) => {\n sdata.forEach((data: SceneChart.Data, i: number) => {\n if (!eval(highlightCondition)) {\n return\n }\n\n let meta = chartInstance.getDatasetMeta(sIndex)\n meta.data[i]._model.backgroundColor = highlightColor\n //@ts-ignore\n meta.data[i]._model.hoverBackgroundColor = highlightColor\n\n // dataset.backgroundColor = highlightColor\n })\n })\n })\n}\n\nexport default {\n id: 'chart-series-highlight',\n beforeDraw: function (chartInstance: SceneChart) {\n if (!chartInstance.data.rawData) {\n return\n }\n\n let seriesData = chartInstance.data.rawData.seriesData\n seriesHighlight(chartInstance, seriesData)\n }\n}\n"]}
|
@@ -0,0 +1,111 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
3
|
+
*/
|
4
|
+
function convertObject(dataArray, chartInstance) {
|
5
|
+
if (!dataArray) {
|
6
|
+
return null;
|
7
|
+
}
|
8
|
+
if (typeof dataArray == 'string') {
|
9
|
+
try {
|
10
|
+
dataArray = JSON.parse(dataArray);
|
11
|
+
}
|
12
|
+
catch (e) {
|
13
|
+
console.warn('invalid chart data format', e);
|
14
|
+
return null;
|
15
|
+
}
|
16
|
+
}
|
17
|
+
if (!(dataArray instanceof Array)) {
|
18
|
+
// is not Array
|
19
|
+
if (dataArray instanceof Object) {
|
20
|
+
return dataArray;
|
21
|
+
}
|
22
|
+
return null;
|
23
|
+
}
|
24
|
+
if (dataArray.length === 0) {
|
25
|
+
return null;
|
26
|
+
}
|
27
|
+
// modeling중 변수 기본값에 대한 처리
|
28
|
+
if (dataArray[0].hasOwnProperty('__field1')) {
|
29
|
+
dataArray = toObjectArrayValue(dataArray);
|
30
|
+
}
|
31
|
+
let label = chartInstance.data.labelDataKey;
|
32
|
+
let seriesKeys = [];
|
33
|
+
for (let i in chartInstance.data.datasets) {
|
34
|
+
seriesKeys.push(chartInstance.data.datasets[Number(i)].dataKey);
|
35
|
+
}
|
36
|
+
let seriesData = [];
|
37
|
+
let labelData = [];
|
38
|
+
let convertedObject = {
|
39
|
+
seriesData,
|
40
|
+
labelData
|
41
|
+
};
|
42
|
+
for (let i in dataArray) {
|
43
|
+
let currData = dataArray[Number(i)];
|
44
|
+
labelData.push(currData[label]);
|
45
|
+
for (let i in seriesKeys) {
|
46
|
+
if (!seriesKeys[i])
|
47
|
+
continue;
|
48
|
+
if (!seriesData[i])
|
49
|
+
seriesData[i] = [];
|
50
|
+
// 값이 NaN 경우엔 차트를 그리지 않음
|
51
|
+
if (Number(currData[seriesKeys[i]]) == NaN) {
|
52
|
+
currData[seriesKeys[i]] = NaN;
|
53
|
+
}
|
54
|
+
seriesData[i].push(currData[seriesKeys[i]]);
|
55
|
+
}
|
56
|
+
}
|
57
|
+
return convertedObject;
|
58
|
+
}
|
59
|
+
function toObjectArrayValue(array) {
|
60
|
+
if (!array || array.length === 0) {
|
61
|
+
return null;
|
62
|
+
}
|
63
|
+
let indexKeyMap = {};
|
64
|
+
let value = [];
|
65
|
+
for (let key in array[0]) {
|
66
|
+
indexKeyMap[key] = array[0][key];
|
67
|
+
}
|
68
|
+
for (var i = 1; i < array.length; i++) {
|
69
|
+
let object = {};
|
70
|
+
let thisObject = array[i];
|
71
|
+
for (let key in indexKeyMap) {
|
72
|
+
let k = indexKeyMap[key];
|
73
|
+
let v = thisObject[key];
|
74
|
+
object[k] = v;
|
75
|
+
}
|
76
|
+
value.push(object);
|
77
|
+
}
|
78
|
+
return value;
|
79
|
+
}
|
80
|
+
function updateSeriesDatas(chartInstance) {
|
81
|
+
if (!chartInstance.data.rawData) {
|
82
|
+
return;
|
83
|
+
}
|
84
|
+
let seriesData = chartInstance.data.rawData.seriesData;
|
85
|
+
if (!seriesData || seriesData.length === 0)
|
86
|
+
seriesData = [null];
|
87
|
+
for (let key in chartInstance.data.datasets) {
|
88
|
+
chartInstance.data.datasets[Number(key)].data = seriesData[key] || [];
|
89
|
+
}
|
90
|
+
}
|
91
|
+
function updateLabelDatas(chartInstance) {
|
92
|
+
let labelData = chartInstance.data.rawData.labelData;
|
93
|
+
chartInstance.config.data.labels = labelData || [];
|
94
|
+
}
|
95
|
+
export default {
|
96
|
+
id: 'data-binder',
|
97
|
+
beforeUpdate: function (chartInstance) {
|
98
|
+
if (!chartInstance.data)
|
99
|
+
return;
|
100
|
+
if (!chartInstance.data.rawData)
|
101
|
+
chartInstance.data.rawData = [];
|
102
|
+
chartInstance.data.rawData = convertObject(chartInstance.data.rawData, chartInstance) || {
|
103
|
+
seriesData: [],
|
104
|
+
labelData: []
|
105
|
+
};
|
106
|
+
let seriesData = chartInstance.data.rawData.seriesData;
|
107
|
+
updateLabelDatas(chartInstance);
|
108
|
+
updateSeriesDatas(chartInstance);
|
109
|
+
}
|
110
|
+
};
|
111
|
+
//# sourceMappingURL=chartjs-plugin-data-binder.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"chartjs-plugin-data-binder.js","sourceRoot":"","sources":["../../src/plugins/chartjs-plugin-data-binder.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nfunction convertObject(\n dataArray: string | SceneChart.DataSeries | Object,\n chartInstance: SceneChart\n): null | Object | SceneChart.DataSeries {\n if (!dataArray) {\n return null\n }\n\n if (typeof dataArray == 'string') {\n try {\n dataArray = JSON.parse(dataArray)\n } catch (e) {\n console.warn('invalid chart data format', e)\n return null\n }\n }\n\n if (!(dataArray instanceof Array)) {\n // is not Array\n if (dataArray instanceof Object) {\n return dataArray\n }\n return null\n }\n\n if (dataArray.length === 0) {\n return null\n }\n\n // modeling중 변수 기본값에 대한 처리\n if (dataArray[0].hasOwnProperty('__field1')) {\n dataArray = toObjectArrayValue(dataArray) as SceneChart.DataSeries\n }\n\n let label = chartInstance.data.labelDataKey\n let seriesKeys = []\n\n for (let i in chartInstance.data.datasets) {\n seriesKeys.push(chartInstance.data.datasets[Number(i)].dataKey)\n }\n\n let seriesData: SceneChart.DataSeries = []\n let labelData: SceneChart.DataSeries = []\n\n let convertedObject = {\n seriesData,\n labelData\n }\n\n for (let i in dataArray) {\n let currData: SceneChart.Data = (dataArray as SceneChart.DataSeries)[Number(i)]\n labelData.push(currData[label!])\n\n for (let i in seriesKeys) {\n if (!seriesKeys[i]) continue\n\n if (!seriesData[i]) seriesData[i] = []\n\n // 값이 NaN 경우엔 차트를 그리지 않음\n if (Number(currData[seriesKeys[i]]) == NaN) {\n currData[seriesKeys[i]] = NaN\n }\n\n seriesData[i].push(currData[seriesKeys[i]])\n }\n }\n\n return convertedObject\n}\n\nfunction toObjectArrayValue(array: SceneChart.DataSeries): SceneChart.DataSeries | null {\n if (!array || array.length === 0) {\n return null\n }\n\n let indexKeyMap: SceneChart.Data = {}\n let value = []\n\n for (let key in array[0]) {\n indexKeyMap[key] = array[0][key]\n }\n\n for (var i = 1; i < array.length; i++) {\n let object: SceneChart.Data = {}\n let thisObject = array[i]\n\n for (let key in indexKeyMap) {\n let k = indexKeyMap[key]\n let v = thisObject[key]\n object[k] = v\n }\n\n value.push(object)\n }\n\n return value\n}\n\nfunction updateSeriesDatas(chartInstance: SceneChart) {\n if (!chartInstance.data.rawData) {\n return\n }\n\n let seriesData = chartInstance.data.rawData.seriesData\n\n if (!seriesData || seriesData.length === 0) seriesData = [null]\n\n for (let key in chartInstance.data.datasets) {\n chartInstance.data.datasets[Number(key)].data = seriesData[key] || []\n }\n}\n\nfunction updateLabelDatas(chartInstance: SceneChart) {\n let labelData = chartInstance.data.rawData.labelData\n chartInstance.config.data!.labels = labelData || []\n}\n\nexport default {\n id: 'data-binder',\n beforeUpdate: function (chartInstance: SceneChart) {\n if (!chartInstance.data) return\n\n if (!chartInstance.data.rawData) chartInstance.data.rawData = []\n\n chartInstance.data.rawData = convertObject(chartInstance.data.rawData, chartInstance) || {\n seriesData: [],\n labelData: []\n }\n\n let seriesData = chartInstance.data.rawData.seriesData\n updateLabelDatas(chartInstance)\n updateSeriesDatas(chartInstance)\n }\n}\n"]}
|