@gpa-gemstone/react-graph
Version:
Interactive UI Components for GPA products
147 lines • 16.5 kB
JavaScript
;
// ******************************************************************************************************
// Legend.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;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
var React = require("react");
var GraphContext_1 = require("./GraphContext");
var LegendContext_1 = require("./LegendContext");
var helper_functions_1 = require("@gpa-gemstone/helper-functions");
var itemHeight = 25;
var itemsWhenBottom = 3;
function Legend(props) {
var graphContext = React.useContext(GraphContext_1.GraphContext);
var _a = __read(React.useState(props.location === 'bottom' ? props.graphWidth : props.width), 2), width = _a[0], setWidth = _a[1];
var _b = __read(React.useState(props.location === 'right' ? props.graphHeight : props.height), 2), height = _b[0], setHeight = _b[1];
var _c = __read(React.useState({ sm: 0, lg: 0 }), 2), nLegends = _c[0], setNLegends = _c[1];
var _d = __read(React.useState(false), 2), hasScroll = _d[0], setHasScroll = _d[1];
var _e = __read(React.useState(0), 2), leftPad = _e[0], setLeftPad = _e[1];
var fontSizeMap = React.useRef(new Map());
var _f = __read(React.useState(1), 2), smallestFontSize = _f[0], setSmallestFontSize = _f[1];
var RegisterFontSize = React.useCallback(function (requesterID, fontsize) {
fontSizeMap.current.set(requesterID, fontsize);
var values = __spreadArray([], __read(fontSizeMap.current.values()), false);
var newMinVal = values.length > 0 ? Math.min.apply(Math, __spreadArray([], __read(values), false)) : 1;
setSmallestFontSize(newMinVal);
}, []);
var UnRegisterFontSize = React.useCallback(function (requesterID) {
fontSizeMap.current.delete(requesterID);
setSmallestFontSize(function () {
var values = __spreadArray([], __read(fontSizeMap.current.values()), false);
return values.length > 0 ? Math.min.apply(Math, __spreadArray([], __read(values), false)) : 1;
});
}, []);
var legendContextValue = React.useMemo(function () {
var scrollBarSpace = (hasScroll ? (0, helper_functions_1.GetScrollbarWidth)() : 0);
var baseWidth = width - leftPad;
var baseHeight = props.location === 'bottom' ? itemHeight : Math.max(height / (Math.max(nLegends.sm + nLegends.lg, 1)), itemHeight);
return {
SmWidth: (baseWidth / (props.location === 'bottom' ? itemsWhenBottom : 1)) - scrollBarSpace,
LgWidth: baseWidth - scrollBarSpace,
SmHeight: baseHeight,
LgHeight: baseHeight * (props.location === 'bottom' ? 2 : 1),
SmallestFontSize: smallestFontSize,
RequestLegendWidth: props.RequestLegendWidth,
RequestLegendHeight: props.RequestLegendHeight,
RegisterFontSize: RegisterFontSize,
UnRegisterFontSize: UnRegisterFontSize
};
}, [width, height, props.RequestLegendWidth, props.RequestLegendHeight, hasScroll, props.location, leftPad, nLegends, smallestFontSize, RegisterFontSize, UnRegisterFontSize]);
React.useEffect(function () {
var newWidth = props.location === 'bottom' ? props.graphWidth : props.width;
if (newWidth !== width)
setWidth(newWidth);
}, [props.width, props.graphWidth, props.location]);
React.useEffect(function () {
var newHeight = props.location === 'right' ? props.graphHeight : props.height;
if (newHeight !== height)
setHeight(newHeight);
}, [props.height, props.graphHeight, props.location]);
React.useEffect(function () {
var newNLegends = __spreadArray([], __read(graphContext.Data.current.values()), false).reduce(function (s, c) {
var _a, _b, _c, _d, _e, _f;
if (c.legend === undefined)
return s;
if (props.HideDisabled && !((_c = (_b = (_a = c.legend) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.enabled) !== null && _c !== void 0 ? _c : true))
return s;
if (((_f = (_e = (_d = c.legend) === null || _d === void 0 ? void 0 : _d.props) === null || _e === void 0 ? void 0 : _e.size) !== null && _f !== void 0 ? _f : 'sm') === 'sm')
s.sm = s.sm + 1;
else
s.lg = s.lg + 1;
return s;
}, { sm: 0, lg: 0 });
if (newNLegends.sm !== nLegends.sm || newNLegends.lg !== nLegends.lg)
setNLegends(newNLegends);
}, [graphContext.DataGuid, props.HideDisabled]);
React.useEffect(function () {
var requiredHeight = Math.ceil(nLegends.sm / (props.location === 'bottom' ? itemsWhenBottom : 1)) * legendContextValue.SmHeight + nLegends.lg * legendContextValue.LgHeight;
if (props.RequestLegendHeight !== undefined && requiredHeight !== height)
props.RequestLegendHeight(requiredHeight);
setHasScroll(requiredHeight > height);
}, [nLegends, props.location, height, props.RequestLegendHeight]);
React.useEffect(function () { return setLeftPad(props.location === 'bottom' ? 39 : 0); }, [props.location]);
return (React.createElement(LegendContext_1.LegendContext.Provider, { value: legendContextValue },
React.createElement("div", { style: {
height: height,
width: width,
paddingLeft: "".concat(leftPad, "px"),
position: (props.location === 'bottom' ? 'absolute' : 'relative'),
float: props.location,
display: 'flex',
flexWrap: 'wrap',
bottom: 0,
overflowY: hasScroll ? 'scroll' : 'hidden',
overflowX: hasScroll ? 'visible' : 'hidden',
cursor: 'default'
} }, __spreadArray([], __read(graphContext.Data.current.values()), false).map(function (series, index) {
var _a, _b;
return (series.legend !== undefined && (!props.HideDisabled || ((_a = series.legend.props.enabled) !== null && _a !== void 0 ? _a : true)) ?
React.createElement("div", { key: index, "data-html2canvas-ignore": !((_b = series.legend.props.enabled) !== null && _b !== void 0 ? _b : true) }, series.legend) : null);
}))));
}
exports.default = React.memo(Legend);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVnZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0xlZ2VuZC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlHQUF5RztBQUN6RyxxQkFBcUI7QUFDckIsRUFBRTtBQUNGLHFFQUFxRTtBQUNyRSxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLHdHQUF3RztBQUN4RyxzR0FBc0c7QUFDdEcsd0ZBQXdGO0FBQ3hGLEVBQUU7QUFDRiwwQ0FBMEM7QUFDMUMsRUFBRTtBQUNGLHdHQUF3RztBQUN4Ryx3R0FBd0c7QUFDeEcsNEVBQTRFO0FBQzVFLEVBQUU7QUFDRiw4QkFBOEI7QUFDOUIsd0dBQXdHO0FBQ3hHLDJCQUEyQjtBQUMzQixtREFBbUQ7QUFDbkQsRUFBRTtBQUNGLHlHQUF5Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXpHLDZCQUErQjtBQUMvQiwrQ0FBOEM7QUFDOUMsaURBQWdFO0FBQ2hFLG1FQUFtRTtBQWFuRSxJQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsSUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLFNBQVMsTUFBTSxDQUFDLEtBQWE7SUFDM0IsSUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQywyQkFBWSxDQUFDLENBQUM7SUFDOUMsSUFBQSxLQUFBLE9BQW9CLEtBQUssQ0FBQyxRQUFRLENBQVMsS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBQSxFQUF2RyxLQUFLLFFBQUEsRUFBRSxRQUFRLFFBQXdGLENBQUM7SUFDekcsSUFBQSxLQUFBLE9BQXNCLEtBQUssQ0FBQyxRQUFRLENBQVMsS0FBSyxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMs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