ui/app/components/new-edit-project/component.js

136 lines
4.2 KiB
JavaScript

import { alias } from '@ember/object/computed';
import { inject as service } from '@ember/service';
import Component from '@ember/component';
import layout from './template';
import {
get, set, computed, observer, setProperties
} from '@ember/object';
import NewOrEdit from 'ui/mixins/new-or-edit';
import ChildHook from 'shared/mixins/child-hook';
import { isEmpty } from '@ember/utils';
const M_CONFIG = {
type: 'projectRoleTemplateBinding',
subjectKind: '',
userId: '',
projectRoleTemplateId: '',
projectId: '',
};
export default Component.extend(NewOrEdit, ChildHook, {
intl: service(),
router: service(),
globalStore: service(),
layout,
memberConfig: M_CONFIG,
model: null,
podSecurityPolicyTemplateId: null,
isNew: false,
primaryResource: alias('model.project'),
secPolicy: alias('model.project.defaultPodSecurityPolicyTemplateId'),
policies: alias('model.policies'),
init() {
this._super(...arguments);
let bindings = (get(this, 'model.project.projectRoleTemplateBindings') || []).slice();
bindings = bindings.filter((x) => get(x, 'name') !== 'creator');
set(this, 'memberArray', bindings);
set(this, 'podSecurityPolicyTemplateId', get(this, 'model.project.podSecurityPolicyTemplateId'));
if (isEmpty(get(this, 'primaryResource.id'))) {
set(this, 'isNew', true);
}
},
actions: {
cancel() {
this.goBack();
},
expandFn() {
},
updateQuota(quota) {
const primaryResource = get(this, 'primaryResource');
if ( quota ) {
setProperties(primaryResource, quota);
} else {
setProperties(primaryResource, {
resourceQuota: null,
namespaceDefaultResourceQuota: null,
});
}
},
},
pspDidChange: observer('podSecurityPolicyTemplateId', function() {
set(this, 'model.project.podSecurityPolicyTemplateId', get(this, 'podSecurityPolicyTemplateId'));
}),
creator: computed('primaryResource.creatorId', function() {
let cid = get(this, 'primaryResource.creatorId');
let creator = null;
if (get(this, 'editing')) {
let users = get(this, 'model.users');
creator = users.findBy('id', cid) || users.findBy('username', cid); // TODO 2.0 must do because first clusters and projects are given admin as the creator id which is not the admins userid
} else {
creator = get(this, 'model.me');
}
return creator;
}),
goBack() {
get(this, 'router').transitionTo('authenticated.cluster.projects.index');
},
validate() {
this._super();
const errors = get(this, 'errors') || [];
const intl = get(this, 'intl');
const resourceQuota = get(this, 'primaryResource.resourceQuota.limit') || {};
const nsResourceQuota = get(this, 'primaryResource.namespaceDefaultResourceQuota.limit') || {};
Object.keys(nsResourceQuota).forEach((key) => {
if ( nsResourceQuota[key] && !resourceQuota[key] ) {
errors.push(intl.t('formResourceQuota.errors.projectLimitRequired', { resource: intl.t(`formResourceQuota.resources.${ key }`) }));
}
})
Object.keys(resourceQuota).forEach((key) => {
if ( resourceQuota[key] && !nsResourceQuota[key] ) {
errors.push(intl.t('formResourceQuota.errors.nsDefaultLimitRequired', { resource: intl.t(`formResourceQuota.resources.${ key }`) }));
}
})
set(this, 'errors', errors);
return get(this, 'errors.length') === 0;
},
didSave() {
const pr = get(this, 'primaryResource');
const podSecurityPolicyTemplateId = get(this, 'podSecurityPolicyTemplateId') ? get(this, 'podSecurityPolicyTemplateId') : null;
return pr.waitForCondition('BackingNamespaceCreated').then(() => this.applyHooks().then(() => {
pr.doAction('setpodsecuritypolicytemplate', { podSecurityPolicyTemplateId, }).then(() => pr);
}));
},
doneSaving() {
this.goBack();
},
doSave(opt) {
opt = opt || {};
opt.qp = { '_replace': 'true' };
return this._super(opt);
},
});