@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.
Files changed (144) hide show
  1. package/dist/cjs/{Business-3c0aa22c.js → Business-42d0c522.js} +1 -2
  2. package/dist/cjs/{SubAccount-b9487cbb.js → SubAccount-2a803b22.js} +1 -1
  3. package/dist/cjs/additional-questions-details_5.cjs.entry.js +1 -1
  4. package/dist/cjs/justifi-additional-questions_5.cjs.entry.js +5 -5
  5. package/dist/cjs/justifi-bank-account-form.cjs.entry.js +2 -1
  6. package/dist/cjs/justifi-billing-form_2.cjs.entry.js +3 -1
  7. package/dist/cjs/justifi-business-details.cjs.entry.js +1 -1
  8. package/dist/cjs/justifi-business-form-stepped.cjs.entry.js +1 -1
  9. package/dist/cjs/justifi-business-form.cjs.entry.js +2 -2
  10. package/dist/cjs/justifi-business-list.cjs.entry.js +2 -2
  11. package/dist/cjs/justifi-card-form.cjs.entry.js +2 -1
  12. package/dist/cjs/justifi-gross-payment-chart.cjs.entry.js +1 -1
  13. package/dist/cjs/justifi-payment-balance-transactions.cjs.entry.js +1 -1
  14. package/dist/cjs/justifi-payment-form.cjs.entry.js +9 -36
  15. package/dist/cjs/justifi-payment-method-form.cjs.entry.js +81 -64
  16. package/dist/cjs/justifi-proceeds-list.cjs.entry.js +1 -1
  17. package/dist/cjs/justifi-subaccount-details.cjs.entry.js +2 -2
  18. package/dist/cjs/justifi-subaccounts-list.cjs.entry.js +2 -2
  19. package/dist/cjs/loader.cjs.js +1 -1
  20. package/dist/cjs/payment-details-core.cjs.entry.js +1 -1
  21. package/dist/cjs/payments-list-core.cjs.entry.js +1 -1
  22. package/dist/cjs/payout-details-core.cjs.entry.js +1 -1
  23. package/dist/cjs/payouts-list-core.cjs.entry.js +1 -1
  24. package/dist/cjs/subaccount-account-details_4.cjs.entry.js +1 -1
  25. package/dist/cjs/{utils-36bf8b3e.js → utils-29a8a91d.js} +33 -1
  26. package/dist/cjs/webcomponents.cjs.js +1 -1
  27. package/dist/collection/api/Business.js +1 -1
  28. package/dist/collection/components/bank-account-form/bank-account-form.js +4 -2
  29. package/dist/collection/components/bank-account-form/test/bank-account-form.spec.js +9 -0
  30. package/dist/collection/components/business-form/business-form.js +1 -1
  31. package/dist/collection/components/business-form/business-generic-info/business-generic-info.js +1 -1
  32. package/dist/collection/components/business-form/business-representative/business-representative.js +1 -1
  33. package/dist/collection/components/business-form/legal-address-form/legal-address-form.js +2 -3
  34. package/dist/collection/components/card-form/card-form.js +4 -2
  35. package/dist/collection/components/card-form/test/card-form.spec.js +9 -0
  36. package/dist/collection/components/payment-details/test/payment-details-core.spec.js +2 -2
  37. package/dist/collection/components/payment-details/test/payment-details.spec.js +3 -3
  38. package/dist/collection/components/payment-form/payment-form.js +12 -83
  39. package/dist/collection/components/payment-form/payment-method-selector.js +2 -23
  40. package/dist/collection/components/payment-form/test/payment-form.spec.js +5 -18
  41. package/dist/collection/components/payment-method-form/payment-method-form.js +62 -72
  42. package/dist/collection/components/payment-method-form/test/payment-method-form.spec.js +123 -41
  43. package/dist/collection/components/payments-list/test/payments-list-core.spec.js +2 -2
  44. package/dist/collection/components/payments-list/test/payments-list.spec.js +3 -3
  45. package/dist/collection/components/payout-details/test/payout-details-core.spec.js +3 -3
  46. package/dist/collection/components/payout-details/test/payout-details.spec.js +1 -1
  47. package/dist/collection/components/payouts-list/test/payouts-list-core.spec.js +2 -2
  48. package/dist/collection/components/payouts-list/test/payouts-list.spec.js +3 -3
  49. package/dist/collection/utils/frame-comunication-service.js +32 -0
  50. package/dist/collection/utils/utils.js +31 -0
  51. package/dist/docs.json +40 -103
  52. package/dist/esm/{Business-954e1c1b.js → Business-e9340f6b.js} +2 -2
  53. package/dist/esm/{SubAccount-bd59f646.js → SubAccount-46b4c2b1.js} +1 -1
  54. package/dist/esm/additional-questions-details_5.entry.js +1 -1
  55. package/dist/esm/justifi-additional-questions_5.entry.js +5 -5
  56. package/dist/esm/justifi-bank-account-form.entry.js +2 -1
  57. package/dist/esm/justifi-billing-form_2.entry.js +3 -1
  58. package/dist/esm/justifi-business-details.entry.js +1 -1
  59. package/dist/esm/justifi-business-form-stepped.entry.js +1 -1
  60. package/dist/esm/justifi-business-form.entry.js +2 -2
  61. package/dist/esm/justifi-business-list.entry.js +2 -2
  62. package/dist/esm/justifi-card-form.entry.js +2 -1
  63. package/dist/esm/justifi-gross-payment-chart.entry.js +1 -1
  64. package/dist/esm/justifi-payment-balance-transactions.entry.js +1 -1
  65. package/dist/esm/justifi-payment-form.entry.js +9 -36
  66. package/dist/esm/justifi-payment-method-form.entry.js +81 -64
  67. package/dist/esm/justifi-proceeds-list.entry.js +1 -1
  68. package/dist/esm/justifi-subaccount-details.entry.js +2 -2
  69. package/dist/esm/justifi-subaccounts-list.entry.js +2 -2
  70. package/dist/esm/loader.js +1 -1
  71. package/dist/esm/payment-details-core.entry.js +1 -1
  72. package/dist/esm/payments-list-core.entry.js +1 -1
  73. package/dist/esm/payout-details-core.entry.js +1 -1
  74. package/dist/esm/payouts-list-core.entry.js +1 -1
  75. package/dist/esm/subaccount-account-details_4.entry.js +1 -1
  76. package/dist/esm/{utils-dd428dba.js → utils-76a93600.js} +32 -1
  77. package/dist/esm/webcomponents.js +1 -1
  78. package/dist/module/Business.js +2 -2
  79. package/dist/module/SubAccount.js +1 -1
  80. package/dist/module/business-generic-info.js +1 -1
  81. package/dist/module/business-representative.js +1 -1
  82. package/dist/module/justifi-bank-account-form.js +2 -1
  83. package/dist/module/justifi-business-form.js +1 -1
  84. package/dist/module/justifi-card-form.js +2 -1
  85. package/dist/module/justifi-gross-payment-chart.js +1 -1
  86. package/dist/module/justifi-payment-balance-transactions.js +1 -1
  87. package/dist/module/justifi-payment-form.js +11 -42
  88. package/dist/module/justifi-subaccount-details.js +1 -1
  89. package/dist/module/legal-address-form.js +2 -3
  90. package/dist/module/payment-details-core2.js +1 -1
  91. package/dist/module/payment-method-form.js +81 -64
  92. package/dist/module/payment-method-selector.js +3 -2
  93. package/dist/module/payments-list-core2.js +1 -1
  94. package/dist/module/payout-details-core2.js +1 -1
  95. package/dist/module/payouts-list-core2.js +1 -1
  96. package/dist/module/utils2.js +32 -1
  97. package/dist/types/api/Business.d.ts +11 -11
  98. package/dist/types/components/bank-account-form/bank-account-form.d.ts +1 -1
  99. package/dist/types/components/business-form/business-form-schema.d.ts +1 -1
  100. package/dist/types/components/business-form/legal-address-form/legal-address-form.d.ts +2 -1
  101. package/dist/types/components/card-form/card-form.d.ts +1 -1
  102. package/dist/types/components/payment-form/payment-form.d.ts +1 -5
  103. package/dist/types/components/payment-form/payment-method-selector.d.ts +1 -1
  104. package/dist/types/components/payment-method-form/payment-method-form.d.ts +12 -12
  105. package/dist/types/components.d.ts +8 -13
  106. package/dist/types/utils/frame-comunication-service.d.ts +13 -0
  107. package/dist/types/utils/utils.d.ts +2 -0
  108. package/dist/webcomponents/{p-d66a6057.entry.js → p-08833966.entry.js} +1 -1
  109. package/dist/webcomponents/p-0bc8b02e.entry.js +1 -0
  110. package/dist/webcomponents/{p-f0c535ed.js → p-22c1acd6.js} +1 -1
  111. package/dist/webcomponents/p-234bc840.entry.js +1 -0
  112. package/dist/webcomponents/{p-8a90b976.entry.js → p-40349ffc.entry.js} +1 -1
  113. package/dist/webcomponents/{p-0b9146cd.entry.js → p-4ee44c76.entry.js} +1 -1
  114. package/dist/webcomponents/{p-ea05d7c2.entry.js → p-5422a24b.entry.js} +1 -1
  115. package/dist/webcomponents/{p-0e53f470.entry.js → p-578e0a05.entry.js} +1 -1
  116. package/dist/webcomponents/{p-50730e69.js → p-5c0310ee.js} +1 -1
  117. package/dist/webcomponents/p-640d90dc.entry.js +1 -0
  118. package/dist/webcomponents/{p-80140d5b.js → p-6478f3ca.js} +1 -1
  119. package/dist/webcomponents/p-696396c7.entry.js +1 -0
  120. package/dist/webcomponents/p-6d0725ef.entry.js +1 -0
  121. package/dist/webcomponents/p-7a1a06c0.entry.js +1 -0
  122. package/dist/webcomponents/{p-5e142186.entry.js → p-8516d602.entry.js} +1 -1
  123. package/dist/webcomponents/{p-c0f882ce.entry.js → p-894a7475.entry.js} +1 -1
  124. package/dist/webcomponents/{p-896a9ddb.entry.js → p-94ebfafb.entry.js} +1 -1
  125. package/dist/webcomponents/{p-d71ce1cd.entry.js → p-9e81808f.entry.js} +1 -1
  126. package/dist/webcomponents/{p-2e318b6a.entry.js → p-a432110c.entry.js} +1 -1
  127. package/dist/webcomponents/{p-a5d662ac.entry.js → p-b1881723.entry.js} +1 -1
  128. package/dist/webcomponents/{p-19c5ddf1.entry.js → p-bfd917b8.entry.js} +1 -1
  129. package/dist/webcomponents/p-c90fa055.entry.js +1 -0
  130. package/dist/webcomponents/{p-34de1c5d.entry.js → p-ebb91944.entry.js} +1 -1
  131. package/dist/webcomponents/{p-eef5b15b.entry.js → p-fa495a43.entry.js} +1 -1
  132. package/dist/webcomponents/webcomponents.esm.js +1 -1
  133. package/package.json +3 -3
  134. package/dist/webcomponents/p-57aab065.entry.js +0 -1
  135. package/dist/webcomponents/p-5f8b9f64.entry.js +0 -1
  136. package/dist/webcomponents/p-731cb109.entry.js +0 -1
  137. package/dist/webcomponents/p-870c2e4d.entry.js +0 -1
  138. package/dist/webcomponents/p-ad9a6c20.entry.js +0 -1
  139. package/dist/webcomponents/p-f7a3fd12.entry.js +0 -1
  140. package/dist/webcomponents/p-f9183f12.entry.js +0 -1
  141. /package/dist/collection/{components/payment-method-form → utils}/get-computed-theme.js +0 -0
  142. /package/dist/collection/{components/payment-method-form → utils}/theme.js +0 -0
  143. /package/dist/types/{components/payment-method-form → utils}/get-computed-theme.d.ts +0 -0
  144. /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 { extractComputedFontsToLoad } from "../../utils/utils";
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 = undefined;
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 = undefined;
17
- this.allowedPaymentMethodTypes = [];
15
+ this.selectedPaymentMethodType = PaymentMethodTypes.card;
18
16
  }
