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,
})