@vuu-ui/vuu-chart 2.1.19-beta.2 → 2.1.19-beta.3
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/cjs/Chart.css.js +6 -0
- package/cjs/Chart.css.js.map +1 -0
- package/cjs/Chart.js +89 -0
- package/cjs/Chart.js.map +1 -0
- package/cjs/ChartSeries.js +183 -0
- package/cjs/ChartSeries.js.map +1 -0
- package/cjs/DataRowMovingWindow.js +97 -0
- package/cjs/DataRowMovingWindow.js.map +1 -0
- package/cjs/chart-types.js +6 -0
- package/cjs/chart-types.js.map +1 -0
- package/cjs/chartTooltip.js +27 -0
- package/cjs/chartTooltip.js.map +1 -0
- package/cjs/index.js +10 -0
- package/cjs/index.js.map +1 -0
- package/cjs/useChartContextMenu.js +29 -0
- package/cjs/useChartContextMenu.js.map +1 -0
- package/cjs/useChartOptions.js +101 -0
- package/cjs/useChartOptions.js.map +1 -0
- package/cjs/useChartSelection.js +72 -0
- package/cjs/useChartSelection.js.map +1 -0
- package/esm/Chart.css.js +4 -0
- package/esm/Chart.css.js.map +1 -0
- package/esm/Chart.js +87 -0
- package/esm/Chart.js.map +1 -0
- package/esm/ChartSeries.js +181 -0
- package/esm/ChartSeries.js.map +1 -0
- package/esm/DataRowMovingWindow.js +95 -0
- package/esm/DataRowMovingWindow.js.map +1 -0
- package/esm/chart-types.js +4 -0
- package/esm/chart-types.js.map +1 -0
- package/esm/chartTooltip.js +25 -0
- package/esm/chartTooltip.js.map +1 -0
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -0
- package/esm/useChartContextMenu.js +27 -0
- package/esm/useChartContextMenu.js.map +1 -0
- package/esm/useChartOptions.js +99 -0
- package/esm/useChartOptions.js.map +1 -0
- package/esm/useChartSelection.js +70 -0
- package/esm/useChartSelection.js.map +1 -0
- package/package.json +13 -9
- package/types/Chart.d.ts +13 -4
- package/types/ChartSeries.d.ts +10 -27
- package/types/chart-types.d.ts +42 -0
- package/types/chartTooltip.d.ts +12 -0
- package/types/index.d.ts +4 -2
- package/types/useChartContextMenu.d.ts +7 -7
- package/types/useChartOptions.d.ts +19 -3
- package/types/useChartSelection.d.ts +14 -0
- package/src/Chart.css.js +0 -42
- package/src/Chart.js +0 -64
- package/src/ChartSeries.js +0 -101
- package/src/DataRowMovingWindow.js +0 -64
- package/src/index.js +0 -2
- package/src/useChartContextMenu.js +0 -29
- package/src/useChartOptions.js +0 -76
package/src/ChartSeries.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { EventEmitter, Range, buildColumnMap, metadataKeys } from "@vuu-ui/vuu-utils";
|
|
2
|
-
import { MovingDataRowWindow } from "./DataRowMovingWindow.js";
|
|
3
|
-
const defaultItemColorFunction = ({ color })=>color;
|
|
4
|
-
const { KEY: KEY } = metadataKeys;
|
|
5
|
-
function DataSourceValue(key, row, value) {
|
|
6
|
-
return {
|
|
7
|
-
key,
|
|
8
|
-
row,
|
|
9
|
-
value
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
function getCategoriesAndSeries(columnMap, data, categoryColumn, seriesColumns, itemColorFunction = defaultItemColorFunction) {
|
|
13
|
-
const categoryValues = [];
|
|
14
|
-
const seriesMap = new Map();
|
|
15
|
-
data.forEach((row)=>{
|
|
16
|
-
const categoryValue = row[columnMap[categoryColumn]];
|
|
17
|
-
categoryValues.push(categoryValue);
|
|
18
|
-
for (const seriesColumn of seriesColumns){
|
|
19
|
-
let series = seriesMap.get(seriesColumn);
|
|
20
|
-
if (!series) {
|
|
21
|
-
series = {
|
|
22
|
-
id: seriesColumn,
|
|
23
|
-
name: seriesColumn,
|
|
24
|
-
label: seriesColumn,
|
|
25
|
-
data: [],
|
|
26
|
-
type: "line",
|
|
27
|
-
itemStyle: {
|
|
28
|
-
color: itemColorFunction
|
|
29
|
-
},
|
|
30
|
-
lineStyle: {
|
|
31
|
-
width: 1.5
|
|
32
|
-
},
|
|
33
|
-
symbol: "circle"
|
|
34
|
-
};
|
|
35
|
-
seriesMap.set(seriesColumn, series);
|
|
36
|
-
}
|
|
37
|
-
const key = row[KEY];
|
|
38
|
-
const value = row[columnMap[seriesColumn]];
|
|
39
|
-
series.data.push(DataSourceValue(key, row, value));
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
return [
|
|
43
|
-
categoryValues,
|
|
44
|
-
Array.from(seriesMap.values())
|
|
45
|
-
];
|
|
46
|
-
}
|
|
47
|
-
class ChartSeries extends EventEmitter {
|
|
48
|
-
#categoryColumn = "";
|
|
49
|
-
#columnMap = {};
|
|
50
|
-
#itemColorFunction;
|
|
51
|
-
#dataWindow = new MovingDataRowWindow(Range(0, 1000));
|
|
52
|
-
#dates = [];
|
|
53
|
-
#series = [];
|
|
54
|
-
#seriesColumns = [];
|
|
55
|
-
handleData = (message)=>{
|
|
56
|
-
if ("subscribed" === message.type) this.#columnMap = buildColumnMap(message.tableSchema.columns);
|
|
57
|
-
else if ("viewport-update" === message.type) {
|
|
58
|
-
if ("size-only" === message.mode) ;
|
|
59
|
-
else if (message.rows) {
|
|
60
|
-
for (const row of message.rows)this.#dataWindow.add(row);
|
|
61
|
-
this.buildCategoriesAndSeries();
|
|
62
|
-
}
|
|
63
|
-
} else console.warn(JSON.stringify(message));
|
|
64
|
-
};
|
|
65
|
-
buildCategoriesAndSeries() {
|
|
66
|
-
if (this.#categoryColumn && this.#seriesColumns.length > 0) {
|
|
67
|
-
const [dates, series] = getCategoriesAndSeries(this.#columnMap, this.#dataWindow.data, this.#categoryColumn, this.#seriesColumns, this.#itemColorFunction);
|
|
68
|
-
this.#dates = dates;
|
|
69
|
-
this.#series = series;
|
|
70
|
-
this.emit("update");
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
constructor({ dataSource, itemColorFunction }){
|
|
74
|
-
super();
|
|
75
|
-
this.#itemColorFunction = itemColorFunction;
|
|
76
|
-
dataSource.subscribe({
|
|
77
|
-
range: Range(0, 1000)
|
|
78
|
-
}, this.handleData);
|
|
79
|
-
}
|
|
80
|
-
get categoryColumn() {
|
|
81
|
-
return this.#categoryColumn;
|
|
82
|
-
}
|
|
83
|
-
set categoryColumn(categoryColumn) {
|
|
84
|
-
this.#categoryColumn = categoryColumn;
|
|
85
|
-
if (this.#seriesColumns.length > 0) this.buildCategoriesAndSeries();
|
|
86
|
-
}
|
|
87
|
-
get seriesColumnNames() {
|
|
88
|
-
return this.#seriesColumns;
|
|
89
|
-
}
|
|
90
|
-
set seriesColumnNames(seriesColumnNames) {
|
|
91
|
-
this.#seriesColumns = seriesColumnNames;
|
|
92
|
-
if (this.#categoryColumn) this.buildCategoriesAndSeries();
|
|
93
|
-
}
|
|
94
|
-
get categories() {
|
|
95
|
-
return this.#dates;
|
|
96
|
-
}
|
|
97
|
-
get series() {
|
|
98
|
-
return this.#series;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
export { ChartSeries };
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { WindowRange, metadataKeys } from "@vuu-ui/vuu-utils";
|
|
2
|
-
const { IDX: IDX, KEY: KEY } = metadataKeys;
|
|
3
|
-
class MovingDataRowWindow {
|
|
4
|
-
data;
|
|
5
|
-
rowCount = 0;
|
|
6
|
-
#range;
|
|
7
|
-
constructor({ from, to }){
|
|
8
|
-
this.#range = new WindowRange(from, to);
|
|
9
|
-
this.data = new Array(Math.max(0, to - from));
|
|
10
|
-
this.rowCount = 0;
|
|
11
|
-
}
|
|
12
|
-
setRowCount = (rowCount)=>{
|
|
13
|
-
if (rowCount < this.data.length) this.data.length = rowCount;
|
|
14
|
-
this.rowCount = rowCount;
|
|
15
|
-
};
|
|
16
|
-
add(data) {
|
|
17
|
-
const index = data[IDX];
|
|
18
|
-
if (this.isWithinRange(index)) {
|
|
19
|
-
const internalIndex = index - this.#range.from;
|
|
20
|
-
this.data[internalIndex] = data;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
getAtIndex(index) {
|
|
24
|
-
return this.#range.isWithin(index) && null != this.data[index - this.#range.from] ? this.data[index - this.#range.from] : void 0;
|
|
25
|
-
}
|
|
26
|
-
getByKey(key) {
|
|
27
|
-
return this.data.find((row)=>row[KEY] === key);
|
|
28
|
-
}
|
|
29
|
-
isWithinRange(index) {
|
|
30
|
-
return this.#range.isWithin(index);
|
|
31
|
-
}
|
|
32
|
-
setRange({ from, to }) {
|
|
33
|
-
if (from !== this.#range.from || to !== this.#range.to) {
|
|
34
|
-
const [overlapFrom, overlapTo] = this.#range.overlap(from, to);
|
|
35
|
-
const newData = new Array(Math.max(0, to - from));
|
|
36
|
-
for(let i = overlapFrom; i < overlapTo; i++){
|
|
37
|
-
const data = this.getAtIndex(i);
|
|
38
|
-
if (data) {
|
|
39
|
-
const index = i - from;
|
|
40
|
-
newData[index] = data;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
this.data = newData;
|
|
44
|
-
this.#range.from = from;
|
|
45
|
-
this.#range.to = to;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
get hasData() {
|
|
49
|
-
return this.data.some((d)=>void 0 !== d);
|
|
50
|
-
}
|
|
51
|
-
get firstRow() {
|
|
52
|
-
for(let i = 0; i < this.data.length; i++)if (this.data[i]) return this.data[i];
|
|
53
|
-
throw Error("[DataRowMovingWinddow] firstRow, no data");
|
|
54
|
-
}
|
|
55
|
-
get range() {
|
|
56
|
-
return this.#range;
|
|
57
|
-
}
|
|
58
|
-
get hasAllRowsWithinRange() {
|
|
59
|
-
const { from, to } = this.#range;
|
|
60
|
-
for(let i = from; i < to; i++)if (void 0 === this.getAtIndex(i)) return false;
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
export { MovingDataRowWindow };
|
package/src/index.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { useContextMenu } from "@vuu-ui/vuu-context-menu";
|
|
2
|
-
import { useCallback } from "react";
|
|
3
|
-
const useChartContextMenu = ({ categoryColumnName })=>{
|
|
4
|
-
const showContextMenu = useContextMenu();
|
|
5
|
-
const onContextMenu = useCallback(({ data, event, name: categoryValue, seriesName: valueColumn, value: keyedValue, ...rest })=>{
|
|
6
|
-
event.stop();
|
|
7
|
-
console.log({
|
|
8
|
-
rest
|
|
9
|
-
});
|
|
10
|
-
const { row, value } = data;
|
|
11
|
-
const menuOptions = {
|
|
12
|
-
categoryColumn: categoryColumnName,
|
|
13
|
-
categoryValue,
|
|
14
|
-
row,
|
|
15
|
-
valueColumn,
|
|
16
|
-
value
|
|
17
|
-
};
|
|
18
|
-
showContextMenu(event.event, "series", menuOptions, {
|
|
19
|
-
onOpenChange: (isOpen)=>{
|
|
20
|
-
console.log(`[useTableContextMenu] onOpenChange ${isOpen}`);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
}, [
|
|
24
|
-
categoryColumnName,
|
|
25
|
-
showContextMenu
|
|
26
|
-
]);
|
|
27
|
-
return onContextMenu;
|
|
28
|
-
};
|
|
29
|
-
export { useChartContextMenu };
|
package/src/useChartOptions.js
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { useMemo, useState } from "react";
|
|
2
|
-
import { ChartSeries } from "./ChartSeries.js";
|
|
3
|
-
import { itemsChanged } from "@vuu-ui/vuu-utils";
|
|
4
|
-
const defaultPalette = [
|
|
5
|
-
"#4676bf",
|
|
6
|
-
"#ab6528",
|
|
7
|
-
"#9f55c2",
|
|
8
|
-
"#2a8285",
|
|
9
|
-
"#697694",
|
|
10
|
-
"#B0549d"
|
|
11
|
-
];
|
|
12
|
-
const useChartOptions = ({ categoryColumnName, dataSource, itemColorFunction, palette = defaultPalette, seriesColumnNames, showTooltip = true })=>{
|
|
13
|
-
const [, forceRender] = useState({});
|
|
14
|
-
const chartSeries = useMemo(()=>{
|
|
15
|
-
console.log("new ChartSeries");
|
|
16
|
-
const cs = new ChartSeries({
|
|
17
|
-
itemColorFunction,
|
|
18
|
-
dataSource
|
|
19
|
-
});
|
|
20
|
-
cs.on("update", ()=>forceRender({}));
|
|
21
|
-
return cs;
|
|
22
|
-
}, [
|
|
23
|
-
dataSource,
|
|
24
|
-
itemColorFunction
|
|
25
|
-
]);
|
|
26
|
-
useMemo(()=>{
|
|
27
|
-
if (categoryColumnName !== chartSeries.categoryColumn) chartSeries.categoryColumn = categoryColumnName;
|
|
28
|
-
if (itemsChanged(seriesColumnNames, chartSeries.seriesColumnNames)) chartSeries.seriesColumnNames = seriesColumnNames;
|
|
29
|
-
}, [
|
|
30
|
-
categoryColumnName,
|
|
31
|
-
chartSeries,
|
|
32
|
-
seriesColumnNames
|
|
33
|
-
]);
|
|
34
|
-
return {
|
|
35
|
-
animation: false,
|
|
36
|
-
color: palette,
|
|
37
|
-
dataZoom: [
|
|
38
|
-
{
|
|
39
|
-
backgroundColor: "var(--vuuChart-zoom-background, transparent)",
|
|
40
|
-
borderColor: "var(--vuuChart-zoom-borderColor, white)",
|
|
41
|
-
handleStyle: {
|
|
42
|
-
color: "var(--vuuChart-zoom-handleColor, white)"
|
|
43
|
-
},
|
|
44
|
-
moveHandleStyle: {
|
|
45
|
-
color: "var(--vuuChart-zoom-slideColor, white)"
|
|
46
|
-
},
|
|
47
|
-
type: "slider",
|
|
48
|
-
start: 0,
|
|
49
|
-
end: 100
|
|
50
|
-
}
|
|
51
|
-
],
|
|
52
|
-
grid: {
|
|
53
|
-
left: "0",
|
|
54
|
-
bottom: 0,
|
|
55
|
-
right: 5
|
|
56
|
-
},
|
|
57
|
-
series: chartSeries.series,
|
|
58
|
-
tooltip: showTooltip ? {
|
|
59
|
-
backgroundColor: "",
|
|
60
|
-
borderColor: "",
|
|
61
|
-
className: "vuuChartTooltip",
|
|
62
|
-
trigger: "axis"
|
|
63
|
-
} : void 0,
|
|
64
|
-
xAxis: {
|
|
65
|
-
data: chartSeries.categories
|
|
66
|
-
},
|
|
67
|
-
yAxis: {
|
|
68
|
-
splitLine: {
|
|
69
|
-
lineStyle: {
|
|
70
|
-
color: "var(--salt-separable-tertiary-borderColor)"
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
};
|
|
76
|
-
export { useChartOptions };
|