From 5e8dbad60627efc2b47086909f26a55c8c208e21 Mon Sep 17 00:00:00 2001
From: skybrewer <sky.brewer@ess.eu>
Date: Wed, 3 Jul 2024 14:08:31 +0200
Subject: [PATCH] Add an env wrapper

---
 src/App.js                                          |  3 ++-
 src/api/DeployApi.js                                |  6 +++---
 src/components/IOC/IOCManage/IOCManage.js           |  3 ++-
 src/components/auth/AccessDenied/AccessDenied.js    |  3 ++-
 src/components/auth/TokenRenew/TokenRenew.js        |  8 ++------
 src/components/common/Helper.js                     |  3 ++-
 .../navigation/NotFoundView/NotFoundView.tsx        |  3 ++-
 src/config/env.js                                   | 13 +++++++++++++
 src/views/help/HelpView.js                          |  7 ++++---
 src/views/host/details/HostDetailsView.js           |  9 +++++----
 10 files changed, 37 insertions(+), 21 deletions(-)
 create mode 100644 src/config/env.js

diff --git a/src/App.js b/src/App.js
index e1206759..4047a6e2 100644
--- a/src/App.js
+++ b/src/App.js
@@ -27,6 +27,7 @@ import { applicationTitle } from "./components/common/Helper";
 import { CreateIOCAccessControl } from "./views/IOC/CreateIOCAccessControl";
 import { UserDetailsAccessControl } from "./views/UserPage/UserDetailsAccessControl";
 import { DeployAPIProvider } from "./api/DeployApi";
