@widergy/energy-ui 3.111.0 → 3.112.1

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 CHANGED
@@ -1,3 +1,17 @@
1
+ ## [3.112.1](https://github.com/widergy/energy-ui/compare/v3.112.0...v3.112.1) (2025-10-30)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * console log ([#712](https://github.com/widergy/energy-ui/issues/712)) ([a3f0eb8](https://github.com/widergy/energy-ui/commit/a3f0eb8de4ba95b007851d72f88a707a32ec6a44))
7
+
8
+ # [3.112.0](https://github.com/widergy/energy-ui/compare/v3.111.0...v3.112.0) (2025-10-23)
9
+
10
+
11
+ ### Features
12
+
13
+ * [COLB-101] dual axis utgraph ([#705](https://github.com/widergy/energy-ui/issues/705)) ([f583827](https://github.com/widergy/energy-ui/commit/f583827c0a593a01209cdf2d7c9fbfe15d9f7e0e))
14
+
1
15
  # [3.111.0](https://github.com/widergy/energy-ui/compare/v3.110.4...v3.111.0) (2025-10-16)
2
16
 
3
17
 
@@ -3,11 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.Default = void 0;
6
+ exports.default = exports.DualAxisChart = exports.BarAndLineChart = void 0;
7
7
  var _reportSchema = _interopRequireDefault(require("./report.schema.json"));
8
8
  var _ = _interopRequireDefault(require("."));
9
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
- const defaultReport = {
10
+ const BarAndLineChartData = {
11
11
  meta: {
12
12
  code: 'economico',
13
13
  enabled: true,
@@ -279,6 +279,114 @@ const defaultReport = {
279
279
  }]
280
280
  }]
281
281
  };
282
+ const DualAxisChartData = {
283
+ meta: {
284
+ code: 'consumo',
285
+ enabled: true,
286
+ report_type: 'chart',
287
+ tabs: [{
288
+ code: 'consumo',
289
+ name: 'Consumo',
290
+ icon: 'IconFilePlus',
291
+ orientation: 'horizontal',
292
+ mainAxis: {
293
+ binding: 'categorical'
294
+ },
295
+ crossAxes: {
296
+ left: {
297
+ label: 'Monto',
298
+ unit: '$'
299
+ },
300
+ right: {
301
+ label: 'Potencia',
302
+ unit: 'kW'
303
+ }
304
+ },
305
+ subitems_catalog: [[{
306
+ name: 'Item A',
307
+ type: 'bar',
308
+ crossAxis: 'left',
309
+ bindings: {
310
+ crossAxis: 'a'
311
+ }
312
+ }, {
313
+ name: 'Item B',
314
+ type: 'line',
315
+ crossAxis: 'right',
316
+ bindings: {
317
+ crossAxis: 'b'
318
+ }
319
+ }]]
320
+ }]
321
+ },
322
+ datasets: [{
323
+ code: 'consumo',
324
+ mainAxis: [{
325
+ name: 'Ene',
326
+ subitems: [{
327
+ code: 'a',
328
+ value: 30
329
+ }, {
330
+ code: 'b',
331
+ value: 550
332
+ }]
333
+ }, {
334
+ name: 'Feb',
335
+ subitems: [{
336
+ code: 'a',
337
+ value: 42
338
+ }, {
339
+ code: 'b',
340
+ value: 600
341
+ }]
342
+ }, {
343
+ name: 'Mar',
344
+ subitems: [{
345
+ code: 'a',
346
+ value: 60
347
+ }, {
348
+ code: 'b',
349
+ value: 800
350
+ }]
351
+ }, {
352
+ name: 'Abr',
353
+ subitems: [{
354
+ code: 'a',
355
+ value: 80
356
+ }, {
357
+ code: 'b',
358
+ value: 1200
359
+ }]
360
+ }, {
361
+ name: 'May',
362
+ subitems: [{
363
+ code: 'a',
364
+ value: 120
365
+ }, {
366
+ code: 'b',
367
+ value: 1500
368
+ }]
369
+ }, {
370
+ name: 'Jun',
371
+ subitems: [{
372
+ code: 'a',
373
+ value: 150
374
+ }, {
375
+ code: 'b',
376
+ value: 2000
377
+ }]
378
+ }, {
379
+ name: 'Jul',
380
+ subitems: [{
381
+ code: 'a',
382
+ value: 150
383
+ }, {
384
+ code: 'b',
385
+ value: 2000
386
+ }]
387
+ }]
388
+ }]
389
+ };
282
390
  var _default = exports.default = {
283
391
  title: 'UTGraph',
284
392
  component: _.default,
@@ -303,10 +411,17 @@ var _default = exports.default = {
303
411
  }
304
412
  }
305
413
  };
