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