Skip to content

Commit

Permalink
feat: ember table for admin users/view/events
Browse files Browse the repository at this point in the history
  • Loading branch information
abhinavk96 committed Jul 28, 2019
1 parent 4c6aa2d commit 0a26c90
Show file tree
Hide file tree
Showing 9 changed files with 229 additions and 165 deletions.
193 changes: 116 additions & 77 deletions app/controllers/admin/users/view/events/list.js
Original file line number Diff line number Diff line change
@@ -1,82 +1,121 @@
import Controller from '@ember/controller';
import { computed, action } from '@ember/object';
import EmberTableControllerMixin from 'open-event-frontend/mixins/ember-table-controller';
import { or } from '@ember/object/computed';

export default Controller.extend({
columns: [
{
propertyName : 'name',
template : 'components/ui-table/cell/cell-event',
title : 'Name'
},
{
propertyName : 'startsAt',
template : 'components/ui-table/cell/cell-event-date',
dateFormat : 'MMMM DD, YYYY - HH:mm A',
title : 'Date And Time'
},
{
propertyName : 'sessionsByState',
template : 'components/ui-table/cell/cell-sessions',
title : 'Sessions',
disableSorting : true,
disableFiltering : true
},
{
propertyName : 'eventStatisticsGeneral.speakers',
template : 'components/ui-table/cell/cell-speakers-dashboard',
title : 'Speakers',
disableSorting : true,
disableFiltering : true
},
{
propertyName : 'tickets',
template : 'components/ui-table/cell/cell-tickets',
title : 'Tickets',
disableSorting : true,
disableFiltering : true
},
{
propertyName : 'url',
template : 'components/ui-table/cell/cell-link',
title : 'Public URL',
disableSorting : true,
disableFiltering : true
},
{
template : 'components/ui-table/cell/cell-buttons',
title : 'Actions',
disableSorting : true,
disableFiltering : true
}
],
actions: {
moveToDetails(id) {
this.transitionToRoute('events.view', id);
},
editEvent(id) {
this.transitionToRoute('events.view.edit.basic-details', id);
},
openDeleteEventModal(id, name) {
this.set('isEventDeleteModalOpen', true);
this.set('confirmName', '');
this.set('eventName', name);
this.set('eventId', id);
},
deleteEvent() {
this.set('isLoading', true);
this.store.findRecord('event', this.eventId, { backgroundReload: false }).then(function(event) {
event.destroyRecord();
})
.then(() => {
this.notify.success(this.l10n.t('Event has been deleted successfully.'));
})
.catch(() => {
this.notify.error(this.l10n.t('An unexpected error has occurred.'));
})
.finally(() => {
this.set('isLoading', false);
});
this.set('isEventDeleteModalOpen', false);
export default class extends Controller.extend(EmberTableControllerMixin) {

@or('authManager.currentUser.isSuperAdmin', 'authManager.currentUser.isAdmin') hasRestorePrivileges;

@computed()
get columns() {
return [
{
name : 'Name',
valuePath : 'id',
extraValuePaths : ['logoUrl', 'name', 'identifier', 'deletedAt'],
isSortable : true,
headerComponent : 'tables/headers/sort',
cellComponent : 'ui-table/cell/cell-event',
options : {
hasRestorePrivileges: this.hasRestorePrivileges
},
actions: {
moveToDetails : this.moveToDetails.bind(this),
editEvent : this.editEvent.bind(this),
openDeleteEventModal : this.openDeleteEventModal.bind(this),
deleteEvent : this.deleteEvent.bind(this),
restoreEvent : this.restoreEvent.bind(this)
}
},
{
name : 'Date',
valuePath : 'startsAt',
extraValuePaths : ['endsAt'],
isSortable : true,
headerComponent : 'tables/headers/sort',
cellComponent : 'ui-table/cell/cell-event-date'

},
{
name : 'Sessions',
valuePath : 'eventStatisticsGeneral',
width : 80,
isSortable : false,
cellComponent : 'ui-table/cell/cell-sessions-dashboard'
},
{
name : 'Speakers',
valuePath : 'eventStatisticsGeneral',
cellComponent : 'ui-table/cell/cell-speakers-dashboard',
isSortable : false

},
{
name : 'Tickets',
valuePath : 'tickets',
cellComponent : 'ui-table/cell/cell-tickets',
isSortable : false

},
{
name : 'Public URL',
valuePath : 'url',
cellComponent : 'ui-table/cell/cell-link',
isSortable : false
}
];
}

@action
moveToDetails(id) {
this.transitionToRoute('events.view', id);
}

@action
editEvent(id) {
this.transitionToRoute('events.view.edit.basic-details', id);
}

@action
openDeleteEventModal(id, name) {
this.setProperties({
isEventDeleteModalOpen : true,
confirmName : '',
eventName : name,
eventId : id
});
}

@action
async deleteEvent() {
this.set('isLoading', true);

try {
const event = this.store.peekRecord('event', this.eventId, { backgroundReload: false });
await event.destroyRecord();
this.notify.success(this.l10n.t('Event has been deleted successfully.'));
} catch (e) {
this.notify.error(this.l10n.t('An unexpected error has occurred.'));
}
this.setProperties({
isLoading : false,
isEventDeleteModalOpen : false
});
}
});

@action
async restoreEvent(event_id) {
this.set('isLoading', true);
try {
let event = this.store.peekRecord('event', event_id, { backgroundReload: false });
event.set('deletedAt', null);
await event.save({ adapterOptions: { getTrashed: true } });
this.notify.success(this.l10n.t('Event has been restored successfully.'));
} catch (e) {
console.warn(e);
this.notify.error(this.l10n.t('An unexpected error has occurred.'));
}
this.set('isLoading', false);
}
}
133 changes: 76 additions & 57 deletions app/routes/admin/users/view/events/list.js
Original file line number Diff line number Diff line change
@@ -1,47 +1,46 @@
import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
import moment from 'moment';
import EmberTableRouteMixin from 'open-event-frontend/mixins/ember-table-route';

export default Route.extend(AuthenticatedRouteMixin, {
titleToken() {
switch (this.get('params.event_status')) {
case 'live':
return this.l10n.t('Live');
case 'draft':
return this.l10n.t('Draft');
case 'past':
return this.l10n.t('Past');
}
},
async model(params) {
this.set('params', params);
export default class extends Route.extend(EmberTableRouteMixin) {

async model(params) {
let filterOptions = [];
const searchField = 'name';
if (params.event_status === 'live') {
filterOptions = [
{
name : 'state',
op : 'eq',
val : 'published'
},
{
or: [
and: [
{
name : 'starts-at',
op : 'ge',
val : moment().toISOString()
name : 'deleted-at',
op : 'eq',
val : null
},
{
name : 'state',
op : 'eq',
val : 'published'
},
{
and: [
or: [
{
name : 'starts-at',
op : 'le',
op : 'ge',
val : moment().toISOString()
},
{
name : 'ends-at',
op : 'gt',
val : moment().toISOString()
and: [
{
name : 'starts-at',
op : 'le',
val : moment().toISOString()
},
{
name : 'ends-at',
op : 'gt',
val : moment().toISOString()
}
]
}
]
}
Expand All @@ -51,42 +50,62 @@ export default Route.extend(AuthenticatedRouteMixin, {
} else if (params.event_status === 'past') {
filterOptions = [
{
name : 'ends-at',
op : 'lt',
val : moment().toISOString()
},
and: [
{
name : 'deleted-at',
op : 'eq',
val : null
},
{
name : 'ends-at',
op : 'lt',
val : moment().toISOString()
},
{
name : 'state',
op : 'eq',
val : 'published'
}
]
}
];
} else if (params.event_status === 'draft') {
filterOptions = [
{
name : 'state',
op : 'eq',
val : 'published'
and:
[
{
name : 'deleted-at',
op : 'eq',
val : null
},
{
name : 'state',
op : 'eq',
val : 'draft'
}
]

}
];
} else {
} else if (params.event_status === 'deleted') {
filterOptions = [
{
name : 'state',
op : 'eq',
val : 'draft'
name : 'deleted-at',
op : 'ne',
val : null
}
];
}

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

const store = this.modelFor('admin.users.view');

const data = await store.query('events', queryObject);

return {
data,
store,
query : queryObject,
objectType : 'events'
filterOptions = this.applySearchFilters(filterOptions, params, searchField);
let queryString = {
get_trashed : true,
include : 'tickets,sessions,speakers',
filter : filterOptions,
'page[size]' : params.per_page || 10,
'page[number]' : params.page || 1
};

queryString = this.applySortFilters(queryString, params);
return this.asArray(this.modelFor('admin.users.view').query('events', queryString));
}
});
}
3 changes: 3 additions & 0 deletions app/templates/admin/users/view/events.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
{{#link-to 'admin.users.view.events.list' 'past' class='item'}}
{{t 'Past'}}
{{/link-to}}
{{#link-to 'admin.users.view.events.list' 'deleted' class='item'}}
{{t 'Deleted'}}
{{/link-to}}
{{/tabbed-navigation}}
</div>
</div>
Expand Down
Loading

0 comments on commit 0a26c90

Please sign in to comment.