306
- const Default = exports.Default = {
307
- name: 'Bar Chart',
414
+ const BarAndLineChart = exports.BarAndLineChart = {
415
+ name: 'Bar and Line Chart',
416
+ args: {
417
+ meta: BarAndLineChartData.meta,
418
+ datasets: BarAndLineChartData.datasets
419
+ }
420
+ };
421
+ const DualAxisChart = exports.DualAxisChart = {
422
+ name: 'Dual Axis Chart',
308
423
  args: {
309
- meta: defaultReport.meta,
310
- datasets: defaultReport.datasets
424
+ meta: DualAxisChartData.meta,
425
+ datasets: DualAxisChartData.datasets
311
426
  }
312
427
  };
@@ -8,10 +8,13 @@ var d3 = _interopRequireWildcard(require("d3"));
8
8
  var _propTypes = require("prop-types");
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _utils = require("../../utils");
11
+ var _constants = require("../../constants");
12
+ var _utils2 = require("./utils");
11
13
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
14
  const Bars = _ref => {
13
15
  let {
14
- crossAxis,
16
+ crossAxisLeft,
17
+ crossAxisRight,
15
18
  dataset,
16
19
  mainAxis,
17
20
  mainAxisDomain,
@@ -27,31 +30,20 @@ const Bars = _ref => {
27
30
  const categoryXPosition = mainAxis(category);
28
31
  const valuesByCode = valuesByCategory.get(category);
29
32
  return tab.subitems_catalog.map((cluster, clusterIndex) => {
30
- const codes = cluster.filter(series => series.type === 'bar').map(series => series.bindings.crossAxis);
31
- if (codes.length === 0) return null;
32
- const stacks = d3.stack().keys(codes).offset(d3.stackOffsetDiverging)([valuesByCode]);
33
+ const leftCodes = cluster.filter(series => series.type === _constants.BAR_TYPE && (series.crossAxis || _constants.LEFT_SIDE) === _constants.LEFT_SIDE).map(series => series.bindings.crossAxis);
34
+ const rightCodes = cluster.filter(series => series.type === _constants.BAR_TYPE && (series.crossAxis || _constants.RIGHT_SIDE) === _constants.RIGHT_SIDE).map(series => series.bindings.crossAxis);
35
+ if (leftCodes.length === 0 && rightCodes.length === 0) return null;
33
36
  const x = categoryXPosition + clusterScale(clusterIndex);
34
37
  const w = clusterScale.bandwidth();
35
- return stacks.map(series => {
36
- const code = series.key;
37
- const [y0, y1] = series[0];
38
- const yTop = Math.min(crossAxis(y0), crossAxis(y1));
39
- const yBot = Math.max(crossAxis(y0), crossAxis(y1));
40
- const h = yBot - yTop;
41
- return /*#__PURE__*/_react.default.createElement("rect", {
42
- key: "".concat(category, "-").concat(code),
43
- x: x,
44
- y: yTop,
45
- width: w,
46
- height: h,
47
- fill: color(code)
48
- });
49
- });
38
+ return /*#__PURE__*/_react.default.createElement("g", {
39
+ key: "".concat(category, "-cluster")
40
+ }, (0, _utils2.renderStacksForSide)(leftCodes, valuesByCode, x, w, crossAxisLeft, category, color), (0, _utils2.renderStacksForSide)(rightCodes, valuesByCode, x, w, crossAxisRight, category, color));
50
41
  });
51
42
  }));
52
43
  };
