feat: Schedule bookings
This commit is contained in:
@@ -132,6 +132,7 @@ import {
|
||||
} from '@ionic/vue'
|
||||
import { timeOutline, warningOutline } from 'ionicons/icons'
|
||||
import { useAuthStore } from '~/stores/auth'
|
||||
import { toDateToronto } from '~/utils/toronto'
|
||||
import type { Database } from '~/types/supabase'
|
||||
|
||||
type Boat = Database['public']['Tables']['boats']['Row']
|
||||
@@ -143,6 +144,7 @@ definePageMeta({ layout: false })
|
||||
const supabase = useSupabaseClient() as any
|
||||
const auth = useAuthStore()
|
||||
const router = useRouter()
|
||||
const route = useRoute()
|
||||
|
||||
const step = ref<1 | 2>(1)
|
||||
const loadingSlots = ref(false)
|
||||
@@ -180,7 +182,32 @@ interface BoatSlotEntry {
|
||||
|
||||
const availableByBoat = ref<BoatSlotEntry[]>([])
|
||||
|
||||
watch(selectedDate, loadSlots, { immediate: true })
|
||||
// Pre-populate from schedule deep-link: ?boatId=&startTime=&endTime=
|
||||
onMounted(async () => {
|
||||
const { boatId, startTime, endTime } = route.query as Record<string, string>
|
||||
if (boatId && startTime && endTime) {
|
||||
const { data: boat } = await supabase.from('boats').select('*').eq('id', boatId).single()
|
||||
if (boat) {
|
||||
selectedBoat.value = boat as Boat
|
||||
selectedSlot.value = {
|
||||
id: '',
|
||||
boat_id: boatId,
|
||||
start_time: startTime,
|
||||
end_time: endTime,
|
||||
user_id: null,
|
||||
created_at: '',
|
||||
}
|
||||
// Set the date strip to the slot's date so Back returns to correct day
|
||||
selectedDate.value = toDateToronto(new Date(startTime))
|
||||
step.value = 2
|
||||
return
|
||||
}
|
||||
}
|
||||
// Normal flow: load slots for today
|
||||
await loadSlots()
|
||||
})
|
||||
|
||||
watch(selectedDate, loadSlots)
|
||||
|
||||
async function loadSlots() {
|
||||
loadingSlots.value = true
|
||||
|
||||
Reference in New Issue
Block a user