@gpa-gemstone/react-graph
Version:
Interactive UI Components for GPA products
186 lines • 19.6 kB
JavaScript
;
// ******************************************************************************************************
// 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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