67 lines
2.1 KiB
JavaScript
67 lines
2.1 KiB
JavaScript
// License: LGPL-3.0-or-later
|
|
const R = require('ramda')
|
|
const h = require('snabbdom/h')
|
|
const flyd = require('flyd')
|
|
const render = require('ff-core/render')
|
|
const request = require('../common/request')
|
|
const snabbdom = require('snabbdom')
|
|
const flyd_lift = require('flyd/module/lift')
|
|
const flyd_mergeAll = require('flyd/module/mergeall')
|
|
const url = require('url')
|
|
|
|
// TODO move this into sub-component in the future
|
|
const mailchimpModal = require('./settings/mailchimp-integration-settings')
|
|
|
|
// This is the root component for the supporters dashboard/CRM, found on /nonprofits/:nonprofit_id/supporters
|
|
|
|
function init() {
|
|
var state = { }
|
|
var thisUrl = url.parse(location.href, true)
|
|
const mailchimpSyncClick$ = getMailchimpClickSync()
|
|
const mailchimpKeyResp$ = request({method: 'get', path: `/nonprofits/${app.nonprofit_id}/nonprofit_keys`, query: {select: 'mailchimp_token'}}).load
|
|
const hasKey$ = flyd.filter(resp => resp.status === 200, mailchimpKeyResp$)
|
|
const modalID$ = flyd_mergeAll([
|
|
flyd_lift(openModalOrAuth, mailchimpSyncClick$, mailchimpKeyResp$)
|
|
, flyd.map(()=> thisUrl.query['show-modal'], hasKey$)
|
|
])
|
|
state.mailchimpModal = mailchimpModal.init(modalID$)
|
|
return state
|
|
}
|
|
|
|
// Either return the modal ID to open, or redirect the page to the mailchimp oauth screen
|
|
const openModalOrAuth = (ev, resp) => {
|
|
if(resp.status === 200) {
|
|
return 'mailchimpSettingsModal'
|
|
} else {
|
|
window.location.href = `/nonprofits/${app.nonprofit_id}/nonprofit_keys/mailchimp_login`
|
|
return null
|
|
}
|
|
}
|
|
|
|
const getMailchimpClickSync = () => {
|
|
const s = flyd.stream()
|
|
document.querySelector('.js-openMailchimpModal')
|
|
.addEventListener('click', ev => {appl.close_modal(); s(ev)})
|
|
return s
|
|
}
|
|
|
|
|
|
function view(state) {
|
|
return h('div', [
|
|
mailchimpModal.view(state.mailchimpModal)
|
|
])
|
|
}
|
|
|
|
|
|
// -- Render to the page
|
|
|
|
var container = document.querySelector('#js-main')
|
|
const patch = snabbdom.init([
|
|
require('snabbdom/modules/eventlisteners')
|
|
, require('snabbdom/modules/class')
|
|
, require('snabbdom/modules/props')
|
|
, require('snabbdom/modules/style')
|
|
])
|
|
var state = init()
|
|
render({patch, view, state, container})
|
|
|