-
Notifications
You must be signed in to change notification settings - Fork 65
/
addon-source-usages.js
61 lines (49 loc) · 1.52 KB
/
addon-source-usages.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import { inject as service } from '@ember/service';
import Component from '@ember/component';
import { computed } from '@ember/object';
import { isEmpty } from '@ember/utils';
import { task } from 'ember-concurrency';
export default Component.extend({
visibleUsageCount: 25,
showUsages: false,
usages: null,
regex: false,
fileFilter: null,
codeSearch: service(),
visibleUsages: computed('visibleUsageCount', 'usages', function() {
return this.get('usages').slice(0, this.get('visibleUsageCount'));
}),
moreUsages: computed('visibleUsageCount', 'usages', function() {
return this.get('visibleUsageCount') < this.get('usages.length');
}),
fetchUsages: task(function* () {
let usages = yield this.get('codeSearch.usages').perform(this.get('addon.id'), this.get('query'), this.get('regex'));
this.set('usages', filterByFilePath(usages, this.get('fileFilter')));
}).drop(),
actions: {
toggleUsages() {
this.toggleProperty('showUsages');
if (this.get('showUsages') && this.get('usages') === null) {
this.get('fetchUsages').perform();
}
},
viewMore() {
let newUsageCount = this.get('visibleUsageCount') + 25;
this.set('visibleUsageCount', newUsageCount);
}
}
});
function filterByFilePath(usages, filterTerm) {
if (isEmpty(filterTerm)) {
return usages;
}
let filterRegex;
try {
filterRegex = new RegExp(filterTerm);
} catch(e) {
return [];
}
return usages.filter((usage) => {
return usage.filename.match(filterRegex);
});
}