@rebilly/framepay-react 2.0.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/.env.example +2 -0
  2. package/CHANGELOG.md +14 -0
  3. package/build/index.spec.js +2 -6
  4. package/build/lib/components/elements/applepay-element.js +3 -3
  5. package/build/lib/components/elements/bank-element.js +7 -10
  6. package/build/lib/components/elements/base-element.js +2 -6
  7. package/build/lib/components/elements/card-element.js +7 -10
  8. package/build/lib/components/elements/googlepay-element.js +3 -3
  9. package/build/lib/components/elements/iban-element.js +8 -15
  10. package/build/lib/components/elements/paypal-element.js +3 -3
  11. package/build/lib/components/injector.js +10 -30
  12. package/build/lib/components/provider.js +10 -14
  13. package/build/lib/constants.js +11 -15
  14. package/build/lib/context.js +3 -7
  15. package/env.js +7 -0
  16. package/package.json +25 -14
  17. package/src/index.spec.ts +19 -0
  18. package/src/index.ts +42 -0
  19. package/src/lib/components/elements/applepay-element.tsx +36 -0
  20. package/src/lib/components/elements/bank-element.spec.tsx +119 -0
  21. package/src/lib/components/elements/bank-element.tsx +77 -0
  22. package/src/lib/components/elements/base-element.tsx +100 -0
  23. package/src/lib/components/elements/card-element.spec.tsx +113 -0
  24. package/src/lib/components/elements/card-element.tsx +76 -0
  25. package/src/lib/components/elements/googlepay-element.tsx +36 -0
  26. package/src/lib/components/elements/iban-element.spec.tsx +104 -0
  27. package/src/lib/components/elements/iban-element.tsx +78 -0
  28. package/src/lib/components/elements/paypal-element.tsx +36 -0
  29. package/src/lib/components/injector.spec.tsx +162 -0
  30. package/src/lib/components/injector.tsx +495 -0
  31. package/src/lib/components/provider.spec.tsx +98 -0
  32. package/src/lib/components/provider.tsx +111 -0
  33. package/src/lib/constants.ts +43 -0
  34. package/src/lib/context.ts +24 -0
  35. package/src/lib/dom-util.ts +35 -0
  36. package/src/lib/framepay-error.ts +59 -0
  37. package/src/lib/get-rebilly-api.ts +11 -0
  38. package/test/e2e/assets/prop-types.js +849 -0
  39. package/test/e2e/assets/react-0.14.0.js +18759 -0
  40. package/test/e2e/assets/react-15.0.0.js +19309 -0
  41. package/test/e2e/assets/react-16.js +3318 -0
  42. package/test/e2e/assets/react-17.js +3357 -0
  43. package/test/e2e/assets/react-18.js +3342 -0
  44. package/test/e2e/assets/react-dom-0.14.0.js +42 -0
  45. package/test/e2e/assets/react-dom-15.0.0.js +42 -0
  46. package/test/e2e/assets/react-dom-16.js +25147 -0
  47. package/test/e2e/assets/react-dom-17.js +26292 -0
  48. package/test/e2e/assets/react-dom-18.js +29869 -0
  49. package/test/e2e/cypress-support.js +2 -0
  50. package/test/e2e/cypress.d.ts +1 -0
  51. package/test/e2e/fixtures/apple-pay.html +15 -0
  52. package/test/e2e/fixtures/apple-pay.js +63 -0
  53. package/test/e2e/fixtures/bank-separate.html +12 -0
  54. package/test/e2e/fixtures/bank-separate.js +323 -0
  55. package/test/e2e/fixtures/card-separate-brands.html +12 -0
  56. package/test/e2e/fixtures/card-separate-brands.js +260 -0
  57. package/test/e2e/fixtures/card-separate-rebilly-fields.html +12 -0
  58. package/test/e2e/fixtures/card-separate-rebilly-fields.js +281 -0
  59. package/test/e2e/fixtures/card-separate.html +12 -0
  60. package/test/e2e/fixtures/card-separate.js +227 -0
  61. package/test/e2e/fixtures/checkout-combined.html +12 -0
  62. package/test/e2e/fixtures/checkout-combined.js +199 -0
  63. package/test/e2e/fixtures/google-pay.html +15 -0
  64. package/test/e2e/fixtures/google-pay.js +63 -0
  65. package/test/e2e/fixtures/iban.html +12 -0
  66. package/test/e2e/fixtures/iban.js +239 -0
  67. package/test/e2e/fixtures/multiple-methods.html +12 -0
  68. package/test/e2e/fixtures/multiple-methods.js +470 -0
  69. package/test/e2e/fixtures/nav.js +20 -0
  70. package/test/e2e/fixtures/paypal.html +15 -0
  71. package/test/e2e/fixtures/paypal.js +62 -0
  72. package/test/e2e/fixtures/style.css +55 -0
  73. package/test/e2e/fixtures/util.js +71 -0
  74. package/test/e2e/local-server.mjs +12 -0
  75. package/test/e2e/server.mjs +43 -0
  76. package/test/e2e/specs/bank-separate.cy.ts +27 -0
  77. package/test/e2e/specs/card-separate-brands.cy.ts +68 -0
  78. package/test/e2e/specs/card-separate.cy.ts +27 -0
  79. package/test/e2e/specs/checkout-combined.cy.ts +24 -0
  80. package/test/e2e/specs/google-pay.cy.ts +13 -0
  81. package/test/e2e/specs/iban.cy.ts +17 -0
  82. package/test/e2e/specs/multiple-methods.cy.ts +128 -0
  83. package/test/e2e/specs/paypal.cy.ts +13 -0
  84. package/test/e2e/specs/react-version.cy.ts +12 -0
  85. package/test/e2e/switch-react-version.js +42 -0
  86. package/test/e2e/tsconfig.json +8 -0
  87. package/test/unit/jest.config.js +29 -0
  88. package/test/unit/specs/declaration-mock.spec.tsx +143 -0
  89. package/tsconfig.json +31 -0
  90. package/tsconfig.spec.json +13 -0
  91. package/tslint.json +36 -0
