Skip to content

Commit 33739a3

Browse files
shreyanshdwivediabhinavk96
authored andcommitted
adds star rating to events/sessions (#3017)
integrate semantic ui rating introduces async-await in updateRating function
1 parent 2a02283 commit 33739a3

File tree

7 files changed

+64
-1
lines changed

7 files changed

+64
-1
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import Component from '@ember/component';
2+
3+
export default Component.extend({
4+
});

app/controllers/events/view/sessions/list.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Controller from '@ember/controller';
2+
23
export default Controller.extend({
34
columns: [
45
{
@@ -19,6 +20,12 @@ export default Controller.extend({
1920
title : 'Speakers',
2021
disableSorting : true
2122
},
23+
{
24+
propertyName : 'average_rating',
25+
template : 'components/ui-table/cell/events/view/sessions/cell-rating',
26+
title : 'Rating',
27+
disableSorting : false
28+
},
2229
{
2330
propertyName : 'track.name',
2431
title : 'Track'
@@ -161,6 +168,37 @@ export default Controller.extend({
161168
.finally(() => {
162169
this.set('isLoading', false);
163170
});
171+
},
172+
async updateRating(session, rating) {
173+
try {
174+
if (session.feedbacks.length) {
175+
this.set('isLoading', true);
176+
const user = this.authManager.currentUser;
177+
let feedback = session.feedbacks.firstObject;
178+
feedback.setProperties({
179+
user,
180+
rating
181+
});
182+
await feedback.save();
183+
this.notify.success(this.l10n.t('Session feedback has been updated successfully.'));
184+
} else {
185+
this.set('isLoading', true);
186+
const user = this.authManager.currentUser;
187+
const comment = '';
188+
let feedback = await this.store.createRecord('feedback', {
189+
rating,
190+
comment,
191+
session,
192+
user
193+
});
194+
await feedback.save();
195+
this.notify.success(this.l10n.t('Session feedback has been created successfully.'));
196+
}
197+
} catch (error) {
198+
this.notify.error(this.l10n.t(error.message));
199+
}
200+
this.send('refreshRoute');
201+
this.set('isLoading', false);
164202
}
165203
}
166204
});

app/models/feedback.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import attr from 'ember-data/attr';
2+
import ModelBase from 'open-event-frontend/models/base';
3+
import { belongsTo } from 'ember-data/relationships';
4+
5+
export default ModelBase.extend({
6+
rating : attr('number', { defaultValue: 0.0 }),
7+
comment : attr('string'),
8+
deletedAt : attr('moment'),
9+
10+
user : belongsTo('user'),
11+
event : belongsTo('event'),
12+
session : belongsTo('session')
13+
});

app/models/session.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export default ModelBase.extend({
2323
audioUrl : attr('string'),
2424
signupUrl : attr('string'),
2525
sendEmail : attr('boolean'),
26+
averageRating : attr('number'),
2627

2728
isLocked : attr('boolean', { defaultValue: false }),
2829
isMailSent : attr('boolean', { defaultValue: false }),
@@ -35,6 +36,7 @@ export default ModelBase.extend({
3536
microlocation : belongsTo('microlocation'),
3637
track : belongsTo('track'),
3738
speakers : hasMany('speaker'),
39+
feedbacks : hasMany('feedback'),
3840
event : belongsTo('event'), // temporary
3941
creator : belongsTo('user'),
4042

app/routes/events/view/sessions/list.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export default Route.extend({
5555
}
5656

5757
let queryObject = {
58-
include : 'speakers',
58+
include : 'speakers,feedbacks',
5959
filter : filterOptions,
6060
'page[size]' : 10
6161
};
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{{ui-rating
2+
rating=(if record.averageRating record.averageRating '0')
3+
maxRating=5
4+
onRate=(pipe-action (action (mut record.averageRating)) (action updateRating record record.averageRating))
5+
clearable=true}}

app/templates/events/view/sessions/list.hbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
acceptProposal=(action 'acceptProposal')
1818
rejectProposal=(action 'rejectProposal')
1919
confirmProposal=(action 'confirmProposal')
20+
updateRating=(action 'updateRating')
2021
customGlobalFilter='title'
2122
}}
2223
</div>

0 commit comments

Comments
 (0)