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

87 lines
2.1 KiB
JavaScript

import Component from '@ember/component';
import layout from './template';
import { computed, get, set } from '@ember/object';
import { scheduleOnce } from '@ember/runloop';
const MEMBERS_HEADERS = [
{
translationKey: 'formShareMember.table.headers.name',
name: 'name',
sort: ['userPrincipalId', 'groupPrincipalId'],
},
{
translationKey: 'formShareMember.table.headers.accessType',
name: 'accessType',
sort: ['accessType'],
},
];
export default Component.extend({
layout,
membersHeaders: MEMBERS_HEADERS,
sortBy: '',
descending: false,
resource: null,
gotError: null,
users: null,
errors: null,
editing: false,
addPublicMember: false,
init() {
this._super(...arguments);
scheduleOnce('afterRender', this, 'setupPublicMember');
},
actions: {
addMember() {
this.addAuthorizedPrincipal({
type: 'member',
accessType: 'read-only',
});
},
sharePublic() {
this.addAuthorizedPrincipal({
type: 'member',
accessType: 'read-only',
groupPrincipalId: '*',
});
},
checkboxToggled() {
let { members = [] } = this.resource;
if (this.addPublicMember && members.findBy('groupPrincipalId', '*')) {
this.removeMember(members.findBy('groupPrincipalId', '*'));
} else {
this.send('sharePublic');
}
},
},
membersRows: computed('resource.members.[]', function() {
let { members = [] } = this.resource;
return ( members || [] ).filter((member) => get(member, 'groupPrincipalId') !== '*').sortBy('displayName');
}),
setupPublicMember() {
let { members = [] } = this.resource;
if (!this.addPublicMember && (members || []).findBy('groupPrincipalId', '*')) {
set(this, 'addPublicMember', true);
}
},
addAuthorizedPrincipal() {
throw new Error('add principal handler must be provided!!');
},
removeMember() {
throw new Error('removeMember is a required action!')
},
});