@@ -0,0 +1,239 @@
1
+ import React, { Component } from 'react';
2
+ import ReactDOM from 'react-dom';
3
+
4
+ import { FramePayProvider, withFramePayIBANComponent } from '../../../build';
5
+ import { deepMerge, prettyDebugRender, ReactVersion } from './util';
6
+ import './style.css';
7
+
8
+ const params = {
9
+ publishableKey: 'pk_sandbox_c6cqKLddciVikuBOjhcng-rLccTz70NT4W_qZ_h'
10
+ };
11
+
12
+ const emptyEvents = {
13
+ iban: {
14
+ onReady: null,
15
+ onChange: null,
16
+ onFocus: null,
17
+ onBlur: null
18
+ }
19
+ };
20
+
21
+ class IBANlementComponent extends Component {
22
+ constructor(props) {
23
+ super(props);
24
+ this.state = {
25
+ events: {
26
+ ...emptyEvents
27
+ },
28
+ billingAddress: {
29
+ firstName: 'first-name-value',
30
+ lastName: 'last-name-value',
31
+ address: 'address-value',
32
+ country: 'GB',
33
+ region: 'region-value'
34
+ },
35
+ token: {
36
+ error: null,
37
+ data: null
38
+ }
39
+ };
40
+ this.handleSubmit = this.handleSubmit.bind(this);
41
+ }
42
+
43
+ handleSubmit(e) {
44
+ e.preventDefault();
45
+ /**
46
+ *
47
+ * @see https://rebilly.github.io/framepay-docs/reference/rebilly.html#rebilly-createtoken
48
+ *
49
+ */
50
+
51
+ const billingAddress = {
52
+ ...this.state.billingAddress
53
+ };
54
+ if (billingAddress.emails) {
55
+ billingAddress.emails = [
56
+ {
57
+ label: 'Email',
58
+ value: billingAddress.emails
59
+ }
60
+ ];
61
+ }
62
+ if (billingAddress.phoneNumbers) {
63
+ billingAddress.phoneNumbers = [
64
+ {
65
+ label: 'Phone Number',
66
+ value: billingAddress.phoneNumbers
67
+ }
68
+ ];
69
+ }
70
+
71
+ this.props.Rebilly.createToken(this.formNode, { billingAddress })
72
+ .then(data => {
73
+ this.deepUpdateState({
74
+ events: { ...emptyEvents },
75
+ token: {
76
+ error: false, data
77
+ }
78
+ });
79
+ })
80
+ .catch(err => {
81
+ this.deepUpdateState({
82
+ token: { error: true, data: err }
83
+ });
84
+ });
85
+ }
86
+
87
+ deepUpdateState(data) {
88
+ this.setState(deepMerge(this.state, data));
89
+ }
90
+
91
+ render() {
92
+ return (
93
+ <div>
94
+ <h2>{this.props.title}</h2>
95
+ <div className="flex-wrapper">
96
+ {prettyDebugRender(this.state)}
97
+ <div className="example-2">
98
+ <form
99
+ id="form"
100
+ ref={node => (this.formNode = node)}
101
+ method="post"
102
+ onSubmit={this.handleSubmit}
103
+ >
104
+ <fieldset>
105
+ <div className="field">
106
+ <input
107
+ type="text"
108
+ name="firstName"
109
+ placeholder="First Name"
110
+ defaultValue={
111
+ this.state.billingAddress.firstName
112
+ }
113
+ onChange={e => {
114
+ this.deepUpdateState({
115
+ billingAddress: {
116
+ firstName: e.target.value
117
+ }
118
+ });
119
+ }}
120
+ />
121
+ </div>
122
+ <div className="field">
123
+ <input
124
+ type="text"
125
+ name="lastName"
126
+ placeholder="Last Name"
127
+ defaultValue={
128
+ this.state.billingAddress.lastName
129
+ }
130
+ onChange={e => {
131
+ this.deepUpdateState({
132
+ billingAddress: {
133
+ lastName: e.target.value
134
+ }
135
+ });
136
+ }}
137
+ />
138
+ </div>
139
+ <div className="field">
140
+ <input
141
+ type="text"
142
+ name="email"
143
+ placeholder="Email"
144
+ defaultValue={
145
+ this.state.billingAddress.emails
146
+ }
147
+ onChange={e => {
148
+ this.deepUpdateState({
149
+ billingAddress: {
150
+ emails: e.target.value
151
+ }
152
+ });
153
+ }}
154
+ />
155
+ </div>
156
+ <div className="field">
157
+ <input
158
+ type="text"
159
+ name="phone"
160
+ placeholder="Phone"
161
+ defaultValue={
162
+ this.state.billingAddress
163
+ .phoneNumbers
164
+ }
165
+ onChange={e => {
166
+ this.deepUpdateState({
167
+ billingAddress: {
168
+ phoneNumbers: e.target.value
169
+ }
170
+ });
171
+ }}
172
+ />
173
+ </div>
174
+ <div className="field">
175
+ <this.props.IBANElement
176
+ onReady={() =>
177
+ this.deepUpdateState({
178
+ events: {
179
+ iban: {
180
+ onReady: true
181
+ }
182
+ }
183
+ })
184
+ }
185
+ onChange={data =>
186
+ this.deepUpdateState({
187
+ events: {
188
+ iban: {
189
+ onChange: data
190
+ }
191
+ }
192
+ })
193
+ }
194
+ onFocus={() =>
195
+ this.deepUpdateState({
196
+ events: {
197
+ iban: {
198
+ onFocus: true
199
+ }
200
+ }
201
+ })
202
+ }
203
+ onBlur={() =>
204
+ this.deepUpdateState({
205
+ events: {
206
+ iban: {
207
+ onBlur: true
208
+ }
209
+ }
210
+ })
211
+ }
212
+ />
213
+ </div>
214
+ </fieldset>
215
+ <button id="submit">Make Payment</button>
216
+ </form>
217
+ </div>
218
+ </div>
219
+ </div>
220
+ );
221
+ }
222
+ }
223
+
224
+ const IBANElement = withFramePayIBANComponent(IBANlementComponent);
225
+
226
+ class App extends Component {
227
+ render() {
228
+ return (
229
+ <FramePayProvider injectStyle {...params}>
230
+ <div>
231
+ {ReactVersion()};
232
+ <IBANElement/>
233
+ </div>
234
+ </FramePayProvider>
235
+ );
236
+ }
237
+ }
238
+
239
+ ReactDOM.render(<App/>, document.getElementById('app'));
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8"/>
5
+ <title>Test Multiple Methods</title>
6
+ </head>
7
+ <body>
8
+ <div id="app"></div>
9
+ <script src="multiple-methods.js"></script>
10
+ <script src="nav.js"></script>
11
+ </body>
12
+ </html>