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;