@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,2 @@
1
+ import '@testing-library/cypress/add-commands';
2
+ import 'cypress-iframe';
@@ -0,0 +1 @@
1
+ ///<reference types="cypress-iframe" />
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <meta charset="utf-8" />
6
+ <title>Test Apple Pay</title>
7
+ </head>
8
+
9
+ <body>
10
+ <div id="app"></div>
11
+ <script src="apple-pay.js"></script>
12
+ <script src="nav.js"></script>
13
+ </body>
14
+
15
+ </html>
@@ -0,0 +1,63 @@
1
+ import React, { Component } from 'react';
2
+ import ReactDOM from 'react-dom';
3
+
4
+ import {
5
+ FramePayProvider,
6
+ withFramePayApplePayComponent
7
+ } from '../../../build';
8
+ import { prettyDebugRender, ReactVersion } from './util';
9
+ import './style.css';
10
+
11
+ const params = {
12
+ publishableKey: 'pk_sandbox_S95ATjj4hXZs-T9QpZq1ENl2tDSrUkCGv98utc9',
13
+ organizationId: '5977150c-1c97-4dd4-9860-6bb2bab070b4',
14
+ websiteId: 'demo.com',
15
+ transactionData: {
16
+ amount: 10,
17
+ currency: 'USD',
18
+ label: 'Purchase label 1',
19
+ },
20
+ };
21
+
22
+ class App extends Component {
23
+
24
+ constructor(props) {
25
+ super(props);
26
+ this.state = {
27
+ token: null,
28
+ };
29
+ }
30
+
31
+ render() {
32
+ return (
33
+ <FramePayProvider
34
+ injectStyle
35
+ {...params}
36
+ onReady={() => {
37
+ console.log('FramePayProvider.onReady');
38
+ }}
39
+ onError={err => {
40
+ console.log('FramePayProvider.onError', err);
41
+ }}
42
+ onTokenReady={token => this.setState({ token })}
43
+ >
44
+ <div>
45
+ {ReactVersion()}
46
+ <div>
47
+ <h3>FramePay version: {this.props.Rebilly.version}</h3>
48
+ <div className="flex-wrapper">
49
+ {prettyDebugRender(this.state)}
50
+ <this.props.ApplePayElement />
51
+ </div>
52
+ </div>
53
+ </div>
54
+ </FramePayProvider>
55
+ );
56
+ }
57
+ }
58
+
59
+ const WrappedApp = withFramePayApplePayComponent(App);
60
+ ReactDOM.render(
61
+ <WrappedApp />,
62
+ document.getElementById('app')
63
+ );
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8"/>
5
+ <title>Test Bank Page Separate Fields</title>
6
+ </head>
7
+ <body>
8
+ <div id="app"></div>
9
+ <script src="bank-separate.js"></script>
10
+ <script src="nav.js"></script>
11
+ </body>
12
+ </html>
@@ -0,0 +1,323 @@
1
+ import React, { Component } from 'react';
2
+ import ReactDOM from 'react-dom';
3
+
4
+ import { FramePayProvider, withFramePayBankComponent } 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
+ class CardElementComponent extends Component {
13
+ constructor(props) {
14
+ super(props);
15
+ this.state = {
16
+ events: {
17
+ bankAccountType: {
18
+ onReady: null,
19
+ onChange: null,
20
+ onFocus: null,
21
+ onBlur: null
22
+ },
23
+ bankAccountNumber: {
24
+ onReady: null,
25
+ onChange: null,
26
+ onFocus: null,
27
+ onBlur: null
28
+ },
29
+ bankRoutingNumber: {
30
+ onReady: null,
31
+ onChange: null,
32
+ onFocus: null,
33
+ onBlur: null
34
+ }
35
+ },
36
+ billingAddress: {
37
+ firstName: 'first-name-value',
38
+ lastName: 'last-name-value',
39
+ address: 'address-value',
40
+ country: 'GB',
41
+ region: 'region-value'
42
+ },
43
+ token: {
44
+ error: null,
45
+ data: null
46
+ }
47
+ };
48
+ this.handleSubmit = this.handleSubmit.bind(this);
49
+ }
50
+
51
+ handleSubmit(e) {
52
+ e.preventDefault();
53
+ /**
54
+ *
55
+ * @see https://rebilly.github.io/framepay-docs/reference/rebilly.html#rebilly-createtoken
56
+ *
57
+ */
58
+
59
+ const billingAddress = {
60
+ ...this.state.billingAddress
61
+ };
62
+ if (billingAddress.emails) {
63
+ billingAddress.emails = [
64
+ {
65
+ label: 'Email',
66
+ value: billingAddress.emails
67
+ }
68
+ ];
69
+ }
70
+ if (billingAddress.phoneNumbers) {
71
+ billingAddress.phoneNumbers = [
72
+ {
73
+ label: 'Phone Number',
74
+ value: billingAddress.phoneNumbers
75
+ }
76
+ ];
77
+ }
78
+
79
+ this.props.Rebilly.createToken(this.formNode, { billingAddress })
80
+ .then(data => {
81
+ this.deepUpdateState({ token: { error: false, data } });
82
+ })
83
+ .catch(err => {
84
+ this.deepUpdateState({ token: { error: true, data: err } });
85
+ });
86
+ }
87
+
88
+ deepUpdateState(data) {
89
+ this.setState(deepMerge(this.state, data));
90
+ }
91
+
92
+ render() {
93
+ return (
94
+ <div>
95
+ <h2>{this.props.title}</h2>
96
+ <h3>FramePay version: {this.props.Rebilly.version}</h3>
97
+ <div className="flex-wrapper">
98
+ {prettyDebugRender(this.state)}
99
+ <div className="example-2">
100
+ <form
101
+ id="form"
102
+ ref={node => (this.formNode = node)}
103
+ method="post"
104
+ onSubmit={this.handleSubmit}
105
+ >
106
+ <fieldset>
107
+ <div className="field">
108
+ <input
109
+ type="text"
110
+ name="firstName"
111
+ placeholder="First Name"
112
+ defaultValue={
113
+ this.state.billingAddress.firstName
114
+ }
115
+ onChange={e => {
116
+ this.deepUpdateState({
117
+ billingAddress: {
118
+ firstName: e.target.value
119
+ }
120
+ });
121
+ }}
122
+ />
123
+ </div>
124
+ <div className="field">
125
+ <input
126
+ type="text"
127
+ name="lastName"
128
+ placeholder="Last Name"
129
+ defaultValue={
130
+ this.state.billingAddress.lastName
131
+ }
132
+ onChange={e => {
133
+ this.deepUpdateState({
134
+ billingAddress: {
135
+ lastName: e.target.value
136
+ }
137
+ });
138
+ }}
139
+ />
140
+ </div>
141
+ <div className="field">
142
+ <input
143
+ type="text"
144
+ name="email"
145
+ placeholder="Email"
146
+ defaultValue={
147
+ this.state.billingAddress.emails
148
+ }
149
+ onChange={e => {
150
+ this.deepUpdateState({
151
+ billingAddress: {
152
+ emails: e.target.value
153
+ }
154
+ });
155
+ }}
156
+ />
157
+ </div>
158
+ <div className="field">
159
+ <input
160
+ type="text"
161
+ name="phone"
162
+ placeholder="Phone"
163
+ defaultValue={
164
+ this.state.billingAddress
165
+ .phoneNumbers
166
+ }
167
+ onChange={e => {
168
+ this.deepUpdateState({
169
+ billingAddress: {
170
+ phoneNumbers: e.target.value
171
+ }
172
+ });
173
+ }}
174
+ />
175
+ </div>
176
+ <div className="field">
177
+ <this.props.BankAccountTypeElement
178
+ onReady={() =>
179
+ this.deepUpdateState({
180
+ events: {
181
+ bankAccountType: {
182
+ onReady: true
183
+ }
184
+ }
185
+ })
186
+ }
187
+ onChange={data =>
188
+ this.deepUpdateState({
189
+ events: {
190
+ bankAccountType: {
191
+ onChange: data
192
+ }
193
+ }
194
+ })
195
+ }
196
+ onFocus={() =>
197
+ this.deepUpdateState({
198
+ events: {
199
+ bankAccountType: {
200
+ onFocus: true
201
+ }
202
+ }
203
+ })
204
+ }
205
+ onBlur={() =>
206
+ this.deepUpdateState({
207
+ events: {
208
+ bankAccountType: {
209
+ onBlur: true
210
+ }
211
+ }
212
+ })
213
+ }
214
+ />
215
+ </div>
216
+
217
+ <div className="field">
218
+ <this.props.BankAccountNumberElement
219
+ onReady={() =>
220
+ this.deepUpdateState({
221
+ events: {
222
+ bankAccountNumber: {
223
+ onReady: true
224
+ }
225
+ }
226
+ })
227
+ }
228
+ onChange={data =>
229
+ this.deepUpdateState({
230
+ events: {
231
+ bankAccountNumber: {
232
+ onChange: data
233
+ }
234
+ }
235
+ })
236
+ }
237
+ onFocus={() =>
238
+ this.deepUpdateState({
239
+ events: {
240
+ bankAccountNumber: {
241
+ onFocus: true
242
+ }
243
+ }
244
+ })
245
+ }
246
+ onBlur={() =>
247
+ this.deepUpdateState({
248
+ events: {
249
+ bankAccountNumber: {
250
+ onBlur: true
251
+ }
252
+ }
253
+ })
254
+ }
255
+ />
256
+ </div>
257
+
258
+ <div className="field">
259
+ <this.props.BankRoutingNumberElement
260
+ onReady={() =>
261
+ this.deepUpdateState({
262
+ events: {
263
+ bankRoutingNumber: {
264
+ onReady: true
265
+ }
266
+ }
267
+ })
268
+ }
269
+ onChange={data =>
270
+ this.deepUpdateState({
271
+ events: {
272
+ bankRoutingNumber: {
273
+ onChange: data
274
+ }
275
+ }
276
+ })
277
+ }
278
+ onFocus={() =>
279
+ this.deepUpdateState({
280
+ events: {
281
+ bankRoutingNumber: {
282
+ onFocus: true
283
+ }
284
+ }
285
+ })
286
+ }
287
+ onBlur={() =>
288
+ this.deepUpdateState({
289
+ events: {
290
+ bankRoutingNumber: {
291
+ onBlur: true
292
+ }
293
+ }
294
+ })
295
+ }
296
+ />
297
+ </div>
298
+ </fieldset>
299
+ <button id="submit">Make Payment</button>
300
+ </form>
301
+ </div>
302
+ </div>
303
+ </div>
304
+ );
305
+ }
306
+ }
307
+
308
+ const BankElement = withFramePayBankComponent(CardElementComponent);
309
+
310
+ class App extends Component {
311
+ render() {
312
+ return (
313
+ <FramePayProvider injectStyle {...params}>
314
+ <div>
315
+ {ReactVersion()}
316
+ <BankElement />
317
+ </div>
318
+ </FramePayProvider>
319
+ );
320
+ }
321
+ }
322
+
323
+ 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 Card Page Separate Fields allowed Brands</title>
6
+ </head>
7
+ <body>
8
+ <div id="app"></div>
9
+ <script src="card-separate-brands.js"></script>
10
+ <script src="nav.js"></script>
11
+ </body>
12
+ </html>