1+ import React from 'react' ;
2+ import { MetricData } from '../utils/types' ;
3+ import { getFileIconSrc , formatAge } from '../utils/utils' ;
4+ import { styles } from '../utils/styles' ;
5+
6+ interface FileListProps {
7+ data : MetricData [ ] ;
8+ selectedFile : MetricData | null ;
9+ onFileSelect : ( file : MetricData ) => void ;
10+ }
11+
12+ export const FileList : React . FC < FileListProps > = ( { data, selectedFile, onFileSelect } ) => {
13+ return (
14+ < div style = { styles . sidebar } >
15+ < h2 style = { styles . sidebarTitle } >
16+ < span > 📁</ span >
17+ Analyzed Files
18+ </ h2 >
19+ < div style = { styles . fileList } >
20+ { data . map ( ( item ) => (
21+ < div
22+ key = { item . id }
23+ onClick = { ( ) => onFileSelect ( item ) }
24+ style = { {
25+ ...styles . fileItem ,
26+ ...( selectedFile ?. id === item . id
27+ ? styles . fileItemSelected
28+ : styles . fileItemDefault )
29+ } }
30+ className = "file-item"
31+ onMouseEnter = { ( e ) => {
32+ if ( selectedFile ?. id !== item . id ) {
33+ e . currentTarget . style . background = 'rgba(255, 255, 255, 0.1)' ;
34+ }
35+ } }
36+ onMouseLeave = { ( e ) => {
37+ if ( selectedFile ?. id !== item . id ) {
38+ e . currentTarget . style . background = 'rgba(255, 255, 255, 0.05)' ;
39+ }
40+ } }
41+ >
42+ < div style = { styles . fileInfo } >
43+ < div style = { styles . fileIcon } >
44+ < img
45+ src = { getFileIconSrc ( item . metrics . file_extension ) }
46+ alt = { item . metrics . file_extension }
47+ style = { styles . fileIconImg }
48+ />
49+ </ div >
50+
51+ < div style = { { flex : 1 , minWidth : 0 } } >
52+ < div style = { styles . fileName } title = { item . file_name } >
53+ { item . file_name }
54+ </ div >
55+ < div style = { styles . filePath } title = { item . file_path } >
56+ { item . file_path . replace ( item . file_name , '' ) }
57+ </ div >
58+ < div style = { styles . fileAge } >
59+ < span > 🕒</ span >
60+ { formatAge ( item . age ) }
61+ </ div >
62+ </ div >
63+ </ div >
64+ </ div >
65+ ) ) }
66+ </ div >
67+ </ div >
68+ ) ;
69+ } ;
0 commit comments