53 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // License: LGPL-3.0-or-later
 | |
| // npm
 | |
| const snabbdom = require('snabbdom')
 | |
| const flyd = require('flyd')
 | |
| const R = require('ramda')
 | |
| const render = require('ff-core/render')
 | |
| flyd.flatMap = require('flyd/module/flatmap')
 | |
| flyd.filter = require('flyd/module/filter')
 | |
| flyd.mergeAll = require('flyd/module/mergeall')
 | |
| const notification = require('ff-core/notification')
 | |
| // local
 | |
| const fonts = require('../../../common/brand-fonts')
 | |
| const request = require('../../../common/request')
 | |
| const colorPicker = require('../../../components/color-picker.es6')
 | |
| const view = require('./view')
 | |
| 
 | |
| function init() {
 | |
|   var np = R.merge(app.nonprofit, {})
 | |
|   var state = {
 | |
|     nonprofit: np
 | |
|   , font$: flyd.stream({
 | |
|       key: np.brand_font || 'bitter'
 | |
|     , family: np.brand_font ? fonts[np.brand_font].family : fonts.bitter.family
 | |
|     , name: np.brand_font ? fonts[np.brand_font]['name'] : 'Bitter'
 | |
|     })
 | |
|   , color: np.brand_color
 | |
|   , submit$:  flyd.stream()
 | |
|   , color$: flyd.stream()
 | |
|   }
 | |
| 
 | |
|   const resp$ = flyd.flatMap(
 | |
|     state => flyd.map(R.prop('body'), request({
 | |
|       method: 'put'
 | |
|     , path: `/nonprofits/${np.id}`
 | |
|     , send: {nonprofit: { brand_color: state.colorPicker.color$(), brand_font: state.font$().key }}
 | |
|     }).load)
 | |
|   , state.submit$)
 | |
| 
 | |
|   var notify$ = flyd.map(()=> 'We successfully saved your branding settings!', resp$)
 | |
| 
 | |
|   state.loading$ = flyd.mergeAll([
 | |
|     flyd.map(()=> true, state.submit$)
 | |
|   , flyd.map(()=> false, resp$)
 | |
|   ])
 | |
| 
 | |
|   state.notification = notification.init({message$: notify$})
 | |
|   state.colorPicker = colorPicker.init(state.nonprofit.brand_color)
 | |
| 
 | |
|   return state
 | |
| }
 | |
| 
 | |
| module.exports = {view, init}
 | |
| 
 | 
