import Ember from 'ember';
import config from 'travis/config/environment';
let Component = Ember.Component.extend({
keyboard: Ember.inject.service(),
auth: Ember.inject.service(),
classNameBindings: ['visible'],
classNames: ['travis-cmd'],
didInsertElement() {
this.get('keyboard').bind('t', this.show.bind(this));
this.get('keyboard').bind('esc', 'cmd', this.hide.bind(this));
},
show() {
this.loadSlugs();
this.set('visible', true);
this.get('keyboard').setScope('cmd');
},
hide() {
this.set('visible', false);
this.get('keyboard').setScope(null);
this.set('matches', null);
this.set('filterString', null);
this.set('results', null);
},
loadSlugs() {
this.set('loading', true);
$.ajax(config.apiEndpoint + '/repos/slugs', {
headers: {
Authorization: 'token ' + this.get('auth').token(),
Accept: 'application/json; version=2'
}
}).then((data) => {
this.set('loading', false);
this.set('repos', data.repositories);
this.onLoad();
});
},
onLoad() {
setTimeout( () => {
this.$('.input').focus();
}, 10);
},
actions: {
filterChanged(value) {
let list = this.get('repos');
let options = {
pre: ''
, post: ''
, extract: function(el) { return el.slug; }
};
let results = fuzzy.filter(value, list, options);
let matches = results.map(function(el) { return el.string; });
this.set('matches', matches.slice(0, 10).join('
'));
this.set('results', results);
this.set('filterString', value);
},
keypress(event) {
if(event.keyCode === 27) {
this.hide();
} else if(event.keyCode === 13) {
let results;
if(results = this.get('results')) {
if(results[0]) {
let slug = results[0].original.slug;
console.log(slug);
}
}
}
}
}
});
export default Component;