import React from 'react'; import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { useQuery } from '@tanstack/react-query'; import { Image as ImageIcon, Sparkles, Users } from 'lucide-react'; import { YStack, XStack } from '@tamagui/stacks'; import { SizableText as Text } from '@tamagui/text'; import { MobileCard, CTAButton, PillBadge } from '../components/Primitives'; import { OnboardingShell } from '../components/OnboardingShell'; import { getTenantPackagesOverview, trackOnboarding } from '../../api'; import { useEventContext } from '../../context/EventContext'; import { ADMIN_HOME_PATH, ADMIN_WELCOME_EVENT_PATH, ADMIN_WELCOME_PACKAGES_PATH, adminPath, } from '../../constants'; import { ADMIN_COLORS } from '../theme'; export default function WelcomeLandingPage() { const navigate = useNavigate(); const { t } = useTranslation('onboarding'); const { hasEvents } = useEventContext(); const { data: packagesData } = useQuery({ queryKey: ['mobile', 'onboarding', 'packages-overview'], queryFn: () => getTenantPackagesOverview({ force: true }), staleTime: 60_000, }); const hasActivePackage = Boolean(packagesData?.activePackage) || Boolean(packagesData?.packages?.some((pkg) => pkg.active)); const remainingEvents = packagesData?.activePackage?.remaining_events ?? null; const shouldGoBilling = !hasActivePackage || (remainingEvents !== null && remainingEvents <= 0); const handleSkip = React.useCallback(() => { void trackOnboarding('dismissed'); navigate(ADMIN_HOME_PATH); }, [navigate]); return ( {t('hero.eyebrow', 'Your event, your stage')} {t('hero.title', 'Design the next Fotospiel experience')} {t( 'hero.description', 'In just a few steps you guide guests through a magical photo journey – complete with storytelling, tasks, and a moderated gallery.', )} navigate(shouldGoBilling ? adminPath('/mobile/billing#packages') : ADMIN_WELCOME_EVENT_PATH)} fullWidth={false} /> {hasEvents ? ( navigate(adminPath('/mobile/events'))} fullWidth={false} /> ) : null} ); } function FeatureCard({ icon: Icon, title, body, badge, }: { icon: React.ComponentType<{ size?: number; color?: string }>; title: string; body: string; badge?: string; }) { return ( {title} {badge ? {badge} : null} {body} ); }