JSFiddle - React, Tailwind, and code Playground
by codemeasandwich
HTML
<script src="https://unpkg.com/react/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom/umd/react-dom.development.js"></script>
<script src="https://js.stripe.com/v3/stripe.js"></script>
<script src="https://unpkg.com/react-stripe-elements@latest/dist/react-stripe-elements.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css">
<body>
<div class="App">
</div>
</body>
CSS
* {
box-sizing: border-box;
}
.StripeElement {
width: 500px;
}
.StripeElement--focus {
border-color: #80bdff;
outline: 0;
box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
}
Babel + JSX
const {
CardElement,
StripeProvider,
Elements,
injectStripe,
} = ReactStripeElements;
const handleBlur = () => {
console.log('[blur]');
};
const handleChange = change => {
console.log('[change]', change);
};
const handleClick = () => {
console.log('[click]');
};
const handleFocus = () => {
console.log('[focus]');
};
const handleReady = () => {
console.log('[ready]');
};
const createOptions = (fontSize) => {
return {
style: {
base: {
fontSize: "16px",
color: '#495057',
fontFamily: '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"',
'::placeholder': {
color: "#868e96",
},
},
invalid: {
color: '#9e2146',
},
},
};
};
class _CardForm extends React.Component {
handleSubmit = ev => {
ev.preventDefault();
this.props.stripe.createToken().then(payload => console.log(payload));
};
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Card details {JSON.stringify(createOptions(this.props.fontSize))}
<CardElement className="form-control"
onBlur={handleBlur}
onChange={handleChange}
onFocus={handleFocus}
onReady={handleReady}
{...createOptions(this.props.fontSize)}
/>
</label>
</form>
);
}
}
const CardForm = injectStripe(_CardForm);
class Checkout extends React.Component {
constructor() {
super();
this.state = {
elementFontSize: window.innerWidth < 450 ? '14px' : '18px',
};
window.addEventListener('resize', () => {
if (window.innerWidth < 450 && this.state.elementFontSize !== '14px') {
this.setState({elementFontSize: '14px'});
} else if (
window.innerWidth >= 450 &&
this.state.elementFontSize !== '18px'
) {
this.setState({elementFontSize: '18px'});
...