@justifi/webcomponents 4.8.1 → 4.8.3
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.
- package/dist/cjs/{Business-3c0aa22c.js → Business-42d0c522.js} +1 -2
- package/dist/cjs/{SubAccount-b9487cbb.js → SubAccount-2a803b22.js} +1 -1
- package/dist/cjs/additional-questions-details_5.cjs.entry.js +1 -1
- package/dist/cjs/justifi-additional-questions_5.cjs.entry.js +5 -5
- package/dist/cjs/justifi-bank-account-form.cjs.entry.js +2 -1
- package/dist/cjs/justifi-billing-form_2.cjs.entry.js +3 -1
- package/dist/cjs/justifi-business-details.cjs.entry.js +1 -1
- package/dist/cjs/justifi-business-form-stepped.cjs.entry.js +1 -1
- package/dist/cjs/justifi-business-form.cjs.entry.js +2 -2
- package/dist/cjs/justifi-business-list.cjs.entry.js +2 -2
- package/dist/cjs/justifi-card-form.cjs.entry.js +2 -1
- package/dist/cjs/justifi-gross-payment-chart.cjs.entry.js +1 -1
- package/dist/cjs/justifi-payment-balance-transactions.cjs.entry.js +1 -1
- package/dist/cjs/justifi-payment-form.cjs.entry.js +9 -36
- package/dist/cjs/justifi-payment-method-form.cjs.entry.js +81 -64
- package/dist/cjs/justifi-proceeds-list.cjs.entry.js +1 -1
- package/dist/cjs/justifi-subaccount-details.cjs.entry.js +2 -2
- package/dist/cjs/justifi-subaccounts-list.cjs.entry.js +2 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/payment-details-core.cjs.entry.js +1 -1
- package/dist/cjs/payments-list-core.cjs.entry.js +1 -1
- package/dist/cjs/payout-details-core.cjs.entry.js +1 -1
- package/dist/cjs/payouts-list-core.cjs.entry.js +1 -1
- package/dist/cjs/subaccount-account-details_4.cjs.entry.js +1 -1
- package/dist/cjs/{utils-36bf8b3e.js → utils-29a8a91d.js} +33 -1
- package/dist/cjs/webcomponents.cjs.js +1 -1
- package/dist/collection/api/Business.js +1 -1
- package/dist/collection/components/bank-account-form/bank-account-form.js +4 -2
- package/dist/collection/components/bank-account-form/test/bank-account-form.spec.js +9 -0
- package/dist/collection/components/business-form/business-form.js +1 -1
- package/dist/collection/components/business-form/business-generic-info/business-generic-info.js +1 -1
- package/dist/collection/components/business-form/business-representative/business-representative.js +1 -1
- package/dist/collection/components/business-form/legal-address-form/legal-address-form.js +2 -3
- package/dist/collection/components/card-form/card-form.js +4 -2
- package/dist/collection/components/card-form/test/card-form.spec.js +9 -0
- package/dist/collection/components/payment-details/test/payment-details-core.spec.js +2 -2
- package/dist/collection/components/payment-details/test/payment-details.spec.js +3 -3
- package/dist/collection/components/payment-form/payment-form.js +12 -83
- package/dist/collection/components/payment-form/payment-method-selector.js +2 -23
- package/dist/collection/components/payment-form/test/payment-form.spec.js +5 -18
- package/dist/collection/components/payment-method-form/payment-method-form.js +62 -72
- package/dist/collection/components/payment-method-form/test/payment-method-form.spec.js +123 -41
- package/dist/collection/components/payments-list/test/payments-list-core.spec.js +2 -2
- package/dist/collection/components/payments-list/test/payments-list.spec.js +3 -3
- package/dist/collection/components/payout-details/test/payout-details-core.spec.js +3 -3
- package/dist/collection/components/payout-details/test/payout-details.spec.js +1 -1
- package/dist/collection/components/payouts-list/test/payouts-list-core.spec.js +2 -2
- package/dist/collection/components/payouts-list/test/payouts-list.spec.js +3 -3
- package/dist/collection/utils/frame-comunication-service.js +32 -0
- package/dist/collection/utils/utils.js +31 -0
- package/dist/docs.json +40 -103
- package/dist/esm/{Business-954e1c1b.js → Business-e9340f6b.js} +2 -2
- package/dist/esm/{SubAccount-bd59f646.js → SubAccount-46b4c2b1.js} +1 -1
- package/dist/esm/additional-questions-details_5.entry.js +1 -1
- package/dist/esm/justifi-additional-questions_5.entry.js +5 -5
- package/dist/esm/justifi-bank-account-form.entry.js +2 -1
- package/dist/esm/justifi-billing-form_2.entry.js +3 -1
- package/dist/esm/justifi-business-details.entry.js +1 -1
- package/dist/esm/justifi-business-form-stepped.entry.js +1 -1
- package/dist/esm/justifi-business-form.entry.js +2 -2
- package/dist/esm/justifi-business-list.entry.js +2 -2
- package/dist/esm/justifi-card-form.entry.js +2 -1
- package/dist/esm/justifi-gross-payment-chart.entry.js +1 -1
- package/dist/esm/justifi-payment-balance-transactions.entry.js +1 -1
- package/dist/esm/justifi-payment-form.entry.js +9 -36
- package/dist/esm/justifi-payment-method-form.entry.js +81 -64
- package/dist/esm/justifi-proceeds-list.entry.js +1 -1
- package/dist/esm/justifi-subaccount-details.entry.js +2 -2
- package/dist/esm/justifi-subaccounts-list.entry.js +2 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/payment-details-core.entry.js +1 -1
- package/dist/esm/payments-list-core.entry.js +1 -1
- package/dist/esm/payout-details-core.entry.js +1 -1
- package/dist/esm/payouts-list-core.entry.js +1 -1
- package/dist/esm/subaccount-account-details_4.entry.js +1 -1
- package/dist/esm/{utils-dd428dba.js → utils-76a93600.js} +32 -1
- package/dist/esm/webcomponents.js +1 -1
- package/dist/module/Business.js +2 -2
- package/dist/module/SubAccount.js +1 -1
- package/dist/module/business-generic-info.js +1 -1
- package/dist/module/business-representative.js +1 -1
- package/dist/module/justifi-bank-account-form.js +2 -1
- package/dist/module/justifi-business-form.js +1 -1
- package/dist/module/justifi-card-form.js +2 -1
- package/dist/module/justifi-gross-payment-chart.js +1 -1
- package/dist/module/justifi-payment-balance-transactions.js +1 -1
- package/dist/module/justifi-payment-form.js +11 -42
- package/dist/module/justifi-subaccount-details.js +1 -1
- package/dist/module/legal-address-form.js +2 -3
- package/dist/module/payment-details-core2.js +1 -1
- package/dist/module/payment-method-form.js +81 -64
- package/dist/module/payment-method-selector.js +3 -2
- package/dist/module/payments-list-core2.js +1 -1
- package/dist/module/payout-details-core2.js +1 -1
- package/dist/module/payouts-list-core2.js +1 -1
- package/dist/module/utils2.js +32 -1
- package/dist/types/api/Business.d.ts +11 -11
- package/dist/types/components/bank-account-form/bank-account-form.d.ts +1 -1
- package/dist/types/components/business-form/business-form-schema.d.ts +1 -1
- package/dist/types/components/business-form/legal-address-form/legal-address-form.d.ts +2 -1
- package/dist/types/components/card-form/card-form.d.ts +1 -1
- package/dist/types/components/payment-form/payment-form.d.ts +1 -5
- package/dist/types/components/payment-form/payment-method-selector.d.ts +1 -1
- package/dist/types/components/payment-method-form/payment-method-form.d.ts +12 -12
- package/dist/types/components.d.ts +8 -13
- package/dist/types/utils/frame-comunication-service.d.ts +13 -0
- package/dist/types/utils/utils.d.ts +2 -0
- package/dist/webcomponents/{p-d66a6057.entry.js → p-08833966.entry.js} +1 -1
- package/dist/webcomponents/p-0bc8b02e.entry.js +1 -0
- package/dist/webcomponents/{p-f0c535ed.js → p-22c1acd6.js} +1 -1
- package/dist/webcomponents/p-234bc840.entry.js +1 -0
- package/dist/webcomponents/{p-8a90b976.entry.js → p-40349ffc.entry.js} +1 -1
- package/dist/webcomponents/{p-0b9146cd.entry.js → p-4ee44c76.entry.js} +1 -1
- package/dist/webcomponents/{p-ea05d7c2.entry.js → p-5422a24b.entry.js} +1 -1
- package/dist/webcomponents/{p-0e53f470.entry.js → p-578e0a05.entry.js} +1 -1
- package/dist/webcomponents/{p-50730e69.js → p-5c0310ee.js} +1 -1
- package/dist/webcomponents/p-640d90dc.entry.js +1 -0
- package/dist/webcomponents/{p-80140d5b.js → p-6478f3ca.js} +1 -1
- package/dist/webcomponents/p-696396c7.entry.js +1 -0
- package/dist/webcomponents/p-6d0725ef.entry.js +1 -0
- package/dist/webcomponents/p-7a1a06c0.entry.js +1 -0
- package/dist/webcomponents/{p-5e142186.entry.js → p-8516d602.entry.js} +1 -1
- package/dist/webcomponents/{p-c0f882ce.entry.js → p-894a7475.entry.js} +1 -1
- package/dist/webcomponents/{p-896a9ddb.entry.js → p-94ebfafb.entry.js} +1 -1
- package/dist/webcomponents/{p-d71ce1cd.entry.js → p-9e81808f.entry.js} +1 -1
- package/dist/webcomponents/{p-2e318b6a.entry.js → p-a432110c.entry.js} +1 -1
- package/dist/webcomponents/{p-a5d662ac.entry.js → p-b1881723.entry.js} +1 -1
- package/dist/webcomponents/{p-19c5ddf1.entry.js → p-bfd917b8.entry.js} +1 -1
- package/dist/webcomponents/p-c90fa055.entry.js +1 -0
- package/dist/webcomponents/{p-34de1c5d.entry.js → p-ebb91944.entry.js} +1 -1
- package/dist/webcomponents/{p-eef5b15b.entry.js → p-fa495a43.entry.js} +1 -1
- package/dist/webcomponents/webcomponents.esm.js +1 -1
- package/package.json +3 -3
- package/dist/webcomponents/p-57aab065.entry.js +0 -1
- package/dist/webcomponents/p-5f8b9f64.entry.js +0 -1
- package/dist/webcomponents/p-731cb109.entry.js +0 -1
- package/dist/webcomponents/p-870c2e4d.entry.js +0 -1
- package/dist/webcomponents/p-ad9a6c20.entry.js +0 -1
- package/dist/webcomponents/p-f7a3fd12.entry.js +0 -1
- package/dist/webcomponents/p-f9183f12.entry.js +0 -1
- /package/dist/collection/{components/payment-method-form → utils}/get-computed-theme.js +0 -0
- /package/dist/collection/{components/payment-method-form → utils}/theme.js +0 -0
- /package/dist/types/{components/payment-method-form → utils}/get-computed-theme.d.ts +0 -0
- /package/dist/types/{components/payment-method-form → utils}/theme.d.ts +0 -0
|
@@ -1,40 +1,21 @@
|
|
|
1
1
|
import { h, Host } from "@stencil/core";
|
|
2
2
|
import { PaymentMethodTypes } from "../../api";
|
|
3
|
-
import {
|
|
3
|
+
import { loadFontsOnParent } from "../../utils/utils";
|
|
4
|
+
import { config } from "../../../config";
|
|
4
5
|
export class PaymentForm {
|
|
5
6
|
constructor() {
|
|
6
7
|
this.bankAccount = undefined;
|
|
7
|
-
this.card =
|
|
8
|
+
this.card = true;
|
|
8
9
|
this.email = undefined;
|
|
9
|
-
this.iframeOrigin = undefined;
|
|
10
10
|
this.clientId = undefined;
|
|
11
11
|
this.accountId = undefined;
|
|
12
12
|
this.submitButtonText = undefined;
|
|
13
13
|
this.submitButtonEnabled = true;
|
|
14
|
-
this.hasLoadedFonts = false;
|
|
15
14
|
this.isLoading = false;
|
|
16
|
-
this.selectedPaymentMethodType =
|
|
17
|
-
this.allowedPaymentMethodTypes = [];
|
|
15
|
+
this.selectedPaymentMethodType = PaymentMethodTypes.card;
|
|
18
16
|
}
|
|
19
17
|
connectedCallback() {
|
|
20
|
-
|
|
21
|
-
this.allowedPaymentMethodTypes.push(PaymentMethodTypes.card);
|
|
22
|
-
}
|
|
23
|
-
if (this.bankAccount) {
|
|
24
|
-
this.allowedPaymentMethodTypes.push(PaymentMethodTypes.bankAccount);
|
|
25
|
-
}
|
|
26
|
-
if (!this.allowedPaymentMethodTypes.length) {
|
|
27
|
-
this.allowedPaymentMethodTypes.push(PaymentMethodTypes.card);
|
|
28
|
-
}
|
|
29
|
-
this.selectedPaymentMethodType = this.allowedPaymentMethodTypes[0];
|
|
30
|
-
if (!this.hasLoadedFonts) {
|
|
31
|
-
this.loadFontsOnParent();
|
|
32
|
-
this.hasLoadedFonts = true;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
paymentMethodSelectedHandler(event) {
|
|
36
|
-
const paymentMethodType = event.detail;
|
|
37
|
-
this.selectedPaymentMethodType = paymentMethodType;
|
|
18
|
+
loadFontsOnParent();
|
|
38
19
|
}
|
|
39
20
|
async fillBillingForm(fields) {
|
|
40
21
|
this.billingFormRef.fill(fields);
|
|
@@ -42,17 +23,9 @@ export class PaymentForm {
|
|
|
42
23
|
async enableSubmitButton() {
|
|
43
24
|
this.submitButtonEnabled = true;
|
|
44
25
|
}
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
if (!parent || !fontsToLoad) {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
// This approach is needed to load the font in a parent of the component
|
|
52
|
-
const fonts = document.createElement('link');
|
|
53
|
-
fonts.rel = 'stylesheet';
|
|
54
|
-
fonts.href = `https://fonts.googleapis.com/css2?family=${fontsToLoad}&display=swap`;
|
|
55
|
-
parent.append(fonts);
|
|
26
|
+
paymentMethodSelectedHandler(event) {
|
|
27
|
+
const paymentMethodType = event.detail;
|
|
28
|
+
this.selectedPaymentMethodType = paymentMethodType;
|
|
56
29
|
}
|
|
57
30
|
async submit(event) {
|
|
58
31
|
event.preventDefault();
|
|
@@ -80,7 +53,7 @@ export class PaymentForm {
|
|
|
80
53
|
}
|
|
81
54
|
}
|
|
82
55
|
render() {
|
|
83
|
-
return (h(Host, null, h("form", { class: "row gy-3" }, this.
|
|
56
|
+
return (h(Host, null, h("form", { class: "row gy-3" }, this.card && this.bankAccount && (h("div", { class: "col-12" }, h("justifi-payment-method-selector", { selectedPaymentMethodType: this.selectedPaymentMethodType, onPaymentMethodSelected: event => this.paymentMethodSelectedHandler(event) }))), h("div", { class: "col-12" }, h("justifi-payment-method-form", { "payment-method-form-type": this.selectedPaymentMethodType, iframeOrigin: config.iframeOrigin, ref: el => {
|
|
84
57
|
if (el) {
|
|
85
58
|
this.paymentMethodFormRef = el;
|
|
86
59
|
}
|
|
@@ -138,7 +111,8 @@ export class PaymentForm {
|
|
|
138
111
|
"text": ""
|
|
139
112
|
},
|
|
140
113
|
"attribute": "card",
|
|
141
|
-
"reflect": false
|
|
114
|
+
"reflect": false,
|
|
115
|
+
"defaultValue": "true"
|
|
142
116
|
},
|
|
143
117
|
"email": {
|
|
144
118
|
"type": "string",
|
|
@@ -157,23 +131,6 @@ export class PaymentForm {
|
|
|
157
131
|
"attribute": "email",
|
|
158
132
|
"reflect": false
|
|
159
133
|
},
|
|
160
|
-
"iframeOrigin": {
|
|
161
|
-
"type": "string",
|
|
162
|
-
"mutable": false,
|
|
163
|
-
"complexType": {
|
|
164
|
-
"original": "string",
|
|
165
|
-
"resolved": "string",
|
|
166
|
-
"references": {}
|
|
167
|
-
},
|
|
168
|
-
"required": false,
|
|
169
|
-
"optional": true,
|
|
170
|
-
"docs": {
|
|
171
|
-
"tags": [],
|
|
172
|
-
"text": ""
|
|
173
|
-
},
|
|
174
|
-
"attribute": "iframe-origin",
|
|
175
|
-
"reflect": false
|
|
176
|
-
},
|
|
177
134
|
"clientId": {
|
|
178
135
|
"type": "string",
|
|
179
136
|
"mutable": false,
|
|
@@ -230,10 +187,8 @@ export class PaymentForm {
|
|
|
230
187
|
static get states() {
|
|
231
188
|
return {
|
|
232
189
|
"submitButtonEnabled": {},
|
|
233
|
-
"hasLoadedFonts": {},
|
|
234
190
|
"isLoading": {},
|
|
235
|
-
"selectedPaymentMethodType": {}
|
|
236
|
-
"allowedPaymentMethodTypes": {}
|
|
191
|
+
"selectedPaymentMethodType": {}
|
|
237
192
|
};
|
|
238
193
|
}
|
|
239
194
|
static get events() {
|
|
@@ -304,33 +259,7 @@ export class PaymentForm {
|
|
|
304
259
|
"text": "",
|
|
305
260
|
"tags": []
|
|
306
261
|
}
|
|
307
|
-
},
|
|
308
|
-
"loadFontsOnParent": {
|
|
309
|
-
"complexType": {
|
|
310
|
-
"signature": "() => Promise<any>",
|
|
311
|
-
"parameters": [],
|
|
312
|
-
"references": {
|
|
313
|
-
"Promise": {
|
|
314
|
-
"location": "global",
|
|
315
|
-
"id": "global::Promise"
|
|
316
|
-
}
|
|
317
|
-
},
|
|
318
|
-
"return": "Promise<any>"
|
|
319
|
-
},
|
|
320
|
-
"docs": {
|
|
321
|
-
"text": "",
|
|
322
|
-
"tags": []
|
|
323
|
-
}
|
|
324
262
|
}
|
|
325
263
|
};
|
|
326
264
|
}
|
|
327
|
-
static get listeners() {
|
|
328
|
-
return [{
|
|
329
|
-
"name": "paymentMethodSelected",
|
|
330
|
-
"method": "paymentMethodSelectedHandler",
|
|
331
|
-
"target": undefined,
|
|
332
|
-
"capture": false,
|
|
333
|
-
"passive": false
|
|
334
|
-
}];
|
|
335
|
-
}
|
|
336
265
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Fragment, h } from "@stencil/core";
|
|
2
|
+
import { PaymentMethodTypes } from "../../api";
|
|
2
3
|
const PaymentMethodLabels = {
|
|
3
4
|
bankAccount: 'Bank Account',
|
|
4
5
|
card: 'Card',
|
|
5
6
|
};
|
|
6
7
|
export class PaymentMethodSelector {
|
|
7
8
|
constructor() {
|
|
8
|
-
this.paymentMethodTypes = [];
|
|
9
|
+
this.paymentMethodTypes = [PaymentMethodTypes.card, PaymentMethodTypes.bankAccount];
|
|
9
10
|
this.selectedPaymentMethodType = undefined;
|
|
10
11
|
}
|
|
11
12
|
onChangeHandler(event) {
|
|
@@ -28,28 +29,6 @@ export class PaymentMethodSelector {
|
|
|
28
29
|
}
|
|
29
30
|
static get properties() {
|
|
30
31
|
return {
|
|
31
|
-
"paymentMethodTypes": {
|
|
32
|
-
"type": "unknown",
|
|
33
|
-
"mutable": false,
|
|
34
|
-
"complexType": {
|
|
35
|
-
"original": "PaymentMethodTypes[]",
|
|
36
|
-
"resolved": "PaymentMethodTypes[]",
|
|
37
|
-
"references": {
|
|
38
|
-
"PaymentMethodTypes": {
|
|
39
|
-
"location": "import",
|
|
40
|
-
"path": "../../api",
|
|
41
|
-
"id": "src/api/index.ts::PaymentMethodTypes"
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
"required": false,
|
|
46
|
-
"optional": false,
|
|
47
|
-
"docs": {
|
|
48
|
-
"tags": [],
|
|
49
|
-
"text": ""
|
|
50
|
-
},
|
|
51
|
-
"defaultValue": "[]"
|
|
52
|
-
},
|
|
53
32
|
"selectedPaymentMethodType": {
|
|
54
33
|
"type": "string",
|
|
55
34
|
"mutable": false,
|
|
@@ -1,19 +1,8 @@
|
|
|
1
1
|
import { newSpecPage } from "@stencil/core/testing";
|
|
2
2
|
import { PaymentForm } from "../payment-form";
|
|
3
3
|
import { PaymentMethodTypes } from "../../../api";
|
|
4
|
+
import { config } from "../../../../config";
|
|
4
5
|
describe('justifi-payment-form', () => {
|
|
5
|
-
// State Testing
|
|
6
|
-
it('should update allowedPaymentMethodTypes and selectedPaymentMethodType state correctly when connectedCallback is invoked', async () => {
|
|
7
|
-
// Mock properties
|
|
8
|
-
const mockComponent = new PaymentForm();
|
|
9
|
-
mockComponent.bankAccount = true;
|
|
10
|
-
mockComponent.card = true;
|
|
11
|
-
// Invoke the lifecycle method
|
|
12
|
-
mockComponent.connectedCallback();
|
|
13
|
-
// Assertions
|
|
14
|
-
expect(mockComponent.allowedPaymentMethodTypes).toEqual([PaymentMethodTypes.card, PaymentMethodTypes.bankAccount]);
|
|
15
|
-
expect(mockComponent.selectedPaymentMethodType).toBe(PaymentMethodTypes.card);
|
|
16
|
-
});
|
|
17
6
|
it('should update submitButtonEnabled state when enableSubmitButton method is called', async () => {
|
|
18
7
|
// Mock component
|
|
19
8
|
const mockComponent = new PaymentForm();
|
|
@@ -40,9 +29,8 @@ describe('justifi-payment-form', () => {
|
|
|
40
29
|
const paymentForm = new PaymentForm();
|
|
41
30
|
// Assert that the properties exist and have the expected default values
|
|
42
31
|
expect(paymentForm).toHaveProperty('bankAccount', undefined);
|
|
43
|
-
expect(paymentForm).toHaveProperty('card',
|
|
32
|
+
expect(paymentForm).toHaveProperty('card', true);
|
|
44
33
|
expect(paymentForm).toHaveProperty('email', undefined);
|
|
45
|
-
expect(paymentForm).toHaveProperty('iframeOrigin', undefined);
|
|
46
34
|
expect(paymentForm).toHaveProperty('clientId', undefined);
|
|
47
35
|
expect(paymentForm).toHaveProperty('accountId', undefined);
|
|
48
36
|
expect(paymentForm).toHaveProperty('submitButtonText', undefined);
|
|
@@ -144,7 +132,6 @@ describe('justifi-payment-form', () => {
|
|
|
144
132
|
component.bankAccount = true;
|
|
145
133
|
component.card = true;
|
|
146
134
|
component.email = 'test@test.com';
|
|
147
|
-
component.iframeOrigin = 'https://example.com';
|
|
148
135
|
component.clientId = 'abc123';
|
|
149
136
|
component.accountId = 'def456';
|
|
150
137
|
component.submitButtonText = 'Submit';
|
|
@@ -155,15 +142,15 @@ describe('justifi-payment-form', () => {
|
|
|
155
142
|
// Render the component
|
|
156
143
|
const { root } = await newSpecPage({
|
|
157
144
|
components: [PaymentForm],
|
|
158
|
-
html:
|
|
145
|
+
html: `<justifi-payment-form payment-method-form-type="card"></justifi-payment-form>`,
|
|
159
146
|
});
|
|
160
147
|
// Assert that the rendered output is correct
|
|
161
148
|
expect(root).toEqualHtml(`
|
|
162
|
-
<justifi-payment-form
|
|
149
|
+
<justifi-payment-form payment-method-form-type="card">
|
|
163
150
|
<mock:shadow-root>
|
|
164
151
|
<form class="gy-3 row">
|
|
165
152
|
<div class="col-12">
|
|
166
|
-
<justifi-payment-method-form
|
|
153
|
+
<justifi-payment-method-form payment-method-form-type="card" iframeorigin="${config.iframeOrigin}"></justifi-payment-method-form>
|
|
167
154
|
</div>
|
|
168
155
|
<div class="col-12">
|
|
169
156
|
<justifi-billing-form legend="Billing Info"></justifi-billing-form>
|
|
@@ -2,87 +2,58 @@ import { Host, h, } from "@stencil/core";
|
|
|
2
2
|
import iFrameResize from "iframe-resizer/js/iframeResizer";
|
|
3
3
|
import { MessageEventType } from "./message-event-types";
|
|
4
4
|
import packageJson from "../../../package.json";
|
|
5
|
-
import getComputedTheme from "
|
|
6
|
-
import {
|
|
5
|
+
import getComputedTheme from "../../utils/get-computed-theme";
|
|
6
|
+
import { composeQueryParams } from "../../utils/utils";
|
|
7
|
+
import { FrameCommunicationService } from "../../utils/frame-comunication-service";
|
|
7
8
|
export class PaymentMethodForm {
|
|
8
9
|
constructor() {
|
|
9
10
|
this.computedTheme = getComputedTheme();
|
|
11
|
+
this.dispatchMessageEvent = (messageEvent) => {
|
|
12
|
+
const { eventType, data } = messageEvent.data;
|
|
13
|
+
const eventTypeMessage = MessageEventType[this.paymentMethodFormType];
|
|
14
|
+
if (eventType === eventTypeMessage.ready) {
|
|
15
|
+
this.paymentMethodFormReady.emit(data);
|
|
16
|
+
}
|
|
17
|
+
else if (eventType === eventTypeMessage.tokenize) {
|
|
18
|
+
this.paymentMethodFormTokenized.emit(data);
|
|
19
|
+
}
|
|
20
|
+
else if (eventType === eventTypeMessage.validate) {
|
|
21
|
+
this.paymentMethodFormValidated.emit(data);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
this.postMessage = (eventType, payload) => {
|
|
25
|
+
this.frameService.postMessage(eventType, payload);
|
|
26
|
+
};
|
|
10
27
|
this.paymentMethodFormType = undefined;
|
|
11
28
|
this.paymentMethodFormValidationMode = undefined;
|
|
12
29
|
this.iframeOrigin = undefined;
|
|
13
30
|
this.singleLine = undefined;
|
|
14
31
|
}
|
|
15
|
-
connectedCallback() {
|
|
16
|
-
window.addEventListener('message', this.dispatchMessageEvent.bind(this));
|
|
17
|
-
}
|
|
18
32
|
disconnectedCallback() {
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
sendStyleOverrides() {
|
|
22
|
-
if (this.computedTheme) {
|
|
23
|
-
this.postMessage(MessageEventType[this.paymentMethodFormType].styleOverrides, { styleOverrides: this.computedTheme });
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
dispatchMessageEvent(messageEvent) {
|
|
27
|
-
const messagePayload = messageEvent.data;
|
|
28
|
-
const messageType = messagePayload.eventType;
|
|
29
|
-
const messageData = messagePayload.data;
|
|
30
|
-
if (messageType === MessageEventType[this.paymentMethodFormType].ready) {
|
|
31
|
-
this.paymentMethodFormReady.emit(messageData);
|
|
32
|
-
}
|
|
33
|
-
if (messageType === MessageEventType[this.paymentMethodFormType].tokenize) {
|
|
34
|
-
this.paymentMethodFormTokenized.emit(messageData);
|
|
35
|
-
}
|
|
36
|
-
if (messageType === MessageEventType[this.paymentMethodFormType].validate) {
|
|
37
|
-
this.paymentMethodFormValidated.emit(messageData);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
postMessage(eventType, payload) {
|
|
41
|
-
var _a, _b;
|
|
42
|
-
(_b = (_a = this.iframeElement) === null || _a === void 0 ? void 0 : _a.contentWindow) === null || _b === void 0 ? void 0 : _b.postMessage(Object.assign({ eventType: eventType }, payload), config.iframeOrigin || '*');
|
|
33
|
+
this.frameService.removeMessageListener(this.dispatchMessageEvent);
|
|
43
34
|
}
|
|
44
35
|
async resize() {
|
|
45
36
|
this.postMessage(MessageEventType[this.paymentMethodFormType].resize);
|
|
46
37
|
}
|
|
47
|
-
async postMessageWithResponseListener(eventType, payload) {
|
|
48
|
-
return new Promise(resolve => {
|
|
49
|
-
const responseListener = (event) => {
|
|
50
|
-
if (event.data.eventType !== eventType)
|
|
51
|
-
return;
|
|
52
|
-
window.removeEventListener('message', responseListener);
|
|
53
|
-
resolve(event.data.data);
|
|
54
|
-
};
|
|
55
|
-
window.addEventListener('message', responseListener);
|
|
56
|
-
this.postMessage(eventType, payload);
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
38
|
async tokenize(clientId, paymentMethodMetadata, account) {
|
|
60
39
|
const eventType = MessageEventType[this.paymentMethodFormType].tokenize;
|
|
61
|
-
|
|
62
|
-
clientId
|
|
40
|
+
return this.frameService.postMessageWithResponseListener(eventType, {
|
|
41
|
+
clientId,
|
|
42
|
+
paymentMethodMetadata,
|
|
43
|
+
account,
|
|
63
44
|
componentVersion: packageJson.version,
|
|
64
|
-
|
|
65
|
-
account: account,
|
|
66
|
-
};
|
|
67
|
-
return this.postMessageWithResponseListener(eventType, payload);
|
|
45
|
+
});
|
|
68
46
|
}
|
|
69
47
|
async validate() {
|
|
70
|
-
|
|
48
|
+
const eventType = MessageEventType[this.paymentMethodFormType].validate;
|
|
49
|
+
return this.frameService.postMessageWithResponseListener(eventType);
|
|
71
50
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
return (value = `&${value}`);
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
return queryParams.join('');
|
|
51
|
+
sendStyleOverrides() {
|
|
52
|
+
if (this.computedTheme) {
|
|
53
|
+
this.postMessage(MessageEventType[this.paymentMethodFormType].styleOverrides, { styleOverrides: this.computedTheme });
|
|
54
|
+
}
|
|
82
55
|
}
|
|
83
56
|
getIframeSrc() {
|
|
84
|
-
const iframeOrigin = config.iframeOrigin;
|
|
85
|
-
let iframeSrc = `${iframeOrigin}/${this.paymentMethodFormType}`;
|
|
86
57
|
let paramsList = [];
|
|
87
58
|
if (this.paymentMethodFormValidationMode) {
|
|
88
59
|
paramsList.push(`validationMode=${this.paymentMethodFormValidationMode}`);
|
|
@@ -90,7 +61,13 @@ export class PaymentMethodForm {
|
|
|
90
61
|
if (this.singleLine) {
|
|
91
62
|
paramsList.push(`singleLine=${this.singleLine}`);
|
|
92
63
|
}
|
|
93
|
-
|
|
64
|
+
let iframeSrc = `${this.iframeOrigin}/${this.paymentMethodFormType}${composeQueryParams(paramsList)}`;
|
|
65
|
+
return iframeSrc;
|
|
66
|
+
}
|
|
67
|
+
initializeFrameCommunicationService() {
|
|
68
|
+
var _a;
|
|
69
|
+
this.frameService = new FrameCommunicationService(this.iframeElement, this.iframeOrigin);
|
|
70
|
+
(_a = this.frameService) === null || _a === void 0 ? void 0 : _a.addMessageListener(this.dispatchMessageEvent);
|
|
94
71
|
}
|
|
95
72
|
render() {
|
|
96
73
|
return (h(Host, null, h("iframe", { id: `justifi-payment-method-form-${this.paymentMethodFormType}`, src: this.getIframeSrc(), ref: el => {
|
|
@@ -99,6 +76,7 @@ export class PaymentMethodForm {
|
|
|
99
76
|
iFrameResize({
|
|
100
77
|
scrollbars: false,
|
|
101
78
|
}, this.iframeElement);
|
|
79
|
+
this.initializeFrameCommunicationService();
|
|
102
80
|
this.sendStyleOverrides();
|
|
103
81
|
} })));
|
|
104
82
|
}
|
|
@@ -119,9 +97,15 @@ export class PaymentMethodForm {
|
|
|
119
97
|
"type": "string",
|
|
120
98
|
"mutable": false,
|
|
121
99
|
"complexType": {
|
|
122
|
-
"original": "
|
|
123
|
-
"resolved": "
|
|
124
|
-
"references": {
|
|
100
|
+
"original": "PaymentMethodTypes",
|
|
101
|
+
"resolved": "PaymentMethodTypes.bankAccount | PaymentMethodTypes.card",
|
|
102
|
+
"references": {
|
|
103
|
+
"PaymentMethodTypes": {
|
|
104
|
+
"location": "import",
|
|
105
|
+
"path": "../../api",
|
|
106
|
+
"id": "src/api/index.ts::PaymentMethodTypes"
|
|
107
|
+
}
|
|
108
|
+
}
|
|
125
109
|
},
|
|
126
110
|
"required": false,
|
|
127
111
|
"optional": false,
|
|
@@ -158,7 +142,7 @@ export class PaymentMethodForm {
|
|
|
158
142
|
"references": {}
|
|
159
143
|
},
|
|
160
144
|
"required": false,
|
|
161
|
-
"optional":
|
|
145
|
+
"optional": false,
|
|
162
146
|
"docs": {
|
|
163
147
|
"tags": [],
|
|
164
148
|
"text": ""
|
|
@@ -197,8 +181,8 @@ export class PaymentMethodForm {
|
|
|
197
181
|
"text": ""
|
|
198
182
|
},
|
|
199
183
|
"complexType": {
|
|
200
|
-
"original": "
|
|
201
|
-
"resolved": "
|
|
184
|
+
"original": "void",
|
|
185
|
+
"resolved": "void",
|
|
202
186
|
"references": {}
|
|
203
187
|
}
|
|
204
188
|
}, {
|
|
@@ -227,9 +211,15 @@ export class PaymentMethodForm {
|
|
|
227
211
|
"text": ""
|
|
228
212
|
},
|
|
229
213
|
"complexType": {
|
|
230
|
-
"original": "
|
|
231
|
-
"resolved": "
|
|
232
|
-
"references": {
|
|
214
|
+
"original": "CreatePaymentMethodResponse",
|
|
215
|
+
"resolved": "BankAccountCreateResponse | CardCreateResponse | PaymentMethodErrorResponse",
|
|
216
|
+
"references": {
|
|
217
|
+
"CreatePaymentMethodResponse": {
|
|
218
|
+
"location": "import",
|
|
219
|
+
"path": "./payment-method-responses",
|
|
220
|
+
"id": "src/components/payment-method-form/payment-method-responses.ts::CreatePaymentMethodResponse"
|
|
221
|
+
}
|
|
222
|
+
}
|
|
233
223
|
}
|
|
234
224
|
}];
|
|
235
225
|
}
|
|
@@ -237,7 +227,7 @@ export class PaymentMethodForm {
|
|
|
237
227
|
return {
|
|
238
228
|
"resize": {
|
|
239
229
|
"complexType": {
|
|
240
|
-
"signature": "() => Promise<
|
|
230
|
+
"signature": "() => Promise<void>",
|
|
241
231
|
"parameters": [],
|
|
242
232
|
"references": {
|
|
243
233
|
"Promise": {
|
|
@@ -245,7 +235,7 @@ export class PaymentMethodForm {
|
|
|
245
235
|
"id": "global::Promise"
|
|
246
236
|
}
|
|
247
237
|
},
|
|
248
|
-
"return": "Promise<
|
|
238
|
+
"return": "Promise<void>"
|
|
249
239
|
},
|
|
250
240
|
"docs": {
|
|
251
241
|
"text": "",
|