mirror of https://github.com/rancher/ui.git
151 lines
3.8 KiB
JavaScript
151 lines
3.8 KiB
JavaScript
import Ember from 'ember';
|
|
import C from 'ui/utils/constants';
|
|
import EditLabels from 'ui/mixins/edit-labels';
|
|
|
|
export default Ember.Mixin.create(EditLabels, {
|
|
primaryResource: Ember.computed.alias('model.service'),
|
|
labelResource: Ember.computed.alias('model.service.launchConfig'),
|
|
|
|
actions: {
|
|
addServiceLink: function() {
|
|
this.get('serviceLinksArray').pushObject(Ember.Object.create({serviceId: null, linkName: null}));
|
|
},
|
|
removeServiceLink: function(obj) {
|
|
this.get('serviceLinksArray').removeObject(obj);
|
|
},
|
|
},
|
|
|
|
initFields: function() {
|
|
this._super();
|
|
this.initServiceLinks();
|
|
this.initScheduling();
|
|
},
|
|
|
|
// ----------------------------------
|
|
// Services
|
|
// ----------------------------------
|
|
serviceChoices: function() {
|
|
var env = this.get('selectedEnvironment');
|
|
var group = 'Project: ' + (env.get('name') || '('+env.get('id')+')');
|
|
|
|
var list = (env.get('services')||[]).map((service) => {
|
|
var serviceLabel = (service.get('name') || '('+service.get('id')+')');
|
|
if ( service.get('state') !== 'active' )
|
|
{
|
|
serviceLabel += ' (' + service.get('state') + ')';
|
|
}
|
|
|
|
return Ember.Object.create({
|
|
group: group,
|
|
id: service.get('id'),
|
|
name: serviceLabel,
|
|
obj: service,
|
|
});
|
|
});
|
|
|
|
return list.sortBy('group','name','id');
|
|
}.property('environment.services.@each.{id,name,state}'),
|
|
|
|
serviceLinksArray: null,
|
|
serviceLinksAsMap: null,
|
|
initServiceLinks: function() {
|
|
var out = [];
|
|
var links;
|
|
if ( this.get('service.id') )
|
|
{
|
|
// Edit
|
|
links = this.get('service.consumedServicesWithNames')||[];
|
|
}
|
|
else
|
|
{
|
|
// New / Clone
|
|
links = this.get('service.serviceLinks')||[];
|
|
}
|
|
|
|
links.forEach(function(obj) {
|
|
var linkName = obj.get('name');
|
|
var service = obj.get('service');
|
|
|
|
out.push(Ember.Object.create({
|
|
linkName: (linkName === service.get('name') ? '' : linkName),
|
|
obj: service,
|
|
serviceId: service.get('id'),
|
|
}));
|
|
});
|
|
|
|
this.set('serviceLinksArray', out);
|
|
},
|
|
|
|
serviceLinksDidChange: function() {
|
|
// Sync with the actual environment
|
|
var out = {};
|
|
this.get('serviceLinksArray').forEach((row) => {
|
|
if ( row.serviceId )
|
|
{
|
|
var name = row.linkName;
|
|
if ( !name )
|
|
{
|
|
// If no name is given, use the name of the service
|
|
var service = this.get('serviceChoices').filterProperty('id', row.serviceId)[0];
|
|
if ( service )
|
|
{
|
|
name = service.get('obj.name');
|
|
}
|
|
}
|
|
|
|
if ( name )
|
|
{
|
|
out[name] = row.serviceId;
|
|
}
|
|
}
|
|
});
|
|
|
|
this.set('serviceLinksAsMap', out);
|
|
}.observes('serviceLinksArray.@each.{linkName,serviceId}'),
|
|
|
|
// ----------------------------------
|
|
// Scheduling
|
|
// ----------------------------------
|
|
isGlobal: null,
|
|
initScheduling: function() {
|
|
var existing = this.getLabel(C.LABEL.SCHED_GLOBAL);
|
|
this.set('isGlobal', !!existing);
|
|
this._super();
|
|
if ( this.get('isRequestedHost') )
|
|
{
|
|
this.set('isGlobal', false);
|
|
}
|
|
},
|
|
|
|
globalDidChange: function() {
|
|
if ( this.get('isGlobal') )
|
|
{
|
|
this.setLabel(C.LABEL.SCHED_GLOBAL,'true');
|
|
this.set('isRequestedHost', false);
|
|
}
|
|
else
|
|
{
|
|
this.removeLabel(C.LABEL.SCHED_GLOBAL);
|
|
}
|
|
}.observes('isGlobal'),
|
|
|
|
isRequestedHostDidChangeGlobal: function() {
|
|
if ( this.get('isRequestedHost') )
|
|
{
|
|
this.set('isGlobal', false);
|
|
}
|
|
}.observes('isRequestedHost'),
|
|
|
|
// ----------------------------------
|
|
// Save
|
|
// ----------------------------------
|
|
didSave: function() {
|
|
var service = this.get('model.service');
|
|
if ( service.get('type').toLowerCase() !== 'externalservice')
|
|
{
|
|
return service.doAction('setservicelinks', {serviceLinks: this.get('serviceLinksAsMap')});
|
|
}
|
|
},
|
|
|
|
});
|