Skip to content

Feat(rnpsw): Add Demo Project #222

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .yarnrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nodeLinker: node-modules
174 changes: 97 additions & 77 deletions README.md

Large diffs are not rendered by default.

39 changes: 39 additions & 0 deletions demo/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files

# dependencies
node_modules/

# Expo
.expo/
dist/
web-build/
expo-env.d.ts

# Native
.kotlin/
*.orig.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision

# Metro
.metro-health-check*

# debug
npm-debug.*
yarn-debug.*
yarn-error.*

# macOS
.DS_Store
*.pem

# local env files
.env*.local

# typescript
*.tsbuildinfo

app-example
Binary file added demo/.yarn/install-state.gz
Binary file not shown.
1 change: 1 addition & 0 deletions demo/.yarnrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nodeLinker: node-modules
154 changes: 154 additions & 0 deletions demo/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
# React Native Paystack WebView Demo

This is a clean, interactive demo showcasing the React Native Paystack WebView library in action. The demo provides a streamlined payment interface that demonstrates the library's core functionality.

## 🚀 Features

- **Clean UI/UX**: Modern, minimalist design with smooth interactions
- **Real Paystack Integration**: Uses the actual Paystack WebView library
- **Form Validation**: Email and amount validation with real-time feedback
- **Payment Processing**: Simulates the complete payment flow
- **Mobile Optimized**: Touch-friendly interface with proper keyboard handling
- **Status Bar Integration**: Proper status bar styling for iOS/Android

## 🎯 Demo Features

### Interactive Payment Flow

- Enter email and amount
- Real-time form validation
- Process payment through Paystack WebView
- Success/error handling with user feedback
- Clean, intuitive interface

### UI Components

- **Header**: Gradient background with payment info and amount display
- **Form Inputs**: Email and amount with validation and proper keyboard handling
- **Payment Button**: Dynamic state with loading indicator
- **Demo Notice**: Clear indication this is a demo environment
- **Status Bar**: Light status bar for better visual integration

## 🛠️ Technical Details

### Integration

- Uses `PaystackProvider` from the development library
- Implements `usePaystack` hook for payment processing
- Proper TypeScript types and error handling
- Safe area handling for different device types

### Styling

- Modern color scheme with Paystack branding
- Smooth animations and transitions
- Responsive design for different screen sizes
- Proper spacing and typography
- Status bar integration

### Validation

- Email format validation
- Amount validation (positive numbers only)
- Required field validation
- Real-time feedback

## 🚀 Running the Demo

1. **Start the development server**:

```bash
yarn start
# or
npm start
```

2. **Open on your device**:

- Scan the QR code with Expo Go app
- Or press 'i' for iOS simulator
- Or press 'a' for Android emulator

3. **Test the payment flow**:
- Enter a valid email (e.g., `[email protected]`)
- Enter an amount (e.g., `5000`)
- Tap "Pay" to initiate payment
- Experience the WebView integration

## 📱 Demo Screenshots

🎥 [Watch the demo video on Imgur](https://imgur.com/a/E3pH8Hu)

## 🔧 Configuration

### Paystack Setup

The demo uses a test public key. To use your own:

1. Replace the public key in `app/_layout.tsx`:

```typescript
publicKey = 'pk_test_YOUR_TEST_KEY_HERE';
```

2. For production, use your live key:
```typescript
publicKey = 'pk_live_YOUR_LIVE_KEY_HERE';
```

### Customization

- Modify colors in the component styles
- Update validation rules
- Customize success/error messages
- Adjust status bar styling

## 🎨 Design System

### Colors

- Primary: `#667eea` (Paystack Blue)
- Background: `#f8fafc` (Light Gray)
- Text: `#1a202c` (Dark Gray)
- Input Border: `#e2e8f0` (Light Gray)
- Success: `#48bb78` (Green)
- Error: `#f56565` (Red)

### Typography

- Headers: Bold, 24px
- Body: Regular, 16px
- Labels: Semi-bold, 16px
- Amount Display: Bold, 32px

### Spacing

- Consistent 8px grid system
- Proper padding and margins
- Touch-friendly button sizes
- Safe area handling

## 🔒 Security

- SSL encryption notice
- Secure payment processing
- No sensitive data stored
- Demo environment only

## 📄 License

This demo is part of the React Native Paystack WebView project and follows the same MIT license.

## 🤝 Contributing

[Contributing guide](https://github.com/just1and0/React-Native-Paystack-WebView/blob/main/CONTRIBUTING.md)

## 🔗 Links

- [Main Library Repository](https://github.com/just1and0/React-Native-Paystack-WebView)
- [Paystack Documentation](https://paystack.com/docs)
- [React Native WebView](https://github.com/react-native-webview/react-native-webview)

---

**Enjoy testing the React Native Paystack WebView library! 🎉**
42 changes: 42 additions & 0 deletions demo/app.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"expo": {
"name": "demo",
"slug": "demo",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/images/icon.png",
"scheme": "demo",
"userInterfaceStyle": "automatic",
"newArchEnabled": true,
"ios": {
"supportsTablet": true
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/images/adaptive-icon.png",
"backgroundColor": "#ffffff"
},
"edgeToEdgeEnabled": true
},
"web": {
"bundler": "metro",
"output": "static",
"favicon": "./assets/images/favicon.png"
},
"plugins": [
"expo-router",
[
"expo-splash-screen",
{
"image": "./assets/images/splash-icon.png",
"imageWidth": 200,
"resizeMode": "contain",
"backgroundColor": "#ffffff"
}
]
],
"experiments": {
"typedRoutes": true
}
}
}
20 changes: 20 additions & 0 deletions demo/app/_layout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { Stack } from 'expo-router';
import { PaystackProvider } from '../../development/PaystackProvider';

export default function Layout() {
return (
<PaystackProvider
publicKey="pk_test_d319f8851d3f60e748d8c67ac58af67ba0ecd72d"
currency="NGN"
debug={true}
onGlobalSuccess={(res) => console.log('Global Success:', res)}
onGlobalCancel={() => console.log('Global Cancel')}
>
<Stack
screenOptions={{
headerShown: false,
}}
/>
</PaystackProvider>
);
}
Loading