import { useTranslation } from 'react-i18next'; import { extractApiError } from '@/api/client'; import type { C2Callback } from '@/api/types'; interface C2CallbackPickerProps { callbacks: C2Callback[]; isLoading: boolean; isError: boolean; error: unknown; selectedId: number | null; onSelect: (id: number) => void; rowTestId?: string; } export function C2CallbackPicker({ callbacks, isLoading, isError, error, selectedId, onSelect, rowTestId = 'c2-callback-row', }: C2CallbackPickerProps): JSX.Element { const { t } = useTranslation(); if (isLoading) { return

{t('state.loading')}

; } if (isError) { return (

{extractApiError(error, t('state.error.desc'))}

); } if (callbacks.length === 0) { return

{t('c2.modal.picker.empty')}

; } return (
{callbacks.map((cb) => { const isSelected = selectedId === cb.display_id; return ( onSelect(cb.display_id)} onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onSelect(cb.display_id); } }} tabIndex={0} role="button" className={`cursor-pointer border-b border-hairline focus:outline-none focus-visible:ring-2 focus-visible:ring-primary ${ isSelected ? 'bg-primary-soft' : 'hover:bg-cloud' }`} > ); })}
{t('c2.modal.picker.col.displayId')} {t('c2.modal.picker.col.active')} {t('c2.modal.picker.col.host')} {t('c2.modal.picker.col.user')} {t('c2.modal.picker.col.domain')} {t('c2.modal.picker.col.lastCheckin')}
{cb.display_id} {cb.active ? t('c2.modal.picker.status.active') : t('c2.modal.picker.status.inactive')} {cb.host} {cb.user} {cb.domain} {cb.last_checkin}
); }