Skip to content

Commit 4b3b600

Browse files
author
Hieu Lam - TMA
authored
feature-9081: Show sidebar filter option for languages (#9116)
* feature-9081: Show sidebar filter option for languages * feature-9081: Show sidebar filter option for languages * feature-9081: Show sidebar filter option for languages
1 parent 5a1c97d commit 4b3b600

File tree

3 files changed

+271
-140
lines changed

3 files changed

+271
-140
lines changed

app/components/public/schedule-menu-filter.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { action, computed } from '@ember/object';
44
import Component from '@ember/component';
55
import { tracked } from '@glimmer/tracking';
66
import { levels } from 'open-event-frontend/utils/dictionary/levels';
7+
import { languages } from 'open-event-frontend/utils/dictionary/languages';
78

89
@classic
910
export 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
}

app/routes/public/sessions.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ export default class SessionsRoute extends Route {
1616
track: {
1717
refreshModel: true
1818
},
19+
language: {
20+
refreshModel: true
21+
},
1922
room: {
2023
refreshModel: true
2124
},
@@ -105,6 +108,35 @@ export default class SessionsRoute extends Route {
105108
});
106109
}
107110

111+
if (params.language) {
112+
const conditionOr = [];
113+
params.language.split(',').map(val => {
114+
val = val.trim();
115+
conditionOr.push({
116+
name : 'language',
117+
op : 'eq',
118+
val
119+
});
120+
});
121+
if (conditionOr.length > 0) {
122+
filterOptions.push(
123+
{
124+
and: [
125+
{
126+
or: conditionOr
127+
}
128+
]
129+
}
130+
);
131+
} else {
132+
filterOptions.push({
133+
name : 'language',
134+
op : 'eq',
135+
val : params.language
136+
});
137+
}
138+
}
139+
108140
if (params.sessionType) {
109141
const sessions = params.sessionType.split(',');
110142
filterOptions.push({

0 commit comments

Comments
 (0)