mejoras al formulario de registro organizaciones productivas

This commit is contained in:
2026-01-22 14:28:24 -04:00
parent 69b3aab02a
commit 08a5567d60
34 changed files with 4297 additions and 1102 deletions

View File

@@ -19,7 +19,7 @@ import {
SelectValue,
} from '@repo/shadcn/select';
import { useForm } from 'react-hook-form';
import { useCreateUser } from "../../hooks/use-mutation-users";
import { useCreateUser } from '../../hooks/use-mutation-users';
import { CreateUser, createUser } from '../../schemas/users';
const ROLES = {
@@ -29,8 +29,9 @@ const ROLES = {
4: 'Gerente',
5: 'Usuario',
6: 'Productor',
7: 'Organización'
}
7: 'Organización',
8: 'Coordinadores',
};
interface CreateUserFormProps {
onSuccess?: () => void;
@@ -60,7 +61,7 @@ export function CreateUserForm({
id: defaultValues?.id,
phone: defaultValues?.phone || '',
role: undefined,
}
};
const form = useForm<CreateUser>({
resolver: zodResolver(createUser),
@@ -69,8 +70,6 @@ export function CreateUserForm({
});
const onSubmit = async (formData: CreateUser) => {
console.log(formData);
saveAccountingAccounts(formData, {
onSuccess: () => {
form.reset();
@@ -143,7 +142,7 @@ export function CreateUserForm({
<FormItem>
<FormLabel>Teléfono</FormLabel>
<FormControl>
<Input {...field} value={field.value?.toString() ?? ''}/>
<Input {...field} value={field.value?.toString() ?? ''} />
</FormControl>
<FormMessage />
</FormItem>
@@ -157,7 +156,7 @@ export function CreateUserForm({
<FormItem>
<FormLabel>Contraseña</FormLabel>
<FormControl>
<Input type="password" {...field}/>
<Input type="password" {...field} />
</FormControl>
<FormMessage />
</FormItem>
@@ -166,12 +165,12 @@ export function CreateUserForm({
<FormField
control={form.control}
name='confirmPassword'
name="confirmPassword"
render={({ field }) => (
<FormItem>
<FormLabel>Confirmar Contraseña</FormLabel>
<FormControl>
<Input type="password" {...field}/>
<Input type="password" {...field} />
</FormControl>
<FormMessage />
</FormItem>
@@ -184,7 +183,9 @@ export function CreateUserForm({
render={({ field }) => (
<FormItem className="w-full">
<FormLabel>Rol</FormLabel>
<Select onValueChange={(value) => field.onChange(Number(value))}>
<Select
onValueChange={(value) => field.onChange(Number(value))}
>
<FormControl>
<SelectTrigger className="w-full">
<SelectValue placeholder="Selecciona un rol" />

View File

@@ -1,5 +1,7 @@
'use client';
import { useUpdateUser } from '@/feactures/users/hooks/use-mutation-users';
import { UpdateUser, updateUser } from '@/feactures/users/schemas/users';
import { zodResolver } from '@hookform/resolvers/zod';
import { Button } from '@repo/shadcn/button';
import {
@@ -19,8 +21,6 @@ import {
SelectValue,
} from '@repo/shadcn/select';
import { useForm } from 'react-hook-form';
import { useUpdateUser } from "@/feactures/users/hooks/use-mutation-users";
import { UpdateUser, updateUser } from '@/feactures/users/schemas/users';
const ROLES = {
// 1: 'Superadmin',
@@ -29,8 +29,9 @@ const ROLES = {
4: 'Gerente',
5: 'Usuario',
6: 'Productor',
7: 'Organización'
}
7: 'Organización',
8: 'Coordinadores',
};
interface UserFormProps {
onSuccess?: () => void;
@@ -57,8 +58,8 @@ export function UpdateUserForm({
id: defaultValues?.id,
phone: defaultValues?.phone || '',
role: undefined,
isActive: defaultValues?.isActive
}
isActive: defaultValues?.isActive,
};
// console.log(defaultValues);
@@ -69,8 +70,7 @@ export function UpdateUserForm({
});
const onSubmit = async (data: UpdateUser) => {
const formData = data
const formData = data;
saveAccountingAccounts(formData, {
onSuccess: () => {
@@ -144,7 +144,7 @@ export function UpdateUserForm({
<FormItem>
<FormLabel>Teléfono</FormLabel>
<FormControl>
<Input {...field} value={field.value?.toString() ?? ''}/>
<Input {...field} value={field.value?.toString() ?? ''} />
</FormControl>
<FormMessage />
</FormItem>
@@ -153,12 +153,12 @@ export function UpdateUserForm({
<FormField
control={form.control}
name='password'
name="password"
render={({ field }) => (
<FormItem>
<FormLabel>Nueva Contraseña</FormLabel>
<FormControl>
<Input type="password" {...field}/>
<Input type="password" {...field} />
</FormControl>
<FormMessage />
</FormItem>
@@ -171,7 +171,9 @@ export function UpdateUserForm({
render={({ field }) => (
<FormItem className="w-full">
<FormLabel>Rol</FormLabel>
<Select onValueChange={(value) => field.onChange(Number(value))}>
<Select
onValueChange={(value) => field.onChange(Number(value))}
>
<FormControl>
<SelectTrigger className="w-full">
<SelectValue placeholder="Selecciona un rol" />
@@ -196,7 +198,10 @@ export function UpdateUserForm({
render={({ field }) => (
<FormItem className="w-full">
<FormLabel>Estatus</FormLabel>
<Select defaultValue={String(field.value)} onValueChange={(value) => field.onChange(Boolean(value))}>
<Select
defaultValue={String(field.value)}
onValueChange={(value) => field.onChange(Boolean(value))}
>
<SelectTrigger className="w-full">
<SelectValue placeholder="Seleccione un estatus" />
</SelectTrigger>

View File

@@ -5,12 +5,24 @@ import { Edit2 } from 'lucide-react';
import { useState } from 'react';
import { AccountPlanModal } from './modal-profile';
const ROLE_TRANSLATIONS: Record<string, string> = {
superadmin: 'Superadmin',
admin: 'Administrador',
autoridad: 'Autoridad',
manager: 'Gerente',
user: 'Usuario',
producers: 'Productor',
organization: 'Organización',
coordinators: 'Coordinador',
};
export function Profile() {
const [open, setOpen] = useState(false);
const { data } = useUserByProfile();
// console.log("🎯 data:", data);
const userRole = data?.data.role as string;
const translatedRole = ROLE_TRANSLATIONS[userRole] || userRole || 'Sin Rol';
return (
<div>
@@ -18,58 +30,60 @@ export function Profile() {
<Edit2 className="mr-2 h-4 w-4" /> Editar Perfil
</Button>
<AccountPlanModal open={open} onOpenChange={setOpen} defaultValues={data?.data}/>
<h2 className='mt-3 mb-1'>Datos del usuario</h2>
<AccountPlanModal
open={open}
onOpenChange={setOpen}
defaultValues={data?.data}
/>
<h2 className="mt-3 mb-1">Datos del usuario</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6 ">
<section className='border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md'>
<p className='font-bold text-lg'>Usuario:</p>
<section className="border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md">
<p className="font-bold text-lg">Usuario:</p>
<p>{data?.data.username || 'Sin Nombre de Usuario'}</p>
</section>
<section className='border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md'>
<p className='font-bold text-lg'>Rol:</p>
<p>{data?.data.role || 'Sin Rol'}</p>
<section className="border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md">
<p className="font-bold text-lg">Rol:</p>
<p>{translatedRole}</p>
</section>
</div>
<h2 className='mt-3 mb-1'>Información personal</h2>
<h2 className="mt-3 mb-1">Información personal</h2>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<section className='border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md'>
<p className='font-bold text-lg'>Nombre completo:</p>
<section className="border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md">
<p className="font-bold text-lg">Nombre completo:</p>
<p>{data?.data.fullname || 'Sin nombre y apellido'}</p>
</section>
<section className='border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md'>
<p className='font-bold text-lg'>Correo:</p>
<section className="border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md">
<p className="font-bold text-lg">Correo:</p>
<p>{data?.data.email || 'Sin correo'}</p>
</section>
<section className='border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md'>
<p className='font-bold text-lg'>Teléfono:</p>
<section className="border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md">
<p className="font-bold text-lg">Teléfono:</p>
<p>{data?.data.phone || 'Sin teléfono'}</p>
</section>
</div>
<h2 className='mt-3 mb-1'>Información de ubicación</h2>
<h2 className="mt-3 mb-1">Información de ubicación</h2>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<section className='border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md'>
<p className='font-bold text-lg'>Estado:</p>
<section className="border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md">
<p className="font-bold text-lg">Estado:</p>
<p>{data?.data.state || 'Sin Estado'}</p>
</section>
<section className='border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md'>
<p className='font-bold text-lg'>Municipio:</p>
<section className="border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md">
<p className="font-bold text-lg">Municipio:</p>
<p>{data?.data.municipality || 'Sin Municipio'}</p>
</section>
<section className='border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md'>
<p className='font-bold text-lg'>Parroquia:</p>
<section className="border bg-neutral-200 dark:bg-neutral-800 p-2 rounded-md">
<p className="font-bold text-lg">Parroquia:</p>
<p>{data?.data.parish || 'Sin Parroquia'}</p>
</section>
</div>
</div>
);
}