diff --git a/src/pages/Booking.tsx b/src/pages/Booking.tsx index e9a3365..ba397ac 100644 --- a/src/pages/Booking.tsx +++ b/src/pages/Booking.tsx @@ -45,17 +45,6 @@ export default function Booking() { { label: '24 horas', value: 1440 }, ]; - if (!shop) { - return ( - - Barbearia não encontrada - - ); - } - - const selectedService = shop.services.find((s) => s.id === serviceId); - const selectedBarber = shop.barbers.find((b) => b.id === barberId); - // Geração de datas (próximos 14 dias) const availableDates = useMemo(() => { const dates = []; @@ -72,6 +61,9 @@ export default function Booking() { return dates; }, []); + const selectedService = shop?.services.find((s) => s.id === serviceId); + const selectedBarber = shop?.barbers.find((b) => b.id === barberId); + const generateDefaultSlots = (): string[] => { const slots: string[] = []; for (let hour = 9; hour <= 18; hour++) { @@ -103,6 +95,14 @@ export default function Booking() { }); }, [selectedBarber, date, barberId, appointments, slot]); + if (!shop) { + return ( + + Barbearia não encontrada + + ); + } + const canNext = () => { if (step === 1) return !!serviceId; if (step === 2) return !!barberId; diff --git a/web/src/pages/Booking.tsx b/web/src/pages/Booking.tsx index 89e755b..6304839 100644 --- a/web/src/pages/Booking.tsx +++ b/web/src/pages/Booking.tsx @@ -19,31 +19,6 @@ export default function Booking() { const shop = useMemo(() => shops.find((s) => s.id === id), [shops, id]); - if (!shopsReady || (shops.length === 0 && !shop)) { - return ( -
-
-

A preparar reserva...

-
- ); - } - - if (!shop) { - return ( -
-
- -
-
-

Espaço não encontrado

-

Não foi possível iniciar o agendamento para este estabelecimento.

-
- -
- ); - } // Estados para as escolhas parciais do utilizador const [serviceId, setService] = useState(searchParams.get('service') || ''); const [barberId, setBarber] = useState(''); @@ -63,10 +38,6 @@ export default function Booking() { const selectedService = shop?.services.find((s) => s.id === serviceId); const selectedBarber = shop?.barbers.find((b) => b.id === barberId); - // Avanço automático por efeito colateral (opcional, mas vamos fazer por clique para ser mais explícito) - const nextStep = () => setStep((s) => Math.min(s + 1, 4)); - const prevStep = () => setStep((s) => Math.max(s - 1, 1)); - const generateDefaultSlots = (): string[] => { const slots: string[] = []; for (let hour = 9; hour <= 18; hour++) { @@ -101,6 +72,35 @@ export default function Booking() { }); }, [selectedBarber, date, barberId, appointments, user, waitlists]); + if (!shopsReady || (shops.length === 0 && !shop)) { + return ( +
+
+

A preparar reserva...

+
+ ); + } + + if (!shop) { + return ( +
+
+ +
+
+

Espaço não encontrado

+

Não foi possível iniciar o agendamento para este estabelecimento.

+
+ +
+ ); + } + + // Avanço automático por efeito colateral (opcional, mas vamos fazer por clique para ser mais explícito) + const nextStep = () => setStep((s) => Math.min(s + 1, 4)); + const prevStep = () => setStep((s) => Math.max(s - 1, 1)); const canSubmit = serviceId && barberId && date && slot;