Newer
Older
import { ListSelect, DatalistController, Select } from 'amiv-web-ui-components';
// eslint-disable-next-line import/extensions
import { apiUrl } from 'networkConfig';
import { ResourceHandler } from '../auth';
import EditView from '../views/editView';
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
* Table of all possible permissions to edit
*
* @class PermissionEditor (name)
*/
class PermissionEditor {
oninit() {
// load all possible API endpoints, as permissions are defined at endpoint/resource level
m.request(apiUrl).then((response) => {
this.apiEndpoints = response._links.child;
});
}
/**
*
* @attr {object} permissions the permissions as defined so far for the group
* @attr {function} onChange is called with the changed permissions any timne the
* permissions are changed in this editor.
*/
view({ attrs: { permissions, onChange } }) {
// make a local copy of permissions to edit
const internalPerm = Object.assign({}, permissions);
if (!this.apiEndpoints) return '';
return m('div', [
m('span', {
style: {
color: 'rgba(0, 0, 0, 0.54)',
'font-size': '10pt',
},
}, 'Permissions granted by membership in this group'),
m('div', {
style: {
padding: '10px',
border: '1px solid rgba(0, 0, 0, 0.54)',
'border-radius': '10px',
},
}, m('div', {
style: { display: 'flex', width: '100%', 'flex-flow': 'row wrap' },
}, this.apiEndpoints.map(apiEndpoint => m('div', {
style: { display: 'flex', width: '220px', 'padding-right': '20px' },
options: ['no permission', 'read', 'readwrite'],
default: 'no permission',
onChange({ value }) {
if (value === 'no permission') {
// the api equivalent to no permission is to delete the key out of the dict
if (internalPerm[apiEndpoint.href]) delete internalPerm[apiEndpoint.href];
onChange(internalPerm);
},
value: internalPerm[apiEndpoint.href],
export default class NewGroup extends EditView {
constructor(vnode) {
this.userHandler = new ResourceHandler('users', ['firstname', 'lastname', 'email', 'nethz']);
this.userController = new DatalistController((query, search) => this.userHandler.get(
{ search, ...query },
));
const data = Object.assign({}, this.form.data);
// exchange moderator object with string of id, will return null if moderator is null
data.moderator = data.moderator ? data.moderator._id : null;
this.submit(data).then(() => this.controller.changeModus('view'));
}
view() {
return this.layout([
...this.form.renderSchema(['name', 'allow_self_enrollment', 'requires_storage']),
m('div', { style: { display: 'flex' } }, [
m(TextField, { label: 'Group Moderator: ', disabled: true, style: { width: '160px' } }),
m('div', { style: { 'flex-grow': 1 } }, m(ListSelect, {
selection: this.form.data.moderator,
listTileAttrs: user => Object.assign({}, { title: `${user.firstname} ${user.lastname}` }),
selectedText: user => `${user.firstname} ${user.lastname}`,
onSelect: (data) => { this.form.data.moderator = data; },
permissions: this.form.data.permissions,
onChange: (newPermissions) => { this.form.data.permissions = newPermissions; },