import { fire, stopEverything } from “../utils/event”
const handleConfirmWithRails = (rails) => function(e) {
if (!allowAction(this, rails)) { stopEverything(e) }
}
// Default confirm dialog, may be overridden with custom confirm dialog in Rails.confirm const confirm = (message, element) => window.confirm(message)
// For ‘data-confirm’ attribute: // - Fires ‘confirm` event // - Shows the confirmation dialog // - Fires the `confirm:complete` event // // Returns `true` if no function stops the chain and user chose yes `false` otherwise. // Attaching a handler to the element’s ‘confirm` event that returns a `falsy` value cancels the confirmation dialog. // Attaching a handler to the element’s ‘confirm:complete` event that returns a `falsy` value makes this function // return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog. var allowAction = function(element, rails) {
let callback const message = element.getAttribute("data-confirm") if (!message) { return true } let answer = false if (fire(element, "confirm")) { try { answer = rails.confirm(message, element) } catch(error) { /* do nothing */ } callback = fire(element, "confirm:complete", [answer]) } return answer && callback
}
export { handleConfirmWithRails, confirm }