@@ -7,12 +7,13 @@ import { useEffect, useState } from 'react';
77import { useReposState , getRepos } from '@/store/repositories' ;
88import { useRepoFilesState , getRepoFiles } from '@/store/repofiles' ;
99import { Repo } from '@/types' ;
10- import { DataTable } from '@/components/ui/DataTable' ;
11- import columns from '@/components/views/ColumnDef' ;
1210import { Input } from '@/components/ui/input' ;
1311import { useAuth } from '@/context/AuthProvider' ;
12+ import { CardContent , CardHeader } from '@/components/ui/card' ;
13+ import timeAgo from '@/timeAgo' ;
14+ import moment from 'moment' ;
1415
15- // type FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] };
16+ type FileTreeItem = { name : string } | { name : string ; items : FileTreeItem [ ] } ;
1617
1718export function RepoViewPage ( ) {
1819 const { user, repoPath } = useParams < { user : string ; repoPath : string } > ( ) ;
@@ -30,12 +31,12 @@ export function RepoViewPage() {
3031
3132 useEffect ( ( ) => {
3233 if ( ! user || ! repoPath ) return ;
33- getRepoFiles ( user , repoPath ) ;
34- } , [ user ] ) ;
34+ getRepoFiles ( searchQuery , user , repoPath ) ;
35+ } , [ user , searchQuery ] ) ;
3536
3637 return (
3738 < div className = "flex-grow overflow-auto" >
38- < div className = "flex flex-row py-2 px-2 items-center justify-between mx-3" >
39+ < div className = "flex flex-row py-2 px-4 items-center justify-between mx-3" >
3940 < Input
4041 placeholder = "Filter by name..."
4142 className = "placeholder:text-muted-foreground flex h-6 w-full rounded-md bg-transparent py-2 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50"
@@ -48,25 +49,31 @@ export function RepoViewPage() {
4849 ) }
4950 </ div >
5051
51- < div className = "flex flex-row py-2 px-2 items-center justify-between mx-3" >
52- < div className = "text-sm" > Author: { repoFiles . author . get ( ) } </ div >
53- < div className = "text-sm" > Email: { repoFiles . email . get ( ) } </ div >
54- < div className = "text-sm" > Date: { repoFiles . date . get ( ) } </ div >
55- < div className = "text-sm" > Hash: { repoFiles . hash . get ( ) } </ div >
52+ < div className = "flex flex-row py-2 px-4 items-center justify-between mx-3" >
53+ < div className = "text-sm hover:text-ring" > { repoFiles . author . get ( ) } </ div >
54+ < div className = "text-sm hover:text-ring" > { repoFiles . email . get ( ) } </ div >
55+ < div className = "text-sm hover:text-ring" title = { repoFiles . date . get ( ) } >
56+ Last commit: { timeAgo . format ( moment ( repoFiles . date . get ( ) ) . toDate ( ) , 'mini' ) }
57+ </ div >
58+ < div className = "text-sm hover:text-ring" > Last hash: { repoFiles . hash . get ( ) } </ div >
5659 </ div >
57- < div className = "grid grid-cols-1 " >
58- < div className = "mx-3 " >
60+ < div className = "grid grid-cols-2 " >
61+ < CardContent className = "px-4 " >
5962 < div className = "flex flex-col gap-1" >
60- { ( repoFiles . files . get ( ) || [ ] ) . map ( ( item ) => renderItem ( item ) ) }
63+ { repoFiles . files
64+ . get ( )
65+ . toSorted ( ( a : any , b : any ) => b . items ?. length - a . items ?. length )
66+ . map ( ( item ) => renderItem ( item as FileTreeItem ) ) }
6167 </ div >
62- </ div >
68+ < div className = "flex flex-col gap-1" > </ div >
69+ </ CardContent >
6370 </ div >
6471 </ div >
6572 ) ;
6673}
6774
68- const renderItem = ( fileItem : any ) => {
69- if ( 'items' in fileItem ) {
75+ const renderItem = ( fileItem : FileTreeItem ) => {
76+ if ( 'items' in fileItem && fileItem . items . length > 0 ) {
7077 return (
7178 < Collapsible key = { fileItem . name } >
7279 < CollapsibleTrigger asChild >
0 commit comments