68 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			68 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})
							 | 
						||
| 
								 | 
							
								
							 |