[MVPTN-9] refactor(geral): implementando gerenciador de erro, removendo mock de dados e usando o botao de loading

This commit is contained in:
= 2025-09-23 15:56:44 -03:00
parent c7f86522fb
commit fefe94f7b1
7 changed files with 45 additions and 119 deletions

View file

@ -16,8 +16,16 @@ import { useGTBTipoLogradouroRemoveHook } from "../../_hooks/g_tb_tipologradouro
import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface";
import { useResponse } from "@/app/_response/ResponseContext";
export default function TTBAndamentoServico() {
// 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 { gTBTipoLogradouro, fetchGTBTipoLogradouro } = useGTBTipoLogradouroReadHook();
const { saveGTBTipoLogradouro } = useGTBTipoLogradouroSaveHook();
@ -36,7 +44,6 @@ export default function TTBAndamentoServico() {
const {
isOpen: isConfirmOpen,
openDialog: openConfirmDialog,
handleConfirm,
handleCancel,
} = useConfirmDialog();
@ -61,9 +68,15 @@ export default function TTBAndamentoServico() {
*/
const handleSave = useCallback(async (formData: GTBTipoLogradouroInterface) => {
// Coloca o botão em estado de loading
setButtonIsLoading(true);
// Aguarda salvar o registro
await saveGTBTipoLogradouro(formData);
// Remove o botão do estado de loading
setButtonIsLoading(false);
// Atualiza a lista de dados
fetchGTBTipoLogradouro();
@ -88,7 +101,15 @@ export default function TTBAndamentoServico() {
const handleDelete = useCallback(async () => {
// Protege contra null
if (!itemToDelete) return;
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 removeGTBTipoLogradouro(itemToDelete);
@ -157,6 +178,7 @@ export default function TTBAndamentoServico() {
data={selectedTipoLogradouro}
onClose={handleCloseForm}
onSave={handleSave}
buttonIsLoading={buttonIsLoading}
/>
</div>
);

View file

@ -27,6 +27,8 @@ import {
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import LoadingButton from "@/app/_components/loadingButton/LoadingButton";
import { GTBTipoLogradouroSchema } from "../../_schemas/GTBTipoLogradouroSchema";
import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface";
@ -37,9 +39,10 @@ interface GTBTipoLogradouroFormProps {
data: FormValues | null;
onClose: (item: null, isFormStatus: boolean) => void;
onSave: (data: FormValues) => void;
buttonIsLoading: boolean;
}
export default function GTBTipoLogradouroForm({ isOpen, data, onClose, onSave }: GTBTipoLogradouroFormProps) {
export default function GTBTipoLogradouroForm({ isOpen, data, onClose, onSave,buttonIsLoading }: GTBTipoLogradouroFormProps) {
// Inicializa o react-hook-form com schema zod
const form = useForm<FormValues>({
resolver: zodResolver(GTBTipoLogradouroSchema),
@ -130,9 +133,8 @@ export default function GTBTipoLogradouroForm({ isOpen, data, onClose, onSave }:
Cancelar
</Button>
</DialogClose>
<Button type="submit" className="cursor-pointer">
Salvar
</Button>
{/* Botão de loading */}
<LoadingButton text="Salvar" textLoading="Aguarde..." type="submit" loading={buttonIsLoading} />
</DialogFooter>
{/* Campos ocultos */}

View file

@ -1,14 +1,7 @@
import API from "@/services/api/Api";
import { Methods } from "@/services/api/enums/ApiMethodEnum";
import TipoLogradouroMockDeDados from "./mockTipoLogradouro";
const useMock = false
export default async function GTBTipoLogradouroIndexData() {
if (useMock) {
console.log(TipoLogradouroMockDeDados())
return await TipoLogradouroMockDeDados();
}
const api = new API();
try {

View file

@ -1,98 +0,0 @@
import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface";
export default async function TipoLogradouroMockDeDados(){
return Promise.resolve({
status: 200,
message: 'Dados localizados',
data: [
{
sistema_id: null,
tb_tipologradouro_id: 1,
situacao_id: null,
descricao: "Rua",
situacao: "A",
onr_tipo_logradouro_id: 250
},
{
sistema_id: null,
tb_tipologradouro_id: 2,
situacao_id: null,
descricao: "Avenida",
situacao: "A",
onr_tipo_logradouro_id: 26
},
{
sistema_id: null,
tb_tipologradouro_id: 3,
situacao_id: null,
descricao: "Alameda",
situacao: "A",
onr_tipo_logradouro_id: 10
},
{
sistema_id: null,
tb_tipologradouro_id: 4,
situacao_id: null,
descricao: "Praça",
situacao: "A",
onr_tipo_logradouro_id: 215
},
{
sistema_id: null,
tb_tipologradouro_id: 5,
situacao_id: null,
descricao: "Via",
situacao: "A",
onr_tipo_logradouro_id: 294
},
{
sistema_id: null,
tb_tipologradouro_id: 6,
situacao_id: null,
descricao: "Viela",
situacao: "A",
onr_tipo_logradouro_id: 297
},
{
sistema_id: null,
tb_tipologradouro_id: 7,
situacao_id: null,
descricao: "Travessa",
situacao: "A",
onr_tipo_logradouro_id: 273
},
{
sistema_id: null,
tb_tipologradouro_id: 8,
situacao_id: null,
descricao: "Rodovia",
situacao: "A",
onr_tipo_logradouro_id: 247
},
{
sistema_id: null,
tb_tipologradouro_id: 9,
situacao_id: null,
descricao: "Sítios",
situacao: "A",
onr_tipo_logradouro_id: 263
},
{
sistema_id: null,
tb_tipologradouro_id: 10,
situacao_id: null,
descricao: "Córrego",
situacao: "A",
onr_tipo_logradouro_id: 86
},
{
sistema_id: null,
tb_tipologradouro_id: 11,
situacao_id: null,
descricao: "Estrada",
situacao: "A",
onr_tipo_logradouro_id: 117
}
]
});
}

View file

@ -1,6 +1,7 @@
import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler";
import GTBTipoLogradouroIndexData from "../../_data/GTBTipoLogradouro/GTBTipoLogradouroIndexData";
export default async function GTBTipoLogradouroIndexService() {
async function executeGTBTipoLogradouroIndexService() {
try {
const response = await GTBTipoLogradouroIndexData();
@ -9,4 +10,6 @@ export default async function GTBTipoLogradouroIndexService() {
console.log(error)
return error
}
}
}
export const GTBTipoLogradouroIndexService = withClientErrorHandler(executeGTBTipoLogradouroIndexService)

View file

@ -1,10 +1,13 @@
import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler";
import GTBTipoLogradouroRemoveData from "../../_data/GTBTipoLogradouro/GTBTipoLogradouroRemoveData";
import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface";
export default async function GTBTipoLogradouroRemoveService(data: GTBTipoLogradouroInterface) {
async function executeGTBTipoLogradouroRemoveService(data: GTBTipoLogradouroInterface) {
const response = await GTBTipoLogradouroRemoveData(data);
return response;
}
}
export const GTBTipoLogradouroRemoveService = withClientErrorHandler(executeGTBTipoLogradouroRemoveService)

View file

@ -1,12 +1,13 @@
import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler";
import GTBTipoLogradouroSaveData from "../../_data/GTBTipoLogradouro/GTBTipoLogradouroSaveData";
import { GTBTipoLogradouroInterface } from "../../_interfaces/GTBTipoLogradouroInterface";
export default async function GTBTipoLogradouroSaveService(data: GTBTipoLogradouroInterface) {
async function executeGTBTipoLogradouroSaveService(data: GTBTipoLogradouroInterface) {
const response = await GTBTipoLogradouroSaveData(data);
console.log('GTBTipoLogradouroSaveData', response)
return response;
}
}
export const GTBTipoLogradouroSaveService = withClientErrorHandler(executeGTBTipoLogradouroSaveService)