UNPKG

@nova-ui/dashboards

Version:

Nova Dashboards is a framework designed to provide feature developers with a common solution for presenting data coming from various sources within a single view, as well as a set of predefined widget visualizations that are 100% configuration-driven and

47 lines 7.82 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import * as d3 from "d3"; import cloneDeep from "lodash/cloneDeep"; import { transformNormalize } from "./transformer-normalize"; export function transformStandardize(data, hasPercentile) { let transformed = cloneDeep(data); const dataValues = { x: [], y: [], }; transformed.forEach((d) => { dataValues.x.push(d.x.valueOf()); dataValues.y.push(d.y); }); const standardizedData = standardizeData(dataValues.y); standardizedData.forEach((value, index) => { transformed[index].y = hasPercentile ? Math.abs(value) : value; }); if (hasPercentile) { transformed = transformNormalize(transformed); } function standardizeData(data) { // to standardize array of data --> subtract mean from each value, divide each value by standard devation (except if standard deviation < 1 --> divide by 1) const stddev = d3.deviation(data) ?? 1; return data.map((value) => (value - (d3.mean(data) ?? 0)) / (stddev < 1 ? 1 : stddev)); } return transformed; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXItc3RhbmRhcmRpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvdGltZXNlcmllcy13aWRnZXQvdHJhbnNmb3JtZXIvdHJhbnNmb3JtZXItc3RhbmRhcmRpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBR3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE1BQU0sVUFBVSxvQkFBb0IsQ0FDaEMsSUFBbUMsRUFDbkMsYUFBdUI7SUFFdkIsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWxDLE1BQU0sVUFBVSxHQUEyQjtRQUN2QyxDQUFDLEVBQUUsRUFBRTtRQUNMLENBQUMsRUFBRSxFQUFFO0tBQ1IsQ0FBQztJQUVGLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUE4QixFQUFFLEVBQUU7UUFDbkQsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sZ0JBQWdCLEdBQWEsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFhLEVBQUUsS0FBYSxFQUFFLEVBQUU7UUFDdEQsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNuRSxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksYUFBYSxFQUFFO1FBQ2YsV0FBVyxHQUFHLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ2pEO0lBRUQsU0FBUyxlQUFlLENBQUMsSUFBVztRQUNoQyw0SkFBNEo7UUFDNUosTUFBTSxNQUFNLEdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUNYLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FDWCxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQ2pFLENBQUM7SUFDTixDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcbmltcG9ydCBjbG9uZURlZXAgZnJvbSBcImxvZGFzaC9jbG9uZURlZXBcIjtcblxuaW1wb3J0IHsgSVRpbWVzZXJpZXNXaWRnZXRTZXJpZXNEYXRhIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyB0cmFuc2Zvcm1Ob3JtYWxpemUgfSBmcm9tIFwiLi90cmFuc2Zvcm1lci1ub3JtYWxpemVcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVN0YW5kYXJkaXplKFxuICAgIGRhdGE6IElUaW1lc2VyaWVzV2lkZ2V0U2VyaWVzRGF0YVtdLFxuICAgIGhhc1BlcmNlbnRpbGU/OiBib29sZWFuXG4pOiBJVGltZXNlcmllc1dpZGdldFNlcmllc0RhdGFbXSB7XG4gICAgbGV0IHRyYW5zZm9ybWVkID0gY2xvbmVEZWVwKGRhdGEpO1xuXG4gICAgY29uc3QgZGF0YVZhbHVlczogeyB4OiBhbnlbXTsgeTogYW55W10gfSA9IHtcbiAgICAgICAgeDogW10sXG4gICAgICAgIHk6IFtdLFxuICAgIH07XG5cbiAgICB0cmFuc2Zvcm1lZC5mb3JFYWNoKChkOiBJVGltZXNlcmllc1dpZGdldFNlcmllc0RhdGEpID0+IHtcbiAgICAgICAgZGF0YVZhbHVlcy54LnB1c2goZC54LnZhbHVlT2YoKSk7XG4gICAgICAgIGRhdGFWYWx1ZXMueS5wdXNoKGQueSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGFuZGFyZGl6ZWREYXRhOiBudW1iZXJbXSA9IHN0YW5kYXJkaXplRGF0YShkYXRhVmFsdWVzLnkpO1xuICAgIHN0YW5kYXJkaXplZERhdGEuZm9yRWFjaCgodmFsdWU6IG51bWJlciwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICB0cmFuc2Zvcm1lZFtpbmRleF0ueSA9IGhhc1BlcmNlbnRpbGUgPyBNYXRoLmFicyh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB9KTtcbiAgICBpZiAoaGFzUGVyY2VudGlsZSkge1xuICAgICAgICB0cmFuc2Zvcm1lZCA9IHRyYW5zZm9ybU5vcm1hbGl6ZSh0cmFuc2Zvcm1lZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhbmRhcmRpemVEYXRhKGRhdGE6IGFueVtdKSB7XG4gICAgICAgIC8vIHRvIHN0YW5kYXJkaXplIGFycmF5IG9mIGRhdGEgLS0+IHN1YnRyYWN0IG1lYW4gZnJvbSBlYWNoIHZhbHVlLCBkaXZpZGUgZWFjaCB2YWx1ZSBieSBzdGFuZGFyZCBkZXZhdGlvbiAoZXhjZXB0IGlmIHN0YW5kYXJkIGRldmlhdGlvbiA8IDEgLS0+IGRpdmlkZSBieSAxKVxuICAgICAgICBjb25zdCBzdGRkZXY6IG51bWJlciA9IGQzLmRldmlhdGlvbihkYXRhKSA/PyAxO1xuICAgICAgICByZXR1cm4gZGF0YS5tYXAoXG4gICAgICAgICAgICAodmFsdWU6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAodmFsdWUgLSAoZDMubWVhbihkYXRhKSA/PyAwKSkgLyAoc3RkZGV2IDwgMSA/IDEgOiBzdGRkZXYpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuIl19