mirror of https://github.com/rancher/ui.git
183 lines
4.5 KiB
JavaScript
183 lines
4.5 KiB
JavaScript
import Ember from 'ember';
|
|
import Sortable from 'ui/mixins/sortable';
|
|
import C from 'ui/utils/constants';
|
|
import Util from 'ui/utils/util';
|
|
import NewOrEdit from 'ui/mixins/new-or-edit';
|
|
|
|
export default Ember.Component.extend(NewOrEdit, Sortable, {
|
|
projects: Ember.inject.service(),
|
|
access: Ember.inject.service(),
|
|
accessEnabled: Ember.computed.alias('access.enabled'),
|
|
|
|
model: null,
|
|
project: Ember.computed.alias('model.project'),
|
|
originalProject: Ember.computed.alias('model.originalProject'),
|
|
primaryResource: Ember.computed.alias('model.project'),
|
|
|
|
queryParams: ['editing'],
|
|
editing: false,
|
|
|
|
sortableContent: Ember.computed.alias('project.projectMembers'),
|
|
sortBy: 'name',
|
|
sorts: {
|
|
name: ['externalId'],
|
|
type: ['externalIdType','externalId'],
|
|
role: ['role','externalId'],
|
|
},
|
|
|
|
actions: {
|
|
changeProject(project) {
|
|
this.get('router').transitionTo('settings.projects.detail', project.get('id'));
|
|
},
|
|
|
|
cancel() {
|
|
this.sendAction('cancel');
|
|
},
|
|
|
|
checkMember(member) {
|
|
var existing = this.get('project.projectMembers')
|
|
.filterBy('externalIdType', member.get('externalIdType'))
|
|
.filterBy('externalId', member.get('externalId'));
|
|
|
|
if ( existing.get('length') )
|
|
{
|
|
this.send('error','Member is already in the list');
|
|
return;
|
|
}
|
|
|
|
member.set('role','member');
|
|
|
|
this.send('error',null);
|
|
this.get('project.projectMembers').pushObject(member);
|
|
},
|
|
|
|
removeMember(item) {
|
|
this.get('project.projectMembers').removeObject(item);
|
|
},
|
|
|
|
selectOrchestration(name) {
|
|
var k8s = (name === 'kubernetes');
|
|
var swarm = (name === 'swarm');
|
|
var mesos = (name === 'mesos');
|
|
this.get('project').setProperties({
|
|
kubernetes: k8s,
|
|
swarm: swarm,
|
|
mesos: mesos,
|
|
});
|
|
this.set('activeOrchestration', name);
|
|
},
|
|
},
|
|
|
|
activeOrchestration: null,
|
|
didReceiveAttrs() {
|
|
var orch = 'rancher';
|
|
if ( this.get('project.kubernetes') )
|
|
{
|
|
orch = 'kubernetes';
|
|
}
|
|
else if ( this.get('project.swarm') )
|
|
{
|
|
orch = 'swarm';
|
|
}
|
|
else if ( this.get('project.mesos') )
|
|
{
|
|
orch = 'mesos';
|
|
}
|
|
|
|
this.set('activeOrchestration', orch);
|
|
},
|
|
|
|
didInsertElement() {
|
|
if ( this.get('showEdit') )
|
|
{
|
|
var elem = this.$('INPUT[type="text"]')[0];
|
|
if ( elem )
|
|
{
|
|
elem.focus();
|
|
}
|
|
}
|
|
},
|
|
|
|
roleOptions: function() {
|
|
return (this.get('userStore').getById('schema','projectmember').get('resourceFields.role.options')||[]).map((role) => {
|
|
return {
|
|
label: Util.ucFirst(role),
|
|
value: role
|
|
};
|
|
});
|
|
}.property(),
|
|
|
|
|
|
hasOwner: function() {
|
|
return this.get('project.projectMembers').filterBy('role', C.PROJECT.ROLE_OWNER).get('length') > 0;
|
|
}.property('project.projectMembers.@each.role'),
|
|
|
|
orchestrationChoices: function() {
|
|
var active = this.get('activeOrchestration');
|
|
|
|
var drivers = [
|
|
{name: 'rancher', label: 'Corral', css: 'rancher'},
|
|
{name: 'kubernetes', label: 'Kubernetes', css: 'kubernetes'},
|
|
{name: 'swarm', label: 'Swarm', css: 'swarm'},
|
|
{name: 'mesos', label: 'Mesos', css: 'mesos'},
|
|
];
|
|
|
|
drivers.forEach(function(driver) {
|
|
driver.active = ( active === driver.name );
|
|
});
|
|
|
|
return drivers;
|
|
}.property('activeOrchestration'),
|
|
|
|
validate() {
|
|
this._super();
|
|
var errors = this.get('errors')||[];
|
|
|
|
if ( !this.get('hasOwner') && this.get('access.enabled') )
|
|
{
|
|
errors.push('You must have at least one owner');
|
|
}
|
|
|
|
if ( errors.length )
|
|
{
|
|
this.set('errors', errors);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
},
|
|
|
|
willSave() {
|
|
var out = this._super();
|
|
if ( out && !this.get('project.id') )
|
|
{
|
|
// For create the members go in the request
|
|
this.set('project.members', this.get('project.projectMembers'));
|
|
}
|
|
return out;
|
|
},
|
|
|
|
didSave: function() {
|
|
if ( this.get('editing') && this.get('access.enabled') )
|
|
{
|
|
var members = this.get('project.projectMembers').map((member) => {
|
|
return {
|
|
type: 'projectMember',
|
|
externalId: member.externalId,
|
|
externalIdType: member.externalIdType,
|
|
role: member.role
|
|
};
|
|
});
|
|
|
|
return this.get('project').doAction('setmembers',{members: members});
|
|
}
|
|
},
|
|
|
|
doneSaving: function() {
|
|
var out = this._super();
|
|
this.get('projects').refreshAll();
|
|
this.sendAction('done');
|
|
return out;
|
|
},
|
|
});
|