UNPKG

@gpa-gemstone/react-graph

Version:
191 lines 23.4 kB
"use strict"; // ****************************************************************************************************** // ContextlessLegend.tsx - Gbtc // // Copyright © 2021, 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/19/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 }); exports.Legend = exports.fontFamily = void 0; var React = require("react"); var _ = require("lodash"); var LegendContext_1 = require("./LegendContext"); var helper_functions_1 = require("@gpa-gemstone/helper-functions"); var DataLegend_1 = require("./DataLegend"); var HeatLegend_1 = require("./HeatLegend"); var itemHeight = 25; var itemsWhenBottom = 3; // line legend consts (font family needs to be monospaced) exports.fontFamily = "Courier New"; var nonTextualWidth = 25; var cssStyle = "margin: auto auto auto 0px; display: inline-block; font-weight: 400; font-family: ".concat(exports.fontFamily, ";"); // heat legend consts var heatWidth = 50; exports.Legend = React.memo(function (props) { var massEnableRef = React.useRef(function (_) { }); var _a = __read(React.useMemo(function () { var newNLegends = props.LegendElements.reduce(function (s, c) { var _a, _b, _c; if (c === undefined) return s; if (((_a = props.HideDisabled) !== null && _a !== void 0 ? _a : false) && !((_c = (_b = c === null || c === void 0 ? void 0 : c.props) === null || _b === void 0 ? void 0 : _b.enabled) !== null && _c !== void 0 ? _c : true)) return s; if ((c === null || c === void 0 ? void 0 : c.type) === DataLegend_1.default) s.sm = s.sm + 1; else if ((c === null || c === void 0 ? void 0 : c.type) === HeatLegend_1.default) s.lg = s.lg + 1; else { s.sm = s.sm + 1; console.warn("Unknown legend element found. Please check legend component or children to legend."); } return s; }, { sm: 0, lg: 0 }); return [newNLegends.sm, newNLegends.lg]; }, [props.LegendElements, props.HideDisabled]), 2), nLegendsSm = _a[0], nLegendsLg = _a[1]; var leftPad = props.orientation === 'horizontal' ? 39 : 0; var smHeight = props.orientation === 'horizontal' ? itemHeight : Math.max(props.height / (Math.max(nLegendsSm + nLegendsLg, 1)), itemHeight); var lgHeight = smHeight * (props.orientation === 'horizontal' ? 2 : 1); var requiredHeight = Math.ceil(nLegendsSm / (props.orientation === 'horizontal' ? itemsWhenBottom : 1)) * smHeight + nLegendsLg * lgHeight; var scrollBarSpace = (requiredHeight > props.height ? (0, helper_functions_1.GetScrollbarWidth)() : 0); var smWidth = ((props.width - leftPad) / (props.orientation === 'horizontal' ? itemsWhenBottom : 1)) - scrollBarSpace; var lgWidth = props.width - leftPad - scrollBarSpace; var _b = __read(React.useMemo(function () { var _a, _b; var smallestFont = 1; var isMultiLine = false; var lgWidthNeeded = 0; var smWidthNeeded = 0; var legendArray = props.LegendElements; var setNeeded = function (size, width) { if (size === 'lg' && width > lgWidthNeeded) lgWidthNeeded = width; else if (size === 'sm' && width > smWidthNeeded) smWidthNeeded = width; }; // Handle line array var findSizing = function (label) { var newFontSize = 1; var textHeight = (0, helper_functions_1.GetTextHeight)(exports.fontFamily, "".concat(newFontSize, "em"), label, "".concat(cssStyle), "".concat(smWidth - nonTextualWidth, "px")); var textWidth = (0, helper_functions_1.GetTextWidth)(exports.fontFamily, "".concat(newFontSize, "em"), label, "".concat(cssStyle), "".concat(textHeight, "px")); // DataLegend is considered a "small" element if (textWidth > smWidthNeeded) smWidthNeeded = textWidth; var useML = false; while (newFontSize > 0.4 && (textWidth > smWidth - nonTextualWidth || textHeight > smHeight)) { newFontSize -= 0.05; textWidth = (0, helper_functions_1.GetTextWidth)(exports.fontFamily, "".concat(newFontSize, "em"), label, "".concat(cssStyle), "".concat(smHeight, "px"), "".concat(useML ? 'normal' : undefined), "".concat(smWidth - nonTextualWidth, "px")); textHeight = (0, helper_functions_1.GetTextHeight)(exports.fontFamily, "".concat(newFontSize, "em"), label, "".concat(cssStyle), "".concat(smWidth - nonTextualWidth, "px"), "".concat(useML ? 'normal' : undefined)); useML = false; // Consider special case when width is limiting but height is available if (textWidth >= (smWidth - nonTextualWidth) && textHeight < smHeight) { useML = true; textHeight = (0, helper_functions_1.GetTextHeight)(exports.fontFamily, "".concat(newFontSize, "em"), label, "".concat(cssStyle), "".concat(smWidth - nonTextualWidth, "px"), "".concat(useML ? 'normal' : undefined)); textWidth = (0, helper_functions_1.GetTextWidth)(exports.fontFamily, "".concat(newFontSize, "em"), label, "".concat(cssStyle), "".concat(smHeight, "px"), "".concat(useML ? 'normal' : undefined), "".concat(smWidth - nonTextualWidth, "px")); } } if (newFontSize < smallestFont) { smallestFont = newFontSize; isMultiLine = useML; } }; var dataLegendArray = _.orderBy(legendArray.filter(function (legend) { var _a, _b, _c; return (!((_a = props.HideDisabled) !== null && _a !== void 0 ? _a : false) || ((_c = (_b = legend === null || legend === void 0 ? void 0 : legend.props) === null || _b === void 0 ? void 0 : _b.enabled) !== null && _c !== void 0 ? _c : false)) && (legend === null || legend === void 0 ? void 0 : legend.type) === DataLegend_1.default; }), function (item) { var _a, _b, _c; return (_c = (_b = (_a = item === null || item === void 0 ? void 0 : item.props) === null || _a === void 0 ? void 0 : _a.label) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0; }, ['desc']); if (dataLegendArray.length > 0) findSizing((_b = (_a = dataLegendArray[0]) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.label); // Find if we have a heat legend var heatIndex = legendArray.findIndex(function (legend) { var _a, _b, _c; return (((_a = props.HideDisabled) !== null && _a !== void 0 ? _a : false) && !((_c = (_b = legend === null || legend === void 0 ? void 0 : legend.props) === null || _b === void 0 ? void 0 : _b.enabled) !== null && _c !== void 0 ? _c : false)) && (legend === null || legend === void 0 ? void 0 : legend.type) === HeatLegend_1.default; }); // HeatLegend is considered a "large" element if (heatIndex >= 0) setNeeded('lg', 50); if (heatIndex >= 0 && heatWidth > lgWidthNeeded) lgWidthNeeded = heatWidth; var smTotal = (smWidthNeeded + scrollBarSpace) * (props.orientation === 'horizontal' ? itemsWhenBottom : 1) + leftPad; var lgTotal = lgWidthNeeded + leftPad + scrollBarSpace; return [smallestFont, isMultiLine, Math.max(smTotal, lgTotal)]; }, [props.LegendElements, props.HideDisabled, lgWidth, smWidth, smHeight, lgHeight, leftPad, props.orientation, scrollBarSpace]), 3), smallestFontSize = _b[0], useMultiLine = _b[1], requiredWidth = _b[2]; var legendContextValue = React.useMemo(function () { return { SmWidth: smWidth, LgWidth: lgWidth, SmHeight: smHeight, LgHeight: lgHeight, SmallestFontSize: smallestFontSize, UseMultiLine: useMultiLine, SendMassEnable: massEnableRef }; }, [smallestFontSize, smHeight, lgHeight, smWidth, smHeight, useMultiLine]); React.useEffect(function () { if (props.RequestLegendHeight !== undefined && requiredHeight !== props.height) props.RequestLegendHeight(requiredHeight); }, [requiredHeight, props.height]); React.useEffect(function () { if (props.RequestLegendWidth !== undefined && requiredWidth !== props.width) props.RequestLegendWidth(requiredWidth); }, [requiredWidth, props.width]); React.useEffect(function () { massEnableRef.current = function (triggerId) { var isMassDisable = props.LegendElements.some(function (element) { var _a, _b; return (((_a = element === null || element === void 0 ? void 0 : element.props) === null || _a === void 0 ? void 0 : _a.enabled) && (((_b = element === null || element === void 0 ? void 0 : element.props) === null || _b === void 0 ? void 0 : _b.id) !== triggerId)); }); if (props.SendMassCommand != null) props.SendMassCommand({ requester: triggerId, command: isMassDisable ? "disable-others" : "enable-all" }); }; }, [props.LegendElements, props.SendMassCommand]); return (React.createElement(LegendContext_1.LegendContext.Provider, { value: legendContextValue }, React.createElement("div", { style: { height: props.height, width: props.width, paddingLeft: "".concat(leftPad, "px"), position: (props.orientation === 'horizontal' ? 'absolute' : 'relative'), float: (props.orientation === 'horizontal' ? 'bottom' : 'right'), display: 'flex', flexWrap: 'wrap', bottom: 0, overflowY: requiredHeight > props.height ? 'scroll' : 'hidden', overflowX: requiredHeight > props.height ? 'visible' : 'hidden', cursor: 'default' } }, props.LegendElements.map(function (element, index) { var _a, _b, _c; return (element !== undefined && (!((_a = props.HideDisabled) !== null && _a !== void 0 ? _a : false) || ((_b = element.props.enabled) !== null && _b !== void 0 ? _b : true)) ? React.createElement("div", { key: index, "data-html2canvas-ignore": !((_c = element.props.enabled) !== null && _c !== void 0 ? _c : true) }, element) : null); })))); }); exports.default = exports.Legend; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVnZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0xlZ2VuZC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlHQUF5RztBQUN6RyxnQ0FBZ0M7QUFDaEMsRUFBRTtBQUNGLHFFQUFxRTtBQUNyRSxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLHdHQUF3RztBQUN4RyxzR0FBc0c7QUFDdEcsd0ZBQXdGO0FBQ3hGLEVBQUU7QUFDRiwwQ0FBMEM7QUFDMUMsRUFBRTtBQUNGLHdHQUF3RztBQUN4Ryx3R0FBd0c7QUFDeEcsNEVBQTRFO0FBQzVFLEVBQUU7QUFDRiw4QkFBOEI7QUFDOUIsd0dBQXdHO0FBQ3hHLDJCQUEyQjtBQUMzQixtREFBbUQ7QUFDbkQsRUFBRTtBQUNGLHlHQUF5Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV6Ryw2QkFBK0I7QUFDL0IsMEJBQTRCO0FBQzVCLGlEQUFnRTtBQUNoRSxtRUFBZ0c7QUFDaEcsMkNBQXNDO0FBQ3RDLDJDQUFzQztBQWF0QyxJQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsSUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLDBEQUEwRDtBQUM3QyxRQUFBLFVBQVUsR0FBRyxhQUFhLENBQUE7QUFDdkMsSUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQzNCLElBQU0sUUFBUSxHQUFHLDRGQUFxRixrQkFBVSxNQUFHLENBQUM7QUFFcEgscUJBQXFCO0FBQ3JCLElBQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUVSLFFBQUEsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBQyxLQUFhO0lBQzdDLElBQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBQyxDQUFTLElBQXNCLENBQUMsQ0FBQyxDQUFDO0lBRWhFLElBQUEsS0FBQSxPQUEyQixLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzdDLElBQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFB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