From b817a16459100c5c04250caec48f6a67a0a0d36b Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Mon, 9 Feb 2026 23:28:46 +0000 Subject: [PATCH] remove settings hooks --- .../src/Components/v1/HOC/withAdminCheck.jsx | 16 ++-- client/src/Hooks/settingsHooks.js | 73 ------------------- client/src/Pages/Settings/index.jsx | 43 +++++++---- 3 files changed, 36 insertions(+), 96 deletions(-) delete mode 100644 client/src/Hooks/settingsHooks.js diff --git a/client/src/Components/v1/HOC/withAdminCheck.jsx b/client/src/Components/v1/HOC/withAdminCheck.jsx index 8646c99b6..6343b2e4e 100644 --- a/client/src/Components/v1/HOC/withAdminCheck.jsx +++ b/client/src/Components/v1/HOC/withAdminCheck.jsx @@ -2,19 +2,19 @@ import { useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; import { logger } from "../../../Utils/Logger.js"; -import { networkService } from "../../../main.jsx"; +import { useLazyGet } from "@/Hooks/UseApi"; const withAdminCheck = (WrappedComponent) => { const WithAdminCheck = (props) => { const navigate = useNavigate(); - const [isChecking, setIsChecking] = useState(true); const [superAdminExists, setSuperAdminExists] = useState(false); + const [hasChecked, setHasChecked] = useState(false); + const { get: checkSuperAdmin, loading: isChecking } = useLazyGet(); useEffect(() => { - networkService - .doesSuperAdminExist() + checkSuperAdmin("/auth/users/superadmin") .then((response) => { - if (response?.data?.data === true) { + if (response?.data === true) { navigate("/login"); } else { setSuperAdminExists(false); @@ -24,11 +24,11 @@ const withAdminCheck = (WrappedComponent) => { logger.error(error); }) .finally(() => { - setIsChecking(false); + setHasChecked(true); }); - }, [navigate]); + }, [navigate, checkSuperAdmin]); - if (isChecking) { + if (!hasChecked || isChecking) { return null; } diff --git a/client/src/Hooks/settingsHooks.js b/client/src/Hooks/settingsHooks.js deleted file mode 100644 index 4693d8daa..000000000 --- a/client/src/Hooks/settingsHooks.js +++ /dev/null @@ -1,73 +0,0 @@ -import { useState, useEffect } from "react"; -import { networkService } from "../main.jsx"; -import { createToast } from "../Utils/toastUtils.jsx"; -import { useTranslation } from "react-i18next"; - -const useFetchSettings = ({ setSettingsData, setIsApiKeySet, setIsEmailPasswordSet }) => { - const [isLoading, setIsLoading] = useState(false); - const [error, setError] = useState(undefined); - useEffect(() => { - const fetchSettings = async () => { - setIsLoading(true); - try { - const response = await networkService.getAppSettings(); - setSettingsData(response?.data?.data); - setIsApiKeySet(response?.data?.data?.pagespeedKeySet); - setIsEmailPasswordSet(response?.data?.data?.emailPasswordSet); - } catch (error) { - createToast({ body: "Failed to fetch settings" }); - setError(error); - } finally { - setIsLoading(false); - } - }; - fetchSettings(); - }, [setSettingsData]); - - return [isLoading, error]; -}; - -const useSaveSettings = ({ - setSettingsData, - setIsApiKeySet, - setApiKeyHasBeenReset, - setIsEmailPasswordSet, - setEmailPasswordHasBeenReset, -}) => { - const [isLoading, setIsLoading] = useState(false); - const [error, setError] = useState(undefined); - const { t } = useTranslation(); - - const saveSettings = async (settings) => { - setIsLoading(true); - try { - const settingsResponse = await networkService.updateAppSettings({ settings }); - // if (settings.checkTTL) { - // await networkService.updateChecksTTL({ - // ttl: settings.checkTTL, - // }); - // } - setIsApiKeySet(settingsResponse.data.data.pagespeedKeySet); - setIsEmailPasswordSet(settingsResponse.data.data.emailPasswordSet); - if (settingsResponse.data.data.pagespeedKeySet === true) { - setApiKeyHasBeenReset(false); - } - if (settingsResponse.data.data.emailPasswordSet === true) { - setEmailPasswordHasBeenReset(false); - } - setSettingsData(settingsResponse.data.data); - - createToast({ body: t("settingsSuccessSaved") }); - } catch (error) { - createToast({ body: t("settingsFailedToSave") }); - - setError(error); - } finally { - setIsLoading(false); - } - }; - - return [isLoading, error, saveSettings]; -}; - -export { useFetchSettings, useSaveSettings }; diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx index 071f414fd..fb6185784 100644 --- a/client/src/Pages/Settings/index.jsx +++ b/client/src/Pages/Settings/index.jsx @@ -13,7 +13,7 @@ import SettingsExport from "./SettingsExport.jsx"; import Button from "@mui/material/Button"; // Utils import { settingsValidation } from "@/Validation/validation.js"; -import { useState } from "react"; +import { useState, useEffect } from "react"; import { useTheme } from "@emotion/react"; import { useTranslation } from "react-i18next"; import { useSelector, useDispatch } from "react-redux"; @@ -26,9 +26,8 @@ import { } from "@/Features/UI/uiSlice.js"; import SettingsStats from "./SettingsStats.jsx"; -import { useFetchSettings, useSaveSettings } from "@/Hooks/settingsHooks"; import { useIsAdmin } from "@/Hooks/useIsAdmin.js"; -import { usePost, useDelete, useLazyGet } from "@/Hooks/UseApi"; +import { useGet, usePost, useDelete, useLazyGet, usePut } from "@/Hooks/UseApi"; // Constants const BREADCRUMBS = [{ name: `Settings`, path: "/settings" }]; @@ -53,19 +52,33 @@ const Settings = () => { const [emailPasswordHasBeenReset, setEmailPasswordHasBeenReset] = useState(false); // Network - const [isSettingsLoading, settingsError] = useFetchSettings({ - setSettingsData, - setIsApiKeySet, - setIsEmailPasswordSet, - }); + const { data: fetchedSettings, isLoading: isSettingsLoading } = useGet("/settings"); - const [isSaving, saveError, saveSettings] = useSaveSettings({ - setSettingsData, - setIsApiKeySet, - setApiKeyHasBeenReset, - setIsEmailPasswordSet, - setEmailPasswordHasBeenReset, - }); + useEffect(() => { + if (fetchedSettings) { + setSettingsData(fetchedSettings); + setIsApiKeySet(fetchedSettings?.pagespeedKeySet); + setIsEmailPasswordSet(fetchedSettings?.emailPasswordSet); + } + }, [fetchedSettings]); + + const { put: saveSettingsFn, loading: isSaving } = usePut(); + + const saveSettings = async (settings) => { + const response = await saveSettingsFn("/settings", { settings }); + if (response?.data) { + const data = response.data; + setIsApiKeySet(data.pagespeedKeySet); + setIsEmailPasswordSet(data.emailPasswordSet); + if (data.pagespeedKeySet === true) { + setApiKeyHasBeenReset(false); + } + if (data.emailPasswordSet === true) { + setEmailPasswordHasBeenReset(false); + } + setSettingsData(data); + } + }; // New API hooks to replace monitorHooks const { post: postDemoMonitors, loading: isAddingDemoMonitors } = usePost();