@rebilly/instruments 3.23.0-beta.1 → 3.24.0-beta.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 (55) hide show
  1. package/dist/index.js +10 -17
  2. package/dist/index.min.js +49 -56
  3. package/package.json +2 -1
  4. package/src/functions/destroy.js +11 -9
  5. package/src/functions/mount/fetch-data.js +14 -16
  6. package/src/functions/mount/fetch-data.spec.js +140 -93
  7. package/src/functions/mount/index.js +9 -10
  8. package/src/functions/mount/mount.spec.js +5 -7
  9. package/src/functions/mount/setup-framepay-theme.js +2 -1
  10. package/src/functions/mount/setup-framepay.js +3 -1
  11. package/src/functions/mount/setup-i18n.js +4 -2
  12. package/src/functions/mount/setup-options.js +6 -4
  13. package/src/functions/on.spec.js +3 -2
  14. package/src/functions/purchase.js +17 -6
  15. package/src/functions/setup.js +3 -4
  16. package/src/functions/show.js +7 -6
  17. package/src/functions/show.spec.js +11 -7
  18. package/src/functions/update.js +3 -3
  19. package/src/functions/update.spec.js +4 -3
  20. package/src/instance.js +11 -31
  21. package/src/state/iframes.js +23 -0
  22. package/src/state/index.js +62 -0
  23. package/src/storefront/account-and-website.js +3 -2
  24. package/src/storefront/{fetch-plans-from-addons-bumpOffers.js → fetch-plans-from-addons-bumpOffer.js} +5 -4
  25. package/src/storefront/fetch-products-from-plans.js +5 -4
  26. package/src/storefront/index.js +3 -4
  27. package/src/storefront/invoices.js +6 -4
  28. package/src/storefront/payment-instruments.js +5 -4
  29. package/src/storefront/purchase.js +5 -4
  30. package/src/storefront/ready-to-pay.js +2 -2
  31. package/src/storefront/summary.js +8 -3
  32. package/src/storefront/transactions.js +3 -2
  33. package/src/style/base/index.js +243 -0
  34. package/src/views/common/iframe/base-iframe.js +0 -2
  35. package/src/views/common/iframe/events/update-addons-handler.js +8 -13
  36. package/src/views/common/iframe/events/update-coupons-handler.js +5 -11
  37. package/src/views/common/iframe/modal-iframe.js +12 -11
  38. package/src/views/confirmation.js +16 -6
  39. package/src/views/method-selector/__snapshots__/method-selector.spec.js.snap +182 -1
  40. package/src/views/method-selector/generate-digital-wallet.js +2 -1
  41. package/src/views/method-selector/generate-digital-wallet.spec.js +32 -37
  42. package/src/views/method-selector/generate-framepay-config.js +1 -1
  43. package/src/views/method-selector/generate-framepay-config.spec.js +9 -12
  44. package/src/views/method-selector/get-payment-methods.js +3 -1
  45. package/src/views/method-selector/get-payment-methods.spec.js +25 -34
  46. package/src/views/method-selector/index.js +41 -22
  47. package/src/views/method-selector/method-selector.spec.js +9 -109
  48. package/src/views/method-selector/mount-bump-offer.js +99 -0
  49. package/src/views/method-selector/mount-express-methods.js +1 -2
  50. package/src/views/modal.js +3 -3
  51. package/src/views/result.js +7 -5
  52. package/src/views/summary.js +12 -16
  53. package/tests/mocks/rebilly-instruments-mock.js +17 -19
  54. package/tests/mocks/storefront-mock.js +10 -9
  55. package/tests/setup-jest.js +2 -0
@@ -1,7 +1,9 @@
1
1
  import { ViewIframe } from './common/iframe';
2
2
  import { replaceContent } from './common/render-utilities';
3
+ import state from '../state';
4
+ import iframes from '../state/iframes';
3
5
 
