feat(contributions): rewrite server config as preset-based helpers
This commit is contained in:
parent
03eee45cbd
commit
55af652263
2 changed files with 98 additions and 39 deletions
|
|
@ -1,28 +1,29 @@
|
|||
// Server-side contribution config
|
||||
export const CONTRIBUTION_TIERS = {
|
||||
FREE: { value: "0", amount: 0, label: "$0 - I need support right now", tier: "free" },
|
||||
SUPPORTER: { value: "5", amount: 5, label: "$5 - I can contribute", tier: "supporter" },
|
||||
MEMBER: { value: "15", amount: 15, label: "$15 - I can sustain the community", tier: "member" },
|
||||
ADVOCATE: { value: "30", amount: 30, label: "$30 - I can support others too", tier: "advocate" },
|
||||
CHAMPION: { value: "50", amount: 50, label: "$50 - I want to sponsor multiple members", tier: "champion" },
|
||||
// Server-side contribution config.
|
||||
// Parallel to app/config/contributions.js but also hosts getHelcimPlanId,
|
||||
// which is server-only (depends on runtime config).
|
||||
|
||||
export const CONTRIBUTION_PRESETS = [
|
||||
{ amount: 0, label: "I need support right now" },
|
||||
{ amount: 5, label: "I can contribute" },
|
||||
{ amount: 15, label: "I can sustain the community" },
|
||||
{ amount: 30, label: "I can support others too" },
|
||||
{ amount: 50, label: "I want to sponsor multiple members" },
|
||||
]
|
||||
|
||||
export const requiresPayment = (amount) => amount > 0
|
||||
|
||||
export const isValidContributionAmount = (amount) =>
|
||||
Number.isInteger(amount) && amount >= 0
|
||||
|
||||
export const getGuidanceLabel = (amount) => {
|
||||
if (amount === null || amount === undefined) return null
|
||||
const n = Number(amount)
|
||||
if (!Number.isFinite(n) || n < 0) return null
|
||||
const match = CONTRIBUTION_PRESETS.findLast(p => p.amount <= n)
|
||||
return match?.label ?? null
|
||||
}
|
||||
|
||||
export const getContributionOptions = () => Object.values(CONTRIBUTION_TIERS)
|
||||
export const getValidContributionValues = () => Object.values(CONTRIBUTION_TIERS).map(t => t.value)
|
||||
export const getContributionTierByValue = (value) =>
|
||||
Object.values(CONTRIBUTION_TIERS).find(t => t.value === value)
|
||||
export const requiresPayment = (value) => (getContributionTierByValue(value)?.amount ?? 0) > 0
|
||||
export const isValidContributionValue = (value) => getValidContributionValues().includes(value)
|
||||
export const getPaidContributionTiers = () =>
|
||||
Object.values(CONTRIBUTION_TIERS).filter(t => t.amount > 0)
|
||||
|
||||
export function getTierAmount(tier, cadence = 'monthly') {
|
||||
const base = parseFloat(tier.amount)
|
||||
return cadence === 'annual' ? base * 10 : base
|
||||
}
|
||||
|
||||
// Cadence-keyed plan-id lookup. Throws via createError at call site if env missing;
|
||||
// this helper just returns the raw runtime-config value.
|
||||
// Cadence-keyed plan-id lookup. Unrelated to the tier concept.
|
||||
export function getHelcimPlanId(cadence) {
|
||||
const config = useRuntimeConfig()
|
||||
if (cadence === 'annual') return config.helcimAnnualPlanId || null
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue