@@ -10,9 +10,20 @@ export default class extends Route {
1010    } , 
1111    per_page : { 
1212      refreshModel : true 
13+     } , 
14+     search : { 
15+       refreshModel : true 
16+     } , 
17+     sort_dir : { 
18+       refreshModel : true 
19+     } , 
20+     sort_by : { 
21+       refreshModel : true 
1322    } 
1423  } ; 
1524
25+   filterOptions  =  [ ] ; 
26+ 
1627  titleToken ( )  { 
1728    switch  ( this . get ( 'params.event_state' ) )  { 
1829      case  'live' :
@@ -30,13 +41,14 @@ export default class extends Route {
3041    if  ( ! [ 'live' ,  'draft' ,  'past' ] . includes ( eventState ) )  { 
3142      this . replaceWith ( 'events.view' ,  eventState ) ; 
3243    } 
44+ 
3345  } 
3446
3547  async  model ( params )  { 
3648    this . set ( 'params' ,  params ) ; 
37-     let   filterOptions  =  [ ] ; 
49+     const   searchField  =  'name' ; 
3850    if  ( params . event_state  ===  'live' )  { 
39-       filterOptions  =  [ 
51+       this . filterOptions  =  [ 
4052        { 
4153          name  : 'state' , 
4254          op    : 'eq' , 
@@ -67,7 +79,7 @@ export default class extends Route {
6779        } 
6880      ] ; 
6981    }  else  if  ( params . event_state  ===  'past' )  { 
70-       filterOptions  =  [ 
82+       this . filterOptions  =  [ 
7183        { 
7284          name  : 'ends-at' , 
7385          op    : 'lt' , 
@@ -80,21 +92,45 @@ export default class extends Route {
8092        } 
8193      ] ; 
8294    }  else  { 
83-       filterOptions  =  [ 
95+       this . filterOptions  =  [ 
8496        { 
8597          name  : 'state' , 
8698          op    : 'eq' , 
8799          val   : 'draft' 
88100        } 
89101      ] ; 
90102    } 
103+ 
104+     if  ( params . search )  { 
105+       this . filterOptions . pushObject ( { 
106+         name  : searchField , 
107+         op    : 'ilike' , 
108+         val   : `%${ params . search }  
109+       } ) ; 
110+     }  else  { 
111+       this . filterOptions . removeObject ( { 
112+         name  : searchField , 
113+         op    : 'ilike' , 
114+         val   : `%${ params . search }  
115+       } ) ; 
116+     } 
117+ 
118+ 
119+     let  queryString  =  { 
120+       include         : 'tickets,sessions,speakers,owners,organizers,coorganizers,track-organizers,registrars,moderators' , 
121+       filter          : this . filterOptions , 
122+       'page[size]'    : params . per_page  ||  10 , 
123+       'page[number]'  : params . page  ||  4 
124+     } ; 
125+ 
126+     if  ( params . sort_by  &&  params . sort_dir )  { 
127+       queryString . sort  =  `${ params . sort_dir  ===  'ASC'  ? '-'  : '' } ${ params . sort_by }  ; 
128+     } 
129+     else  { 
130+       delete  queryString . sort ; 
131+     } 
91132    return  { 
92-       data : await  this . authManager . currentUser . query ( 'events' ,  { 
93-         include         : 'tickets,sessions,speakers,owners,organizers,coorganizers,track-organizers,registrars,moderators' , 
94-         filter          : filterOptions , 
95-         'page[size]'    : params . per_page  ||  10 , 
96-         'page[number]'  : params . page  ||  4 
97-       } ) 
133+       data : await  this . authManager . currentUser . query ( 'events' ,  queryString ) 
98134    } ; 
99135
100136  } 
0 commit comments