4
- export async function mountResult({ payload, state }) {
6
+ export async function mountResult({ payload }) {
5
7
  const resultContainerClassName = 'rebilly-instruments-result';
6
8
  replaceContent(state.form, `<div class="${resultContainerClassName}"></div>`);
7
9
 
@@ -11,14 +13,14 @@ export async function mountResult({ payload, state }) {
11
13
  const container = document.querySelector(`.${resultContainerClassName}`);
12
14
  const { paymentMethodsUrl } = state.options._computed;
13
15
 
16
+ const modelSafeState = state.toModel();
14
17
  const model = {
15
- options: state.options,
16
- mainStyleVars: state.mainStyleVars,
18
+ options: modelSafeState.options,
19
+ mainStyleVars: modelSafeState.mainStyleVars,
17
20
  [state.options.transactionType]: payload
18
21
  };
19
22
 
20
23
  const iframe = await new ViewIframe({
21
- state,
22
24
  name: 'rebilly-instruments-result',
23
25
  url: `${paymentMethodsUrl}/result`,
24
26
  container,
@@ -28,5 +30,5 @@ export async function mountResult({ payload, state }) {
28
30
  loader: state.loader
29
31
  });
30
32
 
31
- state.iframeComponents.form = iframe;
33
+ iframes.form = iframe;
32
34
  }
@@ -1,33 +1,29 @@
1
+ import state from '../state';
2
+ import iframes from '../state/iframes';
1
3
  import { ViewIframe } from './common/iframe';
2
4
  import { fetchSummary } from '../storefront/summary';
3
5
 
4
- export async function mountSummary({ state }) {
6
+ export async function mountSummary() {
7
+ const modelSafeState = state.toModel();
5
8
  const model = {
6
- options: state.options,
7
- data: state.data.toPostmatesModel(),
8
- mainStyleVars: state.mainStyleVars,
9
+ options: modelSafeState.options,
10
+ data: modelSafeState.data,
11
+ mainStyleVars: modelSafeState.mainStyleVars,
9
12
  };
10
- const { paymentMethodsUrl } = state.options._computed;
13
+ const { paymentMethodsUrl } = state.options?._computed;
11
14
 
12
15
  const iframe = await new ViewIframe({
13
- state,
14
16
  name: 'rebilly-instruments-summary',
15
17
  url: `${paymentMethodsUrl}/summary`,
16
18
  container: state.summary,
17
19
  model
18
20
  });
19
21
  iframe.bindEventListeners({loader: state.loader});
20
- state.iframeComponents.summary = iframe;
22
+ iframes.summary = iframe;
21
23
  }
22
24
 
23
- export async function updateSummary({ state, instrument }) {
24
- await fetchSummary({data: instrument, state});
25
- const updateModel = {
26
- data: state.data.toPostmatesModel(),
27
- options: state.options
28
- }
29
-
30
- state.iframeComponents.summary.component.call('update', updateModel);
31
- state.iframeComponents.form.component.call('update', updateModel);
25
+ export async function updateSummary({ instrument } = {}) {
26
+ await fetchSummary({ data: instrument });
27
+ state.updateModel();
32
28
  }
33
29
 
@@ -1,4 +1,4 @@
1
- import RebillyInstrumentsInstance from '@rebilly/instruments';
1
+ import RebillyInstruments from 'src/index';
2
2
  import { createFramepayMock } from 'tests/mocks/framepay-mock';
3
3
  import { get, ok, post } from 'msw-when-then';
4
4
  import { when } from 'tests/msw/server';
@@ -42,7 +42,6 @@ export async function RenderMockRebillyInstruments(options = {}) {
42
42
  }
43
43
  ]
44
44
  });
45
- const framePayStyleUrl = 'https://dev.framepay.rebilly.com/rebilly.css';
46
45
 
47
46
  when(get(`${storefrontURL}/invoices/*`)).thenReturn(
48
47
  (() => ok(testInvoice))()
@@ -80,7 +79,8 @@ export async function RenderMockRebillyInstruments(options = {}) {
80
79
  summary: '.summary-selector',
81
80
  locale: 'auto',
82
81
  _dev: {
83
- framePayStyleLink: framePayStyleUrl
82
+ paymentMethodsUrl: 'https://forms.test.rebilly.dev',
83
+ framePayStyleLink: 'https://dev.framepay.rebilly.com/rebilly.css'
84
84
  },
85
85
  };
86
86
 
@@ -105,26 +105,24 @@ export async function RenderMockRebillyInstruments(options = {}) {
105
105
  const framepayMock = createFramepayMock();
106
106
  global.Rebilly = framepayMock;
107
107
 
108
- const rebillyInstruments = RebillyInstrumentsInstance;
108
+ const form = document.createElement('div');
109
+ form.classList.add(`${mergedOptions.form.replace('.', '')}`);
110
+ document.body.appendChild(form);
109
111
 
110
- document.body.innerHTML = `
111
- <div class="${mergedOptions.form.replace('.', '')}"></div>
112
- <div class="${mergedOptions.summary.replace('.', '')}"></div>
113
- `;
112
+ const summary = document.createElement('div');
113
+ summary.classList.add(`${mergedOptions.summary.replace('.', '')}`);
114
+ document.body.appendChild(summary);
114
115
 
115
- await rebillyInstruments.mount({
116
- setupFramepay: setupFramepayMock,
117
- ...mergedOptions,
118
- });
116
+ await RebillyInstruments.mount({
117
+ setupFramepay: setupFramepayMock,
118
+ ...mergedOptions,
119
+ });
119
120
 
120
- rebillyInstruments.mock = {
121
+ RebillyInstruments.mock = {
121
122
  data: (data) => {
122
- rebillyInstruments.state.data = new DataInstance({
123
- state: rebillyInstruments.state,
124
- ...data
125
- });
123
+ RebillyInstruments.state.data = new DataInstance(data);
126
124
  }
127
125
  };
128
126
 
129
- return rebillyInstruments;
130
- }
127
+ return RebillyInstruments;
128
+ }
@@ -1,22 +1,23 @@
1
1
  import Storefront from '@/storefront';
2
2
  import { DataInstance } from '@/functions/mount/fetch-data';
3
+ import state from '../../src/state';
3
4
 
4
5
  export function MockStorefront(config = {}) {
5
6
  return Storefront(config);
6
7
  }
7
8
 
8
9
  export function StorefontTestingInstance({
9
- MockStorefrontConfig = {},
10
10
  options = {},
11
11
  data = {}
12
12
  } = {}) {
13
- class TestInstance {
14
- constructor() {
15
- this.options = options;
16
- this.storefront = MockStorefront(MockStorefrontConfig);
17
- this.data = new DataInstance({state: {options}, ...data});
18
- }
19
- }
13
+ state.storefront = null;
14
+ state.storefront = MockStorefront();
15
+
16
+ state.options = null;
17
+ state.options = options;
20
18
 
21
- return new TestInstance();
19
+ state.data = null;
20
+ state.data = new DataInstance(data);
21
+
22
+ return state;
22
23
  }
@@ -1,4 +1,5 @@
1
1
  import { initGlobalHandlers, server } from './msw/server';
2
+ import state from '../src/state';
2
3
 
3
4
  jest.mock('@rebilly/risk-data-collector', () => {
4
5
  return {
@@ -18,6 +19,7 @@ beforeAll(() => {
18
19
 
19
20
  beforeEach(() => {
20
21
  initGlobalHandlers();
22
+ state.reset();
21
23
  });
22
24
 
23
25
  afterEach(() => {