@eclipse-scout/chart 22.0.41 → 23.1.0-beta.4
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/LICENSE +210 -0
- package/dist/d.ts/chart/AbstractChartRenderer.d.ts +48 -0
- package/dist/d.ts/chart/AbstractChartRenderer.d.ts.map +1 -0
- package/dist/d.ts/chart/AbstractSvgChartRenderer.d.ts +65 -0
- package/dist/d.ts/chart/AbstractSvgChartRenderer.d.ts.map +1 -0
- package/dist/d.ts/chart/Chart.d.ts +162 -0
- package/dist/d.ts/chart/Chart.d.ts.map +1 -0
- package/dist/d.ts/chart/ChartAdapter.d.ts +8 -0
- package/dist/d.ts/chart/ChartAdapter.d.ts.map +1 -0
- package/dist/d.ts/chart/ChartEventMap.d.ts +16 -0
- package/dist/d.ts/chart/ChartEventMap.d.ts.map +1 -0
- package/dist/d.ts/chart/ChartJsRenderer.d.ts +300 -0
- package/dist/d.ts/chart/ChartJsRenderer.d.ts.map +1 -0
- package/dist/d.ts/chart/ChartLayout.d.ts +8 -0
- package/dist/d.ts/chart/ChartLayout.d.ts.map +1 -0
- package/dist/d.ts/chart/ChartModel.d.ts +11 -0
- package/dist/d.ts/chart/ChartModel.d.ts.map +1 -0
- package/dist/d.ts/chart/FulfillmentChartRenderer.d.ts +22 -0
- package/dist/d.ts/chart/FulfillmentChartRenderer.d.ts.map +1 -0
- package/dist/d.ts/chart/SalesfunnelChartRenderer.d.ts +61 -0
- package/dist/d.ts/chart/SalesfunnelChartRenderer.d.ts.map +1 -0
- package/dist/d.ts/chart/SpeedoChartRenderer.d.ts +90 -0
- package/dist/d.ts/chart/SpeedoChartRenderer.d.ts.map +1 -0
- package/dist/d.ts/chart/VennAsync3Calculator.d.ts +32 -0
- package/dist/d.ts/chart/VennAsync3Calculator.d.ts.map +1 -0
- package/dist/d.ts/chart/VennChartRenderer.d.ts +36 -0
- package/dist/d.ts/chart/VennChartRenderer.d.ts.map +1 -0
- package/dist/d.ts/chart/VennCircle.d.ts +20 -0
- package/dist/d.ts/chart/VennCircle.d.ts.map +1 -0
- package/dist/d.ts/chart/VennCircleHelper.d.ts +13 -0
- package/dist/d.ts/chart/VennCircleHelper.d.ts.map +1 -0
- package/dist/d.ts/form/fields/chartfield/ChartField.d.ts +11 -0
- package/dist/d.ts/form/fields/chartfield/ChartField.d.ts.map +1 -0
- package/dist/d.ts/form/fields/chartfield/ChartFieldAdapter.d.ts +4 -0
- package/dist/d.ts/form/fields/chartfield/ChartFieldAdapter.d.ts.map +1 -0
- package/dist/d.ts/form/fields/chartfield/ChartFieldModel.d.ts +6 -0
- package/dist/d.ts/form/fields/chartfield/ChartFieldModel.d.ts.map +1 -0
- package/dist/d.ts/index.d.ts +31 -0
- package/dist/d.ts/index.d.ts.map +1 -0
- package/dist/d.ts/table/controls/ChartTableControl.d.ts +136 -0
- package/dist/d.ts/table/controls/ChartTableControl.d.ts.map +1 -0
- package/dist/d.ts/table/controls/ChartTableControlAdapter.d.ts +5 -0
- package/dist/d.ts/table/controls/ChartTableControlAdapter.d.ts.map +1 -0
- package/dist/d.ts/table/controls/ChartTableControlEventMap.d.ts +9 -0
- package/dist/d.ts/table/controls/ChartTableControlEventMap.d.ts.map +1 -0
- package/dist/d.ts/table/controls/ChartTableControlLayout.d.ts +8 -0
- package/dist/d.ts/table/controls/ChartTableControlLayout.d.ts.map +1 -0
- package/dist/d.ts/table/controls/ChartTableControlModel.d.ts +9 -0
- package/dist/d.ts/table/controls/ChartTableControlModel.d.ts.map +1 -0
- package/dist/d.ts/table/controls/ChartTableUserFilter.d.ts +29 -0
- package/dist/d.ts/table/controls/ChartTableUserFilter.d.ts.map +1 -0
- package/dist/d.ts/table/controls/ChartTableUserFilterModel.d.ts +11 -0
- package/dist/d.ts/table/controls/ChartTableUserFilterModel.d.ts.map +1 -0
- package/dist/d.ts/tile/ChartFieldTile.d.ts +14 -0
- package/dist/d.ts/tile/ChartFieldTile.d.ts.map +1 -0
- package/dist/d.ts/tile/ChartFieldTileAdapter.d.ts +4 -0
- package/dist/d.ts/tile/ChartFieldTileAdapter.d.ts.map +1 -0
- package/dist/d.ts/tile/ChartFieldTileModel.d.ts +6 -0
- package/dist/d.ts/tile/ChartFieldTileModel.d.ts.map +1 -0
- package/dist/eclipse-scout-chart-fae6f958a044232e659c.min.js +3 -0
- package/dist/eclipse-scout-chart-fae6f958a044232e659c.min.js.map +1 -0
- package/dist/eclipse-scout-chart-theme-dark-89bcf2022056cbf8e371.min.css +1 -0
- package/dist/eclipse-scout-chart-theme-dark.css +1 -1
- package/dist/eclipse-scout-chart-theme-e25b5923d4dba5f5ca7e.min.css +1 -0
- package/dist/eclipse-scout-chart-theme.css +1 -1
- package/dist/eclipse-scout-chart.esm-2119cfea86a9d6f34a35.min.js +3 -0
- package/dist/eclipse-scout-chart.esm-2119cfea86a9d6f34a35.min.js.map +1 -0
- package/dist/eclipse-scout-chart.esm.js +6919 -0
- package/dist/eclipse-scout-chart.esm.js.map +1 -0
- package/dist/eclipse-scout-chart.js +641 -15109
- package/dist/eclipse-scout-chart.js.map +1 -1
- package/dist/file-list +8 -5
- package/dist/texts.json +17 -17
- package/package.json +21 -15
- package/src/chart/{AbstractChartRenderer.js → AbstractChartRenderer.ts} +31 -25
- package/src/chart/{AbstractSvgChartRenderer.js → AbstractSvgChartRenderer.ts} +78 -43
- package/src/chart/{Chart.js → Chart.ts} +151 -61
- package/src/chart/ChartAdapter.ts +27 -0
- package/src/chart/ChartEventMap.ts +27 -0
- package/src/chart/{ChartJsRenderer.js → ChartJsRenderer.ts} +356 -350
- package/src/chart/{ChartLayout.js → ChartLayout.ts} +9 -8
- package/src/chart/ChartModel.ts +21 -0
- package/src/chart/{FulfillmentChartRenderer.js → FulfillmentChartRenderer.ts} +21 -18
- package/src/chart/{SalesfunnelChartRenderer.js → SalesfunnelChartRenderer.ts} +96 -59
- package/src/chart/{SpeedoChartRenderer.js → SpeedoChartRenderer.ts} +50 -36
- package/src/chart/{VennAsync3Calculator.js → VennAsync3Calculator.ts} +37 -13
- package/src/chart/{VennChartRenderer.js → VennChartRenderer.ts} +58 -34
- package/src/chart/{VennCircle.js → VennCircle.ts} +22 -15
- package/src/chart/{VennCircleHelper.js → VennCircleHelper.ts} +15 -9
- package/src/form/fields/chartfield/{ChartField.js → ChartField.ts} +11 -5
- package/src/form/fields/chartfield/{ChartFieldAdapter.js → ChartFieldAdapter.ts} +3 -8
- package/src/form/fields/chartfield/ChartFieldModel.ts +16 -0
- package/src/index.ts +46 -0
- package/src/table/controls/{ChartTableControl.js → ChartTableControl.ts} +160 -120
- package/src/table/controls/{ChartTableControlAdapter.js → ChartTableControlAdapter.ts} +3 -4
- package/src/table/controls/ChartTableControlEventMap.ts +19 -0
- package/src/table/controls/{ChartTableControlLayout.js → ChartTableControlLayout.ts} +7 -5
- package/src/table/controls/ChartTableControlModel.ts +19 -0
- package/src/table/controls/{ChartTableUserFilter.js → ChartTableUserFilter.ts} +25 -12
- package/src/table/controls/ChartTableUserFilterModel.ts +19 -0
- package/src/tile/{ChartFieldTile.js → ChartFieldTile.ts} +14 -8
- package/src/tile/{ChartFieldTileAdapter.js → ChartFieldTileAdapter.ts} +3 -7
- package/src/tile/ChartFieldTileModel.ts +16 -0
- package/dist/eclipse-scout-chart-8eb9461c14872058f638.min.js +0 -3
- package/dist/eclipse-scout-chart-8eb9461c14872058f638.min.js.LICENSE.txt +0 -6
- package/dist/eclipse-scout-chart-8eb9461c14872058f638.min.js.map +0 -1
- package/dist/eclipse-scout-chart-theme-79622289bda68b525e3e.min.css +0 -1
- package/dist/eclipse-scout-chart-theme-dark-1de09c03e3dc40a9529a.min.css +0 -1
- package/src/chart/ChartAdapter.js +0 -30
- package/src/index.js +0 -36
|
@@ -8,45 +8,43 @@
|
|
|
8
8
|
* Contributors:
|
|
9
9
|
* BSI Business Systems Integration AG - initial API and implementation
|
|
10
10
|
*/
|
|
11
|
-
import {ChartJsRenderer, ChartLayout, FulfillmentChartRenderer, SalesfunnelChartRenderer, SpeedoChartRenderer, VennChartRenderer} from '../index';
|
|
12
|
-
import {arrays, colorSchemes, HtmlComponent, objects, Widget} from '@eclipse-scout/core';
|
|
11
|
+
import {AbstractChartRenderer, ChartEventMap, ChartJsRenderer, ChartLayout, ChartModel, FulfillmentChartRenderer, SalesfunnelChartRenderer, SpeedoChartRenderer, VennChartRenderer} from '../index';
|
|
12
|
+
import {arrays, ColorScheme, colorSchemes, EnumObject, HtmlComponent, InitModelOf, objects, Widget} from '@eclipse-scout/core';
|
|
13
|
+
import {GreenAreaPosition} from './SpeedoChartRenderer';
|
|
14
|
+
import {ChartConfiguration, LinearScaleOptions, RadialLinearScaleOptions} from 'chart.js';
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
export class Chart extends Widget implements ChartModel {
|
|
17
|
+
declare model: ChartModel;
|
|
18
|
+
declare eventMap: ChartEventMap;
|
|
19
|
+
declare self: Chart;
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
*/
|
|
21
|
+
data: ChartData;
|
|
22
|
+
config: ChartConfig;
|
|
23
|
+
checkedItems: ClickObject[];
|
|
24
|
+
|
|
25
|
+
chartRenderer: AbstractChartRenderer;
|
|
26
|
+
|
|
27
|
+
/** @internal */
|
|
28
|
+
_updatedOnce: boolean;
|
|
26
29
|
|
|
27
|
-
|
|
30
|
+
protected _updateChartTimeoutId: number;
|
|
31
|
+
protected _updateChartOpts: UpdateChartOptions;
|
|
32
|
+
protected _updateChartOptsWhileNotAttached: UpdateChartOptions[];
|
|
28
33
|
|
|
29
34
|
constructor() {
|
|
30
35
|
super();
|
|
31
36
|
|
|
32
37
|
this.$container = null;
|
|
33
|
-
this.chartRenderer = null;
|
|
34
38
|
|
|
35
|
-
/**
|
|
36
|
-
* @type {object}
|
|
37
|
-
* @property {ChartValueGroup[]} chartValueGroups
|
|
38
|
-
*/
|
|
39
39
|
this.data = null;
|
|
40
40
|
this.config = null;
|
|
41
|
-
/**
|
|
42
|
-
* @type {ClickObject[]}
|
|
43
|
-
*/
|
|
44
41
|
this.checkedItems = [];
|
|
45
42
|
|
|
43
|
+
this.chartRenderer = null;
|
|
46
44
|
this._updateChartTimeoutId = null;
|
|
47
45
|
this._updateChartOpts = null;
|
|
48
46
|
this._updateChartOptsWhileNotAttached = [];
|
|
49
|
-
this.
|
|
47
|
+
this._updatedOnce = false;
|
|
50
48
|
}
|
|
51
49
|
|
|
52
50
|
static Type = {
|
|
@@ -64,7 +62,7 @@ export default class Chart extends Widget {
|
|
|
64
62
|
RADAR: 'radar',
|
|
65
63
|
BUBBLE: 'bubble',
|
|
66
64
|
SCATTER: 'scatter'
|
|
67
|
-
};
|
|
65
|
+
} as const;
|
|
68
66
|
|
|
69
67
|
static Position = {
|
|
70
68
|
TOP: 'top',
|
|
@@ -72,28 +70,28 @@ export default class Chart extends Widget {
|
|
|
72
70
|
LEFT: 'left',
|
|
73
71
|
RIGHT: 'right',
|
|
74
72
|
CENTER: 'center'
|
|
75
|
-
};
|
|
73
|
+
} as const;
|
|
76
74
|
|
|
77
75
|
static DEFAULT_ANIMATION_DURATION = 600; // ms
|
|
78
76
|
static DEFAULT_DEBOUNCE_TIMEOUT = 100; // ms
|
|
79
77
|
|
|
80
|
-
_init(model) {
|
|
78
|
+
protected override _init(model: InitModelOf<this>) {
|
|
81
79
|
super._init(model);
|
|
82
80
|
this.setConfig(this.config);
|
|
83
81
|
}
|
|
84
82
|
|
|
85
|
-
_render() {
|
|
83
|
+
protected override _render() {
|
|
86
84
|
this.$container = this.$parent.appendDiv('chart');
|
|
87
85
|
|
|
88
86
|
this.htmlComp = HtmlComponent.install(this.$container, this.session);
|
|
89
87
|
this.htmlComp.setLayout(new ChartLayout(this));
|
|
90
88
|
|
|
91
89
|
// !!! Do _not_ update the chart here, because usually the container size
|
|
92
|
-
// !!! is not correct
|
|
90
|
+
// !!! is not correct anyway during the render phase. The ChartLayout
|
|
93
91
|
// !!! will eventually call updateChart() when the layout is validated.
|
|
94
92
|
}
|
|
95
93
|
|
|
96
|
-
_renderProperties() {
|
|
94
|
+
protected override _renderProperties() {
|
|
97
95
|
super._renderProperties();
|
|
98
96
|
this._renderClickable();
|
|
99
97
|
this._renderCheckable();
|
|
@@ -105,12 +103,12 @@ export default class Chart extends Widget {
|
|
|
105
103
|
});
|
|
106
104
|
}
|
|
107
105
|
|
|
108
|
-
_renderOnAttach() {
|
|
106
|
+
protected override _renderOnAttach() {
|
|
109
107
|
super._renderOnAttach();
|
|
110
108
|
this._updateChartOptsWhileNotAttached.splice(0).forEach(opts => this.updateChart($.extend(true, {}, opts, {debounce: true})));
|
|
111
109
|
}
|
|
112
110
|
|
|
113
|
-
_remove() {
|
|
111
|
+
protected override _remove() {
|
|
114
112
|
if (this.chartRenderer) {
|
|
115
113
|
this.chartRenderer.remove(false);
|
|
116
114
|
}
|
|
@@ -118,12 +116,12 @@ export default class Chart extends Widget {
|
|
|
118
116
|
this.$container = null;
|
|
119
117
|
}
|
|
120
118
|
|
|
121
|
-
setData(data) {
|
|
119
|
+
setData(data: ChartData) {
|
|
122
120
|
this.setProperty('data', data);
|
|
123
121
|
this.setCheckedItems(this.checkedItems);
|
|
124
122
|
}
|
|
125
123
|
|
|
126
|
-
_renderData() {
|
|
124
|
+
protected _renderData() {
|
|
127
125
|
this.updateChart({
|
|
128
126
|
requestAnimation: true,
|
|
129
127
|
debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT,
|
|
@@ -131,7 +129,7 @@ export default class Chart extends Widget {
|
|
|
131
129
|
});
|
|
132
130
|
}
|
|
133
131
|
|
|
134
|
-
setConfig(config) {
|
|
132
|
+
setConfig(config: ChartConfig) {
|
|
135
133
|
let defaultConfig = {
|
|
136
134
|
type: Chart.Type.PIE,
|
|
137
135
|
options: {
|
|
@@ -174,7 +172,7 @@ export default class Chart extends Widget {
|
|
|
174
172
|
delete oldConfigWithNewData.data;
|
|
175
173
|
}
|
|
176
174
|
|
|
177
|
-
// the label map is technically part of the config, but it is handled as data. Therefore it is excluded from this check.
|
|
175
|
+
// the label map is technically part of the config, but it is handled as data. Therefore, it is excluded from this check.
|
|
178
176
|
let transferLabelMap = (source, target, identifier) => {
|
|
179
177
|
if (!source || !target || !identifier) {
|
|
180
178
|
return;
|
|
@@ -214,7 +212,7 @@ export default class Chart extends Widget {
|
|
|
214
212
|
this._updateChartRenderer();
|
|
215
213
|
}
|
|
216
214
|
|
|
217
|
-
_renderConfig(onlyUpdateData) {
|
|
215
|
+
protected _renderConfig(onlyUpdateData: boolean) {
|
|
218
216
|
this._renderClickable();
|
|
219
217
|
this._renderCheckable();
|
|
220
218
|
this._renderChartType();
|
|
@@ -226,11 +224,11 @@ export default class Chart extends Widget {
|
|
|
226
224
|
});
|
|
227
225
|
}
|
|
228
226
|
|
|
229
|
-
setCheckedItems(checkedItems) {
|
|
227
|
+
setCheckedItems(checkedItems: ClickObject[]) {
|
|
230
228
|
this.setProperty('checkedItems', arrays.ensure(this._filterCheckedItems(checkedItems)));
|
|
231
229
|
}
|
|
232
230
|
|
|
233
|
-
_filterCheckedItems(checkedItems) {
|
|
231
|
+
protected _filterCheckedItems(checkedItems: ClickObject[]): ClickObject[] {
|
|
234
232
|
if (!Array.isArray(checkedItems)) {
|
|
235
233
|
return checkedItems;
|
|
236
234
|
}
|
|
@@ -247,43 +245,33 @@ export default class Chart extends Widget {
|
|
|
247
245
|
return checkedItems;
|
|
248
246
|
}
|
|
249
247
|
|
|
250
|
-
_renderCheckedItems() {
|
|
248
|
+
protected _renderCheckedItems() {
|
|
251
249
|
if (this.chartRenderer) {
|
|
252
250
|
this.chartRenderer.renderCheckedItems();
|
|
253
251
|
}
|
|
254
252
|
}
|
|
255
253
|
|
|
256
|
-
|
|
257
|
-
* @override
|
|
258
|
-
*/
|
|
259
|
-
_renderEnabled() {
|
|
254
|
+
protected override _renderEnabled() {
|
|
260
255
|
this.updateChart();
|
|
261
256
|
}
|
|
262
257
|
|
|
263
|
-
_renderClickable() {
|
|
258
|
+
protected _renderClickable() {
|
|
264
259
|
this.$container.toggleClass('clickable', this.config.options.clickable);
|
|
265
260
|
}
|
|
266
261
|
|
|
267
|
-
_renderCheckable() {
|
|
262
|
+
protected _renderCheckable() {
|
|
268
263
|
this.$container.toggleClass('checkable', this.config.options.checkable);
|
|
269
264
|
}
|
|
270
265
|
|
|
271
|
-
_renderChartType() {
|
|
266
|
+
protected _renderChartType() {
|
|
272
267
|
this.$container.addClass(this.config.type + '-chart');
|
|
273
268
|
}
|
|
274
269
|
|
|
275
|
-
_renderColorScheme() {
|
|
270
|
+
protected _renderColorScheme() {
|
|
276
271
|
colorSchemes.toggleColorSchemeClasses(this.$container, this.config.options.colorScheme);
|
|
277
272
|
}
|
|
278
273
|
|
|
279
|
-
|
|
280
|
-
* @param opts
|
|
281
|
-
* [requestAnimation] default false
|
|
282
|
-
* [debounce] default 0
|
|
283
|
-
* [onlyUpdateData] default false
|
|
284
|
-
* [onlyRefresh] default false
|
|
285
|
-
*/
|
|
286
|
-
updateChart(opts) {
|
|
274
|
+
updateChart(opts?: UpdateChartOptions) {
|
|
287
275
|
opts = opts || {};
|
|
288
276
|
opts.onlyUpdateData = opts.onlyUpdateData && this.chartRenderer && this.chartRenderer.isDataUpdatable();
|
|
289
277
|
opts.enforceRerender = !opts.onlyUpdateData && !opts.onlyRefresh;
|
|
@@ -326,7 +314,7 @@ export default class Chart extends Widget {
|
|
|
326
314
|
return;
|
|
327
315
|
}
|
|
328
316
|
|
|
329
|
-
this.
|
|
317
|
+
this._updatedOnce = true;
|
|
330
318
|
if (!this.chartRenderer) {
|
|
331
319
|
return; // nothing to render when there is no renderer.
|
|
332
320
|
}
|
|
@@ -347,7 +335,7 @@ export default class Chart extends Widget {
|
|
|
347
335
|
}
|
|
348
336
|
}
|
|
349
337
|
|
|
350
|
-
_resolveChartRenderer() {
|
|
338
|
+
protected _resolveChartRenderer(): AbstractChartRenderer {
|
|
351
339
|
switch (this.config.type) {
|
|
352
340
|
case Chart.Type.FULFILLMENT:
|
|
353
341
|
return new FulfillmentChartRenderer(this);
|
|
@@ -372,15 +360,14 @@ export default class Chart extends Widget {
|
|
|
372
360
|
return null;
|
|
373
361
|
}
|
|
374
362
|
|
|
375
|
-
_updateChartRenderer() {
|
|
363
|
+
protected _updateChartRenderer() {
|
|
376
364
|
this.chartRenderer && this.chartRenderer.remove();
|
|
377
365
|
this.setProperty('chartRenderer', this._resolveChartRenderer());
|
|
378
366
|
}
|
|
379
367
|
|
|
380
|
-
|
|
368
|
+
handleValueClick(clickedItem: ClickObject, originalEvent?: Event) {
|
|
381
369
|
if (this.config.options.checkable) {
|
|
382
370
|
let checkedItems = [...this.checkedItems],
|
|
383
|
-
clickedItem = event.data,
|
|
384
371
|
checkedItem = checkedItems.filter(item => item.datasetIndex === clickedItem.datasetIndex && item.dataIndex === clickedItem.dataIndex)[0];
|
|
385
372
|
if (checkedItem) {
|
|
386
373
|
arrays.remove(checkedItems, checkedItem);
|
|
@@ -389,6 +376,109 @@ export default class Chart extends Widget {
|
|
|
389
376
|
}
|
|
390
377
|
this.setCheckedItems(checkedItems);
|
|
391
378
|
}
|
|
392
|
-
this.trigger('valueClick',
|
|
379
|
+
this.trigger('valueClick', {
|
|
380
|
+
data: clickedItem,
|
|
381
|
+
originalEvent
|
|
382
|
+
});
|
|
393
383
|
}
|
|
394
384
|
}
|
|
385
|
+
|
|
386
|
+
export type ChartData = {
|
|
387
|
+
axes: ChartAxis[][];
|
|
388
|
+
chartValueGroups: ChartValueGroup[];
|
|
389
|
+
};
|
|
390
|
+
export type ChartAxis = {
|
|
391
|
+
label: string;
|
|
392
|
+
};
|
|
393
|
+
export type ChartValueGroup = {
|
|
394
|
+
type?: string;
|
|
395
|
+
groupName: string;
|
|
396
|
+
values: number[] | Record<string, number>[];
|
|
397
|
+
colorHexValue?: string;
|
|
398
|
+
cssClass?: string;
|
|
399
|
+
};
|
|
400
|
+
|
|
401
|
+
export type ChartConfig = Partial<Omit<ChartConfiguration, 'type'>> & {
|
|
402
|
+
type: ChartType;
|
|
403
|
+
options?: {
|
|
404
|
+
autoColor?: boolean;
|
|
405
|
+
colorScheme?: ColorScheme | string;
|
|
406
|
+
transparent?: boolean;
|
|
407
|
+
maxSegments?: number;
|
|
408
|
+
otherSegmentClickable?: boolean;
|
|
409
|
+
adjustGridMaxMin?: boolean;
|
|
410
|
+
clickable?: boolean;
|
|
411
|
+
checkable?: boolean;
|
|
412
|
+
scaleLabelByTypeMap?: Record<ChartType, Record<string, string>>;
|
|
413
|
+
numberFormatter?: NumberFormatter;
|
|
414
|
+
reformatLabels?: boolean;
|
|
415
|
+
handleResize?: boolean;
|
|
416
|
+
animation?: {
|
|
417
|
+
duration?: number;
|
|
418
|
+
};
|
|
419
|
+
scales?: {
|
|
420
|
+
x?: LinearScaleOptions & {
|
|
421
|
+
minSpaceBetweenTicks?: number;
|
|
422
|
+
};
|
|
423
|
+
y?: LinearScaleOptions & {
|
|
424
|
+
minSpaceBetweenTicks?: number;
|
|
425
|
+
};
|
|
426
|
+
yDiffType?: LinearScaleOptions;
|
|
427
|
+
r?: RadialLinearScaleOptions & {
|
|
428
|
+
minSpaceBetweenTicks?: number;
|
|
429
|
+
};
|
|
430
|
+
};
|
|
431
|
+
bubble?: {
|
|
432
|
+
sizeOfLargestBubble?: number;
|
|
433
|
+
minBubbleSize?: number;
|
|
434
|
+
};
|
|
435
|
+
fulfillment?: {
|
|
436
|
+
startValue?: number;
|
|
437
|
+
};
|
|
438
|
+
salesfunnel?: {
|
|
439
|
+
normalized?: boolean;
|
|
440
|
+
calcConversionRate?: boolean;
|
|
441
|
+
};
|
|
442
|
+
speedo?: {
|
|
443
|
+
greenAreaPosition?: GreenAreaPosition;
|
|
444
|
+
};
|
|
445
|
+
venn?: {
|
|
446
|
+
numberOfCircles?: 1 | 2 | 3;
|
|
447
|
+
};
|
|
448
|
+
plugins?: {
|
|
449
|
+
legend?: {
|
|
450
|
+
clickable?: boolean;
|
|
451
|
+
};
|
|
452
|
+
};
|
|
453
|
+
};
|
|
454
|
+
};
|
|
455
|
+
export type ChartType = EnumObject<typeof Chart.Type>;
|
|
456
|
+
export type ChartPosition = EnumObject<typeof Chart.Position>;
|
|
457
|
+
export type NumberFormatter = (label: number | string, defaultFormatter: (label: number | string) => string) => string;
|
|
458
|
+
|
|
459
|
+
export type ClickObject = {
|
|
460
|
+
datasetIndex: number;
|
|
461
|
+
dataIndex: number;
|
|
462
|
+
xIndex?: number;
|
|
463
|
+
yIndex?: number;
|
|
464
|
+
};
|
|
465
|
+
|
|
466
|
+
export type UpdateChartOptions = {
|
|
467
|
+
/**
|
|
468
|
+
* Default is false.
|
|
469
|
+
*/
|
|
470
|
+
requestAnimation?: boolean;
|
|
471
|
+
/**
|
|
472
|
+
* Default is 0.
|
|
473
|
+
*/
|
|
474
|
+
debounce?: number | boolean;
|
|
475
|
+
/**
|
|
476
|
+
* Default is false.
|
|
477
|
+
*/
|
|
478
|
+
onlyUpdateData?: boolean;
|
|
479
|
+
/**
|
|
480
|
+
* Default is false.
|
|
481
|
+
*/
|
|
482
|
+
onlyRefresh?: boolean;
|
|
483
|
+
enforceRerender?: boolean;
|
|
484
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2010-2022 BSI Business Systems Integration AG.
|
|
3
|
+
* All rights reserved. This program and the accompanying materials
|
|
4
|
+
* are made available under the terms of the Eclipse Public License v1.0
|
|
5
|
+
* which accompanies this distribution, and is available at
|
|
6
|
+
* https://www.eclipse.org/legal/epl-v10.html
|
|
7
|
+
*
|
|
8
|
+
* Contributors:
|
|
9
|
+
* BSI Business Systems Integration AG - initial API and implementation
|
|
10
|
+
*/
|
|
11
|
+
import {Event, ModelAdapter} from '@eclipse-scout/core';
|
|
12
|
+
import {Chart} from '../index';
|
|
13
|
+
import {ChartValueClickEvent} from './ChartEventMap';
|
|
14
|
+
|
|
15
|
+
export class ChartAdapter extends ModelAdapter {
|
|
16
|
+
protected _onWidgetValueClick(event: ChartValueClickEvent) {
|
|
17
|
+
this._send('valueClick', event.data);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
protected override _onWidgetEvent(event: Event<Chart>) {
|
|
21
|
+
if (event.type === 'valueClick') {
|
|
22
|
+
this._onWidgetValueClick(event as ChartValueClickEvent);
|
|
23
|
+
} else {
|
|
24
|
+
super._onWidgetEvent(event);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2010-2022 BSI Business Systems Integration AG.
|
|
3
|
+
* All rights reserved. This program and the accompanying materials
|
|
4
|
+
* are made available under the terms of the Eclipse Public License v1.0
|
|
5
|
+
* which accompanies this distribution, and is available at
|
|
6
|
+
* https://www.eclipse.org/legal/epl-v10.html
|
|
7
|
+
*
|
|
8
|
+
* Contributors:
|
|
9
|
+
* BSI Business Systems Integration AG - initial API and implementation
|
|
10
|
+
*/
|
|
11
|
+
import {Event as ScoutEvent, PropertyChangeEvent, WidgetEventMap} from '@eclipse-scout/core';
|
|
12
|
+
import {AbstractChartRenderer, Chart} from '../index';
|
|
13
|
+
import {ChartConfig, ChartData, ClickObject} from './Chart';
|
|
14
|
+
|
|
15
|
+
export interface ChartValueClickEvent<C = Chart> extends ScoutEvent<C> {
|
|
16
|
+
data: ClickObject;
|
|
17
|
+
originalEvent?: Event;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface ChartEventMap extends WidgetEventMap {
|
|
21
|
+
'chartRender': ScoutEvent<Chart>;
|
|
22
|
+
'valueClick': ChartValueClickEvent;
|
|
23
|
+
'propertyChange:chartRenderer': PropertyChangeEvent<AbstractChartRenderer>;
|
|
24
|
+
'propertyChange:checkedItems': PropertyChangeEvent<ClickObject[]>;
|
|
25
|
+
'propertyChange:config': PropertyChangeEvent<ChartConfig>;
|
|
26
|
+
'propertyChange:data': PropertyChangeEvent<ChartData>;
|
|
27
|
+
}
|