ui/app/components/edit-container/component.js

112 lines
2.5 KiB
JavaScript

import Ember from 'ember';
import NewOrEdit from 'ui/mixins/new-or-edit';
import ModalBase from 'ui/mixins/modal-base';
export default Ember.Component.extend(ModalBase, NewOrEdit, {
classNames: ['large-modal'],
originalModel: Ember.computed.alias('modalService.modalOpts'),
editing: true,
isService: false,
isSidekick: false,
loading: true,
model: null,
primaryResource: Ember.computed.alias('model.instance'),
launchConfig: Ember.computed.alias('model.instance'),
portsArray: null,
linksArray: null,
actions: {
setPorts(ports) {
this.set('portsArray', ports);
},
setLinks(links) {
this.set('linksArray', links);
},
save() {
this._super(...arguments);
this.send('cancel');
}
},
didInsertElement: function() {
Ember.run.next(this, 'loadDependencies');
},
loadDependencies: function() {
var instance = this.get('originalModel');
return Ember.RSVP.all([
instance.followLink('ports'),
instance.followLink('instanceLinks'),
this.get('store').findAll('host'), // Need inactive ones in case a link points to an inactive host
]).then((results) => {
var model = Ember.Object.create({
instance: instance.clone(),
ports: results[0],
instanceLinks: results[1],
allHosts: results[2],
});
this.setProperties({
originalModel: instance,
model: model,
loading: false,
});
});
},
didSave: function() {
return Ember.RSVP.all([
this.savePorts(),
this.saveLinks(),
]);
},
savePorts: function() {
var promises = [];
this.get('portsArray').forEach(function(port) {
var neu = parseInt(port.public,10);
if ( isNaN(neu) )
{
neu = null;
}
var obj = port.obj;
if ( neu !== Ember.get(obj,'publicPort') )
{
//console.log('Changing port',obj.serialize(),'to',neu);
obj.set('publicPort', neu);
promises.push(obj.save());
}
});
return Ember.RSVP.all(promises);
},
saveLinks: function() {
var promises = [];
this.get('linksArray').forEach(function(link) {
var neu = link.targetInstanceId;
var obj = link.obj;
if ( neu !== Ember.get(obj,'targetInstanceId') )
{
//console.log('Changing link',obj.serialize(),'to',neu);
obj.set('targetInstanceId', neu);
promises.push(obj.save());
}
});
return Ember.RSVP.all(promises);
},
doneSaving: function() {
this.sendAction('dismiss');
},
});