From ff8589e59ede55869528b7d9a17890e0c30f4fcd Mon Sep 17 00:00:00 2001
From: Alexander Madsen <alexander.madsen@ess.eu>
Date: Mon, 13 Feb 2023 09:22:11 +0000
Subject: [PATCH] ICSHWI-11708 - Improve file structure

---
 package-lock.json                             | 252 +++++++++---------
 src/components/Job/index.js                   |  15 ++
 src/components/common/Accordion/index.js      |   4 +
 src/components/common/Badge/index.js          |   4 +
 src/components/common/Console/index.js        |   6 +
 src/components/common/Container/index.js      |   4 +
 src/components/common/KeyValueTable/index.js  |   4 +
 src/components/common/Loki/index.js           |   4 +
 .../common/PrimeKeyValueTable/index.js        |   4 +
 src/components/common/SearchBar/index.js      |   4 +
 .../common/SearchBoxFilter/index.js           |   4 +
 src/components/common/SimpleModal/index.js    |   4 +
 src/components/common/URLState/index.js       |   3 +
 src/components/common/notification/index.js   |  39 +++
 src/components/common/snackbar/index.js       |   4 +
 src/components/common/stepper/index.js        |   4 +
 src/components/common/table/index.js          |   4 +
 .../deployments/DeploymentAsyncList.js        |   0
 src/components/deployments/index.js           |  18 ++
 src/components/dialog/index.js                |   4 +
 src/components/host/index.js                  |  14 +
 .../navigation/ErrorBoundary/index.js         |   4 +
 .../navigation/GlobalAppBar/index.js          |  24 ++
 .../navigation/LoginSuggester/index.js        |   4 +
 src/components/navigation/Menu/index.js       |   4 +
 src/components/records/index.js               |  18 ++
 src/views/IOC/index.js                        |  11 +
 src/views/about/index.js                      |   4 +
 .../deployments/DeploymentsAccessControl.js   |   0
 src/views/deployments/DeploymentsView.js      |   0
 src/views/deployments/index.js                |   9 +
 src/views/help/index.js                       |   4 +
 src/views/home/index.js                       |   5 +
 src/views/host/index.js                       |  11 +
 src/views/jobs/index.js                       |  13 +
 src/views/login/index.js                      |   4 +
 src/views/records/index.js                    |   5 +
 src/views/statistics/index.js                 |   4 +
 38 files changed, 397 insertions(+), 126 deletions(-)
 create mode 100644 src/components/Job/index.js
 create mode 100644 src/components/common/Accordion/index.js
 create mode 100644 src/components/common/Badge/index.js
 create mode 100644 src/components/common/Console/index.js
 create mode 100644 src/components/common/Container/index.js
 create mode 100644 src/components/common/KeyValueTable/index.js
 create mode 100644 src/components/common/Loki/index.js
 create mode 100644 src/components/common/PrimeKeyValueTable/index.js
 create mode 100644 src/components/common/SearchBar/index.js
 create mode 100644 src/components/common/SearchBoxFilter/index.js
 create mode 100644 src/components/common/SimpleModal/index.js
 create mode 100644 src/components/common/URLState/index.js
 create mode 100644 src/components/common/notification/index.js
 create mode 100644 src/components/common/snackbar/index.js
 create mode 100644 src/components/common/stepper/index.js
 create mode 100644 src/components/common/table/index.js
 delete mode 100644 src/components/deployments/DeploymentAsyncList.js
 create mode 100644 src/components/deployments/index.js
 create mode 100644 src/components/dialog/index.js
 create mode 100644 src/components/host/index.js
 create mode 100644 src/components/navigation/ErrorBoundary/index.js
 create mode 100644 src/components/navigation/GlobalAppBar/index.js
 create mode 100644 src/components/navigation/LoginSuggester/index.js
 create mode 100644 src/components/navigation/Menu/index.js
 create mode 100644 src/components/records/index.js
 create mode 100644 src/views/IOC/index.js
 create mode 100644 src/views/about/index.js
 delete mode 100644 src/views/deployments/DeploymentsAccessControl.js
 delete mode 100644 src/views/deployments/DeploymentsView.js
 create mode 100644 src/views/deployments/index.js
 create mode 100644 src/views/help/index.js
 create mode 100644 src/views/home/index.js
 create mode 100644 src/views/host/index.js
 create mode 100644 src/views/jobs/index.js
 create mode 100644 src/views/login/index.js
 create mode 100644 src/views/records/index.js
 create mode 100644 src/views/statistics/index.js

diff --git a/package-lock.json b/package-lock.json
index 0a2836ac..424d64e2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1144,11 +1144,11 @@
       }
     },
     "node_modules/internal-slot": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz",
-      "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==",
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+      "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
       "dependencies": {
-        "get-intrinsic": "^1.1.3",
+        "get-intrinsic": "^1.2.0",
         "has": "^1.0.3",
         "side-channel": "^1.0.4"
       },
