From eb7cc042566606ecd596f81f55cfe9c870d628e9 Mon Sep 17 00:00:00 2001 From: Ardeman Date: Wed, 12 Mar 2025 19:23:46 +0800 Subject: [PATCH] feat: enhance error handling in content forms with state management and toast notifications --- app/pages/form-advertisements/index.tsx | 12 ++++++++---- app/pages/form-contents/index.tsx | 20 ++++++++------------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/pages/form-advertisements/index.tsx b/app/pages/form-advertisements/index.tsx index 693c8e5..6b87f9d 100644 --- a/app/pages/form-advertisements/index.tsx +++ b/app/pages/form-advertisements/index.tsx @@ -1,6 +1,5 @@ import { zodResolver } from '@hookform/resolvers/zod' -import { useEffect } from 'react' -import toast from 'react-hot-toast' +import { useEffect, useState } from 'react' import { useFetcher, useNavigate } from 'react-router' import { RemixFormProvider, useRemixForm } from 'remix-hook-form' import { z } from 'zod' @@ -39,16 +38,18 @@ export const FormAdvertisementsPage = (properties: TProperties) => { url: adData?.url || '', }, }) + const [error, setError] = useState() const { handleSubmit } = formMethods useEffect(() => { if (!fetcher.data?.success) { - toast.error(fetcher.data?.message) + setError(fetcher.data?.message) return } - toast.success(`Banner iklan berhasil ${adData ? 'diupdate' : 'dibuat'}!`) + navigate('/lg-admin/advertisements') + setError(undefined) // eslint-disable-next-line react-hooks/exhaustive-deps }, [fetcher]) @@ -63,6 +64,9 @@ export const FormAdvertisementsPage = (properties: TProperties) => { action={`/actions/admin/advertisements/${adData ? 'update' : 'create'}`} className="space-y-4" > + {error && ( +
{error}
+ )}
{ ) const { categoriesData: categories } = loaderData || {} const { tagsData: tags } = loaderData || {} - const [error, setError] = useState() const formMethods = useRemixForm({ mode: 'onSubmit', @@ -97,15 +97,14 @@ export const FormContentsPage = (properties: TProperties) => { const watchTags = watch('tags') useEffect(() => { - if (!fetcher.data?.success) { - setError(fetcher.data?.message) - return + if (fetcher.data?.success) { + toast.success(`Artikel berhasil ${newsData ? 'diupdate' : 'dibuat'}!`) + navigate('/lg-admin/contents') + } else { + toast.error(fetcher.data?.message) } - - navigate('/lg-admin/contents') - setError(undefined) // eslint-disable-next-line react-hooks/exhaustive-deps - }, [fetcher]) + }, [fetcher.data]) return (
@@ -117,9 +116,6 @@ export const FormContentsPage = (properties: TProperties) => { action={`/actions/admin/contents/${newsData ? 'update' : 'create'}`} className="space-y-4" > - {error && ( -
{error}
- )}