diff --git a/apps/app/src/pages/events/[id]/timetable/index.vue b/apps/app/src/pages/events/[id]/timetable/index.vue index 246245c5..79d1d70d 100644 --- a/apps/app/src/pages/events/[id]/timetable/index.vue +++ b/apps/app/src/pages/events/[id]/timetable/index.vue @@ -51,7 +51,12 @@ const eventIdRef = eventId const { data: eventDetail } = useEventDetail(orgId, eventId) const { data: subEvents } = useEventChildren(orgId, eventId) -const isFlatEvent = computed(() => !subEvents.value || subEvents.value.length === 0) +// Authoritative once eventDetail loads (single-row endpoint, fast). +// Pre-load it returns `false`, which keeps dayOptions empty until we +// actually know whether this is a flat event or a festival — avoids the +// `?day={festival_id}` URL flicker that occurred when subEvents was +// still pending (it was being read as "no children → flat event"). +const isFlatEvent = computed(() => eventDetail.value?.event_type === 'event') const dayOptions = computed(() => { if (isFlatEvent.value && eventDetail.value)