@gpa-gemstone/react-graph
Version:
Interactive UI Components for GPA products
159 lines • 13.9 kB
JavaScript
;
// ******************************************************************************************************
// Bar.tsx - Gbtc
//
// Copyright © 2020, Grid Protection Alliance. All Rights Reserved.
//
// Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See
// the NOTICE file distributed with this work for additional information regarding copyright ownership.
// The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this
// file except in compliance with the License. You may obtain a copy of the License at:
//
// http://opensource.org/licenses/MIT
//
// Unless agreed to in writing, the subject software distributed under the License is distributed on an
// "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the
// License for the specific language governing permissions and limitations.
//
// Code Modification History:
// ----------------------------------------------------------------------------------------------------
// 11/04/2025 - Gabriel Santos
// Generated original version of source code.
//
// ******************************************************************************************************
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.StackedBar = void 0;
var React = require("react");
var GraphContext_1 = require("./GraphContext");
var DataLegend_1 = require("./DataLegend");
var defaultStyle = {
Opacity: 0.5,
StrokeColor: "black"
};
var StackedBar = function (props) {
var _a = __read(React.useState(undefined), 2), guid = _a[0], setGuid = _a[1];
var context = React.useContext(GraphContext_1.GraphContext);
var createLegend = React.useCallback(function () {
if (props.Legend == undefined || guid == null)
return undefined;
return React.createElement(DataLegend_1.default, { id: guid, label: props.Legend, color: props.Color, legendSymbol: 'square', setEnabled: function () { }, enabled: true, hasNoData: props.Data.length === 0 });
}, [props.Color, props.Data, guid]);
var createContextData = React.useCallback(function () {
return ({
legend: createLegend(),
axis: props.Axis,
enabled: true,
getMax: function (t) {
return props.Data.length <= 1 || props.BarOrigin < t[0] || props.BarOrigin > t[1] ?
undefined : Math.max.apply(Math, __spreadArray([], __read(props.Data), false));
},
getMin: function (t) {
return props.Data.length <= 1 || props.BarOrigin < t[0] || props.BarOrigin > t[1] ?
undefined : Math.min.apply(Math, __spreadArray([], __read(props.Data), false));
},
});
}, [props.Axis, props.Data, createLegend]);
React.useEffect(function () {
if (guid == null)
return;
context.UpdateData(guid, createContextData());
}, [createContextData, guid]);
React.useEffect(function () {
if (guid == null)
return;
context.SetLegend(guid, createLegend());
}, [createLegend]);
React.useEffect(function () {
var id = context.AddData(createContextData());
setGuid(id);
return function () { context.RemoveData(id); };
}, []);
var bars = React.useMemo(function () {
// not enough data to display
if (props.Data.length === 0)
return React.createElement(React.Fragment, null);
var xValue;
switch (props.XBarOrigin) {
default:
case 'left':
xValue = props.BarOrigin;
break;
case 'right':
xValue = props.BarOrigin - props.BarWidth;
break;
case 'center':
xValue = props.BarOrigin - props.BarWidth / 2;
break;
}
var rightEdge = context.XTransformation(xValue + props.BarWidth);
var leftEdge = context.XTransformation(xValue);
var axis = GraphContext_1.AxisMap.get(props.Axis);
var yValues = __spreadArray([], __read(props.Data), false);
// Insert bottom of bar if only 1 value exists
if (yValues.length === 1)
yValues.push(context.YDomain[axis][0]);
// Sort Values in ascending order
yValues.sort(function (a, b) { return a - b; });
var newBars = [];
for (var yIndex = 0; yIndex < yValues.length - 1; yIndex++) {
// This looks backwards but isn't, asc in values === desc in pixels
var yUpper = context.YTransformation(yValues[yIndex], axis);
var yLower = context.YTransformation(yValues[yIndex + 1], axis);
var style = props.GetBarStyle == null ? __assign(__assign({}, defaultStyle), { Color: props.Color }) : __assign(__assign(__assign({}, defaultStyle), { Color: props.Color }), props.GetBarStyle([yValues[yIndex], yValues[yIndex + 1]], yIndex));
var fillProp = void 0;
switch (style.Fill) {
default:
case "Solid":
fillProp = style.Color;
break;
case "Hatched":
fillProp = "url(#".concat(guid, "_").concat(yIndex, ")");
newBars.push(React.createElement("pattern", { id: "".concat(guid, "_").concat(yIndex), width: "24", height: "24", patternUnits: "userSpaceOnUse", key: "hatch_".concat(yIndex) },
React.createElement("path", { d: "M -3 3 L 6 -6 M 0 24 L 24 0 M 21 27 L 30 18", strokeWidth: 6, stroke: style.Color })));
break;
}
newBars.push(React.createElement("rect", { key: yIndex, x: leftEdge, y: yLower, width: rightEdge - leftEdge, height: yUpper - yLower, fill: fillProp, opacity: style.Opacity, stroke: style.StrokeColor, strokeWidth: style.StrokeWidth }));
}
return newBars;
}, [props, context]);
return React.createElement("g", null, bars);
};
exports.StackedBar = StackedBar;
exports.default = exports.StackedBar;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Jhci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlHQUF5RztBQUN6RyxrQkFBa0I7QUFDbEIsRUFBRTtBQUNGLHFFQUFxRTtBQUNyRSxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLHdHQUF3RztBQUN4RyxzR0FBc0c7QUFDdEcsd0ZBQXdGO0FBQ3hGLEVBQUU7QUFDRiwwQ0FBMEM7QUFDMUMsRUFBRTtBQUNGLHdHQUF3RztBQUN4Ryx3R0FBd0c7QUFDeEcsNEVBQTRFO0FBQzVFLEVBQUU7QUFDRiw4QkFBOEI7QUFDOUIsd0dBQXdHO0FBQ3hHLCtCQUErQjtBQUMvQixtREFBbUQ7QUFDbkQsRUFBRTtBQUNGLHlHQUF5Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXpHLDZCQUErQjtBQUMvQiwrQ0FBb0Y7QUFDcEYsMkNBQXNDO0FBaUV0QyxJQUFNLFlBQVksR0FBYztJQUM1QixPQUFPLEVBQUUsR0FBRztJQUNaLFdBQVcsRUFBRSxPQUFPO0NBQ3ZCLENBQUE7QUFFTSxJQUFNLFVBQVUsR0FBRyxVQUFDLEtBQWdCO0lBQ2pDLElBQUEsS0FBQSxPQUFrQixLQUFLLENBQUMsUUFBUSxDQUFtQixTQUFTLENBQUMsSUFBQSxFQUE1RCxJQUFJLFFBQUEsRUFBRSxPQUFPLFFBQStDLENBQUM7SUFDcEUsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQywyQkFBWSxDQUFDLENBQUM7SUFFL0MsSUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUNuQyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxJQUFJO1lBQ3pDLE9BQU8sU0FBUyxDQUFDO1FBRXJCLE9BQU8sb0JBQUMsb0JBQVUsSUFDZCxFQUFFLEVBQUUsSUFBSSxFQUNSLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxFQUNuQixLQUFL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