74 lines
1.9 KiB
JavaScript
74 lines
1.9 KiB
JavaScript
// License: LGPL-3.0-or-later
|
|
const snabbdom = require('snabbdom')
|
|
const flyd = require('flyd')
|
|
const h = require('snabbdom/h')
|
|
const R = require('ramda')
|
|
const modal = require('ff-core/modal')
|
|
const render = require('ff-core/render')
|
|
const request = require('../../../common/request')
|
|
|
|
function init() {
|
|
var state = {}
|
|
state.modalID$ = flyd.stream()
|
|
state.data$ = flyd.map(R.prop('body'), request({
|
|
path: `/nonprofits/${app.nonprofit_id}/recurring_donation_stats`
|
|
, method: 'get'
|
|
}).load)
|
|
|
|
document
|
|
.querySelector('.js-openStatsModal')
|
|
.addEventListener('click', ev => state.modalID$('statsModal'))
|
|
|
|
return state
|
|
}
|
|
|
|
function view(state) {
|
|
if(!state.data$()) return h('div')
|
|
|
|
var body = h('table.table', [
|
|
h('tbody', [
|
|
h('tr', [
|
|
h('td', [h('strong', 'Active')])
|
|
, h('td', `${state.data$().active_count} Donations`)
|
|
, h('td', `${state.data$().active_sum} Total`)
|
|
])
|
|
, h('tr', [
|
|
h('td', [h('strong', 'Average Amount')])
|
|
, h('td', `${state.data$().average} per month`)
|
|
, h('td', '')
|
|
])
|
|
, h('tr', [
|
|
h('td', [h('strong', 'Cancelled')])
|
|
, h('td', `${state.data$().cancelled_count} Donations`)
|
|
, h('td', `${state.data$().cancelled_sum} Total`)
|
|
])
|
|
, h('tr', [
|
|
h('td', [h('strong', 'Charge Failures')])
|
|
, h('td', `${state.data$().failed_count} Donations`)
|
|
, h('td', `${state.data$().failed_sum} Total`)
|
|
])
|
|
])
|
|
])
|
|
|
|
return h('div', [
|
|
modal({
|
|
title: h('h4', 'Recurring Donations')
|
|
, id$: state.modalID$
|
|
, thisID: 'statsModal'
|
|
, body
|
|
})
|
|
])
|
|
}
|
|
|
|
|
|
// -- Render
|
|
const patch = snabbdom.init([
|
|
require('snabbdom/modules/eventlisteners')
|
|
, require('snabbdom/modules/class')
|
|
, require('snabbdom/modules/props')
|
|
, require('snabbdom/modules/style')
|
|
])
|
|
var container = document.querySelector('.js-flimflamContainer')
|
|
var state = init()
|
|
render({patch, view, container, state})
|
|
|