53
44
  Bars.propTypes = {
54
- crossAxis: _propTypes.func,
45
+ crossAxisLeft: _propTypes.func,
46
+ crossAxisRight: _propTypes.func,
55
47
  dataset: _propTypes.object,
56
48
  mainAxis: _propTypes.func,
57
49
  mainAxisDomain: _propTypes.array,
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.renderStacksForSide = void 0;
7
+ var d3 = _interopRequireWildcard(require("d3"));
8
+ var _react = _interopRequireDefault(require("react"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
11
+ const renderStacksForSide = (codes, valuesByCode, x, w, crossAxis, category, color) => {
12
+ const stacks = d3.stack().keys(codes).offset(d3.stackOffsetDiverging)([valuesByCode]);
13
+ return stacks.map(series => {
14
+ const code = series.key;
15
+ const [y0, y1] = series[0];
16
+ const yTop = Math.min(crossAxis(y0), crossAxis(y1));
17
+ const yBot = Math.max(crossAxis(y0), crossAxis(y1));
18
+ const h = yBot - yTop;
19
+ return /*#__PURE__*/_react.default.createElement("rect", {
20
+ key: "".concat(category, "-").concat(code),
21
+ x: x,
22
+ y: yTop,
23
+ width: w,
24
+ height: h,
25
+ fill: color(code)
26
+ });
27
+ });
28
+ };
29
+ exports.renderStacksForSide = renderStacksForSide;
@@ -12,7 +12,8 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
12
12
  const CartesianPlane = _ref => {
13
13
  let {
14
14
  mainAxisDomain,
15
- crossAxisDomain,
15
+ crossAxisLeftDomain,
16
+ crossAxisRightDomain,
16
17
  width,
17
18
  height,
18
19
  margin,
@@ -20,6 +21,8 @@ const CartesianPlane = _ref => {
20
21
  crossAxisTickFormat,
21
22
  mainAxisTicks,
22
23
  mainAxisTickFormat,
24
+ hasLeft,
25
+ hasRight,
23
26
  children
24
27
  } = _ref;
25
28
  const innerWidth = width - margin.left - margin.right;
@@ -27,33 +30,61 @@ const CartesianPlane = _ref => {
27
30
  const mainAxis = (0, _react.useMemo)(() => d3.scaleBand().domain(mainAxisDomain).range([0, innerWidth]).padding(0.1),
28
31
  // TBD: parametrizar padding
29
32
  [mainAxisDomain, innerWidth]);
30
- const crossAxis = (0, _react.useMemo)(() => d3.scaleLinear().domain(crossAxisDomain).range([innerHeight, 0]).nice(), [crossAxisDomain, innerHeight]);
33
+ const crossAxisLeft = (0, _react.useMemo)(() => d3.scaleLinear().domain(crossAxisLeftDomain).range([innerHeight, 0]).nice(), [crossAxisLeftDomain, innerHeight]);
34
+ const crossAxisRight = (0, _react.useMemo)(() => d3.scaleLinear().domain(crossAxisRightDomain).range([innerHeight, 0]).nice(), [crossAxisRightDomain, innerHeight]);
31
35
  const mainAxisRef = (0, _react.useRef)(null);
32
- const crossAxisRef = (0, _react.useRef)(null);
36
+ const crossAxisLeftRef = (0, _react.useRef)(null);
37
+ const crossAxisRightRef = (0, _react.useRef)(null);
38
+ const gridRef = (0, _react.useRef)(null);
33
39
  (0, _react.useEffect)(() => {
34
40
  const axis = d3.axisBottom(mainAxis).ticks(mainAxisTicks, mainAxisTickFormat).tickSizeOuter(0);
35
41
  d3.select(mainAxisRef.current).call(axis);
36
42
  }, [mainAxis, mainAxisTicks, mainAxisTickFormat]);
37
43
  (0, _react.useEffect)(() => {
38
- const axis = d3.axisLeft(crossAxis).ticks(crossAxisTicks, crossAxisTickFormat).tickSize(-innerWidth).tickSizeOuter(0);
39
- d3.select(crossAxisRef.current).call(axis);
40
- d3.select(crossAxisRef.current).selectAll('.tick line').attr('stroke', '#000').attr('stroke-opacity', 0.5).attr('stroke-dasharray', '5 5');
41
- }, [crossAxis, innerWidth, crossAxisTicks, crossAxisTickFormat]);
44
+ if (!hasLeft) return;
45
+ const axis = d3.axisLeft(crossAxisLeft).ticks(crossAxisTicks, crossAxisTickFormat).tickSize(0).tickSizeOuter(0);
46
+ d3.select(crossAxisLeftRef.current).call(axis);
47
+ d3.select(crossAxisLeftRef.current).selectAll('.tick text').attr('text-anchor', 'end');
48
+ }, [crossAxisLeft, crossAxisTicks, crossAxisTickFormat]);
49
+ (0, _react.useEffect)(() => {
50
+ if (!hasRight) return;
51
+ const axis = d3.axisRight(crossAxisRight).ticks(crossAxisTicks, crossAxisTickFormat).tickSize(0).tickSizeOuter(0);
52
+ d3.select(crossAxisRightRef.current).call(axis);
53
+ d3.select(crossAxisRightRef.current).selectAll('.tick text').attr('text-anchor', 'start');
54
+ }, [crossAxisRight, crossAxisTicks, crossAxisTickFormat]);
55
+ (0, _react.useEffect)(() => {
56
+ const crossAxis = hasLeft ? crossAxisLeft : hasRight ? crossAxisRight : null;
57
+ const g = d3.select(gridRef.current);
58
+ g.selectAll('*').remove();
59
+ if (!crossAxis) return;
60
+ const grid = d3.axisLeft(crossAxis).ticks(crossAxisTicks).tickFormat('').tickSize(-innerWidth).tickSizeOuter(0);
61
+ g.call(grid);
62
+ g.selectAll('.tick line').attr('stroke', '#000').attr('stroke-opacity', 0.5).attr('stroke-dasharray', '5 5');
63
+ g.select('.domain').remove();
64
+ }, [crossAxisLeft, crossAxisRight, innerWidth, crossAxisTicks, crossAxisTickFormat]);
42
65
  return /*#__PURE__*/_react.default.createElement("svg", {
43
66
  width: width,
44
67
  height: height
45
68
  }, /*#__PURE__*/_react.default.createElement("g", {
46
69
  transform: "translate(".concat(margin.left, ",").concat(margin.top, ")")
47
70
  }, /*#__PURE__*/_react.default.createElement("g", {
48
- ref: crossAxisRef,
49
- className: "y-axis"
71
+ ref: gridRef,
72
+ className: "y-grid"
73
+ }), hasLeft && /*#__PURE__*/_react.default.createElement("g", {
74
+ ref: crossAxisLeftRef,
75
+ className: "y-axis-left"
76
+ }), hasRight && /*#__PURE__*/_react.default.createElement("g", {
77
+ ref: crossAxisRightRef,
78
+ className: "y-axis-right",
79
+ transform: "translate(".concat(innerWidth, ", 0)")
50
80
  }), /*#__PURE__*/_react.default.createElement("g", {
51
81
  ref: mainAxisRef,
52
82
  className: "x-axis",
53
83
  transform: "translate(0, ".concat(innerHeight, ")")
54
84
  }), children({
55
85
  mainAxis,
56
- crossAxis
86
+ crossAxisLeft,
87
+ crossAxisRight
57
88
  })));
58
89
  };
59
90
  var _default = exports.default = CartesianPlane;
@@ -6,56 +6,50 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _propTypes = require("prop-types");
9
- var d3 = _interopRequireWildcard(require("d3"));
9
+ var _constants = require("../../constants");
10
10
  var _utils = require("../../utils");
11
+ var _utils2 = require("./utils");
11
12
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
13
  const Lines = _ref => {
13
14
  let {
14
15
  tab,
15
16
  dataset,
16
17
  mainAxis,
17
- crossAxis,
18
+ crossAxisLeft,
19
+ crossAxisRight,
18
20
  mainAxisDomain,
19
21
  color
20
22
  } = _ref;
21
- const lineClusters = (0, _react.useMemo)(() => tab.subitems_catalog.map(cluster => cluster.filter(s => s.type === 'line').map(s => s.bindings.crossAxis)).filter(codes => codes.length > 0), [tab]);
22
23
  const valuesByCategory = (0, _react.useMemo)(() => (0, _utils.getValuesMapByCategory)(dataset), [dataset]);
23
- return /*#__PURE__*/_react.default.createElement("g", null, lineClusters.map(codes => {
24
- const rows = mainAxisDomain.map(category => {
25
- const valuesByCode = valuesByCategory.get(category);
26
- const row = {};
27
- codes.forEach(code => row[code] = valuesByCode[code]);
28
- return row;
29
- });
30
- const stacks = d3.stack().keys(codes).offset(d3.stackOffsetDiverging)(rows);
31
- return stacks.map(series => {
32
- const code = series.key;
33
- const points = series.map((_ref2, i) => {
34
- let [y0, y1] = _ref2;
35
- return {
36
- y: Math.max(y0, y1),
37
- x: mainAxis(mainAxisDomain[i]) + mainAxis.bandwidth() / 2
38
- };
39
- });
40
- const path = d3.line().defined(d => Number.isFinite(d.y)).x(d => d.x).y(d => crossAxis(d.y))(points);
41
- if (!path) return null;
42
- return /*#__PURE__*/_react.default.createElement("path", {
43
- key: code,
44
- d: path,
45
- fill: "none",
46
- stroke: color(code),
47
- strokeWidth: 2,
48
- strokeLinejoin: "round",
49
- strokeLinecap: "round"
50
- });
51
- });
24
+ const splitLineClusters = (0, _react.useMemo)(() => tab.subitems_catalog.map(cluster => {
25
+ const lineSeries = cluster.filter(s => s.type === _constants.LINE_TYPE);
26
+ const leftCodes = lineSeries.filter(s => (s.crossAxis || _constants.LEFT_SIDE) === _constants.LEFT_SIDE).map(s => s.bindings.crossAxis);
27
+ const rightCodes = lineSeries.filter(s => (s.crossAxis || _constants.RIGHT_SIDE) === _constants.RIGHT_SIDE).map(s => s.bindings.crossAxis);
28
+ return {
29
+ leftCodes,
30
+ rightCodes
31
+ };
32
+ }).filter(_ref2 => {
33
+ let {
34
+ leftCodes,
35
+ rightCodes
36
+ } = _ref2;
37
+ return leftCodes.length > 0 || rightCodes.length > 0;
38
+ }), [tab]);
39
+ return /*#__PURE__*/_react.default.createElement("g", null, splitLineClusters.map(_ref3 => {
40
+ let {
41
+ leftCodes,
42
+ rightCodes
43
+ } = _ref3;
44
+ return /*#__PURE__*/_react.default.createElement("g", null, (0, _utils2.renderStacksForSide)(leftCodes, valuesByCategory, mainAxis, mainAxisDomain, crossAxisLeft, color), (0, _utils2.renderStacksForSide)(rightCodes, valuesByCategory, mainAxis, mainAxisDomain, crossAxisRight, color));
52
45
  }));
53
46
  };
54
47
  Lines.propTypes = {
55
48
  tab: _propTypes.object,
56
49
  dataset: _propTypes.object,
57
50
  mainAxis: _propTypes.func,
58
- crossAxis: _propTypes.func,
51
+ crossAxisLeft: _propTypes.func,
52
+ crossAxisRight: _propTypes.func,
59
53
  mainAxisDomain: _propTypes.array,
60
54
  color: _propTypes.func
61
55
  };
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.renderStacksForSide = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var d3 = _interopRequireWildcard(require("d3"));
9
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ const renderStacksForSide = (codes, valuesByCategory, mainAxis, mainAxisDomain, crossAxis, color) => {
12
+ const rows = mainAxisDomain.map(category => {
13
+ const valuesByCode = valuesByCategory.get(category);
14
+ const row = {};
15
+ codes.forEach(code => row[code] = valuesByCode[code]);
16
+ return row;
17
+ });
18
+ const stacks = d3.stack().keys(codes).offset(d3.stackOffsetDiverging)(rows);
19
+ return stacks.map(series => {
20
+ const code = series.key;
21
+ const points = series.map((_ref, i) => {
22
+ let [y0, y1] = _ref;
23
+ return {
24
+ y: Math.max(y0, y1),
25
+ x: mainAxis(mainAxisDomain[i]) + mainAxis.bandwidth() / 2
26
+ };
27
+ });
28
+ const path = d3.line().defined(d => Number.isFinite(d.y)).x(d => d.x).y(d => crossAxis(d.y))(points);
29
+ if (!path) return null;
30
+ return /*#__PURE__*/_react.default.createElement("path", {
31
+ key: code,
32
+ d: path,
33
+ fill: "none",
34
+ stroke: color(code),
35
+ strokeWidth: 2,
36
+ strokeLinejoin: "round",
37
+ strokeLinecap: "round"
38
+ });
39
+ });
40
+ };
41
+ exports.renderStacksForSide = renderStacksForSide;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.RIGHT_SIDE = exports.LINE_TYPE = exports.LEFT_SIDE = exports.BAR_TYPE = void 0;
7
+ const LEFT_SIDE = exports.LEFT_SIDE = 'left';
8
+ const RIGHT_SIDE = exports.RIGHT_SIDE = 'right';
9
+ const LINE_TYPE = exports.LINE_TYPE = 'line';
10
+ const BAR_TYPE = exports.BAR_TYPE = 'bar';
@@ -11,6 +11,7 @@ var _Bars = _interopRequireDefault(require("./components/Bars"));
11
11
  var _Lines = _interopRequireDefault(require("./components/Lines"));
12
12
  var _CartesianPlane = _interopRequireDefault(require("./components/CartesianPlane"));
13
13
  var _utils = require("./utils");
14
+ var _constants = require("./constants");
14
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
16
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
16
17
  const UTGraph = _ref => {
@@ -21,13 +22,19 @@ const UTGraph = _ref => {
21
22
  const tab = meta.tabs[0];
22
23
  const dataset = (0, _react.useMemo)(() => datasets.find(ds => ds.code === tab.code), [datasets, tab]);
23
24
  const mainAxisDomain = (0, _react.useMemo)(() => dataset.mainAxis.map(item => item.name), [dataset]);
24
- const crossAxisDomain = (0, _react.useMemo)(() => (0, _utils.applyHeadroom)((0, _utils.computeCrossAxisDomain)(tab, dataset)), [tab, dataset]);
25
+ const crossAxisLeftDomain = (0, _react.useMemo)(() => (0, _utils.applyHeadroom)((0, _utils.computeCrossAxisDomainForSide)(tab, dataset, _constants.LEFT_SIDE)), [tab, dataset]);
26
+ const crossAxisRightDomain = (0, _react.useMemo)(() => (0, _utils.applyHeadroom)((0, _utils.computeCrossAxisDomainForSide)(tab, dataset, _constants.RIGHT_SIDE)), [tab, dataset]);
27
+ const {
28
+ hasLeft,
29
+ hasRight
30
+ } = (0, _utils.detectAxisSides)(tab);
25
31
 
26
32
  // TBD: colors should be retrieved from the report's meta
27
33
  const codeList = (0, _react.useMemo)(() => tab.subitems_catalog.flatMap(cluster => cluster.map(series => series.bindings.crossAxis)), [tab]);
28
34
  const color = (0, _react.useMemo)(() => d3.scaleOrdinal(codeList, d3.schemeTableau10), [codeList]);
29
35
  return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_CartesianPlane.default, {
30
- crossAxisDomain: crossAxisDomain,
36
+ crossAxisLeftDomain: crossAxisLeftDomain,
37
+ crossAxisRightDomain: crossAxisRightDomain,
31
38
  crossAxisTickFormat: "~s",
32
39
  crossAxisTicks: 4,
33
40
  height: 700,
@@ -40,21 +47,26 @@ const UTGraph = _ref => {
40
47
  bottom: 32,
41
48
  left: 64
42
49
  },
43
- width: 1000
50
+ width: 1000,
51
+ hasLeft: hasLeft,
52
+ hasRight: hasRight
44
53
  }, _ref2 => {
45
54
  let {
46
55
  mainAxis,
47
- crossAxis
56
+ crossAxisLeft,
57
+ crossAxisRight
48
58
  } = _ref2;
49
59
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_Bars.default, {
50
- crossAxis: crossAxis,
60
+ crossAxisLeft: crossAxisLeft,
61
+ crossAxisRight: crossAxisRight,
51
62
  dataset: dataset,
52
63
  mainAxis: mainAxis,
53
64
  mainAxisDomain: mainAxisDomain,
54
65
  tab: tab,
55
66
  color: color
56
67
  }), /*#__PURE__*/_react.default.createElement(_Lines.default, {
57
- crossAxis: crossAxis,
68
+ crossAxisLeft: crossAxisLeft,
69
+ crossAxisRight: crossAxisRight,
58
70
  dataset: dataset,
59
71
  mainAxis: mainAxis,
60
72
  mainAxisDomain: mainAxisDomain,
@@ -3,7 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getValuesMapByCategory = exports.computeCrossAxisDomain = exports.applyHeadroom = void 0;
6
+ exports.getValuesMapByCategory = exports.detectAxisSides = exports.computeCrossAxisDomainForSide = exports.computeCrossAxisDomain = exports.applyHeadroom = void 0;
7
+ var _constants = require("./constants");
7
8
  const computeCrossAxisDomain = (tab, dataset) => {
8
9
  const {
9
10
  yMin,
@@ -50,6 +51,15 @@ const computeCrossAxisDomain = (tab, dataset) => {
50
51
  return [Math.min(0, yMin), Math.max(0, yMax)];
51
52
  };
52
53
  exports.computeCrossAxisDomain = computeCrossAxisDomain;
54
+ const computeCrossAxisDomainForSide = (tab, dataset, side) => {
55
+ const filteredTab = {
56
+ ...tab,
57
+ subitems_catalog: tab.subitems_catalog.map(cluster => cluster.filter(series => (series.crossAxis || _constants.LEFT_SIDE) === side))
58
+ };
59
+ filteredTab.subitems_catalog = filteredTab.subitems_catalog.filter(cluster => cluster.length > 0);
60
+ return computeCrossAxisDomain(filteredTab, dataset);
61
+ };
62
+ exports.computeCrossAxisDomainForSide = computeCrossAxisDomainForSide;
53
63
  const applyHeadroom = function (_ref2) {
54
64
  let [min, max] = _ref2;
55
65
  let {
@@ -65,4 +75,22 @@ const getValuesMapByCategory = dataset => {
65
75
  });
66
76
  return map;
67
77
  };
68
- exports.getValuesMapByCategory = getValuesMapByCategory;
78
+ exports.getValuesMapByCategory = getValuesMapByCategory;
79
+ const detectAxisSides = tab => {
80
+ let hasLeft = false;
81
+ let hasRight = false;
82
+ tab.subitems_catalog.forEach(cluster => {
83
+ cluster.forEach(s => {
84
+ if (s.type === _constants.LINE_TYPE || s.type === _constants.BAR_TYPE) {
85
+ const side = s.crossAxis || _constants.LEFT_SIDE;
86
+ if (side === _constants.LEFT_SIDE) hasLeft = true;
87
+ if (side === _constants.RIGHT_SIDE) hasRight = true;
88
+ }
89
+ });
90
+ });
91
+ return {
92
+ hasLeft,
93
+ hasRight
94
+ };
95
+ };
96
+ exports.detectAxisSides = detectAxisSides;
@@ -73,7 +73,6 @@ class UTRadioGroup extends _react.PureComponent {
73
73
  }
74
74
  render() {
75
75
  var _field$configuration;
76
- console.log('222');
77
76
  const {
78
77
  actions,
79
78
  classNames = {},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@widergy/energy-ui",
3
- "version": "3.111.0",
3
+ "version": "3.112.1",
4
4
  "description": "Widergy Web Components",
5
5
  "author": "widergy",
6
6
  "license": "MIT",