From 8aabec5d7a033611e4af7903db27955cfd0e0331 Mon Sep 17 00:00:00 2001
From: Alexander Madsen <alexander.madsen@ess.eu>
Date: Tue, 14 Feb 2023 11:38:52 +0000
Subject: [PATCH] ICSHWI-11747 - Improve file structure

---
 package-lock.json                             | 48 +++++++++----------
 .../AdministerUndeployment.js                 | 14 +++---
 .../IOC/AdministerUndeployment/index.js       |  4 ++
 .../IOC/{ => AlertMessages}/AlertMessages.js  |  2 +-
 src/components/IOC/AlertMessages/index.js     |  4 ++
 .../{ => ChangeHostAdmin}/ChangeHostAdmin.js  | 14 +++---
 src/components/IOC/ChangeHostAdmin/index.js   |  4 ++
 .../IOC/{ => CreateIOC}/CreateIOC.js          |  2 +-
 src/components/IOC/CreateIOC/index.js         |  4 ++
 .../IOC/{ => DeployIOC}/DeployIOC.js          |  4 +-
 src/components/IOC/DeployIOC/index.js         |  4 ++
 .../IOC/{ => GitRefLink}/GitRefLink.js        |  0
 src/components/IOC/GitRefLink/index.js        |  4 ++
 src/components/IOC/{ => IOCAdmin}/IOCAdmin.js |  8 ++--
 src/components/IOC/IOCAdmin/index.js          |  4 ++
 .../IOC/{ => IOCAsyncList}/IOCAsyncList.js    |  6 +--
 src/components/IOC/IOCAsyncList/index.js      |  4 ++
 src/components/IOC/{ => IOCBadge}/IOCBadge.js |  4 +-
 src/components/IOC/IOCBadge/index.js          |  4 ++
 src/components/IOC/IOCCommandTable.js         |  0
 .../{ => IOCCreateDialog}/IOCCreateDialog.js  |  4 +-
 src/components/IOC/IOCCreateDialog/index.js   |  4 ++
 .../IOC/{ => IOCDelete}/IOCDelete.js          | 12 ++---
 src/components/IOC/IOCDelete/index.js         |  4 ++
 .../{ => IOCDeployDialog}/IOCDeployDialog.js  |  6 +--
 src/components/IOC/IOCDeployDialog/index.js   |  4 ++
 .../{ => IOCDetailAdmin}/IOCDetailAdmin.js    | 12 ++---
 src/components/IOC/IOCDetailAdmin/index.js    |  4 ++
 .../IOCDetailFetcher.js                       |  2 +-
 src/components/IOC/IOCDetailFetcher/index.js  |  4 ++
 .../IOC/{ => IOCDetails}/IOCDetails.js        |  8 ++--
 src/components/IOC/IOCDetails/index.js        |  4 ++
 src/components/IOC/{ => IOCIcons}/IOCIcons.js |  0
 src/components/IOC/IOCIcons/index.js          |  3 ++
 src/components/IOC/{ => IOCList}/IOCList.js   |  2 +-
 src/components/IOC/IOCList/index.js           |  4 ++
 .../IOC/{ => IOCLiveStatus}/IOCLiveStatus.js  | 23 ++++-----
 .../{ => IOCLiveStatus}/IOCLiveStatus.spec.js |  6 +--
 src/components/IOC/IOCLiveStatus/index.js     |  4 ++
 .../IOC/{ => IOCManage}/IOCManage.js          | 27 +++++------
 src/components/IOC/IOCManage/index.js         |  4 ++
 .../IOC/{ => IOCService}/IOCService.js        | 16 +++----
 src/components/IOC/IOCService/index.js        |  4 ++
 src/components/IOC/{ => IOCTable}/IOCTable.js |  8 ++--
 .../IOC/{ => IOCTable}/IOCTable.spec.js       |  2 +-
 src/components/IOC/IOCTable/index.js          |  4 ++
 .../IOCUndeployDialog.js                      |  0
 src/components/IOC/IOCUndeployDialog/index.js |  4 ++
 .../IOC/{ => UndeployIOC}/UndeployIOC.js      |  4 +-
 src/components/IOC/UndeployIOC/index.js       |  4 ++
 .../auth/{ => AccessControl}/AccessControl.js |  4 +-
 src/components/auth/AccessControl/index.js    |  4 ++
 .../auth/{ => AccessDenied}/AccessDenied.js   |  4 +-
 src/components/auth/AccessDenied/index.js     |  4 ++
 src/components/auth/{ => Login}/Login.js      |  0
 src/components/auth/Login/index.js            |  3 ++
 .../auth/{ => TokenRenew}/TokenRenew.js       |  4 +-
 .../auth/{ => TokenRenew}/TokenRenew.spec.js  |  4 +-
 src/components/auth/TokenRenew/index.js       |  4 ++
 .../{ => ActiveIOCChart}/ActiveIOCChart.js    |  4 +-
 .../statistics/ActiveIOCChart/index.js        |  4 ++
 .../DeploymentLineChart.js                    |  4 +-
 .../statistics/DeploymentLineChart/index.js   |  4 ++
 .../{ => HostStatistics}/HostStatistics.js    |  4 +-
 .../statistics/HostStatistics/index.js        |  4 ++
 .../{ => IOCStatistics}/IOCStatistics.js      |  4 +-
 .../statistics/IOCStatistics/index.js         |  4 ++
 .../{ => IocCountStat}/IocCountStat.js        |  0
 .../statistics/IocCountStat/index.js          |  4 ++
 69 files changed, 256 insertions(+), 136 deletions(-)
 rename src/components/IOC/{ => AdministerUndeployment}/AdministerUndeployment.js (90%)
 create mode 100644 src/components/IOC/AdministerUndeployment/index.js
 rename src/components/IOC/{ => AlertMessages}/AlertMessages.js (96%)
 create mode 100644 src/components/IOC/AlertMessages/index.js
 rename src/components/IOC/{ => ChangeHostAdmin}/ChangeHostAdmin.js (92%)
 create mode 100644 src/components/IOC/ChangeHostAdmin/index.js
 rename src/components/IOC/{ => CreateIOC}/CreateIOC.js (93%)
 create mode 100644 src/components/IOC/CreateIOC/index.js
 rename src/components/IOC/{ => DeployIOC}/DeployIOC.js (87%)
 create mode 100644 src/components/IOC/DeployIOC/index.js
 rename src/components/IOC/{ => GitRefLink}/GitRefLink.js (100%)
 create mode 100644 src/components/IOC/GitRefLink/index.js
 rename src/components/IOC/{ => IOCAdmin}/IOCAdmin.js (76%)
 create mode 100644 src/components/IOC/IOCAdmin/index.js
 rename src/components/IOC/{ => IOCAsyncList}/IOCAsyncList.js (86%)
 create mode 100644 src/components/IOC/IOCAsyncList/index.js
 rename src/components/IOC/{ => IOCBadge}/IOCBadge.js (70%)
 create mode 100644 src/components/IOC/IOCBadge/index.js
 delete mode 100644 src/components/IOC/IOCCommandTable.js
 rename src/components/IOC/{ => IOCCreateDialog}/IOCCreateDialog.js (96%)
 create mode 100644 src/components/IOC/IOCCreateDialog/index.js
 rename src/components/IOC/{ => IOCDelete}/IOCDelete.js (91%)
 create mode 100644 src/components/IOC/IOCDelete/index.js
 rename src/components/IOC/{ => IOCDeployDialog}/IOCDeployDialog.js (96%)
 create mode 100644 src/components/IOC/IOCDeployDialog/index.js
 rename src/components/IOC/{ => IOCDetailAdmin}/IOCDetailAdmin.js (95%)
 create mode 100644 src/components/IOC/IOCDetailAdmin/index.js
 rename src/components/IOC/{ => IOCDetailFetcher}/IOCDetailFetcher.js (92%)
 create mode 100644 src/components/IOC/IOCDetailFetcher/index.js
 rename src/components/IOC/{ => IOCDetails}/IOCDetails.js (86%)
 create mode 100644 src/components/IOC/IOCDetails/index.js
 rename src/components/IOC/{ => IOCIcons}/IOCIcons.js (100%)
 create mode 100644 src/components/IOC/IOCIcons/index.js
 rename src/components/IOC/{ => IOCList}/IOCList.js (94%)
 create mode 100644 src/components/IOC/IOCList/index.js
 rename src/components/IOC/{ => IOCLiveStatus}/IOCLiveStatus.js (86%)
 rename src/components/IOC/{ => IOCLiveStatus}/IOCLiveStatus.spec.js (90%)
 create mode 100644 src/components/IOC/IOCLiveStatus/index.js
 rename src/components/IOC/{ => IOCManage}/IOCManage.js (91%)
 create mode 100644 src/components/IOC/IOCManage/index.js
 rename src/components/IOC/{ => IOCService}/IOCService.js (92%)
 create mode 100644 src/components/IOC/IOCService/index.js
 rename src/components/IOC/{ => IOCTable}/IOCTable.js (96%)
 rename src/components/IOC/{ => IOCTable}/IOCTable.spec.js (95%)
 create mode 100644 src/components/IOC/IOCTable/index.js
 rename src/components/IOC/{ => IOCUndeployDialog}/IOCUndeployDialog.js (100%)
 create mode 100644 src/components/IOC/IOCUndeployDialog/index.js
 rename src/components/IOC/{ => UndeployIOC}/UndeployIOC.js (86%)
 create mode 100644 src/components/IOC/UndeployIOC/index.js
 rename src/components/auth/{ => AccessControl}/AccessControl.js (90%)
 create mode 100644 src/components/auth/AccessControl/index.js
 rename src/components/auth/{ => AccessDenied}/AccessDenied.js (92%)
 create mode 100644 src/components/auth/AccessDenied/index.js
 rename src/components/auth/{ => Login}/Login.js (100%)
 create mode 100644 src/components/auth/Login/index.js
 rename src/components/auth/{ => TokenRenew}/TokenRenew.js (76%)
 rename src/components/auth/{ => TokenRenew}/TokenRenew.spec.js (89%)
 create mode 100644 src/components/auth/TokenRenew/index.js
 rename src/components/statistics/{ => ActiveIOCChart}/ActiveIOCChart.js (95%)
 create mode 100644 src/components/statistics/ActiveIOCChart/index.js
 rename src/components/statistics/{ => DeploymentLineChart}/DeploymentLineChart.js (94%)
 create mode 100644 src/components/statistics/DeploymentLineChart/index.js
 rename src/components/statistics/{ => HostStatistics}/HostStatistics.js (84%)
 create mode 100644 src/components/statistics/HostStatistics/index.js
 rename src/components/statistics/{ => IOCStatistics}/IOCStatistics.js (83%)
 create mode 100644 src/components/statistics/IOCStatistics/index.js
 rename src/components/statistics/{ => IocCountStat}/IocCountStat.js (100%)
 create mode 100644 src/components/statistics/IocCountStat/index.js

