@gpa-gemstone/react-graph
Version:
Interactive UI Components for GPA products
150 lines • 18.3 kB
JavaScript
;
// ******************************************************************************************************
// LineWithThreshold.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:
// ----------------------------------------------------------------------------------------------------
// 03/24/2021 - C Lackner
// 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;
};
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 });
var React = require("react");
var GraphContext_1 = require("./GraphContext");
var moment = require("moment");
var PointNode_1 = require("./PointNode");
var helper_functions_1 = require("@gpa-gemstone/helper-functions");
var DataLegend_1 = require("./DataLegend");
function LineWithThreshold(props) {
var _a;
/*
Single Line with ability to turn off and on.
*/
var _b = __read(React.useState(""), 2), guid = _b[0], setGuid = _b[1];
var _c = __read(React.useState([NaN, NaN]), 2), highlight = _c[0], setHighlight = _c[1];
var _d = __read(React.useState(true), 2), enabled = _d[0], setEnabled = _d[1];
var _e = __read(React.useState(0), 2), wLegend = _e[0], setWLegend = _e[1];
var _f = __read(React.useState(null), 2), data = _f[0], setData = _f[1];
var _g = __read(React.useState([NaN, NaN]), 2), threshHoldLimits = _g[0], setThresholdLimits = _g[1];
var context = React.useContext(GraphContext_1.GraphContext);
React.useEffect(function () {
if (guid === "")
return;
context.UpdateData(guid, {
legend: createLegend(),
getMax: function (t) { return (data == null || !enabled ? -Infinity : Math.max(data.GetLimits(t[0], t[1])[1], threshHoldLimits[1])); },
getMin: function (t) { return (data == null || !enabled ? Infinity : Math.min(data.GetLimits(t[0], t[1])[0], threshHoldLimits[0])); },
});
}, [props, data, enabled]);
React.useEffect(function () {
if (props.data.length === 0 || isNaN(context.XHover) || data === null)
setHighlight([NaN, NaN]);
else {
var point = data.GetPoint(context.XHover);
if (point != null)
setHighlight(point);
}
}, [data, context.XHover]);
React.useEffect(function () {
if (context.MassEnableCommand.command === "enable-all")
setEnabled(true);
else if (context.MassEnableCommand.command === "disable-others")
setEnabled(guid === context.MassEnableCommand.requester);
}, [context.MassEnableCommand]);
React.useEffect(function () {
setData(new PointNode_1.PointNode(props.data));
}, [props.data]);
React.useEffect(function () {
if (guid === "")
return;
context.SetLegend(guid, createLegend());
}, [highlight, enabled, wLegend]);
React.useEffect(function () {
if (props.legend === undefined)
return;
if (props.highlightHover === undefined) {
setWLegend((0, helper_functions_1.GetTextWidth)("Segoe UI", '1em', props.legend) + 45);
return;
}
var txt = props.legend + " (".concat(moment().format('MM/DD/YY hh:mm:ss'), ": ").concat((-99.999999).toPrecision(8), ")");
setWLegend((0, helper_functions_1.GetTextWidth)("Segoe UI", '1em', txt) + 45);
}, [props.legend, props.highlightHover]);
React.useEffect(function () {
setGuid(context.AddData({
legend: createLegend(),
getMax: function (t) { return (data == null || !enabled ? -Infinity : Math.max(data.GetLimits(t[0], t[1])[1], threshHoldLimits[1])); },
getMin: function (t) { return (data == null || !enabled ? Infinity : Math.min(data.GetLimits(t[0], t[1])[0], threshHoldLimits[0])); },
}));
return function () { context.RemoveData(guid); };
}, []);
React.useEffect(function () {
setThresholdLimits([Math.min.apply(Math, __spreadArray([], __read(props.threshHolds.map(function (t) { return t.Value; })), false)), Math.max.apply(Math, __spreadArray([], __read(props.threshHolds.map(function (t) { return t.Value; })), false))]);
}, [props.threshHolds]);
function createLegend() {
var _a;
if (props.legend === undefined || guid === "")
return undefined;
var txt = props.legend;
if (((_a = props.highlightHover) !== null && _a !== void 0 ? _a : false) && !isNaN(highlight[0]) && !isNaN(highlight[1]))
txt = txt + " (".concat(moment.utc(highlight[0]).format('MM/DD/YY hh:mm:ss'), ": ").concat(highlight[1].toPrecision(6), ")");
return React.createElement(DataLegend_1.default, { id: guid, label: txt, color: props.color, legendSymbol: props.lineStyle, setEnabled: setEnabled, enabled: enabled, hasNoData: data == null });
}
function generateData() {
var result = "M ";
if (data == null)
return "";
result = result + data.GetFullData().map(function (pt, _) {
var x = context.XTransformation(pt[0]);
var y = context.YTransformation(pt[1], GraphContext_1.AxisMap.get(props.axis));
return "".concat(x, ",").concat(y);
}).join(" L ");
return result;
}
return (enabled ?
React.createElement("g", null,
React.createElement("path", { d: generateData(), style: { fill: 'none', strokeWidth: 3, stroke: props.color, transition: 'd 0.5s' }, strokeDasharray: GraphContext_1.LineMap.get(props.lineStyle) }),
data != null ? data.GetFullData().map(function (pt, i) { return React.createElement("circle", { key: i, r: 3, cx: context.XTransformation(pt[0]), cy: context.YTransformation(pt[1], GraphContext_1.AxisMap.get(props.axis)), fill: props.color, stroke: 'black', style: { opacity: 0.8, transition: 'cx 0.5s,cy 0.5s' } }); }) : null,
((_a = props.highlightHover) !== null && _a !== void 0 ? _a : false) && !isNaN(highlight[0]) && !isNaN(highlight[1]) ?
React.createElement("circle", { r: 5, cx: context.XTransformation(highlight[0]), cy: context.YTransformation(highlight[1], GraphContext_1.AxisMap.get(props.axis)), fill: props.color, stroke: 'black', style: { opacity: 0.8, transition: 'cx 0.5s,cy 0.5s' } }) : null,
props.threshHolds.map(function (t, i) { return React.createElement("path", { key: i, d: "M ".concat(context.XTransformation(context.XDomain[0]), ",").concat(context.YTransformation(t.Value, GraphContext_1.AxisMap.get(props.axis)), " H ").concat(context.XTransformation(context.XDomain[1])), style: { fill: 'none', strokeWidth: 3, stroke: t.Color, transition: 'd 0.5s' }, strokeDasharray: '10,5' }); })) : null);
}
exports.default = LineWithThreshold;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluZVdpdGhUaHJlc2hvbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTGluZVdpdGhUaHJlc2hvbGQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx5R0FBeUc7QUFDekcsZ0NBQWdDO0FBQ2hDLEVBQUU7QUFDRixxRUFBcUU7QUFDckUsRUFBRTtBQUNGLHdHQUF3RztBQUN4Ryx3R0FBd0c7QUFDeEcsc0dBQXNHO0FBQ3RHLHdGQUF3RjtBQUN4RixFQUFFO0FBQ0YsMENBQTBDO0FBQzFDLEVBQUU7QUFDRix3R0FBd0c7QUFDeEcsd0dBQXdHO0FBQ3hHLDRFQUE0RTtBQUM1RSxFQUFFO0FBQ0YsOEJBQThCO0FBQzlCLHdHQUF3RztBQUN4RywwQkFBMEI7QUFDMUIsbURBQW1EO0FBQ25ELEVBQUU7QUFDRix5R0FBeUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUd6Ryw2QkFBK0I7QUFFL0IsK0NBQTJGO0FBQzNGLCtCQUFpQztBQUNqQyx5Q0FBc0M7QUFDdEMsbUVBQTREO0FBRTVELDJDQUFzQztBQVl0QyxTQUFTLGlCQUFpQixDQUFDLEtBQWE7O0lBQ3RDOztNQUVFO0lBQ0ksSUFBQSxLQUFBLE9BQWtCLEtBQUssQ0FBQyxRQUFRLENBQVMsRUFBRSxDQUFDLElBQUEsRUFBM0MsSUFBSSxRQUFBLEVBQUUsT0FBTyxRQUE4QixDQUFDO0lBQzdDLElBQUEsS0FBQSxPQUE0QixLQUFLLENBQUMsUUFBUSxDQUFtQixDQUFDLEdBQUcsRUFBQyxHQUFHLENBQUMsQ0FBQyxJQUFBLEVBQXRFLFNBQVMsUUFBQSxFQUFFLFlBQVksUUFBK0MsQ0FBQztJQUN4RSxJQUFBLEtBQUEsT0FBd0IsS0FBSyxDQUFDLFFBQVEsQ0FBVSxJQUFJLENBQUMsSUFBQSxFQUFwRCxPQUFPLFFBQUEsRUFBRSxVQUFVLFFBQWlDLENBQUM7SUFDdEQsSUFBQSxLQUFBLE9BQXdCLEtBQUssQ0FBQyxRQUFRLENBQVMsQ0FBQyxDQUFDLElBQUEsRUFB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