diff --git a/package-lock.json b/package-lock.json index 088954ab..d483480c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "hhd-ui", - "version": "0.13.2", + "version": "0.13.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "hhd-ui", - "version": "0.13.2", + "version": "0.13.3", "dependencies": { "@ag-grid-community/client-side-row-model": "^30.0.3", "@ag-grid-community/core": "^30.0.3", @@ -15,6 +15,7 @@ "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.14.0", + "@mui/material": "^5.14.2", "@tanstack/react-table": "^8.9.3", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", @@ -82,8 +83,9 @@ } }, "node_modules/@adobe/css-tools": { - "version": "4.0.1", - "license": "MIT" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz", + "integrity": "sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==" }, "node_modules/@ag-grid-community/client-side-row-model": { "version": "30.0.3", @@ -141,16 +143,81 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dependencies": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", @@ -217,12 +284,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -278,22 +345,22 @@ "dev": true }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -383,9 +450,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } @@ -414,12 +481,12 @@ } }, "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -491,9 +558,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -644,33 +711,33 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -679,12 +746,12 @@ } }, "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1492,15 +1559,14 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-beta.7", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.7.tgz", - "integrity": "sha512-Pjbwm6gjiS96kOMF7E5fjEJsenc0tZBesrLQ4rrdi3eT/c/yhSWnPbCUkHSz8bnS0l3/VQ8bA+oERSGSV2PK6A==", - "peer": true, + "version": "5.0.0-beta.8", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.8.tgz", + "integrity": "sha512-b4vVjMZx5KzzEMf4arXKoeV5ZegAMOoPwoy1vfUBwhvXc2QtaaAyBp50U7OA2L06Leubc1A+lEp3eqwZoFn87g==", "dependencies": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.22.6", "@emotion/is-prop-valid": "^1.2.1", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.7", + "@mui/utils": "^5.14.1", "@popperjs/core": "^2.11.8", "clsx": "^1.2.1", "prop-types": "^15.8.1", @@ -1527,14 +1593,12 @@ "node_modules/@mui/base/node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "peer": true + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.0.tgz", - "integrity": "sha512-SYBOVCatVDUf/lbrLGah09bHhX5WfUXg7kSskfLILr6SvKRni0NLp0aonxQ0SMALVVK3Qwa6cW4CdWuwS0gC1w==", - "peer": true, + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.2.tgz", + "integrity": "sha512-x+c/MgDL1t/IIy5lDbMlrDouFG5DYZbl3DP4dbbuhlpPFBnE9glYwmJEee/orVHQpOPwLxCAIWQs+2DKSaBVWQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" @@ -1566,17 +1630,16 @@ } }, "node_modules/@mui/material": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.0.tgz", - "integrity": "sha512-HP7CP71NhMkui2HUIEKl2/JfuHMuoarSUWAKlNw6s17bl/Num9rN61EM6uUzc2A2zHjj/00A66GnvDnmixEJEw==", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.22.5", - "@mui/base": "5.0.0-beta.7", - "@mui/core-downloads-tracker": "^5.14.0", - "@mui/system": "^5.14.0", + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.2.tgz", + "integrity": "sha512-TgNR4/YRL11RifsnMWNhITNCkGJYVz20SCvVJBBoU5Y/KhUNSSJxjDpEB8VrnY+sUsV0NigLCkHZJglfsiS3Pw==", + "dependencies": { + "@babel/runtime": "^7.22.6", + "@mui/base": "5.0.0-beta.8", + "@mui/core-downloads-tracker": "^5.14.2", + "@mui/system": "^5.14.1", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.7", + "@mui/utils": "^5.14.1", "@types/react-transition-group": "^4.4.6", "clsx": "^1.2.1", "csstype": "^3.1.2", @@ -1613,14 +1676,12 @@ "node_modules/@mui/material/node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "peer": true + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/@mui/private-theming": { "version": "5.13.7", "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.7.tgz", "integrity": "sha512-qbSr+udcij5F9dKhGX7fEdx2drXchq7htLNr2Qg2Ma+WJ6q0ERlEqGSBiPiVDJkptcjeVL4DGmcf1wl5+vD4EA==", - "peer": true, "dependencies": { "@babel/runtime": "^7.22.5", "@mui/utils": "^5.13.7", @@ -1647,7 +1708,6 @@ "version": "5.13.2", "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", - "peer": true, "dependencies": { "@babel/runtime": "^7.21.0", "@emotion/cache": "^11.11.0", @@ -1676,16 +1736,15 @@ } }, "node_modules/@mui/system": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.0.tgz", - "integrity": "sha512-0HZGkX8miJbiNw+rjlZ9l0Cfkz1bSqfSHQH0EH9J+nx0aAm5cBleg9piOlLdCNIWGgecCqsw4x62erGrGjjcJg==", - "peer": true, + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.1.tgz", + "integrity": "sha512-u+xlsU34Jdkgx1CxmBnIC4Y08uPdVX5iEd3S/1dggDFtOGp+Lj8xmKRJAQ8PJOOJLOh8pDwaZx4AwXikL4l1QA==", "dependencies": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.22.6", "@mui/private-theming": "^5.13.7", "@mui/styled-engine": "^5.13.2", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.7", + "@mui/utils": "^5.14.1", "clsx": "^1.2.1", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -1719,7 +1778,6 @@ "version": "7.2.4", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", - "peer": true, "peerDependencies": { "@types/react": "*" }, @@ -1730,12 +1788,11 @@ } }, "node_modules/@mui/utils": { - "version": "5.13.7", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.7.tgz", - "integrity": "sha512-/3BLptG/q0u36eYED7Nhf4fKXmcKb6LjjT7ZMwhZIZSdSxVqDqSTmATW3a56n3KEPQUXCU9TpxAfCBQhs6brVA==", - "peer": true, + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.1.tgz", + "integrity": "sha512-39KHKK2JeqRmuUcLDLwM+c2XfVC136C5/yUyQXmO2PVbOb2Bol4KxtkssEqCbTwg87PSCG3f1Tb0keRsK7cVGw==", "dependencies": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.22.6", "@types/prop-types": "^15.7.5", "@types/react-is": "^18.2.1", "prop-types": "^15.8.1", @@ -1755,8 +1812,7 @@ "node_modules/@mui/utils/node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "peer": true + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", @@ -2216,7 +2272,6 @@ "version": "18.2.1", "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", - "peer": true, "dependencies": { "@types/react": "*" } @@ -6453,9 +6508,9 @@ "license": "MIT" }, "node_modules/postcss": { - "version": "8.4.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.25.tgz", - "integrity": "sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "dev": true, "funding": [ { @@ -8938,7 +8993,9 @@ "dev": true }, "@adobe/css-tools": { - "version": "4.0.1" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz", + "integrity": "sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==" }, "@ag-grid-community/client-side-row-model": { "version": "30.0.3", @@ -8985,11 +9042,63 @@ } }, "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "requires": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/compat-data": { @@ -9039,12 +9148,12 @@ } }, "@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "requires": { - "@babel/types": "^7.22.5", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -9090,19 +9199,19 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true }, "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { @@ -9165,9 +9274,9 @@ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" }, "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" }, "@babel/helper-validator-option": { "version": "7.22.5", @@ -9187,12 +9296,12 @@ } }, "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -9248,9 +9357,9 @@ } }, "@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true }, "@babel/plugin-syntax-jsx": { @@ -9344,41 +9453,41 @@ } }, "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "dev": true, "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "requires": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -9865,15 +9974,14 @@ "version": "3.1.0" }, "@mui/base": { - "version": "5.0.0-beta.7", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.7.tgz", - "integrity": "sha512-Pjbwm6gjiS96kOMF7E5fjEJsenc0tZBesrLQ4rrdi3eT/c/yhSWnPbCUkHSz8bnS0l3/VQ8bA+oERSGSV2PK6A==", - "peer": true, + "version": "5.0.0-beta.8", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.8.tgz", + "integrity": "sha512-b4vVjMZx5KzzEMf4arXKoeV5ZegAMOoPwoy1vfUBwhvXc2QtaaAyBp50U7OA2L06Leubc1A+lEp3eqwZoFn87g==", "requires": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.22.6", "@emotion/is-prop-valid": "^1.2.1", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.7", + "@mui/utils": "^5.14.1", "@popperjs/core": "^2.11.8", "clsx": "^1.2.1", "prop-types": "^15.8.1", @@ -9883,16 +9991,14 @@ "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "peer": true + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" } } }, "@mui/core-downloads-tracker": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.0.tgz", - "integrity": "sha512-SYBOVCatVDUf/lbrLGah09bHhX5WfUXg7kSskfLILr6SvKRni0NLp0aonxQ0SMALVVK3Qwa6cW4CdWuwS0gC1w==", - "peer": true + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.2.tgz", + "integrity": "sha512-x+c/MgDL1t/IIy5lDbMlrDouFG5DYZbl3DP4dbbuhlpPFBnE9glYwmJEee/orVHQpOPwLxCAIWQs+2DKSaBVWQ==" }, "@mui/icons-material": { "version": "5.14.0", @@ -9903,17 +10009,16 @@ } }, "@mui/material": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.0.tgz", - "integrity": "sha512-HP7CP71NhMkui2HUIEKl2/JfuHMuoarSUWAKlNw6s17bl/Num9rN61EM6uUzc2A2zHjj/00A66GnvDnmixEJEw==", - "peer": true, - "requires": { - "@babel/runtime": "^7.22.5", - "@mui/base": "5.0.0-beta.7", - "@mui/core-downloads-tracker": "^5.14.0", - "@mui/system": "^5.14.0", + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.2.tgz", + "integrity": "sha512-TgNR4/YRL11RifsnMWNhITNCkGJYVz20SCvVJBBoU5Y/KhUNSSJxjDpEB8VrnY+sUsV0NigLCkHZJglfsiS3Pw==", + "requires": { + "@babel/runtime": "^7.22.6", + "@mui/base": "5.0.0-beta.8", + "@mui/core-downloads-tracker": "^5.14.2", + "@mui/system": "^5.14.1", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.7", + "@mui/utils": "^5.14.1", "@types/react-transition-group": "^4.4.6", "clsx": "^1.2.1", "csstype": "^3.1.2", @@ -9925,8 +10030,7 @@ "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "peer": true + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" } } }, @@ -9934,7 +10038,6 @@ "version": "5.13.7", "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.7.tgz", "integrity": "sha512-qbSr+udcij5F9dKhGX7fEdx2drXchq7htLNr2Qg2Ma+WJ6q0ERlEqGSBiPiVDJkptcjeVL4DGmcf1wl5+vD4EA==", - "peer": true, "requires": { "@babel/runtime": "^7.22.5", "@mui/utils": "^5.13.7", @@ -9945,7 +10048,6 @@ "version": "5.13.2", "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", - "peer": true, "requires": { "@babel/runtime": "^7.21.0", "@emotion/cache": "^11.11.0", @@ -9954,16 +10056,15 @@ } }, "@mui/system": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.0.tgz", - "integrity": "sha512-0HZGkX8miJbiNw+rjlZ9l0Cfkz1bSqfSHQH0EH9J+nx0aAm5cBleg9piOlLdCNIWGgecCqsw4x62erGrGjjcJg==", - "peer": true, + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.1.tgz", + "integrity": "sha512-u+xlsU34Jdkgx1CxmBnIC4Y08uPdVX5iEd3S/1dggDFtOGp+Lj8xmKRJAQ8PJOOJLOh8pDwaZx4AwXikL4l1QA==", "requires": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.22.6", "@mui/private-theming": "^5.13.7", "@mui/styled-engine": "^5.13.2", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.7", + "@mui/utils": "^5.14.1", "clsx": "^1.2.1", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -9973,16 +10074,14 @@ "version": "7.2.4", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", - "peer": true, "requires": {} }, "@mui/utils": { - "version": "5.13.7", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.7.tgz", - "integrity": "sha512-/3BLptG/q0u36eYED7Nhf4fKXmcKb6LjjT7ZMwhZIZSdSxVqDqSTmATW3a56n3KEPQUXCU9TpxAfCBQhs6brVA==", - "peer": true, + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.1.tgz", + "integrity": "sha512-39KHKK2JeqRmuUcLDLwM+c2XfVC136C5/yUyQXmO2PVbOb2Bol4KxtkssEqCbTwg87PSCG3f1Tb0keRsK7cVGw==", "requires": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.22.6", "@types/prop-types": "^15.7.5", "@types/react-is": "^18.2.1", "prop-types": "^15.8.1", @@ -9992,8 +10091,7 @@ "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "peer": true + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" } } }, @@ -10328,7 +10426,6 @@ "version": "18.2.1", "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", - "peer": true, "requires": { "@types/react": "*" } @@ -13175,9 +13272,9 @@ "version": "1.2.0" }, "postcss": { - "version": "8.4.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.25.tgz", - "integrity": "sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "dev": true, "requires": { "nanoid": "^3.3.6", diff --git a/package.json b/package.json index dde4d0b8..6b337ea5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hhd-ui", - "version": "0.13.2", + "version": "0.14.1", "private": true, "dependencies": { "@ag-grid-community/client-side-row-model": "^30.0.3", @@ -10,6 +10,7 @@ "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.14.0", + "@mui/material": "^5.14.2", "@tanstack/react-table": "^8.9.3", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", @@ -69,8 +70,8 @@ "scripts": { "start": "vite", "build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build", - "build:test": "env-cmd -f .env.test vite build", - "build:prod": "env-cmd -f .env.production vite build", + "build:test": "env-cmd -f .env.test vite build --mode test", + "build:prod": "env-cmd -f .env.production vite build --mode production", "serve-local-build": "npx serve -s build", "preview": "vite preview", "pretty": "prettier --write \"./**/*.{js,jsx,json,html,scss,css}\"", diff --git a/src/app-bundles/chart-editor-bundle.js b/src/app-bundles/chart-editor-bundle.js index 3bffe54e..29266108 100644 --- a/src/app-bundles/chart-editor-bundle.js +++ b/src/app-bundles/chart-editor-bundle.js @@ -286,6 +286,7 @@ const chartEditorBundle = { Object.keys(dataByInstrumentId).forEach((id) => { const { timeseries } = dataByInstrumentId[id]; + if (!timeseries || !timeseries.length) return undefined; timeseries.sort((a, b) => { @@ -300,7 +301,7 @@ const chartEditorBundle = { const x = []; const y = []; - let plotData = []; + const plotData = []; if (isInclinometer) { const negateDepth = val => val < 0 ? val : -val; @@ -339,46 +340,57 @@ const chartEditorBundle = { y.push(item.value); }); - plotData = [{ + plotData.push({ type: 'scattergl', name: `${instrumentName} - ${name}`, x: x, y: y, ...style, - }]; + }); } const domainName = getDomainName(domains, parameter_id); + const unitName = domains['unit'].find(el => el.id === unit_id)?.value; - if (!chartData.find(y => y.name === parameter_id)) { + if (!chartData.find(x => x.name === parameter_id)) { chartData.push({ id: series.id, name: parameter_id, domainName, + unitName, unit: unit_id, data: plotData, }); - } else if ( - chartData.find(x => x.name === parameter_id).unit !== unit_id && - chartData.findIndex(y => y.name === parameter_id) !== -1 - ) { + } else if (chartData.find(x => x.name === parameter_id).unit !== unit_id && chartData.findIndex(y => y.name === parameter_id) !== -1) { chartData.push({ id: series.id, name: parameter_id, domainName, + unitName, unit: unit_id, data: plotData, }); } else { - const found = chartData.find(x => x.name === parameter_id); - found.id = series.id; - found.data.concat(plotData); + const foundIndex = chartData.findIndex(x => x.name === parameter_id); + const item = chartData[foundIndex]; + + chartData.splice(foundIndex, 1); + + chartData.push({ + id: series.id, + name: parameter_id, + domainName, + unitName, + unit: unit_id, + data: [...item.data, ...plotData], + }); } }); }); if (showRainfall) { chartData.push(...rainfallData); } + return chartData; } ), diff --git a/src/app-bundles/data-logger-equivalency-bundle.js b/src/app-bundles/data-logger-equivalency-bundle.js index 93669f81..8d6c7677 100644 --- a/src/app-bundles/data-logger-equivalency-bundle.js +++ b/src/app-bundles/data-logger-equivalency-bundle.js @@ -1,3 +1,5 @@ +import { tUpdateError, tUpdateSuccess } from "../common/helpers/toast-helpers"; + export default { name: 'dataLoggerEquivalency', getReducer: () => { @@ -65,7 +67,7 @@ export default { }); }, - doUpdateDataLoggerEquivalency: (data) => ({ store, apiPut }) => { + doUpdateSingleDataLoggerEquivalency: (data) => ({ store, apiPut }) => { const { dataLoggerId, id, fieldName, displayName, instrumentId, timeseriesId } = data; const uri = `/datalogger/${dataLoggerId}/equivalency_table`; // const toastId = toast.loading('Updating Field Mapping...'); @@ -95,9 +97,26 @@ export default { }); }, - // doDeleteDataLoggerEquivalency: ({ dataLoggerId }) => ({ dispatch, store, apiDelete }) => { - // const uri = `/datalogger/${dataLoggerId}/equivalency_table`; - // }, + // For use in auto-assigning only. + doUpdateMultipleDataLoggerEquivalency: (dataLoggerId, rows, toastId) => ({ store, apiPut }) => { + const uri = `/datalogger/${dataLoggerId}/equivalency_table`; + + const payload = { + datalogger_id: dataLoggerId, + rows, + }; + + apiPut(uri, payload, (err, _body) => { + if (err) { + // eslint-disable-next-line no-console + console.log('test err: ', JSON.stringify(err)); + tUpdateError(toastId, 'Failed to assign timeseries to field names. Please try again later.'); + } else { + tUpdateSuccess(toastId, 'Successfully assigned timeseries to field names!'); + store.doFetchDataLoggerEquivalency({ dataLoggerId }); + } + }); + }, doDeleteDataLoggerEquivalencyRow: ({ dataLoggerId, id, refreshData = true }) => ({ store, apiDelete }) => { const uri = `/datalogger/${dataLoggerId}/equivalency_table/row?id=${id}`; diff --git a/src/app-bundles/district-rollup-bundle.js b/src/app-bundles/district-rollup-bundle.js index b323cfcc..0f7caaa6 100644 --- a/src/app-bundles/district-rollup-bundle.js +++ b/src/app-bundles/district-rollup-bundle.js @@ -24,11 +24,18 @@ export default { selectDistrictRollupMeasurement: (state) => state.districtRollup.measurement, // one of [`evaluation`, `measurement`] - doFetchDistrictRollup: (type) => ({ dispatch, store, apiGet }) => { + doFetchDistrictRollup: (type, fromDate = '', toDate = '') => ({ dispatch, store, apiGet }) => { dispatch({ type: 'ROLLUP_FETCH_START' }); const { projectId } = store.selectProjectsIdByRoute(); - const url = `/projects/${projectId}/district_rollup/${type}_submittals`; + let query = ''; + if (fromDate && toDate) { + const formattedFrom = fromDate.toISOString(); + const formattedTo = toDate.toISOString(); + query = `?from_timestamp_month=${formattedFrom}&to_timestamp_month=${formattedTo}`; + } + + const url = `/projects/${projectId}/district_rollup/${type}_submittals${query}`; apiGet(url, (err, body) => { if (err) { diff --git a/src/app-bundles/inclinometer-measurements.js b/src/app-bundles/inclinometer-measurements.js index 28e8c25d..dce469fd 100644 --- a/src/app-bundles/inclinometer-measurements.js +++ b/src/app-bundles/inclinometer-measurements.js @@ -10,7 +10,6 @@ export default createRestBundle({ // TODO: default before and after time periods should be implemented on // the backend. getTemplate: '/timeseries/:timeseriesId/inclinometer_measurements?before=2025-01-01T00:00:00.00Z&after=1900-01-01T00:00:00.00Z', - putTemplate: '', postTemplate: '/timeseries/:timeseriesId/inclinometer_measurements', deleteTemplate: '/timeseries/:timeseriesId/inclinometer_measurements?time={:item.date}', @@ -33,4 +32,39 @@ export default createRestBundle({ return whitelist.includes(hash) || pathnameWhitelist.some(elem => url.pathname.includes(elem)); }, + addons: { + doFetchInclinometerMeasurementsByTimeseriesId: (timeseriesId) => ({ dispatch, apiGet }) => { + const uri = `/timeseries/${timeseriesId}/inclinometer_measurements?before=2025-01-01T00:00:00.00Z&after=1900-01-01T00:00:00.00Z`; + + apiGet(uri, (err, body) => { + if (err) { + // eslint-disable-next-line no-console + console.log('error: ', err); + } else { + dispatch({ + type: 'SET_CURRENT_INCLINOMETER_MEASUREMENTS', + payload: { + timeseriesId, + measurements: body, + }, + }); + } + }); + }, + + selectCurrentInclinometerMeasurements: state => state.inclinometerMeasurements.currentMeasurements, + }, + reduceFurther: (state, { type, payload }) => { + if (type === 'SET_CURRENT_INCLINOMETER_MEASUREMENTS') { + return { + ...state, + 'currentMeasurements': { + ...state['currentMeasurements'], + [payload.timeseriesId]: payload.measurements, + }, + }; + } else { + return state; + } + }, }); diff --git a/src/app-bundles/index.js b/src/app-bundles/index.js index 420d5579..a953d183 100644 --- a/src/app-bundles/index.js +++ b/src/app-bundles/index.js @@ -40,6 +40,7 @@ import instrumentGroupInstrumentsBundle from './instrument-group-instruments-bun import instrumentGroupMapBundle from './instrument-group-map-bundle'; import instrumentMapBundle from './instrument-map-bundle'; import instrumentNotesBundle from './instrument-notes-bundle'; +import instrumentSensorsBundle from './instrument-sensors-bundle'; import instrumentStatusBundle from './instrument-status-bundle'; import mapsBundle from './maps-bundle'; import modalBundle from './modal-bundle'; @@ -138,6 +139,7 @@ export default composeBundles( instrumentGroupInstrumentsBundle, instrumentMapBundle, instrumentNotesBundle, + instrumentSensorsBundle, instrumentStatusBundle, mapsBundle, modalBundle, diff --git a/src/app-bundles/instrument-sensors-bundle.js b/src/app-bundles/instrument-sensors-bundle.js new file mode 100644 index 00000000..a321bf33 --- /dev/null +++ b/src/app-bundles/instrument-sensors-bundle.js @@ -0,0 +1,91 @@ +export default { + name: 'instrumentSensors', + getReducer: () => { + const initialState = { + sensors: [], + measurements: [], + _lastFetched: null, + }; + + return (state = initialState, { type, payload }) => { + switch (type) { + case 'INSTRUMENT_SENSORS_UPDATED': + return { + ...state, + sensors: payload, + _lastFetched: new Date(), + }; + case 'SENSOR_MEASUREMENTS_UPDATED': + return { + ...state, + measurements: payload, + }; + default: + return state; + } + }; + }, + + selectInstrumentSensorsRaw: (state) => state.instrumentSensors, + selectInstrumentSensors: (state) => state.instrumentSensors.sensors, + selectInstrumentSensorsMeasurements: (state) => state.instrumentSensors.measurements, + selectInstrumentSensorsLastFetched: (state) => state.instrumentSensors._lastFetched, + + doFetchInstrumentSensorsById: () => ({ dispatch, store, apiGet }) => { + dispatch({ type: 'INSTRUMENT_SENSORS_BY_ID_FETCH_START' }); + const { instrumentId } = store.selectInstrumentsIdByRoute(); + + const url = `/instruments/saa/${instrumentId}/segments`; + + apiGet(url, (err, body) => { + if (err) { + // eslint-disable-next-line no-console + console.log('error: ', err); + } else { + dispatch({ + type: 'INSTRUMENT_SENSORS_UPDATED', + payload: body, + }); + } + + dispatch({ type: 'INSTRUMENT_SENSORS_BY_ID_FETCH_FINISHED' }); + }); + }, + + doUpdateInstrumentSensor: (formData) => ({ dispatch, store, apiPut }) => { + dispatch({ type: 'INSTRUMENT_SENSOR_UPDATE_START' }); + + const { instrumentId } = store.selectInstrumentsIdByRoute(); + const url = `/instruments/saa/${instrumentId}/segments`; + + apiPut(url, formData, (err, _body) => { + if (err) { + // eslint-disable-next-line no-console + console.log('todo', err); + } else { + store.doFetchInstrumentSensorsById(); + } + }); + }, + + doFetchInstrumentSensorMeasurements: (before, after) => ({ dispatch, store, apiGet }) => { + dispatch({ type: 'SENSOR_MEASUREMENTS_FETCH_START' }); + const { instrumentId } = store.selectInstrumentsIdByRoute(); + const url = `/instruments/saa/${instrumentId}/measurements?before=${before}&after=${after}`; + + apiGet(url, (err, body) => { + if (err) { + // eslint-disable-next-line no-console + console.log('todo', err); + } else { + dispatch({ + type: 'SENSOR_MEASUREMENTS_UPDATED', + payload: body, + }); + } + }); + + dispatch({ type: 'SENSOR_MEASUREMENTS_FETCH_FINISHED' }); + + }, +}; diff --git a/src/app-bundles/submittals-bundle.js b/src/app-bundles/submittals-bundle.js index 36cc0833..a9702658 100644 --- a/src/app-bundles/submittals-bundle.js +++ b/src/app-bundles/submittals-bundle.js @@ -95,10 +95,27 @@ export default { } else { store.doFetchMissingSubmittalsByProjectId(); store.doFetchProjectAlertConfigs(); - // store.doFetchAlertConfigSubmittals(alertConfigId); } dispatch({ type: 'PUT_VERIFY_ALL_MISSING_SUBMITTALS_FINISHED' }); }); }, + + doVerifySingleSubmittals: (submittalId) => ({ dispatch, store, apiPut }) => { + dispatch({ type: 'PUT_VERIFY_SINGLE_SUBMITTAL_START' }); + + const url = `/submittals/${submittalId}/verify_missing`; + + apiPut(url, {}, (err, _body) => { + if (err) { + // eslint-disable-next-line no-console + console.log('error: ', err); + } else { + store.doFetchHistoricalSubmittalsByProjectId(); + store.doFetchProjectAlertConfigs(); + } + + dispatch({ type: 'PUT_VERIFY_SINGLE_SUBMITTAL_FISISHED' }); + }); + }, }; diff --git a/src/app-bundles/time-series-bundle.js b/src/app-bundles/time-series-bundle.js index 9b7c5ccc..6b8105a3 100644 --- a/src/app-bundles/time-series-bundle.js +++ b/src/app-bundles/time-series-bundle.js @@ -1,6 +1,8 @@ -import createRestBundle from './create-rest-bundle'; import { createSelector } from 'redux-bundler'; +import createRestBundle from './create-rest-bundle'; +import { tLoading, tUpdateError, tUpdateManual } from '../common/helpers/toast-helpers'; + export default createRestBundle({ name: 'instrumentTimeseries', uid: 'id', @@ -17,6 +19,7 @@ export default createRestBundle({ 'INSTRUMENTGROUPS_FETCH_FINISHED', 'INSTRUMENTCONSTANTS_SAVE_FINISHED', 'INSTRUMENTTIMESERIES_SAVE_FINISHED', + 'CREATED_NEW_TIMESERIES_FOR_FIELD_NAMES', ], urlParamSelectors: ['selectProjectsIdByRoute'], reduceFurther: (state, { type, payload }) => { @@ -27,6 +30,54 @@ export default createRestBundle({ } }, addons: { + doSaveFieldNamesToTimeseries: (newObject, instrumentId, dataLoggerId) => ({ dispatch, store, apiPost }) => { + dispatch({ type: 'ASSIGN_FIELD_NAMES_TO_TIMESERIES_START' }); + const toastId = tLoading('Creating new timeseries...'); + const { projectId } = store.selectProjectsIdByRoute(); + const { newTs, existingTs } = newObject; + + const uri = '/timeseries'; + const formData = []; + + newTs.forEach(item => formData.push({ + project_id: projectId, + instrument_id: instrumentId, + name: item?.field_name, + })); + + apiPost(uri, formData, (err, body) => { + if (err) { + tUpdateError(toastId, 'Failed to create new timeseries. Please try again later.'); + // eslint-disable-next-line no-console + console.error(err); + } else { + dispatch({ type: 'CREATED_NEW_TIMESERIES_FOR_FIELD_NAMES' }); + tUpdateManual(toastId, 'Assigning timeseries to field names...', { isLoading: true }); + const rows = []; + + rows.push(...newTs.map(el => ({ + ...el, + instrument_id: instrumentId, + timeseries_id: body.find(item => item.name === el.field_name)?.id, + }))); + + rows.push(...existingTs.map(el => { + const { field, timeseries } = el; + + return { + ...field, + instrument_id: instrumentId, + timeseries_id: timeseries?.id, + }; + })); + + store.doUpdateMultipleDataLoggerEquivalency(dataLoggerId, rows, toastId); + } + }); + + dispatch({ type: 'ASSIGN_FIELD_NAMES_TO_TIMESERIES_FINISHED' }); + }, + doInstrumentTimeseriesSetActiveId: (id) => ({ dispatch }) => { dispatch({ type: 'INSTRUMENTTIMESERIES_SET_ACTIVE_ID', diff --git a/src/app-bundles/time-series-measurements-bundle.js b/src/app-bundles/time-series-measurements-bundle.js index f66e6655..cd1fb158 100644 --- a/src/app-bundles/time-series-measurements-bundle.js +++ b/src/app-bundles/time-series-measurements-bundle.js @@ -1,7 +1,5 @@ -import { toast } from 'react-toastify'; - import createRestBundle from './create-rest-bundle'; -import { tUpdateError, tUpdateSuccess } from '../common/helpers/toast-helpers'; +import { tLoading, tUpdateError, tUpdateSuccess } from '../common/helpers/toast-helpers'; const afterDate = '1900-01-01T00:00:00.00Z'; const beforeDate = '2025-12-31T00:00:00.00Z'; @@ -41,6 +39,7 @@ export default createRestBundle({ doTimeseriesMeasurementsFetchById: ({ timeseriesId, dateRange, + threshold = 0, }) => ({ dispatch, store, apiGet }) => { dispatch({ type: 'TIMESERIES_FETCH_BY_ID_START', payload: {} }); const [after, before] = dateRange; @@ -48,7 +47,7 @@ export default createRestBundle({ const isoAfter = after ? after.toISOString() : afterDate; const isoBefore = before ? before.toISOString() : beforeDate; - const url = `/timeseries/${timeseriesId}/measurements?after=${isoAfter}&before=${isoBefore}`; + const url = `/timeseries/${timeseriesId}/measurements?after=${isoAfter}&before=${isoBefore}&threshold=${threshold}`; const flags = store['selectTimeseriesMeasurementsFlags'](); const itemsById = store['selectTimeseriesMeasurementsItemsObject'](); let fetchCount = store['selectTimeseriesMeasurementsFetchCount'](); @@ -82,7 +81,7 @@ export default createRestBundle({ const url = `/projects/${projectId}/timeseries_measurements`; - const toastId = toast.loading('Uploading measurements...'); + const toastId = tLoading('Uploading measurements. This may take a while for large data files...'); apiPost(url, measurements, (err, _body) => { if (err) { diff --git a/src/app-components/button/button.jsx b/src/app-components/button/button.jsx index f82c108b..e1055816 100644 --- a/src/app-components/button/button.jsx +++ b/src/app-components/button/button.jsx @@ -42,6 +42,7 @@ const Button = ({ ]); const buttonProps = { + style: { zIndex: 'auto' }, className: classes, role: 'button', type, @@ -60,7 +61,6 @@ const Button = ({ ); - // @ts-ignore return React.createElement(elem, buttonProps, ); }; diff --git a/src/app-components/chart/minify-plotly.js b/src/app-components/chart/minify-plotly.js index d0502a00..4d88ab1e 100644 --- a/src/app-components/chart/minify-plotly.js +++ b/src/app-components/chart/minify-plotly.js @@ -1,6 +1,8 @@ import * as Plotly from 'plotly.js/lib/core'; import * as Bar from 'plotly.js/lib/bar'; import * as Pie from 'plotly.js/lib/pie'; +import * as Surface from 'plotly.js/lib/surface'; +import * as Scatter3D from 'plotly.js/lib/scatter3d'; Plotly.register([ /* @@ -10,6 +12,8 @@ Plotly.register([ */ Bar, Pie, + Surface, + Scatter3D, ]); export default Plotly; \ No newline at end of file diff --git a/src/app-components/chart/viz-timeseries.jsx b/src/app-components/chart/viz-timeseries.jsx index eabcc818..5eee6c85 100644 --- a/src/app-components/chart/viz-timeseries.jsx +++ b/src/app-components/chart/viz-timeseries.jsx @@ -58,7 +58,7 @@ export default connect( data.length ? ( {data.map(x => ( - +
{x.data[0].isInclinometer ? diff --git a/src/app-components/domain-select.jsx b/src/app-components/domain-select.jsx index 9283fdcf..0f6b9b42 100644 --- a/src/app-components/domain-select.jsx +++ b/src/app-components/domain-select.jsx @@ -1,33 +1,38 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import { connect } from 'redux-bundler-react'; -import Select from 'react-select'; +import { Autocomplete, TextField } from '@mui/material'; export default connect( 'selectDomainsItemsByGroup', - ({ value, onChange, domain, domainsItemsByGroup }) => { + ({ + domainsItemsByGroup, + defaultValue, + onChange, + domain, + }) => { + const [selectValue, setSelectValue] = useState(); const options = domainsItemsByGroup[domain]?.map(item => ( { value: item.id, label: item.value } - )); + )) || []; - const initValue = domainsItemsByGroup[domain]?.find(el => el.id === value); + useEffect(() => { + const item = domainsItemsByGroup[domain]?.find(el => el.value === selectValue); + onChange(item); + }, [selectValue]); return ( <> {!options || !options.length ? ( No Options... ) : ( - table.setPageSize(option.value)} + options={[ + { label: '10', value: 10 }, + { label: '20', value: 20 }, + { label: '30', value: 30 }, + ]} + /> +
+ + + ) : null} + ); }; diff --git a/src/app-pages/collection-group/collection-group.jsx b/src/app-pages/collection-group/collection-group.jsx index b8c84923..40793d5f 100644 --- a/src/app-pages/collection-group/collection-group.jsx +++ b/src/app-pages/collection-group/collection-group.jsx @@ -5,25 +5,25 @@ import { Add, KeyboardArrowDown, KeyboardArrowUp } from '@mui/icons-material'; import Button from '../../app-components/button'; import Card from '../../app-components/card'; -import collectionGroupForm from '../../common/forms/collection-group-form'; -import collectionGroupTimeseriesPicker from './collectiongroup-timeseries-picker'; +import CollectionGroupForm from '../../common/forms/collection-group-form'; +import CollectionGroupTimeseriesPicker from './collectiongroup-timeseries-picker'; import LoginMessage from '../../app-components/login-message'; import RoleFilter from '../../app-components/role-filter'; import TimeseriesList from './collectiongroup-timeseries-list'; import TimestampModeSwitcher from './collectiongroup-timestamp-mode-switcher'; export default connect( - 'doCollectionGroupRemoveTimeseries', 'doModalOpen', 'doNotificationFire', + 'doCollectionGroupRemoveTimeseries', 'doTimeseriesMeasurementsSave', 'selectAppTime', 'selectCollectionGroupDetailByRoute', 'selectProjectsByRoute', ({ - doCollectionGroupRemoveTimeseries, doModalOpen, doNotificationFire, + doCollectionGroupRemoveTimeseries, doTimeseriesMeasurementsSave, appTime, collectionGroupDetailByRoute: detail, @@ -90,7 +90,7 @@ export default connect( size='small' className='text-left' handleClick={(e) => { - doModalOpen(collectionGroupForm, { item: detail }); + doModalOpen(CollectionGroupForm, { item: detail }); e.stopPropagation(); }} text='Edit' @@ -122,7 +122,7 @@ export default connect( variant='link' size='small' handleClick={(e) => { - doModalOpen(collectionGroupTimeseriesPicker); + doModalOpen(CollectionGroupTimeseriesPicker); e.stopPropagation(); }} text='Add' @@ -142,8 +142,9 @@ export default connect(
{ doCollectionGroupRemoveTimeseries({ projectId: detail.project_id, @@ -151,7 +152,6 @@ export default connect( timeseriesId: item.id, }); }} - handleItemSaveValue={handleTimeseriesSaveValue} />
diff --git a/src/app-pages/collection-group/collectiongroup-timeseries-list.jsx b/src/app-pages/collection-group/collectiongroup-timeseries-list.jsx index 0ab5e9e2..ed274c52 100644 --- a/src/app-pages/collection-group/collectiongroup-timeseries-list.jsx +++ b/src/app-pages/collection-group/collectiongroup-timeseries-list.jsx @@ -19,17 +19,22 @@ const TimeseriesListEntry = ({
- - {item.instrument} - - -
@@ -54,28 +59,30 @@ const TimeseriesListEntry = ({
{/* Column 3 */} -
-
- setValue(e.target.value)} - /> -
-
-
+ ); diff --git a/src/app-pages/instrument/constants/constant-form.jsx b/src/app-pages/instrument/constants/constant-form.jsx index ef662d57..47c97263 100644 --- a/src/app-pages/instrument/constants/constant-form.jsx +++ b/src/app-pages/instrument/constants/constant-form.jsx @@ -72,16 +72,16 @@ export default connect(
setParameterId(val)} + defaultValue={parameter_id} + onChange={val => setParameterId(val?.id)} domain='parameter' />
setUnitId(val)} + defaultValue={unit_id} + onChange={val => setUnitId(val?.id)} domain='unit' />
diff --git a/src/app-pages/instrument/constants/constants.jsx b/src/app-pages/instrument/constants/constants.jsx index 20824817..fb4a6243 100644 --- a/src/app-pages/instrument/constants/constants.jsx +++ b/src/app-pages/instrument/constants/constants.jsx @@ -13,6 +13,7 @@ import RoleFilter from '../../../app-components/role-filter'; import usePrevious from '../../../customHooks/usePrevious'; import '../../../css/grids.scss'; +import '../instrument.css'; const Constants = connect( 'doModalOpen', @@ -149,7 +150,7 @@ const Constants = connect( icon={} /> -
    +
      {constants.map((id, i) => ( ({ + showlegend: true, + autosize: true, + height: 1000, + xaxis: { + title: `X-${isIncrement ? 'Increment' : 'Cumulative Displacement'}`, + domain: [0, 0.3], + anchor: 'y1', + }, + yaxis: { + title: 'Elevation (ft)', + domain: [0.3, 1], + anchor: 'x1', + }, + xaxis2: { + title: `Y-${isIncrement ? 'Increment' : 'Cumulative Displacement'}`, + domain: [0.35, 0.65], + anchor: 'y2', + }, + yaxis2: { + domain: [0.3, 1], + anchor: 'x2', + }, + xaxis3: { + title: 'Temperature', + domain: [0.7, 1], + anchor: 'y3', + }, + yaxis3: { + domain: [0.3, 1], + anchor: 'x3', + }, + xaxis4: { + type: 'date', + domain: [0, 1], + anchor: 'y4', + title: 'Time', + }, + yaxis4: { + domain: [0, 0.2], + anchor: 'x4', + title: `${initialMeasurement.elevation} ∆ mm`, + }, + yaxis5: { + domain: [0, 0.2], + anchor: 'x4', + overlaying: 'y4', + title: '°C', + side: 'right', + }, +}); + +const build2dTrace = (dataArray, key) => { + if (!dataArray.length) return {}; + + const { time, measurements } = dataArray[dataArray.length - 1]; + + const keyMeasurements = measurements.map(m => m[key]); + const elevation = measurements.map((m) => m.elevation); + + return { + x: keyMeasurements, + y: elevation, + mode: 'markers+lines', + marker: { size: 5, color: colors[key] }, + line: { width: 1 }, + type: 'scatter', + name: key, + hovertemplate: ` + ${DateTime.fromISO(time).toLocaleString(DateTime.DATETIME_SHORT)}
      + Depth: %{y}
      + Displacement: %{x}
      + + `, + ...['y_increment', 'y_cum_dev'].includes(key) && { + xaxis: 'x2', + yaxis: 'y2', + }, + ...key === 'temp' && { + xaxis: 'x3', + yaxis: 'y3', + }, + }; +}; + +const buildLongTraces = (dataArray, initialMeasurement) => { + if (!dataArray.length) return []; + + const { elevation: initElevation } = initialMeasurement; + const elevationY = []; + const temperatureY = []; + const timeX = []; + + dataArray.forEach((el, index) => { + if (!index) return; + const { time, measurements } = el; + timeX.push(time); + + const lastMeasurement = measurements[measurements.length - 1]; + const { elevation, temp } = lastMeasurement; + + elevationY.push(elevation - initElevation); + temperatureY.push(temp); + }); + + return [{ + x: timeX, + y: elevationY, + mode: 'markers+lines', + marker: { size: 5 }, + line: { width: 1 }, + type: 'scatter', + name: '∆ Top Elevation', + xaxis: 'x4', + yaxis: 'y4', + }, { + x: timeX, + y: temperatureY, + mode: 'markers+lines', + marker: { size: 5 }, + line: { width: 1 }, + type: 'scatter', + name: 'Top Temperature', + xaxis: 'x4', + yaxis: 'y5', + }]; +}; + +const DepthBasedPlots = connect( + 'doModalOpen', + 'doFetchInstrumentSensorsById', + 'doFetchInstrumentSensorMeasurements', + 'selectInstrumentSensors', + 'selectInstrumentSensorsMeasurements', + ({ + doModalOpen, + doFetchInstrumentSensorsById, + doFetchInstrumentSensorMeasurements, + instrumentSensors, + instrumentSensorsMeasurements, + }) => { + const [isOpen, setIsOpen] = useState(true); + const [isIncrement, setIsIncrement] = useState(true); + const [dateRange, setDateRange] = useState([subDays(new Date(), 7), new Date()]); + + const initialMeasurement = instrumentSensorsMeasurements.length ? instrumentSensorsMeasurements[0]?.measurements?.findLast(e => e) : {}; + + useEffect(() => { + doFetchInstrumentSensorsById(); + }, [doFetchInstrumentSensorsById]); + + useDeepCompareEffect(() => { + if (isOpen) { + doFetchInstrumentSensorMeasurements(dateRange[1].toISOString(), dateRange[0].toISOString()); + } + }, [isOpen, dateRange]); + + return ( + + +