From 6c1e91035dd27f1334236e017c7e7f174b103811 Mon Sep 17 00:00:00 2001 From: = <=> Date: Tue, 23 Sep 2025 17:00:41 -0300 Subject: [PATCH] [MVPTN-75] refactor(geral): implementando gerenciador de erro, removendo mock de dados e usando o botao de loading --- .../censec-natureza-litigio/page.tsx | 30 ++++- .../TCensecNaturezaLitigioForm.tsx | 14 +-- .../TCensecNaturezaLitigioIndexData.ts | 7 -- .../mockCensecNaturezaLitigio.ts | 113 ------------------ .../_schemas/TCensecNaturezaLitigioSchema.ts | 2 +- .../TCensecNaturezaLitigioIndexService.ts | 13 +- .../TCensecNaturezaLitigioRemoveService.ts | 7 +- .../TCensecNaturezaLitigioSaveService.ts | 7 +- 8 files changed, 46 insertions(+), 147 deletions(-) delete mode 100644 src/app/(protected)/(cadastros)/cadastros/_data/TCensecNaturezaLitigio/mockCensecNaturezaLitigio.ts diff --git a/src/app/(protected)/(cadastros)/cadastros/(t_censecnaturezalitigio)/censec-natureza-litigio/page.tsx b/src/app/(protected)/(cadastros)/cadastros/(t_censecnaturezalitigio)/censec-natureza-litigio/page.tsx index 28cca94..a17dc36 100644 --- a/src/app/(protected)/(cadastros)/cadastros/(t_censecnaturezalitigio)/censec-natureza-litigio/page.tsx +++ b/src/app/(protected)/(cadastros)/cadastros/(t_censecnaturezalitigio)/censec-natureza-litigio/page.tsx @@ -3,6 +3,7 @@ import { useEffect, useState, useCallback } from "react"; import { Card, CardContent } from "@/components/ui/card"; import { useConfirmDialog } from "@/app/_components/confirm_dialog/useConfirmDialog"; +import { useResponse } from "@/app/_response/ResponseContext" import Header from "@/app/_components/structure/Header"; import ConfirmDialog from "@/app/_components/confirm_dialog/ConfirmDialog"; @@ -16,15 +17,22 @@ import { useTCensecNaturezaLitigioSaveHook } from "../../_hooks/t_censecnatureza import { useTCensecNaturezaLitigioRemoveHook } from "../../_hooks/t_censecnaturezalitigio/useTCensecNaturezaLitigioRemoveHook"; import { TCensecNaturezaLitigioInterface } from "../../_interfaces/TCensecNaturezaLitigioInterface"; +import { SituacoesEnum } from "@/enums/SituacoesEnum"; const initialCensecNaturezaLitigio: TCensecNaturezaLitigioInterface = { censec_naturezalitigio_id: 0, descricao: "", - situacao: 'A' + situacao: SituacoesEnum.A } export default function TCensecNaturezaLitigioPage() { + // Controle de exibição de respostas + const { setResponse } = useResponse(); + + // Controle de estado do botão + const [buttonIsLoading, setButtonIsLoading] = useState(false); + // Hooks const { tCensecNaturezaLitigio, fetchTCensecNaturezaLitigio } = useTCensecNaturezaLitigioReadHook(); const { saveTCensecNaturezaLitigio } = useTCensecNaturezaLitigioSaveHook(); @@ -39,7 +47,6 @@ export default function TCensecNaturezaLitigioPage() { const { isOpen: isConfirmOpen, openDialog: openConfirmDialog, - handleConfirm, handleCancel, } = useConfirmDialog(); @@ -57,22 +64,32 @@ export default function TCensecNaturezaLitigioPage() { // Salvar item const handleSave = useCallback(async (formData: TCensecNaturezaLitigioInterface) => { + // Coloca o botão em estado de loading + setButtonIsLoading(true); await saveTCensecNaturezaLitigio(formData); - console.log(formData) + // Remove o botão do estado de loading + setButtonIsLoading(false); await fetchTCensecNaturezaLitigio(); }, [saveTCensecNaturezaLitigio, fetchTCensecNaturezaLitigio]); // Confirmar remoção const handleConfirmDelete = useCallback((item: TCensecNaturezaLitigioInterface) => { - console.log("item", item) setItemToDelete(item); openConfirmDialog(); }, [openConfirmDialog]); // Executar remoção const handleDelete = useCallback(async () => { - if (!itemToDelete) return; - console.log("item to delete",itemToDelete) + if (!itemToDelete) { + + // Define os dados da resposta visual + setResponse({ + status: 400, + message: 'Não foi informado um registro para exclusão' + }); + return; + }; + await removeTCensecNaturezaLitigio(itemToDelete); await fetchTCensecNaturezaLitigio(); setItemToDelete(null); @@ -128,6 +145,7 @@ export default function TCensecNaturezaLitigioPage() { data={selectedItem} onClose={handleCloseForm} onSave={handleSave} + buttonIsLoading={buttonIsLoading} /> ); diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/t_censecnaturezalitigio/TCensecNaturezaLitigioForm.tsx b/src/app/(protected)/(cadastros)/cadastros/_components/t_censecnaturezalitigio/TCensecNaturezaLitigioForm.tsx index 434d9ff..defb242 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_components/t_censecnaturezalitigio/TCensecNaturezaLitigioForm.tsx +++ b/src/app/(protected)/(cadastros)/cadastros/_components/t_censecnaturezalitigio/TCensecNaturezaLitigioForm.tsx @@ -5,6 +5,7 @@ import { useEffect } from 'react'; import { useForm, Controller } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; +import LoadingButton from '@/app/_components/loadingButton/LoadingButton'; import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; import { @@ -36,14 +37,10 @@ interface TCensecNaturezaLitigioFormProps { data: FormValues | null; onClose: (item: null, isFormStatus: boolean) => void; onSave: (data: FormValues) => void; + buttonIsLoading: boolean; } -export default function TCensecNaturezaLitigioForm({ - isOpen, - data, - onClose, - onSave -}: TCensecNaturezaLitigioFormProps) { +export default function TCensecNaturezaLitigioForm({isOpen, data, onClose, onSave, buttonIsLoading}: TCensecNaturezaLitigioFormProps) { const form = useForm({ resolver: zodResolver(TCensecNaturezaLitigioSchema), defaultValues: { @@ -113,9 +110,8 @@ export default function TCensecNaturezaLitigioForm({ Cancelar - + {/* Botão de loading */} + {/* Campo oculto */} diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/TCensecNaturezaLitigio/TCensecNaturezaLitigioIndexData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/TCensecNaturezaLitigio/TCensecNaturezaLitigioIndexData.ts index 806f75f..533ebef 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_data/TCensecNaturezaLitigio/TCensecNaturezaLitigioIndexData.ts +++ b/src/app/(protected)/(cadastros)/cadastros/_data/TCensecNaturezaLitigio/TCensecNaturezaLitigioIndexData.ts @@ -1,15 +1,8 @@ import API from "@/services/api/Api"; import { Methods } from "@/services/api/enums/ApiMethodEnum"; -import CensecNaturezaLitigioMockDeDados from "./mockCensecNaturezaLitigio"; - -const useMock = false export default async function TCensecNaturezaLitigioIndexData() { - if (useMock) { - return await CensecNaturezaLitigioMockDeDados(); - } - const api = new API(); try { const dados = await api.send({ diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/TCensecNaturezaLitigio/mockCensecNaturezaLitigio.ts b/src/app/(protected)/(cadastros)/cadastros/_data/TCensecNaturezaLitigio/mockCensecNaturezaLitigio.ts deleted file mode 100644 index ed360af..0000000 --- a/src/app/(protected)/(cadastros)/cadastros/_data/TCensecNaturezaLitigio/mockCensecNaturezaLitigio.ts +++ /dev/null @@ -1,113 +0,0 @@ -export default async function CensecNaturezaLitigioMockDeDados() { - return Promise.resolve({ - status: 200, - message: 'Dados localizados', - data: [ - { - censec_naturezaltigio_id: 1, - descricao: "Bancário", - situacao: "A" - }, - { - censec_naturezaltigio_id: 2, - descricao: "Concessionária de Água", - situacao: "A" - }, - { - censec_naturezaltigio_id: 3, - descricao: "Concessionária de Gás", - situacao: "A" - }, - { - censec_naturezaltigio_id: 4, - descricao: "Concessionária de Luz", - situacao: "A" - }, - { - censec_naturezaltigio_id: 5, - descricao: "Consumidor", - situacao: "A" - }, - { - censec_naturezaltigio_id: 6, - descricao: "Contrato", - situacao: "A" - }, - { - censec_naturezaltigio_id: 7, - descricao: "Empresarial", - situacao: "A" - }, - { - censec_naturezaltigio_id: 8, - descricao: "Família", - situacao: "A" - }, - { - censec_naturezaltigio_id: 9, - descricao: "Locação", - situacao: "A" - }, - { - censec_naturezaltigio_id: 10, - descricao: "Mobiliário", - situacao: "A" - }, - { - censec_naturezaltigio_id: 11, - descricao: "Previdência", - situacao: "A" - }, - { - censec_naturezaltigio_id: 12, - descricao: "Saúde", - situacao: "A" - }, - { - censec_naturezaltigio_id: 13, - descricao: "Seguro", - situacao: "A" - }, - { - censec_naturezaltigio_id: 14, - descricao: "Serviço Público", - situacao: "A" - }, - { - censec_naturezaltigio_id: 15, - descricao: "Sucessões", - situacao: "A" - }, - { - censec_naturezaltigio_id: 16, - descricao: "Telefonia", - situacao: "A" - }, - { - censec_naturezaltigio_id: 17, - descricao: "Transporte", - situacao: "A" - }, - { - censec_naturezaltigio_id: 18, - descricao: "Transporte - Avião", - situacao: "A" - }, - { - censec_naturezaltigio_id: 19, - descricao: "Transporte - Barco", - situacao: "A" - }, - { - censec_naturezaltigio_id: 20, - descricao: "Transporte Metrô", - situacao: "A" - }, - { - censec_naturezaltigio_id: 21, - descricao: "Transporte - Ônibus", - situacao: "A" - } -] - }); -} diff --git a/src/app/(protected)/(cadastros)/cadastros/_schemas/TCensecNaturezaLitigioSchema.ts b/src/app/(protected)/(cadastros)/cadastros/_schemas/TCensecNaturezaLitigioSchema.ts index b4a293d..e6bd8b3 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_schemas/TCensecNaturezaLitigioSchema.ts +++ b/src/app/(protected)/(cadastros)/cadastros/_schemas/TCensecNaturezaLitigioSchema.ts @@ -2,6 +2,6 @@ import { z } from 'zod'; export const TCensecNaturezaLitigioSchema = z.object({ censec_naturezalitigio_id: z.number().optional(), - descricao: z.string(), + descricao: z.string().min(1, 'O campo deve ser preenchido'), situacao: z.enum(['A', 'I']), }); \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/t_censecnaturezalitigio/TCensecNaturezaLitigioIndexService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/t_censecnaturezalitigio/TCensecNaturezaLitigioIndexService.ts index 2b6bacc..cf54b0b 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_services/t_censecnaturezalitigio/TCensecNaturezaLitigioIndexService.ts +++ b/src/app/(protected)/(cadastros)/cadastros/_services/t_censecnaturezalitigio/TCensecNaturezaLitigioIndexService.ts @@ -1,12 +1,11 @@ +import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler"; import TCensecNaturezaLitigioIndexData from "../../_data/TCensecNaturezaLitigio/TCensecNaturezaLitigioIndexData"; -export default async function TCensecNaturezaLitigioIndexService() { +async function executeTCensecNaturezaLitigioIndexService() { - try { const response = await TCensecNaturezaLitigioIndexData(); + return response; - } catch (error) { - console.log(error) - return error - } -} \ No newline at end of file +} + +export const TCensecNaturezaLitigioIndexService = withClientErrorHandler(executeTCensecNaturezaLitigioIndexService) \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/t_censecnaturezalitigio/TCensecNaturezaLitigioRemoveService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/t_censecnaturezalitigio/TCensecNaturezaLitigioRemoveService.ts index 9530497..7cb9eba 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_services/t_censecnaturezalitigio/TCensecNaturezaLitigioRemoveService.ts +++ b/src/app/(protected)/(cadastros)/cadastros/_services/t_censecnaturezalitigio/TCensecNaturezaLitigioRemoveService.ts @@ -1,10 +1,13 @@ import TCensecNaturezaLitigioRemoveData from "../../_data/TCensecNaturezaLitigio/TCensecNaturezaLitigioRemoveData"; import { TCensecNaturezaLitigioInterface } from "../../_interfaces/TCensecNaturezaLitigioInterface"; +import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler"; -export default async function TCensecNaturezaLitigioRemoveService(data: TCensecNaturezaLitigioInterface) { +async function executeTCensecNaturezaLitigioRemoveService(data: TCensecNaturezaLitigioInterface) { const response = await TCensecNaturezaLitigioRemoveData(data); return response; -} \ No newline at end of file +} + +export const TCensecNaturezaLitigioRemoveService = withClientErrorHandler(executeTCensecNaturezaLitigioRemoveService) \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/t_censecnaturezalitigio/TCensecNaturezaLitigioSaveService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/t_censecnaturezalitigio/TCensecNaturezaLitigioSaveService.ts index 1f063c2..0cf6d6b 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_services/t_censecnaturezalitigio/TCensecNaturezaLitigioSaveService.ts +++ b/src/app/(protected)/(cadastros)/cadastros/_services/t_censecnaturezalitigio/TCensecNaturezaLitigioSaveService.ts @@ -1,10 +1,13 @@ +import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler"; import TCensecNaturezaLitigioSaveData from "../../_data/TCensecNaturezaLitigio/TCensecNaturezaLitigioSaveData"; import { TCensecNaturezaLitigioInterface } from "../../_interfaces/TCensecNaturezaLitigioInterface"; -export default async function TCensecNaturezaLitigioSaveService(data: TCensecNaturezaLitigioInterface) { +async function executeTCensecNaturezaLitigioSaveService(data: TCensecNaturezaLitigioInterface) { const response = await TCensecNaturezaLitigioSaveData(data); return response; -} \ No newline at end of file +} + +export const TCensecNaturezaLitigioSaveService = withClientErrorHandler(executeTCensecNaturezaLitigioSaveService) \ No newline at end of file