puffin-app/src/components/CurrencySelect.tsx
Matt 06733cb2cb
All checks were successful
Build and Push Docker Image / docker (push) Successful in 42s
Integrate Stripe Checkout and add comprehensive UI enhancements
## Stripe Payment Integration
- Add Express.js backend server with Stripe Checkout Sessions
- Create SQLite database for order tracking
- Implement Stripe webhook handlers for payment events
- Integrate with Wren Climate API for carbon offset fulfillment
- Add CheckoutSuccess and CheckoutCancel pages
- Create checkout API client for frontend
- Update OffsetOrder component to redirect to Stripe Checkout
- Add processing fee calculation (3% of base amount)
- Implement order status tracking (pending → paid → fulfilled)

Backend (server/):
- Express server with CORS and middleware
- SQLite database with Order schema
- Stripe configuration and client
- Order CRUD operations model
- Checkout session creation endpoint
- Webhook handler for payment confirmation
- Wren API client for offset fulfillment

Frontend:
- CheckoutSuccess page with order details display
- CheckoutCancel page with retry encouragement
- Updated OffsetOrder to use Stripe checkout flow
- Added checkout routes to App.tsx
- TypeScript interfaces for checkout flow

## Visual & UX Enhancements
- Add CertificationBadge component for project verification status
- Create PortfolioDonutChart for visual portfolio allocation
- Implement RadialProgress for percentage displays
- Add reusable form components (FormInput, FormTextarea, FormSelect, FormFieldWrapper)
- Refactor OffsetOrder with improved layout and animations
- Add offset percentage slider with visual feedback
- Enhance MobileOffsetOrder with better responsive design
- Improve TripCalculator with cleaner UI structure
- Update CurrencySelect with better styling
- Add portfolio distribution visualization
- Enhance project cards with hover effects and animations
- Improve color palette and gradient usage throughout

## Configuration
- Add VITE_API_BASE_URL environment variable
- Create backend .env.example template
- Update frontend .env.example with API URL
- Add Stripe documentation references

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-29 21:45:14 +01:00

34 lines
1012 B
TypeScript

import React from 'react';
import type { CurrencyCode } from '../types';
import { currencies } from '../utils/currencies';
import { FormSelect } from './forms/FormSelect';
interface Props {
value: CurrencyCode;
onChange: (currency: CurrencyCode) => void;
id?: string;
label?: string;
}
export function CurrencySelect({ value, onChange, id = 'currency-select', label = 'Select Currency' }: Props) {
// Get the symbol for the currently selected currency
// Use $ for CHF instead of showing 'CHF' text
const symbol = currencies[value]?.symbol || '$';
const currentSymbol = symbol === 'CHF' ? '$' : symbol;
return (
<FormSelect
id={id}
label={label}
icon={<span className="text-lg font-semibold">{currentSymbol}</span>}
value={value}
onChange={(e) => onChange(e.target.value as CurrencyCode)}
>
{Object.entries(currencies).map(([code]) => (
<option key={code} value={code}>
{code}
</option>
))}
</FormSelect>
);
}