@@ -2562,13 +2562,13 @@
       }
     },
     "node_modules/jss-plugin-camel-case": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.2.tgz",
-      "integrity": "sha512-wgBPlL3WS0WDJ1lPJcgjux/SHnDuu7opmgQKSraKs4z8dCCyYMx9IDPFKBXQ8Q5dVYij1FFV0WdxyhuOOAXuTg==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz",
+      "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
         "hyphenate-style-name": "^1.0.3",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "node_modules/workbox-broadcast-update": {
@@ -3119,9 +3119,9 @@
       }
     },
     "node_modules/jss": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss/-/jss-10.9.2.tgz",
-      "integrity": "sha512-b8G6rWpYLR4teTUbGd4I4EsnWjg7MN0Q5bSsjKhVkJVjhQDy2KzkbD2AW3TuT0RYZVmZZHKIrXDn6kjU14qkUg==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz",
+      "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
         "csstype": "^3.0.2",
@@ -9510,9 +9510,9 @@
       "dev": true
     },
     "node_modules/remark-rehype/node_modules/vfile": {
-      "version": "5.3.6",
-      "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.6.tgz",
-      "integrity": "sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==",
+      "version": "5.3.7",
+      "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
+      "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
       "dependencies": {
         "@types/unist": "^2.0.0",
         "is-buffer": "^2.0.0",
@@ -9890,9 +9890,9 @@
       "dev": true
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.289",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.289.tgz",
-      "integrity": "sha512-relLdMfPBxqGCxy7Gyfm1HcbRPcFUJdlgnCPVgQ23sr1TvUrRJz0/QPoGP0+x41wOVSTN/Wi3w6YDgHiHJGOzg==",
+      "version": "1.4.294",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.294.tgz",
+      "integrity": "sha512-PuHZB3jEN7D8WPPjLmBQAsqQz8tWHlkkB4n0E2OYw8RwVdmBYV0Wn+rUFH8JqYyIRb4HQhhedgxlZL163wqLrQ==",
       "dev": true
     },
     "node_modules/@babel/parser": {
@@ -13270,12 +13270,12 @@
       }
     },
     "node_modules/jss-plugin-rule-value-function": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.2.tgz",
-      "integrity": "sha512-vf5ms8zvLFMub6swbNxvzsurHfUZ5Shy5aJB2gIpY6WNA3uLinEcxYyraQXItRHi5ivXGqYciFDRM2ZoVoRZ4Q==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz",
+      "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2",
+        "jss": "10.10.0",
         "tiny-warning": "^1.0.2"
       }
     },
@@ -18423,13 +18423,13 @@
       "dev": true
     },
     "node_modules/jss-plugin-vendor-prefixer": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.2.tgz",
-      "integrity": "sha512-SxcEoH+Rttf9fEv6KkiPzLdXRmI6waOTcMkbbEFgdZLDYNIP9UKNHFy6thhbRKqv0XMQZdrEsbDyV464zE/dUA==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz",
+      "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
         "css-vendor": "^2.0.8",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "node_modules/react-markdown/node_modules/style-to-object": {
@@ -19309,12 +19309,6 @@
       "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
       "dev": true
     },
-    "node_modules/regjsgen": {
-      "version": "0.7.1",
-      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
-      "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==",
-      "dev": true
-    },
     "node_modules/flat-cache": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
@@ -19497,9 +19491,9 @@
       }
     },
     "node_modules/eslint-plugin-testing-library": {
-      "version": "5.10.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.0.tgz",
-      "integrity": "sha512-aTOsCAEI9trrX3TLOnsskfhe57DmsjP/yMKLPqg4ftdRvfR4qut2PGWUa8TwP7whZbwMzJjh98tgAPcE8vdHow==",
+      "version": "5.10.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.1.tgz",
+      "integrity": "sha512-GRy87AqUi2Ij69pe0YnOXm3oGBCgnFwfIv+Hu9q/kT3jL0pX1cXA7aO+oJnvdpbJy2+riOPqGsa3iAkL888NLg==",
       "dev": true,
       "dependencies": {
         "@typescript-eslint/utils": "^5.43.0"
@@ -19522,12 +19516,12 @@
       }
     },
     "node_modules/jss-plugin-props-sort": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.2.tgz",
-      "integrity": "sha512-AP1AyUTbi2szylgr+O0OB7gkIxEGzySLITZ2GpsaoX72YMCGI2jYAc+WUhPfvUnZYiauF4zTnN4V4TGuvFjJlw==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz",
+      "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "node_modules/infer-owner": {
@@ -22505,9 +22499,9 @@
       }
     },
     "node_modules/recharts": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.3.2.tgz",
