import React from 'react'; import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { Card } from '@tamagui/card'; import { YGroup } from '@tamagui/group'; import { ListItem } from '@tamagui/list-item'; import { Progress } from '@tamagui/progress'; import { YStack, XStack } from '@tamagui/stacks'; import { SizableText as Text } from '@tamagui/text'; import { Pressable } from '@tamagui/react-native-web-lite'; import { CheckCircle2, Circle, ChevronDown, ChevronUp } from 'lucide-react'; import { Separator } from 'tamagui'; import { useAdminTheme } from '../theme'; import { ReadinessStep } from '../hooks/useEventReadiness'; import { adminPath } from '../../constants'; import { PillBadge } from './Primitives'; export function SetupChecklist({ steps, title, variant = 'card', }: { steps: ReadinessStep[]; title: string; variant?: 'card' | 'inline'; }) { const theme = useAdminTheme(); const { t } = useTranslation('dashboard'); const navigate = useNavigate(); const isAllComplete = steps.every(s => s.isComplete); const [collapsed, setCollapsed] = React.useState(true); const isInline = variant === 'inline'; const completedCount = steps.filter(s => s.isComplete).length; const totalSteps = steps.length; const progressValue = totalSteps > 0 ? Math.round((completedCount / totalSteps) * 100) : 0; const content = ( setCollapsed(!collapsed)}> {title} {isAllComplete ? ( ) : ( {t('readiness.pending', 'Noch offen')} )} {completedCount}/{steps.length} {collapsed ? : } {!collapsed && ( {steps.map((step, index) => { const isNext = !step.isComplete && steps.slice(0, index).every(s => s.isComplete); return ( navigate(adminPath(step.targetPath))} title={ {step.isComplete ? ( ) : isNext ? ( ) : ( )} {step.label} } subTitle={ step.description && !step.isComplete ? ( {step.description} ) : undefined } iconAfter={isNext ? Start : undefined} /> ); })} )} ); if (isInline) { return content; } return ( {content} ); }