UNPKG

@gpa-gemstone/react-graph

Version:
186 lines 19.6 kB
"use strict"; // ****************************************************************************************************** // Infobox.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: // ---------------------------------------------------------------------------------------------------- // 06/16/2023 - 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 GraphContext_1 = require("./GraphContext"); var Infobox = function (props) { var context = React.useContext(GraphContext_1.GraphContext); var _a = __read(React.useState(false), 2), isSelected = _a[0], setSelected = _a[1]; var _b = __read(React.useState({ x: props.x, y: props.y }), 2), position = _b[0], setPosition = _b[1]; var _c = __read(React.useState({ width: 100, height: 100 }), 2), dimension = _c[0], setDimensions = _c[1]; var _d = __read(React.useState(""), 2), guid = _d[0], setGuid = _d[1]; var offsetDefault = 0; // Functions var calculateX = React.useCallback(function (xArg) { var _a, _b, _c; var x = ((_a = props.usePixelPositioning) !== null && _a !== void 0 ? _a : false) ? context.XApplyPixelOffset(xArg) : context.XTransformation(xArg); // Convert x/y to upper-left corner switch (props.origin) { case "middle-right": case "lower-right": case "upper-right": { x -= (dimension.width + ((_b = props.offset) !== null && _b !== void 0 ? _b : offsetDefault)); break; } case "lower-center": case "upper-center": { x -= Math.floor(dimension.width / 2); break; } // Do-nothing case case undefined: case "middle-left": case "lower-left": case "upper-left": x += (_c = props.offset) !== null && _c !== void 0 ? _c : offsetDefault; break; } return x; }, [context.XApplyPixelOffset, context.XTransformation, props.origin, props.offset, props.usePixelPositioning, dimension]); var calculateY = React.useCallback(function (yArg) { var _a, _b, _c; var y = ((_a = props.usePixelPositioning) !== null && _a !== void 0 ? _a : false) ? context.YApplyPixelOffset(yArg) : context.YTransformation(yArg, GraphContext_1.AxisMap.get(props.axis)); // Convert x/y to upper-left corner switch (props.origin) { case undefined: case "upper-left": case "upper-right": case "upper-center": y += (_b = props.offset) !== null && _b !== void 0 ? _b : offsetDefault; break; case "lower-left": case "lower-right": case "lower-center": y -= (dimension.height + ((_c = props.offset) !== null && _c !== void 0 ? _c : offsetDefault)); break; case "middle-left": case "middle-right": y -= Math.floor(dimension.height / 2); break; } return y; }, [context.YApplyPixelOffset, context.YTransformation, props.origin, props.offset, props.usePixelPositioning, props.axis, dimension]); var onClick = React.useCallback(function (xArg, yArg) { var xP = calculateX(props.x); var xT = context.XTransformation(xArg); var yP = calculateY(props.y); var yT = context.YTransformation(yArg, GraphContext_1.AxisMap.get(props.axis)); if (xT <= xP + dimension.width && xT >= xP && yT <= yP + dimension.height && yT >= yP) { setSelected(true); } }, [props.x, props.y, calculateX, calculateY, dimension, setSelected, context.XTransformation, context.YTransformation, props.axis]); // Note: this is the only function not effected by usePixelPositioning var onMove = props.onMouseMove === undefined ? undefined : React.useCallback(function (xArg, yArg) { if (props.onMouseMove !== undefined) props.onMouseMove(xArg, yArg); }, [props.onMouseMove]); // useEffect React.useEffect(function () { var id = context.RegisterSelect({ axis: props.axis, allowSnapping: false, onRelease: function (_) { return setSelected(false); }, onPlotLeave: function (_) { return setSelected(false); }, onClick: onClick, onMove: onMove }); setGuid(id); return function () { context.RemoveSelect(id); }; }, []); React.useEffect(function () { if (guid === "") return; context.UpdateSelect(guid, { axis: props.axis, allowSnapping: false, onRelease: function (_) { return setSelected(false); }, onPlotLeave: function (_) { return setSelected(false); }, onClick: onClick, onMove: onMove }); }, [onClick, onMove, props.axis]); React.useEffect(function () { setPosition({ x: props.x, y: props.y }); }, [props.x, props.y]); React.useEffect(function () { if (props.setPosition === undefined) return; if (!isSelected && (props.x !== position.x || props.y !== position.y)) props.setPosition(position.x, position.y); }, [isSelected, position]); React.useEffect(function () { if (context.CurrentMode !== 'select') setSelected(false); }, [context.CurrentMode]); React.useEffect(function () { var _a; if (isSelected && !((_a = props.disallowSnapping) !== null && _a !== void 0 ? _a : false)) setPosition({ x: context.XHoverSnap, y: context.YHoverSnap[GraphContext_1.AxisMap.get(props.axis)] }); }, [context.XHoverSnap, context.YHoverSnap, props.axis]); React.useEffect(function () { var _a; if (isSelected && ((_a = props.disallowSnapping) !== null && _a !== void 0 ? _a : false)) setPosition({ x: context.XHover, y: context.YHover[GraphContext_1.AxisMap.get(props.axis)] }); }, [context.XHover, context.YHover, props.axis]); // Get Heights and Widths React.useEffect(function () { var domEle = document.getElementById(props.childId); if (domEle == null) { console.error("Invalid element id passed for child element in infobox ".concat(props.childId)); setDimensions({ width: 100, height: 100 }); return; } if (dimension.width === Math.ceil(domEle.clientWidth) && dimension.height === Math.ceil(domEle.clientHeight)) return; setDimensions({ width: Math.ceil(domEle.clientWidth), height: Math.ceil(domEle.clientHeight) }); }, [props.children, props.childId]); return (React.createElement("g", null, React.createElement(InfoGraphic, { x: calculateX(props.x), y: calculateY(props.y), width: dimension.width, height: dimension.height, opacity: props.opacity }), React.createElement("foreignObject", { x: calculateX(props.x), y: calculateY(props.y), width: dimension.width, height: dimension.height }, props.children), props.setPosition !== undefined && (props.x !== position.x || props.y !== position.y) ? React.createElement(InfoGraphic, { x: calculateX(position.x), y: calculateY(position.y), width: dimension.width, height: dimension.height, opacity: props.opacity }) : null)); }; var InfoGraphic = function (props) { var _a; return (React.createElement("path", { d: "M ".concat(props.x, " ").concat(props.y, " h ").concat(props.width, " v ").concat(props.height, " h -").concat(props.width, " v -").concat(props.height), stroke: 'black', style: { opacity: (_a = props.opacity) !== null && _a !== void 0 ? _a : 1 } })); }; exports.default = Infobox; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5mb2JveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9JbmZvYm94LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEseUdBQXlHO0FBQ3pHLHNCQUFzQjtBQUN0QixFQUFFO0FBQ0YscUVBQXFFO0FBQ3JFLEVBQUU7QUFDRix3R0FBd0c7QUFDeEcsd0dBQXdHO0FBQ3hHLHNHQUFzRztBQUN0Ryx3RkFBd0Y7QUFDeEYsRUFBRTtBQUNGLDBDQUEwQztBQUMxQyxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLHdHQUF3RztBQUN4Ryw0RUFBNEU7QUFDNUUsRUFBRTtBQUNGLDhCQUE4QjtBQUM5Qix3R0FBd0c7QUFDeEcseUJBQXlCO0FBQ3pCLG1EQUFtRDtBQUNuRCxFQUFFO0FBQ0YseUdBQXlHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFekcsNkJBQStCO0FBQy9CLCtDQUFrRjtBQW9CbEYsSUFBTSxPQUFPLEdBQUcsVUFBQyxLQUFzQztJQUNyRCxJQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLDJCQUFZLENBQUMsQ0FBQztJQUN6QyxJQUFBLEtBQUEsT0FBNEIsS0FBSyxDQUFDLFFBQVEsQ0FBVSxLQUFLLENBQUMsSUFBQSxFQUF6RCxVQUFVLFFBQUEsRUFBRSxXQUFXLFFBQWtDLENBQUM7SUFDM0QsSUFBQSxLQUFBLE9BQTBCLEtBQUssQ0FBQyxRQUFRLENBQXlCLEVBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFBLEVBQXpGLFFBQVEsUUFBQSxFQUFFLFdBQVcsUUFBb0UsQ0FBQztJQUMzRixJQUFBLEtBQUEsT0FBNkIsS0FBSyxDQUFDLFFBQVEsQ0FBa0MsRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUMsQ0FBQyxJQUFBLEVBQXRHLFNBQVMsUUFBQSxFQUFFLGFBQWEsUUFBOEUsQ0FBQztJQUN4RyxJQUFB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