From b48ffc4bd54d2622976ed25088b55f7a53e7b787 Mon Sep 17 00:00:00 2001 From: keven Date: Fri, 17 Oct 2025 09:04:27 -0300 Subject: [PATCH] [MVPTN-120] feat(CRUD): Cria o Crud de Vincular as qualidades ao ato --- .../t_censec_tipoato/TCensecTipoAtoForm.tsx | 292 ++++++++++-------- src/components/app-sidebar.tsx | 4 - .../TCensecQualidadeAtoColumns.tsx | 64 ++++ .../TCensecQualidadeAtoForm.tsx | 114 +++++++ .../TCensecQualidadeAtoFormColumns.tsx | 60 ++++ .../TCensecQualidadeAtoIndex.tsx | 165 ++++++++++ .../TCensecQualidadeAtoTable.tsx | 31 ++ .../TCensecQualidadeAtoIndexData.ts | 14 + .../TCensecQualidadeAtoRemoveData.ts | 14 + .../TCensecQualidadeAtoSaveData.ts | 19 ++ .../useTCensecQualidadeAtoDeleteHook.ts | 15 + .../useTCensecQualidadeAtoFormHook.ts | 15 + .../useTCensecQualidadeAtoIndexHook.ts | 21 ++ .../useTCensecQualidadeAtoSaveHook.ts | 33 ++ .../TCensecQualidadeAtoFormInterface.ts | 9 + .../TCensecQualidadeAtoInterface.ts | 6 + .../TCensecQualidadeAtoJoinedInterface.ts | 5 + .../TCensecQualidadeAtoPageInterface.ts | 3 + .../TCensecQualidadeAtoTableInterface.ts | 7 + .../TCensecQualidadeAtoSchema.ts | 10 + .../TCensecQualidadeAtoIndexService.ts | 11 + .../TCensecQualidadeAtoRemoveService.ts | 13 + .../TCensecQualidadeAtoSaveService.ts | 12 + 23 files changed, 804 insertions(+), 133 deletions(-) create mode 100644 src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoColumns.tsx create mode 100644 src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoForm.tsx create mode 100644 src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoFormColumns.tsx create mode 100644 src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoIndex.tsx create mode 100644 src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoTable.tsx create mode 100644 src/packages/administrativo/data/TCensecQualidadeAto/TCensecQualidadeAtoIndexData.ts create mode 100644 src/packages/administrativo/data/TCensecQualidadeAto/TCensecQualidadeAtoRemoveData.ts create mode 100644 src/packages/administrativo/data/TCensecQualidadeAto/TCensecQualidadeAtoSaveData.ts create mode 100644 src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoDeleteHook.ts create mode 100644 src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoFormHook.ts create mode 100644 src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoIndexHook.ts create mode 100644 src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoSaveHook.ts create mode 100644 src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoFormInterface.ts create mode 100644 src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface.ts create mode 100644 src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoJoinedInterface.ts create mode 100644 src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoPageInterface.ts create mode 100644 src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoTableInterface.ts create mode 100644 src/packages/administrativo/schemas/TCensecQualidadeAto/TCensecQualidadeAtoSchema.ts create mode 100644 src/packages/administrativo/services/TCensecQualidadeAto/TCensecQualidadeAtoIndexService.ts create mode 100644 src/packages/administrativo/services/TCensecQualidadeAto/TCensecQualidadeAtoRemoveService.ts create mode 100644 src/packages/administrativo/services/TCensecQualidadeAto/TCensecQualidadeAtoSaveService.ts 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 index 8f326f9..45aec36 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_components/t_censec_tipoato/TCensecTipoAtoForm.tsx +++ b/src/app/(protected)/(cadastros)/cadastros/_components/t_censec_tipoato/TCensecTipoAtoForm.tsx @@ -4,7 +4,6 @@ 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 LoadingButton from "@/shared/components/loadingButton/LoadingButton"; import { Button } from "@/components/ui/button"; import { @@ -26,11 +25,13 @@ import { } 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 TCensecInterface from "../../_interfaces/TCensecInterface"; import { SituacoesEnum } from "@/shared/enums/SituacoesEnum"; import SituacoesSelect from "@/shared/components/situacoes/SituacoesSelect"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { IdCardIcon, UserIcon } from "lucide-react"; +import TCensecQualidadeAtoIndex from "@/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoIndex"; type FormValues = z.infer; @@ -51,7 +52,7 @@ export default function TCensecTipoAtoForm({ onSave, buttonIsLoading }: TCensecTipoAtoFormProps) { - // react-hook-form com schema Zod + const form = useForm({ resolver: zodResolver(TCensecTipoAtoSchema), defaultValues: { @@ -65,7 +66,6 @@ export default function TCensecTipoAtoForm({ }, }); - // Atualiza o formulário se houver dados para edição useEffect(() => { if (data) form.reset(data); }, [data, form]); @@ -77,7 +77,7 @@ export default function TCensecTipoAtoForm({ if (!open) onClose(null, false); }} > - + Tipo de Ato CENSEC @@ -85,138 +85,172 @@ export default function TCensecTipoAtoForm({ -
- + {/* Conteúdo principal dentro das Tabs */} + + + + + Dados Gerais + + {data?.censec_tipoato_id && ( + + + Qualidades + + )} + - {/* Descrição */} - ( - - Descrição - - - - - - )} - /> +
+ {/* ABA DADOS GERAIS */} + + + - {/* Select Censec */} - ( - - Central do Censec - - - - )} - /> + {/* Descrição */} + ( + + Descrição + + + + + + )} + /> + {/* Select Censec */} + ( + + Central do Censec + + + + )} + /> - {/* Situação */} - ( -
- - -
- )} - /> + {/* Situação */} + ( + + Situação + + + + + + )} + /> - {/* Tipo de Separação */} - ( - - Tipo de Separação - - - - )} - /> + {/* Tipo de Separação */} + ( + + Tipo de Separação + + + + )} + /> - {/* Tipo de Revogação */} - ( - - Tipo de Revogação - - - - )} - /> + {/* Tipo de Revogação */} + ( + + Tipo de Revogação + + + + )} + /> - {/* Rodapé */} - - - - - - + {/* Rodapé do formulário */} + + + + + + - {/* Campos ocultos */} - - - - + {/* Campos ocultos */} + + + + +
+ + {/* ======== ABA QUALIDADES ======== */} + {data?.censec_tipoato_id && ( + + + + )} +
+
); diff --git a/src/components/app-sidebar.tsx b/src/components/app-sidebar.tsx index 7d7d275..60b7305 100644 --- a/src/components/app-sidebar.tsx +++ b/src/components/app-sidebar.tsx @@ -137,10 +137,6 @@ const data = { title: "Censec/Qualidades", url: "/administrativo/censec/qualidades" }, - { - title: "Censec/Qualidades", - url: "/administrativo/censec/naturezas" - }, { title: 'Censec/Centrais', url: '/cadastros/censec/', diff --git a/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoColumns.tsx b/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoColumns.tsx new file mode 100644 index 0000000..db02c75 --- /dev/null +++ b/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoColumns.tsx @@ -0,0 +1,64 @@ +import { ColumnDef } from "@tanstack/react-table"; +import { Button } from "@/components/ui/button"; +import { ArrowUpDownIcon, EllipsisIcon, Trash2Icon } from "lucide-react"; +import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; +import GetCapitalize from "@/shared/actions/text/GetCapitalize"; +import { SortableHeader } from "@/shared/components/dataTable/SortableHeader"; +import TCensecQualidadeAtoJoinedInterface from "../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoPageInterface"; + +export default function TCensecQualidadeAtoColumns( + onDelete: (item: TCensecQualidadeAtoJoinedInterface, isEditingFormStatus: boolean) => void, +): ColumnDef[] { + return [ + // ID + { + accessorKey: 'censec_qualidadeato_id', + header: ({ column }) => ( + + ), + cell: ({ row }) => Number(row.getValue('censec_qualidadeato_id')), + enableSorting: false, + }, + // Descrição + { + accessorKey: "tcq_descricao", + header: ({ column }) => SortableHeader("Descrição", column), + cell: ({ row }) => GetCapitalize(row.getValue("tcq_descricao")), + }, + // Ações + { + id: 'actions', + header: 'Ações', + cell: ({ row }) => { + const pessoa = row.original; + return ( + + + + + + + onDelete(pessoa, true)} + > + + Remover + + + + + ); + }, + enableSorting: false, + enableHiding: false, + }, + ]; +} \ No newline at end of file diff --git a/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoForm.tsx b/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoForm.tsx new file mode 100644 index 0000000..2036941 --- /dev/null +++ b/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoForm.tsx @@ -0,0 +1,114 @@ +'use client'; + +import React, { useEffect, useState } from 'react'; + +import { Button } from '@/components/ui/button'; +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from '@/components/ui/dialog'; +import { Form } from '@/components/ui/form'; + +import LoadingButton from '@/shared/components/loadingButton/LoadingButton'; +import { DataTable } from '@/shared/components/dataTable/DataTable'; +import { ResetFormIfData } from '@/shared/actions/form/ResetFormIfData'; +import TCensecQualidadeAtoInterface from '../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface'; +import { useTCensecQualidadeAtoFormHook } from '../../hooks/TCensecQualidadeAto/useTCensecQualidadeAtoFormHook'; +import TCensecQualidadeAtoFormInterface from '../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoFormInterface'; +import { useTCensecQualidadeIndexHook } from '../../hooks/TCensecQualidade/useTCensecQualidadeIndexHook'; +import TCensecQualidadeAtoFormColumns from './TCensecQualidadeAtoFormColumns'; + +export default function TCensecQualidadeAtoForm({ + isOpen, + data, + onClose, + onSave, + buttonIsLoading, +}: TCensecQualidadeAtoFormInterface) { + + const { tCensecQualidade, indexTCensecQualidade } = useTCensecQualidadeIndexHook(); + + const [selectedTCensecQualidadeAto, setSelectedTCensecQualidadeAto] = useState(null); + + // Inicializa o react-hook-form com schema zod + const form = useTCensecQualidadeAtoFormHook(); + + // Atualiza o formulário quando recebe dados para edição + useEffect(() => { + const loadData = async () => { + ResetFormIfData(form, data); + await indexTCensecQualidade(); + }; + loadData(); + }, [data, form]); + + useEffect(() => { + const newValue = selectedTCensecQualidadeAto?.censec_qualidade_id ?? 0; + const currentValue = form.getValues('censec_qualidade_id'); + if (currentValue !== newValue) { + form.setValue('censec_qualidade_id', newValue); + } + }, [selectedTCensecQualidadeAto, form]); + + const columns = TCensecQualidadeAtoFormColumns(setSelectedTCensecQualidadeAto); + + function onError(error: any) { + console.log(error); + } + + return ( + { + if (!open) onClose(null, false); + }} + > + + + + Qualidades + + + Qualidades vinculadas + + +
+ +
+ +
+ {/* Rodapé do Dialog */} + + + + + + +
+ +
+
+ ); +} diff --git a/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoFormColumns.tsx b/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoFormColumns.tsx new file mode 100644 index 0000000..807b1fc --- /dev/null +++ b/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoFormColumns.tsx @@ -0,0 +1,60 @@ +import { ColumnDef } from "@tanstack/react-table"; +import { Checkbox } from "@/components/ui/checkbox"; +import { Button } from "@/components/ui/button"; +import { ArrowUpDownIcon } from "lucide-react"; +import TCensecQualidadeAtoInterface from "../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface"; +import TCensecQualidadeInterface from "../../interfaces/TCensecQualidade/TCensecQualidadeInterface"; +import GetCapitalize from "@/shared/actions/text/GetCapitalize"; + +export default function TCensecQualidadeAtoFormColumns( + setSelectedTCensecQualidadeAto: React.Dispatch>, +): ColumnDef[] { + return [ + { + id: 'select', + header: '', + cell: ({ row, table }) => ( + { + // Limpa todas as seleções antes de selecionar uma nova + table.resetRowSelection(); + row.toggleSelected(!!value); + setSelectedTCensecQualidadeAto(value ? row.original : null); + }} + aria-label="Select row" + /> + ), + enableSorting: false, + enableHiding: false, + }, + // ID + { + accessorKey: 'censec_qualidade_id', + header: ({ column }) => ( + + ), + cell: ({ row }) => Number(row.getValue('censec_qualidade_id')), + enableSorting: true, + }, + // ID + { + accessorKey: 'descricao', + header: ({ column }) => ( + + ), + cell: ({ row }) => GetCapitalize(row.getValue('descricao')), + enableSorting: true, + }, + ]; +} \ No newline at end of file diff --git a/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoIndex.tsx b/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoIndex.tsx new file mode 100644 index 0000000..72334aa --- /dev/null +++ b/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoIndex.tsx @@ -0,0 +1,165 @@ +'use client'; + +import React, { useEffect, useState, useCallback } from 'react'; + +import { useTCensecQualidadeAtoIndexHook } from '../../hooks/TCensecQualidadeAto/useTCensecQualidadeAtoIndexHook'; +import { useTCensecQualidadeAtoSaveHook } from '../../hooks/TCensecQualidadeAto/useTCensecQualidadeAtoSaveHook'; +import { useTCensecQualidadeAtoDeleteHook } from '../../hooks/TCensecQualidadeAto/useTCensecQualidadeAtoDeleteHook'; + +import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog'; +import { useConfirmDialog } from '@/shared/components/confirmDialog/useConfirmDialog'; + +import TCensecQualidadeAtoTable from './TCensecQualidadeAtoTable'; +import Header from '@/shared/components/structure/Header'; +import TCensecQualidadeAtoForm from './TCensecQualidadeAtoForm'; +import TCensecQualidadeAtoPageInterface from '../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoPageInterface'; +import TCensecQualidadeAtoInterface from '../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface'; + +export default function TCensecQualidadeAtoIndex({ censec_tipoato_id }: TCensecQualidadeAtoPageInterface) { + + const TCensecQualidadeAtoPage: TCensecQualidadeAtoPageInterface = { + censec_tipoato_id: censec_tipoato_id + } + + // Controle de estado do botão + const [buttonIsLoading, setButtonIsLoading] = useState(false); + + // Hooks para leitura e salvamento + const { tPessoaRepresentante, fetchTCensecQualidadeAto } = useTCensecQualidadeAtoIndexHook(); + const { saveTCensecQualidadeAto } = useTCensecQualidadeAtoSaveHook(); + const { removeTPessaoRepresentante } = useTCensecQualidadeAtoDeleteHook(); + + // Estados + const [selectedData, setSelectedData] = useState(null); + const [isFormOpen, setIsFormOpen] = useState(false); + + // Estado para saber qual item será deletado + const [itemToDelete, setItemToDelete] = useState(null); + + /** + * Hook do modal de confirmação + */ + const { + isOpen: isConfirmOpen, + openDialog: openConfirmDialog, + handleCancel, + } = useConfirmDialog(); + + /** + * Abre o formulário no modo de edição ou criação + */ + const handleOpenForm = useCallback((data: TCensecQualidadeAtoInterface | null) => { + // Se não houver dados (criação), cria um objeto inicial com imovel_id + const initialData: TCensecQualidadeAtoPageInterface = data ?? { censec_tipoato_id } as TCensecQualidadeAtoPageInterface; + setSelectedData(initialData); + setIsFormOpen(true); + }, []); + + /** + * Fecha o formulário e limpa o andamento selecionado + */ + const handleCloseForm = useCallback(() => { + setSelectedData(null); + setIsFormOpen(false); + }, []); + + /** + * Salva os dados do formulário + */ + const handleSave = useCallback( + async (formData: TCensecQualidadeAtoInterface) => { + // Coloca o botão em estado de loading + setButtonIsLoading(true); + // Aguarda salvar o registro + await saveTCensecQualidadeAto(formData); + // Remove o botão em estado de loading + setButtonIsLoading(false); + // Atualiza a lista de dados + fetchTCensecQualidadeAto(TCensecQualidadeAtoPage); + }, + [saveTCensecQualidadeAto, fetchTCensecQualidadeAto, handleCloseForm], + ); + + /** + * Quando o usuário clica em "remover" na tabela + */ + const handleConfirmDelete = useCallback( + (item: TCensecQualidadeAtoInterface) => { + // Define o item atual para remoção + setItemToDelete(item); + // Abre o modal de confirmação + openConfirmDialog(); + }, + [openConfirmDialog], + ); + + /** + * Executa a exclusão de fato quando o usuário confirma + */ + const handleDelete = useCallback(async () => { + // Protege contra null + if (!itemToDelete) return; + + // Executa o Hook de remoção + await removeTPessaoRepresentante(itemToDelete); + + // Atualiza a lista + await fetchTCensecQualidadeAto(TCensecQualidadeAtoPage); + + // Limpa o item selecionado + setItemToDelete(null); + + // Fecha o modal + handleCancel(); + }, [itemToDelete, fetchTCensecQualidadeAto, handleCancel]); + + /** + * Busca inicial dos dados + */ + useEffect(() => { + fetchTCensecQualidadeAto(TCensecQualidadeAtoPage); + }, []); + + return ( +
+ {/* Cabeçalho */} +
{ + handleOpenForm(null); + }} + /> + {/* Tabela de Registros */} + + {/* Modal de confirmação */} + {isConfirmOpen && ( + + )} + {/* Formulário de criação/edição */} + {isFormOpen && ( + + )} +
+ ); +} diff --git a/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoTable.tsx b/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoTable.tsx new file mode 100644 index 0000000..2da9cd7 --- /dev/null +++ b/src/packages/administrativo/components/TCensecQualidadeAto/TCensecQualidadeAtoTable.tsx @@ -0,0 +1,31 @@ +'use client'; + +import { DataTable } from '@/shared/components/dataTable/DataTable'; + +import TCensecQualidadeAtoColumns from './TCensecQualidadeAtoColumns'; +import TCensecQualidadeAtoTableInterface from '../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoTableInterface'; + +/** + * Componente principal da tabela + */ +export default function TCensecQualidadeAtoTable({ + data, + onDelete, +}: TCensecQualidadeAtoTableInterface) { + const columns = TCensecQualidadeAtoColumns(onDelete); + const isEmpty = !data || data.length === 0; + return ( +
+ {isEmpty ? ( +
+ Nenhuma unidade cadastrada ainda. +
+ ) : ( + + )} +
+ ); +} diff --git a/src/packages/administrativo/data/TCensecQualidadeAto/TCensecQualidadeAtoIndexData.ts b/src/packages/administrativo/data/TCensecQualidadeAto/TCensecQualidadeAtoIndexData.ts new file mode 100644 index 0000000..7c4ce23 --- /dev/null +++ b/src/packages/administrativo/data/TCensecQualidadeAto/TCensecQualidadeAtoIndexData.ts @@ -0,0 +1,14 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import API from '@/shared/services/api/Api'; +import { Methods } from '@/shared/services/api/enums/ApiMethodEnum'; +import TCensecQualidadeAtoInterface from '../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface'; + +async function executeTCensecQualidadeAtoIndexData(data: TCensecQualidadeAtoInterface) { + const api = new API(); + return await api.send({ + method: Methods.GET, + endpoint: `administrativo/t_censec_qualidadeato/tipo-ato/${data.censec_tipoato_id}`, + }); +} + +export const TCensecQualidadeAtoIndexData = withClientErrorHandler(executeTCensecQualidadeAtoIndexData); \ No newline at end of file diff --git a/src/packages/administrativo/data/TCensecQualidadeAto/TCensecQualidadeAtoRemoveData.ts b/src/packages/administrativo/data/TCensecQualidadeAto/TCensecQualidadeAtoRemoveData.ts new file mode 100644 index 0000000..bc2ea01 --- /dev/null +++ b/src/packages/administrativo/data/TCensecQualidadeAto/TCensecQualidadeAtoRemoveData.ts @@ -0,0 +1,14 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import TCensecQualidadeAtoInterface from '../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface'; +import API from '@/shared/services/api/Api'; +import { Methods } from '@/shared/services/api/enums/ApiMethodEnum'; + +async function executeTCensecQualidadeAtoRemoveData(data: TCensecQualidadeAtoInterface) { + const api = new API(); + return api.send({ + method: Methods.DELETE, + endpoint: `administrativo/t_censec_qualidadeato/${data.censec_qualidadeato_id}`, + }); +} + +export const TCensecQualidadeAtoRemoveData = withClientErrorHandler(executeTCensecQualidadeAtoRemoveData); diff --git a/src/packages/administrativo/data/TCensecQualidadeAto/TCensecQualidadeAtoSaveData.ts b/src/packages/administrativo/data/TCensecQualidadeAto/TCensecQualidadeAtoSaveData.ts new file mode 100644 index 0000000..e4f4bd4 --- /dev/null +++ b/src/packages/administrativo/data/TCensecQualidadeAto/TCensecQualidadeAtoSaveData.ts @@ -0,0 +1,19 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import API from '@/shared/services/api/Api'; +import { Methods } from '@/shared/services/api/enums/ApiMethodEnum'; +import TCensecQualidadeAtoInterface from '../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface'; + +async function executeTCensecQualidadeAtoSaveData(data: TCensecQualidadeAtoInterface) { + + // Instancia o cliente da API para enviar a requisição + const api = new API(); + + // Executa a requisição para a API com o método apropriado e envia os dados no corpo + return await api.send({ + method: Methods.POST, + endpoint: `administrativo/t_censec_qualidadeato/`, // endpoint dinâmico + body: data, + }); +} + +export const TCensecQualidadeAtoSaveData = withClientErrorHandler(executeTCensecQualidadeAtoSaveData); diff --git a/src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoDeleteHook.ts b/src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoDeleteHook.ts new file mode 100644 index 0000000..57f49e1 --- /dev/null +++ b/src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoDeleteHook.ts @@ -0,0 +1,15 @@ +import { useResponse } from '@/shared/components/response/ResponseContext'; +import TCensecQualidadeAtoInterface from '../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface'; +import { TCensecQualidadeAtoRemoveService } from '../../services/TCensecQualidadeAto/TCensecQualidadeAtoRemoveService'; + +export const useTCensecQualidadeAtoDeleteHook = () => { + const { setResponse } = useResponse(); + + const removeTPessaoRepresentante = async (data: TCensecQualidadeAtoInterface) => { + const response = await TCensecQualidadeAtoRemoveService(data); + + setResponse(response); + }; + + return { removeTPessaoRepresentante }; +}; diff --git a/src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoFormHook.ts b/src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoFormHook.ts new file mode 100644 index 0000000..bcb1032 --- /dev/null +++ b/src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoFormHook.ts @@ -0,0 +1,15 @@ +// hooks/useTPessoaForm.ts +import { useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import TCensecQualidadeAtoInterface from "../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface"; +import { TCensecQualidadeAtoFormValues, TCensecQualidadeAtoSchema } from "../../schemas/TCensecQualidadeAto/TCensecQualidadeAtoSchema"; + +// Hook customizado +export function useTCensecQualidadeAtoFormHook(defaults?: Partial) { + return useForm({ + resolver: zodResolver(TCensecQualidadeAtoSchema), + defaultValues: { + ...defaults, + }, + }); +} \ No newline at end of file diff --git a/src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoIndexHook.ts b/src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoIndexHook.ts new file mode 100644 index 0000000..cfa480d --- /dev/null +++ b/src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoIndexHook.ts @@ -0,0 +1,21 @@ +import { useResponse } from '@/shared/components/response/ResponseContext'; +import { useState } from 'react'; +import TCensecQualidadeAtoInterface from '../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface'; +import { TCensecQualidadeAtoIndexService } from '../../services/TCensecQualidadeAto/TCensecQualidadeAtoIndexService'; + +export const useTCensecQualidadeAtoIndexHook = () => { + const { setResponse } = useResponse(); + + const [tPessoaRepresentante, setTCensecQualidadeAto] = useState([]); + + const fetchTCensecQualidadeAto = async (data: TCensecQualidadeAtoInterface) => { + + const response = await TCensecQualidadeAtoIndexService(data); + + setTCensecQualidadeAto(response.data); + + setResponse(response); + }; + + return { tPessoaRepresentante, fetchTCensecQualidadeAto }; +}; diff --git a/src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoSaveHook.ts b/src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoSaveHook.ts new file mode 100644 index 0000000..61724a3 --- /dev/null +++ b/src/packages/administrativo/hooks/TCensecQualidadeAto/useTCensecQualidadeAtoSaveHook.ts @@ -0,0 +1,33 @@ +'use client'; + +import { useResponse } from '@/shared/components/response/ResponseContext'; +import { useState } from 'react'; +import TCensecQualidadeAtoInterface from '../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface'; +import { TCensecQualidadeAtoSaveService } from '../../services/TCensecQualidadeAto/TCensecQualidadeAtoSaveService'; + +export const useTCensecQualidadeAtoSaveHook = () => { + const { setResponse } = useResponse(); + + const [tPessoaRepresentante, setTCensecQualidadeAto] = useState(); + + // controla se o formulário está aberto ou fechado + const [isOpen, setIsOpen] = useState(false); + + const saveTCensecQualidadeAto = async (data: TCensecQualidadeAtoInterface) => { + const response = await TCensecQualidadeAtoSaveService(data); + + // Armazena os dados da repsota + setTCensecQualidadeAto(response.data); + + // Define os dados da respota(toast, modal, etc) + setResponse(response); + + // Fecha o formulário automaticamente após salvar + setIsOpen(false); + + // Retorna os valores de forma imediata + return response.data; + }; + + return { tPessoaRepresentante, saveTCensecQualidadeAto }; +}; diff --git a/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoFormInterface.ts b/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoFormInterface.ts new file mode 100644 index 0000000..77690d7 --- /dev/null +++ b/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoFormInterface.ts @@ -0,0 +1,9 @@ +import { TCensecQualidadeAtoFormValues } from "../../schemas/TCensecQualidadeAto/TCensecQualidadeAtoSchema"; + +export default interface TCensecQualidadeAtoFormInterface { + isOpen: boolean; + data: TCensecQualidadeAtoFormValues | null; + onClose: (item: null, isFormStatus: boolean) => void; + onSave: (data: TCensecQualidadeAtoFormValues) => void; + buttonIsLoading: boolean; +} diff --git a/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface.ts b/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface.ts new file mode 100644 index 0000000..e6a742f --- /dev/null +++ b/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface.ts @@ -0,0 +1,6 @@ +export default interface TCensecQualidadeAtoInterface { + censec_qualidadeato_id?: number; + censec_tipoato_id?: number; + censec_qualidade_id?: number; + qtd_minima?: number; +} \ No newline at end of file diff --git a/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoJoinedInterface.ts b/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoJoinedInterface.ts new file mode 100644 index 0000000..589f6fe --- /dev/null +++ b/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoJoinedInterface.ts @@ -0,0 +1,5 @@ +import TCensecQualidadeAtoInterface from "./TCensecQualidadeAtoInterface"; + +export default interface TCensecQualidadeAtoJoinedInterface extends TCensecQualidadeAtoInterface { + tcq_descricao?: string +} \ No newline at end of file diff --git a/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoPageInterface.ts b/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoPageInterface.ts new file mode 100644 index 0000000..8229335 --- /dev/null +++ b/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoPageInterface.ts @@ -0,0 +1,3 @@ +export default interface TCensecQualidadeAtoJoinedInterface { + censec_tipoato_id?: number +} \ No newline at end of file diff --git a/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoTableInterface.ts b/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoTableInterface.ts new file mode 100644 index 0000000..37cd152 --- /dev/null +++ b/src/packages/administrativo/interfaces/TCensecQualidadeAto/TCensecQualidadeAtoTableInterface.ts @@ -0,0 +1,7 @@ +import TCensecQualidadeAtoJoinedInterface from "./TCensecQualidadeAtoPageInterface"; + +export default interface TCensecQualidadeAtoTableInterface { + data: TCensecQualidadeAtoJoinedInterface[]; + onEdit: (item: TCensecQualidadeAtoJoinedInterface, isEditingFormStatus: boolean) => void; + onDelete: (item: TCensecQualidadeAtoJoinedInterface, isEditingFormStatus: boolean) => void; +} \ No newline at end of file diff --git a/src/packages/administrativo/schemas/TCensecQualidadeAto/TCensecQualidadeAtoSchema.ts b/src/packages/administrativo/schemas/TCensecQualidadeAto/TCensecQualidadeAtoSchema.ts new file mode 100644 index 0000000..be1ccff --- /dev/null +++ b/src/packages/administrativo/schemas/TCensecQualidadeAto/TCensecQualidadeAtoSchema.ts @@ -0,0 +1,10 @@ +import z from "zod"; + +export const TCensecQualidadeAtoSchema = z.object({ + censec_qualidadeato_id: z.number().optional(), + censec_tipoato_id: z.number().optional(), + censec_qualidade_id: z.number().optional(), + qtd_minima: z.number().optional(), +}); + +export type TCensecQualidadeAtoFormValues = z.infer; \ No newline at end of file diff --git a/src/packages/administrativo/services/TCensecQualidadeAto/TCensecQualidadeAtoIndexService.ts b/src/packages/administrativo/services/TCensecQualidadeAto/TCensecQualidadeAtoIndexService.ts new file mode 100644 index 0000000..e78265e --- /dev/null +++ b/src/packages/administrativo/services/TCensecQualidadeAto/TCensecQualidadeAtoIndexService.ts @@ -0,0 +1,11 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import { TCensecQualidadeAtoIndexData } from '../../data/TCensecQualidadeAto/TCensecQualidadeAtoIndexData'; +import TCensecQualidadeAtoInterface from '../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface'; + +async function executeTCensecQualidadeAtoIndexService(data: TCensecQualidadeAtoInterface) { + return await TCensecQualidadeAtoIndexData(data); +} + +export const TCensecQualidadeAtoIndexService = withClientErrorHandler( + executeTCensecQualidadeAtoIndexService +); \ No newline at end of file diff --git a/src/packages/administrativo/services/TCensecQualidadeAto/TCensecQualidadeAtoRemoveService.ts b/src/packages/administrativo/services/TCensecQualidadeAto/TCensecQualidadeAtoRemoveService.ts new file mode 100644 index 0000000..1c2cad2 --- /dev/null +++ b/src/packages/administrativo/services/TCensecQualidadeAto/TCensecQualidadeAtoRemoveService.ts @@ -0,0 +1,13 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import { TCensecQualidadeAtoRemoveData } from '../../data/TCensecQualidadeAto/TCensecQualidadeAtoRemoveData'; +import TCensecQualidadeAtoInterface from '../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface'; + +async function executeTCensecQualidadeAtoRemoveService(data: TCensecQualidadeAtoInterface) { + const response = TCensecQualidadeAtoRemoveData(data); + + return response; +} + +export const TCensecQualidadeAtoRemoveService = withClientErrorHandler( + executeTCensecQualidadeAtoRemoveService +); diff --git a/src/packages/administrativo/services/TCensecQualidadeAto/TCensecQualidadeAtoSaveService.ts b/src/packages/administrativo/services/TCensecQualidadeAto/TCensecQualidadeAtoSaveService.ts new file mode 100644 index 0000000..266db27 --- /dev/null +++ b/src/packages/administrativo/services/TCensecQualidadeAto/TCensecQualidadeAtoSaveService.ts @@ -0,0 +1,12 @@ +import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; +import { TCensecQualidadeAtoSaveData } from '../../data/TCensecQualidadeAto/TCensecQualidadeAtoSaveData'; +import TCensecQualidadeAtoInterface from '../../interfaces/TCensecQualidadeAto/TCensecQualidadeAtoInterface'; + +async function executeTCensecQualidadeAtoSaveService(data: TCensecQualidadeAtoInterface) { + const response = await TCensecQualidadeAtoSaveData(data); + return response; +} + +export const TCensecQualidadeAtoSaveService = withClientErrorHandler( + executeTCensecQualidadeAtoSaveService +);