diff --git a/app/adapters/event.js b/app/adapters/event.js index 47f55683449..dfe33d41a76 100644 --- a/app/adapters/event.js +++ b/app/adapters/event.js @@ -2,9 +2,12 @@ import ApplicationAdapter from './application'; export default ApplicationAdapter.extend({ buildURL(modelName, id, snapshot, requestType, query) { - let url = this._super(modelName, id, snapshot, requestType, query); - if (requestType === 'updateRecord' && snapshot.adapterOptions && snapshot.adapterOptions.getTrashed) { - url = `${url}?get_trashed=true`; + const url = this._super(modelName, id, snapshot, requestType, query); + if (requestType === 'updateRecord' && snapshot.adapterOptions?.getTrashed) { + return url + '?get_trashed=true'; + } + if (query?.upcoming) { + return url + '/upcoming'; } return url; } diff --git a/app/controllers/index.js b/app/controllers/index.js index 308041c1b44..4e0be1aafbe 100644 --- a/app/controllers/index.js +++ b/app/controllers/index.js @@ -22,12 +22,12 @@ export default class IndexController extends Controller { @computed('filteredEvents.[]') get promotedEvents() { - return this.filteredEvents ? this.filteredEvents.filter(event => {return event.isPromoted}) : null; + return this.filteredEvents?.filter(event => event.isPromoted); } @computed('filteredEvents.[]') get upcomingEvents() { - return this.filteredEvents ? this.filteredEvents.filter(event => {return !event.isPromoted}) : null; + return this.filteredEvents?.filter(event => !event.isPromoted); } @action diff --git a/app/routes/index.js b/app/routes/index.js index 68eb22c7d46..81961809fa7 100644 --- a/app/routes/index.js +++ b/app/routes/index.js @@ -2,6 +2,7 @@ import classic from 'ember-classic-decorator'; import { action } from '@ember/object'; import Route from '@ember/routing/route'; import moment from 'moment'; +import { hash } from 'rsvp'; @classic export default class IndexRoute extends Route { @@ -127,26 +128,112 @@ export default class IndexRoute extends Route { async model(params) { const filterOptions = this._loadEvents(params, 'filterOptions'); - - const featuredEventsFilterOptions = this._loadEvents(params, 'filterOptions'); - featuredEventsFilterOptions[0].and.push({ + filterOptions[0].and.push({ name : 'is-featured', op : 'eq', val : true }); - return { - filteredEvents: await this.store.query('event', { + const upcomingEventsFilter = [ + { + or: [ + { + name : 'is-featured', + op : 'eq', + val : true + }, + { + name : 'is-promoted', + op : 'eq', + val : true + }, + { + and: [ + { + name : 'logo-url', + op : 'ne', + val : null + }, + { + name : 'original-image-url', + op : 'ne', + val : null + }, + { + name : 'event-topic', + op : 'ne', + val : null + }, + { + name : 'event-sub-topic', + op : 'ne', + val : null + }, + { + name : 'event-type', + op : 'ne', + val : null + } + ] + } + ] + } + ]; + + const callForSpeakersFilter = this._loadEvents(params, 'filterOptions'); + callForSpeakersFilter[0].and = [ + ...callForSpeakersFilter[0].and, + ...upcomingEventsFilter, + { + name : 'is-sessions-speakers-enabled', + op : 'eq', + val : true + }, + { + name : 'speakers-call', + op : 'has', + val : { + name : 'privacy', + op : 'eq', + val : 'public' + } + }, + { + name : 'speakers-call', + op : 'has', + val : { + name : 'starts-at', + op : 'le', + val : params.start_date + } + }, + { + name : 'speakers-call', + op : 'has', + val : { + name : 'ends-at', + op : 'ge', + val : params.start_date + } + } + ]; + + return hash({ + filteredEvents: this.store.query('event', { + upcoming : true, + include : 'event-topic,event-sub-topic,event-type,speakers-call' + }), + featuredEvents: 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', { + callForSpeakersEvents: this.store.query('event', { sort : 'starts-at', include : 'event-topic,event-sub-topic,event-type,speakers-call', - filter : featuredEventsFilterOptions + filter : callForSpeakersFilter }) - }; + }); } setupController(controller, model) { diff --git a/app/templates/index.hbs b/app/templates/index.hbs index ecf00836372..6dfb5bce7de 100644 --- a/app/templates/index.hbs +++ b/app/templates/index.hbs @@ -22,15 +22,15 @@ {{else}}

{{t 'No Upcoming Events Found'}}

{{/if}} - {{#if this.callForSpeakersEvents}} + {{#if this.model.callForSpeakersEvents}}

{{t 'Call for speakers'}}

- {{#each this.callForSpeakersEvents as |event|}} + {{#each this.model.callForSpeakersEvents as |event|}} {{/each}}
- {{#if (gt this.callForSpeakersEvents.length 3)}} + {{#if (gt this.model.callForSpeakersEvents.length 3)}}
{{t 'Show more calls for speakers'}}