@@ -66,15 +66,25 @@ interface FileDiffProps {
6666 fileChangeIsLoading : boolean
6767 treeData : CommonResultVecMuiTreeNode [ 'data' ]
6868 treeIsLoading : boolean
69+ page : number
70+ hasMoreData : boolean
71+ isBlockingLoading : boolean
72+ onLoadMore : ( ) => void
6973}
7074
71- export default function FileDiff ( { fileChangeData, fileChangeIsLoading, treeData, treeIsLoading } : FileDiffProps ) {
75+ export default function FileDiff ( {
76+ fileChangeData,
77+ fileChangeIsLoading,
78+ treeData,
79+ treeIsLoading,
80+ page,
81+ hasMoreData,
82+ isBlockingLoading,
83+ onLoadMore
84+ } : FileDiffProps ) {
7285 const virtuosoRef = useRef < any > ( null )
7386
74- const [ page , setPage ] = useState ( 1 )
75-
7687 const [ pageDataMap , setPageDataMap ] = useState < Map < number , DiffItem [ ] > > ( new Map ( ) )
77- const [ totalCount , setTotalCount ] = useState ( 0 )
7888
7989 useEffect ( ( ) => {
8090 if ( fileChangeData ?. items && ! fileChangeIsLoading ) {
@@ -86,8 +96,6 @@ export default function FileDiff({ fileChangeData, fileChangeIsLoading, treeData
8696 }
8797 return newMap
8898 } )
89-
90- setTotalCount ( fileChangeData . total )
9199 }
92100 } , [ fileChangeData , fileChangeIsLoading , page ] )
93101
@@ -137,14 +145,10 @@ export default function FileDiff({ fileChangeData, fileChangeIsLoading, treeData
137145 [ parsedFiles ]
138146 )
139147
140- const hasMoreData = useMemo ( ( ) => {
141- return fileDiff . length < totalCount
142- } , [ fileDiff . length , totalCount ] )
143-
144148 const loadMoreDiffs = useCallback ( ( ) => {
145149 if ( fileChangeIsLoading || ! hasMoreData ) return
146- setPage ( ( prev ) => prev + 1 )
147- } , [ fileChangeIsLoading , hasMoreData ] )
150+ onLoadMore ( )
151+ } , [ fileChangeIsLoading , hasMoreData , onLoadMore ] )
148152
149153 useEffect ( ( ) => {
150154 setExpandedMap ( Object . fromEntries ( diffFiles . map ( ( f ) => [ f . path , false ] ) ) )
@@ -214,13 +218,21 @@ export default function FileDiff({ fileChangeData, fileChangeIsLoading, treeData
214218 }
215219
216220 return (
217- < div className = 'mt-3 flex font-sans' >
221+ < div className = 'relative mt-3 flex font-sans' >
222+ { isBlockingLoading && (
223+ < div className = 'fixed inset-0 z-50 flex items-center justify-center bg-white/60' >
224+ < div className = 'flex items-center rounded-md bg-white px-3 py-2 shadow' >
225+ < LoadingSpinner />
226+ < span className = 'ml-2 text-sm text-gray-600' > Loading diffs...</ span >
227+ </ div >
228+ </ div >
229+ ) }
218230 < div className = 'sticky top-5 h-[80vh] w-[300px] overflow-y-auto rounded-lg p-2' >
219231 < FileTree treeData = { treeData } treeDataLoading = { treeIsLoading } onFileClick = { scrollToFile } />
220232 </ div >
221233
222234 < div className = 'h-full w-full flex-1 px-4' >
223- { totalCount === 0 && ! fileChangeIsLoading ? (
235+ { fileDiff . length === 0 && ! fileChangeIsLoading && page === 1 ? (
224236 < div className = 'flex h-[85vh] items-center justify-center' > No File Changed</ div >
225237 ) : (
226238 < Virtuoso
@@ -229,7 +241,7 @@ export default function FileDiff({ fileChangeData, fileChangeIsLoading, treeData
229241 totalCount = { parsedFiles . length }
230242 itemContent = { DiffItem }
231243 endReached = { loadMoreDiffs }
232- components = { { Footer : ( ) => fileChangeIsLoading && < LoadingSpinner /> } }
244+ components = { { Footer : ( ) => null } }
233245 increaseViewportBy = { 350 }
234246 />
235247 ) }
0 commit comments