@@ -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,22 +92,44 @@ 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+ if ( params . search ) {
104+ this . filterOptions . pushObject ( {
105+ name : searchField ,
106+ op : 'ilike' ,
107+ val : `%${ params . search } %`
108+ } ) ;
109+ } else {
110+ this . filterOptions . removeObject ( {
111+ name : searchField ,
112+ op : 'ilike' ,
113+ val : `%${ params . search } %`
114+ } ) ;
115+ }
91116
117+
118+ let queryString = {
119+ include : 'tickets,sessions,speakers,organizers,coorganizers,track-organizers,registrars,moderators' ,
120+ filter : this . filterOptions ,
121+ 'page[size]' : params . per_page || 10 ,
122+ 'page[number]' : params . page || 4
123+ } ;
124+
125+ if ( params . sort_by && params . sort_dir ) {
126+ queryString . sort = `${ params . sort_dir === 'ASC' ? '-' : '' } ${ params . sort_by } ` ;
127+ }
128+ else {
129+ delete queryString . sort ;
130+ }
92131 return {
93- data : await this . authManager . currentUser . query ( 'events' , {
94- include : 'tickets,sessions,speakers,organizers,coorganizers,track-organizers,registrars,moderators' ,
95- filter : filterOptions ,
96- 'page[size]' : params . per_page || 10 ,
97- 'page[number]' : params . page || 4
98- } )
132+ data : await this . authManager . currentUser . query ( 'events' , queryString )
99133 } ;
100134
101135 }
0 commit comments