45 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			45 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | // License: LGPL-3.0-or-later
 | ||
|  | const h = require('snabbdom/h') | ||
|  | const flyd = require('flyd') | ||
|  | const R = require('ramda') | ||
|  | 
 | ||
|  | const soldOut = require('./is-sold-out') | ||
|  | const giftButton = require('./gift-option-button') | ||
|  | 
 | ||
|  | const giftOption = g => h('option', { props: {value: g.id} }, g.name)  | ||
|  | 
 | ||
|  | const setDisplayGift = (state, gifts) => ev => { | ||
|  |   var id = Number(ev.target.value) | ||
|  |   state.selectedModalGift$(R.find(R.propEq('id', id))(gifts)) | ||
|  | } | ||
|  | 
 | ||
|  | const chooseGift = (state, gifts) => | ||
|  |   h('div.pastelBox--grey.u-padding--10', [ | ||
|  |     h('select.u-margin--0', {on: {change: setDisplayGift(state, gifts)}} | ||
|  |     , R.concat([h('option', 'Choose a gift option')], R.map(giftOption, gifts))) | ||
|  |   , h('div.sideGifts',  | ||
|  |       state.selectedModalGift$() && state.selectedModalGift$().id  | ||
|  |       ? [ | ||
|  |           h('p.u-marginTop--10', state.selectedModalGift$().description || '') | ||
|  |         , giftButton(state.giftOptions, state.selectedModalGift$()) | ||
|  |         ] | ||
|  |       : '' | ||
|  |     ) | ||
|  |   ]) | ||
|  | 
 | ||
|  | const regularContribution = state => { | ||
|  |   if (app.campaign.hide_custom_amounts) return '' | ||
|  |   return h('div.u-marginTop--15.centered', [ | ||
|  |     h('a', {on: {click: state.clickRegularContribution$}}, 'Contribute with no gift option') | ||
|  |   ]) | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = state => { | ||
|  |   var gifts = R.filter(g => !soldOut(g), state.giftOptions.giftOptions$() || [])  | ||
|  |   return h('div.u-padding--15', [ | ||
|  |     chooseGift(state, gifts) | ||
|  |   , regularContribution(state) | ||
|  |   ]) | ||
|  | } | ||
|  | 
 |