From f9df3cd8a3f203398d5f5f481dfd2a3f0e41e2b9 Mon Sep 17 00:00:00 2001 From: Keven Date: Mon, 8 Dec 2025 09:46:23 -0300 Subject: [PATCH] =?UTF-8?q?fix(Deploy):=20Ajustes=20para=20build=20de=20ve?= =?UTF-8?q?rs=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 8 +- package.json | 2 +- .../usuarios/[id]/detalhes/page.tsx | 50 --- .../(g_usuario)/usuarios/formulario/page.tsx | 126 -------- .../(g_usuario)/usuarios/page.tsx | 85 ----- .../administrativo/tipos-servicos/page.tsx | 9 + .../t_servico_tipo/TServicoTipoTable.tsx | 101 ------ .../_data/GEmolumento/GEmolumentoIndexData.ts | 26 -- .../TTBReconhecimentoTipoIndexData.ts | 29 -- .../g_emolumento/useGEmolumentoReadHook.ts | 37 --- .../useTTBReconhecimentoTipoReadHook.ts | 41 --- .../_interfaces/GEmolumentoInterface.ts | 20 -- .../_interfaces/GEmolumentoItemInterface.ts | 32 -- .../_interfaces/TServicoTipoInterface.ts | 28 -- .../TTBReconhecimentoTipoInterface.ts | 6 - .../cadastros/_schemas/TServicoTipoSchema.ts | 78 ----- .../g_emolumento/GEmolumentoIndexService.ts | 19 -- src/components/app-sidebar.tsx | 4 +- .../CCaixaServico/CCaixaServicoSelect.tsx | 8 +- .../components/GCalculo/GCalculoForm.tsx | 5 +- .../components/GCalculo/GCalculoTable.tsx | 7 +- .../GEmolumento/GEmolumentoSelect.tsx | 44 +-- .../GEmolumento/GEmolumentoServicoSelect.tsx | 4 +- .../GEmolumentoItem/GEmolumentoItemForm.tsx | 4 - .../components/GGramatica/GGramaticaForm.tsx | 1 + .../GMarcacaoTipo/GMarcacaoTipoSelect.tsx | 8 +- .../GMedidaTipo/GMedidaTipoIndex.tsx | 15 +- .../components/GTBBairro/GTBBairroIndex.tsx | 8 +- .../GTBEstadoCivil/GTBEstadoCivilIndex.tsx | 10 +- .../components/GUsuario/GUsuarioSelect.tsx | 2 +- .../TCensecNaturezaLitigioIndex.tsx | 8 +- .../TCensecTipoAto/TCensecTipoAtoIndex.tsx | 10 +- .../TPessoa/TPessoaTableFormColumnsDialog.tsx | 2 +- .../TPessoa/TPessoaTableFormSubview.tsx | 8 +- .../TServicoTipo/TServicoTipoColumns.tsx | 73 +++++ .../TServicoTipo}/TServicoTipoForm.tsx | 300 +++++------------- .../TServicoTipo/TServicoTipoIndex.tsx} | 37 +-- .../TServicoTipo/TServicoTipoSelect.tsx | 132 ++++---- .../TServicoTipo/TServicoTipoTable.tsx | 24 ++ .../TTBReconhecimentoTipoForm.tsx | 43 +-- .../TTBReconhecimentoTipoIndex.tsx | 22 +- .../TTBReconhecimentoTipoSelect.tsx | 7 +- .../CCaixaServico/CCaixaServicoIndexData.ts | 4 +- .../data/GEmolumento/GEmolumentoIndexData.ts | 14 +- .../GEmolumentoItemValorData.ts | 3 +- .../GMarcacaoTipo/GMarcacaoTipoIndexData.ts | 5 +- .../data/GUsuario/GUsuarioIndexData.ts | 8 +- .../TServicoEtiquetaReadData.ts | 2 +- .../TServicoEtiquetaRemoveData.ts | 2 +- .../TServicoEtiquetaSaveData.ts | 10 +- .../data/TServicoTipo/TServicoTipoEditData.ts | 2 +- .../TServicoTipo/TServicoTipoIndexData.ts | 19 +- .../TServicoTipo/TServicoTipoRemoveData.ts | 2 +- .../data/TServicoTipo/TServicoTipoSaveData.ts | 2 +- .../TTBReconhecimentoTipoIndexData.ts | 21 +- .../TTBReconhecimentoTipoIndexData_old.ts | 15 + .../CCaixaServico}/CCaixaServicoInterface.ts | 0 .../CCaixaServicoReadInterface.ts | 0 .../GEmolumento/useGEmolumentoReadHook.ts | 24 ++ .../useGEmolumentoItemReadHook.ts | 12 +- .../useGMarcacaoTipoReadHook.ts | 9 +- .../hooks/GUsuario/useGUsuarioIndexHook.ts | 2 +- .../useTServicoEtiquetaReadHook.ts | 7 +- .../useTServicoEtiquetaRemoveHook.ts | 4 +- .../useTServicoEtiquetaSaveHook.ts | 5 +- .../TServicoTipo/useTServicoTipoEditHook.ts | 2 +- .../TServicoTipo/useTServicoTipoFormHook.ts | 26 ++ .../TServicoTipo/useTServicoTipoReadHook.ts | 4 +- .../TServicoTipo/useTServicoTipoRemoveHook.ts | 2 +- .../TServicoTipo/useTServicoTipoSaveHook.ts | 2 +- .../useTTBReconhecimentoTipoReadHook.ts | 39 ++- .../useCCaixaServicoReadHook.ts | 9 +- .../GEmolumento/GEmolumentoInterface.ts | 37 +-- .../GEmolumento}/GEmolumentoReadInterface.ts | 2 +- .../GEmolumentoItemIndexInterface.ts | 1 + .../GEmolumentoItemInterface.ts | 65 ++-- .../GEmolumentoItemReadInterface.ts | 0 .../GGramatica/GGramaticaFormInterface.ts | 2 +- .../GMarcacaoTipo}/GMarcacaoTipoInterface.ts | 0 .../GMarcacaoTipoReadInterface.ts | 0 .../GUsuario/GUsuarioIndexInterface.ts | 2 +- .../interfaces/TPessoa/TPessoaInterface.ts | 1 + .../TServicoEtiquetaInterface.ts | 0 .../TServicoEtiquetaServicoIdReadInterface.ts | 0 .../TServicoTipo/TServicoTipoFormInterface.ts | 8 + .../TServicoTipo/TServicoTipoIndexInteface.ts | 2 +- .../TServicoTipo/TServicoTipoInterface.ts | 47 +++ .../TServicoTipoSelectInterface.ts | 13 +- .../TServicoTipoTableInterface.ts | 7 + .../TTBReconhecimentoTipoInterface.ts | 9 +- .../TTBReconhecimentoTipoReadInterface.ts | 1 + .../GEmolumentoItem/GEmolumentoItemSchema.ts | 4 +- .../TServicoEtiquetaSchema.ts | 0 .../TServicoTipo/TServicoTipoSchema.ts | 57 ++++ .../TTBReconhecimentoTipoSchema.ts | 6 +- .../CCaixaServicoIndexService.ts | 4 +- .../GEmolumento/GEmolumentoIndexService.ts | 13 +- .../GEmolumentoItemValorService.ts | 4 +- .../GMarcacaoTipoIndexService.ts | 4 +- .../services/GUsuario/GUsuarioIndex.ts | 2 +- .../TServicoEtiquetaSaveService.ts | 4 +- .../TServicoEtiquetaServicoIdService.ts | 4 +- .../TServicoTipo/TServicoTipoEditService.ts | 2 +- .../TServicoTipo/TServicoTipoIndexService.ts | 2 +- .../TServicoTipo/TServicoTipoRemoveService.ts | 2 +- .../TServicoTipo/TServicoTipoSaveService.ts | 2 +- .../TTBReconhecimentoTipoIndexService.ts | 6 +- .../HandleSelectTServicoTipoAction.ts | 1 + .../TServicoItemPedidoList.tsx | 281 ++++++++-------- .../TServicoItemPedidoResumo.tsx | 126 ++++---- .../TServicoPedido/TServicoPedidoColumns.tsx | 4 +- .../TServicoPedido/TServicoPedidoDetails.tsx | 40 ++- .../TServicoPedidoDetailsPagamento.tsx | 4 +- .../TServicoPedido/TServicoPedidoForm.tsx | 14 +- .../TServicoPedido/TServicoPedidoIndex.tsx | 11 - .../useTServicoItemPedidoCalculoHook.ts | 64 ++-- .../useTServicoItemPedidoLocalAddHook.ts | 38 ++- .../useTServicoPedidoFormHook.ts | 3 +- .../TServicoItemPedidoSubviewInterface.ts | 2 +- .../TServicoItemPedidoAddInterface.ts | 2 +- ...rvicoItemPedidoCalculoResponseInterface.ts | 1 + .../TServicoItemPedidoIntefarce.ts | 12 +- .../TServicoPedidoFormInterface.ts | 4 - .../TServicoPedido/TServicoPedidoInterface.ts | 9 +- src/shared/actions/CPF/FormatCPF.ts | 2 +- src/shared/actions/money/FormatMoney.ts | 11 +- src/shared/components/dataTable/DataTable.tsx | 52 ++- .../FingerTech/useFingerTechCaptureHook.ts | 6 +- .../FingerTech/useFingerTechEnrollHook.ts | 6 +- .../FingerTech/useFingerTechMatchHook.ts | 6 +- 130 files changed, 1124 insertions(+), 1627 deletions(-) delete mode 100644 src/app/(protected)/(administrativo)/(g_usuario)/usuarios/[id]/detalhes/page.tsx delete mode 100644 src/app/(protected)/(administrativo)/(g_usuario)/usuarios/formulario/page.tsx delete mode 100644 src/app/(protected)/(administrativo)/(g_usuario)/usuarios/page.tsx create mode 100644 src/app/(protected)/(administrativo)/administrativo/tipos-servicos/page.tsx delete mode 100644 src/app/(protected)/(cadastros)/cadastros/_components/t_servico_tipo/TServicoTipoTable.tsx delete mode 100644 src/app/(protected)/(cadastros)/cadastros/_data/GEmolumento/GEmolumentoIndexData.ts delete mode 100644 src/app/(protected)/(cadastros)/cadastros/_data/TTBReconhecimentoTipo/TTBReconhecimentoTipoIndexData.ts delete mode 100644 src/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento/useGEmolumentoReadHook.ts delete mode 100644 src/app/(protected)/(cadastros)/cadastros/_hooks/t_tb_reconhecimentotipo/useTTBReconhecimentoTipoReadHook.ts delete mode 100644 src/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoInterface.ts delete mode 100644 src/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoItemInterface.ts delete mode 100644 src/app/(protected)/(cadastros)/cadastros/_interfaces/TServicoTipoInterface.ts delete mode 100644 src/app/(protected)/(cadastros)/cadastros/_interfaces/TTBReconhecimentoTipoInterface.ts delete mode 100644 src/app/(protected)/(cadastros)/cadastros/_schemas/TServicoTipoSchema.ts delete mode 100644 src/app/(protected)/(cadastros)/cadastros/_services/g_emolumento/GEmolumentoIndexService.ts create mode 100644 src/packages/administrativo/components/TServicoTipo/TServicoTipoColumns.tsx rename src/{app/(protected)/(cadastros)/cadastros/_components/t_servico_tipo => packages/administrativo/components/TServicoTipo}/TServicoTipoForm.tsx (75%) rename src/{app/(protected)/(cadastros)/cadastros/(t_servico_tipo)/servicos-tipo/page.tsx => packages/administrativo/components/TServicoTipo/TServicoTipoIndex.tsx} (82%) create mode 100644 src/packages/administrativo/components/TServicoTipo/TServicoTipoTable.tsx rename src/{app/(protected)/(cadastros)/cadastros/_data => packages/administrativo/data}/CCaixaServico/CCaixaServicoIndexData.ts (92%) rename src/{app/(protected)/(cadastros)/cadastros/_data => packages/administrativo/data}/GEmolumentoItem/GEmolumentoItemValorData.ts (92%) rename src/{app/(protected)/(cadastros)/cadastros/_data => packages/administrativo/data}/GMarcacaoTipo/GMarcacaoTipoIndexData.ts (93%) rename src/{app/(protected)/(cadastros)/cadastros/_data => packages/administrativo/data}/TServicoEtiqueta/TServicoEtiquetaReadData.ts (92%) rename src/{app/(protected)/(cadastros)/cadastros/_data => packages/administrativo/data}/TServicoEtiqueta/TServicoEtiquetaRemoveData.ts (90%) rename src/{app/(protected)/(cadastros)/cadastros/_data => packages/administrativo/data}/TServicoEtiqueta/TServicoEtiquetaSaveData.ts (89%) create mode 100644 src/packages/administrativo/data/TTBReconhecimentoTipo/TTBReconhecimentoTipoIndexData_old.ts rename src/{app/(protected)/(cadastros)/cadastros/_interfaces => packages/administrativo/hooks/CCaixaServico}/CCaixaServicoInterface.ts (100%) rename src/{app/(protected)/(cadastros)/cadastros/_interfaces => packages/administrativo/hooks/CCaixaServico}/CCaixaServicoReadInterface.ts (100%) create mode 100644 src/packages/administrativo/hooks/GEmolumento/useGEmolumentoReadHook.ts rename src/{app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento_item => packages/administrativo/hooks/GEmolumentoItem}/useGEmolumentoItemReadHook.ts (69%) rename src/{app/(protected)/(cadastros)/cadastros/_hooks/g_marcacao_tipo => packages/administrativo/hooks/GMarcacaoTipo}/useGMarcacaoTipoReadHook.ts (83%) rename src/{app/(protected)/(cadastros)/cadastros/_hooks/t_servico_etiqueta => packages/administrativo/hooks/TServicoEtiqueta}/useTServicoEtiquetaReadHook.ts (88%) rename src/{app/(protected)/(cadastros)/cadastros/_hooks/t_servico_etiqueta => packages/administrativo/hooks/TServicoEtiqueta}/useTServicoEtiquetaRemoveHook.ts (81%) rename src/{app/(protected)/(cadastros)/cadastros/_hooks/t_servico_etiqueta => packages/administrativo/hooks/TServicoEtiqueta}/useTServicoEtiquetaSaveHook.ts (85%) create mode 100644 src/packages/administrativo/hooks/TServicoTipo/useTServicoTipoFormHook.ts rename src/{app/(protected)/(cadastros)/cadastros/_hooks/c_caixa_servico => packages/administrativo/interfaces/CCaixaServico}/useCCaixaServicoReadHook.ts (84%) rename src/{app/(protected)/(cadastros)/cadastros/_interfaces => packages/administrativo/interfaces/GEmolumento}/GEmolumentoReadInterface.ts (64%) rename src/{app/(protected)/(cadastros)/cadastros/_interfaces => packages/administrativo/interfaces/GEmolumentoItem}/GEmolumentoItemReadInterface.ts (100%) rename src/{app/(protected)/(cadastros)/cadastros/_interfaces => packages/administrativo/interfaces/GMarcacaoTipo}/GMarcacaoTipoInterface.ts (100%) rename src/{app/(protected)/(cadastros)/cadastros/_interfaces => packages/administrativo/interfaces/GMarcacaoTipo}/GMarcacaoTipoReadInterface.ts (100%) rename src/{app/(protected)/(cadastros)/cadastros/_interfaces => packages/administrativo/interfaces/TServicoEtiqueta}/TServicoEtiquetaInterface.ts (100%) rename src/{app/(protected)/(cadastros)/cadastros/_interfaces => packages/administrativo/interfaces/TServicoEtiqueta}/TServicoEtiquetaServicoIdReadInterface.ts (100%) create mode 100644 src/packages/administrativo/interfaces/TServicoTipo/TServicoTipoFormInterface.ts create mode 100644 src/packages/administrativo/interfaces/TServicoTipo/TServicoTipoInterface.ts create mode 100644 src/packages/administrativo/interfaces/TServicoTipo/TServicoTipoTableInterface.ts rename src/{app/(protected)/(cadastros)/cadastros/_interfaces => packages/administrativo/interfaces/TTBREconhecimentoTipo}/TTBReconhecimentoTipoReadInterface.ts (75%) rename src/{app/(protected)/(cadastros)/cadastros/_schemas => packages/administrativo/schemas/TServicoEtiqueta}/TServicoEtiquetaSchema.ts (100%) create mode 100644 src/packages/administrativo/schemas/TServicoTipo/TServicoTipoSchema.ts rename src/{app/(protected)/(cadastros)/cadastros/_services/c_caixa_servico => packages/administrativo/services/CCaixaServico}/CCaixaServicoIndexService.ts (82%) rename src/{app/(protected)/(cadastros)/cadastros/_services/g_emolumento_item => packages/administrativo/services/GEmolumentoItem}/GEmolumentoItemValorService.ts (81%) rename src/{app/(protected)/(cadastros)/cadastros/_services/g_marcacao_tipo => packages/administrativo/services/GMarcacaoTipo}/GMarcacaoTipoIndexService.ts (81%) rename src/{app/(protected)/(cadastros)/cadastros/_services/t_servico_etiqueta => packages/administrativo/services/TServicoEtiqueta}/TServicoEtiquetaSaveService.ts (80%) rename src/{app/(protected)/(cadastros)/cadastros/_services/t_servico_etiqueta => packages/administrativo/services/TServicoEtiqueta}/TServicoEtiquetaServicoIdService.ts (80%) rename src/{app/(protected)/(cadastros)/cadastros/_services/t_tb_reconhecimentotipo => packages/administrativo/services/TTBReconhecimentoTipo}/TTBReconhecimentoTipoIndexService.ts (70%) diff --git a/package-lock.json b/package-lock.json index 901bbba..24d39c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "clsx": "^2.1.1", "cmdk": "^1.1.1", "cookies-next": "^6.1.0", - "date-fns": "^4.1.0", + "date-fns": "^3.6.0", "faker-js": "^1.0.0", "framer-motion": "^12.23.24", "input-otp": "^1.4.2", @@ -4459,9 +4459,9 @@ } }, "node_modules/date-fns": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", - "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", "license": "MIT", "funding": { "type": "github", diff --git a/package.json b/package.json index b918299..fac3244 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "clsx": "^2.1.1", "cmdk": "^1.1.1", "cookies-next": "^6.1.0", - "date-fns": "^4.1.0", + "date-fns": "^3.6.0", "faker-js": "^1.0.0", "framer-motion": "^12.23.24", "input-otp": "^1.4.2", diff --git a/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/[id]/detalhes/page.tsx b/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/[id]/detalhes/page.tsx deleted file mode 100644 index c1353b7..0000000 --- a/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/[id]/detalhes/page.tsx +++ /dev/null @@ -1,50 +0,0 @@ -'use client'; - -import { useEffect } from 'react'; -import { useParams } from 'next/navigation'; - -import { Card, CardContent } from '@/components/ui/card'; -import { useGUsuarioReadHooks } from '@/packages/administrativo/hooks/GUsuario/useGUsuarioReadHooks'; -import Usuario from '@/packages/administrativo/interfaces/GUsuario/GUsuarioInterface'; -import Loading from '@/shared/components/loading/loading'; - -export default function UsuarioDetalhes() { - const params = useParams(); - - const { usuario, fetchUsuario } = useGUsuarioReadHooks(); - - useEffect(() => { - if (params.id) { - fetchUsuario({ usuario_id: Number(params.id) } as Usuario); - } - }, []); - - if (!usuario) return ; - - return ( -
- - -
-
-
Nome
-
{usuario?.nome_completo}
-
-
-
CPF
-
{usuario?.cpf}
-
-
-
Função
-
{usuario?.funcao}
-
-
-
Email
-
{usuario?.email}
-
-
-
-
-
- ); -} diff --git a/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/formulario/page.tsx b/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/formulario/page.tsx deleted file mode 100644 index 2721d7a..0000000 --- a/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/formulario/page.tsx +++ /dev/null @@ -1,126 +0,0 @@ -'use client'; - -import { zodResolver } from '@hookform/resolvers/zod'; -import { useForm } from 'react-hook-form'; -import { z } from 'zod'; - - -import { Button } from '@/components/ui/button'; -import { Card, CardContent } from '@/components/ui/card'; -import { - Form, - FormControl, - FormField, - FormItem, - FormLabel, - FormMessage, -} from '@/components/ui/form'; -import { Input } from '@/components/ui/input'; - -import { useGUsuarioSaveHook } from '../../../../../../packages/administrativo/hooks/GUsuario/useGUsuarioSaveHook'; -import { GUsuarioSchema } from '../../../../../../packages/administrativo/schemas/GUsuario/GUsuarioSchema'; - -type FormValues = z.infer; - -export default function UsuarioFormularioPage() { - const { usuario, saveUsuario } = useGUsuarioSaveHook(); - - const form = useForm({ - resolver: zodResolver(GUsuarioSchema), - defaultValues: { - login: '', - nome_completo: '', - funcao: '', - email: '', - cpf: '', - }, - }); - - async function onSubmit(values: FormValues) { - saveUsuario(values); - } - - return ( -
- - -
- - ( - - Login - - - - - - )} - /> - - ( - - Nome Completo - - - - - - )} - /> - - ( - - Função - - - - - - )} - /> - - ( - - Email - - - - - - )} - /> - - ( - - Cpf - - - - - - )} - /> - - - - -
-
-
- ); -} diff --git a/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/page.tsx b/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/page.tsx deleted file mode 100644 index 07463dd..0000000 --- a/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/page.tsx +++ /dev/null @@ -1,85 +0,0 @@ -'use client'; - -import Link from 'next/link'; -import { useEffect } from 'react'; - -import { Button } from '@/components/ui/button'; -import { Card, CardContent } from '@/components/ui/card'; -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from '@/components/ui/table'; -import Loading from '@/shared/components/loading/loading'; - -import { useGUsuarioIndexHook } from '../../../../../packages/administrativo/hooks/GUsuario/useGUsuarioIndexHook'; -import Usuario from '../../../../../packages/administrativo/interfaces/GUsuario/GUsuarioInterface'; - - - - -export default function UsuarioPage() { - const { usuarios, fetchUsuarios } = useGUsuarioIndexHook(); - - useEffect(() => { - fetchUsuarios(); - }, []); - - if (!usuarios) return ; - - return ( -
- - -
-
Usuarios
-
- -
-
- - - - # - Situação - CPF - Login / Sigla / Nome - Função - - - - - - {usuarios.map((usuario: Usuario) => ( - - {usuario.usuario_id} - {usuario.situacao} - {usuario.cpf} - -
- {usuario.login} - {usuario.sigla} -
-
{usuario.nome_completo}
-
- -
{usuario.funcao}
-
- - - -
- ))} -
-
-
-
-
- ); -} diff --git a/src/app/(protected)/(administrativo)/administrativo/tipos-servicos/page.tsx b/src/app/(protected)/(administrativo)/administrativo/tipos-servicos/page.tsx new file mode 100644 index 0000000..6caf1cd --- /dev/null +++ b/src/app/(protected)/(administrativo)/administrativo/tipos-servicos/page.tsx @@ -0,0 +1,9 @@ +import TServicoTipoIndex from "@/packages/administrativo/components/TServicoTipo/TServicoTipoIndex"; + +export default function TServicoTipoPage() { + + return ( + + ); + +} \ No newline at end of file diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/t_servico_tipo/TServicoTipoTable.tsx b/src/app/(protected)/(cadastros)/cadastros/_components/t_servico_tipo/TServicoTipoTable.tsx deleted file mode 100644 index d0c6e0a..0000000 --- a/src/app/(protected)/(cadastros)/cadastros/_components/t_servico_tipo/TServicoTipoTable.tsx +++ /dev/null @@ -1,101 +0,0 @@ -'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 TServicoTipoInterface from '../../_interfaces/TServicoTipoInterface'; // Import alterado - -// Tipagem das props do componente da tabela -interface TServicoTipoTableProps { - // Nome da interface alterado - data: TServicoTipoInterface[]; // lista de tipos de serviço - onEdit: (item: TServicoTipoInterface, isEditingFormStatus: boolean) => void; // callback para edição - onDelete: (item: TServicoTipoInterface, isEditingFormStatus: boolean) => void; // callback para exclusão -} - -/** - * Componente principal da tabela de Tipos de Serviço - */ -export default function TServicoTipoTable({ data, onEdit, onDelete }: TServicoTipoTableProps) { - return ( - - {/* Cabeçalho da tabela */} - - - # - {/* As colunas IBGE e UF foram removidas */} - Descrição - - - - - {/* Corpo da tabela */} - - {data.map((item) => ( - // Assumindo que o ID do Tipo de Serviço é 'servico_tipo_id' - - {/* ID do Tipo de Serviço */} - {item.servico_tipo_id} - - {/* Nome/descrição do Tipo de Serviço (descricao) */} - {item.descricao} - {/* As células de IBGE e UF foram removidas */} - - {/* Ações (menu dropdown) */} - - - {/* Botão de disparo do menu */} - - - - - {/* Conteúdo do menu */} - - - {/* Opção editar */} - onEdit(item, true)} - > - - Editar - - - - - {/* Opção remover */} - onDelete(item, true)} - > - - Remover - - - - - - - ))} - -
- ); -} diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GEmolumento/GEmolumentoIndexData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GEmolumento/GEmolumentoIndexData.ts deleted file mode 100644 index ceb79ab..0000000 --- a/src/app/(protected)/(cadastros)/cadastros/_data/GEmolumento/GEmolumentoIndexData.ts +++ /dev/null @@ -1,26 +0,0 @@ -// Importa o utilitário responsável por tratar erros de forma padronizada no cliente -import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; - -// Importa a classe de serviço que gerencia requisições HTTP para a API -import API from '@/shared/services/api/Api'; - -// Importa o enum que define os métodos HTTP disponíveis (GET, POST, PUT, DELETE, etc.) -import { Methods } from '@/shared/services/api/enums/ApiMethodEnum'; - -import { GEmolumentoReadInterface } from '../../_interfaces/GEmolumentoReadInterface'; - -// Função assíncrona responsável por executar a requisição para listar os tipos de marcação -async function executeGEmolumentoIndexData(data: GEmolumentoReadInterface) { - - // Cria uma nova instância da classe API para enviar a requisição - const api = new API(); - - // Envia uma requisição GET para o endpoint 'administrativo/g_marcacao_tipo/' - return await api.send({ - method: Methods.GET, - endpoint: `administrativo/g_emolumento/sistema/${data.sistema_id}?${new URLSearchParams(data.urlParams).toString()}`, - }); -} - -// Exporta a função encapsulada pelo handler de erro, garantindo tratamento uniforme em caso de falhas -export const GEmolumentoIndexData = withClientErrorHandler(executeGEmolumentoIndexData); diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/TTBReconhecimentoTipo/TTBReconhecimentoTipoIndexData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/TTBReconhecimentoTipo/TTBReconhecimentoTipoIndexData.ts deleted file mode 100644 index 659c993..0000000 --- a/src/app/(protected)/(cadastros)/cadastros/_data/TTBReconhecimentoTipo/TTBReconhecimentoTipoIndexData.ts +++ /dev/null @@ -1,29 +0,0 @@ -// Importa o utilitário responsável por tratar erros de forma padronizada no cliente -import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; - -// Importa a classe de serviço que gerencia requisições HTTP para a API -import API from '@/shared/services/api/Api'; - -// Importa o enum que define os métodos HTTP disponíveis (GET, POST, PUT, DELETE, etc.) -import { Methods } from '@/shared/services/api/enums/ApiMethodEnum'; -import { TTBReconhecimentoTipoReadInterface } from '../../_interfaces/TTBReconhecimentoTipoReadInterface'; - -// Função assíncrona responsável por executar a requisição para listar os tipos de marcação -async function executeTTBReconhecimentoTipoIndexData(data: TTBReconhecimentoTipoReadInterface) { - // Cria uma nova instância da classe API para enviar a requisição - const api = new API(); - - // Concatena o endpoint com a query string (caso existam parâmetros) - const endpoint = `administrativo/t_tb_reconhecimentotipo/`; - - // Envia uma requisição GET para o endpoint 'administrativo/g_marcacao_tipo/' - return await api.send({ - method: Methods.GET, - endpoint: endpoint, - }); -} - -// Exporta a função encapsulada pelo handler de erro, garantindo tratamento uniforme em caso de falhas -export const TTBReconhecimentoTipoIndexData = withClientErrorHandler( - executeTTBReconhecimentoTipoIndexData, -); diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento/useGEmolumentoReadHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento/useGEmolumentoReadHook.ts deleted file mode 100644 index 924bf9c..0000000 --- a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento/useGEmolumentoReadHook.ts +++ /dev/null @@ -1,37 +0,0 @@ -// Importa o hook responsável por gerenciar e exibir respostas globais (sucesso, erro, etc.) -import { useMemo, useState } from 'react'; - -import { useResponse } from '@/shared/components/response/ResponseContext'; - -// Importa hooks do React para gerenciamento de estado e memorização de valores - -// Importa a interface que define a estrutura dos dados de "GEmolumento" -import { GEmolumentoInterface } from '../../_interfaces/GEmolumentoInterface'; -import { GEmolumentoReadInterface } from '../../_interfaces/GEmolumentoReadInterface'; - -// Importa o serviço responsável por buscar os dados de "GEmolumento" na API -import { GEmolumentoIndexService } from '../../_services/g_emolumento/GEmolumentoIndexService'; - -// Hook personalizado para leitura (consulta) dos emolumentos -export const useGEmolumentoReadHook = () => { - // Obtém a função que atualiza a resposta global do sistema - const { setResponse } = useResponse(); - - // Define o estado local que armazenará a lista de emolumentos - const [gEmolumento, setGEmolumento] = useState([]); - - // Função responsável por buscar os dados da API e atualizar o estado - const fetchGEmolumento = async (data: GEmolumentoReadInterface) => { - // Executa o serviço que faz a requisição à API - const response = await GEmolumentoIndexService(data); - - // Atualiza o estado local com os dados retornados - setGEmolumento(response.data); - - // Atualiza o contexto global de resposta (ex: para exibir alertas ou mensagens) - setResponse(response); - }; - - // Retorna os dados e a função de busca, memorizando o valor para evitar recriações desnecessárias - return useMemo(() => ({ gEmolumento, fetchGEmolumento }), [gEmolumento, fetchGEmolumento]); -}; diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/t_tb_reconhecimentotipo/useTTBReconhecimentoTipoReadHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/t_tb_reconhecimentotipo/useTTBReconhecimentoTipoReadHook.ts deleted file mode 100644 index c0f2697..0000000 --- a/src/app/(protected)/(cadastros)/cadastros/_hooks/t_tb_reconhecimentotipo/useTTBReconhecimentoTipoReadHook.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Importa o hook responsável por gerenciar e exibir respostas globais (sucesso, erro, etc.) -import { useResponse } from '@/shared/components/response/ResponseContext'; - -// Importa hooks do React para gerenciamento de estado e memorização de valores -import { useMemo, useState } from 'react'; - -// Importa a interface que define a estrutura dos dados de "TTBReconhecimentoTipo" -import { TTBReconhecimentoTipoReadInterface } from '../../_interfaces/TTBReconhecimentoTipoReadInterface'; -import { TTBReconhecimentoTipoInterface } from '../../_interfaces/TTBReconhecimentoTipoInterface'; - -// Importa o serviço responsável por buscar os dados de "TTBReconhecimentoTipo" na API -import { TTBReconhecimentoTipoIndexService } from '../../_services/t_tb_reconhecimentotipo/TTBReconhecimentoTipoIndexService'; - -// Hook personalizado para leitura (consulta) dos tipos de marcação -export const useTTBReconhecimentoTipoReadHook = () => { - // Obtém a função que atualiza a resposta global do sistema - const { setResponse } = useResponse(); - - // Define o estado local que armazenará a lista de tipos de marcação - const [tTBReconhecimentoTipo, setTTBReconhecimentoTipo] = useState< - TTBReconhecimentoTipoInterface[] - >([]); - - // Função responsável por buscar os dados da API e atualizar o estado - const fetchTTBReconhecimentoTipo = async (data: TTBReconhecimentoTipoReadInterface) => { - // Executa o serviço que faz a requisição à API - const response = await TTBReconhecimentoTipoIndexService(data); - - // Atualiza o estado local com os dados retornados - setTTBReconhecimentoTipo(response.data); - - // Atualiza o contexto global de resposta (ex: para exibir alertas ou mensagens) - setResponse(response); - }; - - // Retorna os dados e a função de busca, memorizando o valor para evitar recriações desnecessárias - return useMemo( - () => ({ tTBReconhecimentoTipo, fetchTTBReconhecimentoTipo }), - [tTBReconhecimentoTipo, fetchTTBReconhecimentoTipo], - ); -}; diff --git a/src/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoInterface.ts b/src/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoInterface.ts deleted file mode 100644 index 64c2518..0000000 --- a/src/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoInterface.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Interface que representa a tabela G_EMOLUMENTO -export interface GEmolumentoInterface { - emolumento_id?: number; // NUMERIC(10,2) - Chave primária - descricao?: string; // VARCHAR(260) - tipo?: string; // VARCHAR(1) - sistema_id?: number; // NUMERIC(10,2) - selo_grupo_id?: number; // NUMERIC(10,2) - reg_averb?: string; // VARCHAR(1) - pre_definido?: string; // VARCHAR(1) - situacao?: string; // VARCHAR(1) - situacao_ri?: string; // VARCHAR(1) - com_reducao?: string; // VARCHAR(1) - motivo_reducao?: string; // VARCHAR(120) - valor_maximo_certidao?: number; // NUMERIC(14,3) - tipo_objetivo?: string; // VARCHAR(3) - modelo_tag?: string; // VARCHAR(3) - codigo_nota_id?: number; // NUMERIC(10,2) - convenio_codhab?: string; // VARCHAR(1) - item_df?: string; // VARCHAR(10) -} diff --git a/src/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoItemInterface.ts b/src/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoItemInterface.ts deleted file mode 100644 index 11b9857..0000000 --- a/src/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoItemInterface.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Interface que representa a tabela G_EMOLUMENTO_ITEM (inferido) -export interface GEmolumentoItemInterface { - valor_emolumento?: number; // NUMERIC(14,3) - emolumento_item_id: number; // NUMERIC(10,2) NOT NULL - Chave primária (assumida) - emolumento_id?: number; // NUMERIC(10,2) - valor_inicio?: number; // NUMERIC(14,3) - valor_fim?: number; // NUMERIC(14,3) - valor_taxa_judiciaria?: number; // NUMERIC(14,3) - emolumento_periodo_id?: number; // NUMERIC(10,2) - codigo?: number; // NUMERIC(10,2) - pagina_extra?: number; // NUMERIC(10,2) - valor_pagina_extra?: number; // NUMERIC(14,3) - valor_outra_taxa1?: number; // NUMERIC(14,3) - codigo_selo?: string; // VARCHAR(30) - valor_fundo_ri?: number; // NUMERIC(14,3) - codigo_tabela?: string; // VARCHAR(30) - selo_grupo_id?: number; // NUMERIC(10,2) - codigo_km?: string; // VARCHAR(30) - emolumento_acresce?: number; // NUMERIC(14,3) - taxa_acresce?: number; // NUMERIC(14,3) - funcivil_acresce?: number; // NUMERIC(14,3) - valor_fracao?: number; // NUMERIC(14,3) - valor_por_excedente_emol?: number; // NUMERIC(14,3) - valor_por_excedente_tj?: number; // NUMERIC(14,3) - valor_por_excedente_fundo?: number; // NUMERIC(14,3) - valor_limite_excedente_emol?: number; // NUMERIC(14,3) - valor_limite_excedente_tj?: number; // NUMERIC(14,3) - valor_limite_excedente_fundo?: number; // NUMERIC(14,3) - fundo_selo?: number; // NUMERIC(14,3) - distribuicao?: number; // NUMERIC(14,3) - vrc_ext?: number; // NUMERIC(10,2) - Renomeado de VRCEXT para vrc_ext (convenção) -} diff --git a/src/app/(protected)/(cadastros)/cadastros/_interfaces/TServicoTipoInterface.ts b/src/app/(protected)/(cadastros)/cadastros/_interfaces/TServicoTipoInterface.ts deleted file mode 100644 index a7d793c..0000000 --- a/src/app/(protected)/(cadastros)/cadastros/_interfaces/TServicoTipoInterface.ts +++ /dev/null @@ -1,28 +0,0 @@ -export default interface TServicoTipoInterface { - servico_tipo_id?: number; // SERVICO_TIPO_ID NUMERIC(10,2) NOT NULL (PK) - descricao: string; // DESCRICAO VARCHAR(60) - valor?: number; // VALOR NUMERIC(14,3) - tipo_item?: string; - requer_autorizacao?: string; // REQUER_AUTORIZACAO VARCHAR(1) - requer_biometria?: string; // REQUER_BIOMETRIA VARCHAR(1) - tipo_pessoa?: string; // TIPO_PESSOA VARCHAR(1) - tb_reconhecimentotipo_id?: number; // TB_RECONHECIMENTOTIPO_ID NUMERIC(10,2) (FK) - requer_abonador?: string; // REQUER_ABONADOR VARCHAR(1) - situacao?: string; // SITUACAO VARCHAR(1) - requer_cpf?: string; // REQUER_CPF VARCHAR(1) - servico_padrao?: string; // SERVICO_PADRAO VARCHAR(1) - maximo_pessoa?: number; // MAXIMO_PESSOA NUMERIC(10,2) - alterar_valor?: string; // ALTERAR_VALOR VARCHAR(1) - servico_caixa_id?: number; // SERVICO_CAIXA_ID NUMERIC(10,2) - caixa_servico_id?: number; // LIBERAR_DESCONTO VARCHAR(1) - valor_fixo?: string; // VALOR_FIXO VARCHAR(1) - emolumento_id?: number; // EMOLUMENTO_ID NUMERIC(10,2) (FK) - emolumento_obrigatorio?: number; // EMOLUMENTO_OBRIGATORIO NUMERIC(10,2) (FK) - ato_praticado?: string; // ATO_PRATICADO VARCHAR(1) - selar?: string; // SELAR VARCHAR(1) - frenteverso?: string; // FRENTEVERSO VARCHAR(1) - etiqueta_unica?: string; // ETIQUETA_UNICA VARCHAR(1) - transferencia_veiculo?: string; // TRANSFERENCIA_VEICULO VARCHAR(1) - usar_a4?: string; // USAR_A4 VARCHAR(1) - averbacao?: string; // AVERBACAO VARCHAR(1) -} diff --git a/src/app/(protected)/(cadastros)/cadastros/_interfaces/TTBReconhecimentoTipoInterface.ts b/src/app/(protected)/(cadastros)/cadastros/_interfaces/TTBReconhecimentoTipoInterface.ts deleted file mode 100644 index bbf207c..0000000 --- a/src/app/(protected)/(cadastros)/cadastros/_interfaces/TTBReconhecimentoTipoInterface.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Interface que representa a tabela T_TB_RECONHECIMENTOTIPO -export interface TTbReconhecimentoTipoInterface { - tb_reconhecimentotipo_id: number; // NUMERIC(10,2) NOT NULL - Chave primária - descricao?: string; // VARCHAR(30) - situacao?: string; // VARCHAR(1) -} diff --git a/src/app/(protected)/(cadastros)/cadastros/_schemas/TServicoTipoSchema.ts b/src/app/(protected)/(cadastros)/cadastros/_schemas/TServicoTipoSchema.ts deleted file mode 100644 index 8fb4cb2..0000000 --- a/src/app/(protected)/(cadastros)/cadastros/_schemas/TServicoTipoSchema.ts +++ /dev/null @@ -1,78 +0,0 @@ -import z from 'zod'; - -/** - * Tipos utilitários para campos simples - */ -const SN = z.enum(['S', 'N']).default('N'); // Campos do tipo Sim/Não -const AI = z.enum(['A', 'I']).default('A'); // Situação Ativo/Inativo -const OneCharString = z.string().max(1, 'Deve ter no máximo 1 caractere').optional(); -const RequiredString = z.string().min(1, 'O campo é obrigatório'); -const OptionalNumber = z.number().optional(); -const RequiredNumber = z.number(); - -/** - * Schema principal baseado na DDL e adaptado ao formulário React - */ -export const TServicoTipoSchema = z.object({ - // Identificador - servico_tipo_id: RequiredNumber.describe('ID do Tipo de Serviço').optional(), - - // Campos principais - descricao: z.string().max(60, 'A descrição deve ter no máximo 60 caracteres').optional(), - categoria: z.string().optional(), - - // Controle de flags (S/N) - frenteverso: SN.optional(), - averbacao: SN.optional(), - transferencia_veiculo: SN.optional(), - usar_a4: SN.optional(), - etiqueta_unica: SN.optional(), - selar: SN.optional(), - servico_padrao: SN.optional(), - // lancar_taxa: SN.optional(), - // lancar_fundesp: SN.optional(), - // liberar_desconto: SN.optional(), - // fundesp_automatica: SN.optional(), - // lancar_valor_documento: SN.optional(), - valor_fixo: SN.optional(), - ato_praticado: SN.optional(), - // apresentante_selo: SN.optional(), - // renovacao_cartao: SN.optional(), - - // Situação - situacao: AI, - - // Campos numéricos - valor: OptionalNumber, - maximo_pessoa: OptionalNumber, - servico_caixa_id: OptionalNumber, - emolumento_id: z.number().nullable(), - emolumento_obrigatorio: z.number().nullable(), - - // Relacionamentos e permissões - tipo_item: OneCharString, - requer_autorizacao: OneCharString, - requer_biometria: OneCharString, - tipo_pessoa: OneCharString, - tb_reconhecimentotipo_id: OptionalNumber, - // tipo_permissao_cpf: OneCharString, - requer_abonador: OneCharString, - // requer_representante: OneCharString, - requer_cpf: OneCharString, - // alterar_valor: OneCharString, - // pagina_acrescida: OneCharString, - - // Campos auxiliares usados apenas no formulário (não persistidos) - valor_emolumento: z.number().optional(), - valor_taxa_judiciaria: z.number().optional(), - fundesp_valor: z.number().optional(), - valor_total: z.number().optional(), - etiquetas_carimbos: z.any().optional(), - emolumento: z.any().optional(), - emolumento_auxiliar: z.any().optional(), -}); - -/** - * Tipo inferido do schema — usado diretamente no useForm - */ -export type TServicoTipoFormValues = z.infer; diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_emolumento/GEmolumentoIndexService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_emolumento/GEmolumentoIndexService.ts deleted file mode 100644 index 8d90167..0000000 --- a/src/app/(protected)/(cadastros)/cadastros/_services/g_emolumento/GEmolumentoIndexService.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Importa o utilitário responsável por lidar com erros de forma padronizada no cliente -import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler'; - -// Importa a função que realiza a requisição de listagem dos tipos de marcação -import { GEmolumentoIndexData } from '../../_data/GEmolumento/GEmolumentoIndexData'; -import { GEmolumentoReadInterface } from '../../_interfaces/GEmolumentoReadInterface'; - -// Função assíncrona responsável por executar o serviço de listagem de tipos de marcação -async function executeGEmolumentoIndexService(data: GEmolumentoReadInterface) { - - // Chama a função que realiza a requisição à API e aguarda a resposta - const response = await GEmolumentoIndexData(data); - - // Retorna a resposta obtida da requisição - return response; -} - -// Exporta o serviço encapsulado pelo handler de erro, garantindo tratamento uniforme em caso de falhas -export const GEmolumentoIndexService = withClientErrorHandler(executeGEmolumentoIndexService); diff --git a/src/components/app-sidebar.tsx b/src/components/app-sidebar.tsx index ff3e156..da03eea 100644 --- a/src/components/app-sidebar.tsx +++ b/src/components/app-sidebar.tsx @@ -171,8 +171,8 @@ const data = { url: '/administrativo/centrais/censec/naturezas-litigios', }, { - title: 'Serviços/Tipos', - url: '/cadastros/servicos-tipo/', + title: 'Tipos/Serviços', + url: '/administrativo/tipos-servicos', }, { title: 'Atos/Partes Tipos', diff --git a/src/packages/administrativo/components/CCaixaServico/CCaixaServicoSelect.tsx b/src/packages/administrativo/components/CCaixaServico/CCaixaServicoSelect.tsx index 3b03b5e..2d31f91 100644 --- a/src/packages/administrativo/components/CCaixaServico/CCaixaServicoSelect.tsx +++ b/src/packages/administrativo/components/CCaixaServico/CCaixaServicoSelect.tsx @@ -1,6 +1,5 @@ 'use client'; -import React from 'react'; import { Button } from '@/components/ui/button'; import { Command, @@ -13,10 +12,11 @@ import { import { FormControl } from '@/components/ui/form'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { cn } from '@/lib/utils'; -import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'; +import { CCaixaServicoReadInterface } from '@/packages/administrativo/hooks/CCaixaServico/CCaixaServicoReadInterface'; +import { useCCaixaServicoReadHook } from '@/packages/administrativo/interfaces/CCaixaServico/useCCaixaServicoReadHook'; import GetCapitalize from '@/shared/actions/text/GetCapitalize'; -import { useCCaixaServicoReadHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/c_caixa_servico/useCCaixaServicoReadHook'; -import { CCaixaServicoReadInterface } from '@/app/(protected)/(cadastros)/cadastros/_interfaces/CCaixaServicoReadInterface'; +import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'; +import React from 'react'; export default function CCaixaServicoSelect({ sistema_id, field }: any) { const cCaixaServicoReadParams: CCaixaServicoReadInterface = { sistema_id }; diff --git a/src/packages/administrativo/components/GCalculo/GCalculoForm.tsx b/src/packages/administrativo/components/GCalculo/GCalculoForm.tsx index 3ec75c0..83236cc 100644 --- a/src/packages/administrativo/components/GCalculo/GCalculoForm.tsx +++ b/src/packages/administrativo/components/GCalculo/GCalculoForm.tsx @@ -115,7 +115,10 @@ export default function GCalculoForm({ render={({ field }) => ( Emolumento - + )} diff --git a/src/packages/administrativo/components/GCalculo/GCalculoTable.tsx b/src/packages/administrativo/components/GCalculo/GCalculoTable.tsx index 0319162..94dae29 100644 --- a/src/packages/administrativo/components/GCalculo/GCalculoTable.tsx +++ b/src/packages/administrativo/components/GCalculo/GCalculoTable.tsx @@ -5,12 +5,12 @@ import { DataTable } from '@/shared/components/dataTable/DataTable'; import GCalculoColumns from './GCalculoColumns'; -/** - * Componente principal da tabela de Naturezas - */ export default function GCalculoTable({ data, onEdit, onDelete }: GCalculoTableInterface) { + const columns = GCalculoColumns(onEdit, onDelete); + return ( +
+ ); } diff --git a/src/packages/administrativo/components/GEmolumento/GEmolumentoSelect.tsx b/src/packages/administrativo/components/GEmolumento/GEmolumentoSelect.tsx index a5ebcd4..d3c107a 100644 --- a/src/packages/administrativo/components/GEmolumento/GEmolumentoSelect.tsx +++ b/src/packages/administrativo/components/GEmolumento/GEmolumentoSelect.tsx @@ -3,22 +3,6 @@ import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'; import React from 'react'; -import { useGEmolumentoReadHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento/useGEmolumentoReadHook'; -import { GEmolumentoReadInterface } from '@/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoReadInterface'; -import { Button } from '@/components/ui/button'; -import { - Command, - CommandEmpty, - CommandGroup, - CommandInput, - CommandItem, - CommandList, - -import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'; -import React from 'react'; - -import { useGEmolumentoReadHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento/useGEmolumentoReadHook'; -import { GEmolumentoReadInterface } from '@/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoReadInterface'; import { Button } from '@/components/ui/button'; import { Command, @@ -31,6 +15,8 @@ import { import { FormControl } from '@/components/ui/form'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { cn } from '@/lib/utils'; +import { useGEmolumentoReadHook } from '@/packages/administrativo/hooks/GEmolumento/useGEmolumentoReadHook'; +import { GEmolumentoReadInterface } from '@/packages/administrativo/interfaces/GEmolumento/GEmolumentoReadInterface'; import GetCapitalize from '@/shared/actions/text/GetCapitalize'; // Tipagem das props do componente @@ -142,7 +128,7 @@ export default function GEmolumentoSelect({ if (onSelectChange) onSelectChange({ key: Number(item.emolumento_id), - value: item.descricao, + value: item.descricao ?? '', }); // Fecha o popover @@ -168,28 +154,4 @@ export default function GEmolumentoSelect({ ); - // Fecha o popover - setOpen(false); -}} - > - {/* Ícone de seleção (check) */ } - < CheckIcon -className = { - cn( - 'mr-2 h-4 w-4', - String(field.value?.key ?? field.value) === String(item.emolumento_id) - ? 'opacity-100' - : 'opacity-0', - )} - /> -{/* Nome formatado do emolumento */ } -{ GetCapitalize(item.descricao) } - - ))} - - - - - - ); } diff --git a/src/packages/administrativo/components/GEmolumento/GEmolumentoServicoSelect.tsx b/src/packages/administrativo/components/GEmolumento/GEmolumentoServicoSelect.tsx index bf7a479..11f3347 100644 --- a/src/packages/administrativo/components/GEmolumento/GEmolumentoServicoSelect.tsx +++ b/src/packages/administrativo/components/GEmolumento/GEmolumentoServicoSelect.tsx @@ -3,8 +3,6 @@ import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'; import { useCallback, useEffect, useMemo, useState } from 'react'; -import { useGEmolumentoReadHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento/useGEmolumentoReadHook'; -import { GEmolumentoReadInterface } from '@/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoReadInterface'; import { Button } from '@/components/ui/button'; import { Command, @@ -17,6 +15,8 @@ import { import { FormControl } from '@/components/ui/form'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { cn } from '@/lib/utils'; +import { useGEmolumentoReadHook } from '@/packages/administrativo/hooks/GEmolumento/useGEmolumentoReadHook'; +import { GEmolumentoReadInterface } from '@/packages/administrativo/interfaces/GEmolumento/GEmolumentoReadInterface'; import GetCapitalize from '@/shared/actions/text/GetCapitalize'; // Tipagem das props do componente diff --git a/src/packages/administrativo/components/GEmolumentoItem/GEmolumentoItemForm.tsx b/src/packages/administrativo/components/GEmolumentoItem/GEmolumentoItemForm.tsx index f6bcb83..e2c2846 100644 --- a/src/packages/administrativo/components/GEmolumentoItem/GEmolumentoItemForm.tsx +++ b/src/packages/administrativo/components/GEmolumentoItem/GEmolumentoItemForm.tsx @@ -30,10 +30,6 @@ import LoadingButton from '@/shared/components/loadingButton/LoadingButton'; import { useGEmolumentoItemFormHook } from '../../hooks/GEmolumentoItem/useGEmolumentoItemFormHook'; import { GEmolumentoItemFormInterface } from '../../interfaces/GEmolumentoItem/GEmolumentoItemFormInterface'; -/** - * Formulário de cadastro/edição de Natureza - * Baseado nos campos da tabela G_NATUREZA - */ export default function GEmolumentoItemForm({ isOpen, data, diff --git a/src/packages/administrativo/components/GGramatica/GGramaticaForm.tsx b/src/packages/administrativo/components/GGramatica/GGramaticaForm.tsx index b9710c3..0edda15 100644 --- a/src/packages/administrativo/components/GGramatica/GGramaticaForm.tsx +++ b/src/packages/administrativo/components/GGramatica/GGramaticaForm.tsx @@ -38,6 +38,7 @@ export default function GGramaticaForm({ onSave, buttonIsLoading, }: GGramaticaFormInterface) { + const form = useGGramaticaFormHook({}); // Atualiza o formulário quando recebe dados para edição diff --git a/src/packages/administrativo/components/GMarcacaoTipo/GMarcacaoTipoSelect.tsx b/src/packages/administrativo/components/GMarcacaoTipo/GMarcacaoTipoSelect.tsx index 4720476..0635bd6 100644 --- a/src/packages/administrativo/components/GMarcacaoTipo/GMarcacaoTipoSelect.tsx +++ b/src/packages/administrativo/components/GMarcacaoTipo/GMarcacaoTipoSelect.tsx @@ -1,6 +1,5 @@ 'use client'; -import React from 'react'; import { Button } from '@/components/ui/button'; import { Command, @@ -13,10 +12,11 @@ import { import { FormControl } from '@/components/ui/form'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { cn } from '@/lib/utils'; -import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'; +import { useGMarcacaoTipoReadHook } from '@/packages/administrativo/hooks/GMarcacaoTipo/useGMarcacaoTipoReadHook'; +import { GMarcacaoTipoReadInterface } from '@/packages/administrativo/interfaces/GMarcacaoTipo/GMarcacaoTipoReadInterface'; import GetCapitalize from '@/shared/actions/text/GetCapitalize'; -import { useGMarcacaoTipoReadHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/g_marcacao_tipo/useGMarcacaoTipoReadHook'; -import { GMarcacaoTipoReadInterface } from '@/app/(protected)/(cadastros)/cadastros/_interfaces/GMarcacaoTipoReadInterface'; +import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'; +import React from 'react'; export default function GMarcacaoTipoSelect({ grupo, sistema_id, situacao, field }: any) { const gMarcacaoTipoReadParams: GMarcacaoTipoReadInterface = { grupo, sistema_id, situacao }; diff --git a/src/packages/administrativo/components/GMedidaTipo/GMedidaTipoIndex.tsx b/src/packages/administrativo/components/GMedidaTipo/GMedidaTipoIndex.tsx index ac1fce7..4597ef4 100644 --- a/src/packages/administrativo/components/GMedidaTipo/GMedidaTipoIndex.tsx +++ b/src/packages/administrativo/components/GMedidaTipo/GMedidaTipoIndex.tsx @@ -1,21 +1,20 @@ 'use client'; -import { useEffect, useState, useCallback } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { Card, CardContent } from '@/components/ui/card'; +import { useGMedidaTipoReadHook } from '@/packages/administrativo/hooks/GMedidaTipo/useGMedidaTipoReadHook'; +import { useGMedidaTipoRemoveHook } from '@/packages/administrativo/hooks/GMedidaTipo/useGMedidaTipoRemoveHook'; +import { useGMedidaTipoSaveHook } from '@/packages/administrativo/hooks/GMedidaTipo/useGMedidaTipoSaveHook'; +import { GMedidaTipoInterface } from '@/packages/administrativo/interfaces/GMedidaTipo/GMedidaTipoInterface'; import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog'; import { useConfirmDialog } from '@/shared/components/confirmDialog/useConfirmDialog'; import Loading from '@/shared/components/loading/loading'; import { useResponse } from '@/shared/components/response/ResponseContext'; import Header from '@/shared/components/structure/Header'; -import { SituacoesEnum } from '@/shared/enums/SituacoesEnum'; import GMedidaTipoForm from './GMedidaTipoForm'; import GMedidaTipoTable from './GMedidaTipoTable'; -import { useGMedidaTipoReadHook } from '../../hooks/GMedidaTipo/useGMedidaTipoReadHook'; -import { useGMedidaTipoRemoveHook } from '../../hooks/GMedidaTipo/useGMedidaTipoRemoveHook'; -import { useGMedidaTipoSaveHook } from '../../hooks/GMedidaTipo/useGMedidaTipoSaveHook'; -import { GMedidaTipoInterface } from '../../interfaces/GMedidaTipo/GMedidaTipoInterface'; const initialMedidaTipo: GMedidaTipoInterface = { medida_tipo_id: 0, @@ -109,8 +108,8 @@ export default function GMedidaTipoIndex() { title={'Tipos de Medida'} description={'Gerenciamento de tipos de medida'} buttonText={'Novo Tipo de Medida'} - buttonAction={(data) => { - handleOpenForm((data = initialMedidaTipo)); + buttonAction={() => { + handleOpenForm(null); }} /> diff --git a/src/packages/administrativo/components/GTBBairro/GTBBairroIndex.tsx b/src/packages/administrativo/components/GTBBairro/GTBBairroIndex.tsx index 5fb9e13..b0592c6 100644 --- a/src/packages/administrativo/components/GTBBairro/GTBBairroIndex.tsx +++ b/src/packages/administrativo/components/GTBBairro/GTBBairroIndex.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useEffect, useState, useCallback } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { Card, CardContent } from '@/components/ui/card'; import { useGTBBairroReadHook } from '@/packages/administrativo/hooks/GTBBairro/useGTBBairroReadHook'; @@ -13,9 +13,9 @@ import { useResponse } from '@/shared/components/response/ResponseContext'; import Header from '@/shared/components/structure/Header'; import { SituacoesEnum } from '@/shared/enums/SituacoesEnum'; +import { GTBBairroInterface } from '../../interfaces/GTBBairro/GTBBairroInterface'; import GTBBairroForm from './GTBBairroForm'; import GTBBairroTable from './GTBBairroTable'; -import { GTBBairroInterface } from '../../interfaces/GTBBairro/GTBBairroInterface'; const initialBairro: GTBBairroInterface = { sistema_id: null, @@ -123,8 +123,8 @@ export default function GTBBairroIndex() { title={'Bairros'} description={'Gerenciamento de Bairros'} buttonText={'Novo Bairro'} - buttonAction={(data) => { - handleOpenForm((data = initialBairro)); + buttonAction={() => { + handleOpenForm(null); }} /> diff --git a/src/packages/administrativo/components/GTBEstadoCivil/GTBEstadoCivilIndex.tsx b/src/packages/administrativo/components/GTBEstadoCivil/GTBEstadoCivilIndex.tsx index 92d092a..862d54f 100644 --- a/src/packages/administrativo/components/GTBEstadoCivil/GTBEstadoCivilIndex.tsx +++ b/src/packages/administrativo/components/GTBEstadoCivil/GTBEstadoCivilIndex.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useEffect, useState, useCallback } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { Card, CardContent } from '@/components/ui/card'; import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog'; @@ -9,12 +9,12 @@ import Loading from '@/shared/components/loading/loading'; import { useResponse } from '@/shared/components/response/ResponseContext'; import Header from '@/shared/components/structure/Header'; -import GTBEstadoCivilForm from './GTBEstadoCivilForm'; -import GTBEstadoCivilTable from './GTBEstadoCivilTable'; import { useGTBEstadoCivilReadHook } from '../../hooks/GTBEstadoCivil/useGTBEstadoCivilReadHook'; import { useGTBEstadoCivilRemoveHook } from '../../hooks/GTBEstadoCivil/useGTBEstadoCivilRemoveHook'; import { useGTBEstadoCivilSaveHook } from '../../hooks/GTBEstadoCivil/useGTBEstadoCivilSaveHook'; import { GTBEstadoCivilInterface } from '../../interfaces/GTBEstadoCivil/GTBEstadoCivilInterface'; +import GTBEstadoCivilForm from './GTBEstadoCivilForm'; +import GTBEstadoCivilTable from './GTBEstadoCivilTable'; const initalEstadoCivil: GTBEstadoCivilInterface = { tb_estadocivil_id: 0, @@ -109,8 +109,8 @@ export default function GTBEstadoCivilIndex() { title={'Estados Civis'} description={'Gerenciamento de Estados Civis'} buttonText={'Novo Estado Civil'} - buttonAction={(data) => { - handleOpenForm((data = initalEstadoCivil)); + buttonAction={() => { + handleOpenForm(null); }} /> diff --git a/src/packages/administrativo/components/GUsuario/GUsuarioSelect.tsx b/src/packages/administrativo/components/GUsuario/GUsuarioSelect.tsx index ee5d466..39fd95b 100644 --- a/src/packages/administrativo/components/GUsuario/GUsuarioSelect.tsx +++ b/src/packages/administrativo/components/GUsuario/GUsuarioSelect.tsx @@ -16,10 +16,10 @@ import { FormControl } from '@/components/ui/form'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { cn } from '@/lib/utils'; import { useGUsuarioIndexHook } from '@/packages/administrativo/hooks/GUsuario/useGUsuarioIndexHook'; +import GUsuarioIndexInterface from '@/packages/administrativo/interfaces/GUsuario/GUsuarioIndexInterface'; import GUsuarioSelectInterface from '@/packages/administrativo/interfaces/GUsuario/GUsuarioSelectInterface'; import GetCapitalize from '@/shared/actions/text/GetCapitalize'; -import GUsuarioIndexInterface from '../../interfaces/GUsuario/GusuarioIndexInterface'; export default function GUsuarioSelect({ field }: GUsuarioSelectInterface) { const [open, setOpen] = useState(false); diff --git a/src/packages/administrativo/components/TCensecNaturezaLitigio/TCensecNaturezaLitigioIndex.tsx b/src/packages/administrativo/components/TCensecNaturezaLitigio/TCensecNaturezaLitigioIndex.tsx index 6c46a87..00b5df9 100644 --- a/src/packages/administrativo/components/TCensecNaturezaLitigio/TCensecNaturezaLitigioIndex.tsx +++ b/src/packages/administrativo/components/TCensecNaturezaLitigio/TCensecNaturezaLitigioIndex.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useEffect, useState, useCallback } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { Card, CardContent } from '@/components/ui/card'; import { useTCensecNaturezaLitigioReadHook } from '@/packages/administrativo/hooks/TCensecNaturezaLitigio/useTCensecNaturezaLitigioReadHook'; @@ -13,9 +13,9 @@ import { useResponse } from '@/shared/components/response/ResponseContext'; import Header from '@/shared/components/structure/Header'; import { SituacoesEnum } from '@/shared/enums/SituacoesEnum'; +import { TCensecNaturezaLitigioInterface } from '../../interfaces/TCensecNaturezaLitigio/TCensecNaturezaLitigioInterface'; import TCensecNaturezaLitigioForm from './TCensecNaturezaLitigioForm'; import TCensecNaturezaLitigioTable from './TCensecNaturezaLitigioTable'; -import { TCensecNaturezaLitigioInterface } from '../../interfaces/TCensecNaturezaLitigio/TCensecNaturezaLitigioInterface'; const initialCensecNaturezaLitigio: TCensecNaturezaLitigioInterface = { censec_naturezalitigio_id: 0, @@ -112,7 +112,9 @@ export default function TCensecNaturezaLitigioIndex() { title={'Natureza do Litígio'} description={'Gerenciamento de Naturezas do Litígio'} buttonText={'Nova Natureza'} - buttonAction={(data) => handleOpenForm((data = initialCensecNaturezaLitigio))} + buttonAction={() => { + handleOpenForm(null); + }} /> {/* Tabela */} diff --git a/src/packages/administrativo/components/TCensecTipoAto/TCensecTipoAtoIndex.tsx b/src/packages/administrativo/components/TCensecTipoAto/TCensecTipoAtoIndex.tsx index 9fdaa6a..cf2d98c 100644 --- a/src/packages/administrativo/components/TCensecTipoAto/TCensecTipoAtoIndex.tsx +++ b/src/packages/administrativo/components/TCensecTipoAto/TCensecTipoAtoIndex.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useEffect, useState, useCallback } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { Card, CardContent } from '@/components/ui/card'; import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog'; @@ -9,13 +9,13 @@ import Loading from '@/shared/components/loading/loading'; import Header from '@/shared/components/structure/Header'; import { SituacoesEnum } from '@/shared/enums/SituacoesEnum'; -import TCensecTipoAtoForm from './TCensecTipoAtoForm'; -import TCensecTipoAtoTable from './TCensecTipoAtoTable'; import { useTCensecReadHook } from '../../hooks/TCensec/useTCensecReadHook'; import { useTCensecTipoAtoReadHook } from '../../hooks/TCensecTipoAto/useTCensecTipoAtoReadHook'; import { useTCensecTipoAtoRemoveHook } from '../../hooks/TCensecTipoAto/useTCensecTipoAtoRemoveHook'; import { useTCensecTipoAtoSaveHook } from '../../hooks/TCensecTipoAto/useTCensecTipoAtoSaveHook'; import { TCensecTipoAtoInterface } from '../../interfaces/TCensecTipoAto/TCensecTipoAtoInterface'; +import TCensecTipoAtoForm from './TCensecTipoAtoForm'; +import TCensecTipoAtoTable from './TCensecTipoAtoTable'; // Estado inicial para criação const initialTCensecTipoAto: TCensecTipoAtoInterface = { @@ -106,8 +106,8 @@ export default function TCensecTipoAtoIndex() { title="Tipos de Ato CENSEC" description="Gerenciamento de Tipos de Ato vinculados ao CENSEC" buttonText="Novo Tipo de Ato" - buttonAction={(data) => { - handleOpenForm((data = initialTCensecTipoAto)); + buttonAction={() => { + handleOpenForm(null); }} /> diff --git a/src/packages/administrativo/components/TPessoa/TPessoaTableFormColumnsDialog.tsx b/src/packages/administrativo/components/TPessoa/TPessoaTableFormColumnsDialog.tsx index 0c13af2..df9842b 100644 --- a/src/packages/administrativo/components/TPessoa/TPessoaTableFormColumnsDialog.tsx +++ b/src/packages/administrativo/components/TPessoa/TPessoaTableFormColumnsDialog.tsx @@ -85,7 +85,7 @@ export function TPessoaTableFormColumnsDialog(setSelectedTPessoa: React.Dispatch
{pessoa.nome || '-'}
- {empty(pessoa.email) ? 'Email não informado' : pessoa.email} + {empty(pessoa?.email) ? 'Email não informado' : pessoa?.email}
diff --git a/src/packages/administrativo/components/TPessoa/TPessoaTableFormSubview.tsx b/src/packages/administrativo/components/TPessoa/TPessoaTableFormSubview.tsx index 367b213..817999a 100644 --- a/src/packages/administrativo/components/TPessoa/TPessoaTableFormSubview.tsx +++ b/src/packages/administrativo/components/TPessoa/TPessoaTableFormSubview.tsx @@ -40,17 +40,15 @@ function TPessoaTableFormSubview({ }, []) - // Define a classe do botão de biometria com base no status, sem estado extra const biometriaButtonClass = useMemo(() => { - switch (1) { + const status = 1 as number; // força tipo number + + switch (status) { case 0: - // Amarelo (aviso) return 'bg-amber-100 text-amber-700 border border-amber-300 hover:bg-amber-200 hover:text-amber-800'; case 1: - // Verde discreto return 'bg-green-100 text-green-700 border border-green-300 hover:bg-green-200 hover:text-green-800'; case 2: - // Vermelho (erro) return 'bg-red-100 text-red-700 border border-red-300 hover:bg-red-200 hover:text-red-800'; default: return ''; diff --git a/src/packages/administrativo/components/TServicoTipo/TServicoTipoColumns.tsx b/src/packages/administrativo/components/TServicoTipo/TServicoTipoColumns.tsx new file mode 100644 index 0000000..093b994 --- /dev/null +++ b/src/packages/administrativo/components/TServicoTipo/TServicoTipoColumns.tsx @@ -0,0 +1,73 @@ +import { ColumnDef } from '@tanstack/react-table'; +import { EllipsisIcon, PencilIcon, Trash2Icon } from 'lucide-react'; + +import { Button } from '@/components/ui/button'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from '@/components/ui/dropdown-menu'; +import TServicoTipoInterface from '@/packages/administrativo/interfaces/TServicoTipo/TServicoTipoInterface'; +import GetCapitalize from '@/shared/actions/text/GetCapitalize'; +import { SortableHeader } from '@/shared/components/dataTable/SortableHeader'; + + +export default function TServicoTipoColumns( + onEdit: (item: TServicoTipoInterface, isEditingFormStatus: boolean) => void, + onDelete: (item: TServicoTipoInterface, isEditingFormStatus: boolean) => void, +): ColumnDef[] { + return [ + // ID + { + accessorKey: 'servico_tipo_id', + header: ({ column }) => SortableHeader('ID', column), + cell: ({ row }) => Number(row.getValue('servico_tipo_id')), + enableSorting: true, + }, + + // Descrição + { + accessorKey: 'descricao', + header: ({ column }) => SortableHeader('Descrição', column), + cell: ({ row }) => GetCapitalize(String(row.getValue('descricao') || '')), + }, + + // Ações + { + id: 'actions', + header: 'Ações', + cell: ({ row }) => { + const data = row.original; + return ( + + + + + + + onEdit(data, true)}> + + Editar + + + onDelete(data, true)} + > + + Remover + + + + + ); + }, + enableSorting: false, + enableHiding: false, + }, + ]; +} diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/t_servico_tipo/TServicoTipoForm.tsx b/src/packages/administrativo/components/TServicoTipo/TServicoTipoForm.tsx similarity index 75% rename from src/app/(protected)/(cadastros)/cadastros/_components/t_servico_tipo/TServicoTipoForm.tsx rename to src/packages/administrativo/components/TServicoTipo/TServicoTipoForm.tsx index e9da655..e1632dc 100644 --- a/src/app/(protected)/(cadastros)/cadastros/_components/t_servico_tipo/TServicoTipoForm.tsx +++ b/src/packages/administrativo/components/TServicoTipo/TServicoTipoForm.tsx @@ -1,5 +1,8 @@ 'use client'; +import { CirclePlus, DollarSign, Settings, SquarePen, Trash } from 'lucide-react'; +import { useEffect, useState } from 'react'; + import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; import { @@ -20,11 +23,6 @@ import { FormMessage, } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; -import { - Select, - SelectContent, - SelectItem -} from '@/components/ui/select'; import { Table, TableBody, @@ -34,151 +32,94 @@ import { TableRow, } from '@/components/ui/table'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { CirclePlus, DollarSign, Settings, SquarePen, Trash } from 'lucide-react'; -import React, { useState } from 'react'; -import { useForm } from 'react-hook-form'; - -import { useGEmolumentoItemReadHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento_item/useGEmolumentoItemReadHook'; -import { useTServicoEtiquetaReadHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/t_servico_etiqueta/useTServicoEtiquetaReadHook'; -import { useTServicoEtiquetaRemoveHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/t_servico_etiqueta/useTServicoEtiquetaRemoveHook'; -import { useTServicoEtiquetaSaveHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/t_servico_etiqueta/useTServicoEtiquetaSaveHook'; -import { GEmolumentoItemReadInterface } from '@/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoItemReadInterface'; import CCaixaServicoSelect from '@/packages/administrativo/components/CCaixaServico/CCaixaServicoSelect'; import GEmolumentoSelect from '@/packages/administrativo/components/GEmolumento/GEmolumentoSelect'; import GMarcacaoTipoSelect from '@/packages/administrativo/components/GMarcacaoTipo/GMarcacaoTipoSelect'; import TTBReconhecimentoTipoSelect from '@/packages/administrativo/components/TTBReconhecimentoTipo/TTBReconhecimentoTipoSelect'; +import { TServicoTipoSaveData } from '@/packages/administrativo/data/TServicoTipo/TServicoTipoSaveData'; +import { useGEmolumentoItemReadHook } from '@/packages/administrativo/hooks/GEmolumentoItem/useGEmolumentoItemReadHook'; +import { useTServicoEtiquetaReadHook } from '@/packages/administrativo/hooks/TServicoEtiqueta/useTServicoEtiquetaReadHook'; +import { useTServicoEtiquetaRemoveHook } from '@/packages/administrativo/hooks/TServicoEtiqueta/useTServicoEtiquetaRemoveHook'; +import { useTServicoEtiquetaSaveHook } from '@/packages/administrativo/hooks/TServicoEtiqueta/useTServicoEtiquetaSaveHook'; +import { useTServicoTipoFormHook } from '@/packages/administrativo/hooks/TServicoTipo/useTServicoTipoFormHook'; +import { GEmolumentoItemReadInterface } from '@/packages/administrativo/interfaces/GEmolumentoItem/GEmolumentoItemReadInterface'; +import TServicoTipoFormInterface from '@/packages/administrativo/interfaces/TServicoTipo/TServicoTipoFormInterface'; +import { TServicoTipoFormValues } from '@/packages/administrativo/schemas/TServicoTipo/TServicoTipoSchema'; import CategoriaServicoSelect from '@/shared/components/categoriaServicoSelect/CategoriaServicoSelect'; import { ConfirmacaoCheckBox } from '@/shared/components/confirmacao/ConfirmacaoCheckBox'; import ConfirmacaoSelect from '@/shared/components/confirmacao/ConfirmacaoSelect'; import { TipoPessoaSelect } from '@/shared/components/tipoPessoa/tipoPessoaSelect'; -import { useEffect } from 'react'; -import { TServicoTipoSaveData } from '../../../../../../packages/administrativo/data/TServicoTipo/TServicoTipoSaveData'; -import { TServicoTipoFormValues, TServicoTipoSchema } from '../../_schemas/TServicoTipoSchema'; - -// Propriedades esperadas pelo componente -interface Props { - isOpen: boolean; - data: TServicoTipoFormValues | null; - onClose: (item: null, isFormStatus: boolean) => void; - onSave: (data: TServicoTipoFormValues) => void; -} +import { ConfirmacaoEnum } from '@/shared/enums/ConfirmacaoEnum'; +import { SituacoesEnum } from '@/shared/enums/SituacoesEnum'; // Componente principal do formulário -export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Props) { - // Inicializa o react-hook-form com validação via Zod - const form = useForm({ - resolver: zodResolver(TServicoTipoSchema), - defaultValues: { - servico_tipo_id: 0, - emolumento_id: 0, - emolumento_obrigatorio: 0, - descricao: '', - maximo_pessoa: 0, - tipo_item: '', - frenteverso: 'N', - averbacao: 'N', - transferencia_veiculo: 'N', - usar_a4: 'N', - etiqueta_unica: 'N', - situacao: 'A', - selar: 'N', - valor_emolumento: 0, - valor_taxa_judiciaria: 0, - fundesp_valor: 0, - valor_total: 0, - tipo_pessoa: 'F', // ou "J" - } as unknown as TServicoTipoFormValues, - }); +export default function TServicoTipoForm({ + isOpen, + data, + onClose, + onSave, +}: TServicoTipoFormInterface) { + const form = useTServicoTipoFormHook({}); - // Carrega o ID caso esteja informado no form const servico_tipo_id = form.getValues('servico_tipo_id') || 0; - // Hook responsável por buscar emolumentos no backend const { tServicoEtiqueta, fetchTServicoEtiqueta } = useTServicoEtiquetaReadHook(); - - // Hook responsável em salvar o a etiqueta selecionada - const { tServicoEtiquetaSave, fetchTServicoEtiquetaSave } = useTServicoEtiquetaSaveHook(); - - // Hook responsável em excluir a etiqueta selecionada + const { fetchTServicoEtiquetaSave } = useTServicoEtiquetaSaveHook(); const { fetchTServicoEtiquetaRemove } = useTServicoEtiquetaRemoveHook(); - // Estado para gerenciar os itens da tabela de etiquetas/carimbos const [itensTabela, setItensTabela] = useState< { servico_etiqueta_id: string | number; descricao: string }[] >([]); - // Carrega os dados de emolumentos apenas uma vez ao montar o componente - React.useEffect(() => { - // Função para consumir o endpoint da api + // Carrega etiquetas quando o form tem ID + useEffect(() => { const loadData = async () => { - // Verifica se o ID do serviço tipo foi informado if (servico_tipo_id > 0) { - // Consumo o endpoint da api await fetchTServicoEtiqueta({ servico_tipo_id }); } }; - - // Chama a função para consumir o endpoint da api loadData(); }, [servico_tipo_id]); - // Atualiza itensTabela sempre que tServicoEtiqueta for carregado - React.useEffect(() => { - // Verifica se a consulta retornou os dados como objeto + // Atualiza a tabela quando muda o hook + useEffect(() => { if (Array.isArray(tServicoEtiqueta) && tServicoEtiqueta.length > 0) { - // Lista os itens const mapped = tServicoEtiqueta.map((item) => ({ servico_etiqueta_id: Number(item.servico_etiqueta_id ?? 0), descricao: String(item.descricao ?? 'Sem descrição'), })); - setItensTabela(mapped); } else { setItensTabela([]); } }, [tServicoEtiqueta]); - // Função para adicionar um novo item à tabela Etiquetas/Carimbos const handleAddEtiquetaCarimbo = async () => { - // Captura o valor selecionado do formulário const valorSelecionado = form.getValues('etiquetas_carimbos'); - // Se não houver valor selecionado, não faz nada if (!valorSelecionado) return; - // Verifica se o item já se encontra na tabela const alreadyExists = itensTabela.some( - (p) => String(p.descricao).trim() === String(valorSelecionado.value).trim(), + (p) => String(p.descricao).trim() === String(valorSelecionado).trim(), ); - // Caso o item já esteja na tabela, para o procedimento - if (alreadyExists) { - return; - } + if (alreadyExists) return; - // --- Envio opcional para API --- try { - // Verifica se o ID do serviço tipo foi informado if (servico_tipo_id > 0) { - // Monta o objeto do item selecionado - const data = { - etiqueta_modelo_id: valorSelecionado.key, + const dataToSave = { + etiqueta_modelo_id: 0, // não há ID, pois o valor é string servico_tipo_id: servico_tipo_id, }; - // Consumo o endpoint da api - const response = await fetchTServicoEtiquetaSave(data); + const response = await fetchTServicoEtiquetaSave(dataToSave); - // Verifica se tServicoEtiquetaSave é um objeto válido (não null e não array) if (response && typeof response === 'object' && !Array.isArray(response)) { - // Monta o objeto com um único item para a tabela const item = { servico_etiqueta_id: Number(response.servico_etiqueta_id) ?? 0, - descricao: String(valorSelecionado.value) ?? 'Sem descrição', + descricao: String(valorSelecionado) ?? 'Sem descrição', }; - // Adiciona o item na tabela setItensTabela((prev) => { const idAtual = String(response.servico_etiqueta_id ?? ''); const exists = prev.some((p) => String(p.servico_etiqueta_id ?? '') === idAtual); @@ -186,110 +127,80 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop }); } } - - // Se ocorrer erros, informo } catch (error) { console.log('Erro ao enviar o serviço para a API: ' + error); } }; - // Função para remover um item da tabela + // Remove item da tabela const handleRemoveItem = async (servico_etiqueta_id: number) => { try { - // Verifica se o ID da etiqueta tipo foi informado if (servico_etiqueta_id > 0) { - // Monta o objeto do item selecionado - const data = { - servico_etiqueta_id: servico_etiqueta_id, - }; - - // Consumo o endpoint da api + const data = { servico_etiqueta_id }; await fetchTServicoEtiquetaRemove(data); } - // Atualiza a tabela no form setItensTabela((prev) => prev.filter((p) => Number(p.servico_etiqueta_id) !== servico_etiqueta_id), ); - - // Se ocorrer erros, informo } catch (error) { console.log('Erro ao enviar o serviço para a API: ' + error); } }; - // Parâmetros para o hook de leitura de emolumento_item - // Inicializa com valores padrão (0) para evitar uso de propriedades não declaradas. const gEmolumentoItemReadParams: GEmolumentoItemReadInterface = { emolumento_id: 0, valor: 0 }; - // Estados locais - const [open, setOpen] = React.useState(false); - const [isLoading, setIsLoading] = React.useState(false); + const [open, setOpen] = useState(false); + const [isLoading, setIsLoading] = useState(false); - // Hook que realiza a leitura do emolumento_item const { gGEmolumentoItem, fetchGEmolumentoItem } = useGEmolumentoItemReadHook(); - // Busca os dados ao montar o componente (somente se houver ID válido) - React.useEffect(() => { + // Busca emolumento item + useEffect(() => { const loadData = async () => { - // Validação: só executa se houver emolumento_id informado e válido if ( - !gEmolumentoItemReadParams?.emolumento_id || // se não existir o campo - isNaN(Number(gEmolumentoItemReadParams.emolumento_id)) || // se não for número - Number(gEmolumentoItemReadParams.emolumento_id) <= 0 // se for zero ou negativo + !gEmolumentoItemReadParams?.emolumento_id || + isNaN(Number(gEmolumentoItemReadParams.emolumento_id)) || + Number(gEmolumentoItemReadParams.emolumento_id) <= 0 ) { - return; // encerra sem executar a busca + return; } - // Executa a busca apenas se ainda não houver dados carregados if (!gGEmolumentoItem.length) { setIsLoading(true); await fetchGEmolumentoItem(gEmolumentoItemReadParams); setIsLoading(false); } }; - loadData(); }, [gEmolumentoItemReadParams.emolumento_id]); - // Captura o ID do serviço para uso local const servicoTipoId = Number(form.watch('servico_tipo_id') || data?.servico_tipo_id || 0); - // Função chamada ao clicar em "Salvar" const handleSave = async (formData: TServicoTipoFormValues) => { try { - // Se o form não trouxe o ID, tenta puxar de `data` const servico_tipo_id = formData.servico_tipo_id || data?.servico_tipo_id || form.getValues('servico_tipo_id') || 0; - // Atualiza o valor dentro do formData formData.servico_tipo_id = Number(servico_tipo_id); - // Intercepta e trata o valor de emolumento_id const emolumentoId = Number(formData.emolumento_id ?? 0); formData.emolumento_id = emolumentoId === 0 ? null : emolumentoId; - // Intercepta e trata o valor de emolumento_obrigatorio const emolumentoObrigatorio = Number(formData.emolumento_obrigatorio ?? 0); formData.emolumento_obrigatorio = emolumentoObrigatorio === 0 ? null : emolumentoObrigatorio; - // Detecta automaticamente se é edição const isEditing = !!formData.servico_tipo_id && Number(formData.servico_tipo_id) > 0; - // Envia os dados para o módulo com o método correto const response = await TServicoTipoSaveData({ ...formData, - metodo: isEditing ? 'PUT' : 'POST', // 💡 Definição explícita do método + metodo: isEditing ? 'PUT' : 'POST', }); - // Atualiza o formulário apenas se o retorno for válido if (response?.data?.servico_tipo_id) { const novoId = response.data.servico_tipo_id; - form.setValue('servico_tipo_id', novoId); // mantém o ID atualizado - - // Merge dos dados para preservar valores locais + form.setValue('servico_tipo_id', novoId); form.reset({ ...form.getValues(), ...response.data }); - console.log(`Serviço ${isEditing ? 'atualizado' : 'criado'} com sucesso (ID: ${novoId})`); } else { console.log('Erro ao salvar o tipo de serviço.'); @@ -299,17 +210,12 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop } }; - // Carrega os dados apenas quando o modal - // abrir e houver um registro para editar + // Carrega dados ao abrir o modal useEffect(() => { - // Remove as etiquetas selecionadas setItensTabela([]); - if (isOpen && data && Number(data.servico_tipo_id ?? 0) > 0) { - /** Carrega os dados no formulário */ - form.reset(data); // edição + form.reset(data); } else if (isOpen && !data) { - /** Reseta os campos do formulário */ form.reset({ servico_tipo_id: 0, emolumento_id: 0, @@ -317,13 +223,13 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop descricao: '', maximo_pessoa: 0, tipo_item: '', - frenteverso: 'N', - averbacao: 'N', - transferencia_veiculo: 'N', - usar_a4: 'N', - etiqueta_unica: 'N', - situacao: 'A', - selar: 'N', + frenteverso: ConfirmacaoEnum.N, + averbacao: ConfirmacaoEnum.N, + transferencia_veiculo: ConfirmacaoEnum.N, + usar_a4: ConfirmacaoEnum.N, + etiqueta_unica: ConfirmacaoEnum.N, + situacao: SituacoesEnum.A, + selar: ConfirmacaoEnum.N, valor_emolumento: 0, valor_taxa_judiciaria: 0, fundesp_valor: 0, @@ -496,8 +402,10 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop field.onChange(checked ? 'S' : 'N')} // grava "S" ou "N" + checked={field.value === ConfirmacaoEnum.S} + onCheckedChange={(checked) => + field.onChange(checked ? ConfirmacaoEnum.S : ConfirmacaoEnum.N) + } disabled={!isEnabled} /> @@ -516,9 +424,7 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop control={form.control} name="situacao" render={({ field }) => { - // Considera "A" ou vazio como marcado - const isChecked = field.value === 'A' || !field.value; - + const isChecked = field.value === SituacoesEnum.A || !field.value; return ( @@ -526,11 +432,15 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop className="cursor-pointer" checked={isChecked} onCheckedChange={(checked) => { - field.onChange(checked ? 'A' : 'I'); // grava "A" ou "I" no form + field.onChange( + checked ? SituacoesEnum.A : SituacoesEnum.I + ); }} /> - Ativo + + Ativo + ); }} @@ -602,19 +512,9 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop render={({ field }) => ( Biometria - + + + )} @@ -629,19 +529,9 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop render={({ field }) => ( CPF/CNPJ - + + + )} @@ -656,19 +546,9 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop render={({ field }) => ( Autorização - + + + )} @@ -683,19 +563,9 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop render={({ field }) => ( Abonador - + + + )} @@ -759,7 +629,7 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop variant="outline" className="w-full cursor-pointer" type="button" - onClick={() => handleRemoveItem(item.servico_etiqueta_id)} + onClick={() => handleRemoveItem(Number(item.servico_etiqueta_id))} > Remover @@ -789,19 +659,9 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop render={({ field }) => ( Selar - + + + )} diff --git a/src/app/(protected)/(cadastros)/cadastros/(t_servico_tipo)/servicos-tipo/page.tsx b/src/packages/administrativo/components/TServicoTipo/TServicoTipoIndex.tsx similarity index 82% rename from src/app/(protected)/(cadastros)/cadastros/(t_servico_tipo)/servicos-tipo/page.tsx rename to src/packages/administrativo/components/TServicoTipo/TServicoTipoIndex.tsx index c976323..ac15cf2 100644 --- a/src/app/(protected)/(cadastros)/cadastros/(t_servico_tipo)/servicos-tipo/page.tsx +++ b/src/packages/administrativo/components/TServicoTipo/TServicoTipoIndex.tsx @@ -1,29 +1,24 @@ 'use client'; -import { Card, CardContent } from '@/components/ui/card'; import { useCallback, useEffect, useState } from 'react'; -import Loading from '@/shared/components/loading/loading'; - -// Componentes específicos para TServicoTipo -import TServicoTipoForm from '../../_components/t_servico_tipo/TServicoTipoForm'; -import TServicoTipoTable from '../../_components/t_servico_tipo/TServicoTipoTable'; - -// Hooks específicos para TServicoTipo -import { useTServicoTipoEditHook } from '../../../../../../packages/administrativo/hooks/TServicoTipo/useTServicoTipoEditHook'; -import { useTServicoTipoReadHook } from '../../../../../../packages/administrativo/hooks/TServicoTipo/useTServicoTipoReadHook'; -import { useTServicoTipoRemoveHook } from '../../../../../../packages/administrativo/hooks/TServicoTipo/useTServicoTipoRemoveHook'; -import { useTServicoTipoSaveHook } from '../../../../../../packages/administrativo/hooks/TServicoTipo/useTServicoTipoSaveHook'; - +import { Card, CardContent } from '@/components/ui/card'; +import { useTServicoTipoEditHook } from '@/packages/administrativo/hooks/TServicoTipo/useTServicoTipoEditHook'; +import { useTServicoTipoReadHook } from '@/packages/administrativo/hooks/TServicoTipo/useTServicoTipoReadHook'; +import { useTServicoTipoRemoveHook } from '@/packages/administrativo/hooks/TServicoTipo/useTServicoTipoRemoveHook'; +import { useTServicoTipoSaveHook } from '@/packages/administrativo/hooks/TServicoTipo/useTServicoTipoSaveHook'; +import TServicoTipoInterface from '@/packages/administrativo/interfaces/TServicoTipo/TServicoTipoInterface'; import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog'; import { useConfirmDialog } from '@/shared/components/confirmDialog/useConfirmDialog'; - -// Interface específica para TServicoTipo +import Loading from '@/shared/components/loading/loading'; import Header from '@/shared/components/structure/Header'; -import TServicoTipoInterface from '../../_interfaces/TServicoTipoInterface'; -export default function TServicoTipoPage() { - // Hooks para leitura, salvamento e remoção +import TServicoTipoForm from './TServicoTipoForm'; +import TServicoTipoTable from './TServicoTipoTable'; + + +export default function TServicoTipoIndex() { + const { tServicoTipo, fetchTServicoTipo } = useTServicoTipoReadHook(); const { saveTServicoTipo } = useTServicoTipoSaveHook(); const { removeTServicoTipo } = useTServicoTipoRemoveHook(); @@ -33,9 +28,8 @@ export default function TServicoTipoPage() { const [selectedServicoTipo, setSelectedServicoTipo] = useState( null, ); - const [isFormOpen, setIsFormOpen] = useState(false); - // Estado para saber qual item será deletado + const [isFormOpen, setIsFormOpen] = useState(false); const [itemToDelete, setItemToDelete] = useState(null); /** @@ -95,6 +89,7 @@ export default function TServicoTipoPage() { // Atualiza a lista de dados fetchTServicoTipo(); + }, [saveTServicoTipo, fetchTServicoTipo], ); @@ -144,7 +139,9 @@ export default function TServicoTipoPage() { * Tela de loading enquanto carrega os dados */ if (!tServicoTipo) { + return ; + } return ( diff --git a/src/packages/administrativo/components/TServicoTipo/TServicoTipoSelect.tsx b/src/packages/administrativo/components/TServicoTipo/TServicoTipoSelect.tsx index 232b308..a742ccc 100644 --- a/src/packages/administrativo/components/TServicoTipo/TServicoTipoSelect.tsx +++ b/src/packages/administrativo/components/TServicoTipo/TServicoTipoSelect.tsx @@ -1,7 +1,7 @@ 'use client'; import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react'; -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { Button } from '@/components/ui/button'; import { @@ -16,30 +16,46 @@ import { FormControl } from '@/components/ui/form'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { cn } from '@/lib/utils'; import { useTServicoTipoReadHook } from '@/packages/administrativo/hooks/TServicoTipo/useTServicoTipoReadHook'; +import TServicoTipoIndexInteface from '@/packages/administrativo/interfaces/TServicoTipo/TServicoTipoIndexInteface'; import TServicoTipoSelectInterface from '@/packages/administrativo/interfaces/TServicoTipo/TServicoTipoSelectInterface'; import GetCapitalize from '@/shared/actions/text/GetCapitalize'; +import { ConfirmacaoEnum } from '@/shared/enums/ConfirmacaoEnum'; -import TServicoTipoIndexInteface from '../../interfaces/TServicoTipo/TServicoTipoIndexInteface'; +/** + * Estrutura mínima esperada de um tipo de serviço + */ +interface TServicoTipoItem { + servico_tipo_id?: number; + descricao?: string; + tipo_item?: string; + tipo_pessoa?: string; + requer_biometria?: ConfirmacaoEnum; + requer_cpf?: ConfirmacaoEnum; + servico_caixa_id?: number; + selar?: ConfirmacaoEnum; +} +/** + * Componente de seleção de Tipos de Serviço. + * Compatível com react-hook-form e schemas com objetos completos. + */ export default function TServicoTipoSelect({ field }: TServicoTipoSelectInterface) { const [open, setOpen] = useState(false); const [isLoading, setIsLoading] = useState(false); const { tServicoTipo = [], fetchTServicoTipo } = useTServicoTipoReadHook(); /** - * Efeito para buscar os dados apenas uma vez. + * Busca inicial de dados */ const loadData = useCallback(async () => { - - const TServicoTipoIndex: TServicoTipoIndexInteface = { - urlParams: { - situacao: 'A' - } - } - if (tServicoTipo.length) return; + + const params: TServicoTipoIndexInteface = { + urlParams: { situacao: 'A' }, + }; + setIsLoading(true); - await fetchTServicoTipo(TServicoTipoIndex); + await fetchTServicoTipo(params); setIsLoading(false); }, [tServicoTipo.length, fetchTServicoTipo]); @@ -48,40 +64,44 @@ export default function TServicoTipoSelect({ field }: TServicoTipoSelectInterfac }, [loadData]); /** - * Item selecionado (comparando por ID) - */ - const selected = useMemo( - () => - tServicoTipo.find( - (item) => String(item.servico_tipo_id) === String(field?.value?.servico_tipo_id ?? ''), - ), - [tServicoTipo, field?.value], - ); - - /** - * Manipulador de seleção + * Manipula a seleção de um item */ const handleSelect = useCallback( - (item: any) => { + (item: TServicoTipoItem) => { if (!field?.onChange) return; - const selectedValue = { - servico_tipo_id: Number(item.servico_tipo_id), - descricao: item.descricao, - tipo_item: item.tipo_item, - tipo_pessoa: item.tipo_pessoa, - requer_biometria: item.requer_biometria, - requer_cpf: item.requer_cpf, - servico_caixa_id: item.servico_caixa_id, - selar: item.selar, + const selected: TServicoTipoItem = { + servico_tipo_id: Number(item.servico_tipo_id ?? 0), + descricao: String(item.descricao ?? ''), + tipo_item: String(item.tipo_item ?? ''), + tipo_pessoa: String(item.tipo_pessoa ?? ''), + requer_biometria: (item.requer_biometria as ConfirmacaoEnum) ?? ConfirmacaoEnum.N, + requer_cpf: (item.requer_cpf as ConfirmacaoEnum) ?? ConfirmacaoEnum.N, + servico_caixa_id: Number(item.servico_caixa_id ?? 0), + selar: (item.selar as ConfirmacaoEnum) ?? ConfirmacaoEnum.N, }; - field.onChange(selectedValue); + field.onChange(selected); setOpen(false); }, [field], ); + /** + * Determina o valor exibido no botão principal + */ + const value = field?.value as TServicoTipoItem | undefined; + + const selectedLabel = + value?.descricao && typeof value.descricao === 'string' + ? GetCapitalize(value.descricao) + : 'Selecione...'; + + const selectedId = + typeof value?.servico_tipo_id === 'number' + ? String(value.servico_tipo_id) + : ''; + return ( @@ -93,11 +113,7 @@ export default function TServicoTipoSelect({ field }: TServicoTipoSelectInterfac disabled={isLoading} className="justify-between" > - {isLoading - ? 'Carregando...' - : field.value?.descricao - ? GetCapitalize(field.value.descricao) - : 'Selecione...'} + {isLoading ? 'Carregando...' : selectedLabel} @@ -111,24 +127,26 @@ export default function TServicoTipoSelect({ field }: TServicoTipoSelectInterfac {isLoading ? 'Carregando...' : 'Nenhum resultado encontrado.'} - {tServicoTipo.map((item) => ( - handleSelect(item)} - > - - {GetCapitalize(item.descricao ?? '')} - - ))} + {tServicoTipo.map((item) => { + const itemId = String(item.servico_tipo_id ?? ''); + const isSelected = selectedId === itemId; + + return ( + handleSelect(item)} + > + + {GetCapitalize(item.descricao ?? '')} + + ); + })} diff --git a/src/packages/administrativo/components/TServicoTipo/TServicoTipoTable.tsx b/src/packages/administrativo/components/TServicoTipo/TServicoTipoTable.tsx new file mode 100644 index 0000000..00928ca --- /dev/null +++ b/src/packages/administrativo/components/TServicoTipo/TServicoTipoTable.tsx @@ -0,0 +1,24 @@ +'use client'; + +import TServicoTipoTableInterface from '@/packages/administrativo/interfaces/TServicoTipo/TServicoTipoTableInterface'; +import { DataTable } from '@/shared/components/dataTable/DataTable'; + +import TServicoTipoColumns from './TServicoTipoColumns'; + + +/** + * Componente principal da tabela de Naturezas + */ +export default function TServicoTipoTable({ data, onEdit, onDelete }: TServicoTipoTableInterface) { + const columns = TServicoTipoColumns(onEdit, onDelete); + return ( +
+ +
+ ); +} \ No newline at end of file diff --git a/src/packages/administrativo/components/TTBReconhecimentoTipo/TTBReconhecimentoTipoForm.tsx b/src/packages/administrativo/components/TTBReconhecimentoTipo/TTBReconhecimentoTipoForm.tsx index cd047c1..88d65eb 100644 --- a/src/packages/administrativo/components/TTBReconhecimentoTipo/TTBReconhecimentoTipoForm.tsx +++ b/src/packages/administrativo/components/TTBReconhecimentoTipo/TTBReconhecimentoTipoForm.tsx @@ -2,7 +2,7 @@ import { zodResolver } from '@hookform/resolvers/zod'; import { useEffect } from 'react'; -import { useForm, Controller } from 'react-hook-form'; +import { Controller, useForm } from 'react-hook-form'; import z from 'zod'; import { Button } from '@/components/ui/button'; @@ -26,9 +26,8 @@ import { } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; - -import { situacaoEnum } from '../../interfaces/TTBREconhecimentoTipo/TTBReconhecimentoTipoInterface'; -import { TTBReconhecimentoTipoSchema } from '../../schemas/TTBReconhecimentoTipo/TTBReconhecimentoTipoSchema'; +import { TTBReconhecimentoTipoSchema } from '@/packages/administrativo/schemas/TTBReconhecimentoTipo/TTBReconhecimentoTipoSchema'; +import { SituacoesEnum } from '@/shared/enums/SituacoesEnum'; type FormValues = z.infer; @@ -45,17 +44,15 @@ export default function TTBReconhecimentoTipoForm({ onClose, onSave, }: TTBReconhecimentoTipoFormProps) { - // Inicializa o react-hook-form com schema zod const form = useForm({ resolver: zodResolver(TTBReconhecimentoTipoSchema), defaultValues: { tb_reconhecimentotipo_id: 0, descricao: '', - situacao: situacaoEnum.ATIVO, + situacao: SituacoesEnum.A, }, }); - // Atualiza o formulário quando recebe dados para edição useEffect(() => { if (data) form.reset(data); }, [data, form]); @@ -75,7 +72,7 @@ export default function TTBReconhecimentoTipoForm({
- {/* Descrição */} + {/* Campo: Descrição */} - {/* Situação */} + {/* Campo: Situação (checkbox com enum) */} ( -
- field.onChange(checked ? 'A' : 'I')} - /> - -
- )} + render={({ field }) => { + const isAtivo = field.value === SituacoesEnum.A; + + return ( +
+ + field.onChange( + checked ? SituacoesEnum.A : SituacoesEnum.I, + ) + } + /> + +
+ ); + }} /> - {/* Rodapé do Dialog */} + {/* Rodapé */} - - - - - - - - - Imprimir Etiqueta - - - - - - Imprimir Cartão - - - - - - openConfirmDialog({ - title: confirmTitle, - description: 'Confirmação necessária', - message: confirmMessage, - confirmText: confirmButton, - cancelText: 'Cancelar', - onConfirm: () => { - handleSituacaoTServicoItemPedido(item) - }, - }) - } - > - {actionIcon} {actionLabel} - - - - - + + + + + + + + + + Imprimir Etiqueta + + + + + + Imprimir Cartão + + + + + + openConfirmDialog({ + title: confirmTitle, + description: 'Confirmação necessária', + message: confirmMessage, + confirmText: confirmButton, + cancelText: 'Cancelar', + onConfirm: () => { + handleSituacaoTServicoItemPedido(item); + }, + }) + } + > + {actionIcon} {actionLabel} + + + + - - ) + ); })} diff --git a/src/packages/servicos/components/TServicoItemPedido/TServicoItemPedidoResumo.tsx b/src/packages/servicos/components/TServicoItemPedido/TServicoItemPedidoResumo.tsx index f284493..c5fd28d 100644 --- a/src/packages/servicos/components/TServicoItemPedido/TServicoItemPedidoResumo.tsx +++ b/src/packages/servicos/components/TServicoItemPedido/TServicoItemPedidoResumo.tsx @@ -1,92 +1,90 @@ -import { format } from "date-fns" -import { ptBR } from "date-fns/locale" +'use client'; -import { Badge } from "@/components/ui/badge" -import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@/components/ui/card" -import { ScrollArea } from "@/components/ui/scroll-area" -import { Separator } from "@/components/ui/separator" + +import { Badge } from '@/components/ui/badge'; +import { + Card, + CardContent, + CardFooter, + CardHeader, + CardTitle, +} from '@/components/ui/card'; +import { ScrollArea } from '@/components/ui/scroll-area'; +import { Separator } from '@/components/ui/separator'; interface PedidoItem { - id: number - descricao: string - valor: number + id: number; + descricao: string; + valor: number; } interface PedidoResumoProps { - numeroPedido: number - dataPedido: string - itens: PedidoItem[] + numeroPedido: number; + dataPedido: string; + itens: PedidoItem[]; } +/** + * Componente de resumo do pedido + * Exibe número do pedido, data formatada, lista de itens e total. + */ export default function TServicoItemPedidoResumo({ numeroPedido, dataPedido, itens, }: PedidoResumoProps) { - const total = itens.reduce((acc, item) => acc + item.valor, 0) + const total = itens.reduce((acc, item) => acc + item.valor, 0); return ( - - - - Pedido Nº {numeroPedido} - - {format(new Date(dataPedido), "dd/MM/yyyy HH:mm", { locale: ptBR })} - + + {/* Cabeçalho */} + + + Pedido Nº {numeroPedido} + + + {dataPedido} + - - - {itens.map((item) => ( -
- - {item.descricao} - - - R$ {item.valor.toFixed(2).replace(".", ",")} - + {/* Conteúdo - Lista de Itens */} + + + {itens.length > 0 ? ( + itens.map((item) => ( +
+ + {item.descricao} + + + R$ {item.valor.toFixed(2).replace('.', ',')} + +
+ )) + ) : ( +
+ Nenhum item adicionado
- ))} + )}
- - Total - - R$ {total.toFixed(2).replace(".", ",")} + {/* Rodapé - Total */} + + Total + + R$ {total.toFixed(2).replace('.', ',')} - ) + ); } diff --git a/src/packages/servicos/components/TServicoPedido/TServicoPedidoColumns.tsx b/src/packages/servicos/components/TServicoPedido/TServicoPedidoColumns.tsx index e5d0966..0d0ea8a 100644 --- a/src/packages/servicos/components/TServicoPedido/TServicoPedidoColumns.tsx +++ b/src/packages/servicos/components/TServicoPedido/TServicoPedidoColumns.tsx @@ -74,7 +74,9 @@ export default function TServicoPedidoColumns( header: ({ column }) => SortableHeader('Situação', column), cell: ({ row }) => { return ( - + ) }, }, diff --git a/src/packages/servicos/components/TServicoPedido/TServicoPedidoDetails.tsx b/src/packages/servicos/components/TServicoPedido/TServicoPedidoDetails.tsx index 792308d..20f6d22 100644 --- a/src/packages/servicos/components/TServicoPedido/TServicoPedidoDetails.tsx +++ b/src/packages/servicos/components/TServicoPedido/TServicoPedidoDetails.tsx @@ -10,7 +10,10 @@ import { Separator } from '@/components/ui/separator'; import TServicoItemPedidoList from '@/packages/servicos/components/TServicoItemPedido/TServicoItemPedidoList'; import TServicoPedidoDetailsPagamento from '@/packages/servicos/components/TServicoPedido/TServicoPedidoDetailsPagamento'; import { useTServicoItemPedidoIndexHook } from '@/packages/servicos/hooks/TServicoItemPedido/useTServicoItemPedidoIndexHook'; +import { useTServicoPedidoAtivarHook } from '@/packages/servicos/hooks/TServicoPedido/useTServicoPedidoAtivarHook'; +import { useTServicoPedidoCancelarHook } from '@/packages/servicos/hooks/TServicoPedido/useTServicoPedidoCancelarHook'; import { useTServicoPedidoShowHook } from '@/packages/servicos/hooks/TServicoPedido/useTServicoPedidoShowHook'; +import TServicoPedidoDetailsInterface from '@/packages/servicos/interfaces/TServicoPedido/TServicoPedidoDetailsInterface'; import TServicoPedidoInterface from '@/packages/servicos/interfaces/TServicoPedido/TServicoPedidoInterface'; import { FormatCPF } from '@/shared/actions/CPF/FormatCPF'; import { FormatDateTime } from '@/shared/actions/dateTime/FormatDateTime'; @@ -19,10 +22,8 @@ import GetNameInitials from '@/shared/actions/text/GetNameInitials'; import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog'; import { useResponse } from '@/shared/components/response/ResponseContext'; -import { useTServicoPedidoAtivarHook } from '../../hooks/TServicoPedido/useTServicoPedidoAtivarHook'; -import { useTServicoPedidoCancelarHook } from '../../hooks/TServicoPedido/useTServicoPedidoCancelarHook'; -export default function TServicoPedidoDetails({ servico_pedido_id }: TServicoPedidoInterface) { +export default function TServicoPedidoDetails({ servico_pedido_id }: TServicoPedidoDetailsInterface) { const { setResponse } = useResponse(); const { ativarTServicoPedido } = useTServicoPedidoAtivarHook() @@ -74,6 +75,16 @@ export default function TServicoPedidoDetails({ servico_pedido_id }: TServicoPed }, [cancelarTServicoPedido]) + type ConfirmDialogParams = { + title: string + description: string + message: string + confirmText?: string + cancelText?: string + onConfirm?: () => void + onCancel?: () => void + } + const [confirmDialog, setConfirmDialog] = useState({ isOpen: false, title: '', @@ -85,7 +96,7 @@ export default function TServicoPedidoDetails({ servico_pedido_id }: TServicoPed onCancel: () => { }, }) - // 🔹 Função utilitária para abrir o dialog dinamicamente + // Função utilitária para abrir o dialog dinamicamente const openConfirmDialog = ({ title, description, @@ -94,7 +105,7 @@ export default function TServicoPedidoDetails({ servico_pedido_id }: TServicoPed cancelText = 'Cancelar', onConfirm, onCancel, - }) => { + }: ConfirmDialogParams) => { setConfirmDialog({ isOpen: true, title, @@ -121,24 +132,17 @@ export default function TServicoPedidoDetails({ servico_pedido_id }: TServicoPed if (response.servico_pedido_id) { TServicoPedidoItemIndexData(response.servico_pedido_id) } - }) + }, []) const TServicoPedidoItemIndexData = useCallback(async (servico_pedido_id: number) => { - const servicoPedido: TServicoPedidoInterface = { - servico_pedido_id: servico_pedido_id - } - await indexTServicoItemPedido(servicoPedido) - }) - - const handleCancelServicoPedidoOpenDialog = useCallback((state: boolean) => { - setIsCancelServicoPedidoDialogOpen(state) - }, []) + await indexTServicoItemPedido({ servico_pedido_id }) + }, [indexTServicoItemPedido]) useEffect(() => { TServicoPedidoShowData() }, []) - const isCancelado = TServicoPedido?.situacao === 'C' + const isCancelado = String(TServicoPedido?.situacao) === 'C' const actionLabel = isCancelado ? 'Ativar Pedido' : 'Estornar Pedido' const actionIcon = isCancelado ? : @@ -154,9 +158,11 @@ export default function TServicoPedidoDetails({ servico_pedido_id }: TServicoPed
diff --git a/src/packages/servicos/components/TServicoPedido/TServicoPedidoDetailsPagamento.tsx b/src/packages/servicos/components/TServicoPedido/TServicoPedidoDetailsPagamento.tsx index de7f70a..b06a54e 100644 --- a/src/packages/servicos/components/TServicoPedido/TServicoPedidoDetailsPagamento.tsx +++ b/src/packages/servicos/components/TServicoPedido/TServicoPedidoDetailsPagamento.tsx @@ -46,7 +46,9 @@ export default function TServicoPedidoDetailsPagamento({ - Pagamento + Pagamento diff --git a/src/packages/servicos/components/TServicoPedido/TServicoPedidoForm.tsx b/src/packages/servicos/components/TServicoPedido/TServicoPedidoForm.tsx index 2cc3b78..faafa96 100644 --- a/src/packages/servicos/components/TServicoPedido/TServicoPedidoForm.tsx +++ b/src/packages/servicos/components/TServicoPedido/TServicoPedidoForm.tsx @@ -39,6 +39,7 @@ import { useTServicoPedidoShowHook } from '@/packages/servicos/hooks/TServicoPed import TServicoItemPedidoAddInterface from '@/packages/servicos/interfaces/TServicoItemPedido/TServicoItemPedidoAddInterface'; import { TServicoPedidoFormInterface } from '@/packages/servicos/interfaces/TServicoPedido/TServicoPedidoFormInterface'; import TServicoPedidoInterface from '@/packages/servicos/interfaces/TServicoPedido/TServicoPedidoInterface'; +import { TServicoPedidoFormValues } from '@/packages/servicos/schemas/TServicoPedido/TServicoPedidoFormSchema'; import { FormatCPFCNPJForm } from '@/shared/actions/CPF/FormatCPFCNPJForm'; import { UnmaskCPFCNPJForm } from '@/shared/actions/CPF/UnmaskCPFCNPJForm'; import { parseNumberInput } from '@/shared/actions/form/parseNumberInput'; @@ -51,8 +52,7 @@ import { StepSection } from '@/shared/components/step/stepNavigator'; import TipoPagamentoSelect from '@/shared/components/tipoPagamento/TipoPagamentoSelect'; - - +import { SituacoesEnum } from '@/shared/enums/SituacoesEnum'; export default function TServicoPedidoForm({ servico_pedido_id }: TServicoPedidoFormInterface) { @@ -97,13 +97,17 @@ export default function TServicoPedidoForm({ servico_pedido_id }: TServicoPedido }, []); // Envia a requisição para a API - const handleSavePedido = useCallback(async (data: TServicoPedidoInterface) => { + const handleSavePedido = useCallback(async (data: TServicoPedidoFormValues) => { // Ativa o botão de loading setIsSaving(true); - // Guarda a resposta da APi - const response = await saveTServicoPedido(data); + // Converte o tipo do formulário (Zod) para o tipo da API (Interface) + const payload: TServicoPedidoInterface = { ...data, situacao: data.situacao as unknown as SituacoesEnum }; + + const response = await saveTServicoPedido(payload); + + setIsSaving(false); // Desativa o botão de loading setIsSaving(false); diff --git a/src/packages/servicos/components/TServicoPedido/TServicoPedidoIndex.tsx b/src/packages/servicos/components/TServicoPedido/TServicoPedidoIndex.tsx index 3615c71..03e7487 100644 --- a/src/packages/servicos/components/TServicoPedido/TServicoPedidoIndex.tsx +++ b/src/packages/servicos/components/TServicoPedido/TServicoPedidoIndex.tsx @@ -11,7 +11,6 @@ import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog'; import { useConfirmDialog } from '@/shared/components/confirmDialog/useConfirmDialog'; import Header from '@/shared/components/structure/Header'; -import TServicoPedidoForm from './TServicoPedidoForm'; import TServicoPedidoTable from './TServicoPedidoTable'; export default function TServicoPedidoIndex() { @@ -139,16 +138,6 @@ export default function TServicoPedidoIndex() { onCancel={handleCancel} /> )} - {/* Formulário de criação/edição */} - {isFormOpen && ( - - )}
); } diff --git a/src/packages/servicos/hooks/TServicoItemPedido/useTServicoItemPedidoCalculoHook.ts b/src/packages/servicos/hooks/TServicoItemPedido/useTServicoItemPedidoCalculoHook.ts index 7a1646b..9f83924 100644 --- a/src/packages/servicos/hooks/TServicoItemPedido/useTServicoItemPedidoCalculoHook.ts +++ b/src/packages/servicos/hooks/TServicoItemPedido/useTServicoItemPedidoCalculoHook.ts @@ -1,8 +1,7 @@ 'use client'; import { useState } from 'react'; -import { FieldValues, UseFormSetValue } from 'react-hook-form'; - +import { FieldValues, Path, PathValue, UseFormSetValue } from 'react-hook-form'; import { GCalculoServicoService } from '@/packages/administrativo/services/GCalculo/GCalculoServicoService'; import TServicoPedidoItemPreparePayload from '@/packages/servicos/actions/TServicoPedidoItem/TServicoPedidoItemPreparePayload'; @@ -10,71 +9,50 @@ import TServicoItemPedidoAddInterface from '@/packages/servicos/interfaces/TServ import TServicoItemPedidoCalculoResponseInterface from '@/packages/servicos/interfaces/TServicoItemPedido/TServicoItemPedidoCalculoResponseInterface'; import { useResponse } from '@/shared/components/response/ResponseContext'; - - -export function useTServicoItemPedidoCalculoHook(setValue?: UseFormSetValue) { - +export function useTServicoItemPedidoCalculoHook( + setValue?: UseFormSetValue +) { const { setResponse } = useResponse(); - const [TServicoItemPedido, setTServicoItemPedido] = useState([]); + const [TServicoItemPedido, setTServicoItemPedido] = useState< + TServicoItemPedidoCalculoResponseInterface[] + >([]); const addTServicoItemPedido = async (data: TServicoItemPedidoAddInterface) => { - - // Trata os dados do payload const payload = TServicoPedidoItemPreparePayload(data); if (payload.status) { - - setResponse(payload) - + setResponse(payload); return; - } - // Realiza a busca do item const response = await GCalculoServicoService(payload, data); - // Verifico se tenho código de resposta if (response.status) { - - // Exibo a resposta em tela - setResponse(response) - + setResponse(response); return; - } - // Verifica se tem status de erro - if (response.status) { - - return { - - 'status': response.status, - 'message': 'Erro ao processar dados' - - }; - - } - - // Atualiza o estado com fallback seguro setTServicoItemPedido((prev) => { - const safePrev = Array.isArray(prev) ? prev : []; - const novoArray = [...safePrev, response]; + + const novoItem = response?.data as TServicoItemPedidoCalculoResponseInterface; + if (!novoItem) return safePrev; + + const novoArray = [...safePrev, novoItem]; if (setValue) { - - // Protege contra sobrescrita incorreta do formulário - setValue('itens', novoArray, { shouldDirty: true }); - + setValue( + 'itens' as Path, + novoArray as unknown as PathValue>, + { shouldDirty: true } + ); } return novoArray; - }); - return response; - + return response?.data; }; return { @@ -82,4 +60,4 @@ export function useTServicoItemPedidoCalculoHook( + setValue?: UseFormSetValue +) { + const [TServicoItemPedidoLocal, setLocalTServicoItemPedido] = useState< + TServicoItemPedidoCalculoResponseInterface[] + >([]); -export function useTServicoItemPedidoLocalAddHook(setValue?: UseFormSetValue) { - - const [TServicoItemPedidoLocal, setLocalTServicoItemPedido] = useState([]); - - const localAddTServicoItemPedido = (item: TServicoItemPedidoAddResponseInterface) => { - + const localAddTServicoItemPedido = (item: TServicoItemPedidoCalculoResponseInterface) => { setLocalTServicoItemPedido((prev) => { - const updated = [...prev, item]; - if (setValue) setValue("itens", updated); + if (setValue) { + setValue( + 'itens' as Path, + updated as unknown as PathValue> + ); + } return updated; - }); - }; const localClearTServicoItemPedido = () => { - setLocalTServicoItemPedido([]); - if (setValue) setValue("itens", []); - + if (setValue) { + setValue( + 'itens' as Path, + [] as unknown as PathValue> + ); + } }; return { @@ -38,4 +44,4 @@ export function useTServicoItemPedidoLocalAddHook) { return useForm({ @@ -19,7 +20,7 @@ export function useTServicoPedidoFormHook(defaults?: Partial, - * } + * DataTable genérico (sem suporte a subview). */ -export function DataTable React.ReactNode) }>({ +export function DataTable({ data, columns, filterColumn, @@ -178,24 +169,22 @@ export function DataTable Rea {/* Corpo */} {table.getRowModel().rows?.length ? ( - table.getRowModel().rows.map((row) => { - return ( - onRowClick?.(row.original)} - > - {row.getVisibleCells().map((cell) => ( - - {flexRender( - cell.column.columnDef.cell, - cell.getContext(), - )} - - ))} - - ); - }) + table.getRowModel().rows.map((row) => ( + onRowClick?.(row.original)} + > + {row.getVisibleCells().map((cell) => ( + + {flexRender( + cell.column.columnDef.cell, + cell.getContext(), + )} + + ))} + + )) ) : ( Rea )} - @@ -250,9 +238,7 @@ export function DataTable Rea