From 80a96278250fec104f938e49306073cd7249003c Mon Sep 17 00:00:00 2001
From: Karel Hala <khala@redhat.com>
Date: Mon, 11 Sep 2023 13:31:38 +0200
Subject: [PATCH] Add energy resources

---
 package-lock.json      | 14 +++++-----
 src/react-auth0-spa.js | 37 +++++++++++++++++++++----
 src/utils/helpers.js   | 62 ++++++++++++++++++++++++++++++++----------
 src/views/HomePage.js  |  6 ++--
 4 files changed, 89 insertions(+), 30 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 0f13647..bef36b9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4183,9 +4183,9 @@
       "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw=="
     },
     "node_modules/@types/react": {
-      "version": "18.2.21",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz",
-      "integrity": "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==",
+      "version": "17.0.65",
+      "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.65.tgz",
+      "integrity": "sha512-oxur785xZYHvnI7TRS61dXbkIhDPnGfsXKv0cNXR/0ml4SipRIFpSMzA7HMEfOywFwJ5AOnPrXYTEiTRUQeGlQ==",
       "dependencies": {
         "@types/prop-types": "*",
         "@types/scheduler": "*",
@@ -16318,16 +16318,16 @@
       }
     },
     "node_modules/typescript": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
-      "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+      "version": "4.9.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
+      "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
       "peer": true,
       "bin": {
         "tsc": "bin/tsc",
         "tsserver": "bin/tsserver"
       },
       "engines": {
-        "node": ">=14.17"
+        "node": ">=4.2.0"
       }
     },
     "node_modules/unbox-primitive": {
diff --git a/src/react-auth0-spa.js b/src/react-auth0-spa.js
index 738db6d..1a68263 100644
--- a/src/react-auth0-spa.js
+++ b/src/react-auth0-spa.js
@@ -15,19 +15,36 @@ export const Auth0Provider = ({ children, onRedirectCallback = DEFAULT_REDIRECT_
   const [auth0Client, setAuth0] = useState();
   const [loading, setLoading] = useState(true);
   const [popupOpen, setPopupOpen] = useState(false);
-  const [{ apiSun, apiTemp, apiAir }, setAllApis] = useState({
-    apiSun: {},
-    apiTemp: {},
-    apiAir: {},
-  });
+  const [{ apiSun, apiTemp, apiAir, apiGermany, apiAustria, apiCroatia, apiCzechia, apiSlovakia, apiPoland, apiFrance, apiSweden }, setAllApis] =
+    useState({
+      apiSun: {},
+      apiTemp: {},
+      apiAir: {},
+      apiGermany: {},
+      apiAustria: {},
+      apiCroatia: {},
+      apiCzechia: {},
+      apiSlovakia: {},
+      apiPoland: {},
+      apiFrance: {},
+      apiSweden: {},
+    });
 
   useEffect(() => {
     if (user) {
-      const { sun, air, temp } = user;
+      const { sun, air, temp, germany, austria, croatia, czechia, slovakia, poland, france, sweden } = user;
       setAllApis({
         apiSun: createInstance(sun),
         apiTemp: createInstance(temp),
         apiAir: createInstance(air),
+        apiGermany: createInstance(germany),
+        apiAustria: createInstance(austria),
+        apiCroatia: createInstance(croatia),
+        apiCzechia: createInstance(czechia),
+        apiSlovakia: createInstance(slovakia),
+        apiPoland: createInstance(poland),
+        apiFrance: createInstance(france),
+        apiSweden: createInstance(sweden),
       });
     }
   }, [user]);
@@ -116,6 +133,14 @@ export const Auth0Provider = ({ children, onRedirectCallback = DEFAULT_REDIRECT_
         apiSun,
         apiAir,
         apiTemp,
+        apiGermany,
+        apiAustria,
+        apiCroatia,
+        apiCzechia,
+        apiSlovakia,
+        apiPoland,
+        apiFrance,
+        apiSweden,
         loading,
         popupOpen,
         loginWithPopup,
diff --git a/src/utils/helpers.js b/src/utils/helpers.js
index d4f23a8..7e8ba7c 100644
--- a/src/utils/helpers.js
+++ b/src/utils/helpers.js
@@ -1,4 +1,4 @@
-import { useMemo, useEffect, useState } from 'react';
+import { useMemo, useEffect, useState, useCallback } from 'react';
 import { useLocation } from 'react-router-dom';
 import { useAuth0 } from '../react-auth0-spa';
 
@@ -11,26 +11,60 @@ export const useType = () => {
 };
 
 export const useRest = (type) => {
-  const { apiSun, apiTemp, apiAir } = useAuth0();
+  const { apiSun, apiTemp, apiAir, apiGermany, apiAustria, apiCroatia, apiCzechia, apiSlovakia, apiPoland, apiFrance, apiSweden } = useAuth0();
   const [{ resource, rest }, setRestApi] = useState({});
-
-  useEffect(() => {
-    if (!type) {
-      setRestApi({
+  const typeMapper = useCallback((resourceType) => {
+    const apiTypes = {
+      sunshine: {
         resource: apiSun,
         rest: 'sunshine',
-      });
-    } else if (type === 'air') {
-      setRestApi({
+      },
+      air: {
         resource: apiAir,
         rest: 'wind-speed',
-      });
-    } else if (type === 'temp') {
-      setRestApi({
+      },
+      temp: {
         resource: apiTemp,
         rest: 'temp-avg',
-      });
-    }
+      },
+      germany: {
+        resource: apiGermany,
+        rest: 'germany',
+      },
+      austria: {
+        resource: apiAustria,
+        rest: 'austria',
+      },
+      france: {
+        resource: apiFrance,
+        rest: 'france',
+      },
+      poland: {
+        resource: apiPoland,
+        rest: 'poland',
+      },
+      sweden: {
+        resource: apiSweden,
+        rest: 'sweden',
+      },
+      croatia: {
+        resource: apiCroatia,
+        rest: 'croatia',
+      },
+      czechia: {
+        resource: apiCzechia,
+        rest: 'czechia',
+      },
+      slovakia: {
+        resource: apiSlovakia,
+        rest: 'slovakia',
+      },
+    };
+    return apiTypes[resourceType] || apiTypes.sunshine;
+  }, []);
+
+  useEffect(() => {
+    setRestApi(typeMapper(type));
   }, [type]);
 
   return [{ resource, rest }, setRestApi];
diff --git a/src/views/HomePage.js b/src/views/HomePage.js
index 9c6a6a6..89ea83d 100644
--- a/src/views/HomePage.js
+++ b/src/views/HomePage.js
@@ -22,10 +22,10 @@ const dataFetched = (data) => {
   };
 };
 
-const fetchData = (api, max = 10, skip = 0) => {
+const fetchData = (api, rest, max = 10, skip = 0) => {
   return (dispatch) => {
     if (api) {
-      api.get(`/rest/sunshine?${queryBuilder({ max, skip })}`).then((data) => {
+      api.get(`/rest/${rest}?${queryBuilder({ max, skip })}`).then((data) => {
         dispatch(dataFetched(data));
       });
     }
@@ -336,7 +336,7 @@ const HomePage = () => {
       // resource.get(`/rest/sunshine?${queryBuilder({ max: 10, filter: 2000 })}`).then((data) => {
       //   setMyData(data);
       // });
-      dispatch(fetchData(resource, max, skip));
+      dispatch(fetchData(resource, rest, max, skip));
     }
   }, [resource, max, skip]);
 
-- 
GitLab