// License: LGPL-3.0-or-later const flyd = require('flyd') const h = require('snabbdom/h') const R = require('ramda') const moment = require('moment') const request = require('../common/request') // type can be 'campaign' or 'event' const init = (type, path) => { const resp$ = request({method: 'get', path}).load const formattedResp$ = flyd.map(formatResp[type], resp$) return {formattedResp$} } const ago = date => moment(date).fromNow() const formatRecurring = o => o.recurring ? `made a recurring contribution of` : `contributed` const formatCampaign = r => R.map(o => { return { name: o.supporter_name , action: formatRecurring(o) + ' ' + o.amount , date: ago(o.date) } }, r.body) const formatEvent = r => R.map(o => { return { name: o.supporter_name , action: `got ${o.quantity} ticket${o.quantity > 1 ? 's' : ''}` , date: ago(o.created_at) } }, r.body) const formatResp = { campaign: formatCampaign , event: formatEvent } const activities = data => { return h('tr', [ h('td.u-padding--10.u-fontSize--13', [h('strong', data.name), data.action? h('div.u-marginTop--3', data.action) : '']) , h('td.u-textAlign--right.u-fontSize--12.strong.u-paddingRight--10', [h('small', data.date)]) ]) } const view = state => { if(app.hide_activities) return '' const mixin = content => h('section.pastelBox--grey', [h('header', 'Recent Activity'), content]) if (!state.formattedResp$()) return mixin(h('div.u-padding--15.u-centered.u-color--grey', 'Loading...')) if (!state.formattedResp$().length) return mixin(h('div.u-padding--15.u-centered.u-color--grey', 'None yet')) return mixin(h('table.u-margin--0.table--striped', [ h('tbody', R.map(activities, state.formattedResp$())) ])) } module.exports = {init, view}