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}/>