19
17
  connectedCallback() {
20
- if (this.card) {
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
- async loadFontsOnParent() {
46
- const parent = document.body;
47
- const fontsToLoad = extractComputedFontsToLoad();
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.allowedPaymentMethodTypes.length > 1 && (h("div", { class: "col-12" }, h("justifi-payment-method-selector", { paymentMethodTypes: this.allowedPaymentMethodTypes, selectedPaymentMethodType: this.selectedPaymentMethodType }))), h("div", { class: "col-12" }, h("justifi-payment-method-form", { "payment-method-form-type": this.selectedPaymentMethodType, "iframe-origin": this.iframeOrigin, ref: el => {
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', undefined);
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: '<justifi-payment-form payment-method-form-type="card" iframe-origin="https://example.com"></justifi-payment-form>',
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 iframe-origin="https://example.com" payment-method-form-type="card">
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 iframe-origin="https://example.com" payment-method-form-type="card"></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 "./get-computed-theme";
6
- import { config } from "../../../config";
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
- window.removeEventListener('message', this.dispatchMessageEvent.bind(this));
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
- const payload = {
62
- clientId: clientId,
40
+ return this.frameService.postMessageWithResponseListener(eventType, {
41
+ clientId,
42
+ paymentMethodMetadata,
43
+ account,
63
44
  componentVersion: packageJson.version,
64
- paymentMethodMetadata: paymentMethodMetadata,
65
- account: account,
66
- };
67
- return this.postMessageWithResponseListener(eventType, payload);
45
+ });
68
46
  }
69
47
  async validate() {
70
- return this.postMessageWithResponseListener(MessageEventType[this.paymentMethodFormType].validate);
48
+ const eventType = MessageEventType[this.paymentMethodFormType].validate;
49
+ return this.frameService.postMessageWithResponseListener(eventType);
71
50
  }
72
- composeQueryParams(values) {
73
- const queryParams = values.map(value => {
74
- if (value === values[0]) {
75
- return (value = `?${value}`);
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
- return iframeSrc.concat(this.composeQueryParams(paramsList));
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": "'card' | 'bankAccount'",
123
- "resolved": "\"bankAccount\" | \"card\"",
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": true,
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": "any",
201
- "resolved": "any",
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": "any",
231
- "resolved": "any",
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<any>",
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<any>"
238
+ "return": "Promise<void>"
249
239
  },
250
240
  "docs": {
251
241
  "text": "",