From 233b621bc7552de9c5ed9c97f39db2bb4cbd0882 Mon Sep 17 00:00:00 2001 From: Ravinou Date: Sat, 25 Jan 2025 18:56:18 +0100 Subject: [PATCH] =?UTF-8?q?refactor:=20=E2=9A=A1=20apprise=20services=20fo?= =?UTF-8?q?rm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppriseMode/AppriseMode.tsx | 2 +- .../AppriseURLs/AppriseURLs.tsx | 72 +++++++++---------- ...apprise-mode.types.ts => apprise.types.ts} | 4 ++ 3 files changed, 40 insertions(+), 38 deletions(-) rename types/api/{apprise-mode.types.ts => apprise.types.ts} (68%) diff --git a/Containers/UserSettings/AppriseAlertSettings/AppriseMode/AppriseMode.tsx b/Containers/UserSettings/AppriseAlertSettings/AppriseMode/AppriseMode.tsx index b13b5d5..fd8a944 100644 --- a/Containers/UserSettings/AppriseAlertSettings/AppriseMode/AppriseMode.tsx +++ b/Containers/UserSettings/AppriseAlertSettings/AppriseMode/AppriseMode.tsx @@ -9,7 +9,7 @@ import { AppriseModeEnum } from '~/types/domain/config.types'; //Components import Error from '~/Components/UI/Error/Error'; import { Optional } from '~/types'; -import { AppriseModeResponse } from '~/types/api/apprise-mode.types'; +import { AppriseModeResponse } from '~/types/api/apprise.types'; import { useFormStatus } from '~/hooks/useFormStatus'; type AppriseModeDataForm = { diff --git a/Containers/UserSettings/AppriseAlertSettings/AppriseURLs/AppriseURLs.tsx b/Containers/UserSettings/AppriseAlertSettings/AppriseURLs/AppriseURLs.tsx index bae79eb..429ba55 100644 --- a/Containers/UserSettings/AppriseAlertSettings/AppriseURLs/AppriseURLs.tsx +++ b/Containers/UserSettings/AppriseAlertSettings/AppriseURLs/AppriseURLs.tsx @@ -6,7 +6,14 @@ import { SpinnerCircularFixed } from 'spinners-react'; import { useForm } from 'react-hook-form'; //Components -import Error from '../../../../Components/UI/Error/Error'; +import Error from '~/Components/UI/Error/Error'; +import { Optional } from '~/types'; +import { AppriseServicesResponse } from '~/types/api/apprise.types'; +import { useFormStatus } from '~/hooks/useFormStatus'; + +type AppriseURLsDataForm = { + appriseURLs: string; +}; export default function AppriseURLs() { //Var @@ -14,13 +21,14 @@ export default function AppriseURLs() { register, handleSubmit, formState: { errors }, - } = useForm({ mode: 'onBlur' }); + } = useForm({ mode: 'onBlur' }); + + const { isLoading, isSaved, error, setIsLoading, handleSuccess, handleError, clearError } = + useFormStatus(); ////State - const [formIsLoading, setFormIsLoading] = useState(false); - const [urlsFormIsSaved, setUrlsFormIsSaved] = useState(false); - const [appriseServicesList, setAppriseServicesList] = useState(); - const [error, setError] = useState(); + const [appriseServicesList, setAppriseServicesList] = useState>(); + const [fetchError, setFetchError] = useState>(); ////LifeCycle //Component did mount @@ -34,17 +42,14 @@ export default function AppriseURLs() { 'Content-type': 'application/json', }, }); - let servicesArray = (await response.json()).appriseServices; - const AppriseServicesListToText = () => { - let list = ''; - for (let service of servicesArray) { - list += service + '\n'; - } - return list; - }; - setAppriseServicesList(AppriseServicesListToText()); + + const data: AppriseServicesResponse = await response.json(); + const servicesText = data.appriseServices.join('\n'); + setAppriseServicesList(servicesText); + setFetchError(false); } catch (error) { - console.log('Fetching Apprise services list failed.'); + setFetchError(true); + handleError('Fetching Apprise services list failed.'); } }; getAppriseServices(); @@ -52,12 +57,14 @@ export default function AppriseURLs() { ////Functions //Form submit handler to modify Apprise services - const urlsFormSubmitHandler = async (data) => { - //Remove old error - setError(); - //Loading button on submit to avoid multiple send. - setFormIsLoading(true); - //POST API to update Apprise Services + const urlsFormSubmitHandler = async (data: AppriseURLsDataForm) => { + clearError(); + if (fetchError) { + handleError('Cannot update Apprise services. Failed to fetch the initial list.'); + return; + } + setIsLoading(true); + try { const response = await fetch('/api/account/updateAppriseServices', { method: 'PUT', @@ -69,20 +76,12 @@ export default function AppriseURLs() { const result = await response.json(); if (!response.ok) { - setFormIsLoading(false); - setError(result.message); - setTimeout(() => setError(), 4000); + handleError(result.message); } else { - setFormIsLoading(false); - setUrlsFormIsSaved(true); - setTimeout(() => setUrlsFormIsSaved(false), 3000); + handleSuccess(); } } catch (error) { - setFormIsLoading(false); - setError('Failed to update your services. Contact your administrator.'); - setTimeout(() => { - setError(); - }, 4000); + handleError('Failed to update your Apprise services.'); } }; @@ -91,9 +90,8 @@ export default function AppriseURLs() { {/* APPRISE SERVICES URLS */}
Apprise URLs
- {error && }
- {formIsLoading && ( + {isLoading && ( )} - {urlsFormIsSaved && ( + {isSaved && (
✅ Apprise configuration has been saved.
@@ -115,7 +113,6 @@ export default function AppriseURLs() { >