diff --git a/src/app/(protected)/(cadastros)/cadastros/(g_tb_bairro)/bairro/page.tsx b/src/app/(protected)/(cadastros)/cadastros/(g_tb_bairro)/bairro/page.tsx
index 841f229..4cf949b 100644
--- a/src/app/(protected)/(cadastros)/cadastros/(g_tb_bairro)/bairro/page.tsx
+++ b/src/app/(protected)/(cadastros)/cadastros/(g_tb_bairro)/bairro/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,15 +16,22 @@ import { useGTBBairroSaveHook } from "../../_hooks/g_tb_bairro/useGTBBairroSaveH
import { useGTBBairroRemoveHook } from "../../_hooks/g_tb_bairro/useGTBBairroRemoveHook";
import { GTBBairroInterface } from "../../_interfaces/GTBBairroInterface";
+import { SituacoesEnum } from "@/enums/SituacoesEnum";
const initialBairro: GTBBairroInterface = {
sistema_id: null,
tb_bairro_id: 0,
descricao: '',
- situacao: 'A'
+ situacao: SituacoesEnum.A
}
-export default function TTBAndamentoServico() {
+export default function GTBBairroPage() {
+
+ // Controle de exibição de respostas
+ const { setResponse } = useResponse();
+
+ // Controle de estado do botão
+ const [buttonIsLoading, setButtonIsLoading] = useState(false);
// Hooks para leitura e salvamento
const { gTBBairro, fetchGTBBairro } = useGTBBairroReadHook();
@@ -39,7 +47,6 @@ export default function TTBAndamentoServico() {
const {
isOpen: isConfirmOpen,
openDialog: openConfirmDialog,
- handleConfirm,
handleCancel,
} = useConfirmDialog();
@@ -55,8 +62,19 @@ export default function TTBAndamentoServico() {
}, []);
const handleSave = useCallback(async (data: GTBBairroInterface) => {
+
+ // Coloca o botão em estado de loading
+ setButtonIsLoading(true);
+
+ // Realiza o procedimento desejado
await saveGTBBairro(data);
- fetchGTBBairro(); // Atualiza a tabela após salvar
+
+ // Remove o botão do estado de loading
+ setButtonIsLoading(false);
+
+ // Atualiza a tabela após salvar
+ fetchGTBBairro();
+
}, [saveGTBBairro, fetchGTBBairro]);
// Ações de deleção
@@ -66,14 +84,29 @@ export default function TTBAndamentoServico() {
}, [openConfirmDialog]);
const handleDelete = useCallback(async () => {
- if (!itemToDelete) return;
+ // 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;
+ };
+
+ // Executa o hook de remoção
await removeGTBBairro(itemToDelete);
- await fetchGTBBairro(); // Atualiza a tabela após remover
+ // Atualiza a tabela após remover
+ await fetchGTBBairro();
+
+ // Limpa o item para remoção
setItemToDelete(null)
handleCancel();
+
}, [itemToDelete, fetchGTBBairro, handleCancel]);
// Efeito para carregar os dados na montagem do componente
@@ -81,7 +114,10 @@ export default function TTBAndamentoServico() {
fetchGTBBairro();
}, []);
- if (!gTBBairro) {
+ /**
+ * Tela de loading enquanto carrega os dados
+ */
+ if (gTBBairro.length == 0) {
return ;
}
@@ -124,6 +160,7 @@ export default function TTBAndamentoServico() {
data={selectedBairro}
onClose={handleCloseForm}
onSave={handleSave}
+ buttonIsLoading={buttonIsLoading}
/>
);
diff --git a/src/app/(protected)/(cadastros)/cadastros/(t_tb_andamentoservico)/andamentos/page.tsx b/src/app/(protected)/(cadastros)/cadastros/(t_tb_andamentoservico)/andamentos/page.tsx
index eb747f7..f33c575 100644
--- a/src/app/(protected)/(cadastros)/cadastros/(t_tb_andamentoservico)/andamentos/page.tsx
+++ b/src/app/(protected)/(cadastros)/cadastros/(t_tb_andamentoservico)/andamentos/page.tsx
@@ -18,6 +18,7 @@ import { useTTBAndamentoServicoDeleteHook } from "../../_hooks/t_tb_andamentoser
import Header from "@/app/_components/structure/Header";
export default function TTBAndamentoServico() {
+
// Hooks para leitura e salvamento
const { tTBAndamentosServicos, fetchTTBAndamentoServico } = useTTBAndamentoServicoReadHook();
const { saveTTBAndamentoServico } = useTTBAndamentoServicoSaveHook();
diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_bairro/GTBBairroForm.tsx b/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_bairro/GTBBairroForm.tsx
index 3cb3cd2..4e465b4 100644
--- a/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_bairro/GTBBairroForm.tsx
+++ b/src/app/(protected)/(cadastros)/cadastros/_components/g_tb_bairro/GTBBairroForm.tsx
@@ -1,7 +1,7 @@
'use client';
import z from "zod";
-import { useEffect } from "react";
+import { useEffect, useState } from "react";
import { useForm, Controller } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
@@ -28,7 +28,8 @@ import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { GTBBairroSchema } from "../../_schemas/GTBBairroSchema";
-import { GTBBairroInterface } from "../../_interfaces/GTBBairroInterface";
+import LoadingButton from "@/app/_components/loadingButton/LoadingButton";
+import { SituacoesEnum } from "@/enums/SituacoesEnum";
type FormValues = z.infer;
@@ -37,9 +38,11 @@ interface GTBBairroFormProps {
data: FormValues | null;
onClose: (item: null, isFormStatus: boolean) => void;
onSave: (data: FormValues) => void;
+ buttonIsLoading: boolean;
}
-export default function GTBBairroForm({ isOpen, data, onClose, onSave }: GTBBairroFormProps) {
+export default function GTBBairroForm({ isOpen, data, onClose, onSave, buttonIsLoading }: GTBBairroFormProps) {
+
// Inicializa o react-hook-form com o schema Zod
const form = useForm({
resolver: zodResolver(GTBBairroSchema),
@@ -47,7 +50,7 @@ export default function GTBBairroForm({ isOpen, data, onClose, onSave }: GTBBair
sistema_id: null,
tb_bairro_id: 0,
descricao: "",
- situacao: "A",
+ situacao: SituacoesEnum.A,
},
});
@@ -113,14 +116,14 @@ export default function GTBBairroForm({ isOpen, data, onClose, onSave }: GTBBair
Cancelar
-
+ {/* Botão de loading */}
+
{/* Campos ocultos */}
+
diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GTBBairro/GTBBairroIndexData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GTBBairro/GTBBairroIndexData.ts
index 928f9ff..5506807 100644
--- a/src/app/(protected)/(cadastros)/cadastros/_data/GTBBairro/GTBBairroIndexData.ts
+++ b/src/app/(protected)/(cadastros)/cadastros/_data/GTBBairro/GTBBairroIndexData.ts
@@ -1,25 +1,15 @@
import API from "@/services/api/Api";
import { Methods } from "@/services/api/enums/ApiMethodEnum";
-import BairroMockDeDados from "./mockBairro";
-
-const useMock = false
export default async function GTBBairroIndexData() {
- if (useMock) {
- console.log(BairroMockDeDados())
- return await BairroMockDeDados();
- }
const api = new API();
- try {
- const dados = await api.send({
- method: Methods.GET,
- endpoint: `administrativo/g_tb_bairro/`
- });
- return dados
- } catch (error) {
- console.log(error)
- return error
- }
+
+ const dados = await api.send({
+ method: Methods.GET,
+ endpoint: `administrativo/g_tb_bairro/`
+ });
+
+ return dados
}
\ No newline at end of file
diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_bairro/useGTBBairroReadHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_bairro/useGTBBairroReadHook.ts
index 2b78ab8..2d4ebac 100644
--- a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_bairro/useGTBBairroReadHook.ts
+++ b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_bairro/useGTBBairroReadHook.ts
@@ -1,24 +1,27 @@
+'use client'
+
import { useResponse } from "@/app/_response/ResponseContext"
-import { useState } from "react";
+import { use, useState } from "react";
import { GTBBairroInterface } from "../../_interfaces/GTBBairroInterface";
import GTBBairroIndexService from "../../_services/g_tb_bairro/GTBBairroIndexService";
export const useGTBBairroReadHook = () => {
const { setResponse } = useResponse();
+
+ // Controle dos dados obtidos via API
const [gTBBairro, setGTBBairro] = useState([]);
const fetchGTBBairro = async () => {
- try {
- const response = await GTBBairroIndexService();
+ // Realiza a requisição para a api
+ const response = await GTBBairroIndexService();
- setGTBBairro(response.data);
+ // Armazena os dados da resposta
+ setGTBBairro(response.data);
- setResponse(response);
- } catch (error) {
- console.log(error)
- }
+ // Envia os dados da resposta para ser tratado
+ setResponse(response);
}
diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_bairro/useGTBBairroSaveHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_bairro/useGTBBairroSaveHook.ts
index 8873c44..ecd5d3f 100644
--- a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_bairro/useGTBBairroSaveHook.ts
+++ b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_tb_bairro/useGTBBairroSaveHook.ts
@@ -7,6 +7,7 @@ export const useGTBBairroSaveHook = () => {
const { setResponse } = useResponse();
const [gTBBairro, setGTBBairro] = useState(null);
+
// controla se o formulário está aberto ou fechado
const [isOpen, setIsOpen] = useState(false);
diff --git a/src/app/(protected)/(cadastros)/cadastros/_interfaces/GTBBairroInterface.ts b/src/app/(protected)/(cadastros)/cadastros/_interfaces/GTBBairroInterface.ts
index e3a8c68..10f70c9 100644
--- a/src/app/(protected)/(cadastros)/cadastros/_interfaces/GTBBairroInterface.ts
+++ b/src/app/(protected)/(cadastros)/cadastros/_interfaces/GTBBairroInterface.ts
@@ -1,6 +1,8 @@
+import { SituacoesEnum } from "@/enums/SituacoesEnum";
+
export interface GTBBairroInterface {
sistema_id: number | null;
tb_bairro_id: number;
descricao: string;
- situacao: 'A' | 'I';
+ situacao: SituacoesEnum;
}
\ No newline at end of file
diff --git a/src/app/(protected)/(cadastros)/cadastros/_schemas/GTBBairroSchema.ts b/src/app/(protected)/(cadastros)/cadastros/_schemas/GTBBairroSchema.ts
index 50fcf25..c4a67d5 100644
--- a/src/app/(protected)/(cadastros)/cadastros/_schemas/GTBBairroSchema.ts
+++ b/src/app/(protected)/(cadastros)/cadastros/_schemas/GTBBairroSchema.ts
@@ -1,8 +1,9 @@
+import { SituacoesEnum } from '@/enums/SituacoesEnum';
import { z } from 'zod';
export const GTBBairroSchema = z.object({
- sistema_id: z.number().nullable(),
tb_bairro_id: z.number(),
- descricao: z.string(),
- situacao: z.enum(['A', 'I']),
+ sistema_id: z.number().nullable(),
+ descricao: z.string().min(1, 'O campo deve ser preenchido'),
+ situacao: z.enum(SituacoesEnum),
});
\ No newline at end of file
diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_bairro/GTBBairroIndexService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_bairro/GTBBairroIndexService.ts
index fbc3e01..a58e999 100644
--- a/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_bairro/GTBBairroIndexService.ts
+++ b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_bairro/GTBBairroIndexService.ts
@@ -2,11 +2,7 @@ import GTBBairroIndexData from "../../_data/GTBBairro/GTBBairroIndexData";
export default async function GTBBairroIndexService() {
- try {
- const response = await GTBBairroIndexData();
- return response;
- } catch (error) {
- console.log(error)
- return error
- }
+ const response = await GTBBairroIndexData();
+ return response;
+
}
\ No newline at end of file
diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_bairro/GTBBairroSaveService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_bairro/GTBBairroSaveService.ts
index f7e8da4..d37c2a2 100644
--- a/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_bairro/GTBBairroSaveService.ts
+++ b/src/app/(protected)/(cadastros)/cadastros/_services/g_tb_bairro/GTBBairroSaveService.ts
@@ -5,8 +5,6 @@ export default async function GTBBairroSaveService(data: GTBBairroInterface) {
const response = await GTBBairroSaveData(data);
- console.log('GTBRegimeComunhaoSaveData', response)
-
return response;
}
\ No newline at end of file
diff --git a/src/app/_components/loadingButton/LoadingButton.tsx b/src/app/_components/loadingButton/LoadingButton.tsx
index e334b8b..3c890c4 100644
--- a/src/app/_components/loadingButton/LoadingButton.tsx
+++ b/src/app/_components/loadingButton/LoadingButton.tsx
@@ -15,7 +15,7 @@ const LoadingButton = forwardRef(
aria-busy={loading}
aria-live="polite"
className={clsx(
- "flex items-center justify-center gap-2 w-full my-3 cursor-pointer",
+ "cursor-pointer",
className
)}
{...props}
diff --git a/src/app/_components/structure/Header.tsx b/src/app/_components/structure/Header.tsx
index 2fb7a55..c8c02e6 100644
--- a/src/app/_components/structure/Header.tsx
+++ b/src/app/_components/structure/Header.tsx
@@ -1,5 +1,4 @@
import { Button } from "@/components/ui/button";
-import Link from "next/link";
import { PlusIcon } from "lucide-react";
interface HeaderProps {
@@ -23,10 +22,9 @@ export default function Header({ title, description, buttonText, buttonAction }:
{description}
-