117 lines
4.2 KiB
JavaScript
117 lines
4.2 KiB
JavaScript
class BypassBaseManagementContent extends EICDomContent {
|
|
|
|
constructor() {
|
|
super();
|
|
Object.assign(this, app.helpers.basicDialogs)
|
|
}
|
|
|
|
DOMContentLoaded(options) {
|
|
|
|
this.profile = options.profile;
|
|
for(let model in options.models) this[model] = options.models[model];
|
|
|
|
this.users.getRoles(); // We'll need them later, but quite slow
|
|
|
|
this.gridUsers = new DataGrid(this.find('.users-list'), {
|
|
headers: [
|
|
{ label: 'Login', filter: 'text', sortable: true},
|
|
{ label: 'Email', filter: 'text', sortable: true},
|
|
{ label: 'Fullname', filter: 'text', sortable: true},
|
|
{ label: 'Role', filter: 'list', sortable: true},
|
|
{ label: 'Scheme', filter: 'list', sortable: true},
|
|
{ label: 'Domain', filter: 'list', sortable: true},
|
|
],
|
|
height: 'calc(100vh - 620px)',
|
|
actions: []
|
|
});
|
|
this.btUsersRefresh = new Button(null, {icon: 'icon-refresh', severity: 'primary', rounded: true, size: 'small', hint: 'Refresh the list'})
|
|
this.btUsersRefresh.addEventListener('click', this.refreshUsersList.bind(this));
|
|
this.gridUsers.el.querySelector('header .cell.actions').append(this.btUsersRefresh.el);
|
|
|
|
this.userAddButton = this.find('.user-add');
|
|
if(this.users.hasPrivilege('create')) {
|
|
this.userAddButton.addEventListener('click', this.onUserCreate.bind(this));
|
|
} else {
|
|
ui.hide(this.userAddButton);
|
|
}
|
|
|
|
this.gridUsers.loading = true;
|
|
this.users.list().then(this.fillUsers.bind(this));
|
|
}
|
|
|
|
fillUsers() {
|
|
this.gridUsers.clear();
|
|
this.gridUsers.loading = false;
|
|
this.btUsersRefresh.loading = false;
|
|
|
|
for (const item of this.users.collection) {
|
|
let row = this.gridUsers.addRow(item.uid, [
|
|
item.uid,
|
|
item.email,
|
|
`${item.firstname} ${item.lastname}`,
|
|
item.BProle,
|
|
item.track.label,
|
|
item.domain.label,
|
|
], true);
|
|
|
|
if(this.users.hasPrivilege('revoke') && (item.uid != app.User.identity.uuid )) {
|
|
let button = ui.create(`<button eicbutton xsmall danger title="revoke this user" data-uid="${item.uid}">revoke</button>`);
|
|
button.addEventListener('click', this.onUserRevoke.bind(this));
|
|
row.querySelector('.cell.actions').appendChild(button);
|
|
}
|
|
}
|
|
this.gridUsers.updateFilters();
|
|
}
|
|
|
|
refreshUsersList(event) {
|
|
if(event) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
}
|
|
|
|
this.btUsersRefresh.loading = true;
|
|
this.gridUsers.loading = true;
|
|
this.users.list().then(this.fillUsers.bind(this));
|
|
}
|
|
|
|
async onUserCreate(event) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
|
|
let result = await this.openDialog(await this.loadContent('projects/bypass/dialogs/BypassUserProfileDialog',{
|
|
title: 'Add a user',
|
|
subtitle: 'Please first enter the user UUID then define role and scopes of activity'
|
|
}, {
|
|
model: this.users,
|
|
mode: 'create',
|
|
profile: this.profile
|
|
}));
|
|
|
|
if(result) {
|
|
ui.growl.append('User added', 'success');
|
|
this.refreshUsersList();
|
|
}
|
|
}
|
|
|
|
async onUserRevoke(event) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
let uid = event.currentTarget.dataset.uid;
|
|
let user = this.users.getUid(uid);
|
|
let result = await this.confirmDialog({
|
|
title: 'Revoke a user',
|
|
message: `Please be aware that you are about to revoke the user "<strong>${user.firstname} ${user.lastname}</strong>"<br>
|
|
This is permanent !<br>
|
|
Are you positive ?`,
|
|
okLabel: 'Revoke user',
|
|
okPromise:() => { return(this.users.revoke(uid)) },
|
|
})
|
|
|
|
if(result) {
|
|
ui.growl.append('User revoked', 'success');
|
|
this.refreshUsersList();
|
|
}
|
|
}
|
|
}
|
|
|
|
app.registerClass('BypassBaseManagementContent', BypassBaseManagementContent); |