cms/app-client/app/controllers/application.js
author ymh <ymh.work@gmail.com>
Fri, 04 Nov 2016 19:03:25 +0100
changeset 392 4fbe94af93e8
parent 339 766af1228b05
child 394 48458e099b05
permissions -rw-r--r--
Improve filter service. Centralize filter management in a single point

import Ember from 'ember';
import _ from 'lodash/lodash';

export default Ember.Controller.extend({

    player: Ember.inject.service(),
    filter: Ember.inject.service(),


    playerVideoscreenObserver: Ember.observer('player.videoscreen', function() {
        Ember.$('body').toggleClass('videoscreen', this.get('player').get('videoscreen'));
    }),

    // queryParams: ['location', 'date', 'notice', 'language', 'discourse', 'theme'],
    // queryParams: Ember.computed('filter.queryParams', 'notice', function() {
    //     const queryParamsList = this.get('filter').get('queryParams');
    //     return _.merge(queryParamsList, {'notice' : this.get('notice')});
    // }),
    queryParams : Ember.computed('filter.queryParams', function() {
        var res = _.clone(this.get('filter').get('queryParams'));
        res.push('notice');
        return res;
    }),

    location: Ember.computed.alias('filter.location'),
    date: Ember.computed.alias('filter.date'),
    language: Ember.computed.alias('filter.language'),
    discourse: Ember.computed.alias('filter.discourse'),
    theme: Ember.computed.alias('filter.theme'),

    itemObserver: Ember.observer('player.item', function() {
        var self = this;
        this.store.findRecord('document', this.get('player').get('item'), { reload: true }).then(function(model){
            self.get('player').set('model', model);
            if (self.get('player').get('model').get('transcript')) {
                self.store.findRecord('transcript', self.get('player').get('item')).then(function(model) {
                    self.get('player').set('transcript', model);
                });
            } else {
                self.get('player').set('transcript', null);
            }
        });
    }),

    notice: null,
    noticeModel: null,

    noticeObserver: Ember.observer('notice', function() {
        var self = this;
        if (this.get('notice')) {
            this.store.findRecord('document', this.get('notice'), { reload: true }).then(function(model){
                self.set('noticeModel', model);
            });
        }
    }),
    noticeModelObserver: Ember.observer('noticeModel', function() {
        if (!this.get('noticeModel')) {
            this.set('notice', null);
        }
    }),

    init: function() {
        this._super(...arguments);
        this.get('player');
    },

    actions: {

        changeDocument: function(docDirection){
            var direction = (docDirection === "next") ? 1 : -1;
            var currentObject = this.get("filteredDocuments").findBy('id', this.get("currentItem").get('id'));
            if ( currentObject !== 'undefined'){
                var index = this.get("filteredDocuments").indexOf(currentObject);
                if ( typeof(this.get("filteredDocuments").objectAt(index+direction)) !== 'undefined'){
                    return this.set('currentId', this.get("filteredDocuments").objectAt(index+direction).id);
                }
            }
            return this.set('currentId', this.get('filteredDocuments').get('firstObject').id);
        },
        play: function(item){
            this.set("currentId", item.id);
        }

    }
});