From ce6f6e3c59f2898633cac071990c100d5c2d0b33 Mon Sep 17 00:00:00 2001 From: = <=> Date: Wed, 1 Oct 2025 08:48:46 -0300 Subject: [PATCH 1/2] [MVPTN-90] feat(CRUD): implementada tela de cadastro de tipo de atos censec, com dados mockados por enquanto --- package-lock.json | 12 +- .../censec-tipoato/page.tsx | 147 ++++++++++ .../t_censec_tipoato/TCensecTipoAtoForm.tsx | 223 ++++++++++++++++ .../t_censec_tipoato/TCensecTipoAtoTable.tsx | 108 ++++++++ .../TCensecTipoAto/GMedidaTipoIndexData.ts | 22 ++ .../TCensecTipoAto/GMedidaTipoRemoveData.ts | 17 ++ .../TCensecTipoAto/GMedidaTipoSaveData.ts | 20 ++ .../_data/TCensecTipoAto/mockCensecTipoAto.ts | 251 ++++++++++++++++++ .../useTCensecTipoAtoReadHook.ts | 27 ++ .../useTCensecTipoAtoRemoveHook.ts | 19 ++ .../useTCensecTipoAtoSaveHook.ts | 28 ++ .../cadastros/_interfaces/TCensecInterface.ts | 1 - .../_interfaces/TCensecTipoAtoInterface.ts | 9 + .../_schemas/TCensecTipoAtoSchema.ts | 11 + .../TCensecTipoAtoIndexService.ts | 15 ++ .../TCensecTipoAtoRemoveService.ts | 13 + .../TCensecTipoAtoSaveService.ts | 15 ++ src/components/app-sidebar.tsx | 4 + src/config/app_example.json | 8 - 19 files changed, 935 insertions(+), 15 deletions(-) create mode 100644 src/app/(protected)/(cadastros)/cadastros/(t_censec_tipoato)/censec-tipoato/page.tsx create mode 100644 src/app/(protected)/(cadastros)/cadastros/_components/t_censec_tipoato/TCensecTipoAtoForm.tsx create mode 100644 src/app/(protected)/(cadastros)/cadastros/_components/t_censec_tipoato/TCensecTipoAtoTable.tsx create mode 100644 src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoIndexData.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoRemoveData.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoSaveData.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/mockCensecTipoAto.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_hooks/t_censec_tipoato/useTCensecTipoAtoReadHook.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_hooks/t_censec_tipoato/useTCensecTipoAtoRemoveHook.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_hooks/t_censec_tipoato/useTCensecTipoAtoSaveHook.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_interfaces/TCensecTipoAtoInterface.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_schemas/TCensecTipoAtoSchema.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_services/t_censec_tipoato/TCensecTipoAtoIndexService.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_services/t_censec_tipoato/TCensecTipoAtoRemoveService.ts create mode 100644 src/app/(protected)/(cadastros)/cadastros/_services/t_censec_tipoato/TCensecTipoAtoSaveService.ts delete mode 100644 src/config/app_example.json diff --git a/package-lock.json b/package-lock.json index 2cc4f8d..4c0e5d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2255,12 +2255,6 @@ "jiti": "lib/jiti-cli.mjs" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, "node_modules/js-cookie": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", @@ -2270,6 +2264,12 @@ "node": ">=14" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", diff --git a/src/app/(protected)/(cadastros)/cadastros/(t_censec_tipoato)/censec-tipoato/page.tsx b/src/app/(protected)/(cadastros)/cadastros/(t_censec_tipoato)/censec-tipoato/page.tsx new file mode 100644 index 0000000..3b20226 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/(t_censec_tipoato)/censec-tipoato/page.tsx @@ -0,0 +1,147 @@ +'use client'; + +import { useEffect, useState, useCallback } from "react"; +import { Card, CardContent } from "@/components/ui/card"; +import { useConfirmDialog } from "@/app/_components/confirm_dialog/useConfirmDialog"; + +import Header from "@/app/_components/structure/Header"; +import ConfirmDialog from "@/app/_components/confirm_dialog/ConfirmDialog"; +import Loading from "@/app/_components/loading/loading"; + +import TCensecTipoAtoTable from "../../_components/t_censec_tipoato/TCensecTipoAtoTable"; +import TCensecTipoAtoForm from "../../_components/t_censec_tipoato/TCensecTipoAtoForm"; + +import { useTCensecTipoAtoReadHook } from "../../_hooks/t_censec_tipoato/useTCensecTipoAtoReadHook"; +import { useTCensecTipoAtoSaveHook } from "../../_hooks/t_censec_tipoato/useTCensecTipoAtoSaveHook"; +import { useTCensecTipoAtoRemoveHook } from "../../_hooks/t_censec_tipoato/useTCensecTipoAtoRemoveHook"; +import { useTCensecReadHook } from "../../_hooks/t_censec/useTCensecReadHook"; + +import { TCensecTipoAtoInterface } from "../../_interfaces/TCensecTipoAtoInterface"; + +// Estado inicial para criação +const initialTCensecTipoAto: TCensecTipoAtoInterface = { + censec_tipoato_id: 0, + censec_id: 0, + codigo: null, + descricao: "", + situacao: "A", + tipo_separacao: null, + tipo_revogacao: null, +}; + +export default function TCensecTipoAtoPage() { + // Hooks para leitura, salvamento e remoção + const { tCensecTipoAto, fetchTCensecTipoAto } = useTCensecTipoAtoReadHook(); + const { saveTCensecTipoAto } = useTCensecTipoAtoSaveHook(); + const { removeTCensecTipoAto } = useTCensecTipoAtoRemoveHook(); + + const { tCensec, fetchTCensec } = useTCensecReadHook() + + // Estado para controle do form e item selecionado + const [selectedItem, setSelectedItem] = useState(null); + const [isFormOpen, setIsFormOpen] = useState(false); + const [itemToDelete, setItemToDelete] = useState(null); + + // Hook do modal de confirmação + const { + isOpen: isConfirmOpen, + openDialog: openConfirmDialog, + handleConfirm, + handleCancel, + } = useConfirmDialog(); + + // Abrir formulário + const handleOpenForm = useCallback((data: TCensecTipoAtoInterface | null) => { + setSelectedItem(data); + setIsFormOpen(true); + }, []); + + const handleCloseForm = useCallback(() => { + setIsFormOpen(false); + setSelectedItem(null); + }, []); + + // Salvar + const handleSave = useCallback( + async (data: TCensecTipoAtoInterface) => { + await saveTCensecTipoAto(data); + await fetchTCensecTipoAto(); + handleCloseForm(); + }, + [saveTCensecTipoAto, fetchTCensecTipoAto] + ); + + // Deleção + const handleConfirmDelete = useCallback( + (item: TCensecTipoAtoInterface) => { + setItemToDelete(item); + openConfirmDialog(); + }, + [openConfirmDialog] + ); + + const handleDelete = useCallback(async () => { + if (itemToDelete) { + await removeTCensecTipoAto(itemToDelete); + await fetchTCensecTipoAto(); + } + handleCancel(); + }, [itemToDelete, fetchTCensecTipoAto, handleCancel]); + + // Carregar dados ao montar + useEffect(() => { + fetchTCensecTipoAto(); + fetchTCensec() + }, []); + + if (!tCensecTipoAto) { + return ; + } + + return ( +
+ {/* Cabeçalho */} +
{ + handleOpenForm((data = initialTCensecTipoAto)); + }} + /> + + {/* Tabela */} + + + + + + + {/* Dialog de confirmação */} + + + {/* Formulário */} + +
+ ); +} diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/t_censec_tipoato/TCensecTipoAtoForm.tsx b/src/app/(protected)/(cadastros)/cadastros/_components/t_censec_tipoato/TCensecTipoAtoForm.tsx new file mode 100644 index 0000000..38e9b3a --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_components/t_censec_tipoato/TCensecTipoAtoForm.tsx @@ -0,0 +1,223 @@ +'use client'; + +import z from "zod"; +import { useEffect } from "react"; +import { useForm, Controller } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { Checkbox } from "@/components/ui/checkbox"; +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle +} from "@/components/ui/dialog"; +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import { Label } from "@/components/ui/label"; +import { TCensecTipoAtoSchema } from "../../_schemas/TCensecTipoAtoSchema"; +import { TCensecTipoAtoInterface } from "../../_interfaces/TCensecTipoAtoInterface"; +import TCensecInterface from "../../_interfaces/TCensecInterface"; + +type FormValues = z.infer; + +interface TCensecTipoAtoFormProps { + isOpen: boolean; + data: FormValues | null; + tCensec: TCensecInterface[]; + onClose: (item: null, isFormStatus: boolean) => void; + onSave: (data: FormValues) => void; +} + +export default function TCensecTipoAtoForm({ + isOpen, + data, + tCensec, + onClose, + onSave, +}: TCensecTipoAtoFormProps) { + // react-hook-form com schema Zod + const form = useForm({ + resolver: zodResolver(TCensecTipoAtoSchema), + defaultValues: { + censec_tipoato_id: 0, + censec_id: 0, + codigo: null, + descricao: "", + situacao: "A", + tipo_separacao: null, + tipo_revogacao: null, + }, + }); + + // Atualiza o formulário se houver dados para edição + useEffect(() => { + if (data) form.reset(data); + }, [data, form]); + + return ( + { + if (!open) onClose(null, false); + }} + > + + + Tipo de Ato CENSEC + + Crie ou edite um tipo de ato da CENSEC + + + +
+ + + {/* Descrição */} + ( + + Descrição + + + + + + )} + /> + + {/* Select Censec */} + ( + + Censec + + + + )} + /> + + {/* Situação */} + ( +
+ field.onChange(checked ? "A" : "I")} + /> + +
+ )} + /> + + {/* Tipo de Separação */} + ( + + Tipo de Separação + + + + )} + /> + + {/* Tipo de Revogação */} + ( + + Tipo de Revogação + + + + )} + /> + + {/* Rodapé */} + + + + + + + + {/* Campos ocultos */} + + + + +
+
+ ); +} diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/t_censec_tipoato/TCensecTipoAtoTable.tsx b/src/app/(protected)/(cadastros)/cadastros/_components/t_censec_tipoato/TCensecTipoAtoTable.tsx new file mode 100644 index 0000000..5807a8f --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_components/t_censec_tipoato/TCensecTipoAtoTable.tsx @@ -0,0 +1,108 @@ +'use client'; + +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger +} from "@/components/ui/dropdown-menu"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow +} from "@/components/ui/table"; +import { EllipsisIcon, PencilIcon, Trash2Icon } from "lucide-react"; +import { TCensecTipoAtoInterface } from "../../_interfaces/TCensecTipoAtoInterface"; +import TCensecInterface from "../../_interfaces/TCensecInterface"; + +interface TCensecTipoAtoTableProps { + data: TCensecTipoAtoInterface[]; + tCensec: TCensecInterface[]; + onEdit: (item: TCensecTipoAtoInterface, isEditingFormStatus: boolean) => void; + onDelete: (item: TCensecTipoAtoInterface, isEditingFormStatus: boolean) => void; +} + +export default function TCensecTipoAtoTable({ + data, + tCensec, + onEdit, + onDelete +}: TCensecTipoAtoTableProps) { + return ( + + + + # + CENSEC + {/*Código*/} + Descrição + Situação + Separação + Revogação + Ações + + + + + {data.map((item) => { + const censecDesc = tCensec.find(c => c.censec_id === item.censec_id)?.descricao || "N/A" + return ( + + + {item.censec_tipoato_id} + + {censecDesc} + {/*{item.codigo ?? "-"}*/} + {item.descricao} + + {item.situacao === "A" ? "Ativo" : "Inativo"} + + {item.tipo_separacao ?? "-"} + {item.tipo_revogacao ?? "-"} + + + + + + + + + onEdit(item, true)} + > + + Editar + + + + + onDelete(item, true)} + > + + Remover + + + + + + + )})} + +
+ ); +} diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoIndexData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoIndexData.ts new file mode 100644 index 0000000..24c3a54 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoIndexData.ts @@ -0,0 +1,22 @@ +import API from "@/services/api/Api"; +import { Methods } from "@/services/api/enums/ApiMethodEnum"; +import TCensecTipoAtoMockDeDados from "./mockCensecTipoAto"; +import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler"; + +const useMock = true + +async function executeTCensecTipoAtoIndexData() { + if (useMock) { + console.log(TCensecTipoAtoMockDeDados()) + return await TCensecTipoAtoMockDeDados(); + } + + const api = new API(); + return await api.send({ + method: Methods.GET, + endpoint: `administrativo/t_censec_tipoato/` + }); + +} + +export const TCensecTipoAtoIndexData = withClientErrorHandler(executeTCensecTipoAtoIndexData) \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoRemoveData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoRemoveData.ts new file mode 100644 index 0000000..7293ad5 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoRemoveData.ts @@ -0,0 +1,17 @@ +import API from "@/services/api/Api"; +import { TCensecTipoAtoInterface } from "../../_interfaces/TCensecTipoAtoInterface"; +import { Methods } from "@/services/api/enums/ApiMethodEnum"; +import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler"; + +async function executeTCensecTipoAtoRemoveData(data: TCensecTipoAtoInterface) { + + const api = new API(); + + return await api.send({ + method: Methods.DELETE, + endpoint: `administrativo/t_censec_tipoato/${data.censec_tipoato_id}` + }); + +} + +export const TCensecTipoAtoRemoveData = withClientErrorHandler(executeTCensecTipoAtoRemoveData) \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoSaveData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoSaveData.ts new file mode 100644 index 0000000..879ba38 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoSaveData.ts @@ -0,0 +1,20 @@ +import API from "@/services/api/Api"; +import { TCensecTipoAtoInterface } from "../../_interfaces/TCensecTipoAtoInterface"; +import { Methods } from "@/services/api/enums/ApiMethodEnum"; +import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler"; + +async function executeTCensecTipoAtoSaveData(data: TCensecTipoAtoInterface) { + + const isUpdate = Boolean(data.censec_tipoato_id); + + const api = new API(); + + return await api.send({ + method: isUpdate ? Methods.PUT : Methods.POST, + endpoint: `administrativo/g_medida_tipo/${data.censec_tipoato_id || ''}`, + body: data + }); + +} + +export const TCensecTipoAtoSaveData = withClientErrorHandler(executeTCensecTipoAtoSaveData) \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/mockCensecTipoAto.ts b/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/mockCensecTipoAto.ts new file mode 100644 index 0000000..618c111 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/mockCensecTipoAto.ts @@ -0,0 +1,251 @@ +export default async function TCensecTipoAtoMockDeDados() { + return Promise.resolve({ + status: 200, + message: 'Dados localizados', + data: [ + { + censec_tipoato_id: 1, + censec_id: 2, + codigo: 1, + descricao: "Escritura", + situacao: "I", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 2, + censec_id: 1, + codigo: 2, + descricao: "Procuração", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 3, + censec_id: 1, + codigo: 3, + descricao: "Procuração para Fins Previdenciários", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 4, + censec_id: 1, + codigo: 5, + descricao: "Renúncia de Procuração", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 5, + censec_id: 1, + codigo: 6, + descricao: "Revogação de Procuração", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 6, + censec_id: 1, + codigo: 7, + descricao: "Substabelecimento", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 7, + censec_id: 1, + codigo: 8, + descricao: "Ata Notarial", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 8, + censec_id: 2, + codigo: 1, + descricao: "Separação", + situacao: "A", + tipo_separacao: "S", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 9, + censec_id: 2, + codigo: 2, + descricao: "Reconciliação", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 10, + censec_id: 2, + codigo: 3, + descricao: "Conversão de Separação em Divórcio", + situacao: "A", + tipo_separacao: "S", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 11, + censec_id: 2, + codigo: 4, + descricao: "Divórcio Direto", + situacao: "A", + tipo_separacao: "S", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 12, + censec_id: 2, + codigo: 5, + descricao: "Inventário", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 13, + censec_id: 2, + codigo: 6, + descricao: "Sobrepartilha", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 14, + censec_id: 2, + codigo: 7, + descricao: "Retificação", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 15, + censec_id: 3, + codigo: 1, + descricao: "Aditamento", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 16, + censec_id: 3, + codigo: 2, + descricao: "Cerrado", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 17, + censec_id: 3, + codigo: 3, + descricao: "Revogação", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "S" + }, + { + censec_tipoato_id: 18, + censec_id: 3, + codigo: 4, + descricao: "Testamento", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 19, + censec_id: 3, + codigo: 5, + descricao: "Testamento com Revogação", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 20, + censec_id: 3, + codigo: 6, + descricao: "Testamento sem Conteúdo Patrimonial", + situacao: "A", + tipo_separacao: "N", + tipo_revogacao: "N" + }, + { + censec_tipoato_id: 21, + censec_id: 9, + codigo: null, + descricao: "Atos Diversos", + situacao: "A", + tipo_separacao: null, + tipo_revogacao: null + }, + { + censec_tipoato_id: 204, + censec_id: 1, + codigo: 75, + descricao: "Conciliação", + situacao: "A", + tipo_separacao: null, + tipo_revogacao: null + }, + { + censec_tipoato_id: 208, + censec_id: 1, + codigo: 76, + descricao: "Mediação", + situacao: "A", + tipo_separacao: null, + tipo_revogacao: null + }, + { + censec_tipoato_id: 209, + censec_id: 1, + codigo: 8, + descricao: "Compra e Venda", + situacao: "A", + tipo_separacao: null, + tipo_revogacao: null + }, + { + censec_tipoato_id: 210, + censec_id: 1, + codigo: 1, + descricao: "Escritura", + situacao: "A", + tipo_separacao: null, + tipo_revogacao: null + }, + { + censec_tipoato_id: 211, + censec_id: 2, + codigo: 8, + descricao: "Nomeação de Inventariante", + situacao: "A", + tipo_separacao: null, + tipo_revogacao: null + }, + { + censec_tipoato_id: 212, + censec_id: 2, + codigo: 9, + descricao: "Partilha", + situacao: "A", + tipo_separacao: null, + tipo_revogacao: null + } + ] + }); +} diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/t_censec_tipoato/useTCensecTipoAtoReadHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/t_censec_tipoato/useTCensecTipoAtoReadHook.ts new file mode 100644 index 0000000..61ff510 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_hooks/t_censec_tipoato/useTCensecTipoAtoReadHook.ts @@ -0,0 +1,27 @@ +import { useResponse } from "@/app/_response/ResponseContext" +import { useState } from "react"; +import { TCensecTipoAtoInterface } from "../../_interfaces/TCensecTipoAtoInterface"; +import { TCensecTipoAtoIndexService } from "../../_services/t_censec_tipoato/TCensecTipoAtoIndexService"; + +export const useTCensecTipoAtoReadHook = () => { + + const { setResponse } = useResponse(); + const [tCensecTipoAto, setTCensecTipoAto] = useState([]); + + const fetchTCensecTipoAto = async () => { + + try { + const response = await TCensecTipoAtoIndexService(); + + setTCensecTipoAto(response.data); + + setResponse(response); + } catch (error) { + console.log(error) + } + + } + + return { tCensecTipoAto, fetchTCensecTipoAto } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/t_censec_tipoato/useTCensecTipoAtoRemoveHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/t_censec_tipoato/useTCensecTipoAtoRemoveHook.ts new file mode 100644 index 0000000..8af2d06 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_hooks/t_censec_tipoato/useTCensecTipoAtoRemoveHook.ts @@ -0,0 +1,19 @@ +import { useResponse } from "@/app/_response/ResponseContext" +import { TCensecTipoAtoInterface } from "../../_interfaces/TCensecTipoAtoInterface"; +import { TCensecTipoAtoRemoveService } from "../../_services/t_censec_tipoato/TCensecTipoAtoRemoveService"; + +export const useTCensecTipoAtoRemoveHook = () => { + + const { setResponse } = useResponse(); + + const removeTCensecTipoAto = async (data: TCensecTipoAtoInterface) => { + + const response = await TCensecTipoAtoRemoveService(data); + + setResponse(response); + + } + + return { removeTCensecTipoAto } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/t_censec_tipoato/useTCensecTipoAtoSaveHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/t_censec_tipoato/useTCensecTipoAtoSaveHook.ts new file mode 100644 index 0000000..1dde915 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_hooks/t_censec_tipoato/useTCensecTipoAtoSaveHook.ts @@ -0,0 +1,28 @@ +import { useResponse } from "@/app/_response/ResponseContext" +import { useState } from "react"; +import { TCensecTipoAtoInterface } from "../../_interfaces/TCensecTipoAtoInterface"; +import { TCensecTipoAtoSaveService } from "../../_services/t_censec_tipoato/TCensecTipoAtoSaveService"; + +export const useTCensecTipoAtoSaveHook = () => { + + const { setResponse } = useResponse(); + const [tCensecTipoAto, setTCensecTipoAto] = useState(null); + const [isOpen, setIsOpen] = useState(false); + + const saveTCensecTipoAto = async (data: TCensecTipoAtoInterface) => { + + const response = await TCensecTipoAtoSaveService(data); + + setTCensecTipoAto(response.data); + + setResponse(response); + + setIsOpen(false); + + return response; + + } + + return { tCensecTipoAto, saveTCensecTipoAto } + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_interfaces/TCensecInterface.ts b/src/app/(protected)/(cadastros)/cadastros/_interfaces/TCensecInterface.ts index 2fbf58a..7350883 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_interfaces/TCensecInterface.ts +++ b/src/app/(protected)/(cadastros)/cadastros/_interfaces/TCensecInterface.ts @@ -1,4 +1,3 @@ - export default interface TCensecInterface { censec_id?: number descricao: string diff --git a/src/app/(protected)/(cadastros)/cadastros/_interfaces/TCensecTipoAtoInterface.ts b/src/app/(protected)/(cadastros)/cadastros/_interfaces/TCensecTipoAtoInterface.ts new file mode 100644 index 0000000..1b0b866 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_interfaces/TCensecTipoAtoInterface.ts @@ -0,0 +1,9 @@ +export interface TCensecTipoAtoInterface { + censec_tipoato_id: number; + censec_id: number; + codigo: number | null; + descricao: string; + situacao: "A" | "I"; + tipo_separacao: "S" | "N" | null; + tipo_revogacao: "S" | "N" | null; +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_schemas/TCensecTipoAtoSchema.ts b/src/app/(protected)/(cadastros)/cadastros/_schemas/TCensecTipoAtoSchema.ts new file mode 100644 index 0000000..cffc38f --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_schemas/TCensecTipoAtoSchema.ts @@ -0,0 +1,11 @@ +import { z } from "zod"; + +export const TCensecTipoAtoSchema = z.object({ + censec_tipoato_id: z.number().int(), + censec_id: z.number().int(), + codigo: z.number().int().nullable(), + descricao: z.string(), + situacao: z.enum(["A", "I"]), + tipo_separacao: z.enum(["S", "N"]).nullable(), + tipo_revogacao: z.enum(["S", "N"]).nullable(), +}); \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/t_censec_tipoato/TCensecTipoAtoIndexService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/t_censec_tipoato/TCensecTipoAtoIndexService.ts new file mode 100644 index 0000000..bfbf931 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_services/t_censec_tipoato/TCensecTipoAtoIndexService.ts @@ -0,0 +1,15 @@ +import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler"; +import { TCensecTipoAtoIndexData } from "../../_data/TCensecTipoAto/GMedidaTipoIndexData"; + +async function executeTCensecTipoAtoIndexService() { + + try { + const response = await TCensecTipoAtoIndexData(); + return response; + } catch (error) { + console.log(error) + return error + } +} + +export const TCensecTipoAtoIndexService = withClientErrorHandler(executeTCensecTipoAtoIndexService) \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/t_censec_tipoato/TCensecTipoAtoRemoveService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/t_censec_tipoato/TCensecTipoAtoRemoveService.ts new file mode 100644 index 0000000..ce87845 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_services/t_censec_tipoato/TCensecTipoAtoRemoveService.ts @@ -0,0 +1,13 @@ +import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler"; +import { TCensecTipoAtoRemoveData } from "../../_data/TCensecTipoAto/GMedidaTipoRemoveData"; +import { TCensecTipoAtoInterface } from "../../_interfaces/TCensecTipoAtoInterface"; + +async function executeTCensecTipoAtoRemoveService(data: TCensecTipoAtoInterface) { + + const response = await TCensecTipoAtoRemoveData(data); + + return response; + +} + +export const TCensecTipoAtoRemoveService = withClientErrorHandler(executeTCensecTipoAtoRemoveService) \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/t_censec_tipoato/TCensecTipoAtoSaveService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/t_censec_tipoato/TCensecTipoAtoSaveService.ts new file mode 100644 index 0000000..d7d2731 --- /dev/null +++ b/src/app/(protected)/(cadastros)/cadastros/_services/t_censec_tipoato/TCensecTipoAtoSaveService.ts @@ -0,0 +1,15 @@ +import { withClientErrorHandler } from "@/actions/withClientErrorHandler/withClientErrorHandler"; +import { TCensecTipoAtoSaveData } from "../../_data/TCensecTipoAto/GMedidaTipoSaveData"; +import { TCensecTipoAtoInterface } from "../../_interfaces/TCensecTipoAtoInterface"; + +async function executeTCensecTipoAtoSaveService(data: TCensecTipoAtoInterface) { + + const response = await TCensecTipoAtoSaveData(data); + + console.log('GTBRegimeComunhaoSaveData', response) + + return response; + +} + +export const TCensecTipoAtoSaveService = withClientErrorHandler(executeTCensecTipoAtoSaveService) \ No newline at end of file diff --git a/src/components/app-sidebar.tsx b/src/components/app-sidebar.tsx index aa0e027..e620d01 100644 --- a/src/components/app-sidebar.tsx +++ b/src/components/app-sidebar.tsx @@ -139,6 +139,10 @@ const data = { { title: "Censec/Centrais", url: "/cadastros/censec/", + }, + { + title: "Censec Tipo Ato", + url: "/cadastros/censec-tipoato" } ], }, diff --git a/src/config/app_example.json b/src/config/app_example.json deleted file mode 100644 index d38e8d3..0000000 --- a/src/config/app_example.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "state": "go", - "api": { - "url": "http://localhost:8000/", - "prefix": "api/v1/", - "content_type": "application/json" - } -} \ No newline at end of file From 727e665db43f3787a0747f39cf1059f6650af0ca Mon Sep 17 00:00:00 2001 From: = <=> Date: Wed, 1 Oct 2025 08:53:51 -0300 Subject: [PATCH 2/2] [MVPTN-90] feat(CRUD): implementada tela de cadastro de tipo de atos censec, com dados mockados por enquanto --- .../cadastros/_data/TCensecTipoAto/GMedidaTipoSaveData.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoSaveData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoSaveData.ts index 879ba38..80c9438 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoSaveData.ts +++ b/src/app/(protected)/(cadastros)/cadastros/_data/TCensecTipoAto/GMedidaTipoSaveData.ts @@ -11,7 +11,7 @@ async function executeTCensecTipoAtoSaveData(data: TCensecTipoAtoInterface) { return await api.send({ method: isUpdate ? Methods.PUT : Methods.POST, - endpoint: `administrativo/g_medida_tipo/${data.censec_tipoato_id || ''}`, + endpoint: `administrativo/t_censec_tipoato/${data.censec_tipoato_id || ''}`, body: data });