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,16 @@ function getProjectContent(project) {
65
66
}
66
67
67
68
function renderProjectList ( projects ) {
69
+ projectsArea . innerHTML = ""
70
+
71
+ if ( projects . length === 0 ) {
72
+ const noResultsMessage = document . createElement ( "p" ) ;
73
+ noResultsMessage . className = "no-results" ;
74
+ noResultsMessage . innerText = "No results found" ;
75
+ projectsArea . appendChild ( noResultsMessage ) ;
76
+ return ;
77
+ }
78
+
68
79
projects . forEach ( ( project ) => {
69
80
const projectCard = document . createElement ( "div" ) ;
70
81
projectCard . className = "project-card" ;
@@ -86,15 +97,35 @@ function renderProjectList(projects) {
86
97
} ) ;
87
98
}
88
99
100
+ function filterProjects ( query ) {
101
+ const filteredProjects = allProjects . filter ( project =>
102
+ project . name . toLowerCase ( ) . includes ( query . toLowerCase ( ) ) ||
103
+ project . description . toLowerCase ( ) . includes ( query . toLowerCase ( ) )
104
+ ) ;
105
+
106
+ renderProjectList ( filteredProjects ) ;
107
+ }
108
+
89
109
function fetchProjects ( ) {
110
+
90
111
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
- } ) ;
112
+ . then ( ( res ) => res . json ( ) )
113
+ . then ( ( projects ) => {
114
+ allProjects = projects ;
115
+ renderProjectList ( projects ) ;
116
+ searchBar . addEventListener ( "input" , ( ) => {
117
+ const query = searchBar . value ;
118
+ if ( query ) {
119
+ filterProjects ( query )
120
+ }
121
+ else {
122
+ renderProjectList ( projects ) ;
123
+ }
124
+ } ) ;
125
+ } )
126
+ . catch ( ( err ) => {
127
+ console . log ( "Error fetching project data:" , err ) ;
128
+ } ) ;
98
129
}
99
130
100
131
fetchProjects ( ) ;
0 commit comments