UNPKG

@gpa-gemstone/react-graph

Version:
132 lines 15.7 kB
"use strict"; // ****************************************************************************************************** // Oval.tsx - Gbtc // // Copyright © 2024, 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/03/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; }; Object.defineProperty(exports, "__esModule", { value: true }); var helper_functions_1 = require("@gpa-gemstone/helper-functions"); var React = require("react"); var GraphContext_1 = require("./GraphContext"); var Oval = function (props) { var _a; var context = React.useContext(GraphContext_1.GraphContext); var _b = __read(React.useState(""), 2), guid = _b[0], setGuid = _b[1]; var _c = __read(React.useState(1), 2), textSize = _c[0], setTextSize = _c[1]; // Update data series information in the graph context based on circle properties React.useEffect(function () { if (guid === "") return; context.UpdateData(guid, { axis: props.Axis, legend: undefined, getMax: function (t) { return (t[0] < props.Data[0] && t[1] > props.Data[1] ? props.Data[2] : undefined); }, getMin: function (t) { return (t[0] < props.Data[0] && t[1] > props.Data[1] ? props.Data[2] : undefined); }, }); }, [props.Axis, props.Data]); // Add a new data series on component mount / removing on unmount React.useEffect(function () { var id = context.AddData({ axis: props.Axis, legend: undefined, getMax: function (t) { return (t[0] < props.Data[0] && t[1] > props.Data[1] ? props.Data[2] : undefined); }, getMin: function (t) { return (t[0] < props.Data[0] && t[1] > props.Data[1] ? props.Data[2] : undefined); }, }); setGuid(id); return function () { context.RemoveData(id); }; }, []); // Adjust text size within the oval to ensure it fits React.useEffect(function () { if (props.Text === undefined) return; var fontFamily = "Segoe UI"; var fontSizeUnit = "em"; var ovalWidth = Math.abs(context.XTransformation(props.Data[1]) - context.XTransformation(props.Data[0])) + (2 * props.Radius); var ovalHeight = 2 * props.Radius; var minSize = 0.05; var maxSize = 5; var bestSize = maxSize; var calculateTextSize = function (size) { var dX = (0, helper_functions_1.GetTextWidth)(fontFamily, size + fontSizeUnit, props.Text); var dY = (0, helper_functions_1.GetTextHeight)(fontFamily, size + fontSizeUnit, props.Text); return { dX: dX, dY: dY }; }; while (maxSize - minSize > 0.01) { var midSize = (maxSize + minSize) / 2; var _a = calculateTextSize(midSize), dX = _a.dX, dY = _a.dY; if (dX <= ovalWidth && dY <= ovalHeight) { bestSize = midSize; minSize = midSize; // Try larger } else maxSize = midSize; // Try smaller } setTextSize(bestSize); }, [props.Text, props.Radius, context.XTransformation, props.Data]); // Set up a click handler if provided in props React.useEffect(function () { if (guid === "" || props.OnClick === undefined) return; context.UpdateSelect(guid, { onClick: onClick }); }, [props.OnClick, context.UpdateFlag]); // Handle click events on the oval function onClick(xClick, yClick) { if (props.OnClick === undefined) return; // Calculate positions and determine if the click was within the oval bounds var axis = GraphContext_1.AxisMap.get(props.Axis); var xClickTransformed = context.XTransformation(xClick); var yClickTransformed = context.YTransformation(yClick, axis); var x1Transformed = context.XTransformation(props.Data[0]) - props.Radius; var x2Transformed = context.XTransformation(props.Data[1]) + props.Radius; var yTransformed = context.YTransformation(props.Data[2], axis); var isWithinHorizontalBounds = xClickTransformed >= x1Transformed && xClickTransformed <= x2Transformed; var isWithinVerticalBounds = yClickTransformed >= yTransformed - props.Radius && yClickTransformed <= yTransformed + props.Radius; if (isWithinHorizontalBounds && isWithinVerticalBounds) props.OnClick(xClick, yClick, { setYDomain: context.SetYDomain, setTDomain: context.SetXDomain }); } // Render null if coordinates are not valid, otherwise render the circle / text if (!isFinite(context.XTransformation((props.Data[0], props.Data[1]) / 2)) || !isFinite(context.YTransformation(props.Data[2], GraphContext_1.AxisMap.get(props.Axis)))) return null; return (React.createElement("g", null, React.createElement("rect", { x: context.XTransformation(props.Data[0]) - props.Radius, y: context.YTransformation(props.Data[2], GraphContext_1.AxisMap.get(props.Axis)) - props.Radius, width: Math.abs(context.XTransformation(props.Data[1]) - context.XTransformation(props.Data[0])) + (2 * props.Radius), height: 2 * props.Radius, rx: props.Radius, ry: props.Radius, fill: props.Color, opacity: props.Opacity, stroke: props.BorderColor, strokeWidth: props.BorderThickness, onClick: function (e) { return onClick(e.clientX, e.clientY); } }), props.Text !== undefined ? React.createElement("text", { fill: (_a = props.TextColor) !== null && _a !== void 0 ? _a : 'currentColor', style: { fontSize: textSize + 'em', textAnchor: 'middle', dominantBaseline: 'middle' }, y: context.YTransformation(props.Data[2], GraphContext_1.AxisMap.get(props.Axis)), x: (context.XTransformation(props.Data[0]) + context.XTransformation(props.Data[1])) / 2 }, props.Text) : null)); }; exports.default = Oval; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3ZhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9PdmFsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEseUdBQXlHO0FBQ3pHLG1CQUFtQjtBQUNuQixFQUFFO0FBQ0YscUVBQXFFO0FBQ3JFLEVBQUU7QUFDRix3R0FBd0c7QUFDeEcsd0dBQXdHO0FBQ3hHLHNHQUFzRztBQUN0Ryx3RkFBd0Y7QUFDeEYsRUFBRTtBQUNGLDBDQUEwQztBQUMxQyxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLHdHQUF3RztBQUN4Ryw0RUFBNEU7QUFDNUUsRUFBRTtBQUNGLDhCQUE4QjtBQUM5Qix3R0FBd0c7QUFDeEcsaUNBQWlDO0FBQ2pDLG1EQUFtRDtBQUNuRCxFQUFFO0FBQ0YseUdBQXlHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHekcsbUVBQTZFO0FBQzdFLDZCQUErQjtBQUMvQiwrQ0FBaUg7QUFzRWpILElBQU0sSUFBSSxHQUFHLFVBQUMsS0FBYTs7SUFDdkIsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQywyQkFBWSxDQUFDLENBQUM7SUFFekMsSUFBQSxLQUFBLE9BQWtCLEtBQUssQ0FBQyxRQUFRLENBQVMsRUFBRSxDQUFDLElBQUEsRUFBM0MsSUFBSSxRQUFBLEVBQUUsT0FBTyxRQUE4QixDQUFDO0lBQzdDLElBQUEsS0FBQSxPQUEwQixLQUFLLENBQUMsUUFBUSxDQUFTLENBQUMsQ0FBQyxJQUFBLEVBQWxELFFBQVEsUUFBQSxFQUFFLFdBQVcsUUFBNkIsQ0FBQztJQUUxRCxpRkFBaUY7SUFDakYsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNaLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDWCxPQUFPO1FBRVgsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDckIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxVQUFDLENBQUMsSUFBSyxPQUFBLENB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