UNPKG

@gpa-gemstone/react-graph

Version:
129 lines 14.9 kB
"use strict"; // ****************************************************************************************************** // XValueAxis.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: // ---------------------------------------------------------------------------------------------------- // 10/22/2024 - Preston Crawford // 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 XValueAxis(props) { var _a, _b, _c, _d; var context = React.useContext(GraphContext_1.GraphContext); var _e = __read(React.useState([]), 2), tick = _e[0], setTick = _e[1]; var _f = __read(React.useState(0), 2), hLabel = _f[0], setHlabel = _f[1]; var _g = __read(React.useState(0), 2), hAxis = _g[0], setHAxis = _g[1]; var _h = __read(React.useState(props.label), 2), title = _h[0], setTitle = _h[1]; var _j = __read(React.useState(0), 2), decimalPlaces = _j[0], setDecimalPlaces = _j[1]; // Adjust space for X Axis labels React.useEffect(function () { setHlabel(title != null ? (0, helper_functions_1.GetTextHeight)('Segoe UI', '1em', title) : 0); }, [title]); // Adjust axis title React.useEffect(function () { var _a; setTitle((_a = props.label) !== null && _a !== void 0 ? _a : ''); }, [props.label]); //Calculate ticks React.useEffect(function () { var deltaX = context.XDomain[1] - context.XDomain[0]; if (deltaX === 0) return; var _a = calculateTickInterval(context.XDomain[0], context.XDomain[1]), tickInterval = _a.tickInterval, decimalPlaces = _a.decimalPlaces; var startTick = Math.ceil(context.XDomain[0] / tickInterval) * tickInterval; var endTick = context.XDomain[1]; var newTicks = []; for (var t = startTick; t <= endTick; t += tickInterval) { newTicks.push(t); } setTick(newTicks); setDecimalPlaces(decimalPlaces); }, [context.XDomain]); //Adjust spacing for tick labels React.useEffect(function () { var maxLabelHeight = Math.max.apply(Math, __spreadArray([], __read(tick.map(function (t) { return (0, helper_functions_1.GetTextHeight)('Segoe UI', '1em', formatNumber(t, decimalPlaces)); })), false)); var dX = (isFinite(maxLabelHeight) ? maxLabelHeight : 0) + 12; setHAxis(dX); }, [tick, decimalPlaces]); //Adjust axis height React.useEffect(function () { if (hAxis + hLabel !== props.heightAxis) props.setHeight(hAxis + hLabel); }, [hAxis, hLabel, props.heightAxis]); return (React.createElement("g", null, React.createElement("path", { stroke: "currentColor", style: { strokeWidth: 1 }, d: "M ".concat(props.offsetLeft - (((_a = props.showLeftMostTick) !== null && _a !== void 0 ? _a : true) ? 0 : 8), " ").concat(props.height - props.offsetBottom, " H ").concat(props.width - props.offsetRight + (((_b = props.showRightMostTick) !== null && _b !== void 0 ? _b : true) ? 0 : 8)) }), ((_c = props.showLeftMostTick) !== null && _c !== void 0 ? _c : true) ? (React.createElement("path", { stroke: "currentColor", style: { strokeWidth: 1 }, d: "M ".concat(props.offsetLeft, " ").concat(props.height - props.offsetBottom, " v 8") })) : null, ((_d = props.showRightMostTick) !== null && _d !== void 0 ? _d : true) ? (React.createElement("path", { stroke: "currentColor", style: { strokeWidth: 1 }, d: "M ".concat(props.width - props.offsetRight, " ").concat(props.height - props.offsetBottom, " v 8") })) : null, (React.createElement(React.Fragment, null, tick.map(function (l, i) { return (React.createElement("path", { key: i, stroke: "currentColor", style: { strokeWidth: 1, transition: 'd 0.5s' }, d: "M ".concat(context.XTransformation(l), " ").concat(props.height - props.offsetBottom + 6, " v -6") })); }), tick.map(function (l, i) { return (React.createElement("text", { fill: "currentColor", key: i, style: { fontSize: '1em', textAnchor: 'middle', dominantBaseline: 'hanging', transition: 'x 0.5s, y 0.5s', }, y: props.height - props.offsetBottom + 8, x: context.XTransformation(l) }, formatNumber(l, decimalPlaces))); }))), title != null ? (React.createElement("text", { fill: "currentColor", style: { fontSize: '1em', textAnchor: 'middle', dominantBaseline: 'middle' }, x: props.offsetLeft + (props.width - props.offsetLeft - props.offsetRight) / 2, y: props.height - props.offsetBottom + hAxis }, title)) : null)); } //helper functions var formatNumber = function (value, decimalPlaces) { return value.toFixed(decimalPlaces); }; var calculateTickInterval = function (min, max) { var range = max - min; var desiredTicks = 7; var rawTickInterval = range / desiredTicks; var exponent = Math.floor(Math.log10(rawTickInterval)); var fraction = rawTickInterval / Math.pow(10, exponent); var niceFraction; if (fraction <= 1) niceFraction = 1; else if (fraction <= 2) niceFraction = 2; else if (fraction <= 5) niceFraction = 5; else niceFraction = 10; var tickInterval = niceFraction * Math.pow(10, exponent); var decimalPlaces = Math.max(0, -Math.floor(Math.log10(tickInterval))); return { tickInterval: tickInterval, decimalPlaces: decimalPlaces }; }; exports.default = React.memo(XValueAxis); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWFZhbHVlQXhpcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9YVmFsdWVBeGlzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEseUdBQXlHO0FBQ3pHLHlCQUF5QjtBQUN6QixFQUFFO0FBQ0YscUVBQXFFO0FBQ3JFLEVBQUU7QUFDRix3R0FBd0c7QUFDeEcsd0dBQXdHO0FBQ3hHLHNHQUFzRztBQUN0Ryx3RkFBd0Y7QUFDeEYsRUFBRTtBQUNGLDBDQUEwQztBQUMxQyxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLHdHQUF3RztBQUN4Ryw0RUFBNEU7QUFDNUUsRUFBRTtBQUNGLDhCQUE4QjtBQUM5Qix3R0FBd0c7QUFDeEcsaUNBQWlDO0FBQ2pDLG1EQUFtRDtBQUNuRCxFQUFFO0FBQ0YseUdBQXlHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFekcsNkJBQStCO0FBQy9CLCtDQUE4QztBQUM5QyxtRUFBK0Q7QUFlL0QsU0FBUyxVQUFVLENBQUMsS0FBYTs7SUFDN0IsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQywyQkFBWSxDQUFDLENBQUM7SUFDekMsSUFBQSxLQUFBLE9BQWtCLEtBQUssQ0FBQyxRQUFRLENBQVcsRUFBRSxDQUFDLElBQUEsRUFBN0MsSUFBSSxRQUFBLEVBQUUsT0FBTyxRQUFnQyxDQUFDO0lBQy9DLElBQUEsS0FBQSxPQUFzQixLQUFLLENBQUMsUUFBUSxDQUFTLENBQUMsQ0FBQyxJQUFBLEVBQTlDLE1BQU0sUUFBQSxFQUFFLFNBQVMsUUFBNkIsQ0FBQztJQUNoRCxJQUFBLEtBQUEsT0FBb0IsS0FBSyxDQUFDLFFBQVEsQ0FBUyxDQUFDLENBQUMsSUFBQSxFQUE1QyxLQUFLLFFBQUEsRUFBRSxRQUFRLFFBQTZCLENBQUM7SUFDOUMsSUFBQSxLQUFBLE9BQW9CLEtBQUssQ0FBQyxRQUFRLENBQXFCLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBQSxFQUFsRSxLQUFLLFFBQUEsRUFBRSxR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