diff --git a/app/controllers/admin/events/list.js b/app/controllers/admin/events/list.js index a9d2ac0ea67..362ba0b9fd1 100644 --- a/app/controllers/admin/events/list.js +++ b/app/controllers/admin/events/list.js @@ -85,11 +85,21 @@ export default class extends Controller.extend(EmberTableControllerMixin) { name : 'Featured Event', valuePath : 'id', extraValuePaths : ['isFeatured'], - cellComponent : 'ui-table/cell/admin/event-is-featured', + cellComponent : 'ui-table/cell/admin/events/event-is-featured', width : 80, actions : { toggleFeatured: this.toggleFeatured.bind(this) } + }, + { + name : 'Promoted Event', + valuePath : 'id', + extraValuePaths : ['isPromoted'], + cellComponent : 'ui-table/cell/admin/events/event-is-promoted', + width : 80, + actions : { + togglePromoted: this.togglePromoted.bind(this) + } } ]; } @@ -178,4 +188,25 @@ export default class extends Controller.extend(EmberTableControllerMixin) { } this.set('isLoading', false); } + + @action + async togglePromoted(event_id) { + this.set('isLoading', true); + try { + let event = this.store.peekRecord('event', event_id, { backgroundReload: false }); + event.toggleProperty('isPromoted'); + await event.save(); + this.notify.success(this.l10n.t(`Event ${event.isPromoted ? 'Promoted' : 'unpromoted'} Successfully`), + { + id: 'event_detail_changed' + }); + } catch (e) { + console.warn(e); + this.notify.error(this.l10n.t('An unexpected error has occurred.'), + { + id: 'event_det_error' + }); + } + this.set('isLoading', false); + } } diff --git a/app/controllers/index.js b/app/controllers/index.js index 5bebdd68d12..7008a4a02f8 100644 --- a/app/controllers/index.js +++ b/app/controllers/index.js @@ -26,7 +26,14 @@ export default Controller.extend({ featuredEvents: computed('filteredEvents.[]', function() { return this.filteredEvents ? this.filteredEvents.filter(event => {return event.isFeatured}) : null; + }), + + promotedEvents: computed('filteredEvents.[]', function() { + return this.filteredEvents ? this.filteredEvents.filter(event => {return event.isPromoted}) : null; + }), + upcomingEvents: computed('filteredEvents.[]', function() { + return this.filteredEvents ? this.filteredEvents.filter(event => {return !event.isPromoted}) : null; }), actions: { diff --git a/app/models/event.js b/app/models/event.js index 2b87426c44f..9d96115ee69 100644 --- a/app/models/event.js +++ b/app/models/event.js @@ -50,6 +50,7 @@ export default ModelBase.extend(CustomPrimaryKeyMixin, { isTicketFormEnabled : attr('boolean', { defaultValue: false }), isSessionsSpeakersEnabled : attr('boolean', { defaultValue: false }), isFeatured : attr('boolean', { defaultValue: false }), + isPromoted : attr('boolean', { defaultValue: false }), isBillingInfoMandatory : attr('boolean', { defaultValue: false }), isTaxEnabled : attr('boolean', { defaultValue: false }), diff --git a/app/templates/components/ui-table/cell/admin/event-is-featured.hbs b/app/templates/components/ui-table/cell/admin/events/event-is-featured.hbs similarity index 100% rename from app/templates/components/ui-table/cell/admin/event-is-featured.hbs rename to app/templates/components/ui-table/cell/admin/events/event-is-featured.hbs diff --git a/app/templates/components/ui-table/cell/admin/events/event-is-promoted.hbs b/app/templates/components/ui-table/cell/admin/events/event-is-promoted.hbs new file mode 100644 index 00000000000..9bb14f2dc7b --- /dev/null +++ b/app/templates/components/ui-table/cell/admin/events/event-is-promoted.hbs @@ -0,0 +1 @@ +{{ui-checkbox class='toggle' checked=extraRecords.isPromoted onChange=(action props.actions.togglePromoted record)}} diff --git a/app/templates/index.hbs b/app/templates/index.hbs index f9212b1dfea..2c6c389aee5 100644 --- a/app/templates/index.hbs +++ b/app/templates/index.hbs @@ -12,7 +12,10 @@ {{#if filteredEvents}}