open-nomad/ui/app/models/recommendation-summary.js
2022-01-20 09:54:56 -05:00

59 lines
1.5 KiB
JavaScript

import Model from '@ember-data/model';
import { attr, belongsTo, hasMany } from '@ember-data/model';
import { get } from '@ember/object';
import { action } from '@ember/object';
export default class RecommendationSummary extends Model {
@hasMany('recommendation') recommendations;
@hasMany('recommendation', { defaultValue: () => [] })
excludedRecommendations;
@belongsTo('job') job;
@attr('string') jobId;
@attr('string') jobNamespace;
@attr('date') submitTime;
@attr('string') taskGroupName;
// Set in the serialiser upon saving
@attr('boolean', { defaultValue: false }) isProcessed;
get taskGroup() {
const taskGroups = get(this, 'job.taskGroups');
if (taskGroups) {
return taskGroups.findBy('name', this.taskGroupName);
} else {
return undefined;
}
}
@action
toggleRecommendation(recommendation) {
if (this.excludedRecommendations.includes(recommendation)) {
this.excludedRecommendations =
this.excludedRecommendations.removeObject(recommendation);
} else {
this.excludedRecommendations.pushObject(recommendation);
}
}
@action
toggleAllRecommendationsForResource(resource, enabled) {
if (enabled) {
this.excludedRecommendations = this.excludedRecommendations.rejectBy(
'resource',
resource
);
} else {
this.excludedRecommendations.pushObjects(
this.recommendations.filterBy('resource', resource)
);
}
}
get slug() {
return `${get(this, 'job.name')}/${this.taskGroupName}`;
}
}