47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
import Ember from 'ember';
|
|
import TrackablesFromType from 'flaredown/mixins/trackables-from-type';
|
|
|
|
const {
|
|
get,
|
|
} = Ember;
|
|
|
|
export default Ember.Component.extend(TrackablesFromType, {
|
|
|
|
tracking: Ember.inject.service(),
|
|
|
|
setupTracking: Ember.on('init', function() {
|
|
this.get('tracking').setup({
|
|
at: new Date(),
|
|
trackableType: this.get('trackableType').capitalize()
|
|
});
|
|
}),
|
|
|
|
existingTrackings: Ember.computed.alias('tracking.existingTrackings'),
|
|
newTrackings: Ember.computed.alias('tracking.newTrackings'),
|
|
|
|
actions: {
|
|
trackSelected(selectedTrackable) {
|
|
this.track(selectedTrackable);
|
|
},
|
|
remove(tracking) {
|
|
this.get('tracking').untrack({
|
|
tracking: tracking
|
|
});
|
|
}
|
|
},
|
|
|
|
track: function(trackable) {
|
|
const trackableType = get(this, 'trackableType').capitalize();
|
|
const trackableIds = this.get('store').peekAll('tracking').filterBy('trackableType', trackableType).map((tr) => {
|
|
return get(tr, 'trackable.id');
|
|
});
|
|
|
|
if (!trackableIds.includes(get(trackable, 'id'))) {
|
|
this.get('tracking').track(trackable, null, () => {
|
|
this.set('selectedTrackable', null);
|
|
});
|
|
}
|
|
}
|
|
|
|
});
|