@ordergroove/offers 2.24.3 → 2.25.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.
package/src/index.js CHANGED
@@ -1,169 +1,206 @@
1
- const { offersLiveEditor } = require('@ordergroove/offers-live-editor');
2
-
3
- const { setStore } = require('./core/connect');
4
- const { getStore } = require('./core/store');
5
- const { listenLocalStorageChanges } = require('./core/localStorage');
6
- const adapters = require('./core/adapters');
7
- const actions = require('./core/actions');
8
- const { ConnectedWhen } = require('./components/When');
9
- const { ConnectedOptinButton } = require('./components/OptinButton');
10
- const { ConnectedOptoutButton } = require('./components/OptoutButton');
11
- const { ConnectedOptinSelect } = require('./components/OptinSelect');
12
- const { ConnectedUpsellButton } = require('./components/UpsellButton');
13
- const { ConnectedUpsellModal } = require('./components/UpsellModal');
14
- const { ConnectedOptinToggle } = require('./components/OptinToggle');
15
- const { ConnectedOptinStatus } = require('./components/OptinStatus');
16
- const { ConnectedText } = require('./components/Text');
17
- const { ConnectedIncentiveText } = require('./components/IncentiveText');
18
- const { ConnectedSelectFrequency } = require('./components/SelectFrequency');
19
- const { ConnectedNextUpcomingOrder } = require('./components/NextUpcomingOrder');
20
- const { ConnectedOffer } = require('./components/Offer');
21
- const { Modal } = require('./components/Modal');
22
- const { Select } = require('./components/Select');
23
- const { Tooltip } = require('./components/Tooltip');
24
- const { ConnectedFrequencyStatus } = require('./components/FrequencyStatus');
25
- const testMode = require('./test-mode');
26
- const { default: api } = require('./core/api');
27
- const { environment } = require('./core/reducer');
1
+ import { offersLiveEditor } from '@ordergroove/offers-live-editor';
2
+ import { setStore } from './core/connect';
3
+ import { getStore } from './core/store';
4
+ import { listenLocalStorageChanges } from './core/localStorage';
5
+ import * as adapters from './core/adapters';
6
+ import * as actions from './core/actions';
7
+ import { ConnectedWhen } from './components/When';
8
+ import { ConnectedOptinButton } from './components/OptinButton';
9
+ import { ConnectedOptoutButton } from './components/OptoutButton';
10
+ import { ConnectedOptinSelect } from './components/OptinSelect';
11
+ import { ConnectedUpsellButton } from './components/UpsellButton';
12
+ import { ConnectedUpsellModal } from './components/UpsellModal';
13
+ import { ConnectedOptinToggle } from './components/OptinToggle';
14
+ import { ConnectedOptinStatus } from './components/OptinStatus';
15
+ import { ConnectedText } from './components/Text';
16
+ import { ConnectedIncentiveText } from './components/IncentiveText';
17
+ import { ConnectedSelectFrequency } from './components/SelectFrequency';
18
+ import { ConnectedNextUpcomingOrder } from './components/NextUpcomingOrder';
19
+ import { ConnectedOffer } from './components/Offer';
20
+ import { Modal } from './components/Modal';
21
+ import { Select } from './components/Select';
22
+ import { Tooltip } from './components/Tooltip';
23
+ import { ConnectedFrequencyStatus } from './components/FrequencyStatus';
24
+ import * as testMode from './test-mode';
25
+ import { api } from './core/api';
26
+ import { environment, offer } from './core/reducer';
27
+ import { RECEIVE_PRODUCT_PLANS } from './core/constants';
28
+ import ConnectedPrice from './components/Price';
28
29
 
29
30
  testMode.enable();
30
31
  let store;
