import { render } from 'react-dom';
import React from 'react';
import Vendors from './src/vendors';
import PaymentFields from './src/payment-fields.jsx';
export default class PaymentFieldsDemo extends React.PureComponent {
constructor(props) {
super(props);
[
'logEvent',
'getToken',
'onError',
'onTypeChange',
'onFieldsReady',
'onCardTypeChange',
'onValidityChange',
'setAuthorization',
'onNumberValid',
].forEach((prop) => { this[prop] = this[prop].bind(this); });
this.state = {
type: 'Stripe',
valid: false,
log: [],
isEnabled: false,
};
}
logEvent(ev) {
let msg = this.state.type;
if (ev.type) { msg += ` : ${ev.type}`; }
if (ev.field) { msg += ` : ${ev.field}`; }
const { event: _, ...attrs } = ev;
this.setState({
log: [`${msg} : ${JSON.stringify(attrs)}`].concat(this.state.log),
});
}
onNumberValid(ev) {
this.setState({ numberIsValid: ev.isValid })
}
onTypeChange(ev) {
this.inputRef.value = '';
this.logEvent({ type: 'teardown' });
this.setState({
tokenize: null, valid: false, ready: false, type: ev.target.value, authorization: '',
});
}
onError(error) {
this.logEvent(error);
}
getToken() {
this.state.tokenize().then(
ev => this.logEvent(ev),
).catch(
error => this.logEvent({ error }),
);
}
onCardTypeChange(card) {
this.logEvent(card);
this.setState({ card: card.brand });
}
onFieldsReady({ tokenize }) {
this.logEvent({ type: 'fields ready' });
this.setState({ ready: true, tokenize });
}
onValidityChange(ev) {
this.logEvent(ev);
this.setState({ valid: ev.isValid });
}
setAuthorization() {
this.setState({ authorization: this.inputRef.value });
}
renderFields() {
if (!this.state.authorization) { return null; }
return (
Card type: {this.state.card}Valid: {this.state.valid ? '👍' : '👎'}
Number: {this.state.numberIsValid ? '👍' : '👎'}