@@ -4,6 +4,7 @@ import { action, computed } from '@ember/object';
44import Component from '@ember/component' ;
55import { tracked } from '@glimmer/tracking' ;
66import { levels } from 'open-event-frontend/utils/dictionary/levels' ;
7+ import { languages } from 'open-event-frontend/utils/dictionary/languages' ;
78
89@classic
910export default class ScheduleMenuFilter extends Component {
@@ -16,8 +17,11 @@ export default class ScheduleMenuFilter extends Component {
1617
1718 @tracked activeTrack = this . router . currentRoute . queryParams . track ? this . router . currentRoute . queryParams . track . split ( ',' ) : [ ] ;
1819
20+ @tracked activeLanguage = this . router . currentRoute . queryParams . language ? this . router . currentRoute . queryParams . language . split ( ',' ) : [ ] ;
21+
1922 @tracked levels = orderBy ( levels , 'position' ) ;
2023
24+ @tracked languageList = [ ] ;
2125
2226 @action
2327 removeActiveSession ( ) {
@@ -29,6 +33,11 @@ export default class ScheduleMenuFilter extends Component {
2933 this . activeSessionLevel = [ ] ;
3034 }
3135
36+ @action
37+ removeActiveLanguage ( ) {
38+ this . activeLanguage = [ ] ;
39+ }
40+
3241 @action
3342 removeActiveRoom ( ) {
3443 this . activeRoom = [ ] ;
@@ -90,12 +99,26 @@ export default class ScheduleMenuFilter extends Component {
9099 this . router . transitionTo ( 'public.sessions' , { queryParams : { 'track' : this . activeTrack } } ) ;
91100 }
92101
102+ @action
103+ languageFilter ( name ) {
104+ this . activeLanguage = this . router . currentRoute . queryParams . language ? this . router . currentRoute . queryParams . language . split ( ',' ) : [ ] ;
105+ if ( this . activeLanguage . includes ( name ) ) {
106+ this . activeLanguage = this . activeLanguage . filter ( language => language !== name ) ;
107+ } else {
108+ this . activeLanguage = [ ...this . activeLanguage , name ] ;
109+ }
110+ this . router . transitionTo ( 'public.sessions' , { queryParams : { 'language' : this . activeLanguage } } ) ;
111+ }
112+
93113 @action
94114 applyFilter ( value , filterType ) {
95115 const params = this . router . currentRoute . queryParams ;
96116 if ( ! params . track ) {
97117 this . activeTrack = [ ] ;
98118 }
119+ if ( ! params . language ) {
120+ this . activeLanguage = [ ] ;
121+ }
99122 if ( ! params . room ) {
100123 this . activeRoom = [ ] ;
101124 }
@@ -134,4 +157,22 @@ export default class ScheduleMenuFilter extends Component {
134157 get sessionTypeList ( ) {
135158 return orderBy ( this . event . sessionTypes . toArray ( ) , [ 'position' ] ) ;
136159 }
160+
161+ async didInsertElement ( ) {
162+ const response = await this . loader . load ( `/events/${ this . event . id } /sessions/languages` ) ;
163+ const languageList = [ ] ;
164+ languages . forEach ( language => {
165+ response . forEach ( item => {
166+ if ( item === language . name ) {
167+ languageList . push ( language ) ;
168+ }
169+ } ) ;
170+ } ) ;
171+ this . set ( 'languageList' , languageList ) ;
172+ }
173+
174+ @computed ( 'languageList.@each' )
175+ get languageFilterList ( ) {
176+ return orderBy ( this . languageList . toArray ( ) , [ 'name' ] ) ;
177+ }
137178}
0 commit comments