diff --git a/frontend/src/components/settings/git/status/ChangeTable.jsx b/frontend/src/components/settings/git/status/ChangeTable.jsx index 9c5b1e9..52e0c43 100644 --- a/frontend/src/components/settings/git/status/ChangeTable.jsx +++ b/frontend/src/components/settings/git/status/ChangeTable.jsx @@ -17,8 +17,15 @@ const ChangeTable = ({ fetchGitStatus }) => { const sortedChanges = changesArray => { - if (isMergeConflict || !sortConfig?.key) return changesArray; - return [...changesArray].sort((a, b) => { + // Filter out items with unknown status/type + const validChanges = changesArray.filter( + change => + change && change.type && change.type.toLowerCase() !== 'unknown' + ); + + if (isMergeConflict || !sortConfig?.key) return validChanges; + + return [...validChanges].sort((a, b) => { if (a[sortConfig.key] < b[sortConfig.key]) { return sortConfig.direction === 'ascending' ? -1 : 1; } diff --git a/frontend/src/hooks/useChangeParser.js b/frontend/src/hooks/useChangeParser.js index 9a53bdf..c8bba62 100644 --- a/frontend/src/hooks/useChangeParser.js +++ b/frontend/src/hooks/useChangeParser.js @@ -98,19 +98,30 @@ export default function useChangeParser(changes) { const parsedChanges = useMemo(() => { if (!Array.isArray(changes)) return []; - return changes.map((item, index) => { - const changeType = - item.change.charAt(0).toUpperCase() + - item.change.slice(1).toLowerCase(); + // Filter out entries without a valid change property before mapping + return changes + .filter( + item => + item && + typeof item.change === 'string' && + item.change.length > 0 + ) + .map((item, index) => { + const changeType = + item.change.charAt(0).toUpperCase() + + item.change.slice(1).toLowerCase(); - return { - id: `${item.key}-${index}-${item.change}`, - changeType, - key: formatKey(item.key), - from: parseValue(item.from), - to: parseValue(item.to ?? item.value) - }; - }); + return { + id: `${item.key}-${index}-${item.change}`, + changeType, + key: + typeof item.key === 'string' + ? formatKey(item.key) + : String(item.key || ''), + from: parseValue(item.from), + to: parseValue(item.to ?? item.value) + }; + }); }, [changes]); return parsedChanges;