class BypassPluginManagementContent extends BypassBaseManagementContent {
DOMContentLoaded(options) {
super.DOMContentLoaded(options);
Object.assign(this, app.helpers.basicDialogs)
let components = ui.eicfy(this.el);
this.programsArticle = components.find(component => component.el.classList.contains('programmes-article'));
this.programsGrid = new DataGrid(this.find('.programmes-list'), {
headers: [ { label: 'Program'} ],
height: '320px',
actions: []
});
let programmeBt = this.find('.programme-create');
if(this.tokens.hasPrivilege('addProgram')) {
programmeBt.addEventListener('click', this.onProgramAdd.bind(this));
} else {
ui.hide(programmeBt);
}
this.programsGrid.loading = true;
this.tokens.getPrograms(this.profile.track, this.profile.domain)
.then(this.fillPrograms.bind(this));
}
fillPrograms(payload) {
this.programsGrid.clear();
this.programsGrid.loading = false;
for(let item of payload) {
let row = this.programsGrid.addRow(0, [ item ]);
// checking if programme can be deleted
if(this.tokens.hasPrivilege('removeProgram')) {
let button = ui.create(``);
button.addEventListener('click', this.onProgramDelete.bind(this));
row.querySelector('.cell.actions').appendChild(button);
}
}
}
async onProgramAdd(event) {
event.preventDefault();
event.stopPropagation();
let result = await this.openDialog(
await this.loadContent(
'projects/bypass/dialogs/BypassProgramAddDialog',
{ title: 'Add a programme' },
{ model: this.tokens, profile: this.profile }
)
);
if(result) {
ui.growl.append('Programme added', 'success');
this.programsGrid.loading = true;
this.tokens.getPrograms(this.profile.track, this.profile.domain)
.then((payload) => {
this.fillPrograms(payload);
this.programsArticle.expand();
})
}
}
async onProgramDelete(event) {
event.preventDefault();
event.stopPropagation();
let result = await this.confirmDialog({
title: 'Delete this programme',
message: `Please be aware that you are about to delete the programme "${event.target.dataset.label}"
Are you positive ?`,
okLabel: 'Delete',
okPromise:() => {
let payload = {
track: event.target.dataset.track,
domain: event.target.dataset.domain,
program: event.target.dataset.label
}
// this promise should always return a result (awaited above)
// either built here or from the model action.
return(this.tokens.removeProgram(payload))
}
});
if(result) {
this.programsGrid.loading = true;
this.tokens.getPrograms(this.profile.track, this.profile.domain)
.then(this.fillPrograms.bind(this));
}
}
}
app.registerClass('BypassPluginManagementContent', BypassPluginManagementContent);