-      "integrity": "sha512-2II30fGzKaypHfHNQNUhCfiLMxrOS/gF0WFahDIEFgXtJkVEe2DpZWFfEfAn+RU3B7/h2V/B05Bwmqq3rTXwLw==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.4.1.tgz",
+      "integrity": "sha512-mX/R6wUFquFKbvqfa2VUFfrtqydzNp6f2b74NKVmk3Zt3m/uPD6hQYST2/1j/YXv0ZbNWE4xAyVp98tMBVxOsA==",
       "dependencies": {
         "classnames": "^2.2.5",
         "eventemitter3": "^4.0.1",
@@ -24851,6 +24845,12 @@
         "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
+    "node_modules/@babel/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
+      "dev": true
+    },
     "node_modules/import-local/node_modules/locate-path": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@@ -29227,12 +29227,12 @@
       }
     },
     "node_modules/jss-plugin-nested": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.9.2.tgz",
-      "integrity": "sha512-VgiOWIC6bvgDaAL97XCxGD0BxOKM0K0zeB/ECyNaVF6FqvdGB9KBBWRdy2STYAss4VVA7i5TbxFZN+WSX1kfQA==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz",
+      "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2",
+        "jss": "10.10.0",
         "tiny-warning": "^1.0.2"
       }
     },
@@ -31823,9 +31823,9 @@
       "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
     },
     "node_modules/minimist": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
-      "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
       "dev": true,
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -32338,12 +32338,12 @@
       }
     },
     "node_modules/jss-plugin-default-unit": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.2.tgz",
-      "integrity": "sha512-pYg0QX3bBEFtTnmeSI3l7ad1vtHU42YEEpgW7pmIh+9pkWNWb5dwS/4onSfAaI0kq+dOZHzz4dWe+8vWnanoSg==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz",
+      "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "node_modules/patch-package/node_modules/cross-spawn": {
@@ -34739,9 +34739,9 @@
       }
     },
     "node_modules/react-markdown/node_modules/vfile": {
-      "version": "5.3.6",
-      "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.6.tgz",
-      "integrity": "sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==",
+      "version": "5.3.7",
+      "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
+      "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
       "dependencies": {
         "@types/unist": "^2.0.0",
         "is-buffer": "^2.0.0",
@@ -39704,14 +39704,14 @@
       "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
     },
     "node_modules/regexpu-core": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz",
-      "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==",
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.0.tgz",
+      "integrity": "sha512-ZdhUQlng0RoscyW7jADnUZ25F5eVtHdMyXSb2PiwafvteRAOJUjFoUPEYZSIfP99fBIs3maLIRfpEddT78wAAQ==",
       "dev": true,
       "dependencies": {
+        "@babel/regjsgen": "^0.8.0",
         "regenerate": "^1.4.2",
         "regenerate-unicode-properties": "^10.1.0",
-        "regjsgen": "^0.7.1",
         "regjsparser": "^0.9.1",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.1.0"
@@ -42136,12 +42136,12 @@
       }
     },
     "node_modules/jss-plugin-global": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.9.2.tgz",
-      "integrity": "sha512-GcX0aE8Ef6AtlasVrafg1DItlL/tWHoC4cGir4r3gegbWwF5ZOBYhx04gurPvWHC8F873aEGqge7C17xpwmp2g==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz",
+      "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "node_modules/mdn-data": {
@@ -43791,6 +43791,12 @@
         "source-map-support": "^0.5.16"
       }
     },
+    "@babel/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
+      "dev": true
+    },
     "@babel/runtime": {
       "version": "7.20.13",
       "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz",
@@ -55329,9 +55335,9 @@
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.4.289",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.289.tgz",
-      "integrity": "sha512-relLdMfPBxqGCxy7Gyfm1HcbRPcFUJdlgnCPVgQ23sr1TvUrRJz0/QPoGP0+x41wOVSTN/Wi3w6YDgHiHJGOzg==",
+      "version": "1.4.294",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.294.tgz",
+      "integrity": "sha512-PuHZB3jEN7D8WPPjLmBQAsqQz8tWHlkkB4n0E2OYw8RwVdmBYV0Wn+rUFH8JqYyIRb4HQhhedgxlZL163wqLrQ==",
       "dev": true
     },
     "elliptic": {
@@ -56068,9 +56074,9 @@
       "dev": true
     },
     "eslint-plugin-testing-library": {
-      "version": "5.10.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.0.tgz",
-      "integrity": "sha512-aTOsCAEI9trrX3TLOnsskfhe57DmsjP/yMKLPqg4ftdRvfR4qut2PGWUa8TwP7whZbwMzJjh98tgAPcE8vdHow==",
+      "version": "5.10.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.1.tgz",
+      "integrity": "sha512-GRy87AqUi2Ij69pe0YnOXm3oGBCgnFwfIv+Hu9q/kT3jL0pX1cXA7aO+oJnvdpbJy2+riOPqGsa3iAkL888NLg==",
       "dev": true,
       "requires": {
         "@typescript-eslint/utils": "^5.43.0"
@@ -58849,11 +58855,11 @@
       }
     },
     "internal-slot": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz",
