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