1+ // Search functionality
2+ const searchInput = document . getElementById ( 'searchInput' ) ;
3+ let searchTimeout ;
4+
5+ searchInput ?. addEventListener ( 'input' , function ( ) {
6+ clearTimeout ( searchTimeout ) ;
7+ searchTimeout = setTimeout ( ( ) => {
8+ const searchValue = this . value . trim ( ) ;
9+ const urlParams = new URLSearchParams ( window . location . search ) ;
10+
11+ if ( searchValue ) {
12+ urlParams . set ( 'search' , searchValue ) ;
13+ } else {
14+ urlParams . delete ( 'search' ) ;
15+ }
16+
17+ urlParams . delete ( 'page' ) ; // Reset to page 1
18+ window . location . search = urlParams . toString ( ) ;
19+ } , 500 ) ; // Debounce search
20+ } ) ;
21+
22+ // Filter tabs
23+ document . querySelectorAll ( '.filter-tab' ) . forEach ( tab => {
24+ tab . addEventListener ( 'click' , function ( ) {
25+ const status = this . dataset . status ;
26+ const urlParams = new URLSearchParams ( window . location . search ) ;
27+
28+ if ( status ) {
29+ urlParams . set ( 'status' , status ) ;
30+ } else {
31+ urlParams . delete ( 'status' ) ;
32+ }
33+
34+ urlParams . delete ( 'page' ) ; // Reset to page 1
35+ window . location . search = urlParams . toString ( ) ;
36+ } ) ;
37+ } ) ;
38+
39+ // Clear search on Escape key
40+ document . addEventListener ( 'keydown' , function ( e ) {
41+ if ( e . key === 'Escape' && searchInput ) {
42+ searchInput . value = '' ;
43+ const urlParams = new URLSearchParams ( window . location . search ) ;
44+ urlParams . delete ( 'search' ) ;
45+ urlParams . delete ( 'page' ) ;
46+ window . location . search = urlParams . toString ( ) ;
47+ }
48+ } ) ;
0 commit comments