@hitachivantara/uikit-react-viz 6.1.6 → 6.1.8

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.
@@ -1,164 +1,124 @@
1
+ import { getGroupKey, getHvArqueroCombinedFilters, normalizeColumnName, processTableData } from "../utils/index.js";
1
2
  import { useMemo } from "react";
2
- import { escape, desc, not } from "arquero";
3
- import { getGroupKey, processTableData, normalizeColumnName, getHvArqueroCombinedFilters } from "../utils/index.js";
4
- const getAgFunc = (func, field) => func === "count" ? "count()" : `${func}(d["${field}"])`;
5
- const useData = ({
6
- data,
7
- groupBy,
8
- measures,
9
- sortBy,
10
- splitBy,
11
- filters: filtersProp,
12
- delta
13
- }) => {
14
- const groupByKey = getGroupKey(groupBy);
15
- return useMemo(() => {
16
- const { data: processedData, mapping } = processTableData(data);
17
- let tableData = processedData;
18
- if (filtersProp) {
19
- const filters = (Array.isArray(filtersProp) ? filtersProp : [filtersProp]).map((filter) => ({
20
- ...filter,
21
- field: normalizeColumnName(filter.field)
22
- // normalize
23
- }));
24
- tableData = tableData.filter(
25
- escape((row) => getHvArqueroCombinedFilters(row, filters))
26
- );
27
- }
28
- const groupByFields = (groupBy ? Array.isArray(groupBy) ? groupBy : [groupBy] : []).map((value) => normalizeColumnName(value));
29
- const splitByFields = (Array.isArray(splitBy) ? splitBy : splitBy != null ? [splitBy] : []).map((value) => normalizeColumnName(value));
30
- const measuresFields = [];
31
- const measuresMapping = {};
32
- let measuresColumns = {};
33
- if (typeof measures === "string") {
34
- measuresMapping[measures] = measures;
35
- const normalizedMeasure = normalizeColumnName(measures);
36
- measuresColumns[normalizedMeasure] = getAgFunc("sum", normalizedMeasure);
37
- measuresFields.push(normalizedMeasure);
38
- } else if (Array.isArray(measures)) {
39
- measuresColumns = measures.reduce(
40
- (acc, value) => {
41
- let field;
42
- let agFunction;
43
- let columnName;
44
- if (typeof value === "string") {
45
- measuresMapping[value] = value;
46
- field = normalizeColumnName(value);
47
- agFunction = "sum";
48
- columnName = field;
49
- } else {
50
- const notUnique = measures.filter(
51
- (m) => typeof m === "string" ? m === value.field : m.field === value.field
52
- ).length > 1;
53
- const appendAgg = notUnique && value.agg && value.agg !== "sum";
54
- measuresMapping[appendAgg ? `${value.field}_${value.agg}` : value.field] = value;
55
- field = normalizeColumnName(value.field);
56
- agFunction = value.agg ?? "sum";
57
- columnName = appendAgg ? `${field}_${value.agg}` : field;
58
- }
59
- measuresFields.push(field);
60
- acc[columnName] = getAgFunc(agFunction, field);
61
- return acc;
62
- },
63
- {}
64
- );
65
- } else if (measures != null) {
66
- measuresMapping[measures.field] = measures;
67
- const normalizedMeasure = normalizeColumnName(measures.field);
68
- measuresColumns[normalizedMeasure] = getAgFunc(
69
- measures.agg ?? "sum",
70
- normalizedMeasure
71
- );
72
- measuresFields.push(normalizedMeasure);
73
- }
74
- let sortByFields = {};
75
- if (typeof sortBy === "string") {
76
- const normalizedSort = normalizeColumnName(sortBy);
77
- sortByFields[normalizedSort] = "asc";
78
- } else if (Array.isArray(sortBy)) {
79
- sortByFields = sortBy.reduce(
80
- (acc, value) => {
81
- let field;
82
- let orderFunction;
83
- if (typeof value === "string") {
84
- field = normalizeColumnName(value);
85
- orderFunction = "asc";
86
- } else {
87
- field = normalizeColumnName(value.field);
88
- orderFunction = value.order ?? "asc";
89
- }
90
- acc[field] = orderFunction;
91
- return acc;
92
- },
93
- {}
94
- );
95
- } else if (sortBy != null) {
96
- const normalizedSort = normalizeColumnName(sortBy.field);
97
- sortByFields[normalizedSort] = sortBy.order ?? "asc";
98
- }
99
- const allFields = [...groupByFields, ...splitByFields, ...measuresFields];
100
- if (delta) {
101
- const deltaExpression = Object.keys(measuresColumns).reduce((acc, curr) => {
102
- const normalizedMeasure = normalizeColumnName(curr);
103
- const normalizedDelta = normalizeColumnName(delta);
104
- acc[normalizedMeasure] = `d => d.${normalizedMeasure} - d.${normalizedDelta}`;
105
- return acc;
106
- }, {});
107
- tableData = tableData.derive(deltaExpression);
108
- }
109
- tableData = tableData.select(...allFields);
110
- if (groupByFields.length > 0) {
111
- tableData = tableData.groupby(groupByFields);
112
- }
113
- if (splitByFields.length > 0) {
114
- tableData = tableData.pivot(splitByFields, measuresColumns);
115
- } else {
116
- tableData = tableData.rollup(measuresColumns);
117
- }
118
- if (groupByFields.length > 1) {
119
- const expression = `d => ${groupByFields.map((field) => `d.${field}`).join(" + '_' + ")}`;
120
- tableData = tableData.derive(
121
- { [groupByKey]: expression },
122
- { after: groupByFields[groupByFields.length - 1] }
123
- );
124
- }
125
- if (Object.keys(sortByFields).length > 0) {
126
- tableData = tableData.orderby(
127
- ...Object.keys(sortByFields).filter((key) => allFields.includes(key)).map((key) => sortByFields[key] === "desc" ? desc(key) : key)
128
- );
129
- }
130
- const reversedMapping = {};
131
- for (const column of tableData.columnNames()) {
132
- if (mapping[column] != null) {
133
- reversedMapping[column] = mapping[column];
134
- } else {
135
- const found = Object.entries(mapping).find(
136
- ([key]) => column.includes(key)
137
- );
138
- if (found) {
139
- const [key, value] = found;
140
- reversedMapping[column] = column.replace(key, value);
141
- } else {
142
- reversedMapping[column] = column;
143
- }
144
- }
145
- }
146
- tableData = tableData.select(reversedMapping);
147
- if (groupByFields.length > 1) {
148
- tableData = tableData.select(not(...groupByFields));
149
- }
150
- return { data: tableData, mapping: measuresMapping };
151
- }, [
152
- data,
153
- filtersProp,
154
- groupBy,
155
- splitBy,
156
- measures,
157
- sortBy,
158
- delta,
159
- groupByKey
160
- ]);
161
- };
162
- export {
163
- useData
3
+ import { desc, escape, not } from "arquero";
4
+ //#region src/hooks/useData.tsx
5
+ var getAgFunc = (func, field) => func === "count" ? "count()" : `${func}(d["${field}"])`;
6
+ var useData = ({ data, groupBy, measures, sortBy, splitBy, filters: filtersProp, delta }) => {
7
+ const groupByKey = getGroupKey(groupBy);
8
+ return useMemo(() => {
9
+ const { data: processedData, mapping } = processTableData(data);
10
+ let tableData = processedData;
11
+ if (filtersProp) {
12
+ const filters = (Array.isArray(filtersProp) ? filtersProp : [filtersProp]).map((filter) => ({
13
+ ...filter,
14
+ field: normalizeColumnName(filter.field)
15
+ }));
16
+ tableData = tableData.filter(escape((row) => getHvArqueroCombinedFilters(row, filters)));
17
+ }
18
+ const groupByFields = (groupBy ? Array.isArray(groupBy) ? groupBy : [groupBy] : []).map((value) => normalizeColumnName(value));
19
+ const splitByFields = (Array.isArray(splitBy) ? splitBy : splitBy != null ? [splitBy] : []).map((value) => normalizeColumnName(value));
20
+ const measuresFields = [];
21
+ const measuresMapping = {};
22
+ let measuresColumns = {};
23
+ if (typeof measures === "string") {
24
+ measuresMapping[measures] = measures;
25
+ const normalizedMeasure = normalizeColumnName(measures);
26
+ measuresColumns[normalizedMeasure] = getAgFunc("sum", normalizedMeasure);
27
+ measuresFields.push(normalizedMeasure);
28
+ } else if (Array.isArray(measures)) measuresColumns = measures.reduce((acc, value) => {
29
+ let field;
30
+ let agFunction;
31
+ let columnName;
32
+ if (typeof value === "string") {
33
+ measuresMapping[value] = value;
34
+ field = normalizeColumnName(value);
35
+ agFunction = "sum";
36
+ columnName = field;
37
+ } else {
38
+ const appendAgg = measures.filter((m) => typeof m === "string" ? m === value.field : m.field === value.field).length > 1 && value.agg && value.agg !== "sum";
39
+ measuresMapping[appendAgg ? `${value.field}_${value.agg}` : value.field] = value;
40
+ field = normalizeColumnName(value.field);
41
+ agFunction = value.agg ?? "sum";
42
+ columnName = appendAgg ? `${field}_${value.agg}` : field;
43
+ }
44
+ measuresFields.push(field);
45
+ acc[columnName] = getAgFunc(agFunction, field);
46
+ return acc;
47
+ }, {});
48
+ else if (measures != null) {
49
+ measuresMapping[measures.field] = measures;
50
+ const normalizedMeasure = normalizeColumnName(measures.field);
51
+ measuresColumns[normalizedMeasure] = getAgFunc(measures.agg ?? "sum", normalizedMeasure);
52
+ measuresFields.push(normalizedMeasure);
53
+ }
54
+ let sortByFields = {};
55
+ if (typeof sortBy === "string") {
56
+ const normalizedSort = normalizeColumnName(sortBy);
57
+ sortByFields[normalizedSort] = "asc";
58
+ } else if (Array.isArray(sortBy)) sortByFields = sortBy.reduce((acc, value) => {
59
+ let field;
60
+ let orderFunction;
61
+ if (typeof value === "string") {
62
+ field = normalizeColumnName(value);
63
+ orderFunction = "asc";
64
+ } else {
65
+ field = normalizeColumnName(value.field);
66
+ orderFunction = value.order ?? "asc";
67
+ }
68
+ acc[field] = orderFunction;
69
+ return acc;
70
+ }, {});
71
+ else if (sortBy != null) {
72
+ const normalizedSort = normalizeColumnName(sortBy.field);
73
+ sortByFields[normalizedSort] = sortBy.order ?? "asc";
74
+ }
75
+ const allFields = [
76
+ ...groupByFields,
77
+ ...splitByFields,
78
+ ...measuresFields
79
+ ];
80
+ if (delta) {
81
+ const deltaExpression = Object.keys(measuresColumns).reduce((acc, curr) => {
82
+ const normalizedMeasure = normalizeColumnName(curr);
83
+ acc[normalizedMeasure] = `d => d.${normalizedMeasure} - d.${normalizeColumnName(delta)}`;
84
+ return acc;
85
+ }, {});
86
+ tableData = tableData.derive(deltaExpression);
87
+ }
88
+ tableData = tableData.select(...allFields);
89
+ if (groupByFields.length > 0) tableData = tableData.groupby(groupByFields);
90
+ if (splitByFields.length > 0) tableData = tableData.pivot(splitByFields, measuresColumns);
91
+ else tableData = tableData.rollup(measuresColumns);
92
+ if (groupByFields.length > 1) {
93
+ const expression = `d => ${groupByFields.map((field) => `d.${field}`).join(" + '_' + ")}`;
94
+ tableData = tableData.derive({ [groupByKey]: expression }, { after: groupByFields[groupByFields.length - 1] });
95
+ }
96
+ if (Object.keys(sortByFields).length > 0) tableData = tableData.orderby(...Object.keys(sortByFields).filter((key) => allFields.includes(key)).map((key) => sortByFields[key] === "desc" ? desc(key) : key));
97
+ const reversedMapping = {};
98
+ for (const column of tableData.columnNames()) if (mapping[column] != null) reversedMapping[column] = mapping[column];
99
+ else {
100
+ const found = Object.entries(mapping).find(([key]) => column.includes(key));
101
+ if (found) {
102
+ const [key, value] = found;
103
+ reversedMapping[column] = column.replace(key, value);
104
+ } else reversedMapping[column] = column;
105
+ }
106
+ tableData = tableData.select(reversedMapping);
107
+ if (groupByFields.length > 1) tableData = tableData.select(not(...groupByFields));
108
+ return {
109
+ data: tableData,
110
+ mapping: measuresMapping
111
+ };
112
+ }, [
113
+ data,
114
+ filtersProp,
115
+ groupBy,
116
+ splitBy,
117
+ measures,
118
+ sortBy,
119
+ delta,
120
+ groupByKey
121
+ ]);
164
122
  };
123
+ //#endregion
124
+ export { useData };
@@ -1,27 +1,19 @@
1
1
  import { useMemo } from "react";
2
- const useDataZoom = ({
3
- showHorizontal = false
4
- }) => {
5
- const option = useMemo(() => {
6
- return {
7
- dataZoom: showHorizontal ? [
8
- {
9
- show: true,
10
- type: "slider",
11
- orient: "horizontal"
12
- },
13
- {
14
- show: true,
15
- type: "inside",
16
- orient: "horizontal",
17
- zoomOnMouseWheel: "shift",
18
- moveOnMouseWheel: true
19
- }
20
- ] : []
21
- };
22
- }, [showHorizontal]);
23
- return option;
24
- };
25
- export {
26
- useDataZoom
2
+ //#region src/hooks/useDataZoom.tsx
3
+ var useDataZoom = ({ showHorizontal = false }) => {
4
+ return useMemo(() => {
5
+ return { dataZoom: showHorizontal ? [{
6
+ show: true,
7
+ type: "slider",
8
+ orient: "horizontal"
9
+ }, {
10
+ show: true,
11
+ type: "inside",
12
+ orient: "horizontal",
13
+ zoomOnMouseWheel: "shift",
14
+ moveOnMouseWheel: true
15
+ }] : [] };
16
+ }, [showHorizontal]);
27
17
  };
18
+ //#endregion
19
+ export { useDataZoom };
@@ -1,16 +1,12 @@
1
1
  import { useMemo } from "react";
2
- const useDataset = (data) => {
3
- return useMemo(() => {
4
- return {
5
- dataset: {
6
- source: data.columnNames().reduce((acc, c) => {
7
- acc[c] = data.array(c);
8
- return acc;
9
- }, {})
10
- }
11
- };
12
- }, [data]);
13
- };
14
- export {
15
- useDataset
2
+ //#region src/hooks/useDataset.tsx
3
+ var useDataset = (data) => {
4
+ return useMemo(() => {
5
+ return { dataset: { source: data.columnNames().reduce((acc, c) => {
6
+ acc[c] = data.array(c);
7
+ return acc;
8
+ }, {}) } };
9
+ }, [data]);
16
10
  };
11
+ //#endregion
12
+ export { useDataset };
@@ -1,39 +1,23 @@
1
1
  import { useMemo } from "react";
2
- const useGrid = ({
3
- top,
4
- left,
5
- right,
6
- bottom,
7
- width,
8
- height
9
- }) => {
10
- const option = useMemo(() => {
11
- return {
12
- // if no value is defined we shouldn't pass anything because echarts doesn't behave well otherwise
13
- grid: {
14
- ...top != null && {
15
- top
16
- },
17
- ...bottom != null && {
18
- bottom
19
- },
20
- ...left != null && {
21
- left
22
- },
23
- ...right != null && {
24
- right
25
- },
26
- ...width != null && {
27
- width
28
- },
29
- ...height != null && {
30
- height
31
- }
32
- }
33
- };
34
- }, [top, left, right, bottom, height, width]);
35
- return option;
36
- };
37
- export {
38
- useGrid
2
+ //#region src/hooks/useGrid.tsx
3
+ var useGrid = ({ top, left, right, bottom, width, height }) => {
4
+ return useMemo(() => {
5
+ return { grid: {
6
+ ...top != null && { top },
7
+ ...bottom != null && { bottom },
8
+ ...left != null && { left },
9
+ ...right != null && { right },
10
+ ...width != null && { width },
11
+ ...height != null && { height }
12
+ } };
13
+ }, [
14
+ top,
15
+ left,
16
+ right,
17
+ bottom,
18
+ height,
19
+ width
20
+ ]);
39
21
  };
22
+ //#endregion
23
+ export { useGrid };
@@ -1,46 +1,37 @@
1
- import { useMemo } from "react";
2
1
  import { getLegendIcon } from "../utils/index.js";
3
- const useLegend = ({
4
- series,
5
- show,
6
- icon,
7
- formatter,
8
- position: positionProp,
9
- direction = "horizontal"
10
- }) => {
11
- const option = useMemo(() => {
12
- const position = {
13
- y: positionProp?.y ?? "top",
14
- x: positionProp?.x ?? "center"
15
- };
16
- return {
17
- legend: {
18
- show: show ?? (Array.isArray(series) && series.length > 1),
19
- itemGap: 20,
20
- formatter,
21
- orient: direction,
22
- ...position,
23
- ...icon && { icon: getLegendIcon(icon) },
24
- ...!icon && {
25
- data: show !== false && Array.isArray(series) ? series.map((s) => {
26
- let iconType = "line";
27
- if (s.areaStyle != null) {
28
- iconType = "square";
29
- }
30
- if (s.type === "scatter") {
31
- iconType = "circle";
32
- }
33
- return {
34
- name: s.name,
35
- icon: getLegendIcon(iconType)
36
- };
37
- }) : void 0
38
- }
39
- }
40
- };
41
- }, [series, show, icon, formatter, positionProp, direction]);
42
- return option;
43
- };
44
- export {
45
- useLegend
2
+ import { useMemo } from "react";
3
+ //#region src/hooks/useLegend.tsx
4
+ var useLegend = ({ series, show, icon, formatter, position: positionProp, direction = "horizontal" }) => {
5
+ return useMemo(() => {
6
+ const position = {
7
+ y: positionProp?.y ?? "top",
8
+ x: positionProp?.x ?? "center"
9
+ };
10
+ return { legend: {
11
+ show: show ?? (Array.isArray(series) && series.length > 1),
12
+ itemGap: 20,
13
+ formatter,
14
+ orient: direction,
15
+ ...position,
16
+ ...icon && { icon: getLegendIcon(icon) },
17
+ ...!icon && { data: show !== false && Array.isArray(series) ? series.map((s) => {
18
+ let iconType = "line";
19
+ if (s.areaStyle != null) iconType = "square";
20
+ if (s.type === "scatter") iconType = "circle";
21
+ return {
22
+ name: s.name,
23
+ icon: getLegendIcon(iconType)
24
+ };
25
+ }) : void 0 }
26
+ } };
27
+ }, [
28
+ series,
29
+ show,
30
+ icon,
31
+ formatter,
32
+ positionProp,
33
+ direction
34
+ ]);
46
35
  };
36
+ //#endregion
37
+ export { useLegend };
@@ -1,20 +1,14 @@
1
1
  import { useMemo } from "react";
2
- const useOption = ({
3
- option: optionProp,
4
- onOptionChange
5
- }) => {
6
- const option = useMemo(() => {
7
- const baseOption = {
8
- aria: {
9
- enabled: true
10
- },
11
- animation: false
12
- };
13
- const opt = { ...baseOption, ...optionProp };
14
- return onOptionChange ? onOptionChange(opt) : opt;
15
- }, [onOptionChange, optionProp]);
16
- return option;
17
- };
18
- export {
19
- useOption
2
+ //#region src/hooks/useOption.ts
3
+ var useOption = ({ option: optionProp, onOptionChange }) => {
4
+ return useMemo(() => {
5
+ const opt = {
6
+ aria: { enabled: true },
7
+ animation: false,
8
+ ...optionProp
9
+ };
10
+ return onOptionChange ? onOptionChange(opt) : opt;
11
+ }, [onOptionChange, optionProp]);
20
12
  };
13
+ //#endregion
14
+ export { useOption };