StaticApps/src/app/Core/ModalController.js

97 lines
2.7 KiB
JavaScript

class ModalController {
constructor() {
const self = this;
self.modalContainer = $('v-modal-container');
self.observer = new MutationObserver(function () {
if (self.modalContainer.children.length > 0) {
self.modalContainer.classList.add('open');
} else {
self.modalContainer.classList.remove('open');
}
});
const config = {attributes: false, childList: true, characterData: false};
self.observer.observe(self.modalContainer, config);
}
static create(header, content, closeButton = true) {
return registry.get('modal').createModal(header, content, closeButton);
}
createModal(header, content, closeButton) {
return template.render('gui/modal', {
header: header,
content: content,
closeButton: closeButton ? '' : 'close'
}).then(node => {
this.modalContainer.appendChild(node);
if (closeButton) {
node.addDelegatedEventListener('click', '.close-modal', () => {
console.log("remove");
node.remove();
})
}
return node;
});
}
}
class ConfirmDialog {
constructor() {
const self = this;
this.dissmiss = new Promise((resolve, reject) => {
self.resolve = resolve;
self.reject = reject;
});
this.id = VUtils.tempId();
}
static async create(header, text, options) {
const dialog = new ConfirmDialog();
const data = dialog.getContent(text, options);
const content = await template.renderOn('gui/dialog-confirm', data);
const modal = await ModalController.create(header, content, false);
modal.addDelegatedEventListener('click', '.modal-confirm-button', (ev, el) => {
dialog.close(el.dataset.value);
});
dialog.modal = modal;
return dialog.onDismiss();
}
static async createBasic(header, text) {
return this.create(header, text, [
{
type: 'error',
value: "0",
content: 'Nein',
}, {
type: 'primary',
value: "1",
content: 'Ja',
}
]);
}
getContent(text, options) {
return {
text: text,
options: options
}
}
close(value) {
this.modal.remove();
this.resolve(value);
}
onDismiss() {
return this.dissmiss;
}
}
(() => {
moduleLoader.isModuleLoaded(['Registry'], () => {
const modal = new ModalController();
registry.set('modal', modal);
})
})();