diff --git a/src/fireedge/package-lock.json b/src/fireedge/package-lock.json index 50e244b46c..8b0af08afd 100644 --- a/src/fireedge/package-lock.json +++ b/src/fireedge/package-lock.json @@ -30,7 +30,7 @@ "@loadable/server": "5.15.1", "@loadable/webpack-plugin": "5.15.1", "@mui/lab": "5.0.0-alpha.59", - "@mui/material": "5.4.1", + "@mui/material": "5.1.0", "@mui/styles": "5.1.0", "@mui/system": "5.4.1", "@mui/x-data-grid": "5.0.1", @@ -67,7 +67,6 @@ "jsonwebtoken": "8.5.1", "jwt-simple": "0.5.6", "lockfile": "1.0.4", - "lodash.get": "^4.4.2", "luxon": "2.1.1", "marked": "4.0.10", "morgan": "1.10.0", @@ -78,6 +77,7 @@ "opennebula-wmks": "2.1.4", "papaparse": "5.4.1", "path": "0.12.7", + "process": "0.11.10", "prop-types": "15.7.2", "qrcode": "1.4.4", "react": "17.0.2", @@ -128,7 +128,6 @@ "eslint-config-opennebula": "2.0.2", "eslint-import-resolver-alias": "1.1.2", "eslint-import-resolver-webpack": "0.13.0", - "file-loader": "^5.0.0", "opennebula-generatepotfile": "1.0.0", "opennebula-potojson": "1.0.0", "react-refresh": "0.10.0", @@ -2319,162 +2318,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "optional": true, - "peer": true, - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "optional": true, - "peer": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "optional": true, - "peer": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "optional": true, - "peer": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "optional": true, - "peer": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "optional": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - }, "node_modules/@mui/base": { "version": "5.0.0-alpha.59", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.59.tgz", @@ -2511,6 +2354,39 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, + "node_modules/@mui/core": { + "version": "5.0.0-alpha.54", + "resolved": "https://registry.npmjs.org/@mui/core/-/core-5.0.0-alpha.54.tgz", + "integrity": "sha512-8TxdHqDdSb6wjhsnpE5n7qtkFKDG3PUSlVY0gR3VcdsHXscUY13l3VbMQW1brI4D/R9zx5VYmxIHWaHFgw4RtA==", + "deprecated": "You can now upgrade to @mui/base. See https://github.com/mui/material-ui/releases/tag/v5.1.1", + "dependencies": { + "@babel/runtime": "^7.16.0", + "@emotion/is-prop-valid": "^1.1.0", + "@mui/utils": "^5.1.0", + "@popperjs/core": "^2.4.4", + "clsx": "^1.1.1", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8.6 || ^17.0.0", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/core/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, "node_modules/@mui/icons-material": { "version": "5.11.0", "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.0.tgz", @@ -2674,18 +2550,18 @@ } }, "node_modules/@mui/material": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.4.1.tgz", - "integrity": "sha512-SxAT43UAjFTBBpJrN+oGrv40xP1uCa5Z49NfHt3m93xYeFzbxKOk0V9IKU7zlUjbsaVQ0i+o24yF5GULZmynlA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.1.0.tgz", + "integrity": "sha512-K76v7zRhpJToInSI8sRcEmTwpVFBZ223VIusjZRKXN8JzX+PuErG7skfa1yUuhc3f4VEqcYYUw0LvI+DJJ05eg==", "dependencies": { - "@babel/runtime": "^7.17.0", - "@mui/base": "5.0.0-alpha.68", - "@mui/system": "^5.4.1", - "@mui/types": "^7.1.1", - "@mui/utils": "^5.4.1", + "@babel/runtime": "^7.16.0", + "@mui/core": "5.0.0-alpha.54", + "@mui/system": "^5.1.0", + "@mui/types": "^7.1.0", + "@mui/utils": "^5.1.0", "@types/react-transition-group": "^4.4.4", "clsx": "^1.1.1", - "csstype": "^3.0.10", + "csstype": "^3.0.9", "hoist-non-react-statics": "^3.3.2", "prop-types": "^15.7.2", "react-is": "^17.0.2", @@ -2696,14 +2572,14 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/material-ui" }, "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", "@types/react": "^16.8.6 || ^17.0.0", - "react": "^17.0.0", - "react-dom": "^17.0.0" + "react": "^17.0.2", + "react-dom": "^17.0.2" }, "peerDependenciesMeta": { "@emotion/react": { @@ -2717,37 +2593,6 @@ } } }, - "node_modules/@mui/material/node_modules/@mui/base": { - "version": "5.0.0-alpha.68", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.68.tgz", - "integrity": "sha512-q+3gX6EHuM/AyOn8fkoANQxSzIHBeuNsrGgb7SPP0y7NuM+4ZHG/b9882+OfHcilaSqPDWUQoLbphcBpw/m/RA==", - "dependencies": { - "@babel/runtime": "^7.17.0", - "@emotion/is-prop-valid": "^1.1.1", - "@mui/utils": "^5.4.1", - "@popperjs/core": "^2.4.4", - "clsx": "^1.1.1", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@types/react": "^16.8.6 || ^17.0.0", - "react": "^17.0.0", - "react-dom": "^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@mui/material/node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -2891,17 +2736,17 @@ "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" }, "node_modules/@mui/system": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.4.1.tgz", - "integrity": "sha512-07JBYf9iQdxIHZU8cFOLoxBnkQDUPLb7UBhNxo4998yEqpWFJ00WKgEVYBKvPl0X+MRU/20wqFz6yGIuCx4AeA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.1.0.tgz", + "integrity": "sha512-1h+YDnPGfTWZkf7lgeNV+vw6altxXGLclXLdxs9GPzEMNYXX7xveUjmndYpO1p/yx7GNG2gLWWkFZ1TYCeo4+Q==", "dependencies": { - "@babel/runtime": "^7.17.0", - "@mui/private-theming": "^5.4.1", - "@mui/styled-engine": "^5.4.1", - "@mui/types": "^7.1.1", - "@mui/utils": "^5.4.1", + "@babel/runtime": "^7.16.0", + "@mui/private-theming": "^5.1.0", + "@mui/styled-engine": "^5.1.0", + "@mui/types": "^7.1.0", + "@mui/utils": "^5.1.0", "clsx": "^1.1.1", - "csstype": "^3.0.10", + "csstype": "^3.0.9", "prop-types": "^15.7.2" }, "engines": { @@ -2909,13 +2754,13 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/material-ui" }, "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", "@types/react": "^16.8.6 || ^17.0.0", - "react": "^17.0.0" + "react": "^17.0.2" }, "peerDependenciesMeta": { "@emotion/react": { @@ -3702,13 +3547,6 @@ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "optional": true, - "peer": true - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -4743,22 +4581,6 @@ } ] }, - "node_modules/canvas": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", - "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", - "hasInstallScript": true, - "optional": true, - "peer": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -4840,11 +4662,6 @@ "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.4.tgz", "integrity": "sha512-sbpkOw6z413p+HDGcBENe498WM9woqWHiJxCq7nvmxe9WmrUmqfAcxpIwAiMtM5Q3AhYkzXcNQHqsWq0mND51g==" }, - "node_modules/classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -4915,16 +4732,6 @@ "simple-swizzle": "^0.2.2" } }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "optional": true, - "peer": true, - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colorette": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", @@ -5379,11 +5186,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/css-unit-converter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", - "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" - }, "node_modules/css-vendor": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", @@ -5633,11 +5435,6 @@ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" }, - "node_modules/decimal.js-light": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", - "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" - }, "node_modules/decompress-response": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", @@ -7256,14 +7053,6 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, - "node_modules/fast-equals": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", - "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/fast-glob": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", @@ -7605,39 +7394,6 @@ "node": ">=10" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - }, "node_modules/fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", @@ -9649,50 +9405,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -9861,52 +9573,6 @@ "semver": "bin/semver" } }, - "node_modules/node-fetch": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", - "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", - "optional": true, - "peer": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "optional": true, - "peer": true - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "optional": true, - "peer": true - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "optional": true, - "peer": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-libs-browser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", @@ -9983,22 +9649,6 @@ "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "optional": true, - "peer": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -10375,11 +10025,6 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, - "node_modules/papaparse": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz", - "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -11388,11 +11033,6 @@ "react-dom": ">=15.0" } }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, "node_modules/react-minimal-pie-chart": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/react-minimal-pie-chart/-/react-minimal-pie-chart-8.2.0.tgz", @@ -11574,87 +11214,6 @@ "node": ">=8.10.0" } }, - "node_modules/recharts": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.7.3.tgz", - "integrity": "sha512-cKoO9jUZRQavn06H6Ih2EcG82zUNdQH3OEGWVCmluSDyp3d7fIpDAsbMTd8hE8+T+MD8P76iicv/J4pJspDP7A==", - "dependencies": { - "classnames": "^2.2.5", - "eventemitter3": "^4.0.1", - "lodash": "^4.17.19", - "react-is": "^16.10.2", - "react-resize-detector": "^8.0.4", - "react-smooth": "^2.0.2", - "recharts-scale": "^0.4.4", - "reduce-css-calc": "^2.1.8", - "victory-vendor": "^36.6.8" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "prop-types": "^15.6.0", - "react": "^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/recharts-scale": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", - "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", - "dependencies": { - "decimal.js-light": "^2.4.1" - } - }, - "node_modules/recharts/node_modules/dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dependencies": { - "@babel/runtime": "^7.1.2" - } - }, - "node_modules/recharts/node_modules/react-resize-detector": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-8.1.0.tgz", - "integrity": "sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w==", - "dependencies": { - "lodash": "^4.17.21" - }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/recharts/node_modules/react-smooth": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.3.tgz", - "integrity": "sha512-yl4y3XiMorss7ayF5QnBiSprig0+qFHui8uh7Hgg46QX5O+aRMRKlfGGNGLHno35JkQSvSYY8eCWkBfHfrSHfg==", - "dependencies": { - "fast-equals": "^5.0.0", - "react-transition-group": "2.9.0" - }, - "peerDependencies": { - "prop-types": "^15.6.0", - "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/recharts/node_modules/react-smooth/node_modules/react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "dependencies": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - }, - "peerDependencies": { - "react": ">=15.0.0", - "react-dom": ">=15.0.0" - } - }, "node_modules/rechoir": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", @@ -11666,20 +11225,6 @@ "node": ">= 0.10" } }, - "node_modules/reduce-css-calc": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", - "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", - "dependencies": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - } - }, - "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, "node_modules/redux": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.1.tgz", @@ -12841,24 +12386,6 @@ "node": ">=0.6" } }, - "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "optional": true, - "peer": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", @@ -12898,36 +12425,6 @@ "node": ">= 6" } }, - "node_modules/tar/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true, - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - }, "node_modules/terser": { "version": "5.16.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", @@ -15782,133 +15279,6 @@ } } }, - "@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "optional": true, - "peer": true, - "requires": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "dependencies": { - "are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "optional": true, - "peer": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", - "optional": true, - "peer": true - }, - "gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "optional": true, - "peer": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "optional": true, - "peer": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "optional": true, - "peer": true - } - } - }, - "npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "optional": true, - "peer": true, - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "optional": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "optional": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - } - } - }, "@mui/base": { "version": "5.0.0-alpha.59", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.59.tgz", @@ -15930,6 +15300,27 @@ } } }, + "@mui/core": { + "version": "5.0.0-alpha.54", + "resolved": "https://registry.npmjs.org/@mui/core/-/core-5.0.0-alpha.54.tgz", + "integrity": "sha512-8TxdHqDdSb6wjhsnpE5n7qtkFKDG3PUSlVY0gR3VcdsHXscUY13l3VbMQW1brI4D/R9zx5VYmxIHWaHFgw4RtA==", + "requires": { + "@babel/runtime": "^7.16.0", + "@emotion/is-prop-valid": "^1.1.0", + "@mui/utils": "^5.1.0", + "@popperjs/core": "^2.4.4", + "clsx": "^1.1.1", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "dependencies": { + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + } + } + }, "@mui/icons-material": { "version": "5.11.0", "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.0.tgz", @@ -16015,38 +15406,24 @@ } }, "@mui/material": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.4.1.tgz", - "integrity": "sha512-SxAT43UAjFTBBpJrN+oGrv40xP1uCa5Z49NfHt3m93xYeFzbxKOk0V9IKU7zlUjbsaVQ0i+o24yF5GULZmynlA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.1.0.tgz", + "integrity": "sha512-K76v7zRhpJToInSI8sRcEmTwpVFBZ223VIusjZRKXN8JzX+PuErG7skfa1yUuhc3f4VEqcYYUw0LvI+DJJ05eg==", "requires": { - "@babel/runtime": "^7.17.0", - "@mui/base": "5.0.0-alpha.68", - "@mui/system": "^5.4.1", - "@mui/types": "^7.1.1", - "@mui/utils": "^5.4.1", + "@babel/runtime": "^7.16.0", + "@mui/core": "5.0.0-alpha.54", + "@mui/system": "^5.1.0", + "@mui/types": "^7.1.0", + "@mui/utils": "^5.1.0", "@types/react-transition-group": "^4.4.4", "clsx": "^1.1.1", - "csstype": "^3.0.10", + "csstype": "^3.0.9", "hoist-non-react-statics": "^3.3.2", "prop-types": "^15.7.2", "react-is": "^17.0.2", "react-transition-group": "^4.4.2" }, "dependencies": { - "@mui/base": { - "version": "5.0.0-alpha.68", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.68.tgz", - "integrity": "sha512-q+3gX6EHuM/AyOn8fkoANQxSzIHBeuNsrGgb7SPP0y7NuM+4ZHG/b9882+OfHcilaSqPDWUQoLbphcBpw/m/RA==", - "requires": { - "@babel/runtime": "^7.17.0", - "@emotion/is-prop-valid": "^1.1.1", - "@mui/utils": "^5.4.1", - "@popperjs/core": "^2.4.4", - "clsx": "^1.1.1", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - } - }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -16142,17 +15519,17 @@ } }, "@mui/system": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.4.1.tgz", - "integrity": "sha512-07JBYf9iQdxIHZU8cFOLoxBnkQDUPLb7UBhNxo4998yEqpWFJ00WKgEVYBKvPl0X+MRU/20wqFz6yGIuCx4AeA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.1.0.tgz", + "integrity": "sha512-1h+YDnPGfTWZkf7lgeNV+vw6altxXGLclXLdxs9GPzEMNYXX7xveUjmndYpO1p/yx7GNG2gLWWkFZ1TYCeo4+Q==", "requires": { - "@babel/runtime": "^7.17.0", - "@mui/private-theming": "^5.4.1", - "@mui/styled-engine": "^5.4.1", - "@mui/types": "^7.1.1", - "@mui/utils": "^5.4.1", + "@babel/runtime": "^7.16.0", + "@mui/private-theming": "^5.1.0", + "@mui/styled-engine": "^5.1.0", + "@mui/types": "^7.1.0", + "@mui/utils": "^5.1.0", "clsx": "^1.1.1", - "csstype": "^3.0.10", + "csstype": "^3.0.9", "prop-types": "^15.7.2" } }, @@ -16834,13 +16211,6 @@ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "optional": true, - "peer": true - }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -17641,18 +17011,6 @@ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==" }, - "canvas": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", - "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", - "optional": true, - "peer": true, - "requires": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" - } - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -17716,11 +17074,6 @@ "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.4.tgz", "integrity": "sha512-sbpkOw6z413p+HDGcBENe498WM9woqWHiJxCq7nvmxe9WmrUmqfAcxpIwAiMtM5Q3AhYkzXcNQHqsWq0mND51g==" }, - "classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -17782,13 +17135,6 @@ "simple-swizzle": "^0.2.2" } }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "optional": true, - "peer": true - }, "colorette": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", @@ -18158,11 +17504,6 @@ } } }, - "css-unit-converter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", - "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" - }, "css-vendor": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", @@ -18384,11 +17725,6 @@ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" }, - "decimal.js-light": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", - "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" - }, "decompress-response": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", @@ -19632,11 +18968,6 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, - "fast-equals": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", - "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==" - }, "fast-glob": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", @@ -19891,35 +19222,6 @@ "universalify": "^1.0.0" } }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - } - } - }, "fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", @@ -21441,43 +20743,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, - "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "optional": true, - "peer": true - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "optional": true, - "peer": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - } - } - }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -21621,43 +20886,6 @@ } } }, - "node-fetch": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", - "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", - "optional": true, - "peer": true, - "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "optional": true, - "peer": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "optional": true, - "peer": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "optional": true, - "peer": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } - }, "node-libs-browser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", @@ -21736,16 +20964,6 @@ "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "optional": true, - "peer": true, - "requires": { - "abbrev": "1" - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -22015,11 +21233,6 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, - "papaparse": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz", - "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==" - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -22779,11 +21992,6 @@ "prop-types": "^15.6.2" } }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, "react-minimal-pie-chart": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/react-minimal-pie-chart/-/react-minimal-pie-chart-8.2.0.tgz", @@ -22923,70 +22131,6 @@ "picomatch": "^2.2.1" } }, - "recharts": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.7.3.tgz", - "integrity": "sha512-cKoO9jUZRQavn06H6Ih2EcG82zUNdQH3OEGWVCmluSDyp3d7fIpDAsbMTd8hE8+T+MD8P76iicv/J4pJspDP7A==", - "requires": { - "classnames": "^2.2.5", - "eventemitter3": "^4.0.1", - "lodash": "^4.17.19", - "react-is": "^16.10.2", - "react-resize-detector": "^8.0.4", - "react-smooth": "^2.0.2", - "recharts-scale": "^0.4.4", - "reduce-css-calc": "^2.1.8", - "victory-vendor": "^36.6.8" - }, - "dependencies": { - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "react-resize-detector": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-8.1.0.tgz", - "integrity": "sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w==", - "requires": { - "lodash": "^4.17.21" - } - }, - "react-smooth": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.3.tgz", - "integrity": "sha512-yl4y3XiMorss7ayF5QnBiSprig0+qFHui8uh7Hgg46QX5O+aRMRKlfGGNGLHno35JkQSvSYY8eCWkBfHfrSHfg==", - "requires": { - "fast-equals": "^5.0.0", - "react-transition-group": "2.9.0" - }, - "dependencies": { - "react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "requires": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - } - } - } - } - } - }, - "recharts-scale": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", - "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", - "requires": { - "decimal.js-light": "^2.4.1" - } - }, "rechoir": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", @@ -22995,22 +22139,6 @@ "resolve": "^1.9.0" } }, - "reduce-css-calc": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", - "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", - "requires": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, "redux": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.1.tgz", @@ -23924,44 +23052,6 @@ "integrity": "sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==", "dev": true }, - "tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "optional": true, - "peer": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "optional": true, - "peer": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true, - "peer": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - } - } - }, "tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", diff --git a/src/fireedge/package.json b/src/fireedge/package.json index 33bd30f682..d874e5e1c8 100644 --- a/src/fireedge/package.json +++ b/src/fireedge/package.json @@ -36,7 +36,6 @@ "eslint-config-opennebula": "2.0.2", "eslint-import-resolver-alias": "1.1.2", "eslint-import-resolver-webpack": "0.13.0", - "file-loader": "5.0.0", "opennebula-generatepotfile": "1.0.0", "opennebula-potojson": "1.0.0", "react-refresh": "0.10.0", @@ -65,10 +64,9 @@ "@loadable/server": "5.15.1", "@loadable/webpack-plugin": "5.15.1", "@mui/lab": "5.0.0-alpha.59", - "@mui/material": "5.4.1", + "@mui/material": "5.1.0", "@mui/styles": "5.1.0", - "@mui/system": "5.4.1", - "@mui/x-data-grid": "5.0.1", + "@mui/system": "5.1.0", "@reduxjs/toolkit": "1.7.1", "atob": "2.1.2", "axios": "0.25.0", @@ -111,8 +109,8 @@ "notistack": "2.0.3", "opennebula-guacamole": "1.0.0", "opennebula-wmks": "2.1.4", - "papaparse": "5.4.1", "path": "0.12.7", + "process": "0.11.10", "prop-types": "15.7.2", "qrcode": "1.4.4", "react": "17.0.2", @@ -129,7 +127,6 @@ "react-table": "7.7.0", "react-transition-group": "4.4.1", "react-virtual": "2.7.1", - "recharts": "2.7.3", "redux": "4.1.1", "redux-thunk": "2.3.0", "rimraf": "3.0.2", diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/chartDefs.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/chartDefs.js deleted file mode 100644 index 9946bf0a86..0000000000 --- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/chartDefs.js +++ /dev/null @@ -1,83 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ -import PropTypes from 'prop-types' -import { CartesianGrid } from 'recharts' -import { Component, Fragment } from 'react' - -/** - * Generates a color based on the metric, datasetId, and theme type. - * - * @function - * @param {string} metric - The metric for which the color is generated. - * @param {object} metricHues - Object containing hue values for different metrics. - * @param {number} datasetId - The ID of the dataset. - * @returns {string} The generated color in HSL format. - */ -export const generateColorByMetric = (metric, metricHues, datasetId) => { - const baseHue = metricHues[metric] || 0 - - // Using datasetId as seed to generate a unique hue offset - const hueOffset = (datasetId * 1327) % 360 // 1327 is just a random prime number - - const baseSaturation = 90 - const baseLightness = 60 - - const hue = (baseHue + hueOffset) % 360 - const saturation = `${baseSaturation}%` - const lightness = `${baseLightness}%` - - return `hsl(${hue}, ${saturation}, ${lightness})` -} - -/** - * Returns a React component containing SVG definitions and a CartesianGrid for a chart. - * - * @function - * @param {Array} metrics - List of metrics. - * @param {number} datasetId - The ID of the dataset. - * @param {object} metricHues - Object containing hue values for different metrics. - * @returns {Component} A React component with SVG definitions and a CartesianGrid. - */ -export const GetChartDefs = (metrics, datasetId, metricHues) => ( - - - {metrics.map((metric) => { - const color = generateColorByMetric(metric, metricHues, datasetId) - - return ( - - - - - ) - })} - - - -) - -GetChartDefs.propTypes = { - metrics: PropTypes.arrayOf(PropTypes.string).isRequired, - metricHues: PropTypes.objectOf(PropTypes.number).isRequired, - datasetId: PropTypes.number.isRequired, -} diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/dataProcessing.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/dataProcessing.js deleted file mode 100644 index c88fb28ed1..0000000000 --- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/dataProcessing.js +++ /dev/null @@ -1,199 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ -/** - * Processes data for rendering on a chart. - * - * This function restructures the input data. For each unique grouping attribute, - * it creates an object that sums metric values across all datasets. If a dataset doesn't have - * a metric value for a particular group, it defaults to 0. - * - * @function - * @param {Array} uniqueGroups - An array of unique groups representing different data points or entities. - * @param {Array} datasets - An array of datasets. - * @param {Array} visibleDatasetIDs - An array of dataset ID's to display. - * @param {string} groupBy - The attribute by which data should be grouped (e.g., 'NAME', 'OID'). - * @returns {Array} An array of processed data items, each structured with properties for every metric from every dataset. - */ -export const processDataForChart = ( - uniqueGroups, - datasets, - visibleDatasetIDs, - groupBy -) => { - const visibleDatasets = datasets.filter((dataset) => - visibleDatasetIDs.includes(dataset.id) - ) - - return uniqueGroups.map((group) => { - const item = { [groupBy]: group } - visibleDatasets.forEach((dataset) => { - const matchingItem = dataset.data.find((d) => d[groupBy] === group) - dataset.metrics.forEach((metric) => { - item[`${metric.key}-${dataset.id}`] = matchingItem - ? matchingItem[metric.key] - : 0 - }) - }) - - return item - }) -} - -/** - * Recursively searches for the first array of objects in the given object. - * Used with all pool-like API requests to find the data array dynamically. - * - * @param {object} obj - The object to search within. - * @returns {Array|null} - The found array or null if not found. - */ -const findFirstArray = (obj) => { - for (const [, value] of Object.entries(obj)) { - if ( - Array.isArray(value) && - value.length > 0 && - typeof value[0] === 'object' - ) { - return value - } - if (typeof value === 'object') { - const result = findFirstArray(value) - if (result) return result - } - } - - return null -} - -/** - * Transforms the API response into the desired dataset format. - * - * @param {object} apiResponse - The API response to process. - * @param {object} keyMap - An object that maps the keys in the API response to the desired output keys. - * @param {Array} metricKeys - An array of keys to aggregate for the metrics. - * @param {Function} labelingFunction - A function to generate the label for the dataset. - * @returns {object} - The transformed dataset. - */ -export const transformApiResponseToDataset = ( - apiResponse, - keyMap, - metricKeys, - labelingFunction -) => { - const dataArray = findFirstArray(apiResponse) - - const transformedRecords = dataArray.map((record) => { - const transformedRecord = {} - Object.keys(keyMap).forEach((key) => { - transformedRecord[keyMap[key]] = record[key] - }) - - return transformedRecord - }) - - const metrics = metricKeys.map((key) => { - const total = transformedRecords.reduce( - (acc, record) => acc + parseFloat(record[key] || 0), - 0 - ) - - return { key: key, value: total } - }) - - let label = 'N/A' - if (labelingFunction) { - try { - label = labelingFunction(transformedRecords[0]) - } catch (error) { - // Handle this sometime - } - - return { - id: generateDatasetId({ - data: transformedRecords, - metrics: metrics, - label: label, - }), - data: transformedRecords, - metrics: metrics, - label: label, - } - } -} - -/** - * Filters a processed dataset based on a custom filter function and recalculates the label. - * - * @param {object} dataset - The processed dataset. - * @param {Function} filterFn - A custom function that determines which records to include. - * @param {Function} labelingFunction - A function to generate the label for the subset. - * @returns {object} - A subset of the dataset with a recalculated label. - */ -export const filterDataset = (dataset, filterFn, labelingFunction) => { - const { data, metrics } = dataset - - const filteredData = data.filter(filterFn) - - const filteredMetrics = metrics.map((metric) => { - const total = filteredData.reduce( - (acc, record) => acc + parseFloat(record[metric.key] || 0), - 0 - ) - - return { key: metric.key, value: total } - }) - - let label = 'N/A' - if (labelingFunction && filteredData.length > 0) { - try { - label = labelingFunction(filteredData[0]) - } catch (error) { - // Handle this sometime - } - - return { - id: generateDatasetId({ - data: filteredData, - metrics: metrics, - label: label, - }), - data: filteredData, - metrics: filteredMetrics, - label: label, - } - } -} - -const generateDatasetId = (dataset) => { - const dataLength = dataset.data.length - if (dataLength === 0) return generateChecksum('empty') - - const firstRecord = JSON.stringify(dataset.data[0]) - const middleRecord = JSON.stringify(dataset.data[Math.floor(dataLength / 2)]) - const lastRecord = JSON.stringify(dataset.data[dataLength - 1]) - - const combinedString = firstRecord + middleRecord + lastRecord + dataLength // This will not collide - - return generateChecksum(combinedString) -} - -const generateChecksum = (input) => { - let sum = 0 - for (let i = 0; i < input.length; i++) { - sum += input.charCodeAt(i) - } - - return sum * 1327 // Random prime number -} diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/exportCSV.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/exportCSV.js deleted file mode 100644 index b988ea5f69..0000000000 --- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/exportCSV.js +++ /dev/null @@ -1,47 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ -import Papa from 'papaparse' - -/** - * Exports the provided data as a CSV file. - * - * @function - * @param {Array} data - An array of datasets containing data to be exported. - * @returns {Error} - Returns the error to the Exporter component to enqueue it. - */ -export const exportDataToCSV = (data) => { - try { - const csvData = data.flatMap((item) => item.data) - - const csv = Papa.unparse(csvData) - const blob = new Blob([csv], { type: 'text/csv' }) - const url = window.URL.createObjectURL(blob) - const a = document.createElement('a') - a.setAttribute('hidden', '') - a.setAttribute('href', url) - a.setAttribute( - 'download', - data[0]?.label - ? `${data[0].label.replace(/ /g, '')}_report.csv` - : 'one_report.csv' - ) - document.body.appendChild(a) - a.click() - document.body.removeChild(a) - } catch (error) { - return error - } -} diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/exportPDF.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/exportPDF.js deleted file mode 100644 index a296cd65f6..0000000000 --- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/exportPDF.js +++ /dev/null @@ -1,121 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ -import ReactDOMServer from 'react-dom/server' -import { - Table, - TableBody, - TableCell, - TableContainer, - TableHead, - TableRow, - Paper, - Box, -} from '@mui/material' - -import logo from 'client/assets/images/logo.png' - -/** - * Generates a printable PDF report from the provided data. - * - * @function - * @param {Array} data - The data to be exported to PDF. - * @returns {Error} - Returns the error to the Exporter component to enqueue it. - */ -export const exportDataToPDF = (data) => { - try { - const rows = data.flatMap((item) => item.data) - - const tableComponent = ( - - Logo - -

- Data Report -

- - - - - {Object.keys(rows[0]).map((header) => ( - - {header} - - ))} - - - - {rows.map((row, rowIndex) => ( - - {Object.values(row).map((value, valueIndex) => ( - - {String(value)} - - ))} - - ))} - -
-
-
- ) - - const tableHTML = ReactDOMServer.renderToString(tableComponent) - - const iframe = document.createElement('iframe') - iframe.style.display = 'none' - document.body.appendChild(iframe) - iframe.contentDocument.write( - 'Accounting Report' - ) - iframe.contentDocument.write(tableHTML) - iframe.contentDocument.write('') - iframe.contentDocument.close() - - iframe.contentWindow.print() - - setTimeout(() => { - document.body.removeChild(iframe) - }, 1000) - } catch (error) { - return error - } -} diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/index.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/index.js deleted file mode 100644 index 3e9ff1e621..0000000000 --- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/scripts/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ -import { - processDataForChart, - transformApiResponseToDataset, - filterDataset, -} from 'client/components/Charts/MultiChart/helpers/scripts/dataProcessing' -import { - generateColorByMetric, - GetChartDefs, -} from 'client/components/Charts/MultiChart/helpers/scripts/chartDefs' -import { exportDataToPDF } from 'client/components/Charts/MultiChart/helpers/scripts/exportPDF' -import { exportDataToCSV } from 'client/components/Charts/MultiChart/helpers/scripts/exportCSV' - -export { - processDataForChart, - transformApiResponseToDataset, - filterDataset, - generateColorByMetric, - GetChartDefs, - exportDataToPDF, - exportDataToCSV, -} diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/ChartRenderer.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/ChartRenderer.js deleted file mode 100644 index 6650f47e6f..0000000000 --- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/ChartRenderer.js +++ /dev/null @@ -1,194 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ -import React from 'react' -import PropTypes from 'prop-types' -import { - BarChart, - LineChart, - AreaChart, - XAxis, - YAxis, - Tooltip, - Bar, - Legend, - Line, - Area, - ResponsiveContainer, -} from 'recharts' - -import { DataGridTable } from 'client/components/Tables' -import { CustomTooltip } from 'client/components/Tooltip' - -import { generateColorByMetric } from 'client/components/Charts/MultiChart/helpers/scripts' - -const CHART_TYPES = { - BAR: 'bar', - LINE: 'line', - AREA: 'area', - TABLE: 'table', -} - -const ChartComponents = { - [CHART_TYPES.BAR]: BarChart, - [CHART_TYPES.LINE]: LineChart, - [CHART_TYPES.AREA]: AreaChart, - [CHART_TYPES.TABLE]: DataGridTable, -} - -const ChartElements = { - [CHART_TYPES.BAR]: Bar, - [CHART_TYPES.LINE]: Line, - [CHART_TYPES.AREA]: Area, -} - -/** - * Renders a chart based on the provided type and data. - * - * @param {object} props - The properties for the component. - * @param {'bar' | 'line' | 'area' | 'table'} props.chartType - The type of chart to render. - * @param {Array} props.datasets - The datasets to be used for the chart. - * @param {object} props.selectedMetrics - The metrics selected for display. - * @param {Function} props.customChartDefs - Custom definitions for the chart. - * @param {Array} props.paginatedData - The paginated data for the chart. - * @param {Array} props.tableColumns - The columns for the table chart type. - * @param {Function} props.humanReadableMetric - Function to convert metric keys to human-readable format. - * @param {string} props.groupBy - The variable to group data under. - * @param {object} props.metricHues - Object containing hue values for different metrics. - * @returns {React.Component} The rendered chart component. - */ -export const ChartRenderer = ({ - chartType, - datasets, - selectedMetrics, - customChartDefs, - paginatedData, - tableColumns, - humanReadableMetric, - groupBy, - metricHues, -}) => { - const ChartComponent = ChartComponents[chartType] - const ChartElement = ChartElements[chartType] - - return ( - - {chartType === CHART_TYPES.TABLE ? ( - - ) : ( - - {datasets.map((dataset) => - customChartDefs( - dataset.metrics.map((m) => m.key), - dataset.id, - metricHues - ) - )} - - - ds.label)} - generateColor={generateColorByMetric} - formatMetric={humanReadableMetric} - metricHues={metricHues} - /> - } - cursor="pointer" - /> - { - const [metric, datasetId] = value.split('-') - const currentDataset = datasets.find( - (ds) => ds.id === parseInt(datasetId, 10) - ) - - const datasetLabel = currentDataset.label - - const lastSelectedMetric = [...currentDataset.metrics] - .reverse() - .find((m) => selectedMetrics[m.key]) - - if (lastSelectedMetric && metric === lastSelectedMetric.key) { - return `${humanReadableMetric(metric)} (${datasetLabel})` - } - - return humanReadableMetric(metric) - }} - wrapperStyle={{ - wordWrap: 'break-word', - maxWidth: '100%', - }} - /> - - {datasets.map((dataset) => - dataset.metrics.map((metric) => - selectedMetrics[metric.key] ? ( - - ) : null - ) - )} - - )} - - ) -} - -ChartRenderer.propTypes = { - chartType: PropTypes.oneOf(['bar', 'line', 'area', 'table']).isRequired, - datasets: PropTypes.arrayOf(PropTypes.object).isRequired, - selectedMetrics: PropTypes.object.isRequired, - customChartDefs: PropTypes.func.isRequired, - paginatedData: PropTypes.arrayOf(PropTypes.object).isRequired, - tableColumns: PropTypes.arrayOf(PropTypes.object), - humanReadableMetric: PropTypes.func.isRequired, - groupBy: PropTypes.string.isRequired, - metricHues: PropTypes.objectOf(PropTypes.number).isRequired, -} - -ChartRenderer.defaultProps = { - groupBy: 'NAME', -} diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/Exporter.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/Exporter.js deleted file mode 100644 index 865413a754..0000000000 --- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/Exporter.js +++ /dev/null @@ -1,117 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ -import PropTypes from 'prop-types' -import React, { useState } from 'react' -import { Button, Menu, MenuItem, Box } from '@mui/material' -import { Download } from 'iconoir-react' -import { - exportDataToCSV, - exportDataToPDF, -} from 'client/components/Charts/MultiChart/helpers/scripts' -import { useGeneralApi } from 'client/features/General' - -/** - * Renders a button that provides export options for data. - * - * @param {object} props - The properties for the component. - * @param {Array} props.data - The data to be exported. - * @param {Array} props.exportOptions - The available export options. - * @param {object} props.exportHandlers - The handlers for each export type. - * @returns {React.Component} The rendered export button component. - */ -export const ExportButton = ({ data, exportOptions, exportHandlers }) => { - const [anchorEl, setAnchorEl] = useState(null) - const { enqueueError } = useGeneralApi() - - const handleMenuOpen = (event) => { - setAnchorEl(event.currentTarget) - } - - const handleMenuClose = () => { - setAnchorEl(null) - } - - const handleExport = (type) => { - if (exportHandlers[type]) { - const error = exportHandlers[type](data) - if (error) { - enqueueError( - 'Error exporting data to ' + type.toUpperCase() + ': ' + error.message - ) - } - } - handleMenuClose() - } - - const noData = - !data || - data.length === 0 || - data.every((item) => !item.data || item.data.length === 0) - - return ( - - - - {exportOptions.map((option) => ( - handleExport(option.type)}> - {option.label} - - ))} - - - ) -} - -ExportButton.propTypes = { - data: PropTypes.arrayOf(PropTypes.object).isRequired, - exportOptions: PropTypes.arrayOf( - PropTypes.shape({ - type: PropTypes.string.isRequired, - label: PropTypes.string.isRequired, - }) - ), - exportHandlers: PropTypes.objectOf(PropTypes.func), -} - -ExportButton.defaultProps = { - exportOptions: [ - { type: 'csv', label: 'Export as CSV' }, - { type: 'pdf', label: 'Export as PDF' }, - ], - exportHandlers: { - csv: (data) => exportDataToCSV(data), - pdf: (data) => exportDataToPDF(data), - }, -} diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/NavigationController.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/NavigationController.js deleted file mode 100644 index e10268a67c..0000000000 --- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/NavigationController.js +++ /dev/null @@ -1,170 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ -import React from 'react' -import PropTypes from 'prop-types' -import { NavArrowRight, NavArrowLeft, Filter } from 'iconoir-react' -import { - Box, - IconButton, - FormControl, - Select, - MenuItem, - Checkbox, - ListItemText, -} from '@mui/material' - -/** - * NavigationController component for navigating through items and filtering them. - * - * @param {object} props - Props - * @param {Function} props.onPrev - Callback function when the previous button is clicked. - * @param {Function} props.onNext - Callback function when the next button is clicked. - * @param {boolean} props.isPrevDisabled - Determines if the previous button is disabled. - * @param {boolean} props.isNextDisabled - Determines if the next button is disabled. - * @param {Array} props.selectedItems - List of currently selected items. - * @param {Array} props.items - List of all available items. - * @param {Function} props.setSelectedItems - Callback function to set the selected items. - * @param {boolean} props.isFilterDisabled - Determines if the filter is disabled. - * @param {boolean} props.isPaginationDisabled - Determines if the pagination is disabled. - * @param {object} props.styles - Custom styles for the component. - * @returns {React.Component} NavigationController component. - */ -export const NavigationController = ({ - onPrev, - onNext, - isPrevDisabled, - isNextDisabled, - selectedItems, - items, - setSelectedItems, - isFilterDisabled, - isPaginationDisabled, - styles, -}) => ( - - - - - - - - - - - - - - - - - - - -) - -const BoxedIcon = ({ children, ...props }) => ( - - {children} - -) - -NavigationController.propTypes = { - onPrev: PropTypes.func.isRequired, - onNext: PropTypes.func.isRequired, - isPrevDisabled: PropTypes.bool.isRequired, - isNextDisabled: PropTypes.bool.isRequired, - selectedItems: PropTypes.array.isRequired, - items: PropTypes.array, - setSelectedItems: PropTypes.func.isRequired, - isFilterDisabled: PropTypes.bool.isRequired, - isPaginationDisabled: PropTypes.bool.isRequired, - styles: PropTypes.object, -} - -BoxedIcon.propTypes = { - children: PropTypes.node.isRequired, -} - -NavigationController.defaultProps = { - styles: { - container: { - display: 'flex', - alignItems: 'center', - border: 'none', - borderBottom: 'none', - borderRadius: '2px 2px 0 0', - }, - formControl: { - minWidth: 40, - '& .MuiOutlinedInput-notchedOutline': { - border: 'none', - }, - '&.Mui-focused .MuiOutlinedInput-notchedOutline': { - border: 'none', - }, - }, - select: { - borderRadius: 0, - paddingRight: 0, - border: 'none', - }, - divider: { - width: 1, - height: '100%', - }, - }, - items: [], -} diff --git a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/index.js b/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/index.js deleted file mode 100644 index c65b4df6b6..0000000000 --- a/src/fireedge/src/client/components/Charts/MultiChart/helpers/subComponents/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ -import { ChartRenderer } from 'client/components/Charts/MultiChart/helpers/subComponents/ChartRenderer' -import { NavigationController } from 'client/components/Charts/MultiChart/helpers/subComponents/NavigationController' -import { ExportButton } from 'client/components/Charts/MultiChart/helpers/subComponents/Exporter' - -export { ChartRenderer, NavigationController, ExportButton } diff --git a/src/fireedge/src/client/components/Charts/MultiChart/index.js b/src/fireedge/src/client/components/Charts/MultiChart/index.js deleted file mode 100644 index d273f55748..0000000000 --- a/src/fireedge/src/client/components/Charts/MultiChart/index.js +++ /dev/null @@ -1,252 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ -import PropTypes from 'prop-types' -import React, { useState, useMemo, useEffect } from 'react' -import { Box } from '@mui/material' - -import { - ChartRenderer, - NavigationController, - ExportButton, -} from 'client/components/Charts/MultiChart/helpers/subComponents' -import { LoadingDisplay } from 'client/components/LoadingState' -import { - processDataForChart, - GetChartDefs, -} from 'client/components/Charts/MultiChart/helpers/scripts' - -/** - * @param {object} props - Component properties. - * @param {Array} props.datasets - Array of datasets to visualize. - * @param {Array} props.visibleDatasets - Array of visible dataset IDs (subset of datasets). - * @param {Array} props.xAxisLabels - Array of unique names for the X-axis. - * @param {string} props.chartType - Type of chart to render ('bar', 'line', etc.). - * @param {object} props.selectedMetrics - Object containing selected metrics (e.g., "cpuHours"). - * @param {string} [props.error] - Error message, if any. - * @param {string} props.groupBy - Key to group X values by. - * @param {number} props.ItemsPerPage - Number of items to display per page. - * @param {Array} props.tableColumns - Array of table column configurations. - * @param {Function} props.customChartDefs - Function to generate custom chart definitions. - * @param {object} [props.metricNames={}] - Object mapping metric keys to human-readable names. - * @param {object} props.metricHues - Object containing hue values for different metrics. - * @returns {React.Component} MultiChart component. - */ -const MultiChart = ({ - datasets, - visibleDatasets, - xAxisLabels: passedxAxisLabels, - chartType, - selectedMetrics: passedSelectedMetrics, - error, - ItemsPerPage, - tableColumns, - customChartDefs, - metricNames, - groupBy, - metricHues: passedMetricHues, -}) => { - const [currentPage, setCurrentPage] = useState(0) - const [selectedXValues, setSelectedXValues] = useState([]) - const [isFilterDisabled, setIsFilterDisabled] = useState(true) - const [isPaginationDisabled, setIsPaginationDisabled] = useState(true) - - const xAxisLabels = useMemo(() => { - if (passedxAxisLabels && passedxAxisLabels.length > 0) { - return passedxAxisLabels - } - - return [ - ...new Set( - datasets.flatMap((dataset) => dataset.data.map((item) => item[groupBy])) - ), - ] - }, [datasets, groupBy, passedxAxisLabels]) - - const selectedMetrics = useMemo(() => { - if ( - passedSelectedMetrics && - Object.keys(passedSelectedMetrics).length > 0 - ) { - return passedSelectedMetrics - } - - return datasets.reduce((acc, dataset) => { - dataset.metrics.forEach((metric) => { - acc[metric.key] = true - }) - - return acc - }, {}) - }, [datasets, passedSelectedMetrics]) - - const metricHues = useMemo(() => { - if (passedMetricHues && Object.keys(passedMetricHues).length > 0) { - return passedMetricHues - } - - const allMetrics = [ - ...new Set( - datasets.flatMap((dataset) => - dataset.metrics.map((metric) => metric.key) - ) - ), - ] - - const hueStep = 360 / allMetrics.length - - return allMetrics.reduce((acc, metric, index) => { - acc[metric] = index * hueStep - - return acc - }, {}) - }, [datasets, passedMetricHues]) - - const visibleDatasetIDs = useMemo(() => { - if (visibleDatasets && visibleDatasets.length > 0) { - return visibleDatasets - } - - return datasets.map((dataset) => dataset.id) - }, [datasets, visibleDatasets]) - - const noDataAvailable = visibleDatasetIDs.length === 0 - - const mergedDataForXAxis = processDataForChart( - xAxisLabels, - datasets, - visibleDatasetIDs, - groupBy - ) - - const humanReadableMetric = (key) => metricNames[key] || key - - useEffect(() => { - setSelectedXValues(xAxisLabels) - }, [xAxisLabels]) - - useEffect(() => { - setIsFilterDisabled(visibleDatasetIDs.length === 0) - }, [visibleDatasetIDs]) - - useEffect(() => { - setIsPaginationDisabled( - selectedXValues.length <= ItemsPerPage || isFilterDisabled - ) - }, [selectedXValues, isFilterDisabled]) - - const paginatedData = useMemo(() => { - const filteredData = mergedDataForXAxis.filter((item) => - selectedXValues.includes(item[groupBy]) - ) - const start = currentPage * ItemsPerPage - const end = start + ItemsPerPage - - return filteredData.slice(start, end) - }, [mergedDataForXAxis, currentPage, selectedXValues]) - - return ( - - - {chartType !== 'table' && ( - - setCurrentPage((prev) => Math.max(prev - 1, 0))} - onNext={() => - setCurrentPage((prev) => - Math.min( - prev + 1, - Math.ceil(selectedXValues.length / ItemsPerPage) - 1 - ) - ) - } - isPrevDisabled={currentPage === 0} - isNextDisabled={ - currentPage === - Math.ceil(selectedXValues.length / ItemsPerPage) - 1 - } - selectedItems={selectedXValues} - items={xAxisLabels} - setSelectedItems={setSelectedXValues} - isFilterDisabled={isFilterDisabled} - isPaginationDisabled={isPaginationDisabled} - /> - - )} - - - - - - - {error || noDataAvailable ? ( - - ) : ( - - )} - - - ) -} - -MultiChart.propTypes = { - datasets: PropTypes.arrayOf( - PropTypes.shape({ - id: PropTypes.number.isRequired, - data: PropTypes.arrayOf(PropTypes.object.isRequired).isRequired, - metrics: PropTypes.arrayOf( - PropTypes.shape({ - key: PropTypes.string.isRequired, - value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]) - .isRequired, - }) - ).isRequired, - label: PropTypes.string.isRequired, - }) - ).isRequired, - visibleDatasets: PropTypes.arrayOf(PropTypes.number).isRequired, - xAxisLabels: PropTypes.arrayOf(PropTypes.string), - chartType: PropTypes.oneOf(['bar', 'line', 'area', 'table']).isRequired, - selectedMetrics: PropTypes.object, - error: PropTypes.string, - groupBy: PropTypes.string, - ItemsPerPage: PropTypes.number.isRequired, - tableColumns: PropTypes.arrayOf(PropTypes.object), - customChartDefs: PropTypes.func.isRequired, - metricNames: PropTypes.object, - metricHues: PropTypes.objectOf(PropTypes.number).isRequired, -} - -MultiChart.defaultProps = { - visibleDatasets: [], - chartType: 'bar', - ItemsPerPage: 10, - groupBy: 'ID', - customChartDefs: GetChartDefs, - metricNames: {}, - metricHues: {}, -} - -export default MultiChart diff --git a/src/fireedge/src/client/components/Charts/index.js b/src/fireedge/src/client/components/Charts/index.js index 1cc4673200..1a9a4f56fe 100644 --- a/src/fireedge/src/client/components/Charts/index.js +++ b/src/fireedge/src/client/components/Charts/index.js @@ -16,6 +16,5 @@ import CircleChart from 'client/components/Charts/CircleChart' import SingleBar from 'client/components/Charts/SingleBar' import Chartist from 'client/components/Charts/Chartist' -import MultiChart from 'client/components/Charts/MultiChart/index' -export { CircleChart, SingleBar, Chartist, MultiChart } +export { CircleChart, SingleBar, Chartist } diff --git a/src/fireedge/src/client/components/LoadingState/LoadingDisplay.js b/src/fireedge/src/client/components/LoadingState/LoadingDisplay.js deleted file mode 100644 index 9f4a013dd2..0000000000 --- a/src/fireedge/src/client/components/LoadingState/LoadingDisplay.js +++ /dev/null @@ -1,53 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ -import PropTypes from 'prop-types' -import React from 'react' -import { Box, Typography } from '@mui/material' -import { InfoEmpty, CloudError } from 'iconoir-react' - -/** - * Renders a display message based on the presence of an error. - * - * @param {object} props - The properties for the component. - * @param {boolean} props.error - Indicates if there was an error fetching data. - * @returns {React.Component} The rendered loading display component. - */ -export const LoadingDisplay = ({ error }) => { - const displayMessage = error ? 'Error fetching data' : 'No data available' - const DisplayIcon = error ? CloudError : InfoEmpty - - return ( - - - - {displayMessage} - - - ) -} - -LoadingDisplay.propTypes = { - error: PropTypes.bool, -} diff --git a/src/fireedge/src/client/components/LoadingState/index.js b/src/fireedge/src/client/components/LoadingState/index.js deleted file mode 100644 index f05179416b..0000000000 --- a/src/fireedge/src/client/components/LoadingState/index.js +++ /dev/null @@ -1,17 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ - -export { LoadingDisplay } from './LoadingDisplay' diff --git a/src/fireedge/src/client/components/Tables/DataGrid/index.js b/src/fireedge/src/client/components/Tables/DataGrid/index.js deleted file mode 100644 index ef12d90178..0000000000 --- a/src/fireedge/src/client/components/Tables/DataGrid/index.js +++ /dev/null @@ -1,66 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ -import React from 'react' -import PropTypes from 'prop-types' -import { DataGrid } from '@mui/x-data-grid' -import { Box } from '@mui/material' - -/** - * Renders a data grid table using the provided data and columns. - * - * @param {object} props - The properties for the component. - * @param {Array} props.data - The data to be displayed in the table. - * @param {Array} props.columns - The columns configuration for the table. - * @returns {React.Component} The rendered data grid table component. - */ -const DataGridTable = ({ data, columns }) => { - const flattenedData = data.flatMap((dataset) => dataset.data) - - return ( - - ({ ...row, id: index }))} - columns={columns} - rowsPerPageOptions={[25, 50, 100]} - /> - - ) -} - -DataGridTable.propTypes = { - data: PropTypes.arrayOf( - PropTypes.shape({ - data: PropTypes.arrayOf(PropTypes.object).isRequired, - }) - ).isRequired, - columns: PropTypes.arrayOf( - PropTypes.shape({ - field: PropTypes.string.isRequired, - headerName: PropTypes.string.isRequired, - width: PropTypes.number, - }) - ).isRequired, -} - -export default DataGridTable diff --git a/src/fireedge/src/client/components/Tables/index.js b/src/fireedge/src/client/components/Tables/index.js index d74572c987..f5be98fbb6 100644 --- a/src/fireedge/src/client/components/Tables/index.js +++ b/src/fireedge/src/client/components/Tables/index.js @@ -17,7 +17,6 @@ import AllImagesTable from 'client/components/Tables/AllImages' import BackupsTable from 'client/components/Tables/Backups' import ClustersTable from 'client/components/Tables/Clusters' import DatastoresTable from 'client/components/Tables/Datastores' -import DataGridTable from 'client/components/Tables/DataGrid' import DockerHubTagsTable from 'client/components/Tables/DockerHubTags' import EnhancedTable from 'client/components/Tables/Enhanced' import GroupsTable from 'client/components/Tables/Groups' @@ -53,7 +52,6 @@ export { ClustersTable, DatastoresTable, DockerHubTagsTable, - DataGridTable, GroupsTable, HostsTable, ImagesTable, diff --git a/src/fireedge/src/client/components/Tooltip/MultiChart/AccountingTooltip.js b/src/fireedge/src/client/components/Tooltip/MultiChart/AccountingTooltip.js deleted file mode 100644 index 036fce90cf..0000000000 --- a/src/fireedge/src/client/components/Tooltip/MultiChart/AccountingTooltip.js +++ /dev/null @@ -1,121 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ - -import PropTypes from 'prop-types' -import React, { useMemo } from 'react' -import { Paper, Typography, Box } from '@mui/material' - -export const CustomTooltip = React.memo( - ({ active, payload, labels, generateColor, formatMetric, metricHues }) => { - if (active && payload && payload.length) { - const groupedMetrics = useMemo( - () => - payload.reduce((acc, entry) => { - const [metric, datasetId] = entry.name.split('-') - if (!acc[datasetId]) { - acc[datasetId] = [] - } - acc[datasetId].push({ metric, value: entry.value }) - - return acc - }, {}), - [payload] - ) - - const keys = Object.keys(groupedMetrics) - const itemWidth = keys.length === 1 ? '100%' : '50%' - - return ( - - {keys.map((datasetId, index) => ( - - - {labels[index]} - - {/* eslint-disable-next-line no-shadow */} - {groupedMetrics[datasetId].map((entry, index) => { - const metricColor = generateColor( - entry.metric, - metricHues, - parseInt(datasetId, 10) - ) - - const formattedValue = - typeof entry.value === 'number' - ? entry.value.toFixed(2) - : String(entry.value).slice(0, 12) - - return ( - - - {formatMetric(entry.metric)}: - - {formattedValue} - - ) - })} - - ))} - - ) - } - - return null - } -) - -CustomTooltip.displayName = 'CustomTooltip' - -CustomTooltip.propTypes = { - active: PropTypes.bool, - payload: PropTypes.arrayOf(PropTypes.object), - labels: PropTypes.arrayOf(PropTypes.string), - generateColor: PropTypes.func, - formatMetric: PropTypes.func, - metricHues: PropTypes.objectOf(PropTypes.number).isRequired, -} - -CustomTooltip.defaultProps = { - active: false, - payload: [], - labels: [], - generateColor: (metric, hues, id) => hues[metric] || '#000', - formatMetric: (input) => `${input}`, -} diff --git a/src/fireedge/src/client/components/Tooltip/index.js b/src/fireedge/src/client/components/Tooltip/index.js deleted file mode 100644 index 3b8e35a243..0000000000 --- a/src/fireedge/src/client/components/Tooltip/index.js +++ /dev/null @@ -1,18 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2023, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ -import { CustomTooltip } from './MultiChart/AccountingTooltip' - -export { CustomTooltip } diff --git a/src/fireedge/webpack.config.dev.client.js b/src/fireedge/webpack.config.dev.client.js index 4d8d122035..8cafe189b7 100644 --- a/src/fireedge/webpack.config.dev.client.js +++ b/src/fireedge/webpack.config.dev.client.js @@ -52,10 +52,6 @@ const getDevConfiguration = () => { path: path.resolve(__dirname, 'dist'), publicPath: `${appName}/client`, }, - watchOptions: { - poll: 1000, - ignored: /node_modules/, - }, module: { rules: [ { @@ -75,18 +71,6 @@ const getDevConfiguration = () => { test: /\.css$/i, use: ['style-loader', 'css-loader'], }, - { - test: /\.(png|jpe?g|gif)$/i, - use: [ - { - loader: 'file-loader', - options: { - name: '[path][name].[ext]', - outputPath: 'assets/images/', - }, - }, - ], - }, ], }, resolve: { diff --git a/src/fireedge/webpack.config.prod.client.js b/src/fireedge/webpack.config.prod.client.js index a14f5e6019..3d8da94c21 100644 --- a/src/fireedge/webpack.config.prod.client.js +++ b/src/fireedge/webpack.config.prod.client.js @@ -36,19 +36,6 @@ const css = { use: ['style-loader', 'css-loader'], } -const images = { - test: /\.(png|jpe?g|gif)$/i, - use: [ - { - loader: 'file-loader', - options: { - name: '[path][name].[ext]', - outputPath: 'assets/images/', - }, - }, - ], -} - /** * Bundle app. * @@ -103,7 +90,7 @@ const bundle = ({ assets = false, name = 'sunstone' }) => { minimizer: [new TerserPlugin({ extractComments: false })], }, module: { - rules: [js, css, images], + rules: [js, css], }, } } diff --git a/src/fireedge/webpack.config.prod.server.js b/src/fireedge/webpack.config.prod.server.js index 3d4ea6b80b..3517dc3554 100644 --- a/src/fireedge/webpack.config.prod.server.js +++ b/src/fireedge/webpack.config.prod.server.js @@ -41,19 +41,6 @@ const css = { ], } -const images = { - test: /\.(png|jpe?g|gif)$/i, - use: [ - { - loader: 'file-loader', - options: { - name: '[path][name].[ext]', - outputPath: 'assets/images/', - }, - }, - ], -} - const worker = { test: /\.worker\.js$/, loader: 'worker-loader', @@ -92,6 +79,6 @@ module.exports = { minimizer: [new TerserPlugin({ extractComments: false })], }, module: { - rules: [js, worker, css, images], + rules: [js, worker, css], }, }