File tree Expand file tree Collapse file tree 1 file changed +20
-5
lines changed Expand file tree Collapse file tree 1 file changed +20
-5
lines changed Original file line number Diff line number Diff line change @@ -21,21 +21,36 @@ const Loader = () => (
21
21
export const RepositoryList = ( { repositories } : RepositoryListProps ) => {
22
22
const itemsPerScroll = 15 ;
23
23
const [ items , setItems ] = useState ( itemsPerScroll ) ;
24
+ const [ filter , setFilter ] = useState ( "" ) ;
25
+
26
+ const filteredRepositories = repositories . filter ( ( repository ) => {
27
+ // Check if any property of the RepositoryItem matches the filter value
28
+ return Object . values ( repository ) . some ( ( value ) => {
29
+ if ( value === null ) {
30
+ return false ;
31
+ }
32
+ return value . toString ( ) . toLowerCase ( ) . includes ( filter . toLowerCase ( ) ) ;
33
+ } ) ;
34
+ } ) ;
24
35
25
36
return (
26
37
< main className = "grow" >
27
38
< div className = "p-4 w-full" >
39
+ < input
40
+ type = "text"
41
+ value = { filter }
42
+ onChange = { ( e ) => setFilter ( e . target . value ) }
43
+ placeholder = "Search Repositories"
44
+ className = "border rounded-sm p-2 mb-4"
45
+ />
28
46
< InfiniteScroll
29
47
dataLength = { items }
30
48
next = { ( ) => setItems ( items + itemsPerScroll ) }
31
- hasMore = { items < repositories . length }
49
+ hasMore = { items < filteredRepositories . length }
32
50
loader = { < Loader /> }
33
51
>
34
- { repositories . slice ( 0 , items ) . map ( ( repository ) => {
35
- // NOTE - We sometimes get duplicate values back from GitHub API
36
- // meaning we can't simply rely on the id as the key
52
+ { filteredRepositories . slice ( 0 , items ) . map ( ( repository ) => {
37
53
const key = `${ repository . id } _${ new Date ( ) . getTime ( ) } _${ Math . random ( ) } ` ;
38
-
39
54
return < RepositoryItem key = { key } repository = { repository } /> ;
40
55
} ) }
41
56
</ InfiniteScroll >
You can’t perform that action at this time.
0 commit comments