ui/lib/shared/addon/components/share-member-row/component.js

109 lines
2.7 KiB
JavaScript

import Errors from 'ui/utils/errors';
import Component from '@ember/component';
import layout from './template';
import { set, computed } from '@ember/object';
import { inject as service } from '@ember/service';
import Identicon from 'identicon.js';
import C from 'shared/utils/constants';
export default Component.extend({
globalStore: service(),
layout,
tagName: '',
member: null,
editing: true,
isPublic: false,
clusterResource: null,
users: null,
principal: null,
principalId: null,
principalGravatarSrc: null,
init() {
this._super(...arguments);
const { isPublic, member } = this;
if (!isPublic && (member.userPrincipalId || member.groupPrincipalId)) {
const principalId = member.userPrincipalId || member.groupPrincipalId;
this.globalStore.rawRequest({
url: `principals/${ encodeURIComponent(principalId) }`,
method: 'GET',
}).then((xhr) => {
if ( xhr.status === 204 ) {
return;
}
if ( xhr.body && typeof xhr.body === 'object') {
set(this, 'principal', set(this, 'external', xhr.body));
this.principalChanged();
}
return xhr;
}).catch((xhr) => {
if ( this.isDestroyed || this.isDestroying ) {
return;
}
if (member.userPrincipalId) {
set(this, 'principalId', member.userPrincipalId);
set(this, 'principalGravatarSrc', `data:image/png;base64,${ new Identicon(AWS.util.crypto.md5(member.userPrincipalId || 'Unknown', 'hex'), 80, 0.01).toString() }`)
}
return xhr;
});
}
},
actions: {
gotError(err) {
set(this, 'errors', [Errors.stringify(err)]);
},
addAuthorized(principal) {
if (principal) {
let { principalType, id } = principal;
if (principalType === 'user') {
set(this, 'member.userPrincipalId', id);
} else if (principalType === 'group') {
set(this, 'member.groupPrincipalId', id);
}
}
},
remove() {
this.remove(this.member);
},
},
choices: computed('C.CLUSTER_TEMPLATE_ROLES', () => {
let roles = C.CLUSTER_TEMPLATE_ROLES;
return Object.keys(roles).map((key) => {
return {
label: `shareMemberRow.accessType.${ roles[key] }`,
value: roles[key]
};
})
}),
noUpdate: computed('editing', 'principal', 'principalId', function() {
if (this.editing) {
if (this.principal || this.principalId) {
return true;
} else {
return false;
}
} else {
return true;
}
}),
remove() {
throw new Error('remove is a required action!')
},
});