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.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 "${user.firstname} ${user.lastname}"
This is permanent !
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);