houdini/client/js/nonprofits/supporters/index/sidepanel/generate-content.js
2019-01-30 16:38:05 -06:00

128 lines
3.9 KiB
JavaScript

// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const R = require('ramda')
const marked = require('marked')
const format = require('../../../../common/format')
// generate titles and bodies from activity json data
const pathPrefix = `/nonprofits/${app.nonprofit_id}`
module.exports = exports = {}
const viewPaymentLink = data =>
h('p', [ h('a', {props: {href: `${pathPrefix}/payments?pid=${data.attachment_id}`}}, 'View payment details.') ])
exports.RecurringDonation = (data, state) => {
return {
title: `Paid $${format.centsToDollars(data.json_data.gross_amount)} towards a recurring donation`
, body: [
viewDedication(data)
, h('p', `Started on ${format.date.toSimple(data.json_data.start_date)}. `)
, viewPaymentLink(data)
]
, icon: 'fa-heart'
}
}
const viewDedication = data =>
data.json_data.dedication && data.json_data.dedication.name
? h("p", [
`Dedicated in ${data.json_data.dedication.type || 'honor'} of `
, h('a', {props: {href: `/nonprofits/${ENV.nonprofitID}/supporters?sid=${data.json_data.dedication.supporter_id}`}}, data.json_data.dedication.name)
])
: ''
exports.Donation = (data, state) => {
const desig = data.json_data.designation ? h('p', `Designation: ${data.json_data.designation}. `) : ''
return {
title: `Donated $${format.centsToDollars(data.json_data.gross_amount)}`
, body: [
desig
, viewDedication(data)
, viewPaymentLink(data)
]
, icon: 'fa-heart'
}
}
exports.Ticket = (data, state) => {
var paren = data.json_data.gross_amount ? `(totalling $${format.centsToDollars(data.json_data.gross_amount)})` : '(for free)'
return {
title: `Redeemed ${data.json_data.quantity} tickets ${paren} for the event: ${data.json_data.event_name}`
, body: ''
, icon: 'fa-ticket'
}
}
exports.Refund = (data, state) => {
return {
title: `Refunded $${format.centsToDollars(-data.json_data.gross_amount)}`
, body: [
h('span', `Reason: ${format.snake_to_words(data.json_data.reason||'none')}. `)
, h('br')
, viewPaymentLink(data)
]
, icon: 'fa-reply'
}
}
exports.Dispute = (data, state) => {
return {
title: `This supporter disputed (made a charge-back) on their payment for $${format.centsToDollars(data.json_data.gross_amount)} on ${format.date.toSimple(data.json_data.original_date)}`
, body: [
h('span', `Reason given: ${format.snake_to_words(data.json_data.reason||'none')}. `)
, h('br')
, viewPaymentLink(data)
]
, icon: 'fa-ban'
}
}
exports.SupporterNote = (data, state) => {
const action = data.created_at === data.updated_at ? 'added' : 'edited'
const canEdit = data.user_id === app.user_id
return {
title: `Note ${action}${data.json_data.user_email ? ' by ' + data.json_data.user_email : ''}`
, body: [
h('span', {props: {innerHTML: marked(data.json_data.content ? data.json_data.content : '')}})
, canEdit
? h('span', [
h('a.u-marginRight--10', {on: {click: [state.editNote$, data]}}, 'Edit ')
, h('span.u-color--red.u-pointer', {on: {click: [state.deleteNote$, data]}}, 'Delete')
])
: ''
]
, icon: 'fa-pencil'
}
}
exports.SupporterEmail = (data, state) => {
var jd = data.json_data
var canView = false
var body = [h('span', `Subject: ${jd.subject}`), h('br')]
var thread = h('a', {props: {href: '#'}, on: {click: [state.threadId$, jd.gmail_thread_id]}}, 'View thread')
return {
title: `Email thread started by ${jd.from}`
, icon: 'fa-envelope'
, body: body
// , body: canView ? R.concat(body, thread) : R.concat(body, signIn)
}
}
exports.OffsitePayment = (data, state) => {
const desig = data.json_data.designation ? `Designation: ${data.json_data.designation}. ` : ''
return {
title: `Donated $${format.centsToDollars(data.json_data.gross_amount)} (offsite)`
, body: [
h('span', desig)
, desig ? h('br') : ''
, viewPaymentLink(data)
]
, icon: 'fa-money'
}
}