From f4f63bb388b0d1bbdbfcc5b0a3517c33516ac736 Mon Sep 17 00:00:00 2001
From: Max Frederiksen <maxfrederiksen@Maxs-MacBook-Air.local>
Date: Fri, 20 Dec 2024 10:16:45 +0100
Subject: [PATCH] MR comments

---
 src/api/UserProvider.jsx                      | 32 ++++++++-----------
 src/components/IOC/CreateIOC/CreateIOC.jsx    |  8 ++---
 src/components/common/Helper.jsx              |  4 +--
 .../common/User/UserOperationList.jsx         |  9 +++---
 src/constants/index.ts                        |  1 +
 src/views/host/HostListView.jsx               |  6 ++--
 .../host/details/HostDetailsContainer.jsx     |  9 ++----
 src/views/host/details/HostJobsSection.jsx    |  6 ++--
 src/views/jobs/JobDetailsContainer.jsx        |  8 +++--
 src/views/records/RecordDetailsView.jsx       |  6 +++-
 src/views/records/RecordListView.jsx          |  8 ++---
 11 files changed, 47 insertions(+), 50 deletions(-)

diff --git a/src/api/UserProvider.jsx b/src/api/UserProvider.jsx
index af6bb1a0..48d27b10 100644
--- a/src/api/UserProvider.jsx
+++ b/src/api/UserProvider.jsx
@@ -3,8 +3,8 @@ import { userContext } from "@ess-ics/ce-ui-common";
 import {
   useLoginMutation,
   useLogoutMutation,
-  useLazyInfoFromUserNameQuery,
-  useLazyGetUserRolesQuery
+  useInfoFromUserNameQuery,
+  useGetUserRolesQuery
 } from "../store/deployApi";
 
 export function UserProvider({ children }) {
@@ -21,12 +21,12 @@ export function UserProvider({ children }) {
     }
   ] = useLoginMutation();
   const [callLogout, { isLoading: logoutLoading }] = useLogoutMutation();