+import env from "./config/env";
 
 // setting up the application (TAB)title
 function App() {
@@ -34,7 +35,7 @@ function App() {
   useEffect(() => setTitle(applicationTitle()), [setTitle]);
 
   return (
-    <AppErrorBoundary supportHref={window.SUPPORT_URL}>
+    <AppErrorBoundary supportHref={env.SUPPORT_URL}>
       <BrowserRouter>
         <SnackbarProvider
           preventDuplicate
diff --git a/src/api/DeployApi.js b/src/api/DeployApi.js
index ac9d3b23..502f4583 100644
--- a/src/api/DeployApi.js
+++ b/src/api/DeployApi.js
@@ -6,7 +6,7 @@ import React from "react";
 import { createContext } from "react";
 import { APIProvider } from "@ess-ics/ce-ui-common";
 import { node, arrayOf, oneOfType } from "prop-types";
-
+import env from "../config/env";
 const propTypes = {
   /** Elements used as children */
   children: oneOfType([
@@ -20,8 +20,8 @@ const propTypes = {
 export const apiContext = createContext(null);
 
 const apiOptions = {
-  url: `${window.API_BASE_ENDPOINT}`,
-  server: `${window.SERVER_ADDRESS}`,
+  url: `${env.API_BASE_ENDPOINT}`,
+  server: `${env.SERVER_ADDRESS}`,
   // Workaround for https://github.com/swagger-api/swagger-js/issues/1022
   // Empty body POST requests are sent with Content-Type text/plaintext
   // instead of no content type, or application/json
diff --git a/src/components/IOC/IOCManage/IOCManage.js b/src/components/IOC/IOCManage/IOCManage.js
index 4aaefabc..568cffff 100644
--- a/src/components/IOC/IOCManage/IOCManage.js
+++ b/src/components/IOC/IOCManage/IOCManage.js
@@ -21,6 +21,7 @@ import { DeploymentStatus } from "../../../api/DataTypes";
 import { IOCService } from "../IOCService";
 import { JobTable } from "../../Job";
 import { apiContext } from "../../../api/DeployApi";
+import env from "../../../config/env";
 
 export function IOCManage({
   ioc,
@@ -81,7 +82,7 @@ export function IOCManage({
       let subset = {
         "Naming service record": (
           <ExternalLink
-            href={`${window.NAMING_ADDRESS}/devices.xhtml?i=2&deviceName=${ioc.namingName}`}
+            href={`${env.NAMING_ADDRESS}/devices.xhtml?i=2&deviceName=${ioc.namingName}`}
             label="Naming Service Record"
           >
             {ioc.namingName}
diff --git a/src/components/auth/AccessDenied/AccessDenied.js b/src/components/auth/AccessDenied/AccessDenied.js
index d043e517..bbd98029 100644
--- a/src/components/auth/AccessDenied/AccessDenied.js
+++ b/src/components/auth/AccessDenied/AccessDenied.js
@@ -1,12 +1,13 @@
 import React from "react";
 import { ServerErrorPage } from "@ess-ics/ce-ui-common";
+import env from "../../../config/env";
 
 export default function AccessDenied() {
   return (
     <ServerErrorPage
       message="You do not have permission to access this page. Please contact an administrator to request access"
       status={401}
-      supportHref={window.SUPPORT_URL}
+      supportHref={env.SUPPORT_URL}
     />
   );
 }
diff --git a/src/components/auth/TokenRenew/TokenRenew.js b/src/components/auth/TokenRenew/TokenRenew.js
index bedc7575..7524be8f 100644
--- a/src/components/auth/TokenRenew/TokenRenew.js
+++ b/src/components/auth/TokenRenew/TokenRenew.js
@@ -1,6 +1,7 @@
 import { useContext, useCallback } from "react";
 import { apiContext } from "../../../api/DeployApi";
 import { userContext, useAPIMethod, usePolling } from "@ess-ics/ce-ui-common";
+import env from "../../../config/env";
 
 export default function TokenRenew() {
   const { user } = useContext(userContext);
@@ -25,12 +26,7 @@ export default function TokenRenew() {
     }
   }, [user, renewToken, abort]);
 
-  usePolling(
-    renewTokenWhenLoggedIn,
-    loading,
-    window.TOKEN_RENEW_INTERVAL,
-    abort
-  );
+  usePolling(renewTokenWhenLoggedIn, loading, env.TOKEN_RENEW_INTERVAL, abort);
 
   return null;
 }
diff --git a/src/components/common/Helper.js b/src/components/common/Helper.js
index e075163b..ee73d642 100644
--- a/src/components/common/Helper.js
+++ b/src/components/common/Helper.js
@@ -2,6 +2,7 @@ import React, { useState, useEffect } from "react";
 import { alpha } from "@mui/material/styles";
 import TimeAgo from "javascript-time-ago";
 import en from "javascript-time-ago/locale/en";
+import env from "../../config/env";
 
 export function formatToList(items) {
   if (!items) {
@@ -66,7 +67,7 @@ export function circularPalette(palette, index, opacity = 1.0) {
 }
 
 function applicationSubTitle() {
-  const title = `${window.ENVIRONMENT_TITLE}`;
+  const title = `${env.ENVIRONMENT_TITLE}`;
 
   if (title && title !== "undefined") {
     return " - " + title;
diff --git a/src/components/navigation/NotFoundView/NotFoundView.tsx b/src/components/navigation/NotFoundView/NotFoundView.tsx
index 2f25211e..26ac675b 100644
--- a/src/components/navigation/NotFoundView/NotFoundView.tsx
+++ b/src/components/navigation/NotFoundView/NotFoundView.tsx
@@ -4,6 +4,7 @@
  */
 import React from "react";
 import { ServerErrorPage, RootPaper } from "@ess-ics/ce-ui-common";
+import env from "../../../config/env";
 
 interface NotFoundProps {
   /** String containing message of page not found. Otherwise defaults to a generic "Page Not Found" message */
@@ -17,7 +18,7 @@ export default function NotFoundView({ message, status }: NotFoundProps) {
       <ServerErrorPage
         status={status}
         message={message}
-        supportHref={window.SUPPORT_URL}
+        supportHref={env.SUPPORT_URL}
       />
     </RootPaper>
   );
diff --git a/src/config/env.js b/src/config/env.js
new file mode 100644
index 00000000..3699da4a
--- /dev/null
+++ b/src/config/env.js
@@ -0,0 +1,13 @@
+const env = {
+  SERVER_ADDRESS: window.SERVER_ADDRESS,
+  ENVIRONMENT_TITLE: window.ENVIRONMENT_TITLE,
+  API_BASE_ENDPOINT: window.API_BASE_ENDPOINT,
+  TOKEN_RENEW_INTERVAL: window.TOKEN_RENEW_INTERVAL,
+  FRONTEND_VERSION: window.FRONTEND_VERSION,
+  FRONTEND_REPOSITORY_TAGS: window.FRONTEND_REPOSITORY_TAGS,
+  SUPPORT_URL: window.SUPPORT_URL,
+  NETBOX_ADDRESS: window.NETBOX_ADDRESS,
+  NAMING_ADDRESS: window.NETBOX_ADDRESS
+};
+
+export default env;
diff --git a/src/views/help/HelpView.js b/src/views/help/HelpView.js
index 25fa86d7..7e4d1c25 100644
--- a/src/views/help/HelpView.js
+++ b/src/views/help/HelpView.js
@@ -3,6 +3,7 @@ import { RootPaper, Help } from "@ess-ics/ce-ui-common";
 import { Stack, Typography } from "@mui/material";
 import { GlobalAppBarContext } from "@ess-ics/ce-ui-common";
 import { applicationTitle } from "../../components/common/Helper";
+import env from "../../config/env";
 
 export function HelpView() {
   const { setTitle } = useContext(GlobalAppBarContext);
@@ -39,9 +40,9 @@ export function HelpView() {
           </Stack>
         }
         docsHref="https://confluence.esss.lu.se/x/CVGQFg"
-        supportHref={window.SUPPORT_URL}
-        version={window.FRONTEND_VERSION}
-        versionHref={`${window.FRONTEND_REPOSITORY_TAGS}${window.FRONTEND_VERSION}`}
+        supportHref={env.SUPPORT_URL}
+        version={env.FRONTEND_VERSION}
+        versionHref={`${env.FRONTEND_REPOSITORY_TAGS}${env.FRONTEND_VERSION}`}
       />
     </RootPaper>
   );
diff --git a/src/views/host/details/HostDetailsView.js b/src/views/host/details/HostDetailsView.js
index 12a0cd83..b2d00a26 100644
--- a/src/views/host/details/HostDetailsView.js
+++ b/src/views/host/details/HostDetailsView.js
@@ -21,6 +21,7 @@ import {
 import { HostDetailsTable } from "./HostDetailsTable";
 import { HostJobsSection } from "./HostJobsSection";
 import { HostIocSection } from "./HostIocSection";
+import env from "../../../config/env";
 
 export function HostDetailsView({ hostId, host }) {
   const { setTitle } = useContext(GlobalAppBarContext);
@@ -124,15 +125,15 @@ export function HostDetailsView({ hostId, host }) {
                 <ExternalLink
                   href={
                     host?.netBoxHost.vm
-                      ? `${window.NETBOX_ADDRESS}/virtualization/virtual-machines/${host?.netBoxHost.id}`
-                      : `${window.NETBOX_ADDRESS}/dcim/devices/${host?.netBoxHost.id}`
+                      ? `${env.NETBOX_ADDRESS}/virtualization/virtual-machines/${host?.netBoxHost.id}`
+                      : `${env.NETBOX_ADDRESS}/dcim/devices/${host?.netBoxHost.id}`
                   }
                   aria-label="Host Configuration"
                 >
                   {" "}
                   {host?.netBoxHost.vm
-                    ? `${window.NETBOX_ADDRESS}/virtualization/virtual-machines/${host?.netBoxHost.id}`
-                    : `${window.NETBOX_ADDRESS}/dcim/devices/${host?.netBoxHost.id}`}
+                    ? `${env.NETBOX_ADDRESS}/virtualization/virtual-machines/${host?.netBoxHost.id}`
+                    : `${env.NETBOX_ADDRESS}/dcim/devices/${host?.netBoxHost.id}`}
                 </ExternalLink>
               ),
               "Host Metrics": (
-- 
GitLab