import { Link, createFileRoute } from '@tanstack/react-router' import { m } from '@/i18n/messages' import { bookingStatus } from '@/i18n/i18n-enum.gen' import { useLocale, getLocale } from '@/i18n/config' import { asI18n } from '@pikku/react' import { Box, Container, Group, Paper, Stack, Text } from '@pikku/mantine/core' import { usePikkuQuery } from '@project/functions-sdk/pikku/api.gen' import { usePageTitle } from '../components/AppLayout' import { PublicShell } from '../components/PublicShell' import { BOOKING_STATUS, type BookingStatus } from '../lib/status' import { fmtDateShort } from '../lib/dates' const COLUMNS: BookingStatus[] = ['enquiry', 'reserved', 'confirmed', 'ended', 'cancelled'] type Booking = { bookingId: string eventName: string startDate: Date endDate: Date status: string clientName: string isStammgruppe: boolean depositPaid: boolean hasDeposit: boolean halfHouse: boolean } function BookingCard({ booking, locale }: { booking: Booking; locale: string }) { useLocale() const palette = BOOKING_STATUS[booking.status as BookingStatus] return ( {asI18n(`${booking.eventName}`)} {booking.isStammgruppe && ( {asI18n('★')} )} {asI18n(`${booking.clientName}`)} {asI18n(`${fmtDateShort(booking.startDate, locale)} – ${fmtDateShort(booking.endDate, locale)}`)} {booking.halfHouse && ( {asI18n('½')} )} {booking.hasDeposit && ( {(booking.depositPaid ? m.common__pages__admin__bookings__deposit__paid : m.common__pages__admin__bookings__deposit__outstanding)()} )} ) } function KanbanInner() { useLocale() usePageTitle(m.common__pages__kanban__title()) const { data, isLoading, error } = usePikkuQuery('getAdminBookings', { venueSlug: 'drawehn' }) if (isLoading) return {m.common__states__loading()} if (error) return {m.common__states__error()} if (!data) return null const byStatus = new Map() for (const col of COLUMNS) byStatus.set(col, []) for (const b of data.bookings) { const col = b.status as BookingStatus if (byStatus.has(col)) byStatus.get(col)!.push({ ...b, halfHouse: !!b.halfHouse } as unknown as Booking) } return ( {COLUMNS.map((col) => { const palette = BOOKING_STATUS[col] const cards = byStatus.get(col) ?? [] return ( {bookingStatus[col]()} {cards.length} {cards.length === 0 ? ( {asI18n('—')} ) : ( cards.map((b) => ( )) )} ) })} ) } function KanbanPage() { return ( ) } export const Route = createFileRoute('/kanban')({ component: KanbanPage, })