import React, {useState} from 'react';
import {
Eye,
Plus,
MinusCircle,
Edit,
GitBranch,
AlertTriangle,
Code,
FileText,
Settings,
File
} from 'lucide-react';
import Tooltip from '../../ui/Tooltip';
import ViewChanges from './modal/ViewChanges';
const ChangeRow = ({change, isSelected, onSelect, isIncoming, isDevMode}) => {
const [showChanges, setShowChanges] = useState(false);
const getStatusIcon = status => {
switch (status) {
case 'Untracked':
return ;
case 'Staged (New)':
return ;
case 'Staged (Modified)':
case 'Modified':
return ;
case 'Deleted':
return ;
case 'Deleted (Staged)':
return ;
case 'Renamed':
return ;
default:
return ;
}
};
const getTypeIcon = type => {
switch (type) {
case 'Regex Pattern':
return ;
case 'Custom Format':
return ;
case 'Quality Profile':
return ;
default:
return ;
}
};
const handleViewChanges = e => {
e.stopPropagation();
setShowChanges(true);
};
const handleRowClick = () => {
if (!isIncoming && onSelect) {
onSelect(change.file_path);
}
};
// Determine row classes based on whether it's incoming or selected
const rowClasses = `border-t border-gray-600 ${
isIncoming
? 'cursor-default'
: `cursor-pointer ${
isSelected ? 'bg-blue-700 bg-opacity-30' : 'hover:bg-gray-700'
}`
}`;
return (
<>
{getStatusIcon(change.status)}
{change.staged
? `${change.status} (Staged)`
: change.status}
{isIncoming && change.will_conflict && (
)}
|
{getTypeIcon(change.type)}
{change.type}
|
{isIncoming ? (
change.incoming_name &&
change.incoming_name !== change.local_name ? (
<>
Local:{' '}
{change.local_name || 'Unnamed'}
Incoming:{' '}
{change.incoming_name || 'Unnamed'}
>
) : (
change.local_name ||
change.incoming_name ||
'Unnamed'
)
) : change.outgoing_name &&
change.outgoing_name !== change.prior_name ? (
<>
Prior:{' '}
{change.prior_name || 'Unnamed'}
Outgoing:{' '}
{change.outgoing_name || 'Unnamed'}
>
) : (
change.outgoing_name || change.prior_name || 'Unnamed'
)}
|
|
setShowChanges(false)}
change={change}
isIncoming={isIncoming}
isDevMode={isDevMode}
/>
>
);
};
export default ChangeRow;