UNPKG

@gpa-gemstone/react-graph

Version:
196 lines 23.6 kB
"use strict"; // ****************************************************************************************************** // ValueAxis.tsx - Gbtc // // Copyright © 2021, 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/19/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 helper_functions_1 = require("@gpa-gemstone/helper-functions"); function ValueAxis(props) { var context = React.useContext(GraphContext_1.GraphContext); var _a = __read(React.useState([]), 2), tick = _a[0], setTick = _a[1]; var _b = __read(React.useState(0), 2), hLabel = _b[0], setHlabel = _b[1]; var _c = __read(React.useState(1), 2), ftSizeLabel = _c[0], setFtSizeLabel = _c[1]; var _d = __read(React.useState(0), 2), hAxis = _d[0], setHAxis = _d[1]; var _e = __read(React.useState(1), 2), nDigits = _e[0], setNdigits = _e[1]; var _f = __read(React.useState(1), 2), factor = _f[0], setFactor = _f[1]; React.useEffect(function () { var axis = GraphContext_1.AxisMap.get(props.axis); var dY = context.YDomain[axis][1] - context.YDomain[axis][0]; if (!isFinite(dY) || isNaN(dY)) { setTick([]); return; } var newTicks; if (dY === 0) { newTicks = [context.YDomain[axis][0]]; } else { var exp = 0; while ((dY * Math.pow(10, exp)) < 1) { exp = exp + 1; } while ((dY * Math.pow(10, exp)) > 10) { exp = exp - 1; } var scale = 1.0 / Math.pow(10, exp); if (dY * Math.pow(10, exp) < 6 && dY * Math.pow(10, exp) >= 2.5) scale = 0.5 / Math.pow(10, exp); if (dY * Math.pow(10, exp) < 2.5 && dY * Math.pow(10, exp) >= 1.2) scale = 0.2 / Math.pow(10, exp); if (dY * Math.pow(10, exp) < 1.2) scale = 0.1 / Math.pow(10, exp); var offset = Math.floor(context.YDomain[axis][0] / scale) * scale; newTicks = [offset + scale]; while (newTicks[newTicks.length - 1] < (context.YDomain[axis][1] - scale)) newTicks.push(newTicks[newTicks.length - 1] + scale); } var expF = 0; var Ymax = Math.max(Math.abs(context.YDomain[axis][0]), Math.abs(context.YDomain[axis][1])); while ((Ymax * Math.pow(10, expF)) < 1) { expF = expF + 1; } while ((Ymax * Math.pow(10, expF)) > 10) { expF = expF - 1; } expF = Math.sign(expF) * (Math.floor(Math.abs(expF) / 3)) * 3; // adjust to avoid same value on axis scenario if (dY * Math.pow(10, expF) < 0.1 && dY !== 0) expF = expF + 3; if (props.useFactor) setFactor(Math.pow(10, expF)); else setFactor(1); setTick(newTicks); }, [context.YDomain, props.useFactor, props.axis]); React.useEffect(function () { var axis = GraphContext_1.AxisMap.get(props.axis); var dY = context.YDomain[axis][1] - context.YDomain[axis][0]; dY = dY * factor; if (dY === 0) dY = Math.abs(context.YDomain[axis][0] * factor); if (dY >= 15) setNdigits(0); if (dY < 15 && dY >= 1.5) setNdigits(1); if (dY < 1.5 && dY >= 0.15) setNdigits(2); if (dY < 0.15) setNdigits(3); if (dY < 0.015) setNdigits(4); if (dY < 0.0015) setNdigits(5); if (dY === 0) setNdigits(2); }, [factor, context.YDomain, props.axis]); React.useEffect(function () { var h = 0; if (factor !== 1) h = (0, helper_functions_1.GetTextHeight)("Segoe UI", '1em', 'x' + (1 / factor).toString()); if (h !== props.hFactor) props.setHeightFactor(h); }, [factor, props.hFactor, props.setHeightFactor]); React.useEffect(function () { if (props.label === undefined) { setHlabel(0); return; } var h = (0, helper_functions_1.GetTextHeight)("Segoe UI", ftSizeLabel + 'em', props.label) + 4; setHlabel(h); }, [props.label, props.height, props.offsetTop, props.offsetBottom, ftSizeLabel]); React.useEffect(function () { var dY = Math.max.apply(Math, __spreadArray([], __read(tick.map(function (t) { return (0, helper_functions_1.GetTextWidth)("Segoe UI", '1em', (t * factor).toFixed(nDigits)); })), false)); dY = (isFinite(dY) ? dY : 0) + 8; if (dY !== hAxis) setHAxis(dY); }, [tick, nDigits]); React.useEffect(function () { if (props.hAxis !== hAxis + hLabel) props.setWidthAxis(hAxis + hLabel); }, [hAxis, hLabel, props.hAxis]); // use effect resets us in case this becomes unmounted React.useEffect(function () { return function () { return props.setWidthAxis(0); }; }, []); React.useEffect(function () { if (props.label === undefined) return; var h = (0, helper_functions_1.GetTextWidth)("Segoe UI", '1em', props.label); var size = 1; while (h > props.height && size > 0.1) { size = size - 0.1; h = (0, helper_functions_1.GetTextWidth)("Segoe UI", size + 'em', props.label); } if (ftSizeLabel !== size) setFtSizeLabel(size); }, [props.label, props.height]); var leftPosition = React.useMemo(function () { if (props.axis === undefined || props.axis === 'left') return props.offsetLeft; else return props.width - props.offsetRight; }, [props.offsetLeft, props.offsetRight, props.width, props.axis]); var tickDirection = React.useMemo(function () { if (props.axis === undefined || props.axis === 'left') return -1; else return 1; }, [props.axis]); return (React.createElement("g", null, React.createElement("path", { stroke: 'currentColor', style: { strokeWidth: 1, transition: 'd 0.5s' }, d: "M ".concat(leftPosition, " ").concat(props.height - props.offsetBottom + 8, " V ").concat(props.offsetTop) }), React.createElement("path", { stroke: 'currentColor', style: { strokeWidth: 1, transition: 'd 0.5s' }, d: "M ".concat(leftPosition, " ").concat(props.offsetTop, " h ").concat(tickDirection * 8) }), tick.map(function (l, i) { var _a; return React.createElement("path", { key: i, stroke: ((props.axis === undefined || props.axis === 'left') ? 'lightgrey' : 'darkgrey'), strokeOpacity: ((_a = props.showGrid) !== null && _a !== void 0 ? _a : false) ? '0.8' : '0.0', style: { strokeWidth: 1, transition: 'd 0.5s' }, d: "M ".concat(props.offsetLeft, " ").concat(context.YTransformation(l, GraphContext_1.AxisMap.get(props.axis)), " h ").concat(props.width - props.offsetLeft - props.offsetRight) }); }), tick.map(function (l, i) { return React.createElement("path", { key: i, stroke: 'currentColor', style: { strokeWidth: 1, transition: 'd 1s' }, d: "M ".concat(leftPosition, " ").concat(context.YTransformation(l, GraphContext_1.AxisMap.get(props.axis)), " h ").concat(tickDirection * 6) }); }), tick.map(function (l, i) { return React.createElement("text", { fill: 'currentColor', key: i, style: { fontSize: '1em', textAnchor: (props.axis === undefined || props.axis === 'left') ? 'end' : 'start', transition: 'x 0.5s, y 0.5s' }, dominantBaseline: 'middle', x: leftPosition + tickDirection * 8, y: context.YTransformation(l, GraphContext_1.AxisMap.get(props.axis)) }, (l * factor).toFixed(nDigits)); }), props.label !== undefined ? React.createElement("text", { fill: 'currentColor', style: { fontSize: ftSizeLabel + 'em', textAnchor: 'middle' }, dominantBaseline: 'text-bottom', transform: "rotate(".concat(tickDirection * 90, ",").concat(leftPosition + tickDirection * (hAxis + 4), ",").concat((props.offsetTop - props.offsetBottom + props.height) / 2.0, ")"), x: leftPosition + tickDirection * (hAxis + 4), y: (props.offsetTop - props.offsetBottom + props.height) / 2.0 }, props.label) : null, factor !== 1 ? React.createElement("text", { fill: 'currentColor', style: { fontSize: '1em' }, x: leftPosition, y: props.offsetTop - 5 }, "x", 1 / factor) : null)); } exports.default = React.memo(ValueAxis); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWVZhbHVlQXhpcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ZVmFsdWVBeGlzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUMseUdBQXlHO0FBQzFHLHdCQUF3QjtBQUN4QixFQUFFO0FBQ0YscUVBQXFFO0FBQ3JFLEVBQUU7QUFDRix3R0FBd0c7QUFDeEcsd0dBQXdHO0FBQ3hHLHNHQUFzRztBQUN0Ryx3RkFBd0Y7QUFDeEYsRUFBRTtBQUNGLDBDQUEwQztBQUMxQyxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLHdHQUF3RztBQUN4Ryw0RUFBNEU7QUFDNUUsRUFBRTtBQUNGLDhCQUE4QjtBQUM5Qix3R0FBd0c7QUFDeEcsMkJBQTJCO0FBQzNCLG1EQUFtRDtBQUNuRCxFQUFFO0FBQ0YseUdBQXlHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFekcsNkJBQStCO0FBQy9CLCtDQUFvRTtBQUNwRSxtRUFBMkU7QUFtQjNFLFNBQVMsU0FBUyxDQUFDLEtBQWE7SUFDOUIsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQywyQkFBWSxDQUFDLENBQUE7SUFDeEMsSUFBQSxLQUFBLE9BQWlCLEtBQUssQ0FBQyxRQUFRLENBQVcsRUFBRSxDQUFDLElBQUEsRUFBNUMsSUFBSSxRQUFBLEVBQUMsT0FBTyxRQUFnQyxDQUFDO0lBRTlDLElBQUEsS0FBQSxPQUFzQixLQUFLLENBQUMsUUFBUSxDQUFTLENBQUMsQ0FBQyxJQUFBLEVBQTlDLE1BQU0sUUFBQSxFQUFFLFNBQVMsUUFBNkIsQ0FBQztJQUNoRCxJQUFBLEtBQUEsT0FBZ0MsS0FBSyxDQUFDLFFBQVEsQ0FBUyxDQUFDLENBQUMsSUFBQSxFQUF4RCxXQUFXLFFBQUEsRUFBRSxjQUFjLFFBQTZCLENBQUM7SUFDMUQsSUFBQSxLQUFBLE9BQW9CLEtBQUssQ0FBQyxRQUFRLENBQVMsQ0FBQyxDQUFDLElBQUEsRUFBNUMsS0FBSyxRQUFBLEVBQUUsUUFBUSxRQUE2QixD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