Skip to content

Commit

Permalink
feat: introduce new columns for session ratings
Browse files Browse the repository at this point in the history
add ratedSessions to controllers

update ratedSessions and remove extra vars

introduce ember-table and es6

update template and session table

updates route and helper
  • Loading branch information
shreyanshdwivedi committed Jul 27, 2019
1 parent 2e6625a commit e1b4896
Show file tree
Hide file tree
Showing 13 changed files with 371 additions and 260 deletions.
447 changes: 256 additions & 191 deletions app/controllers/events/view/sessions/list.js

Large diffs are not rendered by default.

17 changes: 17 additions & 0 deletions app/mixins/ember-table-route.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,23 @@ export default Mixin.create({
delete query.sort;
}
return query;
},

/**
* Convert the given ArrayProxy or Promise<ArrayProxy> to a native Array.
*
* @param promise
* @return {Promise<Array>}
*/
async asArray(promise) {
const resolved = await promise;
if (resolved.toArray) {
return {
data : resolved.toArray(),
meta : resolved.meta
};
}
return resolved;
}


Expand Down
1 change: 1 addition & 0 deletions app/models/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ export default ModelBase.extend({
orders : hasMany('order'),
events : hasMany('event', { inverse: 'user' }),
sessions : hasMany('session'),
feedbacks : hasMany('feedback'),
invoice : hasMany('event-invoice'),
attendees : hasMany('attendee'),
speakers : hasMany('speaker'),
Expand Down
60 changes: 40 additions & 20 deletions app/routes/events/view/sessions/list.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import Route from '@ember/routing/route';
import { action } from '@ember/object';
import EmberTableRouteMixin from 'open-event-frontend/mixins/ember-table-route';

export default Route.extend({
export default class extends Route.extend(EmberTableRouteMixin) {
titleToken() {
switch (this.get('params.session_status')) {
case 'pending':
Expand All @@ -14,10 +16,12 @@ export default Route.extend({
default:
return this.l10n.t('Session');
}
},
}

async model(params) {
this.set('params', params);
let filterOptions = [];
const searchField = 'title';
if (params.session_status === 'pending') {
filterOptions = [
{
Expand Down Expand Up @@ -54,28 +58,44 @@ export default Route.extend({
filterOptions = [];
}

let queryObject = {
include : 'speakers,feedbacks',
filter : filterOptions,
'page[size]' : 10
};

let store = this.modelFor('events.view');
filterOptions = this.applySearchFilters(filterOptions, params, searchField);
let queryString = {
include : 'speakers,feedbacks',
filter : filterOptions,
'page[size]' : params.per_page || 10,
'page[number]' : params.page || 1
};
queryString = this.applySortFilters(queryString, params);
let data = (await store.query('sessions', queryString)).toArray();

let data = await store.query('sessions', queryObject);

let queryObject = {
include : 'session',
filter : [
{
name : 'session',
op : 'has',
val : {
name : 'event',
op : 'has',
val : {
name : 'identifier',
op : 'eq',
val : store.id
}
}
}
]
};
let feedbacks = await this.authManager.currentUser.query('feedbacks', queryObject);
return {
data,
store,
query : queryObject,
objectType : 'sessions'
feedbacks
};
},

actions: {
refreshRoute() {
this.refresh();
}
}

});
@action
refreshRoute() {
this.refresh();
}
}
4 changes: 2 additions & 2 deletions app/templates/components/ui-table/cell/cell-simple-date.hbs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{{#if (get record column.propertyName)}}
{{#if record}}
<span>
{{moment-format (get record column.propertyName) (if column.dateFormat column.dateFormat 'MMMM DD, YYYY - HH:mm A')}}
{{moment-format record (if props.options.dateFormat props.options.dateFormat 'MMMM DD, YYYY - HH:mm A')}}
</span>
{{else}}
<span>
Expand Down
2 changes: 1 addition & 1 deletion app/templates/components/ui-table/cell/cell-speakers.hbs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<div class="ui list">
{{#each record.speakers as |speaker|}}
{{#each record as |speaker|}}
<div class="item">
{{speaker.name}}
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
<div class="ui {{if device.isMobile 'horizontal' 'vertical'}} compact basic buttons">
{{#if (or (eq record.state 'rejected')(eq record.state 'pending'))}}
{{#if (or (eq extraRecords.status 'rejected')(eq extraRecords.status 'pending'))}}
{{#ui-dropdown class='ui icon right pointing dropdown button'}}
<i class="green checkmark icon"></i>
<div class="menu">
<a role="button" class="item" {{action acceptProposal record true}}>{{t 'With email'}}</a>
<a role="button" class="item" {{action acceptProposal record false}}>{{t 'Without email'}}</a>
<a role="button" class="item" {{action props.actions.acceptProposal record true}}>{{t 'With email'}}</a>
<a role="button" class="item" {{action props.actions.acceptProposal record false}}>{{t 'Without email'}}</a>
</div>
{{/ui-dropdown}}
{{/if}}
{{#if (eq record.state 'accepted')}}
{{#if (eq extraRecords.status 'accepted')}}
{{#ui-dropdown class='ui icon right pointing dropdown button'}}
<i class="blue checkmark icon"></i>
<div class="menu">
<a role="button" class="item" {{action confirmProposal record true}}>{{t 'With email'}}</a>
<a role="button" class="item" {{action confirmProposal record false}}>{{t 'Without email'}}</a>
<a role="button" class="item" {{action props.actions.confirmProposal record true}}>{{t 'With email'}}</a>
<a role="button" class="item" {{action props.actions.confirmProposal record false}}>{{t 'Without email'}}</a>
</div>
{{/ui-dropdown}}
{{/if}}
{{#if (or (eq record.state 'confirmed') (eq record.state 'pending') (eq record.state 'accepted'))}}
{{#if (or (eq extraRecords.status 'confirmed') (eq extraRecords.status 'pending') (eq extraRecords.status 'accepted'))}}
{{#ui-dropdown class='ui icon right pointing dropdown button'}}
<i class="red remove icon"></i>
<div class="menu">
<a role="button" class="item" {{action rejectProposal record true}}>{{t 'With email'}}</a>
<a role="button" class="item" {{action rejectProposal record false}}>{{t 'Without email'}}</a>
<a role="button" class="item" {{action props.actions.rejectProposal record true}}>{{t 'With email'}}</a>
<a role="button" class="item" {{action props.actions.rejectProposal record false}}>{{t 'Without email'}}</a>
</div>
{{/ui-dropdown}}
{{/if}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<span>
{{#if record.isMailSent}}
{{#if record}}
{{t 'Yes'}}
{{else}}
{{t 'No'}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{{#if record.isLocked}}
{{#ui-popup content=(t 'Unlock Session') class='ui basic button' click=(action unlockSession record) position='left center'}}
{{#if extraRecords.isLocked}}
{{#ui-popup content=(t 'Unlock Session') class='ui basic button' click=(action props.actions.unlockSession record) position='left center'}}
<i class="lock icon"></i>
{{/ui-popup}}
{{else}}
{{#ui-popup content=(t 'Lock Session') class='ui basic button' click=(action lockSession record) position='left center'}}
{{#ui-popup content=(t 'Lock Session') class='ui basic button' click=(action props.actions.lockSession record) position='left center'}}
<i class="unlock icon"></i>
{{/ui-popup}}
{{/if}}
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
{{ui-rating
rating=(if record.averageRating record.averageRating '0')
{{#if (includes props.options.ratedSessions record)}}
{{#each extraRecords.feedbacks as |feedback|}}
{{feedback.title}}
{{#if (eq feedback.user.email authManager.currentUser.email)}}
{{ui-rating
initialRating=feedback.rating
rating=feedback.rating
maxRating=5
onRate=(pipe-action (action (mut feedback.rating)) (action props.actions.updateRating feedback.rating feedback))
clearable=true}}
{{/if}}
{{/each}}
{{else}}
{{ui-rating
initialRating=0
rating=extraRecords.rating
maxRating=5
onRate=(pipe-action (action (mut record.averageRating)) (action updateRating record record.averageRating))
onRate=(pipe-action (action (mut extraRecords.rating)) (action props.actions.addRating extraRecords.rating record))
clearable=true}}
{{/if}}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<span>
{{#if (eq record.status "accepted")}}
{{#if (eq record "accepted")}}
<div class="ui yellow label">{{t 'Accepted'}}</div>
{{else if (eq record.status "confirmed")}}
{{else if (eq record "confirmed")}}
<div class="ui green label">{{t 'Confirmed'}}</div>
{{else if (eq record.status "pending")}}
{{else if (eq record "pending")}}
<div class="ui yellow label">{{t 'Pending'}}</div>
{{else if (eq record.status "rejected")}}
{{else if (eq record "rejected")}}
<div class="ui red label">{{t 'Rejected'}}</div>
{{else if (eq record.status "deleted")}}
{{else if (eq record "deleted")}}
<div class="ui red label">{{t 'Deleted'}}</div>
{{/if}}
</span>
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{{get record column.propertyName}}
{{record}}
<div class="hidden ui divider"></div>
<div class="ui horizontal compact basic buttons">
{{#ui-popup content=(t 'View Session') class="{{if device.isMobile 'medium' 'huge'}} ui icon button" click=(action viewSession record.id) position='left center'}}
{{#ui-popup content=(t 'View Session') class="{{if device.isMobile 'medium' 'huge'}} ui icon button" click=(action props.actions.viewSession record) position='left center'}}
<i class="unhide icon"></i>
{{/ui-popup}}
{{#if (not record.isLocked)}}
{{#ui-popup content=(t 'Edit Session') class="{{if device.isMobile 'medium' 'huge'}} ui icon button" click=(action editSession record.id record.event.id) position='left center'}}
{{#if (not extraRecords.isLocked)}}
{{#ui-popup content=(t 'Edit Session') class="{{if device.isMobile 'medium' 'huge'}} ui icon button" click=(action props.actions.editSession record extraRecords.event.id) position='left center'}}
<i class="edit icon"></i>
{{/ui-popup}}
{{/if}}
{{#ui-popup content=(t 'Delete Session') click=(action (confirm (t 'Are you sure you would like to delete this Session?') (action deleteSession record))) class="{{if device.isMobile 'medium' 'huge'}} ui icon button" position='left center'}}
{{#ui-popup content=(t 'Delete Session') click=(action (confirm (t 'Are you sure you would like to delete this Session?') (action props.actions.deleteSession record))) class="{{if device.isMobile 'medium' 'huge'}} ui icon button" position='left center'}}
<i class="trash outline icon"></i>
{{/ui-popup}}
</div>
33 changes: 13 additions & 20 deletions app/templates/events/view/sessions/list.hbs
Original file line number Diff line number Diff line change
@@ -1,23 +1,16 @@
<div class="sixteen wide column">
{{events/events-table
columns=columns
data=model.data
store=model.store
query=model.query
isNotStoreQuery = true
modelName = model.objectType
useNumericPagination=true
showGlobalFilter=true
showPageSize=true
lockSession=(action 'lockSession')
unlockSession=(action 'unlockSession')
deleteSession=(action 'deleteSession')
editSession=(action 'editSession')
viewSession=(action 'viewSession')
acceptProposal=(action 'acceptProposal')
rejectProposal=(action 'rejectProposal')
confirmProposal=(action 'confirmProposal')
updateRating=(action 'updateRating')
customGlobalFilter='title'
{{tables/default columns=columns
rows=model.data
feedbacks=model.feedbacks
currentPage=page
pageSize=per_page
searchQuery=search
sortBy=sort_by
sortDir=sort_dir
metaData=model.meta
filterOptions=filterOptions
widthConstraint="eq-container"
resizeMode="fluid"
fillMode="equal-column"
}}
</div>

0 comments on commit e1b4896

Please sign in to comment.