import { Button } from '@/components/ui/button'; import { Field, FieldError, FieldLabel } from '@/components/ui/field'; import { Input } from '@/components/ui/input'; import { apiClient } from '@/lib/api-client'; import { useAuth } from '@/lib/auth'; import { setCurrentComplexSlug } from '@/lib/current-complex'; import { zodResolver } from '@hookform/resolvers/zod'; import type { PlanSummary } from '@repo/api-contract'; import { useNavigate } from '@tanstack/react-router'; import { useEffect, useState } from 'react'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; const createComplexSchema = z.object({ complexName: z .string() .trim() .min(3, 'El nombre del complejo debe tener al menos 3 caracteres.') .max(120, 'El nombre del complejo no puede superar los 120 caracteres.'), physicalAddress: z .string() .trim() .min(5, 'La direccion debe tener al menos 5 caracteres.') .max(200, 'La direccion no puede superar los 200 caracteres.'), city: z.string().trim().max(100, 'La ciudad no puede superar los 100 caracteres.').optional(), state: z .string() .trim() .max(100, 'La provincia/estado no puede superar los 100 caracteres.') .optional(), country: z.string().trim().max(100, 'El país no puede superar los 100 caracteres.').optional(), planCode: z .string() .trim() .min(1, 'El planCode no puede estar vacío.') .max(10, 'El planCode no puede superar los 10 caracteres.') .optional(), }); type CreateComplexForm = z.infer; export function CreateComplexPage() { const navigate = useNavigate(); const { user } = useAuth(); const [plans, setPlans] = useState([]); const [errorMessage, setErrorMessage] = useState(null); const [isSubmitting, setIsSubmitting] = useState(false); const form = useForm({ resolver: zodResolver(createComplexSchema), mode: 'onChange', defaultValues: { complexName: '', physicalAddress: '', city: '', state: '', country: '', planCode: '', }, }); useEffect(() => { void (async () => { try { const result = await apiClient.plans.list(); setPlans(result); } catch { setPlans([]); } })(); }, []); const onSubmit = async (values: CreateComplexForm) => { setErrorMessage(null); setIsSubmitting(true); try { const pendingEmail = sessionStorage.getItem('pending-signup-email'); const payload: Parameters[0] = { complexName: values.complexName, physicalAddress: values.physicalAddress, city: values.city, state: values.state, country: values.country, planCode: values.planCode, }; if (pendingEmail) { payload.adminEmail = pendingEmail; } const complex = await apiClient.complexes.create(payload); sessionStorage.removeItem('pending-signup-email'); sessionStorage.removeItem('pending-signup-userId'); setCurrentComplexSlug(complex.complexSlug); await navigate({ to: '/complex/$slug/edit', params: { slug: complex.complexSlug }, }); } catch { setErrorMessage('No pudimos crear el complejo. Intenta nuevamente.'); } finally { setIsSubmitting(false); } }; return (

Crear tu complejo

Completá los datos de tu complejo para comenzar.

{user?.email && ( Email )} Nombre del complejo Dirección física Ciudad Provincia/Estado País Plan {plans.length === 0 && (

Carga planes en la base para continuar.

)}
{errorMessage &&

{errorMessage}

}
); }