31
- const offers = {
32
- setEnvironment(e) {
33
- store.dispatch(actions.setEnvironment(e));
34
- return offers;
35
- },
36
- setMerchantId(m) {
37
- store.dispatch(actions.setMerchantId(m));
38
- return offers;
39
- },
40
- setAuthUrl(authUrl) {
41
- store.dispatch(actions.setAuthUrl(authUrl));
42
- return offers;
43
- },
44
- getProductsForPurchasePost(productIds = []) {
45
- return adapters.getProductsForPurchasePost(store.getState(), productIds);
46
- },
47
- getOptins(productIds = []) {
48
- return adapters.getProductsForPurchasePost(store.getState(), productIds);
49
- },
50
- clear() {
51
- store.dispatch(actions.checkout());
52
- },
53
- addOptinChangedCallback(fn) {
54
- if (typeof fn === 'function') document.addEventListener('optin-changed', e => fn(e.detail));
55
- },
56
- disableOptinChangedCallbacks() {
57
- document.addEventListener('optin-changed', e => e.stopPropagation(), true);
58
- },
59
- register() {
60
- try {
61
- customElements.define('og-when', ConnectedWhen);
62
- customElements.define('og-text', ConnectedText);
63
- customElements.define('og-incentive-text', ConnectedIncentiveText);
64
- customElements.define('og-offer', ConnectedOffer);
65
- customElements.define('og-select-frequency', ConnectedSelectFrequency);
66
- customElements.define('og-optout-button', ConnectedOptoutButton);
67
- customElements.define('og-optin-toggle', ConnectedOptinToggle);
68
- customElements.define('og-optin-status', ConnectedOptinStatus);
69
- customElements.define('og-optin-button', ConnectedOptinButton);
70
- customElements.define('og-optin-select', ConnectedOptinSelect);
71
- customElements.define('og-upsell-button', ConnectedUpsellButton);
72
- customElements.define('og-frequency-status', ConnectedFrequencyStatus);
73
- customElements.define('og-modal', Modal);
74
- customElements.define('og-select', Select);
75
- customElements.define('og-tooltip', Tooltip);
76
- customElements.define('og-upsell-modal', ConnectedUpsellModal);
77
- customElements.define('og-next-upcoming-order', ConnectedNextUpcomingOrder);
78
- } catch (err) {
79
- // eslint-disable-next-line no-console
80
- console.log('this?', err);
81
- }
82
- offers.register = () => 0;
83
- },
84
- previewMode(set) {
85
- window.og = window.og || {};
86
- if (set === false) {
87
- delete window.og;
88
- } else {
89
- window.og.previewMode = true;
32
+
33
+ export const offers = {};
34
+
35
+ export function setEnvironment(e) {
36
+ store.dispatch(actions.setEnvironment(e));
37
+ return offers;
38
+ }
39
+ export function setMerchantId(m) {
40
+ store.dispatch(actions.setMerchantId(m));
41
+ return offers;
42
+ }
43
+ export function setAuthUrl(authUrl) {
44
+ store.dispatch(actions.setAuthUrl(authUrl));
45
+ return offers;
46
+ }
47
+ export function getProductsForPurchasePost(productIds = []) {
48
+ return adapters.getProductsForPurchasePost(store.getState(), productIds);
49
+ }
50
+ export function getOptins(productIds = []) {
51
+ return adapters.getProductsForPurchasePost(store.getState(), productIds);
52
+ }
53
+ export function clear() {
54
+ store.dispatch(actions.checkout());
55
+ }
56
+ export function addOptinChangedCallback(fn) {
57
+ if (typeof fn === 'function') document.addEventListener('optin-changed', e => fn(e.detail));
58
+ }
59
+ export function disableOptinChangedCallbacks() {
60
+ document.addEventListener('optin-changed', e => e.stopPropagation(), true);
61
+ }
62
+ export function register() {
63
+ try {
64
+ customElements.define('og-when', ConnectedWhen);
65
+ customElements.define('og-text', ConnectedText);
66
+ customElements.define('og-incentive-text', ConnectedIncentiveText);
67
+ customElements.define('og-offer', ConnectedOffer);
68
+ customElements.define('og-select-frequency', ConnectedSelectFrequency);
69
+ customElements.define('og-optout-button', ConnectedOptoutButton);
70
+ customElements.define('og-optin-toggle', ConnectedOptinToggle);
71
+ customElements.define('og-optin-status', ConnectedOptinStatus);
72
+ customElements.define('og-optin-button', ConnectedOptinButton);
73
+ customElements.define('og-optin-select', ConnectedOptinSelect);
74
+ customElements.define('og-upsell-button', ConnectedUpsellButton);
75
+ customElements.define('og-frequency-status', ConnectedFrequencyStatus);
76
+ customElements.define('og-modal', Modal);
77
+ customElements.define('og-select', Select);
78
+ customElements.define('og-tooltip', Tooltip);
79
+ customElements.define('og-upsell-modal', ConnectedUpsellModal);
80
+ customElements.define('og-next-upcoming-order', ConnectedNextUpcomingOrder);
81
+ customElements.define('og-price', ConnectedPrice);
82
+ } catch (err) {
83
+ // eslint-disable-next-line no-console
84
+ console.warn(err);
85
+ }
86
+ offers.register = () => 0;
87
+ }
88
+ export function previewMode(set) {
89
+ window.og = window.og || {};
90
+ if (set === false) {
91
+ delete window.og;
92
+ } else {
93
+ window.og.previewMode = true;
94
+ }
95
+ return this;
96
+ }
97
+ export function config(configuration) {
98
+ store.dispatch(actions.setConfig(configuration));
99
+ return offers;
100
+ }
101
+ export function setLocale(locale) {
102
+ store.dispatch(actions.setLocale(locale));
103
+ return offers;
104
+ }
105
+ export function addTemplate(tagName, content, configOption) {
106
+ store.dispatch(actions.addTemplate(tagName, content, configOption));
107
+ return offers;
108
+ }
109
+ /**
110
+ * templates object where keys are selectors and values are content
111
+ */
112
+ export function setTemplates(templates) {
113
+ store.dispatch(actions.setTemplates(templates));
114
+ return offers;
115
+ }
116
+ export function setPublicPath(publicPath) {
117
+ return offers;
118
+ }
119
+ export function resolveSettings(merchantId, env, settings, storeInstance = store) {
120
+ if (merchantId && env && settings) {
121
+ let products = [];
122
+ if (settings.product) {
123
+ products.push(settings.product);
124
+ } else if (settings.cart && Array.isArray(settings.cart.products)) {
125
+ products = products.concat(settings.cart.products);
90
126
  }
91
- return this;
92
- },
93
- /**
94
- * Initialize OG object
95
- * @param {*} merchantId
96
- * @param {*} env
97
- * @param {*} authUrl
98
- */
99
- initialize(merchantId, env, authUrl) {
100
- if (offers.isReady) {
101
- console.warn('og.offers has been initialized already. Skipping.');
102
- return offers;
127
+ const { apiUrl } = environment({}, actions.setEnvironment(env));
128
+ const { sessionId } = storeInstance.getState();
129
+ if (sessionId) {
130
+ products.forEach(product => {
131
+ api.fetchOffer(apiUrl, merchantId, sessionId, `${product}`, 'pdp');
132
+ });
103
133
  }
104
- store = getStore();
105
-
106
- const settings = window.og_settings;
107
- if (merchantId && env && settings) {
108
- let products = [];
109
- if (settings.product) {
110
- products.push(settings.product);
111
- } else if (settings.cart && Array.isArray(settings.cart.products)) {
112
- products = products.concat(settings.cart.products);
113
- }
114
- const { apiUrl } = environment({}, actions.setEnvironment(env));
115
- const { sessionId } = store.getState();
116
- if (sessionId) {
117
- products.forEach(product => api.fetchOffer(apiUrl, merchantId, sessionId, `${product}`, 'pdp'));
118
- }
134
+
135
+ if (settings.product_discounts && typeof settings.product_discounts === 'object') {
136
+ storeInstance.dispatch({ type: RECEIVE_PRODUCT_PLANS, payload: settings.product_discounts });
119
137
  }
138
+ }
139
+ }
120
140
 
121
- setStore(store);
122
- if (merchantId) offers.setMerchantId(merchantId);
123
- if (env) offers.setEnvironment(env);
124
- if (authUrl) offers.setAuthUrl(authUrl);
141
+ /**
142
+ * Initialize OG object
143
+ * @param {*} merchantId
144
+ * @param {*} env
145
+ * @param {*} authUrl
146
+ */
147
+ export function initialize(merchantId, env, authUrl) {
148
+ if (offers.isReady) {
149
+ console.warn('og.offers has been initialized already. Skipping.');
150
+ return offers;
151
+ }
125
152
 
126
- window.addEventListener('storage', listenLocalStorageChanges(store));
153
+ store = getStore();
127
154
 
128
- if (merchantId && env) {
129
- store.dispatch(actions.requestSessionId());
130
- store.dispatch(actions.fetchAuth());
131
- offers.register();
132
- }
155
+ offers.store = store;
156
+ offers.resolveSettings(merchantId, env, window.og_settings, store);
133
157
 
134
- offers.isReady = true;
158
+ setStore(store);
135
159
 
136
- return offers;
137
- },
160
+ if (merchantId) offers.setMerchantId(merchantId);
161
+ if (env) offers.setEnvironment(env);
162
+ if (authUrl) offers.setAuthUrl(authUrl);
138
163
 
139
- config(configuration) {
140
- store.dispatch(actions.setConfig(configuration));
141
- return offers;
142
- },
143
- setLocale(locale) {
144
- store.dispatch(actions.setLocale(locale));
145
- return offers;
146
- },
147
- addTemplate(tagName, content, config) {
148
- store.dispatch(actions.addTemplate(tagName, content, config));
149
- return offers;
150
- },
151
- /**
152
- * templates object where keys are selectors and values are content
153
- */
154
- setTemplates(templates) {
155
- store.dispatch(actions.setTemplates(templates));
156
- return offers;
157
- },
158
- setPublicPath(publicPath) {
159
- return offers;
164
+ window.addEventListener('storage', listenLocalStorageChanges(store));
165
+
166
+ if (merchantId && env) {
167
+ store.dispatch(actions.requestSessionId());
168
+ store.dispatch(actions.fetchAuth());
169
+ offers.register();
160
170
  }
161
- };
171
+
172
+ offers.isReady = true;
173
+
174
+ return offers;
175
+ }
176
+
177
+ export default initialize;
178
+
179
+ Object.assign(offers, {
180
+ setEnvironment,
181
+ setMerchantId,
182
+ setAuthUrl,
183
+ getProductsForPurchasePost,
184
+ getOptins,
185
+ clear,
186
+ addOptinChangedCallback,
187
+ disableOptinChangedCallbacks,
188
+ register,
189
+ previewMode,
190
+ config,
191
+ setLocale,
192
+ addTemplate,
193
+ setTemplates,
194
+ setPublicPath,
195
+ resolveSettings,
196
+ initialize
197
+ });
198
+
162
199
  window.OG = window.OG || {};
163
200
  Object.assign(window.OG, offers);
164
201
  Object.assign(offers.initialize, offers);
165
202
 
166
203
  offersLiveEditor();
167
204
 
168
- // use this syntax to allow es6 module be called as default function og.offers(...)
169
- module.exports = offers.initialize;
205
+ // // use this syntax to allow es6 module be called as default function og.offers(...)
206
+ // module.exports = offers.initialize;
@@ -1,4 +1,4 @@
1
1
  window.OG_SAVE_TO_LOCAL_TIMEOUT = 1;
2
2
  window.merchantId = '12345678901234567890123456789012';
3
3
  window.env = 'staging';
4
- window.og.offers(window.merchantId, window.env, 0);
4
+ window.og.offers.initialize(window.merchantId, window.env, 0);
package/src/init-test.js CHANGED
@@ -1,3 +1,3 @@
1
- import og from './index';
1
+ import { initialize } from './index';
2
2
 
3
- og.initialize('some-merchant', 'staging');
3
+ initialize('some-merchant', 'staging');