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'); }, });