diff --git a/package-lock.json b/package-lock.json
index 424d64e2..5047befa 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4046,9 +4046,9 @@
       "dev": true
     },
     "node_modules/eslint": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz",
-      "integrity": "sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==",
+      "version": "8.34.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz",
+      "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==",
       "dev": true,
       "dependencies": {
         "ignore": "^5.2.0",
@@ -9890,9 +9890,9 @@
       "dev": true
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.294",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.294.tgz",
-      "integrity": "sha512-PuHZB3jEN7D8WPPjLmBQAsqQz8tWHlkkB4n0E2OYw8RwVdmBYV0Wn+rUFH8JqYyIRb4HQhhedgxlZL163wqLrQ==",
+      "version": "1.4.295",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz",
+      "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==",
       "dev": true
     },
     "node_modules/@babel/parser": {
@@ -21025,9 +21025,9 @@
       }
     },
     "node_modules/define-properties": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
-      "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+      "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
       "dependencies": {
         "has-property-descriptors": "^1.0.0",
         "object-keys": "^1.1.1"
@@ -37660,9 +37660,9 @@
       }
     },
     "node_modules/ci-info": {
-      "version": "3.7.1",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz",
-      "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==",
+      "version": "3.8.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
+      "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
       "funding": [
         {
           "type": "github",
@@ -52672,9 +52672,9 @@
       "dev": true
     },
     "ci-info": {
-      "version": "3.7.1",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz",
-      "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w=="
+      "version": "3.8.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
+      "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw=="
     },
     "cipher-base": {
       "version": "1.0.4",
@@ -54794,9 +54794,9 @@
       "dev": true
     },
     "define-properties": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
-      "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+      "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
       "requires": {
         "has-property-descriptors": "^1.0.0",
         "object-keys": "^1.1.1"
@@ -55335,9 +55335,9 @@
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.4.294",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.294.tgz",
-      "integrity": "sha512-PuHZB3jEN7D8WPPjLmBQAsqQz8tWHlkkB4n0E2OYw8RwVdmBYV0Wn+rUFH8JqYyIRb4HQhhedgxlZL163wqLrQ==",
+      "version": "1.4.295",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz",
+      "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==",
       "dev": true
     },
     "elliptic": {
@@ -55640,9 +55640,9 @@
       }
     },
     "eslint": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz",
-      "integrity": "sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==",
+      "version": "8.34.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz",
+      "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==",
       "dev": true,
       "requires": {
         "@eslint/eslintrc": "^1.4.1",
diff --git a/src/components/IOC/AdministerUndeployment.js b/src/components/IOC/AdministerUndeployment/AdministerUndeployment.js
similarity index 90%
rename from src/components/IOC/AdministerUndeployment.js
rename to src/components/IOC/AdministerUndeployment/AdministerUndeployment.js
index 96696090..b7903d18 100644
--- a/src/components/IOC/AdministerUndeployment.js
+++ b/src/components/IOC/AdministerUndeployment/AdministerUndeployment.js
@@ -2,14 +2,14 @@ import React, { useState, useRef, useEffect } from "react";
 import { useNavigate } from "react-router-dom";
 import { makeStyles } from "@material-ui/core/styles";
 import { Button, Typography, Grid, Tooltip } from "@material-ui/core";
-import { theme } from "../../style/Theme";
-import { useUndeployInDb } from "../../api/SwaggerApi";
-import { SimpleAccordion } from "../common/Accordion/SimpleAccordion";
-import { ConfirmationDialog } from "../dialog/ConfirmationDialog";
-import { SimpleModal } from "../../components/common/SimpleModal/SimpleModal";
+import { theme } from "../../../style/Theme";
+import { useUndeployInDb } from "../../../api/SwaggerApi";
+import { SimpleAccordion } from "../../common/Accordion/SimpleAccordion";
+import { ConfirmationDialog } from "../../dialog/ConfirmationDialog";
+import { SimpleModal } from "../../common/SimpleModal/SimpleModal";
 import { Alert } from "@material-ui/lab";
-import AccessControl from "../auth/AccessControl";
-import { IocActiveDeployment } from "../../api/DataTypes";
+import AccessControl from "../../auth/AccessControl";
+import { IocActiveDeployment } from "../../../api/DataTypes";
 
 const useStyles = makeStyles({
   undeployButton: {
diff --git a/src/components/IOC/AdministerUndeployment/index.js b/src/components/IOC/AdministerUndeployment/index.js
new file mode 100644
index 00000000..fe2a4e6b
--- /dev/null
+++ b/src/components/IOC/AdministerUndeployment/index.js
@@ -0,0 +1,4 @@
+import AdministerUndeployment from "./AdministerUndeployment";
+
+export { AdministerUndeployment };
+export default AdministerUndeployment;
diff --git a/src/components/IOC/AlertMessages.js b/src/components/IOC/AlertMessages/AlertMessages.js
similarity index 96%
rename from src/components/IOC/AlertMessages.js
rename to src/components/IOC/AlertMessages/AlertMessages.js
index a4aaf67e..1fc2c820 100644
--- a/src/components/IOC/AlertMessages.js
+++ b/src/components/IOC/AlertMessages/AlertMessages.js
@@ -1,7 +1,7 @@
 import React from "react";
 import { Button, Grid, makeStyles } from "@material-ui/core";
 import { Alert } from "@material-ui/lab";
-import { theme } from "../../style/Theme";
+import { theme } from "../../../style/Theme";
 
 const useStyles = makeStyles((theme) => ({
   infoBadge: {
diff --git a/src/components/IOC/AlertMessages/index.js b/src/components/IOC/AlertMessages/index.js
new file mode 100644
index 00000000..67da3975
--- /dev/null
+++ b/src/components/IOC/AlertMessages/index.js
@@ -0,0 +1,4 @@
+import AlertMessages from "./AlertMessages";
+
+export { AlertMessages };
+export default AlertMessages;
diff --git a/src/components/IOC/ChangeHostAdmin.js b/src/components/IOC/ChangeHostAdmin/ChangeHostAdmin.js
similarity index 92%
rename from src/components/IOC/ChangeHostAdmin.js
rename to src/components/IOC/ChangeHostAdmin/ChangeHostAdmin.js
index a8960522..d3ed7f4b 100644
--- a/src/components/IOC/ChangeHostAdmin.js
+++ b/src/components/IOC/ChangeHostAdmin/ChangeHostAdmin.js
@@ -1,6 +1,6 @@
 import React, { useState, useRef, useEffect, useCallback } from "react";
-import AccessControl from "../auth/AccessControl";
-import { SimpleAccordion } from "../common/Accordion/SimpleAccordion";
+import AccessControl from "../../auth/AccessControl";
+import { SimpleAccordion } from "../../common/Accordion/SimpleAccordion";
 import {
   Button,
   Typography,
@@ -8,15 +8,15 @@ import {
   Tooltip,
   TextField
 } from "@material-ui/core";
-import { SimpleModal } from "../../components/common/SimpleModal/SimpleModal";
-import { ConfirmationDialog } from "../dialog/ConfirmationDialog";
+import { SimpleModal } from "../../common/SimpleModal/SimpleModal";
+import { ConfirmationDialog } from "../../dialog/ConfirmationDialog";
 import {
   useUpdateActiveDeploymentHost,
   useCSEntrySearch
-} from "../../api/SwaggerApi";
+} from "../../../api/SwaggerApi";
 import { Alert, Autocomplete } from "@material-ui/lab";
-import { useTypingTimer } from "../common/SearchBoxFilter/TypingTimer";
-import { transformHostQuery } from "../common/Helper";
+import { useTypingTimer } from "../../common/SearchBoxFilter/TypingTimer";
+import { transformHostQuery } from "../../common/Helper";
 
 export default function ChangeHostAdmin({
   ioc,
diff --git a/src/components/IOC/ChangeHostAdmin/index.js b/src/components/IOC/ChangeHostAdmin/index.js
new file mode 100644
index 00000000..82c5de12
--- /dev/null
+++ b/src/components/IOC/ChangeHostAdmin/index.js
@@ -0,0 +1,4 @@
+import ChangeHostAdmin from "./ChangeHostAdmin";
+
+export { ChangeHostAdmin };
+export default ChangeHostAdmin;
diff --git a/src/components/IOC/CreateIOC.js b/src/components/IOC/CreateIOC/CreateIOC.js
similarity index 93%
rename from src/components/IOC/CreateIOC.js
rename to src/components/IOC/CreateIOC/CreateIOC.js
index 21431b41..c1e04fdc 100644
--- a/src/components/IOC/CreateIOC.js
+++ b/src/components/IOC/CreateIOC/CreateIOC.js
@@ -1,6 +1,6 @@
 import React, { useState } from "react";
 import { Navigate } from "react-router-dom";
-import { IOCCreateDialog } from "./IOCCreateDialog";
+import { IOCCreateDialog } from "../IOCCreateDialog";
 
 // Process component
 export function CreateIOC({ open, setOpen, submitCallback, hook }) {
diff --git a/src/components/IOC/CreateIOC/index.js b/src/components/IOC/CreateIOC/index.js
new file mode 100644
index 00000000..dc190164
--- /dev/null
+++ b/src/components/IOC/CreateIOC/index.js
@@ -0,0 +1,4 @@
+import { CreateIOC } from "./CreateIOC";
+
+export { CreateIOC };
+export default CreateIOC;
diff --git a/src/components/IOC/DeployIOC.js b/src/components/IOC/DeployIOC/DeployIOC.js
similarity index 87%
rename from src/components/IOC/DeployIOC.js
rename to src/components/IOC/DeployIOC/DeployIOC.js
index 9e840432..a892251a 100644
--- a/src/components/IOC/DeployIOC.js
+++ b/src/components/IOC/DeployIOC/DeployIOC.js
@@ -1,7 +1,7 @@
 import React, { useContext, useState } from "react";
 import { Navigate } from "react-router-dom";
-import { IOCDeployDialog } from "./IOCDeployDialog";
-import { notificationContext } from "../../components/common/notification/Notifications";
+import { IOCDeployDialog } from "../IOCDeployDialog";
+import { notificationContext } from "../../common/notification/Notifications";
 
 // Process component
 export function DeployIOC({
diff --git a/src/components/IOC/DeployIOC/index.js b/src/components/IOC/DeployIOC/index.js
new file mode 100644
index 00000000..2f2c019c
--- /dev/null
+++ b/src/components/IOC/DeployIOC/index.js
@@ -0,0 +1,4 @@
+import { DeployIOC } from "./DeployIOC";
+
+export { DeployIOC };
+export default DeployIOC;
diff --git a/src/components/IOC/GitRefLink.js b/src/components/IOC/GitRefLink/GitRefLink.js
similarity index 100%
rename from src/components/IOC/GitRefLink.js
rename to src/components/IOC/GitRefLink/GitRefLink.js
diff --git a/src/components/IOC/GitRefLink/index.js b/src/components/IOC/GitRefLink/index.js
new file mode 100644
index 00000000..8ed721b3
--- /dev/null
+++ b/src/components/IOC/GitRefLink/index.js
@@ -0,0 +1,4 @@
+import GitRefLink from "./GitRefLink";
+
+export { GitRefLink };
+export default GitRefLink;
diff --git a/src/components/IOC/IOCAdmin.js b/src/components/IOC/IOCAdmin/IOCAdmin.js
similarity index 76%
rename from src/components/IOC/IOCAdmin.js
rename to src/components/IOC/IOCAdmin/IOCAdmin.js
index 9d981f51..3d3a967e 100644
--- a/src/components/IOC/IOCAdmin.js
+++ b/src/components/IOC/IOCAdmin/IOCAdmin.js
@@ -1,8 +1,8 @@
 import React from "react";
-import AdministerUndeployment from "./AdministerUndeployment";
-import IOCDelete from "./IOCDelete";
-import IOCDetailAdmin from "./IOCDetailAdmin";
-import ChangeHostAdmin from "./ChangeHostAdmin";
+import AdministerUndeployment from "../AdministerUndeployment";
+import IOCDelete from "../IOCDelete";
+import IOCDetailAdmin from "../IOCDetailAdmin";
+import ChangeHostAdmin from "../ChangeHostAdmin";
 
 export default function IOCAdmin({ ioc, getIOC, resetTab, buttonDisabled }) {
   return (
diff --git a/src/components/IOC/IOCAdmin/index.js b/src/components/IOC/IOCAdmin/index.js
new file mode 100644
index 00000000..86b22226
--- /dev/null
+++ b/src/components/IOC/IOCAdmin/index.js
@@ -0,0 +1,4 @@
+import IOCAdmin from "./IOCAdmin";
+
+export { IOCAdmin };
+export default IOCAdmin;
diff --git a/src/components/IOC/IOCAsyncList.js b/src/components/IOC/IOCAsyncList/IOCAsyncList.js
similarity index 86%
rename from src/components/IOC/IOCAsyncList.js
rename to src/components/IOC/IOCAsyncList/IOCAsyncList.js
index 0ec887ff..a7a6c293 100644
--- a/src/components/IOC/IOCAsyncList.js
+++ b/src/components/IOC/IOCAsyncList/IOCAsyncList.js
@@ -1,8 +1,8 @@
 import React from "react";
 import { Hidden } from "@material-ui/core";
-import { IOCDetailFetcher } from "./IOCDetailFetcher";
-import { IOCList } from "./IOCList";
-import { IOCTable } from "./IOCTable";
+import { IOCDetailFetcher } from "../IOCDetailFetcher";
+import { IOCList } from "../IOCList";
+import { IOCTable } from "../IOCTable";
 
 export function IOCAsyncList({
   iocs,
diff --git a/src/components/IOC/IOCAsyncList/index.js b/src/components/IOC/IOCAsyncList/index.js
new file mode 100644
index 00000000..f126132a
--- /dev/null
+++ b/src/components/IOC/IOCAsyncList/index.js
@@ -0,0 +1,4 @@
+import { IOCAsyncList } from "./IOCAsyncList";
+
+export { IOCAsyncList };
+export default IOCAsyncList;
diff --git a/src/components/IOC/IOCBadge.js b/src/components/IOC/IOCBadge/IOCBadge.js
similarity index 70%
rename from src/components/IOC/IOCBadge.js
rename to src/components/IOC/IOCBadge/IOCBadge.js
index 96e48bac..83d6c39e 100644
--- a/src/components/IOC/IOCBadge.js
+++ b/src/components/IOC/IOCBadge/IOCBadge.js
@@ -1,6 +1,6 @@
 import React from "react";
-import { IconBadge } from "../common/Badge/IconBadge";
-import { IOCStatusIcon } from "./IOCIcons";
+import { IconBadge } from "../../common/Badge/IconBadge";
+import { IOCStatusIcon } from "../IOCIcons";
 
 export function IOCBadge({ ioc }) {
   return (
diff --git a/src/components/IOC/IOCBadge/index.js b/src/components/IOC/IOCBadge/index.js
new file mode 100644
index 00000000..712570a3
--- /dev/null
+++ b/src/components/IOC/IOCBadge/index.js
@@ -0,0 +1,4 @@
+import { IOCBadge } from "./IOCBadge";
+
+export { IOCBadge };
+export default IOCBadge;
diff --git a/src/components/IOC/IOCCommandTable.js b/src/components/IOC/IOCCommandTable.js
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/components/IOC/IOCCreateDialog.js b/src/components/IOC/IOCCreateDialog/IOCCreateDialog.js
similarity index 96%
rename from src/components/IOC/IOCCreateDialog.js
rename to src/components/IOC/IOCCreateDialog/IOCCreateDialog.js
index 45b2a166..2b6844cb 100644
--- a/src/components/IOC/IOCCreateDialog.js
+++ b/src/components/IOC/IOCCreateDialog/IOCCreateDialog.js
@@ -9,8 +9,8 @@ import {
   makeStyles
 } from "@material-ui/core";
 import { Autocomplete, Alert } from "@material-ui/lab";
-import { useNamingNames, useAllowedGitProjects } from "../../api/SwaggerApi";
-import { useTypingTimer } from "../common/SearchBoxFilter/TypingTimer";
+import { useNamingNames, useAllowedGitProjects } from "../../../api/SwaggerApi";
+import { useTypingTimer } from "../../common/SearchBoxFilter/TypingTimer";
 
 const useStyles = makeStyles((theme) => ({
   textField: {
diff --git a/src/components/IOC/IOCCreateDialog/index.js b/src/components/IOC/IOCCreateDialog/index.js
new file mode 100644
index 00000000..c60bf549
--- /dev/null
+++ b/src/components/IOC/IOCCreateDialog/index.js
@@ -0,0 +1,4 @@
+import { IOCCreateDialog } from "./IOCCreateDialog";
+
+export { IOCCreateDialog };
+export default IOCCreateDialog;
diff --git a/src/components/IOC/IOCDelete.js b/src/components/IOC/IOCDelete/IOCDelete.js
similarity index 91%
rename from src/components/IOC/IOCDelete.js
rename to src/components/IOC/IOCDelete/IOCDelete.js
index 391592cc..85453468 100644
--- a/src/components/IOC/IOCDelete.js
+++ b/src/components/IOC/IOCDelete/IOCDelete.js
@@ -2,13 +2,13 @@ import React, { useState, useRef, useEffect } from "react";
 import { useNavigate } from "react-router-dom";
 import { makeStyles } from "@material-ui/core/styles";
 import { Button, Typography, Grid, Tooltip } from "@material-ui/core";
-import { theme } from "../../style/Theme";
-import { useDeleteIOC } from "../../api/SwaggerApi";
-import { SimpleAccordion } from "../common/Accordion/SimpleAccordion";
-import { ConfirmationDialog } from "../dialog/ConfirmationDialog";
-import { SimpleModal } from "../../components/common/SimpleModal/SimpleModal";
+import { theme } from "../../../style/Theme";
+import { useDeleteIOC } from "../../../api/SwaggerApi";
+import { SimpleAccordion } from "../../common/Accordion/SimpleAccordion";
+import { ConfirmationDialog } from "../../dialog/ConfirmationDialog";
+import { SimpleModal } from "../../common/SimpleModal/SimpleModal";
 import { Alert } from "@material-ui/lab";
-import AccessControl from "../auth/AccessControl";
+import AccessControl from "../../auth/AccessControl";
 
 const useStyles = makeStyles({
   deleteButton: {
diff --git a/src/components/IOC/IOCDelete/index.js b/src/components/IOC/IOCDelete/index.js
new file mode 100644
index 00000000..a2d977a0
--- /dev/null
+++ b/src/components/IOC/IOCDelete/index.js
@@ -0,0 +1,4 @@
+import IOCDelete from "./IOCDelete";
+
+export { IOCDelete };
+export default IOCDelete;
diff --git a/src/components/IOC/IOCDeployDialog.js b/src/components/IOC/IOCDeployDialog/IOCDeployDialog.js
similarity index 96%
rename from src/components/IOC/IOCDeployDialog.js
rename to src/components/IOC/IOCDeployDialog/IOCDeployDialog.js
index 642bed94..a45e2aba 100644
--- a/src/components/IOC/IOCDeployDialog.js
+++ b/src/components/IOC/IOCDeployDialog/IOCDeployDialog.js
@@ -11,9 +11,9 @@ import {
   Tooltip
 } from "@material-ui/core";
 import { Autocomplete, Alert } from "@material-ui/lab";
-import { useCSEntrySearch, useTagsAndCommitIds } from "../../api/SwaggerApi";
-import { useTypingTimer } from "../common/SearchBoxFilter/TypingTimer";
-import { formatDate, transformHostQuery } from "../common/Helper";
+import { useCSEntrySearch, useTagsAndCommitIds } from "../../../api/SwaggerApi";
+import { useTypingTimer } from "../../common/SearchBoxFilter/TypingTimer";
+import { formatDate, transformHostQuery } from "../../common/Helper";
 
 const useStyles = makeStyles((theme) => ({
   textField: {
diff --git a/src/components/IOC/IOCDeployDialog/index.js b/src/components/IOC/IOCDeployDialog/index.js
new file mode 100644
index 00000000..d31b4d58
--- /dev/null
+++ b/src/components/IOC/IOCDeployDialog/index.js
@@ -0,0 +1,4 @@
+import { IOCDeployDialog } from "./IOCDeployDialog";
+
+export { IOCDeployDialog };
+export default IOCDeployDialog;
diff --git a/src/components/IOC/IOCDetailAdmin.js b/src/components/IOC/IOCDetailAdmin/IOCDetailAdmin.js
similarity index 95%
rename from src/components/IOC/IOCDetailAdmin.js
rename to src/components/IOC/IOCDetailAdmin/IOCDetailAdmin.js
index 84f95304..8ea6a51d 100644
--- a/src/components/IOC/IOCDetailAdmin.js
+++ b/src/components/IOC/IOCDetailAdmin/IOCDetailAdmin.js
@@ -1,5 +1,5 @@
 import React, { useState, useEffect, useRef, useCallback } from "react";
-import { SimpleAccordion } from "../common/Accordion/SimpleAccordion";
+import { SimpleAccordion } from "../../common/Accordion/SimpleAccordion";
 import {
   Button,
   makeStyles,
@@ -13,11 +13,11 @@ import {
   useNamingNames,
   useUpdateIoc,
   useUserNames
-} from "../../api/SwaggerApi";
-import { useTypingTimer } from "../common/SearchBoxFilter/TypingTimer";
-import { ConfirmationDialog } from "../dialog/ConfirmationDialog";
-import { SimpleModal } from "../../components/common/SimpleModal/SimpleModal";
-import AccessControl from "../../components/auth/AccessControl";
+} from "../../../api/SwaggerApi";
+import { useTypingTimer } from "../../common/SearchBoxFilter/TypingTimer";
+import { ConfirmationDialog } from "../../dialog/ConfirmationDialog";
+import { SimpleModal } from "../../common/SimpleModal/SimpleModal";
+import AccessControl from "../../auth/AccessControl";
 
 const useStyles = makeStyles((theme) => ({
   textField: {
diff --git a/src/components/IOC/IOCDetailAdmin/index.js b/src/components/IOC/IOCDetailAdmin/index.js
new file mode 100644
index 00000000..ceb065fd
--- /dev/null
+++ b/src/components/IOC/IOCDetailAdmin/index.js
@@ -0,0 +1,4 @@
+import IOCDetailAdmin from "./IOCDetailAdmin";
+
+export { IOCDetailAdmin };
+export default IOCDetailAdmin;
diff --git a/src/components/IOC/IOCDetailFetcher.js b/src/components/IOC/IOCDetailFetcher/IOCDetailFetcher.js
similarity index 92%
rename from src/components/IOC/IOCDetailFetcher.js
rename to src/components/IOC/IOCDetailFetcher/IOCDetailFetcher.js
index 67a305cd..fbf3e209 100644
--- a/src/components/IOC/IOCDetailFetcher.js
+++ b/src/components/IOC/IOCDetailFetcher/IOCDetailFetcher.js
@@ -1,5 +1,5 @@
 import { useEffect } from "react";
-import { useTagsAndCommitIds, useIocStatus } from "../../api/SwaggerApi";
+import { useTagsAndCommitIds, useIocStatus } from "../../../api/SwaggerApi";
 
 function onError(message) {
   console.warn(message);
diff --git a/src/components/IOC/IOCDetailFetcher/index.js b/src/components/IOC/IOCDetailFetcher/index.js
new file mode 100644
index 00000000..65f9c275
--- /dev/null
+++ b/src/components/IOC/IOCDetailFetcher/index.js
@@ -0,0 +1,4 @@
+import { IOCDetailFetcher } from "./IOCDetailFetcher";
+
+export { IOCDetailFetcher };
+export default IOCDetailFetcher;
diff --git a/src/components/IOC/IOCDetails.js b/src/components/IOC/IOCDetails/IOCDetails.js
similarity index 86%
rename from src/components/IOC/IOCDetails.js
rename to src/components/IOC/IOCDetails/IOCDetails.js
index 96cdaab5..556e6767 100644
--- a/src/components/IOC/IOCDetails.js
+++ b/src/components/IOC/IOCDetails/IOCDetails.js
@@ -1,9 +1,9 @@
 import { Grid, Box } from "@material-ui/core";
 import React from "react";
-import { SimpleAccordion } from "../common/Accordion/SimpleAccordion";
-import { KeyValueTable } from "../common/KeyValueTable/KeyValueTable";
-import { IOCBadge } from "./IOCBadge";
-import AccessControl from "../auth/AccessControl";
+import { SimpleAccordion } from "../../common/Accordion/SimpleAccordion";
+import { KeyValueTable } from "../../common/KeyValueTable/KeyValueTable";
+import { IOCBadge } from "../IOCBadge";
+import AccessControl from "../../auth/AccessControl";
 
 export function diff(o1, o2) {
   let diff = Object.keys(o2).reduce((diff, key) => {
diff --git a/src/components/IOC/IOCDetails/index.js b/src/components/IOC/IOCDetails/index.js
new file mode 100644
index 00000000..d057847f
--- /dev/null
+++ b/src/components/IOC/IOCDetails/index.js
@@ -0,0 +1,4 @@
+import { IOCDetails, diff } from "./IOCDetails";
+
+export { IOCDetails, diff };
+export default IOCDetails;
diff --git a/src/components/IOC/IOCIcons.js b/src/components/IOC/IOCIcons/IOCIcons.js
similarity index 100%
rename from src/components/IOC/IOCIcons.js
rename to src/components/IOC/IOCIcons/IOCIcons.js
diff --git a/src/components/IOC/IOCIcons/index.js b/src/components/IOC/IOCIcons/index.js
new file mode 100644
index 00000000..913ed4cc
--- /dev/null
+++ b/src/components/IOC/IOCIcons/index.js
@@ -0,0 +1,3 @@
+import { IOCStatusIcon, CommandTypeIcon } from "./IOCIcons";
+
+export { IOCStatusIcon, CommandTypeIcon };
diff --git a/src/components/IOC/IOCList.js b/src/components/IOC/IOCList/IOCList.js
similarity index 94%
rename from src/components/IOC/IOCList.js
rename to src/components/IOC/IOCList/IOCList.js
index f83e69bc..e22da013 100644
--- a/src/components/IOC/IOCList.js
+++ b/src/components/IOC/IOCList/IOCList.js
@@ -1,7 +1,7 @@
 import React from "react";
 import { List, ListItem, Paper } from "@material-ui/core";
 import { Link } from "react-router-dom";
-import { IOCBadge } from "./IOCBadge";
+import { IOCBadge } from "../IOCBadge";
 
 export function IOCListItem({ ioc }) {
   return (
diff --git a/src/components/IOC/IOCList/index.js b/src/components/IOC/IOCList/index.js
new file mode 100644
index 00000000..ee0d0dbd
--- /dev/null
+++ b/src/components/IOC/IOCList/index.js
@@ -0,0 +1,4 @@
+import { IOCList, IOCListItem } from "./IOCList";
+
+export { IOCList, IOCListItem };
+export default IOCList;
diff --git a/src/components/IOC/IOCLiveStatus.js b/src/components/IOC/IOCLiveStatus/IOCLiveStatus.js
similarity index 86%
rename from src/components/IOC/IOCLiveStatus.js
rename to src/components/IOC/IOCLiveStatus/IOCLiveStatus.js
index 948bc2e0..8527e811 100644
--- a/src/components/IOC/IOCLiveStatus.js
+++ b/src/components/IOC/IOCLiveStatus/IOCLiveStatus.js
@@ -1,20 +1,17 @@
 import React, { useCallback } from "react";
 import { Typography, makeStyles, Link as MuiLink } from "@material-ui/core";
-import { SimpleAccordion } from "../common/Accordion/SimpleAccordion";
-import { IOCDetails } from "./IOCDetails";
+import { SimpleAccordion } from "../../common/Accordion/SimpleAccordion";
+import { IOCDetails } from "../IOCDetails";
 import { Link as ReactRouterLink } from "react-router-dom";
-import { LokiContainer } from "../common/Loki/LokiContainer";
-import { RecordSearch } from "../records/RecordSearch";
-import GitRefLink from "./GitRefLink";
-import AlertMessages from "./AlertMessages";
-import AccessControl from "../../components/auth/AccessControl";
-import { IocActiveDeployment } from "../../api/DataTypes";
-import { theme } from "../../style/Theme";
+import { LokiContainer } from "../../common/Loki/LokiContainer";
+import { RecordSearch } from "../../records/RecordSearch";
+import GitRefLink from "../GitRefLink";
+import AlertMessages from "../AlertMessages";
+import AccessControl from "../../auth/AccessControl";
+import { IocActiveDeployment } from "../../../api/DataTypes";
+import { theme } from "../../../style/Theme";
 import useUrlState from "@ahooksjs/use-url-state";
-import {
-  serialize,
-  deserialize
-} from "../../components/common/URLState/URLState";
+import { serialize, deserialize } from "../../common/URLState/URLState";
 
 const useStyles = makeStyles((theme) => ({
   iocNotDeployed: {
diff --git a/src/components/IOC/IOCLiveStatus.spec.js b/src/components/IOC/IOCLiveStatus/IOCLiveStatus.spec.js
similarity index 90%
rename from src/components/IOC/IOCLiveStatus.spec.js
rename to src/components/IOC/IOCLiveStatus/IOCLiveStatus.spec.js
index d668f45b..3cc3a4b3 100644
--- a/src/components/IOC/IOCLiveStatus.spec.js
+++ b/src/components/IOC/IOCLiveStatus/IOCLiveStatus.spec.js
@@ -1,8 +1,8 @@
 import { mount } from "@cypress/react";
 import React from "react";
-import { useIOC } from "../../api/SwaggerApi";
-import { AppHarness } from "../../mocks/AppHarness";
-import { IOCLiveStatus } from "./IOCLiveStatus";
+import { useIOC } from "../../../api/SwaggerApi";
+import { AppHarness } from "../../../mocks/AppHarness";
+import { IOCLiveStatus } from ".";
 
 function mountIntoHarness(children) {
   mount(<AppHarness>{children}</AppHarness>);
diff --git a/src/components/IOC/IOCLiveStatus/index.js b/src/components/IOC/IOCLiveStatus/index.js
new file mode 100644
index 00000000..3cf42dcd
--- /dev/null
+++ b/src/components/IOC/IOCLiveStatus/index.js
@@ -0,0 +1,4 @@
+import { IOCLiveStatus } from "./IOCLiveStatus";
+
+export { IOCLiveStatus };
+export default IOCLiveStatus;
diff --git a/src/components/IOC/IOCManage.js b/src/components/IOC/IOCManage/IOCManage.js
similarity index 91%
rename from src/components/IOC/IOCManage.js
rename to src/components/IOC/IOCManage/IOCManage.js
index 090f8257..583c3939 100644
--- a/src/components/IOC/IOCManage.js
+++ b/src/components/IOC/IOCManage/IOCManage.js
@@ -5,27 +5,24 @@ import {
   Typography
 } from "@material-ui/core";
 import React, { useState, useEffect, useContext, useCallback } from "react";
-import { IOCDetails } from "../../components/IOC/IOCDetails";
-import { DeployIOC } from "../../components/IOC/DeployIOC";
-import { UndeployIOC } from "../../components/IOC/UndeployIOC";
-import { SimpleModal } from "../../components/common/SimpleModal/SimpleModal";
+import { IOCDetails } from "../IOCDetails";
+import { DeployIOC } from "../DeployIOC";
+import { UndeployIOC } from "../UndeployIOC";
+import { SimpleModal } from "../../common/SimpleModal/SimpleModal";
 import {
   useUpdateAndDeployIoc,
   useCreateUndeployment,
   useJobById,
   userContext
-} from "../../api/SwaggerApi";
-import AlertMessages from "./AlertMessages";
-import { SimpleAccordion } from "../common/Accordion/SimpleAccordion";
-import AccessControl from "../auth/AccessControl";
-import { JobAsyncList } from "../Job/JobAsyncList";
-import { DeploymentStatus } from "../../api/DataTypes";
-import { IOCService } from "./IOCService";
+} from "../../../api/SwaggerApi";
+import AlertMessages from "../AlertMessages";
+import { SimpleAccordion } from "../../common/Accordion/SimpleAccordion";
+import AccessControl from "../../auth/AccessControl";
+import { JobAsyncList } from "../../Job/JobAsyncList";
+import { DeploymentStatus } from "../../../api/DataTypes";
+import { IOCService } from "../IOCService";
 import useUrlState from "@ahooksjs/use-url-state";
-import {
-  serialize,
-  deserialize
-} from "../../components/common/URLState/URLState";
+import { serialize, deserialize } from "../../common/URLState/URLState";
 
 export function IOCManage({
   ioc,
diff --git a/src/components/IOC/IOCManage/index.js b/src/components/IOC/IOCManage/index.js
new file mode 100644
index 00000000..b634e401
--- /dev/null
+++ b/src/components/IOC/IOCManage/index.js
@@ -0,0 +1,4 @@
+import { IOCManage } from "./IOCManage";
+
+export { IOCManage };
+export default IOCManage;
diff --git a/src/components/IOC/IOCService.js b/src/components/IOC/IOCService/IOCService.js
similarity index 92%
rename from src/components/IOC/IOCService.js
rename to src/components/IOC/IOCService/IOCService.js
index 7a582a95..a0ec2fd2 100644
--- a/src/components/IOC/IOCService.js
+++ b/src/components/IOC/IOCService/IOCService.js
@@ -7,15 +7,15 @@ import {
 } from "@material-ui/core";
 import { makeStyles } from "@material-ui/core/styles";
 import React, { useState, useEffect, useRef, useContext } from "react";
-import { useStartIOC, useStopIOC } from "../../api/SwaggerApi";
-import { SimpleModal } from "../../components/common/SimpleModal/SimpleModal";
-import { ConfirmationDialog } from "../dialog/ConfirmationDialog";
-import { notificationContext } from "../../components/common/notification/Notifications";
+import { useStartIOC, useStopIOC } from "../../../api/SwaggerApi";
+import { SimpleModal } from "../../common/SimpleModal/SimpleModal";
+import { ConfirmationDialog } from "../../dialog/ConfirmationDialog";
+import { notificationContext } from "../../common/notification/Notifications";
 import { Alert } from "@material-ui/lab";
-import { theme } from "../../style/Theme";
-import { initRequestParams } from "../common/Helper";
-import AccessControl from "../auth/AccessControl";
-import { essColors } from "../../style/Palette";
+import { theme } from "../../../style/Theme";
+import { initRequestParams } from "../../common/Helper";
+import AccessControl from "../../auth/AccessControl";
+import { essColors } from "../../../style/Palette";
 import { useNavigate } from "react-router-dom";
 
 const useStyles = makeStyles({
diff --git a/src/components/IOC/IOCService/index.js b/src/components/IOC/IOCService/index.js
new file mode 100644
index 00000000..809b8cc5
--- /dev/null
+++ b/src/components/IOC/IOCService/index.js
@@ -0,0 +1,4 @@
+import { IOCService } from "./IOCService";
+
+export { IOCService };
+export default IOCService;
diff --git a/src/components/IOC/IOCTable.js b/src/components/IOC/IOCTable/IOCTable.js
similarity index 96%
rename from src/components/IOC/IOCTable.js
rename to src/components/IOC/IOCTable/IOCTable.js
index 0a93a286..25a7e516 100644
--- a/src/components/IOC/IOCTable.js
+++ b/src/components/IOC/IOCTable/IOCTable.js
@@ -1,9 +1,9 @@
 import React, { useCallback } from "react";
-import { CustomTable } from "../common/table/CustomTable";
+import { CustomTable } from "../../common/table/CustomTable";
 import { Grid, Tooltip, Typography } from "@material-ui/core";
-import { IOCStatusIcon } from "./IOCIcons";
-import { noWrapText } from "../common/Helper";
-import { useRedirect } from "../../hooks/Redirect";
+import { IOCStatusIcon } from "../IOCIcons";
+import { noWrapText } from "../../common/Helper";
+import { useRedirect } from "../../../hooks/Redirect";
 
 const ownIocsColumns = [
   { id: "status", label: "Status", width: "8ch", textAlign: "center" },
diff --git a/src/components/IOC/IOCTable.spec.js b/src/components/IOC/IOCTable/IOCTable.spec.js
similarity index 95%
rename from src/components/IOC/IOCTable.spec.js
rename to src/components/IOC/IOCTable/IOCTable.spec.js
index fd88195c..2aef5a0c 100644
--- a/src/components/IOC/IOCTable.spec.js
+++ b/src/components/IOC/IOCTable/IOCTable.spec.js
@@ -1,7 +1,7 @@
 import React from "react";
 import { mount } from "@cypress/react";
 import { composeStories } from "@storybook/testing-react";
-import * as stories from "../../stories/components/common/IOC/IOCTable.stories";
+import * as stories from "../../../stories/components/common/IOC/IOCTable.stories";
 
 const { AfterAsync } = composeStories(stories);
 const textColumns = ["IOC name", "Host", "Network", "Maintainer", "Reference"];
diff --git a/src/components/IOC/IOCTable/index.js b/src/components/IOC/IOCTable/index.js
new file mode 100644
index 00000000..ff82ea63
--- /dev/null
+++ b/src/components/IOC/IOCTable/index.js
@@ -0,0 +1,4 @@
+import { IOCTable } from "./IOCTable";
+
+export { IOCTable };
+export default IOCTable;
diff --git a/src/components/IOC/IOCUndeployDialog.js b/src/components/IOC/IOCUndeployDialog/IOCUndeployDialog.js
similarity index 100%
rename from src/components/IOC/IOCUndeployDialog.js
rename to src/components/IOC/IOCUndeployDialog/IOCUndeployDialog.js
diff --git a/src/components/IOC/IOCUndeployDialog/index.js b/src/components/IOC/IOCUndeployDialog/index.js
new file mode 100644
index 00000000..0ee6ccb7
--- /dev/null
+++ b/src/components/IOC/IOCUndeployDialog/index.js
@@ -0,0 +1,4 @@
+import { IOCUndeployDialog } from "./IOCUndeployDialog";
+
+export { IOCUndeployDialog };
+export default IOCUndeployDialog;
diff --git a/src/components/IOC/UndeployIOC.js b/src/components/IOC/UndeployIOC/UndeployIOC.js
similarity index 86%
rename from src/components/IOC/UndeployIOC.js
rename to src/components/IOC/UndeployIOC/UndeployIOC.js
index a262a621..895fdc28 100644
--- a/src/components/IOC/UndeployIOC.js
+++ b/src/components/IOC/UndeployIOC/UndeployIOC.js
@@ -1,7 +1,7 @@
 import React, { useContext, useState } from "react";
 import { Navigate } from "react-router-dom";
-import { IOCUndeployDialog } from "./IOCUndeployDialog";
-import { notificationContext } from "../../components/common/notification/Notifications";
+import { IOCUndeployDialog } from "../IOCUndeployDialog";
+import { notificationContext } from "../../common/notification/Notifications";
 
 // Process component
 export function UndeployIOC({ open, setOpen, submitCallback, hook, ioc }) {
diff --git a/src/components/IOC/UndeployIOC/index.js b/src/components/IOC/UndeployIOC/index.js
new file mode 100644
index 00000000..8e8736d7
--- /dev/null
+++ b/src/components/IOC/UndeployIOC/index.js
@@ -0,0 +1,4 @@
+import { UndeployIOC } from "./UndeployIOC";
+
+export { UndeployIOC };
+export default UndeployIOC;
diff --git a/src/components/auth/AccessControl.js b/src/components/auth/AccessControl/AccessControl.js
similarity index 90%
rename from src/components/auth/AccessControl.js
rename to src/components/auth/AccessControl/AccessControl.js
index c62efdc9..b4c81228 100644
--- a/src/components/auth/AccessControl.js
+++ b/src/components/auth/AccessControl/AccessControl.js
@@ -1,6 +1,6 @@
 import React, { useContext } from "react";
-import { userContext } from "../../api/SwaggerApi";
-import AccessDenied from "./AccessDenied";
+import { userContext } from "../../../api/SwaggerApi";
+import AccessDenied from "../AccessDenied";
 
 const checkPermissions = (userRoles, allowedRoles) => {
   if (allowedRoles.length === 0) {
diff --git a/src/components/auth/AccessControl/index.js b/src/components/auth/AccessControl/index.js
new file mode 100644
index 00000000..1b9542b3
--- /dev/null
+++ b/src/components/auth/AccessControl/index.js
@@ -0,0 +1,4 @@
+import AccessControl from "./AccessControl";
+
+export { AccessControl };
+export default AccessControl;
diff --git a/src/components/auth/AccessDenied.js b/src/components/auth/AccessDenied/AccessDenied.js
similarity index 92%
rename from src/components/auth/AccessDenied.js
rename to src/components/auth/AccessDenied/AccessDenied.js
index c9f29548..3497d1cc 100644
--- a/src/components/auth/AccessDenied.js
+++ b/src/components/auth/AccessDenied/AccessDenied.js
@@ -9,8 +9,8 @@ import {
 } from "@material-ui/core";
 import ArrowBackIcon from "@material-ui/icons/ArrowBack";
 import { useNavigate } from "react-router-dom";
-import { RootContainer } from "../../components/common/Container/RootContainer";
-import { useRedirect } from "../../hooks/Redirect";
+import { RootContainer } from "../../common/Container/RootContainer";
+import { useRedirect } from "../../../hooks/Redirect";
 
 const useStyles = makeStyles((theme) => ({
   paper: {
diff --git a/src/components/auth/AccessDenied/index.js b/src/components/auth/AccessDenied/index.js
new file mode 100644
index 00000000..69a86dc0
--- /dev/null
+++ b/src/components/auth/AccessDenied/index.js
@@ -0,0 +1,4 @@
+import AccessDenied from "./AccessDenied";
+
+export { AccessDenied };
+export default AccessDenied;
diff --git a/src/components/auth/Login.js b/src/components/auth/Login/Login.js
similarity index 100%
rename from src/components/auth/Login.js
rename to src/components/auth/Login/Login.js
diff --git a/src/components/auth/Login/index.js b/src/components/auth/Login/index.js
new file mode 100644
index 00000000..0f501ad1
--- /dev/null
+++ b/src/components/auth/Login/index.js
@@ -0,0 +1,3 @@
+import { LoginForm, LoginDialog } from "./Login";
+
+export { LoginForm, LoginDialog };
diff --git a/src/components/auth/TokenRenew.js b/src/components/auth/TokenRenew/TokenRenew.js
similarity index 76%
rename from src/components/auth/TokenRenew.js
rename to src/components/auth/TokenRenew/TokenRenew.js
index dcb50f7f..536266fa 100644
--- a/src/components/auth/TokenRenew.js
+++ b/src/components/auth/TokenRenew/TokenRenew.js
@@ -1,6 +1,6 @@
 import { useContext, useCallback } from "react";
-import { useRenewToken, userContext } from "../../api/SwaggerApi";
-import { useSafePolling } from "../../hooks/Polling";
+import { useRenewToken, userContext } from "../../../api/SwaggerApi";
+import { useSafePolling } from "../../../hooks/Polling";
 
 export default function TokenRenew() {
   const { user } = useContext(userContext);
diff --git a/src/components/auth/TokenRenew.spec.js b/src/components/auth/TokenRenew/TokenRenew.spec.js
similarity index 89%
rename from src/components/auth/TokenRenew.spec.js
rename to src/components/auth/TokenRenew/TokenRenew.spec.js
index d4579820..f92d2d9a 100644
--- a/src/components/auth/TokenRenew.spec.js
+++ b/src/components/auth/TokenRenew/TokenRenew.spec.js
@@ -1,8 +1,8 @@
 import { mount } from "@cypress/react";
 import { SnackbarProvider } from "notistack";
 import React from "react";
-import { APIProvider, UserProvider } from "../../api/SwaggerApi";
-import TokenRenew from "./TokenRenew";
+import { APIProvider, UserProvider } from "../../../api/SwaggerApi";
+import TokenRenew from ".";
 
 function AppHarness({ children }) {
   return (
diff --git a/src/components/auth/TokenRenew/index.js b/src/components/auth/TokenRenew/index.js
new file mode 100644
index 00000000..8c42ce86
--- /dev/null
+++ b/src/components/auth/TokenRenew/index.js
@@ -0,0 +1,4 @@
+import TokenRenew from "./TokenRenew";
+
+export { TokenRenew };
+export default TokenRenew;
diff --git a/src/components/statistics/ActiveIOCChart.js b/src/components/statistics/ActiveIOCChart/ActiveIOCChart.js
similarity index 95%
rename from src/components/statistics/ActiveIOCChart.js
rename to src/components/statistics/ActiveIOCChart/ActiveIOCChart.js
index d94a7da4..33188c8a 100644
--- a/src/components/statistics/ActiveIOCChart.js
+++ b/src/components/statistics/ActiveIOCChart/ActiveIOCChart.js
@@ -1,8 +1,8 @@
 import React from "react";
-import { useCurrentlyActiveIOCs } from "../../api/SwaggerApi";
+import { useCurrentlyActiveIOCs } from "../../../api/SwaggerApi";
 import { useEffect } from "react";
 import { LinearProgress, useTheme } from "@material-ui/core";
-import { circularPalette } from "../common/Helper";
+import { circularPalette } from "../../common/Helper";
 import {
   BarChart,
   Bar,
diff --git a/src/components/statistics/ActiveIOCChart/index.js b/src/components/statistics/ActiveIOCChart/index.js
new file mode 100644
index 00000000..aea1769d
--- /dev/null
+++ b/src/components/statistics/ActiveIOCChart/index.js
@@ -0,0 +1,4 @@
+import ActiveIOCChart from "./ActiveIOCChart";
+
+export { ActiveIOCChart };
+export default ActiveIOCChart;
diff --git a/src/components/statistics/DeploymentLineChart.js b/src/components/statistics/DeploymentLineChart/DeploymentLineChart.js
similarity index 94%
rename from src/components/statistics/DeploymentLineChart.js
rename to src/components/statistics/DeploymentLineChart/DeploymentLineChart.js
index 8036cdd0..d4fcf11d 100644
--- a/src/components/statistics/DeploymentLineChart.js
+++ b/src/components/statistics/DeploymentLineChart/DeploymentLineChart.js
@@ -1,7 +1,7 @@
 import React from "react";
 import { useEffect } from "react";
-import { formatDateOnly } from "../common/Helper";
-import { circularPalette } from "../common/Helper";
+import { formatDateOnly } from "../../common/Helper";
+import { circularPalette } from "../../common/Helper";
 import { LinearProgress, useTheme } from "@material-ui/core";
 import {
   AreaChart,
diff --git a/src/components/statistics/DeploymentLineChart/index.js b/src/components/statistics/DeploymentLineChart/index.js
new file mode 100644
index 00000000..d6c7aea8
--- /dev/null
+++ b/src/components/statistics/DeploymentLineChart/index.js
@@ -0,0 +1,4 @@
+import DeploymentLineChart from "./DeploymentLineChart";
+
+export { DeploymentLineChart };
+export default DeploymentLineChart;
diff --git a/src/components/statistics/HostStatistics.js b/src/components/statistics/HostStatistics/HostStatistics.js
similarity index 84%
rename from src/components/statistics/HostStatistics.js
rename to src/components/statistics/HostStatistics/HostStatistics.js
index 97434fa6..f301627d 100644
--- a/src/components/statistics/HostStatistics.js
+++ b/src/components/statistics/HostStatistics/HostStatistics.js
@@ -1,8 +1,8 @@
 import React from "react";
 import { useEffect } from "react";
 import { LinearProgress } from "@material-ui/core";
-import { PrimeKeyValueTable } from "../common/PrimeKeyValueTable/PrimeKeyValueTable";
-import { useHostStatistics } from "../../api/SwaggerApi";
+import { PrimeKeyValueTable } from "../../common/PrimeKeyValueTable/PrimeKeyValueTable";
+import { useHostStatistics } from "../../../api/SwaggerApi";
 
 export function HostStatistics() {
   const [statistics, getStatistics] = useHostStatistics();
diff --git a/src/components/statistics/HostStatistics/index.js b/src/components/statistics/HostStatistics/index.js
new file mode 100644
index 00000000..7d0df3bd
--- /dev/null
+++ b/src/components/statistics/HostStatistics/index.js
@@ -0,0 +1,4 @@
+import { HostStatistics } from "./HostStatistics";
+
+export { HostStatistics };
+export default HostStatistics;
diff --git a/src/components/statistics/IOCStatistics.js b/src/components/statistics/IOCStatistics/IOCStatistics.js
similarity index 83%
rename from src/components/statistics/IOCStatistics.js
rename to src/components/statistics/IOCStatistics/IOCStatistics.js
index 11fed4e8..7e5144e9 100644
--- a/src/components/statistics/IOCStatistics.js
+++ b/src/components/statistics/IOCStatistics/IOCStatistics.js
@@ -1,8 +1,8 @@
 import React from "react";
 import { useEffect } from "react";
 import { LinearProgress } from "@material-ui/core";
-import { PrimeKeyValueTable } from "../common/PrimeKeyValueTable/PrimeKeyValueTable";
-import { useIocStatistics } from "../../api/SwaggerApi";
+import { PrimeKeyValueTable } from "../../common/PrimeKeyValueTable/PrimeKeyValueTable";
+import { useIocStatistics } from "../../../api/SwaggerApi";
 
 export function IOCStatistics() {
   const [statistics, getStatistics] = useIocStatistics();
diff --git a/src/components/statistics/IOCStatistics/index.js b/src/components/statistics/IOCStatistics/index.js
new file mode 100644
index 00000000..38d142bb
--- /dev/null
+++ b/src/components/statistics/IOCStatistics/index.js
@@ -0,0 +1,4 @@
+import { IOCStatistics } from "./IOCStatistics";
+
+export { IOCStatistics };
+export default IOCStatistics;
diff --git a/src/components/statistics/IocCountStat.js b/src/components/statistics/IocCountStat/IocCountStat.js
similarity index 100%
rename from src/components/statistics/IocCountStat.js
rename to src/components/statistics/IocCountStat/IocCountStat.js
diff --git a/src/components/statistics/IocCountStat/index.js b/src/components/statistics/IocCountStat/index.js
new file mode 100644
index 00000000..1ebf9635
--- /dev/null
+++ b/src/components/statistics/IocCountStat/index.js
@@ -0,0 +1,4 @@
+import IocCountStat from "./IocCountStat";
+
+export { IocCountStat };
+export default IocCountStat;
-- 
GitLab