-      "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==",
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+      "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
       "requires": {
-        "get-intrinsic": "^1.1.3",
+        "get-intrinsic": "^1.2.0",
         "has": "^1.0.3",
         "side-channel": "^1.0.4"
       }
@@ -61849,9 +61855,9 @@
       }
     },
     "jss": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss/-/jss-10.9.2.tgz",
-      "integrity": "sha512-b8G6rWpYLR4teTUbGd4I4EsnWjg7MN0Q5bSsjKhVkJVjhQDy2KzkbD2AW3TuT0RYZVmZZHKIrXDn6kjU14qkUg==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz",
+      "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==",
       "requires": {
         "@babel/runtime": "^7.3.1",
         "csstype": "^3.0.2",
@@ -61867,70 +61873,70 @@
       }
     },
     "jss-plugin-camel-case": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.2.tgz",
-      "integrity": "sha512-wgBPlL3WS0WDJ1lPJcgjux/SHnDuu7opmgQKSraKs4z8dCCyYMx9IDPFKBXQ8Q5dVYij1FFV0WdxyhuOOAXuTg==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz",
+      "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==",
       "requires": {
         "@babel/runtime": "^7.3.1",
         "hyphenate-style-name": "^1.0.3",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "jss-plugin-default-unit": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.2.tgz",
-      "integrity": "sha512-pYg0QX3bBEFtTnmeSI3l7ad1vtHU42YEEpgW7pmIh+9pkWNWb5dwS/4onSfAaI0kq+dOZHzz4dWe+8vWnanoSg==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz",
+      "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==",
       "requires": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "jss-plugin-global": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.9.2.tgz",
-      "integrity": "sha512-GcX0aE8Ef6AtlasVrafg1DItlL/tWHoC4cGir4r3gegbWwF5ZOBYhx04gurPvWHC8F873aEGqge7C17xpwmp2g==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz",
+      "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==",
       "requires": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "jss-plugin-nested": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.9.2.tgz",
-      "integrity": "sha512-VgiOWIC6bvgDaAL97XCxGD0BxOKM0K0zeB/ECyNaVF6FqvdGB9KBBWRdy2STYAss4VVA7i5TbxFZN+WSX1kfQA==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz",
+      "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==",
       "requires": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2",
+        "jss": "10.10.0",
         "tiny-warning": "^1.0.2"
       }
     },
     "jss-plugin-props-sort": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.2.tgz",
-      "integrity": "sha512-AP1AyUTbi2szylgr+O0OB7gkIxEGzySLITZ2GpsaoX72YMCGI2jYAc+WUhPfvUnZYiauF4zTnN4V4TGuvFjJlw==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz",
+      "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==",
       "requires": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "jss-plugin-rule-value-function": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.2.tgz",
-      "integrity": "sha512-vf5ms8zvLFMub6swbNxvzsurHfUZ5Shy5aJB2gIpY6WNA3uLinEcxYyraQXItRHi5ivXGqYciFDRM2ZoVoRZ4Q==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz",
+      "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==",
       "requires": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2",
+        "jss": "10.10.0",
         "tiny-warning": "^1.0.2"
       }
     },
     "jss-plugin-vendor-prefixer": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.2.tgz",
-      "integrity": "sha512-SxcEoH+Rttf9fEv6KkiPzLdXRmI6waOTcMkbbEFgdZLDYNIP9UKNHFy6thhbRKqv0XMQZdrEsbDyV464zE/dUA==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz",
+      "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==",
       "requires": {
         "@babel/runtime": "^7.3.1",
         "css-vendor": "^2.0.8",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "jsx-ast-utils": {
@@ -63158,9 +63164,9 @@
       }
     },
     "minimist": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
-      "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
       "dev": true
     },
     "minipass": {
@@ -67289,9 +67295,9 @@
           }
         },
         "vfile": {
-          "version": "5.3.6",
-          "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.6.tgz",
-          "integrity": "sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==",
+          "version": "5.3.7",
+          "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
+          "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
           "requires": {
             "@types/unist": "^2.0.0",
             "is-buffer": "^2.0.0",
@@ -68966,9 +68972,9 @@
       }
     },
     "recharts": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.3.2.tgz",
-      "integrity": "sha512-2II30fGzKaypHfHNQNUhCfiLMxrOS/gF0WFahDIEFgXtJkVEe2DpZWFfEfAn+RU3B7/h2V/B05Bwmqq3rTXwLw==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.4.1.tgz",
+      "integrity": "sha512-mX/R6wUFquFKbvqfa2VUFfrtqydzNp6f2b74NKVmk3Zt3m/uPD6hQYST2/1j/YXv0ZbNWE4xAyVp98tMBVxOsA==",
       "requires": {
         "classnames": "^2.2.5",
         "eventemitter3": "^4.0.1",
@@ -69110,14 +69116,14 @@
       "dev": true
     },
     "regexpu-core": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz",
