houdini/client/js/components/confirmation-modal.js

45 lines
1 KiB
JavaScript
Raw Normal View History

// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('snabbdom/h')
const uuid = require('uuid')
const flyd = require('flyd')
const modal = require('ff-core/modal')
const mergeAll = require('flyd/module/mergeall')
// show$ is the stream that shows the confirmation modal
const init = show$ => {
const state = {
confirm$: flyd.stream()
, unconfirm$: flyd.stream()
, ID: uuid.v1()
}
state.modalID$ = mergeAll([
flyd.map(R.always(state.ID), show$)
, flyd.map(R.always(null), state.unconfirm$)
, flyd.map(R.always(null), state.confirm$)])
return state
}
// msg is optional
const view = (state, msg) =>
modal({
id$: state.modalID$
, thisID: state.ID
, notCloseable: true
, body: h('div', [
h('h4', msg || 'Are you sure?')
, h('div', [
h('button', {attrs: {'data-ff-confirm': true}, on: {click: state.confirm$}}
, 'Yes')
, h('button', {attrs: {'data-ff-confirm': false}, on: {click: state.unconfirm$}}
, 'No')
])
])
})
module.exports = {init, view}