diff --git a/interface/package-lock.json b/interface/package-lock.json index 3272ddc92..eec53f3ca 100644 --- a/interface/package-lock.json +++ b/interface/package-lock.json @@ -11,10 +11,11 @@ "@emotion/react": "^11.9.0", "@emotion/styled": "^11.8.1", "@msgpack/msgpack": "^2.7.2", - "@mui/icons-material": "^5.6.0", - "@mui/material": "^5.6.0", + "@mui/icons-material": "^5.6.1", + "@mui/material": "^5.6.1", + "@table-library/react-table-library": "^2.0.32", "@types/lodash": "^4.14.181", - "@types/node": "^17.0.23", + "@types/node": "^17.0.24", "@types/react": "^17.0.43", "@types/react-dom": "^17.0.14", "@types/react-router-dom": "^5.3.3", @@ -23,15 +24,15 @@ "http-proxy-middleware": "^2.0.4", "jwt-decode": "^3.1.2", "lodash": "^4.17.21", - "notistack": "^2.0.3", + "notistack": "^2.0.4", "parse-ms": "^3.0.0", "react": "^17.0.2", "react-app-rewired": "^2.2.1", "react-dom": "^17.0.2", - "react-dropzone": "^12.0.4", + "react-dropzone": "^12.0.5", "react-icons": "^4.3.1", "react-router-dom": "^6.3.0", - "react-scripts": "5.0.0", + "react-scripts": "5.0.1", "sockette": "^2.0.6", "typescript": "^4.6.3" }, @@ -2855,15 +2856,15 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-alpha.75", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.75.tgz", - "integrity": "sha512-eQ8SP2ML5nJyOdSqmk26ezg/eEP1k42Z+k6uMfNbgHZc8iZwgw9iVe+6g5j/qZPKS88AtxVG8YsLLZkXT82/Bw==", + "version": "5.0.0-alpha.76", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.76.tgz", + "integrity": "sha512-Pd0l4DvjXiGRyipn/CTDlYB2XrJwhpLktVXvbvcmzL2SMDaNprSarZqBkPHIubkulmRDZEEcnFDrpKgeSJDg4A==", "dependencies": { "@babel/runtime": "^7.17.2", "@emotion/is-prop-valid": "^1.1.2", "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.0", - "@popperjs/core": "^2.11.4", + "@mui/utils": "^5.6.1", + "@popperjs/core": "^2.11.5", "clsx": "^1.1.1", "prop-types": "^15.7.2", "react-is": "^17.0.2" @@ -2876,7 +2877,7 @@ "url": "https://opencollective.com/mui" }, "peerDependencies": { - "@types/react": "^16.8.6 || ^17.0.0 || ^18.0.0", + "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0", "react-dom": "^17.0.0 || ^18.0.0" }, @@ -2887,9 +2888,9 @@ } }, "node_modules/@mui/icons-material": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.6.0.tgz", - "integrity": "sha512-2GDGt+/BbwM3oVkF84b9FFKQdQ9TxBJIRnTwT99vO2mimdfJaojxMRB2lkysm9tUY4HOf0yoU6O//X6GTC0Zhw==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.6.1.tgz", + "integrity": "sha512-I1x8u+FRLOmoJpRJASMx9UG+jZrSkNLyRQmBXivQQwXu3m3iasMoaKYhhI0J18t8+FWktbkNTp63oEUHE9Gw0Q==", "dependencies": { "@babel/runtime": "^7.17.2" }, @@ -2902,7 +2903,7 @@ }, "peerDependencies": { "@mui/material": "^5.0.0", - "@types/react": "^16.8.6 || ^17.0.0 || ^18.0.0", + "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { @@ -2912,15 +2913,15 @@ } }, "node_modules/@mui/material": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.6.0.tgz", - "integrity": "sha512-yh4FoRRPTgJWjv1oIu3YuvfYGD/WOEnyGizQ9fKs+hlMjIc0rzFpyUCo++P/3BUd0/hRKcI8D8mrpJK9OiOy1g==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.6.1.tgz", + "integrity": "sha512-xg6pPq+1jxWupwmPpnfmsHNjrsOe2xynUQWrRfcH8WHrrr1sQulq0VF4gORq/l8DD8a/jb4s8SsC20e/e6mHKQ==", "dependencies": { "@babel/runtime": "^7.17.2", - "@mui/base": "5.0.0-alpha.75", - "@mui/system": "^5.6.0", + "@mui/base": "5.0.0-alpha.76", + "@mui/system": "^5.6.1", "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.0", + "@mui/utils": "^5.6.1", "@types/react-transition-group": "^4.4.4", "clsx": "^1.1.1", "csstype": "^3.0.11", @@ -2939,7 +2940,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@types/react": "^16.8.6 || ^17.0.0 || ^18.0.0", + "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0", "react-dom": "^17.0.0 || ^18.0.0" }, @@ -2956,12 +2957,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.6.0.tgz", - "integrity": "sha512-62jUFaMGfW3nvq/worcOAEiY++rWd44tpWShq4o97DybWmmWvEFYlBIuHEcXrtBIK/cloaQw8jqelQIFZeiVdw==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.6.1.tgz", + "integrity": "sha512-8lgh+tUt/3ftStfvml3dwAzhW3fe/cUFjLcBViOTnWk7UixWR79me4qehsO4NVj0THpu3d2qclrLzdD8qBAWAQ==", "dependencies": { "@babel/runtime": "^7.17.2", - "@mui/utils": "^5.6.0", + "@mui/utils": "^5.6.1", "prop-types": "^15.7.2" }, "engines": { @@ -2972,7 +2973,7 @@ "url": "https://opencollective.com/mui" }, "peerDependencies": { - "@types/react": "^16.8.6 || ^17.0.0 || ^18.0.0", + "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { @@ -2982,9 +2983,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.6.0.tgz", - "integrity": "sha512-K1WPKTruJTPA49cub0HtDCBBvosPKizqgZ4RenAfWz/ldlFtM4p7e7Mt3YEnNWTOJMHvDGcEke1tCuELkVAMyA==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.6.1.tgz", + "integrity": "sha512-jEhH6TBY8jc9S8yVncXmoTYTbATjEu44RMFXj6sIYfKr5NArVwTwRo3JexLL0t3BOAiYM4xsFLgfKEIvB9SAeQ==", "dependencies": { "@babel/runtime": "^7.17.2", "@emotion/cache": "^11.7.1", @@ -3012,15 +3013,15 @@ } }, "node_modules/@mui/system": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.6.0.tgz", - "integrity": "sha512-FoytH73hY78Dll6F0fg7AI/hnpplygbFeW0HsqBfwFWrt2PMc2YSq2ICqHzd2CZPIhzEgRHDTSI8bMTLtG9W7A==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.6.1.tgz", + "integrity": "sha512-Y5pDvEOK6VOY+0vgNeyDuEEO5QCinhXbZQDyLOlaGLKuAoRGLXO9pcSsjZoGkewYZitXD44EDfgBQ+BqsAfgUA==", "dependencies": { "@babel/runtime": "^7.17.2", - "@mui/private-theming": "^5.6.0", - "@mui/styled-engine": "^5.6.0", + "@mui/private-theming": "^5.6.1", + "@mui/styled-engine": "^5.6.1", "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.0", + "@mui/utils": "^5.6.1", "clsx": "^1.1.1", "csstype": "^3.0.11", "prop-types": "^15.7.2" @@ -3035,7 +3036,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@types/react": "^16.8.6 || ^17.0.0 || ^18.0.0", + "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { @@ -3064,9 +3065,9 @@ } }, "node_modules/@mui/utils": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.6.0.tgz", - "integrity": "sha512-LbZKkCOn4243vbEVGbaKV7t6eN6kz7t95DR6AcUCRk4daH3l7CXPYkWsyzysRWdXgSzHmIyrgg4FZKzTy0dTHQ==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.6.1.tgz", + "integrity": "sha512-CPrzrkiBusCZBLWu0Sg5MJvR3fKJyK3gKecLVX012LULyqg2U64Oz04BKhfkbtBrPBbSQxM+DWW9B1c9hmV9nQ==", "dependencies": { "@babel/runtime": "^7.17.2", "@types/prop-types": "^15.7.4", @@ -3258,9 +3259,9 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" }, "node_modules/@rushstack/eslint-patch": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.1.tgz", - "integrity": "sha512-BUyKJGdDWqvWC5GEhyOiUrGNi9iJUr4CU0O2WxJL6QJhHeeA/NVBalH+FeK0r/x/W0rPymXt5s78TDS7d6lCwg==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.2.tgz", + "integrity": "sha512-oe5WJEDaVsW8fBlGT7udrSCgOwWfoYHQOmSpnh8X+0GXpqqcRCP8k4y+Dxb0taWJDPpB+rdDUtumIiBwkY9qGA==" }, "node_modules/@sindresorhus/is": { "version": "0.14.0", @@ -3547,6 +3548,22 @@ "node": ">=6" } }, + "node_modules/@table-library/react-table-library": { + "version": "2.0.32", + "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-2.0.32.tgz", + "integrity": "sha512-hHxR5DkAdU+62rRukjId1XqdI1ZkWQhdmvYwJM60StrFpah0nbpk8/HG21k7mFdlwjoO7HtDgWDDReLDUbPS7Q==", + "dependencies": { + "clsx": "1.1.1", + "react-virtualized-auto-sizer": "1.0.6", + "react-window": "1.8.6", + "use-double-click": "1.0.5" + }, + "peerDependencies": { + "@emotion/react": ">= 11", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -3746,9 +3763,9 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, "node_modules/@types/node": { - "version": "17.0.23", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", - "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==" + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -3908,13 +3925,13 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz", - "integrity": "sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.19.0.tgz", + "integrity": "sha512-w59GpFqDYGnWFim9p6TGJz7a3qWeENJuAKCqjGSx+Hq/bwq3RZwXYqy98KIfN85yDqz9mq6QXiY5h0FjGQLyEg==", "dependencies": { - "@typescript-eslint/scope-manager": "5.18.0", - "@typescript-eslint/type-utils": "5.18.0", - "@typescript-eslint/utils": "5.18.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/type-utils": "5.19.0", + "@typescript-eslint/utils": "5.19.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -3939,26 +3956,37 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", - "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "node_modules/@typescript-eslint/eslint-plugin/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==", "dependencies": { - "lru-cache": "^7.4.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=10" } }, "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.18.0.tgz", - "integrity": "sha512-hypiw5N0aM2aH91/uMmG7RpyUH3PN/iOhilMwkMFZIbm/Bn/G3ZnbaYdSoAN4PG/XHQjdhBYLi0ZoRZsRYT4hA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.19.0.tgz", + "integrity": "sha512-F+X/TTzmb2UXbghY1LrNLNDjMcGZMhKzXuzvu0xD+YEB77EamLM7zMOLuz2kP5807IJRDLBoAFFPYa7HT62sYg==", "dependencies": { - "@typescript-eslint/utils": "5.18.0" + "@typescript-eslint/utils": "5.19.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3972,13 +4000,13 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.18.0.tgz", - "integrity": "sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.19.0.tgz", + "integrity": "sha512-yhktJjMCJX8BSBczh1F/uY8wGRYrBeyn84kH6oyqdIJwTGKmzX5Qiq49LRQ0Jh0LXnWijEziSo6BRqny8nqLVQ==", "dependencies": { - "@typescript-eslint/scope-manager": "5.18.0", - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/typescript-estree": "5.18.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/typescript-estree": "5.19.0", "debug": "^4.3.2" }, "engines": { @@ -3998,12 +4026,12 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz", - "integrity": "sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.19.0.tgz", + "integrity": "sha512-Fz+VrjLmwq5fbQn5W7cIJZ066HxLMKvDEmf4eu1tZ8O956aoX45jAuBB76miAECMTODyUxH61AQM7q4/GOMQ5g==", "dependencies": { - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/visitor-keys": "5.18.0" + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/visitor-keys": "5.19.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4014,11 +4042,11 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz", - "integrity": "sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.19.0.tgz", + "integrity": "sha512-O6XQ4RI4rQcBGshTQAYBUIGsKqrKeuIOz9v8bckXZnSeXjn/1+BDZndHLe10UplQeJLXDNbaZYrAytKNQO2T4Q==", "dependencies": { - "@typescript-eslint/utils": "5.18.0", + "@typescript-eslint/utils": "5.19.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -4039,9 +4067,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.18.0.tgz", - "integrity": "sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.19.0.tgz", + "integrity": "sha512-zR1ithF4Iyq1wLwkDcT+qFnhs8L5VUtjgac212ftiOP/ZZUOCuuF2DeGiZZGQXGoHA50OreZqLH5NjDcDqn34w==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4051,12 +4079,12 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz", - "integrity": "sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.19.0.tgz", + "integrity": "sha512-dRPuD4ocXdaE1BM/dNR21elSEUPKaWgowCA0bqJ6YbYkvtrPVEvZ+zqcX5a8ECYn3q5iBSSUcBBD42ubaOp0Hw==", "dependencies": { - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/visitor-keys": "5.18.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/visitor-keys": "5.19.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -4076,29 +4104,40 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", - "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "node_modules/@typescript-eslint/typescript-estree/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==", "dependencies": { - "lru-cache": "^7.4.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=10" } }, "node_modules/@typescript-eslint/utils": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.18.0.tgz", - "integrity": "sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.19.0.tgz", + "integrity": "sha512-ZuEckdupXpXamKvFz/Ql8YnePh2ZWcwz7APICzJL985Rp5C2AYcHO62oJzIqNhAMtMK6XvrlBTZeNG8n7gS3lQ==", "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.18.0", - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/typescript-estree": "5.18.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/typescript-estree": "5.19.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -4134,11 +4173,11 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz", - "integrity": "sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.19.0.tgz", + "integrity": "sha512-Ym7zZoMDZcAKWsULi2s7UMLREdVQdScPQ/fKWMYefarCztWlHPFVJo8racf8R0Gc8FAEJ2eD4of8As1oFtnQlQ==", "dependencies": { - "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/types": "5.19.0", "eslint-visitor-keys": "^3.0.0" }, "engines": { @@ -4601,13 +4640,14 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4617,13 +4657,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", - "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", "dependencies": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6848,6 +6889,14 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dependencies": { + "has": "^1.0.3" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -7026,9 +7075,9 @@ } }, "node_modules/eslint-config-react-app": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.0.tgz", - "integrity": "sha512-xyymoxtIt1EOsSaGag+/jmcywRuieQoA2JbPCjnw9HukFj9/97aGPoZVFioaotzk1K5Qt9sHO5EutZbkrAXS0g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", "dependencies": { "@babel/core": "^7.16.0", "@babel/eslint-parser": "^7.16.3", @@ -7327,9 +7376,9 @@ } }, "node_modules/eslint-plugin-testing-library": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.2.1.tgz", - "integrity": "sha512-88qJv6uzYALtiYJDzhelP3ov0Px/GLgnu+UekjjDxL2nMyvgdTyboKqcDBsvFPmAeizlCoSWOjeBN4DxO0BxaA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.3.1.tgz", + "integrity": "sha512-OfF4dlG/q6ck6DL3P8Z0FPdK0dU5K57gsBu7eUcaVbwYKaNzjgejnXiM9CCUevppORkvfek+9D3Uj/9ZZ8Vz8g==", "dependencies": { "@typescript-eslint/utils": "^5.13.0" }, @@ -8071,9 +8120,9 @@ } }, "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", - "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.1.tgz", + "integrity": "sha512-x1wumpHOEf4gDROmKTaB6i4/Q6H3LwmjVO7fIX47vBwlZbtPjU33hgoMuD/Q/y6SU8bnuYSoN6ZQOLshGp0T/g==", "dependencies": { "@babel/code-frame": "^7.8.3", "@types/json-schema": "^7.0.5", @@ -8175,6 +8224,17 @@ "node": ">=8" } }, + "node_modules/fork-ts-checker-webpack-plugin/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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", @@ -8193,17 +8253,17 @@ } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", - "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dependencies": { - "lru-cache": "^7.4.0" + "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=10" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { @@ -11695,6 +11755,11 @@ "node": ">= 4.0.0" } }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -12078,9 +12143,9 @@ } }, "node_modules/notistack": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/notistack/-/notistack-2.0.3.tgz", - "integrity": "sha512-krmVFtTO9kEY1Pa4NrbyexrjiRcV6TqBM2xLx8nuDea1g96Z/OZfkvVLmYKkTvoSJ3jyQntWK16z86ssW5kt4A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/notistack/-/notistack-2.0.4.tgz", + "integrity": "sha512-kOJmKvTG91ElMzi4aHu82BDe1liQ0zMrBp+TnWJptgowDsTbeTKbZmsRqJNIj145BmlOtZsEE9xjcrN46zVo3w==", "dependencies": { "clsx": "^1.1.0", "hoist-non-react-statics": "^3.3.0" @@ -12093,8 +12158,8 @@ "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", "@mui/material": "^5.0.0", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -14192,9 +14257,9 @@ } }, "node_modules/react-dev-utils": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz", - "integrity": "sha512-xBQkitdxozPxt1YZ9O1097EJiVpwHr9FoAuEVURCKV0Av8NBERovJauzP7bo1ThvuhZ4shsQ1AJiu4vQpoT1AQ==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", "dependencies": { "@babel/code-frame": "^7.16.0", "address": "^1.1.2", @@ -14215,7 +14280,7 @@ "open": "^8.4.0", "pkg-up": "^3.1.0", "prompts": "^2.4.2", - "react-error-overlay": "^6.0.10", + "react-error-overlay": "^6.0.11", "recursive-readdir": "^2.2.2", "shell-quote": "^1.7.3", "strip-ansi": "^6.0.1", @@ -14365,9 +14430,9 @@ } }, "node_modules/react-dropzone": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-12.0.4.tgz", - "integrity": "sha512-fcqHEYe1MzAghU6/Hz86lHDlBNsA+lO48nAcm7/wA+kIzwS6uuJbUG33tBZjksj7GAZ1iUQ6NHwjUURPmSGang==", + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-12.0.5.tgz", + "integrity": "sha512-zUjZigD0VJ91CSm9T1h7ErxFReBLaa9sjS2dUL0+inb0RROZpSJTNDHPY1rrBES5V2NXhF8v0kghmaHc81BMFg==", "dependencies": { "attr-accept": "^2.2.2", "file-selector": "^0.4.0", @@ -14381,9 +14446,9 @@ } }, "node_modules/react-error-overlay": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.10.tgz", - "integrity": "sha512-mKR90fX7Pm5seCOfz8q9F+66VCc1PGsWSBxKbITjfKVQHMNF2zudxHnMdJiB1fRCb+XsbQV9sO9DCkgsMQgBIA==" + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, "node_modules/react-icons": { "version": "4.3.1", @@ -14431,9 +14496,9 @@ } }, "node_modules/react-scripts": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.0.tgz", - "integrity": "sha512-3i0L2CyIlROz7mxETEdfif6Sfhh9Lfpzi10CtcGs1emDQStmZfWjJbAIMtRD0opVUjQuFWqHZyRZ9PPzKCFxWg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", "dependencies": { "@babel/core": "^7.16.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", @@ -14451,7 +14516,7 @@ "dotenv": "^10.0.0", "dotenv-expand": "^5.1.0", "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.0", + "eslint-config-react-app": "^7.0.1", "eslint-webpack-plugin": "^3.1.1", "file-loader": "^6.2.0", "fs-extra": "^10.0.0", @@ -14468,7 +14533,7 @@ "postcss-preset-env": "^7.0.1", "prompts": "^2.4.2", "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.0", + "react-dev-utils": "^12.0.1", "react-refresh": "^0.11.0", "resolve": "^1.20.0", "resolve-url-loader": "^4.0.0", @@ -14531,6 +14596,34 @@ "react-dom": ">=16.6.0" } }, + "node_modules/react-virtualized-auto-sizer": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.6.tgz", + "integrity": "sha512-7tQ0BmZqfVF6YYEWcIGuoR3OdYe8I/ZFbNclFlGOC3pMqunkYF/oL30NCjSGl9sMEb17AnzixDz98Kqc3N76HQ==", + "engines": { + "node": ">8.0.0" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0", + "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0" + } + }, + "node_modules/react-window": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.6.tgz", + "integrity": "sha512-8VwEEYyjz6DCnGBsd+MgkD0KJ2/OXFULyDtorIiTz+QzwoP94tBoA7CnbtyXMm+cCeAUER5KJcPtWl9cpKbOBg==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "memoize-one": ">=3.1.1 <6" + }, + "engines": { + "node": ">8.0.0" + }, + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -16583,6 +16676,19 @@ "node": ">=4" } }, + "node_modules/use-double-click": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/use-double-click/-/use-double-click-1.0.5.tgz", + "integrity": "sha512-71LUca6NtzpzHYlcfM/dOdmwvmvpMbzeIVQpN87w+DctpLiMCXtZpsN8FNWPgHpPBtNhvucPUHIDh5al8D8C7w==", + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -17541,6 +17647,11 @@ "node": ">=10" } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", @@ -19525,38 +19636,38 @@ "integrity": "sha512-rYEi46+gIzufyYUAoHDnRzkWGxajpD9vVXFQ3g1vbjrBm6P7MBmm+s/fqPa46sxa+8FOUdEuRQKaugo5a4JWpw==" }, "@mui/base": { - "version": "5.0.0-alpha.75", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.75.tgz", - "integrity": "sha512-eQ8SP2ML5nJyOdSqmk26ezg/eEP1k42Z+k6uMfNbgHZc8iZwgw9iVe+6g5j/qZPKS88AtxVG8YsLLZkXT82/Bw==", + "version": "5.0.0-alpha.76", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.76.tgz", + "integrity": "sha512-Pd0l4DvjXiGRyipn/CTDlYB2XrJwhpLktVXvbvcmzL2SMDaNprSarZqBkPHIubkulmRDZEEcnFDrpKgeSJDg4A==", "requires": { "@babel/runtime": "^7.17.2", "@emotion/is-prop-valid": "^1.1.2", "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.0", - "@popperjs/core": "^2.11.4", + "@mui/utils": "^5.6.1", + "@popperjs/core": "^2.11.5", "clsx": "^1.1.1", "prop-types": "^15.7.2", "react-is": "^17.0.2" } }, "@mui/icons-material": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.6.0.tgz", - "integrity": "sha512-2GDGt+/BbwM3oVkF84b9FFKQdQ9TxBJIRnTwT99vO2mimdfJaojxMRB2lkysm9tUY4HOf0yoU6O//X6GTC0Zhw==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.6.1.tgz", + "integrity": "sha512-I1x8u+FRLOmoJpRJASMx9UG+jZrSkNLyRQmBXivQQwXu3m3iasMoaKYhhI0J18t8+FWktbkNTp63oEUHE9Gw0Q==", "requires": { "@babel/runtime": "^7.17.2" } }, "@mui/material": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.6.0.tgz", - "integrity": "sha512-yh4FoRRPTgJWjv1oIu3YuvfYGD/WOEnyGizQ9fKs+hlMjIc0rzFpyUCo++P/3BUd0/hRKcI8D8mrpJK9OiOy1g==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.6.1.tgz", + "integrity": "sha512-xg6pPq+1jxWupwmPpnfmsHNjrsOe2xynUQWrRfcH8WHrrr1sQulq0VF4gORq/l8DD8a/jb4s8SsC20e/e6mHKQ==", "requires": { "@babel/runtime": "^7.17.2", - "@mui/base": "5.0.0-alpha.75", - "@mui/system": "^5.6.0", + "@mui/base": "5.0.0-alpha.76", + "@mui/system": "^5.6.1", "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.0", + "@mui/utils": "^5.6.1", "@types/react-transition-group": "^4.4.4", "clsx": "^1.1.1", "csstype": "^3.0.11", @@ -19567,19 +19678,19 @@ } }, "@mui/private-theming": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.6.0.tgz", - "integrity": "sha512-62jUFaMGfW3nvq/worcOAEiY++rWd44tpWShq4o97DybWmmWvEFYlBIuHEcXrtBIK/cloaQw8jqelQIFZeiVdw==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.6.1.tgz", + "integrity": "sha512-8lgh+tUt/3ftStfvml3dwAzhW3fe/cUFjLcBViOTnWk7UixWR79me4qehsO4NVj0THpu3d2qclrLzdD8qBAWAQ==", "requires": { "@babel/runtime": "^7.17.2", - "@mui/utils": "^5.6.0", + "@mui/utils": "^5.6.1", "prop-types": "^15.7.2" } }, "@mui/styled-engine": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.6.0.tgz", - "integrity": "sha512-K1WPKTruJTPA49cub0HtDCBBvosPKizqgZ4RenAfWz/ldlFtM4p7e7Mt3YEnNWTOJMHvDGcEke1tCuELkVAMyA==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.6.1.tgz", + "integrity": "sha512-jEhH6TBY8jc9S8yVncXmoTYTbATjEu44RMFXj6sIYfKr5NArVwTwRo3JexLL0t3BOAiYM4xsFLgfKEIvB9SAeQ==", "requires": { "@babel/runtime": "^7.17.2", "@emotion/cache": "^11.7.1", @@ -19587,15 +19698,15 @@ } }, "@mui/system": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.6.0.tgz", - "integrity": "sha512-FoytH73hY78Dll6F0fg7AI/hnpplygbFeW0HsqBfwFWrt2PMc2YSq2ICqHzd2CZPIhzEgRHDTSI8bMTLtG9W7A==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.6.1.tgz", + "integrity": "sha512-Y5pDvEOK6VOY+0vgNeyDuEEO5QCinhXbZQDyLOlaGLKuAoRGLXO9pcSsjZoGkewYZitXD44EDfgBQ+BqsAfgUA==", "requires": { "@babel/runtime": "^7.17.2", - "@mui/private-theming": "^5.6.0", - "@mui/styled-engine": "^5.6.0", + "@mui/private-theming": "^5.6.1", + "@mui/styled-engine": "^5.6.1", "@mui/types": "^7.1.3", - "@mui/utils": "^5.6.0", + "@mui/utils": "^5.6.1", "clsx": "^1.1.1", "csstype": "^3.0.11", "prop-types": "^15.7.2" @@ -19608,9 +19719,9 @@ "requires": {} }, "@mui/utils": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.6.0.tgz", - "integrity": "sha512-LbZKkCOn4243vbEVGbaKV7t6eN6kz7t95DR6AcUCRk4daH3l7CXPYkWsyzysRWdXgSzHmIyrgg4FZKzTy0dTHQ==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.6.1.tgz", + "integrity": "sha512-CPrzrkiBusCZBLWu0Sg5MJvR3fKJyK3gKecLVX012LULyqg2U64Oz04BKhfkbtBrPBbSQxM+DWW9B1c9hmV9nQ==", "requires": { "@babel/runtime": "^7.17.2", "@types/prop-types": "^15.7.4", @@ -19719,9 +19830,9 @@ } }, "@rushstack/eslint-patch": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.1.tgz", - "integrity": "sha512-BUyKJGdDWqvWC5GEhyOiUrGNi9iJUr4CU0O2WxJL6QJhHeeA/NVBalH+FeK0r/x/W0rPymXt5s78TDS7d6lCwg==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.2.tgz", + "integrity": "sha512-oe5WJEDaVsW8fBlGT7udrSCgOwWfoYHQOmSpnh8X+0GXpqqcRCP8k4y+Dxb0taWJDPpB+rdDUtumIiBwkY9qGA==" }, "@sindresorhus/is": { "version": "0.14.0", @@ -19902,6 +20013,17 @@ "defer-to-connect": "^1.0.1" } }, + "@table-library/react-table-library": { + "version": "2.0.32", + "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-2.0.32.tgz", + "integrity": "sha512-hHxR5DkAdU+62rRukjId1XqdI1ZkWQhdmvYwJM60StrFpah0nbpk8/HG21k7mFdlwjoO7HtDgWDDReLDUbPS7Q==", + "requires": { + "clsx": "1.1.1", + "react-virtualized-auto-sizer": "1.0.6", + "react-window": "1.8.6", + "use-double-click": "1.0.5" + } + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -20095,9 +20217,9 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, "@types/node": { - "version": "17.0.23", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", - "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==" + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==" }, "@types/parse-json": { "version": "4.0.0", @@ -20257,13 +20379,13 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "@typescript-eslint/eslint-plugin": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz", - "integrity": "sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.19.0.tgz", + "integrity": "sha512-w59GpFqDYGnWFim9p6TGJz7a3qWeENJuAKCqjGSx+Hq/bwq3RZwXYqy98KIfN85yDqz9mq6QXiY5h0FjGQLyEg==", "requires": { - "@typescript-eslint/scope-manager": "5.18.0", - "@typescript-eslint/type-utils": "5.18.0", - "@typescript-eslint/utils": "5.18.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/type-utils": "5.19.0", + "@typescript-eslint/utils": "5.19.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -20272,66 +20394,74 @@ "tsutils": "^3.21.0" }, "dependencies": { - "semver": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", - "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "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==", "requires": { - "lru-cache": "^7.4.0" + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" } } } }, "@typescript-eslint/experimental-utils": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.18.0.tgz", - "integrity": "sha512-hypiw5N0aM2aH91/uMmG7RpyUH3PN/iOhilMwkMFZIbm/Bn/G3ZnbaYdSoAN4PG/XHQjdhBYLi0ZoRZsRYT4hA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.19.0.tgz", + "integrity": "sha512-F+X/TTzmb2UXbghY1LrNLNDjMcGZMhKzXuzvu0xD+YEB77EamLM7zMOLuz2kP5807IJRDLBoAFFPYa7HT62sYg==", "requires": { - "@typescript-eslint/utils": "5.18.0" + "@typescript-eslint/utils": "5.19.0" } }, "@typescript-eslint/parser": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.18.0.tgz", - "integrity": "sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.19.0.tgz", + "integrity": "sha512-yhktJjMCJX8BSBczh1F/uY8wGRYrBeyn84kH6oyqdIJwTGKmzX5Qiq49LRQ0Jh0LXnWijEziSo6BRqny8nqLVQ==", "requires": { - "@typescript-eslint/scope-manager": "5.18.0", - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/typescript-estree": "5.18.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/typescript-estree": "5.19.0", "debug": "^4.3.2" } }, "@typescript-eslint/scope-manager": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz", - "integrity": "sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.19.0.tgz", + "integrity": "sha512-Fz+VrjLmwq5fbQn5W7cIJZ066HxLMKvDEmf4eu1tZ8O956aoX45jAuBB76miAECMTODyUxH61AQM7q4/GOMQ5g==", "requires": { - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/visitor-keys": "5.18.0" + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/visitor-keys": "5.19.0" } }, "@typescript-eslint/type-utils": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz", - "integrity": "sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.19.0.tgz", + "integrity": "sha512-O6XQ4RI4rQcBGshTQAYBUIGsKqrKeuIOz9v8bckXZnSeXjn/1+BDZndHLe10UplQeJLXDNbaZYrAytKNQO2T4Q==", "requires": { - "@typescript-eslint/utils": "5.18.0", + "@typescript-eslint/utils": "5.19.0", "debug": "^4.3.2", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.18.0.tgz", - "integrity": "sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==" + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.19.0.tgz", + "integrity": "sha512-zR1ithF4Iyq1wLwkDcT+qFnhs8L5VUtjgac212ftiOP/ZZUOCuuF2DeGiZZGQXGoHA50OreZqLH5NjDcDqn34w==" }, "@typescript-eslint/typescript-estree": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz", - "integrity": "sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.19.0.tgz", + "integrity": "sha512-dRPuD4ocXdaE1BM/dNR21elSEUPKaWgowCA0bqJ6YbYkvtrPVEvZ+zqcX5a8ECYn3q5iBSSUcBBD42ubaOp0Hw==", "requires": { - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/visitor-keys": "5.18.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/visitor-keys": "5.19.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -20339,25 +20469,33 @@ "tsutils": "^3.21.0" }, "dependencies": { - "semver": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", - "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "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==", "requires": { - "lru-cache": "^7.4.0" + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" } } } }, "@typescript-eslint/utils": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.18.0.tgz", - "integrity": "sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.19.0.tgz", + "integrity": "sha512-ZuEckdupXpXamKvFz/Ql8YnePh2ZWcwz7APICzJL985Rp5C2AYcHO62oJzIqNhAMtMK6XvrlBTZeNG8n7gS3lQ==", "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.18.0", - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/typescript-estree": "5.18.0", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/typescript-estree": "5.19.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -20379,11 +20517,11 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz", - "integrity": "sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.19.0.tgz", + "integrity": "sha512-Ym7zZoMDZcAKWsULi2s7UMLREdVQdScPQ/fKWMYefarCztWlHPFVJo8racf8R0Gc8FAEJ2eD4of8As1oFtnQlQ==", "requires": { - "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/types": "5.19.0", "eslint-visitor-keys": "^3.0.0" } }, @@ -20757,23 +20895,25 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, "array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" } }, "array.prototype.flatmap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", - "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" } }, "asap": { @@ -22420,6 +22560,14 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "requires": { + "has": "^1.0.3" + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -22664,9 +22812,9 @@ } }, "eslint-config-react-app": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.0.tgz", - "integrity": "sha512-xyymoxtIt1EOsSaGag+/jmcywRuieQoA2JbPCjnw9HukFj9/97aGPoZVFioaotzk1K5Qt9sHO5EutZbkrAXS0g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", "requires": { "@babel/core": "^7.16.0", "@babel/eslint-parser": "^7.16.3", @@ -22891,9 +23039,9 @@ "requires": {} }, "eslint-plugin-testing-library": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.2.1.tgz", - "integrity": "sha512-88qJv6uzYALtiYJDzhelP3ov0Px/GLgnu+UekjjDxL2nMyvgdTyboKqcDBsvFPmAeizlCoSWOjeBN4DxO0BxaA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.3.1.tgz", + "integrity": "sha512-OfF4dlG/q6ck6DL3P8Z0FPdK0dU5K57gsBu7eUcaVbwYKaNzjgejnXiM9CCUevppORkvfek+9D3Uj/9ZZ8Vz8g==", "requires": { "@typescript-eslint/utils": "^5.13.0" } @@ -23302,9 +23450,9 @@ "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" }, "fork-ts-checker-webpack-plugin": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", - "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.1.tgz", + "integrity": "sha512-x1wumpHOEf4gDROmKTaB6i4/Q6H3LwmjVO7fIX47vBwlZbtPjU33hgoMuD/Q/y6SU8bnuYSoN6ZQOLshGp0T/g==", "requires": { "@babel/code-frame": "^7.8.3", "@types/json-schema": "^7.0.5", @@ -23367,6 +23515,14 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, "schema-utils": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", @@ -23378,11 +23534,11 @@ } }, "semver": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", - "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "requires": { - "lru-cache": "^7.4.0" + "lru-cache": "^6.0.0" } }, "supports-color": { @@ -25913,6 +26069,11 @@ "fs-monkey": "1.0.3" } }, + "memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, "memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -26192,9 +26353,9 @@ "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" }, "notistack": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/notistack/-/notistack-2.0.3.tgz", - "integrity": "sha512-krmVFtTO9kEY1Pa4NrbyexrjiRcV6TqBM2xLx8nuDea1g96Z/OZfkvVLmYKkTvoSJ3jyQntWK16z86ssW5kt4A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/notistack/-/notistack-2.0.4.tgz", + "integrity": "sha512-kOJmKvTG91ElMzi4aHu82BDe1liQ0zMrBp+TnWJptgowDsTbeTKbZmsRqJNIj145BmlOtZsEE9xjcrN46zVo3w==", "requires": { "clsx": "^1.1.0", "hoist-non-react-statics": "^3.3.0" @@ -27566,9 +27727,9 @@ } }, "react-dev-utils": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.0.tgz", - "integrity": "sha512-xBQkitdxozPxt1YZ9O1097EJiVpwHr9FoAuEVURCKV0Av8NBERovJauzP7bo1ThvuhZ4shsQ1AJiu4vQpoT1AQ==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", "requires": { "@babel/code-frame": "^7.16.0", "address": "^1.1.2", @@ -27589,7 +27750,7 @@ "open": "^8.4.0", "pkg-up": "^3.1.0", "prompts": "^2.4.2", - "react-error-overlay": "^6.0.10", + "react-error-overlay": "^6.0.11", "recursive-readdir": "^2.2.2", "shell-quote": "^1.7.3", "strip-ansi": "^6.0.1", @@ -27693,9 +27854,9 @@ } }, "react-dropzone": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-12.0.4.tgz", - "integrity": "sha512-fcqHEYe1MzAghU6/Hz86lHDlBNsA+lO48nAcm7/wA+kIzwS6uuJbUG33tBZjksj7GAZ1iUQ6NHwjUURPmSGang==", + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-12.0.5.tgz", + "integrity": "sha512-zUjZigD0VJ91CSm9T1h7ErxFReBLaa9sjS2dUL0+inb0RROZpSJTNDHPY1rrBES5V2NXhF8v0kghmaHc81BMFg==", "requires": { "attr-accept": "^2.2.2", "file-selector": "^0.4.0", @@ -27703,9 +27864,9 @@ } }, "react-error-overlay": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.10.tgz", - "integrity": "sha512-mKR90fX7Pm5seCOfz8q9F+66VCc1PGsWSBxKbITjfKVQHMNF2zudxHnMdJiB1fRCb+XsbQV9sO9DCkgsMQgBIA==" + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, "react-icons": { "version": "4.3.1", @@ -27741,9 +27902,9 @@ } }, "react-scripts": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.0.tgz", - "integrity": "sha512-3i0L2CyIlROz7mxETEdfif6Sfhh9Lfpzi10CtcGs1emDQStmZfWjJbAIMtRD0opVUjQuFWqHZyRZ9PPzKCFxWg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", "requires": { "@babel/core": "^7.16.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", @@ -27761,7 +27922,7 @@ "dotenv": "^10.0.0", "dotenv-expand": "^5.1.0", "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.0", + "eslint-config-react-app": "^7.0.1", "eslint-webpack-plugin": "^3.1.1", "file-loader": "^6.2.0", "fs-extra": "^10.0.0", @@ -27779,7 +27940,7 @@ "postcss-preset-env": "^7.0.1", "prompts": "^2.4.2", "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.0", + "react-dev-utils": "^12.0.1", "react-refresh": "^0.11.0", "resolve": "^1.20.0", "resolve-url-loader": "^4.0.0", @@ -27816,6 +27977,21 @@ "prop-types": "^15.6.2" } }, + "react-virtualized-auto-sizer": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.6.tgz", + "integrity": "sha512-7tQ0BmZqfVF6YYEWcIGuoR3OdYe8I/ZFbNclFlGOC3pMqunkYF/oL30NCjSGl9sMEb17AnzixDz98Kqc3N76HQ==", + "requires": {} + }, + "react-window": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.6.tgz", + "integrity": "sha512-8VwEEYyjz6DCnGBsd+MgkD0KJ2/OXFULyDtorIiTz+QzwoP94tBoA7CnbtyXMm+cCeAUER5KJcPtWl9cpKbOBg==", + "requires": { + "@babel/runtime": "^7.0.0", + "memoize-one": ">=3.1.1 <6" + } + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -29346,6 +29522,12 @@ "prepend-http": "^2.0.0" } }, + "use-double-click": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/use-double-click/-/use-double-click-1.0.5.tgz", + "integrity": "sha512-71LUca6NtzpzHYlcfM/dOdmwvmvpMbzeIVQpN87w+DctpLiMCXtZpsN8FNWPgHpPBtNhvucPUHIDh5al8D8C7w==", + "requires": {} + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -30103,6 +30285,11 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", diff --git a/interface/package.json b/interface/package.json index c3688025f..5001fd899 100644 --- a/interface/package.json +++ b/interface/package.json @@ -7,10 +7,11 @@ "@emotion/react": "^11.9.0", "@emotion/styled": "^11.8.1", "@msgpack/msgpack": "^2.7.2", - "@mui/icons-material": "^5.6.0", - "@mui/material": "^5.6.0", + "@mui/icons-material": "^5.6.1", + "@mui/material": "^5.6.1", + "@table-library/react-table-library": "^2.0.32", "@types/lodash": "^4.14.181", - "@types/node": "^17.0.23", + "@types/node": "^17.0.24", "@types/react": "^17.0.43", "@types/react-dom": "^17.0.14", "@types/react-router-dom": "^5.3.3", @@ -19,15 +20,15 @@ "http-proxy-middleware": "^2.0.4", "jwt-decode": "^3.1.2", "lodash": "^4.17.21", - "notistack": "^2.0.3", + "notistack": "^2.0.4", "parse-ms": "^3.0.0", "react": "^17.0.2", - "react-dom": "^17.0.2", "react-app-rewired": "^2.2.1", - "react-dropzone": "^12.0.4", + "react-dom": "^17.0.2", + "react-dropzone": "^12.0.5", "react-icons": "^4.3.1", "react-router-dom": "^6.3.0", - "react-scripts": "5.0.0", + "react-scripts": "5.0.1", "sockette": "^2.0.6", "typescript": "^4.6.3" }, diff --git a/interface/src/project/DashboardData.tsx b/interface/src/project/DashboardData.tsx index 21cf4072c..3c64dc673 100644 --- a/interface/src/project/DashboardData.tsx +++ b/interface/src/project/DashboardData.tsx @@ -1,11 +1,7 @@ -import { FC, useState, useContext, useEffect } from 'react'; +import { FC, useState, useContext, useCallback, useEffect } from 'react'; import { Button, - Table, - TableBody, - TableHead, - TableRow, Typography, Box, Dialog, @@ -20,15 +16,18 @@ import { ListItem, ListItemText, Grid, - useMediaQuery + FormControlLabel, + Checkbox } from '@mui/material'; -import TableCell, { tableCellClasses } from '@mui/material/TableCell'; - -import { styled } from '@mui/material/styles'; - import { useSnackbar } from 'notistack'; +import { Table } from '@table-library/react-table-library/table'; +import { useTheme } from '@table-library/react-table-library/theme'; +import { useSort, HeaderCellSort } from '@table-library/react-table-library/sort'; +import { Header, HeaderRow, HeaderCell, Body, Row, Cell } from '@table-library/react-table-library/table'; +import { useRowSelect } from '@table-library/react-table-library/select'; + import RefreshIcon from '@mui/icons-material/Refresh'; import EditIcon from '@mui/icons-material/Edit'; import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined'; @@ -37,10 +36,11 @@ import CancelIcon from '@mui/icons-material/Cancel'; import SendIcon from '@mui/icons-material/TrendingFlat'; import SaveIcon from '@mui/icons-material/Save'; import RemoveIcon from '@mui/icons-material/RemoveCircleOutline'; -import FavoriteBorderIcon from '@mui/icons-material/FavoriteBorder'; import PlayArrowIcon from '@mui/icons-material/PlayArrow'; import EditOffOutlinedIcon from '@mui/icons-material/EditOffOutlined'; import CommentsDisabledOutlinedIcon from '@mui/icons-material/CommentsDisabledOutlined'; +import KeyboardArrowUpOutlinedIcon from '@mui/icons-material/KeyboardArrowUpOutlined'; +import KeyboardArrowDownOutlinedIcon from '@mui/icons-material/KeyboardArrowDownOutlined'; import DeviceIcon from './DeviceIcon'; @@ -54,10 +54,11 @@ import { ButtonRow, FormLoader, ValidatedTextField, SectionContent, MessageBox } import * as EMSESP from './api'; -import { numberValue, updateValue, extractErrorMessage, useRest } from '../utils'; +import { numberValue, updateValue, extractErrorMessage } from '../utils'; import { SensorData, + Device, CoreData, DeviceData, DeviceValue, @@ -70,81 +71,255 @@ import { DeviceEntityMask } from './types'; -const StyledTableCell = styled(TableCell)(({ theme }) => ({ - [`&.${tableCellClasses.head}`]: { - backgroundColor: theme.palette.common.black, - color: theme.palette.common.white, - fontSize: 14 - } -})); - -const StyledTableRow = styled(TableRow)(({ theme }) => ({ - '&:nth-of-type(odd)': { - backgroundColor: theme.palette.action.hover - }, - '&:hover': { - backgroundColor: theme.palette.info.light - } -})); - const DashboardData: FC = () => { - const { loadData, data, errorMessage } = useRest({ read: EMSESP.readCoreData }); - const { me } = useContext(AuthenticatedContext); const { enqueueSnackbar } = useSnackbar(); - const [deviceData, setDeviceData] = useState(); - const [sensorData, setSensorData] = useState(); + const [errorMessage, setErrorMessage] = useState(); + const [coreData, setCoreData] = useState({ devices: [], active_sensors: 0, analog_enabled: false }); + const [deviceData, setDeviceData] = useState({ label: '', data: [] }); + const [sensorData, setSensorData] = useState({ sensors: [], analogs: [] }); const [deviceValue, setDeviceValue] = useState(); const [sensor, setSensor] = useState(); const [analog, setAnalog] = useState(); - const [selectedDevice, setSelectedDevice] = useState(); const [deviceDialog, setDeviceDialog] = useState(-1); + const [onlyFav, setOnlyFav] = useState(false); - const desktopWindow = useMediaQuery('(min-width:600px)'); + const device_theme = useTheme({ + BaseRow: ` + font-size: 14px; + color: white; + height: 46px; + &:focus { + z-index: 2; + border-top: 1px solid #177ac9; + border-bottom: 1px solid #177ac9; + } + `, + HeaderRow: ` + background-color: black; + font-size: 14px; + border-bottom: 1px solid #e0e0e0; + `, + Row: ` + background-color: #1e1e1e; + border-top: 1px solid #565656; + border-bottom: 1px solid #565656; + position: relative; + z-index: 1; + &:not(:last-of-type) { + margin-bottom: -1px; + } + &:not(:first-of-type) { + margin-top: -1px; + } + &:hover { + z-index: 2; + color: white; + border-top: 1px solid #177ac9; + border-bottom: 1px solid #177ac9; + }, + &.tr.tr-body.row-select.row-select-single-selected, &.tr.tr-body.row-select.row-select-selected { + background-color: #3d4752; + color: white; + font-weight: normal; + z-index: 2; + border-top: 1px solid #177ac9; + border-bottom: 1px solid #177ac9; + } + `, + BaseCell: ` + border-top: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; + &:nth-of-type(1) { + min-width: 42px; + width: 42px; + div { + width: 100%; + } + } + &:nth-of-type(2) { + min-width: 120px; + width: 120px; + } + &:nth-of-type(3) { + flex: 1; + } + &:nth-of-type(4) { + text-align: center; + max-width: 100px; + } + &:last-of-type { + text-align: right; + min-width: 64px; + } + ` + }); - const refreshAllData = () => { - if (analog || sensor || deviceValue) { - return; + const data_theme = useTheme({ + BaseRow: ` + font-size: 14px; + color: white; + height: 32px; + `, + HeaderRow: ` + background-color: black; + font-size: 14px; + border-bottom: 1px solid #e0e0e0; + `, + Row: ` + &:nth-of-type(odd) { + background-color: #303030; + } + &:nth-of-type(even) { + background-color: #1e1e1e; + } + border-top: 1px solid #565656; + border-bottom: 1px solid #565656; + position: relative; + z-index: 1; + &:not(:last-of-type) { + margin-bottom: -1px; + } + &:not(:first-of-type) { + margin-top: -1px; + } + &:hover { + z-index: 2; + border-top: 1px solid #177ac9; + border-bottom: 1px solid #177ac9; + color: white; + cursor: 'pointer', + } + `, + BaseCell: ` + border-top: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; + &:last-of-type { + text-align: right; + min-width: 64px; + } + ` + }); + + const analog_sort = useSort( + { nodes: sensorData.analogs }, + { + state: { + sortKey: 'GPIO', + reverse: false + } + }, + { + sortIcon: { + iconDefault: null, + iconUp: , + iconDown: + }, + sortFns: { + GPIO: (array) => array.sort((a, b) => a.i - b.i), + NAME: (array) => array.sort((a, b) => a.n.localeCompare(b.n)), + TYPE: (array) => array.sort((a, b) => a.t - b.t) + } } - loadData(); - if (sensorData) { - fetchSensorData(); - } else if (selectedDevice) { - fetchDeviceData(selectedDevice); + ); + + const sensor_sort = useSort( + { nodes: sensorData.sensors }, + { + state: { + sortKey: 'NAME', + reverse: false + } + }, + { + sortIcon: { + iconDefault: null, + iconUp: , + iconDown: + }, + sortFns: { + NAME: (array) => array.sort((a, b) => a.id.localeCompare(b.id)), + TEMPERATURE: (array) => array.sort((a, b) => a.id.localeCompare(b.id)) + } } - }; + ); + + const dv_sort = useSort( + { nodes: deviceData.data }, + {}, + { + sortIcon: { + margin: '0px', + iconDefault: null, + iconUp: , + iconDown: + }, + sortFns: { + NAME: (array) => array.sort((a, b) => a.id.slice(2).localeCompare(b.id.slice(2))) + } + } + ); + + const device_select = useRowSelect( + { nodes: coreData.devices }, + { + onChange: onSelectChange + } + ); + + function onSelectChange(action: any, state: any) { + if (action.type === 'ADD_BY_ID_EXCLUSIVELY') { + refreshData(); + } else { + setSensorData({ sensors: [], analogs: [] }); + } + } const refreshData = () => { - if (analog || sensor || deviceValue) { + const selectedDevice = device_select.state.id; + if (selectedDevice === 'sensor') { + fetchSensorData(); return; } - if (sensorData) { - fetchSensorData(); - } else if (selectedDevice) { + + setSensorData({ sensors: [], analogs: [] }); + if (selectedDevice) { fetchDeviceData(selectedDevice); } else { - loadData(); + fetchCoreData(); } }; + const fetchCoreData = useCallback(async () => { + try { + setCoreData((await EMSESP.readCoreData()).data); + } catch (error: any) { + setErrorMessage(extractErrorMessage(error, 'Failed to fetch core data')); + } + }, []); + + useEffect(() => { + fetchCoreData(); + }, [fetchCoreData]); + useEffect(() => { const timer = setInterval(() => refreshData(), 60000); return () => { clearInterval(timer); }; // eslint-disable-next-line - }, [analog, sensor, deviceValue, sensorData, selectedDevice]); + }, [analog, sensor, deviceValue, sensorData]); - const fetchDeviceData = async (unique_id: number) => { + const fetchDeviceData = async (id: string) => { + const unique_id = parseInt(id); try { setDeviceData((await EMSESP.readDeviceData({ id: unique_id })).data); } catch (error: any) { - enqueueSnackbar(extractErrorMessage(error, 'Problem fetching device data'), { variant: 'error' }); - } finally { - setSelectedDevice(unique_id); - setSensorData(undefined); + setErrorMessage(extractErrorMessage(error, 'Problem fetching device data')); } }; @@ -152,9 +327,7 @@ const DashboardData: FC = () => { try { setSensorData((await EMSESP.readSensorData()).data); } catch (error: any) { - enqueueSnackbar(extractErrorMessage(error, 'Problem fetching sensor data'), { variant: 'error' }); - } finally { - setSelectedDevice(undefined); + setErrorMessage(extractErrorMessage(error, 'Problem fetching sensor data')); } }; @@ -192,10 +365,10 @@ const DashboardData: FC = () => { } const sendDeviceValue = async () => { - if (selectedDevice && deviceValue) { + if (deviceValue) { try { const response = await EMSESP.writeValue({ - id: selectedDevice, + id: Number(device_select.state.id), devicevalue: deviceValue }); if (response.status === 204) { @@ -207,11 +380,10 @@ const DashboardData: FC = () => { } setDeviceValue(undefined); } catch (error: any) { - enqueueSnackbar(extractErrorMessage(error, 'Problem writing value'), { variant: 'error' }); + setErrorMessage(extractErrorMessage(error, 'Problem writing value')); } finally { + refreshData(); setDeviceValue(undefined); - fetchDeviceData(selectedDevice); - loadData(); } } }; @@ -225,7 +397,7 @@ const DashboardData: FC = () => { {deviceValue.l && ( { {!deviceValue.l && ( { }; const addAnalogSensor = () => { - setAnalog({ i: 0, n: '', u: 0, v: 0, o: 0, t: 0, f: 1 }); + setAnalog({ id: '0', n: '', u: 0, v: 0, o: 0, t: 0, f: 1 }); }; const sendSensor = async () => { if (sensor) { try { const response = await EMSESP.writeSensor({ - id_str: sensor.is, + id_str: sensor.id, name: sensor.n, offset: sensor.o }); @@ -299,7 +471,7 @@ const DashboardData: FC = () => { } setSensor(undefined); } catch (error: any) { - enqueueSnackbar(extractErrorMessage(error, 'Problem updating sensor'), { variant: 'error' }); + setErrorMessage(extractErrorMessage(error, 'Problem updating sensor')); } finally { setSensor(undefined); fetchSensorData(); @@ -314,7 +486,7 @@ const DashboardData: FC = () => { Edit Temperature Sensor - Sensor ID {sensor.is} + Sensor ID {sensor.id} @@ -369,32 +541,32 @@ const DashboardData: FC = () => { }; const renderDeviceDialog = () => { - if (data && data.devices.length > 0 && deviceDialog !== -1) { + if (coreData && coreData.devices.length > 0 && deviceDialog !== -1) { return ( setDeviceDialog(-1)}> Device Details - + - + - + - + - + @@ -408,104 +580,86 @@ const DashboardData: FC = () => { } }; - const toggleDeviceData = (index: number) => { - loadData(); - if (selectedDevice === index) { - setSelectedDevice(undefined); - } else { - fetchDeviceData(index); - } - }; - - const toggleSensorData = () => { - loadData(); - if (sensorData) { - setSensorData(undefined); - } else { - fetchSensorData(); - } - }; - const renderCoreData = () => { - if (!data) { - return ; + if (!coreData) { + return ; } + console.log('** Rendering main data'); + return ( - {data.devices.length === 0 && } - - - - - TYPE - - {desktopWindow && DESCRIPTION} - ENTITIES - - - - - {data.devices.map((device, index) => ( - device.e && toggleDeviceData(device.i)} - > - - - - {device.t} - {desktopWindow && {device.n}} - {device.e} - - setDeviceDialog(index)}> - - - - - ))} - {(data.active_sensors > 0 || data.analog_enabled) && ( - toggleSensorData()}> - - - - Sensors - {desktopWindow && Attached EMS-ESP Sensors} - {data.active_sensors} - - addAnalogSensor()} disabled={!data.analog_enabled}> - - - - - )} - + {coreData.devices.length === 0 && } + +
+ {(tableList: any) => ( + <> +
+ + + TYPE + DESCRIPTION + ENTITIES + + +
+ + {tableList.map((device: Device, index: number) => ( + + + + + {device.t} + {device.n} + {device.e} + + setDeviceDialog(index)}> + + + + + ))} + {(coreData.active_sensors > 0 || coreData.analog_enabled) && ( + + + + + Sensors + Attached EMS-ESP Sensors + {coreData.active_sensors} + + addAnalogSensor()}> + + + + + )} + + + )}
); }; const renderDeviceData = () => { - if (data?.devices.length === 0 || !deviceData || !selectedDevice) { + if (!device_select.state.id || device_select.state.id === 'sensor') { return; } - const hasMask = (entityName: string, mask: number) => (parseInt(entityName.slice(0, 2), 16) & mask) === mask; + const hasMask = (id: string, mask: number) => (parseInt(id.slice(0, 2), 16) & mask) === mask; const sendCommand = (dv: DeviceValue) => { - if (dv.c && me.admin && !hasMask(dv.n, DeviceEntityMask.DV_READONLY)) { + if (dv.c && me.admin && !hasMask(dv.id, DeviceEntityMask.DV_READONLY)) { setDeviceValue(dv); } }; const renderNameCell = (dv: DeviceValue) => ( <> - {dv.n.slice(2)}  - {hasMask(dv.n, DeviceEntityMask.DV_FAVORITE) && } - {hasMask(dv.n, DeviceEntityMask.DV_READONLY) && } - {hasMask(dv.n, DeviceEntityMask.DV_API_MQTT_EXCLUDE) && ( + {dv.id.slice(2)}  + {hasMask(dv.id, DeviceEntityMask.DV_READONLY) && } + {hasMask(dv.id, DeviceEntityMask.DV_API_MQTT_EXCLUDE) && ( )} @@ -516,47 +670,67 @@ const DashboardData: FC = () => { {deviceData.label} - - - - - ENTITY NAME - VALUE - - - - {deviceData.data.map((dv, i) => ( - sendCommand(dv)}> - - {dv.c && me.admin && !hasMask(dv.n, DeviceEntityMask.DV_READONLY) && ( - - - - )} - - - {renderNameCell(dv)} - - - {isCmdOnly(dv) ? : formatValue(dv.v, dv.u)} - - - ))} - + + setOnlyFav(!onlyFav)} />} + label="show favorites only" + /> + +
hasMask(dv.id, DeviceEntityMask.DV_FAVORITE)) + : deviceData.data + }} + theme={data_theme} + sort={dv_sort} + > + {(tableList: any) => ( + <> +
+ + + ENTITY NAME + + VALUE + + +
+ + {tableList.map((dv: DeviceValue) => ( + sendCommand(dv)}> + {renderNameCell(dv)} + {formatValue(dv.v, dv.u)} + + {dv.c && me.admin && !hasMask(dv.id, DeviceEntityMask.DV_READONLY) && ( + sendCommand(dv)}> + {isCmdOnly(dv) ? ( + + ) : ( + + )} + + )} + + + ))} + + + )}
); }; - const updateSensor = (sensordata: Sensor) => { - if (sensordata && me.admin) { - setSensor(sensordata); + const updateSensor = (s: Sensor) => { + if (s && me.admin) { + setSensor(s); } }; - const updateAnalog = (analogdata: Analog) => { + const updateAnalog = (a: Analog) => { if (me.admin) { - setAnalog(analogdata); + setAnalog(a); } }; @@ -565,31 +739,36 @@ const DashboardData: FC = () => { Temperature Sensors - - - - - NAME - TEMPERATURE - - - - {sensorData?.sensors.map((sensor_data) => ( - updateSensor(sensor_data)}> - - {me.admin && ( - - - - )} - - - {sensor_data.n} - - {formatValue(sensor_data.t, sensor_data.u)} - - ))} - + +
+ {(tableList: any) => ( + <> +
+ + + NAME + + TEMPERATURE + + +
+ + {tableList.map((s: Sensor) => ( + updateSensor(s)}> + {s.n} + {formatValue(s.t, s.u)} + + {me.admin && ( + updateSensor(s)}> + + + )} + + + ))} + + + )}
); @@ -599,35 +778,44 @@ const DashboardData: FC = () => { Analog Sensors - - - - - GPIO - NAME - TYPE - VALUE - - - - {sensorData?.analogs.map((analog_data) => ( - updateAnalog(analog_data)}> - - {me.admin && ( - - - - )} - - - {analog_data.i} - - {analog_data.n} - {AnalogTypeNames[analog_data.t]} - {formatValue(analog_data.v, analog_data.u)} - - ))} - + +
+ {(tableList: any) => ( + <> +
+ + + GPIO + + + NAME + + + TYPE + + VALUE + + +
+ + {tableList.map((a: Analog) => ( + updateAnalog(a)}> + {a.id} + {a.n} + {AnalogTypeNames[a.t]} + {formatValue(a.v, a.u)} + + {me.admin && ( + updateAnalog(a)}> + + + )} + + + ))} + + + )}
); @@ -636,7 +824,7 @@ const DashboardData: FC = () => { if (analog) { try { const response = await EMSESP.writeAnalog({ - id: analog.i, + id: analog.id, name: analog.n, offset: analog.o, factor: analog.f, @@ -664,7 +852,7 @@ const DashboardData: FC = () => { if (analog) { try { const response = await EMSESP.writeAnalog({ - id: analog.i, + id: analog.id, name: analog.n, offset: analog.o, factor: analog.f, @@ -697,10 +885,11 @@ const DashboardData: FC = () => { { )} - {analog.t === AnalogType.DIGITAL_OUT && (analog.i === 25 || analog.i === 26) && ( + {analog.t === AnalogType.DIGITAL_OUT && (analog.id === '25' || analog.id === '26') && ( <> { )} - {analog.t === AnalogType.DIGITAL_OUT && analog.i !== 25 && analog.i !== 26 && ( + {analog.t === AnalogType.DIGITAL_OUT && analog.id !== '25' && analog.id !== '26' && ( <> { } }; - const content = () => { - if (!data) { - return ; - } - - return ( - <> - {renderCoreData()} - {renderDeviceData()} - {renderDeviceDialog()} - {sensorData && sensorData.sensors.length > 0 && renderDallasData()} - {sensorData && sensorData.analogs.length > 0 && renderAnalogData()} - {renderDeviceValueDialog()} - {renderSensorDialog()} - {renderAnalogDialog()} - - - - - ); - }; - return ( - {content()} + {renderCoreData()} + {renderDeviceData()} + {renderDeviceDialog()} + {sensorData.sensors.length !== 0 && renderDallasData()} + {sensorData.analogs.length !== 0 && renderAnalogData()} + {renderDeviceValueDialog()} + {renderSensorDialog()} + {renderAnalogDialog()} + + + ); }; diff --git a/interface/src/project/types.ts b/interface/src/project/types.ts index dc73bbe5e..d3d096aea 100644 --- a/interface/src/project/types.ts +++ b/interface/src/project/types.ts @@ -69,7 +69,7 @@ export interface Status { } export interface Device { - i: number; // id + id: string; // id index t: string; // type b: string; // brand n: string; // name @@ -80,7 +80,7 @@ export interface Device { } export interface Sensor { - is: string; // id string + id: string; // id string n: string; // name/alias t?: number; // temp, optional o: number; // offset @@ -88,7 +88,7 @@ export interface Sensor { } export interface Analog { - i: number; + id: string; // id string, is GPIO n: string; v?: number; u: number; @@ -126,11 +126,11 @@ export interface Devices { } export interface DeviceValue { + id: string; // index, contains mask+name v?: any; // value, in any format u: number; // uom - n: string; // name - c: string; // command - l: string[]; // list + c?: string; // command + l?: string[]; // list h?: string; // help text, optional s?: string; // steps for up/down, optional m?: string; // min, optional @@ -143,8 +143,8 @@ export interface DeviceData { } export interface DeviceEntity { - v?: any; // value, in any format n: string; // name + v?: any; // value, in any format s: string; // shortname m: number; // mask om?: number; // original mask before edits @@ -277,7 +277,7 @@ export interface WriteValue { } export interface WriteAnalog { - id: number; + id: string; name: string; factor: number; offset: number; diff --git a/mock-api/server.js b/mock-api/server.js index 49e86fa46..0645388ad 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -253,7 +253,7 @@ const UPLOAD_FIRMWARE_ENDPOINT = REST_ENDPOINT_ROOT + 'uploadFirmware' const SIGN_IN_ENDPOINT = REST_ENDPOINT_ROOT + 'signIn' const GENERATE_TOKEN_ENDPOINT = REST_ENDPOINT_ROOT + 'generateToken' const system_status = { - emsesp_version: '3.4.0demo', + emsesp_version: '3.4demo', esp_platform: 'ESP32', max_alloc_heap: 113792, psram_size: 0, @@ -364,7 +364,7 @@ const emsesp_devices = { const emsesp_coredata = { devices: [ { - i: 2, + id: '2', t: 'Boiler', s: 'Boiler', b: 'Nefit', @@ -375,7 +375,7 @@ const emsesp_coredata = { e: 68, }, { - i: 1, + id: '1', t: 'Thermostat', s: 'Thermostat', b: '', @@ -386,7 +386,7 @@ const emsesp_coredata = { e: 5, }, { - i: 4, + id: '4', t: 'Thermostat', s: 'Thermostat', b: 'Buderus', @@ -403,17 +403,17 @@ const emsesp_coredata = { const emsesp_sensordata = { sensors: [ - { is: '28-233D-9497-0C03', n: 'Dallas 1', t: 25.7, o: 1.2, u: 1 }, - { is: '28-243D-7437-1E3A', n: 'Dallas 2 outside', t: 26.1, o: 0, u: 1 }, - { is: '28-243E-7437-1E3B', n: 'Zolder', t: 27.1, o: 0, u: 16 }, - { is: '28-183D-1892-0C33', n: 'Roof', o: 2, u: 1 }, + { id: '28-233D-9497-0C03', n: 'Dallas 1', t: 25.7, o: 1.2, u: 1 }, + { id: '28-243D-7437-1E3A', n: 'Dallas 2 outside', t: 26.1, o: 0, u: 1 }, + { id: '28-243E-7437-1E3B', n: 'Zolder', t: 27.1, o: 0, u: 16 }, + { id: '28-183D-1892-0C33', n: 'Roof', o: 2, u: 1 }, ], // sensors: [], analogs: [ - { i: 36, n: 'motor', u: 0, o: 17, f: 0, t: 0 }, - { i: 37, n: 'External switch', v: 13, u: 0, o: 17, f: 0, t: 1 }, - { i: 39, n: 'Pulse count', v: 144, u: 0, o: 0, f: 0, t: 2 }, - { i: 40, n: 'Pressure', v: 16, u: 17, o: 0, f: 0, t: 3 }, + { id: '36', n: 'motor', u: 0, o: 17, f: 0, t: 0 }, + { id: '37', n: 'External switch', v: 13, u: 0, o: 17, f: 0, t: 1 }, + { id: '39', n: 'Pulse count', v: 144, u: 0, o: 0, f: 0, t: 2 }, + { id: '40', n: 'Pressure', v: 16, u: 17, o: 0, f: 0, t: 3 }, ], // analogs: [], } @@ -455,31 +455,28 @@ const emsesp_devicedata_1 = { { v: '(0)', u: 0, - n: '00error code', - c: '', + id: '00error code', }, { v: '14:54:39 06/06/2021', u: 0, - n: '00date/time', - c: '', + id: '00date/time', }, { v: 18, u: 1, - n: '00hc1 selected room temperature', + id: '00hc1 selected room temperature', c: 'hc1/seltemp', }, { v: 22.6, u: 1, - n: '00hc1 current room temperature', - c: '', + id: '00hc1 current room temperature', }, { v: 'auto', u: 0, - n: '00hc1 mode', + id: '00hc1 mode', c: 'hc1/mode', }, ], @@ -488,81 +485,81 @@ const emsesp_devicedata_1 = { const emsesp_devicedata_2 = { label: 'Boiler: Nefit GBx72/Trendline/Cerapur/Greenstar Si/27i', data: [ - { u: 0, n: '08reset', c: 'reset', l: ['-', 'maintenance', 'error'] }, - { v: 'false', u: 0, n: '08heating active' }, - { v: 'false', u: 0, n: '04tapwater active' }, - { v: 5, u: 1, n: '04selected flow temperature', c: 'selflowtemp' }, - { v: 0, u: 3, n: '0Eburner selected max power', c: 'selburnpow' }, - { v: 0, u: 3, n: '00heating pump modulation' }, - { v: 53.4, u: 1, n: '00current flow temperature' }, - { v: 52.7, u: 1, n: '00return temperature' }, - { v: 1.3, u: 10, n: '00system pressure' }, - { v: 54.9, u: 1, n: '00actual boiler temperature' }, - { v: 'false', u: 0, n: '00gas' }, - { v: 'false', u: 0, n: '00gas stage 2' }, - { v: 0, u: 9, n: '00flame current' }, - { v: 'false', u: 0, n: '00heating pump' }, - { v: 'false', u: 0, n: '00fan' }, - { v: 'false', u: 0, n: '00ignition' }, - { v: 'false', u: 0, n: '00oil preheating' }, - { v: 'true', u: 0, n: '00heating activated', c: 'heatingactivated', l: ['off', 'on'] }, - { v: 80, u: 1, n: '00heating temperature', c: 'heatingtemp' }, - { v: 70, u: 3, n: '00burner pump max power', c: 'pumpmodmax' }, - { v: 30, u: 3, n: '00burner pump min power', c: 'pumpmodmin' }, - { v: 1, u: 8, n: '00pump delay', c: 'pumpdelay' }, - { v: 10, u: 8, n: '00burner min period', c: 'burnminperiod' }, - { v: 0, u: 3, n: '00burner min power', c: 'burnminpower' }, - { v: 50, u: 3, n: '00burner max power', c: 'burnmaxpower' }, - { v: -6, u: 2, n: '00hysteresis on temperature', c: 'boilhyston' }, - { v: 6, u: 2, n: '00hysteresis off temperature', c: 'boilhystoff' }, - { v: 0, u: 1, n: '00set flow temperature' }, - { v: 0, u: 3, n: '00burner set power' }, - { v: 0, u: 3, n: '00burner current power' }, - { v: 326323, u: 0, n: '00burner starts' }, - { v: 553437, u: 8, n: '00total burner operating time' }, - { v: 451286, u: 8, n: '00total heat operating time' }, - { v: 4672173, u: 8, n: '00total UBA operating time' }, - { v: '1C(210) 06.06.2020 12:07 (0 min)', u: 0, n: '00last error code' }, - { v: '0H', u: 0, n: '00service code' }, - { v: 203, u: 0, n: '00service code number' }, - { v: 'H00', u: 0, n: '00maintenance message' }, - { v: 'manual', u: 0, n: '00maintenance scheduled', c: 'maintenance', l: ['off', 'time', 'date', 'manual'] }, - { v: 6000, u: 7, n: '00time to next maintenance', c: 'maintenancetime' }, - { v: '01.01.2012', u: 0, n: '00next maintenance date', c: 'maintenancedate', o: 'Format: < dd.mm.yyyy >' }, - { v: 'true', u: 0, n: '00dhw turn on/off', c: 'wwtapactivated', l: ['off', 'on'] }, - { v: 62, u: 1, n: '00dhw set temperature' }, - { v: 60, u: 1, n: '00dhw selected temperature', c: 'wwseltemp' }, - { v: 'flow', u: 0, n: '00dhw type' }, - { v: 'hot', u: 0, n: '00dhw comfort', c: 'wwcomfort', l: ['hot', 'eco', 'intelligent'] }, - { v: 40, u: 2, n: '00dhw flow temperature offset', c: 'wwflowtempoffset' }, - { v: 100, u: 3, n: '00dhw max power', c: 'wwmaxpower' }, - { v: 'false', u: 0, n: '00dhw circulation pump available', c: 'wwcircpump', l: ['off', 'on'] }, - { v: '3-way valve', u: 0, n: '00dhw charging type' }, - { v: -5, u: 2, n: '00dhw hysteresis on temperature', c: 'wwhyston' }, - { v: 0, u: 2, n: '00dhw hysteresis off temperature', c: 'wwhystoff' }, - { v: 70, u: 1, n: '00dhw disinfection temperature', c: 'wwdisinfectiontemp' }, + { u: 0, id: '08reset', c: 'reset', l: ['-', 'maintenance', 'error'] }, + { v: 'false', u: 0, id: '08heating active' }, + { v: 'false', u: 0, id: '04tapwater active' }, + { v: 5, u: 1, id: '04selected flow temperature', c: 'selflowtemp' }, + { v: 0, u: 3, id: '0Eburner selected max power', c: 'selburnpow' }, + { v: 0, u: 3, id: '00heating pump modulation' }, + { v: 53.4, u: 1, id: '00current flow temperature' }, + { v: 52.7, u: 1, id: '00return temperature' }, + { v: 1.3, u: 10, id: '00system pressure' }, + { v: 54.9, u: 1, id: '00actual boiler temperature' }, + { v: 'false', u: 0, id: '00gas' }, + { v: 'false', u: 0, id: '00gas stage 2' }, + { v: 0, u: 9, id: '00flame current' }, + { v: 'false', u: 0, id: '00heating pump' }, + { v: 'false', u: 0, id: '00fan' }, + { v: 'false', u: 0, id: '00ignition' }, + { v: 'false', u: 0, id: '00oil preheating' }, + { v: 'true', u: 0, id: '00heating activated', c: 'heatingactivated', l: ['off', 'on'] }, + { v: 80, u: 1, id: '00heating temperature', c: 'heatingtemp' }, + { v: 70, u: 3, id: '00burner pump max power', c: 'pumpmodmax' }, + { v: 30, u: 3, id: '00burner pump min power', c: 'pumpmodmin' }, + { v: 1, u: 8, id: '00pump delay', c: 'pumpdelay' }, + { v: 10, u: 8, id: '00burner min period', c: 'burnminperiod' }, + { v: 0, u: 3, id: '00burner min power', c: 'burnminpower' }, + { v: 50, u: 3, id: '00burner max power', c: 'burnmaxpower' }, + { v: -6, u: 2, id: '00hysteresis on temperature', c: 'boilhyston' }, + { v: 6, u: 2, id: '00hysteresis off temperature', c: 'boilhystoff' }, + { v: 0, u: 1, id: '00set flow temperature' }, + { v: 0, u: 3, id: '00burner set power' }, + { v: 0, u: 3, id: '00burner current power' }, + { v: 326323, u: 0, id: '00burner starts' }, + { v: 553437, u: 8, id: '00total burner operating time' }, + { v: 451286, u: 8, id: '00total heat operating time' }, + { v: 4672173, u: 8, id: '00total UBA operating time' }, + { v: '1C(210) 06.06.2020 12:07 (0 min)', u: 0, id: '00last error code' }, + { v: '0H', u: 0, id: '00service code' }, + { v: 203, u: 0, id: '00service code number' }, + { v: 'H00', u: 0, id: '00maintenance message' }, + { v: 'manual', u: 0, id: '00maintenance scheduled', c: 'maintenance', l: ['off', 'time', 'date', 'manual'] }, + { v: 6000, u: 7, id: '00time to next maintenance', c: 'maintenancetime' }, + { v: '01.01.2012', u: 0, id: '00next maintenance date', c: 'maintenancedate', o: 'Format: < dd.mm.yyyy >' }, + { v: 'true', u: 0, id: '00dhw turn on/off', c: 'wwtapactivated', l: ['off', 'on'] }, + { v: 62, u: 1, id: '00dhw set temperature' }, + { v: 60, u: 1, id: '00dhw selected temperature', c: 'wwseltemp' }, + { v: 'flow', u: 0, id: '00dhw type' }, + { v: 'hot', u: 0, id: '00dhw comfort', c: 'wwcomfort', l: ['hot', 'eco', 'intelligent'] }, + { v: 40, u: 2, id: '00dhw flow temperature offset', c: 'wwflowtempoffset' }, + { v: 100, u: 3, id: '00dhw max power', c: 'wwmaxpower' }, + { v: 'false', u: 0, id: '00dhw circulation pump available', c: 'wwcircpump', l: ['off', 'on'] }, + { v: '3-way valve', u: 0, id: '00dhw charging type' }, + { v: -5, u: 2, id: '00dhw hysteresis on temperature', c: 'wwhyston' }, + { v: 0, u: 2, id: '00dhw hysteresis off temperature', c: 'wwhystoff' }, + { v: 70, u: 1, id: '00dhw disinfection temperature', c: 'wwdisinfectiontemp' }, { v: 'off', u: 0, - n: '00dhw circulation pump mode', + id: '00dhw circulation pump mode', c: 'wwcircmode', l: ['off', '1x3min', '2x3min', '3x3min', '4x3min', '5x3min', '6x3min', 'continuous'], }, - { v: 'false', u: 0, n: '00dhw circulation active', c: 'wwcirc', l: ['off', 'on'] }, - { v: 47.3, u: 1, n: '00dhw current intern temperature' }, - { v: 0, u: 4, n: '00dhw current tap water flow' }, - { v: 47.3, u: 1, n: '00dhw storage intern temperature' }, - { v: 'true', u: 0, n: '00dhw activated', c: 'wwactivated', l: ['off', 'on'] }, - { v: 'false', u: 0, n: '00dhw one time charging', c: 'wwonetime', l: ['off', 'on'] }, - { v: 'false', u: 0, n: '00dhw disinfecting', c: 'wwdisinfecting', l: ['off', 'on'] }, - { v: 'false', u: 0, n: '00dhw charging' }, - { v: 'false', u: 0, n: '00dhw recharging' }, - { v: 'true', u: 0, n: '00dhw temperature ok' }, - { v: 'false', u: 0, n: '00dhw active' }, - { v: 'true', u: 0, n: '00dhw 3way valve active' }, - { v: 0, u: 3, n: '00dhw set pump power' }, - { v: 288768, u: 0, n: '00dhw starts' }, - { v: 102151, u: 8, n: '00dhw active time' }, + { v: 'false', u: 0, id: '00dhw circulation active', c: 'wwcirc', l: ['off', 'on'] }, + { v: 47.3, u: 1, id: '00dhw current intern temperature' }, + { v: 0, u: 4, id: '00dhw current tap water flow' }, + { v: 47.3, u: 1, id: '00dhw storage intern temperature' }, + { v: 'true', u: 0, id: '00dhw activated', c: 'wwactivated', l: ['off', 'on'] }, + { v: 'false', u: 0, id: '00dhw one time charging', c: 'wwonetime', l: ['off', 'on'] }, + { v: 'false', u: 0, id: '00dhw disinfecting', c: 'wwdisinfecting', l: ['off', 'on'] }, + { v: 'false', u: 0, id: '00dhw charging' }, + { v: 'false', u: 0, id: '00dhw recharging' }, + { v: 'true', u: 0, id: '00dhw temperature ok' }, + { v: 'false', u: 0, id: '00dhw active' }, + { v: 'true', u: 0, id: '00dhw 3way valve active' }, + { v: 0, u: 3, id: '00dhw set pump power' }, + { v: 288768, u: 0, id: '00dhw starts' }, + { v: 102151, u: 8, id: '00dhw active time' }, ], } @@ -572,19 +569,19 @@ const emsesp_devicedata_4 = { { v: 16, u: 1, - n: '00hc2 selected room temperature', + id: '00hc2 selected room temperature', c: 'hc2/seltemp', }, { v: 18.6, u: 1, - n: '00hc2 current room temperature', + id: '00hc2 current room temperature', c: '', }, { v: 'off', u: 0, - n: '00hc2 mode', + id: '00hc2 mode', c: 'hc2/mode', }, ], @@ -870,9 +867,12 @@ rest_server.post(EMSESP_SETTINGS_ENDPOINT, (req, res) => { // res.status(200).json(settings); // no restart needed }) rest_server.get(EMSESP_CORE_DATA_ENDPOINT, (req, res) => { + console.log('send back core data...') res.json(emsesp_coredata) }) rest_server.get(EMSESP_SENSOR_DATA_ENDPOINT, (req, res) => { + console.log('send back sensor data...') + res.json(emsesp_sensordata) }) rest_server.get(EMSESP_DEVICES_ENDPOINT, (req, res) => { @@ -887,6 +887,7 @@ rest_server.get(EMSESP_STATUS_ENDPOINT, (req, res) => { }) rest_server.post(EMSESP_DEVICEDATA_ENDPOINT, (req, res) => { const id = req.body.id + console.log('send back device data for ' + id) if (id === 1) { const encoded = msgpack.encode(emsesp_devicedata_1) res.write(encoded, 'binary') @@ -986,7 +987,7 @@ rest_server.post(EMSESP_WRITE_VALUE_ENDPOINT, (req, res) => { rest_server.post(EMSESP_WRITE_SENSOR_ENDPOINT, (req, res) => { const sensor = req.body console.log('Write sensor: ' + JSON.stringify(sensor)) - objIndex = emsesp_sensordata.sensors.findIndex((obj) => obj.is == sensor.id_str) + objIndex = emsesp_sensordata.sensors.findIndex((obj) => obj.id == sensor.id_str) emsesp_sensordata.sensors[objIndex].n = sensor.name emsesp_sensordata.sensors[objIndex].o = sensor.offset res.sendStatus(200) @@ -995,12 +996,12 @@ rest_server.post(EMSESP_WRITE_SENSOR_ENDPOINT, (req, res) => { rest_server.post(EMSESP_WRITE_ANALOG_ENDPOINT, (req, res) => { const analog = req.body console.log('Write analog: ' + JSON.stringify(analog)) - objIndex = emsesp_sensordata.analogs.findIndex((obj) => obj.i == analog.id) + objIndex = emsesp_sensordata.analogs.findIndex((obj) => obj.id == analog.id) if (objIndex === -1) { console.log('new analog') emsesp_sensordata.analogs.push({ - i: analog.id, + id: analog.id, n: analog.name, f: analog.factor, o: analog.offset,