@gpa-gemstone/react-graph
Version:
Interactive UI Components for GPA products
230 lines • 31.4 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 ? 1 : 0) +
(props.showZoom || props.showHorizontalZoom ? 1 : 0) +
(props.showZoom || props.showVerticalZoom ? 1 : 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, heightPerButton * (nButtons - 1), width];
}, [props.holdOpen, props.showZoom, props.showPan, props.showReset, props.showSelect, props.showDownload, props.showCapture, props.children]), 3), nButtons = _f[0], height = _f[1], width = _f[2];
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[symbolNames.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 (props.showZoom || props.showVerticalZoom) {
if (symbols[symbols.length - 1].length < nButtons) {
symbolNames[symbolNames.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 (props.showZoom || props.showHorizontalZoom) {
if (symbols[symbols.length - 1].length < nButtons) {
symbolNames[symbolNames.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3RpdmVCdXR0b25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0ludGVyYWN0aXZlQnV0dG9ucy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlHQUF5RztBQUN6RyxpQ0FBaUM7QUFDakMsRUFBRTtBQUNGLHFFQUFxRTtBQUNyRSxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLHdHQUF3RztBQUN4RyxzR0FBc0c7QUFDdEcsd0ZBQXdGO0FBQ3hGLEVBQUU7QUFDRiwwQ0FBMEM7QUFDMUMsRUFBRTtBQUNGLHdHQUF3RztBQUN4Ryx3R0FBd0c7QUFDeEcsNEVBQTRFO0FBQzVFLEVBQUU7QUFDRiw4QkFBOEI7QUFDOUIsd0dBQXdHO0FBQ3hHLDBCQUEwQjtBQUMxQixtREFBbUQ7QUFDbkQsRUFBRTtBQUNGLHlHQUF5Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXpHLDZCQUErQjtBQUMvQix5REFBa0c7QUFFbEcsbUNBQTZCO0FBd0I3QixJQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFFM0IsSUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQUMsS0FBYTs7SUFDaEQsSUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBVSxTQUFTLENBQUMsQ0FBQztJQUM5QyxJQUFBLEtBQUEsT0FBOEIsS0FBSyxDQUFDLFFBQVEsQ0FBcUIsMENBQUcsbUJBQUssQ0FBSSxDQUFDLElBQUEsRUFBN0UsVUFBVSxRQUFBLEVBQUUsYUFBYSxRQUFvRCxDQUFDO0lBQy9FLElBQUEsS0FBQSxPQUFzQixLQUFLLENBQUMsUUFBUSxDQUFVLE1BQUEsS0FBSyxDQUFDLFFBQVEsbUNBQUksS0FBSyxDQUFDLElBQUEsRUFBckUsTUFBTSxRQUFBLEVBQUUsU0FBUyxRQUFvRCxDQUFDO0lBQ3ZFLElBQUEsS0FBQSxPQUFvQyxLQUFLLENBQUMsUUFBUSxDQUFnQyxTQUFTLENBQUMsSUFBQSxFQUEzRixhQUFhLFFBQUEsRUFBRSxn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