xmpp.chapril.org-conversejs/src/plugins/modal/confirm.js
JC Brand 15c10376b0 Rename all templates to camelCase
To conform with naming conventions regarding functions, which the
templates are.
2023-02-15 14:29:07 +01:00

60 lines
1.7 KiB
JavaScript

import BaseModal from "plugins/modal/modal.js";
import tplPrompt from "./templates/prompt.js";
import { getOpenPromise } from '@converse/openpromise';
import { api } from "@converse/headless/core";
export default class Confirm extends BaseModal {
constructor (options) {
super(options);
this.confirmation = getOpenPromise();
}
initialize () {
super.initialize();
this.listenTo(this.model, 'change', () => this.render())
this.addEventListener('hide.bs.modal', () => {
if (!this.confirmation.isResolved) {
this.confirmation.reject()
}
}, false);
}
renderModal () {
return tplPrompt(this);
}
getModalTitle () {
return this.model.get('title');
}
onConfimation (ev) {
ev.preventDefault();
const form_data = new FormData(ev.target);
const fields = (this.model.get('fields') || [])
.map(field => {
const value = form_data.get(field.name).trim();
field.value = value;
if (field.challenge) {
field.challenge_failed = (value !== field.challenge);
}
return field;
});
if (fields.filter(c => c.challenge_failed).length) {
this.model.set('fields', fields);
// Setting an array doesn't trigger a change event
this.model.trigger('change');
return;
}
this.confirmation.resolve(fields);
this.modal.hide();
}
renderModalFooter () { // eslint-disable-line class-methods-use-this
return '';
}
}
api.elements.define('converse-confirm-modal', Confirm);