53 lines
1.6 KiB
JavaScript
53 lines
1.6 KiB
JavaScript
|
// 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, {tier: app.current_plan_tier})
|
||
|
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}
|
||
|
|