mirror of https://github.com/rancher/ui.git
127 lines
3.2 KiB
JavaScript
127 lines
3.2 KiB
JavaScript
import Ember from 'ember';
|
|
import {parseTarget, stringifyTarget} from 'ui/utils/parse-target';
|
|
|
|
export default Ember.Component.extend({
|
|
intl: Ember.inject.service(),
|
|
|
|
existing: null,
|
|
isBalancer: null,
|
|
allServices: null,
|
|
editing: false,
|
|
|
|
classNames: ['form-group'],
|
|
|
|
actions: {
|
|
addTargetService: function() {
|
|
this.get('targetsArray').pushObject(Ember.Object.create({isService: true, value: null}));
|
|
},
|
|
removeTarget: function(obj) {
|
|
this.get('targetsArray').removeObject(obj);
|
|
},
|
|
|
|
setAdvanced: function() {
|
|
this.set('isAdvanced', true);
|
|
},
|
|
},
|
|
|
|
isAdvanced: false,
|
|
targetsArray: null,
|
|
|
|
didInitAttrs: function() {
|
|
this.set('isAdvanced', this.get('editing'));
|
|
|
|
var out = [];
|
|
|
|
var existing = this.get('existing');
|
|
if ( existing )
|
|
{
|
|
existing.get('consumedServicesWithNames').forEach((map) => {
|
|
if ( map.get('ports.length') )
|
|
{
|
|
map.get('ports').forEach((str) => {
|
|
var obj = parseTarget(str);
|
|
if ( obj )
|
|
{
|
|
this.set('isAdvanced', true);
|
|
|
|
obj.setProperties({
|
|
isService: true,
|
|
value: map.get('service.id'),
|
|
});
|
|
|
|
out.pushObject(obj);
|
|
}
|
|
});
|
|
}
|
|
else
|
|
{
|
|
out.pushObject(Ember.Object.create({
|
|
isService: true,
|
|
value: map.get('service.id'),
|
|
}));
|
|
}
|
|
});
|
|
}
|
|
else
|
|
{
|
|
out.pushObject(Ember.Object.create({
|
|
isService: true,
|
|
value: null
|
|
}));
|
|
}
|
|
|
|
this.set('targetsArray', out);
|
|
this.targetsChanged();
|
|
},
|
|
|
|
targetResources: function() {
|
|
var out = [];
|
|
var array = this.get('targetsArray');
|
|
array.filterBy('isService',true).filterBy('value').map((choice) => {
|
|
var serviceId = Ember.get(choice,'value');
|
|
|
|
var entry = out.filterBy('serviceId', serviceId)[0];
|
|
if ( !entry )
|
|
{
|
|
entry = Ember.Object.create({
|
|
serviceId: serviceId,
|
|
ports: [],
|
|
});
|
|
out.pushObject(entry);
|
|
}
|
|
|
|
var str = stringifyTarget(choice);
|
|
if ( str )
|
|
{
|
|
entry.get('ports').pushObject(str);
|
|
}
|
|
});
|
|
|
|
return out;
|
|
}.property('targetsArray.@each.{isService,value,hostname,path,srcPort,dstPort}'),
|
|
|
|
targetsChanged: function() {
|
|
this.sendAction('changed', this.get('targetsArray'), this.get('targetResources'));
|
|
}.observes('targetResources','targetResources.@each.{serviceId,ports}'),
|
|
|
|
hasAdvancedSourcePorts: function() {
|
|
return this.get('targetsArray').filterBy('isService',true).filter((target) => {
|
|
return parseInt(target.get('srcPort'),10) > 0;
|
|
}).get('length') > 0;
|
|
}.property('targetsArray.@each.{isService,srcPort}'),
|
|
|
|
serviceChoices: function() {
|
|
var isBalancer = this.get('isBalancer');
|
|
|
|
return this.get('allServices').slice().sortBy('group','name','id').map((service) => {
|
|
if ( isBalancer && !service.lbSafe )
|
|
{
|
|
service.disabled = true;
|
|
service.name += " " + this.get('intl').t('formTargets.noHostnames');
|
|
}
|
|
|
|
return service;
|
|
});
|
|
}.property('isBalancer','allServices.@each.{id,name,state,environmentId}'),
|
|
});
|