datacite/bracco

View on GitHub
app/routes/providers/show.js

Summary

Maintainability
B
6 hrs
Test Coverage
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { set } from '@ember/object';

export default Route.extend({
  can: service(),
  features: service(),
  headData: service(),
  currentUser: service(),
  prefixes: service(),
  router: service(),
  store: service(),
  flashMessages: service(),

  model(params) {
    let self = this;
    return this.store
      .findRecord('provider', params.provider_id.toLowerCase(), {
        include: 'consortium,consortium-organizations,contacts'
      })
      .then(function (provider) {
        set(self, 'headData.title', provider.displayName);
        set(self, 'headData.description', provider.description);
        set(self, 'headData.image', provider.logoUrl);
        return provider;
      })
      .catch(function (reason) {
        console.debug(reason);

        self.get('flashMessages').warning(reason);
        self.router.transitionTo('/');
      });
  },

  afterModel() {
    if (this.get('currentUser.role_id') === 'staff_admin') {
      let self = this;
      this.prefixes.available().then(
        function (value) {
          if (
            self.get('flashMessages').isDestroying ||
            self.get('flashMessages').isDestroyed
          ) {
            return;
          }
          if (value <= 0) {
            self.get('flashMessages').danger(self.prefixes.msg_zero);
          } else if (value < self.prefixes.min) {
            self.get('flashMessages').warning(self.prefixes.msg_min);
          }
        },
        function (reason) {
          console.debug(reason);
        }
      );
    }
  },

  redirect(model) {
    if (this.can.cannot('read provider', model)) {
      this.router.transitionTo('index');
    }
  },

  actions: {
    queryParamsDidChange() {
      this.refresh();
    }
  }
});