import { useTranslation } from 'react-i18next'; import { MoreHorizontal, CheckCircle, XCircle, MinusCircle } from 'lucide-react'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { Button } from '@/components/ui/button'; import type { CmsInstance, CmsInstanceStatus } from '@/features/cms/services/types'; const STATUS_BADGE_CONFIG: Record< CmsInstanceStatus, { colorClass: string; Icon: React.ComponentType<{ className?: string }> } > = { Available: { colorClass: 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200', Icon: CheckCircle, }, NotAvailable: { colorClass: 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200', Icon: XCircle, }, Inactive: { colorClass: 'bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-300', Icon: MinusCircle, }, }; function formatDate(iso: string | null): string { if (!iso) return '—'; return new Date(iso).toLocaleString(undefined, { dateStyle: 'medium', timeStyle: 'short' }); } interface CmsInstanceListProps { instances: CmsInstance[]; onSetStatus: (instance: CmsInstance) => void; } export function CmsInstanceList({ instances, onSetStatus }: CmsInstanceListProps) { const { t } = useTranslation(); return ( {t('cms.table.name')} {t('cms.table.url')} {t('cms.table.status')} {t('cms.table.lastContact')} {t('cms.table.disableMessage')} {t('cms.table.actions')} {instances.map((instance) => { const { colorClass, Icon } = STATUS_BADGE_CONFIG[instance.status]; return ( {instance.name} {instance.url}
{t(`cms.status.${instance.status}`)}
{formatDate(instance.lastContactedAt)} {instance.disableMessage ?? '—'} onSetStatus(instance)} > {t('cms.actions.setStatus')}
); })}
); }