diff --git a/SAS/TMSS/frontend/tmss_webapp/package-lock.json b/SAS/TMSS/frontend/tmss_webapp/package-lock.json index b43504f432b755df3517ab8ce9a98c14d21a5515..be3d7ac042e36e4ad33f6cba797d04b04c0cf110 100644 --- a/SAS/TMSS/frontend/tmss_webapp/package-lock.json +++ b/SAS/TMSS/frontend/tmss_webapp/package-lock.json @@ -36,7 +36,7 @@ "react-flatpickr": "^3.10.12", "react-bootstrap": "^1.0.1", "chart.js": "^4.4.0", - "react-use-websocket": "^3.0.0", + "react-use-websocket": "^4.5.0", "react-to-print": "^2.12.4", "moment": "^2.29.4", "typescript": "^3.9.5", @@ -179,19 +179,6 @@ "multicast-dns": "cli.js" } }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/npm-check-updates/node_modules/glob": { "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", @@ -1204,12 +1191,6 @@ "node": ">=8" } }, - "node_modules/jake/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/@types/js-cookie": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz", @@ -1965,18 +1946,6 @@ "node": ">=12" } }, - "node_modules/data-urls/node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", @@ -2456,7 +2425,6 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "peer": true, "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -2666,12 +2634,6 @@ "node": ">= 4.0" } }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/@npmcli/promise-spawn/node_modules/which": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", @@ -2698,12 +2660,6 @@ "node": ">=10" } }, - "node_modules/babel-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3335,21 +3291,6 @@ "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -3598,7 +3539,6 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, - "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -3685,7 +3625,6 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, - "peer": true, "dependencies": { "@jest/expect-utils": "^29.7.0", "@babel/plugin-syntax-typescript": "^7.7.2", @@ -3980,20 +3919,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -4113,11 +4038,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/json-schema-ref-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/flux": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", @@ -4460,30 +4380,6 @@ "node": ">=10" } }, - "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -4670,17 +4566,6 @@ "postcss": "^8.2.15" } }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, "node_modules/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", @@ -4932,18 +4817,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/css-loader/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/html-minifier-terser/node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -5055,22 +4928,6 @@ "node": ">=10.12.0" } }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-editor-support/node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -5211,7 +5068,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -5322,12 +5178,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/react-bootstrap-datetimepicker/node_modules/core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js." - }, "node_modules/ts-easing": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", @@ -5411,15 +5261,6 @@ } } }, - "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "16.0.7", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.7.tgz", - "integrity": "sha512-lQcYmxWuOfJq4IncK88/nwud9rwr1F04CFc5xzk0k4oKVyz/AI35TfsXmhjf6t8zp8mpCOi17BfvuNWx+zrYkg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/react-scripts/node_modules/@sinonjs/fake-timers": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", @@ -5765,8 +5606,7 @@ "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/react-refresh": { "version": "0.11.0", @@ -6025,18 +5865,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/lodash.curry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", @@ -6126,18 +5954,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/jest/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/replace-in-file/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6652,7 +6468,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "peer": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -6681,11 +6496,6 @@ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, "node_modules/cssstyle": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", @@ -6808,11 +6618,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/npm-pick-manifest/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/@tufjs/models/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -6854,15 +6659,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -7602,22 +7398,6 @@ "node": ">=10.4" } }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -7663,17 +7443,6 @@ "node": ">=8" } }, - "node_modules/npm-install-checks/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/@emotion/memoize": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", @@ -7694,18 +7463,6 @@ "node": ">=8" } }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", @@ -7916,7 +7673,6 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -8869,13 +8625,6 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, "node_modules/jest-runtime/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -9455,20 +9204,14 @@ } }, "node_modules/react-use-websocket": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-use-websocket/-/react-use-websocket-3.0.0.tgz", - "integrity": "sha512-BInlbhXYrODBPKIplDAmI0J1VPM+1KhCLN09o+dzgQ8qMyrYs4t5kEYmCrTqyRuMTmpahylHFZWQXpfYyDkqOw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/react-use-websocket/-/react-use-websocket-4.5.0.tgz", + "integrity": "sha512-oxYVLWM3Lv0InCfjW7hG/Hk0hkE0P1SiLd5/I3d5x0W4riAnDUkD4VEu7qNVAqxNjBF3nU7k0jLMOetLXpwfsA==", "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0" + "react": ">= 18.0.0", + "react-dom": ">= 18.0.0" } }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/react-dev-utils/node_modules/loader-utils": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", @@ -9827,19 +9570,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, "node_modules/jest-jasmine2/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", @@ -9897,17 +9627,6 @@ "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", "dev": true }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -10105,19 +9824,6 @@ "node": ">= 6" } }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, "node_modules/@types/warning": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.2.tgz", @@ -10880,12 +10586,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/react-dev-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/@types/express-serve-static-core": { "version": "4.17.39", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", @@ -11078,17 +10778,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/semver-diff/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/@types/serve-static": { "version": "1.15.4", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.4.tgz", @@ -11663,14 +11352,6 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -11975,7 +11656,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "peer": true, "engines": { "node": ">=10" }, @@ -12920,11 +12600,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/babel-loader": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", @@ -13781,7 +13456,6 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13909,18 +13583,6 @@ "node": ">=8" } }, - "node_modules/postcss-loader/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -14015,8 +13677,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true + "dev": true }, "node_modules/is-root": { "version": "2.1.0", @@ -14192,19 +13853,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/popper.js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", @@ -14363,33 +14011,11 @@ "node": ">= 6" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, "node_modules/proc-log": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", @@ -14822,22 +14448,6 @@ "resolved": "https://registry.npmjs.org/cleave.js/-/cleave.js-1.6.0.tgz", "integrity": "sha512-ivqesy3j5hQVG3gywPfwKPbi/7ZSftY/UNp5uphnqjr25yI2CP8FS2ODQPzuLXXnNLi29e2+PgPkkiKUXLs/Nw==" }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/json-schema-ref-parser/node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -16027,12 +15637,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "node_modules/css-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.23.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", @@ -16360,7 +15964,6 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -16531,13 +16134,6 @@ "node": ">=4" } }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, "node_modules/react-scripts/node_modules/jest-watch-typeahead/node_modules/emittery": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", @@ -16822,19 +16418,6 @@ "source-map": "~0.6.1" } }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, "node_modules/npm-check-updates/node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -17489,18 +17072,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/react-dev-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, "node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -17979,15 +17550,6 @@ "hoist-non-react-statics": "^3.3.0" } }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@types/eslint": { "version": "8.44.6", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.6.tgz", @@ -19580,8 +19142,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@babel/helper-module-imports": { "version": "7.22.15", @@ -20031,11 +19592,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/semver-diff/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/react-redux": { "version": "7.2.9", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", @@ -20203,11 +19759,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/npm-install-checks/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/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -21013,21 +20564,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/react-dev-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/react-scripts/node_modules/@jest/fake-timers": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", @@ -21102,12 +20638,6 @@ "node": ">=0.4.0" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -21201,18 +20731,6 @@ "node": ">=4" } }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, "node_modules/npm-check-updates/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -21297,14 +20815,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "engines": { - "node": ">=12" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", @@ -21527,13 +21037,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -23339,19 +22842,6 @@ "node": ">=6.0" } }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, "node_modules/d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", @@ -23752,7 +23242,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -25092,15 +24581,6 @@ } } }, - "node_modules/postcss-svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/sucrase": { "version": "3.34.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", @@ -25521,20 +25001,6 @@ "node": ">= 0.6" } }, - "node_modules/puppeteer/node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "optional": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/jest-resolve/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -26034,12 +25500,6 @@ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" }, - "node_modules/postcss-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/case-sensitive-paths-webpack-plugin": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", @@ -26315,7 +25775,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -27927,18 +27386,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss-custom-properties": { "version": "12.1.11", "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", @@ -28900,13 +28347,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, "node_modules/npm-pick-manifest/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", diff --git a/SAS/TMSS/frontend/tmss_webapp/package.json b/SAS/TMSS/frontend/tmss_webapp/package.json index ffd5af09778ed5dabc0b67223eaab15d389538ef..e0f59ab520bbc3a565a758038e9c0c0589684df0 100644 --- a/SAS/TMSS/frontend/tmss_webapp/package.json +++ b/SAS/TMSS/frontend/tmss_webapp/package.json @@ -61,7 +61,7 @@ "react-to-print": "^2.12.4", "react-tooltip": "^4.5.1", "react-transition-group": "^2.5.1", - "react-use-websocket": "^3.0.0", + "react-use-websocket": "^4.5.0", "react-websocket": "^2.1.0", "reactstrap": "^9.2.0", "redux": "^4.2.1", diff --git a/SAS/TMSS/frontend/tmss_webapp/src/App.js b/SAS/TMSS/frontend/tmss_webapp/src/App.js index 61f31971cf9f2a395a8854afe21565227c653ab5..06f9f40318a417bda2628d769ab7ffda38fd3964 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/App.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/App.js @@ -158,7 +158,7 @@ class App extends Component { } componentDidMount() { - //PermissionStackUtil.getPermissions(true); + subscribe('edit-dirty', (flag) => { this.setState({ isEditDirty: flag }, () => { if (flag) { @@ -178,7 +178,7 @@ class App extends Component { }; } - componentDidUpdate(prevProps, prevState) { + componentDidUpdate() { if(window.location.pathname === '/'){ this.setState({redirect : '/su/timelineview/week'}) } diff --git a/SAS/TMSS/frontend/tmss_webapp/src/components/JSONEditor/Jeditor.test.js b/SAS/TMSS/frontend/tmss_webapp/src/components/JSONEditor/Jeditor.test.js index 61f1d50005443238b9a932abf4b28fcd4837028f..986b8c2762046e03257f7643ab7ee856084aec54 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/components/JSONEditor/Jeditor.test.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/components/JSONEditor/Jeditor.test.js @@ -1,6 +1,5 @@ import JViewer from './JViewer'; // Import the JViewer component import renderer from 'react-test-renderer'; -import rerenderer from 'react-test-renderer'; describe('JViewer Component', () => { // JSON objects for testing diff --git a/SAS/TMSS/frontend/tmss_webapp/src/components/ProtectedRouteComponent.js b/SAS/TMSS/frontend/tmss_webapp/src/components/ProtectedRouteComponent.js index 4d41d92955d2e5313d2e94eb1e5bbf0f12b54500..8058409eaf8ae5f0ffd1ad5420eb2cde8d65ee49 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/components/ProtectedRouteComponent.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/components/ProtectedRouteComponent.js @@ -24,7 +24,6 @@ class ProtectedRoute extends Component{ const permission = this.props.permissions if(this.state.permission_set['userRolePermission']){ if(permission.length <= 2) { - console.log(permission); if(permission[0] !== undefined && permission[1] !== undefined) { if(this.state.permission_set['userRolePermission'][permission[0]] && this.state.permission_set['userRolePermission'][permission[0]][permission[1]]) { return true; diff --git a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js index 31e74e4a3e6b32682ddc3d4f556b966a32fbc16c..8b6200fc1e510d6b6f100e8d5629a0ad7af0c3fb 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js @@ -3,7 +3,7 @@ import { useFlexLayout , useResizeColumns, useSortBy, useTable, useFilters, use import matchSorter from 'match-sorter' import _ from 'lodash'; import moment from 'moment'; -import { useHistory } from "react-router-dom"; +import { useHistory, Link } from "react-router-dom"; import { OverlayPanel } from 'primereact/overlaypanel'; import { InputMask } from 'primereact/inputmask'; import { InputText } from 'primereact/inputtext'; @@ -12,7 +12,6 @@ import { Paginator } from 'primereact/paginator'; import { TriStateCheckbox } from 'primereact/tristatecheckbox'; import { Slider } from 'primereact/slider'; import { Button } from "react-bootstrap"; -import { Link } from "react-router-dom"; import { InputNumber } from "primereact/inputnumber"; import { MultiSelect } from 'primereact/multiselect'; import { RadioButton } from 'primereact/radiobutton'; @@ -31,6 +30,7 @@ import "jspdf-autotable"; import TableUtil from "../utils/table.util"; import Validator from "../utils/validator" + let tblinstance; let tableInstanceRef; let doServersideFilter = false; @@ -173,29 +173,6 @@ function DefaultColumnFilter({ ) } -/*const setStoreData = (id, value) => { - let localstorage_key = window.location.pathname.split('/')[1]; - let storage = UtilService.localStore({ type: 'get', key: localstorage_key }); - if(storage && storage.length > 0) { - storage.forEach(function(value, index) { - if(value.name === id) { - value.name = id - value.value = value - } - }); - const selected = _.filter(storage, function (filter) { - if ( filter.name === id) { - return true; - } - }) - if(selected.length <= 0) { - storage.push({name: id, value: value}) - } - } else { - storage = [{name: id, value: value}] - } - UtilService.localStore({ type: 'set', key: localstorage_key, value: storage }); -}*/ /* Generate and download csv @@ -205,7 +182,7 @@ function getExportFileBlob({ columns, data, fileType, fileName }) { // CSV download const headerNames = columns.map((col) => col.exportValue); // remove actionpath column in csv export - var index = headerNames.indexOf('actionpath'); + let index = headerNames.indexOf('actionpath'); if (index > -1) { headerNames.splice(index, 1); } @@ -288,11 +265,17 @@ function SelectColumnFilter({ preFilteredRows = preFilteredRows ? preFilteredRows : rowData; setRowData(preFilteredRows); preFilteredRows.forEach(row => { - options.add(row.values[id]) + let value = String(row.values[id]); + if (!options.has(value)) { + options.add(value) + } }); } } - return [...options.values()] + let cleanoptions = [...new Set(options.values())]; + cleanoptions = [...new Set(cleanoptions)]; + + return cleanoptions; }, [id, preFilteredRows]); // Function to call the server side filtering @@ -301,9 +284,7 @@ function SelectColumnFilter({ _.remove(tableOptionsState.filters, function(filter) { return filter.id === Header }); if (isCleared) { hasFilters = false; - //if (filtered) { filterCallback(tableOptionsState, setLoaderFunction); - //} } else { tableOptionsState.filters.push({id: Header, value: event.target.value}); filterCallback(tableOptionsState, setLoaderFunction); @@ -339,8 +320,9 @@ function SelectColumnFilter({ }} > <option value="">All</option> - {options.map((option, i) => ( - <option key={i} value={option}> + { + options.map((option) => ( + <option key={option} value={option}> {_.startCase(option)} </option> ))} @@ -432,7 +414,9 @@ function MultiSelectColumnFilter({ } }); }); - return [...options.values()] + + let cleanoptions = [...new Set(options.values())]; + return cleanoptions; }, [id, preFilteredRows]); // Render a multi-select box @@ -571,7 +555,6 @@ function MultiSelectFilter({ } } setFiltered(true); - //callServerFilter(e); }} maxSelectedLabels="1" selectedItemsLabel="{0} Selected" @@ -634,7 +617,6 @@ function BooleanColumnFilter({ // Calculate the min and max // using the preFilteredRows const [value, setValue] = useState(null); - // const [filtered, setFiltered] = useState(false); const [prevTable, setPrevTable] = useState(''); React.useEffect(() => { if ((!filterValue && value) || prevTable !== currentTableName) { @@ -654,14 +636,11 @@ function BooleanColumnFilter({ hasFilters = true; _.remove(tableOptionsState.filters, function(filter) { return filter.id === Header }); if (isCleared == null) { - // setFiltered(false); } else if (isCleared) { hasFilters = false; tableOptionsState.filters.push({id: Header, value: true}); - // setFiltered(true); setValue(true); } else { - // setFiltered(true); setValue(false); tableOptionsState.filters.push({id: Header, value: false}); } @@ -693,57 +672,6 @@ function BooleanColumnFilter({ ) } -// This is a custom filter UI that uses a -// calendar to set the valueCalendar -/*function ColumnFilter({ - column: { setFilter, filterValue, Header }, -}) { - // Calculate the min and max - // using the preFilteredRows - const [value, setValue] = useState(''); - const [filtered, setFiltered] = useState(false); - React.useEffect(() => { - if (!filterValue && value) { - setValue(null); - } - }, [filterValue, value]); - - // Function to call the server side filtering - const callServerFilter = (event, isCleared) => { - hasFilters = true; - if (isCleared) { - hasFilters = false; - if (filtered) { - _.remove(tableOptionsState.filters, function(filter) { return filter.id === Header }); - filterCallback(tableOptionsState, setLoaderFunction); - } - } else { - filterCallback(tableOptionsState, setLoaderFunction); - } -}; - return ( - - <div className="table-filter" onClick={e => { e.stopPropagation() }}> - <Calendar value={filterValue} appendTo={document.body} dateFormat="yy-mm-dd" - onChange={(e) => { - const value = moment(e.value).format('YYYY-MM-DD') - setValue(value); - setFilter(e.value); - if (value !== 'Invalid date' && doServersideFilter) { - setFiltered(true); - callServerFilter(e); - } - }} - showIcon></Calendar> - {value && <i onClick={(e) => { setFilter(undefined); setValue(''); setFiltered(false); - if (doServersideFilter) { - setFilter(undefined); - setValue(''); - callServerFilter(e, true); - } }} className="tb-cal-reset fa fa-times" />} - </div> - ) -}*/ // This is a custom filter UI that uses a // calendar range to set the value @@ -1331,7 +1259,6 @@ function NumberRangeFilter({ } if(!value){ setValue(filterValue); - //setFilter(filterValue); } } }, [filterValue, value]); @@ -1383,7 +1310,6 @@ function NumberRangeFilter({ style={{ width: '65px', height: '25px' - // marginRight: '0.5rem', }} tooltip={(tableToolTipsState[Header])?tableToolTipsState[Header]:"Enter Minimum Range value and press ‘Enter’ key to search"} /> @@ -1440,7 +1366,6 @@ function RankRangeFilter({ } if(!value){ setValue(filterValue); - //setFilter(filterValue); } if(!filterValue && value.length>0 && (value[0]!== '' || value[1]!== '')){ setValue(['', '']); @@ -1697,7 +1622,6 @@ function DurationRangeFilterWithDays({ } if (storedFilterType) { - //setFiltered(`${Header}-FilterOption`, true); setFilterType(storedFilterType); } if(!value){ @@ -1791,7 +1715,6 @@ function DurationRangeFilterWithDays({ setRangeValue([val,max]); filterValue[0] = val; if(storeFilter) { - //TableUtil.saveFilter(currentTableName, Header, [val,max]); setFilter([val,max]); } }} @@ -1817,7 +1740,6 @@ function DurationRangeFilterWithDays({ setRangeValue([min,val]); filterValue[1] = val; if(storeFilter) { - //TableUtil.saveFilter(currentTableName, Header, [min,val]); setFilter([min,val]); } }} @@ -2147,9 +2069,9 @@ function Table(props) { setcurrentPage(0); } currentTableName = props.tablename; - //if (!tableOptionsState) { + tableOptionsState = _.cloneDeep(state); - //} + // Pass the table's state to the parent function if the parent function has set the callback function for it. if (props.setTableState) { props.setTableState(state); @@ -2267,7 +2189,7 @@ function Table(props) { localStorage.setItem(tablename, JSON.stringify(lsToggleColumns)); if (onColumnToggleViewTable) { - let columnTobeSorted = onColumnToggleViewTable(selectedColumn, sortedColumn); //onColumnToggle(selectedColumn, sortedColumn); + let columnTobeSorted = onColumnToggleViewTable(selectedColumn, sortedColumn); columnTobeSorted.Header = columnTobeSorted.Header || ""; if (columnTobeSorted.Header.trim().length > 0) { tblinstance.toggleSortBy(columnTobeSorted.Header, columnTobeSorted.desc); @@ -2415,7 +2337,7 @@ function Table(props) { onDragUpdate={(dragUpdateObj, b) => { const colOrder = [...currentColOrder.current]; const sIndex = dragUpdateObj.source.index; - const dIndex = dragUpdateObj.destination && dragUpdateObj.destination.index; + const dIndex = dragUpdateObj.destination?.index; if(typeof sIndex === 'number' && typeof dIndex === "number") { colOrder.splice(sIndex, 1); colOrder.splice(dIndex, 0, dragUpdateObj.draggableId); @@ -2430,7 +2352,7 @@ function Table(props) { <tr {...headerGroup.getHeaderGroupProps()} ref={droppableProvided.innerRef} data-testid={'tablerows'}> - {headerGroup.headers.map((column,index) => { + {headerGroup.headers.map((column) => { if (column.id !== 'actionpath') { return ( <Draggable @@ -2789,14 +2711,12 @@ function ViewTable(props) { /** * To fetch data from server side - Start */ - // const [loading, setLoading] = React.useState(false); const [currentPage, setCurrentPage] = React.useState(0); const fetchData = React.useCallback( ({ state, setLoading }) => { loadServerData(state, setLoading, true); }, []); const loadServerData = (state, setLoading, onload) => { - //setLoading(true); loadingStatus = true; setCurrentPage(state.pageIndex); if(props.callBackFunction) { @@ -2812,8 +2732,6 @@ function ViewTable(props) { Promise.all(promises).then(async responses => { tbldata = responses[0][0]; if (tbldata) { - //setData(tbldata); - //setPageCount(Math.ceil(responses[0][1])); pageCount = await Math.ceil(responses[0][1]); if (setLoading) { setLoading(false); @@ -2824,8 +2742,6 @@ function ViewTable(props) { } else if(tbldata) { const startRow = state.pageSize * state.pageIndex; const endRow = startRow + state.pageSize; - //setData(tbldata.slice(startRow, endRow)); - //setPageCount(Math.ceil(tbldata.length)); data = tbldata.slice(startRow, endRow); pageCount = Math.ceil(tbldata.length); setLoading(false); diff --git a/SAS/TMSS/frontend/tmss_webapp/src/layout/components/FindObject.js b/SAS/TMSS/frontend/tmss_webapp/src/layout/components/FindObject.js index dbd59bc8cbbb19017fc28e232f237f5c809355f4..46bbdbeeb9987c9bdc3f042441372309441ef296 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/layout/components/FindObject.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/layout/components/FindObject.js @@ -33,7 +33,7 @@ export class FindObject extends Component { * @param {Key Event} e - Key code */ handleEvent(e) { - var key = e.which || e.keyCode; + let key = e.which || e.keyCode; if(key === 13 || key === 'Enter') { this.findObject(); } diff --git a/SAS/TMSS/frontend/tmss_webapp/src/layout/components/PageActionMenu.js b/SAS/TMSS/frontend/tmss_webapp/src/layout/components/PageActionMenu.js index 1b6f9e060db93da1c081560a25593383f54252cb..291cb13fedc98c594b744914ad10c28394a056b5 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/layout/components/PageActionMenu.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/layout/components/PageActionMenu.js @@ -16,11 +16,14 @@ const PageActionMenu = ({actions, className}) => { } }; + // Both Focus and mouseover will trigger mouseOver, for legacy reasons we leave this in FE1. const onButtonMouseOver = (e, action) => { if (action.actOn && action.actOn === 'mouseOver') { action.props.callback(e); } } + + return <div className={"page-action-menu " + className}> {(actions || []).map((action) => { @@ -30,6 +33,7 @@ const PageActionMenu = ({actions, className}) => { style={action.style}> <i className={`${action.iconType ? action.iconType : 'fa'} ${action.disabled ? 'fa-disabled' : ''} ${action.icon} ${action.classes}`} onMouseOver={(e) => action.disabled ? '' : onButtonMouseOver(e, action)} + onFocus={(e) => action.disabled ? '' : onButtonMouseOver(e, action)} onClick={(e) => action.disabled ? '' : onButtonClick(e, action)}/> </button> ); @@ -39,7 +43,7 @@ const PageActionMenu = ({actions, className}) => { ) } else if (action.type === 'ext_link') { return ( - <a href={action.props.pathname} title={action.title || ''} + <a href={action.props.pathname} title={action.title || ''} key={action.title} target={action.target ? action.target : "_blank"} rel="noreferrer">{action.label}</a> ); } else if (action.type === 'tag') { diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/create.test.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/create.test.js index 4cfd1d9e37aa731f75242cd715491abdcb48ca3a..7f25455ed1af520262e72d80ab38f6c3fe542ad6 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/create.test.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/create.test.js @@ -79,8 +79,7 @@ it("Save button enabled when mandatory data entered", async () => { }); const nameInput = content.queryByTestId('name'); const descInput = content.queryByTestId('description'); - // const startInput = content.getByPlaceholderText('Enter Start Date'); - // const stopInput = content.getByPlaceholderText('Enter Stop Date'); + // fireEvent.change(startInput, { target: { value: '2022-01-27' } }); // fireEvent.blur(startInput, { target: { value: '2022-01-27' } }); @@ -291,9 +290,10 @@ it("save cycle with added resources", async () => { expect(content.queryAllByText('CEP Storage').length==3); const addResourceBtn = content.queryByTestId('add_res_btn'); - fireEvent.click(addResourceBtn); + await act(() =>fireEvent.click(addResourceBtn)); await new Promise((r) => setTimeout(r, 500)); - expect(content.queryAllByText('Add Resources').length).toBe(2); + + await waitFor (() =>expect(content.queryAllByText('Add Resources').length).toBe(2)); spinButtons = content.queryAllByRole("spinbutton"); const newResourceInput = _.filter(spinButtons, {"id": "CEP Storage"})[0]; diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Report/cycle/report.avg.efficiency.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Report/cycle/report.avg.efficiency.js index 383d0d1c117c2f8b5168e4a35dfa2becf24f9119..59604888ab5ad910100d7a6aeef2858fe6e6adaf 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Report/cycle/report.avg.efficiency.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Report/cycle/report.avg.efficiency.js @@ -25,7 +25,7 @@ class CycleReportAvgEfficiency extends Component { } } - componentDidUpdate(prevProps, prevState) { + componentDidUpdate(prevProps) { if (prevProps.data !== this.props.data) { const reportData = this.getTableData(); this.setState({reportData: reportData}); diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Report/cycle/report.failure.rate.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Report/cycle/report.failure.rate.js index 3d8a68cb4431c6681f0bef185c170048e921ff65..1a3f483ef2f26e927cb3eaa219195b5922a232cb 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Report/cycle/report.failure.rate.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Report/cycle/report.failure.rate.js @@ -6,7 +6,6 @@ import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; import _ from 'lodash'; import moment from 'moment'; -import MathUtility from '../../../utils/math.utility'; import UnitConverter from '../../../utils/unit.converter'; /** @@ -26,7 +25,7 @@ class CycleFailureRate extends Component { }); } - componentDidUpdate(prevProps, prevState) { + componentDidUpdate(prevProps) { if (prevProps.data !== this.props.data) { this.setState({ reportData: this.getReportData() @@ -77,14 +76,6 @@ class CycleFailureRate extends Component { display: true, text: 'LOFAR Observing Failures', }, - // tooltip: { - // callbacks: { - // label: function(tooltipItem, data) { - // const itemData = _.find(resourceUtilization, ['type', tooltipItem.label]); - // return `${itemData?itemData.percent:""}% (${itemData?itemData.value:""} ${itemData?itemData.unit:""})`; - // } - // } - // } } }; } @@ -131,7 +122,7 @@ class CycleFailureRate extends Component { renderReportTable() { const reportTableData = this.state.reportData.tableData; - const reportColumns = _.keys(reportTableData[0]).map((col,i) => { + const reportColumns = _.keys(reportTableData[0]).map((col) => { return <Column key={col} field={col} header={col} />; }); return ( diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Report/cycle/report.weekly.efficiency.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Report/cycle/report.weekly.efficiency.js index 27ed093561b58122cf3b62544264f20ff01472c8..5f198d1207b8922ad6c245a49932ebb380657200 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Report/cycle/report.weekly.efficiency.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Report/cycle/report.weekly.efficiency.js @@ -30,7 +30,7 @@ class CycleWeeklyEfficiency extends Component { }); } - componentDidUpdate(prevProps, prevState) { + componentDidUpdate(prevProps ) { if (prevProps.data !== this.props.data) { this.setState({ reportData: this.getReportData(), @@ -122,9 +122,7 @@ class CycleWeeklyEfficiency extends Component { } }); this.cycles = _.keys(_.groupBy(reportData.chartData, 'cycle')); - // if (forTable) { const weekGroupData = _.groupBy(reportData.chartData, 'Week Index'); - let groupedTableData = [] for (const week of _.keys(weekGroupData)) { const weekData = weekGroupData[week]; let groupData = {'Week Index': week }; @@ -133,7 +131,6 @@ class CycleWeeklyEfficiency extends Component { } reportData.tableData.push(groupData); } - // reportData = groupedTableData; if (reportData.tableData.length > 0) { let averageData = {'Week Index': 'Average'}; for (const column of (_.keys(reportData.tableData[0]))) { diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.edit.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.edit.js index 222ef856ab3ac0e374867d25cff4d391ac9da86c..c857efe48062c97efa04bc6edac5b8ccfea21a42 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.edit.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.edit.js @@ -304,10 +304,9 @@ export class ReservationEdit extends Component { * @param {String} key - property name of the reservation */ setDurationOrEndValue = (key) => { - let state = this.state; if ( key === 'start_time' || key === 'stop_time') { if (this.state.reservation.start_time && this.state.reservation.stop_time) { - var delta = Math.abs(new Date(this.state.reservation.start_time) - new Date(this.state.reservation.stop_time)) / 1000; + let delta = Math.abs(new Date(this.state.reservation.start_time) - new Date(this.state.reservation.stop_time)) / 1000; let tempDuration = UnitConverter.getSecsToDDHHmmss(delta); this.setDurationOrStopTime('duration', tempDuration); } else if (key === 'start_time' && this.state.reservation.start_time && this.state.reservation.duration) { diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.summary.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.summary.js index 79dcdbaa01785fc676bc2794082685a46427bd23..e08443c7c6abbc173ee250e664cdd5876af6a65a 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.summary.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.summary.js @@ -86,7 +86,7 @@ export class ReservationSummary extends Component { } break; } - default: {} + default: { /* empty */ } } } return specification; diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.view.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.view.js index 8f9089a62e711da32913f87d3dd39fdce56bfd91..15cf91a648e440bde3755bc966e1ffbc0f1ab48b 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.view.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Reservation/reservation.view.js @@ -1,7 +1,6 @@ import React, { Component } from 'react'; import { Redirect } from 'react-router-dom' import moment from 'moment'; -import _ from 'lodash'; import Jeditor from '../../components/JSONEditor/JEditor'; import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; @@ -28,7 +27,6 @@ export class ReservationView extends Component { userrole: AuthStore.getState(), actions: [] }; - this.showIcon = false; this.dialogType = "confirmation"; this.dialogHeader = ""; this.dialogMsg = ""; @@ -95,7 +93,6 @@ export class ReservationView extends Component { showConfirmation() { this.dialogType = "confirmation"; this.dialogHeader = "Confirm to Delete Reservation"; - this.showIcon = false; this.dialogMsg = "Do you want to delete this Reservation?"; this.dialogWidth = '55vw'; this.dialogContent = this.getDialogContent; @@ -226,7 +223,7 @@ export class ReservationView extends Component { } let jeditor = null; if (this.state.reservationTemplate) { - if (this.state.reservation.specifications_doc && this.state.reservation.specifications_doc.$id) { + if (this.state.reservation.specifications_doc?.$id) { delete this.state.reservation.specifications_doc.$id; delete this.state.reservation.specifications_doc.$schema; } @@ -261,8 +258,6 @@ export class ReservationView extends Component { <div className="p-grid"> <label className="col-lg-2 col-md-2 col-sm-12">Project</label> <span className="col-lg-4 col-md-4 col-sm-12">{(this.state.reservation.project_id)?this.state.reservation.project_id:''}</span> - {/* <label className="col-lg-2 col-md-2 col-sm-12">Reservation Strategy</label> - <span className="col-lg-4 col-md-4 col-sm-12">{this.state.reservation.specifications_doc.activity.name}</span> */} <label className="col-lg-2 col-md-2 col-sm-12">Duration (Days HH:mm:ss)</label> <span className="col-lg-4 col-md-4 col-sm-12">{(this.state.reservation.duration)?UnitConverter.getSecsToDDHHmmss(this.state.reservation.duration):'Unknown'}</span> </div> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/ViewSchedulingUnit.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/ViewSchedulingUnit.js index 48aa318f9434f4e881f743b0b11907533aa605db..c4dde06246ac9365f4bc11bcd36633a17eccdfca 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/ViewSchedulingUnit.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/ViewSchedulingUnit.js @@ -324,7 +324,7 @@ class ViewSchedulingUnit extends Component { this.changeSUSet = this.changeSUSet.bind(this); } - componentDidUpdate(prevProps, prevState) { + componentDidUpdate() { if (this.state.scheduleunit && this.props.match.params && (this.state.scheduleunitId !== this.props.match.params.id || this.state.scheduleunitType !== this.props.match.params.type)) { @@ -917,8 +917,8 @@ class ViewSchedulingUnit extends Component { getLinksList = (linkedItems, type) => { return ( <> - {linkedItems.length>0 && linkedItems.map((item, index) => ( - <Link style={{paddingRight: '3px'}} to={`/task/view/${type}/${item}`}>{item}</Link> + {linkedItems.length>0 && linkedItems.map((item ) => ( + <Link style={{paddingRight: '3px'}} to={`/task/view/${type}/${item}`} key={item}>{item}</Link> ))} </> ); diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/__snapshots__/create.test.js.snap b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/__snapshots__/create.test.js.snap index b553b6d57b391f03c816e420e711466d9f6e7527..fc7bbccb272599b77523a760b96e8e95635d7593 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/__snapshots__/create.test.js.snap +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/__snapshots__/create.test.js.snap @@ -24,6 +24,7 @@ Array [ <i className="fa fa-window-close undefined" onClick={[Function]} + onFocus={[Function]} onMouseOver={[Function]} /> </button> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/index.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/index.js index c0662b20d505ffdcdc60b6625d5f5e4820d91878..8493e567e18db1b9858e7094de8425fc0b7ac147 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/index.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/index.js @@ -1,4 +1,4 @@ -import React, {Component} from 'react'; +import React, { Component } from 'react'; import { TieredMenu } from 'primereact/tieredmenu'; //import { Growl } from 'primereact/components/growl/Growl'; import _ from 'lodash'; @@ -10,45 +10,45 @@ import AuthUtil from '../../utils/auth.util'; import AuthStore from '../../authenticate/auth.store'; export class Scheduling extends Component { - constructor(props){ + constructor(props) { super(props); this.state = { scheduleunit: [], - schedule_unit_task: [] , - isLoading:false, + schedule_unit_task: [], + isLoading: false, redirect: '', - dialog: {header: 'Confirm', detail: 'Do you want to create blueprints for the selected drafts?'}, + dialog: { header: 'Confirm', detail: 'Do you want to create blueprints for the selected drafts?' }, dialogVisible: false, - userrole : AuthStore.getState() + userrole: AuthStore.getState() }; this.access_dined_message = "Don't have permission"; this.optionsMenu = React.createRef(); - this.menuOptions = [ {label:'Add Scheduling Set', icon: "fa fa-", command: () => {this.selectOptionMenu('Add-SU-Set') }}]; + this.menuOptions = [{ label: 'Add Scheduling Set', icon: "fa fa-", command: () => { this.selectOptionMenu('Add-SU-Set') } }]; this.showOptionMenu = this.showOptionMenu.bind(this); this.selectOptionMenu = this.selectOptionMenu.bind(this); this.closeDialog = this.closeDialog.bind(this); } - + async componentDidMount() { const permission = await AuthUtil.getUserRolePermission(); - this.setState({userrole: permission}) + this.setState({ userrole: permission }) } - + /** * Callback function to close the dialog prompted. */ closeDialog() { - this.setState({dialogVisible: false}); + this.setState({ dialogVisible: false }); } - + showOptionMenu(event) { this.optionsMenu.toggle(event); } async selectOptionMenu(menuName) { - switch(menuName) { + switch (menuName) { case 'Add-SU-Set': { - await this.setState({redirect: `/schedulingset/schedulingunit/create`}); + await this.setState({ redirect: `/schedulingset/schedulingunit/create` }); break; } default: { @@ -67,29 +67,33 @@ export class Scheduling extends Component { // } render() { - return ( + return ( <> <TieredMenu className="app-header-menu" model={this.menuOptions} popup ref={el => this.optionsMenu = el} /> <PageHeader location={this.props.location} title={'Scheduling Unit - List'} - actions={[ - {icon: 'fa fa-plus-square', - title: this.state.userrole.userRolePermission && this.state.userrole.userRolePermission.scheduleunit && this.state.userrole.userRolePermission.scheduleunit.create?'Add New Scheduling Unit':this.access_dined_message, - disabled: this.state.userrole.userRolePermission && this.state.userrole.userRolePermission.scheduleunit?!this.state.userrole.userRolePermission.scheduleunit.create:true, - props: {pathname: '/schedulingunit/create'}}, - - {icon: 'fa fa-table', - title: this.state.userrole.userRolePermission && this.state.userrole.userRolePermission.scheduleunit && this.state.userrole.userRolePermission.scheduleunit.excelview?'Add Scheduling Set':this.access_dined_message, - disabled: this.state.userrole.userRolePermission && this.state.userrole.userRolePermission.scheduleunit?!this.state.userrole.userRolePermission.scheduleunit.excelview:true, - props: {pathname: '/schedulingset/schedulingunit/create'}}, - ]} /> - {this.state.scheduleunit && - <SchedulingUnitList allowRowSelection={true} ref={suList => {this.suList = suList}} /> } + actions={[ + { + icon: 'fa fa-plus-square', + title: this.state.userrole.userRolePermission?.scheduleunit?.create ? 'Add New Scheduling Unit' : this.access_dined_message, + disabled: this.state.userrole.userRolePermission?.scheduleunit ? !this.state.userrole.userRolePermission.scheduleunit.create : true, + props: { pathname: '/schedulingunit/create' } + }, + + { + icon: 'fa fa-table', + title: this.state.userrole.userRolePermission?.scheduleunit?.excelview ? 'Add Scheduling Set' : this.access_dined_message, + disabled: this.state.userrole.userRolePermission?.scheduleunit ? !this.state.userrole.userRolePermission.scheduleunit.excelview : true, + props: { pathname: '/schedulingset/schedulingunit/create' } + }, + ]} /> + {this.state.scheduleunit && + <SchedulingUnitList allowRowSelection={true} ref={suList => { this.suList = suList }} />} <CustomDialog type="confirmation" visible={this.state.dialogVisible} - header={this.state.dialog.header} message={this.state.dialog.detail} actions={this.state.dialog.actions} - content={this.state.dialog.content} width={this.state.dialog.width} showIcon={this.state.dialog.showIcon} - onClose={this.closeDialog} onCancel={this.closeDialog} onSubmit={this.state.dialog.onSubmit}/> - </> - + header={this.state.dialog.header} message={this.state.dialog.detail} actions={this.state.dialog.actions} + content={this.state.dialog.content} width={this.state.dialog.width} showIcon={this.state.dialog.showIcon} + onClose={this.closeDialog} onCancel={this.closeDialog} onSubmit={this.state.dialog.onSubmit} /> + </> + ); } } diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Search/find.object.result.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Search/find.object.result.js index 3a5fd3df538e9754a7f4739fded336a2f4c0df36..696a588d98befab526cf206f76c112ba538c17db 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Search/find.object.result.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Search/find.object.result.js @@ -21,7 +21,7 @@ export class FindObjectResult extends Component{ this.expandNode = this.expandNode.bind(this); } - componentDidUpdate(prevProps, prevState) { + componentDidUpdate(prevProps) { const objectType = this.props.match.params.type; const objectId = this.props.match.params.id; const prevObjectType = prevProps.match.params.type; @@ -41,7 +41,7 @@ export class FindObjectResult extends Component{ async findObject(){ let objNodes = []; this.setState({objNodes: objNodes, isLoading: true}); - const objectType = this.props.match.params.type;//(this.props.location.state && this.props.location.state.objectType)?this.props.location.state.objectType:''; + const objectType = this.props.match.params.type; const objectid = this.props.match.params.id; if (objectType === 'subtask') { objNodes = await this.findSubTask(objectid); diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/SystemEvent/existing.system.event.list.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/SystemEvent/existing.system.event.list.js index 314122c8ce59b23134b8193ccdddba166830a256..cba15a239a475a3b11dd8ad647372e29110139db 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/SystemEvent/existing.system.event.list.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/SystemEvent/existing.system.event.list.js @@ -325,8 +325,8 @@ export class ExistingSystemEventList extends Component{ getLinksList = (linkedItems, type) => { return ( <> - {linkedItems.length>0 && linkedItems.map((item, index) => ( - <Link style={{paddingRight: '3px'}} to={`/task/view/blueprint/${item}`}>{item}</Link> + {linkedItems.length>0 && linkedItems.map((item) => ( + <Link style={{paddingRight: '3px'}} to={`/task/view/blueprint/${item}`} >{item}</Link> ))} </> ); diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/SystemEvent/system.event.list.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/SystemEvent/system.event.list.js index 17c85ed360546f09b0083a515b27bc5cbdc59c59..746f3ce0987bd7ab963e92854a54768ab29012e9 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/SystemEvent/system.event.list.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/SystemEvent/system.event.list.js @@ -122,7 +122,7 @@ export class SystemEventList extends Component{ this.affectedTasksIds.push(tmpVar); }); let systemLists = await this.fetchTableData(); - if (systemLists && systemLists[0].length>0) { + if (systemLists && systemLists[0]?.length>0) { this.setState({systemEventList: systemLists[0]}); } } @@ -479,8 +479,9 @@ export class SystemEventList extends Component{ this.filterQry = this.filterQry.substring(0,this.filterQry.length-1); // this.currentPageSize = (state && state.pageSize) ? state.pageSize : this.currentPageSize; // let offset = (state && state.pageIndex) ? state.pageIndex*this.currentPageSize : 0; + await this.getSystemEventList(this.filterQry, this.orderBy, this.currentPageSize, offset); - return [this.state.systemEventList, this.totalPage]; + return [this.systemEvents, this.totalPage]; } @@ -525,7 +526,7 @@ export class SystemEventList extends Component{ systemEvent['affected_tasks_ids'] = this.getLinksList(systemEvent.affected_tasks_ids); const template = _.find(this.seAffectedHardwareTemplateList, {id: systemEvent.affected_hardware_template_id}); systemEvent['affected_hardware_template_name'] = (template)?_.startCase(template.name):''; - systemEvent['jira_url']= <a href={systemEvent.jira_url} target="_blank">{systemEvent.jira_url}</a>; + systemEvent['jira_url']= <a href={systemEvent.jira_url} target="_blank" rel="noreferer">{systemEvent.jira_url}</a>; this.systemEvents.push(systemEvent); } } @@ -534,6 +535,8 @@ export class SystemEventList extends Component{ isLoading: false, systemEventList: this.systemEvents, }); + + }); } diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/SystemEvent/system.event.view.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/SystemEvent/system.event.view.js index 415fcef1c725e67e83834ad33c4abd36371c0fa5..aaa27a7c98dab3832d0cf6b14c4c95c2ea91140e 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/SystemEvent/system.event.view.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/SystemEvent/system.event.view.js @@ -103,7 +103,7 @@ export class SystemEventView extends Component { } let jeditor = null; if (this.state.systemeventTemplate) { - if (this.state.systemevent.affected_hardware_doc && this.state.systemevent.affected_hardware_doc.$id) { + if (this.state.systemevent.affected_hardware_doc?.$id) { delete this.state.systemevent.affected_hardware_doc.$id; delete this.state.systemevent.affected_hardware_doc.$schema; } diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/CalendarTimeline.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/CalendarTimeline.js index 1db39772969106772c0158c79baa3d0f9d9f823d..a525af14cc6ffb502ba9c54674980c8777e0d0e3 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/CalendarTimeline.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/CalendarTimeline.js @@ -1639,7 +1639,7 @@ export class CalendarTimeline extends Component { allZoomLevels={this.ZOOM_LEVELS} onChangeZoomLevelCallback={this.changeZoomLevel} /> </div> - <div onMouseOut={() => this.cursorTime = null}> + <div onMouseOut={() => this.cursorTime = null} onBlur={() => this.cursorTime = null}> <Timeline groups={this.state.group} items={this.state.items} diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/components/toolbar/Filters.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/components/toolbar/Filters.js index 2aaaa745e3deb65b1ba938c22f89653735ac784b..c0f3c27dfb159fee4b1fd57781b1e513418644aa 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/components/toolbar/Filters.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/components/toolbar/Filters.js @@ -105,16 +105,19 @@ export default function Filters(props) { setReservationFilter(multiSelectAllOptions.reservationReasons.map(reason => reason.name)) } - const filteredProjectsOnState = multiSelectAllOptions.projectNamesWithState.filter(project => projectStatusFilter.includes(project.project_state_value)) + const filteredProjectsOnState = multiSelectAllOptions?.projectNamesWithState?.filter(project => projectStatusFilter.includes(project?.project_state_value)) setProjectAllOptionsWithStatus(filteredProjectsOnState) - setProjectFilter(filteredProjectsOnState.map(project => project.name)) + + if (filteredProjectsOnState?.length>0) { + setProjectFilter(filteredProjectsOnState.map(project => project.name)) + } }, [multiSelectAllOptions]) useEffect(() => { //the status filter is only for the project filter updateStore(UIConstants.STORE_KEY_TIMELINE, timelineStore, { ["projectStatusFilter"]: projectStatusFilter, }) - const filteredProjectsOnState = multiSelectAllOptions.projectNamesWithState.filter(project => projectStatusFilter.includes(project.project_state_value)) + const filteredProjectsOnState = multiSelectAllOptions?.projectNamesWithState?.filter(project => projectStatusFilter.includes(project?.project_state_value)) setProjectAllOptionsWithStatus(filteredProjectsOnState) setProjectFilter(filteredProjectsOnState.map(project => project.name)) }, [projectStatusFilter]) diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/data/filters.data.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/data/filters.data.js index 8599e48625edfd0ec4f802202dbfe76e33e03eba..3bc18f204aa8b76f11f841a31a2cee0c1f17f074 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/data/filters.data.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/data/filters.data.js @@ -6,6 +6,8 @@ import UtilService from "../../../services/util.service"; async function fetchReservationTemplatesGetReasons() { let reasons = [] UtilService.getReservationTemplates().then(templates => { + if (templates == null) return reasons; + const reservationTemplate = templates[0] ?? null; //use the first if there are templates found if (reservationTemplate) { let foundTemplateReason = reservationTemplate.ref_resolved_schema?.properties?.activity?.properties?.type?.enum; diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/timeline.headers.helper.test.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/timeline.headers.helper.test.js index 19c356cba3a2d291ba84b897c6426b33fd4fa161..7b68a75b56359ebccd0ce0d31e723a6201e355ce 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/timeline.headers.helper.test.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/timeline.headers.helper.test.js @@ -1,4 +1,4 @@ -import {getIntervalRendererLST, getTimeSteps, getUnit} from "./timeline.headers.helper"; +import {getIntervalRendererLST, getTimeSteps} from "./timeline.headers.helper"; import {render} from "@testing-library/react"; import {removeReact18ConsoleErrors} from "../../../utils/test.helper"; diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/toolbar/zoomandmove.helper.test.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/toolbar/zoomandmove.helper.test.js index aed57ae055fbf02b24cf391605080ca88524f010..4458444e8a4af0ace3ffffdf722807dcaa9c201c 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/toolbar/zoomandmove.helper.test.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Timeline/helpers/toolbar/zoomandmove.helper.test.js @@ -1,6 +1,6 @@ import { getMovePossibilities, - getNewTimeOrExtrema, getTimeStepsForZoom, getUnit, + getNewTimeOrExtrema, getTimeStepsForZoom, getZoomPossibilities, getZoomTimes, moveTimeline, diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/index.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/index.js index 236e9a59ca64fa86402110ef5b56332840729e11..74cb2188e42128bd62ff538fa72217bbb7cc0ae9 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/index.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/index.js @@ -255,7 +255,11 @@ const WorkflowView = (props) => { if (suQAProcess.qa_reporting_sos == null) { setCurrentView(3) } else { - setCurrentView(5) + if (suQAProcess.pi_verification == null) { + setCurrentView(4) + } else { + setCurrentView(5) + } } }; diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/qa.sos.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/qa.sos.js index 950cb32acbdd64c20d82782105948122e1297f2c..80e32f790d8439b16e5a0d6b240c37f2fa2c9cac 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/qa.sos.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/qa.sos.js @@ -184,7 +184,7 @@ class QAreportingSDCO extends Component { </div> <div className="btn-bar"> <Button label="Cancel" disabled={this.props.readOnly} className="p-button-danger" icon="pi pi-times" style={{ width : '90px' }} - onClick={this.props.onCancel()} /> + onClick={()=>this.props.onCancel()} /> </div> </div>} {!this.props.readOnly && diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/task.assigner.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/task.assigner.js index 3f71b6d2d4825e7bb05022439061659bab608d91..4516cb2f99fe3c1cfd61a7aa17055c2a1ec1f39f 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/task.assigner.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/task.assigner.js @@ -61,6 +61,7 @@ class TaskAssigner extends Component { render() { const allowSave = this.state.assignToRole || (this.state.assignToEmail && !this.state.errors.email); + const noPermissions = this.props.currentWorkflowTask.editPermissions? false : true; return ( <> <div> @@ -70,14 +71,14 @@ class TaskAssigner extends Component { : <Link to="#" style={{ cursor: 'disabled', pointerEvents: "none", color: 'grey'}}>Assign to me</Link> } </div> - <Dropdown disabled={!this.props.currentWorkflowTask.editPermissions} inputId="assignToValue" + <Dropdown disabled={noPermissions} inputId="assignToValue" tooltip="Assign to user with role (will be assigned to the first user in this role)" value={this.state.assignToRole} optionLabel="displayValue" optionValue="value" onChange={(e) => this.setState({assignToRole: e.value, assignToEmail: null})} options={this.props.projectRoles} placeholder="Project Role" style={{marginBottom: '5px'}} /> <div style={{marginBottom: '5px'}} > - <InputText disable={!this.props.currentWorkflowTask.editPermissions}value={this.state.assignToEmail} placeholder="User Email" + <InputText disable={noPermissions} value={this.state.assignToEmail} placeholder="User Email" tooltip="Assign to user with this email" onChange={e => this.setUserMail(e.target.value)} /> <label className="error"> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/unpin.data.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/unpin.data.js index 693d8fed3d8f5fecebda184149703eff4707baf7..288682c2c9411774d4e425c849099d7f056fcf70 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/unpin.data.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/unpin.data.js @@ -52,7 +52,7 @@ const UnPinData = ({ tasks, schedulingUnit, onCancel, ...props }) => { if (!props.readOnly && !currentWorkflowTask) { props.getCurrentTaskDetails() .then(currentWorkflowTask => { - if (!currentWorkflowTask===undefined) { + if (currentWorkflowTask!==undefined) { setCurrentWorkflowTask(currentWorkflowTask); } @@ -87,11 +87,11 @@ const UnPinData = ({ tasks, schedulingUnit, onCancel, ...props }) => { {/* Allow to edit the owner if the task is not yet completed */} {!props.readOnly && !reassign && <> - {currentWorkflowTask && currentWorkflowTask.editPermissions - ? <Link onClick={ setReassign(true)} style={{ marginLeft: '10px' }}> + {currentWorkflowTask?.editPermissions + ? <Link onClick={ () => setReassign(true)} style={{ marginLeft: '10px' }}> <i className="pi pi-pencil"></i> </Link> - : <Link style={{ cursor: 'default', pointerEvents: "none", color: 'grey', marginLeft: '10px' }} onClick={this.setState({ reassign: true })}> + : <Link style={{ cursor: 'default', pointerEvents: "none", color: 'grey', marginLeft: '10px' }} onClick={ ()=>setReassign(true)}> <i className="pi pi-pencil"></i> </Link> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/index.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/index.js index b9e6a29287cb42a31e93648cd2e803929273dc80..01aea2f4fb2f9f09f9fe5afd7004e9057d74e8e8 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/index.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/index.js @@ -3,12 +3,12 @@ import { // Redirect, } from 'react-router-dom'; -import {NotFound} from '../layout/components/NotFound'; +import { NotFound } from '../layout/components/NotFound'; import AccessDenied from '../layout/components/AccessDenied'; -import {ProjectList, ProjectCreate, ProjectView, ProjectEdit} from './Project'; -import {Dashboard} from './Dashboard'; -import {Scheduling} from './Scheduling'; -import {TaskEdit, TaskView, DataProduct, TaskList} from './Task'; +import { ProjectList, ProjectCreate, ProjectView, ProjectEdit } from './Project'; +import { Dashboard } from './Dashboard'; +import { Scheduling } from './Scheduling'; +import { TaskEdit, TaskView, DataProduct, TaskList } from './Task'; import ViewSchedulingUnit from './Scheduling/ViewSchedulingUnit' import SchedulingUnitCreate from './Scheduling/create'; import EditSchedulingUnit from './Scheduling/edit'; @@ -29,84 +29,84 @@ export const routes = [ { path: "/not-found", component: NotFound, - },{ + }, { path: "/access-denied", component: AccessDenied, name: 'Access Denied', title: 'Access Denied' - },{ + }, { path: "/dashboard", component: Dashboard, name: 'Dashboard', title: 'Dashboard' - },{ + }, { path: "/schedulingunit", component: Scheduling, name: 'Scheduling Unit', title: 'Scheduling Unit - List', - },{ + }, { path: "/schedulingunit/create", component: SchedulingUnitCreate, name: 'Scheduling Unit Add', title: 'Scheduling Unit - Add', permissions: ['scheduleunit', 'create'] - },{ + }, { path: "/task", component: TaskList, name: 'Task', title: 'Task-List', permissions: ['task', 'list'] - },{ + }, { path: "/task/view", component: TaskView, name: 'Task', title: 'Task View', - },{ + }, { path: "/task/view/:type/:id", component: TaskView, name: 'Task View', title: 'Task - View', - },{ + }, { path: "/task/edit", component: TaskEdit, name: 'Task Edit', title: 'Task-Edit' - },{ + }, { path: "/task/edit/draft/:id", component: TaskEdit, name: 'Task Edit', title: 'Task-Edit', - },{ + }, { path: "/schedulingunit/view", component: ViewSchedulingUnit, name: 'Scheduling View', title: 'Scheduling Unit - Details' - },{ + }, { path: "/schedulingunit/edit/:id", component: EditSchedulingUnit, name: 'Scheduling Edit', title: 'Scheduling Unit - Edit', // permissions: ['scheduleunit', 'edit'] - },{ + }, { path: "/schedulingunit/view/:type/:id", component: ViewSchedulingUnit, name: 'Scheduling View', // permissions: ['scheduleunit', 'list'] - },{ + }, { path: "/project", component: ProjectList, name: 'Project List', title: 'Project - List', permissions: ['project', 'list'] - },{ + }, { path: "/project/create", component: ProjectCreate, name: 'Project Add', title: 'Project - Add', permissions: ['project', 'create'] - },{ + }, { path: "/project/view/:id", component: ProjectView, name: 'Project View', @@ -118,7 +118,7 @@ export const routes = [ component: ProjectEdit, name: 'Project Edit', title: 'Project Edit', - },{ + }, { path: "/project/:project/schedulingunit/create", component: SchedulingUnitCreate, name: 'Scheduling Unit Add', @@ -135,33 +135,33 @@ export const routes = [ path: "/cycle/edit/:id", component: CycleEdit, name: 'Cycle Edit', - title:'Cycle-Edit', + title: 'Cycle-Edit', permissions: ['cycle', 'edit'] - },{ + }, { path: "/cycle/view/:id", component: CycleView, name: 'Cycle View', - title:'Cycle-View', + title: 'Cycle-View', permissions: ['cycle', 'list'] }, { path: "/cycle/create", component: CycleCreate, name: 'Cycle Add', - title:'Cycle-Add', + title: 'Cycle-Add', permissions: ['cycle', 'create'] }, { path: "/cycle", component: CycleList, name: 'Cycle List', - title:'Cycle-List', + title: 'Cycle-List', permissions: ['cycle', 'list'] }, { path: "/su/timelineview/week", component: WeekView, name: 'Scheduling Unit Timeline - Week', - title:'SU Weekly Timeline View' + title: 'SU Weekly Timeline View' }, { path: "/task/view/blueprint/:id/dataproducts", @@ -175,16 +175,16 @@ export const routes = [ permissions: ['scheduleunit', 'excelview'] }, { - path: "/schedulingunit/:id/workflow", - component: Workflow, - name: 'Workflow', - title: 'QA Reporting (TO)' + path: "/schedulingunit/:id/workflow", + component: Workflow, + name: 'Workflow', + title: 'QA Reporting (TO)' }, { path: "/reservation/list", component: ReservationList, name: 'Reservation List', - title:'Reservation List', + title: 'Reservation List', permissions: ['reservation', 'list'] }, { @@ -230,7 +230,7 @@ export const routes = [ path: "/systemevent/list", component: SystemEventList, name: 'System Issues List', - title:'System Issues', + title: 'System Issues', permissions: ['systemevent', 'list'] }, { @@ -257,18 +257,18 @@ export const routes = [ { component: NotFound, name: 'Page Not Found - 404', - title: 'Page Not Found - 404' + title: 'Page Not Found - 404' } ]; export const RoutedContent = () => { return ( <> - <Toast ref={(el) => setAppGrowl(el)} /> - <Switch> - {/* <Redirect from="/" to="/" exact /> */} - {routes.map(routeProps => <ProtectedRoute {...routeProps} exact="true" key={(routeProps.path || routeProps.name)+'_switch'} /> )} - </Switch> + <Toast ref={(el) => setAppGrowl(el)} /> + <Switch> + {/* <Redirect from="/" to="/" exact /> */} + {routes.map(routeProps => <ProtectedRoute {...routeProps} exact="true" key={(routeProps.path || routeProps.name) + '_switch'} />)} + </Switch> </> ); } \ No newline at end of file diff --git a/SAS/TMSS/frontend/tmss_webapp/src/services/task.service.js b/SAS/TMSS/frontend/tmss_webapp/src/services/task.service.js index 1a2d1820495d320a64119b1743a5439e6c787267..affdc9bf6da86bbbc57becfff41269e32d4bbc30 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/services/task.service.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/services/task.service.js @@ -45,7 +45,7 @@ const TaskService = { }, getTaskTemplate: async function(templateId) { try { - const response = await axios.get('/api/task_template/' + templateId); + const response = await axios.get('/api/task_template/' + templateId+'/ref_solved'); // ref_solved, discuss with jorrit. return response.data; } catch (error) { console.log(error); diff --git a/SAS/TMSS/frontend/tmss_webapp/src/show.error.details.js b/SAS/TMSS/frontend/tmss_webapp/src/show.error.details.js index 12ba84576e2af904135d3ce3ef3b68ff76d85f8e..fc3ab81d5db427e7357dc7467ecfd6f5338e6ead 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/show.error.details.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/show.error.details.js @@ -52,7 +52,7 @@ export class ShowErrorDetails extends Component { render() { const httpStatusMsg = UIConstants.httpStatusMessages[this.props.response.status]; const data = httpStatusMsg? httpStatusMsg.detail: ''; - var message = '['+this.props.response.status+'] '+JSON.stringify(this.props.response.statusText)+ ' ['+data+']'; + let message = '['+this.props.response.status+'] '+JSON.stringify(this.props.response.statusText)+ ' ['+data+']'; return ( <div> <Toast ref={(ref) => this.growl =ref}/>