From f423f3e1c0c7670cac893fd2f94cc511492e38b1 Mon Sep 17 00:00:00 2001 From: Ardeman Date: Wed, 12 Mar 2025 20:24:54 +0800 Subject: [PATCH] feat: integrate toast notifications for success and error handling --- app/pages/form-advertisements/index.tsx | 20 +++++++++--------- app/pages/form-category/index.tsx | 23 ++++++++++++--------- app/pages/form-subscriptions-plan/index.tsx | 23 ++++++++++++--------- 3 files changed, 36 insertions(+), 30 deletions(-) diff --git a/app/pages/form-advertisements/index.tsx b/app/pages/form-advertisements/index.tsx index 6b87f9d..121fd5b 100644 --- a/app/pages/form-advertisements/index.tsx +++ b/app/pages/form-advertisements/index.tsx @@ -1,5 +1,6 @@ import { zodResolver } from '@hookform/resolvers/zod' -import { useEffect, useState } from 'react' +import { useEffect } from 'react' +import toast from 'react-hot-toast' import { useFetcher, useNavigate } from 'react-router' import { RemixFormProvider, useRemixForm } from 'remix-hook-form' import { z } from 'zod' @@ -38,20 +39,22 @@ export const FormAdvertisementsPage = (properties: TProperties) => { url: adData?.url || '', }, }) - const [error, setError] = useState() const { handleSubmit } = formMethods useEffect(() => { - if (!fetcher.data?.success) { - setError(fetcher.data?.message) + if (fetcher.data?.success === false) { + toast.error(fetcher.data?.message) return } - navigate('/lg-admin/advertisements') - setError(undefined) + if (fetcher.data?.success === true) { + toast.success(`Banner iklan berhasil ${adData ? 'diupdate' : 'dibuat'}!`) + navigate('/lg-admin/advertisements') + return + } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [fetcher]) + }, [fetcher.data]) return (
@@ -64,9 +67,6 @@ export const FormAdvertisementsPage = (properties: TProperties) => { action={`/actions/admin/advertisements/${adData ? 'update' : 'create'}`} className="space-y-4" > - {error && ( -
{error}
- )}
{ description: categoryData?.description || '', }, }) - const [error, setError] = useState() const { handleSubmit, watch, setValue } = formMethods const watchName = watch('name') useEffect(() => { - if (!fetcher.data?.success) { - setError(fetcher.data?.message) + if (fetcher.data?.success === false) { + toast.error(fetcher.data?.message) + return + } + + if (fetcher.data?.success === true) { + toast.success( + `Kategori berhasil ${categoryData ? 'diupdate' : 'dibuat'}!`, + ) + navigate('/lg-admin/categories') return } - navigate('/lg-admin/categories') - setError(undefined) // eslint-disable-next-line react-hooks/exhaustive-deps - }, [fetcher]) + }, [fetcher.data]) useEffect(() => { setValue('code', urlFriendlyCode(watchName)) @@ -69,9 +75,6 @@ export const FormCategoryPage = (properties: TProperties) => { action={`/actions/admin/categories/${categoryData ? 'update' : 'create'}`} className="space-y-4" > - {error && ( -
{error}
- )}
{ status: subscribePlanData?.status || undefined, }, }) - const [error, setError] = useState() const { handleSubmit, watch, setValue } = formMethods const watchName = watch('name') useEffect(() => { - if (!fetcher.data?.success) { - setError(fetcher.data?.message) + if (fetcher.data?.success === false) { + toast.error(fetcher.data?.message) + return + } + + if (fetcher.data?.success === true) { + toast.success( + `Subscribe Plan berhasil ${subscribePlanData ? 'diupdate' : 'dibuat'}!`, + ) + navigate('/lg-admin/subscribe-plan') return } - navigate('/lg-admin/subscribe-plan') - setError(undefined) // eslint-disable-next-line react-hooks/exhaustive-deps - }, [fetcher]) + }, [fetcher.data]) useEffect(() => { setValue('code', urlFriendlyCode(watchName)) @@ -73,9 +79,6 @@ export const FormSubscribePlanPage = (properties: TProperties) => { action={`/actions/admin/subscribe-plan/${subscribePlanData ? 'update' : 'create'}`} className="space-y-4" > - {error && ( -
{error}
- )}