-  const [getUserInfo, { data: userResponse, isLoading: userLoading }] =
-    useLazyInfoFromUserNameQuery();
-  const [
-    getUserRoles,
-    { data: userRolesResponse, isLoading: userRolesLoading }
-  ] = useLazyGetUserRolesQuery();
+  const { data: userResponse, isLoading: userLoading } =
+    useInfoFromUserNameQuery({
+      skip: !loginResponse
+    });
+  const { data: userRolesResponse, isLoading: userRolesLoading } =
+    useGetUserRolesQuery({ skip: !loginResponse });
 
   const initialized = Boolean(
     !loginLoading || !logoutLoading || !userLoading || !userRolesLoading
@@ -39,13 +39,6 @@ export function UserProvider({ children }) {
     [callLogin]
   );
 
-  useEffect(() => {
-    if (loginResponse) {
-      getUserInfo({});
-      getUserRoles();
-    }
-  }, [loginResponse, getUserInfo, getUserRoles]);
-
   useEffect(() => {
     setUser(userResponse);
     //TEST new changes from BE
@@ -55,16 +48,17 @@ export function UserProvider({ children }) {
   const logout = useCallback(() => {
     callLogout();
     setUser(null);
-  }, [callLogout]);
+    setUserRoles([]);
+  }, [callLogout, setUser, setUserRoles]);
 
   return (
     initialized && (
       <userContext.Provider
         value={{
-          user: user,
-          userRoles: userRoles,
+          user,
+          userRoles,
           login,
-          loginError: loginError?.response?.body?.description,
+          loginError: loginError?.data?.description,
           logout,
           resetLoginError: resetLogin
         }}
diff --git a/src/components/IOC/CreateIOC/CreateIOC.jsx b/src/components/IOC/CreateIOC/CreateIOC.jsx
index a51f5740..16514a70 100644
--- a/src/components/IOC/CreateIOC/CreateIOC.jsx
+++ b/src/components/IOC/CreateIOC/CreateIOC.jsx
@@ -2,7 +2,6 @@ import { useEffect, useState } from "react";
 import { useNavigate } from "react-router-dom";
 import { RootPaper } from "@ess-ics/ce-ui-common";
 import {
-  Alert,
   Autocomplete,
   Button,
   CircularProgress,
@@ -16,13 +15,12 @@ import { WITHOUT_REPO } from "./RepositoryType";
 import { RepositoryName } from "./RepositoryName";
 import { useTypingTimer } from "../../common/SearchBoxFilter/TypingTimer";
 import { useCustomSnackbar } from "../../common/snackbar";
-
-import { getErrorMessage } from "../../common/Helper";
 import {
   useCreateIocMutation,
   useLazyFetchIocByNameQuery,
   useLazyListProjectsQuery
 } from "../../../store/deployApi";
+import { ApiAlertError } from "../../common/Alerts/ApiAlertError";
 
 export function CreateIOC() {
   const navigate = useNavigate();
@@ -186,9 +184,7 @@ export function CreateIOC() {
           />
         )}
 
-        {error ? (
-          <Alert severity="error">{getErrorMessage(error)}</Alert>
-        ) : null}
+        {error && <ApiAlertError error={error} />}
         {isLoading ? (
           <LinearProgress
             aria-busy="true"
diff --git a/src/components/common/Helper.jsx b/src/components/common/Helper.jsx
index 97cbb187..24f04313 100644
--- a/src/components/common/Helper.jsx
+++ b/src/components/common/Helper.jsx
@@ -84,9 +84,9 @@ export function initRequestParams(lazyParams, filter, columnSort) {
 
   if (columnSort) {
     if (columnSort.sortOrder === 1) {
-      requestParams.order_asc = true;
+      requestParams.orderAsc = true;
     } else {
-      requestParams.order_asc = false;
+      requestParams.orderAsc = false;
     }
   }
 
diff --git a/src/components/common/User/UserOperationList.jsx b/src/components/common/User/UserOperationList.jsx
index d4a82c4d..2302c549 100644
--- a/src/components/common/User/UserOperationList.jsx
+++ b/src/components/common/User/UserOperationList.jsx
@@ -3,14 +3,15 @@ import { Card, CardHeader } from "@mui/material";
 import { usePagination } from "@ess-ics/ce-ui-common";
 import { initRequestParams } from "../Helper";
 import { JobTable } from "../../Job";
-import { ROWS_PER_PAGE } from "../../../constants";
+import {
+  DEFAULT_POLLING_INTERVAL_MILLIS,
+  ROWS_PER_PAGE
+} from "../../../constants";
 import { useLazyListJobsQuery } from "../../../store/deployApi";
 
-const POLLING_INTERVAL = 30000;
-
 export function UserOperationList({ userName }) {
   const [getJobs, { data: jobs, isFetching }] = useLazyListJobsQuery({
-    pollingInterval: POLLING_INTERVAL
+    pollingInterval: DEFAULT_POLLING_INTERVAL_MILLIS
   });
 
   const { pagination, setPagination } = usePagination({
diff --git a/src/constants/index.ts b/src/constants/index.ts
index 8de6913d..ea5769a0 100644
--- a/src/constants/index.ts
+++ b/src/constants/index.ts
@@ -1 +1,2 @@
 export const ROWS_PER_PAGE = [20, 50];
+export const DEFAULT_POLLING_INTERVAL_MILLIS = 30000;
diff --git a/src/views/host/HostListView.jsx b/src/views/host/HostListView.jsx
index 238fc8f9..f3a3af76 100644
--- a/src/views/host/HostListView.jsx
+++ b/src/views/host/HostListView.jsx
@@ -19,7 +19,7 @@ export function HostListView() {
   const { setTitle } = useContext(GlobalAppBarContext);
   useEffect(() => setTitle(applicationTitle("IOC hosts")), [setTitle]);
 
-  const [callListHostsQuery, { data: hosts, isLoading }] =
+  const [callListHostsQuery, { data: hosts, isFetching }] =
     useLazyListHostsQuery();
 
   const [searchParams, setSearchParams] = useSearchParams({ query: "" });
@@ -73,11 +73,11 @@ export function HostListView() {
     <SearchBar
       search={setSearch}
       query={searchParams.get("query")}
-      loading={isLoading}
+      loading={isFetching}
     >
       <HostTable
         hosts={hosts?.netBoxHosts ?? []}
-        loading={isLoading || !hosts}
+        loading={isFetching || !hosts}
         pagination={pagination}
         onPage={onPage}
       />
diff --git a/src/views/host/details/HostDetailsContainer.jsx b/src/views/host/details/HostDetailsContainer.jsx
index eeb0430d..98b45b61 100644
--- a/src/views/host/details/HostDetailsContainer.jsx
+++ b/src/views/host/details/HostDetailsContainer.jsx
@@ -18,12 +18,9 @@ export function HostDetailsContainer({ hostId }) {
 
   useEffect(() => {
     if (fetchError || alertError) {
-      const message = fetchError?.message
-        ? fetchError.message
-        : alertError.message;
-      const status = fetchError?.status
-        ? fetchError.status
-        : alertError?.status;
+      const message =
+        fetchError?.data?.description || alertError?.data?.description;
+      const status = fetchError?.status || alertError?.status;
       onFetchEntityError(message, status, setError);
     }
   }, [fetchError, alertError]);
diff --git a/src/views/host/details/HostJobsSection.jsx b/src/views/host/details/HostJobsSection.jsx
index 17e93a3a..4dd30569 100644
--- a/src/views/host/details/HostJobsSection.jsx
+++ b/src/views/host/details/HostJobsSection.jsx
@@ -1,11 +1,11 @@
 import { useEffect, useMemo, useCallback, useState } from "react";
 import { string } from "prop-types";
 import { SimpleAccordion, usePagination } from "@ess-ics/ce-ui-common";
-import { Alert, Typography } from "@mui/material";
-import { getErrorMessage } from "../../../components/common/Helper";
+import { Typography } from "@mui/material";
 import { JobTable } from "../../../components/Job";
 import { ROWS_PER_PAGE } from "../../../constants";
 import { useLazyListJobsQuery } from "../../../store/deployApi";
+import { ApiAlertError } from "../../../components/common/Alerts/ApiAlertError";
 
 const propTypes = {
   hostId: string.isRequired
@@ -57,7 +57,7 @@ export const HostJobsSection = ({ hostId }) => {
       }
       onChange={(_, expanded) => setExpanded(expanded)}
     >
-      {error ? <Alert severity="error">{getErrorMessage(error)}</Alert> : null}
+      {error && <ApiAlertError error={error} />}
       {hostLog ? (
         <JobTable
           jobs={!error && hostLog ? hostLog?.jobs : null}
diff --git a/src/views/jobs/JobDetailsContainer.jsx b/src/views/jobs/JobDetailsContainer.jsx
index 0795e607..6953ade8 100644
--- a/src/views/jobs/JobDetailsContainer.jsx
+++ b/src/views/jobs/JobDetailsContainer.jsx
@@ -7,7 +7,7 @@ import { useFetchJobQuery } from "../../store/deployApi";
 
 const POLL_DEPLOYMENT_INTERVAL = 5000;
 export function JobDetailsContainer({ id }) {
-  const [notFoundError, setNotFoundError] = useState();
+  const [notFoundError, setNotFoundError] = useState(null);
   const [jobFinished, setJobFinished] = useState(false);
 
   const {
@@ -29,7 +29,11 @@ export function JobDetailsContainer({ id }) {
 
   useEffect(() => {
     if (jobError) {
-      onFetchEntityError(jobError?.message, jobError?.status, setNotFoundError);
+      onFetchEntityError(
+        jobError?.data?.description,
+        jobError?.status,
+        setNotFoundError
+      );
     }
   }, [jobError]);
 
diff --git a/src/views/records/RecordDetailsView.jsx b/src/views/records/RecordDetailsView.jsx
index ed6bf1d1..fd71b905 100644
--- a/src/views/records/RecordDetailsView.jsx
+++ b/src/views/records/RecordDetailsView.jsx
@@ -35,7 +35,11 @@ export function RecordDetailsView() {
 
   useEffect(() => {
     if (fetchError) {
-      onFetchEntityError(fetchError?.message, fetchError?.status, setError);
+      onFetchEntityError(
+        fetchError?.data?.description,
+        fetchError?.status,
+        setError
+      );
     }
   }, [fetchError]);
 
diff --git a/src/views/records/RecordListView.jsx b/src/views/records/RecordListView.jsx
index 9c147711..5aafc7bd 100644
--- a/src/views/records/RecordListView.jsx
+++ b/src/views/records/RecordListView.jsx
@@ -19,7 +19,7 @@ export function RecordListView() {
   const { setTitle } = useContext(GlobalAppBarContext);
   useEffect(() => setTitle(applicationTitle("Records")), [setTitle]);
 
-  const [getRecords, { data: records, isLoading }] =
+  const [getRecords, { data: records, isFetching }] =
     useLazyFindAllRecordsQuery();
 
   const [searchParams, setSearchParams] = useSearchParams({ query: "" });
@@ -52,7 +52,7 @@ export function RecordListView() {
   // Request new search results whenever search or pagination changes
   useEffect(() => {
     let requestParams = initRequestParams(pagination);
-    requestParams.pv_status = recordFilter;
+    requestParams.pvStatus = recordFilter;
     requestParams.text = searchParams.get("query");
     getRecords(requestParams);
   }, [getRecords, recordFilter, pagination, searchParams]);
@@ -74,11 +74,11 @@ export function RecordListView() {
     <SearchBar
       search={setSearch}
       query={searchParams.get("query")}
-      loading={isLoading || !records}
+      loading={isFetching || !records}
     >
       <RecordTable
         records={records}
-        loading={isLoading || !records}
+        loading={isFetching || !records}
         pagination={pagination}
         onPage={onPage}
       />
-- 
GitLab