11'use client' ;
22
3- import { getFileSource } from "@/app/api/(client)/client" ;
4- import { VscodeFileIcon } from "@/app/components/vscodeFileIcon" ;
53import { ScrollArea } from "@/components/ui/scroll-area" ;
6- import { Skeleton } from "@/components/ui/skeleton" ;
7- import { isServiceError , unwrapServiceError } from "@/lib/utils" ;
8- import { useQuery } from "@tanstack/react-query" ;
9- import { ReactCodeMirrorRef } from '@uiw/react-codemirror' ;
4+ import { ReactCodeMirrorRef } from "@uiw/react-codemirror" ;
105import { memo , useCallback , useEffect , useMemo , useRef , useState } from "react" ;
116import scrollIntoView from 'scroll-into-view-if-needed' ;
127import { FileReference , FileSource , Reference } from "../../types" ;
138import { tryResolveFileReference } from '../../utils' ;
14- import { ReferencedFileSourceListItem } from "./referencedFileSourceListItem " ;
9+ import { ReferencedFileSourceListItemContainer } from "./referencedFileSourceListItemContainer " ;
1510import isEqual from 'fast-deep-equal/react' ;
1611
1712interface ReferencedSourcesListViewProps {
@@ -200,7 +195,7 @@ const ReferencedSourcesListViewComponent = ({
200195 const selectedReferenceInFile = referencesInFile . some ( r => r . id === selectedReference ?. id ) ? selectedReference : undefined ;
201196
202197 return (
203- < FileSourceItem
198+ < ReferencedFileSourceListItemContainer
204199 key = { fileId }
205200 fileId = { fileId }
206201 fileSource = { fileSource }
@@ -222,101 +217,3 @@ const ReferencedSourcesListViewComponent = ({
222217
223218// Memoize to prevent unnecessary re-renders
224219export const ReferencedSourcesListView = memo ( ReferencedSourcesListViewComponent , isEqual ) ;
225-
226- interface FileSourceItemProps {
227- fileId : string ;
228- fileSource : FileSource ;
229- references : FileReference [ ] ;
230- hoveredReference ?: Reference ;
231- selectedReference ?: Reference ;
232- onHoveredReferenceChanged : ( reference ?: Reference ) => void ;
233- onSelectedReferenceChanged : ( reference ?: Reference ) => void ;
234- isExpanded : boolean ;
235- onExpandedChanged : ( fileId : string , isExpanded : boolean ) => void ;
236- onEditorRef : ( fileId : string , ref : ReactCodeMirrorRef | null ) => void ;
237- }
238-
239- const FileSourceItemComponent = ( {
240- fileId,
241- fileSource,
242- references,
243- hoveredReference,
244- selectedReference,
245- onHoveredReferenceChanged,
246- onSelectedReferenceChanged,
247- isExpanded,
248- onExpandedChanged,
249- onEditorRef,
250- } : FileSourceItemProps ) => {
251- const fileName = fileSource . path . split ( '/' ) . pop ( ) ?? fileSource . path ;
252-
253- const { data, isLoading, isError, error } = useQuery ( {
254- queryKey : [ 'fileSource' , fileSource . path , fileSource . repo , fileSource . revision ] ,
255- queryFn : ( ) => unwrapServiceError ( getFileSource ( {
256- path : fileSource . path ,
257- repo : fileSource . repo ,
258- ref : fileSource . revision ,
259- } ) ) ,
260- staleTime : Infinity ,
261- } ) ;
262-
263- const handleRef = useCallback ( ( ref : ReactCodeMirrorRef | null ) => {
264- onEditorRef ( fileId , ref ) ;
265- } , [ fileId , onEditorRef ] ) ;
266-
267- const handleExpandedChanged = useCallback ( ( isExpanded : boolean ) => {
268- onExpandedChanged ( fileId , isExpanded ) ;
269- } , [ fileId , onExpandedChanged ] ) ;
270-
271- if ( isLoading ) {
272- return (
273- < div className = "space-y-2" >
274- < div className = "flex items-center gap-2 p-2" >
275- < VscodeFileIcon fileName = { fileName } className = "w-4 h-4" />
276- < span className = "text-sm font-medium" > { fileName } </ span >
277- </ div >
278- < Skeleton className = "h-48 w-full" />
279- </ div >
280- ) ;
281- }
282-
283- if ( isError || isServiceError ( data ) ) {
284- return (
285- < div className = "space-y-2" >
286- < div className = "flex items-center gap-2 p-2" >
287- < VscodeFileIcon fileName = { fileName } className = "w-4 h-4" />
288- < span className = "text-sm font-medium" > { fileName } </ span >
289- </ div >
290- < div className = "p-4 text-sm text-destructive bg-destructive/10 rounded border" >
291- Failed to load file: { isServiceError ( data ) ? data . message : error ?. message ?? 'Unknown error' }
292- </ div >
293- </ div >
294- ) ;
295- }
296-
297- const fileData = data ! ;
298-
299- return (
300- < ReferencedFileSourceListItem
301- id = { fileId }
302- code = { fileData . source }
303- language = { fileData . language }
304- revision = { fileSource . revision }
305- repoName = { fileSource . repo }
306- repoCodeHostType = { fileData . repoCodeHostType }
307- repoDisplayName = { fileData . repoDisplayName }
308- repoWebUrl = { fileData . repoExternalWebUrl }
309- fileName = { fileData . path }
310- references = { references }
311- ref = { handleRef }
312- onSelectedReferenceChanged = { onSelectedReferenceChanged }
313- onHoveredReferenceChanged = { onHoveredReferenceChanged }
314- selectedReference = { selectedReference }
315- hoveredReference = { hoveredReference }
316- isExpanded = { isExpanded }
317- onExpandedChanged = { handleExpandedChanged }
318- />
319- ) ;
320- } ;
321-
322- const FileSourceItem = memo ( FileSourceItemComponent , isEqual ) ;
0 commit comments