houdini/app/javascript/legacy/nonprofits/button/designations.js

87 lines
2.8 KiB
JavaScript
Raw Normal View History

2019-11-06 20:36:28 +00:00
// License: LGPL-3.0-or-later
var flyd = require("flyd")
var h = require("virtual-dom/h")
var footer = require('./footer')
var radioAndLabelWrapper = require('../../components/radio-and-label-wrapper')
var nameStream = flyd.stream()
var countStream = flyd.stream()
var inputStream = flyd.stream()
flyd.map(function(keyup){
keyup.target.value = keyup.target.value.replace(/[&"_*`'~]/g, "")
}, inputStream)
var namePrefix = 'settings.designations.'
module.exports = {
root: root,
streams: {
name: flyd.merge(nameStream, inputStream),
count: countStream
}
}
function root(state) {
return [
h('header.step-header', h('h4.step-title', 'Designations')),
h('div.step-inner',
[
body(state),
footer.root('Next', 'amounts')
])
]
}
function body(state){
var desigs = state.settings.designations
return [menu(),
input(desigs),
inputs(desigs)]
}
function menu(){
return h('aside',[
radioAndLabelWrapper('radio-no-designations', namePrefix + 'name', {'checked': 'checked', 'value': ''},
["I want ", h('strong', 'no'), " designation."], nameStream),
radioAndLabelWrapper('radio-single-designations', namePrefix + 'name', {'value': 'single'},
["I want a ", h('strong', 'single, preset'), " designation."], nameStream),
radioAndLabelWrapper('radio-multiple-designations', namePrefix + 'name', {'value': 'multiple'},
["I want donors to be able to select from ", h('strong', 'multiple'), " designations (up to 20)."], nameStream),
])
}
function input(desigs){
return h('input.u-marginTop--15.input--400',
{placeholder: 'Designation name', attributes: {'maxlength': 50}, name: namePrefix + 'single', style: {display: desigs.name === 'single' ? 'block' : 'none'},
onchange: inputStream
}
)
}
function inputs(desigs){
var prompt = [h('p.pastelBox--green.u-padding--10.u-marginY--10', 'If you would like to add a custom prompt to your donors, \
please enter it below. Example: "Which radio show would you like to donate to?". The default prompt is "Please select a designation".'),
h('input.u-marginTop--10.input--400',
{placeholder: 'Prompt to donors', attributes: {'maxlength': 50}, name: namePrefix + 'prompt', onkeyup: inputStream})
]
var inputs = []
for(var i = 0; i < desigs.count; i++) {
inputs.push(h('li', h('input.input--400', {attributes: {'maxlength': 50}, placeholder: 'Designation name', name: namePrefix + 'multiples.' + i, onchange: inputStream})))
}
return h('div', {style: {display: desigs.name === 'multiple' ? 'block' : 'none'}}, [
prompt,
h('p.pastelBox--blue.u-padding--10.u-marginY--10', 'Enter your designations below.'),
h('ol', [
inputs,
h('a.button--tiny.edit', {onclick: countStream, attributes: isDisabled(desigs.count)}, [h('i.fa.fa-plus'), ' Add another designation']),
])
])
}
function isDisabled(count){ if(count >= 20){return {'disabled' : ''}}}