diff --git a/Client/src/App.jsx b/Client/src/App.jsx index 73015d3b0..7bfc630fd 100644 --- a/Client/src/App.jsx +++ b/Client/src/App.jsx @@ -37,6 +37,8 @@ import { CssBaseline } from "@mui/material"; import { useEffect } from "react"; import { useDispatch } from "react-redux"; import { getAppSettings } from "./Features/Settings/settingsSlice"; +import { logger } from "./Utils/Logger"; // Import the logger +import { networkService } from "./main"; function App() { const AdminCheckedRegister = withAdminCheck(Register); const MonitorsWithAdminProp = withAdminProp(Monitors); @@ -54,6 +56,14 @@ function App() { dispatch(getAppSettings(authToken)); }, [dispatch, authToken]); + // Cleanup + useEffect(() => { + return () => { + logger.cleanup(); + networkService.cleanup(); + }; + }, []); + return ( diff --git a/Client/src/Features/Settings/settingsSlice.js b/Client/src/Features/Settings/settingsSlice.js index 3778ca801..8bec2f87c 100644 --- a/Client/src/Features/Settings/settingsSlice.js +++ b/Client/src/Features/Settings/settingsSlice.js @@ -1,7 +1,5 @@ import { networkService } from "../../main"; import { createAsyncThunk, createSlice } from "@reduxjs/toolkit"; -import { jwtDecode } from "jwt-decode"; -import axios from "axios"; const initialState = { isLoading: false, @@ -44,9 +42,29 @@ export const getAppSettings = createAsyncThunk( export const updateAppSettings = createAsyncThunk( "settings/updateSettings", - async (form, thunkApi) => { + async ({ settings, authToken }, thunkApi) => { + networkService.setBaseUrl(settings.apiBaseUrl); try { - const res = await networkService.loginUser(form); + const parsedSettings = { + apiBaseUrl: settings.apiBaseUrl, + logLevel: settings.logLevel, + clientHost: settings.clientHost, + jwtSecret: settings.jwtSecret, + dbType: settings.dbType, + dbConnectionString: settings.dbConnectionString, + redisHost: settings.redisHost, + redisPort: settings.redisPort, + jwtTTL: settings.jwtTTL, + pagespeedApiKey: settings.pagespeedApiKey, + systemEmailHost: settings.systemEmailHost, + systemEmailPort: settings.systemEmailPort, + systemEmailAddress: settings.systemEmailAddress, + systemEmailPassword: settings.systemEmailPassword, + }; + const res = await networkService.updateAppSettings({ + settings: parsedSettings, + authToken, + }); return res.data; } catch (error) { if (error.response && error.response.data) { @@ -76,6 +94,7 @@ const handleUpdateSettingsFulfilled = (state, action) => { state.isLoading = false; state.success = action.payload.success; state.msg = action.payload.msg; + Object.assign(state, action.payload.data); }; const handleUpdateSettingsRejected = (state, action) => { state.isLoading = false; diff --git a/Client/src/Pages/AdvancedSettings/index.jsx b/Client/src/Pages/AdvancedSettings/index.jsx index 6d227ba5d..61cdd86a9 100644 --- a/Client/src/Pages/AdvancedSettings/index.jsx +++ b/Client/src/Pages/AdvancedSettings/index.jsx @@ -10,16 +10,20 @@ import PropTypes from "prop-types"; import LoadingButton from "@mui/lab/LoadingButton"; import { ConfigBox } from "../Settings/styled"; import { useNavigate } from "react-router"; -import { getAppSettings } from "../../Features/Settings/settingsSlice"; +import { + getAppSettings, + updateAppSettings, +} from "../../Features/Settings/settingsSlice"; import { useEffect, useState } from "react"; import Select from "../../Components/Inputs/Select"; + const AdvancedSettings = ({ isAdmin }) => { const theme = useTheme(); const { user, authToken } = useSelector((state) => state.auth); + const dispatch = useDispatch(); const navigate = useNavigate(); const settings = useSelector((state) => state.settings); const [localSettings, setLocalSettings] = useState(settings); - const logItems = [ { _id: 1, name: "none" }, { _id: 2, name: "debug" }, @@ -45,6 +49,19 @@ const AdvancedSettings = ({ isAdmin }) => { setLocalSettings({ ...localSettings, [id]: value }); }; + const handleSave = async () => { + const action = await dispatch( + updateAppSettings({ settings: localSettings, authToken }) + ); + let body = ""; + if (action.payload.success) { + body = "Settings saved successfully"; + } else { + body = "Failed to save settings"; + } + createToast({ body }); + }; + return ( {