import { Navigate, createFileRoute } from '@tanstack/react-router'
import { m } from '@/i18n/messages'
import { useLocale, getLocale } from '@/i18n/config'
import { asI18n } from '@pikku/react'
import {
Badge,
Box,
Button,
Container,
Paper,
Progress,
Stack,
Table,
Text,
Title,
} from '@pikku/mantine/core'
import { BrandHeader } from '../components/Brand'
import { RequireAuth, useAuth } from '../auth'
import { usePageTitle } from '../components/AppLayout'
import { fmtDate } from '../lib/dates'
import { usePikkuQuery } from '@project/functions-sdk/pikku/api.gen'
function MarketingPage({ hero, sections }: { hero: React.ReactNode; sections: React.ReactNode[] }) {
return (
{hero}
{sections}
)
}
function IndexPage() {
useLocale()
return (
)}
sections={[
{m.common__pages__launchpad__title()}
{m.common__pages__launchpad__client__title()}
{m.common__pages__launchpad__client__body()}
{m.common__pages__launchpad__availability__title()}
{m.common__pages__launchpad__availability__body()}
{m.common__pages__launchpad__admin__title()}
{m.common__pages__launchpad__admin__body()}
{m.common__pages__launchpad__events__title()}
{m.common__pages__launchpad__events__body()}
{m.common__pages__launchpad__enquiry__title()}
{m.common__pages__launchpad__enquiry__body()}
,
]}
/>
)
}
function ClientOverview() {
useLocale()
usePageTitle(m.common__pages__client__title())
const { data, isLoading, error } = usePikkuQuery('getClientOverview', null)
if (isLoading && !data) {
return {m.common__states__loading()}
}
if (error && !data) {
return {m.common__states__error()}
}
if (!data) return null
return (
{m.common__pages__client__title()}
{m.common__brand__name()}
{data.clients.length > 0 && (
{asI18n(data.clients.map((client) => client.name).join(', '))}
)}
{m.common__pages__client__upcoming()}
{data.upcomingBookings.length === 0 ? (
{m.common__pages__client__no_upcoming()}
) : (
data.upcomingBookings.map((booking) => (
{asI18n(`${booking.eventName}`)}
{asI18n(`${fmtDate(booking.startDate, getLocale())} - ${fmtDate(booking.endDate, getLocale())}`)}
{booking.isCurrentEvent && (
{m.common__pages__client__current_badge()}
)}
{booking.expectedPersons
? m.common__pages__client__participants_count({
count: booking.participantCount,
target: booking.expectedPersons,
})
: m.common__pages__client__participants_count_unknown({
count: booking.participantCount,
})}
{m.common__pages__client__completeness()}
))
)}
{m.common__pages__client__recent_invoices()}
{data.recentInvoices.length === 0 ? (
{m.common__pages__client__no_invoices()}
) : (
{m.common__pages__client__invoice_cols__booking()}
{m.common__pages__client__invoice_cols__number()}
{m.common__pages__client__invoice_cols__kind()}
{m.common__pages__client__invoice_cols__amount()}
{m.common__pages__client__invoice_cols__status()}
{m.common__pages__client__invoice_cols__issued()}
{data.recentInvoices.map((invoice) => (
{invoice.bookingName}
{invoice.pdfUrl ? (
) : (
invoice.invoiceNumber
)}
{invoice.kind}
{(invoice.amountCents / 100).toFixed(2)} €
{invoice.status}
{fmtDate(invoice.issuedOn, getLocale())}
))}
)}
)
}
function Dashboard() {
const { role } = useAuth()
if (role === 'admin' || role === 'owner') return
if (role === 'client') return
return
}
function IndexRoute() {
return (
)
}
export const Route = createFileRoute('/')({
component: IndexRoute,
})