@gpa-gemstone/react-graph
Version:
Interactive UI Components for GPA products
119 lines • 12.9 kB
JavaScript
;
// ******************************************************************************************************
// HeatMapChart.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:
// ----------------------------------------------------------------------------------------------------
// 09/05/2021 - G. Santos
// Generated original version of source code.
//
// ******************************************************************************************************
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;
};
Object.defineProperty(exports, "__esModule", { value: true });
var React = require("react");
var helper_functions_1 = require("@gpa-gemstone/helper-functions");
var GraphContext_1 = require("./GraphContext");
var PointNode_1 = require("./PointNode");
var HeatLegend_1 = require("./HeatLegend");
function HeatMapChart(props) {
/*
Single Line with ability to turn off and on.
*/
var _a = __read(React.useState(""), 2), guid = _a[0], setGuid = _a[1];
var _b = __read(React.useState(null), 2), data = _b[0], setData = _b[1];
var _c = __read(React.useState(0), 2), barWidth = _c[0], setBarWidth = _c[1];
var context = React.useContext(GraphContext_1.GraphContext);
var allBarBottoms = React.useMemo(function () { return context.YTransformation(context.YDomain[GraphContext_1.AxisMap.get(props.axis)][0], GraphContext_1.AxisMap.get(props.axis)); }, [context.YTransformation, context.YDomain, props.axis]);
var zLimits = React.useMemo(function () {
if (data == null)
return [0, 1];
return data.GetLimits(context.XDomain[0], context.XDomain[1], 1);
}, [data, context.XDomain]);
function getAllBarOffset() {
switch (props.barAlign) {
case 'left':
return 0;
case 'center':
return 0.5 * barWidth;
case 'right':
return barWidth;
}
return 0;
}
var allBarOffset = getAllBarOffset();
React.useEffect(function () {
if (data == null)
return;
if (props.sampleMs !== undefined) {
setBarWidth(context.XTransformation(data.minT + props.sampleMs) - context.XTransformation(data.minT));
return;
}
setBarWidth((context.XTransformation(data.maxT) - context.XTransformation(data.minT)) / data.GetFullData().length);
}, [data, context.XTransformation, props.sampleMs]);
var createLegend = React.useCallback(function () {
return React.createElement(HeatLegend_1.default, { size: 'lg', unitLabel: props.legendUnit, enabled: true, minColor: (0, helper_functions_1.HsvToHex)(props.hue, props.saturation, 1), maxColor: (0, helper_functions_1.HsvToHex)(props.hue, props.saturation, 0), minValue: zLimits[0], maxValue: zLimits[1] });
}, [props.legendUnit, zLimits, props.hue, props.saturation]);
React.useEffect(function () {
setData(new PointNode_1.PointNode(props.data));
}, [props.data]);
React.useEffect(function () {
if (guid === "")
return;
context.UpdateData(guid, {
axis: props.axis,
legend: createLegend(),
enabled: true,
getMax: function (t) { return (data == null ? -Infinity : data.GetLimits(t[0], t[1], 0)[1]); },
getMin: function (t) { return (data == null ? Infinity : data.GetLimits(t[0], t[1], 0)[0]); },
});
}, [props, data, createLegend]);
React.useEffect(function () {
var id = context.AddData({
axis: props.axis,
legend: createLegend(),
enabled: false,
getMax: function (t) { return (data == null ? -Infinity : data.GetLimits(t[0], t[1], 0)[1]); },
getMin: function (t) { return (data == null ? Infinity : data.GetLimits(t[0], t[1], 0)[0]); },
});
setGuid(id);
return function () { context.RemoveData(id); };
}, []);
return (React.createElement("g", null, data == null ? null :
data.GetFullData().map(function (pt, i) {
var _a;
var barTop = context.YTransformation(pt[1] + ((_a = props.binSize) !== null && _a !== void 0 ? _a : 0), GraphContext_1.AxisMap.get(props.axis));
var value = 1 - (pt[2] - zLimits[0]) / (zLimits[1] - zLimits[0]);
var color = (0, helper_functions_1.HsvToHex)(props.hue, props.saturation, value);
return React.createElement("rect", { key: i, x: context.XTransformation(pt[0]) - allBarOffset, y: barTop, width: barWidth, height: Math.abs(barTop - (props.binSize !== undefined ? context.YTransformation(pt[1], GraphContext_1.AxisMap.get(props.axis)) : allBarBottoms)), fill: color, stroke: color });
})));
}
exports.default = HeatMapChart;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVhdE1hcENoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0hlYXRNYXBDaGFydC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlHQUF5RztBQUN6RywyQkFBMkI7QUFDM0IsRUFBRTtBQUNGLHFFQUFxRTtBQUNyRSxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLHdHQUF3RztBQUN4RyxzR0FBc0c7QUFDdEcsd0ZBQXdGO0FBQ3hGLEVBQUU7QUFDRiwwQ0FBMEM7QUFDMUMsRUFBRTtBQUNGLHdHQUF3RztBQUN4Ryx3R0FBd0c7QUFDeEcsNEVBQTRFO0FBQzVFLEVBQUU7QUFDRiw4QkFBOEI7QUFDOUIsd0dBQXdHO0FBQ3hHLDBCQUEwQjtBQUMxQixtREFBbUQ7QUFDbkQsRUFBRTtBQUNGLHlHQUF5Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR3pHLDZCQUErQjtBQUMvQixtRUFBd0Q7QUFDeEQsK0NBQTZGO0FBQzdGLHlDQUFzQztBQUN0QywyQ0FBc0M7QUFrQnRDLFNBQVMsWUFBWSxDQUFDLEtBQWE7SUFDL0I7O01BRUU7SUFDSSxJQUFBLEtBQUEsT0FBa0IsS0FBSyxDQUFDLFFBQVEsQ0FBUyxFQUFFLENBQUMsSUFBQSxFQUEzQyxJQUFJLFFBQUEsRUFBRSxPQUFPLFFBQThCLENBQUM7SUFDN0MsSUFBQSxLQUFBLE9BQWtCLEtBQUssQ0FBQyxRQUFRLENBQWlCLElBQUksQ0FBQyxJQUFBLEVBQXJELElBQUksUUFBQSxFQUFFLE9BQU8sUUFBd0MsQ0FBQztJQUN2RCxJQUFBLEtBQUEsT0FBMEIsS0FBSyxDQUFDLFFBQVEsQ0FBUyxDQUFDLENBQUMsSUFBQSxFQUFsRCxRQUFRLFFBQUEsRUFBRSxXQUFXLFFBQTZCLENBQUM7SUFDMUQsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQywyQkFBWSxDQUFDLENBQUM7SUFFL0MsSUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBUyxjQUFNLE9BQUEsT0FBTyxD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QUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRSxJQUFNLEtBQUssR0FBRyxJQUFBLDJCQUFRLEVBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNELE9BQU8sOEJBQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUNqRyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUE7UUFDbkssQ0FBQyxDQUFDLENBRU4sQ0FDUCxDQUFDO0FBQ04sQ0FBQztBQUVELGtCQUFlLFlBQVksQ0FBQyJ9