window.user_group_mapping_edit_popup = new class { constructor() { this.overlay = null; this.dialogue = null; this.form = null; } init() { this.overlay = overlays_stack.getById('user_group_edit'); this.dialogue = this.overlay.$dialogue[0]; this.form = this.overlay.$dialogue.$body[0].querySelector('form'); } submit() { this.removePopupMessages(); this.overlay.setLoading(); const fields = this.trimFields(getFormFields(this.form)); const curl = new Curl(this.form.getAttribute('action')); fetch(curl.getUrl(), { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(fields) }) .then((response) => response.json()) .then((response) => { if ('error' in response) { throw {error: response.error}; } overlayDialogueDestroy(this.overlay.dialogueid); this.dialogue.dispatchEvent(new CustomEvent('dialogue.submit', {detail: response})); }) .catch((exception) => { let title; let messages = []; if (typeof exception === 'object' && 'error' in exception) { title = exception.error.title; messages = exception.error.messages; } else { title = ; } const message_box = makeMessageBox('bad', messages, title, true, true)[0]; this.form.parentNode.insertBefore(message_box, this.form); }) .finally(() => { this.overlay.unsetLoading(); }); } trimFields(fields) { const field_to_trim = 'name'; if (field_to_trim in fields) { fields[field_to_trim] = fields[field_to_trim].trim(); } return fields; } removePopupMessages() { for (const el of this.form.parentNode.children) { if (el.matches('.msg-good, .msg-bad, .msg-warning')) { el.parentNode.removeChild(el); } } } };