@rebilly/instruments 3.0.0-beta.0 → 3.1.2-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 (169) hide show
  1. package/dist/index.js +88 -107
  2. package/dist/index.min.js +88 -0
  3. package/package.json +17 -6
  4. package/rollup.config.js +84 -0
  5. package/src/functions/mount/fetch-data.js +13 -1
  6. package/src/functions/mount/index.js +6 -42
  7. package/src/functions/mount/setup-framepay-theme.js +2 -2
  8. package/src/functions/mount/setup-options.js +3 -0
  9. package/src/functions/mount/setup-user-flow.js +49 -0
  10. package/src/functions/purchase.js +1 -1
  11. package/src/functions/setup.js +1 -1
  12. package/src/functions/show.spec.js +1 -1
  13. package/src/i18n/en.json +3 -0
  14. package/src/i18n/index.js +1 -1
  15. package/src/index.js +1 -61
  16. package/src/instance.js +65 -0
  17. package/src/{index.spec.js → instance.spec.js} +2 -1
  18. package/src/loader/index.js +21 -1
  19. package/src/storefront/models/ready-to-pay-model.js +13 -2
  20. package/src/storefront/plans.js +8 -4
  21. package/src/storefront/plans.spec.js +8 -2
  22. package/src/storefront/products.js +8 -4
  23. package/src/storefront/products.spec.js +8 -2
  24. package/src/storefront/ready-to-pay.js +5 -4
  25. package/src/style/base/__snapshots__/theme.spec.js.snap +34 -2
  26. package/src/style/base/default-theme.js +106 -3
  27. package/src/style/components/button.js +17 -1
  28. package/src/style/components/forms/label.js +0 -5
  29. package/src/style/components/loader.js +2 -1
  30. package/src/style/payment-instruments/payment-card.js +2 -1
  31. package/src/style/utils/remove-empty-null.js +9 -9
  32. package/src/style/vendor/postmate.js +13 -0
  33. package/src/style/views/confirmation.js +2 -1
  34. package/src/views/common/iframe/base-iframe.js +2 -0
  35. package/src/views/common/iframe/event-listeners.js +10 -0
  36. package/src/views/common/iframe/method-iframe.js +3 -1
  37. package/src/views/confirmation.js +1 -0
  38. package/src/views/method-selector/express-methods/{google-pay.js → index.js} +3 -2
  39. package/src/views/method-selector/mount-express-methods.js +6 -18
  40. package/src/views/result.js +1 -0
  41. package/tests/mocks/rebilly-instruments-mock.js +2 -2
  42. package/dist/events/base-event.js +0 -66
  43. package/dist/events/events.spec.js +0 -18
  44. package/dist/events/index.js +0 -22
  45. package/dist/functions/destroy.js +0 -34
  46. package/dist/functions/destroy.spec.js +0 -69
  47. package/dist/functions/mount/fetch-data.js +0 -187
  48. package/dist/functions/mount/fetch-data.spec.js +0 -189
  49. package/dist/functions/mount/index.js +0 -218
  50. package/dist/functions/mount/mount.spec.js +0 -64
  51. package/dist/functions/mount/setup-element.js +0 -40
  52. package/dist/functions/mount/setup-framepay-theme.js +0 -95
  53. package/dist/functions/mount/setup-framepay.js +0 -46
  54. package/dist/functions/mount/setup-i18n.js +0 -33
  55. package/dist/functions/mount/setup-options.js +0 -99
  56. package/dist/functions/mount/setup-options.spec.js +0 -66
  57. package/dist/functions/mount/setup-storefront.js +0 -34
  58. package/dist/functions/mount/setup-styles.js +0 -43
  59. package/dist/functions/on.js +0 -40
  60. package/dist/functions/on.spec.js +0 -55
  61. package/dist/functions/purchase.js +0 -158
  62. package/dist/functions/purchase.spec.js +0 -74
  63. package/dist/functions/setup.js +0 -85
  64. package/dist/functions/setup.spec.js +0 -87
  65. package/dist/functions/show.js +0 -55
  66. package/dist/functions/show.spec.js +0 -61
  67. package/dist/functions/update.js +0 -74
  68. package/dist/functions/update.spec.js +0 -86
  69. package/dist/i18n/en.json +0 -22
  70. package/dist/i18n/es.json +0 -22
  71. package/dist/i18n/i18n.spec.js +0 -22
  72. package/dist/i18n/index.js +0 -72
  73. package/dist/index.spec.js +0 -35
  74. package/dist/loader/index.js +0 -94
  75. package/dist/loader/loader.spec.js +0 -69
  76. package/dist/storefront/index.js +0 -73
  77. package/dist/storefront/invoices.js +0 -27
  78. package/dist/storefront/models/base-model.js +0 -18
  79. package/dist/storefront/models/invoice-model.js +0 -14
  80. package/dist/storefront/models/plan-model.js +0 -14
  81. package/dist/storefront/models/product-model.js +0 -14
  82. package/dist/storefront/models/ready-to-pay-model.js +0 -46
  83. package/dist/storefront/models/summary-model.js +0 -79
  84. package/dist/storefront/models/transaction-model.js +0 -31
  85. package/dist/storefront/payment-instruments.js +0 -47
  86. package/dist/storefront/payment-instruments.spec.js +0 -55
  87. package/dist/storefront/plans.js +0 -37
  88. package/dist/storefront/plans.spec.js +0 -64
  89. package/dist/storefront/products.js +0 -40
  90. package/dist/storefront/products.spec.js +0 -65
  91. package/dist/storefront/purchase.js +0 -43
  92. package/dist/storefront/purchase.spec.js +0 -48
  93. package/dist/storefront/ready-to-pay.js +0 -58
  94. package/dist/storefront/ready-to-pay.spec.js +0 -69
  95. package/dist/storefront/storefront.spec.js +0 -15
  96. package/dist/storefront/summary.js +0 -55
  97. package/dist/storefront/summary.spec.js +0 -124
  98. package/dist/storefront/transactions.js +0 -27
  99. package/dist/style/base/__snapshots__/theme.spec.js.snap +0 -195
  100. package/dist/style/base/default-theme.js +0 -699
  101. package/dist/style/base/index.js +0 -104
  102. package/dist/style/base/theme.js +0 -41
  103. package/dist/style/base/theme.spec.js +0 -19
  104. package/dist/style/browserslist.js +0 -8
  105. package/dist/style/components/address.js +0 -64
  106. package/dist/style/components/button.js +0 -71
  107. package/dist/style/components/divider.js +0 -48
  108. package/dist/style/components/forms/checkbox.js +0 -86
  109. package/dist/style/components/forms/field.js +0 -65
  110. package/dist/style/components/forms/form.js +0 -28
  111. package/dist/style/components/forms/input.js +0 -86
  112. package/dist/style/components/forms/label.js +0 -69
  113. package/dist/style/components/forms/select.js +0 -95
  114. package/dist/style/components/forms/validation.js +0 -81
  115. package/dist/style/components/icons.js +0 -22
  116. package/dist/style/components/index.js +0 -57
  117. package/dist/style/components/loader.js +0 -50
  118. package/dist/style/components/methods.js +0 -108
  119. package/dist/style/components/overlay.js +0 -33
  120. package/dist/style/helpers/index.js +0 -59
  121. package/dist/style/index.js +0 -50
  122. package/dist/style/payment-instruments/content.js +0 -17
  123. package/dist/style/payment-instruments/index.js +0 -20
  124. package/dist/style/payment-instruments/payment-card.js +0 -35
  125. package/dist/style/utils/border.js +0 -47
  126. package/dist/style/utils/color-values.js +0 -58
  127. package/dist/style/utils/remove-empty-null.js +0 -20
  128. package/dist/style/vendor/framepay.js +0 -37
  129. package/dist/style/vendor/postmate.js +0 -17
  130. package/dist/style/views/confirmation.js +0 -85
  131. package/dist/style/views/index.js +0 -29
  132. package/dist/style/views/method-selector.js +0 -20
  133. package/dist/style/views/modal.js +0 -93
  134. package/dist/style/views/result.js +0 -61
  135. package/dist/style/views/summary.js +0 -127
  136. package/dist/utils/add-dom-element.js +0 -26
  137. package/dist/utils/format-currency.js +0 -15
  138. package/dist/utils/has-valid-css-selector.js +0 -11
  139. package/dist/utils/index.js +0 -55
  140. package/dist/utils/is-dom-element.js +0 -10
  141. package/dist/utils/process-property-as-dom-element.js +0 -38
  142. package/dist/utils/sleep.js +0 -10
  143. package/dist/views/__snapshots__/summary.spec.js.snap +0 -246
  144. package/dist/views/common/iframe/base-iframe.js +0 -59
  145. package/dist/views/common/iframe/event-listeners.js +0 -50
  146. package/dist/views/common/iframe/index.js +0 -19
  147. package/dist/views/common/iframe/method-iframe.js +0 -33
  148. package/dist/views/common/iframe/modal-iframe.js +0 -84
  149. package/dist/views/common/iframe/view-iframe.js +0 -31
  150. package/dist/views/common/render-utilities.js +0 -11
  151. package/dist/views/confirmation.js +0 -92
  152. package/dist/views/method-selector/__snapshots__/method-selector.spec.js.snap +0 -3
  153. package/dist/views/method-selector/express-methods/apple-pay.js +0 -92
  154. package/dist/views/method-selector/express-methods/google-pay.js +0 -31
  155. package/dist/views/method-selector/express-methods/paypal.js +0 -19
  156. package/dist/views/method-selector/generate-digital-wallet.js +0 -68
  157. package/dist/views/method-selector/generate-digital-wallet.spec.js +0 -135
  158. package/dist/views/method-selector/get-method-data.js +0 -25
  159. package/dist/views/method-selector/get-payment-methods.js +0 -66
  160. package/dist/views/method-selector/get-payment-methods.spec.js +0 -46
  161. package/dist/views/method-selector/index.js +0 -122
  162. package/dist/views/method-selector/method-selector.spec.js +0 -124
  163. package/dist/views/method-selector/mount-express-methods.js +0 -69
  164. package/dist/views/method-selector/mount-methods.js +0 -74
  165. package/dist/views/modal.js +0 -88
  166. package/dist/views/result.js +0 -40
  167. package/dist/views/summary.js +0 -215
  168. package/dist/views/summary.spec.js +0 -134
  169. package/src/views/method-selector/express-methods/paypal.js +0 -7
