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 (

Valid: {this.state.valid ? '👍' : '👎'}

Number: {this.state.numberIsValid ? '👍' : '👎'}

Card type: {this.state.card}

Date: CVV: Zip:
); } render() { const { type } = this.state; return (
{Object.keys(Vendors).map(k => ( ))}

Payments Field Demo for: {type}

{this.renderFields()}
); } } render(, document.getElementById('root'));