@gpa-gemstone/react-graph
Version:
Interactive UI Components for GPA products
218 lines • 30.7 kB
JavaScript
;
// ******************************************************************************************************
// InteractiveButtons.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:
// ----------------------------------------------------------------------------------------------------
// 03/18/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;
};
Object.defineProperty(exports, "__esModule", { value: true });
var React = require("react");
var gpa_symbols_1 = require("@gpa-gemstone/gpa-symbols");
var Button_1 = require("./Button");
var heightPerButton = 25;
var InteractiveButtons = React.memo(function (props) {
var _a, _b;
var btnCleanup = React.useRef(undefined);
var _c = __read(React.useState(React.createElement(React.Fragment, null, gpa_symbols_1.Point)), 2), selectIcon = _c[0], setSelectIcon = _c[1];
var _d = __read(React.useState((_a = props.holdOpen) !== null && _a !== void 0 ? _a : false), 2), expand = _d[0], setExpand = _d[1];
var _e = __read(React.useState(undefined), 2), currentSelect = _e[0], setCurrentSelect = _e[1];
var _f = __read(React.useMemo(function () {
var _a;
var nButtons = (((_a = props.holdOpen) !== null && _a !== void 0 ? _a : false) ? 1 : 0) +
(props.showZoom ? 3 : 0) +
(props.showPan ? 1 : 0) +
(props.showReset ? 1 : 0) +
(props.showSelect ? 1 : 0) +
(props.showDownload ? 1 : 0) +
(props.showCapture ? 1 : 0) +
((props.children == null) ? 0 : React.Children.count(props.children));
var buttonsAllowed = Math.floor((props.heightAvaliable - 20) / heightPerButton);
var rows = Math.ceil(nButtons / buttonsAllowed);
var width = 20 * rows;
nButtons = Math.min(nButtons, buttonsAllowed);
return [nButtons, rows, heightPerButton * (nButtons - 1), width];
}, [props.holdOpen, props.showZoom, props.showPan, props.showReset, props.showSelect, props.showDownload, props.showCapture, props.children]), 4), nButtons = _f[0], nRows = _f[1], height = _f[2], width = _f[3];
var setBtnAndSelect = React.useCallback(function (newIcon, id) {
setSelectIcon(newIcon);
setCurrentSelect(id);
props.setSelection('select');
collaspeMenu();
}, [props.setSelection]);
var openTray = React.useCallback(function (evt) {
evt.stopPropagation();
setExpand(true);
}, [setExpand]);
var collaspeMenu = React.useCallback(function () {
var _a;
if (!((_a = props.holdOpen) !== null && _a !== void 0 ? _a : false))
setExpand(false);
}, [props.holdOpen]);
var displayIcon = React.useMemo(function () {
switch (props.currentSelection) {
default:
case 'pan': return gpa_symbols_1.Pan;
case 'zoom-rectangular': return gpa_symbols_1.MagnifyingGlass;
case 'zoom-vertical': return "\u2016";
case 'zoom-horizontal': return "\u2550";
case 'select': return selectIcon;
}
}, [selectIcon, props.currentSelection]);
React.useEffect(function () { if (expand)
props.setWidth(width);
else
props.setWidth(20); }, [width, expand]);
if (nButtons === 0)
return null;
if (nButtons === 1 || !expand)
return (React.createElement("g", null,
React.createElement("circle", { stroke: 'black', onClick: openTray, r: 10, cx: props.x, cy: props.y, style: { fill: '#002eff', pointerEvents: 'all' }, onMouseDown: function (evt) { return evt.stopPropagation(); }, onMouseUp: function (evt) { return evt.stopPropagation(); } }),
React.createElement("text", { fill: 'black', style: { fontSize: '1em', textAnchor: 'middle', dominantBaseline: 'middle' }, x: props.x, y: props.y }, displayIcon)));
var symbols = [[]];
var symbolNames = [[]];
if ((_b = props.holdOpen) !== null && _b !== void 0 ? _b : false) {
if (symbols[symbols.length - 1].length < nButtons) {
symbols[symbols.length - 1].push(React.createElement(Button_1.default, { onClick: function () { return setExpand(false); } }, "^"));
symbolNames[symbols.length - 1].push('collaspe');
}
else {
symbols.push([React.createElement(Button_1.default, { onClick: function () { return setExpand(false); } }, "^")]);
symbolNames.push(['collaspe']);
}
}
if (props.showZoom) {
if (symbols[symbols.length - 1].length < nButtons) {
symbolNames[symbols.length - 1].push('zoom-rectangular');
symbols[symbols.length - 1].push(React.createElement(Button_1.default, { onClick: function () { props.setSelection('zoom-rectangular'); collaspeMenu(); } }, gpa_symbols_1.MagnifyingGlass));
}
else {
symbolNames.push(['zoom-rectangular']);
symbols.push([React.createElement(Button_1.default, { onClick: function () { props.setSelection('zoom-rectangular'); collaspeMenu(); } }, gpa_symbols_1.MagnifyingGlass)]);
}
if (symbols[symbols.length - 1].length < nButtons) {
symbolNames[symbols.length - 1].push('zoom-vertical');
symbols[symbols.length - 1].push(React.createElement(Button_1.default, { onClick: function () { props.setSelection('zoom-vertical'); collaspeMenu(); } }, "\u2016"));
}
else {
symbolNames.push(['zoom-vertical']);
symbols.push([React.createElement(Button_1.default, { onClick: function () { props.setSelection('zoom-vertical'); collaspeMenu(); } }, "\u2016")]);
}
if (symbols[symbols.length - 1].length < nButtons) {
symbolNames[symbols.length - 1].push('zoom-horizontal');
symbols[symbols.length - 1].push(React.createElement(Button_1.default, { onClick: function () { props.setSelection('zoom-horizontal'); collaspeMenu(); } }, "\u2550"));
}
else {
symbolNames.push(['zoom-horizontal']);
symbols.push([React.createElement(Button_1.default, { onClick: function () { props.setSelection('zoom-horizontal'); collaspeMenu(); } }, "\u2550")]);
}
}
if (props.showPan && symbols[symbols.length - 1].length < nButtons) {
symbolNames[symbols.length - 1].push('pan');
symbols[symbols.length - 1].push(React.createElement(Button_1.default, { onClick: function () { props.setSelection('pan'); collaspeMenu(); } }, gpa_symbols_1.Pan));
}
else if (props.showPan) {
symbolNames.push(['pan']);
symbols.push([React.createElement(Button_1.default, { onClick: function () { props.setSelection('pan'); collaspeMenu(); } }, gpa_symbols_1.Pan)]);
}
if (props.showSelect && symbols[symbols.length - 1].length < nButtons) {
symbolNames[symbols.length - 1].push('select');
symbols[symbols.length - 1].push(React.createElement(Button_1.default, { isSelect: true, onClick: function () { setBtnAndSelect(React.createElement(React.Fragment, null, gpa_symbols_1.Point), 'select'); } }, gpa_symbols_1.Point));
}
else if (props.showSelect) {
symbolNames.push(['select']);
symbols.push([React.createElement(Button_1.default, { isSelect: true, onClick: function () { setBtnAndSelect(React.createElement(React.Fragment, null, gpa_symbols_1.Point), 'select'); } }, gpa_symbols_1.Point)]);
}
if (props.showReset && symbols[symbols.length - 1].length < nButtons) {
symbolNames[symbols.length - 1].push('reset');
symbols[symbols.length - 1].push(React.createElement(Button_1.default, { onClick: function () { collaspeMenu(); props.setSelection('reset'); } }, gpa_symbols_1.House));
}
else if (props.showReset) {
symbolNames.push(['reset']);
symbols.push([React.createElement(Button_1.default, { onClick: function () { collaspeMenu(); props.setSelection('reset'); } }, gpa_symbols_1.House)]);
}
if (props.showDownload && symbols[symbols.length - 1].length < nButtons) {
symbolNames[symbols.length - 1].push('download');
symbols[symbols.length - 1].push(React.createElement(Button_1.default, { onClick: function () { collaspeMenu(); props.setSelection('download'); } }, gpa_symbols_1.InputNumbers));
}
else if (props.showDownload) {
symbolNames.push(['download']);
symbols.push([React.createElement(Button_1.default, { onClick: function () { collaspeMenu(); props.setSelection('download'); } }, gpa_symbols_1.InputNumbers)]);
}
if (props.showCapture && symbols[symbols.length - 1].length < nButtons) {
symbolNames[symbols.length - 1].push('capture');
symbols[symbols.length - 1].push(React.createElement(Button_1.default, { onClick: function () { collaspeMenu(); props.setSelection('capture'); } }, gpa_symbols_1.Scroll));
}
else if (props.showCapture) {
symbolNames.push(['capture']);
symbols.push([React.createElement(Button_1.default, { onClick: function () { collaspeMenu(); props.setSelection('capture'); } }, gpa_symbols_1.Scroll)]);
}
var customButtonsIndex = symbols.length - 1;
React.Children.forEach(props.children, function (element, index) {
if (symbols[symbols.length - 1].length < nButtons && React.isValidElement(element) && element.type === Button_1.default) {
symbols[symbols.length - 1].push(element);
symbolNames[symbols.length - 1].push('custom-' + index);
}
else if (React.isValidElement(element) && element.type === Button_1.default) {
symbols.push([element]);
symbolNames.push(['custom-' + index]);
}
});
var path = "M ".concat(props.x - 10, " ").concat(props.y, " A 10 10 90 0 1 ").concat(props.x, " ").concat(props.y - 10, " h ").concat(width - 20, " A 10 10 90 0 1 ").concat(props.x + width - 10, " ").concat(props.y, " v ").concat(height, " A 10 10 90 0 1 ").concat(props.x + width - 20, " ").concat(props.y + height + 10, " h ").concat(-width + 20, " A 10 10 90 0 1 ").concat(props.x - 10, " ").concat(props.y + height, " v ").concat(-height);
return (React.createElement("g", { style: { cursor: 'default' }, "data-html2canvas-ignore": "true" },
React.createElement("path", { d: path, style: {
fill: '#1e90ff'
} }),
symbols.map(function (r, j) { return React.createElement(React.Fragment, null,
" ",
r.map(function (s, i) {
return React.createElement(CircleButton, { key: i, selectId: symbolNames[j][i], x: props.x + j * 20, y: props.y + i * heightPerButton, active: i < customButtonsIndex ? (props.currentSelection === symbolNames[j][i] && (props.currentSelection !== 'select' || currentSelect === undefined)) :
props.currentSelection === 'select' && currentSelect === symbolNames[j][i], button: s, btnCleanup: btnCleanup, setSelectIcon: !symbolNames[j][i].startsWith('custom') ? undefined : setBtnAndSelect });
})); }),
React.createElement("path", { d: path, stroke: 'black' })));
});
function CircleButton(props) {
return (React.createElement(React.Fragment, null,
React.createElement("circle", { r: 10, cx: props.x, cy: props.y, style: { fill: (props.active ? '#002eff' : '#1e90ff'), pointerEvents: 'all' }, onMouseDown: function (evt) { return evt.stopPropagation(); }, onClick: function (evt) {
var _a;
evt.stopPropagation();
if ((props.setSelectIcon !== undefined) && ((_a = props.button.props.isSelect) !== null && _a !== void 0 ? _a : false))
props.setSelectIcon(props.button.props.children, props.selectId);
if (props.btnCleanup.current !== undefined)
props.btnCleanup.current();
props.btnCleanup.current = props.button.props.onClick();
}, onMouseUp: function (evt) { return evt.stopPropagation(); } }),
React.createElement("text", { fill: 'black', style: { fontSize: '1em', textAnchor: 'middle', dominantBaseline: 'middle' }, x: props.x, y: props.y }, props.button)));
}
exports.default = InteractiveButtons;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3RpdmVCdXR0b25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0ludGVyYWN0aXZlQnV0dG9ucy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlHQUF5RztBQUN6RyxpQ0FBaUM7QUFDakMsRUFBRTtBQUNGLHFFQUFxRTtBQUNyRSxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLHdHQUF3RztBQUN4RyxzR0FBc0c7QUFDdEcsd0ZBQXdGO0FBQ3hGLEVBQUU7QUFDRiwwQ0FBMEM7QUFDMUMsRUFBRTtBQUNGLHdHQUF3RztBQUN4Ryx3R0FBd0c7QUFDeEcsNEVBQTRFO0FBQzVFLEVBQUU7QUFDRiw4QkFBOEI7QUFDOUIsd0dBQXdHO0FBQ3hHLDBCQUEwQjtBQUMxQixtREFBbUQ7QUFDbkQsRUFBRTtBQUNGLHlHQUF5Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXpHLDZCQUErQjtBQUMvQix5REFBa0c7QUFFbEcsbUNBQTZCO0FBc0I3QixJQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFFM0IsSUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQUMsS0FBYTs7SUFDaEQsSUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBVSxTQUFTLENBQUMsQ0FBQztJQUM5QyxJQUFBLEtBQUEsT0FBOEIsS0FBSyxDQUFDLFFBQVEsQ0FBcUIsMENBQUcsbUJBQUssQ0FBSSxDQUFDLElBQUEsRUFBN0UsVUFBVSxRQUFBLEVBQUUsYUFBYSxRQUFvRCxDQUFDO0lBQy9FLElBQUEsS0FBQSxPQUFzQixLQUFLLENBQUMsUUFBUSxDQUFVLE1BQUEsS0FBSyxDQUFDLFFBQVEsbUNBQUksS0FBSyxDQUFDLElBQUEsRUFBckUsTUFBTSxRQUFBLEVBQUUsU0FBUyxRQUFvRCxDQUFDO0lBQ3ZFLElBQUEsS0FBQSxPQUFvQyxLQUFLLENBQUMsUUFBUSxDQUFnQyxTQUFTLENBQUMsSUFBQSxFQUEzRixhQUFhLFFBQUEsRUFBRSxn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