From 1cbbe12bd8374cecebf6f704fca0b93936fd7602 Mon Sep 17 00:00:00 2001
From: Max Frederiksen <maxfrederiksen@Maxs-MacBook-Air.local>
Date: Wed, 13 Nov 2024 13:21:51 +0100
Subject: [PATCH] Record/Job components

---
 src/components/records/RecordSearch.jsx | 61 ++++-------------------
 src/views/jobs/JobListView.jsx          | 58 +++-------------------
 src/views/records/RecordListView.jsx    | 64 ++++---------------------
 3 files changed, 22 insertions(+), 161 deletions(-)

diff --git a/src/components/records/RecordSearch.jsx b/src/components/records/RecordSearch.jsx
index ff07e9aa..61cfba00 100644
--- a/src/components/records/RecordSearch.jsx
+++ b/src/components/records/RecordSearch.jsx
@@ -1,4 +1,4 @@
-import { useEffect, useCallback, useState, useContext, useMemo } from "react";
+import { useEffect, useCallback, useState, useContext } from "react";
 import { initRequestParams } from "../common/Helper";
 import { RecordTable } from "./RecordTable";
 import useUrlState from "@ahooksjs/use-url-state";
@@ -23,35 +23,14 @@ export function RecordSearch({ iocName, rowType }) {
 
   const [urlState, setUrlState] = useUrlState(
     {
-      record_tab: "0",
-      rows: "20",
-      page: "0",
       query: ""
     },
     { navigateMode: "replace" }
   );
   const [recordFilter, setRecordFilter] = useState();
+  const [tabIndex, setTabIndex] = useState(0);
 
-  const handleTabChange = useCallback(
-    (event, tab) => {
-      setUrlState((s) =>
-        serialize(s.record_tab) === serialize(tab)
-          ? { record_tab: serialize(tab) }
-          : { record_tab: serialize(tab), page: "0" }
-      );
-
-      changeTab(tab);
-    },
-    [setUrlState]
-  );
-
-  useEffect(() => {
-    if (urlState.record_tab) {
-      changeTab(deserialize(urlState.record_tab));
-    }
-  }, [urlState]);
-
-  const changeTab = (tab) => {
+  const handleTabChange = (tab) => {
     if (tab === 0) {
       setRecordFilter(null);
     } else if (tab === 1) {
@@ -59,28 +38,15 @@ export function RecordSearch({ iocName, rowType }) {
     } else if (tab === 2) {
       setRecordFilter("INACTIVE");
     }
+    setTabIndex(tab);
   };
 
-  const urlPagination = useMemo(() => {
-    return {
-      rows: deserialize(urlState.rows),
-      page: deserialize(urlState.page)
-    };
-  }, [urlState.rows, urlState.page]);
-
-  const setUrlPagination = useCallback(
-    ({ rows, page }) => {
-      setUrlState({ rows: serialize(rows), page: serialize(page) });
-    },
-    [setUrlState]
-  );
-
   const rowsPerPage = [20, 50];
 
   const { pagination, setPagination, setTotalCount } = usePagination({
     rowsPerPageOptions: rowsPerPage,
-    initLimit: urlPagination.rows ?? rowsPerPage[0],
-    initPage: urlPagination.page ?? 0
+    initLimit: rowsPerPage[0],
+    initPage: 0
   });
 
   // update pagination whenever search result total pages change
@@ -88,17 +54,6 @@ export function RecordSearch({ iocName, rowType }) {
     setTotalCount(records?.totalCount ?? 0);
   }, [records?.totalCount, setTotalCount]);
 
-  // whenever url state changes, update pagination
-  useEffect(() => {
-    setPagination({ ...urlPagination });
-  }, [setPagination, urlPagination]);
-
-  // whenever table pagination internally changes (user clicks next page etc)
-  // update the row params
-  useEffect(() => {
-    setUrlPagination(pagination);
-  }, [pagination, setUrlPagination]);
-
   // Request new search results whenever search or pagination changes
   useEffect(() => {
     let requestParams = initRequestParams(pagination);
@@ -134,8 +89,8 @@ export function RecordSearch({ iocName, rowType }) {
     >
       <Grid item>
         <Tabs
-          value={deserialize(urlState.record_tab)}
-          onChange={handleTabChange}
+          value={tabIndex}
+          onChange={(_, tab) => handleTabChange(tab)}
         >
           <Tab label="All" />
           <Tab label="Only active" />
diff --git a/src/views/jobs/JobListView.jsx b/src/views/jobs/JobListView.jsx
index 9449ba16..a8162ca4 100644
--- a/src/views/jobs/JobListView.jsx
+++ b/src/views/jobs/JobListView.jsx
@@ -1,4 +1,4 @@
-import { useContext, useCallback, useMemo, useEffect } from "react";
+import { useContext, useCallback, useEffect } from "react";
 import { Box } from "@mui/material";
 import {
   RootPaper,
@@ -7,11 +7,6 @@ import {
   usePolling
 } from "@ess-ics/ce-ui-common";
 import { initRequestParams } from "../../components/common/Helper";
-import useUrlState from "@ahooksjs/use-url-state";
-import {
-  serialize,
-  deserialize
-} from "../../components/common/URLState/URLState";
 import { JobTable } from "../../components/Job/JobTable";
 import { apiContext } from "../../api/DeployApi";
 
@@ -29,38 +24,12 @@ export function JobListView() {
     call: false
   });
 
-  const [urlState, setUrlState] = useUrlState(
-    {
-      rows: "20",
-      page: "0",
-      query: ""
-    },
-    { navigateMode: "replace" }
-  );
-
-  const urlPagination = useMemo(() => {
-    return {
-      rows: deserialize(urlState.rows),
-      page: deserialize(urlState.page)
-    };
-  }, [urlState.rows, urlState.page]);
-
-  const setUrlPagination = useCallback(
-    ({ rows, page }) => {
-      setUrlState({
-        rows: serialize(rows),
-        page: serialize(page)
-      });
-    },
-    [setUrlState]
-  );
-
   const rowsPerPage = [20, 50];
 
   const { pagination, setPagination } = usePagination({
     rowsPerPageOptions: rowsPerPage,
-    initLimit: urlPagination.rows ?? rowsPerPage[0],
-    initPage: urlPagination.page ?? 0
+    initLimit: rowsPerPage[0],
+    initPage: 0
   });
 
   // update pagination whenever search result total pages change
@@ -68,25 +37,10 @@ export function JobListView() {
     setPagination({ totalCount: jobs?.totalCount ?? 0 });
   }, [setPagination, jobs?.totalCount]);
 
-  // whenever url state changes, update pagination
-  useEffect(() => {
-    setPagination({ ...urlPagination });
-  }, [setPagination, urlPagination]);
-
-  // whenever table pagination internally changes (user clicks next page etc)
-  // update the row params
-  useEffect(() => {
-    setUrlPagination(pagination);
-  }, [pagination, setUrlPagination]);
-
   const callGetOperations = useCallback(() => {
-    let requestParams = initRequestParams(
-      urlPagination,
-      deserialize(urlState.query)
-    );
-
+    let requestParams = initRequestParams(pagination);
     getJobs(requestParams);
-  }, [getJobs, urlPagination, urlState.query]);
+  }, [getJobs, pagination]);
 
   // Request new search results whenever search or pagination changes
   useEffect(() => {
@@ -95,7 +49,7 @@ export function JobListView() {
     return () => {
       abort();
     };
-  }, [callGetOperations, abort]);
+  }, [abort, callGetOperations, pagination]);
 
   usePolling(callGetOperations, loading, 30000, abort, false);
 
diff --git a/src/views/records/RecordListView.jsx b/src/views/records/RecordListView.jsx
index b4c6bc2d..297eb79f 100644
--- a/src/views/records/RecordListView.jsx
+++ b/src/views/records/RecordListView.jsx
@@ -1,4 +1,4 @@
-import { useState, useMemo, useCallback, useContext, useEffect } from "react";
+import { useState, useCallback, useContext, useEffect } from "react";
 import { Container, Grid, Tabs, Tab } from "@mui/material";
 import {
   GlobalAppBarContext,
@@ -38,30 +38,15 @@ export function RecordListView() {
 
   const [urlState, setUrlState] = useUrlState(
     {
-      tab: "0",
-      rows: "20",
-      page: "0",
       query: ""
     },
     { navigateMode: "replace" }
   );
+  const [tabIndex, setTabIndex] = useState(0);
   const [recordFilter, setRecordFilter] = useState(null);
   // used to request record list again when tab is switched, but request it only once! (totalRecord is a random number that is generated by ChannelFinder)
 
-  const handleTabChange = useCallback(
-    (event, tab) => {
-      setUrlState((s) =>
-        serialize(s.tab) === serialize(tab)
-          ? { tab: serialize(tab) }
-          : { tab: serialize(tab), page: "0" }
-      );
-
-      changeTab(tab);
-    },
-    [setUrlState]
-  );
-
-  const changeTab = (tab) => {
+  const handleTabChange = (tab) => {
     if (tab === 0) {
       setRecordFilter(null);
     } else if (tab === 1) {
@@ -69,37 +54,15 @@ export function RecordListView() {
     } else if (tab === 2) {
       setRecordFilter("INACTIVE");
     }
+    setTabIndex(tab);
   };
 
-  useEffect(() => {
-    if (urlState.tab) {
-      changeTab(deserialize(urlState.tab));
-    }
-  }, [urlState]);
-
-  const urlPagination = useMemo(() => {
-    return {
-      rows: deserialize(urlState.rows),
-      page: deserialize(urlState.page)
-    };
-  }, [urlState.rows, urlState.page]);
-
-  const setUrlPagination = useCallback(
-    ({ rows, page }) => {
-      setUrlState({
-        rows: serialize(rows),
-        page: serialize(page)
-      });
-    },
-    [setUrlState]
-  );
-
   const rowsPerPage = [20, 50];
 
   const { pagination, setPagination, setTotalCount } = usePagination({
     rowsPerPageOptions: rowsPerPage,
-    initLimit: urlPagination.rows ?? rowsPerPage[0],
-    initPage: urlPagination.page ?? 0
+    initLimit: rowsPerPage[0],
+    initPage: 0
   });
 
   // update pagination whenever search result total pages change
@@ -107,17 +70,6 @@ export function RecordListView() {
     setTotalCount(records?.totalCount ?? 0);
   }, [records?.totalCount, setTotalCount]);
 
-  // whenever url state changes, update pagination
-  useEffect(() => {
-    setPagination({ ...urlPagination });
-  }, [setPagination, urlPagination]);
-
-  // whenever table pagination internally changes (user clicks next page etc)
-  // update the row params
-  useEffect(() => {
-    setUrlPagination(pagination);
-  }, [pagination, setUrlPagination]);
-
   // Request new search results whenever search or pagination changes
   useEffect(() => {
     let requestParams = initRequestParams(pagination);
@@ -175,8 +127,8 @@ export function RecordListView() {
         >
           <Grid item>
             <Tabs
-              value={deserialize(urlState.tab)}
-              onChange={handleTabChange}
+              value={tabIndex}
+              onChange={(_, tab) => handleTabChange(tab)}
             >
               <Tab label="All" />
               <Tab label="Only active" />
-- 
GitLab