@gpa-gemstone/react-graph
Version:
Interactive UI Components for GPA products
125 lines • 16.5 kB
JavaScript
;
// ******************************************************************************************************
// LineLegend.tsx - Gbtc
//
// Copyright © 2023, 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/04/2023 - 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 helper_functions_1 = require("@gpa-gemstone/helper-functions");
var gpa_symbols_1 = require("@gpa-gemstone/gpa-symbols");
var LegendContext_1 = require("./LegendContext");
var fontFamily = window.getComputedStyle(document.body).fontFamily;
var nonTextualWidth = 25;
var cssStyle = "margin: auto auto auto 0px; display: inline-block; font-weight: 400; font-family: ".concat(fontFamily, ";");
function LineLegend(props) {
var _a = __read(React.useState(props.label), 2), label = _a[0], setLabel = _a[1];
var _b = __read(React.useState(100), 2), legendWidth = _b[0], setLegendWith = _b[1];
var _c = __read(React.useState(100), 2), legendHeight = _c[0], setLegendHeight = _c[1];
var _d = __read(React.useState(1), 2), textSize = _d[0], setTextSize = _d[1];
var _e = __read(React.useState(false), 2), useMultiLine = _e[0], setUseMultiLine = _e[1];
var _f = __read(React.useState((0, helper_functions_1.CreateGuid)()), 1), guid = _f[0];
var context = React.useContext(LegendContext_1.LegendContext);
React.useEffect(function () {
return function () {
context.RequestLegendWidth(-1, guid);
};
}, []);
React.useEffect(function () {
setLabel((props.hasNoData ? gpa_symbols_1.Warning : "") + props.label);
}, [props.hasNoData, props.label]);
React.useEffect(function () { return setLegendWith(props.size === 'sm' ? context.SmWidth : context.LgWidth); }, [context.LgWidth, context.SmWidth, props.size]);
React.useEffect(function () { return setLegendHeight(props.size === 'sm' ? context.SmHeight : context.LgHeight); }, [context.SmHeight, context.LgHeight, props.size]);
React.useEffect(function () {
var fontSize = 1;
var textHeight = (0, helper_functions_1.GetTextHeight)(fontFamily, "".concat(fontSize, "em"), label, "".concat(cssStyle), "".concat(legendWidth - nonTextualWidth, "px"));
var textWidth = GetTextWidth(fontFamily, "".concat(fontSize, "em"), label, "".concat(cssStyle), "".concat(textHeight, "px"));
var useML = false;
context.RequestLegendWidth(textWidth + nonTextualWidth, guid);
while (fontSize > 0.4 && (textWidth > legendWidth - nonTextualWidth || textHeight > legendHeight)) {
fontSize -= 0.05;
textWidth = GetTextWidth(fontFamily, "".concat(fontSize, "em"), label, "".concat(cssStyle), "".concat(legendHeight, "px"), "".concat(useML ? 'normal' : undefined), "".concat(legendWidth - nonTextualWidth, "px"));
textHeight = (0, helper_functions_1.GetTextHeight)(fontFamily, "".concat(fontSize, "em"), label, "".concat(cssStyle), "".concat(legendWidth - nonTextualWidth, "px"), "".concat(useML ? 'normal' : undefined));
useML = false;
// Consider special case when width is limiting but height is available
if (textWidth >= (legendWidth - nonTextualWidth) && textHeight < legendHeight) {
useML = true;
textHeight = (0, helper_functions_1.GetTextHeight)(fontFamily, "".concat(fontSize, "em"), label, "".concat(cssStyle), "".concat(legendWidth - nonTextualWidth, "px"), "".concat(useML ? 'normal' : undefined));
textWidth = GetTextWidth(fontFamily, "".concat(fontSize, "em"), label, "".concat(cssStyle), "".concat(legendHeight, "px"), "".concat(useML ? 'normal' : undefined), "".concat(legendWidth - nonTextualWidth, "px"));
}
}
setTextSize(fontSize);
setUseMultiLine(useML);
}, [label, legendWidth, legendHeight, props.size, props.hasNoData]);
return (React.createElement("div", { style: { height: legendHeight, width: legendWidth } },
React.createElement("div", { onClick: function () { return props.setEnabled(!props.enabled); }, style: { width: '100%', display: 'flex', alignItems: 'center', marginRight: '5px', height: '100%' } },
(props.lineStyle === '-' ?
React.createElement("div", { style: { width: ' 10px', height: 0, borderTop: "2px solid ".concat(props.color), borderRight: "10px solid ".concat(props.color), borderBottom: "2px solid ".concat(props.color), borderLeft: "10px solid ".concat(props.color), overflow: 'hidden', marginRight: '5px', opacity: (props.enabled ? 1 : 0.5) } }) :
React.createElement("div", { style: { width: ' 10px', height: '4px', borderTop: 'none', borderRight: "3px solid ".concat(props.color), borderBottom: 'none', borderLeft: "3px solid ".concat(props.color), overflow: 'hidden', marginRight: '5px', opacity: (props.enabled ? 1 : 0.5) } })),
React.createElement("label", { style: { fontFamily: fontFamily, fontWeight: 400, display: 'inline-block', margin: 'auto', marginLeft: 0, fontSize: textSize + 'em', whiteSpace: (useMultiLine ? 'normal' : 'nowrap') } },
" ",
label))));
}
function GetTextWidth(font, fontSize, word, cssStyle, height, whiteSpace, containerWidth) {
var text = document.createElement("span");
if (cssStyle !== undefined)
text.style.cssText = cssStyle;
// Set font properties
text.style.font = font;
text.style.fontSize = fontSize;
text.style.height = height !== null && height !== void 0 ? height : 'auto';
text.style.width = 'auto';
text.style.whiteSpace = whiteSpace !== null && whiteSpace !== void 0 ? whiteSpace : 'nowrap';
text.innerHTML = word;
// Create a container
var container = document.createElement('div');
container.style.position = 'absolute';
container.style.visibility = 'hidden';
container.style.overflow = 'visible'; // So overflowed text is measured
container.style.height = height !== null && height !== void 0 ? height : 'auto';
container.style.width = containerWidth !== null && containerWidth !== void 0 ? containerWidth : 'auto';
container.style.whiteSpace = whiteSpace !== null && whiteSpace !== void 0 ? whiteSpace : 'nowrap';
// Append text to the container
container.appendChild(text);
document.body.appendChild(container);
// Measure the width
var width = text.offsetWidth;
// Clean up
document.body.removeChild(container);
return Math.ceil(width);
}
exports.default = LineLegend;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluZUxlZ2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9MaW5lTGVnZW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEseUdBQXlHO0FBQ3pHLHlCQUF5QjtBQUN6QixFQUFFO0FBQ0YscUVBQXFFO0FBQ3JFLEVBQUU7QUFDRix3R0FBd0c7QUFDeEcsd0dBQXdHO0FBQ3hHLHNHQUFzRztBQUN0Ryx3RkFBd0Y7QUFDeEYsRUFBRTtBQUNGLDBDQUEwQztBQUMxQyxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLHdHQUF3RztBQUN4Ryw0RUFBNEU7QUFDNUUsRUFBRTtBQUNGLDhCQUE4QjtBQUM5Qix3R0FBd0c7QUFDeEcsMEJBQTBCO0FBQzFCLG1EQUFtRDtBQUNuRCxFQUFFO0FBQ0YseUdBQXlHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHekcsNkJBQStCO0FBRS9CLG1FQUE0RTtBQUM1RSx5REFBb0Q7QUFDcEQsaURBQXNFO0FBVXRFLElBQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3JFLElBQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUMzQixJQUFNLFFBQVEsR0FBRyw0RkFBcUYsVUFBVSxNQUFHLENBQUE7QUFFbkgsU0FBUyxVQUFVLENBQUMsS0FBYTtJQUN2QixJQUFBLEtBQUEsT0FBb0IsS0FBSyxDQUFDLFFBQVEsQ0FBUyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUEsRUFBdEQsS0FBSyxRQUFBLEVBQUUsUUFBUSxRQUF1QyxDQUFDO0lBQ3hELElBQUEsS0FBQSxPQUErQixLQUFLLENBQUMsUUFBUSxDQUFTLEdBQUcsQ0FBQyxJQUFBLEVBQXpELFdBQVcsUUFBQSxFQUFFLGFBQWEsUUFBK0IsQ0FBQztJQUMzRCxJQUFBLEtBQUEsT0FBa0MsS0FBSyxDQUFDLFFBQVEsQ0FBUyxHQUFHLENBQUMsSUFBQSxFQUE1RCxZQUFZLFFBQUEsRUFB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