Implement multi-step registration process: Add step indicators, error handling, and payment processing for membership registration. Enhance form validation and user feedback with success and error messages. Refactor state management for improved clarity and maintainability.
This commit is contained in:
parent
a88aa62198
commit
2ca290d6e0
22 changed files with 1994 additions and 213 deletions
111
server/config/contributions.js
Normal file
111
server/config/contributions.js
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
// Server-side contribution config
|
||||
// Copy of the client-side config for server use
|
||||
|
||||
// Central configuration for Ghost Guild Contribution Levels and Helcim Plans
|
||||
export const CONTRIBUTION_TIERS = {
|
||||
FREE: {
|
||||
value: '0',
|
||||
amount: 0,
|
||||
label: '$0 - I need support right now',
|
||||
tier: 'free',
|
||||
helcimPlanId: null, // No Helcim plan needed for free tier
|
||||
features: [
|
||||
'Access to basic resources',
|
||||
'Community forum access'
|
||||
]
|
||||
},
|
||||
SUPPORTER: {
|
||||
value: '5',
|
||||
amount: 5,
|
||||
label: '$5 - I can contribute a little',
|
||||
tier: 'supporter',
|
||||
helcimPlanId: 20162,
|
||||
features: [
|
||||
'All Free Membership benefits',
|
||||
'Priority community support',
|
||||
'Early access to events'
|
||||
]
|
||||
},
|
||||
MEMBER: {
|
||||
value: '15',
|
||||
amount: 15,
|
||||
label: '$15 - I can sustain the community',
|
||||
tier: 'member',
|
||||
helcimPlanId: null, // TODO: Create $15/month plan in Helcim dashboard
|
||||
features: [
|
||||
'All Supporter benefits',
|
||||
'Access to premium workshops',
|
||||
'Monthly 1-on-1 sessions',
|
||||
'Advanced resource library'
|
||||
]
|
||||
},
|
||||
ADVOCATE: {
|
||||
value: '30',
|
||||
amount: 30,
|
||||
label: '$30 - I can support others too',
|
||||
tier: 'advocate',
|
||||
helcimPlanId: null, // TODO: Create $30/month plan in Helcim dashboard
|
||||
features: [
|
||||
'All Member benefits',
|
||||
'Weekly group mentoring',
|
||||
'Access to exclusive events',
|
||||
'Direct messaging with experts'
|
||||
]
|
||||
},
|
||||
CHAMPION: {
|
||||
value: '50',
|
||||
amount: 50,
|
||||
label: '$50 - I want to sponsor multiple members',
|
||||
tier: 'champion',
|
||||
helcimPlanId: null, // TODO: Create $50/month plan in Helcim dashboard
|
||||
features: [
|
||||
'All Advocate benefits',
|
||||
'Personal mentoring sessions',
|
||||
'VIP event access',
|
||||
'Custom project support',
|
||||
'Annual strategy session'
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
// Get all contribution options as an array (useful for forms)
|
||||
export const getContributionOptions = () => {
|
||||
return Object.values(CONTRIBUTION_TIERS);
|
||||
};
|
||||
|
||||
// Get valid contribution values for validation
|
||||
export const getValidContributionValues = () => {
|
||||
return Object.values(CONTRIBUTION_TIERS).map(tier => tier.value);
|
||||
};
|
||||
|
||||
// Get contribution tier by value
|
||||
export const getContributionTierByValue = (value) => {
|
||||
return Object.values(CONTRIBUTION_TIERS).find(tier => tier.value === value);
|
||||
};
|
||||
|
||||
// Get Helcim plan ID for a contribution tier
|
||||
export const getHelcimPlanId = (contributionValue) => {
|
||||
const tier = getContributionTierByValue(contributionValue);
|
||||
return tier?.helcimPlanId || null;
|
||||
};
|
||||
|
||||
// Check if a contribution tier requires payment
|
||||
export const requiresPayment = (contributionValue) => {
|
||||
const tier = getContributionTierByValue(contributionValue);
|
||||
return tier?.amount > 0;
|
||||
};
|
||||
|
||||
// Check if a contribution value is valid
|
||||
export const isValidContributionValue = (value) => {
|
||||
return getValidContributionValues().includes(value);
|
||||
};
|
||||
|
||||
// Get contribution tier by Helcim plan ID
|
||||
export const getContributionTierByHelcimPlan = (helcimPlanId) => {
|
||||
return Object.values(CONTRIBUTION_TIERS).find(tier => tier.helcimPlanId === helcimPlanId);
|
||||
};
|
||||
|
||||
// Get paid tiers only (excluding free tier)
|
||||
export const getPaidContributionTiers = () => {
|
||||
return Object.values(CONTRIBUTION_TIERS).filter(tier => tier.amount > 0);
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue