diff --git a/src/hooks/useReservationForm.ts b/src/hooks/useReservationForm.ts index ba5a24b..046d08d 100644 --- a/src/hooks/useReservationForm.ts +++ b/src/hooks/useReservationForm.ts @@ -1,6 +1,8 @@ -import { useEffect, useState, useCallback } from 'react' +import { useEffect, useState, useCallback, useRef } from 'react' import { catalogoService } from '@/services/catalogoService' import type { Database } from '@/types/database' +import type { PrefillData } from '@/lib/prefill' +import { prefillSimpleFields } from '@/lib/prefill' type Marca = Database['reserva_hotel']['Tables']['marcas']['Row'] type Unidade = Database['reserva_hotel']['Tables']['unidades']['Row'] @@ -33,8 +35,11 @@ const empty: ReservationFormState = { observacao: '', } -export function useReservationForm() { - const [form, setForm] = useState(empty) +export function useReservationForm(initialPrefill?: PrefillData) { + const [form, setForm] = useState(() => ({ + ...empty, + ...prefillSimpleFields(initialPrefill ?? {}), + })) const [marcas, setMarcas] = useState([]) const [unidades, setUnidades] = useState([]) const [preco, setPreco] = useState(null) @@ -42,6 +47,9 @@ export function useReservationForm() { const [loading, setLoading] = useState(false) const [error, setError] = useState(null) + const marcaPrefillAppliedRef = useRef(false) + const unidadePrefillAppliedRef = useRef(false) + useEffect(() => { catalogoService .listMarcas() @@ -82,6 +90,42 @@ export function useReservationForm() { .catch((err: Error) => setError(err.message)) }, [form.unidadeId, form.categoria]) + // Resolve prefill: marcaNome -> marcaId quando marcas carregam + useEffect(() => { + if (marcaPrefillAppliedRef.current) return + if (!initialPrefill?.marcaNome) return + if (marcas.length === 0) return + + const marca = marcas.find( + (m) => m.nome.toLowerCase() === initialPrefill.marcaNome!.toLowerCase() + ) + if (marca) { + // Usa setForm direto pra NÃO disparar o reset em cascata do update() + setForm((prev) => ({ ...prev, marcaId: marca.id })) + } + marcaPrefillAppliedRef.current = true + }, [marcas, initialPrefill]) + + // Resolve prefill: unidadeNome -> unidadeId + seta categoria/permanencia quando unidades carregam + useEffect(() => { + if (unidadePrefillAppliedRef.current) return + if (!initialPrefill?.unidadeNome) return + if (unidades.length === 0) return + + const unidade = unidades.find( + (u) => u.nome.toLowerCase() === initialPrefill.unidadeNome!.toLowerCase() + ) + if (unidade) { + setForm((prev) => ({ + ...prev, + unidadeId: unidade.id, + permanencia: initialPrefill.permanencia ?? prev.permanencia, + categoria: initialPrefill.categoria ?? prev.categoria, + })) + } + unidadePrefillAppliedRef.current = true + }, [unidades, initialPrefill]) + const update = useCallback(( key: K, value: ReservationFormState[K]