UNPKG

@gpa-gemstone/react-graph

Version:
230 lines 31.4 kB
"use strict"; // ****************************************************************************************************** // 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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