feat: ecosistema FRASA — apps Cotizador, Alta Clientes, Cobranza y Landing
- Cotizador (/quote): 4 propuestas con formulas validadas del Excel, comparador, combobox de unidades, vigencia, PDF ANEXO A - Alta Clientes (/client): wizard 8 pasos, validacion CURP RENAPO, OCR de INE, checklist de expediente, firma digital, 5 PDFs legales - Cobranza (/pay): planes de enganche, mora, vista cobranza del dia, recibos PDF, bitacora, dashboard con filtros - Landing (/): entrada al ecosistema - Design system StudioBlank (monocromo, acento #1B4332) en las 4 apps - 123 tests vitest
This commit is contained in:
30
apps/alta-clientes/src/forms/DatosGeneralesForm.tsx
Normal file
30
apps/alta-clientes/src/forms/DatosGeneralesForm.tsx
Normal file
@@ -0,0 +1,30 @@
|
||||
import { useForm, FormProvider } from 'react-hook-form'
|
||||
import { zodResolver } from '@hookform/resolvers/zod'
|
||||
import type { DatosGenerales } from '../types'
|
||||
import { datosGeneralesSchema } from '../lib/schemas'
|
||||
import DatosGeneralesCampos from './DatosGeneralesCampos'
|
||||
import Navegacion from './Navegacion'
|
||||
|
||||
export interface PasoProps<T> {
|
||||
valores: T
|
||||
onAnterior?: () => void
|
||||
onSiguiente: (datos: T) => void
|
||||
}
|
||||
|
||||
/** Paso 1: datos generales del cliente */
|
||||
export default function DatosGeneralesForm({ valores, onSiguiente }: PasoProps<DatosGenerales>) {
|
||||
const metodos = useForm<DatosGenerales>({
|
||||
resolver: zodResolver(datosGeneralesSchema),
|
||||
defaultValues: valores,
|
||||
mode: 'onSubmit',
|
||||
})
|
||||
|
||||
return (
|
||||
<FormProvider {...metodos}>
|
||||
<form onSubmit={metodos.handleSubmit(onSiguiente)} noValidate>
|
||||
<DatosGeneralesCampos prefix="" />
|
||||
<Navegacion />
|
||||
</form>
|
||||
</FormProvider>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user