Просмотр исходного кода

feat: Integrate SetupCheck component for improved setup validation in routing

CaIon 11 месяцев назад
Родитель
Сommit
5813ca780f
3 измененных файлов с 23 добавлено и 7 удалено
  1. 3 2
      web/src/App.js
  2. 18 0
      web/src/components/SetupCheck.js
  3. 2 5
      web/src/pages/Home/index.js

+ 3 - 2
web/src/App.js

@@ -26,6 +26,7 @@ import Playground from './pages/Playground/Playground.js';
 import OAuth2Callback from "./components/OAuth2Callback.js";
 import OAuth2Callback from "./components/OAuth2Callback.js";
 import PersonalSetting from './components/PersonalSetting.js';
 import PersonalSetting from './components/PersonalSetting.js';
 import Setup from './pages/Setup/index.js';
 import Setup from './pages/Setup/index.js';
+import SetupCheck from './components/SetupCheck';
 
 
 const Home = lazy(() => import('./pages/Home'));
 const Home = lazy(() => import('./pages/Home'));
 const Detail = lazy(() => import('./pages/Detail'));
 const Detail = lazy(() => import('./pages/Detail'));
@@ -35,7 +36,7 @@ function App() {
   const location = useLocation();
   const location = useLocation();
   
   
   return (
   return (
-    <>
+    <SetupCheck>
       <Routes>
       <Routes>
         <Route
         <Route
           path='/'
           path='/'
@@ -286,7 +287,7 @@ function App() {
           />
           />
           <Route path='*' element={<NotFound />} />
           <Route path='*' element={<NotFound />} />
         </Routes>
         </Routes>
-      </>
+      </SetupCheck>
   );
   );
 }
 }
 
 

+ 18 - 0
web/src/components/SetupCheck.js

@@ -0,0 +1,18 @@
+import React, { useContext, useEffect } from 'react';
+import { Navigate, useLocation } from 'react-router-dom';
+import { StatusContext } from '../context/Status';
+
+const SetupCheck = ({ children }) => {
+  const [statusState] = useContext(StatusContext);
+  const location = useLocation();
+
+  useEffect(() => {
+    if (statusState?.status?.setup === false && location.pathname !== '/setup') {
+      window.location.href = '/setup';
+    }
+  }, [statusState?.status?.setup, location.pathname]);
+
+  return children;
+};
+
+export default SetupCheck; 

+ 2 - 5
web/src/pages/Home/index.js

@@ -66,13 +66,9 @@ const Home = () => {
   };
   };
 
 
   useEffect(() => {
   useEffect(() => {
-    if (statusState.status?.setup === false) {
-      window.location.href = '/setup';
-      return;
-    }
     displayNotice().then();
     displayNotice().then();
     displayHomePageContent().then();
     displayHomePageContent().then();
-  });
+  }, []);
 
 
   return (
   return (
     <>
     <>
@@ -116,6 +112,7 @@ const Home = () => {
                       https://github.com/Calcium-Ion/new-api
                       https://github.com/Calcium-Ion/new-api
                     </a>
                     </a>
                   </p>
                   </p>
+                  
                   <p>
                   <p>
                     {t('协议')}:
                     {t('协议')}:
                     <a
                     <a