diff --git a/app/controllers/index.js b/app/controllers/index.js index 94e0992f483..308041c1b44 100644 --- a/app/controllers/index.js +++ b/app/controllers/index.js @@ -12,24 +12,12 @@ export default class IndexController extends Controller { event_name = null; filterDate = null; - @computed('filteredEvents.[]') + @computed('filteredEvents.[]', 'featuredEvents.[]') get callForSpeakersEvents() { - return this.filteredEvents.filter(event => { - const callForPapers = event.get('speakersCall'); - const sessionEnabled = event.isSessionsSpeakersEnabled; - if (!callForPapers || !callForPapers.get('startsAt') || !callForPapers.get('endsAt')) { - return false; - } - const startDateTime = callForPapers.get('startsAt'); - const endDateTime = callForPapers.get('endsAt'); - const privacyState = callForPapers.get('privacy'); - return (moment().isBetween(startDateTime, endDateTime) && (sessionEnabled) && (privacyState === 'public')); - }); - } - - @computed('filteredEvents.[]') - get featuredEvents() { - return this.filteredEvents ? this.filteredEvents.filter(event => {return event.isFeatured}) : null; + const filteredEventsCfs = this.filteredEvents.filter(isEventCfsOpen); + const featuredEventsCfs = this.featuredEvents.filter(isEventCfsOpen); + const combinedCfsEvents = new Set(filteredEventsCfs.concat(featuredEventsCfs)); + return Array.from(combinedCfsEvents); } @computed('filteredEvents.[]') @@ -48,3 +36,15 @@ export default class IndexController extends Controller { this.set('isShareModalOpen', true); } } + +function isEventCfsOpen(event) { + const callForPapers = event.get('speakersCall'); + const sessionEnabled = event.isSessionsSpeakersEnabled; + if (!callForPapers || !callForPapers.get('startsAt') || !callForPapers.get('endsAt')) { + return false; + } + const startDateTime = callForPapers.get('startsAt'); + const endDateTime = callForPapers.get('endsAt'); + const privacyState = callForPapers.get('privacy'); + return (moment().isBetween(startDateTime, endDateTime) && (sessionEnabled) && (privacyState === 'public')); +} diff --git a/app/routes/index.js b/app/routes/index.js index 269ddbf3e08..f6bde51262a 100644 --- a/app/routes/index.js +++ b/app/routes/index.js @@ -127,11 +127,24 @@ export default class IndexRoute extends Route { async model(params) { let filterOptions = this._loadEvents(params, 'filterOptions'); + + let featuredEventsFilterOptions = this._loadEvents(params, 'filterOptions'); + featuredEventsFilterOptions[0].and.push({ + name : 'is-featured', + op : 'eq', + val : true + }); + return { filteredEvents: await this.store.query('event', { sort : 'starts-at', include : 'event-topic,event-sub-topic,event-type,speakers-call', filter : filterOptions + }), + featuredEvents: await this.store.query('event', { + sort : 'starts-at', + include : 'event-topic,event-sub-topic,event-type,speakers-call', + filter : featuredEventsFilterOptions }) }; } @@ -139,6 +152,7 @@ export default class IndexRoute extends Route { setupController(controller, model) { super.setupController(...arguments); controller.set('filteredEvents', model.filteredEvents); + controller.set('featuredEvents', model.featuredEvents); this.set('controller', controller); }