react-native-ecommerce-components
Version:
A compilation of components to optimize the development of your ecommerce
81 lines (78 loc) • 3.44 kB
JavaScript
import React, { useState } from 'react';
import { Text, TextInput, TouchableOpacity, StyleSheet, Alert, ScrollView } from 'react-native';
import { widthPercentageToDP as wp, heightPercentageToDP as hp } from 'react-native-responsive-screen';
const PaymentGateway = ({ onPaymentSubmit, title, subTitle, styles: customStyles = {}, }) => {
const [cardNumber, setCardNumber] = useState('');
const [cardHolder, setCardHolder] = useState('');
const [expirationDate, setExpirationDate] = useState('');
const [cvv, setCvv] = useState('');
const [billingAddress, setBillingAddress] = useState('');
const handlePayment = () => {
if (!cardNumber || !cardHolder || !expirationDate || !cvv) {
Alert.alert('Error', 'Please fill in all required fields.');
return;
}
const paymentDetails = {
cardNumber,
cardHolder,
expirationDate,
cvv,
billingAddress,
};
onPaymentSubmit(paymentDetails);
Alert.alert('Success', 'Payment processed successfully!');
};
return (<ScrollView contentContainerStyle={[styles.container, customStyles.container]}>
<Text style={[styles.title, customStyles.title]}>{title}</Text>
{subTitle && <Text style={[styles.subTitle, customStyles.subTitle]}>{subTitle}</Text>}
<TextInput style={[styles.input, customStyles.input]} placeholder="Card Number" keyboardType="numeric" value={cardNumber} onChangeText={setCardNumber} maxLength={16}/>
<TextInput style={[styles.input, customStyles.input]} placeholder="Card Holder" value={cardHolder} onChangeText={setCardHolder}/>
<TextInput style={[styles.input, customStyles.input]} placeholder="Expiration Date (MM/YY)" value={expirationDate} onChangeText={setExpirationDate} maxLength={5}/>
<TextInput style={[styles.input, customStyles.input]} placeholder="CVV" keyboardType="numeric" secureTextEntry value={cvv} onChangeText={setCvv} maxLength={3}/>
<TextInput style={[styles.input, customStyles.input]} placeholder="Billing Address (Optional)" value={billingAddress} onChangeText={setBillingAddress}/>
<TouchableOpacity style={[styles.button, customStyles.button]} onPress={handlePayment}>
<Text style={[styles.buttonText, customStyles.buttonText]}>Submit Payment</Text>
</TouchableOpacity>
</ScrollView>);
};
const styles = StyleSheet.create({
container: {
padding: wp('5%'),
backgroundColor: '#fff',
borderRadius: wp('3%'),
elevation: 2,
},
title: {
fontSize: wp('6%'),
fontWeight: 'bold',
marginBottom: hp('1%'),
textAlign: 'center',
},
subTitle: {
fontSize: wp('4%'),
color: '#555',
marginBottom: hp('2%'),
textAlign: 'center',
},
input: {
height: hp('6%'),
borderColor: '#ccc',
borderWidth: 1,
marginBottom: hp('2%'),
paddingHorizontal: wp('4%'),
borderRadius: wp('2%'),
},
button: {
backgroundColor: '#28a745',
paddingVertical: hp('2%'),
alignItems: 'center',
borderRadius: wp('2%'),
marginTop: hp('2%'),
},
buttonText: {
color: '#fff',
fontWeight: 'bold',
fontSize: wp('4%'),
},
});
export default PaymentGateway;