import React, { memo, useState } from 'react'; import { TableRow, TableCell } from '@/components/ui/table'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Eye } from 'lucide-react'; import { IncidentStatusDropdown } from '../IncidentStatusDropdown'; import { IncidentActionsMenu } from '../IncidentActionsMenu'; import { IncidentItem } from '@/services/incident'; import { AssignedUserCell } from './IncidentTableUtils'; interface IncidentTableRowProps { item: IncidentItem; formatDate: (date: string | undefined) => string; getAffectedSystemsArray: (systems: string | undefined) => string[]; onViewDetails?: (incident: IncidentItem) => void; onEditIncident?: (incident: IncidentItem) => void; onIncidentUpdated: () => void; t: (key: string) => string; } export const IncidentTableRow = memo(({ item, formatDate, getAffectedSystemsArray, onViewDetails, onEditIncident, onIncidentUpdated, t }: IncidentTableRowProps) => { // Use local state for optimistic UI updates const [localItem, setLocalItem] = useState(item); // Update local state when props change React.useEffect(() => { setLocalItem(item); }, [item]); // Handle status updates locally const handleStatusUpdated = () => { console.log("Status updated in TableRow, calling onIncidentUpdated"); onIncidentUpdated(); }; return ( onViewDetails && onViewDetails(localItem)} > {localItem.title || localItem.description || '-'} e.stopPropagation()}> {t(localItem.priority?.toLowerCase() || 'low')} {formatDate(localItem.created)}
{getAffectedSystemsArray(localItem.affected_systems).map((system, idx) => ( {system} ))} {getAffectedSystemsArray(localItem.affected_systems).length === 0 && '-'}
{t(localItem.impact?.toLowerCase() || 'low')} e.stopPropagation()}>
{onViewDetails && ( )}
); }); IncidentTableRow.displayName = 'IncidentTableRow';