datacite/bracco

View on GitHub
app/components/doi-language.js

Summary

Maintainability
A
0 mins
Test Coverage
import Component from '@ember/component';
import { computed } from '@ember/object';
import ISO6391 from 'iso-639-1';
import { isBlank } from '@ember/utils';

const languageList = ISO6391.getAllNames();

export default Component.extend({
  languageList,
  languages: languageList,
  language: computed('model.language', function () {
    return ISO6391.getName(this.get('model.language')) !== ''
      ? ISO6391.getName(this.get('model.language'))
      : this.get('model.language');
  }),

  init(...args) {
    this._super(...args);
    this.selected = this.selected || [];
  },

  setLanguage(language) {
    if (language ? ISO6391.getCode(language) : null) {
      this.model.set('language', ISO6391.getCode(language));
    } else if (language) {
      this.model.set('language', language);
    } else {
      this.model.set('language', null);
    }
  },

  actions: {
    createOnEnter(select, e) {
      if (
        e.keyCode === 13 &&
        select.isOpen &&
        !select.highlighted &&
        !isBlank(select.searchText)
      ) {
        if (!this.selected.includes(select.searchText)) {
          this.setLanguage(select.searchText);
          this.languageList.push(select.searchText);
          select.actions.choose(select.searchText);
        }
      }
    },
    searchLanguage(query) {
      let languages = languageList.filter(function (language) {
        return language.toLowerCase().startsWith(query.toLowerCase());
      });
      this.set('languages', languages);
    },
    selectLanguage(language) {
      this.setLanguage(language);
      this.set('languages', this.languageList);
    }
  }
});