From d58dee6983e76977431afd178c33748459a19e2f Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Mon, 5 May 2025 14:56:24 -0400 Subject: [PATCH 01/20] add new inputfield for api key in settings --- client/src/Pages/Settings/index.jsx | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx index 1bad8414d..7e04d6390 100644 --- a/client/src/Pages/Settings/index.jsx +++ b/client/src/Pages/Settings/index.jsx @@ -54,6 +54,7 @@ const Settings = () => { const [form, setForm] = useState({ enableDistributedUptime: distributedUptimeEnabled, ttl: checkTTL ? (checkTTL / SECONDS_PER_DAY).toString() : 0, + pagespeedApiKey: "", }); const [version, setVersion] = useState("unknown"); const [errors, setErrors] = useState({}); @@ -277,6 +278,26 @@ const Settings = () => { )} + + + Google Pagespeed API Key + + Manage your pagespeed API key + + + + + + {isAdmin && ( From 2f8981e379a9c6aab50821d391b3dd64e35dab28 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Mon, 5 May 2025 15:10:32 -0400 Subject: [PATCH 02/20] import and use adorment in textinput to toggle visibility --- client/src/Pages/Settings/index.jsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx index 7e04d6390..c43ebf69e 100644 --- a/client/src/Pages/Settings/index.jsx +++ b/client/src/Pages/Settings/index.jsx @@ -6,6 +6,7 @@ import Select from "../../Components/Inputs/Select"; import { useIsAdmin } from "../../Hooks/useIsAdmin"; import Dialog from "../../Components/Dialog"; import ConfigBox from "../../Components/ConfigBox"; +import { PasswordEndAdornment } from "../../Components/Inputs/TextInput/Adornments"; import { WalletMultiButton, WalletDisconnectButton, @@ -57,6 +58,7 @@ const Settings = () => { pagespeedApiKey: "", }); const [version, setVersion] = useState("unknown"); + const [apiKeyFieldType, setApiKeyFieldType] = useState("password"); const [errors, setErrors] = useState({}); const deleteStatsMonitorsInitState = { deleteMonitors: false, deleteStats: false }; const [isOpen, setIsOpen] = useState(deleteStatsMonitorsInitState); @@ -290,11 +292,17 @@ const Settings = () => { id="pagespeedApiKey" label="PageSpeed API Key" value={form.pagespeedApiKey} + type={apiKeyFieldType} onChange={handleChange} - type="password" optionalLabel="(Optional)" - helperText={errors.pagespeedApiKey} error={!!errors.pagespeedApiKey} + helperText={errors.pagespeedApiKey} + endAdornment={ + + } /> From cc454ab51962007c81e69211a9d2e8e1d3c9f68e Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Mon, 5 May 2025 16:02:59 -0400 Subject: [PATCH 03/20] update loadSettings logic to prioritize db env values for testing --- server/service/settingsService.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/server/service/settingsService.js b/server/service/settingsService.js index 1443755f9..91dd73b38 100755 --- a/server/service/settingsService.js +++ b/server/service/settingsService.js @@ -48,12 +48,9 @@ class SettingsService { // If there are any settings that weren't set by environment variables, use user settings from DB for (const key in envConfig) { - if ( - typeof envConfig?.[key] === "undefined" && - typeof dbSettings?.[key] !== "undefined" - ) { + if (typeof dbSettings?.[key] !== "undefined") { this.settings[key] = dbSettings[key]; - } + } } await this.appSettings.updateOne({}, { $set: this.settings }, { upsert: true }); From d4ed97992fad549c59d34901efb7daff360184ee Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Mon, 5 May 2025 16:03:30 -0400 Subject: [PATCH 04/20] update dispatch action to include pagespeedapi key --- client/src/Pages/Settings/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx index c43ebf69e..456e620ff 100644 --- a/client/src/Pages/Settings/index.jsx +++ b/client/src/Pages/Settings/index.jsx @@ -128,7 +128,7 @@ const Settings = () => { const updatedUser = { ...user, checkTTL: form.ttl }; const [userAction, settingsAction] = await Promise.all([ dispatch(update({ localData: updatedUser })), - dispatch(updateAppSettings({ settings: { language: language } })), + dispatch(updateAppSettings({ settings: { language: language, pagespeedApiKey: form.pagespeedApiKey } })), ]); if (userAction.payload.success && settingsAction.payload.success) { From 86c31eaaf6174dfe339b982edf57728f9b3d90c5 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Mon, 5 May 2025 16:06:24 -0400 Subject: [PATCH 05/20] add pagespeed key to settings validation --- client/src/Validation/validation.js | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/Validation/validation.js b/client/src/Validation/validation.js index 38092c9e6..0e303c27f 100644 --- a/client/src/Validation/validation.js +++ b/client/src/Validation/validation.js @@ -255,6 +255,7 @@ const settingsValidation = joi.object({ ttl: joi.number().required().messages({ "string.empty": "TTL is required", }), + pagespeedApiKey: joi.string().allow("").optional(), }); const dayjsValidator = (value, helpers) => { From 47f84941937a85737ccc1121a7e86710f2541ce3 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Tue, 6 May 2025 14:29:59 -0400 Subject: [PATCH 06/20] update handlechange to modify form validation logic --- client/src/Pages/Settings/index.jsx | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx index 456e620ff..64607648d 100644 --- a/client/src/Pages/Settings/index.jsx +++ b/client/src/Pages/Settings/index.jsx @@ -94,12 +94,17 @@ const Settings = () => { return; } + let inputValue = value; + if (id === "ttl") { + inputValue = value.replace(/[^0-9]/g, ""); + } + + const updatedForm = { ...form, [id]: inputValue }; const { error } = settingsValidation.validate( - { [id]: value }, - { - abortEarly: false, - } + updatedForm, + { abortEarly: false } ); + if (!error || error.details.length === 0) { setErrors({}); } else { @@ -110,12 +115,8 @@ const Settings = () => { setErrors(newErrors); logger.error("Validation errors:", error.details); } - let inputValue = value; - id === "ttl" && (inputValue = value.replace(/[^0-9]/g, "")); - setForm((prev) => ({ - ...prev, - [id]: inputValue, - })); + + setForm(updatedForm); }; // TODO Handle saving From 336ffcc9e98235a71a6f18c1261f8b691df72516 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Tue, 6 May 2025 14:53:24 -0400 Subject: [PATCH 07/20] Add .unknown(true) to validation schema to ignore extra fields --- client/src/Validation/validation.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/src/Validation/validation.js b/client/src/Validation/validation.js index 0e303c27f..9c4b12c7a 100644 --- a/client/src/Validation/validation.js +++ b/client/src/Validation/validation.js @@ -256,7 +256,8 @@ const settingsValidation = joi.object({ "string.empty": "TTL is required", }), pagespeedApiKey: joi.string().allow("").optional(), -}); +}) +.unknown(true); const dayjsValidator = (value, helpers) => { if (!dayjs(value).isValid()) { From 9dc6c3c7b1046915f881f86d6df01f9477aecae1 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Tue, 6 May 2025 14:57:07 -0400 Subject: [PATCH 08/20] revert loadsettings changes --- server/service/settingsService.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/server/service/settingsService.js b/server/service/settingsService.js index 91dd73b38..1443755f9 100755 --- a/server/service/settingsService.js +++ b/server/service/settingsService.js @@ -48,9 +48,12 @@ class SettingsService { // If there are any settings that weren't set by environment variables, use user settings from DB for (const key in envConfig) { - if (typeof dbSettings?.[key] !== "undefined") { + if ( + typeof envConfig?.[key] === "undefined" && + typeof dbSettings?.[key] !== "undefined" + ) { this.settings[key] = dbSettings[key]; - } + } } await this.appSettings.updateOne({}, { $set: this.settings }, { upsert: true }); From 3e8f3a7a89e72615e06786075e6d1aca2b7ad9c9 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Tue, 6 May 2025 15:56:01 -0400 Subject: [PATCH 09/20] include pagespeedapikey to parsedSettings to save in db --- client/src/Features/Settings/settingsSlice.js | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/Features/Settings/settingsSlice.js b/client/src/Features/Settings/settingsSlice.js index 614ab7159..51f85a2b5 100644 --- a/client/src/Features/Settings/settingsSlice.js +++ b/client/src/Features/Settings/settingsSlice.js @@ -33,6 +33,7 @@ export const updateAppSettings = createAsyncThunk( try { const parsedSettings = { language: settings.language, + pagespeedApiKey: settings.pagespeedApiKey, }; const res = await networkService.updateAppSettings({ settings: parsedSettings }); return res.data; From b493b5e0e5749b7b8ee528ddefb7991c3db46e73 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Tue, 6 May 2025 15:57:00 -0400 Subject: [PATCH 10/20] modify loadSettings logic to fetch env from DB --- server/service/settingsService.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/server/service/settingsService.js b/server/service/settingsService.js index 1443755f9..7a219a89d 100755 --- a/server/service/settingsService.js +++ b/server/service/settingsService.js @@ -48,11 +48,14 @@ class SettingsService { // If there are any settings that weren't set by environment variables, use user settings from DB for (const key in envConfig) { - if ( - typeof envConfig?.[key] === "undefined" && - typeof dbSettings?.[key] !== "undefined" - ) { - this.settings[key] = dbSettings[key]; + + const envValue = envConfig[key]; + const dbValue = dbSettings?.[key]; + + if (envValue === undefined || envValue === "") { + if (dbValue !== undefined) { + this.settings[key] = dbValue; + } } } From 85c3a16f411e5a94d3662a971f22e0488855f79d Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Tue, 6 May 2025 16:45:48 -0400 Subject: [PATCH 11/20] add pagespeed to intialstate and handler in settingsslice --- client/src/Features/Settings/settingsSlice.js | 2 ++ server/service/settingsService.js | 13 +++++-------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/client/src/Features/Settings/settingsSlice.js b/client/src/Features/Settings/settingsSlice.js index 51f85a2b5..35e17e360 100644 --- a/client/src/Features/Settings/settingsSlice.js +++ b/client/src/Features/Settings/settingsSlice.js @@ -6,6 +6,7 @@ const initialState = { apiBaseUrl: "", logLevel: "debug", language: "", + pagespeedApiKey: "", }; export const getAppSettings = createAsyncThunk( @@ -57,6 +58,7 @@ const handleGetSettingsFulfilled = (state, action) => { state.apiBaseUrl = action.payload.data.apiBaseUrl; state.logLevel = action.payload.data.logLevel; state.language = action.payload.data.language; + state.pagespeedApiKey = action.payload.data.pagespeedApiKey; }; const handleGetSettingsRejected = (state, action) => { state.isLoading = false; diff --git a/server/service/settingsService.js b/server/service/settingsService.js index 7a219a89d..1443755f9 100755 --- a/server/service/settingsService.js +++ b/server/service/settingsService.js @@ -48,14 +48,11 @@ class SettingsService { // If there are any settings that weren't set by environment variables, use user settings from DB for (const key in envConfig) { - - const envValue = envConfig[key]; - const dbValue = dbSettings?.[key]; - - if (envValue === undefined || envValue === "") { - if (dbValue !== undefined) { - this.settings[key] = dbValue; - } + if ( + typeof envConfig?.[key] === "undefined" && + typeof dbSettings?.[key] !== "undefined" + ) { + this.settings[key] = dbSettings[key]; } } From 91d373264511a2b4ab25834c003acfdd0ed9dfa9 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Tue, 6 May 2025 16:47:53 -0400 Subject: [PATCH 12/20] add useffect to load pagespeed key in the form --- client/src/Pages/Settings/index.jsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx index 64607648d..b82407e05 100644 --- a/client/src/Pages/Settings/index.jsx +++ b/client/src/Pages/Settings/index.jsx @@ -83,6 +83,15 @@ const Settings = () => { fetchLatestVersion(); }, []); + const { pagespeedApiKey } = useSelector((state) => state.settings); + + useEffect(() => { + setForm((prev) => ({ + ...prev, + pagespeedApiKey: pagespeedApiKey || "", + })); + }, [pagespeedApiKey]); + const handleChange = (event) => { const { type, checked, value, id } = event.target; From 26e9ff3568a31aef466774abe64f98cd1864a74a Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Wed, 7 May 2025 13:51:34 -0400 Subject: [PATCH 13/20] add flag to track if api key is set --- client/src/Pages/Settings/index.jsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx index b82407e05..9c6b0f94f 100644 --- a/client/src/Pages/Settings/index.jsx +++ b/client/src/Pages/Settings/index.jsx @@ -7,6 +7,7 @@ import { useIsAdmin } from "../../Hooks/useIsAdmin"; import Dialog from "../../Components/Dialog"; import ConfigBox from "../../Components/ConfigBox"; import { PasswordEndAdornment } from "../../Components/Inputs/TextInput/Adornments"; +import { getAppSettings } from "../../Features/Settings/settingsSlice"; import { WalletMultiButton, WalletDisconnectButton, @@ -59,6 +60,7 @@ const Settings = () => { }); const [version, setVersion] = useState("unknown"); const [apiKeyFieldType, setApiKeyFieldType] = useState("password"); + const [isApiKeySet, setIsApiKeySet] = useState(false); const [errors, setErrors] = useState({}); const deleteStatsMonitorsInitState = { deleteMonitors: false, deleteStats: false }; const [isOpen, setIsOpen] = useState(deleteStatsMonitorsInitState); @@ -83,6 +85,10 @@ const Settings = () => { fetchLatestVersion(); }, []); + useEffect(() => { + dispatch(getAppSettings()); + }, []); + const { pagespeedApiKey } = useSelector((state) => state.settings); useEffect(() => { From 8ce7477b069a8c63942548eae9c67ae6a0a55383 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Wed, 7 May 2025 13:52:48 -0400 Subject: [PATCH 14/20] update useffect to handle pagespeed key --- client/src/Pages/Settings/index.jsx | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx index 9c6b0f94f..77ce770bd 100644 --- a/client/src/Pages/Settings/index.jsx +++ b/client/src/Pages/Settings/index.jsx @@ -92,11 +92,20 @@ const Settings = () => { const { pagespeedApiKey } = useSelector((state) => state.settings); useEffect(() => { - setForm((prev) => ({ - ...prev, - pagespeedApiKey: pagespeedApiKey || "", - })); - }, [pagespeedApiKey]); + if (pagespeedApiKey) { + setIsApiKeySet(true); + setForm((prev) => ({ + ...prev, + pagespeedApiKey: "********", + })); + } else { + setIsApiKeySet(false); + setForm((prev) => ({ + ...prev, + pagespeedApiKey: "", + })); + } + }, [pagespeedApiKey]); const handleChange = (event) => { const { type, checked, value, id } = event.target; From d963fe65c1a582d29063c905fe3ac753da6d2fa9 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Wed, 7 May 2025 13:53:45 -0400 Subject: [PATCH 15/20] add handler function to reset api key --- client/src/Pages/Settings/index.jsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx index 77ce770bd..834d7d4b6 100644 --- a/client/src/Pages/Settings/index.jsx +++ b/client/src/Pages/Settings/index.jsx @@ -215,6 +215,14 @@ const Settings = () => { } }; + const handleResetApiKey = () => { + setIsApiKeySet(false); + setForm((prev) => ({ + ...prev, + pagespeedApiKey: "", + })); + }; + const languages = Object.keys(i18n.options.resources || {}); return ( From f2e8f16af8ac1ede6bacdfba1d4e4f18b2655544 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Wed, 7 May 2025 13:55:48 -0400 Subject: [PATCH 16/20] update pagespeed input field jsx --- client/src/Pages/Settings/index.jsx | 46 +++++++++++++++++++---------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx index 834d7d4b6..b2f90f554 100644 --- a/client/src/Pages/Settings/index.jsx +++ b/client/src/Pages/Settings/index.jsx @@ -321,22 +321,38 @@ const Settings = () => { - + + + ) + } /> - } - /> + + {isApiKeySet && ( + + )} + {isAdmin && ( From e7742f9be8b7c129dc0ef5091050f780382fd3a9 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Wed, 7 May 2025 14:17:47 -0400 Subject: [PATCH 17/20] update helpertext and add typography component to display note --- client/src/Pages/Settings/index.jsx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx index b2f90f554..f1413c2b5 100644 --- a/client/src/Pages/Settings/index.jsx +++ b/client/src/Pages/Settings/index.jsx @@ -96,7 +96,7 @@ const Settings = () => { setIsApiKeySet(true); setForm((prev) => ({ ...prev, - pagespeedApiKey: "********", + pagespeedApiKey: "*************************************", })); } else { setIsApiKeySet(false); @@ -332,11 +332,7 @@ const Settings = () => { disabled={isApiKeySet} optionalLabel="(Optional)" error={!!errors.pagespeedApiKey} - helperText={ - isApiKeySet - ? "API key is set. Click Reset to change it." - : errors.pagespeedApiKey - } + helperText={errors.pagespeedApiKey} endAdornment={ !isApiKeySet && ( { ) } /> + {isApiKeySet && ( + + API key is set. Click Reset to change it. + + )} {isApiKeySet && ( - )} From 7c8aea03239a07fb5f60ed47e5b0df7fa0468590 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Wed, 7 May 2025 14:57:50 -0400 Subject: [PATCH 18/20] add localisation for strings --- client/src/Pages/Settings/index.jsx | 12 ++++++------ client/src/locales/gb.json | 7 ++++++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx index f1413c2b5..34ff60cb2 100644 --- a/client/src/Pages/Settings/index.jsx +++ b/client/src/Pages/Settings/index.jsx @@ -96,7 +96,7 @@ const Settings = () => { setIsApiKeySet(true); setForm((prev) => ({ ...prev, - pagespeedApiKey: "*************************************", + pagespeedApiKey: t("maskedPageSpeedKeyPlaceholder"), })); } else { setIsApiKeySet(false); @@ -315,9 +315,9 @@ const Settings = () => { )} - Google Pagespeed API Key + {t("pageSpeedApiKeyFieldTitle")} - Manage your pagespeed API key + {t("pageSpeedApiKeyFieldDescription")} @@ -325,7 +325,7 @@ const Settings = () => { { } /> {isApiKeySet && ( - - API key is set. Click Reset to change it. + + {t("pageSpeedApiKeyFieldResetLabel")} )} diff --git a/client/src/locales/gb.json b/client/src/locales/gb.json index 9deaa9e48..c14f98c1d 100644 --- a/client/src/locales/gb.json +++ b/client/src/locales/gb.json @@ -410,5 +410,10 @@ "validationFailed": "Validation failed", "noFileSelected": "No file selected", "fallbackPage": "Import a file to upload a list of servers in bulk" - } + }, + "maskedPageSpeedKeyPlaceholder": "*************************************", + "pageSpeedApiKeyFieldTitle": "Google PageSpeed API key", + "pageSpeedApiKeyFieldLabel": "PageSpeed API key", + "pageSpeedApiKeyFieldDescription": "Enter your Google PageSpeed API key to enable pagespeed monitoring. Click Reset to update the key.", + "pageSpeedApiKeyFieldResetLabel": "API key is set. Click Reset to change it." } From 376b820ff42284e93143116e978ff60d65acc5ac Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Wed, 7 May 2025 15:04:08 -0400 Subject: [PATCH 19/20] add spacing between label and input field for textinput component --- client/src/Components/Inputs/TextInput/index.jsx | 1 + client/src/Pages/Settings/index.jsx | 2 +- client/src/locales/gb.json | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/client/src/Components/Inputs/TextInput/index.jsx b/client/src/Components/Inputs/TextInput/index.jsx index 38a6b6161..2e4313c26 100644 --- a/client/src/Components/Inputs/TextInput/index.jsx +++ b/client/src/Components/Inputs/TextInput/index.jsx @@ -116,6 +116,7 @@ const TextInput = forwardRef( fontSize={"var(--env-var-font-size-medium)"} color={theme.palette.primary.contrastTextSecondary} fontWeight={500} + mb={theme.spacing(2)} > {label} {isRequired && } diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx index 34ff60cb2..8328dafb3 100644 --- a/client/src/Pages/Settings/index.jsx +++ b/client/src/Pages/Settings/index.jsx @@ -350,7 +350,7 @@ const Settings = () => { {isApiKeySet && ( )} diff --git a/client/src/locales/gb.json b/client/src/locales/gb.json index c14f98c1d..1b40dcf56 100644 --- a/client/src/locales/gb.json +++ b/client/src/locales/gb.json @@ -415,5 +415,6 @@ "pageSpeedApiKeyFieldTitle": "Google PageSpeed API key", "pageSpeedApiKeyFieldLabel": "PageSpeed API key", "pageSpeedApiKeyFieldDescription": "Enter your Google PageSpeed API key to enable pagespeed monitoring. Click Reset to update the key.", - "pageSpeedApiKeyFieldResetLabel": "API key is set. Click Reset to change it." + "pageSpeedApiKeyFieldResetLabel": "API key is set. Click Reset to change it.", + "reset": "Reset" } From 51d971929392f594d734f1a44a5819ae7cec58fb Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Wed, 7 May 2025 15:45:09 -0400 Subject: [PATCH 20/20] update the layout structure to improve UI --- client/src/Pages/Settings/index.jsx | 72 +++++++++++++---------------- 1 file changed, 33 insertions(+), 39 deletions(-) diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx index 8328dafb3..6da0ac68a 100644 --- a/client/src/Pages/Settings/index.jsx +++ b/client/src/Pages/Settings/index.jsx @@ -314,47 +314,41 @@ const Settings = () => { )} - - {t("pageSpeedApiKeyFieldTitle")} - - {t("pageSpeedApiKeyFieldDescription")} - - - - - - - ) - } + + {t("pageSpeedApiKeyFieldTitle")} + + {t("pageSpeedApiKeyFieldDescription")} + + + + - {isApiKeySet && ( - - {t("pageSpeedApiKeyFieldResetLabel")} - - )} - - {isApiKeySet && ( - - )} - + ) + } + /> + {isApiKeySet && ( + + {t("pageSpeedApiKeyFieldResetLabel")} + + )} + {isAdmin && (