diff --git a/src/app/(protected)/(cadastros)/cadastros/(g_medidatipo)/medida-tipo/page.tsx b/src/app/(protected)/(cadastros)/cadastros/(g_medidatipo)/medida-tipo/page.tsx index 5b198ea..2b2e8a4 100644 --- a/src/app/(protected)/(cadastros)/cadastros/(g_medidatipo)/medida-tipo/page.tsx +++ b/src/app/(protected)/(cadastros)/cadastros/(g_medidatipo)/medida-tipo/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"; @@ -15,6 +16,7 @@ import { useGMedidaTipoSaveHook } from "../../_hooks/g_medidatipo/useGMedidaTipo import { useGMedidaTipoRemoveHook } from "../../_hooks/g_medidatipo/useGMedidaTipoRemoveHook"; import { GMedidaTipoInterface } from "../../_interfaces/GMedidaTipoInterface"; +import { SituacoesEnum } from "@/enums/SituacoesEnum"; const initialMedidaTipo: GMedidaTipoInterface = { medida_tipo_id: 0, @@ -24,6 +26,12 @@ const initialMedidaTipo: GMedidaTipoInterface = { export default function GMedidaTipoPage() { + // Controle de exibição de respostas + const { setResponse } = useResponse(); + + // Controle de estado do botão + const [buttonIsLoading, setButtonIsLoading] = useState(false); + // Hooks para leitura, salvamento e remoção const { gMedidaTipo, fetchGMedidaTipo } = useGMedidaTipoReadHook(); const { saveGMedidaTipo } = useGMedidaTipoSaveHook(); @@ -38,7 +46,6 @@ export default function GMedidaTipoPage() { const { isOpen: isConfirmOpen, openDialog: openConfirmDialog, - handleConfirm, handleCancel, } = useConfirmDialog(); @@ -54,7 +61,11 @@ export default function GMedidaTipoPage() { }, []); const handleSave = useCallback(async (data: GMedidaTipoInterface) => { + // Coloca o botão em estado de loading + setButtonIsLoading(true); await saveGMedidaTipo(data); + // Remove o botão do estado de loading + setButtonIsLoading(false); await fetchGMedidaTipo(); // Atualiza a tabela após salvar handleCloseForm(); }, [saveGMedidaTipo, fetchGMedidaTipo]); @@ -66,10 +77,20 @@ export default function GMedidaTipoPage() { }, [openConfirmDialog]); const handleDelete = useCallback(async () => { - if (itemToDelete) { - await removeGMedidaTipo(itemToDelete); - await fetchGMedidaTipo(); // Atualiza a tabela após remover - } + + // Verifica se existe item para remoção + if (!itemToDelete) { + + // Define os dados da resposta visual + setResponse({ + status: 400, + message: 'Não foi informado um registro para exclusão' + }); + return; + }; + + await removeGMedidaTipo(itemToDelete); + await fetchGMedidaTipo(); // Atualiza a tabela após remover handleCancel(); }, [itemToDelete, fetchGMedidaTipo, handleCancel]); @@ -122,6 +143,7 @@ export default function GMedidaTipoPage() { data={selectedMedidaTipo} onClose={handleCloseForm} onSave={handleSave} + buttonIsLoading={buttonIsLoading} /> ); diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/g_medidatipo/GMedidaTipoForm.tsx b/src/app/(protected)/(cadastros)/cadastros/_components/g_medidatipo/GMedidaTipoForm.tsx index 46b47a1..1a288bd 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_components/g_medidatipo/GMedidaTipoForm.tsx +++ b/src/app/(protected)/(cadastros)/cadastros/_components/g_medidatipo/GMedidaTipoForm.tsx @@ -24,7 +24,7 @@ import { FormMessage } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; - +import LoadingButton from "@/app/_components/loadingButton/LoadingButton"; import { GMedidaTipoSchema } from "../../_schemas/GMedidaTipoSchema"; import { GMedidaTipoInterface } from "../../_interfaces/GMedidaTipoInterface"; @@ -35,9 +35,10 @@ interface GMedidaTipoFormProps { data: FormValues | null; onClose: (item: null, isFormStatus: boolean) => void; onSave: (data: FormValues) => void; + buttonIsLoading: boolean; } -export default function GMedidaTipoForm({ isOpen, data, onClose, onSave }: GMedidaTipoFormProps) { +export default function GMedidaTipoForm({ isOpen, data, onClose, onSave, buttonIsLoading }: GMedidaTipoFormProps) { // Inicializa o react-hook-form com o schema Zod const form = useForm({ resolver: zodResolver(GMedidaTipoSchema), @@ -110,9 +111,8 @@ export default function GMedidaTipoForm({ isOpen, data, onClose, onSave }: GMedi Cancelar - + {/* Botão de loading */} + {/* Campo oculto */} diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/GMedidaTipoIndexData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/GMedidaTipoIndexData.ts index 7767d4c..d1bcbaf 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/GMedidaTipoIndexData.ts +++ b/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/GMedidaTipoIndexData.ts @@ -1,15 +1,7 @@ import API from "@/services/api/Api"; import { Methods } from "@/services/api/enums/ApiMethodEnum"; -import MedidaTipoMockDeDados from "./mockMedidaTipo"; - -const useMock = true export default async function GMedidaTipoIndexData() { - if (useMock) { - console.log(MedidaTipoMockDeDados()) - return await MedidaTipoMockDeDados(); - } - const api = new API(); try { const dados = await api.send({ diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/mockMedidaTipo.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/mockMedidaTipo.ts deleted file mode 100644 index ae1eabf..0000000 --- a/src/app/(protected)/(cadastros)/cadastros/_data/GMedidoTipo/mockMedidaTipo.ts +++ /dev/null @@ -1,28 +0,0 @@ -export default async function MedidaTipoMockDeDados() { - return Promise.resolve({ - status: 200, - message: 'Dados localizados', - data: [ - { - medida_tipo_id: 1.00, - sigla: "Alqueire", - descricao: "Alqueire" - }, - { - medida_tipo_id: 2.00, - sigla: "ha", - descricao: "Hectare" - }, - { - medida_tipo_id: 3.00, - sigla: "m2", - descricao: "Metros Quadrados" - }, - { - medida_tipo_id: 4.00, - sigla: "braça", - descricao: "Braça" - } - ] - }); -} diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoIndexService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoIndexService.ts index e12ceba..cda56c6 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoIndexService.ts +++ b/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoIndexService.ts @@ -1,12 +1,9 @@ +import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler"; import GMedidaTipoIndexData from "../../_data/GMedidoTipo/GMedidaTipoIndexData"; -export default async function GMedidaTipoIndexService() { - - try { +async function executeGMedidaTipoIndexService() { const response = await GMedidaTipoIndexData(); return response; - } catch (error) { - console.log(error) - return error - } -} \ No newline at end of file +} + +export const GMedidaTipoIndexService = withClientErrorHandler(executeGMedidaTipoIndexService) \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoRemoveService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoRemoveService.ts index 2a98f69..299b23f 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoRemoveService.ts +++ b/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoRemoveService.ts @@ -1,10 +1,13 @@ +import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler"; import GMedidaTipoRemoveData from "../../_data/GMedidoTipo/GMedidaTipoRemoveData"; import { GMedidaTipoInterface } from "../../_interfaces/GMedidaTipoInterface"; -export default async function GMedidaTipoRemoveService(data: GMedidaTipoInterface) { +async function executeGMedidaTipoRemoveService(data: GMedidaTipoInterface) { const response = await GMedidaTipoRemoveData(data); return response; -} \ No newline at end of file +} + +export const GMedidaTipoRemoveService = withClientErrorHandler(executeGMedidaTipoRemoveService) \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoSaveService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoSaveService.ts index c6f3460..31b5d02 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoSaveService.ts +++ b/src/app/(protected)/(cadastros)/cadastros/_services/g_medidatipo/GMedidaTipoSaveService.ts @@ -1,12 +1,13 @@ +import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler"; import GMedidaTipoSaveData from "../../_data/GMedidoTipo/GMedidaTipoSaveData"; import { GMedidaTipoInterface } from "../../_interfaces/GMedidaTipoInterface"; -export default async function GMedidaTipoSaveService(data: GMedidaTipoInterface) { +async function executeGMedidaTipoSaveService(data: GMedidaTipoInterface) { const response = await GMedidaTipoSaveData(data); - console.log('GTBRegimeComunhaoSaveData', response) - return response; -} \ No newline at end of file +} + +export const GMedidaTipoSaveService = withClientErrorHandler(executeGMedidaTipoSaveService) \ No newline at end of file