-      "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==",
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.0.tgz",
+      "integrity": "sha512-ZdhUQlng0RoscyW7jADnUZ25F5eVtHdMyXSb2PiwafvteRAOJUjFoUPEYZSIfP99fBIs3maLIRfpEddT78wAAQ==",
       "dev": true,
       "requires": {
+        "@babel/regjsgen": "^0.8.0",
         "regenerate": "^1.4.2",
         "regenerate-unicode-properties": "^10.1.0",
-        "regjsgen": "^0.7.1",
         "regjsparser": "^0.9.1",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.1.0"
@@ -69142,12 +69148,6 @@
         "rc": "^1.0.1"
       }
     },
-    "regjsgen": {
-      "version": "0.7.1",
-      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
-      "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==",
-      "dev": true
-    },
     "regjsparser": {
       "version": "0.9.1",
       "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
@@ -69418,9 +69418,9 @@
           }
         },
         "vfile": {
-          "version": "5.3.6",
-          "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.6.tgz",
-          "integrity": "sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==",
+          "version": "5.3.7",
+          "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
+          "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
           "requires": {
             "@types/unist": "^2.0.0",
             "is-buffer": "^2.0.0",
diff --git a/src/components/Job/index.js b/src/components/Job/index.js
new file mode 100644
index 00000000..16f8a576
--- /dev/null
+++ b/src/components/Job/index.js
@@ -0,0 +1,15 @@
+import { JobAsyncList, JobDetailFetcher } from "./JobAsyncList";
+import { JobBadge } from "./JobBadge";
+import { JobDetails } from "./JobDetails";
+import { JobStatusIcon, JobTypeIcon } from "./JobIcons";
+import { JobTable } from "./JobTable";
+
+export {
+  JobAsyncList,
+  JobDetailFetcher,
+  JobBadge,
+  JobDetails,
+  JobStatusIcon,
+  JobTypeIcon,
+  JobTable
+};
diff --git a/src/components/common/Accordion/index.js b/src/components/common/Accordion/index.js
new file mode 100644
index 00000000..5ee42181
--- /dev/null
+++ b/src/components/common/Accordion/index.js
@@ -0,0 +1,4 @@
+import { SimpleAccordion } from "./SimpleAccordion";
+
+export { SimpleAccordion };
+export default SimpleAccordion;
diff --git a/src/components/common/Badge/index.js b/src/components/common/Badge/index.js
new file mode 100644
index 00000000..557989e2
--- /dev/null
+++ b/src/components/common/Badge/index.js
@@ -0,0 +1,4 @@
+import { IconBadge } from "./IconBadge";
+
+export { IconBadge };
+export default IconBadge;
diff --git a/src/components/common/Console/index.js b/src/components/common/Console/index.js
new file mode 100644
index 00000000..f376c27d
--- /dev/null
+++ b/src/components/common/Console/index.js
@@ -0,0 +1,6 @@
+import { Console } from "./Console";
+import { ConsoleOutput } from "./ConsoleOutput";
+import { LogDialog } from "./LogDialog";
+
+export { Console, ConsoleOutput, LogDialog };
+export default Console;
diff --git a/src/components/common/Container/index.js b/src/components/common/Container/index.js
new file mode 100644
index 00000000..bbcaefc1
--- /dev/null
+++ b/src/components/common/Container/index.js
@@ -0,0 +1,4 @@
+import { RootContainer } from "./RootContainer";
+
+export { RootContainer };
+export default RootContainer;
diff --git a/src/components/common/KeyValueTable/index.js b/src/components/common/KeyValueTable/index.js
new file mode 100644
index 00000000..b6ba15a3
--- /dev/null
+++ b/src/components/common/KeyValueTable/index.js
@@ -0,0 +1,4 @@
+import { KeyValueTable } from "./KeyValueTable";
+
+export { KeyValueTable };
+export default KeyValueTable;
diff --git a/src/components/common/Loki/index.js b/src/components/common/Loki/index.js
new file mode 100644
index 00000000..aeb3a64a
--- /dev/null
+++ b/src/components/common/Loki/index.js
@@ -0,0 +1,4 @@
+import { LokiContainer } from "./LokiContainer";
+import { LokiPanel } from "./LokiPanel";
+
+export { LokiContainer, LokiPanel };
diff --git a/src/components/common/PrimeKeyValueTable/index.js b/src/components/common/PrimeKeyValueTable/index.js
new file mode 100644
index 00000000..f12f0b0e
--- /dev/null
+++ b/src/components/common/PrimeKeyValueTable/index.js
@@ -0,0 +1,4 @@
+import { PrimeKeyValueTable } from "./PrimeKeyValueTable";
+
+export { PrimeKeyValueTable };
+export default PrimeKeyValueTable;
diff --git a/src/components/common/SearchBar/index.js b/src/components/common/SearchBar/index.js
new file mode 100644
index 00000000..df0173df
--- /dev/null
+++ b/src/components/common/SearchBar/index.js
@@ -0,0 +1,4 @@
+import { SearchBar } from "./SearchBar";
+
+export { SearchBar };
+export default SearchBar;
diff --git a/src/components/common/SearchBoxFilter/index.js b/src/components/common/SearchBoxFilter/index.js
new file mode 100644
index 00000000..e657ee56
--- /dev/null
+++ b/src/components/common/SearchBoxFilter/index.js
@@ -0,0 +1,4 @@
+import { SearchBoxFilter, SearchBoxFilterDemo } from "./SearchBoxFilter";
+import { useTypingTimer } from "./TypingTimer";
+
+export { SearchBoxFilter, SearchBoxFilterDemo, useTypingTimer };
diff --git a/src/components/common/SimpleModal/index.js b/src/components/common/SimpleModal/index.js
new file mode 100644
index 00000000..e57ea873
--- /dev/null
+++ b/src/components/common/SimpleModal/index.js
@@ -0,0 +1,4 @@
+import { SimpleModal } from "./SimpleModal";
+
+export { SimpleModal };
+export default SimpleModal;
diff --git a/src/components/common/URLState/index.js b/src/components/common/URLState/index.js
new file mode 100644
index 00000000..778ede8a
--- /dev/null
+++ b/src/components/common/URLState/index.js
@@ -0,0 +1,3 @@
+import { serialize, deserialize } from "./URLState";
+
+export { serialize, deserialize };
diff --git a/src/components/common/notification/index.js b/src/components/common/notification/index.js
new file mode 100644
index 00000000..3ef3bac7
--- /dev/null
+++ b/src/components/common/notification/index.js
@@ -0,0 +1,39 @@
+import { NotificationProvider, createContext } from "./Notifications";
+import { DeploymentWatcher, CommandWatcher } from "./Watchers";
+import {
+  removeId,
+  clearAll,
+  getStoredNotifications,
+  appendNotification,
+  watchDeployment,
+  watchCommand,
+  getStoredDeplomentIds,
+  getStoredCommandIds,
+  WATCHED_DEPLOYMENT_STORAGE_KEY,
+  DEPLOYMENT_NOTIFICATIONS,
+  WATCHED_COMMAND_STORAGE_KEY,
+  CURRENT_NOTIFICATION_VERSION,
+  TYPE_DEPLOYMENT,
+  TYPE_COMMAND
+} from "./Storage";
+
+export {
+  NotificationProvider,
+  createContext,
+  DeploymentWatcher,
+  CommandWatcher,
+  removeId,
+  clearAll,
+  getStoredNotifications,
+  appendNotification,
+  watchDeployment,
+  watchCommand,
+  getStoredDeplomentIds,
+  getStoredCommandIds,
+  WATCHED_DEPLOYMENT_STORAGE_KEY,
+  DEPLOYMENT_NOTIFICATIONS,
+  WATCHED_COMMAND_STORAGE_KEY,
+  CURRENT_NOTIFICATION_VERSION,
+  TYPE_DEPLOYMENT,
+  TYPE_COMMAND
+};
diff --git a/src/components/common/snackbar/index.js b/src/components/common/snackbar/index.js
new file mode 100644
index 00000000..0f50baf8
--- /dev/null
+++ b/src/components/common/snackbar/index.js
@@ -0,0 +1,4 @@
+import { useCustomSnackbar } from "./Snackbar";
+
+export { useCustomSnackbar };
+export default useCustomSnackbar;
diff --git a/src/components/common/stepper/index.js b/src/components/common/stepper/index.js
new file mode 100644
index 00000000..7f1f7458
--- /dev/null
+++ b/src/components/common/stepper/index.js
@@ -0,0 +1,4 @@
+import { StepperWithStyle } from "./StepperWithStyle";
+
+export { StepperWithStyle };
+export default StepperWithStyle;
diff --git a/src/components/common/table/index.js b/src/components/common/table/index.js
new file mode 100644
index 00000000..809926a7
--- /dev/null
+++ b/src/components/common/table/index.js
@@ -0,0 +1,4 @@
+import { CustomTable } from "./CustomTable";
+
+export { CustomTable };
+export default CustomTable;
diff --git a/src/components/deployments/DeploymentAsyncList.js b/src/components/deployments/DeploymentAsyncList.js
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/components/deployments/index.js b/src/components/deployments/index.js
new file mode 100644
index 00000000..22bcc7f7
--- /dev/null
+++ b/src/components/deployments/index.js
@@ -0,0 +1,18 @@
+import { DeploymentBadge } from "./DeploymentBadge";
+import { DeploymentDetailFetcher } from "./DeploymentDetailFetcher";
+import { DeploymentDetails } from "./DeploymentDetails";
+import { DeploymentStatusIcon } from "./DeploymentIcons";
+import { DeploymentJobOutput } from "./DeploymentJobOutput";
+import { DeploymentsList, DeploymentListItem } from "./DeploymentsList";
+import { DeploymentStepper } from "./DeploymentStepper";
+
+export {
+  DeploymentBadge,
+  DeploymentDetailFetcher,
+  DeploymentDetails,
+  DeploymentStatusIcon,
+  DeploymentJobOutput,
+  DeploymentsList,
+  DeploymentListItem,
+  DeploymentStepper
+};
diff --git a/src/components/dialog/index.js b/src/components/dialog/index.js
new file mode 100644
index 00000000..0a5263fd
--- /dev/null
+++ b/src/components/dialog/index.js
@@ -0,0 +1,4 @@
+import { ConfirmationDialog } from "./ConfirmationDialog";
+
+export { ConfirmationDialog };
+export default ConfirmationDialog;
diff --git a/src/components/host/index.js b/src/components/host/index.js
new file mode 100644
index 00000000..089301f1
--- /dev/null
+++ b/src/components/host/index.js
@@ -0,0 +1,14 @@
+import { HostBadge } from "./HostBadge";
+import { HostStatusIcon } from "./HostIcons";
+import { HostList, HostListItem } from "./HostList";
+import { HostTable, rowDescription, createRow } from "./HostTable";
+
+export {
+  HostBadge,
+  HostStatusIcon,
+  HostList,
+  HostListItem,
+  HostTable,
+  rowDescription,
+  createRow
+};
diff --git a/src/components/navigation/ErrorBoundary/index.js b/src/components/navigation/ErrorBoundary/index.js
new file mode 100644
index 00000000..ee619e28
--- /dev/null
+++ b/src/components/navigation/ErrorBoundary/index.js
@@ -0,0 +1,4 @@
+import { AppErrorBoundary, Break } from "./ErrorBoundary";
+
+export { AppErrorBoundary, Break };
+export default AppErrorBoundary;
diff --git a/src/components/navigation/GlobalAppBar/index.js b/src/components/navigation/GlobalAppBar/index.js
new file mode 100644
index 00000000..3667500f
--- /dev/null
+++ b/src/components/navigation/GlobalAppBar/index.js
@@ -0,0 +1,24 @@
+import {
+  GlobalAppBar,
+  useGlobalAppBar,
+  LoginControls,
+  ButtonAppBar,
+  GlobalAppBarContext,
+  UserInfo,
+  ProfileMenu,
+  NotificationMenu,
+  DRAWER_OPEN
+} from "./GlobalAppBar";
+
+export {
+  GlobalAppBar,
+  useGlobalAppBar,
+  LoginControls,
+  ButtonAppBar,
+  GlobalAppBarContext,
+  UserInfo,
+  ProfileMenu,
+  NotificationMenu,
+  DRAWER_OPEN
+};
+export default GlobalAppBar;
diff --git a/src/components/navigation/LoginSuggester/index.js b/src/components/navigation/LoginSuggester/index.js
new file mode 100644
index 00000000..9e246698
--- /dev/null
+++ b/src/components/navigation/LoginSuggester/index.js
@@ -0,0 +1,4 @@
+import { LoginSuggester, LoginSuggesterMechanics } from "./LoginSuggester";
+
+export { LoginSuggester, LoginSuggesterMechanics };
+export default LoginSuggester;
diff --git a/src/components/navigation/Menu/index.js b/src/components/navigation/Menu/index.js
new file mode 100644
index 00000000..37107386
--- /dev/null
+++ b/src/components/navigation/Menu/index.js
@@ -0,0 +1,4 @@
+import { MenuDrawer } from "./MenuDrawer";
+
+export { MenuDrawer };
+export default MenuDrawer;
diff --git a/src/components/records/index.js b/src/components/records/index.js
new file mode 100644
index 00000000..e632404a
--- /dev/null
+++ b/src/components/records/index.js
@@ -0,0 +1,18 @@
+import {
+  RecordTable,
+  createRecordsRow,
+  createIocDetailsRow
+} from "./RecordTable";
+import { RecordBadge } from "./RecordBadge";
+import { RecordStatusIcon } from "./RecordIcons";
+import { RecordSearch } from "./RecordSearch";
+
+export {
+  RecordTable,
+  createRecordsRow,
+  createIocDetailsRow,
+  RecordBadge,
+  RecordStatusIcon,
+  RecordSearch
+};
+export default RecordTable;
diff --git a/src/views/IOC/index.js b/src/views/IOC/index.js
new file mode 100644
index 00000000..1940f0fa
--- /dev/null
+++ b/src/views/IOC/index.js
@@ -0,0 +1,11 @@
+import { IOCDetailsAccessControl } from "./IOCDetailsAccessControl";
+import { IOCDetailsContainer } from "./IOCDetailsContainer";
+import { IOCDetailsView } from "./IOCDetailsView";
+import { IOCListView } from "./IOCListView";
+
+export {
+  IOCDetailsAccessControl,
+  IOCDetailsContainer,
+  IOCDetailsView,
+  IOCListView
+};
diff --git a/src/views/about/index.js b/src/views/about/index.js
new file mode 100644
index 00000000..9a9df077
--- /dev/null
+++ b/src/views/about/index.js
@@ -0,0 +1,4 @@
+import { AboutView } from "./AboutView";
+
+export { AboutView };
+export default AboutView;
diff --git a/src/views/deployments/DeploymentsAccessControl.js b/src/views/deployments/DeploymentsAccessControl.js
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/views/deployments/DeploymentsView.js b/src/views/deployments/DeploymentsView.js
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/views/deployments/index.js b/src/views/deployments/index.js
new file mode 100644
index 00000000..c9301fe5
--- /dev/null
+++ b/src/views/deployments/index.js
@@ -0,0 +1,9 @@
+import { DeploymentDetailsAccessControl } from "./DeploymentDetailsAccessControl";
+import { DeploymentDetailsContainer } from "./DeploymentDetailsContainer";
+import { DeploymentDetailsView } from "./DeploymentDetailsView";
+
+export {
+  DeploymentDetailsAccessControl,
+  DeploymentDetailsContainer,
+  DeploymentDetailsView
+};
diff --git a/src/views/help/index.js b/src/views/help/index.js
new file mode 100644
index 00000000..878d4663
--- /dev/null
+++ b/src/views/help/index.js
@@ -0,0 +1,4 @@
+import { HelpView } from "./HelpView";
+
+export { HelpView };
+export default HelpView;
diff --git a/src/views/home/index.js b/src/views/home/index.js
new file mode 100644
index 00000000..b9240444
--- /dev/null
+++ b/src/views/home/index.js
@@ -0,0 +1,5 @@
+import { HomeView } from "./HomeView";
+import { HomeVisitorView } from "./HomeVisitorView";
+import { HomeAccessControl } from "./HomeAccessControl";
+
+export { HomeView, HomeVisitorView, HomeAccessControl };
diff --git a/src/views/host/index.js b/src/views/host/index.js
new file mode 100644
index 00000000..348a1b83
--- /dev/null
+++ b/src/views/host/index.js
@@ -0,0 +1,11 @@
+import { HostDetailsAccessControl } from "./HostDetailsAccessControl";
+import { HostDetailsContainer } from "./HostDetailsContainer";
+import { HostDetailsView } from "./HostDetailsView";
+import { HostListView } from "./HostListView";
+
+export {
+  HostDetailsAccessControl,
+  HostDetailsContainer,
+  HostDetailsView,
+  HostListView
+};
diff --git a/src/views/jobs/index.js b/src/views/jobs/index.js
new file mode 100644
index 00000000..c6431b08
--- /dev/null
+++ b/src/views/jobs/index.js
@@ -0,0 +1,13 @@
+import { JobDetailsAccessControl } from "./JobDetailsAccessControl";
+import { JobDetailsContainer } from "./JobDetailsContainer";
+import { JobDetailsView } from "./JobDetailsView";
+import { JobListView } from "./JobListView";
+import { JobLogAccessControl } from "./JobLogAccessControl";
+
+export {
+  JobDetailsAccessControl,
+  JobDetailsContainer,
+  JobDetailsView,
+  JobListView,
+  JobLogAccessControl
+};
diff --git a/src/views/login/index.js b/src/views/login/index.js
new file mode 100644
index 00000000..bc34e520
--- /dev/null
+++ b/src/views/login/index.js
@@ -0,0 +1,4 @@
+import { LoginView } from "./LoginView";
+
+export { LoginView };
+export default LoginView;
diff --git a/src/views/records/index.js b/src/views/records/index.js
new file mode 100644
index 00000000..1a7e8b95
--- /dev/null
+++ b/src/views/records/index.js
@@ -0,0 +1,5 @@
+import { RecordListView } from "./RecordListView";
+import { RecordDetailsView } from "./RecordDetailsView";
+
+export { RecordListView, RecordDetailsView };
+export default RecordListView;
diff --git a/src/views/statistics/index.js b/src/views/statistics/index.js
new file mode 100644
index 00000000..2ed5d2d9
--- /dev/null
+++ b/src/views/statistics/index.js
@@ -0,0 +1,4 @@
+import { StatisticsView } from "./StatisticsView";
+
+export { StatisticsView };
+export default StatisticsView;
-- 
GitLab