1
1
const projectsArea = document . querySelector ( ".project-list-area" ) ;
2
-
2
+ const searchBar = document . getElementById ( "search-bar" ) ;
3
+ let allProjects = [ ]
3
4
function getImagePath ( id ) {
4
5
return `public/assets/${ id } .png` ;
5
6
}
@@ -65,6 +66,7 @@ function getProjectContent(project) {
65
66
}
66
67
67
68
function renderProjectList ( projects ) {
69
+ projectsArea . innerHTML = ""
68
70
projects . forEach ( ( project ) => {
69
71
const projectCard = document . createElement ( "div" ) ;
70
72
projectCard . className = "project-card" ;
@@ -86,15 +88,34 @@ function renderProjectList(projects) {
86
88
} ) ;
87
89
}
88
90
91
+ function filterProjects ( query ) {
92
+ const filteredProjects = allProjects . filter ( project =>
93
+ project . name . toLowerCase ( ) . includes ( query . toLowerCase ( ) ) ||
94
+ project . description . toLowerCase ( ) . includes ( query . toLowerCase ( ) )
95
+ ) ;
96
+ renderProjectList ( filteredProjects ) ;
97
+ }
98
+
89
99
function fetchProjects ( ) {
100
+
90
101
fetch ( "./data.json" )
91
- . then ( ( res ) => res . json ( ) )
92
- . then ( ( projects ) => {
93
- renderProjectList ( projects ) ;
94
- } )
95
- . catch ( ( err ) => {
96
- console . log ( "Error fetching project data:" , err ) ;
97
- } ) ;
102
+ . then ( ( res ) => res . json ( ) )
103
+ . then ( ( projects ) => {
104
+ allProjects = projects ;
105
+ renderProjectList ( projects ) ;
106
+ searchBar . addEventListener ( "input" , ( ) => {
107
+ const query = searchBar . value ;
108
+ if ( query ) {
109
+ filterProjects ( query )
110
+ }
111
+ else {
112
+ renderProjectList ( projects ) ;
113
+ }
114
+ } ) ;
115
+ } )
116
+ . catch ( ( err ) => {
117
+ console . log ( "Error fetching project data:" , err ) ;
118
+ } ) ;
98
119
}
99
120
100
121
fetchProjects ( ) ;
0 commit comments