@@ -3,6 +3,7 @@ import type { FileDiff } from "@opencode-ai/sdk/client"
33import { useOpenFile } from "../hooks/useOpenFile"
44import { useProject } from "../state/ProjectContext"
55import { normalizePath , toDisplayPath } from "../utils/path"
6+ import { useMergedFileDiffs } from "../hooks/useMergedFileDiffs"
67
78interface FileChangesPanelProps {
89 diffs ?: FileDiff [ ]
@@ -12,23 +13,7 @@ interface FileChangesPanelProps {
1213export function FileChangesPanel ( { diffs = [ ] , fallbackFiles = [ ] } : FileChangesPanelProps ) {
1314 const openFile = useOpenFile ( )
1415 const { worktree } = useProject ( )
15-
16- const mergedDiffs = useMemo ( ( ) => {
17- if ( fallbackFiles . length === 0 ) return diffs
18- // sessionDiff entries (diffs) are primary
19- // Use toDisplayPath to normalize both absolute and relative paths to a consistent format
20- const sessionPaths = new Set ( diffs . map ( ( d ) => toDisplayPath ( d . file , worktree ) ) )
21- const fallbackOnly = fallbackFiles
22- . filter ( ( f ) => ! sessionPaths . has ( toDisplayPath ( f , worktree ) ) )
23- . map ( ( file ) => ( {
24- file,
25- before : "" ,
26- after : "" ,
27- additions : 0 ,
28- deletions : 0 ,
29- } ) )
30- return [ ...diffs , ...fallbackOnly ]
31- } , [ diffs , fallbackFiles , worktree ] )
16+ const mergedDiffs = useMergedFileDiffs ( diffs , fallbackFiles )
3217
3318 const { modified, deleted, totalAdditions, totalDeletions, netChange } = useMemo ( ( ) => {
3419 const sortByBasename = ( a : FileDiff , b : FileDiff ) => {
@@ -75,8 +60,8 @@ export function FileChangesPanel({ diffs = [], fallbackFiles = [] }: FileChanges
7560 < span >
7661 { modified . length } modified • { deleted . length } deleted
7762 </ span >
78- < span className = "text-green-600 dark:text-green-400" > +{ totalAdditions } </ span >
79- < span className = "text-red-600 dark:text-red-400" > -{ totalDeletions } </ span >
63+ { totalAdditions > 0 && < span className = "text-green-600 dark:text-green-400" > +{ totalAdditions } </ span > }
64+ { totalDeletions > 0 && < span className = "text-red-600 dark:text-red-400" > -{ totalDeletions } </ span > }
8065 < span className = "text-gray-500 dark:text-gray-500" >
8166 net { netChange >= 0 ? "+" : "" }
8267 { netChange }
@@ -103,11 +88,11 @@ export function FileChangesPanel({ diffs = [], fallbackFiles = [] }: FileChanges
10388 title = { displayPath || diff . file }
10489 >
10590 { baseName }
106- { ( diff . additions > 0 || diff . deletions > 0 ) && (
107- < >
108- < span className = "text-green-600 dark:text-green-400 text-[10px]" > + { diff . additions } </ span >
109- < span className = "text-red-600 dark:text-red-400 text-[10px]" > - { diff . deletions } </ span >
110- </ >
91+ { diff . additions > 0 && (
92+ < span className = "text-green-600 dark:text-green-400 text-[10px]" > + { diff . additions } </ span >
93+ ) }
94+ { diff . deletions > 0 && (
95+ < span className = "text-red-600 dark:text-red-400 text-[10px]" > - { diff . deletions } </ span >
11196 ) }
11297 </ span >
11398 )
@@ -127,11 +112,11 @@ export function FileChangesPanel({ diffs = [], fallbackFiles = [] }: FileChanges
127112 title = { displayPath || diff . file }
128113 >
129114 { baseName }
130- { ( diff . additions > 0 || diff . deletions > 0 ) && (
131- < >
132- < span className = "text-green-600 dark:text-green-400 text-[10px] no-underline" > + { diff . additions } </ span >
133- < span className = "text-red-600 dark:text-red-400 text-[10px] no-underline" > - { diff . deletions } </ span >
134- </ >
115+ { diff . additions > 0 && (
116+ < span className = "text-green-600 dark:text-green-400 text-[10px] no-underline" > + { diff . additions } </ span >
117+ ) }
118+ { diff . deletions > 0 && (
119+ < span className = "text-red-600 dark:text-red-400 text-[10px] no-underline" > - { diff . deletions } </ span >
135120 ) }
136121 </ span >
137122 )
0 commit comments