ui/lib/shared/addon/components/webhook/new-receiver/component.js

108 lines
2.5 KiB
JavaScript

import { computed } from '@ember/object';
import Component from '@ember/component';
import NewOrEdit from 'shared/mixins/new-or-edit';
import layout from './template';
const DRIVERS = ['scaleService','scaleHost','serviceUpgrade'];
export default Component.extend(NewOrEdit, {
layout,
model: null,
init() {
this._super(...arguments);
this.swapConfig(this.get('model.driver'));
},
swapConfig(driver) {
let store = this.get('webhookStore');
// Clear the config of the inactive drivers
DRIVERS.forEach((name) => {
if ( name !== driver ) {
this.set(`model.${name}Config`, null);
}
});
let def;
switch ( driver ) {
case 'scaleService':
def = store.createRecord({
type: 'scaleService',
action: 'up',
amount: 1,
serviceId: null,
});
break;
case 'scaleHost':
def = store.createRecord({
type: 'scaleHost',
action: 'up',
amount: 1,
deleteOption: 'leastRecent',
});
break;
case 'serviceUpgrade':
def = store.createRecord({
type: 'serviceUpgrade',
tag: '',
serviceSelector: '',
});
break;
}
if ( !this.get(`model.${driver}Config`) ) {
this.set(`model.${driver}Config`, def);
}
setTimeout(() => {
this.$('INPUT')[0].focus();
}, 500);
},
scaleHostActionChanged: function() {
let action = this.get('model.scaleHostConfig.action');
if ( action === 'up' ) {
this.set('model.scaleHostConfig.deleteOption', null);
} else if ( action === 'down' && !this.get('model.scaleHostConfig.deleteOption') ) {
this.set('model.scaleHostConfig.deleteOption', 'leastRecent');
}
}.observes('model.scaleHostConfig.action'),
scaleTypeChoices: [
{label: 'hookPage.scaleService.label', value: 'scaleService'},
{label: 'hookPage.scaleHost.label', value: 'scaleHost'},
{label: 'hookPage.serviceUpgrade.label', value: 'serviceUpgrade'},
],
kind: computed({
set(key, value) {
let driver = value;
this.swapConfig(driver);
this.set('errors', null);
return this.set('model.driver', driver);
},
get(/* key */) {
return this.get('model.driver');
},
}),
actions: {
cancel() {
this.sendAction('cancel');
}
},
doSave: function(opt) {
opt = opt || {};
if ( !this.get('primaryResource.id') ) {
opt.url = 'receivers';
}
return this._super(opt);
},
doneSaving() {
this.send('cancel');
},
});