@@ -1,124 +0,0 @@
1
- "use strict";
2
-
3
- var _summaryModel = _interopRequireDefault(require("../../storefront/models/summary-model"));
4
-
5
- var _readyToPayModel = _interopRequireDefault(require("../../storefront/models/ready-to-pay-model"));
6
-
7
- var _loader = require("../../loader");
8
-
9
- var _i18n = require("../../i18n");
10
-
11
- var _index = require("./index");
12
-
13
- var _asyncUtilities = require("../../../tests/async-utilities");
14
-
15
- var _storefrontMock = require("../../../tests/mocks/storefront-mock");
16
-
17
- var _fetchData = require("../../functions/mount/fetch-data");
18
-
19
- var _setupOptions = _interopRequireDefault(require("../../functions/mount/setup-options"));
20
-
21
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
-
23
- describe('Summary component', () => {
24
- let formElement;
25
- beforeEach(() => {
26
- formElement = document.createElement('div');
27
- document.body.append(formElement);
28
- });
29
-
30
- class TestMountMethodSelectorInstance {
31
- constructor({
32
- options = {},
33
- form = formElement,
34
- loader = new _loader.Loader(),
35
- translate = new _i18n.Translate()
36
- } = {}) {
37
- this.options = (0, _setupOptions.default)({
38
- options
39
- });
40
- this.form = form;
41
- this.loader = loader;
42
- this.translate = translate;
43
- this.storefront = (0, _storefrontMock.MockStorefront)();
44
- this.data = new _fetchData.DataInstance({
45
- state: {
46
- options
47
- },
48
- previewPurchase: new _summaryModel.default({
49
- currency: 'USD',
50
- lineItems: [{
51
- type: 'debit',
52
- description: 'My Awesome Product',
53
- unitPrice: 30,
54
- quantity: 1,
55
- price: 30,
56
- productId: 'my-awesome-product',
57
- planId: 'my-awesome-product'
58
- }, {
59
- type: 'debit',
60
- description: 'Awesome T-Shirt',
61
- unitPrice: 20,
62
- quantity: 2,
63
- price: 40,
64
- productId: 'my-app',
65
- planId: 'awesome-t-shirt'
66
- }],
67
- subtotalAmount: 70,
68
- taxAmount: 0,
69
- shippingAmount: 0,
70
- discountsAmount: 0,
71
- total: 70
72
- }),
73
- readyToPay: [new _readyToPayModel.default({
74
- method: 'payment-card',
75
- feature: {
76
- name: 'Google Pay',
77
- merchantName: 'google-pay-merchant-name',
78
- merchantOrigin: 'google-pay-merchant-origin'
79
- },
80
- brands: ['Visa'],
81
- filters: []
82
- })]
83
- });
84
- }
85
-
86
- }
87
-
88
- const options = {
89
- websiteId: 'test-website-id',
90
- countryCode: 'US',
91
- items: [{
92
- planId: 'my-awesome-product',
93
- quantity: 1
94
- }, {
95
- planId: 'awesome-t-shirt',
96
- quantity: 2
97
- }],
98
- _computed: {
99
- paymentMethodsUrl: ''
100
- }
101
- };
102
- it('should inject the proper HTML for express methods', async () => {
103
- const mountSummaryInstance = new TestMountMethodSelectorInstance({
104
- options
105
- });
106
- mountSummaryInstance.loader.DOM.form = mountSummaryInstance.form;
107
- (0, _index.mountMethodSelector)({
108
- state: mountSummaryInstance
109
- });
110
- const form = document.querySelector('.rebilly-instruments-form');
111
- expect(form).toMatchSnapshot();
112
- await (0, _asyncUtilities.avoidUnhandledPromises)();
113
- });
114
- it('should allow updating method selector', async () => {
115
- const state = new TestMountMethodSelectorInstance({
116
- options
117
- });
118
- state.loader.DOM.form = state.form;
119
- await (0, _index.updateMethodSelector)({
120
- state,
121
- mainStyle: 'any main style'
122
- });
123
- });
124
- });
@@ -1,69 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.mountExpressMethods = mountExpressMethods;
7
-
8
- var _googlePay = _interopRequireDefault(require("./express-methods/google-pay"));
9
-
10
- var _applePay = _interopRequireDefault(require("./express-methods/apple-pay"));
11
-
12
- var _paypal = _interopRequireDefault(require("./express-methods/paypal"));
13
-
14
- var _getMethodData = require("./get-method-data");
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- function mountExpressMethods({
19
- state,
20
- EXPRESS_METHODS,
21
- EXPRESS_METHODS_CONTAINER
22
- }) {
23
- // A child div for each method must be created before mounting.
24
- // Any DOM operation (innerHTML, append, etc) done on the parent div (EXPRESS_METHODS_CONTAINER) in between
25
- // the two Postmate's instantiation (1 parent, 1 child) will cause the parent <-> child handshake to fail
26
- EXPRESS_METHODS.forEach(expressMethod => {
27
- const {
28
- METHOD_ID
29
- } = (0, _getMethodData.getMethodData)(expressMethod);
30
- EXPRESS_METHODS_CONTAINER.innerHTML += `
31
- <div class="rebilly-instruments-${METHOD_ID}-method"></div>
32
- `;
33
- });
34
- EXPRESS_METHODS.forEach(expressMethod => {
35
- const {
36
- method,
37
- feature
38
- } = expressMethod;
39
- const {
40
- METHOD_ID,
41
- METHOD_TYPE
42
- } = (0, _getMethodData.getMethodData)(expressMethod);
43
-
44
- if ((feature === null || feature === void 0 ? void 0 : feature.name) === 'Google Pay') {
45
- (0, _googlePay.default)({
46
- state,
47
- METHOD_ID
48
- });
49
- }
50
-
51
- if ((feature === null || feature === void 0 ? void 0 : feature.name) === 'Apple Pay') {
52
- (0, _applePay.default)({
53
- state,
54
- METHOD_ID,
55
- METHOD_TYPE,
56
- EXPRESS_METHODS,
57
- EXPRESS_METHODS_CONTAINER
58
- });
59
- }
60
-
61
- if (method === 'paypal') {
62
- (0, _paypal.default)({
63
- state,
64
- METHOD_ID,
65
- METHOD_TYPE
66
- });
67
- }
68
- });
69
- }
@@ -1,74 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.MountMethods = MountMethods;
7
-
8
- var _lodash = _interopRequireDefault(require("lodash.camelcase"));
9
-
10
- var _modal = require("../modal");
11
-
12
- var _iframe = require("../common/iframe");
13
-
14
- var _getMethodData = require("./get-method-data");
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- function MountMethods({
19
- state,
20
- METHODS_CONTAINER,
21
- METHODS
22
- }) {
23
- METHODS.forEach(async method => {
24
- var _state$options$paymen;
25
-
26
- const {
27
- METHOD_ID: methodId,
28
- METHOD_TYPE: methodType
29
- } = (0, _getMethodData.getMethodData)(method);
30
- const {
31
- paymentMethodsUrl
32
- } = state.options._computed || 'https://www.example.com';
33
- const selector = `rebilly-instruments-${methodId}`;
34
- const isiFrame = methodId === 'payment-card' && !((_state$options$paymen = state.options.paymentInstruments[methodType]) !== null && _state$options$paymen !== void 0 && _state$options$paymen.popup);
35
- const model = {
36
- options: state.options,
37
- mainStyle: state.mainStyle,
38
- plans: state.data.plans,
39
- products: state.data.products,
40
- method
41
- };
42
- METHODS_CONTAINER.insertAdjacentHTML('beforeend', `<div id="${selector}" data-rebilly-instruments-type="${methodId}"></div>`);
43
- const container = document.querySelector(`#${selector}`);
44
-
45
- if (isiFrame) {
46
- const iframe = await new _iframe.MethodIframe({
47
- name: methodId,
48
- url: `${paymentMethodsUrl}/${methodId}`,
49
- container,
50
- model
51
- });
52
- iframe.bindEventListeners({
53
- loader: state.loader,
54
- id: method.method
55
- });
56
- state.iframeComponents.push(iframe);
57
- } else {
58
- container.insertAdjacentHTML('beforeend', `<button class="${selector} rebilly-instruments-button" data-rebilly-i18n="paymentMethods.${method.method}">${(0, _lodash.default)(method.method)}</button>`);
59
- const paymentCardButton = document.querySelector(`.${selector}`);
60
- paymentCardButton.addEventListener('click', async () => {
61
- const iframe = await (0, _modal.mountModal)({
62
- state,
63
- name: methodId,
64
- url: `${paymentMethodsUrl}/${methodId}`,
65
- model
66
- });
67
- state.iframeComponents.push(iframe);
68
- });
69
- state.loader.stopLoading({
70
- id: method.method
71
- });
72
- }
73
- });
74
- }
@@ -1,88 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.mountModal = mountModal;
7
-
8
- var _iframe = require("./common/iframe");
9
-
10
- const modalTemplate = (isRedirect, method) => `
11
- <div class="rebilly-instruments-modal-overlay">
12
- <div class="rebilly-instruments-modal-container ${method ? `rebilly-instruments-${method}` : ''} ${isRedirect ? 'is-redirect' : ''}">
13
- ${isRedirect ? '' : `
14
- <svg class="rebilly-instruments-modal-close" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg">
15
- <path d="m15 13.5858 7.2929-7.293c.3905-.3904 1.0237-.3904 1.4142 0 .3905.3906.3905 1.0238 0 1.4143L16.4142 15l7.293 7.2929c.3904.3905.3904 1.0237 0 1.4142-.3906.3905-1.0238.3905-1.4143 0L15 16.4142l-7.2929 7.293c-.3905.3904-1.0237.3904-1.4142 0-.3905-.3906-.3905-1.0238 0-1.4143L13.5858 15l-7.293-7.2929c-.3904-.3905-.3904-1.0237 0-1.4142.3906-.3905 1.0238-.3905 1.4143 0L15 13.5858Z" fill-rule="nonzero"/>
16
- </svg>
17
- `}
18
- <div class="rebilly-instruments-modal-content"></div>
19
- </div>
20
- </div>
21
- `;
22
-
23
- async function mountModal({
24
- name = '',
25
- url = '',
26
- model = {},
27
- classListArray = [],
28
- close = () => {},
29
- state = null
30
- } = {}) {
31
- var _model$method;
32
-
33
- const method = model === null || model === void 0 ? void 0 : (_model$method = model.method) === null || _model$method === void 0 ? void 0 : _model$method.method;
34
- const isRedirect = name === 'rebilly-instruments-approval-url';
35
- state.form.insertAdjacentHTML('beforeend', modalTemplate(isRedirect, method));
36
- const modalOverlay = document.querySelector('.rebilly-instruments-modal-overlay');
37
- const modalContainer = document.querySelector('.rebilly-instruments-modal-container');
38
- const closeButton = document.querySelector('.rebilly-instruments-modal-close');
39
- const modalContent = document.querySelector('.rebilly-instruments-modal-content');
40
- document.body.style.overflow = 'hidden';
41
- setTimeout(() => {
42
- modalOverlay.classList.add('is-visible');
43
- modalContainer.classList.add('is-visible');
44
- }, 240);
45
- state.loader.addDOMElement({
46
- section: 'modal',
47
- el: modalContent
48
- });
49
- state.loader.startLoading({
50
- section: 'modal',
51
- id: 'modal-content'
52
- });
53
- const injectedModel = {
54
- options: state.options,
55
- ...model
56
- };
57
- const iframe = await new _iframe.ModalIframe({
58
- state,
59
- name,
60
- url,
61
- model: injectedModel,
62
- classListArray,
63
- container: modalContent
64
- });
65
-
66
- const closeModal = (...args) => {
67
- modalContainer.classList.remove('is-visible');
68
- modalOverlay.classList.remove('is-visible');
69
- setTimeout(() => {
70
- document.body.style.overflow = 'auto';
71
- modalOverlay.children.forEach(child => child.remove());
72
- modalOverlay.remove();
73
- close(...args);
74
- iframe.destroy();
75
- }, 300);
76
- };
77
-
78
- iframe.bindEventListeners({
79
- close: closeModal,
80
- loader: state.loader
81
- });
82
-
83
- if (!isRedirect) {
84
- closeButton.addEventListener('click', closeModal);
85
- }
86
-
87
- return iframe;
88
- }
@@ -1,40 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.mountResult = mountResult;
7
-
8
- var _iframe = require("./common/iframe");
9
-
10
- var _renderUtilities = require("./common/render-utilities");
11
-
12
- async function mountResult({
13
- payload,
14
- state
15
- }) {
16
- const resultContainerClassName = 'rebilly-instruments-result';
17
- (0, _renderUtilities.replaceContent)(state.form, `<div class="${resultContainerClassName}"></div>`);
18
- state.loader.startLoading({
19
- id: 'result'
20
- });
21
- const container = document.querySelector(`.${resultContainerClassName}`);
22
- const {
23
- paymentMethodsUrl
24
- } = state.options._computed;
25
- const model = {
26
- options: state.options,
27
- mainStyle: state.mainStyle,
28
- [state.options.transactionType]: payload
29
- };
30
- const iframe = await new _iframe.ViewIframe({
31
- name: 'rebilly-instruments-result',
32
- url: `${paymentMethodsUrl}/result`,
33
- container,
34
- model
35
- });
36
- iframe.bindEventListeners({
37
- loader: state.loader
38
- });
39
- state.iframeComponents.push(iframe);
40
- }
@@ -1,215 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.lineItemHTML = lineItemHTML;
7
- exports.summaryBreakdownHTML = summaryBreakdownHTML;
8
- exports.mountSummary = mountSummary;
9
- exports.updateSummary = updateSummary;
10
-
11
- var _riskDataCollector = require("@rebilly/risk-data-collector");
12
-
13
- var _utils = require("../utils");
14
-
15
- var _fetchData = require("../functions/mount/fetch-data");
16
-
17
- function lineItemHTML({
18
- state,
19
- lineItem
20
- }) {
21
- var _state$data;
22
-
23
- const {
24
- products
25
- } = state.data;
26
- const {
27
- currency = null
28
- } = (_state$data = state.data) === null || _state$data === void 0 ? void 0 : _state$data.amountAndCurrency;
29
- const {
30
- items: optionItems = []
31
- } = state.options;
32
- const hasThumbnails = optionItems === null || optionItems === void 0 ? void 0 : optionItems.some(optionItem => optionItem.thumbnail);
33
- const {
34
- thumbnail = null
35
- } = optionItems.find(optionItem => optionItem.planId === lineItem.planId) || {};
36
- const {
37
- name
38
- } = products.find(product => product.id === lineItem.productId);
39
- return `
40
- <div class="rebilly-instruments-summary-line-item">
41
- ${hasThumbnails ? `
42
- <figure class="rebilly-instruments-summary-line-item-figure">
43
- ${thumbnail ? `<img src="${thumbnail}" alt="${name}">` : ''}
44
- </figure>
45
- ` : ''}
46
- <div class="rebilly-instruments-summary-line-item-synopsis">
47
- <p class="rebilly-instruments-summary-line-item-synopsis-title">${name}</p>
48
- ${lineItem.description ? `
49
- <p class="rebilly-instruments-summary-line-item-synopsis-description">${lineItem.description}</p>
50
- ` : ''}
51
- </div>
52
- <div class="rebilly-instruments-summary-line-item-price-breakdown">
53
- <p class="rebilly-instruments-summary-line-item-price-breakdown-quantity">${lineItem.quantity}</p>
54
- <svg class="rebilly-instruments-icon" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
55
- <path d="M12 10.5858l2.8284-2.8284c.3906-.3906 1.0237-.3906 1.4142 0 .3906.3905.3906 1.0236 0 1.4142L13.4142 12l2.8284 2.8284c.3906.3906.3906 1.0237 0 1.4142-.3905.3906-1.0236.3906-1.4142 0L12 13.4142l-2.8284 2.8284c-.3906.3906-1.0237.3906-1.4142 0-.3906-.3905-.3906-1.0236 0-1.4142L10.5858 12 7.7574 9.1716c-.3906-.3906-.3906-1.0237 0-1.4142.3905-.3906 1.0236-.3906 1.4142 0L12 10.5858z" fill-rule="nonzero"/>
56
- </svg>
57
- <p class="rebilly-instruments-summary-line-item-price-breakdown-unit-price">${(0, _utils.formatCurrency)(lineItem.unitPrice, currency)}</p>
58
- </div>
59
- </div>
60
- `;
61
- }
62
-
63
- function summaryBreakdownHTML({
64
- state,
65
- element
66
- }) {
67
- const {
68
- amount = null,
69
- currency = null,
70
- discountsAmount = null,
71
- shippingAmount = null,
72
- subtotalAmount = null,
73
- taxAmount = null
74
- } = { ...state.data.amountAndCurrency,
75
- ...state.data.summaryItems
76
- };
77
- let table = null;
78
- [{
79
- label: 'Sub Total',
80
- class: 'sub-total',
81
- i18n: 'summary.subTotal',
82
- value: subtotalAmount,
83
- show: true
84
- }, {
85
- label: 'Discounts',
86
- class: 'discounts',
87
- i18n: 'summary.discounts',
88
- value: discountsAmount,
89
- show: discountsAmount > 0
90
- }, {
91
- label: 'Taxes',
92
- class: 'taxes',
93
- i18n: 'summary.taxes',
94
- value: taxAmount,
95
- show: true
96
- }, {
97
- label: 'Shipping',
98
- class: 'shipping',
99
- i18n: 'summary.shipping',
100
- value: shippingAmount,
101
- show: state.data.isShippingRequired
102
- }].filter(({
103
- value
104
- }) => value !== null).forEach(item => {
105
- if (!table) {
106
- table = document.createElement('table');
107
- table.insertAdjacentHTML('beforeend', `
108
- <colgroup>
109
- <col>
110
- <col>
111
- </colgroup>
112
- `);
113
- }
114
-
115
- if (item.show) {
116
- const row = document.createElement('tr');
117
- row.setAttribute('class', `rebilly-instruments-summary-breakdown-${item.class}`);
118
- row.insertAdjacentHTML('beforeend', `
119
- <td data-rebilly-i18n="${item.i18n}">${item.label}</td>
120
- <td>${(0, _utils.formatCurrency)(item.value, currency)}</td>
121
- `);
122
- table.appendChild(row);
123
- }
124
- });
125
-
126
- if (table) {
127
- element.appendChild(table);
128
- }
129
-
130
- const totalElement = document.createElement('div');
131
- totalElement.setAttribute('class', 'rebilly-instruments-summary-breakdown-total');
132
- totalElement.insertAdjacentHTML('beforeend', `
133
- <p data-rebilly-i18n="summary.total">Total</p>
134
- <p class="rebilly-instruments-summary-breakdown-total-amount">
135
- <span class="rebilly-instruments-summary-breakdown-total-amount-currency">
136
- ${currency}
137
- </span>
138
- ${(0, _utils.formatCurrency)(amount, currency)}
139
- <p>
140
- `);
141
- element.appendChild(totalElement);
142
- return element;
143
- }
144
-
145
- async function mountSummary({
146
- state
147
- }) {
148
- const contentContainer = document.createElement('div');
149
- contentContainer.setAttribute('class', 'rebilly-instruments-content');
150
- const lineItems = state.data.summaryLineItems;
151
-
152
- if (lineItems) {
153
- const lineItemsElement = document.createElement('div');
154
- lineItemsElement.setAttribute('class', 'rebilly-instruments-summary-line-items');
155
- lineItems.forEach(lineItem => {
156
- lineItemsElement.insertAdjacentHTML('beforeend', lineItemHTML({
157
- state,
158
- lineItem
159
- }));
160
- });
161
- contentContainer.appendChild(lineItemsElement);
162
- }
163
-
164
- const summaryBreakdownElement = document.createElement('div');
165
- summaryBreakdownElement.setAttribute('class', 'rebilly-instruments-summary-breakdown');
166
- contentContainer.appendChild(summaryBreakdownHTML({
167
- state,
168
- element: summaryBreakdownElement
169
- }));
170
- state.summary.appendChild(contentContainer);
171
- state.summary.style.minHeight = '';
172
- state.translate.translateItems();
173
- state.loader.stopLoading({
174
- section: 'summary',
175
- id: 'initSummary'
176
- });
177
- }
178
-
179
- async function updateSummary({
180
- state,
181
- instrument = null
182
- }) {
183
- var _state$data$transacti;
184
-
185
- state.loader.startLoading({
186
- section: 'summary',
187
- id: 'initSummary'
188
- });
189
- const {
190
- riskMetadata
191
- } = await (0, _riskDataCollector.collectData)();
192
- let summaryPayload;
193
-
194
- if (instrument !== null && instrument !== void 0 && instrument.billingAddress) {
195
- summaryPayload = {
196
- billingAddress: instrument.billingAddress
197
- };
198
- }
199
-
200
- state.data = await (0, _fetchData.fetchData)({
201
- riskMetadata,
202
- summaryPayload,
203
- state
204
- });
205
-
206
- if (state.data.transaction && ((_state$data$transacti = state.data.transaction) === null || _state$data$transacti === void 0 ? void 0 : _state$data$transacti.type) === 'setup') {
207
- state.options.transactionType = 'setup';
208
- }
209
-
210
- const itemsContainer = state.summary.querySelector('.rebilly-instruments-content');
211
- itemsContainer === null || itemsContainer === void 0 ? void 0 : itemsContainer.remove();
212
- mountSummary({
213
- state
214
- });
215
- }